@ -4,7 +4,7 @@ We are pleased that you are thinking about contributing to OpenProject! This gui
## Get in touch
## Get in touch
Please get in touch with us using our [develompment forum](https://community.openproject.com/projects/openproject/forums/7) or send us an email to info@openproject.org.
Please get in touch with us using our [development forum](https://community.openproject.com/projects/openproject/forums/7) or send us an email to info@openproject.org.
@ -60,11 +60,11 @@ Please also use `[ci skip]` in your commit message to suppress builds which are
## Inactive pull requests
## Inactive pull requests
We want to keep the Pull request list as cleaned up as possible - we will aim close pull requests after an **inactivity period of 30 days** (no comments, no further pushes) which are not labelled as `work in progress` by us.
We want to keep the Pull request list as cleaned up as possible - we will aim close pull requests after an **inactivity period of 30 days** (no comments, no further pushes) which are not labeled as `work in progress` by us.
## Security
## Security
If you notice a security issue in OpenProject, please send us a gpg encrypted email to security@openproject.com and describe the issue you found. Download our public gpg key BDCF E01E DE84 EA19 9AE1 72CE 7D66 9C6D 4753 3958 [here](https://keys.openpgp.org/vks/v1/by-fingerprint/BDCFE01EDE84EA199AE172CE7D669C6D47533958).
If you notice a security issue in OpenProject, please send us a GPG encrypted email to security@openproject.com and describe the issue you found. Download our public GPG key BDCF E01E DE84 EA19 9AE1 72CE 7D66 9C6D 4753 3958 [here](https://keys.openpgp.org/vks/v1/by-fingerprint/BDCFE01EDE84EA199AE172CE7D669C6D47533958).
Please include a description on how to reproduce the issue if possible. Our security team will get your email and will attempt to reproduce and fix the issue as soon as possible.
Please include a description on how to reproduce the issue if possible. Our security team will get your email and will attempt to reproduce and fix the issue as soon as possible.
1. Login to the [OpenProject developer platform](https://community.openproject.com/login).
1. Login to or register at the [OpenProject community platform](https://community.openproject.com/login). It's fast and free.
2. Open the [bug form](https://community.openproject.com/projects/openproject/work_packages/new?type=1).
2. Look for an existing bug report using the search bar in the header navigation on top. If there's one, please leave a comment or add additional information. Otherwise:
3. Add a precise subject.
3. Open the [bug form](https://community.openproject.com/projects/openproject/work_packages/new?type=1).
3. Add a detailed description.
4. Add a precise subject.
4. Attach a file (optional).
5. Add a detailed description.
5. Press Create.
6. Attach a file (optional).
7. Press Create.
# Information you should add to the bug description
# Information you should add to the bug description
1. Login to the [OpenProject community platform](https://community.openproject.com/login).
1. Login to or register at the [OpenProject community platform](https://community.openproject.com/login). It's fast and free.
2. Open the [feature create form](https://community.openproject.com/projects/openproject/work_packages/create_new?type=6).
2. Use the search bar in the header navigation on top to look for similar feature requests. If there's one, please leave a comment or add additional information. Otherwise:
3. Add a subject and detailed description.
3. Open the [feature create form](https://community.openproject.com/projects/openproject/work_packages/create_new?type=6).
OpenProject with Docker can be launched in two ways:
OpenProject with Docker can be launched in two ways:
1. Multiple containers (recommended), each with a single process inside, using a Compose file. Allows to easily choose which services you want to run, and simplifies scaling and monitoring aspects.
1. Multiple containers (recommended), each with a single process inside, using a Compose file. Allows to easily choose which services you want to run, and simplifies scaling and monitoring aspects.
2. One container with all the processes inside. Easy but not recommended for production. This is the legacy behaviour.
2. One container with all the processes inside. Easy but not recommended for production. This is the legacy behaviour.
## One container per process (recommended)
## One container per process (recommended)
### Quick Start
### Quick Start
First, you must clone the OpenProject repository:
First, you must clone the [openproject-deploy](https://github.com/opf/openproject-deploy/tree/stable/11/compose) repository:
Then, go into the OpenProject folder and you can launch all the services required by OpenProject with docker-compose:
Launch the containers:
```bash
```bash
docker-compose up -d
docker-compose up -d
```
```
After some time, you will be able to access OpenProject on http://localhost:8080. The default username and password is login: `admin`, and password: `admin`.
After a while, OpenProject should be up and running on <http://localhost:8080>. The default username and password is login: `admin`, and password: `admin`.
Note that the official `docker-compose.yml` file present in the repository can be adjusted to your convenience. For instance you could mount specific configuration files, override environment variables, or switch off services you don't need. Please refer to the official docker-compose documentation for more details.
Note that the `docker-compose.yml` file present in the repository can be adjusted to your convenience. For instance you could mount specific configuration files, override environment variables, or switch off services you don't need. Please refer to the official [Docker Compose documentation](https://docs.docker.com/compose/extends/) for more details.
We released [OpenProject 11.0.3](https://community.openproject.com/versions/1456).
The release contains several bug fixes and we recommend updating to the newest version.
<!--more-->
#### Bug fixes and changes
- Fixed: Bulk edit: Custom field long text cut off \[[#34829](https://community.openproject.com/wp/34829)\]
- Fixed: "Estimates and time" not translated to German when not logged in on community.openproject.com \[[#35009](https://community.openproject.com/wp/35009)\]
- Fixed: IFC viewer can't load models when OP installed on subpath \[[#35129](https://community.openproject.com/wp/35129)\]
- Fixed: Elder BIM instances get "OpenProject" theme instead of the "OpenProject BIM" theme after migration. \[[#35131](https://community.openproject.com/wp/35131)\]
- Fixed: Transitive Relations embedded in work package representer -> poor performance \[[#35168](https://community.openproject.com/wp/35168)\]
- Fixed: LDAP Group sync deletes users when removed from group \[[#35265](https://community.openproject.com/wp/35265)\]
@ -28,6 +28,7 @@ This way you will reduce wrong entries for attributes. This is especially releva
| [Editing or deleting Attribute help texts](#editing-or-deleting-attribute-help-texts) | How to edit and how to delete an Attribute help text. |
| [Editing or deleting Attribute help texts](#editing-or-deleting-attribute-help-texts) | How to edit and how to delete an Attribute help text. |
| [Work packages](#work-packages) | Where will Attribute help texts for work packages be used? |
| [Work packages](#work-packages) | Where will Attribute help texts for work packages be used? |
| [Projects](#projects) | Where will Attribute help texts for projects be used? |
| [Projects](#projects) | Where will Attribute help texts for projects be used? |
| [WYSIWYG editor](#wysiwyg-editor) | Where can Attribute help texts be displayed? |
Navigate to -> *Administration* -> *Attribute help texts* to set up help texts for attributes and custom fields in work packages and projects. Here you can add, edit and delete Attribute help texts.
Navigate to -> *Administration* -> *Attribute help texts* to set up help texts for attributes and custom fields in work packages and projects. Here you can add, edit and delete Attribute help texts.
@ -81,8 +82,14 @@ The Attribute help texts for projects will be displayed in the Project details w
They will help the users (e.g. the project managers) understand what kind of information to put in which fields.
They will help the users (e.g. the project managers) understand what kind of information to put in which fields.
![Attribute help texts project information](image-20201007112741049.png)
## WYSIWYG editor
The Attribute help texts can also be displayed in the WYSIWYG text editor by using a certain syntax. Find out more [here](../../user-guide/wysiwyg/#embedding-of-work-package-attributes-and-project-attributes).
@ -13,12 +13,14 @@ Meetings in OpenProject allow you to manage and document your project meetings a
<divclass="glossary">**Meetings** is defined as a module that allows the organization of meetings. The module has to be activated in the project settings in order to be displayed in the side navigation. </div>
<divclass="glossary">**Meetings** is defined as a module that allows the organization of meetings. The module has to be activated in the project settings in order to be displayed in the side navigation. </div>
| [Meetings in OpenProject](#meetings-in-OpenProject) | How to open meetings in OpenProject? |
| [Meetings in OpenProject](#meetings-in-OpenProject) | How to open meetings in OpenProject? |
| [Create a new meeting](#create-a-new-meeting) | How to create a new meeting in OpenProject? |
| [Create a new meeting](#create-a-new-meeting) | How to create a new meeting in OpenProject? |
| [Edit a meeting](#edit-a-meeting) | How to edit an existing meeting? |
| [Edit a meeting](#edit-a-meeting) | How to edit an existing meeting? |
| [Add meeting participants](#add-meeting-participants) | How to add participants to a meeting? |
| [Add meeting participants](#add-meeting-participants) | How to invite people to a meeting? |
| [Create or edit the meeting agenda](#create-or-edit-the-meeting-agenda) | How to create or edit the agenda? |
| [Create or edit the meeting agenda](#create-or-edit-the-meeting-agenda) | How to create or edit the agenda? |
| [Copy a meeting (recurring meetings)](#copy-a-meeting-(recurring meetings)) | How to create recurring meetings? |
| [Copy a meeting (recurring meetings)](#copy-a-meeting-(recurring meetings)) | How to create recurring meetings? |
@ -26,15 +28,13 @@ Meetings in OpenProject allow you to manage and document your project meetings a
By selecting **Meetings** in the project menu on the left, you get an overview of all project meetings sorted by date. By clicking on a meeting name you can view further details of the meeting.
By selecting **Meetings** in the project menu on the left, you get an overview of all project meetings sorted by date. By clicking on a meeting name you can view further details of the meeting.
Note: in order to be able to use the meetings plugin, the Meetings module needs to be activated in the [Project Settings](../projects).
**Note:** in order to be able to use the meetings plugin, the **Meetings module needs to be activated** in the [Project Settings](../projects/project-settings/modules/).
![meetings](1567598397931.png)
![meetings](1567598397931.png)
## Create a new meeting
## Create a new meeting
To create a new meeting, click on Meetings in the project menu (Meetings needs to be activated in the Project settings to be displayed).
To create a new meeting, click on Meetings in the project menu. Click the green **+ Meeting** button.
Click the green **+ Meeting** button.
![create-meeting](create-meeting.png)
![create-meeting](create-meeting.png)
@ -75,18 +75,25 @@ Click on the **Save** button to secure the changes made by you.
After creating a meeting, you can set up a **meeting agenda**.
After creating a meeting, you can set up a **meeting agenda**.
1. Prior to starting the meeting all participants can add their input to the agenda by simply clicking the Edit button.
1. Prior to starting the meeting all participants can add their input to the agenda by simply clicking the Edit button.
2. With the toolbar you can make changes to the text format or edit macros, e.g. table of contents or work package tables (see [Wiki](#wiki) for details).
2. With the toolbar you can make changes to the text format or edit macros, e.g. table of contents or work package tables (see the [documentation for the WYSIWYG editor](../wysiwyg) for details).
3. All changes made to the agenda are tracked. You can click the **History** button to get an overview of all the changes including the persons who made the changes.
3. All changes made to the agenda are tracked. You can click the **History** button to get an overview of all the changes including the persons who made the changes.
4. Click the **Send for review** button to quickly notify participants about the meeting and send them a link to the meeting.
4. Click the **Send for review** button to quickly notify participants about the meeting and send them a link to the meeting.
5. Press the **Send iCalendar** button to send a calendar entry to the participants. The users can then quickly add the meeting to their calendar by accepting the invitation / importing the iCal file attached to the email notification.
5. Press the **Send iCalendar** button to send a calendar entry to the participants. The users can then quickly add the meeting to their calendar by accepting the invitation / importing the iCal file attached to the email notification.
6. At the beginning of the meeting, **Close** the agenda to prevent any other changes and provide the same basis for all meeting participants. After closing the agenda, the meeting minutes are displayed to capture the results of the meeting.
6. At the beginning of the meeting, **Close** the agenda to prevent any other changes and provide the same basis for all meeting participants. After closing the agenda, the meeting minutes are displayed to capture the results of the meeting.
7. ![meeting-agenda](meeting-agenda.png)
![meeting-agenda](meeting-agenda.png)
## Create or edit meeting minutes
## Create or edit meeting minutes
The **meeting minutes** are automatically created when closing the agenda in the details view of the meeting and selecting the [Close](#create-or-edit-the-meeting-agenda) option.
The **meeting minutes** are automatically created when closing the agenda in the details view of the meeting and selecting the [Close](#create-or-edit-the-meeting-agenda) option.
The agenda is closed and copied to the meeting minutes page as a basis. You can start editing the minutes now. The same as in the [wiki](#wiki) pages, you can format the text, link minutes to work packages, documents, include work package lists or other macros.
The agenda is closed and copied to the meeting minutes page as a basis. You can start editing the minutes now. The same way as in the [wiki](../wiki) pages, you can format the text, link minutes to work packages, documents, include work package lists or other macros.
@ -149,6 +149,9 @@ Navigate to the [project settings](project-settings) and click **Set as template
You can create a new project by using an existing template. This causes the properties of the project template to be copied to the new project. Find out in our Getting started guide how to [create a new project](../../getting-started/projects/#create-a-new-project) in OpenProject.
You can create a new project by using an existing template. This causes the properties of the project template to be copied to the new project. Find out in our Getting started guide how to [create a new project](../../getting-started/projects/#create-a-new-project) in OpenProject.
Another way for using a template project would be to [copy it](#copy-a-project).
Another way for using a template project would be to [copy it](#copy-a-project).
Work packages have a **type**, an **ID**, a **subject** and may have various additional attributes, such as **status**, **assignee**, **priority**, **due date**.
Work packages have a **type**, an **ID**, a **subject** and may have various additional attributes, such as **status**, **assignee**, **priority**, **due date**.
<divclass="glossary">**Work package ID** is defined as a unique integer assigned to a newly created work package. Work package IDs cannot be changed and are numbered across all projects of an OpenProject instance (therefore, the numbering within a project may not be sequential). </div>
<divclass="glossary">**Work package ID** is defined as a unique integer assigned to a newly created work package. Work package IDs cannot be changed and are numbered across all projects of an OpenProject instance (therefore, the numbering within a project may not be sequential). </div>
<divclass="glossary">
<divclass="glossary">
**Types** are the different items a work package can represent, such as task, feature, bug, phase, milestone. The work package types can be configured in the system administration.
**Types** are the different items a work package can represent, such as task, feature, bug, phase, milestone. The work package types can be configured in the system administration. </div>
</div>
Work packages can be displayed in a projects timeline, e.g. as a milestone or a phase. In order to use the work packages, the work package module has to be activated in the project settings.
Work packages can be displayed in a projects timeline, e.g. as a milestone or a phase. In order to use the work packages, the work package module has to be activated in the project settings.
description: Find out about the CKEditor5 WYSIWYG editor in OpenProject
description: Find out about the CKEditor5 WYSIWYG editor in OpenProject
robots: index, follow
robots: index, follow
keywords: WYSIWYG, CKEditor
keywords: WYSIWYG, CKEditor, Links to OpenProject resources
---
---
# Rich text (WYSIWYG) editor in OpenProject
# Rich text (WYSIWYG) editor in OpenProject
Starting with version 8.0.0, OpenProject features a quasi-WYSIWYG editor, powered by [CKSource CKEditor5](https://ckeditor5.github.io/). The underlying format is GitHub-flavored CommonMark ([GFM](https://github.github.com/gfm/)). All previous textile-based content will be migrated when upgrading to OpenProject 8.0.
Starting with version 8.0.0, OpenProject features a quasi-WYSIWYG editor, powered by [CKSource CKEditor5](https://ckeditor5.github.io/). The underlying format is GitHub-flavored CommonMark ([GFM](https://github.github.com/gfm/)). All previous textile-based content will be migrated when upgrading to OpenProject 8.0.
<divclass="alert alert-info"role="alert">
**Please note:** In some resources such as work packages or comments, the editor does not exhibit all functionality such as macros or image upload.
| [Basic formating](#basic-formatting) | Basic formatting elements in the WYSIWYG editor |
| [Image handling](#image-handling) | How to add images in the WYSIWYG editor? |
| [Macros](#macros) | Available macros in the WYSIWYG editor |
| [Links to OpenProject resources](#links-to-openproject-resources) | How to link to resources like wikis, projects, meetings? |
| [Embedding of work package attributes and project attributes](#embedding-of-work-package-attributes-and-project-attributes) | How to embed attributes and attribute help texts? |
## Basic formatting
## Basic formatting
The CKEditor5 build in OpenProject supports basic text styles, such as bold and italic formatting, headings,
The CKEditor5 build in OpenProject supports basic text styles, such as bold and italic formatting, headings,
strikethrough, inline code, and quotes as well as inline image handling. Pasting content such as images or rich text is also supported, while unsupported styling will be stripped by the editor.
strike-through, inline code, and quotes as well as inline image handling. Pasting content such as images or rich text is also supported, while unsupported styling will be stripped by the editor.
### Line breaks
### Line breaks
@ -21,11 +35,11 @@ Instead of creating a new paragraph with Enter, you can also press `SHIFT+Enter`
### Links
### Links
Create hyperlinks by pressing the toolbar (optionally with some selected text), or by pressing `CTRL+k` to open a popup to enter the link href.
Create hyperlinks by pressing the tool-bar (optionally with some selected text), or by pressing `CTRL+k` to open a popup to enter the link href.
### Widgets and Newlines
### Widgets and Newlines
CKEditor usese widgets to display block elements such as images, tables, and other elements that are not inline. You can select most widgets by pressing on it - The only exception to that is the table widget, it has a little select knob at the top left to select the entire table.
CKEditor uses widgets to display block elements such as images, tables, and other elements that are not inline. You can select most widgets by pressing on it - The only exception to that is the table widget, it has a little select knob at the top left to select the entire table.
When you have a widget selected, you can remove or cut it. You can create a newline below it by selecting the widget and pressing `ENTER` or `↓ (ARROW DOWN)`, or a newline above it by pressing `SHIFT+enter` or `↑ (ARROW UP)`. This is especially needed when the widget is the first or last element on the page to insert a line below or above it.
When you have a widget selected, you can remove or cut it. You can create a newline below it by selecting the widget and pressing `ENTER` or `↓ (ARROW DOWN)`, or a newline above it by pressing `SHIFT+enter` or `↑ (ARROW UP)`. This is especially needed when the widget is the first or last element on the page to insert a line below or above it.
@ -34,14 +48,10 @@ When you have a widget selected, you can remove or cut it. You can create a newl
As CKEditor5 currently does not provide support for code blocks, OpenProject can display, but not edit code blocks within the CKEditor instance. A code block can be edited through a modal window within a `CodeMirror` editor instance. This has the advantage of providing syntax highlighting and code sensing ([for supported languages](https://codemirror.net/mode/)).
As CKEditor5 currently does not provide support for code blocks, OpenProject can display, but not edit code blocks within the CKEditor instance. A code block can be edited through a modal window within a `CodeMirror` editor instance. This has the advantage of providing syntax highlighting and code sensing ([for supported languages](https://codemirror.net/mode/)).
### Tables
### Tables
The GFM extension of the CommonMark specs adds a definition for table syntax which the CKEditor build of OpenProject supports. This definition requires all tables to have a heading row. For tables created with CKEditor without heading rows, a HTML table is output instead. This matches the behavior of, e.g., GitHub.
The GFM extension of the CommonMark specs adds a definition for table syntax which the CKEditor build of OpenProject supports. This definition requires all tables to have a heading row. For tables created with CKEditor without heading rows, a HTML table is output instead. This matches the behavior of, e.g., GitHub.
### Autoformatting
### Autoformatting
CKEditor5 allows certain CommonMark-like [autoformatting keyboard strokes](https://ckeditor5.github.io/docs/nightly/ckeditor5/latest/features/autoformat.html):
CKEditor5 allows certain CommonMark-like [autoformatting keyboard strokes](https://ckeditor5.github.io/docs/nightly/ckeditor5/latest/features/autoformat.html):
- Create a numbered list by starting the line with `1.` or `1)` and a space
- Create a numbered list by starting the line with `1.` or `1)` and a space
## Image handling
## Image handling
In supported resources of OpenProject where attachments are allowed, you can add images to the page by either
In supported resources of OpenProject where attachments are allowed, you can add images to the page by either
@ -71,6 +80,9 @@ The attachment will be automatically uploaded and stored as an attachment.
OpenProject has supported macros on textile formatted pages and continues to do so with the WYSIWYG editor. Note that macros are not expanded while editing the page, instead a placeholder is shown.
OpenProject has supported macros on textile formatted pages and continues to do so with the WYSIWYG editor. Note that macros are not expanded while editing the page, instead a placeholder is shown.
You can find the macros here in the text editor:
![Macros text editor](image-20201109183018255.png)
### Table of contents
### Table of contents
@ -102,9 +114,6 @@ The rendered page will then fetch the work package table results dynamically, re
Use it to embed views in other pages, create reporting of multiple results, or to embed a Gantt chart view.
Use it to embed views in other pages, create reporting of multiple results, or to embed a Gantt chart view.
## Full vs constrained editor
In some resources such as work packages or comments, the editor does not exhibit all functionality such as macros or image upload.
## Links to OpenProject resources
## Links to OpenProject resources
@ -130,7 +139,7 @@ As with the textile formatting syntax, you can link to other resources within Op
- **commit by hash:**`commit:f30e13e4`
- **commit by hash:**`commit:f30e13e4`
- **To a source file in the repository**: `source:"some/file"`
- **To a source file in the repository**: `source:"some/file"`
To avoid processing these items, precede them with a bang `!` character such as `!#12` will prevent linking to a work package with ID 12.
To avoid processing these items, preceding them with a bang `!` character such as `!#12` will prevent linking to a work package with ID 12.
@ -140,16 +149,15 @@ For work packages and users, typing `#` or `@` will open an autocompleter for vi
## Embedding of work package and project attributes
## Embedding of work package attributes and project attributes
You can embed specific attributes of work packages or projects using the following syntax:
You can embed specific attributes of work packages or projects using a certain syntax.
Examples:
- **Linking to the subject of work package with id #1234**: `workPackageValue:1234:subject`
- **Linking to the subject of work package with id #1234**: `workPackageValue:1234:subject`
- **Linking to the current project's status**: `projectValue:status`
- **Linking to the current project's status**: `projectValue:status`
- **Linking to the subject of work package with subject "Project start"**: `workPackageValue:"Project start":subject`
- **Linking to the subject of work package with subject "Project start"**: `workPackageValue:"Project start":subject`
<divclass="alert alert-info"role="alert">
<divclass="alert alert-info"role="alert">
**Note**: Referencing a work package by subject results in only looking for work packages with that given subject in the current project (if any). If you need to cross-reference work packages, use their ID to pinpoint the work package you want to reference.
**Note**: Referencing a work package by subject results in only looking for work packages with that given subject in the current project (if any). If you need to cross-reference work packages, use their ID to pinpoint the work package you want to reference.
@ -157,19 +165,24 @@ You can embed specific attributes of work packages or projects using the followi
</div>
</div>
### Embedding attribute help texts
You can also embed attribute values and [their help texts](../../system-admin-guide/attribute-help-texts/) by using `workPackageLabel` instead: `workPackageLabel:1234:status` would output the translated label for "Status" and (if exists), the corresponding help text for it.
You can also embed attribute values and [their help texts](https://docs.openproject.org/system-admin-guide/manage-work-packages/attribute-help-texts/#manage-attribute-help-texts-premium-feature) by using `workPackageLabel` instead: `workPackageLabel:1234:status` would output the translated label for "Status" and (if exists), the corresponding help text for it.
Note that these macros will only be expanded in the frontend. For each individual user, the correct permissions will be checked and the macro will result in an error if the user is not allowed to view the respective resource.
**Note**: these macros will only be expanded in the frontend. For each individual user, the correct permissions will be checked and the macro will result in an error if the user is not allowed to view the respective resource.
</div>
**Available attributes for work packages**
The following list contains all suppported attribute names for the `workPackageValue` and `workPackageLabel` macros.
### Available attributes for work packages
The following list contains all supported attribute names for the `workPackageValue` and `workPackageLabel` macros, where `1234` stands for the [work package ID](../work-packages).
| Responsible user | `workPackageValue:1234:responsible` |
| Responsible user | `workPackageValue:1234:responsible` |
| Spent time | `workPackageValue:1234:spentTime` |
| Spent time | `workPackageValue:1234:spentTime` |
| Start date | `workPackageValue:1234:startDate` |
| Start date | `workPackageValue:1234:startDate` |
@ -188,14 +201,14 @@ The following list contains all suppported attribute names for the `workPackageV
| Work package type | `workPackageValue:1234:type` |
| Work package type | `workPackageValue:1234:type` |
| Date of last update | `workPackageValue:1234:updatedAt` |
| Date of last update | `workPackageValue:1234:updatedAt` |
| Version | `workPackageValue:1234:version` |
| Version | `workPackageValue:1234:version` |
| *Custom Fields* | `workPackageValue:1234:"Name of the work package custom field"` |
**Available attributes for projects**
### Available attributes for projects
The following list contains all suppported attribute names for the `projectValue` and `projectLabel` macros. The examples all show references to the _current_ project the document is rendered in. They can also reference another project with `projectValue:"Identifier of the project":attribute`.
The following list contains all supported attribute names for the `projectValue` and `projectLabel` macros. The examples all show references to the _current_ project the document is rendered in. They can also reference another project with `projectValue:"Identifier of the project":attribute`.