monaco-editor-core
Version:
A browser based code editor
72 lines (71 loc) • 2.63 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import './iPadShowKeyboard.css';
import * as dom from '../../../../base/browser/dom.js';
import { Disposable } from '../../../../base/common/lifecycle.js';
import { registerEditorContribution } from '../../../browser/editorExtensions.js';
import { isIOS } from '../../../../base/common/platform.js';
export class IPadShowKeyboard extends Disposable {
static { this.ID = 'editor.contrib.iPadShowKeyboard'; }
constructor(editor) {
super();
this.editor = editor;
this.widget = null;
if (isIOS) {
this._register(editor.onDidChangeConfiguration(() => this.update()));
this.update();
}
}
update() {
const shouldHaveWidget = (!this.editor.getOption(92 /* EditorOption.readOnly */));
if (!this.widget && shouldHaveWidget) {
this.widget = new ShowKeyboardWidget(this.editor);
}
else if (this.widget && !shouldHaveWidget) {
this.widget.dispose();
this.widget = null;
}
}
dispose() {
super.dispose();
if (this.widget) {
this.widget.dispose();
this.widget = null;
}
}
}
class ShowKeyboardWidget extends Disposable {
static { this.ID = 'editor.contrib.ShowKeyboardWidget'; }
constructor(editor) {
super();
this.editor = editor;
this._domNode = document.createElement('textarea');
this._domNode.className = 'iPadShowKeyboard';
this._register(dom.addDisposableListener(this._domNode, 'touchstart', (e) => {
this.editor.focus();
}));
this._register(dom.addDisposableListener(this._domNode, 'focus', (e) => {
this.editor.focus();
}));
this.editor.addOverlayWidget(this);
}
dispose() {
this.editor.removeOverlayWidget(this);
super.dispose();
}
// ----- IOverlayWidget API
getId() {
return ShowKeyboardWidget.ID;
}
getDomNode() {
return this._domNode;
}
getPosition() {
return {
preference: 1 /* OverlayWidgetPositionPreference.BOTTOM_RIGHT_CORNER */
};
}
}
registerEditorContribution(IPadShowKeyboard.ID, IPadShowKeyboard, 3 /* EditorContributionInstantiation.Eventually */);