Mercurial
diff .cms/lib/codemirror/demo/anywordhint.html @ 0:78edf6b517a0 draft
24.10
author | Coffee CMS <info@coffee-cms.ru> |
---|---|
date | Fri, 11 Oct 2024 22:40:23 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.cms/lib/codemirror/demo/anywordhint.html Fri Oct 11 22:40:23 2024 +0000 @@ -0,0 +1,77 @@ +<!doctype html> + +<title>CodeMirror: Any Word Completion Demo</title> +<meta charset="utf-8"/> +<link rel=stylesheet href="../doc/docs.css"> + +<link rel="stylesheet" href="../lib/codemirror.css"> +<link rel="stylesheet" href="../addon/hint/show-hint.css"> +<script src="../lib/codemirror.js"></script> +<script src="../addon/hint/show-hint.js"></script> +<script src="../addon/hint/anyword-hint.js" id=anyword></script> +<script src="../mode/javascript/javascript.js"></script> +<div id=nav> + <a href="https://codemirror.net/5"><h1>CodeMirror</h1><img id=logo src="../doc/logo.png"></a> + + <ul> + <li><a href="../index.html">Home</a> + <li><a href="../doc/manual.html">Manual</a> + <li><a href="https://github.com/codemirror/codemirror5">Code</a> + </ul> + <ul> + <li><a class=active href="#">Any Word Completion</a> + </ul> +</div> + +<article> +<h2>Any Word Completion Demo</h2> +<form><textarea id="code" name="code"> +(function() { + "use strict"; + + var WORD = /[\w$]+/, RANGE = 500; + + CodeMirror.registerHelper("hint", "anyword", function(editor, options) { + var word = options && options.word || WORD; + var range = options && options.range || RANGE; + var cur = editor.getCursor(), curLine = editor.getLine(cur.line); + var end = cur.ch, start = end; + while (start && word.test(curLine.charAt(start - 1))) --start; + var curWord = start != end && curLine.slice(start, end); + + var list = options && options.list || [], seen = {}; + var re = new RegExp(word.source, "g"); + for (var dir = -1; dir <= 1; dir += 2) { + var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; + for (; line != endLine; line += dir) { + var text = editor.getLine(line), m; + while (m = re.exec(text)) { + if (line == cur.line && m[0] === curWord) continue; + if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) { + seen[m[0]] = true; + list.push(m[0]); + } + } + } + } + return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; + }); +})(); +</textarea></form> + +<p>Press <strong>ctrl-space</strong> to activate autocompletion. The +completion uses +the <a href="../doc/manual.html#addon_anyword-hint">anyword-hint.js</a> +module, which simply looks at nearby words in the buffer and completes +to those.</p> + + <script> + CodeMirror.commands.autocomplete = function(cm) { + cm.showHint({hint: CodeMirror.hint.anyword}); + } + var editor = CodeMirror.fromTextArea(document.getElementById("code"), { + lineNumbers: true, + extraKeys: {"Ctrl-Space": "autocomplete"} + }); + </script> + </article>