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
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015-2018 Coderaiser
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
package/README.md ADDED
@@ -0,0 +1,170 @@
1
+ # Dword [![License][LicenseIMGURL]][LicenseURL] [![NPM version][NPMIMGURL]][NPMURL]
2
+
3
+ [NPMIMGURL]: https://img.shields.io/npm/v/dword.svg?style=flat
4
+ [BuildStatusURL]: https://github.com/cloudcmd/dword/actions?query=workflow%3A%22Node+CI%22 "Build Status"
5
+ [BuildStatusIMGURL]: https://github.com/cloudcmd/dword/workflows/Node%20CI/badge.svg
6
+ [LicenseIMGURL]: https://img.shields.io/badge/license-MIT-317BF9.svg?style=flat
7
+ [NPM_INFO_IMG]: https://nodei.co/npm/dword.png?downloads=true&&stars&&downloadRank "npm install dword"
8
+ [NPMURL]: https://npmjs.org/package/dword "npm"
9
+ [LicenseURL]: https://tldrlegal.com/license/mit-license "MIT License"
10
+ [edit.json]: https://github.com/cloudcmd/dword/tree/master/json/edit.json "edit.json"
11
+
12
+ Web editor based on [CodeMirror](http://codemirror.net).
13
+ Fork of [edward](https://github.com/cloudcmd/edward "Edward").
14
+
15
+ ![dword](https://raw.githubusercontent.com/cloudcmd/dword/master/img/dword.png "dword")
16
+
17
+ ## Features
18
+
19
+ - Syntax highlighting based on extension of file for over 90 languages.
20
+ - Built-in `emmet` (for html files)
21
+ - Drag n drop (drag file from desktop to editor).
22
+ - Configurable options ([json/edit.json][edit.json] could be overriden by `~/.dword.json`)
23
+
24
+ ## Install
25
+
26
+ ```
27
+ npm i dword -g
28
+ ```
29
+
30
+ ![NPM\_INFO][NPM_INFO_IMG]
31
+
32
+ ## Command line parameters
33
+
34
+ Usage: `dword [filename]`
35
+
36
+ |Parameter |Operation
37
+ |:----------------------|:--------------------------------------------
38
+ | `-h, --help` | display help and exit
39
+ | `-v, --version` | output version information and exit
40
+
41
+ ## Hot keys
42
+
43
+ |Key |Operation
44
+ |:----------------------|:--------------------------------------------
45
+ | `Ctrl + s` | save
46
+ | `Ctrl + f` | find
47
+ | `Ctrl + h` | replace
48
+ | `Ctrl + g` | go to line
49
+ | `Ctrl + e` | evaluate (JavaScript only supported)
50
+
51
+ ## API
52
+
53
+ dword could be used as middleware for [express](http://expressjs.com "Express").
54
+ For this purpuse API could be used.
55
+
56
+ ### Server
57
+
58
+ #### dword(options)
59
+
60
+ Middleware of `dword`. Options could be omitted.
61
+
62
+ ```js
63
+ import {dword} from 'dword';
64
+ import express from 'express';
65
+
66
+ const app = express();
67
+
68
+ app.use(dword({
69
+ root: '/', // default
70
+ online: true, // default
71
+ diff: true, // default
72
+ zip: true, // default
73
+ dropbox: false, // optional
74
+ dropboxToken: 'token', // optional
75
+ }));
76
+
77
+ app.listen(31_337);
78
+ ```
79
+
80
+ #### dword.listen(socket)
81
+
82
+ Could be used with [socket.io](http://socket.io "Socket.io") to handle editor events with.
83
+
84
+ ```js
85
+ import {Server} from 'socket.io';
86
+ const socket = new Server(server);
87
+
88
+ dword.listen(socket, {
89
+ // optional
90
+ prefixSocket: '/dword',
91
+ // optional
92
+ auth: (accept, reject) => (username, password) => {
93
+ accept();
94
+ },
95
+ });
96
+ ```
97
+
98
+ ### Client
99
+
100
+ Dword uses [codemirror](http://codemirror.net/ "CodeMirror") on client side, so API is similar.
101
+ All you need is put minimal `html`, `css`, and `js` into your page.
102
+
103
+ Minimal html:
104
+
105
+ ```html
106
+ <div class="edit" data-name="js-edit"></div>
107
+ <script src="/dword/dword.js"></script>
108
+ ```
109
+
110
+ Minimal css:
111
+
112
+ ```css
113
+ html, body, .edit {
114
+ height: 100%;
115
+ margin: 0;
116
+ }
117
+ ```
118
+
119
+ Minimal js:
120
+
121
+ ```js
122
+ dword('[data-name="js-edit"]', (editor) => {
123
+ editor.setValue('hello dword');
124
+ console.log('dword is ready');
125
+ });
126
+ ```
127
+
128
+ #### Client API
129
+
130
+ ##### `dword(selector, callback)`
131
+
132
+ - `selector`: **string**
133
+ - `callback`: **EditorCallback**
134
+
135
+ Initialize new instance
136
+
137
+ ###### `editor.setValue(value)`
138
+
139
+ - `value`: **string**
140
+
141
+ Set value to `editor`.
142
+
143
+ ###### `editor.getValue()`
144
+
145
+ - `returns`: **string**
146
+
147
+ Get value from editor.
148
+
149
+ ##### Types
150
+
151
+ ```ts
152
+ interface Editor {
153
+ setValue: (value: string) => void;
154
+ getValue: () => string;
155
+ }
156
+
157
+ type EditorCallback = (editor: Editor) => void;
158
+ type Dword = (selector: string, callback: EditorCallback) => void;
159
+ ```
160
+
161
+ For more information you could always look around `client/dword.js` directory.
162
+
163
+ ## Related
164
+
165
+ - [Edward](https://github.com/cloudcmd/edward "Edwdard") - web editor based on [Ace](https://ace.c9.io "Ace").
166
+ - [Deepword](https://github.com/cloudcmd/deepword "Deepword") - web editor based on [Monaco](https://microsoft.github.io/monaco-editor/ "Monaco").
167
+
168
+ ## License
169
+
170
+ MIT
Binary file
Binary file
Binary file
@@ -0,0 +1,24 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Dword</title>
5
+ <link rel="stylesheet" href="/style.css">
6
+ </head>
7
+ <body>
8
+ <div class="edit" data-name="js-edit"></div>
9
+ <script src="/dword/dword.js"></script>
10
+ <script>
11
+ /* global dword */
12
+ window.addEventListener('DOMContentLoaded', function domLoad() {
13
+ dword('[data-name="js-edit"]', (editor) => {
14
+ editor.setOptions({
15
+ fontSize: '16px',
16
+ fontFamily: 'Droid Sans Mono',
17
+ });
18
+ });
19
+
20
+ window.removeEventListener('DOMContentLoaded', domLoad);
21
+ });
22
+ </script>
23
+ </body>
24
+ </html>
@@ -0,0 +1,34 @@
1
+ @font-face {
2
+ font-family: 'Droid Sans Mono';
3
+ src: url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot);
4
+ src:
5
+ local('Droid Sans Mono'),
6
+ local('DroidSansMono'),
7
+ url(/font/DroidSansMono.eot) format('embedded-opentype'),
8
+ url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot?#iefix)
9
+ format('embedded-opentype'),
10
+ url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot)
11
+ format('embedded-opentype'),
12
+ url(/font/DroidSansMono.woff2) format('woff2'),
13
+ url(/font/DroidSansMono.woff) format('woff'),
14
+ url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJUYuTAAIFFn5GTWtryCmBQ4.woff)
15
+ format('woff'),
16
+ local('Consolas');
17
+ font-style: normal;
18
+ font-weight: 400;
19
+ }
20
+
21
+ html,
22
+ body,
23
+ .edit {
24
+ width: 100%;
25
+ height: 100%;
26
+ margin: 0;
27
+ }
28
+
29
+ .edit {
30
+ position: absolute;
31
+ inset: 0;
32
+ font-family: 'Droid Sans Mono';
33
+ font-size: 16px;
34
+ }
package/bin/dword.js ADDED
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env node
2
+
3
+ import fs from 'node:fs';
4
+ import {fileURLToPath} from 'node:url';
5
+ import {dirname} from 'node:path';
6
+ import process from 'node:process';
7
+ import http from 'node:http';
8
+ import express from 'express';
9
+ import {Server} from 'socket.io';
10
+ import info from '../package.json' with {
11
+ type: 'json',
12
+ };
13
+ import {dword} from '../server/index.js';
14
+
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = dirname(__filename);
17
+ const [arg] = process.argv.slice(2);
18
+
19
+ if (!arg)
20
+ usage();
21
+ else if (/^(-v|--v)$/.test(arg))
22
+ version();
23
+ else if (/^(-h|--help)$/.test(arg))
24
+ help();
25
+ else
26
+ checkFile(arg, (error) => {
27
+ if (!error)
28
+ return main(arg);
29
+
30
+ console.error(error.message);
31
+ });
32
+
33
+ function getPath(name) {
34
+ const reg = /^[~/]/;
35
+
36
+ if (!reg.test(name))
37
+ name = process.cwd() + '/' + name;
38
+
39
+ return name;
40
+ }
41
+
42
+ function main(name) {
43
+ const filename = getPath(name);
44
+ const DIR = `${__dirname}/../assets/`;
45
+
46
+ const app = express();
47
+ const server = http.createServer(app);
48
+
49
+ const {env} = process;
50
+
51
+ const port = env.PORT || 1337;
52
+ const ip = env.IP || '0.0.0.0';
53
+
54
+ app
55
+ .use(express.static(DIR))
56
+ .use(dword({
57
+ online: false,
58
+ diff: true,
59
+ zip: true,
60
+ }));
61
+
62
+ server.listen(port, ip);
63
+
64
+ const socket = new Server(server);
65
+ const edSocket = dword.listen(socket);
66
+
67
+ edSocket.on('connection', () => {
68
+ fs.readFile(name, 'utf8', (error, data) => {
69
+ if (error)
70
+ return console.error(error.message);
71
+
72
+ edSocket.emit('file', filename, data);
73
+ });
74
+ });
75
+
76
+ console.log('url: http://' + ip + ':' + port);
77
+ }
78
+
79
+ function checkFile(name, callback) {
80
+ fs.stat(name, (error, stat) => {
81
+ let msg;
82
+
83
+ if (error && error.code === 'ENOENT')
84
+ msg = Error(`no such file or directory: '${name}'`);
85
+ else if (stat.isDirectory())
86
+ msg = Error(`'${name}' is directory`);
87
+
88
+ callback(msg);
89
+ });
90
+ }
91
+
92
+ function version() {
93
+ console.log(`v${info.version}`);
94
+ }
95
+
96
+ function usage() {
97
+ console.log(`Usage: ${info.name} [filename]`);
98
+ }
99
+
100
+ async function help() {
101
+ const bin = await import('../json/bin');
102
+
103
+ usage();
104
+ console.log('Options:');
105
+
106
+ for (const name of Object.keys(bin)) {
107
+ console.log(` ${name} ${bin[name]}`);
108
+ }
109
+ }
@@ -0,0 +1,53 @@
1
+ import clipboard from '@cloudcmd/clipboard';
2
+ import createElement from '@cloudcmd/create-element';
3
+ import once from 'once';
4
+ import _showMessageOnce from './show-message.js';
5
+
6
+ const resolve = Promise.resolve.bind(Promise);
7
+ const reject = Promise.reject.bind(Promise);
8
+ const showMessageOnce = once(_showMessageOnce);
9
+
10
+ export default (cmd) => {
11
+ const NAME = 'editor-clipboard';
12
+ const {_Ace, _story} = this;
13
+
14
+ const value = _Ace.getSelection('\n');
15
+ const insert = (a) => _Ace
16
+ .getDoc()
17
+ .replaceSelection(a);
18
+
19
+ if (cmd === 'copy') {
20
+ _story.setData(NAME, value);
21
+ return clipboard.writeText(value);
22
+ }
23
+
24
+ if (cmd === 'cut') {
25
+ _story.setData(NAME, value);
26
+ return cut(value) ? resolve() : reject();
27
+ }
28
+
29
+ return clipboard
30
+ .readText()
31
+ .then(insert)
32
+ .catch(() => {
33
+ showMessageOnce('Could not paste from clipboard. Inner buffer used.');
34
+
35
+ const value = _story.getData(NAME);
36
+
37
+ insert(value);
38
+ });
39
+ };
40
+
41
+ function cut(value) {
42
+ const textarea = createElement('textarea', {
43
+ value,
44
+ });
45
+
46
+ textarea.select();
47
+
48
+ const result = document.execCommand('cut');
49
+
50
+ document.body.removeChild(textarea);
51
+
52
+ return result;
53
+ }
@@ -0,0 +1,77 @@
1
+ /* global io */
2
+ import {applyPatch} from 'daffy';
3
+ import {alert} from 'smalltalk';
4
+
5
+ const getHost = () => {
6
+ const l = location;
7
+
8
+ return l.origin || l.protocol + '//' + l.host;
9
+ };
10
+
11
+ export default function() {
12
+ const dword = this;
13
+ const href = getHost();
14
+ const FIVE_SECONDS = 5000;
15
+
16
+ const patch = (name, data) => {
17
+ socket.emit('patch', name, data);
18
+ };
19
+
20
+ const {_prefixSocket} = dword;
21
+
22
+ const socket = io.connect(href + _prefixSocket, {
23
+ 'max reconnection attempts': 2 ** 32,
24
+ 'reconnection limit': FIVE_SECONDS,
25
+ 'path': this._socketPath + '/socket.io',
26
+ });
27
+
28
+ this._socket = socket;
29
+
30
+ socket.on('reject', () => {
31
+ this.emit('reject');
32
+ });
33
+
34
+ socket.on('connect', () => {
35
+ dword._patch = patch;
36
+ });
37
+
38
+ socket.on('message', (msg) => {
39
+ this._onSave(null, msg);
40
+ });
41
+
42
+ socket.on('file', (name, data) => {
43
+ dword
44
+ .setModeForPath(name)
45
+ .setValueFirst(name, data)
46
+ .moveCursorTo(0, 0);
47
+ });
48
+
49
+ socket.on('patch', (name, data, hash) => {
50
+ if (name !== this._FileName)
51
+ return;
52
+
53
+ if (hash !== this._story.getHash(name))
54
+ return;
55
+
56
+ const cursor = dword.getCursor();
57
+ const value = dword.getValue();
58
+ const result = applyPatch(value, data);
59
+
60
+ this.setValue(result);
61
+
62
+ this
63
+ ._story
64
+ .setData(name, value)
65
+ .setHash(name, this.sha());
66
+
67
+ dword.moveCursorTo(cursor.row, cursor.column);
68
+ });
69
+
70
+ socket.on('disconnect', () => {
71
+ dword.save.patch = globalThis._patchHttp;
72
+ });
73
+
74
+ socket.on('err', (error) => {
75
+ alert(this._TITLE, error);
76
+ });
77
+ }
@@ -0,0 +1,38 @@
1
+ import {confirm} from 'smalltalk';
2
+ import {write} from 'restafary/client';
3
+
4
+ function empty() {}
5
+
6
+ export default function onSave(error, text) {
7
+ const Value = this._Value;
8
+ const FileName = this._FileName;
9
+ let msg = 'Try again?';
10
+
11
+ if (error) {
12
+ if (error.message)
13
+ msg = error.message + '\n' + msg;
14
+ else
15
+ msg = `Can't save.` + msg;
16
+
17
+ const onSave = this._onSave.bind(this);
18
+
19
+ return confirm(this._TITLE, msg)
20
+ .then(() => {
21
+ write(this._FileName, this._Value, onSave);
22
+ })
23
+ .catch(empty)
24
+ .then(() => {
25
+ this.focus();
26
+ });
27
+ }
28
+
29
+ this.showMessage(text);
30
+
31
+ const hash = this.sha();
32
+ this
33
+ ._story
34
+ .setData(FileName, Value)
35
+ .setHash(FileName, hash);
36
+
37
+ this._Emitter.emit('save', Value.length);
38
+ }
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ /* global CodeMirror */
4
+ /* global define */
5
+
6
+ (function(mod) {
7
+ const isFn = (a) => typeof a === 'function';
8
+
9
+ if (typeof exports === 'object' && typeof module === 'object') // CommonJS
10
+ mod(require('../../lib/codemirror'));
11
+ else if (isFn(define) && define.amd) // AMD
12
+ define(['../../lib/codemirror'], mod);
13
+ else // Plain browser env
14
+ mod(CodeMirror);
15
+ })((CodeMirror) => {
16
+ add();
17
+
18
+ CodeMirror.defineOption('showTrailing', false, (cm, val, prev) => {
19
+ if (prev === CodeMirror.Init)
20
+ prev = false;
21
+
22
+ if (prev && !val)
23
+ cm.removeOverlay('trailingspace');
24
+ else if (!prev && val)
25
+ cm.addOverlay({
26
+ token(stream) {
27
+ let ret = null;
28
+ const match = stream.match(/\s+$/);
29
+
30
+ if (match && match[0] !== stream.string)
31
+ ret = 'trailing-whitespace';
32
+
33
+ stream.match(/^\s*\S/);
34
+
35
+ return ret;
36
+ },
37
+ name: 'trailingspace',
38
+ });
39
+ });
40
+
41
+ function add() {
42
+ const style = document.createElement('style');
43
+
44
+ style.setAttribute('data-name', 'js-showTrailing');
45
+
46
+ style.textContent = [
47
+ '.cm-trailing-whitespace {',
48
+ 'color: #f80;',
49
+ 'text-decoration: underline;',
50
+ '}'].join('');
51
+
52
+ document.head.appendChild(style);
53
+ }
54
+ });
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ /* global CodeMirror */
4
+ /* global define */
5
+
6
+ (function(mod) {
7
+ if (typeof exports === 'object' && typeof module === 'object') // CommonJS
8
+ mod(require('../../lib/codemirror'));
9
+ else if (typeof define === 'function' && define.amd) // AMD
10
+ define(['../../lib/codemirror'], mod);
11
+ else // Plain browser env
12
+ mod(CodeMirror);
13
+ })((CodeMirror) => {
14
+ CodeMirror.defineOption('useSoftTabs', false, (cm) => {
15
+ cm.addKeyMap({
16
+ 'Tab'(cm) {
17
+ let line;
18
+ const sel = cm.getSelection('\n');
19
+ const coupleLines = sel.length > 0;
20
+ const isSelected = cm.somethingSelected();
21
+
22
+ if (isSelected) {
23
+ line = cm.getLine(cm.getCursor().line);
24
+ // Indent only if there are multiple lines selected, or if the selection spans a full line
25
+
26
+ if (coupleLines && (sel.includes('\n') || sel.length === line.length)) {
27
+ cm.indentSelection('add');
28
+ }
29
+ } else {
30
+ cm.execCommand('insertSoftTab');
31
+ }
32
+ },
33
+ 'Shift-Tab'(cm) {
34
+ cm.indentSelection('subtract');
35
+ },
36
+ });
37
+ });
38
+ });