1 | # Official TinyMCE Angular Component
|
2 |
|
3 | ## About
|
4 |
|
5 | This package is a thin wrapper around `tinymce` to make it easier to use in a Angular application.
|
6 |
|
7 | ## Development instructions
|
8 |
|
9 | The editor component itselt is located in the `tinymce-angular-component` and packaged into a redistributable package with the [ng-packagr](https://github.com/dherges/ng-packagr) tool. A test app has been created with the [`@angular/cli`](https://github.com/angular/angular-cli). It is located in the `src` directory and a dev server can be started by using the `ng serve` command.
|
10 |
|
11 | ## Installation
|
12 |
|
13 | ```sh
|
14 | $ npm install @tinymce/tinymce-angular
|
15 | ```
|
16 |
|
17 | ## Usage
|
18 |
|
19 | ### Loading the component
|
20 |
|
21 | Import the `EditorModule` from the npm package like this:
|
22 |
|
23 | ```tsx
|
24 | import { EditorModule } from '@tinymce/tinymce-angular';
|
25 | ```
|
26 | And add it to you application module:
|
27 |
|
28 | ```tsx
|
29 | // This might look different depending on how you have set up your app
|
30 | // but the important part is the imports array
|
31 | @NgModule({
|
32 | declarations: [
|
33 | AppComponent
|
34 | ],
|
35 | imports: [
|
36 | BrowserModule,
|
37 | EditorModule // <- Important part
|
38 | ],
|
39 | providers: [],
|
40 | bootstrap: [AppComponent]
|
41 | })
|
42 | ```
|
43 |
|
44 | ### Using the component in your templates
|
45 |
|
46 | Use the editor in your templates like this:
|
47 |
|
48 | ```tsx
|
49 | <editor apiKey="test" [init]="{plugins: 'link'}"></editor>
|
50 | ```
|
51 |
|
52 | ### Configuring the editor
|
53 |
|
54 | The editor accepts the following inputs:
|
55 | * `id`: An id for the editor so you can later grab the instance by using the `tinymce.get('ID')` method on tinymce, defaults to an automatically generated uuid.
|
56 | * `init`: Object sent to the `tinymce.init` method used to initialize the editor.
|
57 | * `initialValue`: Initial value that the editor will be initialized with.
|
58 | * `inline`: Shorthand for setting that the editor should be inline, `<editor [inline]="true"></editor>` is the same as setting `{inline: true}` in the init.
|
59 | * `tagName`: Only used if the editor is inline, decides what element to initialize the editor on, defaults to `div`.
|
60 | * `plugins`: Shorthand for setting what plugins you want to use, `<editor plugins="foo bar"></editor>` is the same as setting `{plugins: 'foo bar'}` in the init.
|
61 | * `toolbar`: Shorthand for setting what toolbar items you want to show, `<editor toolbar="foo bar"></editor>` is the same as setting `{toolbar: 'foo bar'}` in the init.
|
62 | * `apiKey`: Api key for TinyMCE cloud, more info below.
|
63 | * `cloudChannel`: Cloud channel for TinyMCE Cloud, more info below.
|
64 |
|
65 | None of the configuration inputs are **required** for the editor to work - other than if you are using TinyMCE Cloud you will have to specify the `apiKey` to get rid of the `This domain is not registered...` warning message.
|
66 |
|
67 | ### `ngModel`
|
68 |
|
69 | You can also use the `ngModel` directive (more info in the [Angular documentation](https://angular.io/api/forms/NgModel)) on the editor to simplify using it in a form:
|
70 |
|
71 | ```tsx
|
72 | <editor [(ngModel)]="dataModel"></editor>
|
73 | ```
|
74 |
|
75 | ### Event binding
|
76 |
|
77 | You can also bind editor events via a shorthand prop on the editor, for example:
|
78 | ```tsx
|
79 | <editor (onSelectionChange)="handleEvent($eventObj)"></editor>
|
80 | ```
|
81 | Where the handler gets called with an object containing the properties `event`, which is the event object, and `editor`, which is a reference to the editor.
|
82 |
|
83 | Here is a full list of the events available:
|
84 | <details>
|
85 | <summary>All available events</summary>
|
86 |
|
87 | * `onActivate`
|
88 | * `onAddUndo`
|
89 | * `onBeforeAddUndo`
|
90 | * `onBeforeExecCommand`
|
91 | * `onBeforeGetContent`
|
92 | * `onBeforeRenderUI`
|
93 | * `onBeforeSetContent`
|
94 | * `onBeforePaste`
|
95 | * `onBlur`
|
96 | * `onChange`
|
97 | * `onClearUndos`
|
98 | * `onClick`
|
99 | * `onContextMenu`
|
100 | * `onCopy`
|
101 | * `onCut`
|
102 | * `onDblclick`
|
103 | * `onDeactivate`
|
104 | * `onDirty`
|
105 | * `onDrag`
|
106 | * `onDragDrop`
|
107 | * `onDragEnd`
|
108 | * `onDragGesture`
|
109 | * `onDragOver`
|
110 | * `onDrop`
|
111 | * `onExecCommand`
|
112 | * `onFocus`
|
113 | * `onFocusIn`
|
114 | * `onFocusOut`
|
115 | * `onGetContent`
|
116 | * `onHide`
|
117 | * `onInit`
|
118 | * `onKeyDown`
|
119 | * `onKeyPress`
|
120 | * `onKeyUp`
|
121 | * `onLoadContent`
|
122 | * `onMouseDown`
|
123 | * `onMouseEnter`
|
124 | * `onMouseLeave`
|
125 | * `onMouseMove`
|
126 | * `onMouseOut`
|
127 | * `onMouseOver`
|
128 | * `onMouseUp`
|
129 | * `onNodeChange`
|
130 | * `onObjectResizeStart`
|
131 | * `onObjectResized`
|
132 | * `onObjectSelected`
|
133 | * `onPaste`
|
134 | * `onPostProcess`
|
135 | * `onPostRender`
|
136 | * `onPreProcess`
|
137 | * `onProgressState`
|
138 | * `onRedo`
|
139 | * `onRemove`
|
140 | * `onReset`
|
141 | * `onSaveContent`
|
142 | * `onSelectionChange`
|
143 | * `onSetAttrib`
|
144 | * `onSetContent`
|
145 | * `onShow`
|
146 | * `onSubmit`
|
147 | * `onUndo`
|
148 | * `onVisualAid`
|
149 | </details>
|
150 |
|
151 | ## Loading TinyMCE
|
152 | ### Auto-loading from TinyMCE Cloud
|
153 | The `Editor` component needs TinyMCE to be globally available to work, but to make it as easy as possible it will automatically load [TinyMCE Cloud](https://www.tiny.cloud/docs/cloud-deployment-guide/) if it can't find TinyMCE available when the component has mounted. To get rid of the `This domain is not registered...` warning, sign up for the cloud and enter the api key like this:
|
154 |
|
155 | ```tsx
|
156 | <editor apiKey="test" [init]="{/* your settings */}"></editor>
|
157 | ```
|
158 |
|
159 | You can also define what cloud channel you want to use out these three
|
160 | * `stable` **Default**. The most stable and well tested version that has passed the Ephox quality assurance process.
|
161 | * `testing` This channel will deploy the current candidate for release to the `stable` channel.
|
162 | * `dev` The cutting edge version of TinyMCE updated daily for the daring users.
|
163 |
|
164 | So using the `dev` channel would look like this:
|
165 |
|
166 | ```tsx
|
167 | <editor apiKey="YOUR_API_KEY" cloudChannel="dev" [init]="{/* your settings */}"></editor>
|
168 | ```
|
169 |
|
170 | For more info on the different versions see the [documentation](https://www.tiny.cloud/docs/cloud-deployment-guide/editor-plugin-version/#devtestingandstablereleases).
|
171 |
|
172 | ### Loading TinyMCE by yourself
|
173 |
|
174 | To opt out of using TinyMCE cloud you have to make TinyMCE globally available yourself. This can be done either by hosting the `tinymce.min.js` file by youself and adding a script tag to you HTML or, if you are using a module loader, installing TinyMCE with npm. For info on how to get TinyMCE working with module loaders check out [this page in the documentation](https://www.tinymce.com/docs/advanced/usage-with-module-loaders/).
|
175 |
|