mat-contenteditable
Version:
Angular contenteditable directive for Angular forms and Material Design
79 lines (78 loc) • 7.47 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Directive, Input } from '@angular/core';
import { MatFormFieldControl } from '@angular/material/form-field';
import { MatCkeditorDirective } from './mat-ckeditor.directive';
export class MatCkeditorBalloonDirective extends MatCkeditorDirective {
/**
* @param {?} show
* @return {?}
*/
set toolbar(show) {
if (this.editor && show !== this.toolbarOpen) {
/** @type {?} */
const balloon = this.editor.editorInstance.plugins.get('BalloonToolbar');
if (show) {
this.showToolbar(balloon);
}
else {
balloon.hide();
this.toolbarOpen = false;
}
}
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
this.editor.ready.subscribe(editor => {
/** @type {?} */
const balloon = editor.plugins.get('BalloonToolbar');
balloon.stopListening(editor.model.document.selection, 'change:range');
balloon.stopListening(balloon, '_selectionChangeDebounced');
});
this.editor.focus.subscribe(() => {
if (this.toolbarOpen) {
/** @type {?} */
const balloon = this.editor.editorInstance.plugins.get('BalloonToolbar');
this.showToolbar(balloon);
}
});
}
/**
* @param {?} balloon
* @return {?}
*/
showToolbar(balloon) {
if (!balloon._balloon.hasView(balloon.toolbarView)) {
balloon.listenTo(this.editor.editorInstance.ui, 'update', () => {
balloon._balloon.updatePosition(balloon._getBalloonPositionData());
});
balloon._balloon.add({
view: balloon.toolbarView,
position: balloon._getBalloonPositionData(),
balloonClassName: 'ck-toolbar-container'
});
this.toolbarOpen = true;
}
}
}
MatCkeditorBalloonDirective.decorators = [
{ type: Directive, args: [{
selector: '[matCkeditorBalloon]',
providers: [
{ provide: MatFormFieldControl, useExisting: MatCkeditorBalloonDirective },
]
},] }
];
MatCkeditorBalloonDirective.propDecorators = {
toolbar: [{ type: Input }]
};
if (false) {
/** @type {?} */
MatCkeditorBalloonDirective.prototype.toolbarOpen;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWNrZWRpdG9yLWJhbGxvb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbWF0LWNvbnRlbnRlZGl0YWJsZS8iLCJzb3VyY2VzIjpbImxpYi9tYXQtY2tlZGl0b3ItYmFsbG9vbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUWhFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxvQkFBb0I7Ozs7O0lBRW5FLElBQ0ksT0FBTyxDQUFDLElBQWE7UUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFOztZQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDekUsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMzQjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDMUI7U0FDRjtLQUNGOzs7O0lBR0QsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7O1lBQ25DLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckQsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDdkUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztTQUM3RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTs7Z0JBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDekUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMzQjtTQUNGLENBQUMsQ0FBQztLQUNKOzs7OztJQUVPLFdBQVcsQ0FBQyxPQUFPO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDN0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQzthQUNwRSxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUN6QixRQUFRLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixFQUFFO2dCQUMzQyxnQkFBZ0IsRUFBRSxzQkFBc0I7YUFDekMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7Ozs7WUFoREosU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLFNBQVMsRUFBRTtvQkFDVCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUU7aUJBQzNFO2FBQ0Y7OztzQkFHRSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuXG5pbXBvcnQgeyBNYXRDa2VkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4vbWF0LWNrZWRpdG9yLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttYXRDa2VkaXRvckJhbGxvb25dJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogTWF0Q2tlZGl0b3JCYWxsb29uRGlyZWN0aXZlIH0sXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWF0Q2tlZGl0b3JCYWxsb29uRGlyZWN0aXZlIGV4dGVuZHMgTWF0Q2tlZGl0b3JEaXJlY3RpdmUge1xuXG4gIEBJbnB1dCgpXG4gIHNldCB0b29sYmFyKHNob3c6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5lZGl0b3IgJiYgc2hvdyAhPT0gdGhpcy50b29sYmFyT3Blbikge1xuICAgICAgY29uc3QgYmFsbG9vbiA9IHRoaXMuZWRpdG9yLmVkaXRvckluc3RhbmNlLnBsdWdpbnMuZ2V0KCdCYWxsb29uVG9vbGJhcicpO1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgdGhpcy5zaG93VG9vbGJhcihiYWxsb29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhbGxvb24uaGlkZSgpO1xuICAgICAgICB0aGlzLnRvb2xiYXJPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdG9vbGJhck9wZW46IGJvb2xlYW47XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmVkaXRvci5yZWFkeS5zdWJzY3JpYmUoZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IGJhbGxvb24gPSBlZGl0b3IucGx1Z2lucy5nZXQoJ0JhbGxvb25Ub29sYmFyJyk7XG4gICAgICBiYWxsb29uLnN0b3BMaXN0ZW5pbmcoZWRpdG9yLm1vZGVsLmRvY3VtZW50LnNlbGVjdGlvbiwgJ2NoYW5nZTpyYW5nZScpO1xuICAgICAgYmFsbG9vbi5zdG9wTGlzdGVuaW5nKGJhbGxvb24sICdfc2VsZWN0aW9uQ2hhbmdlRGVib3VuY2VkJyk7XG4gICAgfSk7XG4gICAgdGhpcy5lZGl0b3IuZm9jdXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRvb2xiYXJPcGVuKSB7XG4gICAgICAgIGNvbnN0IGJhbGxvb24gPSB0aGlzLmVkaXRvci5lZGl0b3JJbnN0YW5jZS5wbHVnaW5zLmdldCgnQmFsbG9vblRvb2xiYXInKTtcbiAgICAgICAgdGhpcy5zaG93VG9vbGJhcihiYWxsb29uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1Rvb2xiYXIoYmFsbG9vbikge1xuICAgIGlmICghYmFsbG9vbi5fYmFsbG9vbi5oYXNWaWV3KGJhbGxvb24udG9vbGJhclZpZXcpKSB7XG4gICAgICBiYWxsb29uLmxpc3RlblRvKHRoaXMuZWRpdG9yLmVkaXRvckluc3RhbmNlLnVpLCAndXBkYXRlJywgKCkgPT4ge1xuICAgICAgICBiYWxsb29uLl9iYWxsb29uLnVwZGF0ZVBvc2l0aW9uKGJhbGxvb24uX2dldEJhbGxvb25Qb3NpdGlvbkRhdGEoKSk7XG4gICAgICB9KTtcbiAgICAgIGJhbGxvb24uX2JhbGxvb24uYWRkKHtcbiAgICAgICAgdmlldzogYmFsbG9vbi50b29sYmFyVmlldyxcbiAgICAgICAgcG9zaXRpb246IGJhbGxvb24uX2dldEJhbGxvb25Qb3NpdGlvbkRhdGEoKSxcbiAgICAgICAgYmFsbG9vbkNsYXNzTmFtZTogJ2NrLXRvb2xiYXItY29udGFpbmVyJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLnRvb2xiYXJPcGVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxufVxuIl19