qword 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/ChangeLog +2333 -0
  2. package/LICENSE +22 -0
  3. package/README.md +170 -0
  4. package/assets/font/DroidSansMono.eot +0 -0
  5. package/assets/font/DroidSansMono.woff +0 -0
  6. package/assets/font/DroidSansMono.woff2 +0 -0
  7. package/assets/index.html +24 -0
  8. package/assets/style.css +34 -0
  9. package/bin/dword.js +109 -0
  10. package/client/_clipboard.js +53 -0
  11. package/client/_init-socket.js +77 -0
  12. package/client/_on-save.js +38 -0
  13. package/client/codemirror/show-trailing.js +54 -0
  14. package/client/codemirror/use-soft-tabs.js +38 -0
  15. package/client/dword.js +717 -0
  16. package/client/loadremote.js +93 -0
  17. package/client/save.js +53 -0
  18. package/client/set-key-map.js +3 -0
  19. package/client/show-message.js +30 -0
  20. package/client/story.js +55 -0
  21. package/codemirror/codemirror.js +3 -0
  22. package/css/dword.css +20 -0
  23. package/dist/2b22a33a0a80bb926bbc.png +1 -0
  24. package/dist/8e9019bd86255ac9a618.png +1 -0
  25. package/dist/codemirror.js +2 -0
  26. package/dist/codemirror.js.map +1 -0
  27. package/dist/dword.js +2 -0
  28. package/dist/dword.js.map +1 -0
  29. package/dist-dev/2b22a33a0a80bb926bbc.png +1 -0
  30. package/dist-dev/8e9019bd86255ac9a618.png +1 -0
  31. package/dist-dev/codemirror.js +104 -0
  32. package/dist-dev/dword.js +960 -0
  33. package/img/dword.png +0 -0
  34. package/json/bin.json +4 -0
  35. package/json/edit.json +17 -0
  36. package/json/ext.json +12 -0
  37. package/json/modules.json +22 -0
  38. package/modules/cm-searchbox/ChangeLog +60 -0
  39. package/modules/cm-searchbox/LICENSE +21 -0
  40. package/modules/cm-searchbox/README.md +27 -0
  41. package/modules/cm-searchbox/img/searchbox.png +0 -0
  42. package/modules/cm-searchbox/lib/searchbox.js +679 -0
  43. package/modules/cm-searchbox/package.json +27 -0
  44. package/modules/cm-show-invisibles/ChangeLog +108 -0
  45. package/modules/cm-show-invisibles/LICENSE +21 -0
  46. package/modules/cm-show-invisibles/README.md +25 -0
  47. package/modules/cm-show-invisibles/lib/show-invisibles.js +131 -0
  48. package/modules/cm-show-invisibles/package.json +34 -0
  49. package/modules/codemirror/AUTHORS +992 -0
  50. package/modules/codemirror/CHANGELOG.md +2290 -0
  51. package/modules/codemirror/CONTRIBUTING.md +97 -0
  52. package/modules/codemirror/LICENSE +21 -0
  53. package/modules/codemirror/README.md +48 -0
  54. package/modules/codemirror/addon/comment/comment.js +211 -0
  55. package/modules/codemirror/addon/comment/continuecomment.js +114 -0
  56. package/modules/codemirror/addon/dialog/dialog.css +32 -0
  57. package/modules/codemirror/addon/dialog/dialog.js +163 -0
  58. package/modules/codemirror/addon/display/autorefresh.js +47 -0
  59. package/modules/codemirror/addon/display/fullscreen.css +6 -0
  60. package/modules/codemirror/addon/display/fullscreen.js +41 -0
  61. package/modules/codemirror/addon/display/panel.js +133 -0
  62. package/modules/codemirror/addon/display/placeholder.js +78 -0
  63. package/modules/codemirror/addon/display/rulers.js +51 -0
  64. package/modules/codemirror/addon/edit/closebrackets.js +201 -0
  65. package/modules/codemirror/addon/edit/closetag.js +185 -0
  66. package/modules/codemirror/addon/edit/continuelist.js +101 -0
  67. package/modules/codemirror/addon/edit/matchbrackets.js +160 -0
  68. package/modules/codemirror/addon/edit/matchtags.js +66 -0
  69. package/modules/codemirror/addon/edit/trailingspace.js +27 -0
  70. package/modules/codemirror/addon/fold/brace-fold.js +119 -0
  71. package/modules/codemirror/addon/fold/comment-fold.js +59 -0
  72. package/modules/codemirror/addon/fold/foldcode.js +159 -0
  73. package/modules/codemirror/addon/fold/foldgutter.css +20 -0
  74. package/modules/codemirror/addon/fold/foldgutter.js +169 -0
  75. package/modules/codemirror/addon/fold/indent-fold.js +48 -0
  76. package/modules/codemirror/addon/fold/markdown-fold.js +49 -0
  77. package/modules/codemirror/addon/fold/xml-fold.js +184 -0
  78. package/modules/codemirror/addon/hint/anyword-hint.js +41 -0
  79. package/modules/codemirror/addon/hint/css-hint.js +66 -0
  80. package/modules/codemirror/addon/hint/html-hint.js +351 -0
  81. package/modules/codemirror/addon/hint/javascript-hint.js +162 -0
  82. package/modules/codemirror/addon/hint/show-hint.css +37 -0
  83. package/modules/codemirror/addon/hint/show-hint.js +523 -0
  84. package/modules/codemirror/addon/hint/sql-hint.js +304 -0
  85. package/modules/codemirror/addon/hint/xml-hint.js +132 -0
  86. package/modules/codemirror/addon/lint/coffeescript-lint.js +47 -0
  87. package/modules/codemirror/addon/lint/css-lint.js +40 -0
  88. package/modules/codemirror/addon/lint/html-lint.js +59 -0
  89. package/modules/codemirror/addon/lint/javascript-lint.js +65 -0
  90. package/modules/codemirror/addon/lint/json-lint.js +40 -0
  91. package/modules/codemirror/addon/lint/lint.css +79 -0
  92. package/modules/codemirror/addon/lint/lint.js +288 -0
  93. package/modules/codemirror/addon/lint/yaml-lint.js +41 -0
  94. package/modules/codemirror/addon/merge/merge.css +119 -0
  95. package/modules/codemirror/addon/merge/merge.js +1018 -0
  96. package/modules/codemirror/addon/mode/loadmode.js +66 -0
  97. package/modules/codemirror/addon/mode/multiplex.js +136 -0
  98. package/modules/codemirror/addon/mode/multiplex_test.js +49 -0
  99. package/modules/codemirror/addon/mode/overlay.js +90 -0
  100. package/modules/codemirror/addon/mode/simple.js +216 -0
  101. package/modules/codemirror/addon/runmode/colorize.js +40 -0
  102. package/modules/codemirror/addon/runmode/runmode-standalone.js +334 -0
  103. package/modules/codemirror/addon/runmode/runmode.js +76 -0
  104. package/modules/codemirror/addon/runmode/runmode.node.js +329 -0
  105. package/modules/codemirror/addon/scroll/annotatescrollbar.js +128 -0
  106. package/modules/codemirror/addon/scroll/scrollpastend.js +48 -0
  107. package/modules/codemirror/addon/scroll/simplescrollbars.css +66 -0
  108. package/modules/codemirror/addon/scroll/simplescrollbars.js +152 -0
  109. package/modules/codemirror/addon/search/jump-to-line.js +53 -0
  110. package/modules/codemirror/addon/search/match-highlighter.js +167 -0
  111. package/modules/codemirror/addon/search/matchesonscrollbar.css +8 -0
  112. package/modules/codemirror/addon/search/matchesonscrollbar.js +97 -0
  113. package/modules/codemirror/addon/search/search.js +295 -0
  114. package/modules/codemirror/addon/search/searchcursor.js +305 -0
  115. package/modules/codemirror/addon/selection/active-line.js +72 -0
  116. package/modules/codemirror/addon/selection/mark-selection.js +119 -0
  117. package/modules/codemirror/addon/selection/selection-pointer.js +98 -0
  118. package/modules/codemirror/addon/tern/tern.css +87 -0
  119. package/modules/codemirror/addon/tern/tern.js +756 -0
  120. package/modules/codemirror/addon/tern/worker.js +44 -0
  121. package/modules/codemirror/addon/wrap/hardwrap.js +160 -0
  122. package/modules/codemirror/bin/source-highlight +48 -0
  123. package/modules/codemirror/changes +3 -0
  124. package/modules/codemirror/changes.md +42 -0
  125. package/modules/codemirror/changes.txt +8 -0
  126. package/modules/codemirror/diff +781 -0
  127. package/modules/codemirror/dist/index.cjs +102 -0
  128. package/modules/codemirror/dist/index.d.cts +52 -0
  129. package/modules/codemirror/dist/index.d.ts +52 -0
  130. package/modules/codemirror/dist/index.js +96 -0
  131. package/modules/codemirror/keymap/emacs.js +545 -0
  132. package/modules/codemirror/keymap/sublime.js +720 -0
  133. package/modules/codemirror/keymap/vim.js +5978 -0
  134. package/modules/codemirror/lib/codemirror.css +344 -0
  135. package/modules/codemirror/lib/codemirror.js +9884 -0
  136. package/modules/codemirror/mode/apl/apl.js +174 -0
  137. package/modules/codemirror/mode/asciiarmor/asciiarmor.js +74 -0
  138. package/modules/codemirror/mode/asn.1/asn.1.js +204 -0
  139. package/modules/codemirror/mode/asterisk/asterisk.js +220 -0
  140. package/modules/codemirror/mode/brainfuck/brainfuck.js +85 -0
  141. package/modules/codemirror/mode/clike/clike.js +942 -0
  142. package/modules/codemirror/mode/clojure/clojure.js +293 -0
  143. package/modules/codemirror/mode/cmake/cmake.js +97 -0
  144. package/modules/codemirror/mode/cobol/cobol.js +255 -0
  145. package/modules/codemirror/mode/coffeescript/coffeescript.js +359 -0
  146. package/modules/codemirror/mode/commonlisp/commonlisp.js +125 -0
  147. package/modules/codemirror/mode/crystal/crystal.js +433 -0
  148. package/modules/codemirror/mode/css/css.js +862 -0
  149. package/modules/codemirror/mode/cypher/cypher.js +152 -0
  150. package/modules/codemirror/mode/d/d.js +223 -0
  151. package/modules/codemirror/mode/dart/dart.js +168 -0
  152. package/modules/codemirror/mode/diff/diff.js +47 -0
  153. package/modules/codemirror/mode/django/django.js +356 -0
  154. package/modules/codemirror/mode/dockerfile/dockerfile.js +211 -0
  155. package/modules/codemirror/mode/dtd/dtd.js +142 -0
  156. package/modules/codemirror/mode/dylan/dylan.js +352 -0
  157. package/modules/codemirror/mode/ebnf/ebnf.js +195 -0
  158. package/modules/codemirror/mode/ecl/ecl.js +206 -0
  159. package/modules/codemirror/mode/eiffel/eiffel.js +160 -0
  160. package/modules/codemirror/mode/elm/elm.js +245 -0
  161. package/modules/codemirror/mode/erlang/erlang.js +619 -0
  162. package/modules/codemirror/mode/factor/factor.js +85 -0
  163. package/modules/codemirror/mode/fcl/fcl.js +173 -0
  164. package/modules/codemirror/mode/forth/forth.js +180 -0
  165. package/modules/codemirror/mode/fortran/fortran.js +188 -0
  166. package/modules/codemirror/mode/gas/gas.js +355 -0
  167. package/modules/codemirror/mode/gfm/gfm.js +129 -0
  168. package/modules/codemirror/mode/gherkin/gherkin.js +194 -0
  169. package/modules/codemirror/mode/go/go.js +187 -0
  170. package/modules/codemirror/mode/groovy/groovy.js +245 -0
  171. package/modules/codemirror/mode/haml/haml.js +161 -0
  172. package/modules/codemirror/mode/handlebars/handlebars.js +70 -0
  173. package/modules/codemirror/mode/haskell/haskell.js +268 -0
  174. package/modules/codemirror/mode/haskell-literate/haskell-literate.js +43 -0
  175. package/modules/codemirror/mode/haxe/haxe.js +515 -0
  176. package/modules/codemirror/mode/htmlembedded/htmlembedded.js +37 -0
  177. package/modules/codemirror/mode/htmlmixed/htmlmixed.js +153 -0
  178. package/modules/codemirror/mode/http/http.js +113 -0
  179. package/modules/codemirror/mode/idl/idl.js +290 -0
  180. package/modules/codemirror/mode/javascript/javascript.js +960 -0
  181. package/modules/codemirror/mode/jinja2/jinja2.js +193 -0
  182. package/modules/codemirror/mode/jsx/jsx.js +149 -0
  183. package/modules/codemirror/mode/julia/julia.js +390 -0
  184. package/modules/codemirror/mode/livescript/livescript.js +280 -0
  185. package/modules/codemirror/mode/lua/lua.js +160 -0
  186. package/modules/codemirror/mode/markdown/markdown.js +886 -0
  187. package/modules/codemirror/mode/mathematica/mathematica.js +176 -0
  188. package/modules/codemirror/mode/mbox/mbox.js +129 -0
  189. package/modules/codemirror/mode/meta.js +221 -0
  190. package/modules/codemirror/mode/mirc/mirc.js +193 -0
  191. package/modules/codemirror/mode/mllike/mllike.js +359 -0
  192. package/modules/codemirror/mode/modelica/modelica.js +245 -0
  193. package/modules/codemirror/mode/mscgen/mscgen.js +175 -0
  194. package/modules/codemirror/mode/mumps/mumps.js +148 -0
  195. package/modules/codemirror/mode/nginx/nginx.js +178 -0
  196. package/modules/codemirror/mode/nsis/nsis.js +95 -0
  197. package/modules/codemirror/mode/ntriples/ntriples.js +195 -0
  198. package/modules/codemirror/mode/octave/octave.js +139 -0
  199. package/modules/codemirror/mode/oz/oz.js +252 -0
  200. package/modules/codemirror/mode/pascal/pascal.js +136 -0
  201. package/modules/codemirror/mode/pegjs/pegjs.js +111 -0
  202. package/modules/codemirror/mode/perl/perl.js +836 -0
  203. package/modules/codemirror/mode/php/php.js +234 -0
  204. package/modules/codemirror/mode/pig/pig.js +178 -0
  205. package/modules/codemirror/mode/powershell/powershell.js +398 -0
  206. package/modules/codemirror/mode/properties/properties.js +78 -0
  207. package/modules/codemirror/mode/protobuf/protobuf.js +72 -0
  208. package/modules/codemirror/mode/pug/pug.js +591 -0
  209. package/modules/codemirror/mode/puppet/puppet.js +220 -0
  210. package/modules/codemirror/mode/python/python.js +402 -0
  211. package/modules/codemirror/mode/q/q.js +139 -0
  212. package/modules/codemirror/mode/r/r.js +190 -0
  213. package/modules/codemirror/mode/rpm/changes/index.html +66 -0
  214. package/modules/codemirror/mode/rpm/rpm.js +109 -0
  215. package/modules/codemirror/mode/rst/rst.js +557 -0
  216. package/modules/codemirror/mode/ruby/ruby.js +303 -0
  217. package/modules/codemirror/mode/rust/rust.js +72 -0
  218. package/modules/codemirror/mode/sas/sas.js +303 -0
  219. package/modules/codemirror/mode/sass/sass.js +459 -0
  220. package/modules/codemirror/mode/scheme/scheme.js +284 -0
  221. package/modules/codemirror/mode/shell/shell.js +168 -0
  222. package/modules/codemirror/mode/sieve/sieve.js +193 -0
  223. package/modules/codemirror/mode/slim/slim.js +575 -0
  224. package/modules/codemirror/mode/smalltalk/smalltalk.js +168 -0
  225. package/modules/codemirror/mode/smarty/smarty.js +225 -0
  226. package/modules/codemirror/mode/solr/solr.js +104 -0
  227. package/modules/codemirror/mode/soy/soy.js +665 -0
  228. package/modules/codemirror/mode/sparql/sparql.js +184 -0
  229. package/modules/codemirror/mode/spreadsheet/spreadsheet.js +112 -0
  230. package/modules/codemirror/mode/sql/sql.js +529 -0
  231. package/modules/codemirror/mode/stex/stex.js +264 -0
  232. package/modules/codemirror/mode/stylus/stylus.js +775 -0
  233. package/modules/codemirror/mode/swift/swift.js +221 -0
  234. package/modules/codemirror/mode/tcl/tcl.js +140 -0
  235. package/modules/codemirror/mode/textile/textile.js +469 -0
  236. package/modules/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  237. package/modules/codemirror/mode/tiddlywiki/tiddlywiki.js +308 -0
  238. package/modules/codemirror/mode/tiki/tiki.css +26 -0
  239. package/modules/codemirror/mode/tiki/tiki.js +312 -0
  240. package/modules/codemirror/mode/toml/toml.js +88 -0
  241. package/modules/codemirror/mode/tornado/tornado.js +68 -0
  242. package/modules/codemirror/mode/troff/troff.js +84 -0
  243. package/modules/codemirror/mode/ttcn/ttcn.js +283 -0
  244. package/modules/codemirror/mode/ttcn-cfg/ttcn-cfg.js +214 -0
  245. package/modules/codemirror/mode/turtle/turtle.js +162 -0
  246. package/modules/codemirror/mode/twig/twig.js +141 -0
  247. package/modules/codemirror/mode/vb/vb.js +275 -0
  248. package/modules/codemirror/mode/vbscript/vbscript.js +350 -0
  249. package/modules/codemirror/mode/velocity/velocity.js +202 -0
  250. package/modules/codemirror/mode/verilog/verilog.js +781 -0
  251. package/modules/codemirror/mode/vhdl/vhdl.js +189 -0
  252. package/modules/codemirror/mode/vue/vue.js +77 -0
  253. package/modules/codemirror/mode/wast/wast.js +132 -0
  254. package/modules/codemirror/mode/webidl/webidl.js +195 -0
  255. package/modules/codemirror/mode/xml/xml.js +417 -0
  256. package/modules/codemirror/mode/xquery/xquery.js +448 -0
  257. package/modules/codemirror/mode/yacas/yacas.js +204 -0
  258. package/modules/codemirror/mode/yaml/yaml.js +120 -0
  259. package/modules/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +72 -0
  260. package/modules/codemirror/mode/z80/z80.js +116 -0
  261. package/modules/codemirror/package.json +52 -0
  262. package/modules/codemirror/src/addon/runmode/codemirror-standalone.js +24 -0
  263. package/modules/codemirror/src/addon/runmode/codemirror.node.js +21 -0
  264. package/modules/codemirror/src/addon/runmode/runmode-standalone.js +2 -0
  265. package/modules/codemirror/src/addon/runmode/runmode.node.js +2 -0
  266. package/modules/codemirror/src/codemirror.js +3 -0
  267. package/modules/codemirror/src/display/Display.js +116 -0
  268. package/modules/codemirror/src/display/focus.js +50 -0
  269. package/modules/codemirror/src/display/gutters.js +44 -0
  270. package/modules/codemirror/src/display/highlight_worker.js +55 -0
  271. package/modules/codemirror/src/display/line_numbers.js +48 -0
  272. package/modules/codemirror/src/display/mode_state.js +22 -0
  273. package/modules/codemirror/src/display/operations.js +206 -0
  274. package/modules/codemirror/src/display/scroll_events.js +132 -0
  275. package/modules/codemirror/src/display/scrollbars.js +194 -0
  276. package/modules/codemirror/src/display/scrolling.js +186 -0
  277. package/modules/codemirror/src/display/selection.js +173 -0
  278. package/modules/codemirror/src/display/update_display.js +267 -0
  279. package/modules/codemirror/src/display/update_line.js +189 -0
  280. package/modules/codemirror/src/display/update_lines.js +82 -0
  281. package/modules/codemirror/src/display/view_tracking.js +153 -0
  282. package/modules/codemirror/src/edit/CodeMirror.js +217 -0
  283. package/modules/codemirror/src/edit/commands.js +178 -0
  284. package/modules/codemirror/src/edit/deleteNearSelection.js +30 -0
  285. package/modules/codemirror/src/edit/drop_events.js +130 -0
  286. package/modules/codemirror/src/edit/fromTextArea.js +61 -0
  287. package/modules/codemirror/src/edit/global_events.js +45 -0
  288. package/modules/codemirror/src/edit/key_events.js +163 -0
  289. package/modules/codemirror/src/edit/legacy.js +62 -0
  290. package/modules/codemirror/src/edit/main.js +69 -0
  291. package/modules/codemirror/src/edit/methods.js +555 -0
  292. package/modules/codemirror/src/edit/mouse_events.js +417 -0
  293. package/modules/codemirror/src/edit/options.js +194 -0
  294. package/modules/codemirror/src/edit/utils.js +7 -0
  295. package/modules/codemirror/src/input/#ContentEditableInput.js# +475 -0
  296. package/modules/codemirror/src/input/ContentEditableInput.js +546 -0
  297. package/modules/codemirror/src/input/TextareaInput.js +380 -0
  298. package/modules/codemirror/src/input/indent.js +71 -0
  299. package/modules/codemirror/src/input/input.js +134 -0
  300. package/modules/codemirror/src/input/keymap.js +147 -0
  301. package/modules/codemirror/src/input/keynames.js +17 -0
  302. package/modules/codemirror/src/input/movement.js +111 -0
  303. package/modules/codemirror/src/line/highlight.js +284 -0
  304. package/modules/codemirror/src/line/line_data.js +349 -0
  305. package/modules/codemirror/src/line/pos.js +40 -0
  306. package/modules/codemirror/src/line/saw_special_spans.js +10 -0
  307. package/modules/codemirror/src/line/spans.js +390 -0
  308. package/modules/codemirror/src/line/utils_line.js +85 -0
  309. package/modules/codemirror/src/measurement/position_measurement.js +702 -0
  310. package/modules/codemirror/src/measurement/widgets.js +26 -0
  311. package/modules/codemirror/src/model/Doc.js +436 -0
  312. package/modules/codemirror/src/model/change_measurement.js +61 -0
  313. package/modules/codemirror/src/model/changes.js +339 -0
  314. package/modules/codemirror/src/model/chunk.js +167 -0
  315. package/modules/codemirror/src/model/document_data.js +112 -0
  316. package/modules/codemirror/src/model/history.js +228 -0
  317. package/modules/codemirror/src/model/line_widget.js +78 -0
  318. package/modules/codemirror/src/model/mark_text.js +293 -0
  319. package/modules/codemirror/src/model/selection.js +84 -0
  320. package/modules/codemirror/src/model/selection_updates.js +216 -0
  321. package/modules/codemirror/src/modes.js +96 -0
  322. package/modules/codemirror/src/util/StringStream.js +90 -0
  323. package/modules/codemirror/src/util/bidi.js +215 -0
  324. package/modules/codemirror/src/util/browser.js +34 -0
  325. package/modules/codemirror/src/util/dom.js +111 -0
  326. package/modules/codemirror/src/util/event.js +103 -0
  327. package/modules/codemirror/src/util/feature_detection.js +84 -0
  328. package/modules/codemirror/src/util/misc.js +168 -0
  329. package/modules/codemirror/src/util/operation_group.js +72 -0
  330. package/modules/codemirror/theme/3024-day.css +41 -0
  331. package/modules/codemirror/theme/3024-night.css +39 -0
  332. package/modules/codemirror/theme/abbott.css +268 -0
  333. package/modules/codemirror/theme/abcdef.css +32 -0
  334. package/modules/codemirror/theme/ambiance-mobile.css +5 -0
  335. package/modules/codemirror/theme/ambiance.css +74 -0
  336. package/modules/codemirror/theme/ayu-dark.css +44 -0
  337. package/modules/codemirror/theme/ayu-mirage.css +45 -0
  338. package/modules/codemirror/theme/base16-dark.css +40 -0
  339. package/modules/codemirror/theme/base16-light.css +38 -0
  340. package/modules/codemirror/theme/bespin.css +34 -0
  341. package/modules/codemirror/theme/blackboard.css +32 -0
  342. package/modules/codemirror/theme/cobalt.css +25 -0
  343. package/modules/codemirror/theme/colorforth.css +33 -0
  344. package/modules/codemirror/theme/darcula.css +53 -0
  345. package/modules/codemirror/theme/dracula.css +40 -0
  346. package/modules/codemirror/theme/duotone-dark.css +35 -0
  347. package/modules/codemirror/theme/duotone-light.css +36 -0
  348. package/modules/codemirror/theme/eclipse.css +23 -0
  349. package/modules/codemirror/theme/elegant.css +13 -0
  350. package/modules/codemirror/theme/erlang-dark.css +34 -0
  351. package/modules/codemirror/theme/gruvbox-dark.css +39 -0
  352. package/modules/codemirror/theme/hopscotch.css +34 -0
  353. package/modules/codemirror/theme/icecoder.css +43 -0
  354. package/modules/codemirror/theme/idea.css +42 -0
  355. package/modules/codemirror/theme/isotope.css +34 -0
  356. package/modules/codemirror/theme/juejin.css +30 -0
  357. package/modules/codemirror/theme/lesser-dark.css +47 -0
  358. package/modules/codemirror/theme/liquibyte.css +95 -0
  359. package/modules/codemirror/theme/lucario.css +37 -0
  360. package/modules/codemirror/theme/material-darker.css +135 -0
  361. package/modules/codemirror/theme/material-ocean.css +141 -0
  362. package/modules/codemirror/theme/material-palenight.css +141 -0
  363. package/modules/codemirror/theme/material.css +141 -0
  364. package/modules/codemirror/theme/mbo.css +37 -0
  365. package/modules/codemirror/theme/mdn-like.css +46 -0
  366. package/modules/codemirror/theme/midnight.css +39 -0
  367. package/modules/codemirror/theme/monokai.css +41 -0
  368. package/modules/codemirror/theme/moxer.css +143 -0
  369. package/modules/codemirror/theme/neat.css +12 -0
  370. package/modules/codemirror/theme/neo.css +43 -0
  371. package/modules/codemirror/theme/night.css +27 -0
  372. package/modules/codemirror/theme/nord.css +42 -0
  373. package/modules/codemirror/theme/oceanic-next.css +46 -0
  374. package/modules/codemirror/theme/panda-syntax.css +85 -0
  375. package/modules/codemirror/theme/paraiso-dark.css +38 -0
  376. package/modules/codemirror/theme/paraiso-light.css +38 -0
  377. package/modules/codemirror/theme/pastel-on-dark.css +52 -0
  378. package/modules/codemirror/theme/railscasts.css +34 -0
  379. package/modules/codemirror/theme/rubyblue.css +25 -0
  380. package/modules/codemirror/theme/seti.css +44 -0
  381. package/modules/codemirror/theme/shadowfox.css +52 -0
  382. package/modules/codemirror/theme/solarized.css +165 -0
  383. package/modules/codemirror/theme/ssms.css +16 -0
  384. package/modules/codemirror/theme/the-matrix.css +30 -0
  385. package/modules/codemirror/theme/tomorrow-night-bright.css +35 -0
  386. package/modules/codemirror/theme/tomorrow-night-eighties.css +38 -0
  387. package/modules/codemirror/theme/ttcn.css +64 -0
  388. package/modules/codemirror/theme/twilight.css +32 -0
  389. package/modules/codemirror/theme/vibrant-ink.css +34 -0
  390. package/modules/codemirror/theme/xq-dark.css +53 -0
  391. package/modules/codemirror/theme/xq-light.css +43 -0
  392. package/modules/codemirror/theme/yeti.css +44 -0
  393. package/modules/codemirror/theme/yonce.css +59 -0
  394. package/modules/codemirror/theme/zenburn.css +37 -0
  395. package/modules/codemirror-emmet/README.md +56 -0
  396. package/modules/codemirror-emmet/dist/emmet.js +48661 -0
  397. package/modules/codemirror-emmet/dist/emmet.min.js +8 -0
  398. package/modules/codemirror-emmet/dist/emmetPlugin.js +840 -0
  399. package/modules/codemirror-emmet/dist/emmetPlugin.min.js +1 -0
  400. package/modules/codemirror-emmet/dist/index.html +46 -0
  401. package/modules/codemirror-emmet/editor.js +204 -0
  402. package/modules/codemirror-emmet/gulpfile.js +54 -0
  403. package/modules/codemirror-emmet/index.html +68 -0
  404. package/modules/codemirror-emmet/package.json +36 -0
  405. package/modules/codemirror-emmet/plugin.js +201 -0
  406. package/modules/codemirror-emmet/shim.js +19 -0
  407. package/modules/codemirror-emmet/vendor/almond.js +410 -0
  408. package/modules/codemirror-emmet/vendor/codemirror/v4/codemirror.css +270 -0
  409. package/modules/codemirror-emmet/vendor/codemirror/v4/codemirror.js +7339 -0
  410. package/modules/codemirror-emmet/vendor/codemirror/v4/css.js +701 -0
  411. package/modules/codemirror-emmet/vendor/codemirror/v4/htmlmixed.js +117 -0
  412. package/modules/codemirror-emmet/vendor/codemirror/v4/xml.js +349 -0
  413. package/modules/jshint/README.md +114 -0
  414. package/modules/jshint/dist/jshint-rhino.js +32143 -0
  415. package/modules/jshint/dist/jshint.js +32141 -0
  416. package/modules/jshint/package.json +77 -0
  417. package/modules/loadremote/ChangeLog +23 -0
  418. package/modules/loadremote/LICENSE +21 -0
  419. package/modules/loadremote/README.md +53 -0
  420. package/modules/loadremote/lib/loadremote.js +147 -0
  421. package/modules/loadremote/package.json +26 -0
  422. package/package.json +107 -0
  423. package/server/edit.js +54 -0
  424. package/server/index.js +193 -0
@@ -0,0 +1,417 @@
1
+ import { delayBlurEvent, ensureFocus } from "../display/focus.js"
2
+ import { operation } from "../display/operations.js"
3
+ import { visibleLines } from "../display/update_lines.js"
4
+ import { clipPos, cmp, maxPos, minPos, Pos } from "../line/pos.js"
5
+ import { getLine, lineAtHeight } from "../line/utils_line.js"
6
+ import { posFromMouse } from "../measurement/position_measurement.js"
7
+ import { eventInWidget } from "../measurement/widgets.js"
8
+ import { normalizeSelection, Range, Selection } from "../model/selection.js"
9
+ import { extendRange, extendSelection, replaceOneSelection, setSelection } from "../model/selection_updates.js"
10
+ import { captureRightClick, chromeOS, ie, ie_version, mac, webkit, safari } from "../util/browser.js"
11
+ import { getOrder, getBidiPartAt } from "../util/bidi.js"
12
+ import { activeElt, root, win } from "../util/dom.js"
13
+ import { e_button, e_defaultPrevented, e_preventDefault, e_target, hasHandler, off, on, signal, signalDOMEvent } from "../util/event.js"
14
+ import { dragAndDrop } from "../util/feature_detection.js"
15
+ import { bind, countColumn, findColumn, sel_mouse } from "../util/misc.js"
16
+ import { addModifierNames } from "../input/keymap.js"
17
+ import { Pass } from "../util/misc.js"
18
+
19
+ import { dispatchKey } from "./key_events.js"
20
+ import { commands } from "./commands.js"
21
+
22
+ const DOUBLECLICK_DELAY = 400
23
+
24
+ class PastClick {
25
+ constructor(time, pos, button) {
26
+ this.time = time
27
+ this.pos = pos
28
+ this.button = button
29
+ }
30
+
31
+ compare(time, pos, button) {
32
+ return this.time + DOUBLECLICK_DELAY > time &&
33
+ cmp(pos, this.pos) == 0 && button == this.button
34
+ }
35
+ }
36
+
37
+ let lastClick, lastDoubleClick
38
+ function clickRepeat(pos, button) {
39
+ let now = +new Date
40
+ if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
41
+ lastClick = lastDoubleClick = null
42
+ return "triple"
43
+ } else if (lastClick && lastClick.compare(now, pos, button)) {
44
+ lastDoubleClick = new PastClick(now, pos, button)
45
+ lastClick = null
46
+ return "double"
47
+ } else {
48
+ lastClick = new PastClick(now, pos, button)
49
+ lastDoubleClick = null
50
+ return "single"
51
+ }
52
+ }
53
+
54
+ // A mouse down can be a single click, double click, triple click,
55
+ // start of selection drag, start of text drag, new cursor
56
+ // (ctrl-click), rectangle drag (alt-drag), or xwin
57
+ // middle-click-paste. Or it might be a click on something we should
58
+ // not interfere with, such as a scrollbar or widget.
59
+ export function onMouseDown(e) {
60
+ let cm = this, display = cm.display
61
+ if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return
62
+ display.input.ensurePolled()
63
+ display.shift = e.shiftKey
64
+
65
+ if (eventInWidget(display, e)) {
66
+ if (!webkit) {
67
+ // Briefly turn off draggability, to allow widgets to do
68
+ // normal dragging things.
69
+ display.scroller.draggable = false
70
+ setTimeout(() => display.scroller.draggable = true, 100)
71
+ }
72
+ return
73
+ }
74
+ if (clickInGutter(cm, e)) return
75
+ let pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"
76
+ win(cm).focus()
77
+
78
+ // #3261: make sure, that we're not starting a second selection
79
+ if (button == 1 && cm.state.selectingText)
80
+ cm.state.selectingText(e)
81
+
82
+ if (pos && handleMappedButton(cm, button, pos, repeat, e)) return
83
+
84
+ if (button == 1) {
85
+ if (pos) leftButtonDown(cm, pos, repeat, e)
86
+ else if (e_target(e) == display.scroller) e_preventDefault(e)
87
+ } else if (button == 2) {
88
+ if (pos) extendSelection(cm.doc, pos)
89
+ setTimeout(() => display.input.focus(), 20)
90
+ } else if (button == 3) {
91
+ if (captureRightClick) cm.display.input.onContextMenu(e)
92
+ else delayBlurEvent(cm)
93
+ }
94
+ }
95
+
96
+ function handleMappedButton(cm, button, pos, repeat, event) {
97
+ let name = "Click"
98
+ if (repeat == "double") name = "Double" + name
99
+ else if (repeat == "triple") name = "Triple" + name
100
+ name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name
101
+
102
+ return dispatchKey(cm, addModifierNames(name, event), event, bound => {
103
+ if (typeof bound == "string") bound = commands[bound]
104
+ if (!bound) return false
105
+ let done = false
106
+ try {
107
+ if (cm.isReadOnly()) cm.state.suppressEdits = true
108
+ done = bound(cm, pos) != Pass
109
+ } finally {
110
+ cm.state.suppressEdits = false
111
+ }
112
+ return done
113
+ })
114
+ }
115
+
116
+ function configureMouse(cm, repeat, event) {
117
+ let option = cm.getOption("configureMouse")
118
+ let value = option ? option(cm, repeat, event) : {}
119
+ if (value.unit == null) {
120
+ let rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey
121
+ value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"
122
+ }
123
+ if (value.extend == null || cm.doc.extend) value.extend = cm.doc.extend || event.shiftKey
124
+ if (value.addNew == null) value.addNew = mac ? event.metaKey : event.ctrlKey
125
+ if (value.moveOnDrag == null) value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey)
126
+ return value
127
+ }
128
+
129
+ function leftButtonDown(cm, pos, repeat, event) {
130
+ if (ie) setTimeout(bind(ensureFocus, cm), 0)
131
+ else cm.curOp.focus = activeElt(root(cm))
132
+
133
+ let behavior = configureMouse(cm, repeat, event)
134
+
135
+ let sel = cm.doc.sel, contained
136
+ if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
137
+ repeat == "single" && (contained = sel.contains(pos)) > -1 &&
138
+ (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&
139
+ (cmp(contained.to(), pos) > 0 || pos.xRel < 0))
140
+ leftButtonStartDrag(cm, event, pos, behavior)
141
+ else
142
+ leftButtonSelect(cm, event, pos, behavior)
143
+ }
144
+
145
+ // Start a text drag. When it ends, see if any dragging actually
146
+ // happen, and treat as a click if it didn't.
147
+ function leftButtonStartDrag(cm, event, pos, behavior) {
148
+ let display = cm.display, moved = false
149
+ let dragEnd = operation(cm, e => {
150
+ if (webkit) display.scroller.draggable = false
151
+ cm.state.draggingText = false
152
+ if (cm.state.delayingBlurEvent) {
153
+ if (cm.hasFocus()) cm.state.delayingBlurEvent = false
154
+ else delayBlurEvent(cm)
155
+ }
156
+ off(display.wrapper.ownerDocument, "mouseup", dragEnd)
157
+ off(display.wrapper.ownerDocument, "mousemove", mouseMove)
158
+ off(display.scroller, "dragstart", dragStart)
159
+ off(display.scroller, "drop", dragEnd)
160
+ if (!moved) {
161
+ e_preventDefault(e)
162
+ if (!behavior.addNew)
163
+ extendSelection(cm.doc, pos, null, null, behavior.extend)
164
+ // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
165
+ if ((webkit && !safari) || ie && ie_version == 9)
166
+ setTimeout(() => {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus()}, 20)
167
+ else
168
+ display.input.focus()
169
+ }
170
+ })
171
+ let mouseMove = function(e2) {
172
+ moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10
173
+ }
174
+ let dragStart = () => moved = true
175
+ // Let the drag handler handle this.
176
+ if (webkit) display.scroller.draggable = true
177
+ cm.state.draggingText = dragEnd
178
+ dragEnd.copy = !behavior.moveOnDrag
179
+ on(display.wrapper.ownerDocument, "mouseup", dragEnd)
180
+ on(display.wrapper.ownerDocument, "mousemove", mouseMove)
181
+ on(display.scroller, "dragstart", dragStart)
182
+ on(display.scroller, "drop", dragEnd)
183
+
184
+ cm.state.delayingBlurEvent = true
185
+ setTimeout(() => display.input.focus(), 20)
186
+ // IE's approach to draggable
187
+ if (display.scroller.dragDrop) display.scroller.dragDrop()
188
+ }
189
+
190
+ function rangeForUnit(cm, pos, unit) {
191
+ if (unit == "char") return new Range(pos, pos)
192
+ if (unit == "word") return cm.findWordAt(pos)
193
+ if (unit == "line") return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)))
194
+ let result = unit(cm, pos)
195
+ return new Range(result.from, result.to)
196
+ }
197
+
198
+ // Normal selection, as opposed to text dragging.
199
+ function leftButtonSelect(cm, event, start, behavior) {
200
+ if (ie) delayBlurEvent(cm)
201
+ let display = cm.display, doc = cm.doc
202
+ e_preventDefault(event)
203
+
204
+ let ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges
205
+ if (behavior.addNew && !behavior.extend) {
206
+ ourIndex = doc.sel.contains(start)
207
+ if (ourIndex > -1)
208
+ ourRange = ranges[ourIndex]
209
+ else
210
+ ourRange = new Range(start, start)
211
+ } else {
212
+ ourRange = doc.sel.primary()
213
+ ourIndex = doc.sel.primIndex
214
+ }
215
+
216
+ if (behavior.unit == "rectangle") {
217
+ if (!behavior.addNew) ourRange = new Range(start, start)
218
+ start = posFromMouse(cm, event, true, true)
219
+ ourIndex = -1
220
+ } else {
221
+ let range = rangeForUnit(cm, start, behavior.unit)
222
+ if (behavior.extend)
223
+ ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend)
224
+ else
225
+ ourRange = range
226
+ }
227
+
228
+ if (!behavior.addNew) {
229
+ ourIndex = 0
230
+ setSelection(doc, new Selection([ourRange], 0), sel_mouse)
231
+ startSel = doc.sel
232
+ } else if (ourIndex == -1) {
233
+ ourIndex = ranges.length
234
+ setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),
235
+ {scroll: false, origin: "*mouse"})
236
+ } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
237
+ setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
238
+ {scroll: false, origin: "*mouse"})
239
+ startSel = doc.sel
240
+ } else {
241
+ replaceOneSelection(doc, ourIndex, ourRange, sel_mouse)
242
+ }
243
+
244
+ let lastPos = start
245
+ function extendTo(pos) {
246
+ if (cmp(lastPos, pos) == 0) return
247
+ lastPos = pos
248
+
249
+ if (behavior.unit == "rectangle") {
250
+ let ranges = [], tabSize = cm.options.tabSize
251
+ let startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize)
252
+ let posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize)
253
+ let left = Math.min(startCol, posCol), right = Math.max(startCol, posCol)
254
+ for (let line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
255
+ line <= end; line++) {
256
+ let text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize)
257
+ if (left == right)
258
+ ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)))
259
+ else if (text.length > leftPos)
260
+ ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))))
261
+ }
262
+ if (!ranges.length) ranges.push(new Range(start, start))
263
+ setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
264
+ {origin: "*mouse", scroll: false})
265
+ cm.scrollIntoView(pos)
266
+ } else {
267
+ let oldRange = ourRange
268
+ let range = rangeForUnit(cm, pos, behavior.unit)
269
+ let anchor = oldRange.anchor, head
270
+ if (cmp(range.anchor, anchor) > 0) {
271
+ head = range.head
272
+ anchor = minPos(oldRange.from(), range.anchor)
273
+ } else {
274
+ head = range.anchor
275
+ anchor = maxPos(oldRange.to(), range.head)
276
+ }
277
+ let ranges = startSel.ranges.slice(0)
278
+ ranges[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head))
279
+ setSelection(doc, normalizeSelection(cm, ranges, ourIndex), sel_mouse)
280
+ }
281
+ }
282
+
283
+ let editorSize = display.wrapper.getBoundingClientRect()
284
+ // Used to ensure timeout re-tries don't fire when another extend
285
+ // happened in the meantime (clearTimeout isn't reliable -- at
286
+ // least on Chrome, the timeouts still happen even when cleared,
287
+ // if the clear happens after their scheduled firing time).
288
+ let counter = 0
289
+
290
+ function extend(e) {
291
+ let curCount = ++counter
292
+ let cur = posFromMouse(cm, e, true, behavior.unit == "rectangle")
293
+ if (!cur) return
294
+ if (cmp(cur, lastPos) != 0) {
295
+ cm.curOp.focus = activeElt(root(cm))
296
+ extendTo(cur)
297
+ let visible = visibleLines(display, doc)
298
+ if (cur.line >= visible.to || cur.line < visible.from)
299
+ setTimeout(operation(cm, () => {if (counter == curCount) extend(e)}), 150)
300
+ } else {
301
+ let outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0
302
+ if (outside) setTimeout(operation(cm, () => {
303
+ if (counter != curCount) return
304
+ display.scroller.scrollTop += outside
305
+ extend(e)
306
+ }), 50)
307
+ }
308
+ }
309
+
310
+ function done(e) {
311
+ cm.state.selectingText = false
312
+ counter = Infinity
313
+ // If e is null or undefined we interpret this as someone trying
314
+ // to explicitly cancel the selection rather than the user
315
+ // letting go of the mouse button.
316
+ if (e) {
317
+ e_preventDefault(e)
318
+ display.input.focus()
319
+ }
320
+ off(display.wrapper.ownerDocument, "mousemove", move)
321
+ off(display.wrapper.ownerDocument, "mouseup", up)
322
+ doc.history.lastSelOrigin = null
323
+ }
324
+
325
+ let move = operation(cm, e => {
326
+ if (e.buttons === 0 || !e_button(e)) done(e)
327
+ else extend(e)
328
+ })
329
+ let up = operation(cm, done)
330
+ cm.state.selectingText = up
331
+ on(display.wrapper.ownerDocument, "mousemove", move)
332
+ on(display.wrapper.ownerDocument, "mouseup", up)
333
+ }
334
+
335
+ // Used when mouse-selecting to adjust the anchor to the proper side
336
+ // of a bidi jump depending on the visual position of the head.
337
+ function bidiSimplify(cm, range) {
338
+ let {anchor, head} = range, anchorLine = getLine(cm.doc, anchor.line)
339
+ if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) return range
340
+ let order = getOrder(anchorLine)
341
+ if (!order) return range
342
+ let index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]
343
+ if (part.from != anchor.ch && part.to != anchor.ch) return range
344
+ let boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1)
345
+ if (boundary == 0 || boundary == order.length) return range
346
+
347
+ // Compute the relative visual position of the head compared to the
348
+ // anchor (<0 is to the left, >0 to the right)
349
+ let leftSide
350
+ if (head.line != anchor.line) {
351
+ leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0
352
+ } else {
353
+ let headIndex = getBidiPartAt(order, head.ch, head.sticky)
354
+ let dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1)
355
+ if (headIndex == boundary - 1 || headIndex == boundary)
356
+ leftSide = dir < 0
357
+ else
358
+ leftSide = dir > 0
359
+ }
360
+
361
+ let usePart = order[boundary + (leftSide ? -1 : 0)]
362
+ let from = leftSide == (usePart.level == 1)
363
+ let ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"
364
+ return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)
365
+ }
366
+
367
+
368
+ // Determines whether an event happened in the gutter, and fires the
369
+ // handlers for the corresponding event.
370
+ function gutterEvent(cm, e, type, prevent) {
371
+ let mX, mY
372
+ if (e.touches) {
373
+ mX = e.touches[0].clientX
374
+ mY = e.touches[0].clientY
375
+ } else {
376
+ try { mX = e.clientX; mY = e.clientY }
377
+ catch(e) { return false }
378
+ }
379
+ if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false
380
+ if (prevent) e_preventDefault(e)
381
+
382
+ let display = cm.display
383
+ let lineBox = display.lineDiv.getBoundingClientRect()
384
+
385
+ if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e)
386
+ mY -= lineBox.top - display.viewOffset
387
+
388
+ for (let i = 0; i < cm.display.gutterSpecs.length; ++i) {
389
+ let g = display.gutters.childNodes[i]
390
+ if (g && g.getBoundingClientRect().right >= mX) {
391
+ let line = lineAtHeight(cm.doc, mY)
392
+ let gutter = cm.display.gutterSpecs[i]
393
+ signal(cm, type, cm, line, gutter.className, e)
394
+ return e_defaultPrevented(e)
395
+ }
396
+ }
397
+ }
398
+
399
+ export function clickInGutter(cm, e) {
400
+ return gutterEvent(cm, e, "gutterClick", true)
401
+ }
402
+
403
+ // CONTEXT MENU HANDLING
404
+
405
+ // To make the context menu work, we need to briefly unhide the
406
+ // textarea (making it as unobtrusive as possible) to let the
407
+ // right-click take effect on it.
408
+ export function onContextMenu(cm, e) {
409
+ if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return
410
+ if (signalDOMEvent(cm, e, "contextmenu")) return
411
+ if (!captureRightClick) cm.display.input.onContextMenu(e)
412
+ }
413
+
414
+ function contextMenuInGutter(cm, e) {
415
+ if (!hasHandler(cm, "gutterContextMenu")) return false
416
+ return gutterEvent(cm, e, "gutterContextMenu", false)
417
+ }
@@ -0,0 +1,194 @@
1
+ import { onBlur } from "../display/focus.js"
2
+ import { getGutters, updateGutters } from "../display/gutters.js"
3
+ import { loadMode, resetModeState } from "../display/mode_state.js"
4
+ import { initScrollbars, updateScrollbars } from "../display/scrollbars.js"
5
+ import { updateSelection } from "../display/selection.js"
6
+ import { regChange } from "../display/view_tracking.js"
7
+ import { getKeyMap } from "../input/keymap.js"
8
+ import { defaultSpecialCharPlaceholder } from "../line/line_data.js"
9
+ import { Pos } from "../line/pos.js"
10
+ import { findMaxLine } from "../line/spans.js"
11
+ import { clearCaches, compensateForHScroll, estimateLineHeights } from "../measurement/position_measurement.js"
12
+ import { replaceRange } from "../model/changes.js"
13
+ import { mobile, windows } from "../util/browser.js"
14
+ import { addClass, rmClass } from "../util/dom.js"
15
+ import { off, on } from "../util/event.js"
16
+
17
+ import { themeChanged } from "./utils.js"
18
+
19
+ export let Init = {toString: function(){return "CodeMirror.Init"}}
20
+
21
+ export let defaults = {}
22
+ export let optionHandlers = {}
23
+
24
+ export function defineOptions(CodeMirror) {
25
+ let optionHandlers = CodeMirror.optionHandlers
26
+
27
+ function option(name, deflt, handle, notOnInit) {
28
+ CodeMirror.defaults[name] = deflt
29
+ if (handle) optionHandlers[name] =
30
+ notOnInit ? (cm, val, old) => {if (old != Init) handle(cm, val, old)} : handle
31
+ }
32
+
33
+ CodeMirror.defineOption = option
34
+
35
+ // Passed to option handlers when there is no old value.
36
+ CodeMirror.Init = Init
37
+
38
+ // These two are, on init, called from the constructor because they
39
+ // have to be initialized before the editor can start at all.
40
+ option("value", "", (cm, val) => cm.setValue(val), true)
41
+ option("mode", null, (cm, val) => {
42
+ cm.doc.modeOption = val
43
+ loadMode(cm)
44
+ }, true)
45
+
46
+ option("indentUnit", 2, loadMode, true)
47
+ option("indentWithTabs", false)
48
+ option("smartIndent", true)
49
+ option("tabSize", 4, cm => {
50
+ resetModeState(cm)
51
+ clearCaches(cm)
52
+ regChange(cm)
53
+ }, true)
54
+
55
+ option("lineSeparator", null, (cm, val) => {
56
+ cm.doc.lineSep = val
57
+ if (!val) return
58
+ let newBreaks = [], lineNo = cm.doc.first
59
+ cm.doc.iter(line => {
60
+ for (let pos = 0;;) {
61
+ let found = line.text.indexOf(val, pos)
62
+ if (found == -1) break
63
+ pos = found + val.length
64
+ newBreaks.push(Pos(lineNo, found))
65
+ }
66
+ lineNo++
67
+ })
68
+ for (let i = newBreaks.length - 1; i >= 0; i--)
69
+ replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length))
70
+ })
71
+ option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g, (cm, val, old) => {
72
+ cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g")
73
+ if (old != Init) cm.refresh()
74
+ })
75
+ option("specialCharPlaceholder", defaultSpecialCharPlaceholder, cm => cm.refresh(), true)
76
+ option("electricChars", true)
77
+ option("inputStyle", mobile ? "contenteditable" : "textarea", () => {
78
+ throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
79
+ }, true)
80
+ option("spellcheck", false, (cm, val) => cm.getInputField().spellcheck = val, true)
81
+ option("autocorrect", false, (cm, val) => cm.getInputField().autocorrect = val, true)
82
+ option("autocapitalize", false, (cm, val) => cm.getInputField().autocapitalize = val, true)
83
+ option("rtlMoveVisually", !windows)
84
+ option("wholeLineUpdateBefore", true)
85
+
86
+ option("theme", "default", cm => {
87
+ themeChanged(cm)
88
+ updateGutters(cm)
89
+ }, true)
90
+ option("keyMap", "default", (cm, val, old) => {
91
+ let next = getKeyMap(val)
92
+ let prev = old != Init && getKeyMap(old)
93
+ if (prev && prev.detach) prev.detach(cm, next)
94
+ if (next.attach) next.attach(cm, prev || null)
95
+ })
96
+ option("extraKeys", null)
97
+ option("configureMouse", null)
98
+
99
+ option("lineWrapping", false, wrappingChanged, true)
100
+ option("gutters", [], (cm, val) => {
101
+ cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers)
102
+ updateGutters(cm)
103
+ }, true)
104
+ option("fixedGutter", true, (cm, val) => {
105
+ cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"
106
+ cm.refresh()
107
+ }, true)
108
+ option("coverGutterNextToScrollbar", false, cm => updateScrollbars(cm), true)
109
+ option("scrollbarStyle", "native", cm => {
110
+ initScrollbars(cm)
111
+ updateScrollbars(cm)
112
+ cm.display.scrollbars.setScrollTop(cm.doc.scrollTop)
113
+ cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft)
114
+ }, true)
115
+ option("lineNumbers", false, (cm, val) => {
116
+ cm.display.gutterSpecs = getGutters(cm.options.gutters, val)
117
+ updateGutters(cm)
118
+ }, true)
119
+ option("firstLineNumber", 1, updateGutters, true)
120
+ option("lineNumberFormatter", integer => integer, updateGutters, true)
121
+ option("showCursorWhenSelecting", false, updateSelection, true)
122
+
123
+ option("resetSelectionOnContextMenu", true)
124
+ option("lineWiseCopyCut", true)
125
+ option("pasteLinesPerSelection", true)
126
+ option("selectionsMayTouch", false)
127
+
128
+ option("readOnly", false, (cm, val) => {
129
+ if (val == "nocursor") {
130
+ onBlur(cm)
131
+ cm.display.input.blur()
132
+ }
133
+ cm.display.input.readOnlyChanged(val)
134
+ })
135
+
136
+ option("screenReaderLabel", null, (cm, val) => {
137
+ val = (val === '') ? null : val
138
+ cm.display.input.screenReaderLabelChanged(val)
139
+ })
140
+
141
+ option("disableInput", false, (cm, val) => {if (!val) cm.display.input.reset()}, true)
142
+ option("dragDrop", true, dragDropChanged)
143
+ option("allowDropFileTypes", null)
144
+
145
+ option("cursorBlinkRate", 530)
146
+ option("cursorScrollMargin", 0)
147
+ option("cursorHeight", 1, updateSelection, true)
148
+ option("singleCursorHeightPerLine", true, updateSelection, true)
149
+ option("workTime", 100)
150
+ option("workDelay", 100)
151
+ option("flattenSpans", true, resetModeState, true)
152
+ option("addModeClass", false, resetModeState, true)
153
+ option("pollInterval", 100)
154
+ option("undoDepth", 200, (cm, val) => cm.doc.history.undoDepth = val)
155
+ option("historyEventDelay", 1250)
156
+ option("viewportMargin", 10, cm => cm.refresh(), true)
157
+ option("maxHighlightLength", 10000, resetModeState, true)
158
+ option("moveInputWithCursor", true, (cm, val) => {
159
+ if (!val) cm.display.input.resetPosition()
160
+ })
161
+
162
+ option("tabindex", null, (cm, val) => cm.display.input.getField().tabIndex = val || "")
163
+ option("autofocus", null)
164
+ option("direction", "ltr", (cm, val) => cm.doc.setDirection(val), true)
165
+ option("phrases", null)
166
+ }
167
+
168
+ function dragDropChanged(cm, value, old) {
169
+ let wasOn = old && old != Init
170
+ if (!value != !wasOn) {
171
+ let funcs = cm.display.dragFunctions
172
+ let toggle = value ? on : off
173
+ toggle(cm.display.scroller, "dragstart", funcs.start)
174
+ toggle(cm.display.scroller, "dragenter", funcs.enter)
175
+ toggle(cm.display.scroller, "dragover", funcs.over)
176
+ toggle(cm.display.scroller, "dragleave", funcs.leave)
177
+ toggle(cm.display.scroller, "drop", funcs.drop)
178
+ }
179
+ }
180
+
181
+ function wrappingChanged(cm) {
182
+ if (cm.options.lineWrapping) {
183
+ addClass(cm.display.wrapper, "CodeMirror-wrap")
184
+ cm.display.sizer.style.minWidth = ""
185
+ cm.display.sizerWidth = null
186
+ } else {
187
+ rmClass(cm.display.wrapper, "CodeMirror-wrap")
188
+ findMaxLine(cm)
189
+ }
190
+ estimateLineHeights(cm)
191
+ regChange(cm)
192
+ clearCaches(cm)
193
+ setTimeout(() => updateScrollbars(cm), 100)
194
+ }
@@ -0,0 +1,7 @@
1
+ import { clearCaches } from "../measurement/position_measurement.js"
2
+
3
+ export function themeChanged(cm) {
4
+ cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
5
+ cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-")
6
+ clearCaches(cm)
7
+ }