ngx-emoji-picker
Version:
A simple emoji picker for Angular 2+ / Ionic 3 with AOT build support
92 lines • 11.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, Output, EventEmitter, ElementRef, OnInit, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
import { takeUntil, distinctUntilChanged } from 'rxjs/operators';
import { CaretEvent } from '../misc/caret-event';
var EmojiPickerCaretDirective = /** @class */ (function () {
function EmojiPickerCaretDirective(_el) {
var _this = this;
this._el = _el;
this.caretEmitter = new EventEmitter();
this._caretEvent$ = new Subject();
this._destroyed$ = new Subject();
this._lastCaretEvent = CaretEvent.generateNullEvent();
this._caretEvent$
.pipe(takeUntil(this._destroyed$), distinctUntilChanged(function (event1, event2) {
return CaretEvent.compare(event1, event2);
}))
.subscribe(function (event) {
_this.caretEmitter.emit(event);
_this._lastCaretEvent = event.clone();
});
}
Object.defineProperty(EmojiPickerCaretDirective.prototype, "doc", {
get: function () {
if (!this._doc) {
this._doc = this._el.nativeElement.ownerDocument || this._el.nativeElement.document || document;
}
return this._doc;
},
enumerable: true,
configurable: true
});
Object.defineProperty(EmojiPickerCaretDirective.prototype, "win", {
get: function () {
if (!this._win) {
this._win = this.doc.defaultView || this.doc.parentWindow || window;
}
return this._win;
},
enumerable: true,
configurable: true
});
EmojiPickerCaretDirective.prototype.ngOnInit = function () {
if (!this._el.nativeElement.getAttribute('contenteditable') && this._el.nativeElement.tagName.toLowerCase() !== 'input') {
throw new Error('(emojiPickerPositionEmitter) should only work on contenteditable enabled or input elements');
}
};
EmojiPickerCaretDirective.prototype.ngOnDestroy = function () {
this._destroyed$.next(true);
};
EmojiPickerCaretDirective.prototype.updateCaretPosition = function () {
var cEvent = CaretEvent.generateCaretEvent(this.win, this.doc, this._el.nativeElement);
this._caretEvent$.next(cEvent);
};
EmojiPickerCaretDirective.prototype.updateCaretDueMutation = function () {
var _this = this;
var cEvent = CaretEvent.generateCaretEvent(this.win, this.doc, this._el.nativeElement);
var textMovement = cEvent.textContent.length - this._lastCaretEvent.textContent.length;
cEvent.caretOffset = this._lastCaretEvent.caretOffset + textMovement;
/** change detection after DOMSubtreeModified event is weird
* ChangeDetectorRef.detectChanges(), ChangeDetectorRef.markForCheck(), ApplicationRef.tick(), NgZone.run()
* all of those methods did not work as expected.
* As a temporary hack I am emitting an event after a short timeout, which is fine due to the _caretEvent$ smart stream
*/
setTimeout(function () {
_this._caretEvent$.next(cEvent);
});
};
EmojiPickerCaretDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
__decorate([
Output('emojiPickerCaretEmitter'),
__metadata("design:type", Object)
], EmojiPickerCaretDirective.prototype, "caretEmitter", void 0);
EmojiPickerCaretDirective = __decorate([
Directive({
selector: '[emojiPickerCaretEmitter]',
host: {
'(keyup)': 'updateCaretPosition()',
'(mouseup)': 'updateCaretPosition()',
'(selectstart)': 'updateCaretPosition()',
'(focus)': 'updateCaretPosition()',
'(DOMSubtreeModified)': 'updateCaretDueMutation($event)'
}
}),
__metadata("design:paramtypes", [ElementRef])
], EmojiPickerCaretDirective);
return EmojiPickerCaretDirective;
}());
export { EmojiPickerCaretDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamktcGlja2VyLWNhcmV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1lbW9qaS1waWNrZXIvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9lbW9qaS1waWNrZXItY2FyZXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBWWpEO0lBMkJFLG1DQUNVLEdBQWU7UUFEekIsaUJBWUM7UUFYUyxRQUFHLEdBQUgsR0FBRyxDQUFZO1FBM0JVLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUV6RSxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDekMsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRXJDLG9CQUFlLEdBQWUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUF3Qm5FLElBQUksQ0FBQyxZQUFZO2FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsVUFBQyxNQUFNLEVBQUUsTUFBTTtZQUNyRSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO2FBQ0YsU0FBUyxDQUFDLFVBQUMsS0FBaUI7WUFDM0IsS0FBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsS0FBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDdEMsQ0FBQyxDQUFDLENBQ0g7SUFDSCxDQUFDO0lBNUJELHNCQUFJLDBDQUFHO2FBQVA7WUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDO2FBQ2pHO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7OztPQUFBO0lBRUQsc0JBQUksMENBQUc7YUFBUDtZQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFBO2FBQ3BFO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ2xCLENBQUM7OztPQUFBO0lBZ0JELDRDQUFRLEdBQVI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRTtZQUN2SCxNQUFNLElBQUksS0FBSyxDQUFDLDRGQUE0RixDQUFDLENBQUM7U0FDL0c7SUFDSCxDQUFDO0lBRUQsK0NBQVcsR0FBWDtRQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCx1REFBbUIsR0FBbkI7UUFDRSxJQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELDBEQUFzQixHQUF0QjtRQUFBLGlCQWNDO1FBYkMsSUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pGLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN2RixNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztRQUVyRTs7OztXQUlHO1FBRUYsVUFBVSxDQUFDO1lBQ1QsS0FBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDOztnQkExQ2MsVUFBVTs7SUEzQlU7UUFBbEMsTUFBTSxDQUFDLHlCQUF5QixDQUFDOzttRUFBK0M7SUFEdEUseUJBQXlCO1FBVnJDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSwyQkFBMkI7WUFDckMsSUFBSSxFQUFFO2dCQUNKLFNBQVMsRUFBRSx1QkFBdUI7Z0JBQ2xDLFdBQVcsRUFBRSx1QkFBdUI7Z0JBQ3BDLGVBQWUsRUFBRSx1QkFBdUI7Z0JBQ3hDLFNBQVMsRUFBRSx1QkFBdUI7Z0JBQ2xDLHNCQUFzQixFQUFFLGdDQUFnQzthQUN6RDtTQUNGLENBQUM7eUNBNkJlLFVBQVU7T0E1QmQseUJBQXlCLENBdUVyQztJQUFELGdDQUFDO0NBQUEsQUF2RUQsSUF1RUM7U0F2RVkseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgT25Jbml0LCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuXG5cblxuaW1wb3J0IHsgQ2FyZXRFdmVudCB9IGZyb20gJy4uL21pc2MvY2FyZXQtZXZlbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZW1vamlQaWNrZXJDYXJldEVtaXR0ZXJdJyxcbiAgaG9zdDoge1xuICAgICcoa2V5dXApJzogJ3VwZGF0ZUNhcmV0UG9zaXRpb24oKScsXG4gICAgJyhtb3VzZXVwKSc6ICd1cGRhdGVDYXJldFBvc2l0aW9uKCknLFxuICAgICcoc2VsZWN0c3RhcnQpJzogJ3VwZGF0ZUNhcmV0UG9zaXRpb24oKScsXG4gICAgJyhmb2N1cyknOiAndXBkYXRlQ2FyZXRQb3NpdGlvbigpJyxcbiAgICAnKERPTVN1YnRyZWVNb2RpZmllZCknOiAndXBkYXRlQ2FyZXREdWVNdXRhdGlvbigkZXZlbnQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIEVtb2ppUGlja2VyQ2FyZXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBPdXRwdXQoJ2Vtb2ppUGlja2VyQ2FyZXRFbWl0dGVyJykgY2FyZXRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJldEV2ZW50PigpO1xuXG4gIHByaXZhdGUgX2NhcmV0RXZlbnQkID0gbmV3IFN1YmplY3Q8Q2FyZXRFdmVudD4oKTtcbiAgcHJpdmF0ZSBfZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBfbGFzdENhcmV0RXZlbnQ6IENhcmV0RXZlbnQgPSBDYXJldEV2ZW50LmdlbmVyYXRlTnVsbEV2ZW50KCk7XG5cbiAgcHJpdmF0ZSBfd2luO1xuICBwcml2YXRlIF9kb2M7XG5cbiAgZ2V0IGRvYygpIHtcbiAgICBpZiAoIXRoaXMuX2RvYykge1xuICAgICAgdGhpcy5fZG9jID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50IHx8IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuZG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2RvYztcbiAgfVxuXG4gIGdldCB3aW4oKSB7XG4gICAgaWYgKCF0aGlzLl93aW4pIHtcbiAgICAgIHRoaXMuX3dpbiA9IHRoaXMuZG9jLmRlZmF1bHRWaWV3IHx8IHRoaXMuZG9jLnBhcmVudFdpbmRvdyB8fCB3aW5kb3dcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fd2luXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbDogRWxlbWVudFJlZlxuICApIHtcbiAgICB0aGlzLl9jYXJldEV2ZW50JFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoZXZlbnQxLCBldmVudDIpID0+IHtcbiAgICAgICAgcmV0dXJuIENhcmV0RXZlbnQuY29tcGFyZShldmVudDEsIGV2ZW50Mik7XG4gICAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDYXJldEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuY2FyZXRFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLl9sYXN0Q2FyZXRFdmVudCA9IGV2ZW50LmNsb25lKClcbiAgICAgIH0pXG4gICAgO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgJiYgdGhpcy5fZWwubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpbnB1dCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignKGVtb2ppUGlja2VyUG9zaXRpb25FbWl0dGVyKSBzaG91bGQgb25seSB3b3JrIG9uIGNvbnRlbnRlZGl0YWJsZSBlbmFibGVkIG9yIGlucHV0IGVsZW1lbnRzJyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveWVkJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgdXBkYXRlQ2FyZXRQb3NpdGlvbigpIHtcbiAgICBjb25zdCBjRXZlbnQgPSBDYXJldEV2ZW50LmdlbmVyYXRlQ2FyZXRFdmVudCh0aGlzLndpbiwgdGhpcy5kb2MsIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuX2NhcmV0RXZlbnQkLm5leHQoY0V2ZW50KTtcbiAgfVxuXG4gIHVwZGF0ZUNhcmV0RHVlTXV0YXRpb24oKSB7XG4gICAgY29uc3QgY0V2ZW50ID0gQ2FyZXRFdmVudC5nZW5lcmF0ZUNhcmV0RXZlbnQodGhpcy53aW4sIHRoaXMuZG9jLCB0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICBsZXQgdGV4dE1vdmVtZW50ID0gY0V2ZW50LnRleHRDb250ZW50Lmxlbmd0aCAtIHRoaXMuX2xhc3RDYXJldEV2ZW50LnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICBjRXZlbnQuY2FyZXRPZmZzZXQgPSB0aGlzLl9sYXN0Q2FyZXRFdmVudC5jYXJldE9mZnNldCArIHRleHRNb3ZlbWVudDtcblxuICAgIC8qKiBjaGFuZ2UgZGV0ZWN0aW9uIGFmdGVyIERPTVN1YnRyZWVNb2RpZmllZCBldmVudCBpcyB3ZWlyZFxuICAgICAqIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSwgQ2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksIEFwcGxpY2F0aW9uUmVmLnRpY2soKSwgTmdab25lLnJ1bigpXG4gICAgICogYWxsIG9mIHRob3NlIG1ldGhvZHMgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLlxuICAgICAqIEFzIGEgdGVtcG9yYXJ5IGhhY2sgSSBhbSBlbWl0dGluZyBhbiBldmVudCBhZnRlciBhIHNob3J0IHRpbWVvdXQsIHdoaWNoIGlzIGZpbmUgZHVlIHRvIHRoZSBfY2FyZXRFdmVudCQgc21hcnQgc3RyZWFtXG4gICAgICovXG5cbiAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgdGhpcy5fY2FyZXRFdmVudCQubmV4dChjRXZlbnQpO1xuICAgICB9KTtcbiAgfVxufVxuIl19