diff --git a/docs/api/$catalog.md b/docs/api/$catalog.md index 69146286df..59b18ca142 100644 --- a/docs/api/$catalog.md +++ b/docs/api/$catalog.md @@ -71,7 +71,7 @@ Each dataclass listed by the `$catalog` endpoint returns the following propertie :::tip -Only the exposed dataclasses are shown in this list for your project's datastore. For more information, please refer to [Configuring Data Access](./overview#configuring-data-access) section. +Only the exposed dataclasses are shown in this list for your project's datastore. For more information, please refer to [Configuring Data Access](./overview.md#configuring-data-access) section. ::: ### Sample Usage Example in Postman diff --git a/docs/api/$querypath.md b/docs/api/$querypath.md index c0a12eeb99..cc4a50cde2 100644 --- a/docs/api/$querypath.md +++ b/docs/api/$querypath.md @@ -10,7 +10,7 @@ title: $querypath The `$querypath` endpoint allows developers to understand how queries are executed in the backend. It provides a step-by-step breakdown of the query execution, showing each operation, its performance, and the results obtained at each stage. It also reveales optimization techniques and the exact path taken by the server to fetch the required data. :::info -For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass#about-queryplan-and-querypath) documentation. +For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass.md#about-queryplan-and-querypath) documentation. ::: ### Syntax diff --git a/docs/api/$queryplan.md b/docs/api/$queryplan.md index 5187fdfb18..f0071a8bfa 100644 --- a/docs/api/$queryplan.md +++ b/docs/api/$queryplan.md @@ -12,7 +12,7 @@ title: $queryplan The `$queryplan` endpoint is designed to provide insights into the execution strategy of queries processed by the server. This endpoint helps developers and database administrators to analyze and optimize query performance by returning a detailed breakdown of the query execution plan. :::info -For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass#about-queryplan-and-querypath) documentation. +For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass.md#about-queryplan-and-querypath) documentation. ::: ### Syntax diff --git a/docs/api/$singleton.md b/docs/api/$singleton.md index f4fb869409..a008ad55fd 100644 --- a/docs/api/$singleton.md +++ b/docs/api/$singleton.md @@ -85,7 +85,7 @@ exposed function sayHello (value : string) :::note -The `mySingleton` class and `sayHello` function are listed when you call the [`$catalog`]($catalog.md#singleton) command. +The `mySingleton` class and `sayHello` function are listed when you call the [`$catalog`]($catalog.md#singletons) command. ::: diff --git a/docs/api/classFunctionsOverview.md b/docs/api/classFunctionsOverview.md index 92159a7bdc..ce45104ed7 100644 --- a/docs/api/classFunctionsOverview.md +++ b/docs/api/classFunctionsOverview.md @@ -24,7 +24,7 @@ exposed function getTest() : string ::: :::info -For more details, refer to the section on [Exposed vs. Non-Exposed Functions](../orda/data-model#exposed-vs-non-exposed-functions). +For more details, refer to the section on [Exposed vs. Non-Exposed Functions](../orda/data-model.md#exposed-vs-non-exposed-functions). ::: ### `onHttpGet` Functions @@ -78,10 +78,10 @@ The ORDA REST API provides several endpoints to call class functions: |Class function|Syntax| |---|----| -|[Datastore Class](../orda/data-model#datastore)|`/rest/$catalog/DataStoreClassFunction`| -|[Dataclass Class](../orda/data-model#dataclass)|`/rest/{{dataClass}}/DataClassClassFunction`| -|[EntitySelection Class](../orda/data-model#entityselection-class)|`/rest/{{dataClass}}/EntitySelectionClassFunction`| -|[Entity Class](../orda/data-model#entity-class)|`/rest/{{dataClass}}(key)/EntityClassFunction`| +|[Datastore Class](../orda/data-model.md#datastore)|`/rest/$catalog/DataStoreClassFunction`| +|[Dataclass Class](../orda/data-model.md#dataclass)|`/rest/{{dataClass}}/DataClassClassFunction`| +|[EntitySelection Class](../orda/data-model.md#entityselection-class)|`/rest/{{dataClass}}/EntitySelectionClassFunction`| +|[Entity Class](../orda/data-model.md#entity-class)|`/rest/{{dataClass}}(key)/EntityClassFunction`| |[Singleton class](../language/basics/lang-classes.md#singleton-classes)|`/rest/$singleton/SingletonClass/SingletonClassFunction` (see [$singleton page]($singleton.md))| diff --git a/docs/api/dataclassEndpoints.md b/docs/api/dataclassEndpoints.md index e8236dddb1..d72d0b4e33 100644 --- a/docs/api/dataclassEndpoints.md +++ b/docs/api/dataclassEndpoints.md @@ -153,7 +153,7 @@ The response structure for the `/rest/{{dataClass}}[2]` endpoint looks something ``` -### rest/dataClass:attribute(value) +### rest/dataClass\:attribute(value) #### Purpose diff --git a/docs/api/overview.md b/docs/api/overview.md index 7690ac73bd..5f41349707 100644 --- a/docs/api/overview.md +++ b/docs/api/overview.md @@ -28,8 +28,8 @@ To restrict access to sensitive dataclasses such as those containing user creden
    -
  1. Open the Model Editor.

  2. -
  3. Access the properties panel of the dataclass you intend to modify.

  4. +
  5. Open the Model Editor.
  6. +
  7. Access the properties panel of the dataclass you intend to modify.
  8. Enable the Do not Expose as REST option within the Scope property.
@@ -46,7 +46,7 @@ By default, attributes within these dataclasses are also exposed. To limit expos
    -
  1. In the Model Editor, select the attribute you intend to hide.

  2. +
  3. In the Model Editor, select the attribute you intend to hide.
  4. Enable the Do not Expose as REST option in the Scope property.
diff --git a/docs/cloud/apiKeys.md b/docs/cloud/apiKeys.md index 8e81018153..1f1da8674e 100644 --- a/docs/cloud/apiKeys.md +++ b/docs/cloud/apiKeys.md @@ -93,9 +93,9 @@ In the API management section, each key includes options to:
    -
  • Show API Key: This button reveals the API key in the interface and includes a copy button , enabling easy duplication of the API key for use in configuring your application or services.

  • -
  • Delete API Key: Positioned next to the API key, this button removes the key upon confirmation, safeguarding against unintended deletions.

  • -
  • Edit API Key: Also adjacent to the API display, the edit button opens a configuration dialog for modifying the API key's details.

  • +
  • Show API Key: This button reveals the API key in the interface and includes a copy button , enabling easy duplication of the API key for use in configuring your application or services.
  • +
  • Delete API Key: Positioned next to the API key, this button removes the key upon confirmation, safeguarding against unintended deletions.
  • +
  • Edit API Key: Also adjacent to the API display, the edit button opens a configuration dialog for modifying the API key's details.
diff --git a/docs/cloud/billingSubscriptionManagement.md b/docs/cloud/billingSubscriptionManagement.md index c554175d96..b62ca633ea 100644 --- a/docs/cloud/billingSubscriptionManagement.md +++ b/docs/cloud/billingSubscriptionManagement.md @@ -20,10 +20,8 @@ The **Next Invoice** section displays the amount and date of your next scheduled
    -
  • Amount: The total cost of the upcoming invoice.
  • -
    -
  • Billing Date: The scheduled date for the next payment.
  • -
    +
  • Amount: The total cost of the upcoming invoice.
  • +
  • Billing Date: The scheduled date for the next payment.
  • View Details: Opens a breakdown of the invoice, showing the following details:
@@ -36,12 +34,9 @@ The **Next Invoice** section displays the amount and date of your next scheduled
      -
    • Description: Items included in the subscription, such as: Qodly Power (computing resources), Storage extensions, and the Internet outbound data transfer packs.
    • -
      -
    • Quantity: Amount of each resource being billed.
    • -
      -
    • Unit Price: The price per unit of each resource.
    • -
      +
    • Description: Items included in the subscription, such as: Qodly Power (computing resources), Storage extensions, and the Internet outbound data transfer packs.
    • +
    • Quantity: Amount of each resource being billed.
    • +
    • Unit Price: The price per unit of each resource.
    • Total: The cost for each resource and the total sum of all charges.
@@ -57,12 +52,9 @@ This section provides the status and cycle of your subscription, along with the
    -
  • Status: Indicates whether the subscription is active or inactive.
  • -
    -
  • Start Date: The date your subscription began.
  • -
    -
  • Billing Cycle Start/End: Defines the current subscription cycle's start and end dates.
  • -
    +
  • Status: Indicates whether the subscription is active or inactive.
  • +
  • Start Date: The date your subscription began.
  • +
  • Billing Cycle Start/End: Defines the current subscription cycle's start and end dates.
  • Payment Method: Displays the card currently linked to your subscription.
@@ -79,12 +71,9 @@ Clicking the Change Payment Method card
    -
  • Email: The associated email address.
  • -
    -
  • Card Number: The new payment card details.
  • -
    -
  • Expiration Date and Security Code (CVC).
  • -
    +
  • Email: The associated email address.
  • +
  • Card Number: The new payment card details.
  • +
  • Expiration Date and Security Code (CVC).
  • Country: The billing country for the card.
@@ -114,8 +103,7 @@ The **Invoices** section lists past invoices with downloadable options for recei Clicking the Download Invoice button redirects you to a detailed invoice page where you can:

    -
  • Download Invoice: Get a PDF copy of the invoice for record-keeping.
  • -
    +
  • Download Invoice: Get a PDF copy of the invoice for record-keeping.
  • Download Receipt: Obtain a receipt for accounting or reimbursement purposes.
@@ -201,10 +189,8 @@ The **Delete**
    -
  • Available for all environments except Development.
  • -
    -
  • Requires entering the environment name in a confirmation dialog to prevent accidental deletions.
  • -
    +
  • Available for all environments except Development.
  • +
  • Requires entering the environment name in a confirmation dialog to prevent accidental deletions.
  • Once deleted, the environment and its associated resources are removed, and the subscription is updated.
diff --git a/docs/cloud/environmentsOverview.md b/docs/cloud/environmentsOverview.md index de1998fee4..3c3187b929 100644 --- a/docs/cloud/environmentsOverview.md +++ b/docs/cloud/environmentsOverview.md @@ -30,8 +30,8 @@ For every environment, you can access your files on the server using the **Secur
    -
  1. Click the Access files button: Navigate to the specific environment you want to manage and click the Access files button.

  2. -
  3. Open your FTP Client: Use your preferred FTP client (e.g., Filezilla). This client will allow you to manage and transfer files securely.

  4. +
  5. Click the Access files button: Navigate to the specific environment you want to manage and click the Access files button.
  6. +
  7. Open your FTP Client: Use your preferred FTP client (e.g., Filezilla). This client will allow you to manage and transfer files securely.
diff --git a/docs/cloud/myApps.md b/docs/cloud/myApps.md index 115d70bc7c..6c32e9f85a 100644 --- a/docs/cloud/myApps.md +++ b/docs/cloud/myApps.md @@ -19,8 +19,7 @@ To create an app in the Console, follow the steps below, using the provided scre
    -
  1. Go to the My Apps section in the Console.
  2. -
    +
  3. Go to the My Apps section in the Console.
  4. Click the New App button on the right side of the page or in the sidebar to begin the application creation process.
@@ -86,8 +85,7 @@ The next section allows you to configure resources for each environment associat
    -
  1. For each new environment, provide a Name and a Description.
  2. -
    +
  3. For each new environment, provide a Name and a Description.
  4. Customize the configuration separately for each environment, allowing you to tailor resources to specific development stages.
@@ -155,8 +153,7 @@ This section displays all pending invitations for transferring app ownership. Fo If the recipient chooses to decline:

    -
  • They are shown a Decline Payment page, allowing them to reject the invitation.
  • -

    +
  • They are shown a Decline Payment page, allowing them to reject the invitation.

  • Upon declining, the app is permanently deleted, and both parties are notified.
diff --git a/docs/cloud/resourceMonitoring.md b/docs/cloud/resourceMonitoring.md index 6c2ba3fd1f..9585176af9 100644 --- a/docs/cloud/resourceMonitoring.md +++ b/docs/cloud/resourceMonitoring.md @@ -26,8 +26,7 @@ The **General Tab** contains core information and key actions, providing an at-a The Usage card contains:

    -
  • Disk Usage: Shows the percentage of disk storage currently used by the environment, useful for tracking storage limits and understanding data volume.
  • -
    +
  • Disk Usage: Shows the percentage of disk storage currently used by the environment, useful for tracking storage limits and understanding data volume.
  • Memory Usage: Displays the memory consumption percentage, allowing you to monitor memory use and scale resources as needed.
@@ -54,14 +53,11 @@ The **General Tab** contains core information and key actions, providing an at-a The Server Status card contains:

    -
  • Status: Whether the server is operational and accessible.
  • -
    +
  • Status: Whether the server is operational and accessible.
  • Control Buttons:
    • -
    • Stop: Stops the server, making it unavailable temporarily.
    • -
      -
    • Restart: Restarts the server, which can be useful for troubleshooting or applying configurations.
    • -
      +
    • Stop: Stops the server, making it unavailable temporarily.
    • +
    • Restart: Restarts the server, which can be useful for troubleshooting or applying configurations.
    • Refresh: Updates the server status display, allowing you to check the latest status.
@@ -132,8 +128,7 @@ Allows you to use a custom domain for the application in deployment environments
    -
  • Add Custom Domain:
  • -
    +
  • Add Custom Domain:
    • Click the Add Custom Domain button, which opens a dialog for setting up your custom domain.

    • @@ -151,8 +146,7 @@ Allows you to use a custom domain for the application in deployment environments
        -
      • Using Your Own SSL Certificate: For enhanced security, you can add a custom SSL certificate by selecting "I want to use my own certificate file," which opens fields to enter.
      • -
        +
      • Using Your Own SSL Certificate: For enhanced security, you can add a custom SSL certificate by selecting "I want to use my own certificate file," which opens fields to enter.
        • Certificate Body: Paste the content of your SSL certificate.

        • @@ -180,10 +174,8 @@ The **Activity** section logs significant events and actions taken within the en Each activity entry includes:

            -
          • Description: Summarizes the action taken (e.g., server start).
          • -
            -
          • Timestamp: Provides the date and time the action occurred.
          • -
            +
          • Description: Summarizes the action taken (e.g., server start).
          • +
          • Timestamp: Provides the date and time the action occurred.
          • User: Indicates which user performed the action.
          diff --git a/docs/cloud/sandbox.md b/docs/cloud/sandbox.md index 3b33218a0b..3c8ee006ce 100644 --- a/docs/cloud/sandbox.md +++ b/docs/cloud/sandbox.md @@ -37,8 +37,7 @@ To create a new Sandbox, follow these steps:
            -
          • Access the Console: Open the Console.
          • -
            +
          • Access the Console: Open the Console.
          • Click on "New Sandbox": Select the "New Sandbox" button to initiate the creation process.
          diff --git a/docs/cloud/userAccountManagement.md b/docs/cloud/userAccountManagement.md index 3c53576e53..e6eec0243d 100644 --- a/docs/cloud/userAccountManagement.md +++ b/docs/cloud/userAccountManagement.md @@ -48,12 +48,9 @@ If you need to add a new user and assign them to multiple environments:
            -
          • First Name and Last Name (optional).
          • -
            -
          • Email Address (mandatory).
          • -
            -
          • Select an Environment to associate the user with.
          • -
            +
          • First Name and Last Name (optional).
          • +
          • Email Address (mandatory).
          • +
          • Select an Environment to associate the user with.
          • Assign a Profile (e.g., Admin, Viewer).
          @@ -80,10 +77,8 @@ Editing a user's details in the Users Page is environment-specific, meaning you
            -
          1. Navigate to the Users Page and identify the user whose details you want to edit.
          2. -
            -
          3. Expand the user card to reveal their assigned environments.
          4. -
            +
          5. Navigate to the Users Page and identify the user whose details you want to edit.
          6. +
          7. Expand the user card to reveal their assigned environments.
          8. Click the button next to the specific environment where the user is assigned.
          @@ -95,8 +90,7 @@ Editing a user's details in the Users Page is environment-specific, meaning you
            -
          1. Modify the following fields as needed:
          2. -
            +
          3. Modify the following fields as needed:
            • First Name and Last Name.

            • @@ -127,8 +121,7 @@ To completely delete a user from the application, removing them from all environ
                -
              1. Navigate to the Users Page and identify the user you want to delete.
              2. -
                +
              3. Navigate to the Users Page and identify the user you want to delete.
              4. Click the Delete User button located on the user card.
              @@ -162,10 +155,8 @@ Removing a user from a specific environment can be done through the Users Page,
                -
              1. Navigate to the Users Page and identify the user you want to remove.
              2. -
                -
              3. Expand the user card to view all the environments they are assigned to.
              4. -
                +
              5. Navigate to the Users Page and identify the user you want to remove.
              6. +
              7. Expand the user card to view all the environments they are assigned to.
              8. Click the button next to the specific environment where the user is assigned.
              @@ -203,8 +194,7 @@ Adding a user to a specific environment from the **Users Page** is straightforwa
                -
              1. Navigate to the Users Page and identify the user you want to assign to another environment.
              2. -
                +
              3. Navigate to the Users Page and identify the user you want to assign to another environment.
              4. Click the + Environment button located on the user card.
              @@ -216,8 +206,7 @@ Adding a user to a specific environment from the **Users Page** is straightforwa
                -
              1. Fill in the details in the Add User to Environment dialog:
              2. -
                +
              3. Fill in the details in the Add User to Environment dialog:
                • The Email Address field will auto-populate with the selected user's email.

                • @@ -260,16 +249,14 @@ To add a new user or assign an existing user to the environment you’re managin
                    -
                  • Existing User:
                  • -
                    +
                  • Existing User:
                    • Choose a user from the dropdown, which lists all users previously added to the Users Page.

                    • These users could have been added through the Users Page or other environments’ Team Tabs.

                    -
                  • New User:
                  • -
                    +
                  • New User:
                    • Enter the Email Address of the user you want to add for the first time.
                    @@ -283,11 +270,9 @@ To add a new user or assign an existing user to the environment you’re managin
                      -
                    1. Fill in the following details:
                    2. -
                      +
                    3. Fill in the following details:
                      • -
                      • First Name and Last Name (optional).
                      • -
                        +
                      • First Name and Last Name (optional).
                      • Assign a Profile (e.g., Admin, Viewer).
                    @@ -314,8 +299,7 @@ Editing a user’s details in the Team Tab is specific to the environment where
                      -
                    1. Open the Team Tab from the selected environment (e.g., Dev, Staging, Production.
                    2. -
                      +
                    3. Open the Team Tab from the selected environment (e.g., Dev, Staging, Production.
                    4. Click the button next to the user.
                    @@ -327,8 +311,7 @@ Editing a user’s details in the Team Tab is specific to the environment where
                      -
                    1. Modify the following fields as needed:
                    2. -
                      +
                    3. Modify the following fields as needed:
                      • First Name and Last Name.

                      • @@ -365,8 +348,7 @@ The Team Tab allows you to remove a user from a specific environment without aff
                          -
                        1. Navigate to the Team Tab from the selected environment (e.g., Dev, Staging, Production) and identify the user you want to remove.
                        2. -
                          +
                        3. Navigate to the Team Tab from the selected environment (e.g., Dev, Staging, Production) and identify the user you want to remove.
                        4. Click the button next to the specific user.
                        diff --git a/docs/customComponent/api-reference/webform-editor/v0.2.16.mdx b/docs/customComponent/api-reference/webform-editor/v0.2.16.mdx index 95f3187982..917f056946 100644 --- a/docs/customComponent/api-reference/webform-editor/v0.2.16.mdx +++ b/docs/customComponent/api-reference/webform-editor/v0.2.16.mdx @@ -21,7 +21,7 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| ### *Returns* @@ -39,7 +39,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/docs/customComponent/api-reference/webform-editor/v0.2.24.mdx b/docs/customComponent/api-reference/webform-editor/v0.2.24.mdx index f52658c0ca..ea7f1629aa 100644 --- a/docs/customComponent/api-reference/webform-editor/v0.2.24.mdx +++ b/docs/customComponent/api-reference/webform-editor/v0.2.24.mdx @@ -21,9 +21,9 @@ A hook that provides state information and actions for managing Qodly Studio pan `{StudioPanelReturnType}` - An object containing the type, open state, current state, and actions to manipulate Qodly Studio panel. :::info -The `useStudioPanel` function returns an object with properties [`type`](#type), [`isOpen`](#isopen), [`current`](#current-1), and `actions` to manipulate Qodly Studio panel state. +The `useStudioPanel` function returns an object with properties `type`, `isOpen`, `current`, and `actions` to manipulate Qodly Studio panel state. -The `actions` object includes methods for [updating the state](#setstate), [setting the current type and value](#setcurrent), [closing](#close), [opening](#open), and [opening with a specific type and current value](#openwithcurrent). +The `actions` object includes methods for `updating the state`, `setting the current type and value`, `closing`, `opening`, and `opening with a specific type and current value`. ::: @@ -50,7 +50,7 @@ The `useRenderer` function returns a tuple with two elements: - `HTMLElement | null`: The current DOM element or null. This represents the element to which the renderer is currently connected. - An object providing methods to: -- [Connect the renderer](#connectrenderer) +- Connect the renderer - `eventsToHandle`: An object mapping event names to their corresponding handler functions. @@ -69,7 +69,7 @@ A hook that provides methods and properties related to the layout mode of a Page `{LayoutReturnType}` - An object containing properties and methods related to the layout mode. :::info -The useLayout function returns an object with properties [`layout`](#layout) and [`isAiryMode`](#isairymode), along with methods `getClassName` and `toggle`. +The useLayout function returns an object with properties `layout` and `isAiryMode`, along with methods `getClassName` and `toggle`. ::: @@ -135,7 +135,8 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| + ### *Returns* @@ -144,7 +145,7 @@ A hook that facilitates managing datasources and current elements associated wit :::info The `useSources` function returns an object with the following structure: - `sources`: An object containing `datasource` and `currentElement`, representing the current values of datasources and current elements. -- `actions`: An object containing methods for manipulating datasource values, including [`setDatasourceValue`](#actionssetdatasourcevalue), [`setCurrentElementValue`](#actionssetcurrentelementvalue), [`fetchDatasourceValue`](#actionsfetchdatasourcevalue), and [`fetchCurrentElementValue`](#actionsfetchcurrentelementvalue). +- `actions`: An object containing methods for manipulating datasource values, including `setDatasourceValue`, `setCurrentElementValue`, `fetchDatasourceValue`, and `fetchCurrentElementValue`. ::: @@ -159,7 +160,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/docs/customComponent/api-reference/webform-editor/v0.3.20.mdx b/docs/customComponent/api-reference/webform-editor/v0.3.20.mdx index 80e8e04d3b..750c9286f2 100644 --- a/docs/customComponent/api-reference/webform-editor/v0.3.20.mdx +++ b/docs/customComponent/api-reference/webform-editor/v0.3.20.mdx @@ -21,9 +21,9 @@ A hook that provides state information and actions for managing the studio panel `{StudioPanelReturnType}` - An object containing the type, open state, current state, and actions to manipulate the studio panel. :::info -The `useStudioPanel` function returns an object with properties [`type`](#type), [`isOpen`](#isopen), [`current`](#current-1), and `actions` to manipulate the studio panel state. +The `useStudioPanel` function returns an object with properties `type`, `isOpen`, `current`, and `actions` to manipulate the studio panel state. -The `actions` object includes methods for [updating the state](#setstate), [setting the current type and value](#setcurrent), [closing](#close), [opening](#open), and [opening with a specific type and current value](#openwithcurrent). +The `actions` object includes methods for `updating the state`, `setting the current type and value`, `closing`, `opening`, and `opening with a specific type and current value`. ::: @@ -50,7 +50,7 @@ The `useRenderer` function returns a tuple with two elements: - `HTMLElement | null`: The current DOM element or null. This represents the element to which the renderer is currently connected. - An object providing methods to: -- [Connect the renderer](#connectrenderer) +- Connect the renderer - `eventsToHandle`: An object mapping event names to their corresponding handler functions. @@ -69,7 +69,7 @@ A hook that provides methods and properties related to the layout mode of a webf `{LayoutReturnType}` - An object containing properties and methods related to the layout mode. :::info -The useLayout function returns an object with properties [`layout`](#layout) and [`isAiryMode`](#isairymode), along with methods `getClassName` and `toggle`. +The useLayout function returns an object with properties `layout` and `isAiryMode`, along with methods `getClassName` and `toggle`. ::: @@ -135,7 +135,8 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| + ### *Returns* @@ -144,7 +145,7 @@ A hook that facilitates managing datasources and current elements associated wit :::info The `useSources` function returns an object with the following structure: - `sources`: An object containing `datasource` and `currentElement`, representing the current values of datasources and current elements. -- `actions`: An object containing methods for manipulating datasource values, including [`getDatasource`](#actionsgetdatasource), [`setDatasourceValue`](#actionssetdatasourcevalue), [`setCurrentElementValue`](#actionssetcurrentelementvalue), [`fetchDatasourceValue`](#actionsfetchdatasourcevalue), and [`fetchCurrentElementValue`](#actionsfetchcurrentelementvalue). +- `actions`: An object containing methods for manipulating datasource values, including `getDatasource`, `setDatasourceValue`, `setCurrentElementValue`, `fetchDatasourceValue`, and `fetchCurrentElementValue`. ::: @@ -205,7 +206,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/docs/customComponent/setup.md b/docs/customComponent/setup.md index 8d80f2016e..5cc8dc7f37 100644 --- a/docs/customComponent/setup.md +++ b/docs/customComponent/setup.md @@ -215,4 +215,4 @@ The `components` directory serves as the repository for custom components: While developers have the flexibility to implement their initial component in their preferred manner, adhering to the suggested structure is recommended ::: -Refer to the [custom component structure](./structure#custom-component-repository) section for detailed information. +Refer to the [custom component structure](./structure.md#custom-component-repository) section for detailed information. diff --git a/docs/customComponent/structure.md b/docs/customComponent/structure.md index de84bae857..450d487442 100644 --- a/docs/customComponent/structure.md +++ b/docs/customComponent/structure.md @@ -12,28 +12,28 @@ The project structure is organized to facilitate the development and maintenance - **src**: The main source code directory. - [**components**](#custom-component-repository): The directory for custom components. - **ExampleComponent**: An example custom component directory. - - [**ExampleComponent.build.tsx**](#examplecomponentbuildtsx-file): Component build logic. - - [**ExampleComponent.render.tsx**](#examplecomponentrendertsx-file): Component rendering logic. - - [**ExampleComponent.settings.tsx**](#examplecomponentsettingstsx-file): Component settings. - - [**ExampleComponent.config.tsx**](#examplecomponentbuildconfig-file): Configuration for the component. + - [**ExampleComponent.build.tsx**](#examplecomponentbuildtsx): Component build logic. + - [**ExampleComponent.render.tsx**](#examplecomponentrendertsx): Component rendering logic. + - [**ExampleComponent.settings.tsx**](#examplecomponentsettingstsx): Component settings. + - [**ExampleComponent.config.tsx**](#examplecomponentconfigtsx): Configuration for the component. - [**index.tsx**](#indextsx): Entry point for the component. - - [**index.tsx**](#indextsx-file-in-components-repository): The entry point for the components directory. - - [**App.tsx**](#apptsx-file): Main application component. + - [**index.tsx**](#indextsx): The entry point for the components directory. + - [**App.tsx**](#apptsx): Main application component. - **index.css**: Global CSS styles. - - [**main.tsx**](#maintsx-file): Entry point for the application. + - [**main.tsx**](#maintsx): Entry point for the application. - **vite-env.d.ts**: TypeScript declaration file for Vite. - **.eslintrc.cjs**: ESLint configuration file. - **.gitignore**: Specifies intentionally untracked files that Git should ignore. - **.prettierignore**: Specifies files and directories to ignore for formatting using Prettier. - **.prettierrc**: Configuration file for Prettier. -- [**index.html**](#indexhtml-file): Main HTML file for the application. +- [**index.html**](#indexhtml): Main HTML file for the application. - **package-lock.json**: Lock file for npm dependencies. - **package.json**: Project metadata and npm dependencies. -- [**proxy.config.ts**](#proxyconfigts-file): Configuration for the development server proxy. +- [**proxy.config.ts**](#proxyconfigts): Configuration for the development server proxy. - **README.md**: Project documentation. - **tsconfig.json**: TypeScript configuration file. - **tsconfig.node.json**: TypeScript configuration file for Node.js. -- [**vite.config.ts**](#viteconfigts-file): Vite configuration file. +- [**vite.config.ts**](#viteconfigts): Vite configuration file. creates and returns a `cs.className` object which is a new instance of the class on which it is called. This function is automatically available on all classes from the [`cs` class store](basics/lang-classes.md#cs). -You can pass one or more optional *param* parameters, which will be passed to the [class constructor](basics/lang-classes#constructor) function (if any) in the className class definition. Within the constructor function, the [`This`](basics/lang-classes.md#this) is bound to the new object being constructed. +You can pass one or more optional *param* parameters, which will be passed to the [class constructor](basics/lang-classes.md#constructor) function (if any) in the className class definition. Within the constructor function, the [`This`](basics/lang-classes.md#this) is bound to the new object being constructed. - If `.new()` is called on a non-existing class, an error is returned. - If `.new()` is called on a [singleton class](basics/lang-classes.md#singleton-classes) that has already been instantiated, the singleton instance is returned, not a new instance. @@ -165,7 +165,7 @@ person = cs.Person.new("John","Doe",40) The `.superclass` property returns the parent class of the class. A superclass can be a `4D.Class` object, or a `cs.className` object. If the class does not have a parent class, the property returns **null**. -A superclass of a user class is declared in a class by using the [`Class extends `](basics/lang-classes#extends-classname) keyword. +A superclass of a user class is declared in a class by using the [`Class extends `](basics/lang-classes.md#extends-classname) keyword. This property is **read-only**. diff --git a/docs/language/CollectionClass.md b/docs/language/CollectionClass.md index 90714dfc64..fd4db2a8d1 100644 --- a/docs/language/CollectionClass.md +++ b/docs/language/CollectionClass.md @@ -40,7 +40,7 @@ The Collection class manages [collection](basics/lang-collection.md) type elemen |[](#find)    | |[](#first)    | |[](#flat)    | -|[](#flatMap)    | +|[](#flatmap)    | |[](#includes)    | |[](#indexof)    | |[](#indices)    | @@ -59,7 +59,7 @@ The Collection class manages [collection](basics/lang-collection.md) type elemen |[](#push)    | |[](#query)    | |[](#reduce)    | -|[](#reduceRight)    | +|[](#reduceright)    | |[](#remove)    | |[](#resize)    | |[](#reverse)    | @@ -1780,7 +1780,7 @@ All *colsToSort* collections must have the same number of elements, otherwise an ::: -If you want to sort the collections in some other order than ascending, you must supply a *formula* ([Formula object](FunctionClass#formula-objects) that defines the sort order. The return value should be a boolean that indicates the relative order of the two elements: **true** if *$1.value* is less than *$1.value2*, **false** if *$1.value* is greater than *$1.value2*. You can provide additional parameters to the formula if necessary. +If you want to sort the collections in some other order than ascending, you must supply a *formula* ([Formula object](FunctionClass.md#formula-objects) that defines the sort order. The return value should be a boolean that indicates the relative order of the two elements: **true** if *$1.value* is less than *$1.value2*, **false** if *$1.value* is greater than *$1.value2*. You can provide additional parameters to the formula if necessary. The formula receives the following parameters: @@ -2240,9 +2240,9 @@ where: |---|---|---| |Equal to |==, = |Gets matching data, supports the wildcard (@), neither case-sensitive nor diacritic.| ||===, IS| Gets matching data, considers the @ as a standard character, neither case-sensitive nor diacritic| - |Not equal to| #, != |Supports the wildcard (@). Equivalent to "Not condition applied on a statement" ([see below](#not-equal-to-in-collections)).| + |Not equal to| #, != |Supports the wildcard (@). Equivalent to "Not condition applied on a statement" ([see below](../orda/queries.md#not-equal-to-in-collections)).| ||!==, IS NOT| Considers the @ as a standard character| - |Not condition applied on a statement| NOT| Parenthesis are mandatory when NOT is used before a statement containing several operators. Equivalent to "Not equal to" ([see below](#not-equal-to-in-collections)).| + |Not condition applied on a statement| NOT| Parenthesis are mandatory when NOT is used before a statement containing several operators. Equivalent to "Not equal to" ([see below](../orda/queries.md#not-equal-to-in-collections)).| |Less than| <| | |Greater than| > || |Less than or equal to| <=|| diff --git a/docs/language/DataClassClass.md b/docs/language/DataClassClass.md index 7aff1f20ea..47b12f009a 100644 --- a/docs/language/DataClassClass.md +++ b/docs/language/DataClassClass.md @@ -82,7 +82,7 @@ Returned attribute objects contain the following properties: |autoFilled|boolean|True if the attribute value is automatically filled by Qodly. Corresponds to the **autosequence** model attribute property. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | |exposed|boolean|True if the attribute is exposed in REST| |fieldNumber|integer|Internal Qodly database field number of the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | -|fieldType|integer|Qodly database field type of the attribute. Depends on the attribute `kind`. Possible values:
                      • if `.kind` = "storage": corresponding Qodly database field type, see [`valueType`](basics/lang-data-types.md#valuetype)
                      • if `.kind` = "relatedEntity": 38 (`is object`)
                      • if `.kind` = "relatedEntities": 42 (`is collection`)
                      • if `.kind` = "calculated": same as above, depending on the result
                      • | +|fieldType|integer|Qodly database field type of the attribute. Depends on the attribute `kind`. Possible values:
                      • if `.kind` = "storage": corresponding Qodly database field type, see [`valueType`](./commands/valueType.md)
                      • if `.kind` = "relatedEntity": 38 (`is object`)
                      • if `.kind` = "relatedEntities": 42 (`is collection`)
                      • if `.kind` = "calculated": same as above, depending on the result
                      • | |indexed|boolean|True if there is a B-tree or a Cluster B-tree index on the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | |inverseName|string|Name of the attribute which is at the other side of the relation. Returned only when `.kind` = "relatedEntity" or "relatedEntities".| |keywordIndexed|boolean|True if there is a keyword index on the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | @@ -315,7 +315,7 @@ In this example, the first entity will be created and saved but the second will #### See also -[**.toCollection()**](EntitySelectionClass#tocollection-) +[**.toCollection()**](EntitySelectionClass.md#tocollection-) diff --git a/docs/language/DataStoreClass.md b/docs/language/DataStoreClass.md index c7aa33f27d..179d95098c 100644 --- a/docs/language/DataStoreClass.md +++ b/docs/language/DataStoreClass.md @@ -42,7 +42,7 @@ The `.cancelTransaction()` function collection of `4D.MailAttachment` object(s). -Attachment objects are defined through the [`mailNewAttachment`](MailAttachmentClass#4dmailattachmentnew) command. Attachment objects have specific [properties and functions](MailAttachmentClass.md). +Attachment objects are defined through the [`mailNewAttachment`](MailAttachmentClass.md#4dmailattachmentnew) command. Attachment objects have specific [properties and functions](MailAttachmentClass.md). ## .bcc @@ -143,7 +143,7 @@ The `.bodyStructure` object contains the following properties: |language|collection of strings|List of language tags, as defined in [RFC3282](https://tools.ietf.org/html/rfc3282), in the Content-Language header field of the part, if present.| |location|string|URI, as defined in [RFC2557](https://tools.ietf.org/html/rfc2557), in the Content-Location header field of the part, if present.| |subParts|collection of objects|Body parts of each child (collection of *EmailBodyPart* objects)| -|headers|collection of objects|List of all header fields in the part, in the order they appear in the message (collection of *EmailHeader* objects, see [headers](#headers-) property)| +|headers|collection of objects|List of all header fields in the part, in the order they appear in the message (collection of *EmailHeader* objects, see [headers](#headers) property)| ## .bodyValues diff --git a/docs/language/EntityClass.md b/docs/language/EntityClass.md index 601cb05004..9820985708 100644 --- a/docs/language/EntityClass.md +++ b/docs/language/EntityClass.md @@ -30,7 +30,7 @@ An [entity](../orda/data-model.md#entity) is an instance of a [Dataclass](../ord |[](#save)    | |[](#toobject)    | |[](#touched)    | -|[](#touchedattributes)    | +|[](#touchedattributes-)    | |[](#unlock)    | @@ -379,7 +379,7 @@ The object returned by `.drop( )` contains the following properties: |Constant| Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                      • the entity has been dropped (the stamp has changed and the memory space is now free)
                      • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can be returned when `kForceDropIfStampChanged` option is used.

                      • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                      • the entity has been dropped (the stamp has changed and the memory space is now free)
                      • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can be returned when `kForceDropIfStampChanged` option is used.
                      • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`|3|The entity is locked by a pessimistic lock.
                        **Associated statusText**: "Already locked"| |`kStatusSeriousError`| 4| A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                        **Associated statusText**: "Other error"| |`kStatusStampHasChanged`| 2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error can only occur if the `kForceDropIfStampChanged` option is not used
                        **Associated statusText**: "Stamp has changed"| @@ -890,7 +890,7 @@ The object returned by `.lock()` contains the following properties: |Constant |Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`| 5|The entity no longer exists in the data. This error can occur in the following cases:
                      • the entity has been dropped (the stamp has changed and the memory space is now free)
                      • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can only be returned when `kReloadIfStampChanged` option is used

                      • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`| 5|The entity no longer exists in the data. This error can occur in the following cases:
                      • the entity has been dropped (the stamp has changed and the memory space is now free)
                      • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can only be returned when `kReloadIfStampChanged` option is used
                      • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`| 3 |The entity is locked by a pessimistic lock. **Associated statusText**: "Already locked" |`kStatusSeriousError`| 4 |A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc. **Associated statusText**: "Other error"| |`kStatusStampHasChanged`|2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error occurs only if the `kReloadIfStampChanged` option is not used
                        **Associated statusText**: "Stamp has changed"| @@ -1038,7 +1038,7 @@ The object returned by `.reload()` contains the following properties: |Constant| Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                      • the entity has been dropped (the stamp has changed and the memory space is now free)
                      • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).

                      • ***Associated statusText***: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                      • the entity has been dropped (the stamp has changed and the memory space is now free)
                      • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).
                      • ***Associated statusText***: "Entity does not exist anymore"| |`kStatusSeriousError`|4| A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                        ***Associated statusText***: "Other error"| @@ -1082,7 +1082,7 @@ The object returned by `.reload()` contains the following properties: The `.save()` function saves the changes made to the entity in the table related to its dataClass. You must call this function after creating or modifying an entity if you want to save the changes made to it. -The save operation is executed only if at least one entity attribute has been "touched" (see the [`.touched()`](#touched) and [`.touchedAttributes()`](#touchedattributes) functions). Otherwise, the function does nothing (the trigger is not called). +The save operation is executed only if at least one entity attribute has been "touched" (see the [`.touched()`](#touched) and [`.touchedAttributes()`](#touchedattributes-) functions). Otherwise, the function does nothing (the trigger is not called). In a multi-process application, the `.save()` function is executed under an ["optimistic lock"](../orda/data.md#entity-locking) mechanism, wherein an internal locking stamp is automatically incremented each time the record is saved. @@ -1126,7 +1126,7 @@ The following values can be returned in the `status` and `statusText` properties |Constant| Value |Comment| |---|---|---| |`kStatusAutomergeFailed`| 6| (Only if the `kAutoMerge` option is used) The automatic merge option failed when saving the entity.
                        **Associated statusText**: "Auto merge failed"| -|`kStatusEntityDoesNotExistAnymore`| 5| The entity no longer exists in the data. This error can occur in the following cases:
                      • the entity has been dropped (the stamp has changed and the memory space is now free)
                      • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).

                      • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`| 5| The entity no longer exists in the data. This error can occur in the following cases:
                      • the entity has been dropped (the stamp has changed and the memory space is now free)
                      • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).
                      • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`| 3| The entity is locked by a pessimistic lock.
                        **Associated statusText**: "Already locked" |`kStatusSeriousError`|4|A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                        **Associated statusText**: "Other error"| |`kStatusStampHasChanged`|2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error can only occur if the `kAutoMerge` option is not used
                        **Associated statusText**: "Stamp has changed"| diff --git a/docs/language/EntitySelectionClass.md b/docs/language/EntitySelectionClass.md index 107bc9cf75..c0e18ad4de 100644 --- a/docs/language/EntitySelectionClass.md +++ b/docs/language/EntitySelectionClass.md @@ -12,7 +12,7 @@ Entity selections can be created from existing selections using various function || |---| -|[](#91index93)    | +|[](#index)    | |[](#attributename)    | |[](#add)    | |[](#and)    | @@ -22,7 +22,7 @@ Entity selections can be created from existing selections using various function |[](#contains)    | |[](#count)    | |[](#distinct)    | -|[](#distinctPaths)    | +|[](#distinctpaths)    | |[](#drop)    | |[](#extract)    | |[](#first)    | @@ -36,14 +36,14 @@ Entity selections can be created from existing selections using various function |[](#minus)    | |[](#or)    | |[](#orderby)    | -|[](#orderbyformula)    | +|[](#orderbyformula-)    | |[](#query)    | |[](#querypath)    | |[](#queryplan)    | |[](#selected)    | |[](#slice)    | |[](#sum)    | -|[](#tocollection)    | +|[](#tocollection-)    | @@ -240,7 +240,7 @@ The entity selection must be *alterable*, i.e. it has been created for example b ::: * If the entity selection is [ordered](../orda/data-model.md#ordered-or-unordered-entity-selection), *entity* is added at the end of the selection. If a reference to the same entity already belongs to the entity selection, it is duplicated and a new reference is added. -* If the entity selection is [unordered](../orda/data-model#ordered-or-unordered-entity-selection), *entity* is added anywhere in the selection, with no specific order. +* If the entity selection is [unordered](../orda/data-model.md#ordered-or-unordered-entity-selection), *entity* is added anywhere in the selection, with no specific order. The modified entity selection is returned by the function, so that function calls can be chained. @@ -302,7 +302,7 @@ The `.and()` function combines t :::note -You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. ::: @@ -427,9 +427,7 @@ sel2 = sel.clean() //sel2.length == 3 ``` -#### See also -[`.refresh()`](#refresh) @@ -536,7 +534,7 @@ The `.copy()` function returns > This function does not modify the original entity selection. -By default, if the *option* parameter is omitted, the function returns a new, [alterable](../orda/data#shareable-or-alterable-entity-selections) entity selection (even if the function is applied to a [shareable](../orda/data#shareable-or-alterable-entity-selections) entity selection). Pass the `kShared` constant in the *option* parameter if you want to create a shareable entity selection. +By default, if the *option* parameter is omitted, the function returns a new, [alterable](../orda/data.md#shareable-or-alterable-entity-selections) entity selection (even if the function is applied to a [shareable](../orda/data.md#shareable-or-alterable-entity-selections) entity selection). Pass the `kShared` constant in the *option* parameter if you want to create a shareable entity selection. #### Example @@ -961,7 +959,7 @@ The following generic code duplicates all entities of the entity selection: The `.isAlterable()` function returns true if the entity selection is alterable, and false if the entity selection is not alterable. -For more information, please refer to the [Shareable or alterable entity selections](../orda/data#shareable-or-alterable-entity-selections) section. +For more information, please refer to the [Shareable or alterable entity selections](../orda/data.md#shareable-or-alterable-entity-selections) section. @@ -984,7 +982,7 @@ For more information, please refer to the [Shareable or alterable entity selecti The `.isOrdered()` function returns true if the entity selection is ordered, and false if it is unordered. -For more information, please refer to the [Ordered or unordered entity selection](../orda/data-model#ordered-or-unordered-entity-selection) section. +For more information, please refer to the [Ordered or unordered entity selection](../orda/data-model.md#ordered-or-unordered-entity-selection) section. #### Example @@ -1200,7 +1198,7 @@ The `.minus()` function exclud * If you pass *entity* as parameter, the function creates a new entity selection without *entity* (if *entity* belongs to the entity selection). If *entity* was not included in the original entity selection, a new reference to the entity selection is returned. * If you pass *entitySelection* as parameter, the function returns an entity selection containing the entities belonging to the original entity selection without the entities belonging to *entitySelection*. ->You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +>You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. If the original entity selection or both the original entity selection and the *entitySelection* parameter are empty, an empty entity selection is returned. @@ -1261,7 +1259,7 @@ The `.or()` function combines the * If you pass *entity* as parameter, you compare this entity with the entity selection. If the entity belongs to the entity selection, a new reference to the entity selection is returned. Otherwise, a new entity selection containing the original entity selection and the entity is returned. * If you pass *entitySelection* as parameter, you compare entity selections. A new entity selection containing the entities belonging to the original entity selection or *entitySelection* is returned (or is not exclusive, entities referenced in both selections are not duplicated in the resulting selection). ->You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +>You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. If the original entity selection and the *entitySelection* parameter are empty, an empty entity selection is returned. If the original entity selection is empty, a reference to *entitySelection* or an entity selection containing only *entity* is returned. @@ -1310,7 +1308,7 @@ If the original entity selection and the parameter are not related to the same d #### Description -The `.orderBy()` function returns a new [ordered](../orda/data-model#ordered-or-unordered-entity-selection) entity selection containing all entities of the entity selection in the order specified by *pathString* or *pathObjects* criteria. +The `.orderBy()` function returns a new [ordered](../orda/data-model.md#ordered-or-unordered-entity-selection) entity selection containing all entities of the entity selection in the order specified by *pathString* or *pathObjects* criteria. > This function does not modify the original entity selection. @@ -1506,7 +1504,7 @@ If no matching entities are found, an empty `EntitySelection` is returned. For detailed information on how to build a query using *queryString*, *value*, and *querySettings* parameters, please refer to the DataClass [`.query()`](DataClassClass.md#query) function description. ->By default if you omit the **order by** statement in the *queryString*, the returned entity selection is [not ordered](../orda/data-model#ordered-or-unordered-entity-selection). +>By default if you omit the **order by** statement in the *queryString*, the returned entity selection is [not ordered](../orda/data-model.md#ordered-or-unordered-entity-selection). #### Example 1 diff --git a/docs/language/FolderClass.md b/docs/language/FolderClass.md index c6cde5933b..b8de0e8865 100644 --- a/docs/language/FolderClass.md +++ b/docs/language/FolderClass.md @@ -84,7 +84,7 @@ The `4D.Folder.new()` function creates and The `.create()` function creates a folder on disk according to the properties of the `folder` object. -If necessary, the function creates the folder hierachy as described in the [platformPath](#platformpath) or [path](#path) properties. If the folder already exists on disk, the function does nothing (no error is thrown) and returns false. +If necessary, the function creates the folder hierachy as described in the [path](#path) property. If the folder already exists on disk, the function does nothing (no error is thrown) and returns false. **Returned value** diff --git a/docs/language/HTTPRequestClass.md b/docs/language/HTTPRequestClass.md index f3f7b54369..6dd6b6d77e 100644 --- a/docs/language/HTTPRequestClass.md +++ b/docs/language/HTTPRequestClass.md @@ -3,9 +3,9 @@ id: HTTPRequestClass title: HTTPRequest --- -The `HTTPRequest` class allows you to handle [`HTTPRequest objects`](#httprequest-object) that can be used to configure and send requests to an HTTP server, as well as to process the HTTP server responses. +The `HTTPRequest` class allows you to handle [`HTTPRequest objects`](#functions-and-properties) that can be used to configure and send requests to an HTTP server, as well as to process the HTTP server responses. -The `HTTPRequest` class is available from the `4D` class store. You create and send HTTP requests using the [4D.HTTPRequest.new()](#4dhttprequestnew) function, that returns a [`HTTPRequest object`](#httprequest-object). +The `HTTPRequest` class is available from the `4D` class store. You create and send HTTP requests using the [4D.HTTPRequest.new()](#4dhttprequestnew) function, that returns a [`HTTPRequest object`](#functions-and-properties). ### Example @@ -50,14 +50,14 @@ HTTPRequest objects provide the following functions and properties: || |---| |[](#4dhttprequestnew)    | -|[](#dataType)    | +|[](#datatype)    | |[](#encoding)    | |[](#errors)    | |[](#headers)    | |[](#method)    | |[](#protocol)    | |[](#response)    | -|[](#returnResponseBody)    | +|[](#returnresponsebody)    | |[](#terminate)    | |[](#terminated)    | |[](#timeout)    | @@ -138,7 +138,7 @@ All callback functions receive two object parameters: |Parameter|Type| |---|---| -|param1|[`HTTPRequest` object](#httprequest-object)| +|param1|[`HTTPRequest` object](#functions-and-properties)| |param2|[`Event` object](#event-object)| Here is the sequence of callback calls: @@ -392,7 +392,7 @@ If the response from the server has already arrived, the function returns immedi :::note -During the `.wait()` execution, callback functions are executed, whether they originate from other instances of the same class, or instances of any classes supporting the same callback mechanism (`HTTPRequest`, `TCPConnection`, `SystemWorker`). You can exit from a `.wait()` by calling [`shutdown()`](#shutdown) or `terminate()` (depending on the API) from a callback. +During the `.wait()` execution, callback functions are executed, whether they originate from other instances of the same class, or instances of any classes supporting the same callback mechanism (`HTTPRequest`, `TCPConnection`, `SystemWorker`). You can exit from a `.wait()` by calling `shutdown()` or [`terminate()`](#terminate) (depending on the API) from a callback. ::: diff --git a/docs/language/IMAPTransporterClass.md b/docs/language/IMAPTransporterClass.md index fba6f1729f..5a092deac6 100644 --- a/docs/language/IMAPTransporterClass.md +++ b/docs/language/IMAPTransporterClass.md @@ -215,7 +215,7 @@ status = transporter.addFlags(kIMAPAll,flags) The `.append()` function appends a `mailObj` to the `destinationBox`. -In the `mailObj` parameter, pass an Email object. For a comprehensive description of mail properties, see [Email object](EmailObjectClass#properties). The `.append()` function supports keyword tags in the Email object's `keywords` attribute. +In the `mailObj` parameter, pass an Email object. For a comprehensive description of mail properties, see [Email object](EmailObjectClass.md#properties). The `.append()` function supports keyword tags in the Email object's `keywords` attribute. The optional `destinationBox` parameter lets you pass the name of a mailbox where the `mailObj` will be appended. If omitted, the current mailbox is used. @@ -472,7 +472,7 @@ In the *msgsIDs* parameter, you can pass: * a collection containing the unique IDs of the specific messages to delete, or * the `kIMAPAll` constant (integer) to delete all messages in the selected mailbox. -Executing this function does not actually remove messages. Messages with the "delete" flag can still be found by the [`.searchMails()`](#searchmails) function. Flagged messages are deleted from the IMAP server with the [`.expunge()`](#expunge) function or by selecting another mailbox or when the IMAP transporter object (created with [4D.IMAPTransporter.new](#imap-new-transporter)) is destroyed. +Executing this function does not actually remove messages. Messages with the "delete" flag can still be found by the [`.searchMails()`](#searchmails) function. Flagged messages are deleted from the IMAP server with the [`.expunge()`](#expunge) function or by selecting another mailbox or when the IMAP transporter object (created with [4D.IMAPTransporter.new](#4dimaptransporternew)) is destroyed. **Returned object** @@ -832,7 +832,7 @@ See [`getBoxList()` example](#getboxlist). |msgNumber|integer|→|Sequence number of the message| |msgID|string|→|Unique ID of the message| |options|object|→|Message handling instructions| -|Result|object|←|[Email object](EmailObjectClass#properties)| +|Result|object|←|[Email object](EmailObjectClass.md#properties)| #### Description @@ -899,7 +899,7 @@ You want to get the message with ID = 1: |startMsg|integer|→|Sequence number of the first message| |endMsg |integer|→|Sequence number of the last message| |options|object|→|Message handling instructions| -|Result|object|←|Object containing:
                        • a collection of [Email objects](EmailObjectClass#properties) and
                        • a collection of IDs or numbers for missing messages, if any
                        | +|Result|object|←|Object containing:
                        • a collection of [Email objects](EmailObjectClass.md#properties) and
                        • a collection of IDs or numbers for missing messages, if any
                        | #### Description @@ -943,7 +943,7 @@ The optional *options* parameter allows you to define the parts of the messages |Property | Type | Description | |---|---|---| -|list |collection |collection of [`Email` objects](EmailObjectClass#properties). If no Email objects are found, an empty collection is returned.| +|list |collection |collection of [`Email` objects](EmailObjectClass.md#properties). If no Email objects are found, an empty collection is returned.| |notFound |collection| collection of:
                        • first syntax - previously passed message IDs that do not exist
                        • second syntax - sequence numbers of messages between startMsg and endMsg that do not exist
                        An empty collection is returned if all messages are found.| #### Example @@ -1013,7 +1013,7 @@ The optional *updateSeen* parameter allows you to specify if the message is mark #### Result -`.getMIMEAsblob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass#properties) with the `mailConvertFromMIME` command. +`.getMIMEAsblob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass.md#properties) with the `mailConvertFromMIME` command. #### Example diff --git a/docs/language/IncomingMessageClass.md b/docs/language/IncomingMessageClass.md index c16c82e8f0..174caf6fff 100644 --- a/docs/language/IncomingMessageClass.md +++ b/docs/language/IncomingMessageClass.md @@ -13,7 +13,7 @@ All properties of this class are read-only. They are automatically filled by the ### Example -The following HTTP handler configuration [has been defined in Qodly Studio](../studio/httpHandlers.md#setting-up-http-request-handlers): +The following HTTP handler configuration [has been defined in Qodly Studio](../studio/httpHandlers.md#configuring-http-handlers): ```json [ @@ -84,8 +84,8 @@ There are 2 url parts - Url parts are: start - example |[](#gettext)
                        | |[](#headers)
                        | |[](#url)
                        | -|[](#urlPath)
                        | -|[](#urlQuery)
                        | +|[](#urlpath)
                        | +|[](#urlquery)
                        | |[](#verb)
                        | :::note diff --git a/docs/language/MailAttachmentClass.md b/docs/language/MailAttachmentClass.md index 523d472cbc..165c1a6742 100644 --- a/docs/language/MailAttachmentClass.md +++ b/docs/language/MailAttachmentClass.md @@ -44,7 +44,7 @@ Attachment objects are created using the [`4D.MailAttachment.new()`](#4dmailatta #### Description -The `4D.MailAttachment.new` function allows you to create an attachment object that you can add to an [Email object](EmailObjectClass#properties). +The `4D.MailAttachment.new` function allows you to create an attachment object that you can add to an [Email object](EmailObjectClass.md#properties). To define the attachment, you can use: diff --git a/docs/language/POP3TransporterClass.md b/docs/language/POP3TransporterClass.md index 9089444f45..949ff98121 100644 --- a/docs/language/POP3TransporterClass.md +++ b/docs/language/POP3TransporterClass.md @@ -44,19 +44,19 @@ POP3 Transporter objects provide the following properties and functions: #### Description -The `4D.POP3Transporter.new()` function configures a new POP3 connectionaccording to the *server* parameter and returns a new *[POP3 transporter](#pop3-transporter-object)* object. The returned transporter object will then usually be used to receive emails. +The `4D.POP3Transporter.new()` function configures a new POP3 connectionaccording to the *server* parameter and returns a new *[POP3 transporter](#functions-and-properties)* object. The returned transporter object will then usually be used to receive emails. In the *server* parameter, pass an object containing the following properties: |*server*|Default value (if omitted)| |---|---| |[](#acceptunsecureconnection)
                        |false| -|.**accessTokenOAuth2**: string
                        .**accessTokenOAuth2**: object
                        string string or token object representing OAuth2 authorization credentials. Used only with OAUTH2 `authenticationMode`. If `accessTokenOAuth2` is used but `authenticationMode` is omitted, the OAuth 2 protocol is used (if allowed by the server). Not returned in *[SMTP transporter](#smtptransporterobject)* object.|none| +|.**accessTokenOAuth2**: string
                        .**accessTokenOAuth2**: object
                        string string or token object representing OAuth2 authorization credentials. Used only with OAUTH2 `authenticationMode`. If `accessTokenOAuth2` is used but `authenticationMode` is omitted, the OAuth 2 protocol is used (if allowed by the server). |none| |[](#authenticationmode)
                        |the most secure authentication mode supported by the server is used| |[](#connectiontimeout)
                        |30| |[](#host)
                        |*mandatory* |[](#logfile)
                        |none| -|**.password** : string
                        User password for authentication on the server. Not returned in *[SMTP transporter](#smtptransporterobject)* object.|none| +|**.password** : string
                        User password for authentication on the server. |none| |[](#port)
                        |995| |[](#user)
                        |none| @@ -232,11 +232,11 @@ info = "The mailbox contains "+string(boxInfo.mailCount)+" messages.") ##### Description -The `.getMail()` function returns the `Email` object corresponding to the *msgNumber* in the mailbox designated by the [`POP3 transporter`](#pop3-transporter-object). This function allows you to locally handle the email contents. +The `.getMail()` function returns the `Email` object corresponding to the *msgNumber* in the mailbox designated by the [`POP3 transporter`](#functions-and-properties). This function allows you to locally handle the email contents. Pass in *msgNumber* the number of the message to retrieve. This number is returned in the `number` property by the [`.getMailInfoList()`](#getmailinfolist) function. -Optionally, you can pass `true` in the *headerOnly* parameter to exclude the body parts from the returned `Email` object. Only headers properties ([`headers`](EmailObjectClass#headers), [`to`](EmailObjectClass#to), [`from`](EmailObjectClass#from)...) are then returned. This option allows you to optimize the downloading step when a lot of emails are on the server. +Optionally, you can pass `true` in the *headerOnly* parameter to exclude the body parts from the returned `Email` object. Only headers properties ([`headers`](EmailObjectClass.md#headers), [`to`](EmailObjectClass.md#to), [`from`](EmailObjectClass.md#from)...) are then returned. This option allows you to optimize the downloading step when a lot of emails are on the server. :::note @@ -251,7 +251,7 @@ The function returns Null if: **Returned object** -`.getMail()` returns an [`Email` object](EmailObjectClass#properties). +`.getMail()` returns an [`Email` object](EmailObjectClass.md#properties). ##### Example @@ -413,7 +413,7 @@ The function returns an empty BLOB if: **Returned blob** -`.getMIMEAsBlob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass#properties) with the [`MAIL Convert from MIME`](commands/mailConvertFromMIME.md) command. +`.getMIMEAsBlob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass.md#properties) with the [`MAIL Convert from MIME`](commands/mailConvertFromMIME.md) command. ##### Example diff --git a/docs/language/QodlyEvents.md b/docs/language/QodlyEvents.md index 6cf50a6ec8..a20a42d5ab 100644 --- a/docs/language/QodlyEvents.md +++ b/docs/language/QodlyEvents.md @@ -16,8 +16,8 @@ The **QodlyEvents** class is a **shared singleton**, meaning a single instance i || |---| -|[](#onStartup)    | -|[](#onStop)    | +|[](#onstartup)    | +|[](#onstop)    | |[](#me)    | @@ -32,7 +32,7 @@ The **QodlyEvents** class is a **shared singleton**, meaning a single instance i #### Description -The `.onStartup()` function triggers the [onStartup() function](../studio/qodlyEventsClassInterface#accessing-qodlyevents) logic defined in the QodlyEvents class interface. The .onStartup() function executes automatically when the server starts by calling cs.QodlyEvents.me.onStartup(). +The `.onStartup()` function triggers the [onStartup() function](../studio/qodlyEventsClassInterface.md#accessing-qodlyevents) logic defined in the QodlyEvents class interface. The .onStartup() function executes automatically when the server starts by calling cs.QodlyEvents.me.onStartup(). Additionally, developers can manually execute .onStartup() when needed, such as: - Explicitly triggering the startup logic from another function. @@ -56,7 +56,7 @@ cs.QodlyEvents.me.onStartup({ config: "default" }) #### Description -The `.onStop()` function triggers the [onStop()](../studio/qodlyEventsClassInterface#accessing-qodlyevents) function logic defined in the QodlyEvents class interface. The .onStop() function executes automatically when the server shuts down by calling cs.QodlyEvents.me.onStop(). +The `.onStop()` function triggers the [onStop()](../studio/qodlyEventsClassInterface.md#accessing-qodlyevents) function logic defined in the QodlyEvents class interface. The .onStop() function executes automatically when the server shuts down by calling cs.QodlyEvents.me.onStop(). Additionally, developers can manually execute .onStop() when needed, such as: - Explicitly triggering the shutdown logic before stopping the server. @@ -86,7 +86,7 @@ cs.QodlyEvents.me.onStop({ saveState: true }) The `.me` property returns the current instance of the QodlyEvents singleton. -It must be used when calling functions like [onStartup()](#onStartup) or [`onStop()`](#onStop). +It must be used when calling functions like [onStartup()](#onstartup) or [`onStop()`](#onstop). :::tip Why .me is Required: If you attempt to call: diff --git a/docs/language/SMTPTransporterClass.md b/docs/language/SMTPTransporterClass.md index 980291038f..1f8ace2241 100644 --- a/docs/language/SMTPTransporterClass.md +++ b/docs/language/SMTPTransporterClass.md @@ -172,7 +172,7 @@ The SMTP connection is automatically closed: |Parameter|Type||Description| |---------|--- |:---:|------| -|mail|object|→|[Email](EmailObjectClass#properties) to send| +|mail|object|→|[Email](EmailObjectClass.md#properties) to send| |Result|object|←|SMTP status| diff --git a/docs/language/SignalClass.md b/docs/language/SignalClass.md index 5158eb6f1d..28953c715f 100644 --- a/docs/language/SignalClass.md +++ b/docs/language/SignalClass.md @@ -26,12 +26,12 @@ Any worker/process calling the `.wait()` method will suspend its execution until Note that to avoid blocking situations, the `.wait()` can also return after a defined timeout has been reached. -Signal objects are created with the [newSignal](#newsignal) command. +Signal objects are created with the [newSignal](./commands/newSignal.md) command. ### Working with signals -In QodlyScript, you create a new signal object by calling the [`newSignal`](#newsignal) command. Once created, this signal must be passed as a parameter to the [`callWorker`](commands/callWorker.md) command so that it can modify it when it has finished the task you want to wait for. +In QodlyScript, you create a new signal object by calling the [`newSignal`](./commands/newSignal.md) command. Once created, this signal must be passed as a parameter to the [`callWorker`](commands/callWorker.md) command so that it can modify it when it has finished the task you want to wait for. - `signal.wait()` must be called from the worker that needs another worker to finish a task in order to continue. - `signal.trigger()` must be called from the worker that finished its execution in order to release all others. diff --git a/docs/language/SystemWorkerClass.md b/docs/language/SystemWorkerClass.md index 1c331b4aa4..79311a2f6b 100644 --- a/docs/language/SystemWorkerClass.md +++ b/docs/language/SystemWorkerClass.md @@ -12,11 +12,11 @@ The `SystemWorker` class is available from the `4D` class store. || |---| -|[](#4d-systemworker-new)    | +|[](#4dsystemworkernew)    | |[](#closeinput)     | |[](#commandline)     | |[](#currentdirectory)     | -|[](#dataype)     | +|[](#datatype)     | |[](#encoding)     | |[](#errors)     | |[](#exitcode)     | @@ -128,7 +128,7 @@ When the executable waits for all data to be received through `postMessage()`, ` #### Description -The `.commandLine` property contains the command line passed as parameter to the [`new()`](#4d-systemworker-new) function. +The `.commandLine` property contains the command line passed as parameter to the [`new()`](#4dsystemworkernew) function. This property is **read-only**. @@ -348,7 +348,7 @@ Actually, `.wait()` waits until the end of processing of the `onTerminate` formu :::note -During the `.wait()` execution, callback functions are executed, whether they originate from other instances of the same class, or instances of any classes supporting the same callback mechanism (`HTTPRequest`, `TCPConnection`, `SystemWorker`). You can exit from a `.wait()` by calling [`shutdown()`](#shutdown) or `terminate()` (depending on the API) from a callback. +During the `.wait()` execution, callback functions are executed, whether they originate from other instances of the same class, or instances of any classes supporting the same callback mechanism (`HTTPRequest`, `TCPConnection`, `SystemWorker`). You can exit from a `.wait()` by calling `shutdown()` or [`terminate()`](#terminate) (depending on the API) from a callback. ::: diff --git a/docs/language/TCPConnectionClass.md b/docs/language/TCPConnectionClass.md index b0a64e18f5..d427b63a2c 100644 --- a/docs/language/TCPConnectionClass.md +++ b/docs/language/TCPConnectionClass.md @@ -93,9 +93,9 @@ TCPConnection objects provide the following properties and functions: || |---| -|[](#closed)
                        | +|[](#closed)
                        | |[](#errors)
                        | -|[](#noDelay)
                        | +|[](#nodelay)
                        | |[](#send)
                        | |[](#shutdown)
                        | |[](#wait)
                        | diff --git a/docs/language/UsersClass.md b/docs/language/UsersClass.md index 0f0fae8ff9..12250838de 100644 --- a/docs/language/UsersClass.md +++ b/docs/language/UsersClass.md @@ -79,7 +79,7 @@ The User object returned by the function above contains the following properties |Property|Type|Description| |---|---|---| |email|String|The user's email used for account creation.The user's email used for account creation.| -|role|String|The user's role within the application [Roles & Privileges](../studio/roles/rolesPrivilegesOverview).| +|role|String|The user's role within the application [Roles & Privileges](../studio/roles/rolesPrivilegesOverview.md).| |firstname|String|The user's first name.| |lastname|String|The user's last name.| diff --git a/docs/language/WebFormClass.md b/docs/language/WebFormClass.md index 4c6f1770cb..9e936ebf53 100644 --- a/docs/language/WebFormClass.md +++ b/docs/language/WebFormClass.md @@ -133,7 +133,7 @@ webForm.setError("My error message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-error.png) @@ -171,7 +171,7 @@ webForm.setMessage("My information message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-info.png) @@ -204,6 +204,6 @@ webForm.setWarning("My warning message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-warning.png) diff --git a/docs/language/WebFormItemClass.md b/docs/language/WebFormItemClass.md index 1a929905b6..3a41975d1b 100644 --- a/docs/language/WebFormItemClass.md +++ b/docs/language/WebFormItemClass.md @@ -8,7 +8,7 @@ The `4D.WebFormItem` class allows you to handle the behavior of your webform com `4D.WebFormItem` objects are properties of the [`4D.WebForm`](WebFormClass) object returned by the [`webForm`](commands/webForm) command. -When you call the [`webForm`](./commands/webForm) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](../studio/pageLoaders/pageLoaderOverview#server-side) in your webform. +When you call the [`webForm`](./commands/webForm) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](../studio/pageLoaders/pageLoaderOverview.md#server-side) in your webform. For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference. @@ -19,9 +19,9 @@ For example, `WebFormObject.myImage` refers to the image component with `myImage || |---| -|[](#addclass)    | +|[](#addcssclass)    | |[](#hide)    | -|[](#removeclass)    | +|[](#removecssclass)    | |[](#show)    | diff --git a/docs/language/WebServerClass.md b/docs/language/WebServerClass.md deleted file mode 100644 index e22f374ced..0000000000 --- a/docs/language/WebServerClass.md +++ /dev/null @@ -1,587 +0,0 @@ ---- -id: WebServerClass -title: WebServer ---- - - -The `WebServer` class API allows you to start and monitor a web server for the your application. This class is available from the `4D` class store. - -Web server objects are instantiated with the [`webServer`](#webserver) command. - - - -### Functions and properties - -|| -|---| -|[](#certificatefolder)    | -|[](#characterset)    | -|[](#ciphersuite)    | -|[](#corsenabled)    | -|[](#corssettings)     | -|[](#debuglog)    | -|[](#defaulthomepage)    | -|[](#hstsenabled)     | -|[](#hstsmaxage)    | -|[](#httpcompressionlevel)    | -|[](#httpcompressionthreshold)    | -|[](#httpenabled)    | -|[](#httpport)    | -|[](#httpsenabled)    | -|[](#httpsport)    | -|[](#httptrace)    | -|[](#ipaddresstolisten)    | -|[](#isrunning)    | -|[](#keepsession)    | -|[](#logrecording)    | -|[](#maxrequestsize)    | -|[](#mintlsversion)    | -|[](#name)    | -|[](#opensslversion)    | -|[](#perfectforwardsecrecy)    | -|[](#rootfolder)    | -|[](#scalablesession)    | -|[](#sessioncookiedomain)    | -|[](#sessioncookiename)    | -|[](#sessioncookiepath)    | -|[](#sessioncookiesamesite)    | -|[](#sessionipaddressvalidation)    | -|[](#start)    | -|[](#stop)    | - - -## .certificateFolder - -**.certificateFolder** : string - - -Path of the folder where the certificate files are located. The path is formatted in POSIX full path using filesystems. When using this property in the `settings` parameter of the [`.start()`](#start) function, it can be a [`Folder` object](FolderClass.md). - - - - -## .characterSet - -**.characterSet** : number
                        **.characterSet** : string - - -The character set that the Web Server should use to communicate with browsers connecting to the application The default value is UTF-8. Can be a MIBEnum integer or a Name string, identifiers [defined by IANA](http://www.iana.org/assignments/character-sets/character-sets.xhtml). Here is the list of identifiers corresponding to the character sets supported by the Qodly Web Server: - -- 4 = ISO-8859-1 -- 12 = ISO-8859-9 -- 13 = ISO-8859-10 -- 17 = Shift-JIS -- 2024 = Windows-31J -- 2026 = Big5 -- 38 = euc-kr -- 106 = UTF-8 -- 2250 = Windows-1250 -- 2251 = Windows-1251 -- 2253 = Windows-1253 -- 2255 = Windows-1255 -- 2256 = Windows-1256 - - - - - -## .cipherSuite - -**.cipherSuite** : string - - -The cipher list used for the secure protocol Sets the priority of ciphering algorithms implemented by the Qodly web server. Can be a sequence of strings separated by colons (for example "ECDHE-RSA-AES128-..."). See the [ciphers page](https://www.openssl.org/docs/manmaster/man1/ciphers.html) on the OpenSSL site. - - - - - -## .CORSEnabled - -**.CORSEnabled** : boolean - - -The CORS (*Cross-origin resource sharing*) service status for the web server For security reasons, "cross-domain" requests are forbidden at the browser level by default. When enabled (true), XHR calls (e.g. REST requests) from Web pages outside the domain can be allowed in your application (you need to define the list of allowed addresses in the CORS domain list, see `CORSSettings` below). When disabled (false, default), all cross site requests sent with CORS are ignored. When enabled (true) and a non-allowed domain or method sends a cross site request, it is rejected with a "403 - forbidden" error response. - -Default: false (disabled) - -For more information about CORS, please refer to the [Cross-origin resource sharing page](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) on Wikipedia. - - - - - -## .CORSSettings - -**.CORSSettings** : collection - - -Contains the list of allowed hosts and methods for the CORS service (see [`CORSEnabled`](#corsenabled) property). Each object must contain a **host** property and, optionally, a **methods** property: - - -- **host** (text, mandatory): Domain name or IP address from where external pages are allowed to send data requests to the Server via CORS. Multiple domain attributes can be added to create a white list. If *host* is not present or empty, the object is ignored. Several syntaxes are supported: - - 192.168.5.17:8081 - - 192.168.5.17 - - 192.168.* - - 192.168.*:8081 - - <http://192.168.5.17:8081> - - <http://*.myDomain.com> - - <http://myProject.myDomain.com> - - *.myDomain.com - - myProject.myDomain.com - - \* - -- **methods** (text, optional): Accepted HTTP method(s) for the corresponding CORS host. Separate each method with a "," (e,g,: "post,get"). If *methods* is empty, null, or undefined, all methods are enabled. - - - - - -## .debugLog - -**.debugLog** : number - - -The status of the HTTP request log file (HTTPDebugLog_nn.txt, stored in the "Logs" folder of the application -- nn is the file number). - -- 0 = disabled -- 1 = enabled without body parts (body size is provided in this case) -- 3 = enabled with body parts in response only -- 5 = enabled with body parts in request only -- 7 = enabled with body parts in response and request - - - - - -## .defaultHomepage - -**.defaultHomepage** : string - - -The name of the default home page or "" to not send the custom home page. - - - - - -## .HSTSEnabled - -**.HSTSEnabled** : boolean - - -The HTTP Strict Transport Security (HSTS) status HSTS allows the Web server to declare that browsers should only interact with it via secure HTTPS connections. Browsers will record the HSTS information the first time they receive a response from the web server, then any future HTTP requests will automatically be transformed into HTTPS requests. The length of time this information is stored by the browser is specified with the `HSTSMaxAge` property. HSTS requires that HTTPS is enabled on the server. HTTP must also be enabled to allow initial client connections. - - - - - -## .HSTSMaxAge - - - -**.HSTSMaxAge** : number - - -The maximum length of time (in seconds) that HSTS is active for each new client connection This information is stored on the client side for the specified duration. - -Default value: 63072000 (2 years). - - - - - -## .HTTPCompressionLevel - -**.HTTPCompressionLevel** : number - - -The compression level for all compressed HTTP exchanges for the HTTP server (client requests or server replies) This selector lets you optimize exchanges by either prioritizing speed of execution (less compression) or the amount of compression (less speed). - -Possible values: - -- 1 to 9 (where 1 is the fastest compression and 9 the highest). -- -1 = set a compromise between speed and rate of compression. - -Default = 1 (faster compression). - - - - - -## .HTTPCompressionThreshold - -**.HTTPCompressionThreshold** : number - - -The size threshold (bytes) for requests below which exchanges should not be compressed This setting is useful in order to avoid losing machine time by compressing small exchanges. - -Default compression threshold = 1024 bytes - - - - - -## .HTTPEnabled - -**.HTTPEnabled** : boolean - - -The HTTP protocol state - - - - - - -## .HTTPPort - -**.HTTPPort** : number - - -The listening IP port number for HTTP - -Default = 80 - - - - - - -## .HTTPSEnabled - -**.HTTPSEnabled** : boolean - - -The HTTPS protocol state - - - - - -## .HTTPSPort - -**.HTTPSPort** : number - - -The listening IP port number for HTTPS - -Default = 443 - - - - - - -## .HTTPTrace - -**.HTTPTrace** : boolean - - -The activation of `HTTP TRACE` For security reasons, by default the Web server rejects `HTTP TRACE` requests with an error 405. When enabled, the web server replies to `HTTP TRACE` requests with the request line, header, and body. - - - - - - -## .IPAddressToListen - -**.IPAddressToListen** : string - - -The IP address on which the Web Server will receive HTTP requests By default, no specific address is defined ("0.0.0.0"). Both IPv6 string formats and IPv4 string formats are supported. - - - - - -## .isRunning - -**.isRunning** : boolean - - -*Read-only property* - -The web server running state - - - - - -## .keepSession - -**.keepSession** : boolean - - -Always `false` - - - - - - -## .logRecording - -**.logRecording** : number - - -The log requests (logweb.txt) recording value - -- 0 = Do not record (default) -- 1 = Record in CLF format -- 2 = Record in DLF format -- 3 = Record in ELF format -- 4 = Record in WLF format - - - - - - -## .maxRequestSize - -**.maxRequestSize** : number - - -Contains the maximum size (in bytes) of incoming HTTP requests (POST) that the web server is allowed to process Passing the maximum value (2147483647) means that, in practice, no limit is set. This limit is used to avoid web server saturation due to incoming requests that are too large. If a request reaches this limit, the web server rejects it. - -Possible values: 500000 - 2147483647 - - - - - - - -## .minTLSVersion - -**.minTLSVersion** : number - - -The minimum TLS version accepted for connections Connection attempts from clients supporting only versions below the minimum will be rejected. - -Possible values: - -- 3 = TLSv1_2 -- 4 = TLSv1_3 (default) - -If modified, the server must be restarted to use the new value. - - - - - -## .name - -**.name** : string - - -*Read-only property* - -The name of the web server application - - - - - -## .openSSLVersion - -**.openSSLVersion** : string - - -*Read-only property* - -The version of the OpenSSL library used - - - - - -## .perfectForwardSecrecy - -**.perfectForwardSecrecy** : boolean - - -*Read-only property* - -The PFS availability on the server - - - - -## .rootFolder - -**.rootFolder** : string - - -The path of web server root folder The path is formatted in POSIX full path using filesystems. When using this property in the `settings` parameter, it can be a `Folder` object. - - - - - -## .scalableSession - -**.scalableSession** : boolean - - -Always `true` - - - - - -## .sessionCookieDomain - -**.sessionCookieDomain** : string - - -The "domain" field of the session cookie Used to control the scope of the session cookies. If you set, for example, the value "/*.myCompany.com" for this selector, the client will only send a cookie when the request is addressed to the domain ".myCompany.com", which excludes servers hosting external static data. - - - - - -## .sessionCookieName - -**.sessionCookieName** : string - - - -The name of the cookie used for storing the session ID - -*Read-only property* - - - - - -## .sessionCookiePath - -**.sessionCookiePath** : string - - -The "path" field of the session cookie Used to control the scope of the session cookies. If you set, for example, the value "/QACTION" for this selector, the client will only send a cookie for dynamic requests beginning with QACTION, and not for pictures, static pages, etc. - - - - - -## .sessionCookieSameSite - -**.sessionCookieSameSite** : string - - -The "SameSite" session cookie value Possible values (using constants): - -|Constant|Value|Description| -|---|---|---| -|Web SameSite Strict|"Strict"|*Default value* - Cookies are only sent in a first-party context, i.e. context matching the domain of the current site, and never to third-party websites.| -|Web SameSite Lax|"Lax"|Cookies are also sent on cross-site subrequests (for example to load images or frames into a third-party site), but only when a user is navigating to the origin site (i.e. when following a link).| -|Web SameSite None|"None"|Cookies are sent in all contexts, i.e in responses to both first-party and cross-origin requests. When "None" value is used, the cookie `Secure` attribute must also be set (or the cookie will be blocked).| - -This property allows you to declare if your cookie should be restricted to a first-party or same-site context, as a protection from some cross-site request forgery attacks ([CSRF](https://developer.mozilla.org/en-US/docs/Glossary/CSRF)). - -> For a detailed description of the `SameSite` attribute, please refer to the [Mozilla documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) or [this web.dev page](https://web.dev/samesite-cookies-explained/). - -The `Secure` attribute value of the session cookie is automatically set to "True" if the connection is HTTPS (whatever the `SameSite` attribute value). - - - - - -## .sessionIPAddressValidation - -**.sessionIPAddressValidation** : boolean - - -The IP address validation for session cookies For security reasons, by default the web server checks the IP address of each request containing a session cookie and rejects it if this address does not match the IP address used to create the cookie. In some specific applications, you may want to disable this validation and accept session cookies, even when their IP addresses do not match. For example when mobile devices switch between WiFi and 3G/4G/5G networks, their IP address will change. In this case, you can allow clients to be able to continue using their web sessions even when the IP addresses change (this setting lowers the security level of your application). - - - - - -## .start() - - -**.start**() : Object
                        **.start**( *settings* : Object ) : Object - - - - -|Parameter|Type||Description| -|---|---|----|---| -|settings|Object|→|Web server settings to set at startup| -|Result|Object|←|Status of the web server startup| - - - -The `.start()` function starts the web server using properties set in the optional *settings* object parameter. - -The web server starts with default settings defined in the settings file of the project. However, using the *settings* parameter, you can define customized properties for the web server session. - -All properties of [Web Server objects](#functions-and-properties) can be customized, except read-only properties ([.isRunning](#isrunning), [.name](#name), [.openSSLVersion](#opensslversion), [.perfectForwardSecrecy](#perfectforwardsecrecy), and [.sessionCookieName(#sessioncookiename)]). - -Customized session settings will be reset when the [`.stop()`](#stop) function is called. - -#### Returned object - -The function returns an object describing the Web server launch status. This object can contain the following properties: - -|Property|| Type| Description| -|---|---|---|---| -|success||boolean|true if the web server was correctly started, false otherwise -|errors ||collection|Error stack (not returned if the web server started successfully)| -||\[].errCode|number|Error code| -||\[].message|string|Description of the error | -||\[].componentSignature|string|Signature of the internal component which returned the error| - ->If the Web server was already launched, an error is returned. - -#### Example - -```qs - var settings,result : object - var webServer : 4D.WebServer - - settings = { HSTSEnabled: true, defaultHomepage:"myHomepage.html" } - - result = webServer.start(settings) - if(result.success) - //... - end -``` - - - - - -## .stop() - - -**.stop**() - - - - -|Parameter|Type||Description| -|---|---|----|---| -||||Does not require any parameters| - - -The `.stop()` function stops the web server - -If the web server was started, all web connections and web processes are closed, once the currently handled requests are finished. If the web server was not started, the function does nothing. - ->This function resets the customized web settings defined for the session using the *settings* parameter of the [`.start()`](#start) function, if any. - -#### Example - -To stop the Web server: - -```qs - webServer.stop() -``` - - diff --git a/docs/language/ZipArchiveClass.md b/docs/language/ZipArchiveClass.md index 969dbc287c..acff511654 100644 --- a/docs/language/ZipArchiveClass.md +++ b/docs/language/ZipArchiveClass.md @@ -6,8 +6,8 @@ title: ZIPArchive A QodlyScript ZIP archive is a `File` or `folder` object containing one or more files or folders, which are compressed to be smaller than their original size. These archives are created with a ".zip" extension and can be used to save space or transfer files via mediums which may have size limitations (e.g., email or network). -- You create a ZIP archive with the [zipCreateArchive](#zipcreatearchive) command. -- [`ZIPFile`](ZipFileClass.md) and [`ZIPFolder`](ZipFolderClass.md) instances are available through the [`root`](#root) property (`ZIPFolder`) of the object returned by [zipReadArchive](#zipreadearchive) command. +- You create a ZIP archive with the [zipCreateArchive](./commands/zipCreateArchive.md) command. +- [`ZIPFile`](ZipFileClass.md) and [`ZIPFolder`](ZipFolderClass.md) instances are available through the [`root`](#root) property (`ZIPFolder`) of the object returned by [zipReadArchive](./commands/zipReadArchive.md) command. ### Example diff --git a/docs/language/basics/lang-classes.md b/docs/language/basics/lang-classes.md index 96d3dd5992..195a2fac54 100644 --- a/docs/language/basics/lang-classes.md +++ b/docs/language/basics/lang-classes.md @@ -8,7 +8,7 @@ title: Classes The QodlyScript language supports the concept of **classes**. In a programming language, using a class allows you to define an object behaviour with associated properties and functions. -Once a user class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can [`extend`](#class-extends-classname) another class, and then inherits from its [functions](#function) and properties ([declared](#property) and [computed](#function-get-and-function-set)). +Once a user class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can [`extend`](#extends-classname) another class, and then inherits from its [functions](#function) and properties ([declared](#property) and [computed](#function-get-and-function-set)). > The class model in QodlyScript is similar to classes in JavaScript, and based on a chain of prototypes. @@ -41,7 +41,7 @@ hello = person.sayHello() //"Hello John Doe" ### User classes -To create a new user class in Qodly Studio, click on the **+** button of the Explorer and give a name to the class: +To [create a new user class](../../studio/coding.md#creating) in Qodly Studio, click on the **+** button of the Explorer and give a name to the class: ![class](img/class3.png) @@ -51,10 +51,9 @@ You can also select **New > Class** from the menu bar, enter a name and click ** ![class](img/class2.png) -### Data Model classes - -Data Model classes are automatically created when you click on the `<...>` button in the model editor, when a dataclass is selected. For more information, please refer to [this section](../../orda/data-model.md#creating-data-model-classes). +### DataStore classes +Data Model classes are created when you click on the `+` button in the model editor in the `DataStore Classes` setion. For more information, please refer to [this section](../../studio/model/model-editor-interface.md#datastore-classes-and-attributes). ### Class definition @@ -65,7 +64,7 @@ When naming classes, you should keep in mind the following rules: - Class names are case sensitive. - Giving the same name to a user class and a datastore's dataclass is not recommended, in order to prevent any conflict. -A user class in Qodly is defined by a specific [method file (.4qs)](../../studio/coding#4qs-files), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. For example, a class named "Polygon" will be based upon the following file: +A user class in Qodly is defined by a specific [method file (.4qs)](../../studio/coding.md#4qs-files), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. For example, a class named "Polygon" will be based upon the following file: ``` Project folder @@ -93,7 +92,7 @@ Available classes are accessible from their class stores. Two class stores are a The `cs` command returns a *Class Store* object containing all user classes defined in the current project. This command is necessary to instantiate an object from a user class. -It returns all user classes defined in the opened project, as well as [Data Model classes](../../orda/data-model.md#creating-data-model-classes). +It returns all user classes defined in the opened project, as well as [Data Model classes](../../studio/coding.md#classes). #### Example @@ -738,14 +737,14 @@ The `this` command returns a reference to th In most cases, the value of `this` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. -When executing a formula object created by the [`formula`](../FunctionClass#formula-objects) or [`formulaFromString`](../commands/formulaFromString) commands, `this` returns a reference to the object currently processed by the formula. For example: +When executing a formula object created by the [`formula`](../FunctionClass.md#formula-objects) or [`formulaFromString`](../commands/formulaFromString) commands, `this` returns a reference to the object currently processed by the formula. For example: ```qs o = newObject("prop",42,"f",formula(this.prop)) val = o.f() //42 ``` -When a [constructor](#class-constructor) function is used (with the [`new()`](../ClassClass.md#new) function), its `this` is bound to the new object being constructed. +When a [constructor](#constructor) function is used (with the [`new()`](../ClassClass.md#new) function), its `this` is bound to the new object being constructed. ```qs //Class: ob @@ -894,7 +893,7 @@ Singleton classes are not supported by [ORDA-based classes](../../orda/data-mode ### Creating and using singletons -You declare singleton classes by adding appropriate keyword(s) before the [`Class constructor`](#class-constructor): +You declare singleton classes by adding appropriate keyword(s) before the [`Class constructor`](#constructor): - To declare a (process) singleton class, write `singleton Class Constructor()`. - To declare a shared singleton class, write `shared singleton Class constructor()`. @@ -919,7 +918,7 @@ The [`.isSessionSingleton`](../ClassClass.md#issessionsingleton) property of Cla :::info -Singleton classes are only supported in [User classes](#user-classes). They are NOT supported in [Data Model classes](#data-model-classes) such as [Dataclass](../../orda/data-model.md#dataclass). +Singleton classes are only supported in [User classes](#user-classes). They are NOT supported in [Data Model classes](#datastore-classes) such as [Dataclass](../../orda/data-model.md#dataclass). ::: diff --git a/docs/language/basics/lang-identifiers.md b/docs/language/basics/lang-identifiers.md index 915b69813c..8e13a301c8 100644 --- a/docs/language/basics/lang-identifiers.md +++ b/docs/language/basics/lang-identifiers.md @@ -21,7 +21,7 @@ A class name must be compliant with standard [property naming rules](#object-pro :::warning -Giving the same name to a user class and a [dataclass](#dataclass) is not recommended, in order to prevent any conflict. +Giving the same name to a [user class](../../studio/coding.md#user-classes) and a [dataclass](../../studio/coding.md#orda-classes) is not recommended, in order to prevent any conflict. ::: diff --git a/docs/language/basics/lang-methods.md b/docs/language/basics/lang-methods.md index 8647a15554..02714257a7 100644 --- a/docs/language/basics/lang-methods.md +++ b/docs/language/basics/lang-methods.md @@ -111,7 +111,7 @@ end You can encapsulate your methods in **formula** objects and call them from your objects. -The [`formula`](../FunctionClass#formula-objects) and [`formulaFromString`](../commands/formulaFromString) commands allow you to create formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. +The [`formula`](../FunctionClass.md#formula-objects) and [`formulaFromString`](../commands/formulaFromString) commands allow you to create formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. To execute a method stored in an object property, use the **()** operator after the property name. For example: diff --git a/docs/language/basics/lang-null-undefined.md b/docs/language/basics/lang-null-undefined.md index 35d3fd35b2..ede0a034ba 100644 --- a/docs/language/basics/lang-null-undefined.md +++ b/docs/language/basics/lang-null-undefined.md @@ -35,9 +35,9 @@ This function allows you to assign or compare the **null** value to the followin |:----|:----| |object property values|Comparing Null to an object property returns true if the property value is null, and false otherwise. To simplify code, comparing Null also returns true if the property does not exist in the object (i.e. is [`undefined`](#undefined)), see example 4. |collection elements|When a collection is expanded by adding non-adjacent elements, any intermediary elements get automatically the `null` value.| -|object variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| -|collection variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| -|picture variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| +|object variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| +|collection variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| +|picture variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| |variant variables| | diff --git a/docs/language/basics/lang-object.md b/docs/language/basics/lang-object.md index 7607d5f0a4..72b0b8c910 100644 --- a/docs/language/basics/lang-object.md +++ b/docs/language/basics/lang-object.md @@ -202,7 +202,7 @@ For more information, please refer to the [`null`](lang-null-undefined.md#null) Evaluating an object property can sometimes produce an **undefined** value. Typically when trying to read or assign undefined expressions, the QodlyScript will generate errors. This does not happen in the following cases: -- Reading a property of an undefined object or value returns `undefined`; assigning an undefined value to variables has the same effect as calling [`clearVariable`](lang-variables.md#clearvariable) with them: +- Reading a property of an undefined object or value returns `undefined`; assigning an undefined value to variables has the same effect as calling [`clearVariable`](./lang-variables.md#clearvariable) with them: ```qs var o : object diff --git a/docs/language/basics/lang-operators.md b/docs/language/basics/lang-operators.md index 47369f7ea6..9b32c0efde 100644 --- a/docs/language/basics/lang-operators.md +++ b/docs/language/basics/lang-operators.md @@ -303,7 +303,7 @@ All other values are considered **truthy**, including: * 0 - numeric zero (integer or otherwise) -In QodlyScript, **truthy** and **falsy** evaluation reflects the **usability** of a value, which means that a truthy value exists and can be processed by the code without generating errors or unexpected results. The rationale behind this is to provide a convenient way to handle *undefined* and *null* values in objects and collections, so that a reduced number of [if…else](lang-control-flow#ifelseend) statements are necessary to avoid runtime errors. +In QodlyScript, **truthy** and **falsy** evaluation reflects the **usability** of a value, which means that a truthy value exists and can be processed by the code without generating errors or unexpected results. The rationale behind this is to provide a convenient way to handle *undefined* and *null* values in objects and collections, so that a reduced number of [if…else](lang-control-flow.md#ifelseend) statements are necessary to avoid runtime errors. For example, when you use a [short-circuit OR operator](#short-circuit-or-operator-): diff --git a/docs/language/basics/lang-parameters.md b/docs/language/basics/lang-parameters.md index 154d3aba82..0a3760d635 100644 --- a/docs/language/basics/lang-parameters.md +++ b/docs/language/basics/lang-parameters.md @@ -387,7 +387,7 @@ firstnames = ds.Teachers.all().extract("firstname") //1 parameter addresses = ds.Teachers.all().extract("address",ck keep null) //2 parameters ``` -QodlyScript methods and functions also accept such optional parameters. You can declare any number of parameters. If you call a method or function with less parameters than declared, missing parameters are processed as default values in the called code, [according to their type](lang-data-types#overview). For example: +QodlyScript methods and functions also accept such optional parameters. You can declare any number of parameters. If you call a method or function with less parameters than declared, missing parameters are processed as default values in the called code, [according to their type](lang-data-types.md#overview). For example: ```qs // "concate" function of myClass diff --git a/docs/language/basics/lang-quicktour.md b/docs/language/basics/lang-quicktour.md index 8eab9af235..c30a1321d9 100644 --- a/docs/language/basics/lang-quicktour.md +++ b/docs/language/basics/lang-quicktour.md @@ -1,8 +1,11 @@ --- id: lang-quicktour title: A Quick Tour +keywords: [qodlyscript, qodlyscript tour] --- +# A Quick Tour + Since the QodlyScript language is highly related to web development, printing the traditional "Hello, world!" message on screen only requires a Page to be displayed and the following line: ```qs diff --git a/docs/language/commands/base64Encode.md b/docs/language/commands/base64Encode.md index a56249e04a..10ce349041 100644 --- a/docs/language/commands/base64Encode.md +++ b/docs/language/commands/base64Encode.md @@ -20,7 +20,7 @@ title: base64Encode The `base64Encode` command encodes the string or blob value passed in the *toEncode* parameter in Base64 or Base64URL format. -Base64 encoding modifies 8-bit coded data so that they do not keep more than 7 useful bits. This encoding is required, for example, for handling blobs using xml. Base64URL is an alernative encoding with a specific processing for URLs and filenames (see [rfc4648](#https://tools.ietf.org/html/rfc4648#section-5)). +Base64 encoding modifies 8-bit coded data so that they do not keep more than 7 useful bits. This encoding is required, for example, for handling blobs using xml. Base64URL is an alernative encoding with a specific processing for URLs and filenames (see [rfc4648](https://tools.ietf.org/html/rfc4648#section-5)). Pass in *toEncode* a string or blob value to encode. diff --git a/docs/language/commands/command-list.md b/docs/language/commands/command-list.md index 57b19108ca..054afa60bf 100644 --- a/docs/language/commands/command-list.md +++ b/docs/language/commands/command-list.md @@ -124,8 +124,6 @@ title: Commands |[](verifyPasswordHash.md)
                          | |[](webEvent.md)
                          | |[](webForm.md)
                          | -|[](webServer.md)
                          | -|[](webServerList.md)
                          | |[](yearOf.md)
                          | |[](zipCreateArchive.md)
                          | |[](zipReadArchive.md)
                          | diff --git a/docs/language/commands/getProcessActivity.md b/docs/language/commands/getProcessActivity.md index 04f8302f43..891189b01f 100644 --- a/docs/language/commands/getProcessActivity.md +++ b/docs/language/commands/getProcessActivity.md @@ -52,7 +52,7 @@ ID|integer|Process unique ID visible|boolean|true if visible, false otherwise systemID|string|ID for the user process, Qodly process or spare process type|integer|Running process type.
                      • kHTTPLogFlusher (-58)
                      • kMainProcess (-39)
                      • kClientManagerProcess (-31)
                      • kCompilerProcess (-29)
                      • kMonitorProcess (-26)
                      • kInternalTimerProcess (-25)
                      • kLogFileProcess (-20)
                      • kBackup process (-19)
                      • kInternalProcess (-18)
                      • kOnExitProcess (-16)
                      • kWebServerProcess (-13)
                      • kOtherProcess (-10)
                      • kEventManager (-8)
                      • kIndexingProcess (-5)
                      • kCacheManager (-4)
                      • kWebProcessWithNoContext (-3)
                      • kDesignProcess (-2)
                      • kNone (0)
                      • kWorkerProcess (5)
                      • -|state|integer|Current status (see [`processState`](#processstate) constant list)| +|state|integer|Current status (see [`processState`](../commands/processState.md) constant list)| |cpuUsage|number|Percentage of time devoted to this process (between 0 and 1)| |cpuTime|number|Running time (seconds)| |preemptive|boolean|always true| diff --git a/docs/language/commands/newSharedCollection.md b/docs/language/commands/newSharedCollection.md index af5d5c4b31..9b2adf89ee 100644 --- a/docs/language/commands/newSharedCollection.md +++ b/docs/language/commands/newSharedCollection.md @@ -20,7 +20,7 @@ title: newSharedCollection The `newSharedCollection` command creates a new empty or prefilled shared collection and returns its reference. -Adding an element to this collection using the assignment operator must be surrounded by the [`use...end`](../basics/lang-shared.md#useend) structure, otherwise an error is generated (this is not necessary when adding elements using functions such as [`push()`](../CollectionClass#push) or [`map()`](../CollectionClass#map) because they automatically trigger an internal *use...end*). Reading an element without a *use...end* structure is, however, possible. +Adding an element to this collection using the assignment operator must be surrounded by the [`use...end`](../basics/lang-shared.md#useend) structure, otherwise an error is generated (this is not necessary when adding elements using functions such as [`push()`](../CollectionClass.md#push) or [`map()`](../CollectionClass.md#map) because they automatically trigger an internal *use...end*). Reading an element without a *use...end* structure is, however, possible. :::info diff --git a/docs/language/commands/newSignal.md b/docs/language/commands/newSignal.md index c6b3fdf5e2..a20eccc856 100644 --- a/docs/language/commands/newSignal.md +++ b/docs/language/commands/newSignal.md @@ -26,12 +26,12 @@ A signal is a shared object which can be passed as parameter from a worker proce Optionally, in the *description* parameter you can pass a custom text describing the signal. This text can also be defined after signal creation. -Since the signal object is a shared object, it can also be used to maintain user properties, including the [`.description`](../SignalClass/#description-1) property, by calling the `use...end` structure. +Since the signal object is a shared object, it can also be used to maintain user properties, including the [`.description`](../SignalClass#description-1) property, by calling the `use...end` structure. **Returned value** -A new [`4D.Signal` object](../SignalClass/#signal-object). +A new [`4D.Signal` object](../SignalClass#signal-object). #### Example diff --git a/docs/language/commands/openDatastore.md b/docs/language/commands/openDatastore.md index 72386e947f..df71d60f38 100644 --- a/docs/language/commands/openDatastore.md +++ b/docs/language/commands/openDatastore.md @@ -29,8 +29,8 @@ Pass in *connectionInfo* an object describing the remote datastore you want to c |Property| Type|Qodly application|Remote 4D application| |---|---|---|---| -|hostname|Text|[API Endpoint](../../cloud/apiKeys#api-endpoint) of the Qodly cloud instance|Name or IP address of the remote database + ":" + port number (port number is mandatory)| -|api-key|Text|[API Key](../../cloud/apiKeys#api-key) of the Qodly cloud instance|- (ignored)| +|hostname|Text|[API Endpoint](../../cloud/apiKeys.md#api-endpoint) of the Qodly cloud instance|Name or IP address of the remote database + ":" + port number (port number is mandatory)| +|api-key|Text|[API Key](../../cloud/apiKeys.md#api-key) of the Qodly cloud instance|- (ignored)| |idleTimeout|Longint|- (ignored)|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see [Closing sessions](https://developer.4d.com/docs/ORDA/datastores#closing-sessions).| |tls|Boolean|True to use secured connection. If omitted, false by default|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.| |type |Text |- (ignored)|must be "4D Server"| diff --git a/docs/language/commands/splitString.md b/docs/language/commands/splitString.md index 438646961c..cdc7f18bce 100644 --- a/docs/language/commands/splitString.md +++ b/docs/language/commands/splitString.md @@ -57,4 +57,4 @@ The *separator* parameter can be a multiple-character string: #### See also -[`collection.join()`](../CollectionClass#join)
                        +[`collection.join()`](../CollectionClass.md#join)
                        diff --git a/docs/language/commands/type.md b/docs/language/commands/type.md index b98c81f956..642c328317 100644 --- a/docs/language/commands/type.md +++ b/docs/language/commands/type.md @@ -40,7 +40,7 @@ You can apply the `type` function to variables and parameters of a method. :::note -You cannot apply the `type` function to scalar expressions such as object properties (emp.name) or collection elements (myColl[5]). To do this, you must use the [`valueType`](#valuetype) command. +You cannot apply the `type` function to scalar expressions such as object properties (emp.name) or collection elements (myColl[5]). To do this, you must use the [`valueType`](../commands/valueType.md) command. ::: diff --git a/docs/language/commands/webServer.md b/docs/language/commands/webServer.md deleted file mode 100644 index f6bd770140..0000000000 --- a/docs/language/commands/webServer.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -id: webServer -title: webServer ---- - - -**webServer** : 4D.WebServer - - - - -|Parameter|Type||Description| -|---|---|----|---| -|Result|4D.WebServer|←|Web server object| - - -The `webServer` command returns a Web server object. - -The returned Web server object contains the current values of the Web server properties. - -#### Example - -You want to know if the Web server is started: - -```qs - var vRun : boolean - vRun = webServer.isRunning -``` diff --git a/docs/language/commands/webServerList.md b/docs/language/commands/webServerList.md deleted file mode 100644 index cdab9cc5fb..0000000000 --- a/docs/language/commands/webServerList.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: webServerList -title: webServerList ---- - - -**webServerList** : collection - - - -|Parameter|Type||Description| -|---------|--- |:---:|------| -|Result|collection|→|Collection of the available Web Server objects| - - -The `webServerList` command returns a collection of all Web server objects available in the Qodly application. - -A Qodly application can contain anywhere from one to several Web servers: - -* 1 Web server for the host database (default Web server) -* 1 Web server for each component. - -All available Web servers are returned by the `webServerList` command, whether they are actually running or not. - -:::note - -The default Web server object is automatically loaded by Qodly at startup. On the other hand, each component Web server that you want to use must be instantiated using the [`webServer`](webServer.md) command. - -::: - -You can use the *name* property of the Web server object to identify the database or component to which each Web server object in the list is attached. For a detailed description of the Web server object, please refer to the [`webServer`](webServer.md) command. - -#### Example - -We want to know how many running web servers are available: - -```qs - var wSList : collection - var vRun : integer - var result : string - - wSList = webServerList - vRun = wSList.countValues(True,"isRunning") - result = string(vRun)+" web server(s) running on "+string(wSList.length)+" available." - -``` diff --git a/docs/language/commands/zipReadArchive.md b/docs/language/commands/zipReadArchive.md index 689a381795..76fdc06694 100644 --- a/docs/language/commands/zipReadArchive.md +++ b/docs/language/commands/zipReadArchive.md @@ -30,7 +30,7 @@ If the *zipFile* is password protected, you need to use the optional *password* **Archive object** -The returned `4D.ZipArchive` object contains a single [`root`](../ZipArchiveClass#root) property whose value is a `4D.ZipFolder` object. This folder describes the whole contents of the ZIP archive. +The returned `4D.ZipArchive` object contains a single [`root`](../ZipArchiveClass.md#root) property whose value is a `4D.ZipFolder` object. This folder describes the whole contents of the ZIP archive. #### Example diff --git a/docs/notes/1.0.0-beta-5.md b/docs/notes/1.0.0-beta-5.md index d1a1020168..86a17c8619 100644 --- a/docs/notes/1.0.0-beta-5.md +++ b/docs/notes/1.0.0-beta-5.md @@ -21,15 +21,15 @@ import ComingSoon from '@site/src/components/ComingSoon' ::: -- New [`onInit`](../studio/pageLoaders/pageLoaderOverview#triggers-and-events) Event for the Page: This event is executed during the rendering phase and is used to perform any necessary setup actions when a component is first created. +- New [`onInit`](../studio/pageLoaders/pageLoaderOverview.md#triggers-and-events) Event for the Page: This event is executed during the rendering phase and is used to perform any necessary setup actions when a component is first created. - Disable Components: Some components can now be disabled. When disabled, their associated actions are not triggered, and they appear with special rendering. This is particularly useful when using the [Page states](../studio/pageLoaders/states/stateOverview.md) feature. - Image Component Enhancement: You can now [drag and drop an image from the shared folder](../studio/pageLoaders/components/image.md#drag-and-drop-from-shared-folder) into the image source and set the default image source. -- New [Clean Standard Action](../studio/pageLoaders/events/bindingActionToEvents#qodly-sources): The Clean standard action allows entity selections to be cleaned of their deleted entities, preventing blank spaces in the UI. +- New [Clean Standard Action](../studio/pageLoaders/events/bindingActionToEvents.md#qodly-sources): The Clean standard action allows entity selections to be cleaned of their deleted entities, preventing blank spaces in the UI. -- Contextual Panel Update: The Contextual panel now allows function call actions to be [copied](../studio/pageLoaders/events/eventsManagement#copying-an-event-action) or [pasted](../studio/pageLoaders/events/eventsManagement#pasting-an-event-action) and called [function names to be changed post-creation](../studio/pageLoaders/events/eventsManagement#modifying-a-function-call), avoiding the need to delete and recreate them. +- Contextual Panel Update: The Contextual panel now allows function call actions to be [copied](../studio/pageLoaders/events/eventsManagement.md#copying-an-event-action) or [pasted](../studio/pageLoaders/events/eventsManagement.md#pasting-an-event-action) and called [function names to be changed post-creation](../studio/pageLoaders/events/eventsManagement.md#modifying-a-function-call), avoiding the need to delete and recreate them. - [Singletons in Qodly Studio](../language/basics/lang-classes.md#singleton-classes): Singletons can now be edited in Qodly Studio. Their functions can be called from a Qodly page, and permissions can be set up for their functions. diff --git a/docs/notes/1.0.0-beta-6.md b/docs/notes/1.0.0-beta-6.md index 32e1689761..e87ca8d629 100644 --- a/docs/notes/1.0.0-beta-6.md +++ b/docs/notes/1.0.0-beta-6.md @@ -15,15 +15,15 @@ import ComingSoon from '@site/src/components/ComingSoon'

                        What's new

                        -- New [`onPrivilegeChange`](../studio/pageLoaders/pageLoaderOverview#triggers-and-events) Event: Ensures elements display based on user privileges. +- New [`onPrivilegeChange`](../studio/pageLoaders/pageLoaderOverview.md#triggers-and-events) Event: Ensures elements display based on user privileges. - [Sanity check](../studio/pageLoaders/pageLoaderOverview.md#sanity-check) Update: Raises an error if a shared selection attribute is dropped over a matrix bound to a local selection. -- [Binding onHttpGet Functions](../studio/pageLoaders/events/bindingActionToEvents#binding-onhttpget-functions): Enables binding functions for HTTP GET requests with [4D.OutgoingMessage](../language/OutgoingMessageClass.md), supporting flexible operations like file viewing or downloads. +- [Binding onHttpGet Functions](../studio/pageLoaders/events/bindingActionToEvents.md#binding-onhttpget-functions): Enables binding functions for HTTP GET requests with [4D.OutgoingMessage](../language/OutgoingMessageClass.md), supporting flexible operations like file viewing or downloads. -- [Toggle Inherited Permissions](../studio/roles/permissionsOverview#showhide-inherited-permissions): Allows visibility toggling to show only explicitly defined permissions or include inherited ones by default in the privileges interface. +- [Toggle Inherited Permissions](../studio/roles/permissionsOverview.md#showhide-inherited-permissions): Allows visibility toggling to show only explicitly defined permissions or include inherited ones by default in the privileges interface. -- [Default State Override Warning](../studio/pageLoaders/states/stateOverview#setting-a-default-state): Displays a warning icon when the Default State will be overridden by an unmet Conditional State condition, with a tooltip explaining the override. +- [Default State Override Warning](../studio/pageLoaders/states/stateOverview.md#setting-a-default-state): Displays a warning icon when the Default State will be overridden by an unmet Conditional State condition, with a tooltip explaining the override.

                        Bug Fixes

                        diff --git a/docs/notes/1.1.0.md b/docs/notes/1.1.0.md index 8fca7073da..93a8913d61 100644 --- a/docs/notes/1.1.0.md +++ b/docs/notes/1.1.0.md @@ -15,9 +15,9 @@ import ComingSoon from '@site/src/components/ComingSoon' - [**Support for HTTP Handlers**](../studio/httpHandlers): Added support for defining and managing HTTP Handlers to process requests based on URL patterns and HTTP methods, with a new UI and code editor integration. -- [**onInit Event for Qodly Sources**](../studio/pageLoaders/events/overview#on-init): Added a distinct `On Init` event for Qodly Sources, which triggers when a Qodly Source is instantiated by the renderer. This allows developers to set up an initial value for a Qodly Source without interference from subsequent `On Change` events. +- [**onInit Event for Qodly Sources**](../studio/pageLoaders/events/overview.md#on-init): Added a distinct `On Init` event for Qodly Sources, which triggers when a Qodly Source is instantiated by the renderer. This allows developers to set up an initial value for a Qodly Source without interference from subsequent `On Change` events. -- [**Privileges Detailed Permission Review**](../studio/roles/overview#detailed-permission-review-for-roles): When a role is selected in the Roles & Privileges editor, a detailed permission review is displayed to provide insight into the final permissions resolution for that specific role. This feature helps developers fine-tune privileges more effectively by showing the impact of privilege configurations. +- [**Privileges Detailed Permission Review**](../studio/roles/rolesPrivilegesOverview.md#detailed-permission-review-for-roles): When a role is selected in the Roles & Privileges editor, a detailed permission review is displayed to provide insight into the final permissions resolution for that specific role. This feature helps developers fine-tune privileges more effectively by showing the impact of privilege configurations. - [**QodlyEvents: onStartup and onStop**](../studio/qodlyEventsClass): Added structured support for defining automatic startup and shutdown logic within the QodlyEvents class. @@ -26,28 +26,28 @@ import ComingSoon from '@site/src/components/ComingSoon'

                        What's new

                        -- [Intervals for Date Input](../studio/pageLoaders/components/textinput#embedded-input): Added support for defining date selection intervals, enabling restrictions such as start/end dates, specific date ranges, or day-based selection. Users can manually set intervals or bind a datasource for dynamic control. +- [Intervals for Date Input](../studio/pageLoaders/components/textinput.md#embedded-input): Added support for defining date selection intervals, enabling restrictions such as start/end dates, specific date ranges, or day-based selection. Users can manually set intervals or bind a datasource for dynamic control. -- [Week Start Customization in Date Picker](../studio/pageLoaders/components/textinput#embedded-input): Added support for selecting the starting day of the week in the date picker. +- [Week Start Customization in Date Picker](../studio/pageLoaders/components/textinput.md#embedded-input): Added support for selecting the starting day of the week in the date picker. -- [Iterator Qodly Source ($This) Action Support](../studio/pageLoaders/events/bindingActionToEvents#qodly-sources): Added support for Drop and Copy as the only available actions when using an iterator Qodly Source ($This) in the events panel of a standard action. +- [Iterator Qodly Source ($This) Action Support](../studio/pageLoaders/events/bindingActionToEvents.md#qodly-sources): Added support for Drop and Copy as the only available actions when using an iterator Qodly Source ($This) in the events panel of a standard action. -- [Validation Rule for Qodly Source Selection](../studio/pageLoaders/states/conditionalState#saved-condition): Enforced a validation rule that allows only shared Qodly sources in Saved Conditions. Selecting a local Qodly source triggers a sanity check error with a clear message and visual indicators to prevent misconfiguration. +- [Validation Rule for Qodly Source Selection](../studio/pageLoaders/states/conditionalState.md#saved-condition): Enforced a validation rule that allows only shared Qodly sources in Saved Conditions. Selecting a local Qodly source triggers a sanity check error with a clear message and visual indicators to prevent misconfiguration. -- [Clear Non-Existing Resources in Privileges](../studio/roles/permissionsOverview#clear-non-existing-resources): Added a visual indicator for unavailable resources in the permissions table. Non-existing resources now appear in red with a shadow effect, and a Clear button is enabled to remove all associated permissions. +- [Clear Non-Existing Resources in Privileges](../studio/roles/permissionsOverview.md#clear-non-existing-resources): Added a visual indicator for unavailable resources in the permissions table. Non-existing resources now appear in red with a shadow effect, and a Clear button is enabled to remove all associated permissions. - New [privilege operators for states](../studio/pageLoaders/states/conditionalState.md#privilege-condition): `has at least one privilege` and `has no privilege`. -- [Flexbox Direction Options](../studio/pageLoaders/styling#properties-panel-styling-options): Added "Row Reverse" & "Column Reverse" options to the Direction property If the Display is Flex, allowing items to be arranged in reverse order. +- [Flexbox Direction Options](../studio/pageLoaders/styling.md#properties-panel-styling-options): Added "Row Reverse" & "Column Reverse" options to the Direction property If the Display is Flex, allowing items to be arranged in reverse order. -- [New Event in Selectbox Component](../studio/pageLoaders/components/selectbox#triggers-and-events): Added the On Clear event, which triggers an action when the selected item is cleared. +- [New Event in Selectbox Component](../studio/pageLoaders/components/selectbox.md#triggers-and-events): Added the On Clear event, which triggers an action when the selected item is cleared. - Data table: New [sorting behaviors](../studio/pageLoaders/components/datatable.md#properties-customization) for columns. - [Checkbox type selection options](../studio/pageLoaders/components/checkbox.md#checkbox-component), allowing to select the available states and default values for a checkbox. -- [Reveal Password Icon Placement](../studio/pageLoaders/components/textinput#embedded-input): Added an option to position the reveal password icon on either the left or right side of the text input field. +- [Reveal Password Icon Placement](../studio/pageLoaders/components/textinput.md#embedded-input): Added an option to position the reveal password icon on either the left or right side of the text input field. ## Qodly Server @@ -76,8 +76,8 @@ import ComingSoon from '@site/src/components/ComingSoon' While existing instantiation using cs.Qodly.Users.new() remains functional for backward compatibility, we no longer recommend using it. ::: - The following functions have been renamed for improved clarity: - - .getAllUsers() → [.allUsers()](../language/UsersClass#allusers) - - .getCurrentUser() → [.currentUser()](../language/UsersClass#currentuser) + - .getAllUsers() → [.allUsers()](../language/UsersClass.md#allusers) + - .getCurrentUser() → [.currentUser()](../language/UsersClass.md#currentuser) :::warning The old syntax is still supported for compatibility but will be deprecated over time. We recommend transitioning to the new syntax. ::: diff --git a/docs/notes/1.10.1.md b/docs/notes/1.10.1.md new file mode 100644 index 0000000000..63718cd2bb --- /dev/null +++ b/docs/notes/1.10.1.md @@ -0,0 +1,52 @@ +--- +id: 1.10.1 +title: 1.10.1 +--- + + +#### 05/01/2025 + +import ComingSoon from '@site/src/components/ComingSoon' + + + +## Qodly Studio + +

                        What's new

                        + +- [Qodly Looker Studio Connector](../qodlyLookerStudio/qodlyLookerStudioConnector): Added integration between Qodly applications and Google Looker Studio, enabling users to create interactive dashboards, track real-time business metrics, and generate custom reports using Qodly data. + +- [Built-in Shared Qodly Namespace](../studio/pageLoaders/qodlySources.md#built-in-shared-qodly-namespace): Introduced a built-in Qodly namespace available across all application pages. It provides ready-to-use qodlysources for shared data handling, including a [Location](../studio/pageLoaders/qodlySources.md#qodlysource-location) datasource that simplifies working with URL segments, query parameters, and anchors. + +- [Saved Condition Go To Button](../studio/pageLoaders/states/conditionalState.md#saved-condition-integration): When a saved condition is integrated into a state, a **Go to** button now appears next to its name. Clicking it opens the full saved condition in edit mode—so you can quickly review or update it without leaving the schema view. + +- [Interval Range Validation for Text Input](../studio/pageLoaders/components/textinput.md#intervals-for-date-input): For text inputs using the **interval type `Range`**, if the **start date is later than the end date**, an error message will be shown and the dates will be temporarily disabled until corrected. + +- [Matrix Selection Behavior Options](../studio/pageLoaders/components/matrix.md#properties-customization): You can now control how the **Matrix** behaves after a data update (like reloading or filtering). + +- [Debugger Sidebar](../studio/debugging.md#debugger-sidebar): A new sidebar in the code editor lets you monitor, group, enable/disable, delete, and jump to breakpoints across your entire app. It also shows a [Variables panel](../studio/debugging.md#variables-panel) during debug sessions, so you can view local variables, current line variables, and method arguments—all in one place. + + +

                        Improvements

                        + +- **Renamed properties in the [intervals datasource](../studio/pageLoaders/components/textinput.md#params-object-properties)** of the text input component for consistency: + + - `toDay` is now `today` + - `startingfrom` is now `startingFrom` + - `untilto` is now `until` + +- **Include Option and Interval Card Toggle**: Added visual controls to improve interval management. The [Include checkbox](../studio/pageLoaders/components/textinput.md#include-checkbox-within-the-card) lets users include or exclude specific date ranges, while the [card toggle](../studio/pageLoaders/components/textinput.md#card-toggle-top-right) allows enabling or disabling intervals without losing their configuration. + +- [HTTP Handlers UI Redesign](../studio/httpHandlers.md): Updated the UI to provide a clearer and more intuitive layout, making it easier to configure and manage request handlers. + +- [Roles and Privileges UI – Button Label Update](../studio/roles/permissionsOverview.md#clean-non-existing-resources): In the Roles and Privileges interface, the **Clear** button was renamed to **Clean** for clarity. This button appears when a resource (like an attribute) is no longer available, and lets users remove outdated permissions. + +## Qodly Server + +

                        What's New

                        + +- + +

                        Improvements

                        + +- \ No newline at end of file diff --git a/docs/notes/1.2.0.md b/docs/notes/1.2.0.md deleted file mode 100644 index 45a8649f78..0000000000 --- a/docs/notes/1.2.0.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -id: 1.2.0 -title: 1.2.0 ---- - - -#### 04/20/2025 - -import ComingSoon from '@site/src/components/ComingSoon' - - - -## Qodly Studio - -

                        What's new

                        - -- [Qodly Looker Studio Connector](../qodlyLookerStudio/qodlyLookerStudioConnector): Added integration between Qodly applications and Google Looker Studio, enabling users to create interactive dashboards, track real-time business metrics, and generate custom reports using Qodly data. - -

                        Improvements

                        - -- Renamed properties in the [intervals datasource](../studio/pageLoaders/components/textinput#params-object-properties) of the text input component for consistency: - - - `toDay` is now `today` - - `startingfrom` is now `startingFrom` - - `untilto` is now `until` - - -## Qodly Server - -

                        What's New

                        - -- - -

                        Improvements

                        - -- \ No newline at end of file diff --git a/docs/orda/data-model.md b/docs/orda/data-model.md index c668740551..707b660316 100644 --- a/docs/orda/data-model.md +++ b/docs/orda/data-model.md @@ -9,7 +9,7 @@ slug: /guides/data-model-objects ORDA stands for **Object Relational Data Access**. It is an enhanced technology allowing to access both the model and the data of a database through objects. -Relations are transparently included in the concept, in combination with [lazy loading](#lazy-loading), to remove all the typical hassles of data selection or transfer from the developer. With ORDA, data is accessed through an abstraction layer, the [datastore](#datastore). A datastore is an object that provides an interface to the database model and data through objects and classes. For example, a table is mapped to a [dataclass](#dataclass) object, a field is an [attribute](#attribute) of a dataclass, and records are accessed through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection). +Relations are transparently included in the concept, in combination with [lazy loading](../faq/faq.md#qodly-server), to remove all the typical hassles of data selection or transfer from the developer. With ORDA, data is accessed through an abstraction layer, the [datastore](#datastore). A datastore is an object that provides an interface to the database model and data through objects and classes. For example, a table is mapped to a [dataclass](#dataclass) object, a field is an [attribute](#attributes) of a dataclass, and records are accessed through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection). A query returns a list of entities called an entity selection, which fulfills the role of a SQL query’s row set. The difference is that each entity "knows" where it belongs in the data model and "understands" its relationship to all other entities. This means that a developer does not need to explain in a query how to relate the various pieces of information, nor in an update how to write modified values back to the relational structure. @@ -20,7 +20,7 @@ ORDA objects can be handled like standard objects, but they automatically benefi ### Database as Objects -The [ORDA technology](../concepts/platform/#the-orda-concept) is based upon an automatic mapping of an underlying relational database structure to a data model (this concept can be viewed as an included and enhanced [ORM](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping)), along with powerful features such as calculated attributes or dataclass functions. It also provides [access to data](data.md) through entity and entity selection objects. +The [ORDA technology](#the-orda-concept) is based upon an automatic mapping of an underlying relational database structure to a data model (this concept can be viewed as an included and enhanced [ORM](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping)), along with powerful features such as calculated attributes or dataclass functions. It also provides [access to data](data.md) through entity and entity selection objects. As a result, ORDA exposes the whole database as a set of data model objects, including **model objects** as well as **data objects**. @@ -57,7 +57,7 @@ All ORDA data model classes are exposed as properties of the **`cs`** class stor |cs.DataStore|cs.DataStore|[`ds`](../language/commands/ds) command| |cs.*DataClassName*|cs.Employee|[`dataStore.DataClassName`](../language/DataStoreClass.md#dataclassname), `dataStore["DataClassName"]`| |cs.*DataClassName*Entity|cs.EmployeeEntity|[`dataClass.get()`](../language/DataClassClass.md#get), [`dataClass.new()`](../language/DataClassClass.md#new), [`entitySelection.first()`](../language/EntitySelectionClass.md#first), [`entitySelection.last()`](../language/EntitySelectionClass.md#last), [`entity.previous()`](../language/EntityClass.md#previous), [`entity.next()`](../language/EntityClass.md#next), [`entity.first()`](../language/EntityClass.md#first), [`entity.last()`](../language/EntityClass.md#last), [`entity.clone()`](../language/EntityClass.md#clone)| -|cs.*DataClassName*Selection|cs.EmployeeSelection|[`dataClass.query()`](../language/DataClassClass.md#query), [`entitySelection.query()`](../language/EntitySelectionClass.md#query), [`dataClass.all()`](../language/DataClassClass.md#all), [`dataClass.fromCollection()`](../language/DataClassClass.md#fromcollection), [`dataClass.newSelection()`](../language/DataClassClass.md#newselection), [`entitySelection.drop()`](../language/EntitySelectionClass.md#drop), [`entity.getSelection()`](../language/EntityClass.md#getselection), [`entitySelection.and()`](../language/EntitySelectionClass.md#and), [`entitySelection.minus()`](../language/EntitySelectionClass.md#minus), [`entitySelection.or()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderBy()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderByFormula()`](../language/EntitySelectionClass.md#orderbyformula), [`entitySelection.slice()`](../language/EntitySelectionClass.md#slice)| +|cs.*DataClassName*Selection|cs.EmployeeSelection|[`dataClass.query()`](../language/DataClassClass.md#query), [`entitySelection.query()`](../language/EntitySelectionClass.md#query), [`dataClass.all()`](../language/DataClassClass.md#all), [`dataClass.fromCollection()`](../language/DataClassClass.md#fromcollection), [`dataClass.newSelection()`](../language/DataClassClass.md#newselection), [`entitySelection.drop()`](../language/EntitySelectionClass.md#drop), [`entity.getSelection()`](../language/EntityClass.md#getselection), [`entitySelection.and()`](../language/EntitySelectionClass.md#and), [`entitySelection.minus()`](../language/EntitySelectionClass.md#minus), [`entitySelection.or()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderBy()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderByFormula()`](../language/EntitySelectionClass.md#orderbyformula-), [`entitySelection.slice()`](../language/EntitySelectionClass.md#slice)| Also, object instances from ORDA data model user classes benefit from their parent's properties and functions: diff --git a/docs/orda/data.md b/docs/orda/data.md index 34cf92cddf..528ff9d6fa 100644 --- a/docs/orda/data.md +++ b/docs/orda/data.md @@ -4,7 +4,7 @@ title: CRUD Operations slug: /guides/crud-operations --- -In ORDA, you access data through [entities](data-model#entity) and [entity selections](data-model#entity-selection) objects. These objects allow you to execute CRUD (*Create, Read, Update, Delete*) basic operations on data, along with [queries](queries.md) and sorts. +In ORDA, you access data through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection) objects. These objects allow you to execute CRUD (*Create, Read, Update, Delete*) basic operations on data, along with [queries](queries.md) and sorts. ## Creating an entity @@ -229,7 +229,7 @@ You can assign or modify the value of a "one" related entity attribute from the ## Creating an entity selection -You can create an object of type [entity selection](data-model#entity-selection) as follows: +You can create an object of type [entity selection](data-model.md#entity-selection) as follows: * Querying the entities [in a dataclass](../language/DataClassClass.md#query) or in an [existing entity selection](../language/EntitySelectionClass.md#query); * Using the [`.all()`](../language/DataClassClass.md#all) dataclass function to select all the entities in a dataclass; @@ -499,7 +499,7 @@ Filters apply to all ORDA or REST requests executed in your Qodly projects. A fi |[entitySelection.query()](../language/EntitySelectionClass.md#query)|| |[entitySelection.attributeName](../language/EntitySelectionClass.md#attributename)|Filter applied if *attributeName* is a related entity or related entities of a filtered dataclass (including alias or computed attribute)| |[entity.attributeName](../language/EntityClass.md#attributename)|Filter applied if *attributeName* corresponds to related entities of a filtered dataclass (including alias or computed attribute)| -|[Create entity selection](../language/EntitySelectionClass.md#create-entity-selection)|| +|[Create entity selection](../language/DataClassClass.md#newselection)|| Other ORDA functions accessing data do not directly trigger the filter, but they nevertheless benefit from it. For example, the [`entity.next()`](../language/EntityClass.md#next) function will return the next entity in the already-filtered entity selection. On the other hand, if the entity selection is not filtered, [`entity.next()`](../language/EntityClass.md#next) will work on non-filtered entities. diff --git a/docs/orda/queries.md b/docs/orda/queries.md index d79b12a801..05b055f441 100644 --- a/docs/orda/queries.md +++ b/docs/orda/queries.md @@ -66,7 +66,7 @@ where: * **formula**: a valid formula passed as `string` or `object`. The formula will be evaluated for each processed entity and must return a boolean value. Within the formula, the entity is available through the `this` object. * **string**: the formula string must be preceeded by the `eval()` statement, so that the query parser evaluates the expression correctly. For example: *"eval(length(this.lastname) >=30)"* - * **object**: the [formula object](../language/FunctionClass.md) is passed as a **placeholder** (see below). The formula must have been created using the [`formula`](../language/FunctionClass#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. + * **object**: the [formula object](../language/FunctionClass.md) is passed as a **placeholder** (see below). The formula must have been created using the [`formula`](../language/FunctionClass.md#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. >* Keep in mind that formulas only support `&` and `|` symbols as logical operators. >* If the formula is not the only search criteria, the [query engine optimizer](#about-queryplan-and-querypath) could prior process other criteria (e.g. indexed attributes) and thus, the formula could be evaluated for only a subset of entities. @@ -333,7 +333,7 @@ es=ds.Movie.query("roles.actor.lastName == :1 AND roles.actor{2}.lastName == :2" As an alternative to formula insertion within the *queryString* parameter (see above), you can pass directly a formula object as a boolean search criteria. Using a formula object for queries is usually recommended since you benefit from tokenization, and code is easier to search/read. -The *formula* must have been created using the [`formula`](../language/FunctionClass#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. In this case: +The *formula* must have been created using the [`formula`](../language/FunctionClass.md#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. In this case: * the *formula* is evaluated for each entity and must return `true` or `false`. During the execution of the query, if the *formula*'s result is not a boolean, it is considered as `false`. * within the *formula*, the entity is available through the `this` object. diff --git a/docs/qodlyLookerStudio/qodlyLookerStudioConnector.md b/docs/qodlyLookerStudio/qodlyLookerStudioConnector.md index a4c8b0dab6..0e3966ca6e 100644 --- a/docs/qodlyLookerStudio/qodlyLookerStudioConnector.md +++ b/docs/qodlyLookerStudio/qodlyLookerStudioConnector.md @@ -64,7 +64,7 @@ Each Customer can have multiple Orders, and an Order is not necessarily placed i #### Step 1: Generate API Credentials in Qodly -To allow Looker Studio to access your Qodly data, you need an [API endpoint](../cloud/apiKeys#api-endpoint) and [API key](../cloud/apiKeys#api-key). These credentials act as authentication tokens that ensure secure access to your data. +To allow Looker Studio to access your Qodly data, you need an [API endpoint](../cloud/apiKeys.md#api-endpoint) and [API key](../cloud/apiKeys.md#api-key). These credentials act as authentication tokens that ensure secure access to your data. 1. **Access the Qodly Console**: @@ -169,12 +169,15 @@ Once your Qodly Looker Studio Connector is connected, you need to configure key 3. **Pagination Top**: - Default Value: 10000 - - Explanation: Defines the number of records retrieved per API request. A higher value (e.g., 10000) reduces API calls but may impact performance if your dataset is very large. If you experience slow performance, you can lower this value (e.g., 5000 or 2000). + - Explanation: Sets the number of records fetched per API request. A higher value means fewer API calls but can slow down performance if you're dealing with a lot of data. + 4. **Cache TTL (Time-To-Live)**: - Default Value: 900 (in seconds) - - Explanation: This setting controls how frequently Looker Studio refreshes the data. 900 seconds (15 minutes) is a balanced setting to ensure fresh data without excessive API requests. If your data updates frequently, you may want to reduce it (e.g., 300 seconds). If your data is static or doesn’t change often, increase it (e.g., 3600 for 1-hour caching). + - Explanation: This setting controls how long the connector reuses previous query results before sending the same query to Qodly again. It's part of the connector’s internal cache (not Looker Studio’s cache) and helps reduce unnecessary requests to Qodly. + - Use a lower value (e.g., 300) if your data changes frequently. + - Use a higher value (e.g., 3600) if your data is more static — this can improve performance and reduce load. 5. **Custom Query Filter (Optional)**: @@ -186,8 +189,19 @@ Once your Qodly Looker Studio Connector is connected, you need to configure key - Example Value: customer.firstName, customer.lastName, customer.email, country, city, amount - Explanation: This setting allows you to retrieve related fields from the Customer entity. Since customer is a relation in the Order table, you need to explicitly include attributes like customer.firstName, customer.lastName, and customer.email. Also, include country and city to analyze customer distribution geographically. -Click "Add" to apply the settings and fetch the data. +:::info +All Looker Studio partner connectors have a **6-minute timeout per query**. If fetching data takes longer than that, the query will fail. Tuning Pagination Top, applying filters, and reducing data volume help ensure queries stay within that limit. + +To avoid this: +- Lower the Pagination Top to reduce the load per request (e.g., try 5,000 or 2,000). +- Add filters in Looker Studio to limit how much data is being fetched. +- Narrow the date range if possible. + +These adjustments can help keep data retrieval efficient and within the allowed time limit. +::: + +Click "Add" to apply the settings and fetch the data. ### Creating Reports in Looker Studio @@ -253,9 +267,9 @@ You can obtain the IFrame custom component directly from the [Custom Components Once downloaded, follow these steps: 1. Open Qodly Studio. -2. Locate and click the dedicated [Upload button](../studio/pageLoaders/components/uploadCustomComponents#uploading-custom-component) in the Component bar. +2. Locate and click the dedicated [Upload button](../studio/pageLoaders/components/uploadCustomComponents.md#uploading-custom-component) in the Component bar. 3. Upload the downloaded qodly_IFrame_version.zip file. -4. [Install the custom component](../studio/pageLoaders/components/uploadCustomComponents#installing-custom-component) when prompted. +4. [Install the custom component](../studio/pageLoaders/components/uploadCustomComponents.md#installing-custom-component) when prompted. After successful installation, refresh your Qodly Studio page. The new IFrame component will now appear in your components bar, ready for drag-and-drop onto your canvas. @@ -309,42 +323,15 @@ The IFrame custom component uses sandbox attributes to apply security restrictio ### Conclusion -Ensure you regularly review permissions and access settings for your embedded reports, especially if sensitive business information is displayed. Keeping your embedded content secure and up-to-date helps maintain overall application integrity and performance. - Now you're ready to see your report directly embedded within your Qodly application. -
                      diff --git a/docs/studio/pageLoaders/components/selectbox.md b/docs/studio/pageLoaders/components/selectbox.md index a595ada591..8a721f0d8b 100644 --- a/docs/studio/pageLoaders/components/selectbox.md +++ b/docs/studio/pageLoaders/components/selectbox.md @@ -98,7 +98,7 @@ To associate data with the **Select Box** component, follow these steps:
                        -
                      1. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Select Box component.

                      2. +
                      3. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Select Box component.
                      4. Define the Qodly Source: Specify the appropriate qodlysource that contains the data you want to display within the Select Box. For instance, you can select an entity selection, such as the Destination dataclass.
                      @@ -126,7 +126,7 @@ To associate data iterated over a Qodly Source, you can follow these additional
                        -
                      1. Choose the Iterator: Choose the iterator corresponding to the iterated data (e.g., $This) to represent the current data item.

                      2. +
                      3. Choose the Iterator: Choose the iterator corresponding to the iterated data (e.g., $This) to represent the current data item.
                      4. Choose the Attribute: Once you've selected the iterator, choose the specific attribute that you want to display within the component. This could be attributes like the name of the destination, the country, or any other relevant information.
                      diff --git a/docs/studio/pageLoaders/components/selectinput.md b/docs/studio/pageLoaders/components/selectinput.md index c67ade7644..a0b9067303 100644 --- a/docs/studio/pageLoaders/components/selectinput.md +++ b/docs/studio/pageLoaders/components/selectinput.md @@ -72,7 +72,7 @@ Within the **Select Input** component, an embedded **Select** allows for further
                        -
                      • Label: A descriptive text label for each option.

                      • +
                      • Label: A descriptive text label for each option.
                      • Value: A distinct value to each option, enabling effective data handling based on the selections made by users.
                      diff --git a/docs/studio/pageLoaders/components/tabs.md b/docs/studio/pageLoaders/components/tabs.md index 899c67db88..b613eaaad2 100644 --- a/docs/studio/pageLoaders/components/tabs.md +++ b/docs/studio/pageLoaders/components/tabs.md @@ -34,7 +34,7 @@ Enhance the Tabs component to align with your application's requirements using t
                        -
                      • Line Variant: Select the "Line" variant for tabs with an underlined styling effect.

                      • +
                      • Line Variant: Select the "Line" variant for tabs with an underlined styling effect.
                      • Enclosed Variant: Opt for the "Enclosed" variant to showcase tabs with a bordered presentation. This choice adds an additional layer of style to your tabs.
                      @@ -50,9 +50,9 @@ Enhance the Tabs component to align with your application's requirements using t
                        -
                      • Title Customization: Modify tab titles to precisely reflect the content or functionality associated with each tab.

                      • -
                      • Tab Duplication: Duplicate existing tabs to replicate configurations quickly by clicking on the icon.

                      • -
                      • Tab Removal: Delete tabs that no longer serve a purpose by clicking on the icon.

                      • +
                      • Title Customization: Modify tab titles to precisely reflect the content or functionality associated with each tab.
                      • +
                      • Tab Duplication: Duplicate existing tabs to replicate configurations quickly by clicking on the icon.
                      • +
                      • Tab Removal: Delete tabs that no longer serve a purpose by clicking on the icon.
                      • Moving Tab: Arrange tabs to your preferred position by clicking on the icon.
                      diff --git a/docs/studio/pageLoaders/components/text.md b/docs/studio/pageLoaders/components/text.md index 12f0f78e57..6ded5f95f7 100644 --- a/docs/studio/pageLoaders/components/text.md +++ b/docs/studio/pageLoaders/components/text.md @@ -65,7 +65,7 @@ Enhance the **Text** component to align with your application's requirements usi :::tip When the hyperlink directs to a file path within the `Shared` folder, it doesn't open in a new tab; instead, the browser triggers a download. -This follows the same concept as [Navigate to Shared Folder Content](../events/bindingActionToEvents#shared-folder) through the [External Link](../events/bindingActionToEvents#external-links) option. +This follows the same concept as [Navigate to Shared Folder Content](../events/bindingActionToEvents.md#shared-folder) through the [External Link](../events/bindingActionToEvents.md#external-links) option. ::: :::warning diff --git a/docs/studio/pageLoaders/components/textinput.md b/docs/studio/pageLoaders/components/textinput.md index dfcf053fc1..dc8148c053 100644 --- a/docs/studio/pageLoaders/components/textinput.md +++ b/docs/studio/pageLoaders/components/textinput.md @@ -67,7 +67,7 @@ Within the **Text Input** component, an embedded **Input** allows for further cu
                        -
                      • Placeholder: Set a placeholder to provide users with a hint or example of the expected input. This text appears within the input field and disappears as soon as users begin typing.

                      • +
                      • Placeholder: Set a placeholder to provide users with a hint or example of the expected input. This text appears within the input field and disappears as soon as users begin typing.
                      • Input Type: Select the appropriate input type to match the nature of the expected data. Available types include:
                      @@ -110,7 +110,10 @@ Within the **Text Input** component, an embedded **Input** allows for further cu
                      - :::tip Reveal Password Toggle + + :::tip + #### Reveal Password Toggle: + For Text Input components of type password, when the "Reveal Password" toggle is enabled: @@ -130,7 +133,8 @@ Within the **Text Input** component, an embedded **Input** allows for further cu However, when the "Reveal Password" toggle is disabled, the password remains hidden, and the tooltip functionality is not available. ::: - :::tip Direction Option for the Reveal Password Icon + :::tip + #### Direction Option for the Reveal Password Icon: You can adjust the placement of the reveal password icon within the text input field. Choose between left or right positioning based on your design preferences or functional needs. @@ -148,19 +152,43 @@ Within the **Text Input** component, an embedded **Input** allows for further cu - :::tip Week Start Customization in Date Picker - **Week Starts** defines which day should be considered the start of the week in the date picker. You can select a starting day such as Monday, Sunday, or any other day depending on your region or application needs. + :::tip + #### Week Start Customization in Date Picker: + Week Starts defines which day should be considered the start of the week in the date picker. You can select a starting day such as Monday, Sunday, or any other day depending on your region or application needs. ::: - :::tip Intervals for Date Input + :::tip + #### Intervals for Date Input: The Intervals feature allows users to control date selection by either linking a datasource or manually defining intervals:
                        -
                      • You can define date intervals manually using the "Add Interval" button.

                      • +
                      • You can define date intervals manually using the "Add Interval" button.
                        After adding an interval, you'll see a **dropdown menu to choose the Interval Type**
                      • | **Interval Type** | **Description** | **Available Options** | |--------------------|----------------|----------------------| | **Starting from** | Defines a start date from which users can select dates onward. | - **Today checkbox**: sets the start date as today
                        - **From**: calendar picker to select a start date | | **Until** | Restricts date selection up to a specific date. | - **Today checkbox**: sets the end date as today
                        - **To**: calendar picker to select an end date | - | **Range** | Specifies a date range with a start and end date, and can be set to repeat (e.g., Weekly). | - **From**: start date
                        - **To**: end date
                        - **Repeat**: Weekly, Monthly, Yearly | + | **Range** | Specifies a date range with a start and end date, and can be set to repeat (e.g., Weekly). | - **From**: start date
                        - **To**: end date
                        - **Repeat**: Weekly, Monthly, Yearly

                        **⚠️ Note:** If the start date is later than the end date, an error will be shown and dates will be disabled until corrected. | | **Days** | Limits selection to specific days of the week, such as Monday, Tuesday, Wednesday. | - **Days selection dropdown**: allows choosing specific days of the week: Monday, Tuesday, etc. | +
                        + + #### Include Checkbox (within the card): + + + The options displayed in the interval form will change based on the selected type—except for one field that remains constant across all types: the Include checkbox. This checkbox lets you define whether that specific interval should include or exclude the selected date range. + + + + + + + #### Card Toggle (top-right): + + + Each interval card also has a toggle in the top-right corner that lets you enable or disable the entire interval block. Disabling the toggle will prevent that interval from being applied, but your configuration is preserved—you won’t lose your settings. + + + + + +
                      • Alternatively, you can bind an external datasource (structured as a collection of objects with specific properties defining the filtering rules) to dynamically fetch intervals.

                      • diff --git a/docs/studio/pageLoaders/components/uploadCustomComponents.md b/docs/studio/pageLoaders/components/uploadCustomComponents.md index b12360a77d..41d27c8ee9 100644 --- a/docs/studio/pageLoaders/components/uploadCustomComponents.md +++ b/docs/studio/pageLoaders/components/uploadCustomComponents.md @@ -8,7 +8,7 @@ import Column from '@site/src/components/Column' ## Overview -Qodly Studio offers an upload functionality to enhance the user experience and streamline the integration of custom components. This feature enables users to upload components generated using the [`npm run build` command](../../../customComponent/setup#building-the-project). +Qodly Studio offers an upload functionality to enhance the user experience and streamline the integration of custom components. This feature enables users to upload components generated using the [`npm run build` command](../../../customComponent/setup.md#building-the-project). ## Community's Custom Components @@ -34,8 +34,7 @@ Clicking the button opens a popup with two upload methods:
                          -
                        • Users can drag and drop a component file onto the designated area within the popup.
                        • -
                          +
                        • Users can drag and drop a component file onto the designated area within the popup.
                        • Alternatively, users have the option to select a component file from their computer using a file explorer.
                        diff --git a/docs/studio/pageLoaders/events/bindingActionToEvents.md b/docs/studio/pageLoaders/events/bindingActionToEvents.md index b68ec4f4c4..d39d649cd4 100644 --- a/docs/studio/pageLoaders/events/bindingActionToEvents.md +++ b/docs/studio/pageLoaders/events/bindingActionToEvents.md @@ -71,7 +71,7 @@ Keep in mind that the **Create** action only creates a new, blank entity in memo
                          -
                        • Provide simple UI feedback on a Save, Reload, or Drop standard action on an entity.

                        • +
                        • Provide simple UI feedback on a Save, Reload, or Drop standard action on an entity.
                        • Provide simple UI feedback on a Reload, Order by, or Query standard action on an EntitySelection.
                        @@ -128,7 +128,7 @@ The `Base` state and `Conditional` states, however, are not included among these ::: :::tip -The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass#enablestate) is called several times with different states). +The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate) is called several times with different states). ::: :::warning @@ -214,7 +214,7 @@ The feature for providing feedback is not applicable in the context of navigatio ### External Links -In addition to navigating to Pages, Qodly Studio offers a convenient way to direct users to external links. The process follows the same steps as outlined for [associating navigation actions with events for Pages](#Pages), with a slight variation in the "Target Type" step: +In addition to navigating to Pages, Qodly Studio offers a convenient way to direct users to external links. The process follows the same steps as outlined for [associating navigation actions with events for Pages](#pages), with a slight variation in the "Target Type" step: @@ -231,8 +231,7 @@ In addition to navigating to Pages, Qodly Studio offers a convenient way to dire 2. Define Transition Method: Similar to configuring Page navigation, you can specify how the external link will open. However, for external links, you have two options:

                          -
                        • New Tab: Induce the opening of a new browser tab.
                        • -
                          +
                        • New Tab: Induce the opening of a new browser tab.
                        • Current Tab: Replace the ongoing browser tab with the chosen external link.
                        @@ -274,7 +273,7 @@ When the path points to a file, it doesn't open it in a new tab but instead init
                          -
                        • If your class function defines a specific variable for the result, its name will be displayed in the label within the return parameter section.

                        • +
                        • If your class function defines a specific variable for the result, its name will be displayed in the label within the return parameter section.
                        • However, if your class function does not specify a result name, the default label result will be used in the return parameter section.
                        @@ -449,10 +448,8 @@ exposed onHTTPGet function productManual(productName : string) : 4D.OutgoingMess
                          -
                        • New Browser Tab: Opens the response in a new browser tab, allowing users to view or download content like PDFs independently.
                        • -
                          -
                        • Current Browser Tab: Loads the content in the current tab, replacing the existing page content.
                        • -
                          +
                        • New Browser Tab: Opens the response in a new browser tab, allowing users to view or download content like PDFs independently.
                        • +
                        • Current Browser Tab: Loads the content in the current tab, replacing the existing page content.
                        • Nowhere: Ignores the response, preventing the browser from displaying any content, even if the function returns a 4D.OutgoingMessage instance. This option is useful for backend processing where a visible response is not required.
                        @@ -481,8 +478,7 @@ exposed onHTTPGet function productManual(productName : string) : 4D.OutgoingMess 1. The type of action:

                          -
                        • Open: This action causes the dialog to be displayed.
                        • -
                          +
                        • Open: This action causes the dialog to be displayed.
                        • Close: This action leads to the closing of the dialog.
                        diff --git a/docs/studio/pageLoaders/events/eventsManagement.md b/docs/studio/pageLoaders/events/eventsManagement.md index 7d72429c4a..1640c3b944 100644 --- a/docs/studio/pageLoaders/events/eventsManagement.md +++ b/docs/studio/pageLoaders/events/eventsManagement.md @@ -11,7 +11,7 @@ The Contextual panel facilitates the association of class functions, navigation To bind class functions, navigation actions or standard actions with events, follow these steps: -1. **Select a Component or Qodly Source**: Begin by choosing the component or qodlysource to which you want to attach an event. This selection can be made using the canvas, the [outline](../pageLoaderOverview#outline), or, in the case of Qodly sources, either the [shared Qodly Sources](../qodlySources#from-a-namespace-shared-qodly-source) area or the [local Qodly Sources](../qodlySources#from-this-page) area. +1. **Select a Component or Qodly Source**: Begin by choosing the component or qodlysource to which you want to attach an event. This selection can be made using the canvas, the [outline](../pageLoaderOverview.md#outline), or, in the case of Qodly sources, either the [shared Qodly Sources](../qodlySources.md#from-a-namespace-shared-qodly-source) area or the [local Qodly Sources](../qodlySources.md#from-this-page) area. 2. **Expand the Contextual Panel**: Once your selection is made, expand the `Contextual panel` . It will provide you with a list of compatible events specifically tailored to your chosen component or qodlysource. @@ -185,7 +185,7 @@ For events bound to Class functions, the collapsed card displays the function si @@ -196,7 +196,7 @@ For events bound to Class functions, the collapsed card displays the function si @@ -207,7 +207,7 @@ For events bound to Class functions, the collapsed card displays the function si diff --git a/docs/studio/pageLoaders/img/Built-inSharedQodlyNamespace.png b/docs/studio/pageLoaders/img/Built-inSharedQodlyNamespace.png new file mode 100644 index 0000000000..bb8c14a0f5 Binary files /dev/null and b/docs/studio/pageLoaders/img/Built-inSharedQodlyNamespace.png differ diff --git a/docs/studio/pageLoaders/img/QodlysourceLocation.png b/docs/studio/pageLoaders/img/QodlysourceLocation.png new file mode 100644 index 0000000000..5f64b6b620 Binary files /dev/null and b/docs/studio/pageLoaders/img/QodlysourceLocation.png differ diff --git a/docs/studio/pageLoaders/pageLoaderOverview.md b/docs/studio/pageLoaders/pageLoaderOverview.md index ba52b25859..bb7e418914 100644 --- a/docs/studio/pageLoaders/pageLoaderOverview.md +++ b/docs/studio/pageLoaders/pageLoaderOverview.md @@ -11,8 +11,8 @@ In Qodly, a project's groundwork starts with a Page, which acts as the primary c
                          -
                        1. On the Qodly Studio Homepage, select Page and name the new Page in the creation modal.





                        2. -
                        3. In the Explorer, simply click the plus icon located next to Pages.




                        4. +
                        5. On the Qodly Studio Homepage, select Page and name the new Page in the creation modal.

                        6. +
                        7. In the Explorer, simply click the plus icon located next to Pages.

                        8. While in the Page Editor, go to the New + tab and opt for Page.
                        @@ -43,8 +43,8 @@ The Page Editor enhances your application by providing a versatile toolkit for i 10. **Device toolbar**: Coming Soon. 11. [**Breadcrumbs**](#breadcrumbs): Displays component hierarchy for navigation. -12. [**Tabs**](../overview.md#tabs): Organizes open Pages and all other open elements, including [class functions](../coding#classes), [model](../model/model-editor-interface.md), etc. -13. [**Tooltip**](components/componentsBasics#tooltip): Offers efficient component management and manipulation actions. +12. [**Tabs**](../overview.md#tabs): Organizes open Pages and all other open elements, including [class functions](../coding.md#classes), [model](../model/model-editor-interface.md), etc. +13. [**Tooltip**](components/componentsBasics.md#tooltip): Offers efficient component management and manipulation actions. ## Breadcrumbs @@ -362,7 +362,7 @@ Server Side allows you to control the component's behavior, such as [hiding](../ Discover numerous customization avenues that empower you to fine-tune components according to distinct needs. :::info -For further details, refer to the [Properties Panel Styling Options](./styling#properties-panel-styling-options) section. +For further details, refer to the [Properties Panel Styling Options](./styling.md#properties-panel-styling-options) section. ::: :::info diff --git a/docs/studio/pageLoaders/qodlySources.md b/docs/studio/pageLoaders/qodlySources.md index 06186cf5ab..7708949a04 100644 --- a/docs/studio/pageLoaders/qodlySources.md +++ b/docs/studio/pageLoaders/qodlySources.md @@ -16,7 +16,7 @@ Qodly Sources are integral to Qodly's architectural design, simplifying the deve ### Events and Qodly Sources -You can also attach events to qodlysources, triggering specific actions when these qodlysources are updated in the web browser. Please refer to [Qodly Source Events](events/bindingActionToEvents#qodly-source-events) for more details. +You can also attach events to qodlysources, triggering specific actions when these qodlysources are updated in the web browser. Please refer to [Qodly Source Events](events/bindingActionToEvents.md#qodly-sources) for more details. ![components](./img/QodlySource-1.2.png) @@ -52,7 +52,7 @@ Shared qodlysource, on the other hand, are scoped to the entire application and By default, when you [**create a Qodly Source**](#creating-a-qodly-source) without specifying a namespace, you define a Page qodlysource. ::: -#### Shared functions +### Shared functions Shared functions are also accessible when Entity and Entity Selection serve as shared qodlysources, making them available for use in multiple Pages within the same project. @@ -68,6 +68,56 @@ When selecting a component bound to a qodlysource, the Properties panel provides When configuring a function event, the Contextual panel indicates whether the function is shared. ::: +## Built-in Shared Qodly Namespace + +Shared namespaces enable you to define qodlysources accessible across multiple pages within your application. Among these shared namespaces, Qodly provides a built-in namespace named `Qodly`, specially designed to simplify common tasks related to URL handling and shared data management. + +The `Qodly` namespace is automatically included in every Qodly project. It is designed to help developers easily access and manage shared data crucial for application-wide tasks, such as URL parsing and navigation management. This namespace: + +- Cannot be edited or deleted to ensure consistency and integrity across your application. + +- Provides ready-to-use datasources available to all application pages. + + + +### Qodlysource: Location + +Within the **Qodly** namespace, you'll find the predefined datasource named **Location** . + +The Location qodlysource is specifically designed to facilitate handling URL-related data, making it simple to interact with different URL segments. + + +#### Key Attributes of Location: + +- **urlQuery** *(Array)*: Stores URL segments that identify specific resources. These segments represent parts of the URL separated by slashes (`/`). + + **Example:** + ```javascript + // URL: example.com/products/item + Location.urlQuery // Output: ["products", "item"] + ``` + +- **urlPath** *(Object)*: Contains key-value pairs representing parameters that appear after the question mark (`?`) in URLs. + + **Example:** + ```javascript + // URL: example.com/search?category=shoes&color=blue + Location.urlPath // Output: { category: "shoes", color: "blue" } + ``` + +- **anchor** *(String)*: Stores the part of the URL following the hash symbol (`#`). This is typically used for navigation within the same page or handling client-side routing. + + **Example:** + ```javascript + // URL: example.com/page#section3 + Location.anchor // → "section3" + ``` + +:::info Restrictions: +The **Location** datasource is shared across your entire application and **cannot be edited or deleted**. This ensures uniform behavior and prevents accidental modifications. +::: + + ## Creating a Qodly Source Within the Page Editor, the **Qodly Sources** section conveniently organizes available qodlysources. This section includes: @@ -75,18 +125,14 @@ Within the Page Editor, the **Qodly Sources** section conveniently organizes ava
                          -
                        • A Search area for filtering the qodlysource list.
                        • -
                          -
                        • The Catalog, containing:
                        • -
                          +
                        • A Search area for filtering the qodlysource list.
                        • +
                        • The Catalog, containing:
                          • -
                          • Dataclasses from your application. Here, you can designate entities or entity selections from your Datastore, which will be handled by the server as qodlysources.
                          • -
                            +
                          • Dataclasses from your application. Here, you can designate entities or entity selections from your Datastore, which will be handled by the server as qodlysources.
                          • Functions defined at the datastore level and within each dataclass.

                          -
                        • This Page: qodlysource exclusive to the current Page.
                        • -
                          +
                        • This Page: qodlysource exclusive to the current Page.
                        • Namespaces: Shared qodlysources organized by namespaces. You can create a namespace by clicking the + icon or when defining a shared qodlysource.
                        @@ -309,8 +355,7 @@ Iterative components can be bound to two types of qodlysources:
                          -
                        • Qodly Source: This is the primary qodlysource used for iterating through data. Its attributes are bound to the component, allowing you to display and work with the iterative data. Typically, this qodlysource represents an entity selection or a array.
                        • -
                          +
                        • Qodly Source: This is the primary qodlysource used for iterating through data. Its attributes are bound to the component, allowing you to display and work with the iterative data. Typically, this qodlysource represents an entity selection or a array.
                        • Selected Element: This secondary qodlysource is used to retrieve the currently selected item within the iterative component. In most cases, it represents an entity or a array element.
                        diff --git a/docs/studio/pageLoaders/states/conditionalState.md b/docs/studio/pageLoaders/states/conditionalState.md index bb56e1d964..b03d3fd2ef 100644 --- a/docs/studio/pageLoaders/states/conditionalState.md +++ b/docs/studio/pageLoaders/states/conditionalState.md @@ -130,9 +130,15 @@ At the core of the Conditions Interface is the Schema Editor, a dynamic visualiz Ensure proper placement by dragging the `Saved condition` to the ellipsis icon explorer, which represents the condition's specific level within the schema. Dropping it elsewhere might not integrate the condition correctly. -When multiple conditions are present, dropping it onto the connecting logical operator square explorer will integrate it as well. ::: +When multiple conditions are present, dropping it onto the connecting logical operator square explorer will integrate it as well. + +:::info + +Once integrated, a Go to button appears next to the saved condition's name. Clicking it opens the full saved condition in edit mode, so you can review or modify its configuration without leaving the current schema view. + +::: ### Logical Condition Combination diff --git a/docs/studio/pageLoaders/states/img/editSavedCondition.png b/docs/studio/pageLoaders/states/img/editSavedCondition.png new file mode 100644 index 0000000000..f21134ab4f Binary files /dev/null and b/docs/studio/pageLoaders/states/img/editSavedCondition.png differ diff --git a/docs/studio/pageLoaders/states/nonConditionalState.md b/docs/studio/pageLoaders/states/nonConditionalState.md index 019fbc8055..21926c0322 100644 --- a/docs/studio/pageLoaders/states/nonConditionalState.md +++ b/docs/studio/pageLoaders/states/nonConditionalState.md @@ -147,8 +147,8 @@ Steps to Reset a Component:
                          -
                        1. Locate the Component: Find the component in the Page outline.

                        2. -
                        3. Click the Reset Button: This button appears as a circular arrow icon next to the component.

                        4. +
                        5. Locate the Component: Find the component in the Page outline.
                        6. +
                        7. Click the Reset Button: This button appears as a circular arrow icon next to the component.
                        8. Confirm Reset: When prompted, confirm the action to ensure changes are reverted.
                        @@ -206,7 +206,7 @@ The `Base` state and `Conditional` states, however, are not included among these ::: :::tip -The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass#enablestate) is called several times with different states). +The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate) is called several times with different states). ::: :::warning @@ -218,8 +218,8 @@ If a state is initially "Non-Conditional" but later transitions to a "Conditiona In addition to the standard actions, Page object exposes several states related functions with error handling for "Conditional" states, like: -- [`WebForm.enableState`](../../../language/WebFormClass#enablestate): Applies the differences from selected states to the current Page. -- [`WebForm.disableState`](../../../language/WebFormClass#disablestate): Removes the applied differences from the Page. +- [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate): Applies the differences from selected states to the current Page. +- [`WebForm.disableState`](../../../language/WebFormClass.md#disablestate): Removes the applied differences from the Page. :::info These functions are designed to target only "Non-Conditional" states. In the event a "Conditional" state is used, the function will either return an error or not execute any action. diff --git a/docs/studio/pageLoaders/states/stateOverview.md b/docs/studio/pageLoaders/states/stateOverview.md index 363e409379..b66697e2f1 100644 --- a/docs/studio/pageLoaders/states/stateOverview.md +++ b/docs/studio/pageLoaders/states/stateOverview.md @@ -152,8 +152,8 @@ To designate a state as the default:
                          -
                        1. Locate the State: In the "States" panel, find the state you want to set as the default..

                        2. -
                        3. Set as Default Button: Next to the state's name, you will see a checkbox labeled "Set as default state". Check this box to set the state as the default.

                        4. +
                        5. Locate the State: In the "States" panel, find the state you want to set as the default..
                        6. +
                        7. Set as Default Button: Next to the state's name, you will see a checkbox labeled "Set as default state". Check this box to set the state as the default.
                        diff --git a/docs/studio/pageLoaders/styling.md b/docs/studio/pageLoaders/styling.md index f3ed01cabf..ed69bfecf6 100644 --- a/docs/studio/pageLoaders/styling.md +++ b/docs/studio/pageLoaders/styling.md @@ -94,7 +94,7 @@ To add a CSS class, click the styles-library
                          -
                        • For a local CSS class: Leave the "Create as Shared" option unchecked.

                        • +
                        • For a local CSS class: Leave the "Create as Shared" option unchecked.
                        • For a shared CSS class: Check the "Create as Shared" option.
                        @@ -126,7 +126,7 @@ To add a CSS class, click the styles-library
                        -- Both **Local** and **Shared** CSS class codes can be modified in the [Contextual panel](../pageLoaders/pageLoaderOverview#contextual-panel) at the interface's bottom. +- Both **Local** and **Shared** CSS class codes can be modified in the [Contextual panel](../pageLoaders/pageLoaderOverview.md#contextual-panel) at the interface's bottom. styles-library diff --git a/docs/studio/pageLoaders/templates.md b/docs/studio/pageLoaders/templates.md index 9d8aae3411..08e7b765e3 100644 --- a/docs/studio/pageLoaders/templates.md +++ b/docs/studio/pageLoaders/templates.md @@ -19,8 +19,7 @@ Navigate to the Components section and locate the Templates tab to explore the a
                          -
                        1. Navigate to the Components Section: Find the Templates tab within the Components section.
                        2. -
                          +
                        3. Navigate to the Components Section: Find the Templates tab within the Components section.
                        4. Select a Category: Once in the Templates tab, browse through the available categories. Choose the category that aligns with your project's requirements. For example, you might opt for the Team management category styles-library.
                        @@ -36,11 +35,13 @@ Quickly find categories by name using the search box styles-library
                          -
                        1. Explore Templates: Upon selection, a panel opens, presenting various templates.
                        2. -
                          - Each template is accompanied by a Preview Image to visualize the template's content and a Title and Description to understand the template's purpose and functionality. -

                          - styles-library +
                        3. + Explore Templates: Upon selection, a panel opens, presenting various templates. +

                          + Each template is accompanied by a Preview Image to visualize the template's content and a Title and Description to understand the template's purpose and functionality. +

                          + styles-library +
                        @@ -56,10 +57,8 @@ To use a template from the selected category, for instance, the datatable catego
                          -
                        1. Select a Category: Click on the desired category (e.g., Datatables, Travel, or Business). This will open a panel displaying all the templates available within that category.
                        2. -
                          -
                        3. Choose a Template: Browse the templates shown in the panel. Each template includes a preview image and a brief description.
                        4. -
                          +
                        5. Select a Category: Click on the desired category (e.g., Datatables, Travel, or Business). This will open a panel displaying all the templates available within that category.
                        6. +
                        7. Choose a Template: Browse the templates shown in the panel. Each template includes a preview image and a brief description.
                        8. Drag the Template (Not the Category!): Click and drag a specific template from the panel directly onto the canvas.
                        diff --git a/docs/studio/rendering.md b/docs/studio/rendering.md index aeec9ab5cb..714a59be83 100644 --- a/docs/studio/rendering.md +++ b/docs/studio/rendering.md @@ -23,7 +23,7 @@ In the case of Qodly Studio, rendering takes a different path compared to conven - **Rendering Trigger**: Accessing the Page directly in a web browser is not an option. Instead, the Page is "**rendered**" when users initiate the rendering process, which can be done in one of two ways: - - **Preview in Qodly Studio**: Users have the option to [preview the Page within Qodly Studio interface](#preview-in-the-studio). + - **Preview in Qodly Studio**: Users have the option to [preview the Page within Qodly Studio interface](#preview-in-qodly-studio). - **Dedicated Browser Tab**: Alternatively, users can opt to [render the Page in a separate browser tab](#preview-in-a-browser-window). @@ -157,7 +157,7 @@ Understanding the lifecycle of a page is crucial for diagnosing and fixing rende - **Initializing Shared Qodly Sources**: During rendering, shared Qodly sources are initialized. These sources provide data that multiple parts of the page can access and use. :::info - Since Qodly treats each page load or tab navigation as a new rendering cycle, these shared sources are reinitialized every time the page renders. This ensures that the page always reflects the most up-to-date data. However, this also means that Shared Qodly Sources are reset during each re-render **unless navigation is done through a page loader**. When [**Binding Navigation Actions to Events**](./pageLoaders/events/bindingActionToEvents#binding-navigation-actions-to-events) and using a **Page Loader** or **Page Loader (Self)**, the Shared Qodly Source persist across navigations. The [Page Loader](./pageLoaders/pageLoaderOverview) manages state in a way that prevents full reinitialization, maintaining the Shared Qodly Sources and ensuring continuity across navigations without resetting the data. + Since Qodly treats each page load or tab navigation as a new rendering cycle, these shared sources are reinitialized every time the page renders. This ensures that the page always reflects the most up-to-date data. However, this also means that Shared Qodly Sources are reset during each re-render **unless navigation is done through a page loader**. When [**Binding Navigation Actions to Events**](./pageLoaders/events/bindingActionToEvents.md#binding-navigation-actions-to-events) and using a **Page Loader** or **Page Loader (Self)**, the Shared Qodly Source persist across navigations. The [Page Loader](./pageLoaders/pageLoaderOverview) manages state in a way that prevents full reinitialization, maintaining the Shared Qodly Sources and ensuring continuity across navigations without resetting the data. ::: - **Initializing Local Qodly Sources**: Following the initialization of shared Qodly sources, local Qodly sources specific to individual components are set up, ensuring each component has access to the data it needs. diff --git a/docs/studio/roles/dataClassPermissions.md b/docs/studio/roles/dataClassPermissions.md index 84f489754e..ce5e6168b9 100644 --- a/docs/studio/roles/dataClassPermissions.md +++ b/docs/studio/roles/dataClassPermissions.md @@ -23,7 +23,7 @@ The
                          -
                        • If a privilege is both purple-tagged and accompanied by the icon, it indicates the inclusion of an extra privilege.
                        • -
                          - Obtaining permission for that resource requires having one of the additional privileges. +
                        • + If a privilege is both purple-tagged and accompanied by the icon, it indicates the inclusion of an extra privilege. +
                          + Obtaining permission for that resource requires having one of the additional privileges. +
                        diff --git a/docs/studio/roles/permissionsOverview.md b/docs/studio/roles/permissionsOverview.md index e6d58dc3a1..d22050c055 100644 --- a/docs/studio/roles/permissionsOverview.md +++ b/docs/studio/roles/permissionsOverview.md @@ -81,17 +81,17 @@ The reset functionality allows users to clear all permissions for the current pr - A confirmation dialog will appear, asking the user to confirm or cancel the action . -### Clear Non-Existing Resources +### Clean Non-Existing Resources If a resource is unavailable (e.g., an attribute name from the Tag DataClass was deleted), it appears in red in the permissions table. A shadow effect is applied to indicate that the resource no longer exists. The resource icon also turns red, providing a clear visual indication of its unavailability. -Also, the clear button to remove permissions related to resources that no longer exist becomes enabled. +Also, the clean button to remove permissions, related to resources that no longer exist, becomes enabled. - Once the clear button is clicked, all permissions associated with non-existing resources will be deleted from the catalog across all privileges. + Once the clean button is clicked, all permissions associated with non-existing resources will be deleted from the catalog across all privileges. @@ -99,7 +99,7 @@ Also, the clear button to remove permissions related to resources that no longer :::info -When all resources are available, the Clear button is disabled. +When all resources are available, the Clean button is disabled. ::: ## Inheritance diff --git a/docusaurus.config.js b/docusaurus.config.js index 9f1895107f..76abde1881 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -9,8 +9,8 @@ const isProduction = process.env.GITHUB_REPOSITORY_OWNER === 'qodly'; /** @type {import('@docusaurus/types').Config} */ const config = { - title: 'Qodly Developer Center', - tagline: 'Welcome to the Qodly Documentation', + title: 'Qodly Documentation', + tagline: 'Learn. Build. Ship. Everything you need for Qodly.', url: isProduction ? "https://developer.qodly.com" : "https://docqodly.github.io", baseUrl: "/docs/", onBrokenLinks: 'warn', @@ -133,7 +133,8 @@ Thank you for helping us improve! 🚀 // }, // }, metadata: [ - {name: 'keywords', content: 'qodly documentation, qodly docs, documentation qodly, doc qodly'}, + {name: 'keywords', content: 'qodly documentation, qodly doc, documentation qodly, doc qodly, qodly Developer, qodly guide, qodly tutorial, qodly low-code development'}, + {name: 'description', content: 'Official documentation for Qodly developers. Learn how to use Qodly Studio, Qodlyscript, and more with detailed guides and tutorials.'}, ], navbar: { title: 'Docs', //Docs diff --git a/sidebars.js b/sidebars.js index 278a231b93..aeae91a5c5 100644 --- a/sidebars.js +++ b/sidebars.js @@ -65,7 +65,7 @@ const sidebars = { label: 'Release Notes', collapsed: false, items: [ - 'notes/1.2.0', + 'notes/1.10.1', 'notes/1.1.0', 'notes/1.0.0', 'notes/1.0.0-beta.6', @@ -390,8 +390,6 @@ const sidebars = { 'language/commands/verifyPasswordHash', 'language/commands/webEvent', 'language/commands/webForm', - 'language/commands/webServer', - 'language/commands/webServerList', 'language/commands/yearOf', 'language/commands/zipCreateArchive', 'language/commands/zipReadArchive', @@ -442,7 +440,6 @@ const sidebars = { 'language/UsersClass', 'language/WebFormClass', 'language/WebFormItemClass', - 'language/WebServerClass', 'language/ZipArchiveClass', 'language/ZipFileClass', 'language/ZipFolderClass', @@ -536,6 +533,27 @@ const sidebars = { ], }, 'qodlyLookerStudio/qodlyLookerStudioConnector', + { + type: "link", + label: "Third-party Authentication", + href: "https://github.com/4d/4D-NetKit/tree/20R8#oauth2provider" + }, + { + type: 'category', + label: 'Email Integration', + items: [ + { + type: 'link', + label: "Office365 (Outlook)", + href: "https://github.com/4d/4D-NetKit/tree/20R8#office365" + }, + { + type: 'link', + label: "Google (Gmail)", + href: "https://github.com/4d/4D-NetKit/tree/20R8#google" + }, + ] + }, { type: 'category', label: 'Custom Components', diff --git a/src/pages/index.js b/src/pages/index.js index 0a16159a29..3a913db8cf 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -31,9 +31,9 @@ export default function Home() { const {siteConfig} = useDocusaurusContext(); return ( + title={siteConfig.title} + description={siteConfig.themeConfig.metadata.description} + keywords={siteConfig.themeConfig.metadata.keywords}>
                        diff --git a/src/theme/Layout.js b/src/theme/Layout.js new file mode 100644 index 0000000000..615d1a1f75 --- /dev/null +++ b/src/theme/Layout.js @@ -0,0 +1,55 @@ +import React, { useEffect, useState } from 'react'; +import Layout from '@theme-original/Layout'; +import Head from '@docusaurus/Head'; +import { useLocation } from '@docusaurus/router'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; + +export default function CustomLayout(props) { + const { siteConfig } = useDocusaurusContext(); + const location = useLocation(); + + const baseKeywords = siteConfig.themeConfig.metadata.find( + (meta) => meta.name === 'keywords' + )?.content || ''; + + let extraKeywords = ''; + const path = location.pathname; + + if (path.startsWith('/docs/get-started')) { // qodly getting started + extraKeywords = 'qodly quickstart, qodly setup, qodly guide, how to use qodly, qodly overview, qodly getting started, qodly basics'; + } + else if (path.startsWith('/docs/studio')) { // qodly studio + extraKeywords = 'qodly studio, qodly components, qodly model, qodly events, qodly roles, qodly states, qodly permissions, qodly UI builder, qodly frontend, low-code development, build apps with qodly, qodly interface, qodly http handlers, qodly debugging, qodly rendering'; + } + else if (path.startsWith('/docs/data-explorer')) { // qodly data explorer + extraKeywords = 'qodly data explorer, view qodly data, qodly data browser, qodly data admin, qodly data search, qodly data management ui, qodly data ui'; + } + else if (path.startsWith('/docs/language')) { // qodly script + extraKeywords = 'qodly script, qodly language, qodly classes, qodly commands, qodly scripting guide, qodly methods, qodly code reference, qodly developer reference, write code in qodly'; + } + else if (path.startsWith('/docs/cloud')) { // qodly cloud + extraKeywords = 'qodly cloud, qodly deployment, qodly hosting, qodly environments, qodly billing, qodly subscription management, qodly data management, qodly cloud console, qodly app management, qodly sandbox, qodly release pipeline, qodly monitoring'; + } + else if (path.startsWith('/docs/api')) { // qodly api + extraKeywords = 'qodly api, qodly rest api, qodly dataclass api, qodly endpoints, qodly orda api, rest access qodly, qodly external integration, expose qodly data, qodly class functions api, qodly backend api'; + } + else if (path.startsWith('/docs/customComponent')) { // qodly custom components + extraKeywords = 'qodly custom components, build custom components qodly, qodly react components, qodly component api, @qodly/cli, extend qodly, reusable components qodly, qodly component setup, qodly component structure'; + } + else if (path.startsWith('/docs/qodlyLookerStudio')) { // qodlyLookerStudio + extraKeywords = 'qodly looker studio, qodly connector, qodly looker data visualization, qodly reports, connect qodly to looker studio, qodly analytics, real-time qodly data, qodly business metrics, qodly looker integration'; + } + + const combinedKeywords = extraKeywords + ? `${baseKeywords}, ${extraKeywords}` + : baseKeywords; + + return ( + <> + + + + + + ); +} diff --git a/versioned_docs/version-1.0.0/api/$catalog.md b/versioned_docs/version-1.0.0/api/$catalog.md index 69146286df..59b18ca142 100644 --- a/versioned_docs/version-1.0.0/api/$catalog.md +++ b/versioned_docs/version-1.0.0/api/$catalog.md @@ -71,7 +71,7 @@ Each dataclass listed by the `$catalog` endpoint returns the following propertie :::tip -Only the exposed dataclasses are shown in this list for your project's datastore. For more information, please refer to [Configuring Data Access](./overview#configuring-data-access) section. +Only the exposed dataclasses are shown in this list for your project's datastore. For more information, please refer to [Configuring Data Access](./overview.md#configuring-data-access) section. ::: ### Sample Usage Example in Postman diff --git a/versioned_docs/version-1.0.0/api/$querypath.md b/versioned_docs/version-1.0.0/api/$querypath.md index c0a12eeb99..cc4a50cde2 100644 --- a/versioned_docs/version-1.0.0/api/$querypath.md +++ b/versioned_docs/version-1.0.0/api/$querypath.md @@ -10,7 +10,7 @@ title: $querypath The `$querypath` endpoint allows developers to understand how queries are executed in the backend. It provides a step-by-step breakdown of the query execution, showing each operation, its performance, and the results obtained at each stage. It also reveales optimization techniques and the exact path taken by the server to fetch the required data. :::info -For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass#about-queryplan-and-querypath) documentation. +For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass.md#about-queryplan-and-querypath) documentation. ::: ### Syntax diff --git a/versioned_docs/version-1.0.0/api/$queryplan.md b/versioned_docs/version-1.0.0/api/$queryplan.md index 5187fdfb18..f0071a8bfa 100644 --- a/versioned_docs/version-1.0.0/api/$queryplan.md +++ b/versioned_docs/version-1.0.0/api/$queryplan.md @@ -12,7 +12,7 @@ title: $queryplan The `$queryplan` endpoint is designed to provide insights into the execution strategy of queries processed by the server. This endpoint helps developers and database administrators to analyze and optimize query performance by returning a detailed breakdown of the query execution plan. :::info -For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass#about-queryplan-and-querypath) documentation. +For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass.md#about-queryplan-and-querypath) documentation. ::: ### Syntax diff --git a/versioned_docs/version-1.0.0/api/$singleton.md b/versioned_docs/version-1.0.0/api/$singleton.md index f4fb869409..a008ad55fd 100644 --- a/versioned_docs/version-1.0.0/api/$singleton.md +++ b/versioned_docs/version-1.0.0/api/$singleton.md @@ -85,7 +85,7 @@ exposed function sayHello (value : string) :::note -The `mySingleton` class and `sayHello` function are listed when you call the [`$catalog`]($catalog.md#singleton) command. +The `mySingleton` class and `sayHello` function are listed when you call the [`$catalog`]($catalog.md#singletons) command. ::: diff --git a/versioned_docs/version-1.0.0/api/classFunctionsOverview.md b/versioned_docs/version-1.0.0/api/classFunctionsOverview.md index 92159a7bdc..ce45104ed7 100644 --- a/versioned_docs/version-1.0.0/api/classFunctionsOverview.md +++ b/versioned_docs/version-1.0.0/api/classFunctionsOverview.md @@ -24,7 +24,7 @@ exposed function getTest() : string ::: :::info -For more details, refer to the section on [Exposed vs. Non-Exposed Functions](../orda/data-model#exposed-vs-non-exposed-functions). +For more details, refer to the section on [Exposed vs. Non-Exposed Functions](../orda/data-model.md#exposed-vs-non-exposed-functions). ::: ### `onHttpGet` Functions @@ -78,10 +78,10 @@ The ORDA REST API provides several endpoints to call class functions: |Class function|Syntax| |---|----| -|[Datastore Class](../orda/data-model#datastore)|`/rest/$catalog/DataStoreClassFunction`| -|[Dataclass Class](../orda/data-model#dataclass)|`/rest/{{dataClass}}/DataClassClassFunction`| -|[EntitySelection Class](../orda/data-model#entityselection-class)|`/rest/{{dataClass}}/EntitySelectionClassFunction`| -|[Entity Class](../orda/data-model#entity-class)|`/rest/{{dataClass}}(key)/EntityClassFunction`| +|[Datastore Class](../orda/data-model.md#datastore)|`/rest/$catalog/DataStoreClassFunction`| +|[Dataclass Class](../orda/data-model.md#dataclass)|`/rest/{{dataClass}}/DataClassClassFunction`| +|[EntitySelection Class](../orda/data-model.md#entityselection-class)|`/rest/{{dataClass}}/EntitySelectionClassFunction`| +|[Entity Class](../orda/data-model.md#entity-class)|`/rest/{{dataClass}}(key)/EntityClassFunction`| |[Singleton class](../language/basics/lang-classes.md#singleton-classes)|`/rest/$singleton/SingletonClass/SingletonClassFunction` (see [$singleton page]($singleton.md))| diff --git a/versioned_docs/version-1.0.0/api/dataclassEndpoints.md b/versioned_docs/version-1.0.0/api/dataclassEndpoints.md index e8236dddb1..d72d0b4e33 100644 --- a/versioned_docs/version-1.0.0/api/dataclassEndpoints.md +++ b/versioned_docs/version-1.0.0/api/dataclassEndpoints.md @@ -153,7 +153,7 @@ The response structure for the `/rest/{{dataClass}}[2]` endpoint looks something ``` -### rest/dataClass:attribute(value) +### rest/dataClass\:attribute(value) #### Purpose diff --git a/versioned_docs/version-1.0.0/api/overview.md b/versioned_docs/version-1.0.0/api/overview.md index 7690ac73bd..5f41349707 100644 --- a/versioned_docs/version-1.0.0/api/overview.md +++ b/versioned_docs/version-1.0.0/api/overview.md @@ -28,8 +28,8 @@ To restrict access to sensitive dataclasses such as those containing user creden
                          -
                        1. Open the Model Editor.

                        2. -
                        3. Access the properties panel of the dataclass you intend to modify.

                        4. +
                        5. Open the Model Editor.
                        6. +
                        7. Access the properties panel of the dataclass you intend to modify.
                        8. Enable the Do not Expose as REST option within the Scope property.
                        @@ -46,7 +46,7 @@ By default, attributes within these dataclasses are also exposed. To limit expos
                          -
                        1. In the Model Editor, select the attribute you intend to hide.

                        2. +
                        3. In the Model Editor, select the attribute you intend to hide.
                        4. Enable the Do not Expose as REST option in the Scope property.
                        diff --git a/versioned_docs/version-1.0.0/cloud/apiKeys.md b/versioned_docs/version-1.0.0/cloud/apiKeys.md index 8e81018153..1f1da8674e 100644 --- a/versioned_docs/version-1.0.0/cloud/apiKeys.md +++ b/versioned_docs/version-1.0.0/cloud/apiKeys.md @@ -93,9 +93,9 @@ In the API management section, each key includes options to:
                          -
                        • Show API Key: This button reveals the API key in the interface and includes a copy button , enabling easy duplication of the API key for use in configuring your application or services.

                        • -
                        • Delete API Key: Positioned next to the API key, this button removes the key upon confirmation, safeguarding against unintended deletions.

                        • -
                        • Edit API Key: Also adjacent to the API display, the edit button opens a configuration dialog for modifying the API key's details.

                        • +
                        • Show API Key: This button reveals the API key in the interface and includes a copy button , enabling easy duplication of the API key for use in configuring your application or services.
                        • +
                        • Delete API Key: Positioned next to the API key, this button removes the key upon confirmation, safeguarding against unintended deletions.
                        • +
                        • Edit API Key: Also adjacent to the API display, the edit button opens a configuration dialog for modifying the API key's details.
                        diff --git a/versioned_docs/version-1.0.0/cloud/billingSubscriptionManagement.md b/versioned_docs/version-1.0.0/cloud/billingSubscriptionManagement.md index c554175d96..b62ca633ea 100644 --- a/versioned_docs/version-1.0.0/cloud/billingSubscriptionManagement.md +++ b/versioned_docs/version-1.0.0/cloud/billingSubscriptionManagement.md @@ -20,10 +20,8 @@ The **Next Invoice** section displays the amount and date of your next scheduled
                          -
                        • Amount: The total cost of the upcoming invoice.
                        • -
                          -
                        • Billing Date: The scheduled date for the next payment.
                        • -
                          +
                        • Amount: The total cost of the upcoming invoice.
                        • +
                        • Billing Date: The scheduled date for the next payment.
                        • View Details: Opens a breakdown of the invoice, showing the following details:
                        @@ -36,12 +34,9 @@ The **Next Invoice** section displays the amount and date of your next scheduled
                            -
                          • Description: Items included in the subscription, such as: Qodly Power (computing resources), Storage extensions, and the Internet outbound data transfer packs.
                          • -
                            -
                          • Quantity: Amount of each resource being billed.
                          • -
                            -
                          • Unit Price: The price per unit of each resource.
                          • -
                            +
                          • Description: Items included in the subscription, such as: Qodly Power (computing resources), Storage extensions, and the Internet outbound data transfer packs.
                          • +
                          • Quantity: Amount of each resource being billed.
                          • +
                          • Unit Price: The price per unit of each resource.
                          • Total: The cost for each resource and the total sum of all charges.
                        @@ -57,12 +52,9 @@ This section provides the status and cycle of your subscription, along with the
                          -
                        • Status: Indicates whether the subscription is active or inactive.
                        • -
                          -
                        • Start Date: The date your subscription began.
                        • -
                          -
                        • Billing Cycle Start/End: Defines the current subscription cycle's start and end dates.
                        • -
                          +
                        • Status: Indicates whether the subscription is active or inactive.
                        • +
                        • Start Date: The date your subscription began.
                        • +
                        • Billing Cycle Start/End: Defines the current subscription cycle's start and end dates.
                        • Payment Method: Displays the card currently linked to your subscription.
                        @@ -79,12 +71,9 @@ Clicking the Change Payment Method card
                          -
                        • Email: The associated email address.
                        • -
                          -
                        • Card Number: The new payment card details.
                        • -
                          -
                        • Expiration Date and Security Code (CVC).
                        • -
                          +
                        • Email: The associated email address.
                        • +
                        • Card Number: The new payment card details.
                        • +
                        • Expiration Date and Security Code (CVC).
                        • Country: The billing country for the card.
                        @@ -114,8 +103,7 @@ The **Invoices** section lists past invoices with downloadable options for recei Clicking the Download Invoice button redirects you to a detailed invoice page where you can:

                          -
                        • Download Invoice: Get a PDF copy of the invoice for record-keeping.
                        • -
                          +
                        • Download Invoice: Get a PDF copy of the invoice for record-keeping.
                        • Download Receipt: Obtain a receipt for accounting or reimbursement purposes.
                        @@ -201,10 +189,8 @@ The **Delete**
                          -
                        • Available for all environments except Development.
                        • -
                          -
                        • Requires entering the environment name in a confirmation dialog to prevent accidental deletions.
                        • -
                          +
                        • Available for all environments except Development.
                        • +
                        • Requires entering the environment name in a confirmation dialog to prevent accidental deletions.
                        • Once deleted, the environment and its associated resources are removed, and the subscription is updated.
                        diff --git a/versioned_docs/version-1.0.0/cloud/environmentsOverview.md b/versioned_docs/version-1.0.0/cloud/environmentsOverview.md index de1998fee4..3c3187b929 100644 --- a/versioned_docs/version-1.0.0/cloud/environmentsOverview.md +++ b/versioned_docs/version-1.0.0/cloud/environmentsOverview.md @@ -30,8 +30,8 @@ For every environment, you can access your files on the server using the **Secur
                          -
                        1. Click the Access files button: Navigate to the specific environment you want to manage and click the Access files button.

                        2. -
                        3. Open your FTP Client: Use your preferred FTP client (e.g., Filezilla). This client will allow you to manage and transfer files securely.

                        4. +
                        5. Click the Access files button: Navigate to the specific environment you want to manage and click the Access files button.
                        6. +
                        7. Open your FTP Client: Use your preferred FTP client (e.g., Filezilla). This client will allow you to manage and transfer files securely.
                        diff --git a/versioned_docs/version-1.0.0/cloud/myApps.md b/versioned_docs/version-1.0.0/cloud/myApps.md index 115d70bc7c..6c32e9f85a 100644 --- a/versioned_docs/version-1.0.0/cloud/myApps.md +++ b/versioned_docs/version-1.0.0/cloud/myApps.md @@ -19,8 +19,7 @@ To create an app in the Console, follow the steps below, using the provided scre
                          -
                        1. Go to the My Apps section in the Console.
                        2. -
                          +
                        3. Go to the My Apps section in the Console.
                        4. Click the New App button on the right side of the page or in the sidebar to begin the application creation process.
                        @@ -86,8 +85,7 @@ The next section allows you to configure resources for each environment associat
                          -
                        1. For each new environment, provide a Name and a Description.
                        2. -
                          +
                        3. For each new environment, provide a Name and a Description.
                        4. Customize the configuration separately for each environment, allowing you to tailor resources to specific development stages.
                        @@ -155,8 +153,7 @@ This section displays all pending invitations for transferring app ownership. Fo If the recipient chooses to decline:

                          -
                        • They are shown a Decline Payment page, allowing them to reject the invitation.
                        • -

                          +
                        • They are shown a Decline Payment page, allowing them to reject the invitation.

                        • Upon declining, the app is permanently deleted, and both parties are notified.
                        diff --git a/versioned_docs/version-1.0.0/cloud/resourceMonitoring.md b/versioned_docs/version-1.0.0/cloud/resourceMonitoring.md index 002bb3b453..5948ecfecf 100644 --- a/versioned_docs/version-1.0.0/cloud/resourceMonitoring.md +++ b/versioned_docs/version-1.0.0/cloud/resourceMonitoring.md @@ -26,8 +26,7 @@ The **General Tab** contains core information and key actions, providing an at-a The Usage card contains:

                          -
                        • Disk Usage: Shows the percentage of disk storage currently used by the environment, useful for tracking storage limits and understanding data volume.
                        • -
                          +
                        • Disk Usage: Shows the percentage of disk storage currently used by the environment, useful for tracking storage limits and understanding data volume.
                        • Memory Usage: Displays the memory consumption percentage, allowing you to monitor memory use and scale resources as needed.
                        @@ -54,14 +53,11 @@ The **General Tab** contains core information and key actions, providing an at-a The Server Status card contains:

                          -
                        • Status: Whether the server is operational and accessible.
                        • -
                          +
                        • Status: Whether the server is operational and accessible.
                        • Control Buttons:
                          • -
                          • Stop: Stops the server, making it unavailable temporarily.
                          • -
                            -
                          • Restart: Restarts the server, which can be useful for troubleshooting or applying configurations.
                          • -
                            +
                          • Stop: Stops the server, making it unavailable temporarily.
                          • +
                          • Restart: Restarts the server, which can be useful for troubleshooting or applying configurations.
                          • Refresh: Updates the server status display, allowing you to check the latest status.
                        @@ -132,8 +128,7 @@ Allows you to use a custom domain for the application in deployment environments
                          -
                        • Add Custom Domain:
                        • -
                          +
                        • Add Custom Domain:
                          • Click the Add Custom Domain button, which opens a dialog for setting up your custom domain.

                          • @@ -151,8 +146,7 @@ Allows you to use a custom domain for the application in deployment environments
                              -
                            • Using Your Own SSL Certificate: For enhanced security, you can add a custom SSL certificate by selecting "I want to use my own certificate file," which opens fields to enter.
                            • -
                              +
                            • Using Your Own SSL Certificate: For enhanced security, you can add a custom SSL certificate by selecting "I want to use my own certificate file," which opens fields to enter.
                              • Certificate Body: Paste the content of your SSL certificate.

                              • @@ -180,10 +174,8 @@ The **Activity** section logs significant events and actions taken within the en Each activity entry includes:

                                  -
                                • Description: Summarizes the action taken (e.g., server start).
                                • -
                                  -
                                • Timestamp: Provides the date and time the action occurred.
                                • -
                                  +
                                • Description: Summarizes the action taken (e.g., server start).
                                • +
                                • Timestamp: Provides the date and time the action occurred.
                                • User: Indicates which user performed the action.
                                diff --git a/versioned_docs/version-1.0.0/cloud/sandbox.md b/versioned_docs/version-1.0.0/cloud/sandbox.md index 3b33218a0b..3c8ee006ce 100644 --- a/versioned_docs/version-1.0.0/cloud/sandbox.md +++ b/versioned_docs/version-1.0.0/cloud/sandbox.md @@ -37,8 +37,7 @@ To create a new Sandbox, follow these steps:
                                  -
                                • Access the Console: Open the Console.
                                • -
                                  +
                                • Access the Console: Open the Console.
                                • Click on "New Sandbox": Select the "New Sandbox" button to initiate the creation process.
                                diff --git a/versioned_docs/version-1.0.0/cloud/userAccountManagement.md b/versioned_docs/version-1.0.0/cloud/userAccountManagement.md index 3c53576e53..e6eec0243d 100644 --- a/versioned_docs/version-1.0.0/cloud/userAccountManagement.md +++ b/versioned_docs/version-1.0.0/cloud/userAccountManagement.md @@ -48,12 +48,9 @@ If you need to add a new user and assign them to multiple environments:
                                  -
                                • First Name and Last Name (optional).
                                • -
                                  -
                                • Email Address (mandatory).
                                • -
                                  -
                                • Select an Environment to associate the user with.
                                • -
                                  +
                                • First Name and Last Name (optional).
                                • +
                                • Email Address (mandatory).
                                • +
                                • Select an Environment to associate the user with.
                                • Assign a Profile (e.g., Admin, Viewer).
                                @@ -80,10 +77,8 @@ Editing a user's details in the Users Page is environment-specific, meaning you
                                  -
                                1. Navigate to the Users Page and identify the user whose details you want to edit.
                                2. -
                                  -
                                3. Expand the user card to reveal their assigned environments.
                                4. -
                                  +
                                5. Navigate to the Users Page and identify the user whose details you want to edit.
                                6. +
                                7. Expand the user card to reveal their assigned environments.
                                8. Click the button next to the specific environment where the user is assigned.
                                @@ -95,8 +90,7 @@ Editing a user's details in the Users Page is environment-specific, meaning you
                                  -
                                1. Modify the following fields as needed:
                                2. -
                                  +
                                3. Modify the following fields as needed:
                                  • First Name and Last Name.

                                  • @@ -127,8 +121,7 @@ To completely delete a user from the application, removing them from all environ
                                      -
                                    1. Navigate to the Users Page and identify the user you want to delete.
                                    2. -
                                      +
                                    3. Navigate to the Users Page and identify the user you want to delete.
                                    4. Click the Delete User button located on the user card.
                                    @@ -162,10 +155,8 @@ Removing a user from a specific environment can be done through the Users Page,
                                      -
                                    1. Navigate to the Users Page and identify the user you want to remove.
                                    2. -
                                      -
                                    3. Expand the user card to view all the environments they are assigned to.
                                    4. -
                                      +
                                    5. Navigate to the Users Page and identify the user you want to remove.
                                    6. +
                                    7. Expand the user card to view all the environments they are assigned to.
                                    8. Click the button next to the specific environment where the user is assigned.
                                    @@ -203,8 +194,7 @@ Adding a user to a specific environment from the **Users Page** is straightforwa
                                      -
                                    1. Navigate to the Users Page and identify the user you want to assign to another environment.
                                    2. -
                                      +
                                    3. Navigate to the Users Page and identify the user you want to assign to another environment.
                                    4. Click the + Environment button located on the user card.
                                    @@ -216,8 +206,7 @@ Adding a user to a specific environment from the **Users Page** is straightforwa
                                      -
                                    1. Fill in the details in the Add User to Environment dialog:
                                    2. -
                                      +
                                    3. Fill in the details in the Add User to Environment dialog:
                                      • The Email Address field will auto-populate with the selected user's email.

                                      • @@ -260,16 +249,14 @@ To add a new user or assign an existing user to the environment you’re managin
                                          -
                                        • Existing User:
                                        • -
                                          +
                                        • Existing User:
                                          • Choose a user from the dropdown, which lists all users previously added to the Users Page.

                                          • These users could have been added through the Users Page or other environments’ Team Tabs.

                                          -
                                        • New User:
                                        • -
                                          +
                                        • New User:
                                          • Enter the Email Address of the user you want to add for the first time.
                                          @@ -283,11 +270,9 @@ To add a new user or assign an existing user to the environment you’re managin
                                            -
                                          1. Fill in the following details:
                                          2. -
                                            +
                                          3. Fill in the following details:
                                            • -
                                            • First Name and Last Name (optional).
                                            • -
                                              +
                                            • First Name and Last Name (optional).
                                            • Assign a Profile (e.g., Admin, Viewer).
                                          @@ -314,8 +299,7 @@ Editing a user’s details in the Team Tab is specific to the environment where
                                            -
                                          1. Open the Team Tab from the selected environment (e.g., Dev, Staging, Production.
                                          2. -
                                            +
                                          3. Open the Team Tab from the selected environment (e.g., Dev, Staging, Production.
                                          4. Click the button next to the user.
                                          @@ -327,8 +311,7 @@ Editing a user’s details in the Team Tab is specific to the environment where
                                            -
                                          1. Modify the following fields as needed:
                                          2. -
                                            +
                                          3. Modify the following fields as needed:
                                            • First Name and Last Name.

                                            • @@ -365,8 +348,7 @@ The Team Tab allows you to remove a user from a specific environment without aff
                                                -
                                              1. Navigate to the Team Tab from the selected environment (e.g., Dev, Staging, Production) and identify the user you want to remove.
                                              2. -
                                                +
                                              3. Navigate to the Team Tab from the selected environment (e.g., Dev, Staging, Production) and identify the user you want to remove.
                                              4. Click the button next to the specific user.
                                              diff --git a/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.2.16.mdx b/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.2.16.mdx index 95f3187982..21f145526e 100644 --- a/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.2.16.mdx +++ b/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.2.16.mdx @@ -21,7 +21,8 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| + ### *Returns* @@ -39,7 +40,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.2.24.mdx b/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.2.24.mdx index f52658c0ca..d640dc997b 100644 --- a/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.2.24.mdx +++ b/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.2.24.mdx @@ -21,9 +21,8 @@ A hook that provides state information and actions for managing Qodly Studio pan `{StudioPanelReturnType}` - An object containing the type, open state, current state, and actions to manipulate Qodly Studio panel. :::info -The `useStudioPanel` function returns an object with properties [`type`](#type), [`isOpen`](#isopen), [`current`](#current-1), and `actions` to manipulate Qodly Studio panel state. - -The `actions` object includes methods for [updating the state](#setstate), [setting the current type and value](#setcurrent), [closing](#close), [opening](#open), and [opening with a specific type and current value](#openwithcurrent). +The `useStudioPanel` function returns an object with properties `type`, `isOpen`, `current`, and `actions` to manipulate Qodly Studio panel state. +The `actions` object includes methods for `updating the state`, `setting the current type and value`, `closing`, `opening`, and `opening with a specific type and current value`. ::: @@ -50,7 +49,7 @@ The `useRenderer` function returns a tuple with two elements: - `HTMLElement | null`: The current DOM element or null. This represents the element to which the renderer is currently connected. - An object providing methods to: -- [Connect the renderer](#connectrenderer) +- Connect the renderer - `eventsToHandle`: An object mapping event names to their corresponding handler functions. @@ -69,7 +68,7 @@ A hook that provides methods and properties related to the layout mode of a Page `{LayoutReturnType}` - An object containing properties and methods related to the layout mode. :::info -The useLayout function returns an object with properties [`layout`](#layout) and [`isAiryMode`](#isairymode), along with methods `getClassName` and `toggle`. +The useLayout function returns an object with properties `layout` and `isAiryMode`, along with methods `getClassName` and `toggle`. ::: @@ -135,7 +134,8 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| + ### *Returns* @@ -144,7 +144,7 @@ A hook that facilitates managing datasources and current elements associated wit :::info The `useSources` function returns an object with the following structure: - `sources`: An object containing `datasource` and `currentElement`, representing the current values of datasources and current elements. -- `actions`: An object containing methods for manipulating datasource values, including [`setDatasourceValue`](#actionssetdatasourcevalue), [`setCurrentElementValue`](#actionssetcurrentelementvalue), [`fetchDatasourceValue`](#actionsfetchdatasourcevalue), and [`fetchCurrentElementValue`](#actionsfetchcurrentelementvalue). +- `actions`: An object containing methods for manipulating datasource values, including `setDatasourceValue`, `setCurrentElementValue`, `fetchDatasourceValue`, and `fetchCurrentElementValue`. ::: @@ -159,7 +159,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.3.20.mdx b/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.3.20.mdx index 80e8e04d3b..750c9286f2 100644 --- a/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.3.20.mdx +++ b/versioned_docs/version-1.0.0/customComponent/api-reference/webform-editor/v0.3.20.mdx @@ -21,9 +21,9 @@ A hook that provides state information and actions for managing the studio panel `{StudioPanelReturnType}` - An object containing the type, open state, current state, and actions to manipulate the studio panel. :::info -The `useStudioPanel` function returns an object with properties [`type`](#type), [`isOpen`](#isopen), [`current`](#current-1), and `actions` to manipulate the studio panel state. +The `useStudioPanel` function returns an object with properties `type`, `isOpen`, `current`, and `actions` to manipulate the studio panel state. -The `actions` object includes methods for [updating the state](#setstate), [setting the current type and value](#setcurrent), [closing](#close), [opening](#open), and [opening with a specific type and current value](#openwithcurrent). +The `actions` object includes methods for `updating the state`, `setting the current type and value`, `closing`, `opening`, and `opening with a specific type and current value`. ::: @@ -50,7 +50,7 @@ The `useRenderer` function returns a tuple with two elements: - `HTMLElement | null`: The current DOM element or null. This represents the element to which the renderer is currently connected. - An object providing methods to: -- [Connect the renderer](#connectrenderer) +- Connect the renderer - `eventsToHandle`: An object mapping event names to their corresponding handler functions. @@ -69,7 +69,7 @@ A hook that provides methods and properties related to the layout mode of a webf `{LayoutReturnType}` - An object containing properties and methods related to the layout mode. :::info -The useLayout function returns an object with properties [`layout`](#layout) and [`isAiryMode`](#isairymode), along with methods `getClassName` and `toggle`. +The useLayout function returns an object with properties `layout` and `isAiryMode`, along with methods `getClassName` and `toggle`. ::: @@ -135,7 +135,8 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| + ### *Returns* @@ -144,7 +145,7 @@ A hook that facilitates managing datasources and current elements associated wit :::info The `useSources` function returns an object with the following structure: - `sources`: An object containing `datasource` and `currentElement`, representing the current values of datasources and current elements. -- `actions`: An object containing methods for manipulating datasource values, including [`getDatasource`](#actionsgetdatasource), [`setDatasourceValue`](#actionssetdatasourcevalue), [`setCurrentElementValue`](#actionssetcurrentelementvalue), [`fetchDatasourceValue`](#actionsfetchdatasourcevalue), and [`fetchCurrentElementValue`](#actionsfetchcurrentelementvalue). +- `actions`: An object containing methods for manipulating datasource values, including `getDatasource`, `setDatasourceValue`, `setCurrentElementValue`, `fetchDatasourceValue`, and `fetchCurrentElementValue`. ::: @@ -205,7 +206,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/versioned_docs/version-1.0.0/customComponent/setup.md b/versioned_docs/version-1.0.0/customComponent/setup.md index 8d80f2016e..5cc8dc7f37 100644 --- a/versioned_docs/version-1.0.0/customComponent/setup.md +++ b/versioned_docs/version-1.0.0/customComponent/setup.md @@ -215,4 +215,4 @@ The `components` directory serves as the repository for custom components: While developers have the flexibility to implement their initial component in their preferred manner, adhering to the suggested structure is recommended ::: -Refer to the [custom component structure](./structure#custom-component-repository) section for detailed information. +Refer to the [custom component structure](./structure.md#custom-component-repository) section for detailed information. diff --git a/versioned_docs/version-1.0.0/customComponent/structure.md b/versioned_docs/version-1.0.0/customComponent/structure.md index de84bae857..450d487442 100644 --- a/versioned_docs/version-1.0.0/customComponent/structure.md +++ b/versioned_docs/version-1.0.0/customComponent/structure.md @@ -12,28 +12,28 @@ The project structure is organized to facilitate the development and maintenance - **src**: The main source code directory. - [**components**](#custom-component-repository): The directory for custom components. - **ExampleComponent**: An example custom component directory. - - [**ExampleComponent.build.tsx**](#examplecomponentbuildtsx-file): Component build logic. - - [**ExampleComponent.render.tsx**](#examplecomponentrendertsx-file): Component rendering logic. - - [**ExampleComponent.settings.tsx**](#examplecomponentsettingstsx-file): Component settings. - - [**ExampleComponent.config.tsx**](#examplecomponentbuildconfig-file): Configuration for the component. + - [**ExampleComponent.build.tsx**](#examplecomponentbuildtsx): Component build logic. + - [**ExampleComponent.render.tsx**](#examplecomponentrendertsx): Component rendering logic. + - [**ExampleComponent.settings.tsx**](#examplecomponentsettingstsx): Component settings. + - [**ExampleComponent.config.tsx**](#examplecomponentconfigtsx): Configuration for the component. - [**index.tsx**](#indextsx): Entry point for the component. - - [**index.tsx**](#indextsx-file-in-components-repository): The entry point for the components directory. - - [**App.tsx**](#apptsx-file): Main application component. + - [**index.tsx**](#indextsx): The entry point for the components directory. + - [**App.tsx**](#apptsx): Main application component. - **index.css**: Global CSS styles. - - [**main.tsx**](#maintsx-file): Entry point for the application. + - [**main.tsx**](#maintsx): Entry point for the application. - **vite-env.d.ts**: TypeScript declaration file for Vite. - **.eslintrc.cjs**: ESLint configuration file. - **.gitignore**: Specifies intentionally untracked files that Git should ignore. - **.prettierignore**: Specifies files and directories to ignore for formatting using Prettier. - **.prettierrc**: Configuration file for Prettier. -- [**index.html**](#indexhtml-file): Main HTML file for the application. +- [**index.html**](#indexhtml): Main HTML file for the application. - **package-lock.json**: Lock file for npm dependencies. - **package.json**: Project metadata and npm dependencies. -- [**proxy.config.ts**](#proxyconfigts-file): Configuration for the development server proxy. +- [**proxy.config.ts**](#proxyconfigts): Configuration for the development server proxy. - **README.md**: Project documentation. - **tsconfig.json**: TypeScript configuration file. - **tsconfig.node.json**: TypeScript configuration file for Node.js. -- [**vite.config.ts**](#viteconfigts-file): Vite configuration file. +- [**vite.config.ts**](#viteconfigts): Vite configuration file. creates and returns a `cs.className` object which is a new instance of the class on which it is called. This function is automatically available on all classes from the [`cs` class store](basics/lang-classes.md#cs). -You can pass one or more optional *param* parameters, which will be passed to the [class constructor](basics/lang-classes#constructor) function (if any) in the className class definition. Within the constructor function, the [`This`](basics/lang-classes.md#this) is bound to the new object being constructed. +You can pass one or more optional *param* parameters, which will be passed to the [class constructor](basics/lang-classes.md#constructor) function (if any) in the className class definition. Within the constructor function, the [`This`](basics/lang-classes.md#this) is bound to the new object being constructed. - If `.new()` is called on a non-existing class, an error is returned. - If `.new()` is called on a [singleton class](basics/lang-classes.md#singleton-classes) that has already been instantiated, the singleton instance is returned, not a new instance. @@ -165,7 +165,7 @@ person = cs.Person.new("John","Doe",40) The `.superclass` property returns the parent class of the class. A superclass can be a `4D.Class` object, or a `cs.className` object. If the class does not have a parent class, the property returns **null**. -A superclass of a user class is declared in a class by using the [`Class extends `](basics/lang-classes#extends-classname) keyword. +A superclass of a user class is declared in a class by using the [`Class extends `](basics/lang-classes.md#extends-classname) keyword. This property is **read-only**. diff --git a/versioned_docs/version-1.0.0/language/CollectionClass.md b/versioned_docs/version-1.0.0/language/CollectionClass.md index 90714dfc64..fd4db2a8d1 100644 --- a/versioned_docs/version-1.0.0/language/CollectionClass.md +++ b/versioned_docs/version-1.0.0/language/CollectionClass.md @@ -40,7 +40,7 @@ The Collection class manages [collection](basics/lang-collection.md) type elemen |[](#find)    | |[](#first)    | |[](#flat)    | -|[](#flatMap)    | +|[](#flatmap)    | |[](#includes)    | |[](#indexof)    | |[](#indices)    | @@ -59,7 +59,7 @@ The Collection class manages [collection](basics/lang-collection.md) type elemen |[](#push)    | |[](#query)    | |[](#reduce)    | -|[](#reduceRight)    | +|[](#reduceright)    | |[](#remove)    | |[](#resize)    | |[](#reverse)    | @@ -1780,7 +1780,7 @@ All *colsToSort* collections must have the same number of elements, otherwise an ::: -If you want to sort the collections in some other order than ascending, you must supply a *formula* ([Formula object](FunctionClass#formula-objects) that defines the sort order. The return value should be a boolean that indicates the relative order of the two elements: **true** if *$1.value* is less than *$1.value2*, **false** if *$1.value* is greater than *$1.value2*. You can provide additional parameters to the formula if necessary. +If you want to sort the collections in some other order than ascending, you must supply a *formula* ([Formula object](FunctionClass.md#formula-objects) that defines the sort order. The return value should be a boolean that indicates the relative order of the two elements: **true** if *$1.value* is less than *$1.value2*, **false** if *$1.value* is greater than *$1.value2*. You can provide additional parameters to the formula if necessary. The formula receives the following parameters: @@ -2240,9 +2240,9 @@ where: |---|---|---| |Equal to |==, = |Gets matching data, supports the wildcard (@), neither case-sensitive nor diacritic.| ||===, IS| Gets matching data, considers the @ as a standard character, neither case-sensitive nor diacritic| - |Not equal to| #, != |Supports the wildcard (@). Equivalent to "Not condition applied on a statement" ([see below](#not-equal-to-in-collections)).| + |Not equal to| #, != |Supports the wildcard (@). Equivalent to "Not condition applied on a statement" ([see below](../orda/queries.md#not-equal-to-in-collections)).| ||!==, IS NOT| Considers the @ as a standard character| - |Not condition applied on a statement| NOT| Parenthesis are mandatory when NOT is used before a statement containing several operators. Equivalent to "Not equal to" ([see below](#not-equal-to-in-collections)).| + |Not condition applied on a statement| NOT| Parenthesis are mandatory when NOT is used before a statement containing several operators. Equivalent to "Not equal to" ([see below](../orda/queries.md#not-equal-to-in-collections)).| |Less than| <| | |Greater than| > || |Less than or equal to| <=|| diff --git a/versioned_docs/version-1.0.0/language/DataClassClass.md b/versioned_docs/version-1.0.0/language/DataClassClass.md index 7aff1f20ea..085b41f4d0 100644 --- a/versioned_docs/version-1.0.0/language/DataClassClass.md +++ b/versioned_docs/version-1.0.0/language/DataClassClass.md @@ -82,7 +82,7 @@ Returned attribute objects contain the following properties: |autoFilled|boolean|True if the attribute value is automatically filled by Qodly. Corresponds to the **autosequence** model attribute property. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | |exposed|boolean|True if the attribute is exposed in REST| |fieldNumber|integer|Internal Qodly database field number of the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | -|fieldType|integer|Qodly database field type of the attribute. Depends on the attribute `kind`. Possible values:
                                            • if `.kind` = "storage": corresponding Qodly database field type, see [`valueType`](basics/lang-data-types.md#valuetype)
                                            • if `.kind` = "relatedEntity": 38 (`is object`)
                                            • if `.kind` = "relatedEntities": 42 (`is collection`)
                                            • if `.kind` = "calculated": same as above, depending on the result
                                            • | +|fieldType|integer|Qodly database field type of the attribute. Depends on the attribute `kind`. Possible values:
                                            • if `.kind` = "storage": corresponding Qodly database field type./commands/valueType.md
                                            • if `.kind` = "relatedEntity": 38 (`is object`)
                                            • if `.kind` = "relatedEntities": 42 (`is collection`)
                                            • if `.kind` = "calculated": same as above, depending on the result
                                            • | |indexed|boolean|True if there is a B-tree or a Cluster B-tree index on the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | |inverseName|string|Name of the attribute which is at the other side of the relation. Returned only when `.kind` = "relatedEntity" or "relatedEntities".| |keywordIndexed|boolean|True if there is a keyword index on the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | @@ -315,7 +315,7 @@ In this example, the first entity will be created and saved but the second will #### See also -[**.toCollection()**](EntitySelectionClass#tocollection-) +[**.toCollection()**](EntitySelectionClass.md#tocollection-) diff --git a/versioned_docs/version-1.0.0/language/DataStoreClass.md b/versioned_docs/version-1.0.0/language/DataStoreClass.md index c7aa33f27d..179d95098c 100644 --- a/versioned_docs/version-1.0.0/language/DataStoreClass.md +++ b/versioned_docs/version-1.0.0/language/DataStoreClass.md @@ -42,7 +42,7 @@ The `.cancelTransaction()` function collection of `4D.MailAttachment` object(s). -Attachment objects are defined through the [`mailNewAttachment`](MailAttachmentClass#4dmailattachmentnew) command. Attachment objects have specific [properties and functions](MailAttachmentClass.md). +Attachment objects are defined through the [`mailNewAttachment`](MailAttachmentClass.md#4dmailattachmentnew) command. Attachment objects have specific [properties and functions](MailAttachmentClass.md). ## .bcc @@ -143,7 +143,7 @@ The `.bodyStructure` object contains the following properties: |language|collection of strings|List of language tags, as defined in [RFC3282](https://tools.ietf.org/html/rfc3282), in the Content-Language header field of the part, if present.| |location|string|URI, as defined in [RFC2557](https://tools.ietf.org/html/rfc2557), in the Content-Location header field of the part, if present.| |subParts|collection of objects|Body parts of each child (collection of *EmailBodyPart* objects)| -|headers|collection of objects|List of all header fields in the part, in the order they appear in the message (collection of *EmailHeader* objects, see [headers](#headers-) property)| +|headers|collection of objects|List of all header fields in the part, in the order they appear in the message (collection of *EmailHeader* objects, see [headers](#headers) property)| ## .bodyValues diff --git a/versioned_docs/version-1.0.0/language/EntityClass.md b/versioned_docs/version-1.0.0/language/EntityClass.md index 601cb05004..9820985708 100644 --- a/versioned_docs/version-1.0.0/language/EntityClass.md +++ b/versioned_docs/version-1.0.0/language/EntityClass.md @@ -30,7 +30,7 @@ An [entity](../orda/data-model.md#entity) is an instance of a [Dataclass](../ord |[](#save)    | |[](#toobject)    | |[](#touched)    | -|[](#touchedattributes)    | +|[](#touchedattributes-)    | |[](#unlock)    | @@ -379,7 +379,7 @@ The object returned by `.drop( )` contains the following properties: |Constant| Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                                            • the entity has been dropped (the stamp has changed and the memory space is now free)
                                            • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can be returned when `kForceDropIfStampChanged` option is used.

                                            • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                                            • the entity has been dropped (the stamp has changed and the memory space is now free)
                                            • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can be returned when `kForceDropIfStampChanged` option is used.
                                            • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`|3|The entity is locked by a pessimistic lock.
                                              **Associated statusText**: "Already locked"| |`kStatusSeriousError`| 4| A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                                              **Associated statusText**: "Other error"| |`kStatusStampHasChanged`| 2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error can only occur if the `kForceDropIfStampChanged` option is not used
                                              **Associated statusText**: "Stamp has changed"| @@ -890,7 +890,7 @@ The object returned by `.lock()` contains the following properties: |Constant |Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`| 5|The entity no longer exists in the data. This error can occur in the following cases:
                                            • the entity has been dropped (the stamp has changed and the memory space is now free)
                                            • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can only be returned when `kReloadIfStampChanged` option is used

                                            • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`| 5|The entity no longer exists in the data. This error can occur in the following cases:
                                            • the entity has been dropped (the stamp has changed and the memory space is now free)
                                            • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can only be returned when `kReloadIfStampChanged` option is used
                                            • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`| 3 |The entity is locked by a pessimistic lock. **Associated statusText**: "Already locked" |`kStatusSeriousError`| 4 |A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc. **Associated statusText**: "Other error"| |`kStatusStampHasChanged`|2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error occurs only if the `kReloadIfStampChanged` option is not used
                                              **Associated statusText**: "Stamp has changed"| @@ -1038,7 +1038,7 @@ The object returned by `.reload()` contains the following properties: |Constant| Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                                            • the entity has been dropped (the stamp has changed and the memory space is now free)
                                            • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).

                                            • ***Associated statusText***: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                                            • the entity has been dropped (the stamp has changed and the memory space is now free)
                                            • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).
                                            • ***Associated statusText***: "Entity does not exist anymore"| |`kStatusSeriousError`|4| A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                                              ***Associated statusText***: "Other error"| @@ -1082,7 +1082,7 @@ The object returned by `.reload()` contains the following properties: The `.save()` function saves the changes made to the entity in the table related to its dataClass. You must call this function after creating or modifying an entity if you want to save the changes made to it. -The save operation is executed only if at least one entity attribute has been "touched" (see the [`.touched()`](#touched) and [`.touchedAttributes()`](#touchedattributes) functions). Otherwise, the function does nothing (the trigger is not called). +The save operation is executed only if at least one entity attribute has been "touched" (see the [`.touched()`](#touched) and [`.touchedAttributes()`](#touchedattributes-) functions). Otherwise, the function does nothing (the trigger is not called). In a multi-process application, the `.save()` function is executed under an ["optimistic lock"](../orda/data.md#entity-locking) mechanism, wherein an internal locking stamp is automatically incremented each time the record is saved. @@ -1126,7 +1126,7 @@ The following values can be returned in the `status` and `statusText` properties |Constant| Value |Comment| |---|---|---| |`kStatusAutomergeFailed`| 6| (Only if the `kAutoMerge` option is used) The automatic merge option failed when saving the entity.
                                              **Associated statusText**: "Auto merge failed"| -|`kStatusEntityDoesNotExistAnymore`| 5| The entity no longer exists in the data. This error can occur in the following cases:
                                            • the entity has been dropped (the stamp has changed and the memory space is now free)
                                            • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).

                                            • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`| 5| The entity no longer exists in the data. This error can occur in the following cases:
                                            • the entity has been dropped (the stamp has changed and the memory space is now free)
                                            • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).
                                            • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`| 3| The entity is locked by a pessimistic lock.
                                              **Associated statusText**: "Already locked" |`kStatusSeriousError`|4|A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                                              **Associated statusText**: "Other error"| |`kStatusStampHasChanged`|2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error can only occur if the `kAutoMerge` option is not used
                                              **Associated statusText**: "Stamp has changed"| diff --git a/versioned_docs/version-1.0.0/language/EntitySelectionClass.md b/versioned_docs/version-1.0.0/language/EntitySelectionClass.md index 107bc9cf75..c0e18ad4de 100644 --- a/versioned_docs/version-1.0.0/language/EntitySelectionClass.md +++ b/versioned_docs/version-1.0.0/language/EntitySelectionClass.md @@ -12,7 +12,7 @@ Entity selections can be created from existing selections using various function || |---| -|[](#91index93)    | +|[](#index)    | |[](#attributename)    | |[](#add)    | |[](#and)    | @@ -22,7 +22,7 @@ Entity selections can be created from existing selections using various function |[](#contains)    | |[](#count)    | |[](#distinct)    | -|[](#distinctPaths)    | +|[](#distinctpaths)    | |[](#drop)    | |[](#extract)    | |[](#first)    | @@ -36,14 +36,14 @@ Entity selections can be created from existing selections using various function |[](#minus)    | |[](#or)    | |[](#orderby)    | -|[](#orderbyformula)    | +|[](#orderbyformula-)    | |[](#query)    | |[](#querypath)    | |[](#queryplan)    | |[](#selected)    | |[](#slice)    | |[](#sum)    | -|[](#tocollection)    | +|[](#tocollection-)    | @@ -240,7 +240,7 @@ The entity selection must be *alterable*, i.e. it has been created for example b ::: * If the entity selection is [ordered](../orda/data-model.md#ordered-or-unordered-entity-selection), *entity* is added at the end of the selection. If a reference to the same entity already belongs to the entity selection, it is duplicated and a new reference is added. -* If the entity selection is [unordered](../orda/data-model#ordered-or-unordered-entity-selection), *entity* is added anywhere in the selection, with no specific order. +* If the entity selection is [unordered](../orda/data-model.md#ordered-or-unordered-entity-selection), *entity* is added anywhere in the selection, with no specific order. The modified entity selection is returned by the function, so that function calls can be chained. @@ -302,7 +302,7 @@ The `.and()` function combines t :::note -You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. ::: @@ -427,9 +427,7 @@ sel2 = sel.clean() //sel2.length == 3 ``` -#### See also -[`.refresh()`](#refresh) @@ -536,7 +534,7 @@ The `.copy()` function returns > This function does not modify the original entity selection. -By default, if the *option* parameter is omitted, the function returns a new, [alterable](../orda/data#shareable-or-alterable-entity-selections) entity selection (even if the function is applied to a [shareable](../orda/data#shareable-or-alterable-entity-selections) entity selection). Pass the `kShared` constant in the *option* parameter if you want to create a shareable entity selection. +By default, if the *option* parameter is omitted, the function returns a new, [alterable](../orda/data.md#shareable-or-alterable-entity-selections) entity selection (even if the function is applied to a [shareable](../orda/data.md#shareable-or-alterable-entity-selections) entity selection). Pass the `kShared` constant in the *option* parameter if you want to create a shareable entity selection. #### Example @@ -961,7 +959,7 @@ The following generic code duplicates all entities of the entity selection: The `.isAlterable()` function returns true if the entity selection is alterable, and false if the entity selection is not alterable. -For more information, please refer to the [Shareable or alterable entity selections](../orda/data#shareable-or-alterable-entity-selections) section. +For more information, please refer to the [Shareable or alterable entity selections](../orda/data.md#shareable-or-alterable-entity-selections) section. @@ -984,7 +982,7 @@ For more information, please refer to the [Shareable or alterable entity selecti The `.isOrdered()` function returns true if the entity selection is ordered, and false if it is unordered. -For more information, please refer to the [Ordered or unordered entity selection](../orda/data-model#ordered-or-unordered-entity-selection) section. +For more information, please refer to the [Ordered or unordered entity selection](../orda/data-model.md#ordered-or-unordered-entity-selection) section. #### Example @@ -1200,7 +1198,7 @@ The `.minus()` function exclud * If you pass *entity* as parameter, the function creates a new entity selection without *entity* (if *entity* belongs to the entity selection). If *entity* was not included in the original entity selection, a new reference to the entity selection is returned. * If you pass *entitySelection* as parameter, the function returns an entity selection containing the entities belonging to the original entity selection without the entities belonging to *entitySelection*. ->You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +>You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. If the original entity selection or both the original entity selection and the *entitySelection* parameter are empty, an empty entity selection is returned. @@ -1261,7 +1259,7 @@ The `.or()` function combines the * If you pass *entity* as parameter, you compare this entity with the entity selection. If the entity belongs to the entity selection, a new reference to the entity selection is returned. Otherwise, a new entity selection containing the original entity selection and the entity is returned. * If you pass *entitySelection* as parameter, you compare entity selections. A new entity selection containing the entities belonging to the original entity selection or *entitySelection* is returned (or is not exclusive, entities referenced in both selections are not duplicated in the resulting selection). ->You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +>You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. If the original entity selection and the *entitySelection* parameter are empty, an empty entity selection is returned. If the original entity selection is empty, a reference to *entitySelection* or an entity selection containing only *entity* is returned. @@ -1310,7 +1308,7 @@ If the original entity selection and the parameter are not related to the same d #### Description -The `.orderBy()` function returns a new [ordered](../orda/data-model#ordered-or-unordered-entity-selection) entity selection containing all entities of the entity selection in the order specified by *pathString* or *pathObjects* criteria. +The `.orderBy()` function returns a new [ordered](../orda/data-model.md#ordered-or-unordered-entity-selection) entity selection containing all entities of the entity selection in the order specified by *pathString* or *pathObjects* criteria. > This function does not modify the original entity selection. @@ -1506,7 +1504,7 @@ If no matching entities are found, an empty `EntitySelection` is returned. For detailed information on how to build a query using *queryString*, *value*, and *querySettings* parameters, please refer to the DataClass [`.query()`](DataClassClass.md#query) function description. ->By default if you omit the **order by** statement in the *queryString*, the returned entity selection is [not ordered](../orda/data-model#ordered-or-unordered-entity-selection). +>By default if you omit the **order by** statement in the *queryString*, the returned entity selection is [not ordered](../orda/data-model.md#ordered-or-unordered-entity-selection). #### Example 1 diff --git a/versioned_docs/version-1.0.0/language/FolderClass.md b/versioned_docs/version-1.0.0/language/FolderClass.md index c6cde5933b..b8de0e8865 100644 --- a/versioned_docs/version-1.0.0/language/FolderClass.md +++ b/versioned_docs/version-1.0.0/language/FolderClass.md @@ -84,7 +84,7 @@ The `4D.Folder.new()` function creates and The `.create()` function creates a folder on disk according to the properties of the `folder` object. -If necessary, the function creates the folder hierachy as described in the [platformPath](#platformpath) or [path](#path) properties. If the folder already exists on disk, the function does nothing (no error is thrown) and returns false. +If necessary, the function creates the folder hierachy as described in the [path](#path) property. If the folder already exists on disk, the function does nothing (no error is thrown) and returns false. **Returned value** diff --git a/versioned_docs/version-1.0.0/language/HTTPRequestClass.md b/versioned_docs/version-1.0.0/language/HTTPRequestClass.md index a8556713a0..dd7b1f20b7 100644 --- a/versioned_docs/version-1.0.0/language/HTTPRequestClass.md +++ b/versioned_docs/version-1.0.0/language/HTTPRequestClass.md @@ -3,9 +3,9 @@ id: HTTPRequestClass title: HTTPRequest --- -The `HTTPRequest` class allows you to handle [`HTTPRequest objects`](#httprequest-object) that can be used to configure and send requests to an HTTP server, as well as to process the HTTP server responses. +The `HTTPRequest` class allows you to handle [`HTTPRequest objects`](#functions-and-properties) that can be used to configure and send requests to an HTTP server, as well as to process the HTTP server responses. -The `HTTPRequest` class is available from the `4D` class store. You create and send HTTP requests using the [4D.HTTPRequest.new()](#4dhttprequestnew) function, that returns a [`HTTPRequest object`](#httprequest-object). +The `HTTPRequest` class is available from the `4D` class store. You create and send HTTP requests using the [4D.HTTPRequest.new()](#4dhttprequestnew) function, that returns a [`HTTPRequest object`](#functions-and-properties). ### Example @@ -50,14 +50,14 @@ HTTPRequest objects provide the following functions and properties: || |---| |[](#4dhttprequestnew)    | -|[](#dataType)    | +|[](#datatype)    | |[](#encoding)    | |[](#errors)    | |[](#headers)    | |[](#method)    | |[](#protocol)    | |[](#response)    | -|[](#returnResponseBody)    | +|[](#returnresponsebody)    | |[](#terminate)    | |[](#terminated)    | |[](#timeout)    | @@ -138,7 +138,7 @@ All callback functions receive two object parameters: |Parameter|Type| |---|---| -|param1|[`HTTPRequest` object](#httprequest-object)| +|param1|[`HTTPRequest` object](#functions-and-properties)| |param2|[`Event` object](#event-object)| Here is the sequence of callback calls: diff --git a/versioned_docs/version-1.0.0/language/IMAPTransporterClass.md b/versioned_docs/version-1.0.0/language/IMAPTransporterClass.md index fba6f1729f..5a092deac6 100644 --- a/versioned_docs/version-1.0.0/language/IMAPTransporterClass.md +++ b/versioned_docs/version-1.0.0/language/IMAPTransporterClass.md @@ -215,7 +215,7 @@ status = transporter.addFlags(kIMAPAll,flags) The `.append()` function appends a `mailObj` to the `destinationBox`. -In the `mailObj` parameter, pass an Email object. For a comprehensive description of mail properties, see [Email object](EmailObjectClass#properties). The `.append()` function supports keyword tags in the Email object's `keywords` attribute. +In the `mailObj` parameter, pass an Email object. For a comprehensive description of mail properties, see [Email object](EmailObjectClass.md#properties). The `.append()` function supports keyword tags in the Email object's `keywords` attribute. The optional `destinationBox` parameter lets you pass the name of a mailbox where the `mailObj` will be appended. If omitted, the current mailbox is used. @@ -472,7 +472,7 @@ In the *msgsIDs* parameter, you can pass: * a collection containing the unique IDs of the specific messages to delete, or * the `kIMAPAll` constant (integer) to delete all messages in the selected mailbox. -Executing this function does not actually remove messages. Messages with the "delete" flag can still be found by the [`.searchMails()`](#searchmails) function. Flagged messages are deleted from the IMAP server with the [`.expunge()`](#expunge) function or by selecting another mailbox or when the IMAP transporter object (created with [4D.IMAPTransporter.new](#imap-new-transporter)) is destroyed. +Executing this function does not actually remove messages. Messages with the "delete" flag can still be found by the [`.searchMails()`](#searchmails) function. Flagged messages are deleted from the IMAP server with the [`.expunge()`](#expunge) function or by selecting another mailbox or when the IMAP transporter object (created with [4D.IMAPTransporter.new](#4dimaptransporternew)) is destroyed. **Returned object** @@ -832,7 +832,7 @@ See [`getBoxList()` example](#getboxlist). |msgNumber|integer|→|Sequence number of the message| |msgID|string|→|Unique ID of the message| |options|object|→|Message handling instructions| -|Result|object|←|[Email object](EmailObjectClass#properties)| +|Result|object|←|[Email object](EmailObjectClass.md#properties)| #### Description @@ -899,7 +899,7 @@ You want to get the message with ID = 1: |startMsg|integer|→|Sequence number of the first message| |endMsg |integer|→|Sequence number of the last message| |options|object|→|Message handling instructions| -|Result|object|←|Object containing:
                                              • a collection of [Email objects](EmailObjectClass#properties) and
                                              • a collection of IDs or numbers for missing messages, if any
                                              | +|Result|object|←|Object containing:
                                              • a collection of [Email objects](EmailObjectClass.md#properties) and
                                              • a collection of IDs or numbers for missing messages, if any
                                              | #### Description @@ -943,7 +943,7 @@ The optional *options* parameter allows you to define the parts of the messages |Property | Type | Description | |---|---|---| -|list |collection |collection of [`Email` objects](EmailObjectClass#properties). If no Email objects are found, an empty collection is returned.| +|list |collection |collection of [`Email` objects](EmailObjectClass.md#properties). If no Email objects are found, an empty collection is returned.| |notFound |collection| collection of:
                                              • first syntax - previously passed message IDs that do not exist
                                              • second syntax - sequence numbers of messages between startMsg and endMsg that do not exist
                                              An empty collection is returned if all messages are found.| #### Example @@ -1013,7 +1013,7 @@ The optional *updateSeen* parameter allows you to specify if the message is mark #### Result -`.getMIMEAsblob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass#properties) with the `mailConvertFromMIME` command. +`.getMIMEAsblob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass.md#properties) with the `mailConvertFromMIME` command. #### Example diff --git a/versioned_docs/version-1.0.0/language/MailAttachmentClass.md b/versioned_docs/version-1.0.0/language/MailAttachmentClass.md index 523d472cbc..165c1a6742 100644 --- a/versioned_docs/version-1.0.0/language/MailAttachmentClass.md +++ b/versioned_docs/version-1.0.0/language/MailAttachmentClass.md @@ -44,7 +44,7 @@ Attachment objects are created using the [`4D.MailAttachment.new()`](#4dmailatta #### Description -The `4D.MailAttachment.new` function allows you to create an attachment object that you can add to an [Email object](EmailObjectClass#properties). +The `4D.MailAttachment.new` function allows you to create an attachment object that you can add to an [Email object](EmailObjectClass.md#properties). To define the attachment, you can use: diff --git a/versioned_docs/version-1.0.0/language/POP3TransporterClass.md b/versioned_docs/version-1.0.0/language/POP3TransporterClass.md index 9089444f45..949ff98121 100644 --- a/versioned_docs/version-1.0.0/language/POP3TransporterClass.md +++ b/versioned_docs/version-1.0.0/language/POP3TransporterClass.md @@ -44,19 +44,19 @@ POP3 Transporter objects provide the following properties and functions: #### Description -The `4D.POP3Transporter.new()` function configures a new POP3 connectionaccording to the *server* parameter and returns a new *[POP3 transporter](#pop3-transporter-object)* object. The returned transporter object will then usually be used to receive emails. +The `4D.POP3Transporter.new()` function configures a new POP3 connectionaccording to the *server* parameter and returns a new *[POP3 transporter](#functions-and-properties)* object. The returned transporter object will then usually be used to receive emails. In the *server* parameter, pass an object containing the following properties: |*server*|Default value (if omitted)| |---|---| |[](#acceptunsecureconnection)
                                              |false| -|.**accessTokenOAuth2**: string
                                              .**accessTokenOAuth2**: object
                                              string string or token object representing OAuth2 authorization credentials. Used only with OAUTH2 `authenticationMode`. If `accessTokenOAuth2` is used but `authenticationMode` is omitted, the OAuth 2 protocol is used (if allowed by the server). Not returned in *[SMTP transporter](#smtptransporterobject)* object.|none| +|.**accessTokenOAuth2**: string
                                              .**accessTokenOAuth2**: object
                                              string string or token object representing OAuth2 authorization credentials. Used only with OAUTH2 `authenticationMode`. If `accessTokenOAuth2` is used but `authenticationMode` is omitted, the OAuth 2 protocol is used (if allowed by the server). |none| |[](#authenticationmode)
                                              |the most secure authentication mode supported by the server is used| |[](#connectiontimeout)
                                              |30| |[](#host)
                                              |*mandatory* |[](#logfile)
                                              |none| -|**.password** : string
                                              User password for authentication on the server. Not returned in *[SMTP transporter](#smtptransporterobject)* object.|none| +|**.password** : string
                                              User password for authentication on the server. |none| |[](#port)
                                              |995| |[](#user)
                                              |none| @@ -232,11 +232,11 @@ info = "The mailbox contains "+string(boxInfo.mailCount)+" messages.") ##### Description -The `.getMail()` function returns the `Email` object corresponding to the *msgNumber* in the mailbox designated by the [`POP3 transporter`](#pop3-transporter-object). This function allows you to locally handle the email contents. +The `.getMail()` function returns the `Email` object corresponding to the *msgNumber* in the mailbox designated by the [`POP3 transporter`](#functions-and-properties). This function allows you to locally handle the email contents. Pass in *msgNumber* the number of the message to retrieve. This number is returned in the `number` property by the [`.getMailInfoList()`](#getmailinfolist) function. -Optionally, you can pass `true` in the *headerOnly* parameter to exclude the body parts from the returned `Email` object. Only headers properties ([`headers`](EmailObjectClass#headers), [`to`](EmailObjectClass#to), [`from`](EmailObjectClass#from)...) are then returned. This option allows you to optimize the downloading step when a lot of emails are on the server. +Optionally, you can pass `true` in the *headerOnly* parameter to exclude the body parts from the returned `Email` object. Only headers properties ([`headers`](EmailObjectClass.md#headers), [`to`](EmailObjectClass.md#to), [`from`](EmailObjectClass.md#from)...) are then returned. This option allows you to optimize the downloading step when a lot of emails are on the server. :::note @@ -251,7 +251,7 @@ The function returns Null if: **Returned object** -`.getMail()` returns an [`Email` object](EmailObjectClass#properties). +`.getMail()` returns an [`Email` object](EmailObjectClass.md#properties). ##### Example @@ -413,7 +413,7 @@ The function returns an empty BLOB if: **Returned blob** -`.getMIMEAsBlob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass#properties) with the [`MAIL Convert from MIME`](commands/mailConvertFromMIME.md) command. +`.getMIMEAsBlob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass.md#properties) with the [`MAIL Convert from MIME`](commands/mailConvertFromMIME.md) command. ##### Example diff --git a/versioned_docs/version-1.0.0/language/SMTPTransporterClass.md b/versioned_docs/version-1.0.0/language/SMTPTransporterClass.md index 980291038f..1f8ace2241 100644 --- a/versioned_docs/version-1.0.0/language/SMTPTransporterClass.md +++ b/versioned_docs/version-1.0.0/language/SMTPTransporterClass.md @@ -172,7 +172,7 @@ The SMTP connection is automatically closed: |Parameter|Type||Description| |---------|--- |:---:|------| -|mail|object|→|[Email](EmailObjectClass#properties) to send| +|mail|object|→|[Email](EmailObjectClass.md#properties) to send| |Result|object|←|SMTP status| diff --git a/versioned_docs/version-1.0.0/language/SignalClass.md b/versioned_docs/version-1.0.0/language/SignalClass.md index 5158eb6f1d..28953c715f 100644 --- a/versioned_docs/version-1.0.0/language/SignalClass.md +++ b/versioned_docs/version-1.0.0/language/SignalClass.md @@ -26,12 +26,12 @@ Any worker/process calling the `.wait()` method will suspend its execution until Note that to avoid blocking situations, the `.wait()` can also return after a defined timeout has been reached. -Signal objects are created with the [newSignal](#newsignal) command. +Signal objects are created with the [newSignal](./commands/newSignal.md) command. ### Working with signals -In QodlyScript, you create a new signal object by calling the [`newSignal`](#newsignal) command. Once created, this signal must be passed as a parameter to the [`callWorker`](commands/callWorker.md) command so that it can modify it when it has finished the task you want to wait for. +In QodlyScript, you create a new signal object by calling the [`newSignal`](./commands/newSignal.md) command. Once created, this signal must be passed as a parameter to the [`callWorker`](commands/callWorker.md) command so that it can modify it when it has finished the task you want to wait for. - `signal.wait()` must be called from the worker that needs another worker to finish a task in order to continue. - `signal.trigger()` must be called from the worker that finished its execution in order to release all others. diff --git a/versioned_docs/version-1.0.0/language/SystemWorkerClass.md b/versioned_docs/version-1.0.0/language/SystemWorkerClass.md index d85200427b..77f73ae35b 100644 --- a/versioned_docs/version-1.0.0/language/SystemWorkerClass.md +++ b/versioned_docs/version-1.0.0/language/SystemWorkerClass.md @@ -12,11 +12,11 @@ The `SystemWorker` class is available from the `4D` class store. || |---| -|[](#4d-systemworker-new)    | +|[](#4dsystemworkernew)    | |[](#closeinput)     | |[](#commandline)     | |[](#currentdirectory)     | -|[](#dataype)     | +|[](#datatype)     | |[](#encoding)     | |[](#errors)     | |[](#exitcode)     | @@ -128,7 +128,7 @@ When the executable waits for all data to be received through `postMessage()`, ` #### Description -The `.commandLine` property contains the command line passed as parameter to the [`new()`](#4d-systemworker-new) function. +The `.commandLine` property contains the command line passed as parameter to the [`new()`](#4dsystemworkernew) function. This property is **read-only**. diff --git a/versioned_docs/version-1.0.0/language/WebFormClass.md b/versioned_docs/version-1.0.0/language/WebFormClass.md index 4c6f1770cb..9e936ebf53 100644 --- a/versioned_docs/version-1.0.0/language/WebFormClass.md +++ b/versioned_docs/version-1.0.0/language/WebFormClass.md @@ -133,7 +133,7 @@ webForm.setError("My error message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-error.png) @@ -171,7 +171,7 @@ webForm.setMessage("My information message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-info.png) @@ -204,6 +204,6 @@ webForm.setWarning("My warning message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-warning.png) diff --git a/versioned_docs/version-1.0.0/language/WebFormItemClass.md b/versioned_docs/version-1.0.0/language/WebFormItemClass.md index 1a929905b6..3a41975d1b 100644 --- a/versioned_docs/version-1.0.0/language/WebFormItemClass.md +++ b/versioned_docs/version-1.0.0/language/WebFormItemClass.md @@ -8,7 +8,7 @@ The `4D.WebFormItem` class allows you to handle the behavior of your webform com `4D.WebFormItem` objects are properties of the [`4D.WebForm`](WebFormClass) object returned by the [`webForm`](commands/webForm) command. -When you call the [`webForm`](./commands/webForm) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](../studio/pageLoaders/pageLoaderOverview#server-side) in your webform. +When you call the [`webForm`](./commands/webForm) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](../studio/pageLoaders/pageLoaderOverview.md#server-side) in your webform. For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference. @@ -19,9 +19,9 @@ For example, `WebFormObject.myImage` refers to the image component with `myImage || |---| -|[](#addclass)    | +|[](#addcssclass)    | |[](#hide)    | -|[](#removeclass)    | +|[](#removecssclass)    | |[](#show)    | diff --git a/versioned_docs/version-1.0.0/language/WebServerClass.md b/versioned_docs/version-1.0.0/language/WebServerClass.md deleted file mode 100644 index e22f374ced..0000000000 --- a/versioned_docs/version-1.0.0/language/WebServerClass.md +++ /dev/null @@ -1,587 +0,0 @@ ---- -id: WebServerClass -title: WebServer ---- - - -The `WebServer` class API allows you to start and monitor a web server for the your application. This class is available from the `4D` class store. - -Web server objects are instantiated with the [`webServer`](#webserver) command. - - - -### Functions and properties - -|| -|---| -|[](#certificatefolder)    | -|[](#characterset)    | -|[](#ciphersuite)    | -|[](#corsenabled)    | -|[](#corssettings)     | -|[](#debuglog)    | -|[](#defaulthomepage)    | -|[](#hstsenabled)     | -|[](#hstsmaxage)    | -|[](#httpcompressionlevel)    | -|[](#httpcompressionthreshold)    | -|[](#httpenabled)    | -|[](#httpport)    | -|[](#httpsenabled)    | -|[](#httpsport)    | -|[](#httptrace)    | -|[](#ipaddresstolisten)    | -|[](#isrunning)    | -|[](#keepsession)    | -|[](#logrecording)    | -|[](#maxrequestsize)    | -|[](#mintlsversion)    | -|[](#name)    | -|[](#opensslversion)    | -|[](#perfectforwardsecrecy)    | -|[](#rootfolder)    | -|[](#scalablesession)    | -|[](#sessioncookiedomain)    | -|[](#sessioncookiename)    | -|[](#sessioncookiepath)    | -|[](#sessioncookiesamesite)    | -|[](#sessionipaddressvalidation)    | -|[](#start)    | -|[](#stop)    | - - -## .certificateFolder - -**.certificateFolder** : string - - -Path of the folder where the certificate files are located. The path is formatted in POSIX full path using filesystems. When using this property in the `settings` parameter of the [`.start()`](#start) function, it can be a [`Folder` object](FolderClass.md). - - - - -## .characterSet - -**.characterSet** : number
                                              **.characterSet** : string - - -The character set that the Web Server should use to communicate with browsers connecting to the application The default value is UTF-8. Can be a MIBEnum integer or a Name string, identifiers [defined by IANA](http://www.iana.org/assignments/character-sets/character-sets.xhtml). Here is the list of identifiers corresponding to the character sets supported by the Qodly Web Server: - -- 4 = ISO-8859-1 -- 12 = ISO-8859-9 -- 13 = ISO-8859-10 -- 17 = Shift-JIS -- 2024 = Windows-31J -- 2026 = Big5 -- 38 = euc-kr -- 106 = UTF-8 -- 2250 = Windows-1250 -- 2251 = Windows-1251 -- 2253 = Windows-1253 -- 2255 = Windows-1255 -- 2256 = Windows-1256 - - - - - -## .cipherSuite - -**.cipherSuite** : string - - -The cipher list used for the secure protocol Sets the priority of ciphering algorithms implemented by the Qodly web server. Can be a sequence of strings separated by colons (for example "ECDHE-RSA-AES128-..."). See the [ciphers page](https://www.openssl.org/docs/manmaster/man1/ciphers.html) on the OpenSSL site. - - - - - -## .CORSEnabled - -**.CORSEnabled** : boolean - - -The CORS (*Cross-origin resource sharing*) service status for the web server For security reasons, "cross-domain" requests are forbidden at the browser level by default. When enabled (true), XHR calls (e.g. REST requests) from Web pages outside the domain can be allowed in your application (you need to define the list of allowed addresses in the CORS domain list, see `CORSSettings` below). When disabled (false, default), all cross site requests sent with CORS are ignored. When enabled (true) and a non-allowed domain or method sends a cross site request, it is rejected with a "403 - forbidden" error response. - -Default: false (disabled) - -For more information about CORS, please refer to the [Cross-origin resource sharing page](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) on Wikipedia. - - - - - -## .CORSSettings - -**.CORSSettings** : collection - - -Contains the list of allowed hosts and methods for the CORS service (see [`CORSEnabled`](#corsenabled) property). Each object must contain a **host** property and, optionally, a **methods** property: - - -- **host** (text, mandatory): Domain name or IP address from where external pages are allowed to send data requests to the Server via CORS. Multiple domain attributes can be added to create a white list. If *host* is not present or empty, the object is ignored. Several syntaxes are supported: - - 192.168.5.17:8081 - - 192.168.5.17 - - 192.168.* - - 192.168.*:8081 - - <http://192.168.5.17:8081> - - <http://*.myDomain.com> - - <http://myProject.myDomain.com> - - *.myDomain.com - - myProject.myDomain.com - - \* - -- **methods** (text, optional): Accepted HTTP method(s) for the corresponding CORS host. Separate each method with a "," (e,g,: "post,get"). If *methods* is empty, null, or undefined, all methods are enabled. - - - - - -## .debugLog - -**.debugLog** : number - - -The status of the HTTP request log file (HTTPDebugLog_nn.txt, stored in the "Logs" folder of the application -- nn is the file number). - -- 0 = disabled -- 1 = enabled without body parts (body size is provided in this case) -- 3 = enabled with body parts in response only -- 5 = enabled with body parts in request only -- 7 = enabled with body parts in response and request - - - - - -## .defaultHomepage - -**.defaultHomepage** : string - - -The name of the default home page or "" to not send the custom home page. - - - - - -## .HSTSEnabled - -**.HSTSEnabled** : boolean - - -The HTTP Strict Transport Security (HSTS) status HSTS allows the Web server to declare that browsers should only interact with it via secure HTTPS connections. Browsers will record the HSTS information the first time they receive a response from the web server, then any future HTTP requests will automatically be transformed into HTTPS requests. The length of time this information is stored by the browser is specified with the `HSTSMaxAge` property. HSTS requires that HTTPS is enabled on the server. HTTP must also be enabled to allow initial client connections. - - - - - -## .HSTSMaxAge - - - -**.HSTSMaxAge** : number - - -The maximum length of time (in seconds) that HSTS is active for each new client connection This information is stored on the client side for the specified duration. - -Default value: 63072000 (2 years). - - - - - -## .HTTPCompressionLevel - -**.HTTPCompressionLevel** : number - - -The compression level for all compressed HTTP exchanges for the HTTP server (client requests or server replies) This selector lets you optimize exchanges by either prioritizing speed of execution (less compression) or the amount of compression (less speed). - -Possible values: - -- 1 to 9 (where 1 is the fastest compression and 9 the highest). -- -1 = set a compromise between speed and rate of compression. - -Default = 1 (faster compression). - - - - - -## .HTTPCompressionThreshold - -**.HTTPCompressionThreshold** : number - - -The size threshold (bytes) for requests below which exchanges should not be compressed This setting is useful in order to avoid losing machine time by compressing small exchanges. - -Default compression threshold = 1024 bytes - - - - - -## .HTTPEnabled - -**.HTTPEnabled** : boolean - - -The HTTP protocol state - - - - - - -## .HTTPPort - -**.HTTPPort** : number - - -The listening IP port number for HTTP - -Default = 80 - - - - - - -## .HTTPSEnabled - -**.HTTPSEnabled** : boolean - - -The HTTPS protocol state - - - - - -## .HTTPSPort - -**.HTTPSPort** : number - - -The listening IP port number for HTTPS - -Default = 443 - - - - - - -## .HTTPTrace - -**.HTTPTrace** : boolean - - -The activation of `HTTP TRACE` For security reasons, by default the Web server rejects `HTTP TRACE` requests with an error 405. When enabled, the web server replies to `HTTP TRACE` requests with the request line, header, and body. - - - - - - -## .IPAddressToListen - -**.IPAddressToListen** : string - - -The IP address on which the Web Server will receive HTTP requests By default, no specific address is defined ("0.0.0.0"). Both IPv6 string formats and IPv4 string formats are supported. - - - - - -## .isRunning - -**.isRunning** : boolean - - -*Read-only property* - -The web server running state - - - - - -## .keepSession - -**.keepSession** : boolean - - -Always `false` - - - - - - -## .logRecording - -**.logRecording** : number - - -The log requests (logweb.txt) recording value - -- 0 = Do not record (default) -- 1 = Record in CLF format -- 2 = Record in DLF format -- 3 = Record in ELF format -- 4 = Record in WLF format - - - - - - -## .maxRequestSize - -**.maxRequestSize** : number - - -Contains the maximum size (in bytes) of incoming HTTP requests (POST) that the web server is allowed to process Passing the maximum value (2147483647) means that, in practice, no limit is set. This limit is used to avoid web server saturation due to incoming requests that are too large. If a request reaches this limit, the web server rejects it. - -Possible values: 500000 - 2147483647 - - - - - - - -## .minTLSVersion - -**.minTLSVersion** : number - - -The minimum TLS version accepted for connections Connection attempts from clients supporting only versions below the minimum will be rejected. - -Possible values: - -- 3 = TLSv1_2 -- 4 = TLSv1_3 (default) - -If modified, the server must be restarted to use the new value. - - - - - -## .name - -**.name** : string - - -*Read-only property* - -The name of the web server application - - - - - -## .openSSLVersion - -**.openSSLVersion** : string - - -*Read-only property* - -The version of the OpenSSL library used - - - - - -## .perfectForwardSecrecy - -**.perfectForwardSecrecy** : boolean - - -*Read-only property* - -The PFS availability on the server - - - - -## .rootFolder - -**.rootFolder** : string - - -The path of web server root folder The path is formatted in POSIX full path using filesystems. When using this property in the `settings` parameter, it can be a `Folder` object. - - - - - -## .scalableSession - -**.scalableSession** : boolean - - -Always `true` - - - - - -## .sessionCookieDomain - -**.sessionCookieDomain** : string - - -The "domain" field of the session cookie Used to control the scope of the session cookies. If you set, for example, the value "/*.myCompany.com" for this selector, the client will only send a cookie when the request is addressed to the domain ".myCompany.com", which excludes servers hosting external static data. - - - - - -## .sessionCookieName - -**.sessionCookieName** : string - - - -The name of the cookie used for storing the session ID - -*Read-only property* - - - - - -## .sessionCookiePath - -**.sessionCookiePath** : string - - -The "path" field of the session cookie Used to control the scope of the session cookies. If you set, for example, the value "/QACTION" for this selector, the client will only send a cookie for dynamic requests beginning with QACTION, and not for pictures, static pages, etc. - - - - - -## .sessionCookieSameSite - -**.sessionCookieSameSite** : string - - -The "SameSite" session cookie value Possible values (using constants): - -|Constant|Value|Description| -|---|---|---| -|Web SameSite Strict|"Strict"|*Default value* - Cookies are only sent in a first-party context, i.e. context matching the domain of the current site, and never to third-party websites.| -|Web SameSite Lax|"Lax"|Cookies are also sent on cross-site subrequests (for example to load images or frames into a third-party site), but only when a user is navigating to the origin site (i.e. when following a link).| -|Web SameSite None|"None"|Cookies are sent in all contexts, i.e in responses to both first-party and cross-origin requests. When "None" value is used, the cookie `Secure` attribute must also be set (or the cookie will be blocked).| - -This property allows you to declare if your cookie should be restricted to a first-party or same-site context, as a protection from some cross-site request forgery attacks ([CSRF](https://developer.mozilla.org/en-US/docs/Glossary/CSRF)). - -> For a detailed description of the `SameSite` attribute, please refer to the [Mozilla documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) or [this web.dev page](https://web.dev/samesite-cookies-explained/). - -The `Secure` attribute value of the session cookie is automatically set to "True" if the connection is HTTPS (whatever the `SameSite` attribute value). - - - - - -## .sessionIPAddressValidation - -**.sessionIPAddressValidation** : boolean - - -The IP address validation for session cookies For security reasons, by default the web server checks the IP address of each request containing a session cookie and rejects it if this address does not match the IP address used to create the cookie. In some specific applications, you may want to disable this validation and accept session cookies, even when their IP addresses do not match. For example when mobile devices switch between WiFi and 3G/4G/5G networks, their IP address will change. In this case, you can allow clients to be able to continue using their web sessions even when the IP addresses change (this setting lowers the security level of your application). - - - - - -## .start() - - -**.start**() : Object
                                              **.start**( *settings* : Object ) : Object - - - - -|Parameter|Type||Description| -|---|---|----|---| -|settings|Object|→|Web server settings to set at startup| -|Result|Object|←|Status of the web server startup| - - - -The `.start()` function starts the web server using properties set in the optional *settings* object parameter. - -The web server starts with default settings defined in the settings file of the project. However, using the *settings* parameter, you can define customized properties for the web server session. - -All properties of [Web Server objects](#functions-and-properties) can be customized, except read-only properties ([.isRunning](#isrunning), [.name](#name), [.openSSLVersion](#opensslversion), [.perfectForwardSecrecy](#perfectforwardsecrecy), and [.sessionCookieName(#sessioncookiename)]). - -Customized session settings will be reset when the [`.stop()`](#stop) function is called. - -#### Returned object - -The function returns an object describing the Web server launch status. This object can contain the following properties: - -|Property|| Type| Description| -|---|---|---|---| -|success||boolean|true if the web server was correctly started, false otherwise -|errors ||collection|Error stack (not returned if the web server started successfully)| -||\[].errCode|number|Error code| -||\[].message|string|Description of the error | -||\[].componentSignature|string|Signature of the internal component which returned the error| - ->If the Web server was already launched, an error is returned. - -#### Example - -```qs - var settings,result : object - var webServer : 4D.WebServer - - settings = { HSTSEnabled: true, defaultHomepage:"myHomepage.html" } - - result = webServer.start(settings) - if(result.success) - //... - end -``` - - - - - -## .stop() - - -**.stop**() - - - - -|Parameter|Type||Description| -|---|---|----|---| -||||Does not require any parameters| - - -The `.stop()` function stops the web server - -If the web server was started, all web connections and web processes are closed, once the currently handled requests are finished. If the web server was not started, the function does nothing. - ->This function resets the customized web settings defined for the session using the *settings* parameter of the [`.start()`](#start) function, if any. - -#### Example - -To stop the Web server: - -```qs - webServer.stop() -``` - - diff --git a/versioned_docs/version-1.0.0/language/ZipArchiveClass.md b/versioned_docs/version-1.0.0/language/ZipArchiveClass.md index 969dbc287c..acff511654 100644 --- a/versioned_docs/version-1.0.0/language/ZipArchiveClass.md +++ b/versioned_docs/version-1.0.0/language/ZipArchiveClass.md @@ -6,8 +6,8 @@ title: ZIPArchive A QodlyScript ZIP archive is a `File` or `folder` object containing one or more files or folders, which are compressed to be smaller than their original size. These archives are created with a ".zip" extension and can be used to save space or transfer files via mediums which may have size limitations (e.g., email or network). -- You create a ZIP archive with the [zipCreateArchive](#zipcreatearchive) command. -- [`ZIPFile`](ZipFileClass.md) and [`ZIPFolder`](ZipFolderClass.md) instances are available through the [`root`](#root) property (`ZIPFolder`) of the object returned by [zipReadArchive](#zipreadearchive) command. +- You create a ZIP archive with the [zipCreateArchive](./commands/zipCreateArchive.md) command. +- [`ZIPFile`](ZipFileClass.md) and [`ZIPFolder`](ZipFolderClass.md) instances are available through the [`root`](#root) property (`ZIPFolder`) of the object returned by [zipReadArchive](./commands/zipReadArchive.md) command. ### Example diff --git a/versioned_docs/version-1.0.0/language/basics/lang-classes.md b/versioned_docs/version-1.0.0/language/basics/lang-classes.md index 96d3dd5992..8e0347db00 100644 --- a/versioned_docs/version-1.0.0/language/basics/lang-classes.md +++ b/versioned_docs/version-1.0.0/language/basics/lang-classes.md @@ -8,7 +8,7 @@ title: Classes The QodlyScript language supports the concept of **classes**. In a programming language, using a class allows you to define an object behaviour with associated properties and functions. -Once a user class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can [`extend`](#class-extends-classname) another class, and then inherits from its [functions](#function) and properties ([declared](#property) and [computed](#function-get-and-function-set)). +Once a user class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can [`extend`](#extends-classname) another class, and then inherits from its [functions](#function) and properties ([declared](#property) and [computed](#function-get-and-function-set)). > The class model in QodlyScript is similar to classes in JavaScript, and based on a chain of prototypes. @@ -41,7 +41,7 @@ hello = person.sayHello() //"Hello John Doe" ### User classes -To create a new user class in Qodly Studio, click on the **+** button of the Explorer and give a name to the class: +To [create a new user class](../../studio/coding.md#creating) in Qodly Studio, click on the **+** button of the Explorer and give a name to the class: ![class](img/class3.png) @@ -51,9 +51,9 @@ You can also select **New > Class** from the menu bar, enter a name and click ** ![class](img/class2.png) -### Data Model classes +### DataStore classes -Data Model classes are automatically created when you click on the `<...>` button in the model editor, when a dataclass is selected. For more information, please refer to [this section](../../orda/data-model.md#creating-data-model-classes). +Data Model classes are created when you click on the `+` button in the model editor in the `DataStore Classes` setion. For more information, please refer to [this section](../../studio/model/model-editor-interface.md#outline). @@ -65,7 +65,7 @@ When naming classes, you should keep in mind the following rules: - Class names are case sensitive. - Giving the same name to a user class and a datastore's dataclass is not recommended, in order to prevent any conflict. -A user class in Qodly is defined by a specific [method file (.4qs)](../../studio/coding#4qs-files), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. For example, a class named "Polygon" will be based upon the following file: +A user class in Qodly is defined by a specific [method file (.4qs)](../../studio/coding.md#4qs-files), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. For example, a class named "Polygon" will be based upon the following file: ``` Project folder @@ -93,7 +93,7 @@ Available classes are accessible from their class stores. Two class stores are a The `cs` command returns a *Class Store* object containing all user classes defined in the current project. This command is necessary to instantiate an object from a user class. -It returns all user classes defined in the opened project, as well as [Data Model classes](../../orda/data-model.md#creating-data-model-classes). +It returns all user classes defined in the opened project, as well as [Data Model classes](../../studio/coding.md#classes). #### Example @@ -738,14 +738,14 @@ The `this` command returns a reference to th In most cases, the value of `this` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. -When executing a formula object created by the [`formula`](../FunctionClass#formula-objects) or [`formulaFromString`](../commands/formulaFromString) commands, `this` returns a reference to the object currently processed by the formula. For example: +When executing a formula object created by the [`formula`](../FunctionClass.md#formula-objects) or [`formulaFromString`](../commands/formulaFromString) commands, `this` returns a reference to the object currently processed by the formula. For example: ```qs o = newObject("prop",42,"f",formula(this.prop)) val = o.f() //42 ``` -When a [constructor](#class-constructor) function is used (with the [`new()`](../ClassClass.md#new) function), its `this` is bound to the new object being constructed. +When a [constructor](#constructor) function is used (with the [`new()`](../ClassClass.md#new) function), its `this` is bound to the new object being constructed. ```qs //Class: ob @@ -894,7 +894,7 @@ Singleton classes are not supported by [ORDA-based classes](../../orda/data-mode ### Creating and using singletons -You declare singleton classes by adding appropriate keyword(s) before the [`Class constructor`](#class-constructor): +You declare singleton classes by adding appropriate keyword(s) before the [`Class constructor`](#constructor): - To declare a (process) singleton class, write `singleton Class Constructor()`. - To declare a shared singleton class, write `shared singleton Class constructor()`. @@ -919,7 +919,7 @@ The [`.isSessionSingleton`](../ClassClass.md#issessionsingleton) property of Cla :::info -Singleton classes are only supported in [User classes](#user-classes). They are NOT supported in [Data Model classes](#data-model-classes) such as [Dataclass](../../orda/data-model.md#dataclass). +Singleton classes are only supported in [User classes](#user-classes). They are NOT supported in [Data Model classes](#datastore-classes) such as [Dataclass](../../orda/data-model.md#dataclass). ::: diff --git a/versioned_docs/version-1.0.0/language/basics/lang-identifiers.md b/versioned_docs/version-1.0.0/language/basics/lang-identifiers.md index 915b69813c..8e13a301c8 100644 --- a/versioned_docs/version-1.0.0/language/basics/lang-identifiers.md +++ b/versioned_docs/version-1.0.0/language/basics/lang-identifiers.md @@ -21,7 +21,7 @@ A class name must be compliant with standard [property naming rules](#object-pro :::warning -Giving the same name to a user class and a [dataclass](#dataclass) is not recommended, in order to prevent any conflict. +Giving the same name to a [user class](../../studio/coding.md#user-classes) and a [dataclass](../../studio/coding.md#orda-classes) is not recommended, in order to prevent any conflict. ::: diff --git a/versioned_docs/version-1.0.0/language/basics/lang-methods.md b/versioned_docs/version-1.0.0/language/basics/lang-methods.md index 8647a15554..02714257a7 100644 --- a/versioned_docs/version-1.0.0/language/basics/lang-methods.md +++ b/versioned_docs/version-1.0.0/language/basics/lang-methods.md @@ -111,7 +111,7 @@ end You can encapsulate your methods in **formula** objects and call them from your objects. -The [`formula`](../FunctionClass#formula-objects) and [`formulaFromString`](../commands/formulaFromString) commands allow you to create formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. +The [`formula`](../FunctionClass.md#formula-objects) and [`formulaFromString`](../commands/formulaFromString) commands allow you to create formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. To execute a method stored in an object property, use the **()** operator after the property name. For example: diff --git a/versioned_docs/version-1.0.0/language/basics/lang-null-undefined.md b/versioned_docs/version-1.0.0/language/basics/lang-null-undefined.md index 35d3fd35b2..ede0a034ba 100644 --- a/versioned_docs/version-1.0.0/language/basics/lang-null-undefined.md +++ b/versioned_docs/version-1.0.0/language/basics/lang-null-undefined.md @@ -35,9 +35,9 @@ This function allows you to assign or compare the **null** value to the followin |:----|:----| |object property values|Comparing Null to an object property returns true if the property value is null, and false otherwise. To simplify code, comparing Null also returns true if the property does not exist in the object (i.e. is [`undefined`](#undefined)), see example 4. |collection elements|When a collection is expanded by adding non-adjacent elements, any intermediary elements get automatically the `null` value.| -|object variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| -|collection variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| -|picture variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| +|object variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| +|collection variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| +|picture variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| |variant variables| | diff --git a/versioned_docs/version-1.0.0/language/basics/lang-object.md b/versioned_docs/version-1.0.0/language/basics/lang-object.md index 3fc2a03977..d010179b64 100644 --- a/versioned_docs/version-1.0.0/language/basics/lang-object.md +++ b/versioned_docs/version-1.0.0/language/basics/lang-object.md @@ -202,7 +202,7 @@ For more information, please refer to the [`null`](lang-null-undefined.md#null) Evaluating an object property can sometimes produce an **undefined** value. Typically when trying to read or assign undefined expressions, the QodlyScript will generate errors. This does not happen in the following cases: -- Reading a property of an undefined object or value returns `undefined`; assigning an undefined value to variables has the same effect as calling [`clearVariable`](lang-variables.md#clearvariable) with them: +- Reading a property of an undefined object or value returns `undefined`; assigning an undefined value to variables has the same effect as calling [`clearVariable`](./lang-variables.md#clearvariable) with them: ```qs var o : object diff --git a/versioned_docs/version-1.0.0/language/basics/lang-operators.md b/versioned_docs/version-1.0.0/language/basics/lang-operators.md index 5cd0ccbbdb..f246cb7bc2 100644 --- a/versioned_docs/version-1.0.0/language/basics/lang-operators.md +++ b/versioned_docs/version-1.0.0/language/basics/lang-operators.md @@ -305,7 +305,7 @@ All other values are considered **truthy**, including: * 0 - numeric zero (integer or otherwise) -In QodlyScript, **truthy** and **falsy** evaluation reflects the **usability** of a value, which means that a truthy value exists and can be processed by the code without generating errors or unexpected results. The rationale behind this is to provide a convenient way to handle *undefined* and *null* values in objects and collections, so that a reduced number of [if…else](lang-control-flow#ifelseend) statements are necessary to avoid runtime errors. +In QodlyScript, **truthy** and **falsy** evaluation reflects the **usability** of a value, which means that a truthy value exists and can be processed by the code without generating errors or unexpected results. The rationale behind this is to provide a convenient way to handle *undefined* and *null* values in objects and collections, so that a reduced number of [if…else](lang-control-flow.md#ifelseend) statements are necessary to avoid runtime errors. For example, when you use a [short-circuit OR operator](#short-circuit-or-operator-): diff --git a/versioned_docs/version-1.0.0/language/basics/lang-parameters.md b/versioned_docs/version-1.0.0/language/basics/lang-parameters.md index 154d3aba82..0a3760d635 100644 --- a/versioned_docs/version-1.0.0/language/basics/lang-parameters.md +++ b/versioned_docs/version-1.0.0/language/basics/lang-parameters.md @@ -387,7 +387,7 @@ firstnames = ds.Teachers.all().extract("firstname") //1 parameter addresses = ds.Teachers.all().extract("address",ck keep null) //2 parameters ``` -QodlyScript methods and functions also accept such optional parameters. You can declare any number of parameters. If you call a method or function with less parameters than declared, missing parameters are processed as default values in the called code, [according to their type](lang-data-types#overview). For example: +QodlyScript methods and functions also accept such optional parameters. You can declare any number of parameters. If you call a method or function with less parameters than declared, missing parameters are processed as default values in the called code, [according to their type](lang-data-types.md#overview). For example: ```qs // "concate" function of myClass diff --git a/versioned_docs/version-1.0.0/language/commands/base64Encode.md b/versioned_docs/version-1.0.0/language/commands/base64Encode.md index a56249e04a..10ce349041 100644 --- a/versioned_docs/version-1.0.0/language/commands/base64Encode.md +++ b/versioned_docs/version-1.0.0/language/commands/base64Encode.md @@ -20,7 +20,7 @@ title: base64Encode The `base64Encode` command encodes the string or blob value passed in the *toEncode* parameter in Base64 or Base64URL format. -Base64 encoding modifies 8-bit coded data so that they do not keep more than 7 useful bits. This encoding is required, for example, for handling blobs using xml. Base64URL is an alernative encoding with a specific processing for URLs and filenames (see [rfc4648](#https://tools.ietf.org/html/rfc4648#section-5)). +Base64 encoding modifies 8-bit coded data so that they do not keep more than 7 useful bits. This encoding is required, for example, for handling blobs using xml. Base64URL is an alernative encoding with a specific processing for URLs and filenames (see [rfc4648](https://tools.ietf.org/html/rfc4648#section-5)). Pass in *toEncode* a string or blob value to encode. diff --git a/versioned_docs/version-1.0.0/language/commands/command-list.md b/versioned_docs/version-1.0.0/language/commands/command-list.md index 57b19108ca..054afa60bf 100644 --- a/versioned_docs/version-1.0.0/language/commands/command-list.md +++ b/versioned_docs/version-1.0.0/language/commands/command-list.md @@ -124,8 +124,6 @@ title: Commands |[](verifyPasswordHash.md)
                                                | |[](webEvent.md)
                                                | |[](webForm.md)
                                                | -|[](webServer.md)
                                                | -|[](webServerList.md)
                                                | |[](yearOf.md)
                                                | |[](zipCreateArchive.md)
                                                | |[](zipReadArchive.md)
                                                | diff --git a/versioned_docs/version-1.0.0/language/commands/getProcessActivity.md b/versioned_docs/version-1.0.0/language/commands/getProcessActivity.md index 04f8302f43..891189b01f 100644 --- a/versioned_docs/version-1.0.0/language/commands/getProcessActivity.md +++ b/versioned_docs/version-1.0.0/language/commands/getProcessActivity.md @@ -52,7 +52,7 @@ ID|integer|Process unique ID visible|boolean|true if visible, false otherwise systemID|string|ID for the user process, Qodly process or spare process type|integer|Running process type.
                                            • kHTTPLogFlusher (-58)
                                            • kMainProcess (-39)
                                            • kClientManagerProcess (-31)
                                            • kCompilerProcess (-29)
                                            • kMonitorProcess (-26)
                                            • kInternalTimerProcess (-25)
                                            • kLogFileProcess (-20)
                                            • kBackup process (-19)
                                            • kInternalProcess (-18)
                                            • kOnExitProcess (-16)
                                            • kWebServerProcess (-13)
                                            • kOtherProcess (-10)
                                            • kEventManager (-8)
                                            • kIndexingProcess (-5)
                                            • kCacheManager (-4)
                                            • kWebProcessWithNoContext (-3)
                                            • kDesignProcess (-2)
                                            • kNone (0)
                                            • kWorkerProcess (5)
                                            • -|state|integer|Current status (see [`processState`](#processstate) constant list)| +|state|integer|Current status (see [`processState`](../commands/processState.md) constant list)| |cpuUsage|number|Percentage of time devoted to this process (between 0 and 1)| |cpuTime|number|Running time (seconds)| |preemptive|boolean|always true| diff --git a/versioned_docs/version-1.0.0/language/commands/newSharedCollection.md b/versioned_docs/version-1.0.0/language/commands/newSharedCollection.md index af5d5c4b31..9b2adf89ee 100644 --- a/versioned_docs/version-1.0.0/language/commands/newSharedCollection.md +++ b/versioned_docs/version-1.0.0/language/commands/newSharedCollection.md @@ -20,7 +20,7 @@ title: newSharedCollection The `newSharedCollection` command creates a new empty or prefilled shared collection and returns its reference. -Adding an element to this collection using the assignment operator must be surrounded by the [`use...end`](../basics/lang-shared.md#useend) structure, otherwise an error is generated (this is not necessary when adding elements using functions such as [`push()`](../CollectionClass#push) or [`map()`](../CollectionClass#map) because they automatically trigger an internal *use...end*). Reading an element without a *use...end* structure is, however, possible. +Adding an element to this collection using the assignment operator must be surrounded by the [`use...end`](../basics/lang-shared.md#useend) structure, otherwise an error is generated (this is not necessary when adding elements using functions such as [`push()`](../CollectionClass.md#push) or [`map()`](../CollectionClass.md#map) because they automatically trigger an internal *use...end*). Reading an element without a *use...end* structure is, however, possible. :::info diff --git a/versioned_docs/version-1.0.0/language/commands/newSignal.md b/versioned_docs/version-1.0.0/language/commands/newSignal.md index c6b3fdf5e2..a20eccc856 100644 --- a/versioned_docs/version-1.0.0/language/commands/newSignal.md +++ b/versioned_docs/version-1.0.0/language/commands/newSignal.md @@ -26,12 +26,12 @@ A signal is a shared object which can be passed as parameter from a worker proce Optionally, in the *description* parameter you can pass a custom text describing the signal. This text can also be defined after signal creation. -Since the signal object is a shared object, it can also be used to maintain user properties, including the [`.description`](../SignalClass/#description-1) property, by calling the `use...end` structure. +Since the signal object is a shared object, it can also be used to maintain user properties, including the [`.description`](../SignalClass#description-1) property, by calling the `use...end` structure. **Returned value** -A new [`4D.Signal` object](../SignalClass/#signal-object). +A new [`4D.Signal` object](../SignalClass#signal-object). #### Example diff --git a/versioned_docs/version-1.0.0/language/commands/openDatastore.md b/versioned_docs/version-1.0.0/language/commands/openDatastore.md index 72386e947f..df71d60f38 100644 --- a/versioned_docs/version-1.0.0/language/commands/openDatastore.md +++ b/versioned_docs/version-1.0.0/language/commands/openDatastore.md @@ -29,8 +29,8 @@ Pass in *connectionInfo* an object describing the remote datastore you want to c |Property| Type|Qodly application|Remote 4D application| |---|---|---|---| -|hostname|Text|[API Endpoint](../../cloud/apiKeys#api-endpoint) of the Qodly cloud instance|Name or IP address of the remote database + ":" + port number (port number is mandatory)| -|api-key|Text|[API Key](../../cloud/apiKeys#api-key) of the Qodly cloud instance|- (ignored)| +|hostname|Text|[API Endpoint](../../cloud/apiKeys.md#api-endpoint) of the Qodly cloud instance|Name or IP address of the remote database + ":" + port number (port number is mandatory)| +|api-key|Text|[API Key](../../cloud/apiKeys.md#api-key) of the Qodly cloud instance|- (ignored)| |idleTimeout|Longint|- (ignored)|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see [Closing sessions](https://developer.4d.com/docs/ORDA/datastores#closing-sessions).| |tls|Boolean|True to use secured connection. If omitted, false by default|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.| |type |Text |- (ignored)|must be "4D Server"| diff --git a/versioned_docs/version-1.0.0/language/commands/splitString.md b/versioned_docs/version-1.0.0/language/commands/splitString.md index 438646961c..cdc7f18bce 100644 --- a/versioned_docs/version-1.0.0/language/commands/splitString.md +++ b/versioned_docs/version-1.0.0/language/commands/splitString.md @@ -57,4 +57,4 @@ The *separator* parameter can be a multiple-character string: #### See also -[`collection.join()`](../CollectionClass#join)
                                              +[`collection.join()`](../CollectionClass.md#join)
                                              diff --git a/versioned_docs/version-1.0.0/language/commands/type.md b/versioned_docs/version-1.0.0/language/commands/type.md index b98c81f956..642c328317 100644 --- a/versioned_docs/version-1.0.0/language/commands/type.md +++ b/versioned_docs/version-1.0.0/language/commands/type.md @@ -40,7 +40,7 @@ You can apply the `type` function to variables and parameters of a method. :::note -You cannot apply the `type` function to scalar expressions such as object properties (emp.name) or collection elements (myColl[5]). To do this, you must use the [`valueType`](#valuetype) command. +You cannot apply the `type` function to scalar expressions such as object properties (emp.name) or collection elements (myColl[5]). To do this, you must use the [`valueType`](../commands/valueType.md) command. ::: diff --git a/versioned_docs/version-1.0.0/language/commands/webServer.md b/versioned_docs/version-1.0.0/language/commands/webServer.md deleted file mode 100644 index f6bd770140..0000000000 --- a/versioned_docs/version-1.0.0/language/commands/webServer.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -id: webServer -title: webServer ---- - - -**webServer** : 4D.WebServer - - - - -|Parameter|Type||Description| -|---|---|----|---| -|Result|4D.WebServer|←|Web server object| - - -The `webServer` command returns a Web server object. - -The returned Web server object contains the current values of the Web server properties. - -#### Example - -You want to know if the Web server is started: - -```qs - var vRun : boolean - vRun = webServer.isRunning -``` diff --git a/versioned_docs/version-1.0.0/language/commands/webServerList.md b/versioned_docs/version-1.0.0/language/commands/webServerList.md deleted file mode 100644 index cdab9cc5fb..0000000000 --- a/versioned_docs/version-1.0.0/language/commands/webServerList.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: webServerList -title: webServerList ---- - - -**webServerList** : collection - - - -|Parameter|Type||Description| -|---------|--- |:---:|------| -|Result|collection|→|Collection of the available Web Server objects| - - -The `webServerList` command returns a collection of all Web server objects available in the Qodly application. - -A Qodly application can contain anywhere from one to several Web servers: - -* 1 Web server for the host database (default Web server) -* 1 Web server for each component. - -All available Web servers are returned by the `webServerList` command, whether they are actually running or not. - -:::note - -The default Web server object is automatically loaded by Qodly at startup. On the other hand, each component Web server that you want to use must be instantiated using the [`webServer`](webServer.md) command. - -::: - -You can use the *name* property of the Web server object to identify the database or component to which each Web server object in the list is attached. For a detailed description of the Web server object, please refer to the [`webServer`](webServer.md) command. - -#### Example - -We want to know how many running web servers are available: - -```qs - var wSList : collection - var vRun : integer - var result : string - - wSList = webServerList - vRun = wSList.countValues(True,"isRunning") - result = string(vRun)+" web server(s) running on "+string(wSList.length)+" available." - -``` diff --git a/versioned_docs/version-1.0.0/language/commands/zipReadArchive.md b/versioned_docs/version-1.0.0/language/commands/zipReadArchive.md index 689a381795..76fdc06694 100644 --- a/versioned_docs/version-1.0.0/language/commands/zipReadArchive.md +++ b/versioned_docs/version-1.0.0/language/commands/zipReadArchive.md @@ -30,7 +30,7 @@ If the *zipFile* is password protected, you need to use the optional *password* **Archive object** -The returned `4D.ZipArchive` object contains a single [`root`](../ZipArchiveClass#root) property whose value is a `4D.ZipFolder` object. This folder describes the whole contents of the ZIP archive. +The returned `4D.ZipArchive` object contains a single [`root`](../ZipArchiveClass.md#root) property whose value is a `4D.ZipFolder` object. This folder describes the whole contents of the ZIP archive. #### Example diff --git a/versioned_docs/version-1.0.0/notes/1.0.0-beta-5.md b/versioned_docs/version-1.0.0/notes/1.0.0-beta-5.md index d1a1020168..86a17c8619 100644 --- a/versioned_docs/version-1.0.0/notes/1.0.0-beta-5.md +++ b/versioned_docs/version-1.0.0/notes/1.0.0-beta-5.md @@ -21,15 +21,15 @@ import ComingSoon from '@site/src/components/ComingSoon' ::: -- New [`onInit`](../studio/pageLoaders/pageLoaderOverview#triggers-and-events) Event for the Page: This event is executed during the rendering phase and is used to perform any necessary setup actions when a component is first created. +- New [`onInit`](../studio/pageLoaders/pageLoaderOverview.md#triggers-and-events) Event for the Page: This event is executed during the rendering phase and is used to perform any necessary setup actions when a component is first created. - Disable Components: Some components can now be disabled. When disabled, their associated actions are not triggered, and they appear with special rendering. This is particularly useful when using the [Page states](../studio/pageLoaders/states/stateOverview.md) feature. - Image Component Enhancement: You can now [drag and drop an image from the shared folder](../studio/pageLoaders/components/image.md#drag-and-drop-from-shared-folder) into the image source and set the default image source. -- New [Clean Standard Action](../studio/pageLoaders/events/bindingActionToEvents#qodly-sources): The Clean standard action allows entity selections to be cleaned of their deleted entities, preventing blank spaces in the UI. +- New [Clean Standard Action](../studio/pageLoaders/events/bindingActionToEvents.md#qodly-sources): The Clean standard action allows entity selections to be cleaned of their deleted entities, preventing blank spaces in the UI. -- Contextual Panel Update: The Contextual panel now allows function call actions to be [copied](../studio/pageLoaders/events/eventsManagement#copying-an-event-action) or [pasted](../studio/pageLoaders/events/eventsManagement#pasting-an-event-action) and called [function names to be changed post-creation](../studio/pageLoaders/events/eventsManagement#modifying-a-function-call), avoiding the need to delete and recreate them. +- Contextual Panel Update: The Contextual panel now allows function call actions to be [copied](../studio/pageLoaders/events/eventsManagement.md#copying-an-event-action) or [pasted](../studio/pageLoaders/events/eventsManagement.md#pasting-an-event-action) and called [function names to be changed post-creation](../studio/pageLoaders/events/eventsManagement.md#modifying-a-function-call), avoiding the need to delete and recreate them. - [Singletons in Qodly Studio](../language/basics/lang-classes.md#singleton-classes): Singletons can now be edited in Qodly Studio. Their functions can be called from a Qodly page, and permissions can be set up for their functions. diff --git a/versioned_docs/version-1.0.0/notes/1.0.0-beta-6.md b/versioned_docs/version-1.0.0/notes/1.0.0-beta-6.md index 32e1689761..e87ca8d629 100644 --- a/versioned_docs/version-1.0.0/notes/1.0.0-beta-6.md +++ b/versioned_docs/version-1.0.0/notes/1.0.0-beta-6.md @@ -15,15 +15,15 @@ import ComingSoon from '@site/src/components/ComingSoon'

                                              What's new

                                              -- New [`onPrivilegeChange`](../studio/pageLoaders/pageLoaderOverview#triggers-and-events) Event: Ensures elements display based on user privileges. +- New [`onPrivilegeChange`](../studio/pageLoaders/pageLoaderOverview.md#triggers-and-events) Event: Ensures elements display based on user privileges. - [Sanity check](../studio/pageLoaders/pageLoaderOverview.md#sanity-check) Update: Raises an error if a shared selection attribute is dropped over a matrix bound to a local selection. -- [Binding onHttpGet Functions](../studio/pageLoaders/events/bindingActionToEvents#binding-onhttpget-functions): Enables binding functions for HTTP GET requests with [4D.OutgoingMessage](../language/OutgoingMessageClass.md), supporting flexible operations like file viewing or downloads. +- [Binding onHttpGet Functions](../studio/pageLoaders/events/bindingActionToEvents.md#binding-onhttpget-functions): Enables binding functions for HTTP GET requests with [4D.OutgoingMessage](../language/OutgoingMessageClass.md), supporting flexible operations like file viewing or downloads. -- [Toggle Inherited Permissions](../studio/roles/permissionsOverview#showhide-inherited-permissions): Allows visibility toggling to show only explicitly defined permissions or include inherited ones by default in the privileges interface. +- [Toggle Inherited Permissions](../studio/roles/permissionsOverview.md#showhide-inherited-permissions): Allows visibility toggling to show only explicitly defined permissions or include inherited ones by default in the privileges interface. -- [Default State Override Warning](../studio/pageLoaders/states/stateOverview#setting-a-default-state): Displays a warning icon when the Default State will be overridden by an unmet Conditional State condition, with a tooltip explaining the override. +- [Default State Override Warning](../studio/pageLoaders/states/stateOverview.md#setting-a-default-state): Displays a warning icon when the Default State will be overridden by an unmet Conditional State condition, with a tooltip explaining the override.

                                              Bug Fixes

                                              diff --git a/versioned_docs/version-1.0.0/orda/data-model.md b/versioned_docs/version-1.0.0/orda/data-model.md index c668740551..707b660316 100644 --- a/versioned_docs/version-1.0.0/orda/data-model.md +++ b/versioned_docs/version-1.0.0/orda/data-model.md @@ -9,7 +9,7 @@ slug: /guides/data-model-objects ORDA stands for **Object Relational Data Access**. It is an enhanced technology allowing to access both the model and the data of a database through objects. -Relations are transparently included in the concept, in combination with [lazy loading](#lazy-loading), to remove all the typical hassles of data selection or transfer from the developer. With ORDA, data is accessed through an abstraction layer, the [datastore](#datastore). A datastore is an object that provides an interface to the database model and data through objects and classes. For example, a table is mapped to a [dataclass](#dataclass) object, a field is an [attribute](#attribute) of a dataclass, and records are accessed through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection). +Relations are transparently included in the concept, in combination with [lazy loading](../faq/faq.md#qodly-server), to remove all the typical hassles of data selection or transfer from the developer. With ORDA, data is accessed through an abstraction layer, the [datastore](#datastore). A datastore is an object that provides an interface to the database model and data through objects and classes. For example, a table is mapped to a [dataclass](#dataclass) object, a field is an [attribute](#attributes) of a dataclass, and records are accessed through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection). A query returns a list of entities called an entity selection, which fulfills the role of a SQL query’s row set. The difference is that each entity "knows" where it belongs in the data model and "understands" its relationship to all other entities. This means that a developer does not need to explain in a query how to relate the various pieces of information, nor in an update how to write modified values back to the relational structure. @@ -20,7 +20,7 @@ ORDA objects can be handled like standard objects, but they automatically benefi ### Database as Objects -The [ORDA technology](../concepts/platform/#the-orda-concept) is based upon an automatic mapping of an underlying relational database structure to a data model (this concept can be viewed as an included and enhanced [ORM](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping)), along with powerful features such as calculated attributes or dataclass functions. It also provides [access to data](data.md) through entity and entity selection objects. +The [ORDA technology](#the-orda-concept) is based upon an automatic mapping of an underlying relational database structure to a data model (this concept can be viewed as an included and enhanced [ORM](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping)), along with powerful features such as calculated attributes or dataclass functions. It also provides [access to data](data.md) through entity and entity selection objects. As a result, ORDA exposes the whole database as a set of data model objects, including **model objects** as well as **data objects**. @@ -57,7 +57,7 @@ All ORDA data model classes are exposed as properties of the **`cs`** class stor |cs.DataStore|cs.DataStore|[`ds`](../language/commands/ds) command| |cs.*DataClassName*|cs.Employee|[`dataStore.DataClassName`](../language/DataStoreClass.md#dataclassname), `dataStore["DataClassName"]`| |cs.*DataClassName*Entity|cs.EmployeeEntity|[`dataClass.get()`](../language/DataClassClass.md#get), [`dataClass.new()`](../language/DataClassClass.md#new), [`entitySelection.first()`](../language/EntitySelectionClass.md#first), [`entitySelection.last()`](../language/EntitySelectionClass.md#last), [`entity.previous()`](../language/EntityClass.md#previous), [`entity.next()`](../language/EntityClass.md#next), [`entity.first()`](../language/EntityClass.md#first), [`entity.last()`](../language/EntityClass.md#last), [`entity.clone()`](../language/EntityClass.md#clone)| -|cs.*DataClassName*Selection|cs.EmployeeSelection|[`dataClass.query()`](../language/DataClassClass.md#query), [`entitySelection.query()`](../language/EntitySelectionClass.md#query), [`dataClass.all()`](../language/DataClassClass.md#all), [`dataClass.fromCollection()`](../language/DataClassClass.md#fromcollection), [`dataClass.newSelection()`](../language/DataClassClass.md#newselection), [`entitySelection.drop()`](../language/EntitySelectionClass.md#drop), [`entity.getSelection()`](../language/EntityClass.md#getselection), [`entitySelection.and()`](../language/EntitySelectionClass.md#and), [`entitySelection.minus()`](../language/EntitySelectionClass.md#minus), [`entitySelection.or()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderBy()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderByFormula()`](../language/EntitySelectionClass.md#orderbyformula), [`entitySelection.slice()`](../language/EntitySelectionClass.md#slice)| +|cs.*DataClassName*Selection|cs.EmployeeSelection|[`dataClass.query()`](../language/DataClassClass.md#query), [`entitySelection.query()`](../language/EntitySelectionClass.md#query), [`dataClass.all()`](../language/DataClassClass.md#all), [`dataClass.fromCollection()`](../language/DataClassClass.md#fromcollection), [`dataClass.newSelection()`](../language/DataClassClass.md#newselection), [`entitySelection.drop()`](../language/EntitySelectionClass.md#drop), [`entity.getSelection()`](../language/EntityClass.md#getselection), [`entitySelection.and()`](../language/EntitySelectionClass.md#and), [`entitySelection.minus()`](../language/EntitySelectionClass.md#minus), [`entitySelection.or()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderBy()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderByFormula()`](../language/EntitySelectionClass.md#orderbyformula-), [`entitySelection.slice()`](../language/EntitySelectionClass.md#slice)| Also, object instances from ORDA data model user classes benefit from their parent's properties and functions: diff --git a/versioned_docs/version-1.0.0/orda/data.md b/versioned_docs/version-1.0.0/orda/data.md index 34cf92cddf..528ff9d6fa 100644 --- a/versioned_docs/version-1.0.0/orda/data.md +++ b/versioned_docs/version-1.0.0/orda/data.md @@ -4,7 +4,7 @@ title: CRUD Operations slug: /guides/crud-operations --- -In ORDA, you access data through [entities](data-model#entity) and [entity selections](data-model#entity-selection) objects. These objects allow you to execute CRUD (*Create, Read, Update, Delete*) basic operations on data, along with [queries](queries.md) and sorts. +In ORDA, you access data through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection) objects. These objects allow you to execute CRUD (*Create, Read, Update, Delete*) basic operations on data, along with [queries](queries.md) and sorts. ## Creating an entity @@ -229,7 +229,7 @@ You can assign or modify the value of a "one" related entity attribute from the ## Creating an entity selection -You can create an object of type [entity selection](data-model#entity-selection) as follows: +You can create an object of type [entity selection](data-model.md#entity-selection) as follows: * Querying the entities [in a dataclass](../language/DataClassClass.md#query) or in an [existing entity selection](../language/EntitySelectionClass.md#query); * Using the [`.all()`](../language/DataClassClass.md#all) dataclass function to select all the entities in a dataclass; @@ -499,7 +499,7 @@ Filters apply to all ORDA or REST requests executed in your Qodly projects. A fi |[entitySelection.query()](../language/EntitySelectionClass.md#query)|| |[entitySelection.attributeName](../language/EntitySelectionClass.md#attributename)|Filter applied if *attributeName* is a related entity or related entities of a filtered dataclass (including alias or computed attribute)| |[entity.attributeName](../language/EntityClass.md#attributename)|Filter applied if *attributeName* corresponds to related entities of a filtered dataclass (including alias or computed attribute)| -|[Create entity selection](../language/EntitySelectionClass.md#create-entity-selection)|| +|[Create entity selection](../language/DataClassClass.md#newselection)|| Other ORDA functions accessing data do not directly trigger the filter, but they nevertheless benefit from it. For example, the [`entity.next()`](../language/EntityClass.md#next) function will return the next entity in the already-filtered entity selection. On the other hand, if the entity selection is not filtered, [`entity.next()`](../language/EntityClass.md#next) will work on non-filtered entities. diff --git a/versioned_docs/version-1.0.0/orda/queries.md b/versioned_docs/version-1.0.0/orda/queries.md index d79b12a801..05b055f441 100644 --- a/versioned_docs/version-1.0.0/orda/queries.md +++ b/versioned_docs/version-1.0.0/orda/queries.md @@ -66,7 +66,7 @@ where: * **formula**: a valid formula passed as `string` or `object`. The formula will be evaluated for each processed entity and must return a boolean value. Within the formula, the entity is available through the `this` object. * **string**: the formula string must be preceeded by the `eval()` statement, so that the query parser evaluates the expression correctly. For example: *"eval(length(this.lastname) >=30)"* - * **object**: the [formula object](../language/FunctionClass.md) is passed as a **placeholder** (see below). The formula must have been created using the [`formula`](../language/FunctionClass#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. + * **object**: the [formula object](../language/FunctionClass.md) is passed as a **placeholder** (see below). The formula must have been created using the [`formula`](../language/FunctionClass.md#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. >* Keep in mind that formulas only support `&` and `|` symbols as logical operators. >* If the formula is not the only search criteria, the [query engine optimizer](#about-queryplan-and-querypath) could prior process other criteria (e.g. indexed attributes) and thus, the formula could be evaluated for only a subset of entities. @@ -333,7 +333,7 @@ es=ds.Movie.query("roles.actor.lastName == :1 AND roles.actor{2}.lastName == :2" As an alternative to formula insertion within the *queryString* parameter (see above), you can pass directly a formula object as a boolean search criteria. Using a formula object for queries is usually recommended since you benefit from tokenization, and code is easier to search/read. -The *formula* must have been created using the [`formula`](../language/FunctionClass#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. In this case: +The *formula* must have been created using the [`formula`](../language/FunctionClass.md#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. In this case: * the *formula* is evaluated for each entity and must return `true` or `false`. During the execution of the query, if the *formula*'s result is not a boolean, it is considered as `false`. * within the *formula*, the entity is available through the `this` object. diff --git a/versioned_docs/version-1.0.0/studio/coding.md b/versioned_docs/version-1.0.0/studio/coding.md index fa6d31f9dd..7aed0c3b27 100644 --- a/versioned_docs/version-1.0.0/studio/coding.md +++ b/versioned_docs/version-1.0.0/studio/coding.md @@ -57,8 +57,8 @@ You can create a method or class using one of the three methods:
                                                -
                                              1. You can create them individually from dedicated grids on the Studio Homepage.





                                              2. -
                                              3. In the Explorer, simply click the plus icon located next to either Methods or Classes.




                                              4. +
                                              5. You can create them individually from dedicated grids on the Studio Homepage.

                                              6. +
                                              7. In the Explorer, simply click the plus icon located next to either Methods or Classes.

                                              8. While in the Page Editor, go to the New + tab and opt for either Methods or Classes.
                                              diff --git a/versioned_docs/version-1.0.0/studio/debugging.md b/versioned_docs/version-1.0.0/studio/debugging.md index 520308c6ff..7e8c509934 100644 --- a/versioned_docs/version-1.0.0/studio/debugging.md +++ b/versioned_docs/version-1.0.0/studio/debugging.md @@ -51,9 +51,9 @@ If you wish to stop a debug session, follow these steps:
                                                  -
                                                • Keep in progress: Qodly will continue evaluating the code until the end of the current method or function, and then the debugger will be detached.

                                                • -
                                                • Stop: The debugger will be immediately detached.

                                                • -
                                                • Cancel: The debugger will not be detached.

                                                • +
                                                • Keep in progress: Qodly will continue evaluating the code until the end of the current method or function, and then the debugger will be detached.
                                                • +
                                                • Stop: The debugger will be immediately detached.
                                                • +
                                                • Cancel: The debugger will not be detached.
                                              @@ -98,9 +98,9 @@ Managing breakpoints is crucial for a streamlined debugging process. By using a
                                                -
                                              • Remove Breakpoints in the Current File: Clears all breakpoints from your active file.

                                              • -
                                              • Remove Breakpoints in Other Files: Removes all breakpoints from non-active files.

                                              • -
                                              • Remove Breakpoints in All Files: Eliminates all breakpoints across the entire project.

                                              • +
                                              • Remove Breakpoints in the Current File: Clears all breakpoints from your active file.
                                              • +
                                              • Remove Breakpoints in Other Files: Removes all breakpoints from non-active files.
                                              • +
                                              • Remove Breakpoints in All Files: Eliminates all breakpoints across the entire project.
                                              diff --git a/versioned_docs/version-1.0.0/studio/img/qodly-studio-classes-icon-explorer-object-structure.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-classes-icon-explorer-object-structure.png new file mode 100644 index 0000000000..fbfe1a8d2e Binary files /dev/null and b/versioned_docs/version-1.0.0/studio/img/qodly-studio-classes-icon-explorer-object-structure.png differ diff --git a/versioned_docs/version-1.0.0/studio/img/qodly-studio-classes-icon-grid-create-new-class.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-classes-icon-grid-create-new-class.png new file mode 100644 index 0000000000..fbfe1a8d2e Binary files /dev/null and b/versioned_docs/version-1.0.0/studio/img/qodly-studio-classes-icon-grid-create-new-class.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/overview_data.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-data-icon-grid-access-data-explorer.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_data.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-data-icon-grid-access-data-explorer.png diff --git a/versioned_docs/version-1.0.0/studio/img/qodly-studio-data-icon-headerbar-access-data-explorer.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-data-icon-headerbar-access-data-explorer.png new file mode 100644 index 0000000000..5ba01e2648 Binary files /dev/null and b/versioned_docs/version-1.0.0/studio/img/qodly-studio-data-icon-headerbar-access-data-explorer.png differ diff --git a/versioned_docs/version-1.0.0/studio/img/overview_debug.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-debug-icon-headerbar-server-debugging.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/overview_debug.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-debug-icon-headerbar-server-debugging.png diff --git a/versioned_docs/version-1.0.0/studio/img/overview_debugger.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-debugger-icon-explorer-error-tools.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/overview_debugger.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-debugger-icon-explorer-error-tools.png diff --git a/versioned_docs/version-1.0.0/studio/img/QodlyStudioOverview.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-home-page-interface-explorer-header-grid.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/QodlyStudioOverview.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-home-page-interface-explorer-header-grid.png diff --git a/versioned_docs/version-1.0.0/studio/img/qodly-studio-methods-icon-explorer-code-blocks.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-methods-icon-explorer-code-blocks.png new file mode 100644 index 0000000000..fbfe1a8d2e Binary files /dev/null and b/versioned_docs/version-1.0.0/studio/img/qodly-studio-methods-icon-explorer-code-blocks.png differ diff --git a/versioned_docs/version-1.0.0/studio/img/qodly-studio-methods-icon-grid-create-new-method.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-methods-icon-grid-create-new-method.png new file mode 100644 index 0000000000..fbfe1a8d2e Binary files /dev/null and b/versioned_docs/version-1.0.0/studio/img/qodly-studio-methods-icon-grid-create-new-method.png differ diff --git a/versioned_docs/version-1.0.0/studio/img/overview_model.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-model-icon-explorer-datastore-structure.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/overview_model.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-model-icon-explorer-datastore-structure.png diff --git a/versioned_docs/version-1.0.0/studio/img/tabs.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-open-tabs-title-bar-editor-navigation.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/tabs.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-open-tabs-title-bar-editor-navigation.png diff --git a/versioned_docs/version-1.0.0/studio/img/overview_Pages.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-pages-icon-project-overview.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/overview_Pages.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-pages-icon-project-overview.png diff --git a/versioned_docs/version-1.0.0/studio/img/overview_preview.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-preview-icon-headerbar-site-rendering.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/overview_preview.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-preview-icon-headerbar-site-rendering.png diff --git a/versioned_docs/version-1.0.0/studio/img/settings-tabpreview.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-preview-mode-tab-italic-label-indicator.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/settings-tabpreview.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-preview-mode-tab-italic-label-indicator.png diff --git a/versioned_docs/version-1.0.0/studio/img/overview_roles.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-roles-privileges-icon-explorer-access-control.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/overview_roles.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-roles-privileges-icon-explorer-access-control.png diff --git a/versioned_docs/version-1.0.0/studio/img/overview_saveAll.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-save-all-icon-headerbar-app-wide-changes.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/overview_saveAll.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-save-all-icon-headerbar-app-wide-changes.png diff --git a/versioned_docs/version-1.1.0/studio/img/overview_settings.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-settings-icon-explorer-app-configuration.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_settings.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-settings-icon-explorer-app-configuration.png diff --git a/versioned_docs/version-1.0.0/studio/img/qodly-studio-settings-icon-headerbar-app-config-options.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-settings-icon-headerbar-app-config-options.png new file mode 100644 index 0000000000..d766cf06c2 Binary files /dev/null and b/versioned_docs/version-1.0.0/studio/img/qodly-studio-settings-icon-headerbar-app-config-options.png differ diff --git a/versioned_docs/version-1.0.0/studio/img/overview_shared.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-shared-icon-explorer-assets-folder.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/overview_shared.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-shared-icon-explorer-assets-folder.png diff --git a/versioned_docs/version-1.0.0/studio/img/tabs-menu.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-tab-context-menu-options-right-click.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/tabs-menu.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-tab-context-menu-options-right-click.png diff --git a/versioned_docs/version-1.0.0/studio/img/tabs-scroll.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-tab-scrollbar-overflow-navigation-editor-tabs.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/tabs-scroll.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-tab-scrollbar-overflow-navigation-editor-tabs.png diff --git a/versioned_docs/version-1.0.0/studio/img/tabs-close.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-unsaved-changes-warning-prompt-dialog.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/tabs-close.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-unsaved-changes-warning-prompt-dialog.png diff --git a/versioned_docs/version-1.0.0/studio/img/tabs-unsaved.png b/versioned_docs/version-1.0.0/studio/img/qodly-studio-unsaved-tab-indicator-modified-content.png similarity index 100% rename from versioned_docs/version-1.0.0/studio/img/tabs-unsaved.png rename to versioned_docs/version-1.0.0/studio/img/qodly-studio-unsaved-tab-indicator-modified-content.png diff --git a/versioned_docs/version-1.0.0/studio/img/tabs-unsaved..png b/versioned_docs/version-1.0.0/studio/img/tabs-unsaved..png deleted file mode 100644 index 54dfd564b2..0000000000 Binary files a/versioned_docs/version-1.0.0/studio/img/tabs-unsaved..png and /dev/null differ diff --git a/versioned_docs/version-1.0.0/studio/model/attributes.md b/versioned_docs/version-1.0.0/studio/model/attributes.md index 7f813c313b..6d7b427fa0 100644 --- a/versioned_docs/version-1.0.0/studio/model/attributes.md +++ b/versioned_docs/version-1.0.0/studio/model/attributes.md @@ -15,7 +15,7 @@ You can view and modify a few of the attribute’s properties when you select or - **Delete**: Deletes the attribute from the datastore class. - **Scope**: A closed lock icon indicates that the attribute is **Not exposed as REST**, i.e. it can only be called from the server code. -- **Name**: [Attribute name](#attribute-names) that you can change by double-clicking on it to render the area enterable. +- **Name**: [Attribute name](#attribute-name) that you can change by double-clicking on it to render the area enterable. - a name in **bold** indicates that an index is associated to the attribute. - a name underlined indicates the primary key attribute - a name in _italics_ indicates a not exposed attribute @@ -23,7 +23,7 @@ You can view and modify a few of the attribute’s properties when you select or - **Type Icon**: Displays the datastore entity type as an icon. - **Type**: Attribute type that you can change by double-clicking on it to render the area enterable. An attribute type can be [scalar](#data-types) or based upon a [relation](#create-a-relation-attribute), in which case it can be of the _classNameEntity_ or _classNameSelection_ type. -All attributes of a datastore class are also listed in the [Outline area](model-editor-interface#outline) of the model editor. +All attributes of a datastore class are also listed in the [Outline area](model-editor-interface.md#outline) of the model editor. ### Attribute name @@ -261,7 +261,7 @@ Similarly, calculated attributes can be included in **sorts**. When a calculated ### Create a calculated attribute -You create a calculated attribute by defining a [`get` function](../../orda/data-model.md#function-get-attributename) in the [**entity class**](#entity-class) of the dataclass. The calculated attribute will be automatically available in the dataclass attributes and in the entity attributes. +You create a calculated attribute by defining a [`get` function](../../orda/data-model.md#function-get-attributename) in the [**entity class**](../../orda/data-model.md#entity-class) of the dataclass. The calculated attribute will be automatically available in the dataclass attributes and in the entity attributes. Three other calculated attribute functions ([`set`](../../orda/data-model.md#function-set-attributename), [`query`](../../orda/data-model.md#function-query-attributename), and [`orderBy`](../../orda/data-model.md#function-orderby-attributename)) can also be defined in the entity class. They are optional. @@ -294,7 +294,7 @@ Here is the list of all available properties: | Max value | Minimum value allowed for the attribute. If the value entered is more than this property, an error is returned. | long, number | | Min value | Minimum value allowed for the attribute. If the value entered is less than this property, an error is returned. | long, number | | Reverse path | This option must be selected for a 1->N relation attribute | related 1->N | -| Scope | "Expose as REST" or "Do not expose as REST". An exposed attribute can be used from anywhere and its value can be displayed using REST requests. A not-exposed attribute can only be used by code called from inside the datastore class, including calculated attributes, functions, methods, and events, executed on the server. Select "Do not expose as REST" for attributes that should not be accessed directly, e.g. "salary". This property can be selected at the [datastore class level](datastore-classes#scope), and attributes inherit from this level. An attribute can override the parent dataclass level with "Do not expose as REST" if the parent was exposed; however, it the parent dataclass property is "Do not expose as REST", the attribute cannot override it. | All | +| Scope | "Expose as REST" or "Do not expose as REST". An exposed attribute can be used from anywhere and its value can be displayed using REST requests. A not-exposed attribute can only be used by code called from inside the datastore class, including calculated attributes, functions, methods, and events, executed on the server. Select "Do not expose as REST" for attributes that should not be accessed directly, e.g. "salary". This property can be selected at the [datastore class level](datastore-classes.md#scope), and attributes inherit from this level. An attribute can override the parent dataclass level with "Do not expose as REST" if the parent was exposed; however, it the parent dataclass property is "Do not expose as REST", the attribute cannot override it. | All | | Unique | Verifies that the value entered be unique. If not, an error is returned | string | ## Permissions diff --git a/versioned_docs/version-1.0.0/studio/model/datastore-classes.md b/versioned_docs/version-1.0.0/studio/model/datastore-classes.md index db89f54ff1..f722142a44 100644 --- a/versioned_docs/version-1.0.0/studio/model/datastore-classes.md +++ b/versioned_docs/version-1.0.0/studio/model/datastore-classes.md @@ -93,7 +93,7 @@ Specifies whether the dataclass is exposed for external access via REST requests :::tip -This property can also be set at the [attribute level](attributes#overview), and attributes inherit this property from their parent datastore class. An attribute can override this with "Do not expose as REST" if the parent is exposed, but cannot do so if the parent is not exposed. +This property can also be set at the [attribute level](attributes.md#overview), and attributes inherit this property from their parent datastore class. An attribute can override this with "Do not expose as REST" if the parent is exposed, but cannot do so if the parent is not exposed. ::: ### Page size diff --git a/versioned_docs/version-1.0.0/studio/model/model-editor-interface.md b/versioned_docs/version-1.0.0/studio/model/model-editor-interface.md index 94a4aacf72..adaf69aa5b 100644 --- a/versioned_docs/version-1.0.0/studio/model/model-editor-interface.md +++ b/versioned_docs/version-1.0.0/studio/model/model-editor-interface.md @@ -25,7 +25,7 @@ The model view includes permissions, allowing you to assign access rights at any You can access your current project's model in the **Model Editor** by clicking on the in your project's sidebar. :::note -You can also open your model as a [JSON file](#json-view). +You can also open your model as a [JSON file](#model-json-representation). ::: ### Default State @@ -77,7 +77,7 @@ The Miniature Overview Area allows you to view an overview of your model at a sm ## Outline -On the left side of the model editor, the **Outline** lists all **datastore classes** and **datastore functions** (i.e. functions defined at the [cs.DataStore](../../orda/data-model#datastore) class level) in your model: +On the left side of the model editor, the **Outline** lists all **datastore classes** and **datastore functions** (i.e. functions defined at the [cs.DataStore](../../orda/data-model.md#datastore) class level) in your model: @@ -207,6 +207,6 @@ The syntax check feature identifies and corrects syntax errors and formatting is :::warning -Editing the model through the JSON code must be done with care since data model integrity rules are not checked in the Text Editor. In particular, you must pay attention to [naming rules](attributes.md#attribute-name), or [renaming issues](datastore-classes#renaming-a-datastore-class). +Editing the model through the JSON code must be done with care since data model integrity rules are not checked in the Text Editor. In particular, you must pay attention to [naming rules](attributes.md#attribute-name), or [renaming issues](datastore-classes.md#renaming-a-datastore-class). ::: diff --git a/versioned_docs/version-1.0.0/studio/overview.md b/versioned_docs/version-1.0.0/studio/overview.md index 62b8668343..02c819aa41 100644 --- a/versioned_docs/version-1.0.0/studio/overview.md +++ b/versioned_docs/version-1.0.0/studio/overview.md @@ -33,8 +33,8 @@ Deployed Qodly applications are accessible on all popular web browsers, with no Access to Qodly Studio is granted to developers once they complete a series of authentication steps to enter the Qodly Cloud Management Console. From the Development or Staging [environment](../cloud/environmentsOverview.md) within the Qodly Console, you can access your application instance in Qodly Studio by either: -- Clicking on the [Studio](../cloud/consoleOverview#accessing-the-studio) button on the Overview page. -- Clicking on the [Studio URL](../cloud/resourceMonitoring#1-studio-url) in the General tab for the environment. +- Clicking on the [Studio](../cloud/consoleOverview.md#accessing-qodly-studio) button on the Overview page. +- Clicking on the [Studio URL](../cloud/resourceMonitoring.md#1-studio-url) in the General tab for the environment. @@ -43,34 +43,34 @@ Access to Qodly Studio is granted to developers once they complete a series of a When you first step into Qodly Studio, you'll immediately encounter a user-friendly interface. It's divided into three key sections: the `Explorer` ⓵ on the left, a `Header bar`⓶ at the top, and a `Grid container`⓷ in the center. - +Screenshot of the Qodly Studio home page highlighting the Explorer panel, top header bar with debug and preview options, and the central grid container for creating pages, data, classes, and methods. 1. **Explorer**: is where you'll find an overview of your project's essential elements: - - ![qodlyOverview](./img/overview_Pages.png) [Pages](./pageLoaders/pageLoaderOverview#overview): Serve as containers, enveloping various components within your application. - - ![qodlyOverview](./img/overview_methods&Func.png) [Methods](./coding#methods): Function as distinct blocks of code that fulfill specific roles within your application. While they can be invoked from class functions or other methods, components can't directly interact with them. - - ![qodlyOverview](./img/overview_methods&Func.png) [Classes](./coding#classes): Serve as the cornerstone for organizing your code around objects, granting components the capability to directly interact with them. - - ![qodlyOverview](./img/overview_shared.png) Shared: Use this folder to store any contents (local images, downloadable files...) you might need within your app. The contents of this folder can be accessed from Qodyy pages using the [`/$shared` link](pageLoaders/events/bindingActionToEvents.md#shared-folder) or from the QodlyScript language using the [`/SOURCES/Shared`](../language/basics/lang-pathnames.md#filesystem-pathnames) file path. - - ![qodlyOverview](./img/overview_debugger.png) [Debugger](./debugging.md): Provides a suite of debugging tools that address different types of errors during the development phase. - - ![qodlyOverview](./img/overview_roles.png) [Roles And Privileges](./roles/rolesPrivilegesOverview.md): Plays a pivotal role in enforcing data access restrictions within your application, ensuring that the right users access the right data. - - ![qodlyOverview](./img/overview_model.png) [Model](./model/model-editor-interface.md): Defines how data is accessed and stored within structures referred to as datastore classes. - - ![qodlyOverview](./img/overview_settings.png) [Settings](./settings.md): Offer options to configure application-specific settings. + - Qodly Studio Pages icon representing the section for managing and viewing core project elements within the Explorer panel. [Pages](./pageLoaders/pageLoaderOverview.md#page-editor-overview): Serve as containers, enveloping various components within your application. + - Qodly Studio Methods icon in the Explorer panel, representing reusable blocks of code that define specific application logic and can be invoked by classes or other methods. [Methods](./coding.md#methods): Function as distinct blocks of code that fulfill specific roles within your application. While they can be invoked from class functions or other methods, components can't directly interact with them. + - Qodly Studio Classes icon in the Explorer panel, used to define object-oriented structures that components can directly interact with to manage application logic. [Classes](./coding.md#classes): Serve as the cornerstone for organizing your code around objects, granting components the capability to directly interact with them. + - Qodly Studio Shared icon in the Explorer panel, representing the folder where developers store static assets like local images and downloadable files, accessible via /$shared or QodlyScript. Shared: Use this folder to store any contents (local images, downloadable files...) you might need within your app. The contents of this folder can be accessed from Qodyy pages using the [`/$shared` link](pageLoaders/events/bindingActionToEvents.md#shared-folder) or from the QodlyScript language using the [`/SOURCES/Shared`](../language/basics/lang-pathnames.md#filesystem-pathnames) file path. + - Qodly Studio Debugger icon in the Explorer panel, giving access to built-in debugging tools that help identify and resolve development errors efficiently. [Debugger](./debugging.md): Provides a suite of debugging tools that address different types of errors during the development phase. + - Qodly Studio Roles & Privileges icon in the Explorer panel, used to configure and manage access controls that restrict data visibility based on user roles. [Roles And Privileges](./roles/rolesPrivilegesOverview.md): Plays a pivotal role in enforcing data access restrictions within your application, ensuring that the right users access the right data. + - Qodly Studio Model icon in the Explorer panel, representing the structure used to define how data is accessed and stored using datastore classes. [Model](./model/model-editor-interface.md): Defines how data is accessed and stored within structures referred to as datastore classes. + - Qodly Studio Settings icon in the Explorer panel, used to access application-specific configuration options for managing app behavior and preferences. [Settings](./settings.md): Offer options to configure application-specific settings. 2. **Header bar**: provides quick access to several project-related options: - - ![qodlyOverview](./img/overview_debug.png) [Debug](./debugging#starting-a-debug-session): Initiate a debug session on the server, attaching it to your browser, and enable debugging for your app. - - ![qodlyOverview](./img/overview_saveAll.png) Save All: Save all changes made across all open windows within your app. - - ![qodlyOverview](./img/overview_data.png) [Data](../data-explorer/data-explorer.md): Provide access to the Data Explorer, facilitating data-related operations. - - ![qodlyOverview](./img/overview_preview.png) [Preview](./rendering#preview-the-entire-site): Allows you to assess your application's appearance and functionality with ease. - - ![qodlyOverview](./img/overview_settings.png) [Settings](./settings.md): Present a range of options for configuring application-specific settings, tailoring the environment to your app's needs. + - Qodly Studio Debug icon in the header bar, used to initiate server-side debug sessions and attach debugging tools to the browser. [Debug](./debugging.md#starting-a-debug-session): Initiate a debug session on the server, attaching it to your browser, and enable debugging for your app. + - Qodly Studio Save All icon in the header bar, allowing developers to save changes across all open windows and project components. Save All: Save all changes made across all open windows within your app. + - Qodly Studio Data icon in the header bar, providing direct access to the Data Explorer for managing data-related operations. [Data](../data-explorer/data-explorer.md): Provide access to the Data Explorer, facilitating data-related operations. + - Qodly Studio Preview icon in the header bar, used to preview the full application for layout, styling, and functionality review. [Preview](./rendering.md#preview-the-entire-site): Allows you to assess your application's appearance and functionality with ease. + - Qodly Studio Settings icon in the header bar, offering quick access to configuration options for customizing the app environment. [Settings](./settings.md): Present a range of options for configuring application-specific settings, tailoring the environment to your app's needs. 3. **Grid container**: houses a collection of swift shortcuts for a range of actions: - **Create New**: Offers convenient quick links for: - - ![qodlyOverview](./img/overview_Pages.png) [Pages](./pageLoaders/pageLoaderOverview#creating-a-Page): Speedily initiate the creation of a new Page. - - ![qodlyOverview](./img/overview_class.png) [Classes](./coding#creating): Generate a new Class. - - ![qodlyOverview](./img/overview_method.png) [Methods](./coding#creating): Generate a new Method. - - ![qodlyOverview](./img/overview_data.png) [Data](../data-explorer/data-explorer.md): Provide access to the [Data Explorer](../data-explorer/data-explorer.md), facilitating data-related operations. + - Qodly Studio Pages icon as seen in the Grid container, used as a shortcut to quickly create or access project pages. [Pages](./pageLoaders/pageLoaderOverview.md#page-editor-overview): Speedily initiate the creation of a new Page. + - Qodly Studio Classes icon in the Grid container, serving as a shortcut to generate a new class for organizing object-oriented code structures. [Classes](./coding.md#creating): Generate a new Class. + - Qodly Studio Methods icon in the Grid container, used as a shortcut to quickly create a new method that defines reusable blocks of application logic. [Methods](./coding.md#creating): Generate a new Method. + - Qodly Studio Data icon in the Grid container, offering quick access to the Data Explorer for managing and interacting with data sources. [Data](../data-explorer/data-explorer.md): Provide access to the [Data Explorer](../data-explorer/data-explorer.md), facilitating data-related operations. - **Recent Files**: Displays the most recently accessed files, allowing you to quickly revisit your recent work. - **What's New**: Keeps you updated with the latest news and announcements from the Qodly team. @@ -79,7 +79,7 @@ When you first step into Qodly Studio, you'll immediately encounter a user-frien Qodly Studio displays open items with tabs in the title area above the current editor. - +Qodly Studio interface showing the title bar with open tabs for pages, datastore, roles and privileges, and model, allowing quick navigation between active editor items. [By default](#preview-mode), when you open a file, a new tab is added for that file. New tabs are added to the right of the existing tabs. All Qodly files and editors use tabs: model, Pages, methods, classes, roles and privileges, settings, pictures, and so on. @@ -87,14 +87,14 @@ Tabs let you quickly navigate between items and you can drag and drop tabs to re When you have more open items than can fit in the title area, you can use the scroll bar between the tab and editor regions to drag tabs into view. - +Qodly Studio showing a horizontal scrollbar beneath the title bar tabs, enabling users to scroll and access additional open items when the tab list exceeds the visible area. ### Contextual menu Every tab provides access to a contextual menu that you can display with a **right-click** on the tab header: - +Qodly Studio contextual tab menu shown after right-clicking a tab, offering options like reload, rename, close, close others, and tab management actions. The following actions are available: @@ -105,17 +105,17 @@ The following actions are available: - **Close all**: closes all the opened tabs. - **Close saved**: closes all the tabs that contain saved contents. Tabs with unsaved contents are not closed. - **Close tabs to the right/to the left**: closes all opened tabs located at the right side or the left side of the current tab. -- **Switch to Text Editor** (only available with Page and model tabs): displays the [current Page](./pageLoaders/pageLoaderOverview#page-json-representation) or [model](model/model-editor-interface#model-json-representation) as JSON text. When called from the text editor, the menu command toggles to **Switch to Page Editor**/**Switch to Model Editor**. +- **Switch to Text Editor** (only available with Page and model tabs): displays the [current Page](./pageLoaders/pageLoaderOverview.md#page-json-representation) or [model](model/model-editor-interface.md#model-json-representation) as JSON text. When called from the text editor, the menu command toggles to **Switch to Page Editor**/**Switch to Model Editor**. ### Unsaved contents When the contents of a tab has been modified locally but has not been saved, a colored spot is displayed on the right part of the tab header: - +Qodly Studio tab labeled dashboard showing a purple dot indicator, signaling that the tab contains unsaved local modifications. -When closing or reloading a tab, if it contains unsaved changes, an alert window is displayed, allowing you to ignore the changes and close the tab (**Confirm**) or cancel the closure and let you click the [**Save all**](#homepage) button to save the changes. +When closing or reloading a tab, if it contains unsaved changes, an alert window is displayed, allowing you to ignore the changes and close the tab (**Confirm**) or cancel the closure and let you click the [**Save all**](./coding.md#saving) button to save the changes. - +Qodly Studio warning prompt displaying a confirmation dialog when closing a tab with unsaved changes, showing options to Confirm or Cancel the action. ### Preview mode @@ -127,6 +127,6 @@ When the tabs preview mode is enabled, clicking a file in the Explorer displays Preview mode tab is indicated by *italics* in the tab heading: - +Qodly Studio interface showing an italicized 'main' tab label to indicate that the tab is in preview mode. If you'd prefer to not use preview mode and always create a new tab, just let the selector off (default mode). \ No newline at end of file diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/button.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/button.md index e623c05829..49c68fc913 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/button.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/button.md @@ -35,8 +35,7 @@ Enhance the **Button** component to align with your application's requirements u
                                                -
                                              • Label: Personalize the label to offer clear instructions or guidance.
                                              • -
                                                +
                                              • Label: Personalize the label to offer clear instructions or guidance.
                                              • Icon Position: Choose the position of the icon in relation to the label, allowing options for top, bottom, left, right, or even hidden for a seamless integration into your design.
                                              diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/checkbox.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/checkbox.md index 98077ff239..1362580519 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/checkbox.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/checkbox.md @@ -49,7 +49,7 @@ Enhance the **Checkbox** component to align with your application's requirements
                                                -
                                              • Checkbox Variant: Select this for the standard checkbox style.

                                              • +
                                              • Checkbox Variant: Select this for the standard checkbox style.
                                              • Switch Variant: Choose this for a switch-like appearance.
                                              diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/componentsBasics.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/componentsBasics.md index 5b130348d7..ffb2d87474 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/componentsBasics.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/componentsBasics.md @@ -107,7 +107,7 @@ Formatting options may vary based on the specific data type of the attribute and
                                                -
                                              • For Text (string):

                                              • +
                                              • For Text (string):
                                                • UPPERCASE: Converts all characters to uppercase.
                                                • lowercase: Converts all characters to lowercase.
                                                • @@ -126,7 +126,7 @@ Formatting options may vary based on the specific data type of the attribute and
                                                    -
                                                  • For Number:

                                                  • +
                                                  • For Number:
                                                    • 0: Standard numerical format.
                                                    • 0%: Displays the number as a percentage.
                                                    • @@ -147,7 +147,7 @@ Formatting options may vary based on the specific data type of the attribute and
                                                        -
                                                      • For Date:

                                                      • +
                                                      • For Date:
                                                        • Date short: Displays the date in a short format.
                                                        • Date long: Displays the date in a long format.
                                                        • diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/datatable.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/datatable.md index b04a4663a6..502c048455 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/datatable.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/datatable.md @@ -63,10 +63,10 @@ Enhance the **DataTable** component to align with your application's requirement
                                                            -
                                                          • Title: The title is the text displayed in the header row as the label for the column. It also appears as the column name in the properties area.

                                                          • -
                                                          • Source: The source attribute specifies the qodlysource for the column. Typically, it refers to an attribute whose value depends on each element of the DataTable's qodlysource. This determines the content to be displayed in the column cells.

                                                          • -
                                                          • Format: The format property allows you to define how the data in the column should be displayed, depending on its type. It specifies the visual representation of the data, such as date formatting or decimal places. See Formats for a description of available formats.

                                                          • -
                                                          • Width: The width of the column can be customized. You have the option to define the width in pixels or as a percentage. The unit menu at the right side of the entry area lets you choose between PX (pixels) or % (percentage).

                                                          • +
                                                          • Title: The title is the text displayed in the header row as the label for the column. It also appears as the column name in the properties area.
                                                          • +
                                                          • Source: The source attribute specifies the qodlysource for the column. Typically, it refers to an attribute whose value depends on each element of the DataTable's qodlysource. This determines the content to be displayed in the column cells.
                                                          • +
                                                          • Format: The format property allows you to define how the data in the column should be displayed, depending on its type. It specifies the visual representation of the data, such as date formatting or decimal places. See Formats for a description of available formats.
                                                          • +
                                                          • Width: The width of the column can be customized. You have the option to define the width in pixels or as a percentage. The unit menu at the right side of the entry area lets you choose between PX (pixels) or % (percentage).
                                                          • Sorting: The sorting selector enables users to interactively sort the column. When this selector is activated, users can click on the header area of the column to perform ascending or descending sorting at runtime.
                                                          @@ -95,7 +95,7 @@ To associate data with the **DataTable** component, follow these steps:
                                                            -
                                                          1. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Data Table component.

                                                          2. +
                                                          3. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Data Table component.
                                                          4. Define the Qodly Source: Specify the appropriate qodlysource that contains the data you want to display within the DataTable. For instance, you can select an entity selection, such as the Packages dataclass.
                                                          @@ -336,14 +336,14 @@ Here's a glimpse of how the **DataTable** component will look and behave in acti :::info -Customize the styles of the DataTable component by utilizing specific CSS classes that target various elements of the DataTable. For more details, refer to the section on [Customizing DataTable Styles](../styling#customizing-datatable-styles). +Customize the styles of the DataTable component by utilizing specific CSS classes that target various elements of the DataTable. For more details, refer to the section on [Customizing DataTable Styles](#customizing-datatable-styles). ::: ## Triggers and Events The **DataTable** component can respond to various events, enabling dynamic user experiences. -Additional information including the **column number**, **row number**, and **column qodlysource name** are returned by the [`webEvent` command](../../../language/WebFormClass.md#webevent) when called in an event function triggered by a **DataTable** component. +Additional information including the **column number**, **row number**, and **column qodlysource name** are returned by the [`webEvent` command](../../../language/commands/webEvent.md) when called in an event function triggered by a **DataTable** component. Events that can trigger actions within the component include: diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/fileupload.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/fileupload.md index dd77bef12e..ffc5627446 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/fileupload.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/fileupload.md @@ -58,7 +58,7 @@ Enhance the **File Upload** component to align with your application's requireme
                                                            -
                                                          • Size Limit: Define the maximum file size users are allowed to upload. Choose from units such as KB, MB, and GB.

                                                          • +
                                                          • Size Limit: Define the maximum file size users are allowed to upload. Choose from units such as KB, MB, and GB.
                                                          • If a user attempts to upload a file exceeding the specified size, an error message is displayed in the browser.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/matrix.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/matrix.md index 41a2cda40a..605f400496 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/matrix.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/matrix.md @@ -62,8 +62,7 @@ To associate data with the **Matrix** component, follow these steps:
                                                            -
                                                          1. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Matrix component.
                                                          2. -
                                                            +
                                                          3. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Matrix component.
                                                          4. Define the Qodly Source: Specify the appropriate qodlysource that contains the data you want to display within the Matrix. For instance, you can select an entity selection from a relevant dataclass, such as roomSelection.
                                                          @@ -128,10 +127,10 @@ To implement this functionality, follow these steps:
                                                            -
                                                          1. Integrate the Matrix component into the interface.


                                                          2. -
                                                          3. Select a Qodly Source like Rooms for the Matrix.


                                                          4. -
                                                          5. Embed a component (e.g., a button) within the Matrix for each iterated data.


                                                          6. -
                                                          7. Bind the desired function, like selectRoomOption, to the component's event, such as a button click, using $This.


                                                          8. +
                                                          9. Integrate the Matrix component into the interface.

                                                          10. +
                                                          11. Select a Qodly Source like Rooms for the Matrix.

                                                          12. +
                                                          13. Embed a component (e.g., a button) within the Matrix for each iterated data.

                                                          14. +
                                                          15. Bind the desired function, like selectRoomOption, to the component's event, such as a button click, using $This.

                                                          16. In the code editor, within the function, you can directly retrieve the data of the currently selected element without the need to pass the selected element qodlysource as a parameter to the function.
                                                          @@ -159,7 +158,7 @@ The Matrix component supports a range of CSS classes, enabling customization of | **Class Name** | **Applies To** | **Description** | |------------------|-------------------------------|--------------------------------------------| | `.FdVirtualGrid` | The entire matrix | Styles the entire matrix area. | -| `.innerScrollContainer` | All the default styleboxes in the matrix | Targets all the [default styleboxes](stylebox#enhancing-content-presentation) incorporated in the matrix. | +| `.innerScrollContainer` | All the default styleboxes in the matrix | Targets all the [default styleboxes](stylebox.md#enhancing-content-presentation) incorporated in the matrix. | | `.innerScrollContainer > div.selected` | The selected stylebox | Applies styles to the currently selected stylebox. | | `.innerScrollContainer > div:hover` | The hovered stylebox | Applies styles to the currently hovered stylebox. | | `.fd-stylebox > div` | The internal elements of styleboxes | Targets the internal components of the styleboxes that form the main Matrix. | diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/radio.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/radio.md index def07cae0d..5dd1fa9b72 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/radio.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/radio.md @@ -47,7 +47,7 @@ Enhance the **Radio** component to align with your application's requirements us
                                                            -
                                                          • Single Selection: Users can choose only one option at a time, ensuring that their selections are distinct and non-overlapping.

                                                          • +
                                                          • Single Selection: Users can choose only one option at a time, ensuring that their selections are distinct and non-overlapping.
                                                          • Multiple Selection: Users can choose multiple options that are relevant to their needs.
                                                          @@ -75,7 +75,7 @@ Enhance the **Radio** component to align with your application's requirements us
                                                            -
                                                          • Label: A descriptive text label for each option.

                                                          • +
                                                          • Label: A descriptive text label for each option.
                                                          • Value: A distinct value to each option, enabling effective data handling based on the selections made by users.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/rangeinput.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/rangeinput.md index 916e757847..e0518ab171 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/rangeinput.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/rangeinput.md @@ -49,7 +49,7 @@ Enhance the **Range Input** component to align with your application's requireme
                                                            -
                                                          • Vertical Orientation (Default): By default, the Range Input component is oriented vertically. This means that Slider container is stacked from top to bottom.

                                                          • +
                                                          • Vertical Orientation (Default): By default, the Range Input component is oriented vertically. This means that Slider container is stacked from top to bottom.
                                                          • Horizontal Orientation: When the Range Input component is configured with a horizontal orientation, Slider container is arranged from left to right.
                                                          @@ -82,10 +82,10 @@ Within the **Range Input** component, an embedded **Slider Container** allows fo
                                                            -
                                                          • Min Value: Set the minimum value that users can select within the range.

                                                          • -
                                                          • Max Value: Define the maximum value that users can select within the range.

                                                          • -
                                                          • Step: Determine the increment value when users interact with the component.

                                                          • -
                                                          • ReadOnly: Select this option if you want to use the slider as a visual representation of a value set elsewhere in the application, and that the user cannot change by clicking on the slider.

                                                          • +
                                                          • Min Value: Set the minimum value that users can select within the range.
                                                          • +
                                                          • Max Value: Define the maximum value that users can select within the range.
                                                          • +
                                                          • Step: Determine the increment value when users interact with the component.
                                                          • +
                                                          • ReadOnly: Select this option if you want to use the slider as a visual representation of a value set elsewhere in the application, and that the user cannot change by clicking on the slider.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/selectbox.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/selectbox.md index fd3120852c..02a8ba2dab 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/selectbox.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/selectbox.md @@ -98,7 +98,7 @@ To associate data with the **Select Box** component, follow these steps:
                                                            -
                                                          1. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Select Box component.

                                                          2. +
                                                          3. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Select Box component.
                                                          4. Define the Qodly Source: Specify the appropriate qodlysource that contains the data you want to display within the Select Box. For instance, you can select an entity selection, such as the Destination dataclass.
                                                          @@ -126,7 +126,7 @@ To associate data iterated over a Qodly Source, you can follow these additional
                                                            -
                                                          1. Choose the Iterator: Choose the iterator corresponding to the iterated data (e.g., $This) to represent the current data item.

                                                          2. +
                                                          3. Choose the Iterator: Choose the iterator corresponding to the iterated data (e.g., $This) to represent the current data item.
                                                          4. Choose the Attribute: Once you've selected the iterator, choose the specific attribute that you want to display within the component. This could be attributes like the name of the destination, the country, or any other relevant information.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/selectinput.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/selectinput.md index c67ade7644..a0b9067303 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/selectinput.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/selectinput.md @@ -72,7 +72,7 @@ Within the **Select Input** component, an embedded **Select** allows for further
                                                            -
                                                          • Label: A descriptive text label for each option.

                                                          • +
                                                          • Label: A descriptive text label for each option.
                                                          • Value: A distinct value to each option, enabling effective data handling based on the selections made by users.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/tabs.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/tabs.md index 899c67db88..b613eaaad2 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/tabs.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/tabs.md @@ -34,7 +34,7 @@ Enhance the Tabs component to align with your application's requirements using t
                                                            -
                                                          • Line Variant: Select the "Line" variant for tabs with an underlined styling effect.

                                                          • +
                                                          • Line Variant: Select the "Line" variant for tabs with an underlined styling effect.
                                                          • Enclosed Variant: Opt for the "Enclosed" variant to showcase tabs with a bordered presentation. This choice adds an additional layer of style to your tabs.
                                                          @@ -50,9 +50,9 @@ Enhance the Tabs component to align with your application's requirements using t
                                                            -
                                                          • Title Customization: Modify tab titles to precisely reflect the content or functionality associated with each tab.

                                                          • -
                                                          • Tab Duplication: Duplicate existing tabs to replicate configurations quickly by clicking on the icon.

                                                          • -
                                                          • Tab Removal: Delete tabs that no longer serve a purpose by clicking on the icon.

                                                          • +
                                                          • Title Customization: Modify tab titles to precisely reflect the content or functionality associated with each tab.
                                                          • +
                                                          • Tab Duplication: Duplicate existing tabs to replicate configurations quickly by clicking on the icon.
                                                          • +
                                                          • Tab Removal: Delete tabs that no longer serve a purpose by clicking on the icon.
                                                          • Moving Tab: Arrange tabs to your preferred position by clicking on the icon.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/text.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/text.md index ed57cb1718..c993a4654f 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/text.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/text.md @@ -67,7 +67,7 @@ Enhance the **Text** component to align with your application's requirements usi :::tip When the hyperlink directs to a file path within the `Shared` folder, it doesn't open in a new tab; instead, the browser triggers a download. -This follows the same concept as [Navigate to Shared Folder Content](../events/bindingActionToEvents#shared-folder) through the [External Link](../events/bindingActionToEvents#external-links) option. +This follows the same concept as [Navigate to Shared Folder Content](../events/bindingActionToEvents.md#shared-folder) through the [External Link](../events/bindingActionToEvents.md#external-links) option. ::: ## Data Integration diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/textinput.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/textinput.md index 88f70ce507..69c72cf178 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/textinput.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/textinput.md @@ -67,7 +67,7 @@ Within the **Text Input** component, an embedded **Input** allows for further cu
                                                            -
                                                          • Placeholder: Set a placeholder to provide users with a hint or example of the expected input. This text appears within the input field and disappears as soon as users begin typing.

                                                          • +
                                                          • Placeholder: Set a placeholder to provide users with a hint or example of the expected input. This text appears within the input field and disappears as soon as users begin typing.
                                                          • Input Type: Select the appropriate input type to match the nature of the expected data. Available types include:
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/components/uploadCustomComponents.md b/versioned_docs/version-1.0.0/studio/pageLoaders/components/uploadCustomComponents.md index b12360a77d..41d27c8ee9 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/components/uploadCustomComponents.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/components/uploadCustomComponents.md @@ -8,7 +8,7 @@ import Column from '@site/src/components/Column' ## Overview -Qodly Studio offers an upload functionality to enhance the user experience and streamline the integration of custom components. This feature enables users to upload components generated using the [`npm run build` command](../../../customComponent/setup#building-the-project). +Qodly Studio offers an upload functionality to enhance the user experience and streamline the integration of custom components. This feature enables users to upload components generated using the [`npm run build` command](../../../customComponent/setup.md#building-the-project). ## Community's Custom Components @@ -34,8 +34,7 @@ Clicking the button opens a popup with two upload methods:
                                                            -
                                                          • Users can drag and drop a component file onto the designated area within the popup.
                                                          • -
                                                            +
                                                          • Users can drag and drop a component file onto the designated area within the popup.
                                                          • Alternatively, users have the option to select a component file from their computer using a file explorer.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/events/bindingActionToEvents.md b/versioned_docs/version-1.0.0/studio/pageLoaders/events/bindingActionToEvents.md index 3350b8cc5e..6eb0ae475d 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/events/bindingActionToEvents.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/events/bindingActionToEvents.md @@ -69,7 +69,7 @@ Keep in mind that the **Create** action only creates a new, blank entity in memo
                                                            -
                                                          • Provide simple UI feedback on a Save, Reload, or Drop standard action on an entity.

                                                          • +
                                                          • Provide simple UI feedback on a Save, Reload, or Drop standard action on an entity.
                                                          • Provide simple UI feedback on a Reload, Order by, or Query standard action on an EntitySelection.
                                                          @@ -126,7 +126,7 @@ The `Base` state and `Conditional` states, however, are not included among these ::: :::tip -The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass#enablestate) is called several times with different states). +The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate) is called several times with different states). ::: :::warning @@ -212,7 +212,7 @@ The feature for providing feedback is not applicable in the context of navigatio ### External Links -In addition to navigating to Pages, Qodly Studio offers a convenient way to direct users to external links. The process follows the same steps as outlined for [associating navigation actions with events for Pages](#Pages), with a slight variation in the "Target Type" step: +In addition to navigating to Pages, Qodly Studio offers a convenient way to direct users to external links. The process follows the same steps as outlined for [associating navigation actions with events for Pages](#pages), with a slight variation in the "Target Type" step: @@ -229,8 +229,7 @@ In addition to navigating to Pages, Qodly Studio offers a convenient way to dire 2. Define Transition Method: Similar to configuring Page navigation, you can specify how the external link will open. However, for external links, you have two options:

                                                            -
                                                          • New Tab: Induce the opening of a new browser tab.
                                                          • -
                                                            +
                                                          • New Tab: Induce the opening of a new browser tab.
                                                          • Current Tab: Replace the ongoing browser tab with the chosen external link.
                                                          @@ -272,7 +271,7 @@ When the path points to a file, it doesn't open it in a new tab but instead init
                                                            -
                                                          • If your class function defines a specific variable for the result, its name will be displayed in the label within the return parameter section.

                                                          • +
                                                          • If your class function defines a specific variable for the result, its name will be displayed in the label within the return parameter section.
                                                          • However, if your class function does not specify a result name, the default label result will be used in the return parameter section.
                                                          @@ -447,10 +446,8 @@ exposed onHTTPGet function productManual(productName : string) : 4D.OutgoingMess
                                                            -
                                                          • New Browser Tab: Opens the response in a new browser tab, allowing users to view or download content like PDFs independently.
                                                          • -
                                                            -
                                                          • Current Browser Tab: Loads the content in the current tab, replacing the existing page content.
                                                          • -
                                                            +
                                                          • New Browser Tab: Opens the response in a new browser tab, allowing users to view or download content like PDFs independently.
                                                          • +
                                                          • Current Browser Tab: Loads the content in the current tab, replacing the existing page content.
                                                          • Nowhere: Ignores the response, preventing the browser from displaying any content, even if the function returns a 4D.OutgoingMessage instance. This option is useful for backend processing where a visible response is not required.
                                                          @@ -479,8 +476,7 @@ exposed onHTTPGet function productManual(productName : string) : 4D.OutgoingMess 1. The type of action:

                                                            -
                                                          • Open: This action causes the dialog to be displayed.
                                                          • -
                                                            +
                                                          • Open: This action causes the dialog to be displayed.
                                                          • Close: This action leads to the closing of the dialog.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/events/eventsManagement.md b/versioned_docs/version-1.0.0/studio/pageLoaders/events/eventsManagement.md index 7d72429c4a..1640c3b944 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/events/eventsManagement.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/events/eventsManagement.md @@ -11,7 +11,7 @@ The Contextual panel facilitates the association of class functions, navigation To bind class functions, navigation actions or standard actions with events, follow these steps: -1. **Select a Component or Qodly Source**: Begin by choosing the component or qodlysource to which you want to attach an event. This selection can be made using the canvas, the [outline](../pageLoaderOverview#outline), or, in the case of Qodly sources, either the [shared Qodly Sources](../qodlySources#from-a-namespace-shared-qodly-source) area or the [local Qodly Sources](../qodlySources#from-this-page) area. +1. **Select a Component or Qodly Source**: Begin by choosing the component or qodlysource to which you want to attach an event. This selection can be made using the canvas, the [outline](../pageLoaderOverview.md#outline), or, in the case of Qodly sources, either the [shared Qodly Sources](../qodlySources.md#from-a-namespace-shared-qodly-source) area or the [local Qodly Sources](../qodlySources.md#from-this-page) area. 2. **Expand the Contextual Panel**: Once your selection is made, expand the `Contextual panel` . It will provide you with a list of compatible events specifically tailored to your chosen component or qodlysource. @@ -185,7 +185,7 @@ For events bound to Class functions, the collapsed card displays the function si @@ -196,7 +196,7 @@ For events bound to Class functions, the collapsed card displays the function si @@ -207,7 +207,7 @@ For events bound to Class functions, the collapsed card displays the function si diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/pageLoaderOverview.md b/versioned_docs/version-1.0.0/studio/pageLoaders/pageLoaderOverview.md index 2fc20941fa..cb96ad0acf 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/pageLoaderOverview.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/pageLoaderOverview.md @@ -11,8 +11,8 @@ In Qodly, a project's groundwork starts with a Page, which acts as the primary c
                                                            -
                                                          1. On the Qodly Studio Homepage, select Page and name the new Page in the creation modal.





                                                          2. -
                                                          3. In the Explorer, simply click the plus icon located next to Pages.




                                                          4. +
                                                          5. On the Qodly Studio Homepage, select Page and name the new Page in the creation modal.

                                                          6. +
                                                          7. In the Explorer, simply click the plus icon located next to Pages.

                                                          8. While in the Page Editor, go to the New + tab and opt for Page.
                                                          @@ -43,8 +43,8 @@ The Page Editor enhances your application by providing a versatile toolkit for i 10. **Device toolbar**: Coming Soon. 11. [**Breadcrumbs**](#breadcrumbs): Displays component hierarchy for navigation. -12. [**Tabs**](../overview.md#tabs): Organizes open Pages and all other open elements, including [class functions](../coding#classes), [model](../model/model-editor-interface.md), etc. -13. [**Tooltip**](components/componentsBasics#tooltip): Offers efficient component management and manipulation actions. +12. [**Tabs**](../overview.md#tabs): Organizes open Pages and all other open elements, including [class functions](../coding.md#classes), [model](../model/model-editor-interface.md), etc. +13. [**Tooltip**](components/componentsBasics.md#tooltip): Offers efficient component management and manipulation actions. ## Breadcrumbs @@ -371,7 +371,7 @@ Explore below for specific options: |-----------------|-------------| | CSS | The CSS class contains styles influencing visual attributes, affecting the component's appearance and positioning. Refer to the [Styles Library](styling.md) for additional details. | | Color scheme | Customize the component's color palette including background colors, text colors, and box shadows. | -| Background | Assign a background image to the component with options like position, size, attachment, and repeat settings. If you use a picture stored in the [**Shared**](events/bindingActionToEvents#shared-folder) folder, you can drag and drop the file on the property area to enter its path automatically (e.g., `/$shared/visuals/background.png`). | +| Background | Assign a background image to the component with options like position, size, attachment, and repeat settings. If you use a picture stored in the [**Shared**](events/bindingActionToEvents.md#shared-folder) folder, you can drag and drop the file on the property area to enter its path automatically (e.g., `/$shared/visuals/background.png`). | | Dimensions | Define component dimensions: width, height, and other size properties for seamless integration into the webpage layout. | | Layout | Gain control over component alignment using margins and paddings. | | Appearance | The appearance attribute covers position (e.g., relative, absolute), overflow behavior, and display styles (e.g., block, flex), shaping component presentation and interaction.| diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/qodlySources.md b/versioned_docs/version-1.0.0/studio/pageLoaders/qodlySources.md index 06186cf5ab..7feab3a4e0 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/qodlySources.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/qodlySources.md @@ -16,7 +16,7 @@ Qodly Sources are integral to Qodly's architectural design, simplifying the deve ### Events and Qodly Sources -You can also attach events to qodlysources, triggering specific actions when these qodlysources are updated in the web browser. Please refer to [Qodly Source Events](events/bindingActionToEvents#qodly-source-events) for more details. +You can also attach events to qodlysources, triggering specific actions when these qodlysources are updated in the web browser. Please refer to [Qodly Source Events](events/bindingActionToEvents.md#qodly-sources) for more details. ![components](./img/QodlySource-1.2.png) @@ -75,18 +75,14 @@ Within the Page Editor, the **Qodly Sources** section conveniently organizes ava
                                                            -
                                                          • A Search area for filtering the qodlysource list.
                                                          • -
                                                            -
                                                          • The Catalog, containing:
                                                          • -
                                                            +
                                                          • A Search area for filtering the qodlysource list.
                                                          • +
                                                          • The Catalog, containing:
                                                            • -
                                                            • Dataclasses from your application. Here, you can designate entities or entity selections from your Datastore, which will be handled by the server as qodlysources.
                                                            • -
                                                              +
                                                            • Dataclasses from your application. Here, you can designate entities or entity selections from your Datastore, which will be handled by the server as qodlysources.
                                                            • Functions defined at the datastore level and within each dataclass.

                                                            -
                                                          • This Page: qodlysource exclusive to the current Page.
                                                          • -
                                                            +
                                                          • This Page: qodlysource exclusive to the current Page.
                                                          • Namespaces: Shared qodlysources organized by namespaces. You can create a namespace by clicking the + icon or when defining a shared qodlysource.
                                                          @@ -309,8 +305,7 @@ Iterative components can be bound to two types of qodlysources:
                                                            -
                                                          • Qodly Source: This is the primary qodlysource used for iterating through data. Its attributes are bound to the component, allowing you to display and work with the iterative data. Typically, this qodlysource represents an entity selection or a array.
                                                          • -
                                                            +
                                                          • Qodly Source: This is the primary qodlysource used for iterating through data. Its attributes are bound to the component, allowing you to display and work with the iterative data. Typically, this qodlysource represents an entity selection or a array.
                                                          • Selected Element: This secondary qodlysource is used to retrieve the currently selected item within the iterative component. In most cases, it represents an entity or a array element.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/states/nonConditionalState.md b/versioned_docs/version-1.0.0/studio/pageLoaders/states/nonConditionalState.md index 019fbc8055..21926c0322 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/states/nonConditionalState.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/states/nonConditionalState.md @@ -147,8 +147,8 @@ Steps to Reset a Component:
                                                            -
                                                          1. Locate the Component: Find the component in the Page outline.

                                                          2. -
                                                          3. Click the Reset Button: This button appears as a circular arrow icon next to the component.

                                                          4. +
                                                          5. Locate the Component: Find the component in the Page outline.
                                                          6. +
                                                          7. Click the Reset Button: This button appears as a circular arrow icon next to the component.
                                                          8. Confirm Reset: When prompted, confirm the action to ensure changes are reverted.
                                                          @@ -206,7 +206,7 @@ The `Base` state and `Conditional` states, however, are not included among these ::: :::tip -The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass#enablestate) is called several times with different states). +The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate) is called several times with different states). ::: :::warning @@ -218,8 +218,8 @@ If a state is initially "Non-Conditional" but later transitions to a "Conditiona In addition to the standard actions, Page object exposes several states related functions with error handling for "Conditional" states, like: -- [`WebForm.enableState`](../../../language/WebFormClass#enablestate): Applies the differences from selected states to the current Page. -- [`WebForm.disableState`](../../../language/WebFormClass#disablestate): Removes the applied differences from the Page. +- [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate): Applies the differences from selected states to the current Page. +- [`WebForm.disableState`](../../../language/WebFormClass.md#disablestate): Removes the applied differences from the Page. :::info These functions are designed to target only "Non-Conditional" states. In the event a "Conditional" state is used, the function will either return an error or not execute any action. diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/states/stateOverview.md b/versioned_docs/version-1.0.0/studio/pageLoaders/states/stateOverview.md index 363e409379..b66697e2f1 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/states/stateOverview.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/states/stateOverview.md @@ -152,8 +152,8 @@ To designate a state as the default:
                                                            -
                                                          1. Locate the State: In the "States" panel, find the state you want to set as the default..

                                                          2. -
                                                          3. Set as Default Button: Next to the state's name, you will see a checkbox labeled "Set as default state". Check this box to set the state as the default.

                                                          4. +
                                                          5. Locate the State: In the "States" panel, find the state you want to set as the default..
                                                          6. +
                                                          7. Set as Default Button: Next to the state's name, you will see a checkbox labeled "Set as default state". Check this box to set the state as the default.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/styling.md b/versioned_docs/version-1.0.0/studio/pageLoaders/styling.md index 529045b2fb..96f4093c72 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/styling.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/styling.md @@ -34,7 +34,7 @@ To add a CSS class, click the styles-library
                                                            -
                                                          • For a local CSS class: Leave the "Create as Shared" option unchecked.

                                                          • +
                                                          • For a local CSS class: Leave the "Create as Shared" option unchecked.
                                                          • For a shared CSS class: Check the "Create as Shared" option.
                                                          @@ -66,7 +66,7 @@ To add a CSS class, click the styles-library
                                                          -- Both **Local** and **Shared** CSS class codes can be modified in the [Contextual panel](../pageLoaders/pageLoaderOverview#contextual-panel) at the interface's bottom. +- Both **Local** and **Shared** CSS class codes can be modified in the [Contextual panel](../pageLoaders/pageLoaderOverview.md#contextual-panel) at the interface's bottom. styles-library diff --git a/versioned_docs/version-1.0.0/studio/pageLoaders/templates.md b/versioned_docs/version-1.0.0/studio/pageLoaders/templates.md index df870473e7..f0bba08d13 100644 --- a/versioned_docs/version-1.0.0/studio/pageLoaders/templates.md +++ b/versioned_docs/version-1.0.0/studio/pageLoaders/templates.md @@ -19,8 +19,7 @@ Navigate to the Components section and locate the Templates tab to explore the a
                                                            -
                                                          1. Navigate to the Components Section: Find the Templates tab within the Components section.
                                                          2. -
                                                            +
                                                          3. Navigate to the Components Section: Find the Templates tab within the Components section.
                                                          4. Select a Category: Once in the Templates tab, browse through the available categories. Choose the category that aligns with your project's requirements. For example, you might opt for the Business Trip category styles-library.
                                                          @@ -37,11 +36,13 @@ Navigate to the Components section and locate the Templates tab to explore the a
                                                            -
                                                          1. Explore Templates: Upon selection, a panel opens, presenting various templates.
                                                          2. -
                                                            - Each template is accompanied by a Preview Image to visualize the template's content and a Title and Description to understand the template's purpose and functionality. -

                                                            - styles-library +
                                                          3. + Explore Templates: Upon selection, a panel opens, presenting various templates. +

                                                            + Each template is accompanied by a Preview Image to visualize the template's content and a Title and Description to understand the template's purpose and functionality. +

                                                            + styles-library +
                                                          @@ -57,10 +58,8 @@ To use a template from the selected category, for instance, the datatable catego
                                                            -
                                                          1. Select a Category: Click on the desired category (e.g., Datatables, Travel, or Business). This will open a panel displaying all the templates available within that category.
                                                          2. -
                                                            -
                                                          3. Choose a Template: Browse the templates shown in the panel. Each template includes a preview image and a brief description.
                                                          4. -
                                                            +
                                                          5. Select a Category: Click on the desired category (e.g., Datatables, Travel, or Business). This will open a panel displaying all the templates available within that category.
                                                          6. +
                                                          7. Choose a Template: Browse the templates shown in the panel. Each template includes a preview image and a brief description.
                                                          8. Drag the Template (Not the Category!): Click and drag a specific template from the panel directly onto the canvas.
                                                          diff --git a/versioned_docs/version-1.0.0/studio/rendering.md b/versioned_docs/version-1.0.0/studio/rendering.md index aeec9ab5cb..714a59be83 100644 --- a/versioned_docs/version-1.0.0/studio/rendering.md +++ b/versioned_docs/version-1.0.0/studio/rendering.md @@ -23,7 +23,7 @@ In the case of Qodly Studio, rendering takes a different path compared to conven - **Rendering Trigger**: Accessing the Page directly in a web browser is not an option. Instead, the Page is "**rendered**" when users initiate the rendering process, which can be done in one of two ways: - - **Preview in Qodly Studio**: Users have the option to [preview the Page within Qodly Studio interface](#preview-in-the-studio). + - **Preview in Qodly Studio**: Users have the option to [preview the Page within Qodly Studio interface](#preview-in-qodly-studio). - **Dedicated Browser Tab**: Alternatively, users can opt to [render the Page in a separate browser tab](#preview-in-a-browser-window). @@ -157,7 +157,7 @@ Understanding the lifecycle of a page is crucial for diagnosing and fixing rende - **Initializing Shared Qodly Sources**: During rendering, shared Qodly sources are initialized. These sources provide data that multiple parts of the page can access and use. :::info - Since Qodly treats each page load or tab navigation as a new rendering cycle, these shared sources are reinitialized every time the page renders. This ensures that the page always reflects the most up-to-date data. However, this also means that Shared Qodly Sources are reset during each re-render **unless navigation is done through a page loader**. When [**Binding Navigation Actions to Events**](./pageLoaders/events/bindingActionToEvents#binding-navigation-actions-to-events) and using a **Page Loader** or **Page Loader (Self)**, the Shared Qodly Source persist across navigations. The [Page Loader](./pageLoaders/pageLoaderOverview) manages state in a way that prevents full reinitialization, maintaining the Shared Qodly Sources and ensuring continuity across navigations without resetting the data. + Since Qodly treats each page load or tab navigation as a new rendering cycle, these shared sources are reinitialized every time the page renders. This ensures that the page always reflects the most up-to-date data. However, this also means that Shared Qodly Sources are reset during each re-render **unless navigation is done through a page loader**. When [**Binding Navigation Actions to Events**](./pageLoaders/events/bindingActionToEvents.md#binding-navigation-actions-to-events) and using a **Page Loader** or **Page Loader (Self)**, the Shared Qodly Source persist across navigations. The [Page Loader](./pageLoaders/pageLoaderOverview) manages state in a way that prevents full reinitialization, maintaining the Shared Qodly Sources and ensuring continuity across navigations without resetting the data. ::: - **Initializing Local Qodly Sources**: Following the initialization of shared Qodly sources, local Qodly sources specific to individual components are set up, ensuring each component has access to the data it needs. diff --git a/versioned_docs/version-1.0.0/studio/roles/dataClassPermissions.md b/versioned_docs/version-1.0.0/studio/roles/dataClassPermissions.md index 84f489754e..ce5e6168b9 100644 --- a/versioned_docs/version-1.0.0/studio/roles/dataClassPermissions.md +++ b/versioned_docs/version-1.0.0/studio/roles/dataClassPermissions.md @@ -23,7 +23,7 @@ The
                                                            -
                                                          • If a privilege is both purple-tagged and accompanied by the icon, it indicates the inclusion of an extra privilege.
                                                          • -
                                                            - Obtaining permission for that resource requires having one of the additional privileges. +
                                                          • + If a privilege is both purple-tagged and accompanied by the icon, it indicates the inclusion of an extra privilege. +
                                                            + Obtaining permission for that resource requires having one of the additional privileges. +
                                                          diff --git a/versioned_docs/version-1.1.0/api/$catalog.md b/versioned_docs/version-1.1.0/api/$catalog.md index 69146286df..59b18ca142 100644 --- a/versioned_docs/version-1.1.0/api/$catalog.md +++ b/versioned_docs/version-1.1.0/api/$catalog.md @@ -71,7 +71,7 @@ Each dataclass listed by the `$catalog` endpoint returns the following propertie :::tip -Only the exposed dataclasses are shown in this list for your project's datastore. For more information, please refer to [Configuring Data Access](./overview#configuring-data-access) section. +Only the exposed dataclasses are shown in this list for your project's datastore. For more information, please refer to [Configuring Data Access](./overview.md#configuring-data-access) section. ::: ### Sample Usage Example in Postman diff --git a/versioned_docs/version-1.1.0/api/$querypath.md b/versioned_docs/version-1.1.0/api/$querypath.md index c0a12eeb99..cc4a50cde2 100644 --- a/versioned_docs/version-1.1.0/api/$querypath.md +++ b/versioned_docs/version-1.1.0/api/$querypath.md @@ -10,7 +10,7 @@ title: $querypath The `$querypath` endpoint allows developers to understand how queries are executed in the backend. It provides a step-by-step breakdown of the query execution, showing each operation, its performance, and the results obtained at each stage. It also reveales optimization techniques and the exact path taken by the server to fetch the required data. :::info -For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass#about-queryplan-and-querypath) documentation. +For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass.md#about-queryplan-and-querypath) documentation. ::: ### Syntax diff --git a/versioned_docs/version-1.1.0/api/$queryplan.md b/versioned_docs/version-1.1.0/api/$queryplan.md index 5187fdfb18..f0071a8bfa 100644 --- a/versioned_docs/version-1.1.0/api/$queryplan.md +++ b/versioned_docs/version-1.1.0/api/$queryplan.md @@ -12,7 +12,7 @@ title: $queryplan The `$queryplan` endpoint is designed to provide insights into the execution strategy of queries processed by the server. This endpoint helps developers and database administrators to analyze and optimize query performance by returning a detailed breakdown of the query execution plan. :::info -For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass#about-queryplan-and-querypath) documentation. +For additional information, please consult the ["About queryPlan and queryPath"](../language/DataClassClass.md#about-queryplan-and-querypath) documentation. ::: ### Syntax diff --git a/versioned_docs/version-1.1.0/api/$singleton.md b/versioned_docs/version-1.1.0/api/$singleton.md index f4fb869409..a008ad55fd 100644 --- a/versioned_docs/version-1.1.0/api/$singleton.md +++ b/versioned_docs/version-1.1.0/api/$singleton.md @@ -85,7 +85,7 @@ exposed function sayHello (value : string) :::note -The `mySingleton` class and `sayHello` function are listed when you call the [`$catalog`]($catalog.md#singleton) command. +The `mySingleton` class and `sayHello` function are listed when you call the [`$catalog`]($catalog.md#singletons) command. ::: diff --git a/versioned_docs/version-1.1.0/api/classFunctionsOverview.md b/versioned_docs/version-1.1.0/api/classFunctionsOverview.md index 92159a7bdc..ce45104ed7 100644 --- a/versioned_docs/version-1.1.0/api/classFunctionsOverview.md +++ b/versioned_docs/version-1.1.0/api/classFunctionsOverview.md @@ -24,7 +24,7 @@ exposed function getTest() : string ::: :::info -For more details, refer to the section on [Exposed vs. Non-Exposed Functions](../orda/data-model#exposed-vs-non-exposed-functions). +For more details, refer to the section on [Exposed vs. Non-Exposed Functions](../orda/data-model.md#exposed-vs-non-exposed-functions). ::: ### `onHttpGet` Functions @@ -78,10 +78,10 @@ The ORDA REST API provides several endpoints to call class functions: |Class function|Syntax| |---|----| -|[Datastore Class](../orda/data-model#datastore)|`/rest/$catalog/DataStoreClassFunction`| -|[Dataclass Class](../orda/data-model#dataclass)|`/rest/{{dataClass}}/DataClassClassFunction`| -|[EntitySelection Class](../orda/data-model#entityselection-class)|`/rest/{{dataClass}}/EntitySelectionClassFunction`| -|[Entity Class](../orda/data-model#entity-class)|`/rest/{{dataClass}}(key)/EntityClassFunction`| +|[Datastore Class](../orda/data-model.md#datastore)|`/rest/$catalog/DataStoreClassFunction`| +|[Dataclass Class](../orda/data-model.md#dataclass)|`/rest/{{dataClass}}/DataClassClassFunction`| +|[EntitySelection Class](../orda/data-model.md#entityselection-class)|`/rest/{{dataClass}}/EntitySelectionClassFunction`| +|[Entity Class](../orda/data-model.md#entity-class)|`/rest/{{dataClass}}(key)/EntityClassFunction`| |[Singleton class](../language/basics/lang-classes.md#singleton-classes)|`/rest/$singleton/SingletonClass/SingletonClassFunction` (see [$singleton page]($singleton.md))| diff --git a/versioned_docs/version-1.1.0/api/dataclassEndpoints.md b/versioned_docs/version-1.1.0/api/dataclassEndpoints.md index e8236dddb1..d72d0b4e33 100644 --- a/versioned_docs/version-1.1.0/api/dataclassEndpoints.md +++ b/versioned_docs/version-1.1.0/api/dataclassEndpoints.md @@ -153,7 +153,7 @@ The response structure for the `/rest/{{dataClass}}[2]` endpoint looks something ``` -### rest/dataClass:attribute(value) +### rest/dataClass\:attribute(value) #### Purpose diff --git a/versioned_docs/version-1.1.0/api/overview.md b/versioned_docs/version-1.1.0/api/overview.md index 7690ac73bd..5f41349707 100644 --- a/versioned_docs/version-1.1.0/api/overview.md +++ b/versioned_docs/version-1.1.0/api/overview.md @@ -28,8 +28,8 @@ To restrict access to sensitive dataclasses such as those containing user creden
                                                            -
                                                          1. Open the Model Editor.

                                                          2. -
                                                          3. Access the properties panel of the dataclass you intend to modify.

                                                          4. +
                                                          5. Open the Model Editor.
                                                          6. +
                                                          7. Access the properties panel of the dataclass you intend to modify.
                                                          8. Enable the Do not Expose as REST option within the Scope property.
                                                          @@ -46,7 +46,7 @@ By default, attributes within these dataclasses are also exposed. To limit expos
                                                            -
                                                          1. In the Model Editor, select the attribute you intend to hide.

                                                          2. +
                                                          3. In the Model Editor, select the attribute you intend to hide.
                                                          4. Enable the Do not Expose as REST option in the Scope property.
                                                          diff --git a/versioned_docs/version-1.1.0/cloud/apiKeys.md b/versioned_docs/version-1.1.0/cloud/apiKeys.md index 8e81018153..1f1da8674e 100644 --- a/versioned_docs/version-1.1.0/cloud/apiKeys.md +++ b/versioned_docs/version-1.1.0/cloud/apiKeys.md @@ -93,9 +93,9 @@ In the API management section, each key includes options to:
                                                            -
                                                          • Show API Key: This button reveals the API key in the interface and includes a copy button , enabling easy duplication of the API key for use in configuring your application or services.

                                                          • -
                                                          • Delete API Key: Positioned next to the API key, this button removes the key upon confirmation, safeguarding against unintended deletions.

                                                          • -
                                                          • Edit API Key: Also adjacent to the API display, the edit button opens a configuration dialog for modifying the API key's details.

                                                          • +
                                                          • Show API Key: This button reveals the API key in the interface and includes a copy button , enabling easy duplication of the API key for use in configuring your application or services.
                                                          • +
                                                          • Delete API Key: Positioned next to the API key, this button removes the key upon confirmation, safeguarding against unintended deletions.
                                                          • +
                                                          • Edit API Key: Also adjacent to the API display, the edit button opens a configuration dialog for modifying the API key's details.
                                                          diff --git a/versioned_docs/version-1.1.0/cloud/billingSubscriptionManagement.md b/versioned_docs/version-1.1.0/cloud/billingSubscriptionManagement.md index c554175d96..b62ca633ea 100644 --- a/versioned_docs/version-1.1.0/cloud/billingSubscriptionManagement.md +++ b/versioned_docs/version-1.1.0/cloud/billingSubscriptionManagement.md @@ -20,10 +20,8 @@ The **Next Invoice** section displays the amount and date of your next scheduled
                                                            -
                                                          • Amount: The total cost of the upcoming invoice.
                                                          • -
                                                            -
                                                          • Billing Date: The scheduled date for the next payment.
                                                          • -
                                                            +
                                                          • Amount: The total cost of the upcoming invoice.
                                                          • +
                                                          • Billing Date: The scheduled date for the next payment.
                                                          • View Details: Opens a breakdown of the invoice, showing the following details:
                                                          @@ -36,12 +34,9 @@ The **Next Invoice** section displays the amount and date of your next scheduled
                                                              -
                                                            • Description: Items included in the subscription, such as: Qodly Power (computing resources), Storage extensions, and the Internet outbound data transfer packs.
                                                            • -
                                                              -
                                                            • Quantity: Amount of each resource being billed.
                                                            • -
                                                              -
                                                            • Unit Price: The price per unit of each resource.
                                                            • -
                                                              +
                                                            • Description: Items included in the subscription, such as: Qodly Power (computing resources), Storage extensions, and the Internet outbound data transfer packs.
                                                            • +
                                                            • Quantity: Amount of each resource being billed.
                                                            • +
                                                            • Unit Price: The price per unit of each resource.
                                                            • Total: The cost for each resource and the total sum of all charges.
                                                          @@ -57,12 +52,9 @@ This section provides the status and cycle of your subscription, along with the
                                                            -
                                                          • Status: Indicates whether the subscription is active or inactive.
                                                          • -
                                                            -
                                                          • Start Date: The date your subscription began.
                                                          • -
                                                            -
                                                          • Billing Cycle Start/End: Defines the current subscription cycle's start and end dates.
                                                          • -
                                                            +
                                                          • Status: Indicates whether the subscription is active or inactive.
                                                          • +
                                                          • Start Date: The date your subscription began.
                                                          • +
                                                          • Billing Cycle Start/End: Defines the current subscription cycle's start and end dates.
                                                          • Payment Method: Displays the card currently linked to your subscription.
                                                          @@ -79,12 +71,9 @@ Clicking the Change Payment Method card
                                                            -
                                                          • Email: The associated email address.
                                                          • -
                                                            -
                                                          • Card Number: The new payment card details.
                                                          • -
                                                            -
                                                          • Expiration Date and Security Code (CVC).
                                                          • -
                                                            +
                                                          • Email: The associated email address.
                                                          • +
                                                          • Card Number: The new payment card details.
                                                          • +
                                                          • Expiration Date and Security Code (CVC).
                                                          • Country: The billing country for the card.
                                                          @@ -114,8 +103,7 @@ The **Invoices** section lists past invoices with downloadable options for recei Clicking the Download Invoice button redirects you to a detailed invoice page where you can:

                                                            -
                                                          • Download Invoice: Get a PDF copy of the invoice for record-keeping.
                                                          • -
                                                            +
                                                          • Download Invoice: Get a PDF copy of the invoice for record-keeping.
                                                          • Download Receipt: Obtain a receipt for accounting or reimbursement purposes.
                                                          @@ -201,10 +189,8 @@ The **Delete**
                                                            -
                                                          • Available for all environments except Development.
                                                          • -
                                                            -
                                                          • Requires entering the environment name in a confirmation dialog to prevent accidental deletions.
                                                          • -
                                                            +
                                                          • Available for all environments except Development.
                                                          • +
                                                          • Requires entering the environment name in a confirmation dialog to prevent accidental deletions.
                                                          • Once deleted, the environment and its associated resources are removed, and the subscription is updated.
                                                          diff --git a/versioned_docs/version-1.1.0/cloud/environmentsOverview.md b/versioned_docs/version-1.1.0/cloud/environmentsOverview.md index de1998fee4..3c3187b929 100644 --- a/versioned_docs/version-1.1.0/cloud/environmentsOverview.md +++ b/versioned_docs/version-1.1.0/cloud/environmentsOverview.md @@ -30,8 +30,8 @@ For every environment, you can access your files on the server using the **Secur
                                                            -
                                                          1. Click the Access files button: Navigate to the specific environment you want to manage and click the Access files button.

                                                          2. -
                                                          3. Open your FTP Client: Use your preferred FTP client (e.g., Filezilla). This client will allow you to manage and transfer files securely.

                                                          4. +
                                                          5. Click the Access files button: Navigate to the specific environment you want to manage and click the Access files button.
                                                          6. +
                                                          7. Open your FTP Client: Use your preferred FTP client (e.g., Filezilla). This client will allow you to manage and transfer files securely.
                                                          diff --git a/versioned_docs/version-1.1.0/cloud/myApps.md b/versioned_docs/version-1.1.0/cloud/myApps.md index 115d70bc7c..6c32e9f85a 100644 --- a/versioned_docs/version-1.1.0/cloud/myApps.md +++ b/versioned_docs/version-1.1.0/cloud/myApps.md @@ -19,8 +19,7 @@ To create an app in the Console, follow the steps below, using the provided scre
                                                            -
                                                          1. Go to the My Apps section in the Console.
                                                          2. -
                                                            +
                                                          3. Go to the My Apps section in the Console.
                                                          4. Click the New App button on the right side of the page or in the sidebar to begin the application creation process.
                                                          @@ -86,8 +85,7 @@ The next section allows you to configure resources for each environment associat
                                                            -
                                                          1. For each new environment, provide a Name and a Description.
                                                          2. -
                                                            +
                                                          3. For each new environment, provide a Name and a Description.
                                                          4. Customize the configuration separately for each environment, allowing you to tailor resources to specific development stages.
                                                          @@ -155,8 +153,7 @@ This section displays all pending invitations for transferring app ownership. Fo If the recipient chooses to decline:

                                                            -
                                                          • They are shown a Decline Payment page, allowing them to reject the invitation.
                                                          • -

                                                            +
                                                          • They are shown a Decline Payment page, allowing them to reject the invitation.

                                                          • Upon declining, the app is permanently deleted, and both parties are notified.
                                                          diff --git a/versioned_docs/version-1.1.0/cloud/resourceMonitoring.md b/versioned_docs/version-1.1.0/cloud/resourceMonitoring.md index 6c2ba3fd1f..9585176af9 100644 --- a/versioned_docs/version-1.1.0/cloud/resourceMonitoring.md +++ b/versioned_docs/version-1.1.0/cloud/resourceMonitoring.md @@ -26,8 +26,7 @@ The **General Tab** contains core information and key actions, providing an at-a The Usage card contains:

                                                            -
                                                          • Disk Usage: Shows the percentage of disk storage currently used by the environment, useful for tracking storage limits and understanding data volume.
                                                          • -
                                                            +
                                                          • Disk Usage: Shows the percentage of disk storage currently used by the environment, useful for tracking storage limits and understanding data volume.
                                                          • Memory Usage: Displays the memory consumption percentage, allowing you to monitor memory use and scale resources as needed.
                                                          @@ -54,14 +53,11 @@ The **General Tab** contains core information and key actions, providing an at-a The Server Status card contains:

                                                            -
                                                          • Status: Whether the server is operational and accessible.
                                                          • -
                                                            +
                                                          • Status: Whether the server is operational and accessible.
                                                          • Control Buttons:
                                                            • -
                                                            • Stop: Stops the server, making it unavailable temporarily.
                                                            • -
                                                              -
                                                            • Restart: Restarts the server, which can be useful for troubleshooting or applying configurations.
                                                            • -
                                                              +
                                                            • Stop: Stops the server, making it unavailable temporarily.
                                                            • +
                                                            • Restart: Restarts the server, which can be useful for troubleshooting or applying configurations.
                                                            • Refresh: Updates the server status display, allowing you to check the latest status.
                                                          @@ -132,8 +128,7 @@ Allows you to use a custom domain for the application in deployment environments
                                                            -
                                                          • Add Custom Domain:
                                                          • -
                                                            +
                                                          • Add Custom Domain:
                                                            • Click the Add Custom Domain button, which opens a dialog for setting up your custom domain.

                                                            • @@ -151,8 +146,7 @@ Allows you to use a custom domain for the application in deployment environments
                                                                -
                                                              • Using Your Own SSL Certificate: For enhanced security, you can add a custom SSL certificate by selecting "I want to use my own certificate file," which opens fields to enter.
                                                              • -
                                                                +
                                                              • Using Your Own SSL Certificate: For enhanced security, you can add a custom SSL certificate by selecting "I want to use my own certificate file," which opens fields to enter.
                                                                • Certificate Body: Paste the content of your SSL certificate.

                                                                • @@ -180,10 +174,8 @@ The **Activity** section logs significant events and actions taken within the en Each activity entry includes:

                                                                    -
                                                                  • Description: Summarizes the action taken (e.g., server start).
                                                                  • -
                                                                    -
                                                                  • Timestamp: Provides the date and time the action occurred.
                                                                  • -
                                                                    +
                                                                  • Description: Summarizes the action taken (e.g., server start).
                                                                  • +
                                                                  • Timestamp: Provides the date and time the action occurred.
                                                                  • User: Indicates which user performed the action.
                                                                  diff --git a/versioned_docs/version-1.1.0/cloud/sandbox.md b/versioned_docs/version-1.1.0/cloud/sandbox.md index 3b33218a0b..3c8ee006ce 100644 --- a/versioned_docs/version-1.1.0/cloud/sandbox.md +++ b/versioned_docs/version-1.1.0/cloud/sandbox.md @@ -37,8 +37,7 @@ To create a new Sandbox, follow these steps:
                                                                    -
                                                                  • Access the Console: Open the Console.
                                                                  • -
                                                                    +
                                                                  • Access the Console: Open the Console.
                                                                  • Click on "New Sandbox": Select the "New Sandbox" button to initiate the creation process.
                                                                  diff --git a/versioned_docs/version-1.1.0/cloud/userAccountManagement.md b/versioned_docs/version-1.1.0/cloud/userAccountManagement.md index 3c53576e53..e6eec0243d 100644 --- a/versioned_docs/version-1.1.0/cloud/userAccountManagement.md +++ b/versioned_docs/version-1.1.0/cloud/userAccountManagement.md @@ -48,12 +48,9 @@ If you need to add a new user and assign them to multiple environments:
                                                                    -
                                                                  • First Name and Last Name (optional).
                                                                  • -
                                                                    -
                                                                  • Email Address (mandatory).
                                                                  • -
                                                                    -
                                                                  • Select an Environment to associate the user with.
                                                                  • -
                                                                    +
                                                                  • First Name and Last Name (optional).
                                                                  • +
                                                                  • Email Address (mandatory).
                                                                  • +
                                                                  • Select an Environment to associate the user with.
                                                                  • Assign a Profile (e.g., Admin, Viewer).
                                                                  @@ -80,10 +77,8 @@ Editing a user's details in the Users Page is environment-specific, meaning you
                                                                    -
                                                                  1. Navigate to the Users Page and identify the user whose details you want to edit.
                                                                  2. -
                                                                    -
                                                                  3. Expand the user card to reveal their assigned environments.
                                                                  4. -
                                                                    +
                                                                  5. Navigate to the Users Page and identify the user whose details you want to edit.
                                                                  6. +
                                                                  7. Expand the user card to reveal their assigned environments.
                                                                  8. Click the button next to the specific environment where the user is assigned.
                                                                  @@ -95,8 +90,7 @@ Editing a user's details in the Users Page is environment-specific, meaning you
                                                                    -
                                                                  1. Modify the following fields as needed:
                                                                  2. -
                                                                    +
                                                                  3. Modify the following fields as needed:
                                                                    • First Name and Last Name.

                                                                    • @@ -127,8 +121,7 @@ To completely delete a user from the application, removing them from all environ
                                                                        -
                                                                      1. Navigate to the Users Page and identify the user you want to delete.
                                                                      2. -
                                                                        +
                                                                      3. Navigate to the Users Page and identify the user you want to delete.
                                                                      4. Click the Delete User button located on the user card.
                                                                      @@ -162,10 +155,8 @@ Removing a user from a specific environment can be done through the Users Page,
                                                                        -
                                                                      1. Navigate to the Users Page and identify the user you want to remove.
                                                                      2. -
                                                                        -
                                                                      3. Expand the user card to view all the environments they are assigned to.
                                                                      4. -
                                                                        +
                                                                      5. Navigate to the Users Page and identify the user you want to remove.
                                                                      6. +
                                                                      7. Expand the user card to view all the environments they are assigned to.
                                                                      8. Click the button next to the specific environment where the user is assigned.
                                                                      @@ -203,8 +194,7 @@ Adding a user to a specific environment from the **Users Page** is straightforwa
                                                                        -
                                                                      1. Navigate to the Users Page and identify the user you want to assign to another environment.
                                                                      2. -
                                                                        +
                                                                      3. Navigate to the Users Page and identify the user you want to assign to another environment.
                                                                      4. Click the + Environment button located on the user card.
                                                                      @@ -216,8 +206,7 @@ Adding a user to a specific environment from the **Users Page** is straightforwa
                                                                        -
                                                                      1. Fill in the details in the Add User to Environment dialog:
                                                                      2. -
                                                                        +
                                                                      3. Fill in the details in the Add User to Environment dialog:
                                                                        • The Email Address field will auto-populate with the selected user's email.

                                                                        • @@ -260,16 +249,14 @@ To add a new user or assign an existing user to the environment you’re managin
                                                                            -
                                                                          • Existing User:
                                                                          • -
                                                                            +
                                                                          • Existing User:
                                                                            • Choose a user from the dropdown, which lists all users previously added to the Users Page.

                                                                            • These users could have been added through the Users Page or other environments’ Team Tabs.

                                                                            -
                                                                          • New User:
                                                                          • -
                                                                            +
                                                                          • New User:
                                                                            • Enter the Email Address of the user you want to add for the first time.
                                                                            @@ -283,11 +270,9 @@ To add a new user or assign an existing user to the environment you’re managin
                                                                              -
                                                                            1. Fill in the following details:
                                                                            2. -
                                                                              +
                                                                            3. Fill in the following details:
                                                                              • -
                                                                              • First Name and Last Name (optional).
                                                                              • -
                                                                                +
                                                                              • First Name and Last Name (optional).
                                                                              • Assign a Profile (e.g., Admin, Viewer).
                                                                            @@ -314,8 +299,7 @@ Editing a user’s details in the Team Tab is specific to the environment where
                                                                              -
                                                                            1. Open the Team Tab from the selected environment (e.g., Dev, Staging, Production.
                                                                            2. -
                                                                              +
                                                                            3. Open the Team Tab from the selected environment (e.g., Dev, Staging, Production.
                                                                            4. Click the button next to the user.
                                                                            @@ -327,8 +311,7 @@ Editing a user’s details in the Team Tab is specific to the environment where
                                                                              -
                                                                            1. Modify the following fields as needed:
                                                                            2. -
                                                                              +
                                                                            3. Modify the following fields as needed:
                                                                              • First Name and Last Name.

                                                                              • @@ -365,8 +348,7 @@ The Team Tab allows you to remove a user from a specific environment without aff
                                                                                  -
                                                                                1. Navigate to the Team Tab from the selected environment (e.g., Dev, Staging, Production) and identify the user you want to remove.
                                                                                2. -
                                                                                  +
                                                                                3. Navigate to the Team Tab from the selected environment (e.g., Dev, Staging, Production) and identify the user you want to remove.
                                                                                4. Click the button next to the specific user.
                                                                                diff --git a/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.2.16.mdx b/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.2.16.mdx index 95f3187982..21f145526e 100644 --- a/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.2.16.mdx +++ b/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.2.16.mdx @@ -21,7 +21,8 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| + ### *Returns* @@ -39,7 +40,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.2.24.mdx b/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.2.24.mdx index f52658c0ca..d640dc997b 100644 --- a/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.2.24.mdx +++ b/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.2.24.mdx @@ -21,9 +21,8 @@ A hook that provides state information and actions for managing Qodly Studio pan `{StudioPanelReturnType}` - An object containing the type, open state, current state, and actions to manipulate Qodly Studio panel. :::info -The `useStudioPanel` function returns an object with properties [`type`](#type), [`isOpen`](#isopen), [`current`](#current-1), and `actions` to manipulate Qodly Studio panel state. - -The `actions` object includes methods for [updating the state](#setstate), [setting the current type and value](#setcurrent), [closing](#close), [opening](#open), and [opening with a specific type and current value](#openwithcurrent). +The `useStudioPanel` function returns an object with properties `type`, `isOpen`, `current`, and `actions` to manipulate Qodly Studio panel state. +The `actions` object includes methods for `updating the state`, `setting the current type and value`, `closing`, `opening`, and `opening with a specific type and current value`. ::: @@ -50,7 +49,7 @@ The `useRenderer` function returns a tuple with two elements: - `HTMLElement | null`: The current DOM element or null. This represents the element to which the renderer is currently connected. - An object providing methods to: -- [Connect the renderer](#connectrenderer) +- Connect the renderer - `eventsToHandle`: An object mapping event names to their corresponding handler functions. @@ -69,7 +68,7 @@ A hook that provides methods and properties related to the layout mode of a Page `{LayoutReturnType}` - An object containing properties and methods related to the layout mode. :::info -The useLayout function returns an object with properties [`layout`](#layout) and [`isAiryMode`](#isairymode), along with methods `getClassName` and `toggle`. +The useLayout function returns an object with properties `layout` and `isAiryMode`, along with methods `getClassName` and `toggle`. ::: @@ -135,7 +134,8 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| + ### *Returns* @@ -144,7 +144,7 @@ A hook that facilitates managing datasources and current elements associated wit :::info The `useSources` function returns an object with the following structure: - `sources`: An object containing `datasource` and `currentElement`, representing the current values of datasources and current elements. -- `actions`: An object containing methods for manipulating datasource values, including [`setDatasourceValue`](#actionssetdatasourcevalue), [`setCurrentElementValue`](#actionssetcurrentelementvalue), [`fetchDatasourceValue`](#actionsfetchdatasourcevalue), and [`fetchCurrentElementValue`](#actionsfetchcurrentelementvalue). +- `actions`: An object containing methods for manipulating datasource values, including `setDatasourceValue`, `setCurrentElementValue`, `fetchDatasourceValue`, and `fetchCurrentElementValue`. ::: @@ -159,7 +159,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.3.20.mdx b/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.3.20.mdx index 80e8e04d3b..750c9286f2 100644 --- a/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.3.20.mdx +++ b/versioned_docs/version-1.1.0/customComponent/api-reference/webform-editor/v0.3.20.mdx @@ -21,9 +21,9 @@ A hook that provides state information and actions for managing the studio panel `{StudioPanelReturnType}` - An object containing the type, open state, current state, and actions to manipulate the studio panel. :::info -The `useStudioPanel` function returns an object with properties [`type`](#type), [`isOpen`](#isopen), [`current`](#current-1), and `actions` to manipulate the studio panel state. +The `useStudioPanel` function returns an object with properties `type`, `isOpen`, `current`, and `actions` to manipulate the studio panel state. -The `actions` object includes methods for [updating the state](#setstate), [setting the current type and value](#setcurrent), [closing](#close), [opening](#open), and [opening with a specific type and current value](#openwithcurrent). +The `actions` object includes methods for `updating the state`, `setting the current type and value`, `closing`, `opening`, and `opening with a specific type and current value`. ::: @@ -50,7 +50,7 @@ The `useRenderer` function returns a tuple with two elements: - `HTMLElement | null`: The current DOM element or null. This represents the element to which the renderer is currently connected. - An object providing methods to: -- [Connect the renderer](#connectrenderer) +- Connect the renderer - `eventsToHandle`: An object mapping event names to their corresponding handler functions. @@ -69,7 +69,7 @@ A hook that provides methods and properties related to the layout mode of a webf `{LayoutReturnType}` - An object containing properties and methods related to the layout mode. :::info -The useLayout function returns an object with properties [`layout`](#layout) and [`isAiryMode`](#isairymode), along with methods `getClassName` and `toggle`. +The useLayout function returns an object with properties `layout` and `isAiryMode`, along with methods `getClassName` and `toggle`. ::: @@ -135,7 +135,8 @@ A hook that facilitates managing datasources and current elements associated wit | param | description | |-------|-------------| -|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as [`datasourceChange`](#datasourcechange), [`currentElementChange`](#currentelementchange) and [`acceptIteratorSel`](#acceptiteratorsel).| +|options|`UseSourcesOptions` An object allowing configuration of the hook behavior. Includes options such as `datasourceChange`, `currentElementChange` and `acceptIteratorSel`.| + ### *Returns* @@ -144,7 +145,7 @@ A hook that facilitates managing datasources and current elements associated wit :::info The `useSources` function returns an object with the following structure: - `sources`: An object containing `datasource` and `currentElement`, representing the current values of datasources and current elements. -- `actions`: An object containing methods for manipulating datasource values, including [`getDatasource`](#actionsgetdatasource), [`setDatasourceValue`](#actionssetdatasourcevalue), [`setCurrentElementValue`](#actionssetcurrentelementvalue), [`fetchDatasourceValue`](#actionsfetchdatasourcevalue), and [`fetchCurrentElementValue`](#actionsfetchcurrentelementvalue). +- `actions`: An object containing methods for manipulating datasource values, including `getDatasource`, `setDatasourceValue`, `setCurrentElementValue`, `fetchDatasourceValue`, and `fetchCurrentElementValue`. ::: @@ -205,7 +206,7 @@ A hook that enhances the functionality of a Craft.js node, providing features fo | param | description | |-------|-------------| |collector|(optional) `(args: Node) => K` | A function to collect additional information from the node.| -|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties ([`stopPropagation`](#stoppropagation) and [`onDrop`](#ondrop)) to customize the hook's behavior.| +|options|(optional) `{ stopPropagation?: (data: IDataTransfer) => boolean; onDrop?: (e: any) => void; }` | An object with optional properties (`stopPropagation`and `onDrop`) to customize the hook's behavior.| ### *Returns* diff --git a/versioned_docs/version-1.1.0/customComponent/setup.md b/versioned_docs/version-1.1.0/customComponent/setup.md index 8d80f2016e..5cc8dc7f37 100644 --- a/versioned_docs/version-1.1.0/customComponent/setup.md +++ b/versioned_docs/version-1.1.0/customComponent/setup.md @@ -215,4 +215,4 @@ The `components` directory serves as the repository for custom components: While developers have the flexibility to implement their initial component in their preferred manner, adhering to the suggested structure is recommended ::: -Refer to the [custom component structure](./structure#custom-component-repository) section for detailed information. +Refer to the [custom component structure](./structure.md#custom-component-repository) section for detailed information. diff --git a/versioned_docs/version-1.1.0/customComponent/structure.md b/versioned_docs/version-1.1.0/customComponent/structure.md index de84bae857..450d487442 100644 --- a/versioned_docs/version-1.1.0/customComponent/structure.md +++ b/versioned_docs/version-1.1.0/customComponent/structure.md @@ -12,28 +12,28 @@ The project structure is organized to facilitate the development and maintenance - **src**: The main source code directory. - [**components**](#custom-component-repository): The directory for custom components. - **ExampleComponent**: An example custom component directory. - - [**ExampleComponent.build.tsx**](#examplecomponentbuildtsx-file): Component build logic. - - [**ExampleComponent.render.tsx**](#examplecomponentrendertsx-file): Component rendering logic. - - [**ExampleComponent.settings.tsx**](#examplecomponentsettingstsx-file): Component settings. - - [**ExampleComponent.config.tsx**](#examplecomponentbuildconfig-file): Configuration for the component. + - [**ExampleComponent.build.tsx**](#examplecomponentbuildtsx): Component build logic. + - [**ExampleComponent.render.tsx**](#examplecomponentrendertsx): Component rendering logic. + - [**ExampleComponent.settings.tsx**](#examplecomponentsettingstsx): Component settings. + - [**ExampleComponent.config.tsx**](#examplecomponentconfigtsx): Configuration for the component. - [**index.tsx**](#indextsx): Entry point for the component. - - [**index.tsx**](#indextsx-file-in-components-repository): The entry point for the components directory. - - [**App.tsx**](#apptsx-file): Main application component. + - [**index.tsx**](#indextsx): The entry point for the components directory. + - [**App.tsx**](#apptsx): Main application component. - **index.css**: Global CSS styles. - - [**main.tsx**](#maintsx-file): Entry point for the application. + - [**main.tsx**](#maintsx): Entry point for the application. - **vite-env.d.ts**: TypeScript declaration file for Vite. - **.eslintrc.cjs**: ESLint configuration file. - **.gitignore**: Specifies intentionally untracked files that Git should ignore. - **.prettierignore**: Specifies files and directories to ignore for formatting using Prettier. - **.prettierrc**: Configuration file for Prettier. -- [**index.html**](#indexhtml-file): Main HTML file for the application. +- [**index.html**](#indexhtml): Main HTML file for the application. - **package-lock.json**: Lock file for npm dependencies. - **package.json**: Project metadata and npm dependencies. -- [**proxy.config.ts**](#proxyconfigts-file): Configuration for the development server proxy. +- [**proxy.config.ts**](#proxyconfigts): Configuration for the development server proxy. - **README.md**: Project documentation. - **tsconfig.json**: TypeScript configuration file. - **tsconfig.node.json**: TypeScript configuration file for Node.js. -- [**vite.config.ts**](#viteconfigts-file): Vite configuration file. +- [**vite.config.ts**](#viteconfigts): Vite configuration file. creates and returns a `cs.className` object which is a new instance of the class on which it is called. This function is automatically available on all classes from the [`cs` class store](basics/lang-classes.md#cs). -You can pass one or more optional *param* parameters, which will be passed to the [class constructor](basics/lang-classes#constructor) function (if any) in the className class definition. Within the constructor function, the [`This`](basics/lang-classes.md#this) is bound to the new object being constructed. +You can pass one or more optional *param* parameters, which will be passed to the [class constructor](basics/lang-classes.md#constructor) function (if any) in the className class definition. Within the constructor function, the [`This`](basics/lang-classes.md#this) is bound to the new object being constructed. - If `.new()` is called on a non-existing class, an error is returned. - If `.new()` is called on a [singleton class](basics/lang-classes.md#singleton-classes) that has already been instantiated, the singleton instance is returned, not a new instance. @@ -165,7 +165,7 @@ person = cs.Person.new("John","Doe",40) The `.superclass` property returns the parent class of the class. A superclass can be a `4D.Class` object, or a `cs.className` object. If the class does not have a parent class, the property returns **null**. -A superclass of a user class is declared in a class by using the [`Class extends `](basics/lang-classes#extends-classname) keyword. +A superclass of a user class is declared in a class by using the [`Class extends `](basics/lang-classes.md#extends-classname) keyword. This property is **read-only**. diff --git a/versioned_docs/version-1.1.0/language/CollectionClass.md b/versioned_docs/version-1.1.0/language/CollectionClass.md index 90714dfc64..fd4db2a8d1 100644 --- a/versioned_docs/version-1.1.0/language/CollectionClass.md +++ b/versioned_docs/version-1.1.0/language/CollectionClass.md @@ -40,7 +40,7 @@ The Collection class manages [collection](basics/lang-collection.md) type elemen |[](#find)    | |[](#first)    | |[](#flat)    | -|[](#flatMap)    | +|[](#flatmap)    | |[](#includes)    | |[](#indexof)    | |[](#indices)    | @@ -59,7 +59,7 @@ The Collection class manages [collection](basics/lang-collection.md) type elemen |[](#push)    | |[](#query)    | |[](#reduce)    | -|[](#reduceRight)    | +|[](#reduceright)    | |[](#remove)    | |[](#resize)    | |[](#reverse)    | @@ -1780,7 +1780,7 @@ All *colsToSort* collections must have the same number of elements, otherwise an ::: -If you want to sort the collections in some other order than ascending, you must supply a *formula* ([Formula object](FunctionClass#formula-objects) that defines the sort order. The return value should be a boolean that indicates the relative order of the two elements: **true** if *$1.value* is less than *$1.value2*, **false** if *$1.value* is greater than *$1.value2*. You can provide additional parameters to the formula if necessary. +If you want to sort the collections in some other order than ascending, you must supply a *formula* ([Formula object](FunctionClass.md#formula-objects) that defines the sort order. The return value should be a boolean that indicates the relative order of the two elements: **true** if *$1.value* is less than *$1.value2*, **false** if *$1.value* is greater than *$1.value2*. You can provide additional parameters to the formula if necessary. The formula receives the following parameters: @@ -2240,9 +2240,9 @@ where: |---|---|---| |Equal to |==, = |Gets matching data, supports the wildcard (@), neither case-sensitive nor diacritic.| ||===, IS| Gets matching data, considers the @ as a standard character, neither case-sensitive nor diacritic| - |Not equal to| #, != |Supports the wildcard (@). Equivalent to "Not condition applied on a statement" ([see below](#not-equal-to-in-collections)).| + |Not equal to| #, != |Supports the wildcard (@). Equivalent to "Not condition applied on a statement" ([see below](../orda/queries.md#not-equal-to-in-collections)).| ||!==, IS NOT| Considers the @ as a standard character| - |Not condition applied on a statement| NOT| Parenthesis are mandatory when NOT is used before a statement containing several operators. Equivalent to "Not equal to" ([see below](#not-equal-to-in-collections)).| + |Not condition applied on a statement| NOT| Parenthesis are mandatory when NOT is used before a statement containing several operators. Equivalent to "Not equal to" ([see below](../orda/queries.md#not-equal-to-in-collections)).| |Less than| <| | |Greater than| > || |Less than or equal to| <=|| diff --git a/versioned_docs/version-1.1.0/language/DataClassClass.md b/versioned_docs/version-1.1.0/language/DataClassClass.md index 7aff1f20ea..085b41f4d0 100644 --- a/versioned_docs/version-1.1.0/language/DataClassClass.md +++ b/versioned_docs/version-1.1.0/language/DataClassClass.md @@ -82,7 +82,7 @@ Returned attribute objects contain the following properties: |autoFilled|boolean|True if the attribute value is automatically filled by Qodly. Corresponds to the **autosequence** model attribute property. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | |exposed|boolean|True if the attribute is exposed in REST| |fieldNumber|integer|Internal Qodly database field number of the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | -|fieldType|integer|Qodly database field type of the attribute. Depends on the attribute `kind`. Possible values:
                                                                              • if `.kind` = "storage": corresponding Qodly database field type, see [`valueType`](basics/lang-data-types.md#valuetype)
                                                                              • if `.kind` = "relatedEntity": 38 (`is object`)
                                                                              • if `.kind` = "relatedEntities": 42 (`is collection`)
                                                                              • if `.kind` = "calculated": same as above, depending on the result
                                                                              • | +|fieldType|integer|Qodly database field type of the attribute. Depends on the attribute `kind`. Possible values:
                                                                              • if `.kind` = "storage": corresponding Qodly database field type./commands/valueType.md
                                                                              • if `.kind` = "relatedEntity": 38 (`is object`)
                                                                              • if `.kind` = "relatedEntities": 42 (`is collection`)
                                                                              • if `.kind` = "calculated": same as above, depending on the result
                                                                              • | |indexed|boolean|True if there is a B-tree or a Cluster B-tree index on the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | |inverseName|string|Name of the attribute which is at the other side of the relation. Returned only when `.kind` = "relatedEntity" or "relatedEntities".| |keywordIndexed|boolean|True if there is a keyword index on the attribute. Not returned if `.kind` = "relatedEntity" or "relatedEntities". | @@ -315,7 +315,7 @@ In this example, the first entity will be created and saved but the second will #### See also -[**.toCollection()**](EntitySelectionClass#tocollection-) +[**.toCollection()**](EntitySelectionClass.md#tocollection-) diff --git a/versioned_docs/version-1.1.0/language/DataStoreClass.md b/versioned_docs/version-1.1.0/language/DataStoreClass.md index c7aa33f27d..179d95098c 100644 --- a/versioned_docs/version-1.1.0/language/DataStoreClass.md +++ b/versioned_docs/version-1.1.0/language/DataStoreClass.md @@ -42,7 +42,7 @@ The `.cancelTransaction()` function collection of `4D.MailAttachment` object(s). -Attachment objects are defined through the [`mailNewAttachment`](MailAttachmentClass#4dmailattachmentnew) command. Attachment objects have specific [properties and functions](MailAttachmentClass.md). +Attachment objects are defined through the [`mailNewAttachment`](MailAttachmentClass.md#4dmailattachmentnew) command. Attachment objects have specific [properties and functions](MailAttachmentClass.md). ## .bcc @@ -143,7 +143,7 @@ The `.bodyStructure` object contains the following properties: |language|collection of strings|List of language tags, as defined in [RFC3282](https://tools.ietf.org/html/rfc3282), in the Content-Language header field of the part, if present.| |location|string|URI, as defined in [RFC2557](https://tools.ietf.org/html/rfc2557), in the Content-Location header field of the part, if present.| |subParts|collection of objects|Body parts of each child (collection of *EmailBodyPart* objects)| -|headers|collection of objects|List of all header fields in the part, in the order they appear in the message (collection of *EmailHeader* objects, see [headers](#headers-) property)| +|headers|collection of objects|List of all header fields in the part, in the order they appear in the message (collection of *EmailHeader* objects, see [headers](#headers) property)| ## .bodyValues diff --git a/versioned_docs/version-1.1.0/language/EntityClass.md b/versioned_docs/version-1.1.0/language/EntityClass.md index 601cb05004..9820985708 100644 --- a/versioned_docs/version-1.1.0/language/EntityClass.md +++ b/versioned_docs/version-1.1.0/language/EntityClass.md @@ -30,7 +30,7 @@ An [entity](../orda/data-model.md#entity) is an instance of a [Dataclass](../ord |[](#save)    | |[](#toobject)    | |[](#touched)    | -|[](#touchedattributes)    | +|[](#touchedattributes-)    | |[](#unlock)    | @@ -379,7 +379,7 @@ The object returned by `.drop( )` contains the following properties: |Constant| Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                                                                              • the entity has been dropped (the stamp has changed and the memory space is now free)
                                                                              • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can be returned when `kForceDropIfStampChanged` option is used.

                                                                              • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                                                                              • the entity has been dropped (the stamp has changed and the memory space is now free)
                                                                              • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can be returned when `kForceDropIfStampChanged` option is used.
                                                                              • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`|3|The entity is locked by a pessimistic lock.
                                                                                **Associated statusText**: "Already locked"| |`kStatusSeriousError`| 4| A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                                                                                **Associated statusText**: "Other error"| |`kStatusStampHasChanged`| 2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error can only occur if the `kForceDropIfStampChanged` option is not used
                                                                                **Associated statusText**: "Stamp has changed"| @@ -890,7 +890,7 @@ The object returned by `.lock()` contains the following properties: |Constant |Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`| 5|The entity no longer exists in the data. This error can occur in the following cases:
                                                                              • the entity has been dropped (the stamp has changed and the memory space is now free)
                                                                              • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can only be returned when `kReloadIfStampChanged` option is used

                                                                              • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`| 5|The entity no longer exists in the data. This error can occur in the following cases:
                                                                              • the entity has been dropped (the stamp has changed and the memory space is now free)
                                                                              • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). This error can only be returned when `kReloadIfStampChanged` option is used
                                                                              • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`| 3 |The entity is locked by a pessimistic lock. **Associated statusText**: "Already locked" |`kStatusSeriousError`| 4 |A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc. **Associated statusText**: "Other error"| |`kStatusStampHasChanged`|2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error occurs only if the `kReloadIfStampChanged` option is not used
                                                                                **Associated statusText**: "Stamp has changed"| @@ -1038,7 +1038,7 @@ The object returned by `.reload()` contains the following properties: |Constant| Value| Comment| |---|---|---| -|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                                                                              • the entity has been dropped (the stamp has changed and the memory space is now free)
                                                                              • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).

                                                                              • ***Associated statusText***: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`|5|The entity no longer exists in the data. This error can occur in the following cases:
                                                                              • the entity has been dropped (the stamp has changed and the memory space is now free)
                                                                              • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).
                                                                              • ***Associated statusText***: "Entity does not exist anymore"| |`kStatusSeriousError`|4| A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                                                                                ***Associated statusText***: "Other error"| @@ -1082,7 +1082,7 @@ The object returned by `.reload()` contains the following properties: The `.save()` function saves the changes made to the entity in the table related to its dataClass. You must call this function after creating or modifying an entity if you want to save the changes made to it. -The save operation is executed only if at least one entity attribute has been "touched" (see the [`.touched()`](#touched) and [`.touchedAttributes()`](#touchedattributes) functions). Otherwise, the function does nothing (the trigger is not called). +The save operation is executed only if at least one entity attribute has been "touched" (see the [`.touched()`](#touched) and [`.touchedAttributes()`](#touchedattributes-) functions). Otherwise, the function does nothing (the trigger is not called). In a multi-process application, the `.save()` function is executed under an ["optimistic lock"](../orda/data.md#entity-locking) mechanism, wherein an internal locking stamp is automatically incremented each time the record is saved. @@ -1126,7 +1126,7 @@ The following values can be returned in the `status` and `statusText` properties |Constant| Value |Comment| |---|---|---| |`kStatusAutomergeFailed`| 6| (Only if the `kAutoMerge` option is used) The automatic merge option failed when saving the entity.
                                                                                **Associated statusText**: "Auto merge failed"| -|`kStatusEntityDoesNotExistAnymore`| 5| The entity no longer exists in the data. This error can occur in the following cases:
                                                                              • the entity has been dropped (the stamp has changed and the memory space is now free)
                                                                              • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).

                                                                              • **Associated statusText**: "Entity does not exist anymore"| +|`kStatusEntityDoesNotExistAnymore`| 5| The entity no longer exists in the data. This error can occur in the following cases:
                                                                              • the entity has been dropped (the stamp has changed and the memory space is now free)
                                                                              • the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space).
                                                                              • **Associated statusText**: "Entity does not exist anymore"| |`kStatusLocked`| 3| The entity is locked by a pessimistic lock.
                                                                                **Associated statusText**: "Already locked" |`kStatusSeriousError`|4|A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
                                                                                **Associated statusText**: "Other error"| |`kStatusStampHasChanged`|2|The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock). This error can only occur if the `kAutoMerge` option is not used
                                                                                **Associated statusText**: "Stamp has changed"| diff --git a/versioned_docs/version-1.1.0/language/EntitySelectionClass.md b/versioned_docs/version-1.1.0/language/EntitySelectionClass.md index 107bc9cf75..c0e18ad4de 100644 --- a/versioned_docs/version-1.1.0/language/EntitySelectionClass.md +++ b/versioned_docs/version-1.1.0/language/EntitySelectionClass.md @@ -12,7 +12,7 @@ Entity selections can be created from existing selections using various function || |---| -|[](#91index93)    | +|[](#index)    | |[](#attributename)    | |[](#add)    | |[](#and)    | @@ -22,7 +22,7 @@ Entity selections can be created from existing selections using various function |[](#contains)    | |[](#count)    | |[](#distinct)    | -|[](#distinctPaths)    | +|[](#distinctpaths)    | |[](#drop)    | |[](#extract)    | |[](#first)    | @@ -36,14 +36,14 @@ Entity selections can be created from existing selections using various function |[](#minus)    | |[](#or)    | |[](#orderby)    | -|[](#orderbyformula)    | +|[](#orderbyformula-)    | |[](#query)    | |[](#querypath)    | |[](#queryplan)    | |[](#selected)    | |[](#slice)    | |[](#sum)    | -|[](#tocollection)    | +|[](#tocollection-)    | @@ -240,7 +240,7 @@ The entity selection must be *alterable*, i.e. it has been created for example b ::: * If the entity selection is [ordered](../orda/data-model.md#ordered-or-unordered-entity-selection), *entity* is added at the end of the selection. If a reference to the same entity already belongs to the entity selection, it is duplicated and a new reference is added. -* If the entity selection is [unordered](../orda/data-model#ordered-or-unordered-entity-selection), *entity* is added anywhere in the selection, with no specific order. +* If the entity selection is [unordered](../orda/data-model.md#ordered-or-unordered-entity-selection), *entity* is added anywhere in the selection, with no specific order. The modified entity selection is returned by the function, so that function calls can be chained. @@ -302,7 +302,7 @@ The `.and()` function combines t :::note -You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. ::: @@ -427,9 +427,7 @@ sel2 = sel.clean() //sel2.length == 3 ``` -#### See also -[`.refresh()`](#refresh) @@ -536,7 +534,7 @@ The `.copy()` function returns > This function does not modify the original entity selection. -By default, if the *option* parameter is omitted, the function returns a new, [alterable](../orda/data#shareable-or-alterable-entity-selections) entity selection (even if the function is applied to a [shareable](../orda/data#shareable-or-alterable-entity-selections) entity selection). Pass the `kShared` constant in the *option* parameter if you want to create a shareable entity selection. +By default, if the *option* parameter is omitted, the function returns a new, [alterable](../orda/data.md#shareable-or-alterable-entity-selections) entity selection (even if the function is applied to a [shareable](../orda/data.md#shareable-or-alterable-entity-selections) entity selection). Pass the `kShared` constant in the *option* parameter if you want to create a shareable entity selection. #### Example @@ -961,7 +959,7 @@ The following generic code duplicates all entities of the entity selection: The `.isAlterable()` function returns true if the entity selection is alterable, and false if the entity selection is not alterable. -For more information, please refer to the [Shareable or alterable entity selections](../orda/data#shareable-or-alterable-entity-selections) section. +For more information, please refer to the [Shareable or alterable entity selections](../orda/data.md#shareable-or-alterable-entity-selections) section. @@ -984,7 +982,7 @@ For more information, please refer to the [Shareable or alterable entity selecti The `.isOrdered()` function returns true if the entity selection is ordered, and false if it is unordered. -For more information, please refer to the [Ordered or unordered entity selection](../orda/data-model#ordered-or-unordered-entity-selection) section. +For more information, please refer to the [Ordered or unordered entity selection](../orda/data-model.md#ordered-or-unordered-entity-selection) section. #### Example @@ -1200,7 +1198,7 @@ The `.minus()` function exclud * If you pass *entity* as parameter, the function creates a new entity selection without *entity* (if *entity* belongs to the entity selection). If *entity* was not included in the original entity selection, a new reference to the entity selection is returned. * If you pass *entitySelection* as parameter, the function returns an entity selection containing the entities belonging to the original entity selection without the entities belonging to *entitySelection*. ->You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +>You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. If the original entity selection or both the original entity selection and the *entitySelection* parameter are empty, an empty entity selection is returned. @@ -1261,7 +1259,7 @@ The `.or()` function combines the * If you pass *entity* as parameter, you compare this entity with the entity selection. If the entity belongs to the entity selection, a new reference to the entity selection is returned. Otherwise, a new entity selection containing the original entity selection and the entity is returned. * If you pass *entitySelection* as parameter, you compare entity selections. A new entity selection containing the entities belonging to the original entity selection or *entitySelection* is returned (or is not exclusive, entities referenced in both selections are not duplicated in the resulting selection). ->You can compare [ordered and/or unordered entity selections](../orda/data-model#ordered-or-unordered-entity-selection). The resulting selection is always unordered. +>You can compare [ordered and/or unordered entity selections](../orda/data-model.md#ordered-or-unordered-entity-selection). The resulting selection is always unordered. If the original entity selection and the *entitySelection* parameter are empty, an empty entity selection is returned. If the original entity selection is empty, a reference to *entitySelection* or an entity selection containing only *entity* is returned. @@ -1310,7 +1308,7 @@ If the original entity selection and the parameter are not related to the same d #### Description -The `.orderBy()` function returns a new [ordered](../orda/data-model#ordered-or-unordered-entity-selection) entity selection containing all entities of the entity selection in the order specified by *pathString* or *pathObjects* criteria. +The `.orderBy()` function returns a new [ordered](../orda/data-model.md#ordered-or-unordered-entity-selection) entity selection containing all entities of the entity selection in the order specified by *pathString* or *pathObjects* criteria. > This function does not modify the original entity selection. @@ -1506,7 +1504,7 @@ If no matching entities are found, an empty `EntitySelection` is returned. For detailed information on how to build a query using *queryString*, *value*, and *querySettings* parameters, please refer to the DataClass [`.query()`](DataClassClass.md#query) function description. ->By default if you omit the **order by** statement in the *queryString*, the returned entity selection is [not ordered](../orda/data-model#ordered-or-unordered-entity-selection). +>By default if you omit the **order by** statement in the *queryString*, the returned entity selection is [not ordered](../orda/data-model.md#ordered-or-unordered-entity-selection). #### Example 1 diff --git a/versioned_docs/version-1.1.0/language/FolderClass.md b/versioned_docs/version-1.1.0/language/FolderClass.md index c6cde5933b..b8de0e8865 100644 --- a/versioned_docs/version-1.1.0/language/FolderClass.md +++ b/versioned_docs/version-1.1.0/language/FolderClass.md @@ -84,7 +84,7 @@ The `4D.Folder.new()` function creates and The `.create()` function creates a folder on disk according to the properties of the `folder` object. -If necessary, the function creates the folder hierachy as described in the [platformPath](#platformpath) or [path](#path) properties. If the folder already exists on disk, the function does nothing (no error is thrown) and returns false. +If necessary, the function creates the folder hierachy as described in the [path](#path) property. If the folder already exists on disk, the function does nothing (no error is thrown) and returns false. **Returned value** diff --git a/versioned_docs/version-1.1.0/language/HTTPRequestClass.md b/versioned_docs/version-1.1.0/language/HTTPRequestClass.md index f3f7b54369..6dd6b6d77e 100644 --- a/versioned_docs/version-1.1.0/language/HTTPRequestClass.md +++ b/versioned_docs/version-1.1.0/language/HTTPRequestClass.md @@ -3,9 +3,9 @@ id: HTTPRequestClass title: HTTPRequest --- -The `HTTPRequest` class allows you to handle [`HTTPRequest objects`](#httprequest-object) that can be used to configure and send requests to an HTTP server, as well as to process the HTTP server responses. +The `HTTPRequest` class allows you to handle [`HTTPRequest objects`](#functions-and-properties) that can be used to configure and send requests to an HTTP server, as well as to process the HTTP server responses. -The `HTTPRequest` class is available from the `4D` class store. You create and send HTTP requests using the [4D.HTTPRequest.new()](#4dhttprequestnew) function, that returns a [`HTTPRequest object`](#httprequest-object). +The `HTTPRequest` class is available from the `4D` class store. You create and send HTTP requests using the [4D.HTTPRequest.new()](#4dhttprequestnew) function, that returns a [`HTTPRequest object`](#functions-and-properties). ### Example @@ -50,14 +50,14 @@ HTTPRequest objects provide the following functions and properties: || |---| |[](#4dhttprequestnew)    | -|[](#dataType)    | +|[](#datatype)    | |[](#encoding)    | |[](#errors)    | |[](#headers)    | |[](#method)    | |[](#protocol)    | |[](#response)    | -|[](#returnResponseBody)    | +|[](#returnresponsebody)    | |[](#terminate)    | |[](#terminated)    | |[](#timeout)    | @@ -138,7 +138,7 @@ All callback functions receive two object parameters: |Parameter|Type| |---|---| -|param1|[`HTTPRequest` object](#httprequest-object)| +|param1|[`HTTPRequest` object](#functions-and-properties)| |param2|[`Event` object](#event-object)| Here is the sequence of callback calls: @@ -392,7 +392,7 @@ If the response from the server has already arrived, the function returns immedi :::note -During the `.wait()` execution, callback functions are executed, whether they originate from other instances of the same class, or instances of any classes supporting the same callback mechanism (`HTTPRequest`, `TCPConnection`, `SystemWorker`). You can exit from a `.wait()` by calling [`shutdown()`](#shutdown) or `terminate()` (depending on the API) from a callback. +During the `.wait()` execution, callback functions are executed, whether they originate from other instances of the same class, or instances of any classes supporting the same callback mechanism (`HTTPRequest`, `TCPConnection`, `SystemWorker`). You can exit from a `.wait()` by calling `shutdown()` or [`terminate()`](#terminate) (depending on the API) from a callback. ::: diff --git a/versioned_docs/version-1.1.0/language/IMAPTransporterClass.md b/versioned_docs/version-1.1.0/language/IMAPTransporterClass.md index fba6f1729f..5a092deac6 100644 --- a/versioned_docs/version-1.1.0/language/IMAPTransporterClass.md +++ b/versioned_docs/version-1.1.0/language/IMAPTransporterClass.md @@ -215,7 +215,7 @@ status = transporter.addFlags(kIMAPAll,flags) The `.append()` function appends a `mailObj` to the `destinationBox`. -In the `mailObj` parameter, pass an Email object. For a comprehensive description of mail properties, see [Email object](EmailObjectClass#properties). The `.append()` function supports keyword tags in the Email object's `keywords` attribute. +In the `mailObj` parameter, pass an Email object. For a comprehensive description of mail properties, see [Email object](EmailObjectClass.md#properties). The `.append()` function supports keyword tags in the Email object's `keywords` attribute. The optional `destinationBox` parameter lets you pass the name of a mailbox where the `mailObj` will be appended. If omitted, the current mailbox is used. @@ -472,7 +472,7 @@ In the *msgsIDs* parameter, you can pass: * a collection containing the unique IDs of the specific messages to delete, or * the `kIMAPAll` constant (integer) to delete all messages in the selected mailbox. -Executing this function does not actually remove messages. Messages with the "delete" flag can still be found by the [`.searchMails()`](#searchmails) function. Flagged messages are deleted from the IMAP server with the [`.expunge()`](#expunge) function or by selecting another mailbox or when the IMAP transporter object (created with [4D.IMAPTransporter.new](#imap-new-transporter)) is destroyed. +Executing this function does not actually remove messages. Messages with the "delete" flag can still be found by the [`.searchMails()`](#searchmails) function. Flagged messages are deleted from the IMAP server with the [`.expunge()`](#expunge) function or by selecting another mailbox or when the IMAP transporter object (created with [4D.IMAPTransporter.new](#4dimaptransporternew)) is destroyed. **Returned object** @@ -832,7 +832,7 @@ See [`getBoxList()` example](#getboxlist). |msgNumber|integer|→|Sequence number of the message| |msgID|string|→|Unique ID of the message| |options|object|→|Message handling instructions| -|Result|object|←|[Email object](EmailObjectClass#properties)| +|Result|object|←|[Email object](EmailObjectClass.md#properties)| #### Description @@ -899,7 +899,7 @@ You want to get the message with ID = 1: |startMsg|integer|→|Sequence number of the first message| |endMsg |integer|→|Sequence number of the last message| |options|object|→|Message handling instructions| -|Result|object|←|Object containing:
                                                                                • a collection of [Email objects](EmailObjectClass#properties) and
                                                                                • a collection of IDs or numbers for missing messages, if any
                                                                                | +|Result|object|←|Object containing:
                                                                                • a collection of [Email objects](EmailObjectClass.md#properties) and
                                                                                • a collection of IDs or numbers for missing messages, if any
                                                                                | #### Description @@ -943,7 +943,7 @@ The optional *options* parameter allows you to define the parts of the messages |Property | Type | Description | |---|---|---| -|list |collection |collection of [`Email` objects](EmailObjectClass#properties). If no Email objects are found, an empty collection is returned.| +|list |collection |collection of [`Email` objects](EmailObjectClass.md#properties). If no Email objects are found, an empty collection is returned.| |notFound |collection| collection of:
                                                                                • first syntax - previously passed message IDs that do not exist
                                                                                • second syntax - sequence numbers of messages between startMsg and endMsg that do not exist
                                                                                An empty collection is returned if all messages are found.| #### Example @@ -1013,7 +1013,7 @@ The optional *updateSeen* parameter allows you to specify if the message is mark #### Result -`.getMIMEAsblob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass#properties) with the `mailConvertFromMIME` command. +`.getMIMEAsblob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass.md#properties) with the `mailConvertFromMIME` command. #### Example diff --git a/versioned_docs/version-1.1.0/language/IncomingMessageClass.md b/versioned_docs/version-1.1.0/language/IncomingMessageClass.md index c16c82e8f0..174caf6fff 100644 --- a/versioned_docs/version-1.1.0/language/IncomingMessageClass.md +++ b/versioned_docs/version-1.1.0/language/IncomingMessageClass.md @@ -13,7 +13,7 @@ All properties of this class are read-only. They are automatically filled by the ### Example -The following HTTP handler configuration [has been defined in Qodly Studio](../studio/httpHandlers.md#setting-up-http-request-handlers): +The following HTTP handler configuration [has been defined in Qodly Studio](../studio/httpHandlers.md#configuring-http-handlers): ```json [ @@ -84,8 +84,8 @@ There are 2 url parts - Url parts are: start - example |[](#gettext)
                                                                                | |[](#headers)
                                                                                | |[](#url)
                                                                                | -|[](#urlPath)
                                                                                | -|[](#urlQuery)
                                                                                | +|[](#urlpath)
                                                                                | +|[](#urlquery)
                                                                                | |[](#verb)
                                                                                | :::note diff --git a/versioned_docs/version-1.1.0/language/MailAttachmentClass.md b/versioned_docs/version-1.1.0/language/MailAttachmentClass.md index 523d472cbc..165c1a6742 100644 --- a/versioned_docs/version-1.1.0/language/MailAttachmentClass.md +++ b/versioned_docs/version-1.1.0/language/MailAttachmentClass.md @@ -44,7 +44,7 @@ Attachment objects are created using the [`4D.MailAttachment.new()`](#4dmailatta #### Description -The `4D.MailAttachment.new` function allows you to create an attachment object that you can add to an [Email object](EmailObjectClass#properties). +The `4D.MailAttachment.new` function allows you to create an attachment object that you can add to an [Email object](EmailObjectClass.md#properties). To define the attachment, you can use: diff --git a/versioned_docs/version-1.1.0/language/POP3TransporterClass.md b/versioned_docs/version-1.1.0/language/POP3TransporterClass.md index 9089444f45..949ff98121 100644 --- a/versioned_docs/version-1.1.0/language/POP3TransporterClass.md +++ b/versioned_docs/version-1.1.0/language/POP3TransporterClass.md @@ -44,19 +44,19 @@ POP3 Transporter objects provide the following properties and functions: #### Description -The `4D.POP3Transporter.new()` function configures a new POP3 connectionaccording to the *server* parameter and returns a new *[POP3 transporter](#pop3-transporter-object)* object. The returned transporter object will then usually be used to receive emails. +The `4D.POP3Transporter.new()` function configures a new POP3 connectionaccording to the *server* parameter and returns a new *[POP3 transporter](#functions-and-properties)* object. The returned transporter object will then usually be used to receive emails. In the *server* parameter, pass an object containing the following properties: |*server*|Default value (if omitted)| |---|---| |[](#acceptunsecureconnection)
                                                                                |false| -|.**accessTokenOAuth2**: string
                                                                                .**accessTokenOAuth2**: object
                                                                                string string or token object representing OAuth2 authorization credentials. Used only with OAUTH2 `authenticationMode`. If `accessTokenOAuth2` is used but `authenticationMode` is omitted, the OAuth 2 protocol is used (if allowed by the server). Not returned in *[SMTP transporter](#smtptransporterobject)* object.|none| +|.**accessTokenOAuth2**: string
                                                                                .**accessTokenOAuth2**: object
                                                                                string string or token object representing OAuth2 authorization credentials. Used only with OAUTH2 `authenticationMode`. If `accessTokenOAuth2` is used but `authenticationMode` is omitted, the OAuth 2 protocol is used (if allowed by the server). |none| |[](#authenticationmode)
                                                                                |the most secure authentication mode supported by the server is used| |[](#connectiontimeout)
                                                                                |30| |[](#host)
                                                                                |*mandatory* |[](#logfile)
                                                                                |none| -|**.password** : string
                                                                                User password for authentication on the server. Not returned in *[SMTP transporter](#smtptransporterobject)* object.|none| +|**.password** : string
                                                                                User password for authentication on the server. |none| |[](#port)
                                                                                |995| |[](#user)
                                                                                |none| @@ -232,11 +232,11 @@ info = "The mailbox contains "+string(boxInfo.mailCount)+" messages.") ##### Description -The `.getMail()` function returns the `Email` object corresponding to the *msgNumber* in the mailbox designated by the [`POP3 transporter`](#pop3-transporter-object). This function allows you to locally handle the email contents. +The `.getMail()` function returns the `Email` object corresponding to the *msgNumber* in the mailbox designated by the [`POP3 transporter`](#functions-and-properties). This function allows you to locally handle the email contents. Pass in *msgNumber* the number of the message to retrieve. This number is returned in the `number` property by the [`.getMailInfoList()`](#getmailinfolist) function. -Optionally, you can pass `true` in the *headerOnly* parameter to exclude the body parts from the returned `Email` object. Only headers properties ([`headers`](EmailObjectClass#headers), [`to`](EmailObjectClass#to), [`from`](EmailObjectClass#from)...) are then returned. This option allows you to optimize the downloading step when a lot of emails are on the server. +Optionally, you can pass `true` in the *headerOnly* parameter to exclude the body parts from the returned `Email` object. Only headers properties ([`headers`](EmailObjectClass.md#headers), [`to`](EmailObjectClass.md#to), [`from`](EmailObjectClass.md#from)...) are then returned. This option allows you to optimize the downloading step when a lot of emails are on the server. :::note @@ -251,7 +251,7 @@ The function returns Null if: **Returned object** -`.getMail()` returns an [`Email` object](EmailObjectClass#properties). +`.getMail()` returns an [`Email` object](EmailObjectClass.md#properties). ##### Example @@ -413,7 +413,7 @@ The function returns an empty BLOB if: **Returned blob** -`.getMIMEAsBlob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass#properties) with the [`MAIL Convert from MIME`](commands/mailConvertFromMIME.md) command. +`.getMIMEAsBlob()` returns a `blob` which can be archived in a database or converted to an [`Email` object](EmailObjectClass.md#properties) with the [`MAIL Convert from MIME`](commands/mailConvertFromMIME.md) command. ##### Example diff --git a/versioned_docs/version-1.1.0/language/QodlyEvents.md b/versioned_docs/version-1.1.0/language/QodlyEvents.md index 6cf50a6ec8..a20a42d5ab 100644 --- a/versioned_docs/version-1.1.0/language/QodlyEvents.md +++ b/versioned_docs/version-1.1.0/language/QodlyEvents.md @@ -16,8 +16,8 @@ The **QodlyEvents** class is a **shared singleton**, meaning a single instance i || |---| -|[](#onStartup)    | -|[](#onStop)    | +|[](#onstartup)    | +|[](#onstop)    | |[](#me)    | @@ -32,7 +32,7 @@ The **QodlyEvents** class is a **shared singleton**, meaning a single instance i #### Description -The `.onStartup()` function triggers the [onStartup() function](../studio/qodlyEventsClassInterface#accessing-qodlyevents) logic defined in the QodlyEvents class interface. The .onStartup() function executes automatically when the server starts by calling cs.QodlyEvents.me.onStartup(). +The `.onStartup()` function triggers the [onStartup() function](../studio/qodlyEventsClassInterface.md#accessing-qodlyevents) logic defined in the QodlyEvents class interface. The .onStartup() function executes automatically when the server starts by calling cs.QodlyEvents.me.onStartup(). Additionally, developers can manually execute .onStartup() when needed, such as: - Explicitly triggering the startup logic from another function. @@ -56,7 +56,7 @@ cs.QodlyEvents.me.onStartup({ config: "default" }) #### Description -The `.onStop()` function triggers the [onStop()](../studio/qodlyEventsClassInterface#accessing-qodlyevents) function logic defined in the QodlyEvents class interface. The .onStop() function executes automatically when the server shuts down by calling cs.QodlyEvents.me.onStop(). +The `.onStop()` function triggers the [onStop()](../studio/qodlyEventsClassInterface.md#accessing-qodlyevents) function logic defined in the QodlyEvents class interface. The .onStop() function executes automatically when the server shuts down by calling cs.QodlyEvents.me.onStop(). Additionally, developers can manually execute .onStop() when needed, such as: - Explicitly triggering the shutdown logic before stopping the server. @@ -86,7 +86,7 @@ cs.QodlyEvents.me.onStop({ saveState: true }) The `.me` property returns the current instance of the QodlyEvents singleton. -It must be used when calling functions like [onStartup()](#onStartup) or [`onStop()`](#onStop). +It must be used when calling functions like [onStartup()](#onstartup) or [`onStop()`](#onstop). :::tip Why .me is Required: If you attempt to call: diff --git a/versioned_docs/version-1.1.0/language/SMTPTransporterClass.md b/versioned_docs/version-1.1.0/language/SMTPTransporterClass.md index 980291038f..1f8ace2241 100644 --- a/versioned_docs/version-1.1.0/language/SMTPTransporterClass.md +++ b/versioned_docs/version-1.1.0/language/SMTPTransporterClass.md @@ -172,7 +172,7 @@ The SMTP connection is automatically closed: |Parameter|Type||Description| |---------|--- |:---:|------| -|mail|object|→|[Email](EmailObjectClass#properties) to send| +|mail|object|→|[Email](EmailObjectClass.md#properties) to send| |Result|object|←|SMTP status| diff --git a/versioned_docs/version-1.1.0/language/SignalClass.md b/versioned_docs/version-1.1.0/language/SignalClass.md index 5158eb6f1d..28953c715f 100644 --- a/versioned_docs/version-1.1.0/language/SignalClass.md +++ b/versioned_docs/version-1.1.0/language/SignalClass.md @@ -26,12 +26,12 @@ Any worker/process calling the `.wait()` method will suspend its execution until Note that to avoid blocking situations, the `.wait()` can also return after a defined timeout has been reached. -Signal objects are created with the [newSignal](#newsignal) command. +Signal objects are created with the [newSignal](./commands/newSignal.md) command. ### Working with signals -In QodlyScript, you create a new signal object by calling the [`newSignal`](#newsignal) command. Once created, this signal must be passed as a parameter to the [`callWorker`](commands/callWorker.md) command so that it can modify it when it has finished the task you want to wait for. +In QodlyScript, you create a new signal object by calling the [`newSignal`](./commands/newSignal.md) command. Once created, this signal must be passed as a parameter to the [`callWorker`](commands/callWorker.md) command so that it can modify it when it has finished the task you want to wait for. - `signal.wait()` must be called from the worker that needs another worker to finish a task in order to continue. - `signal.trigger()` must be called from the worker that finished its execution in order to release all others. diff --git a/versioned_docs/version-1.1.0/language/SystemWorkerClass.md b/versioned_docs/version-1.1.0/language/SystemWorkerClass.md index 1c331b4aa4..79311a2f6b 100644 --- a/versioned_docs/version-1.1.0/language/SystemWorkerClass.md +++ b/versioned_docs/version-1.1.0/language/SystemWorkerClass.md @@ -12,11 +12,11 @@ The `SystemWorker` class is available from the `4D` class store. || |---| -|[](#4d-systemworker-new)    | +|[](#4dsystemworkernew)    | |[](#closeinput)     | |[](#commandline)     | |[](#currentdirectory)     | -|[](#dataype)     | +|[](#datatype)     | |[](#encoding)     | |[](#errors)     | |[](#exitcode)     | @@ -128,7 +128,7 @@ When the executable waits for all data to be received through `postMessage()`, ` #### Description -The `.commandLine` property contains the command line passed as parameter to the [`new()`](#4d-systemworker-new) function. +The `.commandLine` property contains the command line passed as parameter to the [`new()`](#4dsystemworkernew) function. This property is **read-only**. @@ -348,7 +348,7 @@ Actually, `.wait()` waits until the end of processing of the `onTerminate` formu :::note -During the `.wait()` execution, callback functions are executed, whether they originate from other instances of the same class, or instances of any classes supporting the same callback mechanism (`HTTPRequest`, `TCPConnection`, `SystemWorker`). You can exit from a `.wait()` by calling [`shutdown()`](#shutdown) or `terminate()` (depending on the API) from a callback. +During the `.wait()` execution, callback functions are executed, whether they originate from other instances of the same class, or instances of any classes supporting the same callback mechanism (`HTTPRequest`, `TCPConnection`, `SystemWorker`). You can exit from a `.wait()` by calling `shutdown()` or [`terminate()`](#terminate) (depending on the API) from a callback. ::: diff --git a/versioned_docs/version-1.1.0/language/TCPConnectionClass.md b/versioned_docs/version-1.1.0/language/TCPConnectionClass.md index b0a64e18f5..d427b63a2c 100644 --- a/versioned_docs/version-1.1.0/language/TCPConnectionClass.md +++ b/versioned_docs/version-1.1.0/language/TCPConnectionClass.md @@ -93,9 +93,9 @@ TCPConnection objects provide the following properties and functions: || |---| -|[](#closed)
                                                                                | +|[](#closed)
                                                                                | |[](#errors)
                                                                                | -|[](#noDelay)
                                                                                | +|[](#nodelay)
                                                                                | |[](#send)
                                                                                | |[](#shutdown)
                                                                                | |[](#wait)
                                                                                | diff --git a/versioned_docs/version-1.1.0/language/UsersClass.md b/versioned_docs/version-1.1.0/language/UsersClass.md index 0f0fae8ff9..12250838de 100644 --- a/versioned_docs/version-1.1.0/language/UsersClass.md +++ b/versioned_docs/version-1.1.0/language/UsersClass.md @@ -79,7 +79,7 @@ The User object returned by the function above contains the following properties |Property|Type|Description| |---|---|---| |email|String|The user's email used for account creation.The user's email used for account creation.| -|role|String|The user's role within the application [Roles & Privileges](../studio/roles/rolesPrivilegesOverview).| +|role|String|The user's role within the application [Roles & Privileges](../studio/roles/rolesPrivilegesOverview.md).| |firstname|String|The user's first name.| |lastname|String|The user's last name.| diff --git a/versioned_docs/version-1.1.0/language/WebFormClass.md b/versioned_docs/version-1.1.0/language/WebFormClass.md index 4c6f1770cb..9e936ebf53 100644 --- a/versioned_docs/version-1.1.0/language/WebFormClass.md +++ b/versioned_docs/version-1.1.0/language/WebFormClass.md @@ -133,7 +133,7 @@ webForm.setError("My error message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-error.png) @@ -171,7 +171,7 @@ webForm.setMessage("My information message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-info.png) @@ -204,6 +204,6 @@ webForm.setWarning("My warning message") ``` -If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the Page and disappears automatically after 5 seconds: +If the [**Provide feedback**](../studio/pageLoaders/events/bindingActionToEvents.md#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the Page and disappears automatically after 5 seconds: ![](img/message-warning.png) diff --git a/versioned_docs/version-1.1.0/language/WebFormItemClass.md b/versioned_docs/version-1.1.0/language/WebFormItemClass.md index 1a929905b6..3a41975d1b 100644 --- a/versioned_docs/version-1.1.0/language/WebFormItemClass.md +++ b/versioned_docs/version-1.1.0/language/WebFormItemClass.md @@ -8,7 +8,7 @@ The `4D.WebFormItem` class allows you to handle the behavior of your webform com `4D.WebFormItem` objects are properties of the [`4D.WebForm`](WebFormClass) object returned by the [`webForm`](commands/webForm) command. -When you call the [`webForm`](./commands/webForm) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](../studio/pageLoaders/pageLoaderOverview#server-side) in your webform. +When you call the [`webForm`](./commands/webForm) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](../studio/pageLoaders/pageLoaderOverview.md#server-side) in your webform. For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference. @@ -19,9 +19,9 @@ For example, `WebFormObject.myImage` refers to the image component with `myImage || |---| -|[](#addclass)    | +|[](#addcssclass)    | |[](#hide)    | -|[](#removeclass)    | +|[](#removecssclass)    | |[](#show)    | diff --git a/versioned_docs/version-1.1.0/language/WebServerClass.md b/versioned_docs/version-1.1.0/language/WebServerClass.md deleted file mode 100644 index e22f374ced..0000000000 --- a/versioned_docs/version-1.1.0/language/WebServerClass.md +++ /dev/null @@ -1,587 +0,0 @@ ---- -id: WebServerClass -title: WebServer ---- - - -The `WebServer` class API allows you to start and monitor a web server for the your application. This class is available from the `4D` class store. - -Web server objects are instantiated with the [`webServer`](#webserver) command. - - - -### Functions and properties - -|| -|---| -|[](#certificatefolder)    | -|[](#characterset)    | -|[](#ciphersuite)    | -|[](#corsenabled)    | -|[](#corssettings)     | -|[](#debuglog)    | -|[](#defaulthomepage)    | -|[](#hstsenabled)     | -|[](#hstsmaxage)    | -|[](#httpcompressionlevel)    | -|[](#httpcompressionthreshold)    | -|[](#httpenabled)    | -|[](#httpport)    | -|[](#httpsenabled)    | -|[](#httpsport)    | -|[](#httptrace)    | -|[](#ipaddresstolisten)    | -|[](#isrunning)    | -|[](#keepsession)    | -|[](#logrecording)    | -|[](#maxrequestsize)    | -|[](#mintlsversion)    | -|[](#name)    | -|[](#opensslversion)    | -|[](#perfectforwardsecrecy)    | -|[](#rootfolder)    | -|[](#scalablesession)    | -|[](#sessioncookiedomain)    | -|[](#sessioncookiename)    | -|[](#sessioncookiepath)    | -|[](#sessioncookiesamesite)    | -|[](#sessionipaddressvalidation)    | -|[](#start)    | -|[](#stop)    | - - -## .certificateFolder - -**.certificateFolder** : string - - -Path of the folder where the certificate files are located. The path is formatted in POSIX full path using filesystems. When using this property in the `settings` parameter of the [`.start()`](#start) function, it can be a [`Folder` object](FolderClass.md). - - - - -## .characterSet - -**.characterSet** : number
                                                                                **.characterSet** : string - - -The character set that the Web Server should use to communicate with browsers connecting to the application The default value is UTF-8. Can be a MIBEnum integer or a Name string, identifiers [defined by IANA](http://www.iana.org/assignments/character-sets/character-sets.xhtml). Here is the list of identifiers corresponding to the character sets supported by the Qodly Web Server: - -- 4 = ISO-8859-1 -- 12 = ISO-8859-9 -- 13 = ISO-8859-10 -- 17 = Shift-JIS -- 2024 = Windows-31J -- 2026 = Big5 -- 38 = euc-kr -- 106 = UTF-8 -- 2250 = Windows-1250 -- 2251 = Windows-1251 -- 2253 = Windows-1253 -- 2255 = Windows-1255 -- 2256 = Windows-1256 - - - - - -## .cipherSuite - -**.cipherSuite** : string - - -The cipher list used for the secure protocol Sets the priority of ciphering algorithms implemented by the Qodly web server. Can be a sequence of strings separated by colons (for example "ECDHE-RSA-AES128-..."). See the [ciphers page](https://www.openssl.org/docs/manmaster/man1/ciphers.html) on the OpenSSL site. - - - - - -## .CORSEnabled - -**.CORSEnabled** : boolean - - -The CORS (*Cross-origin resource sharing*) service status for the web server For security reasons, "cross-domain" requests are forbidden at the browser level by default. When enabled (true), XHR calls (e.g. REST requests) from Web pages outside the domain can be allowed in your application (you need to define the list of allowed addresses in the CORS domain list, see `CORSSettings` below). When disabled (false, default), all cross site requests sent with CORS are ignored. When enabled (true) and a non-allowed domain or method sends a cross site request, it is rejected with a "403 - forbidden" error response. - -Default: false (disabled) - -For more information about CORS, please refer to the [Cross-origin resource sharing page](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) on Wikipedia. - - - - - -## .CORSSettings - -**.CORSSettings** : collection - - -Contains the list of allowed hosts and methods for the CORS service (see [`CORSEnabled`](#corsenabled) property). Each object must contain a **host** property and, optionally, a **methods** property: - - -- **host** (text, mandatory): Domain name or IP address from where external pages are allowed to send data requests to the Server via CORS. Multiple domain attributes can be added to create a white list. If *host* is not present or empty, the object is ignored. Several syntaxes are supported: - - 192.168.5.17:8081 - - 192.168.5.17 - - 192.168.* - - 192.168.*:8081 - - <http://192.168.5.17:8081> - - <http://*.myDomain.com> - - <http://myProject.myDomain.com> - - *.myDomain.com - - myProject.myDomain.com - - \* - -- **methods** (text, optional): Accepted HTTP method(s) for the corresponding CORS host. Separate each method with a "," (e,g,: "post,get"). If *methods* is empty, null, or undefined, all methods are enabled. - - - - - -## .debugLog - -**.debugLog** : number - - -The status of the HTTP request log file (HTTPDebugLog_nn.txt, stored in the "Logs" folder of the application -- nn is the file number). - -- 0 = disabled -- 1 = enabled without body parts (body size is provided in this case) -- 3 = enabled with body parts in response only -- 5 = enabled with body parts in request only -- 7 = enabled with body parts in response and request - - - - - -## .defaultHomepage - -**.defaultHomepage** : string - - -The name of the default home page or "" to not send the custom home page. - - - - - -## .HSTSEnabled - -**.HSTSEnabled** : boolean - - -The HTTP Strict Transport Security (HSTS) status HSTS allows the Web server to declare that browsers should only interact with it via secure HTTPS connections. Browsers will record the HSTS information the first time they receive a response from the web server, then any future HTTP requests will automatically be transformed into HTTPS requests. The length of time this information is stored by the browser is specified with the `HSTSMaxAge` property. HSTS requires that HTTPS is enabled on the server. HTTP must also be enabled to allow initial client connections. - - - - - -## .HSTSMaxAge - - - -**.HSTSMaxAge** : number - - -The maximum length of time (in seconds) that HSTS is active for each new client connection This information is stored on the client side for the specified duration. - -Default value: 63072000 (2 years). - - - - - -## .HTTPCompressionLevel - -**.HTTPCompressionLevel** : number - - -The compression level for all compressed HTTP exchanges for the HTTP server (client requests or server replies) This selector lets you optimize exchanges by either prioritizing speed of execution (less compression) or the amount of compression (less speed). - -Possible values: - -- 1 to 9 (where 1 is the fastest compression and 9 the highest). -- -1 = set a compromise between speed and rate of compression. - -Default = 1 (faster compression). - - - - - -## .HTTPCompressionThreshold - -**.HTTPCompressionThreshold** : number - - -The size threshold (bytes) for requests below which exchanges should not be compressed This setting is useful in order to avoid losing machine time by compressing small exchanges. - -Default compression threshold = 1024 bytes - - - - - -## .HTTPEnabled - -**.HTTPEnabled** : boolean - - -The HTTP protocol state - - - - - - -## .HTTPPort - -**.HTTPPort** : number - - -The listening IP port number for HTTP - -Default = 80 - - - - - - -## .HTTPSEnabled - -**.HTTPSEnabled** : boolean - - -The HTTPS protocol state - - - - - -## .HTTPSPort - -**.HTTPSPort** : number - - -The listening IP port number for HTTPS - -Default = 443 - - - - - - -## .HTTPTrace - -**.HTTPTrace** : boolean - - -The activation of `HTTP TRACE` For security reasons, by default the Web server rejects `HTTP TRACE` requests with an error 405. When enabled, the web server replies to `HTTP TRACE` requests with the request line, header, and body. - - - - - - -## .IPAddressToListen - -**.IPAddressToListen** : string - - -The IP address on which the Web Server will receive HTTP requests By default, no specific address is defined ("0.0.0.0"). Both IPv6 string formats and IPv4 string formats are supported. - - - - - -## .isRunning - -**.isRunning** : boolean - - -*Read-only property* - -The web server running state - - - - - -## .keepSession - -**.keepSession** : boolean - - -Always `false` - - - - - - -## .logRecording - -**.logRecording** : number - - -The log requests (logweb.txt) recording value - -- 0 = Do not record (default) -- 1 = Record in CLF format -- 2 = Record in DLF format -- 3 = Record in ELF format -- 4 = Record in WLF format - - - - - - -## .maxRequestSize - -**.maxRequestSize** : number - - -Contains the maximum size (in bytes) of incoming HTTP requests (POST) that the web server is allowed to process Passing the maximum value (2147483647) means that, in practice, no limit is set. This limit is used to avoid web server saturation due to incoming requests that are too large. If a request reaches this limit, the web server rejects it. - -Possible values: 500000 - 2147483647 - - - - - - - -## .minTLSVersion - -**.minTLSVersion** : number - - -The minimum TLS version accepted for connections Connection attempts from clients supporting only versions below the minimum will be rejected. - -Possible values: - -- 3 = TLSv1_2 -- 4 = TLSv1_3 (default) - -If modified, the server must be restarted to use the new value. - - - - - -## .name - -**.name** : string - - -*Read-only property* - -The name of the web server application - - - - - -## .openSSLVersion - -**.openSSLVersion** : string - - -*Read-only property* - -The version of the OpenSSL library used - - - - - -## .perfectForwardSecrecy - -**.perfectForwardSecrecy** : boolean - - -*Read-only property* - -The PFS availability on the server - - - - -## .rootFolder - -**.rootFolder** : string - - -The path of web server root folder The path is formatted in POSIX full path using filesystems. When using this property in the `settings` parameter, it can be a `Folder` object. - - - - - -## .scalableSession - -**.scalableSession** : boolean - - -Always `true` - - - - - -## .sessionCookieDomain - -**.sessionCookieDomain** : string - - -The "domain" field of the session cookie Used to control the scope of the session cookies. If you set, for example, the value "/*.myCompany.com" for this selector, the client will only send a cookie when the request is addressed to the domain ".myCompany.com", which excludes servers hosting external static data. - - - - - -## .sessionCookieName - -**.sessionCookieName** : string - - - -The name of the cookie used for storing the session ID - -*Read-only property* - - - - - -## .sessionCookiePath - -**.sessionCookiePath** : string - - -The "path" field of the session cookie Used to control the scope of the session cookies. If you set, for example, the value "/QACTION" for this selector, the client will only send a cookie for dynamic requests beginning with QACTION, and not for pictures, static pages, etc. - - - - - -## .sessionCookieSameSite - -**.sessionCookieSameSite** : string - - -The "SameSite" session cookie value Possible values (using constants): - -|Constant|Value|Description| -|---|---|---| -|Web SameSite Strict|"Strict"|*Default value* - Cookies are only sent in a first-party context, i.e. context matching the domain of the current site, and never to third-party websites.| -|Web SameSite Lax|"Lax"|Cookies are also sent on cross-site subrequests (for example to load images or frames into a third-party site), but only when a user is navigating to the origin site (i.e. when following a link).| -|Web SameSite None|"None"|Cookies are sent in all contexts, i.e in responses to both first-party and cross-origin requests. When "None" value is used, the cookie `Secure` attribute must also be set (or the cookie will be blocked).| - -This property allows you to declare if your cookie should be restricted to a first-party or same-site context, as a protection from some cross-site request forgery attacks ([CSRF](https://developer.mozilla.org/en-US/docs/Glossary/CSRF)). - -> For a detailed description of the `SameSite` attribute, please refer to the [Mozilla documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) or [this web.dev page](https://web.dev/samesite-cookies-explained/). - -The `Secure` attribute value of the session cookie is automatically set to "True" if the connection is HTTPS (whatever the `SameSite` attribute value). - - - - - -## .sessionIPAddressValidation - -**.sessionIPAddressValidation** : boolean - - -The IP address validation for session cookies For security reasons, by default the web server checks the IP address of each request containing a session cookie and rejects it if this address does not match the IP address used to create the cookie. In some specific applications, you may want to disable this validation and accept session cookies, even when their IP addresses do not match. For example when mobile devices switch between WiFi and 3G/4G/5G networks, their IP address will change. In this case, you can allow clients to be able to continue using their web sessions even when the IP addresses change (this setting lowers the security level of your application). - - - - - -## .start() - - -**.start**() : Object
                                                                                **.start**( *settings* : Object ) : Object - - - - -|Parameter|Type||Description| -|---|---|----|---| -|settings|Object|→|Web server settings to set at startup| -|Result|Object|←|Status of the web server startup| - - - -The `.start()` function starts the web server using properties set in the optional *settings* object parameter. - -The web server starts with default settings defined in the settings file of the project. However, using the *settings* parameter, you can define customized properties for the web server session. - -All properties of [Web Server objects](#functions-and-properties) can be customized, except read-only properties ([.isRunning](#isrunning), [.name](#name), [.openSSLVersion](#opensslversion), [.perfectForwardSecrecy](#perfectforwardsecrecy), and [.sessionCookieName(#sessioncookiename)]). - -Customized session settings will be reset when the [`.stop()`](#stop) function is called. - -#### Returned object - -The function returns an object describing the Web server launch status. This object can contain the following properties: - -|Property|| Type| Description| -|---|---|---|---| -|success||boolean|true if the web server was correctly started, false otherwise -|errors ||collection|Error stack (not returned if the web server started successfully)| -||\[].errCode|number|Error code| -||\[].message|string|Description of the error | -||\[].componentSignature|string|Signature of the internal component which returned the error| - ->If the Web server was already launched, an error is returned. - -#### Example - -```qs - var settings,result : object - var webServer : 4D.WebServer - - settings = { HSTSEnabled: true, defaultHomepage:"myHomepage.html" } - - result = webServer.start(settings) - if(result.success) - //... - end -``` - - - - - -## .stop() - - -**.stop**() - - - - -|Parameter|Type||Description| -|---|---|----|---| -||||Does not require any parameters| - - -The `.stop()` function stops the web server - -If the web server was started, all web connections and web processes are closed, once the currently handled requests are finished. If the web server was not started, the function does nothing. - ->This function resets the customized web settings defined for the session using the *settings* parameter of the [`.start()`](#start) function, if any. - -#### Example - -To stop the Web server: - -```qs - webServer.stop() -``` - - diff --git a/versioned_docs/version-1.1.0/language/ZipArchiveClass.md b/versioned_docs/version-1.1.0/language/ZipArchiveClass.md index 969dbc287c..acff511654 100644 --- a/versioned_docs/version-1.1.0/language/ZipArchiveClass.md +++ b/versioned_docs/version-1.1.0/language/ZipArchiveClass.md @@ -6,8 +6,8 @@ title: ZIPArchive A QodlyScript ZIP archive is a `File` or `folder` object containing one or more files or folders, which are compressed to be smaller than their original size. These archives are created with a ".zip" extension and can be used to save space or transfer files via mediums which may have size limitations (e.g., email or network). -- You create a ZIP archive with the [zipCreateArchive](#zipcreatearchive) command. -- [`ZIPFile`](ZipFileClass.md) and [`ZIPFolder`](ZipFolderClass.md) instances are available through the [`root`](#root) property (`ZIPFolder`) of the object returned by [zipReadArchive](#zipreadearchive) command. +- You create a ZIP archive with the [zipCreateArchive](./commands/zipCreateArchive.md) command. +- [`ZIPFile`](ZipFileClass.md) and [`ZIPFolder`](ZipFolderClass.md) instances are available through the [`root`](#root) property (`ZIPFolder`) of the object returned by [zipReadArchive](./commands/zipReadArchive.md) command. ### Example diff --git a/versioned_docs/version-1.1.0/language/basics/lang-classes.md b/versioned_docs/version-1.1.0/language/basics/lang-classes.md index 96d3dd5992..c2a7b64e65 100644 --- a/versioned_docs/version-1.1.0/language/basics/lang-classes.md +++ b/versioned_docs/version-1.1.0/language/basics/lang-classes.md @@ -8,7 +8,7 @@ title: Classes The QodlyScript language supports the concept of **classes**. In a programming language, using a class allows you to define an object behaviour with associated properties and functions. -Once a user class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can [`extend`](#class-extends-classname) another class, and then inherits from its [functions](#function) and properties ([declared](#property) and [computed](#function-get-and-function-set)). +Once a user class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can [`extend`](#extends-classname) another class, and then inherits from its [functions](#function) and properties ([declared](#property) and [computed](#function-get-and-function-set)). > The class model in QodlyScript is similar to classes in JavaScript, and based on a chain of prototypes. @@ -41,7 +41,7 @@ hello = person.sayHello() //"Hello John Doe" ### User classes -To create a new user class in Qodly Studio, click on the **+** button of the Explorer and give a name to the class: +To [create a new user class](../../studio/coding.md#creating) in Qodly Studio, click on the **+** button of the Explorer and give a name to the class: ![class](img/class3.png) @@ -51,9 +51,9 @@ You can also select **New > Class** from the menu bar, enter a name and click ** ![class](img/class2.png) -### Data Model classes +### DataStore classes -Data Model classes are automatically created when you click on the `<...>` button in the model editor, when a dataclass is selected. For more information, please refer to [this section](../../orda/data-model.md#creating-data-model-classes). +Data Model classes are created when you click on the `+` button in the model editor in the `DataStore Classes` setion. For more information, please refer to [this section](../../studio/model/model-editor-interface.md#datastore-classes-and-attributes). @@ -65,7 +65,7 @@ When naming classes, you should keep in mind the following rules: - Class names are case sensitive. - Giving the same name to a user class and a datastore's dataclass is not recommended, in order to prevent any conflict. -A user class in Qodly is defined by a specific [method file (.4qs)](../../studio/coding#4qs-files), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. For example, a class named "Polygon" will be based upon the following file: +A user class in Qodly is defined by a specific [method file (.4qs)](../../studio/coding.md#4qs-files), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. For example, a class named "Polygon" will be based upon the following file: ``` Project folder @@ -93,7 +93,7 @@ Available classes are accessible from their class stores. Two class stores are a The `cs` command returns a *Class Store* object containing all user classes defined in the current project. This command is necessary to instantiate an object from a user class. -It returns all user classes defined in the opened project, as well as [Data Model classes](../../orda/data-model.md#creating-data-model-classes). +It returns all user classes defined in the opened project, as well as [Data Model classes](../../studio/coding.md#classes). #### Example @@ -738,14 +738,14 @@ The `this` command returns a reference to th In most cases, the value of `this` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. -When executing a formula object created by the [`formula`](../FunctionClass#formula-objects) or [`formulaFromString`](../commands/formulaFromString) commands, `this` returns a reference to the object currently processed by the formula. For example: +When executing a formula object created by the [`formula`](../FunctionClass.md#formula-objects) or [`formulaFromString`](../commands/formulaFromString) commands, `this` returns a reference to the object currently processed by the formula. For example: ```qs o = newObject("prop",42,"f",formula(this.prop)) val = o.f() //42 ``` -When a [constructor](#class-constructor) function is used (with the [`new()`](../ClassClass.md#new) function), its `this` is bound to the new object being constructed. +When a [constructor](#constructor) function is used (with the [`new()`](../ClassClass.md#new) function), its `this` is bound to the new object being constructed. ```qs //Class: ob @@ -894,7 +894,7 @@ Singleton classes are not supported by [ORDA-based classes](../../orda/data-mode ### Creating and using singletons -You declare singleton classes by adding appropriate keyword(s) before the [`Class constructor`](#class-constructor): +You declare singleton classes by adding appropriate keyword(s) before the [`Class constructor`](#constructor): - To declare a (process) singleton class, write `singleton Class Constructor()`. - To declare a shared singleton class, write `shared singleton Class constructor()`. @@ -919,7 +919,7 @@ The [`.isSessionSingleton`](../ClassClass.md#issessionsingleton) property of Cla :::info -Singleton classes are only supported in [User classes](#user-classes). They are NOT supported in [Data Model classes](#data-model-classes) such as [Dataclass](../../orda/data-model.md#dataclass). +Singleton classes are only supported in [User classes](#user-classes). They are NOT supported in [Data Model classes](#datastore-classes) such as [Dataclass](../../orda/data-model.md#dataclass). ::: diff --git a/versioned_docs/version-1.1.0/language/basics/lang-identifiers.md b/versioned_docs/version-1.1.0/language/basics/lang-identifiers.md index 915b69813c..8d9b15e988 100644 --- a/versioned_docs/version-1.1.0/language/basics/lang-identifiers.md +++ b/versioned_docs/version-1.1.0/language/basics/lang-identifiers.md @@ -21,7 +21,7 @@ A class name must be compliant with standard [property naming rules](#object-pro :::warning -Giving the same name to a user class and a [dataclass](#dataclass) is not recommended, in order to prevent any conflict. +Giving the same name to a [user class](../../studio/coding.md#user-classes) and a [dataclass](../../studio/coding.md#orda-classes) is not recommended, in order to prevent any conflict. ::: @@ -65,7 +65,7 @@ If you use **string notation** within square brackets, property names can contai ::: -See also [ECMA Script standard](https://www.ecma-international.org/ecma-262/5.1/#sec-7.6). +See also [ECMA Script standard](https://www.ecma-international.org/ecma-262/5.1#sec-7.6). ## Parameters diff --git a/versioned_docs/version-1.1.0/language/basics/lang-methods.md b/versioned_docs/version-1.1.0/language/basics/lang-methods.md index 8647a15554..02714257a7 100644 --- a/versioned_docs/version-1.1.0/language/basics/lang-methods.md +++ b/versioned_docs/version-1.1.0/language/basics/lang-methods.md @@ -111,7 +111,7 @@ end You can encapsulate your methods in **formula** objects and call them from your objects. -The [`formula`](../FunctionClass#formula-objects) and [`formulaFromString`](../commands/formulaFromString) commands allow you to create formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. +The [`formula`](../FunctionClass.md#formula-objects) and [`formulaFromString`](../commands/formulaFromString) commands allow you to create formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. To execute a method stored in an object property, use the **()** operator after the property name. For example: diff --git a/versioned_docs/version-1.1.0/language/basics/lang-null-undefined.md b/versioned_docs/version-1.1.0/language/basics/lang-null-undefined.md index 35d3fd35b2..ede0a034ba 100644 --- a/versioned_docs/version-1.1.0/language/basics/lang-null-undefined.md +++ b/versioned_docs/version-1.1.0/language/basics/lang-null-undefined.md @@ -35,9 +35,9 @@ This function allows you to assign or compare the **null** value to the followin |:----|:----| |object property values|Comparing Null to an object property returns true if the property value is null, and false otherwise. To simplify code, comparing Null also returns true if the property does not exist in the object (i.e. is [`undefined`](#undefined)), see example 4. |collection elements|When a collection is expanded by adding non-adjacent elements, any intermediary elements get automatically the `null` value.| -|object variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| -|collection variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| -|picture variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](#clearvariable) command.| +|object variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| +|collection variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| +|picture variables|Assigning the null value to such a variable type clears its contents. In this case, it has the same effect as calling the [`clearVariable`](./lang-variables.md#clearvariable) command.| |variant variables| | diff --git a/versioned_docs/version-1.1.0/language/basics/lang-object.md b/versioned_docs/version-1.1.0/language/basics/lang-object.md index 7607d5f0a4..72b0b8c910 100644 --- a/versioned_docs/version-1.1.0/language/basics/lang-object.md +++ b/versioned_docs/version-1.1.0/language/basics/lang-object.md @@ -202,7 +202,7 @@ For more information, please refer to the [`null`](lang-null-undefined.md#null) Evaluating an object property can sometimes produce an **undefined** value. Typically when trying to read or assign undefined expressions, the QodlyScript will generate errors. This does not happen in the following cases: -- Reading a property of an undefined object or value returns `undefined`; assigning an undefined value to variables has the same effect as calling [`clearVariable`](lang-variables.md#clearvariable) with them: +- Reading a property of an undefined object or value returns `undefined`; assigning an undefined value to variables has the same effect as calling [`clearVariable`](./lang-variables.md#clearvariable) with them: ```qs var o : object diff --git a/versioned_docs/version-1.1.0/language/basics/lang-operators.md b/versioned_docs/version-1.1.0/language/basics/lang-operators.md index 47369f7ea6..9b32c0efde 100644 --- a/versioned_docs/version-1.1.0/language/basics/lang-operators.md +++ b/versioned_docs/version-1.1.0/language/basics/lang-operators.md @@ -303,7 +303,7 @@ All other values are considered **truthy**, including: * 0 - numeric zero (integer or otherwise) -In QodlyScript, **truthy** and **falsy** evaluation reflects the **usability** of a value, which means that a truthy value exists and can be processed by the code without generating errors or unexpected results. The rationale behind this is to provide a convenient way to handle *undefined* and *null* values in objects and collections, so that a reduced number of [if…else](lang-control-flow#ifelseend) statements are necessary to avoid runtime errors. +In QodlyScript, **truthy** and **falsy** evaluation reflects the **usability** of a value, which means that a truthy value exists and can be processed by the code without generating errors or unexpected results. The rationale behind this is to provide a convenient way to handle *undefined* and *null* values in objects and collections, so that a reduced number of [if…else](lang-control-flow.md#ifelseend) statements are necessary to avoid runtime errors. For example, when you use a [short-circuit OR operator](#short-circuit-or-operator-): diff --git a/versioned_docs/version-1.1.0/language/basics/lang-parameters.md b/versioned_docs/version-1.1.0/language/basics/lang-parameters.md index 154d3aba82..0a3760d635 100644 --- a/versioned_docs/version-1.1.0/language/basics/lang-parameters.md +++ b/versioned_docs/version-1.1.0/language/basics/lang-parameters.md @@ -387,7 +387,7 @@ firstnames = ds.Teachers.all().extract("firstname") //1 parameter addresses = ds.Teachers.all().extract("address",ck keep null) //2 parameters ``` -QodlyScript methods and functions also accept such optional parameters. You can declare any number of parameters. If you call a method or function with less parameters than declared, missing parameters are processed as default values in the called code, [according to their type](lang-data-types#overview). For example: +QodlyScript methods and functions also accept such optional parameters. You can declare any number of parameters. If you call a method or function with less parameters than declared, missing parameters are processed as default values in the called code, [according to their type](lang-data-types.md#overview). For example: ```qs // "concate" function of myClass diff --git a/versioned_docs/version-1.1.0/language/commands/base64Encode.md b/versioned_docs/version-1.1.0/language/commands/base64Encode.md index a56249e04a..10ce349041 100644 --- a/versioned_docs/version-1.1.0/language/commands/base64Encode.md +++ b/versioned_docs/version-1.1.0/language/commands/base64Encode.md @@ -20,7 +20,7 @@ title: base64Encode The `base64Encode` command encodes the string or blob value passed in the *toEncode* parameter in Base64 or Base64URL format. -Base64 encoding modifies 8-bit coded data so that they do not keep more than 7 useful bits. This encoding is required, for example, for handling blobs using xml. Base64URL is an alernative encoding with a specific processing for URLs and filenames (see [rfc4648](#https://tools.ietf.org/html/rfc4648#section-5)). +Base64 encoding modifies 8-bit coded data so that they do not keep more than 7 useful bits. This encoding is required, for example, for handling blobs using xml. Base64URL is an alernative encoding with a specific processing for URLs and filenames (see [rfc4648](https://tools.ietf.org/html/rfc4648#section-5)). Pass in *toEncode* a string or blob value to encode. diff --git a/versioned_docs/version-1.1.0/language/commands/command-list.md b/versioned_docs/version-1.1.0/language/commands/command-list.md index 57b19108ca..054afa60bf 100644 --- a/versioned_docs/version-1.1.0/language/commands/command-list.md +++ b/versioned_docs/version-1.1.0/language/commands/command-list.md @@ -124,8 +124,6 @@ title: Commands |[](verifyPasswordHash.md)
                                                                                  | |[](webEvent.md)
                                                                                  | |[](webForm.md)
                                                                                  | -|[](webServer.md)
                                                                                  | -|[](webServerList.md)
                                                                                  | |[](yearOf.md)
                                                                                  | |[](zipCreateArchive.md)
                                                                                  | |[](zipReadArchive.md)
                                                                                  | diff --git a/versioned_docs/version-1.1.0/language/commands/getProcessActivity.md b/versioned_docs/version-1.1.0/language/commands/getProcessActivity.md index 04f8302f43..891189b01f 100644 --- a/versioned_docs/version-1.1.0/language/commands/getProcessActivity.md +++ b/versioned_docs/version-1.1.0/language/commands/getProcessActivity.md @@ -52,7 +52,7 @@ ID|integer|Process unique ID visible|boolean|true if visible, false otherwise systemID|string|ID for the user process, Qodly process or spare process type|integer|Running process type.
                                                                              • kHTTPLogFlusher (-58)
                                                                              • kMainProcess (-39)
                                                                              • kClientManagerProcess (-31)
                                                                              • kCompilerProcess (-29)
                                                                              • kMonitorProcess (-26)
                                                                              • kInternalTimerProcess (-25)
                                                                              • kLogFileProcess (-20)
                                                                              • kBackup process (-19)
                                                                              • kInternalProcess (-18)
                                                                              • kOnExitProcess (-16)
                                                                              • kWebServerProcess (-13)
                                                                              • kOtherProcess (-10)
                                                                              • kEventManager (-8)
                                                                              • kIndexingProcess (-5)
                                                                              • kCacheManager (-4)
                                                                              • kWebProcessWithNoContext (-3)
                                                                              • kDesignProcess (-2)
                                                                              • kNone (0)
                                                                              • kWorkerProcess (5)
                                                                              • -|state|integer|Current status (see [`processState`](#processstate) constant list)| +|state|integer|Current status (see [`processState`](../commands/processState.md) constant list)| |cpuUsage|number|Percentage of time devoted to this process (between 0 and 1)| |cpuTime|number|Running time (seconds)| |preemptive|boolean|always true| diff --git a/versioned_docs/version-1.1.0/language/commands/newSharedCollection.md b/versioned_docs/version-1.1.0/language/commands/newSharedCollection.md index af5d5c4b31..9b2adf89ee 100644 --- a/versioned_docs/version-1.1.0/language/commands/newSharedCollection.md +++ b/versioned_docs/version-1.1.0/language/commands/newSharedCollection.md @@ -20,7 +20,7 @@ title: newSharedCollection The `newSharedCollection` command creates a new empty or prefilled shared collection and returns its reference. -Adding an element to this collection using the assignment operator must be surrounded by the [`use...end`](../basics/lang-shared.md#useend) structure, otherwise an error is generated (this is not necessary when adding elements using functions such as [`push()`](../CollectionClass#push) or [`map()`](../CollectionClass#map) because they automatically trigger an internal *use...end*). Reading an element without a *use...end* structure is, however, possible. +Adding an element to this collection using the assignment operator must be surrounded by the [`use...end`](../basics/lang-shared.md#useend) structure, otherwise an error is generated (this is not necessary when adding elements using functions such as [`push()`](../CollectionClass.md#push) or [`map()`](../CollectionClass.md#map) because they automatically trigger an internal *use...end*). Reading an element without a *use...end* structure is, however, possible. :::info diff --git a/versioned_docs/version-1.1.0/language/commands/newSignal.md b/versioned_docs/version-1.1.0/language/commands/newSignal.md index c6b3fdf5e2..a20eccc856 100644 --- a/versioned_docs/version-1.1.0/language/commands/newSignal.md +++ b/versioned_docs/version-1.1.0/language/commands/newSignal.md @@ -26,12 +26,12 @@ A signal is a shared object which can be passed as parameter from a worker proce Optionally, in the *description* parameter you can pass a custom text describing the signal. This text can also be defined after signal creation. -Since the signal object is a shared object, it can also be used to maintain user properties, including the [`.description`](../SignalClass/#description-1) property, by calling the `use...end` structure. +Since the signal object is a shared object, it can also be used to maintain user properties, including the [`.description`](../SignalClass#description-1) property, by calling the `use...end` structure. **Returned value** -A new [`4D.Signal` object](../SignalClass/#signal-object). +A new [`4D.Signal` object](../SignalClass#signal-object). #### Example diff --git a/versioned_docs/version-1.1.0/language/commands/openDatastore.md b/versioned_docs/version-1.1.0/language/commands/openDatastore.md index 72386e947f..df71d60f38 100644 --- a/versioned_docs/version-1.1.0/language/commands/openDatastore.md +++ b/versioned_docs/version-1.1.0/language/commands/openDatastore.md @@ -29,8 +29,8 @@ Pass in *connectionInfo* an object describing the remote datastore you want to c |Property| Type|Qodly application|Remote 4D application| |---|---|---|---| -|hostname|Text|[API Endpoint](../../cloud/apiKeys#api-endpoint) of the Qodly cloud instance|Name or IP address of the remote database + ":" + port number (port number is mandatory)| -|api-key|Text|[API Key](../../cloud/apiKeys#api-key) of the Qodly cloud instance|- (ignored)| +|hostname|Text|[API Endpoint](../../cloud/apiKeys.md#api-endpoint) of the Qodly cloud instance|Name or IP address of the remote database + ":" + port number (port number is mandatory)| +|api-key|Text|[API Key](../../cloud/apiKeys.md#api-key) of the Qodly cloud instance|- (ignored)| |idleTimeout|Longint|- (ignored)|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see [Closing sessions](https://developer.4d.com/docs/ORDA/datastores#closing-sessions).| |tls|Boolean|True to use secured connection. If omitted, false by default|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.| |type |Text |- (ignored)|must be "4D Server"| diff --git a/versioned_docs/version-1.1.0/language/commands/splitString.md b/versioned_docs/version-1.1.0/language/commands/splitString.md index 438646961c..cdc7f18bce 100644 --- a/versioned_docs/version-1.1.0/language/commands/splitString.md +++ b/versioned_docs/version-1.1.0/language/commands/splitString.md @@ -57,4 +57,4 @@ The *separator* parameter can be a multiple-character string: #### See also -[`collection.join()`](../CollectionClass#join)
                                                                                +[`collection.join()`](../CollectionClass.md#join)
                                                                                diff --git a/versioned_docs/version-1.1.0/language/commands/type.md b/versioned_docs/version-1.1.0/language/commands/type.md index b98c81f956..642c328317 100644 --- a/versioned_docs/version-1.1.0/language/commands/type.md +++ b/versioned_docs/version-1.1.0/language/commands/type.md @@ -40,7 +40,7 @@ You can apply the `type` function to variables and parameters of a method. :::note -You cannot apply the `type` function to scalar expressions such as object properties (emp.name) or collection elements (myColl[5]). To do this, you must use the [`valueType`](#valuetype) command. +You cannot apply the `type` function to scalar expressions such as object properties (emp.name) or collection elements (myColl[5]). To do this, you must use the [`valueType`](../commands/valueType.md) command. ::: diff --git a/versioned_docs/version-1.1.0/language/commands/webServer.md b/versioned_docs/version-1.1.0/language/commands/webServer.md deleted file mode 100644 index f6bd770140..0000000000 --- a/versioned_docs/version-1.1.0/language/commands/webServer.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -id: webServer -title: webServer ---- - - -**webServer** : 4D.WebServer - - - - -|Parameter|Type||Description| -|---|---|----|---| -|Result|4D.WebServer|←|Web server object| - - -The `webServer` command returns a Web server object. - -The returned Web server object contains the current values of the Web server properties. - -#### Example - -You want to know if the Web server is started: - -```qs - var vRun : boolean - vRun = webServer.isRunning -``` diff --git a/versioned_docs/version-1.1.0/language/commands/webServerList.md b/versioned_docs/version-1.1.0/language/commands/webServerList.md deleted file mode 100644 index cdab9cc5fb..0000000000 --- a/versioned_docs/version-1.1.0/language/commands/webServerList.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: webServerList -title: webServerList ---- - - -**webServerList** : collection - - - -|Parameter|Type||Description| -|---------|--- |:---:|------| -|Result|collection|→|Collection of the available Web Server objects| - - -The `webServerList` command returns a collection of all Web server objects available in the Qodly application. - -A Qodly application can contain anywhere from one to several Web servers: - -* 1 Web server for the host database (default Web server) -* 1 Web server for each component. - -All available Web servers are returned by the `webServerList` command, whether they are actually running or not. - -:::note - -The default Web server object is automatically loaded by Qodly at startup. On the other hand, each component Web server that you want to use must be instantiated using the [`webServer`](webServer.md) command. - -::: - -You can use the *name* property of the Web server object to identify the database or component to which each Web server object in the list is attached. For a detailed description of the Web server object, please refer to the [`webServer`](webServer.md) command. - -#### Example - -We want to know how many running web servers are available: - -```qs - var wSList : collection - var vRun : integer - var result : string - - wSList = webServerList - vRun = wSList.countValues(True,"isRunning") - result = string(vRun)+" web server(s) running on "+string(wSList.length)+" available." - -``` diff --git a/versioned_docs/version-1.1.0/language/commands/zipReadArchive.md b/versioned_docs/version-1.1.0/language/commands/zipReadArchive.md index 689a381795..76fdc06694 100644 --- a/versioned_docs/version-1.1.0/language/commands/zipReadArchive.md +++ b/versioned_docs/version-1.1.0/language/commands/zipReadArchive.md @@ -30,7 +30,7 @@ If the *zipFile* is password protected, you need to use the optional *password* **Archive object** -The returned `4D.ZipArchive` object contains a single [`root`](../ZipArchiveClass#root) property whose value is a `4D.ZipFolder` object. This folder describes the whole contents of the ZIP archive. +The returned `4D.ZipArchive` object contains a single [`root`](../ZipArchiveClass.md#root) property whose value is a `4D.ZipFolder` object. This folder describes the whole contents of the ZIP archive. #### Example diff --git a/versioned_docs/version-1.1.0/notes/1.0.0-beta-5.md b/versioned_docs/version-1.1.0/notes/1.0.0-beta-5.md index d1a1020168..86a17c8619 100644 --- a/versioned_docs/version-1.1.0/notes/1.0.0-beta-5.md +++ b/versioned_docs/version-1.1.0/notes/1.0.0-beta-5.md @@ -21,15 +21,15 @@ import ComingSoon from '@site/src/components/ComingSoon' ::: -- New [`onInit`](../studio/pageLoaders/pageLoaderOverview#triggers-and-events) Event for the Page: This event is executed during the rendering phase and is used to perform any necessary setup actions when a component is first created. +- New [`onInit`](../studio/pageLoaders/pageLoaderOverview.md#triggers-and-events) Event for the Page: This event is executed during the rendering phase and is used to perform any necessary setup actions when a component is first created. - Disable Components: Some components can now be disabled. When disabled, their associated actions are not triggered, and they appear with special rendering. This is particularly useful when using the [Page states](../studio/pageLoaders/states/stateOverview.md) feature. - Image Component Enhancement: You can now [drag and drop an image from the shared folder](../studio/pageLoaders/components/image.md#drag-and-drop-from-shared-folder) into the image source and set the default image source. -- New [Clean Standard Action](../studio/pageLoaders/events/bindingActionToEvents#qodly-sources): The Clean standard action allows entity selections to be cleaned of their deleted entities, preventing blank spaces in the UI. +- New [Clean Standard Action](../studio/pageLoaders/events/bindingActionToEvents.md#qodly-sources): The Clean standard action allows entity selections to be cleaned of their deleted entities, preventing blank spaces in the UI. -- Contextual Panel Update: The Contextual panel now allows function call actions to be [copied](../studio/pageLoaders/events/eventsManagement#copying-an-event-action) or [pasted](../studio/pageLoaders/events/eventsManagement#pasting-an-event-action) and called [function names to be changed post-creation](../studio/pageLoaders/events/eventsManagement#modifying-a-function-call), avoiding the need to delete and recreate them. +- Contextual Panel Update: The Contextual panel now allows function call actions to be [copied](../studio/pageLoaders/events/eventsManagement.md#copying-an-event-action) or [pasted](../studio/pageLoaders/events/eventsManagement.md#pasting-an-event-action) and called [function names to be changed post-creation](../studio/pageLoaders/events/eventsManagement.md#modifying-a-function-call), avoiding the need to delete and recreate them. - [Singletons in Qodly Studio](../language/basics/lang-classes.md#singleton-classes): Singletons can now be edited in Qodly Studio. Their functions can be called from a Qodly page, and permissions can be set up for their functions. diff --git a/versioned_docs/version-1.1.0/notes/1.0.0-beta-6.md b/versioned_docs/version-1.1.0/notes/1.0.0-beta-6.md index 32e1689761..e87ca8d629 100644 --- a/versioned_docs/version-1.1.0/notes/1.0.0-beta-6.md +++ b/versioned_docs/version-1.1.0/notes/1.0.0-beta-6.md @@ -15,15 +15,15 @@ import ComingSoon from '@site/src/components/ComingSoon'

                                                                                What's new

                                                                                -- New [`onPrivilegeChange`](../studio/pageLoaders/pageLoaderOverview#triggers-and-events) Event: Ensures elements display based on user privileges. +- New [`onPrivilegeChange`](../studio/pageLoaders/pageLoaderOverview.md#triggers-and-events) Event: Ensures elements display based on user privileges. - [Sanity check](../studio/pageLoaders/pageLoaderOverview.md#sanity-check) Update: Raises an error if a shared selection attribute is dropped over a matrix bound to a local selection. -- [Binding onHttpGet Functions](../studio/pageLoaders/events/bindingActionToEvents#binding-onhttpget-functions): Enables binding functions for HTTP GET requests with [4D.OutgoingMessage](../language/OutgoingMessageClass.md), supporting flexible operations like file viewing or downloads. +- [Binding onHttpGet Functions](../studio/pageLoaders/events/bindingActionToEvents.md#binding-onhttpget-functions): Enables binding functions for HTTP GET requests with [4D.OutgoingMessage](../language/OutgoingMessageClass.md), supporting flexible operations like file viewing or downloads. -- [Toggle Inherited Permissions](../studio/roles/permissionsOverview#showhide-inherited-permissions): Allows visibility toggling to show only explicitly defined permissions or include inherited ones by default in the privileges interface. +- [Toggle Inherited Permissions](../studio/roles/permissionsOverview.md#showhide-inherited-permissions): Allows visibility toggling to show only explicitly defined permissions or include inherited ones by default in the privileges interface. -- [Default State Override Warning](../studio/pageLoaders/states/stateOverview#setting-a-default-state): Displays a warning icon when the Default State will be overridden by an unmet Conditional State condition, with a tooltip explaining the override. +- [Default State Override Warning](../studio/pageLoaders/states/stateOverview.md#setting-a-default-state): Displays a warning icon when the Default State will be overridden by an unmet Conditional State condition, with a tooltip explaining the override.

                                                                                Bug Fixes

                                                                                diff --git a/versioned_docs/version-1.1.0/notes/1.1.0.md b/versioned_docs/version-1.1.0/notes/1.1.0.md index a8ccdb8950..7df29d4220 100644 --- a/versioned_docs/version-1.1.0/notes/1.1.0.md +++ b/versioned_docs/version-1.1.0/notes/1.1.0.md @@ -15,9 +15,9 @@ import ComingSoon from '@site/src/components/ComingSoon' - [**Support for HTTP Handlers**](../studio/httpHandlers): Added support for defining and managing HTTP Handlers to process requests based on URL patterns and HTTP methods, with a new UI and code editor integration. -- [**onInit Event for Qodly Sources**](../studio/pageLoaders/events/overview#on-init): Added a distinct `On Init` event for Qodly Sources, which triggers when a Qodly Source is instantiated by the renderer. This allows developers to set up an initial value for a Qodly Source without interference from subsequent `On Change` events. +- [**onInit Event for Qodly Sources**](../studio/pageLoaders/events/overview.md#on-init): Added a distinct `On Init` event for Qodly Sources, which triggers when a Qodly Source is instantiated by the renderer. This allows developers to set up an initial value for a Qodly Source without interference from subsequent `On Change` events. -- [**Privileges Detailed Permission Review**](../studio/roles/overview#detailed-permission-review-for-roles): When a role is selected in the Roles & Privileges editor, a detailed permission review is displayed to provide insight into the final permissions resolution for that specific role. This feature helps developers fine-tune privileges more effectively by showing the impact of privilege configurations. +- [**Privileges Detailed Permission Review**](../studio/roles/rolesPrivilegesOverview.md#detailed-permission-review-for-roles): When a role is selected in the Roles & Privileges editor, a detailed permission review is displayed to provide insight into the final permissions resolution for that specific role. This feature helps developers fine-tune privileges more effectively by showing the impact of privilege configurations. - [**QodlyEvents: onStartup and onStop**](../studio/qodlyEventsClass): Added structured support for defining automatic startup and shutdown logic within the QodlyEvents class. @@ -26,28 +26,28 @@ import ComingSoon from '@site/src/components/ComingSoon'

                                                                                What's new

                                                                                -- [Intervals for Date Input](../studio/pageLoaders/components/textinput#embedded-input): Added support for defining date selection intervals, enabling restrictions such as start/end dates, specific date ranges, or day-based selection. Users can manually set intervals or bind a datasource for dynamic control. +- [Intervals for Date Input](../studio/pageLoaders/components/textinput.md#embedded-input): Added support for defining date selection intervals, enabling restrictions such as start/end dates, specific date ranges, or day-based selection. Users can manually set intervals or bind a datasource for dynamic control. -- [Week Start Customization in Date Picker](../studio/pageLoaders/components/textinput#embedded-input): Added support for selecting the starting day of the week in the date picker. +- [Week Start Customization in Date Picker](../studio/pageLoaders/components/textinput.md#embedded-input): Added support for selecting the starting day of the week in the date picker. -- [Iterator Qodly Source ($This) Action Support](../studio/pageLoaders/events/bindingActionToEvents#qodly-sources): Added support for Drop and Copy as the only available actions when using an iterator Qodly Source ($This) in the events panel of a standard action. +- [Iterator Qodly Source ($This) Action Support](../studio/pageLoaders/events/bindingActionToEvents.md#qodly-sources): Added support for Drop and Copy as the only available actions when using an iterator Qodly Source ($This) in the events panel of a standard action. -- [Validation Rule for Qodly Source Selection](../studio/pageLoaders/states/conditionalState#saved-condition): Enforced a validation rule that allows only shared Qodly sources in Saved Conditions. Selecting a local Qodly source triggers a sanity check error with a clear message and visual indicators to prevent misconfiguration. +- [Validation Rule for Qodly Source Selection](../studio/pageLoaders/states/conditionalState.md#saved-condition): Enforced a validation rule that allows only shared Qodly sources in Saved Conditions. Selecting a local Qodly source triggers a sanity check error with a clear message and visual indicators to prevent misconfiguration. -- [Clear Non-Existing Resources in Privileges](../studio/roles/permissionsOverview#clear-non-existing-resources): Added a visual indicator for unavailable resources in the permissions table. Non-existing resources now appear in red with a shadow effect, and a Clear button is enabled to remove all associated permissions. +- [Clear Non-Existing Resources in Privileges](../studio/roles/permissionsOverview.md#clear-non-existing-resources): Added a visual indicator for unavailable resources in the permissions table. Non-existing resources now appear in red with a shadow effect, and a Clear button is enabled to remove all associated permissions. - New [privilege operators for states](../studio/pageLoaders/states/conditionalState.md#privilege-condition): `has at least one privilege` and `has no privilege`. -- [Flexbox Direction Options](../studio/pageLoaders/styling#properties-panel-styling-options): Added "Row Reverse" & "Column Reverse" options to the Direction property If the Display is Flex, allowing items to be arranged in reverse order. +- [Flexbox Direction Options](../studio/pageLoaders/styling.md#properties-panel-styling-options): Added "Row Reverse" & "Column Reverse" options to the Direction property If the Display is Flex, allowing items to be arranged in reverse order. -- [New Event in Selectbox Component](../studio/pageLoaders/components/selectbox#triggers-and-events): Added the On Clear event, which triggers an action when the selected item is cleared. +- [New Event in Selectbox Component](../studio/pageLoaders/components/selectbox.md#triggers-and-events): Added the On Clear event, which triggers an action when the selected item is cleared. - Data table: New [sorting behaviors](../studio/pageLoaders/components/datatable.md#properties-customization) for columns. - [Checkbox type selection options](../studio/pageLoaders/components/checkbox.md#checkbox-component), allowing to select the available states and default values for a checkbox. -- [Reveal Password Icon Placement](../studio/pageLoaders/components/textinput#embedded-input): Added an option to position the reveal password icon on either the left or right side of the text input field. +- [Reveal Password Icon Placement](../studio/pageLoaders/components/textinput.md#embedded-input): Added an option to position the reveal password icon on either the left or right side of the text input field. ## Qodly Server @@ -76,8 +76,8 @@ import ComingSoon from '@site/src/components/ComingSoon' While existing instantiation using cs.Qodly.Users.new() remains functional for backward compatibility, we no longer recommend using it. ::: - The following functions have been renamed for improved clarity: - - .getAllUsers() → [.allUsers()](../language/UsersClass#allusers) - - .getCurrentUser() → [.currentUser()](../language/UsersClass#currentuser) + - .getAllUsers() → [.allUsers()](../language/UsersClass.md#allusers) + - .getCurrentUser() → [.currentUser()](../language/UsersClass.md#currentuser) :::warning The old syntax is still supported for compatibility but will be deprecated over time. We recommend transitioning to the new syntax. ::: diff --git a/versioned_docs/version-1.1.0/orda/data-model.md b/versioned_docs/version-1.1.0/orda/data-model.md index c668740551..707b660316 100644 --- a/versioned_docs/version-1.1.0/orda/data-model.md +++ b/versioned_docs/version-1.1.0/orda/data-model.md @@ -9,7 +9,7 @@ slug: /guides/data-model-objects ORDA stands for **Object Relational Data Access**. It is an enhanced technology allowing to access both the model and the data of a database through objects. -Relations are transparently included in the concept, in combination with [lazy loading](#lazy-loading), to remove all the typical hassles of data selection or transfer from the developer. With ORDA, data is accessed through an abstraction layer, the [datastore](#datastore). A datastore is an object that provides an interface to the database model and data through objects and classes. For example, a table is mapped to a [dataclass](#dataclass) object, a field is an [attribute](#attribute) of a dataclass, and records are accessed through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection). +Relations are transparently included in the concept, in combination with [lazy loading](../faq/faq.md#qodly-server), to remove all the typical hassles of data selection or transfer from the developer. With ORDA, data is accessed through an abstraction layer, the [datastore](#datastore). A datastore is an object that provides an interface to the database model and data through objects and classes. For example, a table is mapped to a [dataclass](#dataclass) object, a field is an [attribute](#attributes) of a dataclass, and records are accessed through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection). A query returns a list of entities called an entity selection, which fulfills the role of a SQL query’s row set. The difference is that each entity "knows" where it belongs in the data model and "understands" its relationship to all other entities. This means that a developer does not need to explain in a query how to relate the various pieces of information, nor in an update how to write modified values back to the relational structure. @@ -20,7 +20,7 @@ ORDA objects can be handled like standard objects, but they automatically benefi ### Database as Objects -The [ORDA technology](../concepts/platform/#the-orda-concept) is based upon an automatic mapping of an underlying relational database structure to a data model (this concept can be viewed as an included and enhanced [ORM](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping)), along with powerful features such as calculated attributes or dataclass functions. It also provides [access to data](data.md) through entity and entity selection objects. +The [ORDA technology](#the-orda-concept) is based upon an automatic mapping of an underlying relational database structure to a data model (this concept can be viewed as an included and enhanced [ORM](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping)), along with powerful features such as calculated attributes or dataclass functions. It also provides [access to data](data.md) through entity and entity selection objects. As a result, ORDA exposes the whole database as a set of data model objects, including **model objects** as well as **data objects**. @@ -57,7 +57,7 @@ All ORDA data model classes are exposed as properties of the **`cs`** class stor |cs.DataStore|cs.DataStore|[`ds`](../language/commands/ds) command| |cs.*DataClassName*|cs.Employee|[`dataStore.DataClassName`](../language/DataStoreClass.md#dataclassname), `dataStore["DataClassName"]`| |cs.*DataClassName*Entity|cs.EmployeeEntity|[`dataClass.get()`](../language/DataClassClass.md#get), [`dataClass.new()`](../language/DataClassClass.md#new), [`entitySelection.first()`](../language/EntitySelectionClass.md#first), [`entitySelection.last()`](../language/EntitySelectionClass.md#last), [`entity.previous()`](../language/EntityClass.md#previous), [`entity.next()`](../language/EntityClass.md#next), [`entity.first()`](../language/EntityClass.md#first), [`entity.last()`](../language/EntityClass.md#last), [`entity.clone()`](../language/EntityClass.md#clone)| -|cs.*DataClassName*Selection|cs.EmployeeSelection|[`dataClass.query()`](../language/DataClassClass.md#query), [`entitySelection.query()`](../language/EntitySelectionClass.md#query), [`dataClass.all()`](../language/DataClassClass.md#all), [`dataClass.fromCollection()`](../language/DataClassClass.md#fromcollection), [`dataClass.newSelection()`](../language/DataClassClass.md#newselection), [`entitySelection.drop()`](../language/EntitySelectionClass.md#drop), [`entity.getSelection()`](../language/EntityClass.md#getselection), [`entitySelection.and()`](../language/EntitySelectionClass.md#and), [`entitySelection.minus()`](../language/EntitySelectionClass.md#minus), [`entitySelection.or()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderBy()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderByFormula()`](../language/EntitySelectionClass.md#orderbyformula), [`entitySelection.slice()`](../language/EntitySelectionClass.md#slice)| +|cs.*DataClassName*Selection|cs.EmployeeSelection|[`dataClass.query()`](../language/DataClassClass.md#query), [`entitySelection.query()`](../language/EntitySelectionClass.md#query), [`dataClass.all()`](../language/DataClassClass.md#all), [`dataClass.fromCollection()`](../language/DataClassClass.md#fromcollection), [`dataClass.newSelection()`](../language/DataClassClass.md#newselection), [`entitySelection.drop()`](../language/EntitySelectionClass.md#drop), [`entity.getSelection()`](../language/EntityClass.md#getselection), [`entitySelection.and()`](../language/EntitySelectionClass.md#and), [`entitySelection.minus()`](../language/EntitySelectionClass.md#minus), [`entitySelection.or()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderBy()`](../language/EntitySelectionClass.md#or), [`entitySelection.orderByFormula()`](../language/EntitySelectionClass.md#orderbyformula-), [`entitySelection.slice()`](../language/EntitySelectionClass.md#slice)| Also, object instances from ORDA data model user classes benefit from their parent's properties and functions: diff --git a/versioned_docs/version-1.1.0/orda/data.md b/versioned_docs/version-1.1.0/orda/data.md index 34cf92cddf..528ff9d6fa 100644 --- a/versioned_docs/version-1.1.0/orda/data.md +++ b/versioned_docs/version-1.1.0/orda/data.md @@ -4,7 +4,7 @@ title: CRUD Operations slug: /guides/crud-operations --- -In ORDA, you access data through [entities](data-model#entity) and [entity selections](data-model#entity-selection) objects. These objects allow you to execute CRUD (*Create, Read, Update, Delete*) basic operations on data, along with [queries](queries.md) and sorts. +In ORDA, you access data through [entities](data-model.md#entity) and [entity selections](data-model.md#entity-selection) objects. These objects allow you to execute CRUD (*Create, Read, Update, Delete*) basic operations on data, along with [queries](queries.md) and sorts. ## Creating an entity @@ -229,7 +229,7 @@ You can assign or modify the value of a "one" related entity attribute from the ## Creating an entity selection -You can create an object of type [entity selection](data-model#entity-selection) as follows: +You can create an object of type [entity selection](data-model.md#entity-selection) as follows: * Querying the entities [in a dataclass](../language/DataClassClass.md#query) or in an [existing entity selection](../language/EntitySelectionClass.md#query); * Using the [`.all()`](../language/DataClassClass.md#all) dataclass function to select all the entities in a dataclass; @@ -499,7 +499,7 @@ Filters apply to all ORDA or REST requests executed in your Qodly projects. A fi |[entitySelection.query()](../language/EntitySelectionClass.md#query)|| |[entitySelection.attributeName](../language/EntitySelectionClass.md#attributename)|Filter applied if *attributeName* is a related entity or related entities of a filtered dataclass (including alias or computed attribute)| |[entity.attributeName](../language/EntityClass.md#attributename)|Filter applied if *attributeName* corresponds to related entities of a filtered dataclass (including alias or computed attribute)| -|[Create entity selection](../language/EntitySelectionClass.md#create-entity-selection)|| +|[Create entity selection](../language/DataClassClass.md#newselection)|| Other ORDA functions accessing data do not directly trigger the filter, but they nevertheless benefit from it. For example, the [`entity.next()`](../language/EntityClass.md#next) function will return the next entity in the already-filtered entity selection. On the other hand, if the entity selection is not filtered, [`entity.next()`](../language/EntityClass.md#next) will work on non-filtered entities. diff --git a/versioned_docs/version-1.1.0/orda/queries.md b/versioned_docs/version-1.1.0/orda/queries.md index d79b12a801..05b055f441 100644 --- a/versioned_docs/version-1.1.0/orda/queries.md +++ b/versioned_docs/version-1.1.0/orda/queries.md @@ -66,7 +66,7 @@ where: * **formula**: a valid formula passed as `string` or `object`. The formula will be evaluated for each processed entity and must return a boolean value. Within the formula, the entity is available through the `this` object. * **string**: the formula string must be preceeded by the `eval()` statement, so that the query parser evaluates the expression correctly. For example: *"eval(length(this.lastname) >=30)"* - * **object**: the [formula object](../language/FunctionClass.md) is passed as a **placeholder** (see below). The formula must have been created using the [`formula`](../language/FunctionClass#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. + * **object**: the [formula object](../language/FunctionClass.md) is passed as a **placeholder** (see below). The formula must have been created using the [`formula`](../language/FunctionClass.md#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. >* Keep in mind that formulas only support `&` and `|` symbols as logical operators. >* If the formula is not the only search criteria, the [query engine optimizer](#about-queryplan-and-querypath) could prior process other criteria (e.g. indexed attributes) and thus, the formula could be evaluated for only a subset of entities. @@ -333,7 +333,7 @@ es=ds.Movie.query("roles.actor.lastName == :1 AND roles.actor{2}.lastName == :2" As an alternative to formula insertion within the *queryString* parameter (see above), you can pass directly a formula object as a boolean search criteria. Using a formula object for queries is usually recommended since you benefit from tokenization, and code is easier to search/read. -The *formula* must have been created using the [`formula`](../language/FunctionClass#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. In this case: +The *formula* must have been created using the [`formula`](../language/FunctionClass.md#formula-objects) or [`formulaFromString`](../language/commands/formulaFromString) command. In this case: * the *formula* is evaluated for each entity and must return `true` or `false`. During the execution of the query, if the *formula*'s result is not a boolean, it is considered as `false`. * within the *formula*, the entity is available through the `this` object. diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/IFrameComponentSandboxSettings.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/IFrameComponentSandboxSettings.png new file mode 100644 index 0000000000..b70020d824 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/IFrameComponentSandboxSettings.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/QodlyLookerModel.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/QodlyLookerModel.png new file mode 100644 index 0000000000..996dc68c8b Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/QodlyLookerModel.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/apiKeysInterface.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/apiKeysInterface.png new file mode 100644 index 0000000000..57a05a5e5c Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/apiKeysInterface.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerAddChartButton.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerAddChartButton.png new file mode 100644 index 0000000000..ff6d81815a Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerAddChartButton.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerAddDataToReport.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerAddDataToReport.png new file mode 100644 index 0000000000..d5b50df4ae Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerAddDataToReport.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerConfigureChartData.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerConfigureChartData.png new file mode 100644 index 0000000000..7655b33dc6 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerConfigureChartData.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCreateNewReport.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCreateNewReport.png new file mode 100644 index 0000000000..c876e41f30 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCreateNewReport.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCreateNewReport2.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCreateNewReport2.png new file mode 100644 index 0000000000..1fffbfd3ff Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCreateNewReport2.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCustomizeChartAppearance.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCustomizeChartAppearance.png new file mode 100644 index 0000000000..73660044f3 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerCustomizeChartAppearance.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLLink.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLLink.png new file mode 100644 index 0000000000..2482b45a82 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLLink.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLQodlySource.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLQodlySource.png new file mode 100644 index 0000000000..5fbc45cc22 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLQodlySource.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLReport.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLReport.png new file mode 100644 index 0000000000..87294935b0 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerEmbedURLReport.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerQodlyAPICredentials.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerQodlyAPICredentials.png new file mode 100644 index 0000000000..1b3bb2477a Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerQodlyAPICredentials.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerQodlyPartnerConnector.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerQodlyPartnerConnector.png new file mode 100644 index 0000000000..41709f0a03 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerQodlyPartnerConnector.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerReportEmbeddedinQodly.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerReportEmbeddedinQodly.png new file mode 100644 index 0000000000..c7f43d1c5a Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerReportEmbeddedinQodly.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerShareReport.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerShareReport.png new file mode 100644 index 0000000000..e979f89ce6 Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/lookerShareReport.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/img/newApiKeysInterface.png b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/newApiKeysInterface.png new file mode 100644 index 0000000000..58ae6068da Binary files /dev/null and b/versioned_docs/version-1.1.0/qodlyLookerStudio/img/newApiKeysInterface.png differ diff --git a/versioned_docs/version-1.1.0/qodlyLookerStudio/qodlyLookerStudioConnector.md b/versioned_docs/version-1.1.0/qodlyLookerStudio/qodlyLookerStudioConnector.md new file mode 100644 index 0000000000..0e3966ca6e --- /dev/null +++ b/versioned_docs/version-1.1.0/qodlyLookerStudio/qodlyLookerStudioConnector.md @@ -0,0 +1,337 @@ +--- +id: qodlyLookerStudioConnector +title: Qodly Looker Studio Connector +--- + +import Column from '@site/src/components/Column' + +## Overview + +The Qodly Looker Studio Connector enables seamless integration between your **Qodly application** and **Google Looker Studio**, a powerful data visualization tool. This allows you to create interactive dashboards, track real-time business metrics, and generate custom reports using your Qodly application data. + +## Why Use Looker Studio? + +Understanding and analyzing your data is essential for making informed decisions. With this connector, you can: + +- Visualize and analyze your Qodly data in a user-friendly interface. + +- Monitor business performance using interactive charts and graphs. + +- Combine Qodly data with other sources for a comprehensive view. + +- Enable real-time insights with automatic data syncing and caching. + +- Embed reports into your Qodly application for seamless access. + +## How Does It Work? + +The Qodly Looker Studio Connector acts as a bridge between your Qodly application and Looker Studio, pulling structured data from Qodly’s REST API and making it available for visualization in Looker Studio. + +The integration process consists of: + +- Authenticating your Qodly app using an API key. + +- Defining the data classes and relationships in Qodly. + +- Configuring Looker Studio to retrieve and display Qodly data. + +- Building reports that provide valuable business insights. + +- Embedding reports within your Qodly application. + +By structuring your data effectively, you ensure that Looker Studio presents accurate and meaningful visualizations. + + +## Setting Up the Qodly Looker Studio Connector + +### Structuring Your Data in Qodly + +If you already have existing data in Qodly, you can skip this section and move to the next step on connecting Qodly to Looker Studio. However, for the purpose of this guide, we will go through the step-by-step process of structuring the data for testing and demonstration. + +Below is the data model that we will use in Qodly: + + + +This model consists of two key data classes: + +- Customer: Stores basic customer details. +- Order: Stores order details, including the country and city where the order was placed. + +Each Customer can have multiple Orders, and an Order is not necessarily placed in the customer's home country. Customers may travel and place orders from different locations, making it important to analyze where orders are being placed rather than just where customers are from. + + +### Connecting Qodly to Looker Studio + +#### Step 1: Generate API Credentials in Qodly + +To allow Looker Studio to access your Qodly data, you need an [API endpoint](../cloud/apiKeys.md#api-endpoint) and [API key](../cloud/apiKeys.md#api-key). These credentials act as authentication tokens that ensure secure access to your data. + +1. **Access the Qodly Console**: + + + + - Open the Qodly Console from your browser. + - Navigate to the API Keys section in the settings menu. + + + + + + +2. **Retrieve the API Endpoint**: + + - The API Endpoint is a URL that Looker Studio will use to request data from your Qodly app. + - Copy this URL and store it somewhere accessible, as you will need it in the next step. + +3. **Create a New API Key**: + + - Click the "New API Key" button. + + + + - Enter a descriptive name, such as "Looker API Key", to help you identify it. + - Set the type to Standard, which provides the necessary permissions for data access. + - Assign the Admin role to ensure that Looker Studio has the proper authorization to read data. + - Click Submit and copy the API key. + + + + + + + + +#### Step 2: Connect Qodly to Looker Studio + +With the API credentials ready, you can now establish the connection in Looker Studio. + +1. **Open Looker Studio**: + + - Navigate to [Google Looker Studio](https://lookerstudio.google.com/u/0/navigation/reporting). + - Sign in with your Google account if prompted. + +2. **Create a New Report**: + + - If you're new to Looker Studio, click the Create button on the left sidebar and select Blank Report. + - If you've used Looker Studio before, you'll see a large plus (+) button in the center of your dashboard labeled Blank Report , click that to begin. + - Looker Studio will then prompt you to add data to report. + + + +3. **Search for the Qodly Partner Connector**: + + + + - In the search bar, search for "Qodly". + - It will be displayed under the Partner Connector section. + - Click on the Qodly connector to proceed. + + + + + + +4. **Enter Your API Credentials**: + + + + - Looker Studio will ask for the API Endpoint and API Key that you retrieved earlier. + - Paste them in the respective fields. + - Click Next to continue to the configuration screen. + + + + + + +5. **Verify the Connection**: + + - Once the connection is established, Looker Studio will list the available data classes from your Qodly application. + - If the connection fails, ensure that the API key is correct and that your Qodly app allows external API access. + +Now that your Qodly data is connected to Looker Studio, you can start building reports and visualizing your business data. + + +### Configure the Data Configuration Settings + +Once your Qodly Looker Studio Connector is connected, you need to configure key settings to ensure efficient data retrieval and proper visualization in Looker Studio. These settings define how your data will be fetched and structured. + +1. **Enter a Dataclass Name**: + + - Example Value: Order + - Explanation: This is the main data class you want to report on. Since we're analyzing customer orders, Order is the logical choice. Looker Studio will use this class to fetch and structure the data shown in your report. + +2. **Enter a Dataclass Attribute (of type date) to be used by Looker Studio as the main date range**: + + - Example Value: date + - Explanation: This setting determines the primary date field used for filtering reports. In this case, date represents the order date, which is the most logical date for tracking transactions over time. When you apply a date range filter in Looker Studio (e.g., “Last 30 days”), this is the field it will use. + +3. **Pagination Top**: + + - Default Value: 10000 + - Explanation: Sets the number of records fetched per API request. A higher value means fewer API calls but can slow down performance if you're dealing with a lot of data. + + +4. **Cache TTL (Time-To-Live)**: + + - Default Value: 900 (in seconds) + - Explanation: This setting controls how long the connector reuses previous query results before sending the same query to Qodly again. It's part of the connector’s internal cache (not Looker Studio’s cache) and helps reduce unnecessary requests to Qodly. + - Use a lower value (e.g., 300) if your data changes frequently. + - Use a higher value (e.g., 3600) if your data is more static — this can improve performance and reduce load. + +5. **Custom Query Filter (Optional)**: + + - Example Value: amount > 500 + - Explanation: Allows you to filter the data before Looker Studio retrieves it. (Example: If you only want to analyze high-value customers, you can set a condition to exclude orders under $500.). You can also filter by country: country = 'USA' to analyze only US-based customers. + +6. **Add Additional Attributes to Query (such as relations)**: + + - Example Value: customer.firstName, customer.lastName, customer.email, country, city, amount + - Explanation: This setting allows you to retrieve related fields from the Customer entity. Since customer is a relation in the Order table, you need to explicitly include attributes like customer.firstName, customer.lastName, and customer.email. Also, include country and city to analyze customer distribution geographically. + + +:::info +All Looker Studio partner connectors have a **6-minute timeout per query**. If fetching data takes longer than that, the query will fail. Tuning Pagination Top, applying filters, and reducing data volume help ensure queries stay within that limit. + +To avoid this: +- Lower the Pagination Top to reduce the load per request (e.g., try 5,000 or 2,000). +- Add filters in Looker Studio to limit how much data is being fetched. +- Narrow the date range if possible. + +These adjustments can help keep data retrieval efficient and within the allowed time limit. +::: + +Click "Add" to apply the settings and fetch the data. + +### Creating Reports in Looker Studio + +Now that the Qodly Looker Studio Connector is properly configured, you can create insightful reports using Looker Studio’s built-in visualization tools. Follow the steps below to add charts, configure data, add descriptive titles, and style your visualizations clearly and effectively. + +#### Step 1: Add a Chart + +In your Looker Studio report: + +1. Click the Add a chart button from the toolbar. +2. Choose your preferred chart type (e.g., Area Chart, Geo Chart, Time Series Chart, Bar Chart). +3. Click or drag the chosen chart onto your report canvas. + +#### Step 2: Configure Your Chart Data + +With your chart selected, use the Setup panel on the right side to configure your data: + + + + 1. Data Source: Select your configured Qodly data source.

                                                                                + 2. Dimension: Choose a categorical or date-based field (e.g., date, country, city).

                                                                                + 3. Metric: Select the numeric measure to visualize (e.g., amount, orderCount). +
                                                                                + + + +
                                                                                + +You may add optional filters or comparison dates to further refine your visualization. + +#### Step 3: Customize Chart Appearance + +Enhance readability and visual appeal: + + + + 1. Select your chart and click the Style tab in the right panel. + 2. Adjust color schemes, font styles, line thicknesses, and background colors. + 3. For maps, configure color gradients to effectively highlight differences in data values. + 4. Enable or disable legends, axis labels, and tooltips as needed to simplify interpretation. + + + + + + + +:::info Additional Charting Resources +For detailed guidance and advanced configuration options for different types of charts, refer to the official Looker Studio documentation [Chart references](https://cloud.google.com/looker/docs/studio/area-chart-reference). +::: + +### Embedding Looker Studio Reports in Qodly + +To embed Looker Studio reports directly into your Qodly application, you'll need to use the IFrame custom component. An iframe represents a nested browsing context, allowing another HTML page to be displayed seamlessly within your Qodly app page. + +#### Step 1: Install the IFrame Custom Component + +You can obtain the IFrame custom component directly from the [Custom Components list for Qodly Studio](https://github.com/qodly/custom-components?tab=readme-ov-file) in GitHub: + +1. Navigate to the [IFrame custom component repository](https://github.com/TihounaNasrallah/qodly-iframe). +2. Download the [latest release](https://github.com/TihounaNasrallah/qodly-iframe/releases/tag/0.1.2) (qodly_IFrame_version.zip) from the Releases page. + +Once downloaded, follow these steps: + +1. Open Qodly Studio. +2. Locate and click the dedicated [Upload button](../studio/pageLoaders/components/uploadCustomComponents.md#uploading-custom-component) in the Component bar. +3. Upload the downloaded qodly_IFrame_version.zip file. +4. [Install the custom component](../studio/pageLoaders/components/uploadCustomComponents.md#installing-custom-component) when prompted. + +After successful installation, refresh your Qodly Studio page. The new IFrame component will now appear in your components bar, ready for drag-and-drop onto your canvas. + +#### Step 2: Get the Looker Studio Embed URL + +In Looker Studio, open your desired report: + +1. Click Share , then select Embed report . + + + 2. Ensure "embed URL" is checked, then copy the provided link. + + + + + + +#### Step 3: Embed the Report into Qodly + +Return to your Qodly app page in Qodly Studio. + + + + 1. Create a new Qodly source of type String.

                                                                                + 2. Set the copied Looker Studio Embed URL as the default value for this source. +
                                                                                + + + +
                                                                                +3. Drag the newly installed IFrame component onto your canvas. +4. Assign the Qodly source (containing the embed URL) to the IFrame component. +5. Adjust the iframe dimensions to 600x450 pixels (or as needed). + +#### Step 4: Configure Sandbox Settings + +The IFrame custom component uses sandbox attributes to apply security restrictions to embedded content. To ensure your embedded Looker Studio report displays correctly, you must include appropriate sandbox attributes. Without these attributes, your report might not render or function properly. + + + + - allow-storage-access-by-user-activation: Experimental—enables embedded pages to request access to cookies via the Storage Access API.

                                                                                + - allow-scripts: Permits embedded pages to execute JavaScript (but not pop-up windows).

                                                                                + - allow-same-origin: If omitted, the embedded page is treated as from a unique origin, restricting certain browser functionalities.

                                                                                + - allow-popups: Allows pop-up windows (e.g., via window.open()). +
                                                                                + + + +
                                                                                + + +### Conclusion + +Now you're ready to see your report directly embedded within your Qodly application. + + + + +## Google API Disclosure + +Ensure you regularly review permissions and access settings for your embedded reports, especially if sensitive business information is displayed. Keeping your embedded content secure and up-to-date helps maintain overall application integrity and performance. + +Qodly Looker Studio connector adheres to the [Google API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-policy#additional_requirements_for_specific_api_scopes) while using and transferring information received from Google APIs to other applications, including Google’s Limited Use requirements. You can revoke Qodly Looker Studio connector right to access your data at any point from your Google account control panel (https://security.google.com/settings/security/permissions). + + diff --git a/versioned_docs/version-1.1.0/studio/coding.md b/versioned_docs/version-1.1.0/studio/coding.md index fa6d31f9dd..7aed0c3b27 100644 --- a/versioned_docs/version-1.1.0/studio/coding.md +++ b/versioned_docs/version-1.1.0/studio/coding.md @@ -57,8 +57,8 @@ You can create a method or class using one of the three methods:
                                                                                  -
                                                                                1. You can create them individually from dedicated grids on the Studio Homepage.





                                                                                2. -
                                                                                3. In the Explorer, simply click the plus icon located next to either Methods or Classes.




                                                                                4. +
                                                                                5. You can create them individually from dedicated grids on the Studio Homepage.

                                                                                6. +
                                                                                7. In the Explorer, simply click the plus icon located next to either Methods or Classes.

                                                                                8. While in the Page Editor, go to the New + tab and opt for either Methods or Classes.
                                                                                diff --git a/versioned_docs/version-1.1.0/studio/debugging.md b/versioned_docs/version-1.1.0/studio/debugging.md index 520308c6ff..7e8c509934 100644 --- a/versioned_docs/version-1.1.0/studio/debugging.md +++ b/versioned_docs/version-1.1.0/studio/debugging.md @@ -51,9 +51,9 @@ If you wish to stop a debug session, follow these steps:
                                                                                    -
                                                                                  • Keep in progress: Qodly will continue evaluating the code until the end of the current method or function, and then the debugger will be detached.

                                                                                  • -
                                                                                  • Stop: The debugger will be immediately detached.

                                                                                  • -
                                                                                  • Cancel: The debugger will not be detached.

                                                                                  • +
                                                                                  • Keep in progress: Qodly will continue evaluating the code until the end of the current method or function, and then the debugger will be detached.
                                                                                  • +
                                                                                  • Stop: The debugger will be immediately detached.
                                                                                  • +
                                                                                  • Cancel: The debugger will not be detached.
                                                                                @@ -98,9 +98,9 @@ Managing breakpoints is crucial for a streamlined debugging process. By using a
                                                                                  -
                                                                                • Remove Breakpoints in the Current File: Clears all breakpoints from your active file.

                                                                                • -
                                                                                • Remove Breakpoints in Other Files: Removes all breakpoints from non-active files.

                                                                                • -
                                                                                • Remove Breakpoints in All Files: Eliminates all breakpoints across the entire project.

                                                                                • +
                                                                                • Remove Breakpoints in the Current File: Clears all breakpoints from your active file.
                                                                                • +
                                                                                • Remove Breakpoints in Other Files: Removes all breakpoints from non-active files.
                                                                                • +
                                                                                • Remove Breakpoints in All Files: Eliminates all breakpoints across the entire project.
                                                                                diff --git a/versioned_docs/version-1.1.0/studio/httpHandlers.md b/versioned_docs/version-1.1.0/studio/httpHandlers.md index f199e4475f..72d94949d5 100644 --- a/versioned_docs/version-1.1.0/studio/httpHandlers.md +++ b/versioned_docs/version-1.1.0/studio/httpHandlers.md @@ -105,11 +105,11 @@ HTTP Handlers can be added through both the UI and the code editor.
                                                                                  -
                                                                                • Class: Selecting an existing class from the dropdown list or manually entering a class name.

                                                                                • -
                                                                                • Method: Choosing an available method from the selected class or entering a method manually.

                                                                                • -
                                                                                • Pattern: Defining the URL pattern.

                                                                                • -
                                                                                • As Regex: Enabling this if using a regular expression for URL matching.

                                                                                • -
                                                                                • Verbs: Selecting supported HTTP methods (GET, POST, PUT, DELETE).

                                                                                • +
                                                                                • Class: Selecting an existing class from the dropdown list or manually entering a class name.
                                                                                • +
                                                                                • Method: Choosing an available method from the selected class or entering a method manually.
                                                                                • +
                                                                                • Pattern: Defining the URL pattern.
                                                                                • +
                                                                                • As Regex: Enabling this if using a regular expression for URL matching.
                                                                                • +
                                                                                • Verbs: Selecting supported HTTP methods (GET, POST, PUT, DELETE).
                                                                                @@ -126,7 +126,7 @@ When manually entering a class name or method that does not exist, the system pr
                                                                                  -
                                                                                • If the specified class or method does not exist, a Nothing found message appears, and the input field turns red.

                                                                                • +
                                                                                • If the specified class or method does not exist, a Nothing found message appears, and the input field turns red.
                                                                                • Unrecognized entries are automatically removed when pressing Enter.
                                                                                diff --git a/versioned_docs/version-1.1.0/studio/img/qodly-studio-classes-icon-explorer-object-structure.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-classes-icon-explorer-object-structure.png new file mode 100644 index 0000000000..fbfe1a8d2e Binary files /dev/null and b/versioned_docs/version-1.1.0/studio/img/qodly-studio-classes-icon-explorer-object-structure.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/qodly-studio-classes-icon-grid-create-new-class.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-classes-icon-grid-create-new-class.png new file mode 100644 index 0000000000..fbfe1a8d2e Binary files /dev/null and b/versioned_docs/version-1.1.0/studio/img/qodly-studio-classes-icon-grid-create-new-class.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/qodly-studio-data-icon-grid-access-data-explorer.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-data-icon-grid-access-data-explorer.png new file mode 100644 index 0000000000..5ba01e2648 Binary files /dev/null and b/versioned_docs/version-1.1.0/studio/img/qodly-studio-data-icon-grid-access-data-explorer.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/qodly-studio-data-icon-headerbar-access-data-explorer.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-data-icon-headerbar-access-data-explorer.png new file mode 100644 index 0000000000..5ba01e2648 Binary files /dev/null and b/versioned_docs/version-1.1.0/studio/img/qodly-studio-data-icon-headerbar-access-data-explorer.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/overview_debug.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-debug-icon-headerbar-server-debugging.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_debug.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-debug-icon-headerbar-server-debugging.png diff --git a/versioned_docs/version-1.1.0/studio/img/overview_debugger.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-debugger-icon-explorer-error-tools.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_debugger.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-debugger-icon-explorer-error-tools.png diff --git a/versioned_docs/version-1.1.0/studio/img/QodlyStudioOverview.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-home-page-interface-explorer-header-grid.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/QodlyStudioOverview.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-home-page-interface-explorer-header-grid.png diff --git a/versioned_docs/version-1.1.0/studio/img/qodly-studio-methods-icon-explorer-code-blocks.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-methods-icon-explorer-code-blocks.png new file mode 100644 index 0000000000..fbfe1a8d2e Binary files /dev/null and b/versioned_docs/version-1.1.0/studio/img/qodly-studio-methods-icon-explorer-code-blocks.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/qodly-studio-methods-icon-grid-create-new-method.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-methods-icon-grid-create-new-method.png new file mode 100644 index 0000000000..fbfe1a8d2e Binary files /dev/null and b/versioned_docs/version-1.1.0/studio/img/qodly-studio-methods-icon-grid-create-new-method.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/overview_model.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-model-icon-explorer-datastore-structure.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_model.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-model-icon-explorer-datastore-structure.png diff --git a/versioned_docs/version-1.1.0/studio/img/tabs.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-open-tabs-title-bar-editor-navigation.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/tabs.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-open-tabs-title-bar-editor-navigation.png diff --git a/versioned_docs/version-1.1.0/studio/img/overview_Pages.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-pages-icon-project-overview.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_Pages.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-pages-icon-project-overview.png diff --git a/versioned_docs/version-1.1.0/studio/img/overview_preview.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-preview-icon-headerbar-site-rendering.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_preview.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-preview-icon-headerbar-site-rendering.png diff --git a/versioned_docs/version-1.1.0/studio/img/settings-tabpreview.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-preview-mode-tab-italic-label-indicator.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/settings-tabpreview.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-preview-mode-tab-italic-label-indicator.png diff --git a/versioned_docs/version-1.1.0/studio/img/overview_roles.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-roles-privileges-icon-explorer-access-control.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_roles.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-roles-privileges-icon-explorer-access-control.png diff --git a/versioned_docs/version-1.1.0/studio/img/overview_saveAll.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-save-all-icon-headerbar-app-wide-changes.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_saveAll.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-save-all-icon-headerbar-app-wide-changes.png diff --git a/versioned_docs/version-1.1.0/studio/img/qodly-studio-settings-icon-explorer-app-configuration.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-settings-icon-explorer-app-configuration.png new file mode 100644 index 0000000000..d766cf06c2 Binary files /dev/null and b/versioned_docs/version-1.1.0/studio/img/qodly-studio-settings-icon-explorer-app-configuration.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/qodly-studio-settings-icon-headerbar-app-config-options.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-settings-icon-headerbar-app-config-options.png new file mode 100644 index 0000000000..d766cf06c2 Binary files /dev/null and b/versioned_docs/version-1.1.0/studio/img/qodly-studio-settings-icon-headerbar-app-config-options.png differ diff --git a/versioned_docs/version-1.1.0/studio/img/overview_shared.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-shared-icon-explorer-assets-folder.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/overview_shared.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-shared-icon-explorer-assets-folder.png diff --git a/versioned_docs/version-1.1.0/studio/img/tabs-menu.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-tab-context-menu-options-right-click.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/tabs-menu.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-tab-context-menu-options-right-click.png diff --git a/versioned_docs/version-1.1.0/studio/img/tabs-scroll.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-tab-scrollbar-overflow-navigation-editor-tabs.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/tabs-scroll.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-tab-scrollbar-overflow-navigation-editor-tabs.png diff --git a/versioned_docs/version-1.1.0/studio/img/tabs-close.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-unsaved-changes-warning-prompt-dialog.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/tabs-close.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-unsaved-changes-warning-prompt-dialog.png diff --git a/versioned_docs/version-1.1.0/studio/img/tabs-unsaved.png b/versioned_docs/version-1.1.0/studio/img/qodly-studio-unsaved-tab-indicator-modified-content.png similarity index 100% rename from versioned_docs/version-1.1.0/studio/img/tabs-unsaved.png rename to versioned_docs/version-1.1.0/studio/img/qodly-studio-unsaved-tab-indicator-modified-content.png diff --git a/versioned_docs/version-1.1.0/studio/img/tabs-unsaved..png b/versioned_docs/version-1.1.0/studio/img/tabs-unsaved..png deleted file mode 100644 index 54dfd564b2..0000000000 Binary files a/versioned_docs/version-1.1.0/studio/img/tabs-unsaved..png and /dev/null differ diff --git a/versioned_docs/version-1.1.0/studio/model/attributes.md b/versioned_docs/version-1.1.0/studio/model/attributes.md index 7f813c313b..6d7b427fa0 100644 --- a/versioned_docs/version-1.1.0/studio/model/attributes.md +++ b/versioned_docs/version-1.1.0/studio/model/attributes.md @@ -15,7 +15,7 @@ You can view and modify a few of the attribute’s properties when you select or - **Delete**: Deletes the attribute from the datastore class. - **Scope**: A closed lock icon indicates that the attribute is **Not exposed as REST**, i.e. it can only be called from the server code. -- **Name**: [Attribute name](#attribute-names) that you can change by double-clicking on it to render the area enterable. +- **Name**: [Attribute name](#attribute-name) that you can change by double-clicking on it to render the area enterable. - a name in **bold** indicates that an index is associated to the attribute. - a name underlined indicates the primary key attribute - a name in _italics_ indicates a not exposed attribute @@ -23,7 +23,7 @@ You can view and modify a few of the attribute’s properties when you select or - **Type Icon**: Displays the datastore entity type as an icon. - **Type**: Attribute type that you can change by double-clicking on it to render the area enterable. An attribute type can be [scalar](#data-types) or based upon a [relation](#create-a-relation-attribute), in which case it can be of the _classNameEntity_ or _classNameSelection_ type. -All attributes of a datastore class are also listed in the [Outline area](model-editor-interface#outline) of the model editor. +All attributes of a datastore class are also listed in the [Outline area](model-editor-interface.md#outline) of the model editor. ### Attribute name @@ -261,7 +261,7 @@ Similarly, calculated attributes can be included in **sorts**. When a calculated ### Create a calculated attribute -You create a calculated attribute by defining a [`get` function](../../orda/data-model.md#function-get-attributename) in the [**entity class**](#entity-class) of the dataclass. The calculated attribute will be automatically available in the dataclass attributes and in the entity attributes. +You create a calculated attribute by defining a [`get` function](../../orda/data-model.md#function-get-attributename) in the [**entity class**](../../orda/data-model.md#entity-class) of the dataclass. The calculated attribute will be automatically available in the dataclass attributes and in the entity attributes. Three other calculated attribute functions ([`set`](../../orda/data-model.md#function-set-attributename), [`query`](../../orda/data-model.md#function-query-attributename), and [`orderBy`](../../orda/data-model.md#function-orderby-attributename)) can also be defined in the entity class. They are optional. @@ -294,7 +294,7 @@ Here is the list of all available properties: | Max value | Minimum value allowed for the attribute. If the value entered is more than this property, an error is returned. | long, number | | Min value | Minimum value allowed for the attribute. If the value entered is less than this property, an error is returned. | long, number | | Reverse path | This option must be selected for a 1->N relation attribute | related 1->N | -| Scope | "Expose as REST" or "Do not expose as REST". An exposed attribute can be used from anywhere and its value can be displayed using REST requests. A not-exposed attribute can only be used by code called from inside the datastore class, including calculated attributes, functions, methods, and events, executed on the server. Select "Do not expose as REST" for attributes that should not be accessed directly, e.g. "salary". This property can be selected at the [datastore class level](datastore-classes#scope), and attributes inherit from this level. An attribute can override the parent dataclass level with "Do not expose as REST" if the parent was exposed; however, it the parent dataclass property is "Do not expose as REST", the attribute cannot override it. | All | +| Scope | "Expose as REST" or "Do not expose as REST". An exposed attribute can be used from anywhere and its value can be displayed using REST requests. A not-exposed attribute can only be used by code called from inside the datastore class, including calculated attributes, functions, methods, and events, executed on the server. Select "Do not expose as REST" for attributes that should not be accessed directly, e.g. "salary". This property can be selected at the [datastore class level](datastore-classes.md#scope), and attributes inherit from this level. An attribute can override the parent dataclass level with "Do not expose as REST" if the parent was exposed; however, it the parent dataclass property is "Do not expose as REST", the attribute cannot override it. | All | | Unique | Verifies that the value entered be unique. If not, an error is returned | string | ## Permissions diff --git a/versioned_docs/version-1.1.0/studio/model/datastore-classes.md b/versioned_docs/version-1.1.0/studio/model/datastore-classes.md index db89f54ff1..f722142a44 100644 --- a/versioned_docs/version-1.1.0/studio/model/datastore-classes.md +++ b/versioned_docs/version-1.1.0/studio/model/datastore-classes.md @@ -93,7 +93,7 @@ Specifies whether the dataclass is exposed for external access via REST requests :::tip -This property can also be set at the [attribute level](attributes#overview), and attributes inherit this property from their parent datastore class. An attribute can override this with "Do not expose as REST" if the parent is exposed, but cannot do so if the parent is not exposed. +This property can also be set at the [attribute level](attributes.md#overview), and attributes inherit this property from their parent datastore class. An attribute can override this with "Do not expose as REST" if the parent is exposed, but cannot do so if the parent is not exposed. ::: ### Page size diff --git a/versioned_docs/version-1.1.0/studio/model/model-editor-interface.md b/versioned_docs/version-1.1.0/studio/model/model-editor-interface.md index 6777df63dd..805d9bdef5 100644 --- a/versioned_docs/version-1.1.0/studio/model/model-editor-interface.md +++ b/versioned_docs/version-1.1.0/studio/model/model-editor-interface.md @@ -25,7 +25,7 @@ The model view includes permissions, allowing you to assign access rights at any You can access your current project's model in the **Model Editor** by clicking on the in your project's sidebar. :::note -You can also open your model as a [JSON file](#json-view). +You can also open your model as a [JSON file](#model-json-representation). ::: ### Default State @@ -122,7 +122,7 @@ Removing a dataclass from the model does not remove its associated functions. ### Datastore Functions -The Datastore Functions section lists all functions defined at the [cs.DataStore](../../orda/data-model#datastore) class level. These functions can be managed directly from the Outline panel. +The Datastore Functions section lists all functions defined at the [cs.DataStore](../../orda/data-model.md#datastore) class level. These functions can be managed directly from the Outline panel. Functions can be opened and edited by clicking on the edit icon next to the function name . New functions can be added by clicking the Add Function button . @@ -246,6 +246,6 @@ The syntax check feature identifies and corrects syntax errors and formatting is :::warning -Editing the model through the JSON code must be done with care since data model integrity rules are not checked in the Text Editor. In particular, you must pay attention to [naming rules](attributes.md#attribute-name), or [renaming issues](datastore-classes#renaming-a-datastore-class). +Editing the model through the JSON code must be done with care since data model integrity rules are not checked in the Text Editor. In particular, you must pay attention to [naming rules](attributes.md#attribute-name), or [renaming issues](datastore-classes.md#renaming-a-datastore-class). ::: diff --git a/versioned_docs/version-1.1.0/studio/overview.md b/versioned_docs/version-1.1.0/studio/overview.md index 62b8668343..02c819aa41 100644 --- a/versioned_docs/version-1.1.0/studio/overview.md +++ b/versioned_docs/version-1.1.0/studio/overview.md @@ -33,8 +33,8 @@ Deployed Qodly applications are accessible on all popular web browsers, with no Access to Qodly Studio is granted to developers once they complete a series of authentication steps to enter the Qodly Cloud Management Console. From the Development or Staging [environment](../cloud/environmentsOverview.md) within the Qodly Console, you can access your application instance in Qodly Studio by either: -- Clicking on the [Studio](../cloud/consoleOverview#accessing-the-studio) button on the Overview page. -- Clicking on the [Studio URL](../cloud/resourceMonitoring#1-studio-url) in the General tab for the environment. +- Clicking on the [Studio](../cloud/consoleOverview.md#accessing-qodly-studio) button on the Overview page. +- Clicking on the [Studio URL](../cloud/resourceMonitoring.md#1-studio-url) in the General tab for the environment. @@ -43,34 +43,34 @@ Access to Qodly Studio is granted to developers once they complete a series of a When you first step into Qodly Studio, you'll immediately encounter a user-friendly interface. It's divided into three key sections: the `Explorer` ⓵ on the left, a `Header bar`⓶ at the top, and a `Grid container`⓷ in the center. - +Screenshot of the Qodly Studio home page highlighting the Explorer panel, top header bar with debug and preview options, and the central grid container for creating pages, data, classes, and methods. 1. **Explorer**: is where you'll find an overview of your project's essential elements: - - ![qodlyOverview](./img/overview_Pages.png) [Pages](./pageLoaders/pageLoaderOverview#overview): Serve as containers, enveloping various components within your application. - - ![qodlyOverview](./img/overview_methods&Func.png) [Methods](./coding#methods): Function as distinct blocks of code that fulfill specific roles within your application. While they can be invoked from class functions or other methods, components can't directly interact with them. - - ![qodlyOverview](./img/overview_methods&Func.png) [Classes](./coding#classes): Serve as the cornerstone for organizing your code around objects, granting components the capability to directly interact with them. - - ![qodlyOverview](./img/overview_shared.png) Shared: Use this folder to store any contents (local images, downloadable files...) you might need within your app. The contents of this folder can be accessed from Qodyy pages using the [`/$shared` link](pageLoaders/events/bindingActionToEvents.md#shared-folder) or from the QodlyScript language using the [`/SOURCES/Shared`](../language/basics/lang-pathnames.md#filesystem-pathnames) file path. - - ![qodlyOverview](./img/overview_debugger.png) [Debugger](./debugging.md): Provides a suite of debugging tools that address different types of errors during the development phase. - - ![qodlyOverview](./img/overview_roles.png) [Roles And Privileges](./roles/rolesPrivilegesOverview.md): Plays a pivotal role in enforcing data access restrictions within your application, ensuring that the right users access the right data. - - ![qodlyOverview](./img/overview_model.png) [Model](./model/model-editor-interface.md): Defines how data is accessed and stored within structures referred to as datastore classes. - - ![qodlyOverview](./img/overview_settings.png) [Settings](./settings.md): Offer options to configure application-specific settings. + - Qodly Studio Pages icon representing the section for managing and viewing core project elements within the Explorer panel. [Pages](./pageLoaders/pageLoaderOverview.md#page-editor-overview): Serve as containers, enveloping various components within your application. + - Qodly Studio Methods icon in the Explorer panel, representing reusable blocks of code that define specific application logic and can be invoked by classes or other methods. [Methods](./coding.md#methods): Function as distinct blocks of code that fulfill specific roles within your application. While they can be invoked from class functions or other methods, components can't directly interact with them. + - Qodly Studio Classes icon in the Explorer panel, used to define object-oriented structures that components can directly interact with to manage application logic. [Classes](./coding.md#classes): Serve as the cornerstone for organizing your code around objects, granting components the capability to directly interact with them. + - Qodly Studio Shared icon in the Explorer panel, representing the folder where developers store static assets like local images and downloadable files, accessible via /$shared or QodlyScript. Shared: Use this folder to store any contents (local images, downloadable files...) you might need within your app. The contents of this folder can be accessed from Qodyy pages using the [`/$shared` link](pageLoaders/events/bindingActionToEvents.md#shared-folder) or from the QodlyScript language using the [`/SOURCES/Shared`](../language/basics/lang-pathnames.md#filesystem-pathnames) file path. + - Qodly Studio Debugger icon in the Explorer panel, giving access to built-in debugging tools that help identify and resolve development errors efficiently. [Debugger](./debugging.md): Provides a suite of debugging tools that address different types of errors during the development phase. + - Qodly Studio Roles & Privileges icon in the Explorer panel, used to configure and manage access controls that restrict data visibility based on user roles. [Roles And Privileges](./roles/rolesPrivilegesOverview.md): Plays a pivotal role in enforcing data access restrictions within your application, ensuring that the right users access the right data. + - Qodly Studio Model icon in the Explorer panel, representing the structure used to define how data is accessed and stored using datastore classes. [Model](./model/model-editor-interface.md): Defines how data is accessed and stored within structures referred to as datastore classes. + - Qodly Studio Settings icon in the Explorer panel, used to access application-specific configuration options for managing app behavior and preferences. [Settings](./settings.md): Offer options to configure application-specific settings. 2. **Header bar**: provides quick access to several project-related options: - - ![qodlyOverview](./img/overview_debug.png) [Debug](./debugging#starting-a-debug-session): Initiate a debug session on the server, attaching it to your browser, and enable debugging for your app. - - ![qodlyOverview](./img/overview_saveAll.png) Save All: Save all changes made across all open windows within your app. - - ![qodlyOverview](./img/overview_data.png) [Data](../data-explorer/data-explorer.md): Provide access to the Data Explorer, facilitating data-related operations. - - ![qodlyOverview](./img/overview_preview.png) [Preview](./rendering#preview-the-entire-site): Allows you to assess your application's appearance and functionality with ease. - - ![qodlyOverview](./img/overview_settings.png) [Settings](./settings.md): Present a range of options for configuring application-specific settings, tailoring the environment to your app's needs. + - Qodly Studio Debug icon in the header bar, used to initiate server-side debug sessions and attach debugging tools to the browser. [Debug](./debugging.md#starting-a-debug-session): Initiate a debug session on the server, attaching it to your browser, and enable debugging for your app. + - Qodly Studio Save All icon in the header bar, allowing developers to save changes across all open windows and project components. Save All: Save all changes made across all open windows within your app. + - Qodly Studio Data icon in the header bar, providing direct access to the Data Explorer for managing data-related operations. [Data](../data-explorer/data-explorer.md): Provide access to the Data Explorer, facilitating data-related operations. + - Qodly Studio Preview icon in the header bar, used to preview the full application for layout, styling, and functionality review. [Preview](./rendering.md#preview-the-entire-site): Allows you to assess your application's appearance and functionality with ease. + - Qodly Studio Settings icon in the header bar, offering quick access to configuration options for customizing the app environment. [Settings](./settings.md): Present a range of options for configuring application-specific settings, tailoring the environment to your app's needs. 3. **Grid container**: houses a collection of swift shortcuts for a range of actions: - **Create New**: Offers convenient quick links for: - - ![qodlyOverview](./img/overview_Pages.png) [Pages](./pageLoaders/pageLoaderOverview#creating-a-Page): Speedily initiate the creation of a new Page. - - ![qodlyOverview](./img/overview_class.png) [Classes](./coding#creating): Generate a new Class. - - ![qodlyOverview](./img/overview_method.png) [Methods](./coding#creating): Generate a new Method. - - ![qodlyOverview](./img/overview_data.png) [Data](../data-explorer/data-explorer.md): Provide access to the [Data Explorer](../data-explorer/data-explorer.md), facilitating data-related operations. + - Qodly Studio Pages icon as seen in the Grid container, used as a shortcut to quickly create or access project pages. [Pages](./pageLoaders/pageLoaderOverview.md#page-editor-overview): Speedily initiate the creation of a new Page. + - Qodly Studio Classes icon in the Grid container, serving as a shortcut to generate a new class for organizing object-oriented code structures. [Classes](./coding.md#creating): Generate a new Class. + - Qodly Studio Methods icon in the Grid container, used as a shortcut to quickly create a new method that defines reusable blocks of application logic. [Methods](./coding.md#creating): Generate a new Method. + - Qodly Studio Data icon in the Grid container, offering quick access to the Data Explorer for managing and interacting with data sources. [Data](../data-explorer/data-explorer.md): Provide access to the [Data Explorer](../data-explorer/data-explorer.md), facilitating data-related operations. - **Recent Files**: Displays the most recently accessed files, allowing you to quickly revisit your recent work. - **What's New**: Keeps you updated with the latest news and announcements from the Qodly team. @@ -79,7 +79,7 @@ When you first step into Qodly Studio, you'll immediately encounter a user-frien Qodly Studio displays open items with tabs in the title area above the current editor. - +Qodly Studio interface showing the title bar with open tabs for pages, datastore, roles and privileges, and model, allowing quick navigation between active editor items. [By default](#preview-mode), when you open a file, a new tab is added for that file. New tabs are added to the right of the existing tabs. All Qodly files and editors use tabs: model, Pages, methods, classes, roles and privileges, settings, pictures, and so on. @@ -87,14 +87,14 @@ Tabs let you quickly navigate between items and you can drag and drop tabs to re When you have more open items than can fit in the title area, you can use the scroll bar between the tab and editor regions to drag tabs into view. - +Qodly Studio showing a horizontal scrollbar beneath the title bar tabs, enabling users to scroll and access additional open items when the tab list exceeds the visible area. ### Contextual menu Every tab provides access to a contextual menu that you can display with a **right-click** on the tab header: - +Qodly Studio contextual tab menu shown after right-clicking a tab, offering options like reload, rename, close, close others, and tab management actions. The following actions are available: @@ -105,17 +105,17 @@ The following actions are available: - **Close all**: closes all the opened tabs. - **Close saved**: closes all the tabs that contain saved contents. Tabs with unsaved contents are not closed. - **Close tabs to the right/to the left**: closes all opened tabs located at the right side or the left side of the current tab. -- **Switch to Text Editor** (only available with Page and model tabs): displays the [current Page](./pageLoaders/pageLoaderOverview#page-json-representation) or [model](model/model-editor-interface#model-json-representation) as JSON text. When called from the text editor, the menu command toggles to **Switch to Page Editor**/**Switch to Model Editor**. +- **Switch to Text Editor** (only available with Page and model tabs): displays the [current Page](./pageLoaders/pageLoaderOverview.md#page-json-representation) or [model](model/model-editor-interface.md#model-json-representation) as JSON text. When called from the text editor, the menu command toggles to **Switch to Page Editor**/**Switch to Model Editor**. ### Unsaved contents When the contents of a tab has been modified locally but has not been saved, a colored spot is displayed on the right part of the tab header: - +Qodly Studio tab labeled dashboard showing a purple dot indicator, signaling that the tab contains unsaved local modifications. -When closing or reloading a tab, if it contains unsaved changes, an alert window is displayed, allowing you to ignore the changes and close the tab (**Confirm**) or cancel the closure and let you click the [**Save all**](#homepage) button to save the changes. +When closing or reloading a tab, if it contains unsaved changes, an alert window is displayed, allowing you to ignore the changes and close the tab (**Confirm**) or cancel the closure and let you click the [**Save all**](./coding.md#saving) button to save the changes. - +Qodly Studio warning prompt displaying a confirmation dialog when closing a tab with unsaved changes, showing options to Confirm or Cancel the action. ### Preview mode @@ -127,6 +127,6 @@ When the tabs preview mode is enabled, clicking a file in the Explorer displays Preview mode tab is indicated by *italics* in the tab heading: - +Qodly Studio interface showing an italicized 'main' tab label to indicate that the tab is in preview mode. If you'd prefer to not use preview mode and always create a new tab, just let the selector off (default mode). \ No newline at end of file diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/button.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/button.md index e623c05829..49c68fc913 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/button.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/button.md @@ -35,8 +35,7 @@ Enhance the **Button** component to align with your application's requirements u
                                                                                  -
                                                                                • Label: Personalize the label to offer clear instructions or guidance.
                                                                                • -
                                                                                  +
                                                                                • Label: Personalize the label to offer clear instructions or guidance.
                                                                                • Icon Position: Choose the position of the icon in relation to the label, allowing options for top, bottom, left, right, or even hidden for a seamless integration into your design.
                                                                                diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/checkbox.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/checkbox.md index f6943bce49..7592708daa 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/checkbox.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/checkbox.md @@ -49,7 +49,7 @@ Enhance the **Checkbox** component to align with your application's requirements
                                                                                  -
                                                                                • Checkbox Variant: Select this for the standard checkbox style.

                                                                                • +
                                                                                • Checkbox Variant: Select this for the standard checkbox style.
                                                                                • Switch Variant: Choose this for a switch-like appearance.
                                                                                @@ -64,9 +64,9 @@ Enhance the **Checkbox** component to align with your application's requirements
                                                                                  -
                                                                                • Two-State Checkbox (Default): Select this for straightforward binary decisions.

                                                                                • -
                                                                                • Three-State Checkbox: Select this for scenarios requiring an optional or undefined state.

                                                                                • -
                                                                                • Initial Indeterminate Checkbox: Select this to provide an indeterminate state initially, transitioning to two-state behavior after first use.

                                                                                • +
                                                                                • Two-State Checkbox (Default): Select this for straightforward binary decisions.
                                                                                • +
                                                                                • Three-State Checkbox: Select this for scenarios requiring an optional or undefined state.
                                                                                • +
                                                                                • Initial Indeterminate Checkbox: Select this to provide an indeterminate state initially, transitioning to two-state behavior after first use.
                                                                                diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/componentsBasics.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/componentsBasics.md index 5b130348d7..ffb2d87474 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/componentsBasics.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/componentsBasics.md @@ -107,7 +107,7 @@ Formatting options may vary based on the specific data type of the attribute and
                                                                                  -
                                                                                • For Text (string):

                                                                                • +
                                                                                • For Text (string):
                                                                                  • UPPERCASE: Converts all characters to uppercase.
                                                                                  • lowercase: Converts all characters to lowercase.
                                                                                  • @@ -126,7 +126,7 @@ Formatting options may vary based on the specific data type of the attribute and
                                                                                      -
                                                                                    • For Number:

                                                                                    • +
                                                                                    • For Number:
                                                                                      • 0: Standard numerical format.
                                                                                      • 0%: Displays the number as a percentage.
                                                                                      • @@ -147,7 +147,7 @@ Formatting options may vary based on the specific data type of the attribute and
                                                                                          -
                                                                                        • For Date:

                                                                                        • +
                                                                                        • For Date:
                                                                                          • Date short: Displays the date in a short format.
                                                                                          • Date long: Displays the date in a long format.
                                                                                          • diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/datatable.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/datatable.md index 129f1283c4..a1d3e1b711 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/datatable.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/datatable.md @@ -61,10 +61,9 @@ Enhance the **DataTable** component to align with your application's requirement
                                                                                              -
                                                                                            • Sorting Behavior: Control the scrolling behavior of the DataTable after sorting columns. This feature improves navigation and focus in large tables by offering two options:
                                                                                            • -
                                                                                              +
                                                                                            • Sorting Behavior: Control the scrolling behavior of the DataTable after sorting columns. This feature improves navigation and focus in large tables by offering two options:
                                                                                              • -
                                                                                              • Scroll to Selection (default): After sorting, the table keeps the selected element in focus and ensures it remains in view.

                                                                                              • +
                                                                                              • Scroll to Selection (default): After sorting, the table keeps the selected element in focus and ensures it remains in view.
                                                                                              • Scroll to Top: After sorting, the table scrolls to the top while retaining the selected element in the table.
                                                                                            @@ -80,10 +79,10 @@ Enhance the **DataTable** component to align with your application's requirement
                                                                                              -
                                                                                            • Title: The title is the text displayed in the header row as the label for the column. It also appears as the column name in the properties area.

                                                                                            • -
                                                                                            • Source: The source attribute specifies the qodlysource for the column. Typically, it refers to an attribute whose value depends on each element of the DataTable's qodlysource. This determines the content to be displayed in the column cells.

                                                                                            • -
                                                                                            • Format: The format property allows you to define how the data in the column should be displayed, depending on its type. It specifies the visual representation of the data, such as date formatting or decimal places. See Formats for a description of available formats.

                                                                                            • -
                                                                                            • Width: The width of the column can be customized. You have the option to define the width in pixels or as a percentage. The unit menu at the right side of the entry area lets you choose between PX (pixels) or % (percentage).

                                                                                            • +
                                                                                            • Title: The title is the text displayed in the header row as the label for the column. It also appears as the column name in the properties area.
                                                                                            • +
                                                                                            • Source: The source attribute specifies the qodlysource for the column. Typically, it refers to an attribute whose value depends on each element of the DataTable's qodlysource. This determines the content to be displayed in the column cells.
                                                                                            • +
                                                                                            • Format: The format property allows you to define how the data in the column should be displayed, depending on its type. It specifies the visual representation of the data, such as date formatting or decimal places. See Formats for a description of available formats.
                                                                                            • +
                                                                                            • Width: The width of the column can be customized. You have the option to define the width in pixels or as a percentage. The unit menu at the right side of the entry area lets you choose between PX (pixels) or % (percentage).
                                                                                            • Sorting: The sorting selector enables users to interactively sort the column. When this selector is activated, users can click on the header area of the column to perform ascending or descending sorting at runtime.
                                                                                            @@ -112,7 +111,7 @@ To associate data with the **DataTable** component, follow these steps:
                                                                                              -
                                                                                            1. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Data Table component.

                                                                                            2. +
                                                                                            3. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Data Table component.
                                                                                            4. Define the Qodly Source: Specify the appropriate qodlysource that contains the data you want to display within the DataTable. For instance, you can select an entity selection, such as the Packages dataclass.
                                                                                            @@ -353,14 +352,14 @@ Here's a glimpse of how the **DataTable** component will look and behave in acti :::info -Customize the styles of the DataTable component by utilizing specific CSS classes that target various elements of the DataTable. For more details, refer to the section on [Customizing DataTable Styles](../styling#customizing-datatable-styles). +Customize the styles of the DataTable component by utilizing specific CSS classes that target various elements of the DataTable. For more details, refer to the section on [Customizing DataTable Styles](#customizing-datatable-styles). ::: ## Triggers and Events The **DataTable** component can respond to various events, enabling dynamic user experiences. -Additional information including the **column number**, **row number**, and **column qodlysource name** are returned by the [`webEvent` command](../../../language/WebFormClass.md#webevent) when called in an event function triggered by a **DataTable** component. +Additional information including the **column number**, **row number**, and **column qodlysource name** are returned by the [`webEvent` command](../../../language/commands/webEvent.md) when called in an event function triggered by a **DataTable** component. Events that can trigger actions within the component include: diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/fileupload.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/fileupload.md index dd77bef12e..ffc5627446 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/fileupload.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/fileupload.md @@ -58,7 +58,7 @@ Enhance the **File Upload** component to align with your application's requireme
                                                                                              -
                                                                                            • Size Limit: Define the maximum file size users are allowed to upload. Choose from units such as KB, MB, and GB.

                                                                                            • +
                                                                                            • Size Limit: Define the maximum file size users are allowed to upload. Choose from units such as KB, MB, and GB.
                                                                                            • If a user attempts to upload a file exceeding the specified size, an error message is displayed in the browser.
                                                                                            diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/matrix.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/matrix.md index 41a2cda40a..605f400496 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/matrix.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/matrix.md @@ -62,8 +62,7 @@ To associate data with the **Matrix** component, follow these steps:
                                                                                              -
                                                                                            1. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Matrix component.
                                                                                            2. -
                                                                                              +
                                                                                            3. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Matrix component.
                                                                                            4. Define the Qodly Source: Specify the appropriate qodlysource that contains the data you want to display within the Matrix. For instance, you can select an entity selection from a relevant dataclass, such as roomSelection.
                                                                                            @@ -128,10 +127,10 @@ To implement this functionality, follow these steps:
                                                                                              -
                                                                                            1. Integrate the Matrix component into the interface.


                                                                                            2. -
                                                                                            3. Select a Qodly Source like Rooms for the Matrix.


                                                                                            4. -
                                                                                            5. Embed a component (e.g., a button) within the Matrix for each iterated data.


                                                                                            6. -
                                                                                            7. Bind the desired function, like selectRoomOption, to the component's event, such as a button click, using $This.


                                                                                            8. +
                                                                                            9. Integrate the Matrix component into the interface.

                                                                                            10. +
                                                                                            11. Select a Qodly Source like Rooms for the Matrix.

                                                                                            12. +
                                                                                            13. Embed a component (e.g., a button) within the Matrix for each iterated data.

                                                                                            14. +
                                                                                            15. Bind the desired function, like selectRoomOption, to the component's event, such as a button click, using $This.

                                                                                            16. In the code editor, within the function, you can directly retrieve the data of the currently selected element without the need to pass the selected element qodlysource as a parameter to the function.
                                                                                            @@ -159,7 +158,7 @@ The Matrix component supports a range of CSS classes, enabling customization of | **Class Name** | **Applies To** | **Description** | |------------------|-------------------------------|--------------------------------------------| | `.FdVirtualGrid` | The entire matrix | Styles the entire matrix area. | -| `.innerScrollContainer` | All the default styleboxes in the matrix | Targets all the [default styleboxes](stylebox#enhancing-content-presentation) incorporated in the matrix. | +| `.innerScrollContainer` | All the default styleboxes in the matrix | Targets all the [default styleboxes](stylebox.md#enhancing-content-presentation) incorporated in the matrix. | | `.innerScrollContainer > div.selected` | The selected stylebox | Applies styles to the currently selected stylebox. | | `.innerScrollContainer > div:hover` | The hovered stylebox | Applies styles to the currently hovered stylebox. | | `.fd-stylebox > div` | The internal elements of styleboxes | Targets the internal components of the styleboxes that form the main Matrix. | diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/radio.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/radio.md index def07cae0d..5dd1fa9b72 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/radio.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/radio.md @@ -47,7 +47,7 @@ Enhance the **Radio** component to align with your application's requirements us
                                                                                              -
                                                                                            • Single Selection: Users can choose only one option at a time, ensuring that their selections are distinct and non-overlapping.

                                                                                            • +
                                                                                            • Single Selection: Users can choose only one option at a time, ensuring that their selections are distinct and non-overlapping.
                                                                                            • Multiple Selection: Users can choose multiple options that are relevant to their needs.
                                                                                            @@ -75,7 +75,7 @@ Enhance the **Radio** component to align with your application's requirements us
                                                                                              -
                                                                                            • Label: A descriptive text label for each option.

                                                                                            • +
                                                                                            • Label: A descriptive text label for each option.
                                                                                            • Value: A distinct value to each option, enabling effective data handling based on the selections made by users.
                                                                                            diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/rangeinput.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/rangeinput.md index 413edbf496..20812176c7 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/rangeinput.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/rangeinput.md @@ -49,7 +49,7 @@ Enhance the **Range Input** component to align with your application's requireme
                                                                                              -
                                                                                            • Vertical Orientation (Default): By default, the Range Input component is oriented vertically. This means that Slider container is stacked from top to bottom.

                                                                                            • +
                                                                                            • Vertical Orientation (Default): By default, the Range Input component is oriented vertically. This means that Slider container is stacked from top to bottom.
                                                                                            • Horizontal Orientation: When the Range Input component is configured with a horizontal orientation, Slider container is arranged from left to right.
                                                                                            @@ -82,11 +82,11 @@ Within the **Range Input** component, an embedded **Slider Container** allows fo
                                                                                              -
                                                                                            • Min Value: Set the minimum value that users can select within the range.

                                                                                            • -
                                                                                            • Max Value: Define the maximum value that users can select within the range.

                                                                                            • -
                                                                                            • Step: Determine the increment value when users interact with the component.

                                                                                            • +
                                                                                            • Min Value: Set the minimum value that users can select within the range.
                                                                                            • +
                                                                                            • Max Value: Define the maximum value that users can select within the range.
                                                                                            • +
                                                                                            • Step: Determine the increment value when users interact with the component.
                                                                                            diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/selectbox.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/selectbox.md index a595ada591..8a721f0d8b 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/selectbox.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/selectbox.md @@ -98,7 +98,7 @@ To associate data with the **Select Box** component, follow these steps:
                                                                                              -
                                                                                            1. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Select Box component.

                                                                                            2. +
                                                                                            3. Navigate to the Properties Panel: Access the Data Access category located within the Properties panel for the Select Box component.
                                                                                            4. Define the Qodly Source: Specify the appropriate qodlysource that contains the data you want to display within the Select Box. For instance, you can select an entity selection, such as the Destination dataclass.
                                                                                            @@ -126,7 +126,7 @@ To associate data iterated over a Qodly Source, you can follow these additional
                                                                                              -
                                                                                            1. Choose the Iterator: Choose the iterator corresponding to the iterated data (e.g., $This) to represent the current data item.

                                                                                            2. +
                                                                                            3. Choose the Iterator: Choose the iterator corresponding to the iterated data (e.g., $This) to represent the current data item.
                                                                                            4. Choose the Attribute: Once you've selected the iterator, choose the specific attribute that you want to display within the component. This could be attributes like the name of the destination, the country, or any other relevant information.
                                                                                            diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/selectinput.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/selectinput.md index c67ade7644..a0b9067303 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/selectinput.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/selectinput.md @@ -72,7 +72,7 @@ Within the **Select Input** component, an embedded **Select** allows for further
                                                                                              -
                                                                                            • Label: A descriptive text label for each option.

                                                                                            • +
                                                                                            • Label: A descriptive text label for each option.
                                                                                            • Value: A distinct value to each option, enabling effective data handling based on the selections made by users.
                                                                                            diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/tabs.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/tabs.md index 899c67db88..b613eaaad2 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/tabs.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/tabs.md @@ -34,7 +34,7 @@ Enhance the Tabs component to align with your application's requirements using t
                                                                                              -
                                                                                            • Line Variant: Select the "Line" variant for tabs with an underlined styling effect.

                                                                                            • +
                                                                                            • Line Variant: Select the "Line" variant for tabs with an underlined styling effect.
                                                                                            • Enclosed Variant: Opt for the "Enclosed" variant to showcase tabs with a bordered presentation. This choice adds an additional layer of style to your tabs.
                                                                                            @@ -50,9 +50,9 @@ Enhance the Tabs component to align with your application's requirements using t
                                                                                              -
                                                                                            • Title Customization: Modify tab titles to precisely reflect the content or functionality associated with each tab.

                                                                                            • -
                                                                                            • Tab Duplication: Duplicate existing tabs to replicate configurations quickly by clicking on the icon.

                                                                                            • -
                                                                                            • Tab Removal: Delete tabs that no longer serve a purpose by clicking on the icon.

                                                                                            • +
                                                                                            • Title Customization: Modify tab titles to precisely reflect the content or functionality associated with each tab.
                                                                                            • +
                                                                                            • Tab Duplication: Duplicate existing tabs to replicate configurations quickly by clicking on the icon.
                                                                                            • +
                                                                                            • Tab Removal: Delete tabs that no longer serve a purpose by clicking on the icon.
                                                                                            • Moving Tab: Arrange tabs to your preferred position by clicking on the icon.
                                                                                            diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/text.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/text.md index 12f0f78e57..6ded5f95f7 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/text.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/text.md @@ -65,7 +65,7 @@ Enhance the **Text** component to align with your application's requirements usi :::tip When the hyperlink directs to a file path within the `Shared` folder, it doesn't open in a new tab; instead, the browser triggers a download. -This follows the same concept as [Navigate to Shared Folder Content](../events/bindingActionToEvents#shared-folder) through the [External Link](../events/bindingActionToEvents#external-links) option. +This follows the same concept as [Navigate to Shared Folder Content](../events/bindingActionToEvents.md#shared-folder) through the [External Link](../events/bindingActionToEvents.md#external-links) option. ::: :::warning diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/textinput.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/textinput.md index b0819e56f5..57a0c854cb 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/textinput.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/textinput.md @@ -67,7 +67,7 @@ Within the **Text Input** component, an embedded **Input** allows for further cu
                                                                                              -
                                                                                            • Placeholder: Set a placeholder to provide users with a hint or example of the expected input. This text appears within the input field and disappears as soon as users begin typing.

                                                                                            • +
                                                                                            • Placeholder: Set a placeholder to provide users with a hint or example of the expected input. This text appears within the input field and disappears as soon as users begin typing.
                                                                                            • Input Type: Select the appropriate input type to match the nature of the expected data. Available types include:
                                                                                            @@ -154,7 +154,7 @@ Within the **Text Input** component, an embedded **Input** allows for further cu :::tip Intervals for Date Input The Intervals feature allows users to control date selection by either linking a datasource or manually defining intervals:
                                                                                              -
                                                                                            • You can define date intervals manually using the "Add Interval" button.

                                                                                            • +
                                                                                            • You can define date intervals manually using the "Add Interval" button.
                                                                                            • | **Interval Type** | **Description** | **Available Options** | |--------------------|----------------|----------------------| | **Starting from** | Defines a start date from which users can select dates onward. | - **Today checkbox**: sets the start date as today
                                                                                              - **From**: calendar picker to select a start date | diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/components/uploadCustomComponents.md b/versioned_docs/version-1.1.0/studio/pageLoaders/components/uploadCustomComponents.md index b12360a77d..41d27c8ee9 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/components/uploadCustomComponents.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/components/uploadCustomComponents.md @@ -8,7 +8,7 @@ import Column from '@site/src/components/Column' ## Overview -Qodly Studio offers an upload functionality to enhance the user experience and streamline the integration of custom components. This feature enables users to upload components generated using the [`npm run build` command](../../../customComponent/setup#building-the-project). +Qodly Studio offers an upload functionality to enhance the user experience and streamline the integration of custom components. This feature enables users to upload components generated using the [`npm run build` command](../../../customComponent/setup.md#building-the-project). ## Community's Custom Components @@ -34,8 +34,7 @@ Clicking the button opens a popup with two upload methods:
                                                                                                -
                                                                                              • Users can drag and drop a component file onto the designated area within the popup.
                                                                                              • -
                                                                                                +
                                                                                              • Users can drag and drop a component file onto the designated area within the popup.
                                                                                              • Alternatively, users have the option to select a component file from their computer using a file explorer.
                                                                                              diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/events/bindingActionToEvents.md b/versioned_docs/version-1.1.0/studio/pageLoaders/events/bindingActionToEvents.md index b68ec4f4c4..d39d649cd4 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/events/bindingActionToEvents.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/events/bindingActionToEvents.md @@ -71,7 +71,7 @@ Keep in mind that the **Create** action only creates a new, blank entity in memo
                                                                                                -
                                                                                              • Provide simple UI feedback on a Save, Reload, or Drop standard action on an entity.

                                                                                              • +
                                                                                              • Provide simple UI feedback on a Save, Reload, or Drop standard action on an entity.
                                                                                              • Provide simple UI feedback on a Reload, Order by, or Query standard action on an EntitySelection.
                                                                                              @@ -128,7 +128,7 @@ The `Base` state and `Conditional` states, however, are not included among these ::: :::tip -The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass#enablestate) is called several times with different states). +The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate) is called several times with different states). ::: :::warning @@ -214,7 +214,7 @@ The feature for providing feedback is not applicable in the context of navigatio ### External Links -In addition to navigating to Pages, Qodly Studio offers a convenient way to direct users to external links. The process follows the same steps as outlined for [associating navigation actions with events for Pages](#Pages), with a slight variation in the "Target Type" step: +In addition to navigating to Pages, Qodly Studio offers a convenient way to direct users to external links. The process follows the same steps as outlined for [associating navigation actions with events for Pages](#pages), with a slight variation in the "Target Type" step: @@ -231,8 +231,7 @@ In addition to navigating to Pages, Qodly Studio offers a convenient way to dire 2. Define Transition Method: Similar to configuring Page navigation, you can specify how the external link will open. However, for external links, you have two options:

                                                                                                -
                                                                                              • New Tab: Induce the opening of a new browser tab.
                                                                                              • -
                                                                                                +
                                                                                              • New Tab: Induce the opening of a new browser tab.
                                                                                              • Current Tab: Replace the ongoing browser tab with the chosen external link.
                                                                                              @@ -274,7 +273,7 @@ When the path points to a file, it doesn't open it in a new tab but instead init
                                                                                                -
                                                                                              • If your class function defines a specific variable for the result, its name will be displayed in the label within the return parameter section.

                                                                                              • +
                                                                                              • If your class function defines a specific variable for the result, its name will be displayed in the label within the return parameter section.
                                                                                              • However, if your class function does not specify a result name, the default label result will be used in the return parameter section.
                                                                                              @@ -449,10 +448,8 @@ exposed onHTTPGet function productManual(productName : string) : 4D.OutgoingMess
                                                                                                -
                                                                                              • New Browser Tab: Opens the response in a new browser tab, allowing users to view or download content like PDFs independently.
                                                                                              • -
                                                                                                -
                                                                                              • Current Browser Tab: Loads the content in the current tab, replacing the existing page content.
                                                                                              • -
                                                                                                +
                                                                                              • New Browser Tab: Opens the response in a new browser tab, allowing users to view or download content like PDFs independently.
                                                                                              • +
                                                                                              • Current Browser Tab: Loads the content in the current tab, replacing the existing page content.
                                                                                              • Nowhere: Ignores the response, preventing the browser from displaying any content, even if the function returns a 4D.OutgoingMessage instance. This option is useful for backend processing where a visible response is not required.
                                                                                              @@ -481,8 +478,7 @@ exposed onHTTPGet function productManual(productName : string) : 4D.OutgoingMess 1. The type of action:

                                                                                                -
                                                                                              • Open: This action causes the dialog to be displayed.
                                                                                              • -
                                                                                                +
                                                                                              • Open: This action causes the dialog to be displayed.
                                                                                              • Close: This action leads to the closing of the dialog.
                                                                                              diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/events/eventsManagement.md b/versioned_docs/version-1.1.0/studio/pageLoaders/events/eventsManagement.md index 7d72429c4a..1640c3b944 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/events/eventsManagement.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/events/eventsManagement.md @@ -11,7 +11,7 @@ The Contextual panel facilitates the association of class functions, navigation To bind class functions, navigation actions or standard actions with events, follow these steps: -1. **Select a Component or Qodly Source**: Begin by choosing the component or qodlysource to which you want to attach an event. This selection can be made using the canvas, the [outline](../pageLoaderOverview#outline), or, in the case of Qodly sources, either the [shared Qodly Sources](../qodlySources#from-a-namespace-shared-qodly-source) area or the [local Qodly Sources](../qodlySources#from-this-page) area. +1. **Select a Component or Qodly Source**: Begin by choosing the component or qodlysource to which you want to attach an event. This selection can be made using the canvas, the [outline](../pageLoaderOverview.md#outline), or, in the case of Qodly sources, either the [shared Qodly Sources](../qodlySources.md#from-a-namespace-shared-qodly-source) area or the [local Qodly Sources](../qodlySources.md#from-this-page) area. 2. **Expand the Contextual Panel**: Once your selection is made, expand the `Contextual panel` . It will provide you with a list of compatible events specifically tailored to your chosen component or qodlysource. @@ -185,7 +185,7 @@ For events bound to Class functions, the collapsed card displays the function si @@ -196,7 +196,7 @@ For events bound to Class functions, the collapsed card displays the function si @@ -207,7 +207,7 @@ For events bound to Class functions, the collapsed card displays the function si diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/pageLoaderOverview.md b/versioned_docs/version-1.1.0/studio/pageLoaders/pageLoaderOverview.md index ba52b25859..bb7e418914 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/pageLoaderOverview.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/pageLoaderOverview.md @@ -11,8 +11,8 @@ In Qodly, a project's groundwork starts with a Page, which acts as the primary c
                                                                                                -
                                                                                              1. On the Qodly Studio Homepage, select Page and name the new Page in the creation modal.





                                                                                              2. -
                                                                                              3. In the Explorer, simply click the plus icon located next to Pages.




                                                                                              4. +
                                                                                              5. On the Qodly Studio Homepage, select Page and name the new Page in the creation modal.

                                                                                              6. +
                                                                                              7. In the Explorer, simply click the plus icon located next to Pages.

                                                                                              8. While in the Page Editor, go to the New + tab and opt for Page.
                                                                                              @@ -43,8 +43,8 @@ The Page Editor enhances your application by providing a versatile toolkit for i 10. **Device toolbar**: Coming Soon. 11. [**Breadcrumbs**](#breadcrumbs): Displays component hierarchy for navigation. -12. [**Tabs**](../overview.md#tabs): Organizes open Pages and all other open elements, including [class functions](../coding#classes), [model](../model/model-editor-interface.md), etc. -13. [**Tooltip**](components/componentsBasics#tooltip): Offers efficient component management and manipulation actions. +12. [**Tabs**](../overview.md#tabs): Organizes open Pages and all other open elements, including [class functions](../coding.md#classes), [model](../model/model-editor-interface.md), etc. +13. [**Tooltip**](components/componentsBasics.md#tooltip): Offers efficient component management and manipulation actions. ## Breadcrumbs @@ -362,7 +362,7 @@ Server Side allows you to control the component's behavior, such as [hiding](../ Discover numerous customization avenues that empower you to fine-tune components according to distinct needs. :::info -For further details, refer to the [Properties Panel Styling Options](./styling#properties-panel-styling-options) section. +For further details, refer to the [Properties Panel Styling Options](./styling.md#properties-panel-styling-options) section. ::: :::info diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/qodlySources.md b/versioned_docs/version-1.1.0/studio/pageLoaders/qodlySources.md index 06186cf5ab..7feab3a4e0 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/qodlySources.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/qodlySources.md @@ -16,7 +16,7 @@ Qodly Sources are integral to Qodly's architectural design, simplifying the deve ### Events and Qodly Sources -You can also attach events to qodlysources, triggering specific actions when these qodlysources are updated in the web browser. Please refer to [Qodly Source Events](events/bindingActionToEvents#qodly-source-events) for more details. +You can also attach events to qodlysources, triggering specific actions when these qodlysources are updated in the web browser. Please refer to [Qodly Source Events](events/bindingActionToEvents.md#qodly-sources) for more details. ![components](./img/QodlySource-1.2.png) @@ -75,18 +75,14 @@ Within the Page Editor, the **Qodly Sources** section conveniently organizes ava
                                                                                                -
                                                                                              • A Search area for filtering the qodlysource list.
                                                                                              • -
                                                                                                -
                                                                                              • The Catalog, containing:
                                                                                              • -
                                                                                                +
                                                                                              • A Search area for filtering the qodlysource list.
                                                                                              • +
                                                                                              • The Catalog, containing:
                                                                                                • -
                                                                                                • Dataclasses from your application. Here, you can designate entities or entity selections from your Datastore, which will be handled by the server as qodlysources.
                                                                                                • -
                                                                                                  +
                                                                                                • Dataclasses from your application. Here, you can designate entities or entity selections from your Datastore, which will be handled by the server as qodlysources.
                                                                                                • Functions defined at the datastore level and within each dataclass.

                                                                                                -
                                                                                              • This Page: qodlysource exclusive to the current Page.
                                                                                              • -
                                                                                                +
                                                                                              • This Page: qodlysource exclusive to the current Page.
                                                                                              • Namespaces: Shared qodlysources organized by namespaces. You can create a namespace by clicking the + icon or when defining a shared qodlysource.
                                                                                              @@ -309,8 +305,7 @@ Iterative components can be bound to two types of qodlysources:
                                                                                                -
                                                                                              • Qodly Source: This is the primary qodlysource used for iterating through data. Its attributes are bound to the component, allowing you to display and work with the iterative data. Typically, this qodlysource represents an entity selection or a array.
                                                                                              • -
                                                                                                +
                                                                                              • Qodly Source: This is the primary qodlysource used for iterating through data. Its attributes are bound to the component, allowing you to display and work with the iterative data. Typically, this qodlysource represents an entity selection or a array.
                                                                                              • Selected Element: This secondary qodlysource is used to retrieve the currently selected item within the iterative component. In most cases, it represents an entity or a array element.
                                                                                              diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/states/nonConditionalState.md b/versioned_docs/version-1.1.0/studio/pageLoaders/states/nonConditionalState.md index 019fbc8055..21926c0322 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/states/nonConditionalState.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/states/nonConditionalState.md @@ -147,8 +147,8 @@ Steps to Reset a Component:
                                                                                                -
                                                                                              1. Locate the Component: Find the component in the Page outline.

                                                                                              2. -
                                                                                              3. Click the Reset Button: This button appears as a circular arrow icon next to the component.

                                                                                              4. +
                                                                                              5. Locate the Component: Find the component in the Page outline.
                                                                                              6. +
                                                                                              7. Click the Reset Button: This button appears as a circular arrow icon next to the component.
                                                                                              8. Confirm Reset: When prompted, confirm the action to ensure changes are reverted.
                                                                                              @@ -206,7 +206,7 @@ The `Base` state and `Conditional` states, however, are not included among these ::: :::tip -The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass#enablestate) is called several times with different states). +The states are enabled in the given order of the standard action (same if [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate) is called several times with different states). ::: :::warning @@ -218,8 +218,8 @@ If a state is initially "Non-Conditional" but later transitions to a "Conditiona In addition to the standard actions, Page object exposes several states related functions with error handling for "Conditional" states, like: -- [`WebForm.enableState`](../../../language/WebFormClass#enablestate): Applies the differences from selected states to the current Page. -- [`WebForm.disableState`](../../../language/WebFormClass#disablestate): Removes the applied differences from the Page. +- [`WebForm.enableState`](../../../language/WebFormClass.md#enablestate): Applies the differences from selected states to the current Page. +- [`WebForm.disableState`](../../../language/WebFormClass.md#disablestate): Removes the applied differences from the Page. :::info These functions are designed to target only "Non-Conditional" states. In the event a "Conditional" state is used, the function will either return an error or not execute any action. diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/states/stateOverview.md b/versioned_docs/version-1.1.0/studio/pageLoaders/states/stateOverview.md index 363e409379..b66697e2f1 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/states/stateOverview.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/states/stateOverview.md @@ -152,8 +152,8 @@ To designate a state as the default:
                                                                                                -
                                                                                              1. Locate the State: In the "States" panel, find the state you want to set as the default..

                                                                                              2. -
                                                                                              3. Set as Default Button: Next to the state's name, you will see a checkbox labeled "Set as default state". Check this box to set the state as the default.

                                                                                              4. +
                                                                                              5. Locate the State: In the "States" panel, find the state you want to set as the default..
                                                                                              6. +
                                                                                              7. Set as Default Button: Next to the state's name, you will see a checkbox labeled "Set as default state". Check this box to set the state as the default.
                                                                                              diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/styling.md b/versioned_docs/version-1.1.0/studio/pageLoaders/styling.md index f3ed01cabf..ed69bfecf6 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/styling.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/styling.md @@ -94,7 +94,7 @@ To add a CSS class, click the styles-library
                                                                                                -
                                                                                              • For a local CSS class: Leave the "Create as Shared" option unchecked.

                                                                                              • +
                                                                                              • For a local CSS class: Leave the "Create as Shared" option unchecked.
                                                                                              • For a shared CSS class: Check the "Create as Shared" option.
                                                                                              @@ -126,7 +126,7 @@ To add a CSS class, click the styles-library
                                                                                              -- Both **Local** and **Shared** CSS class codes can be modified in the [Contextual panel](../pageLoaders/pageLoaderOverview#contextual-panel) at the interface's bottom. +- Both **Local** and **Shared** CSS class codes can be modified in the [Contextual panel](../pageLoaders/pageLoaderOverview.md#contextual-panel) at the interface's bottom. styles-library diff --git a/versioned_docs/version-1.1.0/studio/pageLoaders/templates.md b/versioned_docs/version-1.1.0/studio/pageLoaders/templates.md index 9d8aae3411..08e7b765e3 100644 --- a/versioned_docs/version-1.1.0/studio/pageLoaders/templates.md +++ b/versioned_docs/version-1.1.0/studio/pageLoaders/templates.md @@ -19,8 +19,7 @@ Navigate to the Components section and locate the Templates tab to explore the a
                                                                                                -
                                                                                              1. Navigate to the Components Section: Find the Templates tab within the Components section.
                                                                                              2. -
                                                                                                +
                                                                                              3. Navigate to the Components Section: Find the Templates tab within the Components section.
                                                                                              4. Select a Category: Once in the Templates tab, browse through the available categories. Choose the category that aligns with your project's requirements. For example, you might opt for the Team management category styles-library.
                                                                                              @@ -36,11 +35,13 @@ Quickly find categories by name using the search box styles-library
                                                                                                -
                                                                                              1. Explore Templates: Upon selection, a panel opens, presenting various templates.
                                                                                              2. -
                                                                                                - Each template is accompanied by a Preview Image to visualize the template's content and a Title and Description to understand the template's purpose and functionality. -

                                                                                                - styles-library +
                                                                                              3. + Explore Templates: Upon selection, a panel opens, presenting various templates. +

                                                                                                + Each template is accompanied by a Preview Image to visualize the template's content and a Title and Description to understand the template's purpose and functionality. +

                                                                                                + styles-library +
                                                                                              @@ -56,10 +57,8 @@ To use a template from the selected category, for instance, the datatable catego
                                                                                                -
                                                                                              1. Select a Category: Click on the desired category (e.g., Datatables, Travel, or Business). This will open a panel displaying all the templates available within that category.
                                                                                              2. -
                                                                                                -
                                                                                              3. Choose a Template: Browse the templates shown in the panel. Each template includes a preview image and a brief description.
                                                                                              4. -
                                                                                                +
                                                                                              5. Select a Category: Click on the desired category (e.g., Datatables, Travel, or Business). This will open a panel displaying all the templates available within that category.
                                                                                              6. +
                                                                                              7. Choose a Template: Browse the templates shown in the panel. Each template includes a preview image and a brief description.
                                                                                              8. Drag the Template (Not the Category!): Click and drag a specific template from the panel directly onto the canvas.
                                                                                              diff --git a/versioned_docs/version-1.1.0/studio/rendering.md b/versioned_docs/version-1.1.0/studio/rendering.md index aeec9ab5cb..714a59be83 100644 --- a/versioned_docs/version-1.1.0/studio/rendering.md +++ b/versioned_docs/version-1.1.0/studio/rendering.md @@ -23,7 +23,7 @@ In the case of Qodly Studio, rendering takes a different path compared to conven - **Rendering Trigger**: Accessing the Page directly in a web browser is not an option. Instead, the Page is "**rendered**" when users initiate the rendering process, which can be done in one of two ways: - - **Preview in Qodly Studio**: Users have the option to [preview the Page within Qodly Studio interface](#preview-in-the-studio). + - **Preview in Qodly Studio**: Users have the option to [preview the Page within Qodly Studio interface](#preview-in-qodly-studio). - **Dedicated Browser Tab**: Alternatively, users can opt to [render the Page in a separate browser tab](#preview-in-a-browser-window). @@ -157,7 +157,7 @@ Understanding the lifecycle of a page is crucial for diagnosing and fixing rende - **Initializing Shared Qodly Sources**: During rendering, shared Qodly sources are initialized. These sources provide data that multiple parts of the page can access and use. :::info - Since Qodly treats each page load or tab navigation as a new rendering cycle, these shared sources are reinitialized every time the page renders. This ensures that the page always reflects the most up-to-date data. However, this also means that Shared Qodly Sources are reset during each re-render **unless navigation is done through a page loader**. When [**Binding Navigation Actions to Events**](./pageLoaders/events/bindingActionToEvents#binding-navigation-actions-to-events) and using a **Page Loader** or **Page Loader (Self)**, the Shared Qodly Source persist across navigations. The [Page Loader](./pageLoaders/pageLoaderOverview) manages state in a way that prevents full reinitialization, maintaining the Shared Qodly Sources and ensuring continuity across navigations without resetting the data. + Since Qodly treats each page load or tab navigation as a new rendering cycle, these shared sources are reinitialized every time the page renders. This ensures that the page always reflects the most up-to-date data. However, this also means that Shared Qodly Sources are reset during each re-render **unless navigation is done through a page loader**. When [**Binding Navigation Actions to Events**](./pageLoaders/events/bindingActionToEvents.md#binding-navigation-actions-to-events) and using a **Page Loader** or **Page Loader (Self)**, the Shared Qodly Source persist across navigations. The [Page Loader](./pageLoaders/pageLoaderOverview) manages state in a way that prevents full reinitialization, maintaining the Shared Qodly Sources and ensuring continuity across navigations without resetting the data. ::: - **Initializing Local Qodly Sources**: Following the initialization of shared Qodly sources, local Qodly sources specific to individual components are set up, ensuring each component has access to the data it needs. diff --git a/versioned_docs/version-1.1.0/studio/roles/dataClassPermissions.md b/versioned_docs/version-1.1.0/studio/roles/dataClassPermissions.md index 84f489754e..ce5e6168b9 100644 --- a/versioned_docs/version-1.1.0/studio/roles/dataClassPermissions.md +++ b/versioned_docs/version-1.1.0/studio/roles/dataClassPermissions.md @@ -23,7 +23,7 @@ The
                                                                                                -
                                                                                              • If a privilege is both purple-tagged and accompanied by the icon, it indicates the inclusion of an extra privilege.
                                                                                              • -
                                                                                                - Obtaining permission for that resource requires having one of the additional privileges. +
                                                                                              • + If a privilege is both purple-tagged and accompanied by the icon, it indicates the inclusion of an extra privilege. +
                                                                                                + Obtaining permission for that resource requires having one of the additional privileges. +
                                                                                              diff --git a/versioned_sidebars/version-1.0.0-sidebars.json b/versioned_sidebars/version-1.0.0-sidebars.json index 19ffec6cca..916d2e5732 100644 --- a/versioned_sidebars/version-1.0.0-sidebars.json +++ b/versioned_sidebars/version-1.0.0-sidebars.json @@ -350,8 +350,6 @@ "language/commands/verifyPasswordHash", "language/commands/webEvent", "language/commands/webForm", - "language/commands/webServer", - "language/commands/webServerList", "language/commands/yearOf", "language/commands/zipCreateArchive", "language/commands/zipReadArchive" @@ -398,7 +396,6 @@ "language/UsersClass", "language/WebFormClass", "language/WebFormItemClass", - "language/WebServerClass", "language/ZipArchiveClass", "language/ZipFileClass", "language/ZipFolderClass" diff --git a/versioned_sidebars/version-1.1.0-sidebars.json b/versioned_sidebars/version-1.1.0-sidebars.json index f459e31210..7ecfb499cd 100644 --- a/versioned_sidebars/version-1.1.0-sidebars.json +++ b/versioned_sidebars/version-1.1.0-sidebars.json @@ -358,8 +358,6 @@ "language/commands/verifyPasswordHash", "language/commands/webEvent", "language/commands/webForm", - "language/commands/webServer", - "language/commands/webServerList", "language/commands/yearOf", "language/commands/zipCreateArchive", "language/commands/zipReadArchive" @@ -411,7 +409,6 @@ "language/UsersClass", "language/WebFormClass", "language/WebFormItemClass", - "language/WebServerClass", "language/ZipArchiveClass", "language/ZipFileClass", "language/ZipFolderClass" @@ -504,6 +501,7 @@ } ] }, + "qodlyLookerStudio/qodlyLookerStudioConnector", { "type": "category", "label": "Custom Components",