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,139 @@
1
+ /*
2
+ Simple linter, based on the Acorn [1] parser module
3
+
4
+ All of the existing linters either cramp my style or have huge
5
+ dependencies (Closure). So here's a very simple, non-invasive one
6
+ that only spots
7
+
8
+ - missing semicolons and trailing commas
9
+ - variables or properties that are reserved words
10
+ - assigning to a variable you didn't declare
11
+ - access to non-whitelisted globals
12
+ (use a '// declare global: foo, bar' comment to declare extra
13
+ globals in a file)
14
+
15
+ [1]: https://github.com/marijnh/acorn/
16
+ */
17
+
18
+ var topAllowedGlobals = Object.create(null);
19
+ ("Error RegExp Number String Array Function Object Math Date undefined " +
20
+ "parseInt parseFloat Infinity NaN isNaN " +
21
+ "window document navigator prompt alert confirm console " +
22
+ "FileReader Worker postMessage importScripts " +
23
+ "setInterval clearInterval setTimeout clearTimeout " +
24
+ "CodeMirror test")
25
+ .split(" ").forEach(function(n) { topAllowedGlobals[n] = true; });
26
+
27
+ var fs = require("fs"), acorn = require("./acorn.js"), walk = require("./walk.js");
28
+
29
+ var scopePasser = walk.make({
30
+ ScopeBody: function(node, prev, c) { c(node, node.scope); }
31
+ });
32
+
33
+ function checkFile(fileName) {
34
+ var file = fs.readFileSync(fileName, "utf8"), notAllowed;
35
+ if (notAllowed = file.match(/[\x00-\x08\x0b\x0c\x0e-\x19\uFEFF\t]|[ \t]\n/)) {
36
+ var msg;
37
+ if (notAllowed[0] == "\t") msg = "Found tab character";
38
+ else if (notAllowed[0].indexOf("\n") > -1) msg = "Trailing whitespace";
39
+ else msg = "Undesirable character " + notAllowed[0].charCodeAt(0);
40
+ var info = acorn.getLineInfo(file, notAllowed.index);
41
+ fail(msg + " at line " + info.line + ", column " + info.column, {source: fileName});
42
+ }
43
+
44
+ var globalsSeen = Object.create(null);
45
+
46
+ try {
47
+ var parsed = acorn.parse(file, {
48
+ locations: true,
49
+ ecmaVersion: 3,
50
+ strictSemicolons: true,
51
+ allowTrailingCommas: false,
52
+ forbidReserved: true,
53
+ sourceFile: fileName
54
+ });
55
+ } catch (e) {
56
+ fail(e.message, {source: fileName});
57
+ return;
58
+ }
59
+
60
+ var scopes = [];
61
+
62
+ walk.simple(parsed, {
63
+ ScopeBody: function(node, scope) {
64
+ node.scope = scope;
65
+ scopes.push(scope);
66
+ }
67
+ }, walk.scopeVisitor, {vars: Object.create(null)});
68
+
69
+ var ignoredGlobals = Object.create(null);
70
+
71
+ function inScope(name, scope) {
72
+ for (var cur = scope; cur; cur = cur.prev)
73
+ if (name in cur.vars) return true;
74
+ }
75
+ function checkLHS(node, scope) {
76
+ if (node.type == "Identifier" && !(node.name in ignoredGlobals) &&
77
+ !inScope(node.name, scope)) {
78
+ ignoredGlobals[node.name] = true;
79
+ fail("Assignment to global variable", node.loc);
80
+ }
81
+ }
82
+
83
+ walk.simple(parsed, {
84
+ UpdateExpression: function(node, scope) {checkLHS(node.argument, scope);},
85
+ AssignmentExpression: function(node, scope) {checkLHS(node.left, scope);},
86
+ Identifier: function(node, scope) {
87
+ if (node.name == "arguments") return;
88
+ // Mark used identifiers
89
+ for (var cur = scope; cur; cur = cur.prev)
90
+ if (node.name in cur.vars) {
91
+ cur.vars[node.name].used = true;
92
+ return;
93
+ }
94
+ globalsSeen[node.name] = node.loc;
95
+ },
96
+ FunctionExpression: function(node) {
97
+ if (node.id) fail("Named function expression", node.loc);
98
+ }
99
+ }, scopePasser);
100
+
101
+ if (!globalsSeen.exports) {
102
+ var allowedGlobals = Object.create(topAllowedGlobals), m;
103
+ if (m = file.match(/\/\/ declare global:\s+(.*)/))
104
+ m[1].split(/,\s*/g).forEach(function(n) { allowedGlobals[n] = true; });
105
+ for (var glob in globalsSeen)
106
+ if (!(glob in allowedGlobals))
107
+ fail("Access to global variable " + glob + ". Add a '// declare global: " + glob +
108
+ "' comment or add this variable in test/lint/lint.js.", globalsSeen[glob]);
109
+ }
110
+
111
+
112
+ for (var i = 0; i < scopes.length; ++i) {
113
+ var scope = scopes[i];
114
+ for (var name in scope.vars) {
115
+ var info = scope.vars[name];
116
+ if (!info.used && info.type != "catch clause" && info.type != "function name" && name.charAt(0) != "_")
117
+ fail("Unused " + info.type + " " + name, info.node.loc);
118
+ }
119
+ }
120
+ }
121
+
122
+ var failed = false;
123
+ function fail(msg, pos) {
124
+ if (pos.start) msg += " (" + pos.start.line + ":" + pos.start.column + ")";
125
+ console.log(pos.source + ": " + msg);
126
+ failed = true;
127
+ }
128
+
129
+ function checkDir(dir) {
130
+ fs.readdirSync(dir).forEach(function(file) {
131
+ var fname = dir + "/" + file;
132
+ if (/\.js$/.test(file)) checkFile(fname);
133
+ else if (file != "dep" && fs.lstatSync(fname).isDirectory()) checkDir(fname);
134
+ });
135
+ }
136
+
137
+ exports.checkDir = checkDir;
138
+ exports.checkFile = checkFile;
139
+ exports.success = function() { return !failed; };
@@ -0,0 +1,216 @@
1
+ // AST walker module for Mozilla Parser API compatible trees
2
+
3
+ (function(exports) {
4
+ "use strict";
5
+
6
+ // A simple walk is one where you simply specify callbacks to be
7
+ // called on specific nodes. The last two arguments are optional. A
8
+ // simple use would be
9
+ //
10
+ // walk.simple(myTree, {
11
+ // Expression: function(node) { ... }
12
+ // });
13
+ //
14
+ // to do something with all expressions. All Parser API node types
15
+ // can be used to identify node types, as well as Expression,
16
+ // Statement, and ScopeBody, which denote categories of nodes.
17
+ //
18
+ // The base argument can be used to pass a custom (recursive)
19
+ // walker, and state can be used to give this walked an initial
20
+ // state.
21
+ exports.simple = function(node, visitors, base, state) {
22
+ if (!base) base = exports;
23
+ function c(node, st, override) {
24
+ var type = override || node.type, found = visitors[type];
25
+ if (found) found(node, st);
26
+ base[type](node, st, c);
27
+ }
28
+ c(node, state);
29
+ };
30
+
31
+ // A recursive walk is one where your functions override the default
32
+ // walkers. They can modify and replace the state parameter that's
33
+ // threaded through the walk, and can opt how and whether to walk
34
+ // their child nodes (by calling their third argument on these
35
+ // nodes).
36
+ exports.recursive = function(node, state, funcs, base) {
37
+ var visitor = exports.make(funcs, base);
38
+ function c(node, st, override) {
39
+ visitor[override || node.type](node, st, c);
40
+ }
41
+ c(node, state);
42
+ };
43
+
44
+ // Used to create a custom walker. Will fill in all missing node
45
+ // type properties with the defaults.
46
+ exports.make = function(funcs, base) {
47
+ if (!base) base = exports;
48
+ var visitor = {};
49
+ for (var type in base)
50
+ visitor[type] = funcs.hasOwnProperty(type) ? funcs[type] : base[type];
51
+ return visitor;
52
+ };
53
+
54
+ function skipThrough(node, st, c) { c(node, st); }
55
+ function ignore(node, st, c) {}
56
+
57
+ // Node walkers.
58
+
59
+ exports.Program = exports.BlockStatement = function(node, st, c) {
60
+ for (var i = 0; i < node.body.length; ++i)
61
+ c(node.body[i], st, "Statement");
62
+ };
63
+ exports.Statement = skipThrough;
64
+ exports.EmptyStatement = ignore;
65
+ exports.ExpressionStatement = function(node, st, c) {
66
+ c(node.expression, st, "Expression");
67
+ };
68
+ exports.IfStatement = function(node, st, c) {
69
+ c(node.test, st, "Expression");
70
+ c(node.consequent, st, "Statement");
71
+ if (node.alternate) c(node.alternate, st, "Statement");
72
+ };
73
+ exports.LabeledStatement = function(node, st, c) {
74
+ c(node.body, st, "Statement");
75
+ };
76
+ exports.BreakStatement = exports.ContinueStatement = ignore;
77
+ exports.WithStatement = function(node, st, c) {
78
+ c(node.object, st, "Expression");
79
+ c(node.body, st, "Statement");
80
+ };
81
+ exports.SwitchStatement = function(node, st, c) {
82
+ c(node.discriminant, st, "Expression");
83
+ for (var i = 0; i < node.cases.length; ++i) {
84
+ var cs = node.cases[i];
85
+ if (cs.test) c(cs.test, st, "Expression");
86
+ for (var j = 0; j < cs.consequent.length; ++j)
87
+ c(cs.consequent[j], st, "Statement");
88
+ }
89
+ };
90
+ exports.ReturnStatement = function(node, st, c) {
91
+ if (node.argument) c(node.argument, st, "Expression");
92
+ };
93
+ exports.ThrowStatement = function(node, st, c) {
94
+ c(node.argument, st, "Expression");
95
+ };
96
+ exports.TryStatement = function(node, st, c) {
97
+ c(node.block, st, "Statement");
98
+ for (var i = 0; i < node.handlers.length; ++i)
99
+ c(node.handlers[i].body, st, "ScopeBody");
100
+ if (node.finalizer) c(node.finalizer, st, "Statement");
101
+ };
102
+ exports.WhileStatement = function(node, st, c) {
103
+ c(node.test, st, "Expression");
104
+ c(node.body, st, "Statement");
105
+ };
106
+ exports.DoWhileStatement = exports.WhileStatement;
107
+ exports.ForStatement = function(node, st, c) {
108
+ if (node.init) c(node.init, st, "ForInit");
109
+ if (node.test) c(node.test, st, "Expression");
110
+ if (node.update) c(node.update, st, "Expression");
111
+ c(node.body, st, "Statement");
112
+ };
113
+ exports.ForInStatement = function(node, st, c) {
114
+ c(node.left, st, "ForInit");
115
+ c(node.right, st, "Expression");
116
+ c(node.body, st, "Statement");
117
+ };
118
+ exports.ForInit = function(node, st, c) {
119
+ if (node.type == "VariableDeclaration") c(node, st);
120
+ else c(node, st, "Expression");
121
+ };
122
+ exports.DebuggerStatement = ignore;
123
+
124
+ exports.FunctionDeclaration = function(node, st, c) {
125
+ c(node, st, "Function");
126
+ };
127
+ exports.VariableDeclaration = function(node, st, c) {
128
+ for (var i = 0; i < node.declarations.length; ++i) {
129
+ var decl = node.declarations[i];
130
+ if (decl.init) c(decl.init, st, "Expression");
131
+ }
132
+ };
133
+
134
+ exports.Function = function(node, st, c) {
135
+ c(node.body, st, "ScopeBody");
136
+ };
137
+ exports.ScopeBody = function(node, st, c) {
138
+ c(node, st, "Statement");
139
+ };
140
+
141
+ exports.Expression = skipThrough;
142
+ exports.ThisExpression = ignore;
143
+ exports.ArrayExpression = function(node, st, c) {
144
+ for (var i = 0; i < node.elements.length; ++i) {
145
+ var elt = node.elements[i];
146
+ if (elt) c(elt, st, "Expression");
147
+ }
148
+ };
149
+ exports.ObjectExpression = function(node, st, c) {
150
+ for (var i = 0; i < node.properties.length; ++i)
151
+ c(node.properties[i].value, st, "Expression");
152
+ };
153
+ exports.FunctionExpression = exports.FunctionDeclaration;
154
+ exports.SequenceExpression = function(node, st, c) {
155
+ for (var i = 0; i < node.expressions.length; ++i)
156
+ c(node.expressions[i], st, "Expression");
157
+ };
158
+ exports.UnaryExpression = exports.UpdateExpression = function(node, st, c) {
159
+ c(node.argument, st, "Expression");
160
+ };
161
+ exports.BinaryExpression = exports.AssignmentExpression = exports.LogicalExpression = function(node, st, c) {
162
+ c(node.left, st, "Expression");
163
+ c(node.right, st, "Expression");
164
+ };
165
+ exports.ConditionalExpression = function(node, st, c) {
166
+ c(node.test, st, "Expression");
167
+ c(node.consequent, st, "Expression");
168
+ c(node.alternate, st, "Expression");
169
+ };
170
+ exports.NewExpression = exports.CallExpression = function(node, st, c) {
171
+ c(node.callee, st, "Expression");
172
+ if (node.arguments) for (var i = 0; i < node.arguments.length; ++i)
173
+ c(node.arguments[i], st, "Expression");
174
+ };
175
+ exports.MemberExpression = function(node, st, c) {
176
+ c(node.object, st, "Expression");
177
+ if (node.computed) c(node.property, st, "Expression");
178
+ };
179
+ exports.Identifier = exports.Literal = ignore;
180
+
181
+ // A custom walker that keeps track of the scope chain and the
182
+ // variables defined in it.
183
+ function makeScope(prev) {
184
+ return {vars: Object.create(null), prev: prev};
185
+ }
186
+ exports.scopeVisitor = exports.make({
187
+ Function: function(node, scope, c) {
188
+ var inner = makeScope(scope);
189
+ for (var i = 0; i < node.params.length; ++i)
190
+ inner.vars[node.params[i].name] = {type: "argument", node: node.params[i]};
191
+ if (node.id) {
192
+ var decl = node.type == "FunctionDeclaration";
193
+ (decl ? scope : inner).vars[node.id.name] =
194
+ {type: decl ? "function" : "function name", node: node.id};
195
+ }
196
+ c(node.body, inner, "ScopeBody");
197
+ },
198
+ TryStatement: function(node, scope, c) {
199
+ c(node.block, scope, "Statement");
200
+ for (var i = 0; i < node.handlers.length; ++i) {
201
+ var handler = node.handlers[i], inner = makeScope(scope);
202
+ inner.vars[handler.param.name] = {type: "catch clause", node: handler.param};
203
+ c(handler.body, inner, "ScopeBody");
204
+ }
205
+ if (node.finalizer) c(node.finalizer, scope, "Statement");
206
+ },
207
+ VariableDeclaration: function(node, scope, c) {
208
+ for (var i = 0; i < node.declarations.length; ++i) {
209
+ var decl = node.declarations[i];
210
+ scope.vars[decl.id.name] = {type: "var", node: decl.id};
211
+ if (decl.init) c(decl.init, scope, "Expression");
212
+ }
213
+ }
214
+ });
215
+
216
+ })(typeof exports == "undefined" ? acorn.walk = {} : exports);
@@ -0,0 +1,10 @@
1
+ .mt-output .mt-token {
2
+ border: 1px solid #ddd;
3
+ white-space: pre;
4
+ font-family: "Consolas", monospace;
5
+ text-align: center;
6
+ }
7
+
8
+ .mt-output .mt-style {
9
+ font-size: x-small;
10
+ }
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Helper to test CodeMirror highlighting modes. It pretty prints output of the
3
+ * highlighter and can check against expected styles.
4
+ *
5
+ * Mode tests are registered by calling test.mode(testName, mode,
6
+ * tokens), where mode is a mode object as returned by
7
+ * CodeMirror.getMode, and tokens is an array of lines that make up
8
+ * the test.
9
+ *
10
+ * These lines are strings, in which styled stretches of code are
11
+ * enclosed in brackets `[]`, and prefixed by their style. For
12
+ * example, `[keyword if]`. Brackets in the code itself must be
13
+ * duplicated to prevent them from being interpreted as token
14
+ * boundaries. For example `a[[i]]` for `a[i]`. If a token has
15
+ * multiple styles, the styles must be separated by ampersands, for
16
+ * example `[tag&error </hmtl>]`.
17
+ *
18
+ * See the test.js files in the css, markdown, gfm, and stex mode
19
+ * directories for examples.
20
+ */
21
+ (function() {
22
+ function findSingle(str, pos, ch) {
23
+ for (;;) {
24
+ var found = str.indexOf(ch, pos);
25
+ if (found == -1) return null;
26
+ if (str.charAt(found + 1) != ch) return found;
27
+ pos = found + 2;
28
+ }
29
+ }
30
+
31
+ var styleName = /[\w&-_]+/g;
32
+ function parseTokens(strs) {
33
+ var tokens = [], plain = "";
34
+ for (var i = 0; i < strs.length; ++i) {
35
+ if (i) plain += "\n";
36
+ var str = strs[i], pos = 0;
37
+ while (pos < str.length) {
38
+ var style = null, text;
39
+ if (str.charAt(pos) == "[" && str.charAt(pos+1) != "[") {
40
+ styleName.lastIndex = pos + 1;
41
+ var m = styleName.exec(str);
42
+ style = m[0].replace(/&/g, " ");
43
+ var textStart = pos + style.length + 2;
44
+ var end = findSingle(str, textStart, "]");
45
+ if (end == null) throw new Error("Unterminated token at " + pos + " in '" + str + "'" + style);
46
+ text = str.slice(textStart, end);
47
+ pos = end + 1;
48
+ } else {
49
+ var end = findSingle(str, pos, "[");
50
+ if (end == null) end = str.length;
51
+ text = str.slice(pos, end);
52
+ pos = end;
53
+ }
54
+ text = text.replace(/\[\[|\]\]/g, function(s) {return s.charAt(0);});
55
+ tokens.push(style, text);
56
+ plain += text;
57
+ }
58
+ }
59
+ return {tokens: tokens, plain: plain};
60
+ }
61
+
62
+ test.indentation = function(name, mode, tokens, modeName) {
63
+ var data = parseTokens(tokens);
64
+ return test((modeName || mode.name) + "_indent_" + name, function() {
65
+ return compare(data.plain, data.tokens, mode, true);
66
+ });
67
+ };
68
+
69
+ test.mode = function(name, mode, tokens, modeName) {
70
+ var data = parseTokens(tokens);
71
+ return test((modeName || mode.name) + "_" + name, function() {
72
+ return compare(data.plain, data.tokens, mode);
73
+ });
74
+ };
75
+
76
+ function compare(text, expected, mode, compareIndentation) {
77
+
78
+ var expectedOutput = [];
79
+ for (var i = 0; i < expected.length; i += 2) {
80
+ var sty = expected[i];
81
+ if (sty && sty.indexOf(" ")) sty = sty.split(' ').sort().join(' ');
82
+ expectedOutput.push(sty, expected[i + 1]);
83
+ }
84
+
85
+ var observedOutput = highlight(text, mode, compareIndentation);
86
+
87
+ var pass, passStyle = "";
88
+ pass = highlightOutputsEqual(expectedOutput, observedOutput);
89
+ passStyle = pass ? 'mt-pass' : 'mt-fail';
90
+
91
+ var s = '';
92
+ if (pass) {
93
+ s += '<div class="mt-test ' + passStyle + '">';
94
+ s += '<pre>' + text.replace('&', '&amp;').replace('<', '&lt;') + '</pre>';
95
+ s += '<div class="cm-s-default">';
96
+ s += prettyPrintOutputTable(observedOutput);
97
+ s += '</div>';
98
+ s += '</div>';
99
+ return s;
100
+ } else {
101
+ s += '<div class="mt-test ' + passStyle + '">';
102
+ s += '<pre>' + text.replace('&', '&amp;').replace('<', '&lt;') + '</pre>';
103
+ s += '<div class="cm-s-default">';
104
+ s += 'expected:';
105
+ s += prettyPrintOutputTable(expectedOutput);
106
+ s += 'observed:';
107
+ s += prettyPrintOutputTable(observedOutput);
108
+ s += '</div>';
109
+ s += '</div>';
110
+ throw s;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Emulation of CodeMirror's internal highlight routine for testing. Multi-line
116
+ * input is supported.
117
+ *
118
+ * @param string to highlight
119
+ *
120
+ * @param mode the mode that will do the actual highlighting
121
+ *
122
+ * @return array of [style, token] pairs
123
+ */
124
+ function highlight(string, mode, compareIndentation) {
125
+ var state = mode.startState()
126
+
127
+ var lines = string.replace(/\r\n/g,'\n').split('\n');
128
+ var st = [], pos = 0;
129
+ for (var i = 0; i < lines.length; ++i) {
130
+ var line = lines[i], newLine = true;
131
+ var stream = new CodeMirror.StringStream(line);
132
+ if (line == "" && mode.blankLine) mode.blankLine(state);
133
+ /* Start copied code from CodeMirror.highlight */
134
+ while (!stream.eol()) {
135
+ var compare = mode.token(stream, state), substr = stream.current();
136
+ if(compareIndentation) compare = mode.indent(state) || null;
137
+ else if (compare && compare.indexOf(" ") > -1) compare = compare.split(' ').sort().join(' ');
138
+
139
+ stream.start = stream.pos;
140
+ if (pos && st[pos-2] == compare && !newLine) {
141
+ st[pos-1] += substr;
142
+ } else if (substr) {
143
+ st[pos++] = compare; st[pos++] = substr;
144
+ }
145
+ // Give up when line is ridiculously long
146
+ if (stream.pos > 5000) {
147
+ st[pos++] = null; st[pos++] = this.text.slice(stream.pos);
148
+ break;
149
+ }
150
+ newLine = false;
151
+ }
152
+ }
153
+
154
+ return st;
155
+ }
156
+
157
+ /**
158
+ * Compare two arrays of output from highlight.
159
+ *
160
+ * @param o1 array of [style, token] pairs
161
+ *
162
+ * @param o2 array of [style, token] pairs
163
+ *
164
+ * @return boolean; true iff outputs equal
165
+ */
166
+ function highlightOutputsEqual(o1, o2) {
167
+ if (o1.length != o2.length) return false;
168
+ for (var i = 0; i < o1.length; ++i)
169
+ if (o1[i] != o2[i]) return false;
170
+ return true;
171
+ }
172
+
173
+ /**
174
+ * Print tokens and corresponding styles in a table. Spaces in the token are
175
+ * replaced with 'interpunct' dots (&middot;).
176
+ *
177
+ * @param output array of [style, token] pairs
178
+ *
179
+ * @return html string
180
+ */
181
+ function prettyPrintOutputTable(output) {
182
+ var s = '<table class="mt-output">';
183
+ s += '<tr>';
184
+ for (var i = 0; i < output.length; i += 2) {
185
+ var style = output[i], val = output[i+1];
186
+ s +=
187
+ '<td class="mt-token">' +
188
+ '<span class="cm-' + String(style).replace(/ +/g, " cm-") + '">' +
189
+ val.replace(/ /g,'\xb7').replace('&', '&amp;').replace('<', '&lt;') +
190
+ '</span>' +
191
+ '</td>';
192
+ }
193
+ s += '</tr><tr>';
194
+ for (var i = 0; i < output.length; i += 2) {
195
+ s += '<td class="mt-style"><span>' + (output[i] || null) + '</span></td>';
196
+ }
197
+ s += '</table>';
198
+ return s;
199
+ }
200
+ })();