mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 13:55:41 +01:00
Don't load monaco editor in fullscreen
This commit is contained in:
parent
74fb36aa50
commit
842214b80e
3 changed files with 111 additions and 74 deletions
|
|
@ -21,12 +21,24 @@ export interface IMonacoSetup {
|
||||||
monacoTypesUrl: string | undefined;
|
monacoTypesUrl: string | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
let loadMonacoPromise: Promise<typeof monaco> | undefined;
|
let loading = false;
|
||||||
|
let resolve: (value: typeof monaco) => void;
|
||||||
|
let reject: (error: unknown) => void;
|
||||||
|
let loadMonacoPromise = new Promise<typeof monaco>((res, rej) => {
|
||||||
|
resolve = res;
|
||||||
|
reject = rej;
|
||||||
|
});
|
||||||
|
|
||||||
|
export async function waitForLoadedMonaco(): Promise<typeof monaco> {
|
||||||
|
return loadMonacoPromise;
|
||||||
|
}
|
||||||
|
|
||||||
export async function loadMonaco(
|
export async function loadMonaco(
|
||||||
setup: IMonacoSetup = prodMonacoSetup
|
setup: IMonacoSetup = prodMonacoSetup
|
||||||
): Promise<typeof monaco> {
|
): Promise<typeof monaco> {
|
||||||
if (!loadMonacoPromise) {
|
if (!loading) {
|
||||||
loadMonacoPromise = _loadMonaco(setup);
|
loading = true;
|
||||||
|
_loadMonaco(setup).then(resolve, reject);
|
||||||
}
|
}
|
||||||
return loadMonacoPromise;
|
return loadMonacoPromise;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,11 @@ import {
|
||||||
reaction,
|
reaction,
|
||||||
runInAction,
|
runInAction,
|
||||||
} from "mobx";
|
} from "mobx";
|
||||||
import { IMonacoSetup, loadMonaco } from "../../../monaco-loader";
|
import {
|
||||||
|
IMonacoSetup,
|
||||||
|
loadMonaco,
|
||||||
|
waitForLoadedMonaco,
|
||||||
|
} from "../../../monaco-loader";
|
||||||
import { IPlaygroundProject, IPreviewState } from "../../../shared";
|
import { IPlaygroundProject, IPreviewState } from "../../../shared";
|
||||||
import { monacoEditorVersion } from "../../monacoEditorVersion";
|
import { monacoEditorVersion } from "../../monacoEditorVersion";
|
||||||
import { Debouncer } from "../../utils/Debouncer";
|
import { Debouncer } from "../../utils/Debouncer";
|
||||||
|
|
@ -62,6 +66,17 @@ export class PlaygroundModel {
|
||||||
|
|
||||||
private readonly _previewHandlers = new Set<IPreviewHandler>();
|
private readonly _previewHandlers = new Set<IPreviewHandler>();
|
||||||
|
|
||||||
|
private _wasEverNonFullScreen = false;
|
||||||
|
public get wasEverNonFullScreen() {
|
||||||
|
if (this._wasEverNonFullScreen) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!this.settings.previewFullScreen) {
|
||||||
|
this._wasEverNonFullScreen = true;
|
||||||
|
}
|
||||||
|
return this._wasEverNonFullScreen;
|
||||||
|
}
|
||||||
|
|
||||||
@computed.struct
|
@computed.struct
|
||||||
get monacoSetup(): IMonacoSetup {
|
get monacoSetup(): IMonacoSetup {
|
||||||
const sourceOverride = this.serializer.sourceOverride;
|
const sourceOverride = this.serializer.sourceOverride;
|
||||||
|
|
@ -142,10 +157,10 @@ export class PlaygroundModel {
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
const observablePromise = new ObservablePromise(loadMonaco());
|
const observablePromise = new ObservablePromise(waitForLoadedMonaco());
|
||||||
let disposable: Disposable | undefined = undefined;
|
let disposable: Disposable | undefined = undefined;
|
||||||
|
|
||||||
loadMonaco().then((m) => {
|
waitForLoadedMonaco().then((m) => {
|
||||||
const options =
|
const options =
|
||||||
monaco.languages.typescript.javascriptDefaults.getCompilerOptions();
|
monaco.languages.typescript.javascriptDefaults.getCompilerOptions();
|
||||||
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions(
|
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions(
|
||||||
|
|
|
||||||
|
|
@ -37,10 +37,13 @@ export class PlaygroundPageContent extends React.Component<
|
||||||
className="h-100 g-2"
|
className="h-100 g-2"
|
||||||
style={{ flexWrap: "wrap-reverse" }}
|
style={{ flexWrap: "wrap-reverse" }}
|
||||||
>
|
>
|
||||||
|
{model.wasEverNonFullScreen && (
|
||||||
<Col
|
<Col
|
||||||
md
|
md
|
||||||
className={
|
className={
|
||||||
model.settings.previewFullScreen ? "d-none" : ""
|
model.settings.previewFullScreen
|
||||||
|
? "d-none"
|
||||||
|
: ""
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Vertical>
|
<Vertical>
|
||||||
|
|
@ -50,10 +53,14 @@ export class PlaygroundPageContent extends React.Component<
|
||||||
titleBarItems={
|
titleBarItems={
|
||||||
<div
|
<div
|
||||||
className="hstack"
|
className="hstack"
|
||||||
style={{ marginLeft: "auto" }}
|
style={{
|
||||||
|
marginLeft: "auto",
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
style={{ marginRight: 8 }}
|
style={{
|
||||||
|
marginRight: 8,
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
Example:
|
Example:
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -69,7 +76,9 @@ export class PlaygroundPageContent extends React.Component<
|
||||||
model,
|
model,
|
||||||
"selectedExample"
|
"selectedExample"
|
||||||
)}
|
)}
|
||||||
getLabel={(i) => i.title}
|
getLabel={(i) =>
|
||||||
|
i.title
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
@ -108,6 +117,7 @@ export class PlaygroundPageContent extends React.Component<
|
||||||
</div>
|
</div>
|
||||||
</Vertical>
|
</Vertical>
|
||||||
</Col>
|
</Col>
|
||||||
|
)}
|
||||||
<Col md>
|
<Col md>
|
||||||
<LabeledEditor
|
<LabeledEditor
|
||||||
label="Preview"
|
label="Preview"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue