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,117 @@
1
+ (function(mod) {
2
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
3
+ mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css"));
4
+ else if (typeof define == "function" && define.amd) // AMD
5
+ define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod);
6
+ else // Plain browser env
7
+ mod(CodeMirror);
8
+ })(function(CodeMirror) {
9
+ "use strict";
10
+
11
+ CodeMirror.defineMode("htmlmixed", function(config, parserConfig) {
12
+ var htmlMode = CodeMirror.getMode(config, {name: "xml",
13
+ htmlMode: true,
14
+ multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,
15
+ multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag});
16
+ var cssMode = CodeMirror.getMode(config, "css");
17
+
18
+ var scriptTypes = [], scriptTypesConf = parserConfig && parserConfig.scriptTypes;
19
+ scriptTypes.push({matches: /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,
20
+ mode: CodeMirror.getMode(config, "javascript")});
21
+ if (scriptTypesConf) for (var i = 0; i < scriptTypesConf.length; ++i) {
22
+ var conf = scriptTypesConf[i];
23
+ scriptTypes.push({matches: conf.matches, mode: conf.mode && CodeMirror.getMode(config, conf.mode)});
24
+ }
25
+ scriptTypes.push({matches: /./,
26
+ mode: CodeMirror.getMode(config, "text/plain")});
27
+
28
+ function html(stream, state) {
29
+ var tagName = state.htmlState.tagName;
30
+ var style = htmlMode.token(stream, state.htmlState);
31
+ if (tagName == "script" && /\btag\b/.test(style) && stream.current() == ">") {
32
+ // Script block: mode to change to depends on type attribute
33
+ var scriptType = stream.string.slice(Math.max(0, stream.pos - 100), stream.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i);
34
+ scriptType = scriptType ? scriptType[1] : "";
35
+ if (scriptType && /[\"\']/.test(scriptType.charAt(0))) scriptType = scriptType.slice(1, scriptType.length - 1);
36
+ for (var i = 0; i < scriptTypes.length; ++i) {
37
+ var tp = scriptTypes[i];
38
+ if (typeof tp.matches == "string" ? scriptType == tp.matches : tp.matches.test(scriptType)) {
39
+ if (tp.mode) {
40
+ state.token = script;
41
+ state.localMode = tp.mode;
42
+ state.localState = tp.mode.startState && tp.mode.startState(htmlMode.indent(state.htmlState, ""));
43
+ }
44
+ break;
45
+ }
46
+ }
47
+ } else if (tagName == "style" && /\btag\b/.test(style) && stream.current() == ">") {
48
+ state.token = css;
49
+ state.localMode = cssMode;
50
+ state.localState = cssMode.startState(htmlMode.indent(state.htmlState, ""));
51
+ }
52
+ return style;
53
+ }
54
+ function maybeBackup(stream, pat, style) {
55
+ var cur = stream.current();
56
+ var close = cur.search(pat), m;
57
+ if (close > -1) stream.backUp(cur.length - close);
58
+ else if (m = cur.match(/<\/?$/)) {
59
+ stream.backUp(cur.length);
60
+ if (!stream.match(pat, false)) stream.match(cur);
61
+ }
62
+ return style;
63
+ }
64
+ function script(stream, state) {
65
+ if (stream.match(/^<\/\s*script\s*>/i, false)) {
66
+ state.token = html;
67
+ state.localState = state.localMode = null;
68
+ return html(stream, state);
69
+ }
70
+ return maybeBackup(stream, /<\/\s*script\s*>/,
71
+ state.localMode.token(stream, state.localState));
72
+ }
73
+ function css(stream, state) {
74
+ if (stream.match(/^<\/\s*style\s*>/i, false)) {
75
+ state.token = html;
76
+ state.localState = state.localMode = null;
77
+ return html(stream, state);
78
+ }
79
+ return maybeBackup(stream, /<\/\s*style\s*>/,
80
+ cssMode.token(stream, state.localState));
81
+ }
82
+
83
+ return {
84
+ startState: function() {
85
+ var state = htmlMode.startState();
86
+ return {token: html, localMode: null, localState: null, htmlState: state};
87
+ },
88
+
89
+ copyState: function(state) {
90
+ if (state.localState)
91
+ var local = CodeMirror.copyState(state.localMode, state.localState);
92
+ return {token: state.token, localMode: state.localMode, localState: local,
93
+ htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};
94
+ },
95
+
96
+ token: function(stream, state) {
97
+ return state.token(stream, state);
98
+ },
99
+
100
+ indent: function(state, textAfter) {
101
+ if (!state.localMode || /^\s*<\//.test(textAfter))
102
+ return htmlMode.indent(state.htmlState, textAfter);
103
+ else if (state.localMode.indent)
104
+ return state.localMode.indent(state.localState, textAfter);
105
+ else
106
+ return CodeMirror.Pass;
107
+ },
108
+
109
+ innerMode: function(state) {
110
+ return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};
111
+ }
112
+ };
113
+ }, "xml", "javascript", "css");
114
+
115
+ CodeMirror.defineMIME("text/html", "htmlmixed");
116
+
117
+ });
@@ -0,0 +1,349 @@
1
+ (function(mod) {
2
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
3
+ mod(require("../../lib/codemirror"));
4
+ else if (typeof define == "function" && define.amd) // AMD
5
+ define(["../../lib/codemirror"], mod);
6
+ else // Plain browser env
7
+ mod(CodeMirror);
8
+ })(function(CodeMirror) {
9
+ "use strict";
10
+
11
+ CodeMirror.defineMode("xml", function(config, parserConfig) {
12
+ var indentUnit = config.indentUnit;
13
+ var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1;
14
+ var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag;
15
+ if (multilineTagIndentPastTag == null) multilineTagIndentPastTag = true;
16
+
17
+ var Kludges = parserConfig.htmlMode ? {
18
+ autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,
19
+ 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,
20
+ 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,
21
+ 'track': true, 'wbr': true},
22
+ implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,
23
+ 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,
24
+ 'th': true, 'tr': true},
25
+ contextGrabbers: {
26
+ 'dd': {'dd': true, 'dt': true},
27
+ 'dt': {'dd': true, 'dt': true},
28
+ 'li': {'li': true},
29
+ 'option': {'option': true, 'optgroup': true},
30
+ 'optgroup': {'optgroup': true},
31
+ 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,
32
+ 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,
33
+ 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,
34
+ 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,
35
+ 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},
36
+ 'rp': {'rp': true, 'rt': true},
37
+ 'rt': {'rp': true, 'rt': true},
38
+ 'tbody': {'tbody': true, 'tfoot': true},
39
+ 'td': {'td': true, 'th': true},
40
+ 'tfoot': {'tbody': true},
41
+ 'th': {'td': true, 'th': true},
42
+ 'thead': {'tbody': true, 'tfoot': true},
43
+ 'tr': {'tr': true}
44
+ },
45
+ doNotIndent: {"pre": true},
46
+ allowUnquoted: true,
47
+ allowMissing: true,
48
+ caseFold: true
49
+ } : {
50
+ autoSelfClosers: {},
51
+ implicitlyClosed: {},
52
+ contextGrabbers: {},
53
+ doNotIndent: {},
54
+ allowUnquoted: false,
55
+ allowMissing: false,
56
+ caseFold: false
57
+ };
58
+ var alignCDATA = parserConfig.alignCDATA;
59
+
60
+ // Return variables for tokenizers
61
+ var tagName, type, setStyle;
62
+
63
+ function inText(stream, state) {
64
+ function chain(parser) {
65
+ state.tokenize = parser;
66
+ return parser(stream, state);
67
+ }
68
+
69
+ var ch = stream.next();
70
+ if (ch == "<") {
71
+ if (stream.eat("!")) {
72
+ if (stream.eat("[")) {
73
+ if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>"));
74
+ else return null;
75
+ } else if (stream.match("--")) {
76
+ return chain(inBlock("comment", "-->"));
77
+ } else if (stream.match("DOCTYPE", true, true)) {
78
+ stream.eatWhile(/[\w\._\-]/);
79
+ return chain(doctype(1));
80
+ } else {
81
+ return null;
82
+ }
83
+ } else if (stream.eat("?")) {
84
+ stream.eatWhile(/[\w\._\-]/);
85
+ state.tokenize = inBlock("meta", "?>");
86
+ return "meta";
87
+ } else {
88
+ var isClose = stream.eat("/");
89
+ tagName = "";
90
+ var c;
91
+ while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c;
92
+ if (Kludges.caseFold) tagName = tagName.toLowerCase();
93
+ if (!tagName) return "tag error";
94
+ type = isClose ? "closeTag" : "openTag";
95
+ state.tokenize = inTag;
96
+ return "tag";
97
+ }
98
+ } else if (ch == "&") {
99
+ var ok;
100
+ if (stream.eat("#")) {
101
+ if (stream.eat("x")) {
102
+ ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";");
103
+ } else {
104
+ ok = stream.eatWhile(/[\d]/) && stream.eat(";");
105
+ }
106
+ } else {
107
+ ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";");
108
+ }
109
+ return ok ? "atom" : "error";
110
+ } else {
111
+ stream.eatWhile(/[^&<]/);
112
+ return null;
113
+ }
114
+ }
115
+
116
+ function inTag(stream, state) {
117
+ var ch = stream.next();
118
+ if (ch == ">" || (ch == "/" && stream.eat(">"))) {
119
+ state.tokenize = inText;
120
+ type = ch == ">" ? "endTag" : "selfcloseTag";
121
+ return "tag";
122
+ } else if (ch == "=") {
123
+ type = "equals";
124
+ return null;
125
+ } else if (ch == "<") {
126
+ state.tokenize = inText;
127
+ state.state = baseState;
128
+ state.tagName = state.tagStart = null;
129
+ var next = state.tokenize(stream, state);
130
+ return next ? next + " error" : "error";
131
+ } else if (/[\'\"]/.test(ch)) {
132
+ state.tokenize = inAttribute(ch);
133
+ state.stringStartCol = stream.column();
134
+ return state.tokenize(stream, state);
135
+ } else {
136
+ stream.eatWhile(/[^\s\u00a0=<>\"\']/);
137
+ return "word";
138
+ }
139
+ }
140
+
141
+ function inAttribute(quote) {
142
+ var closure = function(stream, state) {
143
+ while (!stream.eol()) {
144
+ if (stream.next() == quote) {
145
+ state.tokenize = inTag;
146
+ break;
147
+ }
148
+ }
149
+ return "string";
150
+ };
151
+ closure.isInAttribute = true;
152
+ return closure;
153
+ }
154
+
155
+ function inBlock(style, terminator) {
156
+ return function(stream, state) {
157
+ while (!stream.eol()) {
158
+ if (stream.match(terminator)) {
159
+ state.tokenize = inText;
160
+ break;
161
+ }
162
+ stream.next();
163
+ }
164
+ return style;
165
+ };
166
+ }
167
+ function doctype(depth) {
168
+ return function(stream, state) {
169
+ var ch;
170
+ while ((ch = stream.next()) != null) {
171
+ if (ch == "<") {
172
+ state.tokenize = doctype(depth + 1);
173
+ return state.tokenize(stream, state);
174
+ } else if (ch == ">") {
175
+ if (depth == 1) {
176
+ state.tokenize = inText;
177
+ break;
178
+ } else {
179
+ state.tokenize = doctype(depth - 1);
180
+ return state.tokenize(stream, state);
181
+ }
182
+ }
183
+ }
184
+ return "meta";
185
+ };
186
+ }
187
+
188
+ function Context(state, tagName, startOfLine) {
189
+ this.prev = state.context;
190
+ this.tagName = tagName;
191
+ this.indent = state.indented;
192
+ this.startOfLine = startOfLine;
193
+ if (Kludges.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))
194
+ this.noIndent = true;
195
+ }
196
+ function popContext(state) {
197
+ if (state.context) state.context = state.context.prev;
198
+ }
199
+ function maybePopContext(state, nextTagName) {
200
+ var parentTagName;
201
+ while (true) {
202
+ if (!state.context) {
203
+ return;
204
+ }
205
+ parentTagName = state.context.tagName;
206
+ if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) ||
207
+ !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {
208
+ return;
209
+ }
210
+ popContext(state);
211
+ }
212
+ }
213
+
214
+ function baseState(type, stream, state) {
215
+ if (type == "openTag") {
216
+ state.tagName = tagName;
217
+ state.tagStart = stream.column();
218
+ return attrState;
219
+ } else if (type == "closeTag") {
220
+ var err = false;
221
+ if (state.context) {
222
+ if (state.context.tagName != tagName) {
223
+ if (Kludges.implicitlyClosed.hasOwnProperty(state.context.tagName))
224
+ popContext(state);
225
+ err = !state.context || state.context.tagName != tagName;
226
+ }
227
+ } else {
228
+ err = true;
229
+ }
230
+ if (err) setStyle = "error";
231
+ return err ? closeStateErr : closeState;
232
+ } else {
233
+ return baseState;
234
+ }
235
+ }
236
+
237
+ function closeState(type, _stream, state) {
238
+ if (type != "endTag") {
239
+ setStyle = "error";
240
+ return closeState;
241
+ }
242
+ popContext(state);
243
+ return baseState;
244
+ }
245
+ function closeStateErr(type, stream, state) {
246
+ setStyle = "error";
247
+ return closeState(type, stream, state);
248
+ }
249
+
250
+ function attrState(type, _stream, state) {
251
+ if (type == "word") {
252
+ setStyle = "attribute";
253
+ return attrEqState;
254
+ } else if (type == "endTag" || type == "selfcloseTag") {
255
+ var tagName = state.tagName, tagStart = state.tagStart;
256
+ state.tagName = state.tagStart = null;
257
+ if (type == "selfcloseTag" ||
258
+ Kludges.autoSelfClosers.hasOwnProperty(tagName)) {
259
+ maybePopContext(state, tagName);
260
+ } else {
261
+ maybePopContext(state, tagName);
262
+ state.context = new Context(state, tagName, tagStart == state.indented);
263
+ }
264
+ return baseState;
265
+ }
266
+ setStyle = "error";
267
+ return attrState;
268
+ }
269
+ function attrEqState(type, stream, state) {
270
+ if (type == "equals") return attrValueState;
271
+ if (!Kludges.allowMissing) setStyle = "error";
272
+ return attrState(type, stream, state);
273
+ }
274
+ function attrValueState(type, stream, state) {
275
+ if (type == "string") return attrContinuedState;
276
+ if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return attrState;}
277
+ setStyle = "error";
278
+ return attrState(type, stream, state);
279
+ }
280
+ function attrContinuedState(type, stream, state) {
281
+ if (type == "string") return attrContinuedState;
282
+ return attrState(type, stream, state);
283
+ }
284
+
285
+ return {
286
+ startState: function() {
287
+ return {tokenize: inText,
288
+ state: baseState,
289
+ indented: 0,
290
+ tagName: null, tagStart: null,
291
+ context: null};
292
+ },
293
+
294
+ token: function(stream, state) {
295
+ if (!state.tagName && stream.sol())
296
+ state.indented = stream.indentation();
297
+
298
+ if (stream.eatSpace()) return null;
299
+ tagName = type = null;
300
+ var style = state.tokenize(stream, state);
301
+ if ((style || type) && style != "comment") {
302
+ setStyle = null;
303
+ state.state = state.state(type || style, stream, state);
304
+ if (setStyle)
305
+ style = setStyle == "error" ? style + " error" : setStyle;
306
+ }
307
+ return style;
308
+ },
309
+
310
+ indent: function(state, textAfter, fullLine) {
311
+ var context = state.context;
312
+ // Indent multi-line strings (e.g. css).
313
+ if (state.tokenize.isInAttribute) {
314
+ return state.stringStartCol + 1;
315
+ }
316
+ if (context && context.noIndent) return CodeMirror.Pass;
317
+ if (state.tokenize != inTag && state.tokenize != inText)
318
+ return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0;
319
+ // Indent the starts of attribute names.
320
+ if (state.tagName) {
321
+ if (multilineTagIndentPastTag)
322
+ return state.tagStart + state.tagName.length + 2;
323
+ else
324
+ return state.tagStart + indentUnit * multilineTagIndentFactor;
325
+ }
326
+ if (alignCDATA && /<!\[CDATA\[/.test(textAfter)) return 0;
327
+ if (context && /^<\//.test(textAfter))
328
+ context = context.prev;
329
+ while (context && !context.startOfLine)
330
+ context = context.prev;
331
+ if (context) return context.indent + indentUnit;
332
+ else return 0;
333
+ },
334
+
335
+ electricChars: "/",
336
+ blockCommentStart: "<!--",
337
+ blockCommentEnd: "-->",
338
+
339
+ configuration: parserConfig.htmlMode ? "html" : "xml",
340
+ helperType: parserConfig.htmlMode ? "html" : "xml"
341
+ };
342
+ });
343
+
344
+ CodeMirror.defineMIME("text/xml", "xml");
345
+ CodeMirror.defineMIME("application/xml", "xml");
346
+ if (!CodeMirror.mimeModes.hasOwnProperty("text/html"))
347
+ CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true});
348
+
349
+ });
@@ -0,0 +1,114 @@
1
+ # JSHint, A Static Code Analysis Tool for JavaScript
2
+
3
+ \[ [Use it online](http://jshint.com/) •
4
+ [Docs](http://jshint.com/docs/) • [FAQ](http://jshint.com/docs/faq) •
5
+ [Install](http://jshint.com/install/) •
6
+ [Contribute](http://jshint.com/contribute/) •
7
+ [Blog](http://jshint.com/blog/) • [Twitter](https://twitter.com/jshint/) \]
8
+
9
+ [![NPM version](https://img.shields.io/npm/v/jshint.svg?style=flat)](https://www.npmjs.com/package/jshint)
10
+ [![Linux Build Status](https://img.shields.io/travis/jshint/jshint/master.svg?style=flat&label=Linux%20build)](https://travis-ci.org/jshint/jshint)
11
+ [![Windows Build status](https://img.shields.io/appveyor/ci/jshint/jshint/master.svg?style=flat&label=Windows%20build)](https://ci.appveyor.com/project/jshint/jshint/branch/master)
12
+ [![Coverage Status](https://img.shields.io/coveralls/jshint/jshint.svg?style=flat)](https://coveralls.io/r/jshint/jshint?branch=master)
13
+
14
+ JSHint is a community-driven tool that detects errors and potential problems in
15
+ JavaScript code. Since JSHint is so flexible, you can easily adjust it in
16
+ the environment you expect your code to execute. JSHint is publicly available
17
+ and will always stay this way.
18
+
19
+ ## Our goal
20
+
21
+ The project aims to help JavaScript developers write complex programs
22
+ without worrying about typos and language gotchas.
23
+
24
+ Any code base eventually becomes huge at some point, so simple mistakes — that
25
+ would not show themselves when written — can become show stoppers and add
26
+ extra hours of debugging. So, static code analysis tools come into play
27
+ and help developers spot such problems. JSHint scans a program written in
28
+ JavaScript and reports about commonly made mistakes and potential bugs. The
29
+ potential problem could be a syntax error, a bug due to an implicit type
30
+ conversion, a leaking variable, or something else entirely.
31
+
32
+ Only 15% of all programs linted on [jshint.com](http://jshint.com) pass the
33
+ JSHint checks. In all other cases, JSHint finds some red flags that could've
34
+ been bugs or potential problems.
35
+
36
+ Please note, that while static code analysis tools can spot many different kind
37
+ of mistakes, it can't detect if your program is correct, fast or has memory
38
+ leaks. You should always combine tools like JSHint with unit and functional
39
+ tests as well as with code reviews.
40
+
41
+ ## Reporting a bug
42
+
43
+ To report a bug simply create a
44
+ [new GitHub Issue](https://github.com/jshint/jshint/issues/new) and describe
45
+ your problem or suggestion. We welcome all kinds of feedback regarding
46
+ JSHint including but not limited to:
47
+
48
+ * When JSHint doesn't work as expected
49
+ * When JSHint complains about valid JavaScript code that works in all browsers
50
+ * When you simply want a new option or feature
51
+
52
+ Before reporting a bug, please look around to see if there are any open or closed tickets
53
+ that discuss your issue, and remember the wisdom: pull request > bug report > tweet.
54
+
55
+ ## Who uses JSHint?
56
+
57
+ Engineers from these companies and projects use JSHint:
58
+
59
+ * [Mozilla](https://www.mozilla.org/)
60
+ * [Wikipedia](https://wikipedia.org/)
61
+ * [Facebook](https://facebook.com/)
62
+ * [Twitter](https://twitter.com/)
63
+ * [Disqus](https://disqus.com/)
64
+ * [Medium](https://medium.com/)
65
+ * [Yahoo!](https://yahoo.com/)
66
+ * [SmugMug](http://smugmug.com/)
67
+ * [jQuery UI](https://jqueryui.com/) ([Source](https://github.com/jquery/jquery-ui/blob/master/package.json))
68
+ * [jQuery Mobile](https://jquerymobile.com/) ([Source](https://github.com/jquery/jquery-mobile/blob/master/package.json#))
69
+ * [Coursera](http://coursera.com/)
70
+ * [RedHat](http://redhat.com/)
71
+ * [SoundCloud](http://soundcloud.com/)
72
+ * [Nodejitsu](http://nodejitsu.com/)
73
+ * [Yelp](https://yelp.com/)
74
+ * [Find My Electric](https://www.findmyelectric.com/)
75
+ * [Voxer](http://voxer.com/)
76
+ * [EnyoJS](http://enyojs.com/)
77
+ * [QuickenLoans](http://quickenloans.com/)
78
+ * [Cloud9](http://c9.io/)
79
+ * [CodeClimate](https://codeclimate.com/)
80
+ * [Zendesk](http://zendesk.com/)
81
+ * [Google](https://www.google.com/)
82
+ * [Codacy](https://www.codacy.com) [ref](https://support.codacy.com/hc/en-us/articles/207995005-Special-Thanks)
83
+ * [Spotify](https://www.spotify.com)
84
+
85
+ And many more!
86
+
87
+ ## License
88
+
89
+ JSHint is licensed under [the MIT Expat
90
+ license](https://www.gnu.org/licenses/license-list.html#Expat).
91
+
92
+ Prior to version 2.12.0 (release in August 2020), JSHint was partially licensed
93
+ under the non-free [JSON
94
+ license](https://www.gnu.org/licenses/license-list.html#JSON). [The 2020
95
+ Relicensing document](http://jshint.com/relicensing-2020/) details the process
96
+ maintainers followed to change the license.
97
+
98
+ ## The JSHint Team
99
+
100
+ JSHint is currently maintained by [Rick Waldron](https://github.com/rwaldron/),
101
+ [Caitlin Potter](https://github.com/caitp/), [Mike
102
+ Pennisi](https://github.com/jugglinmike/), and [Luke
103
+ Page](https://github.com/lukeapage). You can reach them via admin@jshint.org.
104
+
105
+ ## Previous Maintainers
106
+
107
+ Originating from the JSLint project in 2010, JSHint has been maintained by a
108
+ number of dedicated individuals. In chronological order, they are: Douglas
109
+ Crockford, Anton Kovalyov, and Mike Sherov. We appreciate their long-term
110
+ commitment!
111
+
112
+ ## Thank you!
113
+
114
+ We really appreciate all kinds of feedback and contributions. Thanks for using and supporting JSHint!