annotate .cms/lib/codemirror/demo/anywordhint.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: Any Word Completion 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/anyword-hint.js" id=anyword></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 <div id=nav>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 <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
15
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 <li><a href="../index.html">Home</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 <li><a href="../doc/manual.html">Manual</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 <li><a href="https://github.com/codemirror/codemirror5">Code</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 <li><a class=active href="#">Any Word Completion</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 <article>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 <h2>Any Word Completion Demo</h2>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 <form><textarea id="code" name="code">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 (function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 var WORD = /[\w$]+/, RANGE = 500;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 CodeMirror.registerHelper("hint", "anyword", function(editor, options) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 var word = options && options.word || WORD;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 var range = options && options.range || RANGE;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 var cur = editor.getCursor(), curLine = editor.getLine(cur.line);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 var end = cur.ch, start = end;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 while (start && word.test(curLine.charAt(start - 1))) --start;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 var curWord = start != end && curLine.slice(start, end);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 var list = options && options.list || [], seen = {};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 var re = new RegExp(word.source, "g");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 for (var dir = -1; dir <= 1; dir += 2) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 for (; line != endLine; line += dir) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 var text = editor.getLine(line), m;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 while (m = re.exec(text)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 if (line == cur.line && m[0] === curWord) continue;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 seen[m[0]] = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 list.push(m[0]);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 })();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 </textarea></form>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 <p>Press <strong>ctrl-space</strong> to activate autocompletion. The
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 completion uses
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 the <a href="../doc/manual.html#addon_anyword-hint">anyword-hint.js</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 module, which simply looks at nearby words in the buffer and completes
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 to those.</p>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 <script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 CodeMirror.commands.autocomplete = function(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 cm.showHint({hint: CodeMirror.hint.anyword});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 lineNumbers: true,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 extraKeys: {"Ctrl-Space": "autocomplete"}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 </script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 </article>