annotate .cms/lib/codemirror/demo/complete.html @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
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: Autocomplete 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 <link rel="stylesheet" href="../addon/hint/show-hint.css">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 <script src="../lib/codemirror.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 <script src="../addon/hint/show-hint.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 <script src="../addon/hint/javascript-hint.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 <script src="../mode/javascript/javascript.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 <script src="../mode/markdown/markdown.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 <div id=nav>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 <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
17
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 <li><a href="../index.html">Home</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 <li><a href="../doc/manual.html">Manual</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 <li><a href="https://github.com/codemirror/codemirror5">Code</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 <li><a class=active href="#">Autocomplete</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 <article>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 <h2>Autocomplete Demo</h2>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 <form><textarea id="code" name="code">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 function getCompletions(token, context) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 var found = [], start = token.string;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 function maybeAdd(str) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 if (str.indexOf(start) == 0) found.push(str);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 function gatherCompletions(obj) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 if (typeof obj == "string") forEach(stringProps, maybeAdd);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 else if (obj instanceof Array) forEach(arrayProps, maybeAdd);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 else if (obj instanceof Function) forEach(funcProps, maybeAdd);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 for (var name in obj) maybeAdd(name);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 if (context) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 // If this is a property, see if it belongs to some object we can
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 // find in the current environment.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 var obj = context.pop(), base;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 if (obj.className == "js-variable")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 base = window[obj.string];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 else if (obj.className == "js-string")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 base = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 else if (obj.className == "js-atom")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 base = 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 while (base != null && context.length)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 base = base[context.pop().string];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 if (base != null) gatherCompletions(base);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 // If not, just look in the window object and any local scope
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 // (reading into JS mode internals to get at the local variables)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 gatherCompletions(window);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 forEach(keywords, maybeAdd);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 return found;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 </textarea></form>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 <p>Press <strong>ctrl-space</strong> to activate autocompletion. Built
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 on top of the <a href="../doc/manual.html#addon_show-hint"><code>show-hint</code></a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 and <a href="../doc/manual.html#addon_javascript-hint"><code>javascript-hint</code></a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 addons.</p>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 <form><textarea style="display: none" id="synonyms" name="synonyms">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 Here, the completion use an asynchronous hinting function to provide
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 synonyms for each words. If your browser support `Promises`, the
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 hinting function can also return one.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 </textarea></form>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 <script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 lineNumbers: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 extraKeys: {"Ctrl-Space": "autocomplete"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 mode: {name: "javascript", globalVars: true}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 if (typeof Promise !== "undefined") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 var comp = [
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 ["here", "hither"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 ["asynchronous", "nonsynchronous"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 ["completion", "achievement", "conclusion", "culmination", "expirations"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 ["hinting", "advise", "broach", "imply"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 ["function","action"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 ["provide", "add", "bring", "give"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 ["synonyms", "equivalents"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 ["words", "token"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 ["each", "every"],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 ]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 function synonyms(cm, option) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 return new Promise(function(accept) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 setTimeout(function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 var cursor = cm.getCursor(), line = cm.getLine(cursor.line)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 var start = cursor.ch, end = cursor.ch
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 while (start && /\w/.test(line.charAt(start - 1))) --start
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 while (end < line.length && /\w/.test(line.charAt(end))) ++end
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 var word = line.slice(start, end).toLowerCase()
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 for (var i = 0; i < comp.length; i++) if (comp[i].indexOf(word) != -1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 return accept({list: comp[i],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 from: CodeMirror.Pos(cursor.line, start),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 to: CodeMirror.Pos(cursor.line, end)})
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 return accept(null)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 }, 100)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 })
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 var editor2 = CodeMirror.fromTextArea(document.getElementById("synonyms"), {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 extraKeys: {"Ctrl-Space": "autocomplete"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 lineNumbers: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 lineWrapping: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 mode: "text/x-markdown",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 hintOptions: {hint: synonyms}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 })
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 </script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 </article>