1.1.1 • Published 3 months ago

html-content-editor v1.1.1

Weekly downloads
-
License
-
Repository
github
Last release
3 months ago

HtmlContentEditor

HTML Content Editor based on TinyMCE Editor with extensions for tracked changes, comments, and SUNSI.

Installation

User npm:

npm i html-content-editor --save

Compatibility

VersionAngular Compatibility
1.x18.x

API

Properties

Inputs

NameDescription
initialContent: ContentSummaryDtocontent that will be loaded into the editor at start
unsavedChanges: ContentUnsavedChangesnot required but can be used to track if there are unsaved changes to content, tracked changes and comments
editorControl: FormControlcontrol in the formGroup so that the editor can report the control status
isEditable: boolallows disabling control
sidebarMinimized: boolsets starting position of the sidebar. Default is expanded
enabledPlugins: string[]plugins that are enabled. Use TinyMceOptionalPlugins to get names
currentUser: BasicUserId, FirstName, LastName
baseHref: stringbaseHref of the client application

Outputs

NameDescription
editorSuccessNotification: EventEmitterevent emitter for notifications from within the editor to be used in the notification system of the consuming app
editorBecameDirty: EventEmitteremits event when controls has become dirty

Functions

NameDescription
HtmlContentEditor.populateEditor(ContentSummaryDto)repopulate the editor so that Ids for new tracked changes or comments are updated
ModelMappings.mapContentSummaryDtoToCreateEditContentModel(ContentSummaryDto): CreateEditContentModelconverts ContentSummaryDto to CreateEditContentModel
ModelMappings.mapCommentDetailsDtoToCreateEditCommentModel(comment: ContentCommentDetailsDto): CreateEditCommentModelconverts ContentCommentDetailsDto to CreateEditCommentModel

Sample

Template

```html
<cen-html-content-editor
    #htmlContentEditor
    [initialContent]="model?.Content"
    [unsavedChanges]="unsavedChanges"
    [editorControl] = "formGroup.controls?.Content"
    [isEditable]="isEditable"
    [sidebarMinimized]="trackedChangesAndCommentsSidebarMinimized"
    [enabledPlugins]="tinyMcePluginsEnabled"
    [currentUser]="{Id: currentUser.Id, FirstName: currentUser.NameFirst, LastName: currentUser.NameLast}"
    [baseHref]="this.config.baseHref">
</cen-html-content-editor>
```

Component

```ts
private destroy$ = new Subject<void>();
public currentUser = this.sessionService.currentUser$.value;
public currentContent: ContentSummaryDto;
public formGroup: FormGroup<ModelForm> = this.fb.group({modelId: [0], editorControl: [null]});

@ViewChild('htmlContentEditor') htmlContentEditor: HtmlContentEditorComponent;
public unsavedChanges: ContentUnsavedChanges;
//Control is responsible for telling the form if its pristine, dirty, etc
public editorControl: FormControl<CreateEditContentModel>;
//Where custom plugins are enabled. Remove a plugin will prevent it from loading and prevent toolbar items from appearing.
public tinyMcePluginsEnabled: string[] = [TinyMceOptionalPlugins.Sunsi, TinyMceOptionalPlugins.TrackedChanges, TinyMceOptionalPlugins.Comments, TinyMceOptionalPlugins.MathType];

constructor(
    private activatedRoute: ActivatedRoute,
    private fb: FormBuilder,
    public modelService: ModelService,
    public sessionService: SessionService,
    public configService: ApplicationConfigService,
    public snackBarService: SnackBarService) {
    this.config = this.configService.Settings.getValue();
}

ngOnInit(): void {
    this.modelId = +this.activatedRoute.snapshot.params['id'];
    this.loading = true;
    this.modelService.getModelContent(this.modelId).pipe(
    takeUntil(this.destroy$),
    tap(response => {
        this.currentContent = response;
        if (this.currentContent) {
        this.formGroup = this.fb.group({
            modelId: [this.modelId],
            editorControl: [ModelMappings.mapContentSummaryDtoToCreateEditContentModel(this.currentContent)]
        });
        }
        this.loading = false;
    })
    ).subscribe();

    //When deleting SUNSI a notification string is emitted
    this.htmlContentEditor?.editorSuccessNotification.pipe(
    takeUntil(this.destroy$),
    tap(notification => {
        this.snackBarService.success(notification);
    }));
}

ngOnDestroy(): void {
    this.destroy$.next();
    this.destroy$.complete();
}

public saveChanges(): void {
    this.saving = true;
    this.modelService.updateContentOnModel(this.raiDocId, this.raiBackgroundForm.controls.editorControl.value)
    .pipe(
        takeUntil(this.destroy$),
        tap(updatedContent => {
        this.saving = false;
        this.currentContent = updatedContent;
        //Must repopulate the editor so that all the 
        //tracked changes, comments etc are updated with ids from backend.
        this.htmlContentEditor.populateEditor(updatedContent);
        this.htmlContentEditor.markAsPristine();
        })
    )
    .subscribe();
}
```
1.1.1

3 months ago

1.1.0

4 months ago

1.0.4

5 months ago

1.0.3

6 months ago

1.0.2

6 months ago

1.0.1

6 months ago

1.0.0

6 months ago