"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var CompositionHelper = (function () { function CompositionHelper(_textarea, _compositionView, _terminal) { this._textarea = _textarea; this._compositionView = _compositionView; this._terminal = _terminal; this._isComposing = false; this._isSendingComposition = false; this._compositionPosition = { start: null, end: null }; } CompositionHelper.prototype.compositionstart = function () { this._isComposing = true; this._compositionPosition.start = this._textarea.value.length; this._compositionView.textContent = ''; this._compositionView.classList.add('active'); }; CompositionHelper.prototype.compositionupdate = function (ev) { var _this = this; this._compositionView.textContent = ev.data; this.updateCompositionElements(); setTimeout(function () { _this._compositionPosition.end = _this._textarea.value.length; }, 0); }; CompositionHelper.prototype.compositionend = function () { this._finalizeComposition(true); }; CompositionHelper.prototype.keydown = function (ev) { if (this._isComposing || this._isSendingComposition) { if (ev.keyCode === 229) { return false; } else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) { return false; } this._finalizeComposition(false); } if (ev.keyCode === 229) { this._handleAnyTextareaChanges(); return false; } return true; }; CompositionHelper.prototype._finalizeComposition = function (waitForPropagation) { var _this = this; this._compositionView.classList.remove('active'); this._isComposing = false; this._clearTextareaPosition(); if (!waitForPropagation) { this._isSendingComposition = false; var input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end); this._terminal.handler(input); } else { var currentCompositionPosition_1 = { start: this._compositionPosition.start, end: this._compositionPosition.end }; this._isSendingComposition = true; setTimeout(function () { if (_this._isSendingComposition) { _this._isSendingComposition = false; var input = void 0; if (_this._isComposing) { input = _this._textarea.value.substring(currentCompositionPosition_1.start, currentCompositionPosition_1.end); } else { input = _this._textarea.value.substring(currentCompositionPosition_1.start); } _this._terminal.handler(input); } }, 0); } }; CompositionHelper.prototype._handleAnyTextareaChanges = function () { var _this = this; var oldValue = this._textarea.value; setTimeout(function () { if (!_this._isComposing) { var newValue = _this._textarea.value; var diff = newValue.replace(oldValue, ''); if (diff.length > 0) { _this._terminal.handler(diff); } } }, 0); }; CompositionHelper.prototype.updateCompositionElements = function (dontRecurse) { var _this = this; if (!this._isComposing) { return; } if (this._terminal.buffer.isCursorInViewport) { var cellHeight = Math.ceil(this._terminal.charMeasure.height * this._terminal.options.lineHeight); var cursorTop = this._terminal.buffer.y * cellHeight; var cursorLeft = this._terminal.buffer.x * this._terminal.charMeasure.width; this._compositionView.style.left = cursorLeft + 'px'; this._compositionView.style.top = cursorTop + 'px'; this._compositionView.style.height = cellHeight + 'px'; this._compositionView.style.lineHeight = cellHeight + 'px'; this._compositionView.style.fontFamily = this._terminal.options.fontFamily; this._compositionView.style.fontSize = this._terminal.options.fontSize + 'px'; var compositionViewBounds = this._compositionView.getBoundingClientRect(); this._textarea.style.left = cursorLeft + 'px'; this._textarea.style.top = cursorTop + 'px'; this._textarea.style.width = compositionViewBounds.width + 'px'; this._textarea.style.height = compositionViewBounds.height + 'px'; this._textarea.style.lineHeight = compositionViewBounds.height + 'px'; } if (!dontRecurse) { setTimeout(function () { return _this.updateCompositionElements(true); }, 0); } }; CompositionHelper.prototype._clearTextareaPosition = function () { this._textarea.style.left = ''; this._textarea.style.top = ''; }; return CompositionHelper; }()); exports.CompositionHelper = CompositionHelper; //# sourceMappingURL=CompositionHelper.js.map