commit
b9fbec9b1e
@ -0,0 +1,104 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
|
||||
<link rel="stylesheet" data-name="vs/editor/editor.main" href="../node_modules/monaco-editor/min/vs/editor/editor.main.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h2>Monaco Editor Undo Redo Samples</h2>
|
||||
|
||||
<div style="padding: 5pt">
|
||||
<button id="undoButton" name="undo" onclick="undo();" disabled="true">Undo</button>
|
||||
<button id="redoButton" name="redo" onclick="redo();" disabled="true">Redo</button>
|
||||
</div>
|
||||
|
||||
<div id="container" style="width:800px;height:600px;border:1px solid grey"></div>
|
||||
|
||||
<script>var require = { paths: { 'vs': '../node_modules/monaco-editor/min/vs' } };</script>
|
||||
<script src="../node_modules/monaco-editor/min/vs/loader.js"></script>
|
||||
<script src="../node_modules/monaco-editor/min/vs/editor/editor.main.nls.js"></script>
|
||||
<script src="../node_modules/monaco-editor/min/vs/editor/editor.main.js"></script>
|
||||
|
||||
<script>
|
||||
const value = [
|
||||
'define([], function() {',
|
||||
'\treturn ({p1, p2}) => {',
|
||||
'\t\treturn Promise.resolve("Hello, World");',
|
||||
'\t};',
|
||||
'});'
|
||||
].join('\n');
|
||||
|
||||
const editor = monaco.editor.create(document.getElementById('container'), {
|
||||
value: [
|
||||
'function x() {',
|
||||
'\tconsole.log("Hello world!");',
|
||||
'}'
|
||||
].join('\n'),
|
||||
language: 'javascript'
|
||||
});
|
||||
|
||||
editor.focus();
|
||||
editor.setPosition({ lineNumber: 2, column: 30 });
|
||||
|
||||
const initialVersion = editor.getModel().getAlternativeVersionId();
|
||||
let currentVersion = initialVersion;
|
||||
let lastVersion = initialVersion;
|
||||
|
||||
editor.onDidChangeModelContent(e => {
|
||||
const versionId = editor.getModel().getAlternativeVersionId();
|
||||
// undoing
|
||||
if (versionId < currentVersion) {
|
||||
enableRedoButton();
|
||||
// no more undo possible
|
||||
if (versionId === initialVersion) {
|
||||
disableUndoButton();
|
||||
}
|
||||
} else {
|
||||
// redoing
|
||||
if (versionId <= lastVersion) {
|
||||
// redoing the last change
|
||||
if (versionId == lastVersion) {
|
||||
disableRedoButton();
|
||||
}
|
||||
} else { // adding new change, disable redo when adding new changes
|
||||
disableRedoButton();
|
||||
if (currentVersion > lastVersion) {
|
||||
lastVersion = currentVersion;
|
||||
}
|
||||
}
|
||||
enableUndoButton();
|
||||
}
|
||||
currentVersion = versionId;
|
||||
});
|
||||
|
||||
function undo() {
|
||||
editor.trigger('aaaa', 'undo', 'aaaa');
|
||||
editor.focus();
|
||||
}
|
||||
|
||||
function redo() {
|
||||
editor.trigger('aaaa', 'redo', 'aaaa');
|
||||
editor.focus();
|
||||
}
|
||||
|
||||
function enableUndoButton() {
|
||||
document.getElementById("undoButton").disabled = false;
|
||||
}
|
||||
|
||||
function disableUndoButton() {
|
||||
document.getElementById("undoButton").disabled = true;
|
||||
}
|
||||
|
||||
function enableRedoButton() {
|
||||
document.getElementById("redoButton").disabled = false;
|
||||
}
|
||||
|
||||
function disableRedoButton() {
|
||||
document.getElementById("redoButton").disabled = true;
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue