ngx-tiptap-editor
Version:
[](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml) [ {
super();
this.injector = injector;
this.ngZone = ngZone;
this.document = document;
this.dialogService = dialogService;
// tslint:disable:member-ordering
this._onClick$ = new Subject();
this.onClick$ = this._onClick$.asObservable();
this.defaultOptions = {
HTMLAttributes: { class: 'mention' },
previewComponent: MentionPreviewComponent
};
}
createExtension(extensionOptions) {
const extendedMention = this.extendMention();
const mentionOptions = this.configureMention(extensionOptions);
return extendedMention.configure(mentionOptions);
}
extendMention() {
const listeners = [];
const self = this;
return Mention.extend({
// Remove listeners
onDestroy: () => listeners.forEach(l => l.unsubscribe()),
renderHTML({ node, HTMLAttributes }) {
const span = document.createElement('span');
span.textContent = this.options.renderLabel({ options: this.options, node });
// Subscribe to click events and pass them to the onClick Subject
const subscription = fromEvent(span, 'click').subscribe(() => self._onClick$.next(node.attrs));
listeners.push(subscription);
const attributes = mergeAttributes({ 'data-mention': '' }, this.options.HTMLAttributes, HTMLAttributes);
Object.keys(attributes).forEach(key => span.setAttribute(key, attributes[key]));
return span;
},
addCommands() {
return {
setMention: ({ range, props }) => ({ commands, state }) => {
// If range was not provided just insert at the current position
if (!range)
range = state.selection;
return commands.insertContentAt(range, [
{
type: 'mention',
attrs: props,
},
{
type: 'text',
text: ' ',
},
]);
}
};
},
});
}
configureMention({ ...mentionOptions }) {
// Check if the fetch function is provided and if not don't register events for it
if (mentionOptions.mentionFetchFunction) {
mentionOptions.suggestion = {
render: () => {
let component;
let remove;
return this.ngZone.run(() => ({
onStart: props => {
component = this.createComponent(mentionOptions.previewComponent, [{
provide: Editor,
useValue: props.editor
}, {
provide: MENTION_FETCH,
useValue: mentionOptions.mentionFetchFunction
}]);
component.instance.updateProps(props);
remove = this.insertComponent(component, this.document.body);
},
onKeyDown: (props) => component.instance.handleKeyPress(props.event),
onUpdate: props => component.instance.updateProps(props),
onExit: () => remove.remove(),
}));
},
...mentionOptions.suggestion
};
}
return mentionOptions;
}
}
NgxMention.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: NgxMention, deps: [{ token: i0.Injector }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i1.TipDialogService }], target: i0.ɵɵFactoryTarget.Injectable });
NgxMention.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: NgxMention });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: NgxMention, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.NgZone }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: i1.TipDialogService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1lbnRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGlwdGFwLWVkaXRvci9zcmMvbGliL2V4dGVuc2lvbnMvY3VzdG9tL21lbnRpb24vbmd4LW1lbnRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBZ0IsTUFBTSxFQUFFLFVBQVUsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFnQixNQUFNLEVBQUUsZUFBZSxFQUE0QixNQUFNLGNBQWMsQ0FBQztBQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLDJCQUEyQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUV4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsYUFBYSxFQUViLHVCQUF1QixFQUV4QixNQUFNLDZCQUE2QixDQUFDOzs7QUFzQnJDLFdBQVc7QUFFWCxNQUFNLE9BQU8sVUFBVyxTQUFRLHFCQUF3QztJQVd0RSxnQ0FBZ0M7SUFFaEMsWUFDWSxRQUFrQixFQUNwQixNQUFjLEVBQ0ksUUFBa0IsRUFDcEMsYUFBK0I7UUFFdkMsS0FBSyxFQUFFLENBQUM7UUFMRSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDSSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQWZ6QyxpQ0FBaUM7UUFDekIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDeEMsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFekMsbUJBQWMsR0FBRztZQUN0QixjQUFjLEVBQUUs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RUFBRSxDQUFDLENBQUM7d0JBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTs0QkFDZixTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQ0FDakUsT0FBTyxFQUFFLE1BQU07b0NBQ2YsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNO2lDQUN2QixFQUFFO29DQUNELE9BQU8sRUFBRSxhQUFhO29DQUN0QixRQUFRLEVBQUUsY0FBYyxDQUFDLG9CQUFvQjtpQ0FDOUMsQ0FBQyxDQUFDLENBQUM7NEJBQ0osU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ3RDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMvRCxDQUFDO3dCQUNELFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzt3QkFDcEUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO3dCQUN4RCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtxQkFDOUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ04sQ0FBQztnQkFDRCxHQUFHLGNBQWMsQ0FBQyxVQUFVO2FBQzdCLENBQUM7U0FDSDtRQUVELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7O3VHQXJHVSxVQUFVLGdFQWdCWCxRQUFROzJHQWhCUCxVQUFVOzJGQUFWLFVBQVU7a0JBRHRCLFVBQVU7c0dBaUI2QixRQUFROzBCQUEzQyxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW55RXh0ZW5zaW9uLCBFZGl0b3IsIG1lcmdlQXR0cmlidXRlcywgTm9kZSwgUmFuZ2UsIFJhd0NvbW1hbmRzIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcbmltcG9ydCB7IE1lbnRpb24sIE1lbnRpb25PcHRpb25zIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbWVudGlvbic7XG5pbXBvcnQgeyBOb2RlIGFzIFByb3NlTWlycm9yTm9kZSB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUaXBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWR2YW5jZWRCYXNlRXh0ZW5zaW9uIH0gZnJvbSAnLi4vLi4vdGlwLWJhc2UtZXh0ZW5zaW9uJztcbmltcG9ydCB7XG4gIE1FTlRJT05fRkVUQ0gsXG4gIE1lbnRpb25GZXRjaEZ1bmN0aW9uLFxuICBNZW50aW9uUHJldmlld0NvbXBvbmVudCxcbiAgTWVudGlvblByZXZpZXdJbnRlcmZhY2Vcbn0gZnJvbSAnLi9tZW50aW9uLXByZXZpZXcuY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgTWVudGlvbkRhdGEgPSB7IGlkOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0gfCB7IGlkOiBzdHJpbmcsIGxhYmVsOiBudWxsOyB9O1xuXG5kZWNsYXJlIG1vZHVsZSAnQHRpcHRhcC9jb3JlJyB7XG4gIGludGVyZmFjZSBDb21tYW5kczxSZXR1cm5UeXBlPiB7XG4gICAgbWVudGlvbjoge1xuICAgICAgc2V0TWVudGlvbjogKGF0dHJpYnV0ZXM6IHsgcmFuZ2U/OiBSYW5nZSB8IG51bWJlciwgcHJvcHM6IE1lbnRpb25EYXRhIH0pID0+IFJldHVyblR5cGUsXG4gICAgfTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgTmd4TWVudGlvbk9wdGlvbnMge1xuICBwcmV2aWV3Q29tcG9uZW50OiBUeXBlPE1lbnRpb25QcmV2aWV3SW50ZXJmYWNlPjtcbiAgSFRNTEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHJlbmRlckxhYmVsOiAocHJvcHM6IHtcbiAgICBvcHRpb25zOiBNZW50aW9uT3B0aW9ucyxcbiAgICBub2RlOiBQcm9zZU1pcnJvck5vZGUsXG4gIH0pID0+IHN0cmluZztcbiAgbWVudGlvbkZldGNoRnVuY3Rpb24/OiBNZW50aW9uRmV0Y2hGdW5jdGlvbjtcbn1cblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3hNZW50aW9uIGV4dGVuZHMgQWR2YW5jZWRCYXNlRXh0ZW5zaW9uPE5neE1lbnRpb25PcHRpb25zPiB7XG5cbiAgLy8gdHNsaW50OmRpc2FibGU6bWVtYmVyLW9yZGVyaW5nXG4gIHByaXZhdGUgX29uQ2xpY2skID0gbmV3IFN1YmplY3Q8TWVudGlvbkRhdGE+KCk7XG4gIHB1YmxpYyBvbkNsaWNrJCA9IHRoaXMuX29uQ2xpY2skLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBIVE1MQXR0cmlidXRlczoge2NsYXNzOiAnbWVudGlvbid9LFxuICAgIHByZXZpZXdDb21wb25lbnQ6IE1lbnRpb25QcmV2aWV3Q29tcG9uZW50XG4gIH07XG5cbiAgLy8gdHNsaW50OmVuYWJsZTptZW1iZXItb3JkZXJpbmdcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBUaXBEaWFsb2dTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRXh0ZW5zaW9uKGV4dGVuc2lvbk9wdGlvbnM6IFJlcXVpcmVkPE5neE1lbnRpb25PcHRpb25zPik6IEFueUV4dGVuc2lvbiB7XG4gICAgY29uc3QgZXh0ZW5kZWRNZW50aW9uID0gdGhpcy5leHRlbmRNZW50aW9uKCk7XG4gICAgY29uc3QgbWVudGlvbk9wdGlvbnMgPSB0aGlzLmNvbmZpZ3VyZU1lbnRpb24oZXh0ZW5zaW9uT3B0aW9ucyk7XG4gICAgcmV0dXJuIGV4dGVuZGVkTWVudGlvbi5jb25maWd1cmUobWVudGlvbk9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRlbmRNZW50aW9uKCk6IE5vZGU8TWVudGlvbk9wdGlvbnM+IHtcbiAgICBjb25zdCBsaXN0ZW5lcnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gTWVudGlvbi5leHRlbmQoe1xuICAgICAgLy8gUmVtb3ZlIGxpc3RlbmVyc1xuICAgICAgb25EZXN0cm95OiAoKSA9PiBsaXN0ZW5lcnMuZm9yRWFjaChsID0+IGwudW5zdWJzY3JpYmUoKSksXG4gICAgICByZW5kZXJIVE1MKHtub2RlLCBIVE1MQXR0cmlidXRlc30pOiBhbnkge1xuXG4gICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSB0aGlzLm9wdGlvbnMucmVuZGVyTGFiZWwoe29wdGlvbnM6IHRoaXMub3B0aW9ucywgbm9kZX0pO1xuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gY2xpY2sgZXZlbnRzIGFuZCBwYXNzIHRoZW0gdG8gdGhlIG9uQ2xpY2sgU3ViamVjdFxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoc3BhbiwgJ2NsaWNrJykuc3Vic2NyaWJlKCgpID0+IHNlbGYuX29uQ2xpY2skLm5leHQobm9kZS5hdHRycyBhcyBhbnkpKTtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goc3Vic2NyaXB0aW9uKTtcblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gbWVyZ2VBdHRyaWJ1dGVzKHsnZGF0YS1tZW50aW9uJzogJyd9LCB0aGlzLm9wdGlvbnMuSFRNTEF0dHJpYnV0ZXMsIEhUTUxBdHRyaWJ1dGVzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChrZXkgPT4gc3Bhbi5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyaWJ1dGVzW2tleV0pKTtcblxuICAgICAgICByZXR1cm4gc3BhbjtcbiAgICAgIH0sXG4gICAgICBhZGRDb21tYW5kcygpOiBQYXJ0aWFsPFJhd0NvbW1hbmRzPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2V0TWVudGlvbjogKHtyYW5nZSwgcHJvcHN9KSA9PiAoe2NvbW1hbmRzLCBzdGF0ZX0pID0+IHtcblxuICAgICAgICAgICAgLy8gSWYgcmFuZ2Ugd2FzIG5vdCBwcm92aWRlZCBqdXN0IGluc2VydCBhdCB0aGUgY3VycmVudCBwb3NpdGlvblxuICAgICAgICAgICAgaWYgKCFyYW5nZSkgcmFuZ2UgPSBzdGF0ZS5zZWxlY3Rpb247XG5cbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy5pbnNlcnRDb250ZW50QXQocmFuZ2UsIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdtZW50aW9uJyxcbiAgICAgICAgICAgICAgICBhdHRyczogcHJvcHMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgdGV4dDogJyAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlTWVudGlvbih7Li4ubWVudGlvbk9wdGlvbnN9OiBQYXJ0aWFsPE1lbnRpb25PcHRpb25zPiAmIE5neE1lbnRpb25PcHRpb25zKTogTmd4TWVudGlvbk9wdGlvbnMge1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZldGNoIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGFuZCBpZiBub3QgZG9uJ3QgcmVnaXN0ZXIgZXZlbnRzIGZvciBpdFxuICAgIGlmIChtZW50aW9uT3B0aW9ucy5tZW50aW9uRmV0Y2hGdW5jdGlvbikge1xuICAgICAgbWVudGlvbk9wdGlvbnMuc3VnZ2VzdGlvbiA9IHtcbiAgICAgICAgcmVuZGVyOiAoKSA9PiB7XG4gICAgICAgICAgbGV0IGNvbXBvbmVudDogQ29tcG9uZW50UmVmPE1lbnRpb25QcmV2aWV3SW50ZXJmYWNlPjtcbiAgICAgICAgICBsZXQgcmVtb3ZlOiB7IHJlbW92ZTogKCkgPT4gdm9pZDsgfTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuKCgpID0+ICh7XG4gICAgICAgICAgICBvblN0YXJ0OiBwcm9wcyA9PiB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMuY3JlYXRlQ29tcG9uZW50KG1lbnRpb25PcHRpb25zLnByZXZpZXdDb21wb25lbnQsIFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogRWRpdG9yLFxuICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBwcm9wcy5lZGl0b3JcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1FTlRJT05fRkVUQ0gsXG4gICAgICAgICAgICAgICAgdXNlVmFsdWU6IG1lbnRpb25PcHRpb25zLm1lbnRpb25GZXRjaEZ1bmN0aW9uXG4gICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgICAgICAgcmVtb3ZlID0gdGhpcy5pbnNlcnRDb21wb25lbnQoY29tcG9uZW50LCB0aGlzLmRvY3VtZW50LmJvZHkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uS2V5RG93bjogKHByb3BzKSA9PiBjb21wb25lbnQuaW5zdGFuY2UuaGFuZGxlS2V5UHJlc3MocHJvcHMuZXZlbnQpLFxuICAgICAgICAgICAgb25VcGRhdGU6IHByb3BzID0+IGNvbXBvbmVudC5pbnN0YW5jZS51cGRhdGVQcm9wcyhwcm9wcyksXG4gICAgICAgICAgICBvbkV4aXQ6ICgpID0+IHJlbW92ZS5yZW1vdmUoKSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIC4uLm1lbnRpb25PcHRpb25zLnN1Z2dlc3Rpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnRpb25PcHRpb25zO1xuICB9XG59XG4iXX0=