ace-rails-ap 2.0.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -4
- data/lib/ace/rails/version.rb +1 -1
- data/vendor/assets/javascripts/ace/ace.js +14194 -13349
- data/vendor/assets/javascripts/ace/ext-beautify.js +335 -0
- data/vendor/assets/javascripts/ace/ext-chromevox.js +6 -1
- data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +8 -33
- data/vendor/assets/javascripts/ace/ext-emmet.js +487 -424
- data/vendor/assets/javascripts/ace/ext-error_marker.js +6 -0
- data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +45 -72
- data/vendor/assets/javascripts/ace/ext-language_tools.js +734 -578
- data/vendor/assets/javascripts/ace/ext-linking.js +53 -0
- data/vendor/assets/javascripts/ace/ext-modelist.js +25 -10
- data/vendor/assets/javascripts/ace/ext-old_ie.js +93 -120
- data/vendor/assets/javascripts/ace/ext-searchbox.js +8 -41
- data/vendor/assets/javascripts/ace/ext-settings_menu.js +229 -234
- data/vendor/assets/javascripts/ace/ext-spellcheck.js +7 -3
- data/vendor/assets/javascripts/ace/ext-split.js +13 -37
- data/vendor/assets/javascripts/ace/ext-static_highlight.js +16 -39
- data/vendor/assets/javascripts/ace/ext-statusbar.js +8 -2
- data/vendor/assets/javascripts/ace/ext-textarea.js +254 -99
- data/vendor/assets/javascripts/ace/ext-themelist.js +13 -40
- data/vendor/assets/javascripts/ace/ext-whitespace.js +17 -41
- data/vendor/assets/javascripts/ace/keybinding-emacs.js +803 -788
- data/vendor/assets/javascripts/ace/keybinding-vim.js +1559 -1560
- data/vendor/assets/javascripts/ace/mode-abap.js +52 -83
- data/vendor/assets/javascripts/ace/mode-actionscript.js +27 -63
- data/vendor/assets/javascripts/ace/mode-ada.js +27 -58
- data/vendor/assets/javascripts/ace/mode-apache_conf.js +310 -0
- data/vendor/assets/javascripts/ace/mode-applescript.js +226 -0
- data/vendor/assets/javascripts/ace/mode-asciidoc.js +39 -70
- data/vendor/assets/javascripts/ace/mode-assembly_x86.js +26 -58
- data/vendor/assets/javascripts/ace/mode-autohotkey.js +27 -63
- data/vendor/assets/javascripts/ace/mode-batchfile.js +27 -63
- data/vendor/assets/javascripts/ace/mode-c9search.js +92 -112
- data/vendor/assets/javascripts/ace/mode-c_cpp.js +224 -223
- data/vendor/assets/javascripts/ace/mode-cirru.js +202 -0
- data/vendor/assets/javascripts/ace/mode-clojure.js +98 -92
- data/vendor/assets/javascripts/ace/mode-cobol.js +27 -58
- data/vendor/assets/javascripts/ace/mode-coffee.js +90 -122
- data/vendor/assets/javascripts/ace/mode-coldfusion.js +1908 -1464
- data/vendor/assets/javascripts/ace/mode-csharp.js +291 -264
- data/vendor/assets/javascripts/ace/mode-css.js +266 -267
- data/vendor/assets/javascripts/ace/mode-curly.js +796 -815
- data/vendor/assets/javascripts/ace/mode-d.js +64 -95
- data/vendor/assets/javascripts/ace/mode-dart.js +254 -256
- data/vendor/assets/javascripts/ace/mode-diff.js +27 -58
- data/vendor/assets/javascripts/ace/mode-django.js +856 -866
- data/vendor/assets/javascripts/ace/mode-dockerfile.js +759 -0
- data/vendor/assets/javascripts/ace/mode-dot.js +106 -106
- data/vendor/assets/javascripts/ace/mode-eiffel.js +135 -0
- data/vendor/assets/javascripts/ace/mode-ejs.js +931 -938
- data/vendor/assets/javascripts/ace/mode-erlang.js +27 -58
- data/vendor/assets/javascripts/ace/mode-forth.js +27 -63
- data/vendor/assets/javascripts/ace/mode-ftl.js +457 -508
- data/vendor/assets/javascripts/ace/mode-gcode.js +85 -0
- data/vendor/assets/javascripts/ace/mode-gherkin.js +129 -0
- data/vendor/assets/javascripts/ace/mode-gitignore.js +50 -0
- data/vendor/assets/javascripts/ace/mode-glsl.js +252 -248
- data/vendor/assets/javascripts/ace/mode-golang.js +206 -179
- data/vendor/assets/javascripts/ace/mode-groovy.js +310 -242
- data/vendor/assets/javascripts/ace/mode-haml.js +156 -190
- data/vendor/assets/javascripts/ace/mode-handlebars.js +815 -784
- data/vendor/assets/javascripts/ace/mode-haskell.js +27 -63
- data/vendor/assets/javascripts/ace/mode-haxe.js +206 -176
- data/vendor/assets/javascripts/ace/mode-html.js +779 -792
- data/vendor/assets/javascripts/ace/mode-html_ruby.js +916 -923
- data/vendor/assets/javascripts/ace/mode-ini.js +27 -58
- data/vendor/assets/javascripts/ace/mode-io.js +201 -0
- data/vendor/assets/javascripts/ace/mode-jack.js +169 -170
- data/vendor/assets/javascripts/ace/mode-jade.js +722 -774
- data/vendor/assets/javascripts/ace/mode-java.js +310 -245
- data/vendor/assets/javascripts/ace/mode-javascript.js +285 -247
- data/vendor/assets/javascripts/ace/mode-json.js +183 -184
- data/vendor/assets/javascripts/ace/mode-jsoniq.js +3211 -1274
- data/vendor/assets/javascripts/ace/mode-jsp.js +481 -504
- data/vendor/assets/javascripts/ace/mode-jsx.js +206 -176
- data/vendor/assets/javascripts/ace/mode-julia.js +33 -69
- data/vendor/assets/javascripts/ace/mode-latex.js +74 -41
- data/vendor/assets/javascripts/ace/mode-less.js +250 -251
- data/vendor/assets/javascripts/ace/mode-liquid.js +424 -475
- data/vendor/assets/javascripts/ace/mode-lisp.js +24 -57
- data/vendor/assets/javascripts/ace/mode-livescript.js +42 -41
- data/vendor/assets/javascripts/ace/mode-logiql.js +229 -230
- data/vendor/assets/javascripts/ace/mode-lsl.js +200 -441
- data/vendor/assets/javascripts/ace/mode-lua.js +136 -167
- data/vendor/assets/javascripts/ace/mode-luapage.js +904 -884
- data/vendor/assets/javascripts/ace/mode-lucene.js +22 -17
- data/vendor/assets/javascripts/ace/mode-makefile.js +162 -137
- data/vendor/assets/javascripts/ace/mode-markdown.js +846 -854
- data/vendor/assets/javascripts/ace/mode-matlab.js +98 -72
- data/vendor/assets/javascripts/ace/mode-mel.js +569 -0
- data/vendor/assets/javascripts/ace/mode-mushcode.js +84 -115
- data/vendor/assets/javascripts/ace/mode-mysql.js +49 -80
- data/vendor/assets/javascripts/ace/mode-nix.js +252 -256
- data/vendor/assets/javascripts/ace/mode-objectivec.js +242 -274
- data/vendor/assets/javascripts/ace/mode-ocaml.js +71 -102
- data/vendor/assets/javascripts/ace/mode-pascal.js +32 -68
- data/vendor/assets/javascripts/ace/mode-perl.js +67 -98
- data/vendor/assets/javascripts/ace/mode-pgsql.js +990 -982
- data/vendor/assets/javascripts/ace/mode-php.js +1878 -1900
- data/vendor/assets/javascripts/ace/mode-plain_text.js +3 -34
- data/vendor/assets/javascripts/ace/mode-powershell.js +181 -151
- data/vendor/assets/javascripts/ace/mode-praat.js +418 -0
- data/vendor/assets/javascripts/ace/mode-prolog.js +27 -63
- data/vendor/assets/javascripts/ace/mode-properties.js +20 -48
- data/vendor/assets/javascripts/ace/mode-protobuf.js +252 -259
- data/vendor/assets/javascripts/ace/mode-python.js +84 -115
- data/vendor/assets/javascripts/ace/mode-r.js +105 -140
- data/vendor/assets/javascripts/ace/mode-rdoc.js +84 -89
- data/vendor/assets/javascripts/ace/mode-rhtml.js +892 -908
- data/vendor/assets/javascripts/ace/mode-ruby.js +434 -98
- data/vendor/assets/javascripts/ace/mode-rust.js +27 -63
- data/vendor/assets/javascripts/ace/mode-sass.js +75 -106
- data/vendor/assets/javascripts/ace/mode-scad.js +219 -220
- data/vendor/assets/javascripts/ace/mode-scala.js +311 -243
- data/vendor/assets/javascripts/ace/mode-scheme.js +24 -60
- data/vendor/assets/javascripts/ace/mode-scss.js +250 -251
- data/vendor/assets/javascripts/ace/mode-sh.js +506 -118
- data/vendor/assets/javascripts/ace/mode-sjs.js +314 -280
- data/vendor/assets/javascripts/ace/mode-smarty.js +2474 -0
- data/vendor/assets/javascripts/ace/mode-snippets.js +89 -89
- data/vendor/assets/javascripts/ace/mode-soy_template.js +792 -811
- data/vendor/assets/javascripts/ace/mode-space.js +22 -23
- data/vendor/assets/javascripts/ace/mode-sql.js +31 -58
- data/vendor/assets/javascripts/ace/mode-stylus.js +161 -197
- data/vendor/assets/javascripts/ace/mode-svg.js +906 -836
- data/vendor/assets/javascripts/ace/mode-tcl.js +61 -92
- data/vendor/assets/javascripts/ace/mode-tex.js +36 -73
- data/vendor/assets/javascripts/ace/mode-text.js +1 -0
- data/vendor/assets/javascripts/ace/mode-textile.js +41 -72
- data/vendor/assets/javascripts/ace/mode-toml.js +26 -62
- data/vendor/assets/javascripts/ace/mode-twig.js +1196 -892
- data/vendor/assets/javascripts/ace/mode-typescript.js +313 -277
- data/vendor/assets/javascripts/ace/mode-vala.js +982 -0
- data/vendor/assets/javascripts/ace/mode-vbscript.js +25 -62
- data/vendor/assets/javascripts/ace/mode-velocity.js +2251 -1242
- data/vendor/assets/javascripts/ace/mode-verilog.js +27 -59
- data/vendor/assets/javascripts/ace/mode-vhdl.js +26 -55
- data/vendor/assets/javascripts/ace/mode-xml.js +319 -644
- data/vendor/assets/javascripts/ace/mode-xquery.js +2503 -588
- data/vendor/assets/javascripts/ace/mode-yaml.js +56 -90
- data/vendor/assets/javascripts/ace/snippets/abap.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/actionscript.js +159 -0
- data/vendor/assets/javascripts/ace/snippets/ada.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/apache_conf.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/applescript.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/asciidoc.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/assembly_x86.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/autohotkey.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/batchfile.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/c9search.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/c_cpp.js +138 -0
- data/vendor/assets/javascripts/ace/snippets/cirru.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/clojure.js +97 -0
- data/vendor/assets/javascripts/ace/snippets/cobol.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/coffee.js +102 -0
- data/vendor/assets/javascripts/ace/snippets/coldfusion.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/csharp.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/css.js +974 -0
- data/vendor/assets/javascripts/ace/snippets/curly.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/d.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/dart.js +90 -0
- data/vendor/assets/javascripts/ace/snippets/diff.js +18 -0
- data/vendor/assets/javascripts/ace/snippets/django.js +115 -0
- data/vendor/assets/javascripts/ace/snippets/dockerfile.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/dot.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/eiffel.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/ejs.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/erlang.js +167 -0
- data/vendor/assets/javascripts/ace/snippets/forth.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/ftl.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/gcode.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/gherkin.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/gitignore.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/glsl.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/golang.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/groovy.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/haml.js +27 -0
- data/vendor/assets/javascripts/ace/snippets/handlebars.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/haskell.js +89 -0
- data/vendor/assets/javascripts/ace/snippets/haxe.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/html.js +835 -0
- data/vendor/assets/javascripts/ace/snippets/html_ruby.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/ini.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/io.js +69 -0
- data/vendor/assets/javascripts/ace/snippets/jack.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/jade.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/java.js +241 -0
- data/vendor/assets/javascripts/ace/snippets/javascript.js +189 -0
- data/vendor/assets/javascripts/ace/snippets/json.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/jsoniq.js +68 -0
- data/vendor/assets/javascripts/ace/snippets/jsp.js +106 -0
- data/vendor/assets/javascripts/ace/snippets/jsx.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/julia.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/latex.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/less.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/liquid.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/lisp.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/livescript.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/logiql.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/lsl.js +1073 -0
- data/vendor/assets/javascripts/ace/snippets/lua.js +28 -0
- data/vendor/assets/javascripts/ace/snippets/luapage.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/lucene.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/makefile.js +11 -0
- data/vendor/assets/javascripts/ace/snippets/markdown.js +95 -0
- data/vendor/assets/javascripts/ace/snippets/matlab.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/mel.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/mushcode.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/mysql.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/nix.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/objectivec.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/ocaml.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/pascal.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/perl.js +354 -0
- data/vendor/assets/javascripts/ace/snippets/pgsql.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/php.js +283 -0
- data/vendor/assets/javascripts/ace/snippets/plain_text.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/powershell.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/praat.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/prolog.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/properties.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/protobuf.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/python.js +165 -0
- data/vendor/assets/javascripts/ace/snippets/r.js +128 -0
- data/vendor/assets/javascripts/ace/snippets/rdoc.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/rhtml.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/ruby.js +935 -0
- data/vendor/assets/javascripts/ace/snippets/rust.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/sass.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/scad.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/scala.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/scheme.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/scss.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/sh.js +90 -0
- data/vendor/assets/javascripts/ace/snippets/sjs.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/smarty.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/snippets.js +16 -0
- data/vendor/assets/javascripts/ace/snippets/soy_template.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/space.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/sql.js +33 -0
- data/vendor/assets/javascripts/ace/snippets/stylus.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/svg.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/tcl.js +99 -0
- data/vendor/assets/javascripts/ace/snippets/tex.js +197 -0
- data/vendor/assets/javascripts/ace/snippets/text.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/textile.js +37 -0
- data/vendor/assets/javascripts/ace/snippets/toml.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/twig.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/typescript.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/vala.js +193 -0
- data/vendor/assets/javascripts/ace/snippets/vbscript.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/velocity.js +36 -0
- data/vendor/assets/javascripts/ace/snippets/verilog.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/vhdl.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/xml.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/xquery.js +68 -0
- data/vendor/assets/javascripts/ace/snippets/yaml.js +7 -0
- data/vendor/assets/javascripts/ace/theme-ambiance.js +4 -24
- data/vendor/assets/javascripts/ace/theme-chaos.js +2 -25
- data/vendor/assets/javascripts/ace/theme-chrome.js +2 -31
- data/vendor/assets/javascripts/ace/theme-clouds.js +1 -31
- data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +1 -31
- data/vendor/assets/javascripts/ace/theme-cobalt.js +1 -31
- data/vendor/assets/javascripts/ace/theme-crimson_editor.js +1 -31
- data/vendor/assets/javascripts/ace/theme-dawn.js +1 -31
- data/vendor/assets/javascripts/ace/theme-dreamweaver.js +5 -31
- data/vendor/assets/javascripts/ace/theme-eclipse.js +7 -33
- data/vendor/assets/javascripts/ace/theme-github.js +2 -35
- data/vendor/assets/javascripts/ace/theme-idle_fingers.js +1 -31
- data/vendor/assets/javascripts/ace/theme-katzenmilch.js +119 -0
- data/vendor/assets/javascripts/ace/theme-kr.js +1 -31
- data/vendor/assets/javascripts/ace/theme-kr_theme.js +57 -141
- data/vendor/assets/javascripts/ace/theme-kuroir.js +59 -0
- data/vendor/assets/javascripts/ace/theme-merbivore.js +1 -31
- data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +1 -31
- data/vendor/assets/javascripts/ace/theme-mono_industrial.js +1 -31
- data/vendor/assets/javascripts/ace/theme-monokai.js +1 -31
- data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +1 -31
- data/vendor/assets/javascripts/ace/theme-solarized_dark.js +1 -31
- data/vendor/assets/javascripts/ace/theme-solarized_light.js +1 -31
- data/vendor/assets/javascripts/ace/theme-terminal.js +1 -31
- data/vendor/assets/javascripts/ace/theme-textmate.js +3 -32
- data/vendor/assets/javascripts/ace/theme-tomorrow.js +1 -31
- data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +1 -31
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +1 -31
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +1 -31
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +1 -31
- data/vendor/assets/javascripts/ace/theme-twilight.js +1 -31
- data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +1 -31
- data/vendor/assets/javascripts/ace/theme-xcode.js +2 -33
- data/vendor/assets/javascripts/ace/worker-coffee.js +5026 -5008
- data/vendor/assets/javascripts/ace/worker-css.js +5489 -5134
- data/vendor/assets/javascripts/ace/worker-html.js +11517 -0
- data/vendor/assets/javascripts/ace/worker-javascript.js +9810 -9501
- data/vendor/assets/javascripts/ace/worker-json.js +1583 -1564
- data/vendor/assets/javascripts/ace/worker-lua.js +2631 -2612
- data/vendor/assets/javascripts/ace/worker-php.js +2385 -2341
- data/vendor/assets/javascripts/ace/worker-xquery.js +31643 -3993
- metadata +147 -11
@@ -1,72 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
*
|
4
|
-
* Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl
|
5
|
-
* All rights reserved.
|
6
|
-
*
|
7
|
-
* Contributed to Ajax.org under the BSD license.
|
8
|
-
*
|
9
|
-
* Redistribution and use in source and binary forms, with or without
|
10
|
-
* modification, are permitted provided that the following conditions are met:
|
11
|
-
* * Redistributions of source code must retain the above copyright
|
12
|
-
* notice, this list of conditions and the following disclaimer.
|
13
|
-
* * Redistributions in binary form must reproduce the above copyright
|
14
|
-
* notice, this list of conditions and the following disclaimer in the
|
15
|
-
* documentation and/or other materials provided with the distribution.
|
16
|
-
* * Neither the name of Ajax.org B.V. nor the
|
17
|
-
* names of its contributors may be used to endorse or promote products
|
18
|
-
* derived from this software without specific prior written permission.
|
19
|
-
*
|
20
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
21
|
-
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
22
|
-
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
23
|
-
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
|
24
|
-
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
25
|
-
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
26
|
-
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
27
|
-
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
29
|
-
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
-
*
|
31
|
-
* ***** END LICENSE BLOCK ***** */
|
32
|
-
|
33
|
-
define('ace/ext/keybinding_menu', ['require', 'exports', 'module' , 'ace/editor', 'ace/ext/menu_tools/overlay_page', 'ace/ext/menu_tools/get_editor_keyboard_shortcuts'], function(require, exports, module) {
|
34
|
-
|
35
|
-
var Editor = require("ace/editor").Editor;
|
36
|
-
function showKeyboardShortcuts (editor) {
|
37
|
-
if(!document.getElementById('kbshortcutmenu')) {
|
38
|
-
var overlayPage = require('./menu_tools/overlay_page').overlayPage;
|
39
|
-
var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts;
|
40
|
-
var kb = getEditorKeybordShortcuts(editor);
|
41
|
-
var el = document.createElement('div');
|
42
|
-
var commands = kb.reduce(function(previous, current) {
|
43
|
-
return previous + '<div class="ace_optionsMenuEntry"><span class="ace_optionsMenuCommand">'
|
44
|
-
+ current.command + '</span> : '
|
45
|
-
+ '<span class="ace_optionsMenuKey">' + current.key + '</span></div>';
|
46
|
-
}, '');
|
47
|
-
|
48
|
-
el.id = 'kbshortcutmenu';
|
49
|
-
el.innerHTML = '<h1>Keyboard Shortcuts</h1>' + commands + '</div>';
|
50
|
-
overlayPage(editor, el, '0', '0', '0', null);
|
51
|
-
}
|
52
|
-
};
|
53
|
-
module.exports.init = function(editor) {
|
54
|
-
Editor.prototype.showKeyboardShortcuts = function() {
|
55
|
-
showKeyboardShortcuts(this);
|
56
|
-
};
|
57
|
-
editor.commands.addCommands([{
|
58
|
-
name: "showKeyboardShortcuts",
|
59
|
-
bindKey: {win: "Ctrl-Alt-h", mac: "Command-Alt-h"},
|
60
|
-
exec: function(editor, line) {
|
61
|
-
editor.showKeyboardShortcuts();
|
62
|
-
}
|
63
|
-
}]);
|
64
|
-
};
|
65
|
-
|
66
|
-
});
|
67
|
-
|
68
|
-
define('ace/ext/menu_tools/overlay_page', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
|
69
|
-
|
1
|
+
define("ace/ext/menu_tools/overlay_page",["require","exports","module","ace/lib/dom"], function(require, exports, module) {
|
2
|
+
'use strict';
|
70
3
|
var dom = require("../../lib/dom");
|
71
4
|
var cssText = "#ace_settingsmenu, #kbshortcutmenu {\
|
72
5
|
background-color: #F7F7F7;\
|
@@ -166,8 +99,8 @@ module.exports.overlayPage = function overlayPage(editor, contentElement, top, r
|
|
166
99
|
|
167
100
|
});
|
168
101
|
|
169
|
-
define(
|
170
|
-
|
102
|
+
define("ace/ext/menu_tools/get_editor_keyboard_shortcuts",["require","exports","module","ace/lib/keys"], function(require, exports, module) {
|
103
|
+
"use strict";
|
171
104
|
var keys = require("../../lib/keys");
|
172
105
|
module.exports.getEditorKeybordShortcuts = function(editor) {
|
173
106
|
var KEY_MODS = keys.KEY_MODS;
|
@@ -204,4 +137,44 @@ module.exports.getEditorKeybordShortcuts = function(editor) {
|
|
204
137
|
return keybindings;
|
205
138
|
};
|
206
139
|
|
207
|
-
});
|
140
|
+
});
|
141
|
+
|
142
|
+
define("ace/ext/keybinding_menu",["require","exports","module","ace/editor","ace/ext/menu_tools/overlay_page","ace/ext/menu_tools/get_editor_keyboard_shortcuts"], function(require, exports, module) {
|
143
|
+
"use strict";
|
144
|
+
var Editor = require("ace/editor").Editor;
|
145
|
+
function showKeyboardShortcuts (editor) {
|
146
|
+
if(!document.getElementById('kbshortcutmenu')) {
|
147
|
+
var overlayPage = require('./menu_tools/overlay_page').overlayPage;
|
148
|
+
var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts;
|
149
|
+
var kb = getEditorKeybordShortcuts(editor);
|
150
|
+
var el = document.createElement('div');
|
151
|
+
var commands = kb.reduce(function(previous, current) {
|
152
|
+
return previous + '<div class="ace_optionsMenuEntry"><span class="ace_optionsMenuCommand">'
|
153
|
+
+ current.command + '</span> : '
|
154
|
+
+ '<span class="ace_optionsMenuKey">' + current.key + '</span></div>';
|
155
|
+
}, '');
|
156
|
+
|
157
|
+
el.id = 'kbshortcutmenu';
|
158
|
+
el.innerHTML = '<h1>Keyboard Shortcuts</h1>' + commands + '</div>';
|
159
|
+
overlayPage(editor, el, '0', '0', '0', null);
|
160
|
+
}
|
161
|
+
};
|
162
|
+
module.exports.init = function(editor) {
|
163
|
+
Editor.prototype.showKeyboardShortcuts = function() {
|
164
|
+
showKeyboardShortcuts(this);
|
165
|
+
};
|
166
|
+
editor.commands.addCommands([{
|
167
|
+
name: "showKeyboardShortcuts",
|
168
|
+
bindKey: {win: "Ctrl-Alt-h", mac: "Command-Alt-h"},
|
169
|
+
exec: function(editor, line) {
|
170
|
+
editor.showKeyboardShortcuts();
|
171
|
+
}
|
172
|
+
}]);
|
173
|
+
};
|
174
|
+
|
175
|
+
});
|
176
|
+
;
|
177
|
+
(function() {
|
178
|
+
window.require(["ace/ext/keybinding_menu"], function() {});
|
179
|
+
})();
|
180
|
+
|
@@ -1,153 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
* modification, are permitted provided that the following conditions are met:
|
9
|
-
* * Redistributions of source code must retain the above copyright
|
10
|
-
* notice, this list of conditions and the following disclaimer.
|
11
|
-
* * Redistributions in binary form must reproduce the above copyright
|
12
|
-
* notice, this list of conditions and the following disclaimer in the
|
13
|
-
* documentation and/or other materials provided with the distribution.
|
14
|
-
* * Neither the name of Ajax.org B.V. nor the
|
15
|
-
* names of its contributors may be used to endorse or promote products
|
16
|
-
* derived from this software without specific prior written permission.
|
17
|
-
*
|
18
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
19
|
-
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
20
|
-
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
-
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
|
22
|
-
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
23
|
-
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
24
|
-
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
25
|
-
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
27
|
-
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
*
|
29
|
-
* ***** END LICENSE BLOCK ***** */
|
30
|
-
|
31
|
-
define('ace/ext/language_tools', ['require', 'exports', 'module' , 'ace/snippets', 'ace/autocomplete', 'ace/config', 'ace/autocomplete/text_completer', 'ace/editor'], function(require, exports, module) {
|
32
|
-
|
33
|
-
|
34
|
-
var snippetManager = require("../snippets").snippetManager;
|
35
|
-
var Autocomplete = require("../autocomplete").Autocomplete;
|
36
|
-
var config = require("../config");
|
37
|
-
|
38
|
-
var textCompleter = require("../autocomplete/text_completer");
|
39
|
-
var keyWordCompleter = {
|
40
|
-
getCompletions: function(editor, session, pos, prefix, callback) {
|
41
|
-
var state = editor.session.getState(pos.row);
|
42
|
-
var completions = session.$mode.getCompletions(state, session, pos, prefix);
|
43
|
-
callback(null, completions);
|
44
|
-
}
|
45
|
-
};
|
46
|
-
|
47
|
-
var snippetCompleter = {
|
48
|
-
getCompletions: function(editor, session, pos, prefix, callback) {
|
49
|
-
var snippetMap = snippetManager.snippetMap;
|
50
|
-
var completions = [];
|
51
|
-
snippetManager.getActiveScopes(editor).forEach(function(scope) {
|
52
|
-
var snippets = snippetMap[scope] || [];
|
53
|
-
for (var i = snippets.length; i--;) {
|
54
|
-
var s = snippets[i];
|
55
|
-
var caption = s.name || s.tabTrigger;
|
56
|
-
if (!caption)
|
57
|
-
continue;
|
58
|
-
completions.push({
|
59
|
-
caption: caption,
|
60
|
-
snippet: s.content,
|
61
|
-
meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet"
|
62
|
-
});
|
63
|
-
}
|
64
|
-
}, this);
|
65
|
-
callback(null, completions);
|
66
|
-
}
|
67
|
-
};
|
68
|
-
|
69
|
-
var completers = [snippetCompleter, textCompleter, keyWordCompleter];
|
70
|
-
exports.addCompleter = function(completer) {
|
71
|
-
completers.push(completer);
|
72
|
-
};
|
73
|
-
|
74
|
-
var expandSnippet = {
|
75
|
-
name: "expandSnippet",
|
76
|
-
exec: function(editor) {
|
77
|
-
var success = snippetManager.expandWithTab(editor);
|
78
|
-
if (!success)
|
79
|
-
editor.execCommand("indent");
|
80
|
-
},
|
81
|
-
bindKey: "tab"
|
82
|
-
};
|
83
|
-
|
84
|
-
var onChangeMode = function(e, editor) {
|
85
|
-
loadSnippetsForMode(editor.session.$mode);
|
86
|
-
};
|
87
|
-
|
88
|
-
var loadSnippetsForMode = function(mode) {
|
89
|
-
var id = mode.$id;
|
90
|
-
if (!snippetManager.files)
|
91
|
-
snippetManager.files = {};
|
92
|
-
loadSnippetFile(id);
|
93
|
-
if (mode.modes)
|
94
|
-
mode.modes.forEach(loadSnippetsForMode);
|
95
|
-
};
|
96
|
-
|
97
|
-
var loadSnippetFile = function(id) {
|
98
|
-
if (!id || snippetManager.files[id])
|
99
|
-
return;
|
100
|
-
var snippetFilePath = id.replace("mode", "snippets");
|
101
|
-
snippetManager.files[id] = {};
|
102
|
-
config.loadModule(snippetFilePath, function(m) {
|
103
|
-
if (m) {
|
104
|
-
snippetManager.files[id] = m;
|
105
|
-
m.snippets = snippetManager.parseSnippetFile(m.snippetText);
|
106
|
-
snippetManager.register(m.snippets, m.scope);
|
107
|
-
if (m.includeScopes) {
|
108
|
-
snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;
|
109
|
-
m.includeScopes.forEach(function(x) {
|
110
|
-
loadSnippetFile("ace/mode/" + x);
|
111
|
-
});
|
112
|
-
}
|
113
|
-
}
|
114
|
-
});
|
115
|
-
};
|
116
|
-
|
117
|
-
var Editor = require("../editor").Editor;
|
118
|
-
require("../config").defineOptions(Editor.prototype, "editor", {
|
119
|
-
enableBasicAutocompletion: {
|
120
|
-
set: function(val) {
|
121
|
-
if (val) {
|
122
|
-
this.completers = completers;
|
123
|
-
this.commands.addCommand(Autocomplete.startCommand);
|
124
|
-
} else {
|
125
|
-
this.commands.removeCommand(Autocomplete.startCommand);
|
126
|
-
}
|
127
|
-
},
|
128
|
-
value: false
|
129
|
-
},
|
130
|
-
enableSnippets: {
|
131
|
-
set: function(val) {
|
132
|
-
if (val) {
|
133
|
-
this.commands.addCommand(expandSnippet);
|
134
|
-
this.on("changeMode", onChangeMode);
|
135
|
-
onChangeMode(null, this);
|
136
|
-
} else {
|
137
|
-
this.commands.removeCommand(expandSnippet);
|
138
|
-
this.off("changeMode", onChangeMode);
|
139
|
-
}
|
140
|
-
},
|
141
|
-
value: false
|
142
|
-
}
|
143
|
-
});
|
144
|
-
|
145
|
-
});
|
146
|
-
|
147
|
-
define('ace/snippets', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/range', 'ace/keyboard/hash_handler', 'ace/tokenizer', 'ace/lib/dom'], function(require, exports, module) {
|
148
|
-
|
149
|
-
var lang = require("./lib/lang")
|
150
|
-
var Range = require("./range").Range
|
1
|
+
define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"], function(require, exports, module) {
|
2
|
+
"use strict";
|
3
|
+
var oop = require("./lib/oop");
|
4
|
+
var EventEmitter = require("./lib/event_emitter").EventEmitter;
|
5
|
+
var lang = require("./lib/lang");
|
6
|
+
var Range = require("./range").Range;
|
7
|
+
var Anchor = require("./anchor").Anchor;
|
151
8
|
var HashHandler = require("./keyboard/hash_handler").HashHandler;
|
152
9
|
var Tokenizer = require("./tokenizer").Tokenizer;
|
153
10
|
var comparePoints = Range.comparePoints;
|
@@ -158,12 +15,14 @@ var SnippetManager = function() {
|
|
158
15
|
};
|
159
16
|
|
160
17
|
(function() {
|
18
|
+
oop.implement(this, EventEmitter);
|
19
|
+
|
161
20
|
this.getTokenizer = function() {
|
162
21
|
function TabstopToken(str, _, stack) {
|
163
22
|
str = str.substr(1);
|
164
23
|
if (/^\d+$/.test(str) && !stack.inFormatString)
|
165
24
|
return [{tabstopId: parseInt(str, 10)}];
|
166
|
-
return [{text: str}]
|
25
|
+
return [{text: str}];
|
167
26
|
}
|
168
27
|
function escape(ch) {
|
169
28
|
return "(?:[^\\\\" + ch + "]|\\\\.)";
|
@@ -241,7 +100,7 @@ var SnippetManager = function() {
|
|
241
100
|
});
|
242
101
|
SnippetManager.prototype.getTokenizer = function() {
|
243
102
|
return SnippetManager.$tokenizer;
|
244
|
-
}
|
103
|
+
};
|
245
104
|
return SnippetManager.$tokenizer;
|
246
105
|
};
|
247
106
|
|
@@ -284,7 +143,7 @@ var SnippetManager = function() {
|
|
284
143
|
return s.getTabSize();
|
285
144
|
case "FILENAME":
|
286
145
|
case "FILEPATH":
|
287
|
-
return "
|
146
|
+
return "";
|
288
147
|
case "FULLNAME":
|
289
148
|
return "Ace";
|
290
149
|
}
|
@@ -375,11 +234,14 @@ var SnippetManager = function() {
|
|
375
234
|
return result;
|
376
235
|
};
|
377
236
|
|
378
|
-
this.
|
237
|
+
this.insertSnippetForSelection = function(editor, snippetText) {
|
379
238
|
var cursor = editor.getCursorPosition();
|
380
239
|
var line = editor.session.getLine(cursor.row);
|
381
|
-
var indentString = line.match(/^\s*/)[0];
|
382
240
|
var tabString = editor.session.getTabString();
|
241
|
+
var indentString = line.match(/^\s*/)[0];
|
242
|
+
|
243
|
+
if (cursor.column < indentString.length)
|
244
|
+
indentString = indentString.slice(0, cursor.column);
|
383
245
|
|
384
246
|
var tokens = this.tokenizeTmSnippet(snippetText);
|
385
247
|
tokens = this.resolveVariables(tokens, editor);
|
@@ -419,7 +281,7 @@ var SnippetManager = function() {
|
|
419
281
|
tabstops.forEach(function(ts) {ts.length = 0});
|
420
282
|
var expanding = {};
|
421
283
|
function copyValue(val) {
|
422
|
-
var copy = []
|
284
|
+
var copy = [];
|
423
285
|
for (var i = 0; i < val.length; i++) {
|
424
286
|
var p = val[i];
|
425
287
|
if (typeof p == "object") {
|
@@ -438,8 +300,9 @@ var SnippetManager = function() {
|
|
438
300
|
continue;
|
439
301
|
var id = p.tabstopId;
|
440
302
|
var i1 = tokens.indexOf(p, i + 1);
|
441
|
-
if (expanding[id]
|
442
|
-
expanding[id]
|
303
|
+
if (expanding[id]) {
|
304
|
+
if (expanding[id] === p)
|
305
|
+
expanding[id] = null;
|
443
306
|
continue;
|
444
307
|
}
|
445
308
|
|
@@ -452,7 +315,7 @@ var SnippetManager = function() {
|
|
452
315
|
|
453
316
|
if (ts.indexOf(p) === -1)
|
454
317
|
ts.push(p);
|
455
|
-
}
|
318
|
+
}
|
456
319
|
var row = 0, column = 0;
|
457
320
|
var text = "";
|
458
321
|
tokens.forEach(function(t) {
|
@@ -474,17 +337,30 @@ var SnippetManager = function() {
|
|
474
337
|
var end = editor.session.replace(range, text);
|
475
338
|
|
476
339
|
var tabstopManager = new TabstopManager(editor);
|
477
|
-
|
478
|
-
tabstopManager.
|
340
|
+
var selectionId = editor.inVirtualSelectionMode && editor.selection.index;
|
341
|
+
tabstopManager.addTabstops(tabstops, range.start, end, selectionId);
|
342
|
+
};
|
343
|
+
|
344
|
+
this.insertSnippet = function(editor, snippetText) {
|
345
|
+
var self = this;
|
346
|
+
if (editor.inVirtualSelectionMode)
|
347
|
+
return self.insertSnippetForSelection(editor, snippetText);
|
348
|
+
|
349
|
+
editor.forEachSelection(function() {
|
350
|
+
self.insertSnippetForSelection(editor, snippetText);
|
351
|
+
}, null, {keepOrder: true});
|
352
|
+
|
353
|
+
if (editor.tabstopManager)
|
354
|
+
editor.tabstopManager.tabNext();
|
479
355
|
};
|
480
356
|
|
481
357
|
this.$getScope = function(editor) {
|
482
358
|
var scope = editor.session.$mode.$id || "";
|
483
359
|
scope = scope.split("/").pop();
|
484
360
|
if (scope === "html" || scope === "php") {
|
485
|
-
if (scope === "php")
|
361
|
+
if (scope === "php" && !editor.session.$mode.inlinePhp)
|
486
362
|
scope = "html";
|
487
|
-
var c = editor.getCursorPosition()
|
363
|
+
var c = editor.getCursorPosition();
|
488
364
|
var state = editor.session.getState(c.row);
|
489
365
|
if (typeof state === "object") {
|
490
366
|
state = state[0];
|
@@ -513,7 +389,17 @@ var SnippetManager = function() {
|
|
513
389
|
return scopes;
|
514
390
|
};
|
515
391
|
|
516
|
-
this.expandWithTab = function(editor) {
|
392
|
+
this.expandWithTab = function(editor, options) {
|
393
|
+
var self = this;
|
394
|
+
var result = editor.forEachSelection(function() {
|
395
|
+
return self.expandSnippetForSelection(editor, options);
|
396
|
+
}, null, {keepOrder: true});
|
397
|
+
if (result && editor.tabstopManager)
|
398
|
+
editor.tabstopManager.tabNext();
|
399
|
+
return result;
|
400
|
+
};
|
401
|
+
|
402
|
+
this.expandSnippetForSelection = function(editor, options) {
|
517
403
|
var cursor = editor.getCursorPosition();
|
518
404
|
var line = editor.session.getLine(cursor.row);
|
519
405
|
var before = line.substring(0, cursor.column);
|
@@ -529,7 +415,8 @@ var SnippetManager = function() {
|
|
529
415
|
}, this);
|
530
416
|
if (!snippet)
|
531
417
|
return false;
|
532
|
-
|
418
|
+
if (options && options.dryRun)
|
419
|
+
return true;
|
533
420
|
editor.session.doc.removeInLine(cursor.row,
|
534
421
|
cursor.column - snippet.replaceBefore.length,
|
535
422
|
cursor.column + snippet.replaceAfter.length
|
@@ -537,7 +424,7 @@ var SnippetManager = function() {
|
|
537
424
|
|
538
425
|
this.variables.M__ = snippet.matchBefore;
|
539
426
|
this.variables.T__ = snippet.matchAfter;
|
540
|
-
this.
|
427
|
+
this.insertSnippetForSelection(editor, snippet.content);
|
541
428
|
|
542
429
|
this.variables.M__ = this.variables.T__ = null;
|
543
430
|
return true;
|
@@ -567,9 +454,13 @@ var SnippetManager = function() {
|
|
567
454
|
var snippetMap = this.snippetMap;
|
568
455
|
var snippetNameMap = this.snippetNameMap;
|
569
456
|
var self = this;
|
457
|
+
|
458
|
+
if (!snippets)
|
459
|
+
snippets = [];
|
460
|
+
|
570
461
|
function wrapRegexp(src) {
|
571
462
|
if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src))
|
572
|
-
src = "(?:" + src + ")"
|
463
|
+
src = "(?:" + src + ")";
|
573
464
|
|
574
465
|
return src || "";
|
575
466
|
}
|
@@ -591,7 +482,7 @@ var SnippetManager = function() {
|
|
591
482
|
function addSnippet(s) {
|
592
483
|
if (!s.scope)
|
593
484
|
s.scope = scope || "_";
|
594
|
-
scope = s.scope
|
485
|
+
scope = s.scope;
|
595
486
|
if (!snippetMap[scope]) {
|
596
487
|
snippetMap[scope] = [];
|
597
488
|
snippetNameMap[scope] = {};
|
@@ -617,12 +508,14 @@ var SnippetManager = function() {
|
|
617
508
|
|
618
509
|
s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);
|
619
510
|
s.endTriggerRe = new RegExp(s.endTrigger, "", true);
|
620
|
-
}
|
511
|
+
}
|
621
512
|
|
622
|
-
if (snippets.content)
|
513
|
+
if (snippets && snippets.content)
|
623
514
|
addSnippet(snippets);
|
624
515
|
else if (Array.isArray(snippets))
|
625
516
|
snippets.forEach(addSnippet);
|
517
|
+
|
518
|
+
this._signal("registerSnippets", {scope: scope});
|
626
519
|
};
|
627
520
|
this.unregister = function(snippets, scope) {
|
628
521
|
var snippetMap = this.snippetMap;
|
@@ -651,7 +544,7 @@ var SnippetManager = function() {
|
|
651
544
|
while (m = re.exec(str)) {
|
652
545
|
if (m[1]) {
|
653
546
|
try {
|
654
|
-
snippet = JSON.parse(m[1])
|
547
|
+
snippet = JSON.parse(m[1]);
|
655
548
|
list.push(snippet);
|
656
549
|
} catch (e) {}
|
657
550
|
} if (m[4]) {
|
@@ -704,9 +597,10 @@ var TabstopManager = function(editor) {
|
|
704
597
|
};
|
705
598
|
(function() {
|
706
599
|
this.attach = function(editor) {
|
707
|
-
this.index =
|
600
|
+
this.index = 0;
|
708
601
|
this.ranges = [];
|
709
602
|
this.tabstops = [];
|
603
|
+
this.$openTabstops = null;
|
710
604
|
this.selectedTabstop = null;
|
711
605
|
|
712
606
|
this.editor = editor;
|
@@ -746,7 +640,7 @@ var TabstopManager = function(editor) {
|
|
746
640
|
}
|
747
641
|
if (!this.$inChange && isRemove) {
|
748
642
|
var ts = this.selectedTabstop;
|
749
|
-
var changedOutside = !ts.some(function(r) {
|
643
|
+
var changedOutside = ts && !ts.some(function(r) {
|
750
644
|
return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;
|
751
645
|
});
|
752
646
|
if (changedOutside)
|
@@ -758,7 +652,7 @@ var TabstopManager = function(editor) {
|
|
758
652
|
if (r.end.row < start.row)
|
759
653
|
continue;
|
760
654
|
|
761
|
-
if (comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {
|
655
|
+
if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {
|
762
656
|
this.removeRange(r);
|
763
657
|
i--;
|
764
658
|
continue;
|
@@ -781,7 +675,7 @@ var TabstopManager = function(editor) {
|
|
781
675
|
};
|
782
676
|
this.updateLinkedFields = function() {
|
783
677
|
var ts = this.selectedTabstop;
|
784
|
-
if (!ts.hasLinkedRanges)
|
678
|
+
if (!ts || !ts.hasLinkedRanges)
|
785
679
|
return;
|
786
680
|
this.$inChange = true;
|
787
681
|
var session = this.editor.session;
|
@@ -790,7 +684,7 @@ var TabstopManager = function(editor) {
|
|
790
684
|
var range = ts[i];
|
791
685
|
if (!range.linked)
|
792
686
|
continue;
|
793
|
-
var fmt = exports.snippetManager.tmStrFormat(text, range.original)
|
687
|
+
var fmt = exports.snippetManager.tmStrFormat(text, range.original);
|
794
688
|
session.replace(range, fmt);
|
795
689
|
}
|
796
690
|
this.$inChange = false;
|
@@ -801,7 +695,7 @@ var TabstopManager = function(editor) {
|
|
801
695
|
};
|
802
696
|
this.onChangeSelection = function() {
|
803
697
|
if (!this.editor)
|
804
|
-
return
|
698
|
+
return;
|
805
699
|
var lead = this.editor.selection.lead;
|
806
700
|
var anchor = this.editor.selection.anchor;
|
807
701
|
var isEmpty = this.editor.selection.isEmpty();
|
@@ -819,14 +713,17 @@ var TabstopManager = function(editor) {
|
|
819
713
|
this.detach();
|
820
714
|
};
|
821
715
|
this.tabNext = function(dir) {
|
822
|
-
var max = this.tabstops.length
|
716
|
+
var max = this.tabstops.length;
|
823
717
|
var index = this.index + (dir || 1);
|
824
|
-
index = Math.min(Math.max(index,
|
825
|
-
this.selectTabstop(index);
|
718
|
+
index = Math.min(Math.max(index, 1), max);
|
826
719
|
if (index == max)
|
720
|
+
index = 0;
|
721
|
+
this.selectTabstop(index);
|
722
|
+
if (index === 0)
|
827
723
|
this.detach();
|
828
724
|
};
|
829
725
|
this.selectTabstop = function(index) {
|
726
|
+
this.$openTabstops = null;
|
830
727
|
var ts = this.tabstops[this.index];
|
831
728
|
if (ts)
|
832
729
|
this.addTabstopMarkers(ts);
|
@@ -844,6 +741,8 @@ var TabstopManager = function(editor) {
|
|
844
741
|
continue;
|
845
742
|
sel.addRange(ts[i].clone(), true);
|
846
743
|
}
|
744
|
+
if (sel.ranges[0])
|
745
|
+
sel.addRange(sel.ranges[0].clone());
|
847
746
|
} else {
|
848
747
|
this.editor.selection.setRange(ts.firstNonLinked);
|
849
748
|
}
|
@@ -851,6 +750,8 @@ var TabstopManager = function(editor) {
|
|
851
750
|
this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
|
852
751
|
};
|
853
752
|
this.addTabstops = function(tabstops, start, end) {
|
753
|
+
if (!this.$openTabstops)
|
754
|
+
this.$openTabstops = [];
|
854
755
|
if (!tabstops[0]) {
|
855
756
|
var p = Range.fromPoints(end, end);
|
856
757
|
moveRelative(p.start, start);
|
@@ -860,32 +761,43 @@ var TabstopManager = function(editor) {
|
|
860
761
|
}
|
861
762
|
|
862
763
|
var i = this.index;
|
863
|
-
var arg = [i, 0];
|
764
|
+
var arg = [i + 1, 0];
|
864
765
|
var ranges = this.ranges;
|
865
|
-
|
866
|
-
|
766
|
+
tabstops.forEach(function(ts, index) {
|
767
|
+
var dest = this.$openTabstops[index] || ts;
|
768
|
+
|
867
769
|
for (var i = ts.length; i--;) {
|
868
770
|
var p = ts[i];
|
869
771
|
var range = Range.fromPoints(p.start, p.end || p.start);
|
870
772
|
movePoint(range.start, start);
|
871
773
|
movePoint(range.end, start);
|
872
774
|
range.original = p;
|
873
|
-
range.tabstop =
|
775
|
+
range.tabstop = dest;
|
874
776
|
ranges.push(range);
|
875
|
-
|
777
|
+
if (dest != ts)
|
778
|
+
dest.unshift(range);
|
779
|
+
else
|
780
|
+
dest[i] = range;
|
876
781
|
if (p.fmtString) {
|
877
782
|
range.linked = true;
|
878
|
-
|
879
|
-
} else if (!
|
880
|
-
|
783
|
+
dest.hasLinkedRanges = true;
|
784
|
+
} else if (!dest.firstNonLinked)
|
785
|
+
dest.firstNonLinked = range;
|
881
786
|
}
|
882
|
-
if (!
|
883
|
-
|
884
|
-
|
885
|
-
|
787
|
+
if (!dest.firstNonLinked)
|
788
|
+
dest.hasLinkedRanges = false;
|
789
|
+
if (dest === ts) {
|
790
|
+
arg.push(dest);
|
791
|
+
this.$openTabstops[index] = dest;
|
792
|
+
}
|
793
|
+
this.addTabstopMarkers(dest);
|
886
794
|
}, this);
|
887
|
-
|
888
|
-
|
795
|
+
|
796
|
+
if (arg.length > 2) {
|
797
|
+
if (this.tabstops.length)
|
798
|
+
arg.push(arg.splice(2, 1)[0]);
|
799
|
+
this.tabstops.splice.apply(this.tabstops, arg);
|
800
|
+
}
|
889
801
|
};
|
890
802
|
|
891
803
|
this.addTabstopMarkers = function(ts) {
|
@@ -908,6 +820,13 @@ var TabstopManager = function(editor) {
|
|
908
820
|
i = this.ranges.indexOf(range);
|
909
821
|
this.ranges.splice(i, 1);
|
910
822
|
this.editor.session.removeMarker(range.markerId);
|
823
|
+
if (!range.tabstop.length) {
|
824
|
+
i = this.tabstops.indexOf(range.tabstop);
|
825
|
+
if (i != -1)
|
826
|
+
this.tabstops.splice(i, 1);
|
827
|
+
if (!this.tabstops.length)
|
828
|
+
this.detach();
|
829
|
+
}
|
911
830
|
};
|
912
831
|
|
913
832
|
this.keyboardHandler = new HashHandler();
|
@@ -932,6 +851,19 @@ var TabstopManager = function(editor) {
|
|
932
851
|
}).call(TabstopManager.prototype);
|
933
852
|
|
934
853
|
|
854
|
+
|
855
|
+
var changeTracker = {};
|
856
|
+
changeTracker.onChange = Anchor.prototype.onChange;
|
857
|
+
changeTracker.setPosition = function(row, column) {
|
858
|
+
this.pos.row = row;
|
859
|
+
this.pos.column = column;
|
860
|
+
};
|
861
|
+
changeTracker.update = function(pos, delta, $insertRight) {
|
862
|
+
this.$insertRight = $insertRight;
|
863
|
+
this.pos = pos;
|
864
|
+
this.onChange(delta);
|
865
|
+
};
|
866
|
+
|
935
867
|
var movePoint = function(point, diff) {
|
936
868
|
if (point.row == 0)
|
937
869
|
point.column += diff.column;
|
@@ -957,372 +889,67 @@ require("./lib/dom").importCssString("\
|
|
957
889
|
exports.snippetManager = new SnippetManager();
|
958
890
|
|
959
891
|
|
892
|
+
var Editor = require("./editor").Editor;
|
893
|
+
(function() {
|
894
|
+
this.insertSnippet = function(content, options) {
|
895
|
+
return exports.snippetManager.insertSnippet(this, content, options);
|
896
|
+
};
|
897
|
+
this.expandSnippet = function(options) {
|
898
|
+
return exports.snippetManager.expandWithTab(this, options);
|
899
|
+
};
|
900
|
+
}).call(Editor.prototype);
|
901
|
+
|
960
902
|
});
|
961
903
|
|
962
|
-
define(
|
904
|
+
define("ace/autocomplete/popup",["require","exports","module","ace/edit_session","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"], function(require, exports, module) {
|
905
|
+
"use strict";
|
963
906
|
|
907
|
+
var EditSession = require("../edit_session").EditSession;
|
908
|
+
var Renderer = require("../virtual_renderer").VirtualRenderer;
|
909
|
+
var Editor = require("../editor").Editor;
|
910
|
+
var Range = require("../range").Range;
|
911
|
+
var event = require("../lib/event");
|
912
|
+
var lang = require("../lib/lang");
|
913
|
+
var dom = require("../lib/dom");
|
964
914
|
|
965
|
-
var
|
966
|
-
var
|
967
|
-
var util = require("./autocomplete/util");
|
968
|
-
var event = require("./lib/event");
|
969
|
-
var lang = require("./lib/lang");
|
970
|
-
var snippetManager = require("./snippets").snippetManager;
|
915
|
+
var $singleLineEditor = function(el) {
|
916
|
+
var renderer = new Renderer(el);
|
971
917
|
|
972
|
-
|
973
|
-
this.autoInsert = true;
|
974
|
-
this.keyboardHandler = new HashHandler();
|
975
|
-
this.keyboardHandler.bindKeys(this.commands);
|
918
|
+
renderer.$maxLines = 4;
|
976
919
|
|
977
|
-
|
978
|
-
this.changeListener = this.changeListener.bind(this);
|
979
|
-
this.mousedownListener = this.mousedownListener.bind(this);
|
980
|
-
this.mousewheelListener = this.mousewheelListener.bind(this);
|
981
|
-
|
982
|
-
this.changeTimer = lang.delayedCall(function() {
|
983
|
-
this.updateCompletions(true);
|
984
|
-
}.bind(this))
|
985
|
-
};
|
920
|
+
var editor = new Editor(renderer);
|
986
921
|
|
987
|
-
(
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
this.insertMatch();
|
992
|
-
e.stop();
|
993
|
-
}.bind(this));
|
994
|
-
};
|
922
|
+
editor.setHighlightActiveLine(false);
|
923
|
+
editor.setShowPrintMargin(false);
|
924
|
+
editor.renderer.setShowGutter(false);
|
925
|
+
editor.renderer.setHighlightGutterLine(false);
|
995
926
|
|
996
|
-
|
997
|
-
|
998
|
-
this.$init();
|
927
|
+
editor.$mouseHandler.$focusWaitTimout = 0;
|
928
|
+
editor.$highlightTagPending = true;
|
999
929
|
|
1000
|
-
|
930
|
+
return editor;
|
931
|
+
};
|
1001
932
|
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
this.popup.setFontSize(editor.getFontSize());
|
933
|
+
var AcePopup = function(parentNode) {
|
934
|
+
var el = dom.createElement("div");
|
935
|
+
var popup = new $singleLineEditor(el);
|
1006
936
|
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
var rect = editor.container.getBoundingClientRect();
|
1013
|
-
pos.top += rect.top - renderer.layerConfig.offset;
|
1014
|
-
pos.left += rect.left - editor.renderer.scrollLeft;
|
1015
|
-
pos.left += renderer.$gutterLayer.gutterWidth;
|
937
|
+
if (parentNode)
|
938
|
+
parentNode.appendChild(el);
|
939
|
+
el.style.display = "none";
|
940
|
+
popup.renderer.content.style.cursor = "default";
|
941
|
+
popup.renderer.setStyle("ace_autocomplete");
|
1016
942
|
|
1017
|
-
|
1018
|
-
|
1019
|
-
};
|
943
|
+
popup.setOption("displayIndentGuides", false);
|
944
|
+
popup.setOption("dragDelay", 150);
|
1020
945
|
|
1021
|
-
|
1022
|
-
this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);
|
1023
|
-
this.editor.off("changeSelection", this.changeListener);
|
1024
|
-
this.editor.off("blur", this.changeListener);
|
1025
|
-
this.editor.off("mousedown", this.mousedownListener);
|
1026
|
-
this.editor.off("mousewheel", this.mousewheelListener);
|
1027
|
-
this.changeTimer.cancel();
|
1028
|
-
|
1029
|
-
if (this.popup)
|
1030
|
-
this.popup.hide();
|
946
|
+
var noop = function(){};
|
1031
947
|
|
1032
|
-
|
1033
|
-
|
1034
|
-
};
|
948
|
+
popup.focus = noop;
|
949
|
+
popup.$isFocused = true;
|
1035
950
|
|
1036
|
-
|
1037
|
-
|
1038
|
-
if (cursor.row != this.base.row || cursor.column < this.base.column) {
|
1039
|
-
this.detach();
|
1040
|
-
}
|
1041
|
-
if (this.activated)
|
1042
|
-
this.changeTimer.schedule();
|
1043
|
-
else
|
1044
|
-
this.detach();
|
1045
|
-
};
|
1046
|
-
|
1047
|
-
this.blurListener = function() {
|
1048
|
-
if (document.activeElement != this.editor.textInput.getElement())
|
1049
|
-
this.detach();
|
1050
|
-
};
|
1051
|
-
|
1052
|
-
this.mousedownListener = function(e) {
|
1053
|
-
this.detach();
|
1054
|
-
};
|
1055
|
-
|
1056
|
-
this.mousewheelListener = function(e) {
|
1057
|
-
this.detach();
|
1058
|
-
};
|
1059
|
-
|
1060
|
-
this.goTo = function(where) {
|
1061
|
-
var row = this.popup.getRow();
|
1062
|
-
var max = this.popup.session.getLength() - 1;
|
1063
|
-
|
1064
|
-
switch(where) {
|
1065
|
-
case "up": row = row < 0 ? max : row - 1; break;
|
1066
|
-
case "down": row = row >= max ? -1 : row + 1; break;
|
1067
|
-
case "start": row = 0; break;
|
1068
|
-
case "end": row = max; break;
|
1069
|
-
}
|
1070
|
-
|
1071
|
-
this.popup.setRow(row);
|
1072
|
-
};
|
1073
|
-
|
1074
|
-
this.insertMatch = function(data) {
|
1075
|
-
if (!data)
|
1076
|
-
data = this.popup.getData(this.popup.getRow());
|
1077
|
-
if (!data)
|
1078
|
-
return false;
|
1079
|
-
if (data.completer && data.completer.insertMatch) {
|
1080
|
-
data.completer.insertMatch(this.editor);
|
1081
|
-
} else {
|
1082
|
-
if (this.completions.filterText) {
|
1083
|
-
var ranges = this.editor.selection.getAllRanges();
|
1084
|
-
for (var i = 0, range; range = ranges[i]; i++) {
|
1085
|
-
range.start.column -= this.completions.filterText.length;
|
1086
|
-
this.editor.session.remove(range);
|
1087
|
-
}
|
1088
|
-
}
|
1089
|
-
if (data.snippet)
|
1090
|
-
snippetManager.insertSnippet(this.editor, data.snippet);
|
1091
|
-
else
|
1092
|
-
this.editor.execCommand("insertstring", data.value || data);
|
1093
|
-
}
|
1094
|
-
this.detach();
|
1095
|
-
};
|
1096
|
-
|
1097
|
-
this.commands = {
|
1098
|
-
"Up": function(editor) { editor.completer.goTo("up"); },
|
1099
|
-
"Down": function(editor) { editor.completer.goTo("down"); },
|
1100
|
-
"Ctrl-Up|Ctrl-Home": function(editor) { editor.completer.goTo("start"); },
|
1101
|
-
"Ctrl-Down|Ctrl-End": function(editor) { editor.completer.goTo("end"); },
|
1102
|
-
|
1103
|
-
"Esc": function(editor) { editor.completer.detach(); },
|
1104
|
-
"Space": function(editor) { editor.completer.detach(); editor.insert(" ");},
|
1105
|
-
"Return": function(editor) { editor.completer.insertMatch(); },
|
1106
|
-
"Shift-Return": function(editor) { editor.completer.insertMatch(true); },
|
1107
|
-
"Tab": function(editor) { editor.completer.insertMatch(); },
|
1108
|
-
|
1109
|
-
"PageUp": function(editor) { editor.completer.popup.gotoPageUp(); },
|
1110
|
-
"PageDown": function(editor) { editor.completer.popup.gotoPageDown(); }
|
1111
|
-
};
|
1112
|
-
|
1113
|
-
this.gatherCompletions = function(editor, callback) {
|
1114
|
-
var session = editor.getSession();
|
1115
|
-
var pos = editor.getCursorPosition();
|
1116
|
-
|
1117
|
-
var line = session.getLine(pos.row);
|
1118
|
-
var prefix = util.retrievePrecedingIdentifier(line, pos.column);
|
1119
|
-
|
1120
|
-
this.base = editor.getCursorPosition();
|
1121
|
-
this.base.column -= prefix.length;
|
1122
|
-
|
1123
|
-
var matches = [];
|
1124
|
-
util.parForEach(editor.completers, function(completer, next) {
|
1125
|
-
completer.getCompletions(editor, session, pos, prefix, function(err, results) {
|
1126
|
-
if (!err)
|
1127
|
-
matches = matches.concat(results);
|
1128
|
-
next();
|
1129
|
-
});
|
1130
|
-
}, function() {
|
1131
|
-
callback(null, {
|
1132
|
-
prefix: prefix,
|
1133
|
-
matches: matches
|
1134
|
-
});
|
1135
|
-
});
|
1136
|
-
return true;
|
1137
|
-
};
|
1138
|
-
|
1139
|
-
this.showPopup = function(editor) {
|
1140
|
-
if (this.editor)
|
1141
|
-
this.detach();
|
1142
|
-
|
1143
|
-
this.activated = true;
|
1144
|
-
|
1145
|
-
this.editor = editor;
|
1146
|
-
if (editor.completer != this) {
|
1147
|
-
if (editor.completer)
|
1148
|
-
editor.completer.detach();
|
1149
|
-
editor.completer = this;
|
1150
|
-
}
|
1151
|
-
|
1152
|
-
editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
|
1153
|
-
editor.on("changeSelection", this.changeListener);
|
1154
|
-
editor.on("blur", this.blurListener);
|
1155
|
-
editor.on("mousedown", this.mousedownListener);
|
1156
|
-
editor.on("mousewheel", this.mousewheelListener);
|
1157
|
-
|
1158
|
-
this.updateCompletions();
|
1159
|
-
};
|
1160
|
-
|
1161
|
-
this.updateCompletions = function(keepPopupPosition) {
|
1162
|
-
if (keepPopupPosition && this.base && this.completions) {
|
1163
|
-
var pos = this.editor.getCursorPosition();
|
1164
|
-
var prefix = this.editor.session.getTextRange({start: this.base, end: pos});
|
1165
|
-
if (prefix == this.completions.filterText)
|
1166
|
-
return;
|
1167
|
-
this.completions.setFilter(prefix);
|
1168
|
-
if (!this.completions.filtered.length)
|
1169
|
-
return this.detach();
|
1170
|
-
this.openPopup(this.editor, prefix, keepPopupPosition);
|
1171
|
-
return;
|
1172
|
-
}
|
1173
|
-
this.gatherCompletions(this.editor, function(err, results) {
|
1174
|
-
var matches = results && results.matches;
|
1175
|
-
if (!matches || !matches.length)
|
1176
|
-
return this.detach();
|
1177
|
-
|
1178
|
-
this.completions = new FilteredList(matches);
|
1179
|
-
this.completions.setFilter(results.prefix);
|
1180
|
-
var filtered = this.completions.filtered;
|
1181
|
-
if (!filtered.length)
|
1182
|
-
return this.detach();
|
1183
|
-
if (this.autoInsert && filtered.length == 1)
|
1184
|
-
return this.insertMatch(filtered[0]);
|
1185
|
-
this.openPopup(this.editor, results.prefix, keepPopupPosition);
|
1186
|
-
}.bind(this));
|
1187
|
-
};
|
1188
|
-
|
1189
|
-
this.cancelContextMenu = function() {
|
1190
|
-
var stop = function(e) {
|
1191
|
-
this.editor.off("nativecontextmenu", stop);
|
1192
|
-
if (e && e.domEvent)
|
1193
|
-
event.stopEvent(e.domEvent);
|
1194
|
-
}.bind(this);
|
1195
|
-
setTimeout(stop, 10);
|
1196
|
-
this.editor.on("nativecontextmenu", stop);
|
1197
|
-
};
|
1198
|
-
|
1199
|
-
}).call(Autocomplete.prototype);
|
1200
|
-
|
1201
|
-
Autocomplete.startCommand = {
|
1202
|
-
name: "startAutocomplete",
|
1203
|
-
exec: function(editor) {
|
1204
|
-
if (!editor.completer)
|
1205
|
-
editor.completer = new Autocomplete();
|
1206
|
-
editor.completer.showPopup(editor);
|
1207
|
-
editor.completer.cancelContextMenu();
|
1208
|
-
},
|
1209
|
-
bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space"
|
1210
|
-
};
|
1211
|
-
|
1212
|
-
var FilteredList = function(array, filterText, mutateData) {
|
1213
|
-
this.all = array;
|
1214
|
-
this.filtered = array;
|
1215
|
-
this.filterText = filterText || "";
|
1216
|
-
};
|
1217
|
-
(function(){
|
1218
|
-
this.setFilter = function(str) {
|
1219
|
-
if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)
|
1220
|
-
var matches = this.filtered;
|
1221
|
-
else
|
1222
|
-
var matches = this.all;
|
1223
|
-
|
1224
|
-
this.filterText = str;
|
1225
|
-
matches = this.filterCompletions(matches, this.filterText);
|
1226
|
-
matches = matches.sort(function(a, b) {
|
1227
|
-
return b.exactMatch - a.exactMatch || b.score - a.score;
|
1228
|
-
});
|
1229
|
-
var prev = null;
|
1230
|
-
matches = matches.filter(function(item){
|
1231
|
-
var caption = item.value || item.caption || item.snippet;
|
1232
|
-
if (caption === prev) return false;
|
1233
|
-
prev = caption;
|
1234
|
-
return true;
|
1235
|
-
});
|
1236
|
-
|
1237
|
-
this.filtered = matches;
|
1238
|
-
};
|
1239
|
-
this.filterCompletions = function(items, needle) {
|
1240
|
-
var results = [];
|
1241
|
-
var upper = needle.toUpperCase();
|
1242
|
-
var lower = needle.toLowerCase();
|
1243
|
-
loop: for (var i = 0, item; item = items[i]; i++) {
|
1244
|
-
var caption = item.value || item.caption || item.snippet;
|
1245
|
-
if (!caption) continue;
|
1246
|
-
var lastIndex = -1;
|
1247
|
-
var matchMask = 0;
|
1248
|
-
var penalty = 0;
|
1249
|
-
var index, distance;
|
1250
|
-
for (var j = 0; j < needle.length; j++) {
|
1251
|
-
var i1 = caption.indexOf(lower[j], lastIndex + 1);
|
1252
|
-
var i2 = caption.indexOf(upper[j], lastIndex + 1);
|
1253
|
-
index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;
|
1254
|
-
if (index < 0)
|
1255
|
-
continue loop;
|
1256
|
-
distance = index - lastIndex - 1;
|
1257
|
-
if (distance > 0) {
|
1258
|
-
if (lastIndex === -1)
|
1259
|
-
penalty += 10;
|
1260
|
-
penalty += distance;
|
1261
|
-
}
|
1262
|
-
matchMask = matchMask | (1 << index);
|
1263
|
-
lastIndex = index;
|
1264
|
-
}
|
1265
|
-
item.matchMask = matchMask;
|
1266
|
-
item.exactMatch = penalty ? 0 : 1;
|
1267
|
-
item.score = (item.score || 0) - penalty;
|
1268
|
-
results.push(item);
|
1269
|
-
}
|
1270
|
-
return results;
|
1271
|
-
};
|
1272
|
-
}).call(FilteredList.prototype);
|
1273
|
-
|
1274
|
-
exports.Autocomplete = Autocomplete;
|
1275
|
-
exports.FilteredList = FilteredList;
|
1276
|
-
|
1277
|
-
});
|
1278
|
-
|
1279
|
-
define('ace/autocomplete/popup', ['require', 'exports', 'module' , 'ace/edit_session', 'ace/virtual_renderer', 'ace/editor', 'ace/range', 'ace/lib/event', 'ace/lib/lang', 'ace/lib/dom'], function(require, exports, module) {
|
1280
|
-
|
1281
|
-
|
1282
|
-
var EditSession = require("../edit_session").EditSession;
|
1283
|
-
var Renderer = require("../virtual_renderer").VirtualRenderer;
|
1284
|
-
var Editor = require("../editor").Editor;
|
1285
|
-
var Range = require("../range").Range;
|
1286
|
-
var event = require("../lib/event");
|
1287
|
-
var lang = require("../lib/lang");
|
1288
|
-
var dom = require("../lib/dom");
|
1289
|
-
|
1290
|
-
var $singleLineEditor = function(el) {
|
1291
|
-
var renderer = new Renderer(el);
|
1292
|
-
|
1293
|
-
renderer.$maxLines = 4;
|
1294
|
-
|
1295
|
-
var editor = new Editor(renderer);
|
1296
|
-
|
1297
|
-
editor.setHighlightActiveLine(false);
|
1298
|
-
editor.setShowPrintMargin(false);
|
1299
|
-
editor.renderer.setShowGutter(false);
|
1300
|
-
editor.renderer.setHighlightGutterLine(false);
|
1301
|
-
|
1302
|
-
editor.$mouseHandler.$focusWaitTimout = 0;
|
1303
|
-
|
1304
|
-
return editor;
|
1305
|
-
};
|
1306
|
-
|
1307
|
-
var AcePopup = function(parentNode) {
|
1308
|
-
var el = dom.createElement("div");
|
1309
|
-
var popup = new $singleLineEditor(el);
|
1310
|
-
|
1311
|
-
if (parentNode)
|
1312
|
-
parentNode.appendChild(el);
|
1313
|
-
el.style.display = "none";
|
1314
|
-
popup.renderer.content.style.cursor = "default";
|
1315
|
-
popup.renderer.setStyle("ace_autocomplete");
|
1316
|
-
|
1317
|
-
popup.setOption("displayIndentGuides", false);
|
1318
|
-
|
1319
|
-
var noop = function(){};
|
1320
|
-
|
1321
|
-
popup.focus = noop;
|
1322
|
-
popup.$isFocused = true;
|
1323
|
-
|
1324
|
-
popup.renderer.$cursorLayer.restartTimer = noop;
|
1325
|
-
popup.renderer.$cursorLayer.element.style.opacity = 0;
|
951
|
+
popup.renderer.$cursorLayer.restartTimer = noop;
|
952
|
+
popup.renderer.$cursorLayer.element.style.opacity = 0;
|
1326
953
|
|
1327
954
|
popup.renderer.$maxLines = 8;
|
1328
955
|
popup.renderer.$keepTextAreaAtCursor = false;
|
@@ -1333,8 +960,7 @@ var AcePopup = function(parentNode) {
|
|
1333
960
|
|
1334
961
|
popup.on("mousedown", function(e) {
|
1335
962
|
var pos = e.getDocumentPosition();
|
1336
|
-
popup.
|
1337
|
-
popup.selection.clearSelection();
|
963
|
+
popup.selection.moveToPosition(pos);
|
1338
964
|
selectionMarker.start.row = selectionMarker.end.row = pos.row;
|
1339
965
|
e.stop();
|
1340
966
|
});
|
@@ -1350,7 +976,7 @@ var AcePopup = function(parentNode) {
|
|
1350
976
|
popup.session.removeMarker(hoverMarker.id);
|
1351
977
|
hoverMarker.id = null;
|
1352
978
|
}
|
1353
|
-
}
|
979
|
+
};
|
1354
980
|
popup.setSelectOnHover(false);
|
1355
981
|
popup.on("mousemove", function(e) {
|
1356
982
|
if (!lastMouseEvent) {
|
@@ -1402,11 +1028,11 @@ var AcePopup = function(parentNode) {
|
|
1402
1028
|
popup.getHoveredRow = function() {
|
1403
1029
|
return hoverMarker.start.row;
|
1404
1030
|
};
|
1405
|
-
|
1031
|
+
|
1406
1032
|
event.addListener(popup.container, "mouseout", hideHoverMarker);
|
1407
1033
|
popup.on("hide", hideHoverMarker);
|
1408
1034
|
popup.on("changeSelection", hideHoverMarker);
|
1409
|
-
|
1035
|
+
|
1410
1036
|
popup.session.doc.getLength = function() {
|
1411
1037
|
return popup.data.length;
|
1412
1038
|
};
|
@@ -1418,15 +1044,15 @@ var AcePopup = function(parentNode) {
|
|
1418
1044
|
};
|
1419
1045
|
|
1420
1046
|
var bgTokenizer = popup.session.bgTokenizer;
|
1421
|
-
bgTokenizer.$tokenizeRow = function(
|
1422
|
-
var data = popup.data[
|
1047
|
+
bgTokenizer.$tokenizeRow = function(row) {
|
1048
|
+
var data = popup.data[row];
|
1423
1049
|
var tokens = [];
|
1424
1050
|
if (!data)
|
1425
1051
|
return tokens;
|
1426
1052
|
if (typeof data == "string")
|
1427
1053
|
data = {value: data};
|
1428
1054
|
if (!data.caption)
|
1429
|
-
data.caption = data.value;
|
1055
|
+
data.caption = data.value || data.name;
|
1430
1056
|
|
1431
1057
|
var last = -1;
|
1432
1058
|
var flag, c;
|
@@ -1450,13 +1076,13 @@ var AcePopup = function(parentNode) {
|
|
1450
1076
|
};
|
1451
1077
|
bgTokenizer.$updateOnChange = noop;
|
1452
1078
|
bgTokenizer.start = noop;
|
1453
|
-
|
1079
|
+
|
1454
1080
|
popup.session.$computeWidth = function() {
|
1455
1081
|
return this.screenWidth = 0;
|
1456
|
-
}
|
1082
|
+
};
|
1457
1083
|
popup.isOpen = false;
|
1458
1084
|
popup.isTopdown = false;
|
1459
|
-
|
1085
|
+
|
1460
1086
|
popup.data = [];
|
1461
1087
|
popup.setData = function(list) {
|
1462
1088
|
popup.data = list || [];
|
@@ -1481,7 +1107,7 @@ var AcePopup = function(parentNode) {
|
|
1481
1107
|
popup._signal("select");
|
1482
1108
|
}
|
1483
1109
|
};
|
1484
|
-
|
1110
|
+
|
1485
1111
|
popup.on("changeSelection", function() {
|
1486
1112
|
if (popup.isOpen)
|
1487
1113
|
popup.setRow(popup.selection.lead.row);
|
@@ -1512,22 +1138,22 @@ var AcePopup = function(parentNode) {
|
|
1512
1138
|
|
1513
1139
|
el.style.display = "";
|
1514
1140
|
this.renderer.$textLayer.checkForSizeChanges();
|
1515
|
-
|
1141
|
+
|
1516
1142
|
var left = pos.left;
|
1517
1143
|
if (left + el.offsetWidth > screenWidth)
|
1518
1144
|
left = screenWidth - el.offsetWidth;
|
1519
|
-
|
1145
|
+
|
1520
1146
|
el.style.left = left + "px";
|
1521
|
-
|
1147
|
+
|
1522
1148
|
this._signal("show");
|
1523
1149
|
lastMouseEvent = null;
|
1524
1150
|
popup.isOpen = true;
|
1525
1151
|
};
|
1526
|
-
|
1152
|
+
|
1527
1153
|
popup.getTextLeftOffset = function() {
|
1528
1154
|
return this.$borderSize + this.renderer.$padding + this.$imageSize;
|
1529
1155
|
};
|
1530
|
-
|
1156
|
+
|
1531
1157
|
popup.$imageSize = 0;
|
1532
1158
|
popup.$borderSize = 1;
|
1533
1159
|
|
@@ -1535,19 +1161,24 @@ var AcePopup = function(parentNode) {
|
|
1535
1161
|
};
|
1536
1162
|
|
1537
1163
|
dom.importCssString("\
|
1538
|
-
.ace_autocomplete
|
1164
|
+
.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\
|
1539
1165
|
background-color: #CAD6FA;\
|
1540
1166
|
z-index: 1;\
|
1541
1167
|
}\
|
1542
|
-
.ace_autocomplete
|
1168
|
+
.ace_editor.ace_autocomplete .ace_line-hover {\
|
1543
1169
|
border: 1px solid #abbffe;\
|
1544
1170
|
margin-top: -1px;\
|
1545
1171
|
background: rgba(233,233,253,0.4);\
|
1546
1172
|
}\
|
1547
|
-
.ace_autocomplete .ace_line-hover {\
|
1173
|
+
.ace_editor.ace_autocomplete .ace_line-hover {\
|
1548
1174
|
position: absolute;\
|
1549
1175
|
z-index: 2;\
|
1550
1176
|
}\
|
1177
|
+
.ace_editor.ace_autocomplete .ace_scroller {\
|
1178
|
+
background: none;\
|
1179
|
+
border: none;\
|
1180
|
+
box-shadow: none;\
|
1181
|
+
}\
|
1551
1182
|
.ace_rightAlignedText {\
|
1552
1183
|
color: gray;\
|
1553
1184
|
display: inline-block;\
|
@@ -1556,11 +1187,11 @@ dom.importCssString("\
|
|
1556
1187
|
text-align: right;\
|
1557
1188
|
z-index: -1;\
|
1558
1189
|
}\
|
1559
|
-
.ace_autocomplete .ace_completion-highlight{\
|
1190
|
+
.ace_editor.ace_autocomplete .ace_completion-highlight{\
|
1560
1191
|
color: #000;\
|
1561
1192
|
text-shadow: 0 0 0.01em;\
|
1562
1193
|
}\
|
1563
|
-
.ace_autocomplete {\
|
1194
|
+
.ace_editor.ace_autocomplete {\
|
1564
1195
|
width: 280px;\
|
1565
1196
|
z-index: 200000;\
|
1566
1197
|
background: #fbfbfb;\
|
@@ -1575,8 +1206,8 @@ exports.AcePopup = AcePopup;
|
|
1575
1206
|
|
1576
1207
|
});
|
1577
1208
|
|
1578
|
-
define(
|
1579
|
-
|
1209
|
+
define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module) {
|
1210
|
+
"use strict";
|
1580
1211
|
|
1581
1212
|
exports.parForEach = function(array, fn, callback) {
|
1582
1213
|
var completed = 0;
|
@@ -1590,9 +1221,9 @@ exports.parForEach = function(array, fn, callback) {
|
|
1590
1221
|
callback(result, err);
|
1591
1222
|
});
|
1592
1223
|
}
|
1593
|
-
}
|
1224
|
+
};
|
1594
1225
|
|
1595
|
-
var ID_REGEX = /[a-zA-Z_0-9
|
1226
|
+
var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\uFFFF]/;
|
1596
1227
|
|
1597
1228
|
exports.retrievePrecedingIdentifier = function(text, pos, regex) {
|
1598
1229
|
regex = regex || ID_REGEX;
|
@@ -1604,7 +1235,7 @@ exports.retrievePrecedingIdentifier = function(text, pos, regex) {
|
|
1604
1235
|
break;
|
1605
1236
|
}
|
1606
1237
|
return buf.reverse().join("");
|
1607
|
-
}
|
1238
|
+
};
|
1608
1239
|
|
1609
1240
|
exports.retrieveFollowingIdentifier = function(text, pos, regex) {
|
1610
1241
|
regex = regex || ID_REGEX;
|
@@ -1616,14 +1247,365 @@ exports.retrieveFollowingIdentifier = function(text, pos, regex) {
|
|
1616
1247
|
break;
|
1617
1248
|
}
|
1618
1249
|
return buf;
|
1619
|
-
}
|
1250
|
+
};
|
1251
|
+
|
1252
|
+
});
|
1253
|
+
|
1254
|
+
define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/event","ace/lib/lang","ace/snippets"], function(require, exports, module) {
|
1255
|
+
"use strict";
|
1256
|
+
|
1257
|
+
var HashHandler = require("./keyboard/hash_handler").HashHandler;
|
1258
|
+
var AcePopup = require("./autocomplete/popup").AcePopup;
|
1259
|
+
var util = require("./autocomplete/util");
|
1260
|
+
var event = require("./lib/event");
|
1261
|
+
var lang = require("./lib/lang");
|
1262
|
+
var snippetManager = require("./snippets").snippetManager;
|
1263
|
+
|
1264
|
+
var Autocomplete = function() {
|
1265
|
+
this.autoInsert = true;
|
1266
|
+
this.autoSelect = true;
|
1267
|
+
this.keyboardHandler = new HashHandler();
|
1268
|
+
this.keyboardHandler.bindKeys(this.commands);
|
1269
|
+
|
1270
|
+
this.blurListener = this.blurListener.bind(this);
|
1271
|
+
this.changeListener = this.changeListener.bind(this);
|
1272
|
+
this.mousedownListener = this.mousedownListener.bind(this);
|
1273
|
+
this.mousewheelListener = this.mousewheelListener.bind(this);
|
1274
|
+
|
1275
|
+
this.changeTimer = lang.delayedCall(function() {
|
1276
|
+
this.updateCompletions(true);
|
1277
|
+
}.bind(this));
|
1278
|
+
};
|
1279
|
+
|
1280
|
+
(function() {
|
1281
|
+
this.gatherCompletionsId = 0;
|
1282
|
+
|
1283
|
+
this.$init = function() {
|
1284
|
+
this.popup = new AcePopup(document.body || document.documentElement);
|
1285
|
+
this.popup.on("click", function(e) {
|
1286
|
+
this.insertMatch();
|
1287
|
+
e.stop();
|
1288
|
+
}.bind(this));
|
1289
|
+
this.popup.focus = this.editor.focus.bind(this.editor);
|
1290
|
+
};
|
1291
|
+
|
1292
|
+
this.openPopup = function(editor, prefix, keepPopupPosition) {
|
1293
|
+
if (!this.popup)
|
1294
|
+
this.$init();
|
1295
|
+
|
1296
|
+
this.popup.setData(this.completions.filtered);
|
1297
|
+
|
1298
|
+
var renderer = editor.renderer;
|
1299
|
+
this.popup.setRow(this.autoSelect ? 0 : -1);
|
1300
|
+
if (!keepPopupPosition) {
|
1301
|
+
this.popup.setTheme(editor.getTheme());
|
1302
|
+
this.popup.setFontSize(editor.getFontSize());
|
1303
|
+
|
1304
|
+
var lineHeight = renderer.layerConfig.lineHeight;
|
1305
|
+
|
1306
|
+
var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);
|
1307
|
+
pos.left -= this.popup.getTextLeftOffset();
|
1308
|
+
|
1309
|
+
var rect = editor.container.getBoundingClientRect();
|
1310
|
+
pos.top += rect.top - renderer.layerConfig.offset;
|
1311
|
+
pos.left += rect.left - editor.renderer.scrollLeft;
|
1312
|
+
pos.left += renderer.$gutterLayer.gutterWidth;
|
1313
|
+
|
1314
|
+
this.popup.show(pos, lineHeight);
|
1315
|
+
} else if (keepPopupPosition && !prefix) {
|
1316
|
+
this.detach();
|
1317
|
+
}
|
1318
|
+
};
|
1319
|
+
|
1320
|
+
this.detach = function() {
|
1321
|
+
this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);
|
1322
|
+
this.editor.off("changeSelection", this.changeListener);
|
1323
|
+
this.editor.off("blur", this.blurListener);
|
1324
|
+
this.editor.off("mousedown", this.mousedownListener);
|
1325
|
+
this.editor.off("mousewheel", this.mousewheelListener);
|
1326
|
+
this.changeTimer.cancel();
|
1327
|
+
|
1328
|
+
if (this.popup && this.popup.isOpen) {
|
1329
|
+
this.gatherCompletionsId += 1;
|
1330
|
+
this.popup.hide();
|
1331
|
+
}
|
1332
|
+
|
1333
|
+
if (this.base)
|
1334
|
+
this.base.detach();
|
1335
|
+
this.activated = false;
|
1336
|
+
this.completions = this.base = null;
|
1337
|
+
};
|
1338
|
+
|
1339
|
+
this.changeListener = function(e) {
|
1340
|
+
var cursor = this.editor.selection.lead;
|
1341
|
+
if (cursor.row != this.base.row || cursor.column < this.base.column) {
|
1342
|
+
this.detach();
|
1343
|
+
}
|
1344
|
+
if (this.activated)
|
1345
|
+
this.changeTimer.schedule();
|
1346
|
+
else
|
1347
|
+
this.detach();
|
1348
|
+
};
|
1349
|
+
|
1350
|
+
this.blurListener = function() {
|
1351
|
+
var el = document.activeElement;
|
1352
|
+
if (el != this.editor.textInput.getElement() && el.parentNode != this.popup.container)
|
1353
|
+
this.detach();
|
1354
|
+
};
|
1355
|
+
|
1356
|
+
this.mousedownListener = function(e) {
|
1357
|
+
this.detach();
|
1358
|
+
};
|
1359
|
+
|
1360
|
+
this.mousewheelListener = function(e) {
|
1361
|
+
this.detach();
|
1362
|
+
};
|
1363
|
+
|
1364
|
+
this.goTo = function(where) {
|
1365
|
+
var row = this.popup.getRow();
|
1366
|
+
var max = this.popup.session.getLength() - 1;
|
1367
|
+
|
1368
|
+
switch(where) {
|
1369
|
+
case "up": row = row <= 0 ? max : row - 1; break;
|
1370
|
+
case "down": row = row >= max ? -1 : row + 1; break;
|
1371
|
+
case "start": row = 0; break;
|
1372
|
+
case "end": row = max; break;
|
1373
|
+
}
|
1374
|
+
|
1375
|
+
this.popup.setRow(row);
|
1376
|
+
};
|
1377
|
+
|
1378
|
+
this.insertMatch = function(data) {
|
1379
|
+
if (!data)
|
1380
|
+
data = this.popup.getData(this.popup.getRow());
|
1381
|
+
if (!data)
|
1382
|
+
return false;
|
1383
|
+
|
1384
|
+
if (data.completer && data.completer.insertMatch) {
|
1385
|
+
data.completer.insertMatch(this.editor);
|
1386
|
+
} else {
|
1387
|
+
if (this.completions.filterText) {
|
1388
|
+
var ranges = this.editor.selection.getAllRanges();
|
1389
|
+
for (var i = 0, range; range = ranges[i]; i++) {
|
1390
|
+
range.start.column -= this.completions.filterText.length;
|
1391
|
+
this.editor.session.remove(range);
|
1392
|
+
}
|
1393
|
+
}
|
1394
|
+
if (data.snippet)
|
1395
|
+
snippetManager.insertSnippet(this.editor, data.snippet);
|
1396
|
+
else
|
1397
|
+
this.editor.execCommand("insertstring", data.value || data);
|
1398
|
+
}
|
1399
|
+
this.detach();
|
1400
|
+
};
|
1401
|
+
|
1402
|
+
this.commands = {
|
1403
|
+
"Up": function(editor) { editor.completer.goTo("up"); },
|
1404
|
+
"Down": function(editor) { editor.completer.goTo("down"); },
|
1405
|
+
"Ctrl-Up|Ctrl-Home": function(editor) { editor.completer.goTo("start"); },
|
1406
|
+
"Ctrl-Down|Ctrl-End": function(editor) { editor.completer.goTo("end"); },
|
1407
|
+
|
1408
|
+
"Esc": function(editor) { editor.completer.detach(); },
|
1409
|
+
"Space": function(editor) { editor.completer.detach(); editor.insert(" ");},
|
1410
|
+
"Return": function(editor) { return editor.completer.insertMatch(); },
|
1411
|
+
"Shift-Return": function(editor) { editor.completer.insertMatch(true); },
|
1412
|
+
"Tab": function(editor) {
|
1413
|
+
var result = editor.completer.insertMatch();
|
1414
|
+
if (!result && !editor.tabstopManager)
|
1415
|
+
editor.completer.goTo("down");
|
1416
|
+
else
|
1417
|
+
return result;
|
1418
|
+
},
|
1419
|
+
|
1420
|
+
"PageUp": function(editor) { editor.completer.popup.gotoPageUp(); },
|
1421
|
+
"PageDown": function(editor) { editor.completer.popup.gotoPageDown(); }
|
1422
|
+
};
|
1423
|
+
|
1424
|
+
this.gatherCompletions = function(editor, callback) {
|
1425
|
+
var session = editor.getSession();
|
1426
|
+
var pos = editor.getCursorPosition();
|
1427
|
+
|
1428
|
+
var line = session.getLine(pos.row);
|
1429
|
+
var prefix = util.retrievePrecedingIdentifier(line, pos.column);
|
1430
|
+
|
1431
|
+
this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);
|
1432
|
+
this.base.$insertRight = true;
|
1433
|
+
|
1434
|
+
var matches = [];
|
1435
|
+
var total = editor.completers.length;
|
1436
|
+
editor.completers.forEach(function(completer, i) {
|
1437
|
+
completer.getCompletions(editor, session, pos, prefix, function(err, results) {
|
1438
|
+
if (!err)
|
1439
|
+
matches = matches.concat(results);
|
1440
|
+
var pos = editor.getCursorPosition();
|
1441
|
+
var line = session.getLine(pos.row);
|
1442
|
+
callback(null, {
|
1443
|
+
prefix: util.retrievePrecedingIdentifier(line, pos.column, results[0] && results[0].identifierRegex),
|
1444
|
+
matches: matches,
|
1445
|
+
finished: (--total === 0)
|
1446
|
+
});
|
1447
|
+
});
|
1448
|
+
});
|
1449
|
+
return true;
|
1450
|
+
};
|
1451
|
+
|
1452
|
+
this.showPopup = function(editor) {
|
1453
|
+
if (this.editor)
|
1454
|
+
this.detach();
|
1455
|
+
|
1456
|
+
this.activated = true;
|
1457
|
+
|
1458
|
+
this.editor = editor;
|
1459
|
+
if (editor.completer != this) {
|
1460
|
+
if (editor.completer)
|
1461
|
+
editor.completer.detach();
|
1462
|
+
editor.completer = this;
|
1463
|
+
}
|
1464
|
+
|
1465
|
+
editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
|
1466
|
+
editor.on("changeSelection", this.changeListener);
|
1467
|
+
editor.on("blur", this.blurListener);
|
1468
|
+
editor.on("mousedown", this.mousedownListener);
|
1469
|
+
editor.on("mousewheel", this.mousewheelListener);
|
1470
|
+
|
1471
|
+
this.updateCompletions();
|
1472
|
+
};
|
1473
|
+
|
1474
|
+
this.updateCompletions = function(keepPopupPosition) {
|
1475
|
+
if (keepPopupPosition && this.base && this.completions) {
|
1476
|
+
var pos = this.editor.getCursorPosition();
|
1477
|
+
var prefix = this.editor.session.getTextRange({start: this.base, end: pos});
|
1478
|
+
if (prefix == this.completions.filterText)
|
1479
|
+
return;
|
1480
|
+
this.completions.setFilter(prefix);
|
1481
|
+
if (!this.completions.filtered.length)
|
1482
|
+
return this.detach();
|
1483
|
+
if (this.completions.filtered.length == 1
|
1484
|
+
&& this.completions.filtered[0].value == prefix
|
1485
|
+
&& !this.completions.filtered[0].snippet)
|
1486
|
+
return this.detach();
|
1487
|
+
this.openPopup(this.editor, prefix, keepPopupPosition);
|
1488
|
+
return;
|
1489
|
+
}
|
1490
|
+
var _id = this.gatherCompletionsId;
|
1491
|
+
this.gatherCompletions(this.editor, function(err, results) {
|
1492
|
+
var detachIfFinished = function() {
|
1493
|
+
if (!results.finished) return;
|
1494
|
+
return this.detach();
|
1495
|
+
}.bind(this);
|
1496
|
+
|
1497
|
+
var prefix = results.prefix;
|
1498
|
+
var matches = results && results.matches;
|
1499
|
+
|
1500
|
+
if (!matches || !matches.length)
|
1501
|
+
return detachIfFinished();
|
1502
|
+
if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)
|
1503
|
+
return;
|
1504
|
+
|
1505
|
+
this.completions = new FilteredList(matches);
|
1506
|
+
this.completions.setFilter(prefix);
|
1507
|
+
var filtered = this.completions.filtered;
|
1508
|
+
if (!filtered.length)
|
1509
|
+
return detachIfFinished();
|
1510
|
+
if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)
|
1511
|
+
return detachIfFinished();
|
1512
|
+
if (this.autoInsert && filtered.length == 1 && results.finished)
|
1513
|
+
return this.insertMatch(filtered[0]);
|
1514
|
+
|
1515
|
+
this.openPopup(this.editor, prefix, keepPopupPosition);
|
1516
|
+
}.bind(this));
|
1517
|
+
};
|
1518
|
+
|
1519
|
+
this.cancelContextMenu = function() {
|
1520
|
+
this.editor.$mouseHandler.cancelContextMenu();
|
1521
|
+
};
|
1522
|
+
|
1523
|
+
}).call(Autocomplete.prototype);
|
1524
|
+
|
1525
|
+
Autocomplete.startCommand = {
|
1526
|
+
name: "startAutocomplete",
|
1527
|
+
exec: function(editor) {
|
1528
|
+
if (!editor.completer)
|
1529
|
+
editor.completer = new Autocomplete();
|
1530
|
+
editor.completer.autoInsert =
|
1531
|
+
editor.completer.autoSelect = true;
|
1532
|
+
editor.completer.showPopup(editor);
|
1533
|
+
editor.completer.cancelContextMenu();
|
1534
|
+
},
|
1535
|
+
bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space"
|
1536
|
+
};
|
1537
|
+
|
1538
|
+
var FilteredList = function(array, filterText, mutateData) {
|
1539
|
+
this.all = array;
|
1540
|
+
this.filtered = array;
|
1541
|
+
this.filterText = filterText || "";
|
1542
|
+
};
|
1543
|
+
(function(){
|
1544
|
+
this.setFilter = function(str) {
|
1545
|
+
if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)
|
1546
|
+
var matches = this.filtered;
|
1547
|
+
else
|
1548
|
+
var matches = this.all;
|
1549
|
+
|
1550
|
+
this.filterText = str;
|
1551
|
+
matches = this.filterCompletions(matches, this.filterText);
|
1552
|
+
matches = matches.sort(function(a, b) {
|
1553
|
+
return b.exactMatch - a.exactMatch || b.score - a.score;
|
1554
|
+
});
|
1555
|
+
var prev = null;
|
1556
|
+
matches = matches.filter(function(item){
|
1557
|
+
var caption = item.snippet || item.caption || item.value;
|
1558
|
+
if (caption === prev) return false;
|
1559
|
+
prev = caption;
|
1560
|
+
return true;
|
1561
|
+
});
|
1562
|
+
|
1563
|
+
this.filtered = matches;
|
1564
|
+
};
|
1565
|
+
this.filterCompletions = function(items, needle) {
|
1566
|
+
var results = [];
|
1567
|
+
var upper = needle.toUpperCase();
|
1568
|
+
var lower = needle.toLowerCase();
|
1569
|
+
loop: for (var i = 0, item; item = items[i]; i++) {
|
1570
|
+
var caption = item.value || item.caption || item.snippet;
|
1571
|
+
if (!caption) continue;
|
1572
|
+
var lastIndex = -1;
|
1573
|
+
var matchMask = 0;
|
1574
|
+
var penalty = 0;
|
1575
|
+
var index, distance;
|
1576
|
+
for (var j = 0; j < needle.length; j++) {
|
1577
|
+
var i1 = caption.indexOf(lower[j], lastIndex + 1);
|
1578
|
+
var i2 = caption.indexOf(upper[j], lastIndex + 1);
|
1579
|
+
index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;
|
1580
|
+
if (index < 0)
|
1581
|
+
continue loop;
|
1582
|
+
distance = index - lastIndex - 1;
|
1583
|
+
if (distance > 0) {
|
1584
|
+
if (lastIndex === -1)
|
1585
|
+
penalty += 10;
|
1586
|
+
penalty += distance;
|
1587
|
+
}
|
1588
|
+
matchMask = matchMask | (1 << index);
|
1589
|
+
lastIndex = index;
|
1590
|
+
}
|
1591
|
+
item.matchMask = matchMask;
|
1592
|
+
item.exactMatch = penalty ? 0 : 1;
|
1593
|
+
item.score = (item.score || 0) - penalty;
|
1594
|
+
results.push(item);
|
1595
|
+
}
|
1596
|
+
return results;
|
1597
|
+
};
|
1598
|
+
}).call(FilteredList.prototype);
|
1599
|
+
|
1600
|
+
exports.Autocomplete = Autocomplete;
|
1601
|
+
exports.FilteredList = FilteredList;
|
1620
1602
|
|
1621
1603
|
});
|
1622
1604
|
|
1623
|
-
define(
|
1624
|
-
var Range = require("
|
1605
|
+
define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module) {
|
1606
|
+
var Range = require("../range").Range;
|
1625
1607
|
|
1626
|
-
var splitRegex = /[^a-zA-Z_0-9
|
1608
|
+
var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/;
|
1627
1609
|
|
1628
1610
|
function getWordIndex(doc, pos) {
|
1629
1611
|
var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));
|
@@ -1655,11 +1637,185 @@ define('ace/autocomplete/text_completer', ['require', 'exports', 'module' , 'ace
|
|
1655
1637
|
var wordList = Object.keys(wordScore);
|
1656
1638
|
callback(null, wordList.map(function(word) {
|
1657
1639
|
return {
|
1658
|
-
|
1640
|
+
caption: word,
|
1659
1641
|
value: word,
|
1660
1642
|
score: wordScore[word],
|
1661
1643
|
meta: "local"
|
1662
1644
|
};
|
1663
1645
|
}));
|
1664
1646
|
};
|
1665
|
-
});
|
1647
|
+
});
|
1648
|
+
|
1649
|
+
define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/autocomplete/util","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module) {
|
1650
|
+
"use strict";
|
1651
|
+
|
1652
|
+
var snippetManager = require("../snippets").snippetManager;
|
1653
|
+
var Autocomplete = require("../autocomplete").Autocomplete;
|
1654
|
+
var config = require("../config");
|
1655
|
+
var util = require("../autocomplete/util");
|
1656
|
+
|
1657
|
+
var textCompleter = require("../autocomplete/text_completer");
|
1658
|
+
var keyWordCompleter = {
|
1659
|
+
getCompletions: function(editor, session, pos, prefix, callback) {
|
1660
|
+
var state = editor.session.getState(pos.row);
|
1661
|
+
var completions = session.$mode.getCompletions(state, session, pos, prefix);
|
1662
|
+
callback(null, completions);
|
1663
|
+
}
|
1664
|
+
};
|
1665
|
+
|
1666
|
+
var snippetCompleter = {
|
1667
|
+
getCompletions: function(editor, session, pos, prefix, callback) {
|
1668
|
+
var snippetMap = snippetManager.snippetMap;
|
1669
|
+
var completions = [];
|
1670
|
+
snippetManager.getActiveScopes(editor).forEach(function(scope) {
|
1671
|
+
var snippets = snippetMap[scope] || [];
|
1672
|
+
for (var i = snippets.length; i--;) {
|
1673
|
+
var s = snippets[i];
|
1674
|
+
var caption = s.name || s.tabTrigger;
|
1675
|
+
if (!caption)
|
1676
|
+
continue;
|
1677
|
+
completions.push({
|
1678
|
+
caption: caption,
|
1679
|
+
snippet: s.content,
|
1680
|
+
meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet"
|
1681
|
+
});
|
1682
|
+
}
|
1683
|
+
}, this);
|
1684
|
+
callback(null, completions);
|
1685
|
+
}
|
1686
|
+
};
|
1687
|
+
|
1688
|
+
var completers = [snippetCompleter, textCompleter, keyWordCompleter];
|
1689
|
+
exports.addCompleter = function(completer) {
|
1690
|
+
completers.push(completer);
|
1691
|
+
};
|
1692
|
+
exports.textCompleter = textCompleter;
|
1693
|
+
exports.keyWordCompleter = keyWordCompleter;
|
1694
|
+
exports.snippetCompleter = snippetCompleter;
|
1695
|
+
|
1696
|
+
var expandSnippet = {
|
1697
|
+
name: "expandSnippet",
|
1698
|
+
exec: function(editor) {
|
1699
|
+
var success = snippetManager.expandWithTab(editor);
|
1700
|
+
if (!success)
|
1701
|
+
editor.execCommand("indent");
|
1702
|
+
},
|
1703
|
+
bindKey: "Tab"
|
1704
|
+
};
|
1705
|
+
|
1706
|
+
var onChangeMode = function(e, editor) {
|
1707
|
+
loadSnippetsForMode(editor.session.$mode);
|
1708
|
+
};
|
1709
|
+
|
1710
|
+
var loadSnippetsForMode = function(mode) {
|
1711
|
+
var id = mode.$id;
|
1712
|
+
if (!snippetManager.files)
|
1713
|
+
snippetManager.files = {};
|
1714
|
+
loadSnippetFile(id);
|
1715
|
+
if (mode.modes)
|
1716
|
+
mode.modes.forEach(loadSnippetsForMode);
|
1717
|
+
};
|
1718
|
+
|
1719
|
+
var loadSnippetFile = function(id) {
|
1720
|
+
if (!id || snippetManager.files[id])
|
1721
|
+
return;
|
1722
|
+
var snippetFilePath = id.replace("mode", "snippets");
|
1723
|
+
snippetManager.files[id] = {};
|
1724
|
+
config.loadModule(snippetFilePath, function(m) {
|
1725
|
+
if (m) {
|
1726
|
+
snippetManager.files[id] = m;
|
1727
|
+
if (!m.snippets && m.snippetText)
|
1728
|
+
m.snippets = snippetManager.parseSnippetFile(m.snippetText);
|
1729
|
+
snippetManager.register(m.snippets || [], m.scope);
|
1730
|
+
if (m.includeScopes) {
|
1731
|
+
snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;
|
1732
|
+
m.includeScopes.forEach(function(x) {
|
1733
|
+
loadSnippetFile("ace/mode/" + x);
|
1734
|
+
});
|
1735
|
+
}
|
1736
|
+
}
|
1737
|
+
});
|
1738
|
+
};
|
1739
|
+
|
1740
|
+
function getCompletionPrefix(editor) {
|
1741
|
+
var pos = editor.getCursorPosition();
|
1742
|
+
var line = editor.session.getLine(pos.row);
|
1743
|
+
var prefix = util.retrievePrecedingIdentifier(line, pos.column);
|
1744
|
+
editor.completers.forEach(function(completer) {
|
1745
|
+
if (completer.identifierRegexps) {
|
1746
|
+
completer.identifierRegexps.forEach(function(identifierRegex) {
|
1747
|
+
if (!prefix && identifierRegex)
|
1748
|
+
prefix = util.retrievePrecedingIdentifier(line, pos.column, identifierRegex);
|
1749
|
+
});
|
1750
|
+
}
|
1751
|
+
});
|
1752
|
+
return prefix;
|
1753
|
+
}
|
1754
|
+
|
1755
|
+
var doLiveAutocomplete = function(e) {
|
1756
|
+
var editor = e.editor;
|
1757
|
+
var text = e.args || "";
|
1758
|
+
var hasCompleter = editor.completer && editor.completer.activated;
|
1759
|
+
if (e.command.name === "backspace") {
|
1760
|
+
if (hasCompleter && !getCompletionPrefix(editor))
|
1761
|
+
editor.completer.detach();
|
1762
|
+
}
|
1763
|
+
else if (e.command.name === "insertstring") {
|
1764
|
+
var prefix = getCompletionPrefix(editor);
|
1765
|
+
if (prefix && !hasCompleter) {
|
1766
|
+
if (!editor.completer) {
|
1767
|
+
editor.completer = new Autocomplete();
|
1768
|
+
}
|
1769
|
+
editor.completer.autoSelect = false;
|
1770
|
+
editor.completer.autoInsert = false;
|
1771
|
+
editor.completer.showPopup(editor);
|
1772
|
+
}
|
1773
|
+
}
|
1774
|
+
};
|
1775
|
+
|
1776
|
+
var Editor = require("../editor").Editor;
|
1777
|
+
require("../config").defineOptions(Editor.prototype, "editor", {
|
1778
|
+
enableBasicAutocompletion: {
|
1779
|
+
set: function(val) {
|
1780
|
+
if (val) {
|
1781
|
+
if (!this.completers)
|
1782
|
+
this.completers = Array.isArray(val)? val: completers;
|
1783
|
+
this.commands.addCommand(Autocomplete.startCommand);
|
1784
|
+
} else {
|
1785
|
+
this.commands.removeCommand(Autocomplete.startCommand);
|
1786
|
+
}
|
1787
|
+
},
|
1788
|
+
value: false
|
1789
|
+
},
|
1790
|
+
enableLiveAutocompletion: {
|
1791
|
+
set: function(val) {
|
1792
|
+
if (val) {
|
1793
|
+
if (!this.completers)
|
1794
|
+
this.completers = Array.isArray(val)? val: completers;
|
1795
|
+
this.commands.on('afterExec', doLiveAutocomplete);
|
1796
|
+
} else {
|
1797
|
+
this.commands.removeListener('afterExec', doLiveAutocomplete);
|
1798
|
+
}
|
1799
|
+
},
|
1800
|
+
value: false
|
1801
|
+
},
|
1802
|
+
enableSnippets: {
|
1803
|
+
set: function(val) {
|
1804
|
+
if (val) {
|
1805
|
+
this.commands.addCommand(expandSnippet);
|
1806
|
+
this.on("changeMode", onChangeMode);
|
1807
|
+
onChangeMode(null, this);
|
1808
|
+
} else {
|
1809
|
+
this.commands.removeCommand(expandSnippet);
|
1810
|
+
this.off("changeMode", onChangeMode);
|
1811
|
+
}
|
1812
|
+
},
|
1813
|
+
value: false
|
1814
|
+
}
|
1815
|
+
});
|
1816
|
+
});
|
1817
|
+
;
|
1818
|
+
(function() {
|
1819
|
+
window.require(["ace/ext/language_tools"], function() {});
|
1820
|
+
})();
|
1821
|
+
|