annotate .cms/lib/codemirror/demo/buffers.html @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 <!doctype html>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3 <title>CodeMirror: Multiple Buffer & Split View Demo</title>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 <meta charset="utf-8"/>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 <link rel=stylesheet href="../doc/docs.css">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 <link rel="stylesheet" href="../lib/codemirror.css">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 <script src="../lib/codemirror.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 <script src="../mode/javascript/javascript.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 <script src="../mode/css/css.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 <style id=style>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 .CodeMirror {border: 1px solid black; height: 250px;}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 </style>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 <div id=nav>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 <a href="https://codemirror.net/5"><h1>CodeMirror</h1><img id=logo src="../doc/logo.png"></a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 <li><a href="../index.html">Home</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 <li><a href="../doc/manual.html">Manual</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 <li><a href="https://github.com/codemirror/codemirror5">Code</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 <li><a class=active href="#">Multiple Buffer & Split View</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 <article>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 <h2>Multiple Buffer & Split View Demo</h2>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 <div id=code_top></div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 <div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 Select buffer: <select id=buffers_top></select>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 &nbsp; &nbsp; <button onclick="newBuf('top')">New buffer</button>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 <div id=code_bot></div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 <div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 Select buffer: <select id=buffers_bot></select>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 &nbsp; &nbsp; <button onclick="newBuf('bot')">New buffer</button>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 <script id=script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 var sel_top = document.getElementById("buffers_top");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 CodeMirror.on(sel_top, "change", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 selectBuffer(ed_top, sel_top.options[sel_top.selectedIndex].value);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 var sel_bot = document.getElementById("buffers_bot");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 CodeMirror.on(sel_bot, "change", function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 selectBuffer(ed_bot, sel_bot.options[sel_bot.selectedIndex].value);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 var buffers = {};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 function openBuffer(name, text, mode) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 buffers[name] = CodeMirror.Doc(text, mode);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 var opt = document.createElement("option");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 opt.appendChild(document.createTextNode(name));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 sel_top.appendChild(opt);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 sel_bot.appendChild(opt.cloneNode(true));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 function newBuf(where) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 var name = prompt("Name for the buffer", "*scratch*");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 if (name == null) return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 if (buffers.hasOwnProperty(name)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 alert("There's already a buffer by that name.");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 openBuffer(name, "", "javascript");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 selectBuffer(where == "top" ? ed_top : ed_bot, name);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 var sel = where == "top" ? sel_top : sel_bot;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 sel.value = name;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 function selectBuffer(editor, name) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 var buf = buffers[name];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 if (buf.getEditor()) buf = buf.linkedDoc({sharedHist: true});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 var old = editor.swapDoc(buf);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 var linked = old.iterLinkedDocs(function(doc) {linked = doc;});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 if (linked) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 // Make sure the document in buffers is the one the other view is looking at
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 for (var name in buffers) if (buffers[name] == old) buffers[name] = linked;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 old.unlinkDoc(linked);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 editor.focus();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 function nodeContent(id) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 var node = document.getElementById(id), val = node.textContent || node.innerText;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 val = val.slice(val.match(/^\s*/)[0].length, val.length - val.match(/\s*$/)[0].length) + "\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 return val;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 openBuffer("js", nodeContent("script"), "javascript");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 openBuffer("css", nodeContent("style"), "css");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 var ed_top = CodeMirror(document.getElementById("code_top"), {lineNumbers: true});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 selectBuffer(ed_top, "js");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 var ed_bot = CodeMirror(document.getElementById("code_bot"), {lineNumbers: true});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 selectBuffer(ed_bot, "js");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 </script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 <p>Demonstration of
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 using <a href="../doc/manual.html#linkedDoc">linked documents</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 to provide a split view on a document, and
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 using <a href="../doc/manual.html#swapDoc"><code>swapDoc</code></a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 to use a single editor to display multiple documents.</p>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 </article>