ngx-emoji-picker
Version:
A simple emoji picker for Angular 2+ / Ionic 3 with AOT build support
78 lines • 10.6 kB
JavaScript
export class CaretEvent {
constructor(data) {
Object.assign(this, data);
}
clone() {
return new CaretEvent(Object.assign({}, this, {
caretRange: this.caretRange && this.caretRange.cloneRange ? this.caretRange.cloneRange() : this.caretRange
}));
}
static generateNullEvent() {
return new CaretEvent({
caretOffset: 0,
textContent: ''
});
}
static comparePropsOfObject(r1, r2) {
for (let k in r1) {
if (r1[k] !== r2[k]) {
return false;
}
}
return true;
}
static compare(e1, e2) {
const changed =
/** different when either caretRange is omitted while other exists */
(!e1.caretRange && e2.caretRange) ||
(e1.caretRange && !e2.caretRange) ||
/** different when offset has changed */
(e1.caretOffset !== e2.caretOffset) ||
/** different when textContent has changed */
(e1.textContent !== e2.textContent) ||
/** different when range object properties changed */
!this.comparePropsOfObject(e1.caretRange, e2.caretRange);
return !changed;
}
static generateCaretEvent(win, doc, element) {
let caretOffset = 0, sel, caretRange, textContent = element.textContent;
if (element.tagName.toLowerCase() === 'input') {
return new CaretEvent({
caretOffset: element.selectionEnd,
textContent: element.value
});
}
if (typeof win.getSelection != "undefined") {
sel = win.getSelection();
if (sel.rangeCount > 0) {
const range = win.getSelection().getRangeAt(0);
const preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
caretOffset = preCaretRange.toString().length;
/** Keeping a reference of the range to emit */
caretRange = range.cloneRange();
}
}
else if ((sel = doc.selection) && sel.type != "Control") {
const textRange = sel.createRange();
const preCaretTextRange = doc.body.createTextRange();
preCaretTextRange.moveToElementText(element);
preCaretTextRange.setEndPoint("EndToEnd", textRange);
caretOffset = preCaretTextRange.text.length;
/** Keeping a reference of the range to emit and making it compatible */
caretRange = textRange.duplicate();
caretRange.insertNode = (e) => {
const container = document.createElement("div");
container.appendChild(e);
caretRange.pasteHTML(container.innerHTML);
};
}
return new CaretEvent({
caretOffset,
caretRange,
textContent
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZXQtZXZlbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZW1vamktcGlja2VyLyIsInNvdXJjZXMiOlsibGliL21pc2MvY2FyZXQtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFVBQVU7SUFLckIsWUFBWSxJQUFJO1FBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTtZQUM1QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVU7U0FDM0csQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQjtRQUN0QixPQUFPLElBQUksVUFBVSxDQUFDO1lBQ3BCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsRUFBRTtRQUNoQyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLE9BQU8sS0FBSyxDQUFBO2FBQ2I7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBYyxFQUFFLEVBQWM7UUFDM0MsTUFBTSxPQUFPO1FBQ1gscUVBQXFFO1FBQ3JFLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDakMsQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUNqQyx3Q0FBd0M7WUFDeEMsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDbkMsNkNBQTZDO1lBQzdDLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ25DLHFEQUFxRDtZQUNyRCxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FDdkQ7UUFFSCxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUF1QztRQUN6RSxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUV4RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFO1lBQzdDLE9BQU8sSUFBSSxVQUFVLENBQUM7Z0JBQ3BCLFdBQVcsRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDakMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2FBQzNCLENBQUMsQ0FBQTtTQUNIO1FBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxZQUFZLElBQUksV0FBVyxFQUFFO1lBQzFDLEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtnQkFDdEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN6QyxhQUFhLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFELFdBQVcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUU5QywrQ0FBK0M7Z0JBQy9DLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDakM7U0FDRjthQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFO1lBQ3pELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckQsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyRCxXQUFXLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUU1Qyx3RUFBd0U7WUFDeEUsVUFBVSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLFVBQVUsQ0FBQztZQUNwQixXQUFXO1lBQ1gsVUFBVTtZQUNWLFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ2FyZXRFdmVudCB7XG4gIGNhcmV0T2Zmc2V0OiBudW1iZXI7XG4gIGNhcmV0UmFuZ2U6IFJhbmdlO1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRhdGEpO1xuICB9XG5cbiAgY2xvbmUoKTogQ2FyZXRFdmVudCB7XG4gICAgcmV0dXJuIG5ldyBDYXJldEV2ZW50KE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHtcbiAgICAgIGNhcmV0UmFuZ2U6IHRoaXMuY2FyZXRSYW5nZSAmJiB0aGlzLmNhcmV0UmFuZ2UuY2xvbmVSYW5nZSA/IHRoaXMuY2FyZXRSYW5nZS5jbG9uZVJhbmdlKCkgOiB0aGlzLmNhcmV0UmFuZ2VcbiAgICB9KSk7XG4gIH1cblxuICBzdGF0aWMgZ2VuZXJhdGVOdWxsRXZlbnQoKSB7XG4gICAgcmV0dXJuIG5ldyBDYXJldEV2ZW50KHtcbiAgICAgIGNhcmV0T2Zmc2V0OiAwLFxuICAgICAgdGV4dENvbnRlbnQ6ICcnXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZVByb3BzT2ZPYmplY3QocjEsIHIyKSB7XG4gICAgZm9yIChsZXQgayBpbiByMSkge1xuICAgICAgaWYgKHIxW2tdICE9PSByMltrXSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZShlMTogQ2FyZXRFdmVudCwgZTI6IENhcmV0RXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGFuZ2VkID1cbiAgICAgIC8qKiBkaWZmZXJlbnQgd2hlbiBlaXRoZXIgY2FyZXRSYW5nZSBpcyBvbWl0dGVkIHdoaWxlIG90aGVyIGV4aXN0cyAqL1xuICAgICAgKCFlMS5jYXJldFJhbmdlICYmIGUyLmNhcmV0UmFuZ2UpIHx8XG4gICAgICAoZTEuY2FyZXRSYW5nZSAmJiAhZTIuY2FyZXRSYW5nZSkgfHxcbiAgICAgIC8qKiBkaWZmZXJlbnQgd2hlbiBvZmZzZXQgaGFzIGNoYW5nZWQgKi9cbiAgICAgIChlMS5jYXJldE9mZnNldCAhPT0gZTIuY2FyZXRPZmZzZXQpIHx8XG4gICAgICAvKiogZGlmZmVyZW50IHdoZW4gdGV4dENvbnRlbnQgaGFzIGNoYW5nZWQgKi9cbiAgICAgIChlMS50ZXh0Q29udGVudCAhPT0gZTIudGV4dENvbnRlbnQpIHx8XG4gICAgICAvKiogZGlmZmVyZW50IHdoZW4gcmFuZ2Ugb2JqZWN0IHByb3BlcnRpZXMgY2hhbmdlZCAqL1xuICAgICAgIXRoaXMuY29tcGFyZVByb3BzT2ZPYmplY3QoZTEuY2FyZXRSYW5nZSwgZTIuY2FyZXRSYW5nZSlcbiAgICAgIDtcblxuICAgIHJldHVybiAhY2hhbmdlZDtcbiAgfVxuXG4gIHN0YXRpYyBnZW5lcmF0ZUNhcmV0RXZlbnQod2luLCBkb2MsIGVsZW1lbnQ6IEhUTUxFbGVtZW50ICYgSFRNTElucHV0RWxlbWVudCk6IENhcmV0RXZlbnQge1xuICAgIGxldCBjYXJldE9mZnNldCA9IDAsIHNlbCwgY2FyZXRSYW5nZSwgdGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50O1xuXG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICByZXR1cm4gbmV3IENhcmV0RXZlbnQoe1xuICAgICAgICBjYXJldE9mZnNldDogZWxlbWVudC5zZWxlY3Rpb25FbmQsXG4gICAgICAgIHRleHRDb250ZW50OiBlbGVtZW50LnZhbHVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luLmdldFNlbGVjdGlvbiAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBzZWwgPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoc2VsLnJhbmdlQ291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gd2luLmdldFNlbGVjdGlvbigpLmdldFJhbmdlQXQoMCk7XG4gICAgICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICBwcmVDYXJldFJhbmdlLnNldEVuZChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIGNhcmV0T2Zmc2V0ID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcblxuICAgICAgICAvKiogS2VlcGluZyBhIHJlZmVyZW5jZSBvZiB0aGUgcmFuZ2UgdG8gZW1pdCAqL1xuICAgICAgICBjYXJldFJhbmdlID0gcmFuZ2UuY2xvbmVSYW5nZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKHNlbCA9IGRvYy5zZWxlY3Rpb24pICYmIHNlbC50eXBlICE9IFwiQ29udHJvbFwiKSB7XG4gICAgICBjb25zdCB0ZXh0UmFuZ2UgPSBzZWwuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHByZUNhcmV0VGV4dFJhbmdlID0gZG9jLmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICBwcmVDYXJldFRleHRSYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChlbGVtZW50KTtcbiAgICAgIHByZUNhcmV0VGV4dFJhbmdlLnNldEVuZFBvaW50KFwiRW5kVG9FbmRcIiwgdGV4dFJhbmdlKTtcbiAgICAgIGNhcmV0T2Zmc2V0ID0gcHJlQ2FyZXRUZXh0UmFuZ2UudGV4dC5sZW5ndGg7XG5cbiAgICAgIC8qKiBLZWVwaW5nIGEgcmVmZXJlbmNlIG9mIHRoZSByYW5nZSB0byBlbWl0IGFuZCBtYWtpbmcgaXQgY29tcGF0aWJsZSAqL1xuICAgICAgY2FyZXRSYW5nZSA9IHRleHRSYW5nZS5kdXBsaWNhdGUoKTtcbiAgICAgIGNhcmV0UmFuZ2UuaW5zZXJ0Tm9kZSA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlKTtcbiAgICAgICAgY2FyZXRSYW5nZS5wYXN0ZUhUTUwoY29udGFpbmVyLmlubmVySFRNTCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ2FyZXRFdmVudCh7XG4gICAgICBjYXJldE9mZnNldCxcbiAgICAgIGNhcmV0UmFuZ2UsXG4gICAgICB0ZXh0Q29udGVudFxuICAgIH0pO1xuICB9XG59XG4iXX0=