UNPKG

ngx-emoji-picker

Version:

A simple emoji picker for Angular 2+ / Ionic 3 with AOT build support

78 lines 10.6 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZXQtZXZlbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZW1vamktcGlja2VyLyIsInNvdXJjZXMiOlsibGliL21pc2MvY2FyZXQtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFVBQVU7SUFLckIsWUFBWSxJQUFJO1FBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTtZQUM1QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVU7U0FDM0csQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQjtRQUN0QixPQUFPLElBQUksVUFBVSxDQUFDO1lBQ3BCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsRUFBRTtRQUNoQyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLE9BQU8sS0FBSyxDQUFBO2FBQ2I7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBYyxFQUFFLEVBQWM7UUFDM0MsTUFBTSxPQUFPO1FBQ1gscUVBQXFFO1FBQ3JFLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLEVBQUUs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b3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ2FyZXRFdmVudCB7XG4gIGNhcmV0T2Zmc2V0OiBudW1iZXI7XG4gIGNhcmV0UmFuZ2U6IFJhbmdlO1xuICB0ZXh0Q29udGVudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRhdGEpO1xuICB9XG5cbiAgY2xvbmUoKTogQ2FyZXRFdmVudCB7XG4gICAgcmV0dXJuIG5ldyBDYXJldEV2ZW50KE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHtcbiAgICAgIGNhcmV0UmFuZ2U6IHRoaXMuY2FyZXRSYW5nZSAmJiB0aGlzLmNhcmV0UmFuZ2UuY2xvbmVSYW5nZSA/IHRoaXMuY2FyZXRSYW5nZS5jbG9uZVJhbmdlKCkgOiB0aGlzLmNhcmV0UmFuZ2VcbiAgICB9KSk7XG4gIH1cblxuICBzdGF0aWMgZ2VuZXJhdGVOdWxsRXZlbnQoKSB7XG4gICAgcmV0dXJuIG5ldyBDYXJldEV2ZW50KHtcbiAgICAgIGNhcmV0T2Zmc2V0OiAwLFxuICAgICAgdGV4dENvbnRlbnQ6ICcnXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZVByb3BzT2ZPYmplY3QocjEsIHIyKSB7XG4gICAgZm9yIChsZXQgayBpbiByMSkge1xuICAgICAgaWYgKHIxW2tdICE9PSByMltrXSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZShlMTogQ2FyZXRFdmVudCwgZTI6IENhcmV0RXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGFuZ2VkID1cbiAgICAgIC8qKiBkaWZmZXJlbnQgd2hlbiBlaXRoZXIgY2FyZXRSYW5nZSBpcyBvbWl0dGVkIHdoaWxlIG90aGVyIGV4aXN0cyAqL1xuICAgICAgKCFlMS5jYXJldFJhbmdlICYmIGUyLmNhcmV0UmFuZ2UpIHx8XG4gICAgICAoZTEuY2FyZXRSYW5nZSAmJiAhZTIuY2FyZXRSYW5nZSkgfHxcbiAgICAgIC8qKiBkaWZmZXJlbnQgd2hlbiBvZmZzZXQgaGFzIGNoYW5nZWQgKi9cbiAgICAgIChlMS5jYXJldE9mZnNldCAhPT0gZTIuY2FyZXRPZmZzZXQpIHx8XG4gICAgICAvKiogZGlmZmVyZW50IHdoZW4gdGV4dENvbnRlbnQgaGFzIGNoYW5nZWQgKi9cbiAgICAgIChlMS50ZXh0Q29udGVudCAhPT0gZTIudGV4dENvbnRlbnQpIHx8XG4gICAgICAvKiogZGlmZmVyZW50IHdoZW4gcmFuZ2Ugb2JqZWN0IHByb3BlcnRpZXMgY2hhbmdlZCAqL1xuICAgICAgIXRoaXMuY29tcGFyZVByb3BzT2ZPYmplY3QoZTEuY2FyZXRSYW5nZSwgZTIuY2FyZXRSYW5nZSlcbiAgICAgIDtcblxuICAgIHJldHVybiAhY2hhbmdlZDtcbiAgfVxuXG4gIHN0YXRpYyBnZW5lcmF0ZUNhcmV0RXZlbnQod2luLCBkb2MsIGVsZW1lbnQ6IEhUTUxFbGVtZW50ICYgSFRNTElucHV0RWxlbWVudCk6IENhcmV0RXZlbnQge1xuICAgIGxldCBjYXJldE9mZnNldCA9IDAsIHNlbCwgY2FyZXRSYW5nZSwgdGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50O1xuXG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICByZXR1cm4gbmV3IENhcmV0RXZlbnQoe1xuICAgICAgICBjYXJldE9mZnNldDogZWxlbWVudC5zZWxlY3Rpb25FbmQsXG4gICAgICAgIHRleHRDb250ZW50OiBlbGVtZW50LnZhbHVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luLmdldFNlbGVjdGlvbiAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBzZWwgPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoc2VsLnJhbmdlQ291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gd2luLmdldFNlbGVjdGlvbigpLmdldFJhbmdlQXQoMCk7XG4gICAgICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICBwcmVDYXJldFJhbmdlLnNldEVuZChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIGNhcmV0T2Zmc2V0ID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcblxuICAgICAgICAvKiogS2VlcGluZyBhIHJlZmVyZW5jZSBvZiB0aGUgcmFuZ2UgdG8gZW1pdCAqL1xuICAgICAgICBjYXJldFJhbmdlID0gcmFuZ2UuY2xvbmVSYW5nZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKHNlbCA9IGRvYy5zZWxlY3Rpb24pICYmIHNlbC50eXBlICE9IFwiQ29udHJvbFwiKSB7XG4gICAgICBjb25zdCB0ZXh0UmFuZ2UgPSBzZWwuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHByZUNhcmV0VGV4dFJhbmdlID0gZG9jLmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICBwcmVDYXJldFRleHRSYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChlbGVtZW50KTtcbiAgICAgIHByZUNhcmV0VGV4dFJhbmdlLnNldEVuZFBvaW50KFwiRW5kVG9FbmRcIiwgdGV4dFJhbmdlKTtcbiAgICAgIGNhcmV0T2Zmc2V0ID0gcHJlQ2FyZXRUZXh0UmFuZ2UudGV4dC5sZW5ndGg7XG5cbiAgICAgIC8qKiBLZWVwaW5nIGEgcmVmZXJlbmNlIG9mIHRoZSByYW5nZSB0byBlbWl0IGFuZCBtYWtpbmcgaXQgY29tcGF0aWJsZSAqL1xuICAgICAgY2FyZXRSYW5nZSA9IHRleHRSYW5nZS5kdXBsaWNhdGUoKTtcbiAgICAgIGNhcmV0UmFuZ2UuaW5zZXJ0Tm9kZSA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlKTtcbiAgICAgICAgY2FyZXRSYW5nZS5wYXN0ZUhUTUwoY29udGFpbmVyLmlubmVySFRNTCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ2FyZXRFdmVudCh7XG4gICAgICBjYXJldE9mZnNldCxcbiAgICAgIGNhcmV0UmFuZ2UsXG4gICAgICB0ZXh0Q29udGVudFxuICAgIH0pO1xuICB9XG59XG4iXX0=