How to register a custom module?
wlecki opened this issue · 3 comments
How a custom module can be registered into ngx quill editor?
For example, if I want to use this one: https://www.npmjs.com/package/quill-mentions what should I do to make it available to ngx quill?
Thanks.
@wlecki I'm facing the same issue. Did you find a solution? (I'm trying to integrate quill-mention)
Putting this here in case anyone finds it useful.
In a similar angular-quilljs library, I found the following approach
- Install the quill-mention library
- In the component where your quill editor is located, include the line
import 'quill-mention';
in the imports - Use the example given on the quill-mention page above to add the module in the editorOptions
You should have a working dropdown at this stage, but the css does not seem to get applied. I just took the css from the library and added it to my main styles file - this fixed it!
@suparnavg Yes, I've integrated it pretty easily after all - I should have closed the issue :)
How I did it:
I'm building a bigger portal, that has three different configurations for Quill, depending on where it is used and I needed to customize quill mention module, so I've downloaded source files, modify them, made them exportable, later I created a shared Quill configuration service, so all configurations and Quill itself is initialized only once.
- Imports in my service:
import * as QuillNamespace from 'quill';
const Quill: any = QuillNamespace;
import AutoLinks from 'quill-auto-links';
import Mention from '../../external-modules/quill-mention/quill.mention.js';
import MentionBlot from '../../external-modules/quill-mention/blots/mention.js';
- Method initializing Quill and all the modules that is called only once, by e.g. you main component:
registerQuillAdditionalOptions() {
MentionBlot.blotName = 'mention';
MentionBlot.tagName = 'span';
MentionBlot.className = 'mention';
Quill.register(MentionBlot);
Quill.register('modules/autoLinks', AutoLinks);
Quill.register('modules/mention', Mention);
}
- In my service, there is couple configurations, so every component that uses Quill and needs something specific, can use this service like this:
<quill-editor
[options]="quillService.chosenConfig">
</quill-editor>
Also, remember that if you specify formats
in Quill config, e.g.: formats: ['bold', 'italic', 'underline', 'strike', 'list', 'link', 'mention'],
, you HAVE to include 'mention'
in the array - otherwise this module won't work.
In your case, if you do not feel the need to modify quill mention, your service could look like this:
import { Injectable } from '@angular/core';
import * as QuillNamespace from 'quill';
const Quill: any = QuillNamespace;
import AutoLinks from 'quill-auto-links';
import 'quill-mention';
@Injectable()
export class QuillConfigService {
constructor() {}
registerQuillAdditionalOptions() {
Quill.register('modules/autoLinks', AutoLinks);
}
getGeneralWysiwygConfig() {
return {
debug: 'error',
placeholder: '',
modules: {
autoLinks: true,
mention: {
// mention configuration
},
toolbar: [
['bold', 'italic', 'underline', 'strike'],
[{ list: 'ordered' }, { list: 'bullet' }],
['image', 'video'],
],
},
formats: [
'bold',
'italic',
'underline',
'strike',
'list',
'link',
'mention',
],
};
}
}
And if the styles don't get applied, try in angular-cli.json
in styles
array add:
"../node_modules/quill-mention/dist/quill.mention.min.css"
before your main css file.