blob: b0bce320632830984eade5d46fcd5a6e818763da [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>CodeMirrorModes Tool</title>
<style>:root { color-scheme: light dark; }</style>
<link rel="stylesheet" href="../../UserInterface/External/CodeMirror/codemirror.css">
<link rel="stylesheet" href="../../UserInterface/Views/Variables.css">
<link rel="stylesheet" href="../../UserInterface/Views/CodeMirrorOverrides.css">
<link rel="stylesheet" href="../../UserInterface/Views/SyntaxHighlightingDefaultTheme.css">
<link rel="stylesheet" href="../../UserInterface/Views/CodeMirrorLocalOverrideURLMode.css">
<link rel="stylesheet" href="../../UserInterface/Views/CodeMirrorRegexMode.css">
<link rel="stylesheet" href="styles.css">
<script src="../../UserInterface/External/CodeMirror/codemirror.js"></script>
<script src="../../UserInterface/External/CodeMirror/clike.js"></script>
<script src="../../UserInterface/External/CodeMirror/clojure.js"></script>
<script src="../../UserInterface/External/CodeMirror/coffeescript.js"></script>
<script src="../../UserInterface/External/CodeMirror/css.js"></script>
<script src="../../UserInterface/External/CodeMirror/css.js"></script>
<script src="../../UserInterface/External/CodeMirror/htmlmixed.js"></script>
<script src="../../UserInterface/External/CodeMirror/javascript.js"></script>
<script src="../../UserInterface/External/CodeMirror/javascript.js"></script>
<script src="../../UserInterface/External/CodeMirror/jsx.js"></script>
<script src="../../UserInterface/External/CodeMirror/livescript.js"></script>
<script src="../../UserInterface/External/CodeMirror/sass.js"></script>
<script src="../../UserInterface/External/CodeMirror/sql.js"></script>
<script src="../../UserInterface/External/CodeMirror/xml.js"></script>
<script src="../../UserInterface/Views/CodeMirrorLocalOverrideURLMode.js"></script>
<script src="../../UserInterface/Views/CodeMirrorRegexMode.js"></script>
</head>
<body>
<h1>Debug CodeMirrorModes</h1>
<!-- Controls -->
<select id="mode">
<optgroup label="Web Inspector">
<option>text/x-local-override-url</option>
<option>text/x-regex</option>
</optgroup>
<optgroup label="Web">
<option>text/css</option>
<option>text/html</option>
<option>text/javascript</option>
<option>text/plain</option>
<option>text/xml</option>
</optgroup>
<optgroup id="extra-group" label="Extra Modes"></optgroup>
</select>
<button id="save-as-url">Save URL</button>
<br><br>
<!-- Editor -->
<textarea id="code" name="code"></textarea>
<script>
const modeSelect = document.getElementById("mode");
let cm = CodeMirror.fromTextArea(document.getElementById("code"), {lineNumbers: true});
function update() {
let mode = modeSelect.value;
cm.setOption("mode", mode);
let content;
switch (mode) {
case "text/x-local-override-url":
content = "http://example.com/path/?query#frag";
break;
case "text/x-regex":
content = "^\\d{2,3}.\\.*?(abc|[A-Z_])+\\1zzz$";
break;
default:
content = cm.getValue() || "";
break;
}
cm.setValue(content);
}
// Mode picker.
modeSelect.addEventListener("change", (event) => { update(); });
// Fill in additional options dynamically.
const optgroup = document.getElementById("extra-group");
let knownModes = new Set(Array.from(modeSelect.options).map((x) => x.value));
let extraModes = Object.keys(CodeMirror.mimeModes).sort();
for (let mode of extraModes) {
if (knownModes.has(mode))
continue;
knownModes.add(mode);
optgroup.appendChild(document.createElement("option")).textContent = mode;
}
// Save as URL button.
document.getElementById("save-as-url").addEventListener("click", function(event) {
let mode = modeSelect.value;
let content = cm.getValue();
window.location.search = `?mode=${encodeURIComponent(mode)}&content=${encodeURIComponent(content)}`;
});
// Initial content.
update();
// Restore better initial value from query string.
(function() {
let queryParams = {};
if (window.location.search.length > 0) {
let searchString = window.location.search.substring(1);
let groups = searchString.split("&");
for (let i = 0; i < groups.length; ++i) {
let pair = groups[i].split("=");
queryParams[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
}
}
if (queryParams.mode) {
modeSelect.value = queryParams.mode;
cm.setOption("mode", queryParams.mode);
}
if (queryParams.content)
cm.setValue(queryParams.content);
})();
</script>
</body>
</html>