2019-06-04 12:16:20 -04:00

122 lines
5.2 KiB
JavaScript

"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