info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
info:To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
---
# Content Editor **(FREE)**
# Content Editor development guidelines **(FREE)**
The Content Editor is a UI component that provides a WYSIWYG editing
The Content Editor is a UI component that provides a WYSIWYG editing
experience for [GitLab Flavored Markdown](../../user/markdown.md)(GFM)in the GitLab application.
experience for [GitLab Flavored Markdown](../../user/markdown.md) in the GitLab application.
It also serves as the foundation for implementing Markdown-focused editors
It also serves as the foundation for implementing Markdown-focused editors
that target other engines, like static site generators.
that target other engines, like static site generators.
...
@@ -16,103 +16,324 @@ to build the Content Editor. These frameworks provide a level of abstraction on
...
@@ -16,103 +16,324 @@ to build the Content Editor. These frameworks provide a level of abstraction on
the native
the native
[`contenteditable`](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Editable_content) web technology.
[`contenteditable`](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Editable_content) web technology.
## Architecture remarks
## Usage guide
At a high level, the Content Editor:
Follow these instructions to include the Content Editor in a feature.
- Imports arbitrary Markdown.
### Include the Content Editor component
- Renders it in a HTML editing area.
- Exports it back to Markdown with changes introduced by the user.
The Content Editor relies on the
Import the `ContentEditor` Vue component. We recommend using asynchronous named imports to
[Markdown API endpoint](../../api/markdown.md) to transform Markdown
take advantage of caching as the ContentEditor is a big dependency.
into HTML. It sends the Markdown input to the REST API and displays the API's
HTML output in the editing area. The editor exports the content back to Markdown
using a client-side library that serializes editable documents into Markdown.
![Content Editor high level diagram](img/content_editor_highlevel_diagram.png)
Check the [Content Editor technical design document](https://docs.google.com/document/d/1fKOiWpdHned4KOLVOOFYVvX1euEjMP5rTntUhpapdBg)
The Content Editor requires two properties:
for more information about the design decisions that drive the development of the editor.
**NOTE**: We also designed the Content Editor to be extensible. We intend to provide
-`renderMarkdown` is an asynchronous function that returns the response (String) of invoking the
more information about extension development for supporting new types of content in upcoming
[Markdown API](../../api/markdown.md).
milestones.
-`uploadsPath` is a URL that points to a [GitLab upload service](../uploads.md#upload-encodings) with `multipart/form-data` support.
## GitLab Flavored Markdown support
See the [`WikiForm.vue`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/assets/javascripts/pages/shared/wikis/components/wiki_form.vue#L207) component for a production example of these two properties.
The [GitLab Flavored Markdown](../../user/markdown.md) extends
### Set and get Markdown
the [CommonMark specification](https://spec.commonmark.org/0.29/) with support for a
variety of content types like diagrams, math expressions, and tables. Supporting
all GitLab Flavored Markdown content types in the Content Editor is a work in progress. For
the status of the ongoing development for CommonMark and GitLab Flavored Markdown support, read: