poly-cms 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (460) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/Gemfile +27 -0
  4. data/Gemfile.lock +95 -0
  5. data/README.md +3 -0
  6. data/Rakefile +45 -0
  7. data/bin/poly +88 -0
  8. data/config.ru +3 -0
  9. data/core/admin/assets/images/icons/cache-clear.svg +11 -0
  10. data/core/admin/assets/images/icons/delete-dark.svg +10 -0
  11. data/core/admin/assets/images/icons/delete.svg +10 -0
  12. data/core/admin/assets/images/icons/handle.svg +12 -0
  13. data/core/admin/assets/images/icons/logout.svg +13 -0
  14. data/core/admin/assets/images/icons/move.svg +10 -0
  15. data/core/admin/assets/images/icons/new.svg +9 -0
  16. data/core/admin/assets/images/icons/prompt.svg +11 -0
  17. data/core/admin/assets/images/icons/refresh.svg +40 -0
  18. data/core/admin/assets/images/icons/save.svg +7 -0
  19. data/core/admin/assets/images/poly-small-boxed.svg +51 -0
  20. data/core/admin/assets/images/poly-small.svg +52 -0
  21. data/core/admin/assets/images/poly.svg +36 -0
  22. data/core/admin/assets/js/app/file-ext.js +15 -0
  23. data/core/admin/assets/js/app/views/editor.js +300 -0
  24. data/core/admin/assets/js/app/views/git.js +65 -0
  25. data/core/admin/assets/js/app/views/main.js +59 -0
  26. data/core/admin/assets/js/main.js +44 -0
  27. data/core/admin/assets/js/routes.js +25 -0
  28. data/core/admin/assets/js/vendor/backbone.js +4 -0
  29. data/core/admin/assets/js/vendor/codemirror/.gitattributes +8 -0
  30. data/core/admin/assets/js/vendor/codemirror/.gitignore +6 -0
  31. data/core/admin/assets/js/vendor/codemirror/.travis.yml +3 -0
  32. data/core/admin/assets/js/vendor/codemirror/addon/comment/comment.js +145 -0
  33. data/core/admin/assets/js/vendor/codemirror/addon/comment/continuecomment.js +54 -0
  34. data/core/admin/assets/js/vendor/codemirror/addon/dialog/dialog.css +32 -0
  35. data/core/admin/assets/js/vendor/codemirror/addon/dialog/dialog.js +80 -0
  36. data/core/admin/assets/js/vendor/codemirror/addon/display/fullscreen.css +6 -0
  37. data/core/admin/assets/js/vendor/codemirror/addon/display/fullscreen.js +30 -0
  38. data/core/admin/assets/js/vendor/codemirror/addon/display/placeholder.js +54 -0
  39. data/core/admin/assets/js/vendor/codemirror/addon/edit/closebrackets.js +82 -0
  40. data/core/admin/assets/js/vendor/codemirror/addon/edit/closetag.js +87 -0
  41. data/core/admin/assets/js/vendor/codemirror/addon/edit/continuelist.js +25 -0
  42. data/core/admin/assets/js/vendor/codemirror/addon/edit/matchbrackets.js +86 -0
  43. data/core/admin/assets/js/vendor/codemirror/addon/edit/matchtags.js +56 -0
  44. data/core/admin/assets/js/vendor/codemirror/addon/edit/trailingspace.js +15 -0
  45. data/core/admin/assets/js/vendor/codemirror/addon/fold/brace-fold.js +93 -0
  46. data/core/admin/assets/js/vendor/codemirror/addon/fold/comment-fold.js +40 -0
  47. data/core/admin/assets/js/vendor/codemirror/addon/fold/foldcode.js +75 -0
  48. data/core/admin/assets/js/vendor/codemirror/addon/fold/foldgutter.css +21 -0
  49. data/core/admin/assets/js/vendor/codemirror/addon/fold/foldgutter.js +124 -0
  50. data/core/admin/assets/js/vendor/codemirror/addon/fold/indent-fold.js +26 -0
  51. data/core/admin/assets/js/vendor/codemirror/addon/fold/xml-fold.js +167 -0
  52. data/core/admin/assets/js/vendor/codemirror/addon/hint/anyword-hint.js +34 -0
  53. data/core/admin/assets/js/vendor/codemirror/addon/hint/css-hint.js +50 -0
  54. data/core/admin/assets/js/vendor/codemirror/addon/hint/html-hint.js +337 -0
  55. data/core/admin/assets/js/vendor/codemirror/addon/hint/javascript-hint.js +130 -0
  56. data/core/admin/assets/js/vendor/codemirror/addon/hint/pig-hint.js +121 -0
  57. data/core/admin/assets/js/vendor/codemirror/addon/hint/python-hint.js +95 -0
  58. data/core/admin/assets/js/vendor/codemirror/addon/hint/show-hint.css +38 -0
  59. data/core/admin/assets/js/vendor/codemirror/addon/hint/show-hint.js +274 -0
  60. data/core/admin/assets/js/vendor/codemirror/addon/hint/sql-hint.js +105 -0
  61. data/core/admin/assets/js/vendor/codemirror/addon/hint/xml-hint.js +69 -0
  62. data/core/admin/assets/js/vendor/codemirror/addon/lint/coffeescript-lint.js +27 -0
  63. data/core/admin/assets/js/vendor/codemirror/addon/lint/css-lint.js +19 -0
  64. data/core/admin/assets/js/vendor/codemirror/addon/lint/javascript-lint.js +126 -0
  65. data/core/admin/assets/js/vendor/codemirror/addon/lint/json-lint.js +17 -0
  66. data/core/admin/assets/js/vendor/codemirror/addon/lint/lint.css +73 -0
  67. data/core/admin/assets/js/vendor/codemirror/addon/lint/lint.js +203 -0
  68. data/core/admin/assets/js/vendor/codemirror/addon/merge/dep/diff_match_patch.js +50 -0
  69. data/core/admin/assets/js/vendor/codemirror/addon/merge/merge.css +92 -0
  70. data/core/admin/assets/js/vendor/codemirror/addon/merge/merge.js +474 -0
  71. data/core/admin/assets/js/vendor/codemirror/addon/mode/loadmode.js +51 -0
  72. data/core/admin/assets/js/vendor/codemirror/addon/mode/multiplex.js +101 -0
  73. data/core/admin/assets/js/vendor/codemirror/addon/mode/multiplex_test.js +30 -0
  74. data/core/admin/assets/js/vendor/codemirror/addon/mode/overlay.js +59 -0
  75. data/core/admin/assets/js/vendor/codemirror/addon/runmode/colorize.js +29 -0
  76. data/core/admin/assets/js/vendor/codemirror/addon/runmode/runmode-standalone.js +136 -0
  77. data/core/admin/assets/js/vendor/codemirror/addon/runmode/runmode.js +56 -0
  78. data/core/admin/assets/js/vendor/codemirror/addon/runmode/runmode.node.js +103 -0
  79. data/core/admin/assets/js/vendor/codemirror/addon/scroll/scrollpastend.js +34 -0
  80. data/core/admin/assets/js/vendor/codemirror/addon/search/match-highlighter.js +91 -0
  81. data/core/admin/assets/js/vendor/codemirror/addon/search/search.js +133 -0
  82. data/core/admin/assets/js/vendor/codemirror/addon/search/searchcursor.js +143 -0
  83. data/core/admin/assets/js/vendor/codemirror/addon/selection/active-line.js +39 -0
  84. data/core/admin/assets/js/vendor/codemirror/addon/selection/mark-selection.js +108 -0
  85. data/core/admin/assets/js/vendor/codemirror/addon/tern/tern.css +85 -0
  86. data/core/admin/assets/js/vendor/codemirror/addon/tern/tern.js +632 -0
  87. data/core/admin/assets/js/vendor/codemirror/addon/tern/worker.js +41 -0
  88. data/core/admin/assets/js/vendor/codemirror/addon/wrap/hardwrap.js +99 -0
  89. data/core/admin/assets/js/vendor/codemirror/bin/authors.sh +6 -0
  90. data/core/admin/assets/js/vendor/codemirror/bin/compress +92 -0
  91. data/core/admin/assets/js/vendor/codemirror/bin/lint +16 -0
  92. data/core/admin/assets/js/vendor/codemirror/bin/source-highlight +61 -0
  93. data/core/admin/assets/js/vendor/codemirror/bower.json +15 -0
  94. data/core/admin/assets/js/vendor/codemirror/demo/activeline.html +78 -0
  95. data/core/admin/assets/js/vendor/codemirror/demo/anywordhint.html +79 -0
  96. data/core/admin/assets/js/vendor/codemirror/demo/bidi.html +74 -0
  97. data/core/admin/assets/js/vendor/codemirror/demo/btree.html +86 -0
  98. data/core/admin/assets/js/vendor/codemirror/demo/buffers.html +109 -0
  99. data/core/admin/assets/js/vendor/codemirror/demo/changemode.html +59 -0
  100. data/core/admin/assets/js/vendor/codemirror/demo/closebrackets.html +63 -0
  101. data/core/admin/assets/js/vendor/codemirror/demo/closetag.html +40 -0
  102. data/core/admin/assets/js/vendor/codemirror/demo/complete.html +80 -0
  103. data/core/admin/assets/js/vendor/codemirror/demo/emacs.html +75 -0
  104. data/core/admin/assets/js/vendor/codemirror/demo/folding.html +75 -0
  105. data/core/admin/assets/js/vendor/codemirror/demo/fullscreen.html +130 -0
  106. data/core/admin/assets/js/vendor/codemirror/demo/hardwrap.html +69 -0
  107. data/core/admin/assets/js/vendor/codemirror/demo/html5complete.html +54 -0
  108. data/core/admin/assets/js/vendor/codemirror/demo/indentwrap.html +58 -0
  109. data/core/admin/assets/js/vendor/codemirror/demo/lint.html +171 -0
  110. data/core/admin/assets/js/vendor/codemirror/demo/loadmode.html +49 -0
  111. data/core/admin/assets/js/vendor/codemirror/demo/marker.html +52 -0
  112. data/core/admin/assets/js/vendor/codemirror/demo/markselection.html +45 -0
  113. data/core/admin/assets/js/vendor/codemirror/demo/matchhighlighter.html +47 -0
  114. data/core/admin/assets/js/vendor/codemirror/demo/matchtags.html +49 -0
  115. data/core/admin/assets/js/vendor/codemirror/demo/merge.html +82 -0
  116. data/core/admin/assets/js/vendor/codemirror/demo/multiplex.html +75 -0
  117. data/core/admin/assets/js/vendor/codemirror/demo/mustache.html +68 -0
  118. data/core/admin/assets/js/vendor/codemirror/demo/placeholder.html +45 -0
  119. data/core/admin/assets/js/vendor/codemirror/demo/preview.html +88 -0
  120. data/core/admin/assets/js/vendor/codemirror/demo/resize.html +58 -0
  121. data/core/admin/assets/js/vendor/codemirror/demo/runmode.html +62 -0
  122. data/core/admin/assets/js/vendor/codemirror/demo/search.html +94 -0
  123. data/core/admin/assets/js/vendor/codemirror/demo/spanaffectswrapping_shim.html +85 -0
  124. data/core/admin/assets/js/vendor/codemirror/demo/tern.html +128 -0
  125. data/core/admin/assets/js/vendor/codemirror/demo/theme.html +121 -0
  126. data/core/admin/assets/js/vendor/codemirror/demo/trailingspace.html +48 -0
  127. data/core/admin/assets/js/vendor/codemirror/demo/variableheight.html +61 -0
  128. data/core/admin/assets/js/vendor/codemirror/demo/vim.html +74 -0
  129. data/core/admin/assets/js/vendor/codemirror/demo/visibletabs.html +62 -0
  130. data/core/admin/assets/js/vendor/codemirror/demo/widget.html +85 -0
  131. data/core/admin/assets/js/vendor/codemirror/demo/xmlcomplete.html +116 -0
  132. data/core/admin/assets/js/vendor/codemirror/doc/activebookmark.js +42 -0
  133. data/core/admin/assets/js/vendor/codemirror/doc/compress.html +231 -0
  134. data/core/admin/assets/js/vendor/codemirror/doc/docs.css +226 -0
  135. data/core/admin/assets/js/vendor/codemirror/doc/internals.html +503 -0
  136. data/core/admin/assets/js/vendor/codemirror/doc/logo.png +0 -0
  137. data/core/admin/assets/js/vendor/codemirror/doc/logo.svg +147 -0
  138. data/core/admin/assets/js/vendor/codemirror/doc/manual.html +2512 -0
  139. data/core/admin/assets/js/vendor/codemirror/doc/realworld.html +134 -0
  140. data/core/admin/assets/js/vendor/codemirror/doc/releases.html +779 -0
  141. data/core/admin/assets/js/vendor/codemirror/doc/reporting.html +61 -0
  142. data/core/admin/assets/js/vendor/codemirror/doc/upgrade_v2.2.html +96 -0
  143. data/core/admin/assets/js/vendor/codemirror/doc/upgrade_v3.html +230 -0
  144. data/core/admin/assets/js/vendor/codemirror/index.html +192 -0
  145. data/core/admin/assets/js/vendor/codemirror/keymap/emacs.js +387 -0
  146. data/core/admin/assets/js/vendor/codemirror/keymap/extra.js +43 -0
  147. data/core/admin/assets/js/vendor/codemirror/keymap/vim.js +3704 -0
  148. data/core/admin/assets/js/vendor/codemirror/lib/codemirror.css +263 -0
  149. data/core/admin/assets/js/vendor/codemirror/lib/codemirror.js +5910 -0
  150. data/core/admin/assets/js/vendor/codemirror/mode/apl/apl.js +160 -0
  151. data/core/admin/assets/js/vendor/codemirror/mode/apl/index.html +72 -0
  152. data/core/admin/assets/js/vendor/codemirror/mode/asterisk/asterisk.js +183 -0
  153. data/core/admin/assets/js/vendor/codemirror/mode/asterisk/index.html +154 -0
  154. data/core/admin/assets/js/vendor/codemirror/mode/clike/clike.js +362 -0
  155. data/core/admin/assets/js/vendor/codemirror/mode/clike/index.html +195 -0
  156. data/core/admin/assets/js/vendor/codemirror/mode/clike/scala.html +767 -0
  157. data/core/admin/assets/js/vendor/codemirror/mode/clojure/clojure.js +224 -0
  158. data/core/admin/assets/js/vendor/codemirror/mode/clojure/index.html +88 -0
  159. data/core/admin/assets/js/vendor/codemirror/mode/cobol/cobol.js +240 -0
  160. data/core/admin/assets/js/vendor/codemirror/mode/cobol/index.html +210 -0
  161. data/core/admin/assets/js/vendor/codemirror/mode/coffeescript/coffeescript.js +349 -0
  162. data/core/admin/assets/js/vendor/codemirror/mode/coffeescript/index.html +740 -0
  163. data/core/admin/assets/js/vendor/codemirror/mode/commonlisp/commonlisp.js +105 -0
  164. data/core/admin/assets/js/vendor/codemirror/mode/commonlisp/index.html +177 -0
  165. data/core/admin/assets/js/vendor/codemirror/mode/css/css.js +639 -0
  166. data/core/admin/assets/js/vendor/codemirror/mode/css/index.html +70 -0
  167. data/core/admin/assets/js/vendor/codemirror/mode/css/scss.html +157 -0
  168. data/core/admin/assets/js/vendor/codemirror/mode/css/scss_test.js +84 -0
  169. data/core/admin/assets/js/vendor/codemirror/mode/css/test.js +130 -0
  170. data/core/admin/assets/js/vendor/codemirror/mode/d/d.js +205 -0
  171. data/core/admin/assets/js/vendor/codemirror/mode/d/index.html +273 -0
  172. data/core/admin/assets/js/vendor/codemirror/mode/diff/diff.js +32 -0
  173. data/core/admin/assets/js/vendor/codemirror/mode/diff/index.html +117 -0
  174. data/core/admin/assets/js/vendor/codemirror/mode/dtd/dtd.js +127 -0
  175. data/core/admin/assets/js/vendor/codemirror/mode/dtd/index.html +89 -0
  176. data/core/admin/assets/js/vendor/codemirror/mode/ecl/ecl.js +192 -0
  177. data/core/admin/assets/js/vendor/codemirror/mode/ecl/index.html +52 -0
  178. data/core/admin/assets/js/vendor/codemirror/mode/eiffel/eiffel.js +147 -0
  179. data/core/admin/assets/js/vendor/codemirror/mode/eiffel/index.html +430 -0
  180. data/core/admin/assets/js/vendor/codemirror/mode/erlang/erlang.js +484 -0
  181. data/core/admin/assets/js/vendor/codemirror/mode/erlang/index.html +75 -0
  182. data/core/admin/assets/js/vendor/codemirror/mode/fortran/fortran.js +173 -0
  183. data/core/admin/assets/js/vendor/codemirror/mode/fortran/index.html +81 -0
  184. data/core/admin/assets/js/vendor/codemirror/mode/gas/gas.js +330 -0
  185. data/core/admin/assets/js/vendor/codemirror/mode/gas/index.html +68 -0
  186. data/core/admin/assets/js/vendor/codemirror/mode/gfm/gfm.js +97 -0
  187. data/core/admin/assets/js/vendor/codemirror/mode/gfm/index.html +82 -0
  188. data/core/admin/assets/js/vendor/codemirror/mode/gfm/test.js +112 -0
  189. data/core/admin/assets/js/vendor/codemirror/mode/gherkin/gherkin.js +168 -0
  190. data/core/admin/assets/js/vendor/codemirror/mode/gherkin/index.html +48 -0
  191. data/core/admin/assets/js/vendor/codemirror/mode/go/go.js +168 -0
  192. data/core/admin/assets/js/vendor/codemirror/mode/go/index.html +85 -0
  193. data/core/admin/assets/js/vendor/codemirror/mode/groovy/groovy.js +211 -0
  194. data/core/admin/assets/js/vendor/codemirror/mode/groovy/index.html +84 -0
  195. data/core/admin/assets/js/vendor/codemirror/mode/haml/haml.js +153 -0
  196. data/core/admin/assets/js/vendor/codemirror/mode/haml/index.html +79 -0
  197. data/core/admin/assets/js/vendor/codemirror/mode/haml/test.js +94 -0
  198. data/core/admin/assets/js/vendor/codemirror/mode/haskell/haskell.js +250 -0
  199. data/core/admin/assets/js/vendor/codemirror/mode/haskell/index.html +73 -0
  200. data/core/admin/assets/js/vendor/codemirror/mode/haxe/haxe.js +429 -0
  201. data/core/admin/assets/js/vendor/codemirror/mode/haxe/index.html +103 -0
  202. data/core/admin/assets/js/vendor/codemirror/mode/htmlembedded/htmlembedded.js +73 -0
  203. data/core/admin/assets/js/vendor/codemirror/mode/htmlembedded/index.html +60 -0
  204. data/core/admin/assets/js/vendor/codemirror/mode/htmlmixed/htmlmixed.js +104 -0
  205. data/core/admin/assets/js/vendor/codemirror/mode/htmlmixed/index.html +85 -0
  206. data/core/admin/assets/js/vendor/codemirror/mode/http/http.js +98 -0
  207. data/core/admin/assets/js/vendor/codemirror/mode/http/index.html +45 -0
  208. data/core/admin/assets/js/vendor/codemirror/mode/index.html +112 -0
  209. data/core/admin/assets/js/vendor/codemirror/mode/jade/index.html +66 -0
  210. data/core/admin/assets/js/vendor/codemirror/mode/jade/jade.js +90 -0
  211. data/core/admin/assets/js/vendor/codemirror/mode/javascript/index.html +107 -0
  212. data/core/admin/assets/js/vendor/codemirror/mode/javascript/javascript.js +480 -0
  213. data/core/admin/assets/js/vendor/codemirror/mode/javascript/test.js +10 -0
  214. data/core/admin/assets/js/vendor/codemirror/mode/javascript/typescript.html +61 -0
  215. data/core/admin/assets/js/vendor/codemirror/mode/jinja2/index.html +50 -0
  216. data/core/admin/assets/js/vendor/codemirror/mode/jinja2/jinja2.js +42 -0
  217. data/core/admin/assets/js/vendor/codemirror/mode/less/index.html +753 -0
  218. data/core/admin/assets/js/vendor/codemirror/mode/less/less.js +344 -0
  219. data/core/admin/assets/js/vendor/codemirror/mode/livescript/index.html +459 -0
  220. data/core/admin/assets/js/vendor/codemirror/mode/livescript/livescript.js +267 -0
  221. data/core/admin/assets/js/vendor/codemirror/mode/livescript/livescript.ls +266 -0
  222. data/core/admin/assets/js/vendor/codemirror/mode/lua/index.html +86 -0
  223. data/core/admin/assets/js/vendor/codemirror/mode/lua/lua.js +144 -0
  224. data/core/admin/assets/js/vendor/codemirror/mode/markdown/index.html +359 -0
  225. data/core/admin/assets/js/vendor/codemirror/mode/markdown/markdown.js +551 -0
  226. data/core/admin/assets/js/vendor/codemirror/mode/markdown/test.js +656 -0
  227. data/core/admin/assets/js/vendor/codemirror/mode/meta.js +89 -0
  228. data/core/admin/assets/js/vendor/codemirror/mode/mirc/index.html +161 -0
  229. data/core/admin/assets/js/vendor/codemirror/mode/mirc/mirc.js +177 -0
  230. data/core/admin/assets/js/vendor/codemirror/mode/nginx/index.html +181 -0
  231. data/core/admin/assets/js/vendor/codemirror/mode/nginx/nginx.js +163 -0
  232. data/core/admin/assets/js/vendor/codemirror/mode/ntriples/index.html +45 -0
  233. data/core/admin/assets/js/vendor/codemirror/mode/ntriples/ntriples.js +170 -0
  234. data/core/admin/assets/js/vendor/codemirror/mode/ocaml/index.html +146 -0
  235. data/core/admin/assets/js/vendor/codemirror/mode/ocaml/ocaml.js +116 -0
  236. data/core/admin/assets/js/vendor/codemirror/mode/octave/index.html +95 -0
  237. data/core/admin/assets/js/vendor/codemirror/mode/octave/octave.js +118 -0
  238. data/core/admin/assets/js/vendor/codemirror/mode/pascal/index.html +61 -0
  239. data/core/admin/assets/js/vendor/codemirror/mode/pascal/pascal.js +94 -0
  240. data/core/admin/assets/js/vendor/codemirror/mode/perl/index.html +75 -0
  241. data/core/admin/assets/js/vendor/codemirror/mode/perl/perl.js +816 -0
  242. data/core/admin/assets/js/vendor/codemirror/mode/php/index.html +62 -0
  243. data/core/admin/assets/js/vendor/codemirror/mode/php/php.js +132 -0
  244. data/core/admin/assets/js/vendor/codemirror/mode/pig/index.html +55 -0
  245. data/core/admin/assets/js/vendor/codemirror/mode/pig/pig.js +171 -0
  246. data/core/admin/assets/js/vendor/codemirror/mode/properties/index.html +53 -0
  247. data/core/admin/assets/js/vendor/codemirror/mode/properties/properties.js +63 -0
  248. data/core/admin/assets/js/vendor/codemirror/mode/python/index.html +187 -0
  249. data/core/admin/assets/js/vendor/codemirror/mode/python/python.js +368 -0
  250. data/core/admin/assets/js/vendor/codemirror/mode/q/index.html +144 -0
  251. data/core/admin/assets/js/vendor/codemirror/mode/q/q.js +124 -0
  252. data/core/admin/assets/js/vendor/codemirror/mode/r/index.html +86 -0
  253. data/core/admin/assets/js/vendor/codemirror/mode/r/r.js +141 -0
  254. data/core/admin/assets/js/vendor/codemirror/mode/rpm/changes/changes.js +19 -0
  255. data/core/admin/assets/js/vendor/codemirror/mode/rpm/changes/index.html +67 -0
  256. data/core/admin/assets/js/vendor/codemirror/mode/rpm/spec/index.html +114 -0
  257. data/core/admin/assets/js/vendor/codemirror/mode/rpm/spec/spec.css +5 -0
  258. data/core/admin/assets/js/vendor/codemirror/mode/rpm/spec/spec.js +66 -0
  259. data/core/admin/assets/js/vendor/codemirror/mode/rst/index.html +534 -0
  260. data/core/admin/assets/js/vendor/codemirror/mode/rst/rst.js +560 -0
  261. data/core/admin/assets/js/vendor/codemirror/mode/ruby/index.html +185 -0
  262. data/core/admin/assets/js/vendor/codemirror/mode/ruby/ruby.js +247 -0
  263. data/core/admin/assets/js/vendor/codemirror/mode/rust/index.html +61 -0
  264. data/core/admin/assets/js/vendor/codemirror/mode/rust/rust.js +436 -0
  265. data/core/admin/assets/js/vendor/codemirror/mode/sass/index.html +66 -0
  266. data/core/admin/assets/js/vendor/codemirror/mode/sass/sass.js +330 -0
  267. data/core/admin/assets/js/vendor/codemirror/mode/scheme/index.html +77 -0
  268. data/core/admin/assets/js/vendor/codemirror/mode/scheme/scheme.js +232 -0
  269. data/core/admin/assets/js/vendor/codemirror/mode/shell/index.html +66 -0
  270. data/core/admin/assets/js/vendor/codemirror/mode/shell/shell.js +118 -0
  271. data/core/admin/assets/js/vendor/codemirror/mode/sieve/index.html +93 -0
  272. data/core/admin/assets/js/vendor/codemirror/mode/sieve/sieve.js +183 -0
  273. data/core/admin/assets/js/vendor/codemirror/mode/smalltalk/index.html +68 -0
  274. data/core/admin/assets/js/vendor/codemirror/mode/smalltalk/smalltalk.js +151 -0
  275. data/core/admin/assets/js/vendor/codemirror/mode/smarty/index.html +136 -0
  276. data/core/admin/assets/js/vendor/codemirror/mode/smarty/smarty.js +205 -0
  277. data/core/admin/assets/js/vendor/codemirror/mode/smartymixed/index.html +114 -0
  278. data/core/admin/assets/js/vendor/codemirror/mode/smartymixed/smartymixed.js +175 -0
  279. data/core/admin/assets/js/vendor/codemirror/mode/sparql/index.html +54 -0
  280. data/core/admin/assets/js/vendor/codemirror/mode/sparql/sparql.js +145 -0
  281. data/core/admin/assets/js/vendor/codemirror/mode/sql/index.html +75 -0
  282. data/core/admin/assets/js/vendor/codemirror/mode/sql/sql.js +365 -0
  283. data/core/admin/assets/js/vendor/codemirror/mode/stex/index.html +110 -0
  284. data/core/admin/assets/js/vendor/codemirror/mode/stex/stex.js +246 -0
  285. data/core/admin/assets/js/vendor/codemirror/mode/stex/test.js +120 -0
  286. data/core/admin/assets/js/vendor/codemirror/mode/tcl/index.html +143 -0
  287. data/core/admin/assets/js/vendor/codemirror/mode/tcl/tcl.js +131 -0
  288. data/core/admin/assets/js/vendor/codemirror/mode/tiddlywiki/index.html +155 -0
  289. data/core/admin/assets/js/vendor/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  290. data/core/admin/assets/js/vendor/codemirror/mode/tiddlywiki/tiddlywiki.js +353 -0
  291. data/core/admin/assets/js/vendor/codemirror/mode/tiki/index.html +95 -0
  292. data/core/admin/assets/js/vendor/codemirror/mode/tiki/tiki.css +26 -0
  293. data/core/admin/assets/js/vendor/codemirror/mode/tiki/tiki.js +308 -0
  294. data/core/admin/assets/js/vendor/codemirror/mode/toml/index.html +73 -0
  295. data/core/admin/assets/js/vendor/codemirror/mode/toml/toml.js +71 -0
  296. data/core/admin/assets/js/vendor/codemirror/mode/turtle/index.html +51 -0
  297. data/core/admin/assets/js/vendor/codemirror/mode/turtle/turtle.js +145 -0
  298. data/core/admin/assets/js/vendor/codemirror/mode/vb/index.html +103 -0
  299. data/core/admin/assets/js/vendor/codemirror/mode/vb/vb.js +259 -0
  300. data/core/admin/assets/js/vendor/codemirror/mode/vbscript/index.html +55 -0
  301. data/core/admin/assets/js/vendor/codemirror/mode/vbscript/vbscript.js +334 -0
  302. data/core/admin/assets/js/vendor/codemirror/mode/velocity/index.html +119 -0
  303. data/core/admin/assets/js/vendor/codemirror/mode/velocity/velocity.js +186 -0
  304. data/core/admin/assets/js/vendor/codemirror/mode/verilog/index.html +132 -0
  305. data/core/admin/assets/js/vendor/codemirror/mode/verilog/verilog.js +182 -0
  306. data/core/admin/assets/js/vendor/codemirror/mode/xml/index.html +57 -0
  307. data/core/admin/assets/js/vendor/codemirror/mode/xml/xml.js +345 -0
  308. data/core/admin/assets/js/vendor/codemirror/mode/xquery/index.html +210 -0
  309. data/core/admin/assets/js/vendor/codemirror/mode/xquery/test.js +64 -0
  310. data/core/admin/assets/js/vendor/codemirror/mode/xquery/xquery.js +432 -0
  311. data/core/admin/assets/js/vendor/codemirror/mode/yaml/index.html +80 -0
  312. data/core/admin/assets/js/vendor/codemirror/mode/yaml/yaml.js +97 -0
  313. data/core/admin/assets/js/vendor/codemirror/mode/z80/index.html +52 -0
  314. data/core/admin/assets/js/vendor/codemirror/mode/z80/z80.js +85 -0
  315. data/core/admin/assets/js/vendor/codemirror/package.json +19 -0
  316. data/core/admin/assets/js/vendor/codemirror/test/comment_test.js +51 -0
  317. data/core/admin/assets/js/vendor/codemirror/test/doc_test.js +329 -0
  318. data/core/admin/assets/js/vendor/codemirror/test/driver.js +139 -0
  319. data/core/admin/assets/js/vendor/codemirror/test/emacs_test.js +135 -0
  320. data/core/admin/assets/js/vendor/codemirror/test/index.html +209 -0
  321. data/core/admin/assets/js/vendor/codemirror/test/lint/acorn.js +1593 -0
  322. data/core/admin/assets/js/vendor/codemirror/test/lint/lint.js +139 -0
  323. data/core/admin/assets/js/vendor/codemirror/test/lint/walk.js +216 -0
  324. data/core/admin/assets/js/vendor/codemirror/test/mode_test.css +10 -0
  325. data/core/admin/assets/js/vendor/codemirror/test/mode_test.js +200 -0
  326. data/core/admin/assets/js/vendor/codemirror/test/phantom_driver.js +31 -0
  327. data/core/admin/assets/js/vendor/codemirror/test/run.js +34 -0
  328. data/core/admin/assets/js/vendor/codemirror/test/test.js +1562 -0
  329. data/core/admin/assets/js/vendor/codemirror/test/vim_test.js +2391 -0
  330. data/core/admin/assets/js/vendor/codemirror/theme/3024-day.css +34 -0
  331. data/core/admin/assets/js/vendor/codemirror/theme/3024-night.css +34 -0
  332. data/core/admin/assets/js/vendor/codemirror/theme/ambiance-mobile.css +5 -0
  333. data/core/admin/assets/js/vendor/codemirror/theme/ambiance.css +75 -0
  334. data/core/admin/assets/js/vendor/codemirror/theme/base16-dark.css +34 -0
  335. data/core/admin/assets/js/vendor/codemirror/theme/base16-light.css +34 -0
  336. data/core/admin/assets/js/vendor/codemirror/theme/blackboard.css +28 -0
  337. data/core/admin/assets/js/vendor/codemirror/theme/cobalt.css +21 -0
  338. data/core/admin/assets/js/vendor/codemirror/theme/eclipse.css +23 -0
  339. data/core/admin/assets/js/vendor/codemirror/theme/elegant.css +13 -0
  340. data/core/admin/assets/js/vendor/codemirror/theme/erlang-dark.css +30 -0
  341. data/core/admin/assets/js/vendor/codemirror/theme/lesser-dark.css +47 -0
  342. data/core/admin/assets/js/vendor/codemirror/theme/mbo.css +35 -0
  343. data/core/admin/assets/js/vendor/codemirror/theme/midnight.css +43 -0
  344. data/core/admin/assets/js/vendor/codemirror/theme/monokai.css +29 -0
  345. data/core/admin/assets/js/vendor/codemirror/theme/neat.css +12 -0
  346. data/core/admin/assets/js/vendor/codemirror/theme/night.css +24 -0
  347. data/core/admin/assets/js/vendor/codemirror/theme/paraiso-dark.css +34 -0
  348. data/core/admin/assets/js/vendor/codemirror/theme/paraiso-light.css +34 -0
  349. data/core/admin/assets/js/vendor/codemirror/theme/rubyblue.css +23 -0
  350. data/core/admin/assets/js/vendor/codemirror/theme/solarized-mod.css +181 -0
  351. data/core/admin/assets/js/vendor/codemirror/theme/solarized.css +180 -0
  352. data/core/admin/assets/js/vendor/codemirror/theme/the-matrix.css +26 -0
  353. data/core/admin/assets/js/vendor/codemirror/theme/tomorrow-night-eighties.css +34 -0
  354. data/core/admin/assets/js/vendor/codemirror/theme/twilight.css +28 -0
  355. data/core/admin/assets/js/vendor/codemirror/theme/vibrant-ink.css +30 -0
  356. data/core/admin/assets/js/vendor/codemirror/theme/xq-dark.css +49 -0
  357. data/core/admin/assets/js/vendor/codemirror/theme/xq-light.css +43 -0
  358. data/core/admin/assets/js/vendor/fastclick.js +777 -0
  359. data/core/admin/assets/js/vendor/jquery.js +6 -0
  360. data/core/admin/assets/js/vendor/lodash.underscore.js +38 -0
  361. data/core/admin/assets/js/vendor/require.js +36 -0
  362. data/core/admin/assets/scss/bootstrap.scss +18 -0
  363. data/core/admin/assets/scss/modules/_all.scss +7 -0
  364. data/core/admin/assets/scss/modules/_colors.scss +7 -0
  365. data/core/admin/assets/scss/modules/_extensions.scss +24 -0
  366. data/core/admin/assets/scss/modules/_mixins.scss +18 -0
  367. data/core/admin/assets/scss/modules/_susy.scss +7 -0
  368. data/core/admin/assets/scss/partials/_base.scss +33 -0
  369. data/core/admin/assets/scss/partials/_buttons.scss +9 -0
  370. data/core/admin/assets/scss/partials/_links.scss +15 -0
  371. data/core/admin/assets/scss/partials/_main.scss +14 -0
  372. data/core/admin/assets/scss/partials/_typography.scss +15 -0
  373. data/core/admin/assets/scss/sections/_editor.scss +274 -0
  374. data/core/admin/assets/scss/sections/_login.scss +34 -0
  375. data/core/admin/assets/scss/vendor/_normalize.scss +406 -0
  376. data/core/admin/layouts/admin.haml +67 -0
  377. data/core/admin/partials/_head.haml +23 -0
  378. data/core/admin/partials/_tree.haml +3 -0
  379. data/core/admin/partials/_treeitem.haml +4 -0
  380. data/core/admin/settings.yml +4 -0
  381. data/core/app.rb +21 -0
  382. data/core/classes/cached.rb +35 -0
  383. data/core/classes/checker.rb +37 -0
  384. data/core/classes/commit.rb +62 -0
  385. data/core/classes/error.rb +9 -0
  386. data/core/classes/page.rb +165 -0
  387. data/core/classes/partial.rb +13 -0
  388. data/core/classes/path.rb +30 -0
  389. data/core/classes/persona.rb +55 -0
  390. data/core/classes/sassfile.rb +95 -0
  391. data/core/classes/settings.rb +19 -0
  392. data/core/classes/theme.rb +55 -0
  393. data/core/helpers/base.rb +46 -0
  394. data/core/helpers/render.rb +26 -0
  395. data/core/helpers/truncate.rb +17 -0
  396. data/core/routes/admin.rb +139 -0
  397. data/core/routes/assetcompiler.rb +23 -0
  398. data/core/routes/base.rb +22 -0
  399. data/core/routes/bootstrap.rb +35 -0
  400. data/core/routes/cache.rb +52 -0
  401. data/core/routes/deploy.rb +16 -0
  402. data/core/routes/git.rb +23 -0
  403. data/poly.gemspec +29 -0
  404. data/sample/.cabi-data +0 -0
  405. data/sample/data/home/index.haml +22 -0
  406. data/sample/data/other/nav/links.yml +4 -0
  407. data/sample/data/page/about/index.haml +12 -0
  408. data/sample/data/page/contact-us/index.haml +11 -0
  409. data/sample/data/page/dynamic-page/index.haml +14 -0
  410. data/sample/data/page/error/index.haml +8 -0
  411. data/sample/data/page/html/index.html +4 -0
  412. data/sample/data/page/no-front-matter/index.haml +7 -0
  413. data/sample/data/page/not-found/index.haml +8 -0
  414. data/sample/data/page/static-page/index.haml +14 -0
  415. data/sample/data/post/about-life/index.md +12 -0
  416. data/sample/data/post/sample-post/index.haml +12 -0
  417. data/sample/data/post/technology/index.haml +12 -0
  418. data/sample/data/post/the-40-hour-workweek/index.haml +9 -0
  419. data/sample/data/post/things-are-changing/index.haml +9 -0
  420. data/sample/data/post/yet-another-post/index.haml +11 -0
  421. data/sample/plugins/my-plugin/plugin.rb +15 -0
  422. data/sample/settings.yml +21 -0
  423. data/sample/themes/base/assets/css/readme.txt +6 -0
  424. data/sample/themes/base/assets/images/poly.svg +36 -0
  425. data/sample/themes/base/assets/js/app/views/main.js +13 -0
  426. data/sample/themes/base/assets/js/main.js +31 -0
  427. data/sample/themes/base/assets/js/vendor/backbone.js +4 -0
  428. data/sample/themes/base/assets/js/vendor/jquery.js +6 -0
  429. data/sample/themes/base/assets/js/vendor/lodash.underscore.js +38 -0
  430. data/sample/themes/base/assets/js/vendor/require.js +36 -0
  431. data/sample/themes/base/assets/scss/bootstrap.scss +20 -0
  432. data/sample/themes/base/assets/scss/modules/_all.scss +7 -0
  433. data/sample/themes/base/assets/scss/modules/_colors.scss +7 -0
  434. data/sample/themes/base/assets/scss/modules/_extensions.scss +13 -0
  435. data/sample/themes/base/assets/scss/modules/_mixins.scss +11 -0
  436. data/sample/themes/base/assets/scss/modules/_susy.scss +7 -0
  437. data/sample/themes/base/assets/scss/partials/_base.scss +33 -0
  438. data/sample/themes/base/assets/scss/partials/_buttons.scss +0 -0
  439. data/sample/themes/base/assets/scss/partials/_links.scss +15 -0
  440. data/sample/themes/base/assets/scss/partials/_main.scss +39 -0
  441. data/sample/themes/base/assets/scss/partials/_typography.scss +15 -0
  442. data/sample/themes/base/assets/scss/sections/_footer.scss +22 -0
  443. data/sample/themes/base/assets/scss/sections/_header.scss +23 -0
  444. data/sample/themes/base/assets/scss/sections/_home.scss +13 -0
  445. data/sample/themes/base/assets/scss/sections/_pages.scss +11 -0
  446. data/sample/themes/base/assets/scss/vendor/_normalize.scss +406 -0
  447. data/sample/themes/base/layouts/default.haml +14 -0
  448. data/sample/themes/base/layouts/post.haml +15 -0
  449. data/sample/themes/base/partials/_footer.haml +9 -0
  450. data/sample/themes/base/partials/_ga.haml +10 -0
  451. data/sample/themes/base/partials/_head.haml +20 -0
  452. data/sample/themes/base/partials/_header.haml +5 -0
  453. data/sample/themes/base/settings.yml +4 -0
  454. data/test/data/post-receive-hook.json +146 -0
  455. data/test/test_basics.rb +50 -0
  456. data/test/test_data.rb +14 -0
  457. data/test/test_deploy.rb +23 -0
  458. data/test/test_includes.rb +43 -0
  459. data/test/test_page.rb +47 -0
  460. metadata +1049 -0
@@ -0,0 +1,39 @@
1
+ // Because sometimes you need to style the cursor's line.
2
+ //
3
+ // Adds an option 'styleActiveLine' which, when enabled, gives the
4
+ // active line's wrapping <div> the CSS class "CodeMirror-activeline",
5
+ // and gives its background <div> the class "CodeMirror-activeline-background".
6
+
7
+ (function() {
8
+ "use strict";
9
+ var WRAP_CLASS = "CodeMirror-activeline";
10
+ var BACK_CLASS = "CodeMirror-activeline-background";
11
+
12
+ CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) {
13
+ var prev = old && old != CodeMirror.Init;
14
+ if (val && !prev) {
15
+ updateActiveLine(cm);
16
+ cm.on("cursorActivity", updateActiveLine);
17
+ } else if (!val && prev) {
18
+ cm.off("cursorActivity", updateActiveLine);
19
+ clearActiveLine(cm);
20
+ delete cm.state.activeLine;
21
+ }
22
+ });
23
+
24
+ function clearActiveLine(cm) {
25
+ if ("activeLine" in cm.state) {
26
+ cm.removeLineClass(cm.state.activeLine, "wrap", WRAP_CLASS);
27
+ cm.removeLineClass(cm.state.activeLine, "background", BACK_CLASS);
28
+ }
29
+ }
30
+
31
+ function updateActiveLine(cm) {
32
+ var line = cm.getLineHandleVisualStart(cm.getCursor().line);
33
+ if (cm.state.activeLine == line) return;
34
+ clearActiveLine(cm);
35
+ cm.addLineClass(line, "wrap", WRAP_CLASS);
36
+ cm.addLineClass(line, "background", BACK_CLASS);
37
+ cm.state.activeLine = line;
38
+ }
39
+ })();
@@ -0,0 +1,108 @@
1
+ // Because sometimes you need to mark the selected *text*.
2
+ //
3
+ // Adds an option 'styleSelectedText' which, when enabled, gives
4
+ // selected text the CSS class given as option value, or
5
+ // "CodeMirror-selectedtext" when the value is not a string.
6
+
7
+ (function() {
8
+ "use strict";
9
+
10
+ CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) {
11
+ var prev = old && old != CodeMirror.Init;
12
+ if (val && !prev) {
13
+ cm.state.markedSelection = [];
14
+ cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext";
15
+ reset(cm);
16
+ cm.on("cursorActivity", onCursorActivity);
17
+ cm.on("change", onChange);
18
+ } else if (!val && prev) {
19
+ cm.off("cursorActivity", onCursorActivity);
20
+ cm.off("change", onChange);
21
+ clear(cm);
22
+ cm.state.markedSelection = cm.state.markedSelectionStyle = null;
23
+ }
24
+ });
25
+
26
+ function onCursorActivity(cm) {
27
+ cm.operation(function() { update(cm); });
28
+ }
29
+
30
+ function onChange(cm) {
31
+ if (cm.state.markedSelection.length)
32
+ cm.operation(function() { clear(cm); });
33
+ }
34
+
35
+ var CHUNK_SIZE = 8;
36
+ var Pos = CodeMirror.Pos;
37
+
38
+ function cmp(pos1, pos2) {
39
+ return pos1.line - pos2.line || pos1.ch - pos2.ch;
40
+ }
41
+
42
+ function coverRange(cm, from, to, addAt) {
43
+ if (cmp(from, to) == 0) return;
44
+ var array = cm.state.markedSelection;
45
+ var cls = cm.state.markedSelectionStyle;
46
+ for (var line = from.line;;) {
47
+ var start = line == from.line ? from : Pos(line, 0);
48
+ var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;
49
+ var end = atEnd ? to : Pos(endLine, 0);
50
+ var mark = cm.markText(start, end, {className: cls});
51
+ if (addAt == null) array.push(mark);
52
+ else array.splice(addAt++, 0, mark);
53
+ if (atEnd) break;
54
+ line = endLine;
55
+ }
56
+ }
57
+
58
+ function clear(cm) {
59
+ var array = cm.state.markedSelection;
60
+ for (var i = 0; i < array.length; ++i) array[i].clear();
61
+ array.length = 0;
62
+ }
63
+
64
+ function reset(cm) {
65
+ clear(cm);
66
+ var from = cm.getCursor("start"), to = cm.getCursor("end");
67
+ coverRange(cm, from, to);
68
+ }
69
+
70
+ function update(cm) {
71
+ var from = cm.getCursor("start"), to = cm.getCursor("end");
72
+ if (cmp(from, to) == 0) return clear(cm);
73
+
74
+ var array = cm.state.markedSelection;
75
+ if (!array.length) return coverRange(cm, from, to);
76
+
77
+ var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();
78
+ if (!coverStart || !coverEnd || to.line - from.line < CHUNK_SIZE ||
79
+ cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)
80
+ return reset(cm);
81
+
82
+ while (cmp(from, coverStart.from) > 0) {
83
+ array.shift().clear();
84
+ coverStart = array[0].find();
85
+ }
86
+ if (cmp(from, coverStart.from) < 0) {
87
+ if (coverStart.to.line - from.line < CHUNK_SIZE) {
88
+ array.shift().clear();
89
+ coverRange(cm, from, coverStart.to, 0);
90
+ } else {
91
+ coverRange(cm, from, coverStart.from, 0);
92
+ }
93
+ }
94
+
95
+ while (cmp(to, coverEnd.to) < 0) {
96
+ array.pop().clear();
97
+ coverEnd = array[array.length - 1].find();
98
+ }
99
+ if (cmp(to, coverEnd.to) > 0) {
100
+ if (to.line - coverEnd.from.line < CHUNK_SIZE) {
101
+ array.pop().clear();
102
+ coverRange(cm, coverEnd.from, to);
103
+ } else {
104
+ coverRange(cm, coverEnd.to, to);
105
+ }
106
+ }
107
+ }
108
+ })();
@@ -0,0 +1,85 @@
1
+ .CodeMirror-Tern-completion {
2
+ padding-left: 22px;
3
+ position: relative;
4
+ }
5
+ .CodeMirror-Tern-completion:before {
6
+ position: absolute;
7
+ left: 2px;
8
+ bottom: 2px;
9
+ border-radius: 50%;
10
+ font-size: 12px;
11
+ font-weight: bold;
12
+ height: 15px;
13
+ width: 15px;
14
+ line-height: 16px;
15
+ text-align: center;
16
+ color: white;
17
+ -moz-box-sizing: border-box;
18
+ box-sizing: border-box;
19
+ }
20
+ .CodeMirror-Tern-completion-unknown:before {
21
+ content: "?";
22
+ background: #4bb;
23
+ }
24
+ .CodeMirror-Tern-completion-object:before {
25
+ content: "O";
26
+ background: #77c;
27
+ }
28
+ .CodeMirror-Tern-completion-fn:before {
29
+ content: "F";
30
+ background: #7c7;
31
+ }
32
+ .CodeMirror-Tern-completion-array:before {
33
+ content: "A";
34
+ background: #c66;
35
+ }
36
+ .CodeMirror-Tern-completion-number:before {
37
+ content: "1";
38
+ background: #999;
39
+ }
40
+ .CodeMirror-Tern-completion-string:before {
41
+ content: "S";
42
+ background: #999;
43
+ }
44
+ .CodeMirror-Tern-completion-bool:before {
45
+ content: "B";
46
+ background: #999;
47
+ }
48
+
49
+ .CodeMirror-Tern-completion-guess {
50
+ color: #999;
51
+ }
52
+
53
+ .CodeMirror-Tern-tooltip {
54
+ border: 1px solid silver;
55
+ border-radius: 3px;
56
+ color: #444;
57
+ padding: 2px 5px;
58
+ font-size: 90%;
59
+ font-family: monospace;
60
+ background-color: white;
61
+ white-space: pre-wrap;
62
+
63
+ max-width: 40em;
64
+ position: absolute;
65
+ z-index: 10;
66
+ -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
67
+ -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
68
+ box-shadow: 2px 3px 5px rgba(0,0,0,.2);
69
+
70
+ transition: opacity 1s;
71
+ -moz-transition: opacity 1s;
72
+ -webkit-transition: opacity 1s;
73
+ -o-transition: opacity 1s;
74
+ -ms-transition: opacity 1s;
75
+ }
76
+
77
+ .CodeMirror-Tern-hint-doc {
78
+ max-width: 25em;
79
+ }
80
+
81
+ .CodeMirror-Tern-fname { color: black; }
82
+ .CodeMirror-Tern-farg { color: #70a; }
83
+ .CodeMirror-Tern-farg-current { text-decoration: underline; }
84
+ .CodeMirror-Tern-type { color: #07c; }
85
+ .CodeMirror-Tern-fhint-guess { opacity: .7; }
@@ -0,0 +1,632 @@
1
+ // Glue code between CodeMirror and Tern.
2
+ //
3
+ // Create a CodeMirror.TernServer to wrap an actual Tern server,
4
+ // register open documents (CodeMirror.Doc instances) with it, and
5
+ // call its methods to activate the assisting functions that Tern
6
+ // provides.
7
+ //
8
+ // Options supported (all optional):
9
+ // * defs: An array of JSON definition data structures.
10
+ // * plugins: An object mapping plugin names to configuration
11
+ // options.
12
+ // * getFile: A function(name, c) that can be used to access files in
13
+ // the project that haven't been loaded yet. Simply do c(null) to
14
+ // indicate that a file is not available.
15
+ // * fileFilter: A function(value, docName, doc) that will be applied
16
+ // to documents before passing them on to Tern.
17
+ // * switchToDoc: A function(name) that should, when providing a
18
+ // multi-file view, switch the view or focus to the named file.
19
+ // * showError: A function(editor, message) that can be used to
20
+ // override the way errors are displayed.
21
+ // * completionTip: Customize the content in tooltips for completions.
22
+ // Is passed a single argument—the completion's data as returned by
23
+ // Tern—and may return a string, DOM node, or null to indicate that
24
+ // no tip should be shown. By default the docstring is shown.
25
+ // * typeTip: Like completionTip, but for the tooltips shown for type
26
+ // queries.
27
+ // * responseFilter: A function(doc, query, request, error, data) that
28
+ // will be applied to the Tern responses before treating them
29
+ //
30
+ //
31
+ // It is possible to run the Tern server in a web worker by specifying
32
+ // these additional options:
33
+ // * useWorker: Set to true to enable web worker mode. You'll probably
34
+ // want to feature detect the actual value you use here, for example
35
+ // !!window.Worker.
36
+ // * workerScript: The main script of the worker. Point this to
37
+ // wherever you are hosting worker.js from this directory.
38
+ // * workerDeps: An array of paths pointing (relative to workerScript)
39
+ // to the Acorn and Tern libraries and any Tern plugins you want to
40
+ // load. Or, if you minified those into a single script and included
41
+ // them in the workerScript, simply leave this undefined.
42
+
43
+ (function() {
44
+ "use strict";
45
+ // declare global: tern
46
+
47
+ CodeMirror.TernServer = function(options) {
48
+ var self = this;
49
+ this.options = options || {};
50
+ var plugins = this.options.plugins || (this.options.plugins = {});
51
+ if (!plugins.doc_comment) plugins.doc_comment = true;
52
+ if (this.options.useWorker) {
53
+ this.server = new WorkerServer(this);
54
+ } else {
55
+ this.server = new tern.Server({
56
+ getFile: function(name, c) { return getFile(self, name, c); },
57
+ async: true,
58
+ defs: this.options.defs || [],
59
+ plugins: plugins
60
+ });
61
+ }
62
+ this.docs = Object.create(null);
63
+ this.trackChange = function(doc, change) { trackChange(self, doc, change); };
64
+
65
+ this.cachedArgHints = null;
66
+ this.activeArgHints = null;
67
+ this.jumpStack = [];
68
+ };
69
+
70
+ CodeMirror.TernServer.prototype = {
71
+ addDoc: function(name, doc) {
72
+ var data = {doc: doc, name: name, changed: null};
73
+ this.server.addFile(name, docValue(this, data));
74
+ CodeMirror.on(doc, "change", this.trackChange);
75
+ return this.docs[name] = data;
76
+ },
77
+
78
+ delDoc: function(name) {
79
+ var found = this.docs[name];
80
+ if (!found) return;
81
+ CodeMirror.off(found.doc, "change", this.trackChange);
82
+ delete this.docs[name];
83
+ this.server.delFile(name);
84
+ },
85
+
86
+ hideDoc: function(name) {
87
+ closeArgHints(this);
88
+ var found = this.docs[name];
89
+ if (found && found.changed) sendDoc(this, found);
90
+ },
91
+
92
+ complete: function(cm) {
93
+ var self = this;
94
+ CodeMirror.showHint(cm, function(cm, c) { return hint(self, cm, c); }, {async: true});
95
+ },
96
+
97
+ getHint: function(cm, c) { return hint(this, cm, c); },
98
+
99
+ showType: function(cm) { showType(this, cm); },
100
+
101
+ updateArgHints: function(cm) { updateArgHints(this, cm); },
102
+
103
+ jumpToDef: function(cm) { jumpToDef(this, cm); },
104
+
105
+ jumpBack: function(cm) { jumpBack(this, cm); },
106
+
107
+ rename: function(cm) { rename(this, cm); },
108
+
109
+ request: function (cm, query, c) {
110
+ var self = this;
111
+ var doc = findDoc(this, cm.getDoc());
112
+ var request = buildRequest(this, doc, query);
113
+
114
+ this.server.request(request, function (error, data) {
115
+ if (!error && self.options.responseFilter)
116
+ data = self.options.responseFilter(doc, query, request, error, data);
117
+ c(error, data);
118
+ });
119
+ }
120
+ };
121
+
122
+ var Pos = CodeMirror.Pos;
123
+ var cls = "CodeMirror-Tern-";
124
+ var bigDoc = 250;
125
+
126
+ function getFile(ts, name, c) {
127
+ var buf = ts.docs[name];
128
+ if (buf)
129
+ c(docValue(ts, buf));
130
+ else if (ts.options.getFile)
131
+ ts.options.getFile(name, c);
132
+ else
133
+ c(null);
134
+ }
135
+
136
+ function findDoc(ts, doc, name) {
137
+ for (var n in ts.docs) {
138
+ var cur = ts.docs[n];
139
+ if (cur.doc == doc) return cur;
140
+ }
141
+ if (!name) for (var i = 0;; ++i) {
142
+ n = "[doc" + (i || "") + "]";
143
+ if (!ts.docs[n]) { name = n; break; }
144
+ }
145
+ return ts.addDoc(name, doc);
146
+ }
147
+
148
+ function trackChange(ts, doc, change) {
149
+ var data = findDoc(ts, doc);
150
+
151
+ var argHints = ts.cachedArgHints;
152
+ if (argHints && argHints.doc == doc && cmpPos(argHints.start, change.to) <= 0)
153
+ ts.cachedArgHints = null;
154
+
155
+ var changed = data.changed;
156
+ if (changed == null)
157
+ data.changed = changed = {from: change.from.line, to: change.from.line};
158
+ var end = change.from.line + (change.text.length - 1);
159
+ if (change.from.line < changed.to) changed.to = changed.to - (change.to.line - end);
160
+ if (end >= changed.to) changed.to = end + 1;
161
+ if (changed.from > change.from.line) changed.from = change.from.line;
162
+
163
+ if (doc.lineCount() > bigDoc && change.to - changed.from > 100) setTimeout(function() {
164
+ if (data.changed && data.changed.to - data.changed.from > 100) sendDoc(ts, data);
165
+ }, 200);
166
+ }
167
+
168
+ function sendDoc(ts, doc) {
169
+ ts.server.request({files: [{type: "full", name: doc.name, text: docValue(ts, doc)}]}, function(error) {
170
+ if (error) console.error(error);
171
+ else doc.changed = null;
172
+ });
173
+ }
174
+
175
+ // Completion
176
+
177
+ function hint(ts, cm, c) {
178
+ ts.request(cm, {type: "completions", types: true, docs: true, urls: true}, function(error, data) {
179
+ if (error) return showError(ts, cm, error);
180
+ var completions = [], after = "";
181
+ var from = data.start, to = data.end;
182
+ if (cm.getRange(Pos(from.line, from.ch - 2), from) == "[\"" &&
183
+ cm.getRange(to, Pos(to.line, to.ch + 2)) != "\"]")
184
+ after = "\"]";
185
+
186
+ for (var i = 0; i < data.completions.length; ++i) {
187
+ var completion = data.completions[i], className = typeToIcon(completion.type);
188
+ if (data.guess) className += " " + cls + "guess";
189
+ completions.push({text: completion.name + after,
190
+ displayText: completion.name,
191
+ className: className,
192
+ data: completion});
193
+ }
194
+
195
+ var obj = {from: from, to: to, list: completions};
196
+ var tooltip = null;
197
+ CodeMirror.on(obj, "close", function() { remove(tooltip); });
198
+ CodeMirror.on(obj, "update", function() { remove(tooltip); });
199
+ CodeMirror.on(obj, "select", function(cur, node) {
200
+ remove(tooltip);
201
+ var content = ts.options.completionTip ? ts.options.completionTip(cur.data) : cur.data.doc;
202
+ if (content) {
203
+ tooltip = makeTooltip(node.parentNode.getBoundingClientRect().right + window.pageXOffset,
204
+ node.getBoundingClientRect().top + window.pageYOffset, content);
205
+ tooltip.className += " " + cls + "hint-doc";
206
+ }
207
+ });
208
+ c(obj);
209
+ });
210
+ }
211
+
212
+ function typeToIcon(type) {
213
+ var suffix;
214
+ if (type == "?") suffix = "unknown";
215
+ else if (type == "number" || type == "string" || type == "bool") suffix = type;
216
+ else if (/^fn\(/.test(type)) suffix = "fn";
217
+ else if (/^\[/.test(type)) suffix = "array";
218
+ else suffix = "object";
219
+ return cls + "completion " + cls + "completion-" + suffix;
220
+ }
221
+
222
+ // Type queries
223
+
224
+ function showType(ts, cm) {
225
+ ts.request(cm, "type", function(error, data) {
226
+ if (error) return showError(ts, cm, error);
227
+ if (ts.options.typeTip) {
228
+ var tip = ts.options.typeTip(data);
229
+ } else {
230
+ var tip = elt("span", null, elt("strong", null, data.type || "not found"));
231
+ if (data.doc)
232
+ tip.appendChild(document.createTextNode(" — " + data.doc));
233
+ if (data.url) {
234
+ tip.appendChild(document.createTextNode(" "));
235
+ tip.appendChild(elt("a", null, "[docs]")).href = data.url;
236
+ }
237
+ }
238
+ tempTooltip(cm, tip);
239
+ });
240
+ }
241
+
242
+ // Maintaining argument hints
243
+
244
+ function updateArgHints(ts, cm) {
245
+ closeArgHints(ts);
246
+
247
+ if (cm.somethingSelected()) return;
248
+ var state = cm.getTokenAt(cm.getCursor()).state;
249
+ var inner = CodeMirror.innerMode(cm.getMode(), state);
250
+ if (inner.mode.name != "javascript") return;
251
+ var lex = inner.state.lexical;
252
+ if (lex.info != "call") return;
253
+
254
+ var ch, pos = lex.pos || 0, tabSize = cm.getOption("tabSize");
255
+ for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) {
256
+ var str = cm.getLine(line), extra = 0;
257
+ for (var pos = 0;;) {
258
+ var tab = str.indexOf("\t", pos);
259
+ if (tab == -1) break;
260
+ extra += tabSize - (tab + extra) % tabSize - 1;
261
+ pos = tab + 1;
262
+ }
263
+ ch = lex.column - extra;
264
+ if (str.charAt(ch) == "(") {found = true; break;}
265
+ }
266
+ if (!found) return;
267
+
268
+ var start = Pos(line, ch);
269
+ var cache = ts.cachedArgHints;
270
+ if (cache && cache.doc == cm.getDoc() && cmpPos(start, cache.start) == 0)
271
+ return showArgHints(ts, cm, pos);
272
+
273
+ ts.request(cm, {type: "type", preferFunction: true, end: start}, function(error, data) {
274
+ if (error || !data.type || !(/^fn\(/).test(data.type)) return;
275
+ ts.cachedArgHints = {
276
+ start: pos,
277
+ type: parseFnType(data.type),
278
+ name: data.exprName || data.name || "fn",
279
+ guess: data.guess,
280
+ doc: cm.getDoc()
281
+ };
282
+ showArgHints(ts, cm, pos);
283
+ });
284
+ }
285
+
286
+ function showArgHints(ts, cm, pos) {
287
+ closeArgHints(ts);
288
+
289
+ var cache = ts.cachedArgHints, tp = cache.type;
290
+ var tip = elt("span", cache.guess ? cls + "fhint-guess" : null,
291
+ elt("span", cls + "fname", cache.name), "(");
292
+ for (var i = 0; i < tp.args.length; ++i) {
293
+ if (i) tip.appendChild(document.createTextNode(", "));
294
+ var arg = tp.args[i];
295
+ tip.appendChild(elt("span", cls + "farg" + (i == pos ? " " + cls + "farg-current" : ""), arg.name || "?"));
296
+ if (arg.type != "?") {
297
+ tip.appendChild(document.createTextNode(":\u00a0"));
298
+ tip.appendChild(elt("span", cls + "type", arg.type));
299
+ }
300
+ }
301
+ tip.appendChild(document.createTextNode(tp.rettype ? ") ->\u00a0" : ")"));
302
+ if (tp.rettype) tip.appendChild(elt("span", cls + "type", tp.rettype));
303
+ var place = cm.cursorCoords(null, "page");
304
+ ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip);
305
+ }
306
+
307
+ function parseFnType(text) {
308
+ var args = [], pos = 3;
309
+
310
+ function skipMatching(upto) {
311
+ var depth = 0, start = pos;
312
+ for (;;) {
313
+ var next = text.charAt(pos);
314
+ if (upto.test(next) && !depth) return text.slice(start, pos);
315
+ if (/[{\[\(]/.test(next)) ++depth;
316
+ else if (/[}\]\)]/.test(next)) --depth;
317
+ ++pos;
318
+ }
319
+ }
320
+
321
+ // Parse arguments
322
+ if (text.charAt(pos) != ")") for (;;) {
323
+ var name = text.slice(pos).match(/^([^, \(\[\{]+): /);
324
+ if (name) {
325
+ pos += name[0].length;
326
+ name = name[1];
327
+ }
328
+ args.push({name: name, type: skipMatching(/[\),]/)});
329
+ if (text.charAt(pos) == ")") break;
330
+ pos += 2;
331
+ }
332
+
333
+ var rettype = text.slice(pos).match(/^\) -> (.*)$/);
334
+
335
+ return {args: args, rettype: rettype && rettype[1]};
336
+ }
337
+
338
+ // Moving to the definition of something
339
+
340
+ function jumpToDef(ts, cm) {
341
+ function inner(varName) {
342
+ var req = {type: "definition", variable: varName || null};
343
+ var doc = findDoc(ts, cm.getDoc());
344
+ ts.server.request(buildRequest(ts, doc, req), function(error, data) {
345
+ if (error) return showError(ts, cm, error);
346
+ if (!data.file && data.url) { window.open(data.url); return; }
347
+
348
+ if (data.file) {
349
+ var localDoc = ts.docs[data.file], found;
350
+ if (localDoc && (found = findContext(localDoc.doc, data))) {
351
+ ts.jumpStack.push({file: doc.name,
352
+ start: cm.getCursor("from"),
353
+ end: cm.getCursor("to")});
354
+ moveTo(ts, doc, localDoc, found.start, found.end);
355
+ return;
356
+ }
357
+ }
358
+ showError(ts, cm, "Could not find a definition.");
359
+ });
360
+ }
361
+
362
+ if (!atInterestingExpression(cm))
363
+ dialog(cm, "Jump to variable", function(name) { if (name) inner(name); });
364
+ else
365
+ inner();
366
+ }
367
+
368
+ function jumpBack(ts, cm) {
369
+ var pos = ts.jumpStack.pop(), doc = pos && ts.docs[pos.file];
370
+ if (!doc) return;
371
+ moveTo(ts, findDoc(ts, cm.getDoc()), doc, pos.start, pos.end);
372
+ }
373
+
374
+ function moveTo(ts, curDoc, doc, start, end) {
375
+ doc.doc.setSelection(end, start);
376
+ if (curDoc != doc && ts.options.switchToDoc) {
377
+ closeArgHints(ts);
378
+ ts.options.switchToDoc(doc.name);
379
+ }
380
+ }
381
+
382
+ // The {line,ch} representation of positions makes this rather awkward.
383
+ function findContext(doc, data) {
384
+ var before = data.context.slice(0, data.contextOffset).split("\n");
385
+ var startLine = data.start.line - (before.length - 1);
386
+ var start = Pos(startLine, (before.length == 1 ? data.start.ch : doc.getLine(startLine).length) - before[0].length);
387
+
388
+ var text = doc.getLine(startLine).slice(start.ch);
389
+ for (var cur = startLine + 1; cur < doc.lineCount() && text.length < data.context.length; ++cur)
390
+ text += "\n" + doc.getLine(cur);
391
+ if (text.slice(0, data.context.length) == data.context) return data;
392
+
393
+ var cursor = doc.getSearchCursor(data.context, 0, false);
394
+ var nearest, nearestDist = Infinity;
395
+ while (cursor.findNext()) {
396
+ var from = cursor.from(), dist = Math.abs(from.line - start.line) * 10000;
397
+ if (!dist) dist = Math.abs(from.ch - start.ch);
398
+ if (dist < nearestDist) { nearest = from; nearestDist = dist; }
399
+ }
400
+ if (!nearest) return null;
401
+
402
+ if (before.length == 1)
403
+ nearest.ch += before[0].length;
404
+ else
405
+ nearest = Pos(nearest.line + (before.length - 1), before[before.length - 1].length);
406
+ if (data.start.line == data.end.line)
407
+ var end = Pos(nearest.line, nearest.ch + (data.end.ch - data.start.ch));
408
+ else
409
+ var end = Pos(nearest.line + (data.end.line - data.start.line), data.end.ch);
410
+ return {start: nearest, end: end};
411
+ }
412
+
413
+ function atInterestingExpression(cm) {
414
+ var pos = cm.getCursor("end"), tok = cm.getTokenAt(pos);
415
+ if (tok.start < pos.ch && (tok.type == "comment" || tok.type == "string")) return false;
416
+ return /\w/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1));
417
+ }
418
+
419
+ // Variable renaming
420
+
421
+ function rename(ts, cm) {
422
+ var token = cm.getTokenAt(cm.getCursor());
423
+ if (!/\w/.test(token.string)) showError(ts, cm, "Not at a variable");
424
+ dialog(cm, "New name for " + token.string, function(newName) {
425
+ ts.request(cm, {type: "rename", newName: newName, fullDocs: true}, function(error, data) {
426
+ if (error) return showError(ts, cm, error);
427
+ applyChanges(ts, data.changes);
428
+ });
429
+ });
430
+ }
431
+
432
+ var nextChangeOrig = 0;
433
+ function applyChanges(ts, changes) {
434
+ var perFile = Object.create(null);
435
+ for (var i = 0; i < changes.length; ++i) {
436
+ var ch = changes[i];
437
+ (perFile[ch.file] || (perFile[ch.file] = [])).push(ch);
438
+ }
439
+ for (var file in perFile) {
440
+ var known = ts.docs[file], chs = perFile[file];;
441
+ if (!known) continue;
442
+ chs.sort(function(a, b) { return cmpPos(b.start, a.start); });
443
+ var origin = "*rename" + (++nextChangeOrig);
444
+ for (var i = 0; i < chs.length; ++i) {
445
+ var ch = chs[i];
446
+ known.doc.replaceRange(ch.text, ch.start, ch.end, origin);
447
+ }
448
+ }
449
+ }
450
+
451
+ // Generic request-building helper
452
+
453
+ function buildRequest(ts, doc, query) {
454
+ var files = [], offsetLines = 0, allowFragments = !query.fullDocs;
455
+ if (!allowFragments) delete query.fullDocs;
456
+ if (typeof query == "string") query = {type: query};
457
+ query.lineCharPositions = true;
458
+ if (query.end == null) {
459
+ query.end = doc.doc.getCursor("end");
460
+ if (doc.doc.somethingSelected())
461
+ query.start = doc.doc.getCursor("start");
462
+ }
463
+ var startPos = query.start || query.end;
464
+
465
+ if (doc.changed) {
466
+ if (doc.doc.lineCount() > bigDoc && allowFragments !== false &&
467
+ doc.changed.to - doc.changed.from < 100 &&
468
+ doc.changed.from <= startPos.line && doc.changed.to > query.end.line) {
469
+ files.push(getFragmentAround(doc, startPos, query.end));
470
+ query.file = "#0";
471
+ var offsetLines = files[0].offsetLines;
472
+ if (query.start != null) query.start = Pos(query.start.line - -offsetLines, query.start.ch);
473
+ query.end = Pos(query.end.line - offsetLines, query.end.ch);
474
+ } else {
475
+ files.push({type: "full",
476
+ name: doc.name,
477
+ text: docValue(ts, doc)});
478
+ query.file = doc.name;
479
+ doc.changed = null;
480
+ }
481
+ } else {
482
+ query.file = doc.name;
483
+ }
484
+ for (var name in ts.docs) {
485
+ var cur = ts.docs[name];
486
+ if (cur.changed && cur != doc) {
487
+ files.push({type: "full", name: cur.name, text: docValue(ts, cur)});
488
+ cur.changed = null;
489
+ }
490
+ }
491
+
492
+ return {query: query, files: files};
493
+ }
494
+
495
+ function getFragmentAround(data, start, end) {
496
+ var doc = data.doc;
497
+ var minIndent = null, minLine = null, endLine, tabSize = 4;
498
+ for (var p = start.line - 1, min = Math.max(0, p - 50); p >= min; --p) {
499
+ var line = doc.getLine(p), fn = line.search(/\bfunction\b/);
500
+ if (fn < 0) continue;
501
+ var indent = CodeMirror.countColumn(line, null, tabSize);
502
+ if (minIndent != null && minIndent <= indent) continue;
503
+ minIndent = indent;
504
+ minLine = p;
505
+ }
506
+ if (minLine == null) minLine = min;
507
+ var max = Math.min(doc.lastLine(), end.line + 20);
508
+ if (minIndent == null || minIndent == CodeMirror.countColumn(doc.getLine(start.line), null, tabSize))
509
+ endLine = max;
510
+ else for (endLine = end.line + 1; endLine < max; ++endLine) {
511
+ var indent = CodeMirror.countColumn(doc.getLine(endLine), null, tabSize);
512
+ if (indent <= minIndent) break;
513
+ }
514
+ var from = Pos(minLine, 0);
515
+
516
+ return {type: "part",
517
+ name: data.name,
518
+ offsetLines: from.line,
519
+ text: doc.getRange(from, Pos(endLine, 0))};
520
+ }
521
+
522
+ // Generic utilities
523
+
524
+ function cmpPos(a, b) { return a.line - b.line || a.ch - b.ch; }
525
+
526
+ function elt(tagname, cls /*, ... elts*/) {
527
+ var e = document.createElement(tagname);
528
+ if (cls) e.className = cls;
529
+ for (var i = 2; i < arguments.length; ++i) {
530
+ var elt = arguments[i];
531
+ if (typeof elt == "string") elt = document.createTextNode(elt);
532
+ e.appendChild(elt);
533
+ }
534
+ return e;
535
+ }
536
+
537
+ function dialog(cm, text, f) {
538
+ if (cm.openDialog)
539
+ cm.openDialog(text + ": <input type=text>", f);
540
+ else
541
+ f(prompt(text, ""));
542
+ }
543
+
544
+ // Tooltips
545
+
546
+ function tempTooltip(cm, content) {
547
+ var where = cm.cursorCoords();
548
+ var tip = makeTooltip(where.right + 1, where.bottom, content);
549
+ function clear() {
550
+ if (!tip.parentNode) return;
551
+ cm.off("cursorActivity", clear);
552
+ fadeOut(tip);
553
+ }
554
+ setTimeout(clear, 1700);
555
+ cm.on("cursorActivity", clear);
556
+ }
557
+
558
+ function makeTooltip(x, y, content) {
559
+ var node = elt("div", cls + "tooltip", content);
560
+ node.style.left = x + "px";
561
+ node.style.top = y + "px";
562
+ document.body.appendChild(node);
563
+ return node;
564
+ }
565
+
566
+ function remove(node) {
567
+ var p = node && node.parentNode;
568
+ if (p) p.removeChild(node);
569
+ }
570
+
571
+ function fadeOut(tooltip) {
572
+ tooltip.style.opacity = "0";
573
+ setTimeout(function() { remove(tooltip); }, 1100);
574
+ }
575
+
576
+ function showError(ts, cm, msg) {
577
+ if (ts.options.showError)
578
+ ts.options.showError(cm, msg);
579
+ else
580
+ tempTooltip(cm, String(msg));
581
+ }
582
+
583
+ function closeArgHints(ts) {
584
+ if (ts.activeArgHints) { remove(ts.activeArgHints); ts.activeArgHints = null; }
585
+ }
586
+
587
+ function docValue(ts, doc) {
588
+ var val = doc.doc.getValue();
589
+ if (ts.options.fileFilter) val = ts.options.fileFilter(val, doc.name, doc.doc);
590
+ return val;
591
+ }
592
+
593
+ // Worker wrapper
594
+
595
+ function WorkerServer(ts) {
596
+ var worker = new Worker(ts.options.workerScript);
597
+ worker.postMessage({type: "init",
598
+ defs: ts.options.defs,
599
+ plugins: ts.options.plugins,
600
+ scripts: ts.options.workerDeps});
601
+ var msgId = 0, pending = {};
602
+
603
+ function send(data, c) {
604
+ if (c) {
605
+ data.id = ++msgId;
606
+ pending[msgId] = c;
607
+ }
608
+ worker.postMessage(data);
609
+ }
610
+ worker.onmessage = function(e) {
611
+ var data = e.data;
612
+ if (data.type == "getFile") {
613
+ getFile(ts, data.name, function(err, text) {
614
+ send({type: "getFile", err: String(err), text: text, id: data.id});
615
+ });
616
+ } else if (data.type == "debug") {
617
+ console.log(data.message);
618
+ } else if (data.id && pending[data.id]) {
619
+ pending[data.id](data.err, data.body);
620
+ delete pending[data.id];
621
+ }
622
+ };
623
+ worker.onerror = function(e) {
624
+ for (var id in pending) pending[id](e);
625
+ pending = {};
626
+ };
627
+
628
+ this.addFile = function(name, text) { send({type: "add", name: name, text: text}); };
629
+ this.delFile = function(name) { send({type: "del", name: name}); };
630
+ this.request = function(body, c) { send({type: "req", body: body}, c); };
631
+ }
632
+ })();