Initialize ContentEditor in its main Vue component
What does this MR do?
This MR moves the initialization of the ContentEditor
object from the feature using the Content Editor to the ContentEditor
Vue component. The ContentEditor
object is the single source of truth for state management and business logic of the Editor.
We initially created an instance of ContentEditor
outside ContentEditor.vue
because the Editor‘s client also needed to invoke methods included in the ContentEditor
to set load a Markdown document into the Editor and get a Markdown version of a Content Editor document. ContentEditor.vue
also needs the instance of ContentEditor
to update the state of the toolbar and other UI elements:
sequenceDiagram
participant A as Wiki
participant B as ContentEditor.vue
participant C as ContentEditor.js
B->>C: isBoldActive?
C-->>B: Yes
A->>C: getSerializedContent
C-->>A: MarkdownString
However, the ContentEditor
instance is not a reactive object and passing it down as a property to ContentEditor.vue
introduces maintainability problems and a complicated workflow. You can see an extended explanation here. We are moving the initialization of ContentEditor
inside ContentEditor.vue
but allowing at the same time to access this object by triggering an initialized
event.
Breaking down this MR
We’ve spin off smaller MRs to deliver individual commits included in this MR:
Screenshots or Screencasts (strongly suggested)
This MR does not introduce user-facing changes.
How to setup and validate locally (strongly suggested)
This MR does not introduce new behavior to the Content Editor
Does this MR meet the acceptance criteria?
Conformity
-
I have included changelog trailers, or none are needed. (Does this MR need a changelog?) -
I have added/updated documentation, or it's not needed. (Is documentation required?) -
I have properly separated EE content from FOSS, or this MR is FOSS only. (Where should EE code go?) -
I have added information for database reviewers in the MR description, or it's not needed. (Does this MR have database related changes?) -
I have self-reviewed this MR per code review guidelines. -
This MR does not harm performance, or I have asked a reviewer to help assess the performance impact. (Merge request performance guidelines) -
I have followed the style guides. -
This change is backwards compatible across updates, or this does not apply.
Availability and Testing
-
I have added/updated tests following the Testing Guide, or it's not needed. (Consider all test levels. See the Test Planning Process.) -
I have tested this MR in all supported browsers, or it's not needed. -
I have informed the Infrastructure department of a default or new setting change per definition of done, or it's not needed.
Security
Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.
-
Label as security and @ mention @gitlab-com/gl-security/appsec
-
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team