milksteak 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. data/.gitignore +1 -14
  2. data/.rspec +2 -0
  3. data/Gemfile +1 -1
  4. data/Guardfile +8 -0
  5. data/Rakefile +0 -1
  6. data/Readme.md +37 -0
  7. data/lib/helpers.rb +0 -0
  8. data/lib/milksteak/cms.rb +17 -0
  9. data/lib/milksteak/version.rb +1 -1
  10. data/lib/milksteak.rb +52 -1
  11. data/lib/models/page.rb +73 -0
  12. data/lib/models/user.rb +5 -0
  13. data/lib/public/milksteak/codemirror2/keymap/emacs.js +29 -0
  14. data/lib/public/milksteak/codemirror2/keymap/vim.js +347 -0
  15. data/lib/public/milksteak/codemirror2/lib/codemirror.css +110 -0
  16. data/lib/public/milksteak/codemirror2/lib/codemirror.js +2887 -0
  17. data/lib/public/milksteak/codemirror2/lib/util/dialog.css +23 -0
  18. data/lib/public/milksteak/codemirror2/lib/util/dialog.js +63 -0
  19. data/lib/public/milksteak/codemirror2/lib/util/foldcode.js +186 -0
  20. data/lib/public/milksteak/codemirror2/lib/util/formatting.js +294 -0
  21. data/lib/public/milksteak/codemirror2/lib/util/javascript-hint.js +132 -0
  22. data/lib/public/milksteak/codemirror2/lib/util/match-highlighter.js +44 -0
  23. data/lib/public/milksteak/codemirror2/lib/util/overlay.js +51 -0
  24. data/lib/public/milksteak/codemirror2/lib/util/runmode.js +49 -0
  25. data/lib/public/milksteak/codemirror2/lib/util/search.js +114 -0
  26. data/lib/public/milksteak/codemirror2/lib/util/searchcursor.js +117 -0
  27. data/lib/public/milksteak/codemirror2/lib/util/simple-hint.css +16 -0
  28. data/lib/public/milksteak/codemirror2/lib/util/simple-hint.js +66 -0
  29. data/lib/public/milksteak/codemirror2/mode/clike/clike.js +234 -0
  30. data/lib/public/milksteak/codemirror2/mode/clike/index.html +101 -0
  31. data/lib/public/milksteak/codemirror2/mode/clojure/clojure.js +207 -0
  32. data/lib/public/milksteak/codemirror2/mode/clojure/index.html +66 -0
  33. data/lib/public/milksteak/codemirror2/mode/coffeescript/LICENSE +22 -0
  34. data/lib/public/milksteak/codemirror2/mode/coffeescript/coffeescript.js +341 -0
  35. data/lib/public/milksteak/codemirror2/mode/coffeescript/index.html +721 -0
  36. data/lib/public/milksteak/codemirror2/mode/css/css.js +124 -0
  37. data/lib/public/milksteak/codemirror2/mode/css/index.html +55 -0
  38. data/lib/public/milksteak/codemirror2/mode/diff/diff.css +3 -0
  39. data/lib/public/milksteak/codemirror2/mode/diff/diff.js +13 -0
  40. data/lib/public/milksteak/codemirror2/mode/diff/index.html +99 -0
  41. data/lib/public/milksteak/codemirror2/mode/ecl/ecl.js +203 -0
  42. data/lib/public/milksteak/codemirror2/mode/ecl/index.html +42 -0
  43. data/lib/public/milksteak/codemirror2/mode/gfm/gfm.js +108 -0
  44. data/lib/public/milksteak/codemirror2/mode/gfm/index.html +47 -0
  45. data/lib/public/milksteak/codemirror2/mode/go/go.js +170 -0
  46. data/lib/public/milksteak/codemirror2/mode/go/index.html +72 -0
  47. data/lib/public/milksteak/codemirror2/mode/groovy/groovy.js +210 -0
  48. data/lib/public/milksteak/codemirror2/mode/groovy/index.html +71 -0
  49. data/lib/public/milksteak/codemirror2/mode/haskell/haskell.js +242 -0
  50. data/lib/public/milksteak/codemirror2/mode/haskell/index.html +60 -0
  51. data/lib/public/milksteak/codemirror2/mode/htmlembedded/htmlembedded.js +68 -0
  52. data/lib/public/milksteak/codemirror2/mode/htmlembedded/index.html +49 -0
  53. data/lib/public/milksteak/codemirror2/mode/htmlmixed/htmlmixed.js +83 -0
  54. data/lib/public/milksteak/codemirror2/mode/htmlmixed/index.html +51 -0
  55. data/lib/public/milksteak/codemirror2/mode/javascript/index.html +77 -0
  56. data/lib/public/milksteak/codemirror2/mode/javascript/javascript.js +360 -0
  57. data/lib/public/milksteak/codemirror2/mode/jinja2/index.html +37 -0
  58. data/lib/public/milksteak/codemirror2/mode/jinja2/jinja2.js +42 -0
  59. data/lib/public/milksteak/codemirror2/mode/less/index.html +577 -0
  60. data/lib/public/milksteak/codemirror2/mode/less/less.js +186 -0
  61. data/lib/public/milksteak/codemirror2/mode/lua/index.html +72 -0
  62. data/lib/public/milksteak/codemirror2/mode/lua/lua.js +140 -0
  63. data/lib/public/milksteak/codemirror2/mode/markdown/index.html +339 -0
  64. data/lib/public/milksteak/codemirror2/mode/markdown/markdown.js +276 -0
  65. data/lib/public/milksteak/codemirror2/mode/mysql/index.html +41 -0
  66. data/lib/public/milksteak/codemirror2/mode/mysql/mysql.js +188 -0
  67. data/lib/public/milksteak/codemirror2/mode/ntriples/index.html +32 -0
  68. data/lib/public/milksteak/codemirror2/mode/ntriples/ntriples.js +172 -0
  69. data/lib/public/milksteak/codemirror2/mode/pascal/LICENSE +7 -0
  70. data/lib/public/milksteak/codemirror2/mode/pascal/index.html +48 -0
  71. data/lib/public/milksteak/codemirror2/mode/pascal/pascal.js +94 -0
  72. data/lib/public/milksteak/codemirror2/mode/perl/LICENSE +19 -0
  73. data/lib/public/milksteak/codemirror2/mode/perl/index.html +62 -0
  74. data/lib/public/milksteak/codemirror2/mode/perl/perl.js +816 -0
  75. data/lib/public/milksteak/codemirror2/mode/php/index.html +48 -0
  76. data/lib/public/milksteak/codemirror2/mode/php/php.js +150 -0
  77. data/lib/public/milksteak/codemirror2/mode/plsql/index.html +62 -0
  78. data/lib/public/milksteak/codemirror2/mode/plsql/plsql.js +217 -0
  79. data/lib/public/milksteak/codemirror2/mode/properties/index.html +40 -0
  80. data/lib/public/milksteak/codemirror2/mode/properties/properties.css +3 -0
  81. data/lib/public/milksteak/codemirror2/mode/properties/properties.js +57 -0
  82. data/lib/public/milksteak/codemirror2/mode/python/LICENSE.txt +21 -0
  83. data/lib/public/milksteak/codemirror2/mode/python/index.html +122 -0
  84. data/lib/public/milksteak/codemirror2/mode/python/python.js +340 -0
  85. data/lib/public/milksteak/codemirror2/mode/r/LICENSE +24 -0
  86. data/lib/public/milksteak/codemirror2/mode/r/index.html +73 -0
  87. data/lib/public/milksteak/codemirror2/mode/r/r.js +141 -0
  88. data/lib/public/milksteak/codemirror2/mode/rpm/changes/changes.js +19 -0
  89. data/lib/public/milksteak/codemirror2/mode/rpm/changes/index.html +53 -0
  90. data/lib/public/milksteak/codemirror2/mode/rpm/spec/index.html +99 -0
  91. data/lib/public/milksteak/codemirror2/mode/rpm/spec/spec.css +5 -0
  92. data/lib/public/milksteak/codemirror2/mode/rpm/spec/spec.js +66 -0
  93. data/lib/public/milksteak/codemirror2/mode/rst/index.html +525 -0
  94. data/lib/public/milksteak/codemirror2/mode/rst/rst.js +326 -0
  95. data/lib/public/milksteak/codemirror2/mode/ruby/LICENSE +24 -0
  96. data/lib/public/milksteak/codemirror2/mode/ruby/index.html +171 -0
  97. data/lib/public/milksteak/codemirror2/mode/ruby/ruby.js +200 -0
  98. data/lib/public/milksteak/codemirror2/mode/rust/index.html +48 -0
  99. data/lib/public/milksteak/codemirror2/mode/rust/rust.js +432 -0
  100. data/lib/public/milksteak/codemirror2/mode/scheme/index.html +64 -0
  101. data/lib/public/milksteak/codemirror2/mode/scheme/scheme.js +202 -0
  102. data/lib/public/milksteak/codemirror2/mode/smalltalk/index.html +55 -0
  103. data/lib/public/milksteak/codemirror2/mode/smalltalk/smalltalk.js +139 -0
  104. data/lib/public/milksteak/codemirror2/mode/sparql/index.html +40 -0
  105. data/lib/public/milksteak/codemirror2/mode/sparql/sparql.js +143 -0
  106. data/lib/public/milksteak/codemirror2/mode/stex/index.html +95 -0
  107. data/lib/public/milksteak/codemirror2/mode/stex/stex.js +167 -0
  108. data/lib/public/milksteak/codemirror2/mode/tiddlywiki/index.html +183 -0
  109. data/lib/public/milksteak/codemirror2/mode/tiddlywiki/tiddlywiki.css +21 -0
  110. data/lib/public/milksteak/codemirror2/mode/tiddlywiki/tiddlywiki.js +374 -0
  111. data/lib/public/milksteak/codemirror2/mode/velocity/index.html +103 -0
  112. data/lib/public/milksteak/codemirror2/mode/velocity/velocity.js +146 -0
  113. data/lib/public/milksteak/codemirror2/mode/verilog/index.html +210 -0
  114. data/lib/public/milksteak/codemirror2/mode/verilog/verilog.js +194 -0
  115. data/lib/public/milksteak/codemirror2/mode/xml/index.html +45 -0
  116. data/lib/public/milksteak/codemirror2/mode/xml/xml.js +267 -0
  117. data/lib/public/milksteak/codemirror2/mode/xmlpure/index.html +59 -0
  118. data/lib/public/milksteak/codemirror2/mode/xmlpure/xmlpure.js +490 -0
  119. data/lib/public/milksteak/codemirror2/mode/yaml/index.html +67 -0
  120. data/lib/public/milksteak/codemirror2/mode/yaml/yaml.js +95 -0
  121. data/lib/public/milksteak/codemirror2/theme/cobalt.css +18 -0
  122. data/lib/public/milksteak/codemirror2/theme/eclipse.css +25 -0
  123. data/lib/public/milksteak/codemirror2/theme/elegant.css +10 -0
  124. data/lib/public/milksteak/codemirror2/theme/monokai.css +28 -0
  125. data/lib/public/milksteak/codemirror2/theme/neat.css +9 -0
  126. data/lib/public/milksteak/codemirror2/theme/night.css +21 -0
  127. data/lib/public/milksteak/codemirror2/theme/rubyblue.css +21 -0
  128. data/lib/public/milksteak/css/bootstrap-responsive.css +567 -0
  129. data/lib/public/milksteak/css/bootstrap-responsive.min.css +3 -0
  130. data/lib/public/milksteak/css/bootstrap.css +3365 -0
  131. data/lib/public/milksteak/css/bootstrap.min.css +610 -0
  132. data/lib/public/milksteak/css/calendrical.css +69 -0
  133. data/lib/public/milksteak/css/prettify.css +52 -0
  134. data/lib/public/milksteak/css/style.css +8 -0
  135. data/lib/public/milksteak/img/glyphicons-halflings-white.png +0 -0
  136. data/lib/public/milksteak/img/glyphicons-halflings.png +0 -0
  137. data/lib/public/milksteak/img/spinner.gif +0 -0
  138. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree.asp +44 -0
  139. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree.aspx +31 -0
  140. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree.cf +19 -0
  141. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree.jsp +49 -0
  142. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree.php +43 -0
  143. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree.pl +102 -0
  144. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree.py +25 -0
  145. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree.rb +61 -0
  146. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree_huck.lasso +36 -0
  147. data/lib/public/milksteak/jqueryFileTree/connectors/jqueryFileTree_sabourdin.lasso +48 -0
  148. data/lib/public/milksteak/jqueryFileTree/images/application.png +0 -0
  149. data/lib/public/milksteak/jqueryFileTree/images/code.png +0 -0
  150. data/lib/public/milksteak/jqueryFileTree/images/css.png +0 -0
  151. data/lib/public/milksteak/jqueryFileTree/images/db.png +0 -0
  152. data/lib/public/milksteak/jqueryFileTree/images/directory.png +0 -0
  153. data/lib/public/milksteak/jqueryFileTree/images/doc.png +0 -0
  154. data/lib/public/milksteak/jqueryFileTree/images/file.png +0 -0
  155. data/lib/public/milksteak/jqueryFileTree/images/film.png +0 -0
  156. data/lib/public/milksteak/jqueryFileTree/images/flash.png +0 -0
  157. data/lib/public/milksteak/jqueryFileTree/images/folder_open.png +0 -0
  158. data/lib/public/milksteak/jqueryFileTree/images/html.png +0 -0
  159. data/lib/public/milksteak/jqueryFileTree/images/java.png +0 -0
  160. data/lib/public/milksteak/jqueryFileTree/images/linux.png +0 -0
  161. data/lib/public/milksteak/jqueryFileTree/images/music.png +0 -0
  162. data/lib/public/milksteak/jqueryFileTree/images/pdf.png +0 -0
  163. data/lib/public/milksteak/jqueryFileTree/images/php.png +0 -0
  164. data/lib/public/milksteak/jqueryFileTree/images/picture.png +0 -0
  165. data/lib/public/milksteak/jqueryFileTree/images/ppt.png +0 -0
  166. data/lib/public/milksteak/jqueryFileTree/images/psd.png +0 -0
  167. data/lib/public/milksteak/jqueryFileTree/images/ruby.png +0 -0
  168. data/lib/public/milksteak/jqueryFileTree/images/script.png +0 -0
  169. data/lib/public/milksteak/jqueryFileTree/images/spinner.gif +0 -0
  170. data/lib/public/milksteak/jqueryFileTree/images/txt.png +0 -0
  171. data/lib/public/milksteak/jqueryFileTree/images/xls.png +0 -0
  172. data/lib/public/milksteak/jqueryFileTree/images/zip.png +0 -0
  173. data/lib/public/milksteak/jqueryFileTree/jqueryFileTree.css +91 -0
  174. data/lib/public/milksteak/jqueryFileTree/jqueryFileTree.js +95 -0
  175. data/lib/public/milksteak/js/app.js +0 -0
  176. data/lib/public/milksteak/js/backbone.js +1290 -0
  177. data/lib/public/milksteak/js/bootstrap-alert.js +91 -0
  178. data/lib/public/milksteak/js/bootstrap-button.js +98 -0
  179. data/lib/public/milksteak/js/bootstrap-carousel.js +154 -0
  180. data/lib/public/milksteak/js/bootstrap-collapse.js +136 -0
  181. data/lib/public/milksteak/js/bootstrap-dropdown.js +92 -0
  182. data/lib/public/milksteak/js/bootstrap-modal.js +209 -0
  183. data/lib/public/milksteak/js/bootstrap-popover.js +95 -0
  184. data/lib/public/milksteak/js/bootstrap-scrollspy.js +125 -0
  185. data/lib/public/milksteak/js/bootstrap-tab.js +130 -0
  186. data/lib/public/milksteak/js/bootstrap-tooltip.js +270 -0
  187. data/lib/public/milksteak/js/bootstrap-transition.js +51 -0
  188. data/lib/public/milksteak/js/bootstrap-typeahead.js +271 -0
  189. data/lib/public/milksteak/js/bootstrap.js +1722 -0
  190. data/lib/public/milksteak/js/bootstrap.min.js +1 -0
  191. data/lib/public/milksteak/js/jquery-ui.min.js +15 -0
  192. data/lib/public/milksteak/js/jquery.calendrical.js +490 -0
  193. data/lib/public/milksteak/js/jquery.easing.js +146 -0
  194. data/lib/public/milksteak/js/jquery.js +9252 -0
  195. data/lib/public/milksteak/js/mustache.js +536 -0
  196. data/lib/public/milksteak/js/prettify.js +28 -0
  197. data/lib/public/milksteak/js/underscore.js +999 -0
  198. data/lib/public/milksteak/markitup/.DS_Store +0 -0
  199. data/lib/public/milksteak/markitup/jquery.markitup.js +593 -0
  200. data/lib/public/milksteak/markitup/sets/default/images/bold.png +0 -0
  201. data/lib/public/milksteak/markitup/sets/default/images/clean.png +0 -0
  202. data/lib/public/milksteak/markitup/sets/default/images/image.png +0 -0
  203. data/lib/public/milksteak/markitup/sets/default/images/italic.png +0 -0
  204. data/lib/public/milksteak/markitup/sets/default/images/link.png +0 -0
  205. data/lib/public/milksteak/markitup/sets/default/images/list-bullet.png +0 -0
  206. data/lib/public/milksteak/markitup/sets/default/images/list-numeric.png +0 -0
  207. data/lib/public/milksteak/markitup/sets/default/images/picture.png +0 -0
  208. data/lib/public/milksteak/markitup/sets/default/images/preview.png +0 -0
  209. data/lib/public/milksteak/markitup/sets/default/images/stroke.png +0 -0
  210. data/lib/public/milksteak/markitup/sets/default/set.js +30 -0
  211. data/lib/public/milksteak/markitup/sets/default/style.css +34 -0
  212. data/lib/public/milksteak/markitup/sets/textile/images/bold.png +0 -0
  213. data/lib/public/milksteak/markitup/sets/textile/images/code.png +0 -0
  214. data/lib/public/milksteak/markitup/sets/textile/images/h1.png +0 -0
  215. data/lib/public/milksteak/markitup/sets/textile/images/h2.png +0 -0
  216. data/lib/public/milksteak/markitup/sets/textile/images/h3.png +0 -0
  217. data/lib/public/milksteak/markitup/sets/textile/images/h4.png +0 -0
  218. data/lib/public/milksteak/markitup/sets/textile/images/h5.png +0 -0
  219. data/lib/public/milksteak/markitup/sets/textile/images/h6.png +0 -0
  220. data/lib/public/milksteak/markitup/sets/textile/images/italic.png +0 -0
  221. data/lib/public/milksteak/markitup/sets/textile/images/link.png +0 -0
  222. data/lib/public/milksteak/markitup/sets/textile/images/list-bullet.png +0 -0
  223. data/lib/public/milksteak/markitup/sets/textile/images/list-numeric.png +0 -0
  224. data/lib/public/milksteak/markitup/sets/textile/images/paragraph.png +0 -0
  225. data/lib/public/milksteak/markitup/sets/textile/images/picture.png +0 -0
  226. data/lib/public/milksteak/markitup/sets/textile/images/preview.png +0 -0
  227. data/lib/public/milksteak/markitup/sets/textile/images/quotes.png +0 -0
  228. data/lib/public/milksteak/markitup/sets/textile/images/stroke.png +0 -0
  229. data/lib/public/milksteak/markitup/sets/textile/set.js +33 -0
  230. data/lib/public/milksteak/markitup/sets/textile/style.css +60 -0
  231. data/lib/public/milksteak/markitup/skins/markitup/images/bg-container.png +0 -0
  232. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor-bbcode.png +0 -0
  233. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor-dotclear.png +0 -0
  234. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor-html.png +0 -0
  235. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor-json.png +0 -0
  236. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor-markdown.png +0 -0
  237. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor-textile.png +0 -0
  238. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor-wiki.png +0 -0
  239. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor-xml.png +0 -0
  240. data/lib/public/milksteak/markitup/skins/markitup/images/bg-editor.png +0 -0
  241. data/lib/public/milksteak/markitup/skins/markitup/images/handle.png +0 -0
  242. data/lib/public/milksteak/markitup/skins/markitup/images/menu.png +0 -0
  243. data/lib/public/milksteak/markitup/skins/markitup/images/submenu.png +0 -0
  244. data/lib/public/milksteak/markitup/skins/markitup/style.css +147 -0
  245. data/lib/public/milksteak/markitup/skins/simple/images/handle.png +0 -0
  246. data/lib/public/milksteak/markitup/skins/simple/images/menu.png +0 -0
  247. data/lib/public/milksteak/markitup/skins/simple/images/submenu.png +0 -0
  248. data/lib/public/milksteak/markitup/skins/simple/style.css +118 -0
  249. data/lib/public/milksteak/markitup/templates/preview.css +5 -0
  250. data/lib/public/milksteak/markitup/templates/preview.html +11 -0
  251. data/lib/public/milksteak/uploadify-v2.1.4/cancel.png +0 -0
  252. data/lib/public/milksteak/uploadify-v2.1.4/check.php +35 -0
  253. data/lib/public/milksteak/uploadify-v2.1.4/expressInstall.swf +0 -0
  254. data/lib/public/milksteak/uploadify-v2.1.4/jquery-1.4.2.min.js +154 -0
  255. data/lib/public/milksteak/uploadify-v2.1.4/jquery.uploadify.v2.1.4.js +296 -0
  256. data/lib/public/milksteak/uploadify-v2.1.4/jquery.uploadify.v2.1.4.min.js +26 -0
  257. data/lib/public/milksteak/uploadify-v2.1.4/swfobject.js +4 -0
  258. data/lib/public/milksteak/uploadify-v2.1.4/uploadify.allglyphs.swf +0 -0
  259. data/lib/public/milksteak/uploadify-v2.1.4/uploadify.css +53 -0
  260. data/lib/public/milksteak/uploadify-v2.1.4/uploadify.fla +0 -0
  261. data/lib/public/milksteak/uploadify-v2.1.4/uploadify.php +46 -0
  262. data/lib/public/milksteak/uploadify-v2.1.4/uploadify.swf +0 -0
  263. data/lib/public/milksteak/wmd/Markdown.Converter.js +1332 -0
  264. data/lib/public/milksteak/wmd/Markdown.Editor.js +2160 -0
  265. data/lib/public/milksteak/wmd/Markdown.Sanitizer.js +108 -0
  266. data/lib/public/milksteak/wmd/wmd-buttons.png +0 -0
  267. data/lib/public/milksteak/wmd/wmd.css +103 -0
  268. data/lib/public/milksteak/wymeditor/iframe/default/lbl-blockquote.png +0 -0
  269. data/lib/public/milksteak/wymeditor/iframe/default/lbl-h1.png +0 -0
  270. data/lib/public/milksteak/wymeditor/iframe/default/lbl-h2.png +0 -0
  271. data/lib/public/milksteak/wymeditor/iframe/default/lbl-h3.png +0 -0
  272. data/lib/public/milksteak/wymeditor/iframe/default/lbl-h4.png +0 -0
  273. data/lib/public/milksteak/wymeditor/iframe/default/lbl-h5.png +0 -0
  274. data/lib/public/milksteak/wymeditor/iframe/default/lbl-h6.png +0 -0
  275. data/lib/public/milksteak/wymeditor/iframe/default/lbl-p.png +0 -0
  276. data/lib/public/milksteak/wymeditor/iframe/default/lbl-pre.png +0 -0
  277. data/lib/public/milksteak/wymeditor/iframe/default/wymiframe.css +90 -0
  278. data/lib/public/milksteak/wymeditor/iframe/default/wymiframe.html +26 -0
  279. data/lib/public/milksteak/wymeditor/jquery.wymeditor.js +4688 -0
  280. data/lib/public/milksteak/wymeditor/jquery.wymeditor.min.js +1 -0
  281. data/lib/public/milksteak/wymeditor/jquery.wymeditor.pack.js +1 -0
  282. data/lib/public/milksteak/wymeditor/lang/bg.js +45 -0
  283. data/lib/public/milksteak/wymeditor/lang/ca.js +45 -0
  284. data/lib/public/milksteak/wymeditor/lang/cs.js +45 -0
  285. data/lib/public/milksteak/wymeditor/lang/cy.js +45 -0
  286. data/lib/public/milksteak/wymeditor/lang/de.js +45 -0
  287. data/lib/public/milksteak/wymeditor/lang/en.js +45 -0
  288. data/lib/public/milksteak/wymeditor/lang/es.js +45 -0
  289. data/lib/public/milksteak/wymeditor/lang/fa.js +46 -0
  290. data/lib/public/milksteak/wymeditor/lang/fi.js +44 -0
  291. data/lib/public/milksteak/wymeditor/lang/fr.js +45 -0
  292. data/lib/public/milksteak/wymeditor/lang/gl.js +45 -0
  293. data/lib/public/milksteak/wymeditor/lang/he.js +45 -0
  294. data/lib/public/milksteak/wymeditor/lang/hr.js +45 -0
  295. data/lib/public/milksteak/wymeditor/lang/hu.js +45 -0
  296. data/lib/public/milksteak/wymeditor/lang/it.js +45 -0
  297. data/lib/public/milksteak/wymeditor/lang/nb.js +45 -0
  298. data/lib/public/milksteak/wymeditor/lang/nl.js +45 -0
  299. data/lib/public/milksteak/wymeditor/lang/nn.js +45 -0
  300. data/lib/public/milksteak/wymeditor/lang/pl.js +45 -0
  301. data/lib/public/milksteak/wymeditor/lang/pt-br.js +45 -0
  302. data/lib/public/milksteak/wymeditor/lang/pt.js +45 -0
  303. data/lib/public/milksteak/wymeditor/lang/ru.js +45 -0
  304. data/lib/public/milksteak/wymeditor/lang/sv.js +45 -0
  305. data/lib/public/milksteak/wymeditor/lang/tr.js +45 -0
  306. data/lib/public/milksteak/wymeditor/lang/zh_cn.js +47 -0
  307. data/lib/public/milksteak/wymeditor/plugins/embed/jquery.wymeditor.embed.js +52 -0
  308. data/lib/public/milksteak/wymeditor/plugins/fullscreen/icon_fullscreen.gif +0 -0
  309. data/lib/public/milksteak/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js +127 -0
  310. data/lib/public/milksteak/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js +57 -0
  311. data/lib/public/milksteak/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js +91 -0
  312. data/lib/public/milksteak/wymeditor/plugins/resizable/readme.txt +124 -0
  313. data/lib/public/milksteak/wymeditor/plugins/tidy/README +19 -0
  314. data/lib/public/milksteak/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js +82 -0
  315. data/lib/public/milksteak/wymeditor/plugins/tidy/tidy.php +36 -0
  316. data/lib/public/milksteak/wymeditor/plugins/tidy/wand.png +0 -0
  317. data/lib/public/milksteak/wymeditor/skins/compact/icons.png +0 -0
  318. data/lib/public/milksteak/wymeditor/skins/compact/skin.css +134 -0
  319. data/lib/public/milksteak/wymeditor/skins/compact/skin.js +35 -0
  320. data/lib/public/milksteak/wymeditor/skins/default/icons.png +0 -0
  321. data/lib/public/milksteak/wymeditor/skins/default/skin.css +133 -0
  322. data/lib/public/milksteak/wymeditor/skins/default/skin.js +40 -0
  323. data/lib/public/milksteak/wymeditor/skins/minimal/images/bg.header.gif +0 -0
  324. data/lib/public/milksteak/wymeditor/skins/minimal/images/bg.selector.silver.gif +0 -0
  325. data/lib/public/milksteak/wymeditor/skins/minimal/images/bg.wymeditor.png +0 -0
  326. data/lib/public/milksteak/wymeditor/skins/minimal/images/icons.silver.gif +0 -0
  327. data/lib/public/milksteak/wymeditor/skins/minimal/skin.css +131 -0
  328. data/lib/public/milksteak/wymeditor/skins/minimal/skin.js +30 -0
  329. data/lib/public/milksteak/wymeditor/skins/silver/COPYING +674 -0
  330. data/lib/public/milksteak/wymeditor/skins/silver/README +27 -0
  331. data/lib/public/milksteak/wymeditor/skins/silver/images/bg.header.gif +0 -0
  332. data/lib/public/milksteak/wymeditor/skins/silver/images/bg.selector.silver.gif +0 -0
  333. data/lib/public/milksteak/wymeditor/skins/silver/images/bg.wymeditor.png +0 -0
  334. data/lib/public/milksteak/wymeditor/skins/silver/images/icons.silver.gif +0 -0
  335. data/lib/public/milksteak/wymeditor/skins/silver/skin.css +297 -0
  336. data/lib/public/milksteak/wymeditor/skins/silver/skin.js +61 -0
  337. data/lib/public/milksteak/wymeditor/skins/twopanels/icons.png +0 -0
  338. data/lib/public/milksteak/wymeditor/skins/twopanels/skin.css +134 -0
  339. data/lib/public/milksteak/wymeditor/skins/twopanels/skin.js +39 -0
  340. data/lib/public/milksteak/wymeditor/skins/wymeditor_icon.png +0 -0
  341. data/lib/views/layouts/admin.erb +8 -0
  342. data/lib/views/login.erb +1 -0
  343. data/milksteak.gemspec +30 -13
  344. data/spec/fixtures/pages/sample_page.yml +5 -0
  345. data/spec/lib/milksteak/cms_spec.rb +12 -0
  346. data/spec/models/page_spec.rb +58 -0
  347. data/spec/spec_helper.rb +19 -0
  348. metadata +429 -10
  349. data/LICENSE +0 -22
  350. data/README.md +0 -29
data/.gitignore CHANGED
@@ -1,17 +1,4 @@
1
1
  *.gem
2
- *.rbc
3
2
  .bundle
4
- .config
5
- .yardoc
6
3
  Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format nested
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in milksteak.gemspec
4
4
  gemspec
data/Guardfile ADDED
@@ -0,0 +1,8 @@
1
+ guard 'rspec' do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch(%r{^lib/milksteak/(.+)\.rb$}) { |m| "spec/lib/milksteak/#{m[1]}_spec.rb" }
5
+ watch(%r{^lib/models/(.+)\.rb$}) { |m| "spec/models/#{m[1]}_spec.rb" }
6
+ watch('spec/spec_helper.rb') { "spec" }
7
+ end
8
+
data/Rakefile CHANGED
@@ -1,2 +1 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
data/Readme.md ADDED
@@ -0,0 +1,37 @@
1
+ # Installation
2
+
3
+ gem install milksteak
4
+ gem 'milksteak' # if using bundler
5
+
6
+ # Configuration
7
+
8
+ In your site's config, make sure milksteak is being required, then set your milk_root:
9
+
10
+ # This would create and use a milk/ folder in the root of your site.
11
+ Milksteak::Admin.set :milk_root, File.join(File.dirname(__FILE__), "milk")
12
+
13
+ If you plan on using the Milksteak::Admin module, include it in your rack cascade.
14
+ Here's an example, but you might need to figure out an alternative way if using
15
+ rails or some other setup:
16
+
17
+ run Rack::Cascade.new [Sinatra::Application, Milksteak::Admin]
18
+
19
+ # Usage
20
+
21
+ There are several ways to use Milksteak for content management. The simplest example
22
+ would be to include an editable area on a random page. Let's say we want some sidebar
23
+ text to be editable.
24
+
25
+ ## views/sidebar.erb
26
+
27
+ <%= Milksteak::Page.render("sidebar-content") %>
28
+
29
+ ## milk/pages/sidebar-content.yml
30
+
31
+ ---
32
+ yml_variables: can go here
33
+ and_then_you: can use them below in content.
34
+ ---
35
+
36
+ Here's the sidebar content. I can use the {{yml_variables}} and such.
37
+
data/lib/helpers.rb ADDED
File without changes
@@ -0,0 +1,17 @@
1
+ module Milksteak
2
+ module Cms
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ dup._call(env)
9
+ end
10
+
11
+ def _call(env)
12
+ puts "OK"
13
+ @status, @headers, @response = @app.call(env)
14
+ [@status, @headers, @response]
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module Milksteak
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/milksteak.rb CHANGED
@@ -1,5 +1,56 @@
1
1
  require "milksteak/version"
2
+ require "sinatra/base"
3
+ require "models/user"
4
+ require "models/page"
5
+ require "liquid"
6
+ require "bluecloth"
2
7
 
3
8
  module Milksteak
4
- # Your code goes here...
9
+ class Admin < Sinatra::Base
10
+ set :views, File.join(File.dirname(__FILE__), "views")
11
+ set :public_folder, File.join(File.dirname(__FILE__), "public")
12
+
13
+ helpers do
14
+ def h(s); ERB::Util.h(s); end
15
+
16
+ def erb(*args)
17
+ args[0] = args[0].to_sym
18
+ if args[1]
19
+ args[1][:layout] = "layouts/#{args[1][:layout]}".to_sym if args[1][:layout]
20
+ end
21
+ super
22
+ end
23
+
24
+ def coffee(*args)
25
+ args[0] = args[0].to_sym
26
+ super
27
+ end
28
+
29
+ def partial(template, *args)
30
+ template_array = template.to_s.split('/')
31
+ template = template_array[0..-2].join('/') + "/_#{template_array[-1]}"
32
+ options = args.last.is_a?(Hash) ? args.pop : {}
33
+ erb(:"#{template}", options)
34
+ end
35
+
36
+ def flash
37
+ session[:flash] = {} if session[:flash] && session[:flash].class != Hash
38
+ session[:flash] ||= {}
39
+ end
40
+
41
+ def flash_messages # prints flash messages nicely and consistently
42
+ return if !session[:flash] or session[:flash].empty?
43
+ msgs = []
44
+ [:success, :error, :info].each do |notice|
45
+ msgs << "<div class=\"alert alert-#{notice}\"><a class=\"close\" data-dismiss=\"alert\">x</a>#{flash[notice]}</div>" if flash[notice]
46
+ end
47
+ flash.clear
48
+ msgs.join
49
+ end
50
+ end
51
+
52
+ get "/milksteak" do
53
+ erb "login", :layout => "admin"
54
+ end
55
+ end
5
56
  end
@@ -0,0 +1,73 @@
1
+ module Milksteak
2
+ class Page
3
+ attr_accessor :name, :file, :data, :content, :output
4
+
5
+ def self.list
6
+ milk_root = Milksteak::Admin.milk_root
7
+ page_dir = File.join(Milksteak::Admin.milk_root, "pages")
8
+ FileUtils.mkdir(milk_root) unless File.exist? milk_root
9
+ FileUtils.mkdir(page_dir) unless File.exist? page_dir
10
+ Dir.glob("#{page_dir}/*.yml")
11
+ end
12
+
13
+ # loads a page from yaml, sets data and content attributes, returns a Milksteak::Page
14
+ def self.load(name, mode = "r")
15
+ milk_root = Milksteak::Admin.milk_root
16
+ page_dir = File.join(Milksteak::Admin.milk_root, "pages")
17
+ FileUtils.mkdir(milk_root) unless File.exist? milk_root
18
+ FileUtils.mkdir(page_dir) unless File.exist? page_dir
19
+
20
+ page_dir = File.join(page_dir, "#{name}.yml")
21
+ f = File.exist?(page_dir) ? File.open(page_dir, mode) : File.new(page_dir, mode)
22
+
23
+ p = self.new
24
+ p.name = name
25
+ p.file = f
26
+ p.read_yaml
27
+ p
28
+ end
29
+
30
+ # writes to a page. Replaces params and content, doesn't merge.
31
+ def self.write(name, params = {}, content)
32
+ p = self.load(name, "w+")
33
+ p.data = params
34
+ p.content = content
35
+ p.write_yaml
36
+ p.file.close
37
+ p
38
+ end
39
+
40
+ def self.render(name)
41
+ begin
42
+ p = self.load(name, "r")
43
+ rendered = Liquid::Template.parse(p.content).render(p.data)
44
+ BlueCloth.new(rendered).to_html
45
+ rescue Errno::ENOENT => e
46
+ ""
47
+ end
48
+ end
49
+
50
+ def write_yaml
51
+ if self.data.empty?
52
+ self.file.write("---\n")
53
+ else
54
+ self.file.write(YAML.dump(self.data))
55
+ end
56
+ self.file.write("---\n\n")
57
+ self.file.write(self.content)
58
+ end
59
+
60
+ def read_yaml
61
+ self.content = self.file.read
62
+ begin
63
+ if self.content =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)(.*)/m
64
+ self.content = $3
65
+ self.data = YAML.load($1)
66
+ end
67
+ rescue => e
68
+ puts "YAML Exception reading #{name}: #{e.message}"
69
+ end
70
+ self.data ||= {}
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,5 @@
1
+ module Milksteak
2
+
3
+ class User
4
+ end
5
+ end
@@ -0,0 +1,29 @@
1
+ // TODO number prefixes
2
+ (function() {
3
+ // Really primitive kill-ring implementation.
4
+ var killRing = [];
5
+ function addToRing(str) {
6
+ killRing.push(str);
7
+ if (killRing.length > 50) killRing.shift();
8
+ }
9
+ function getFromRing() { return killRing[killRing.length - 1] || ""; }
10
+ function popFromRing() { if (killRing.length > 1) killRing.pop(); return getFromRing(); }
11
+
12
+ CodeMirror.keyMap.emacs = {
13
+ "Ctrl-X": function(cm) {cm.setOption("keyMap", "emacs-Ctrl-X");},
14
+ "Ctrl-W": function(cm) {addToRing(cm.getSelection()); cm.replaceSelection("");},
15
+ "Ctrl-Alt-W": function(cm) {addToRing(cm.getSelection()); cm.replaceSelection("");},
16
+ "Alt-W": function(cm) {addToRing(cm.getSelection());},
17
+ "Ctrl-Y": function(cm) {cm.replaceSelection(getFromRing());},
18
+ "Alt-Y": function(cm) {cm.replaceSelection(popFromRing());},
19
+ "Ctrl-/": "undo", "Shift-Ctrl--": "undo", "Shift-Alt-,": "goDocStart", "Shift-Alt-.": "goDocEnd",
20
+ "Ctrl-S": "findNext", "Ctrl-R": "findPrev", "Ctrl-G": "clearSearch", "Shift-Alt-5": "replace",
21
+ "Ctrl-Z": "undo", "Cmd-Z": "undo",
22
+ fallthrough: ["basic", "emacsy"]
23
+ };
24
+
25
+ CodeMirror.keyMap["emacs-Ctrl-X"] = {
26
+ "Ctrl-S": "save", "Ctrl-W": "save", "S": "saveAll", "F": "open", "U": "undo", "K": "close",
27
+ auto: "emacs", catchall: function(cm) {/*ignore*/}
28
+ };
29
+ })();
@@ -0,0 +1,347 @@
1
+ (function() {
2
+ var count = "";
3
+ var sdir = "f";
4
+ var buf = "";
5
+ var yank = 0;
6
+ var mark = [];
7
+ function emptyBuffer() { buf = ""; }
8
+ function pushInBuffer(str) { buf += str; };
9
+ function pushCountDigit(digit) { return function(cm) {count += digit;} }
10
+ function popCount() { var i = parseInt(count); count = ""; return i || 1; }
11
+ function countTimes(func) {
12
+ if (typeof func == "string") func = CodeMirror.commands[func];
13
+ return function(cm) { for (var i = 0, c = popCount(); i < c; ++i) func(cm); }
14
+ }
15
+
16
+ function iterObj(o, f) {
17
+ for (var prop in o) if (o.hasOwnProperty(prop)) f(prop, o[prop]);
18
+ }
19
+
20
+ var word = [/\w/, /[^\w\s]/], bigWord = [/\S/];
21
+ function findWord(line, pos, dir, regexps) {
22
+ var stop = 0, next = -1;
23
+ if (dir > 0) { stop = line.length; next = 0; }
24
+ var start = stop, end = stop;
25
+ // Find bounds of next one.
26
+ outer: for (; pos != stop; pos += dir) {
27
+ for (var i = 0; i < regexps.length; ++i) {
28
+ if (regexps[i].test(line.charAt(pos + next))) {
29
+ start = pos;
30
+ for (; pos != stop; pos += dir) {
31
+ if (!regexps[i].test(line.charAt(pos + next))) break;
32
+ }
33
+ end = pos;
34
+ break outer;
35
+ }
36
+ }
37
+ }
38
+ return {from: Math.min(start, end), to: Math.max(start, end)};
39
+ }
40
+ function moveToWord(cm, regexps, dir, where) {
41
+ var cur = cm.getCursor(), ch = cur.ch, line = cm.getLine(cur.line), word;
42
+ while (true) {
43
+ word = findWord(line, ch, dir, regexps);
44
+ ch = word[where == "end" ? "to" : "from"];
45
+ if (ch == cur.ch && word.from != word.to) ch = word[dir < 0 ? "from" : "to"];
46
+ else break;
47
+ }
48
+ cm.setCursor(cur.line, word[where == "end" ? "to" : "from"], true);
49
+ }
50
+ function joinLineNext(cm) {
51
+ var cur = cm.getCursor(), ch = cur.ch, line = cm.getLine(cur.line);
52
+ CodeMirror.commands.goLineEnd(cm);
53
+ if (cur.line != cm.lineCount()) {
54
+ CodeMirror.commands.goLineEnd(cm);
55
+ cm.replaceSelection(" ", "end");
56
+ CodeMirror.commands.delCharRight(cm);
57
+ }
58
+ }
59
+ function editCursor(mode) {
60
+ if (mode == "vim-insert") {
61
+ // put in your cursor css changing code
62
+ } else if (mode == "vim") {
63
+ // put in your cursor css changing code
64
+ }
65
+ }
66
+ function delTillMark(cm, cHar) {
67
+ var i = mark[cHar], l = cm.getCursor().line, start = i > l ? l : i, end = i > l ? i : l;
68
+ cm.setCursor(start);
69
+ for (var c = start; c <= end; c++) {
70
+ pushInBuffer("\n"+cm.getLine(start));
71
+ cm.removeLine(start);
72
+ }
73
+ }
74
+ function yankTillMark(cm, cHar) {
75
+ var i = mark[cHar], l = cm.getCursor().line, start = i > l ? l : i, end = i > l ? i : l;
76
+ for (var c = start; c <= end; c++) {
77
+ pushInBuffer("\n"+cm.getLine(c));
78
+ }
79
+ cm.setCursor(start);
80
+ }
81
+
82
+ var map = CodeMirror.keyMap.vim = {
83
+ "0": function(cm) {count.length > 0 ? pushCountDigit("0")(cm) : CodeMirror.commands.goLineStart(cm);},
84
+ "A": function(cm) {popCount(); cm.setCursor(cm.getCursor().line, cm.getCursor().ch+1, true); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
85
+ "Shift-A": function(cm) {popCount(); CodeMirror.commands.goLineEnd(cm); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
86
+ "I": function(cm) {popCount(); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
87
+ "Shift-I": function(cm) {popCount(); CodeMirror.commands.goLineStartSmart(cm); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
88
+ "O": function(cm) {popCount(); CodeMirror.commands.goLineEnd(cm); cm.replaceSelection("\n", "end"); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
89
+ "Shift-O": function(cm) {popCount(); CodeMirror.commands.goLineStart(cm); cm.replaceSelection("\n", "start"); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
90
+ "G": function(cm) {cm.setOption("keyMap", "vim-prefix-g");},
91
+ "D": function(cm) {cm.setOption("keyMap", "vim-prefix-d"); emptyBuffer();},
92
+ "M": function(cm) {cm.setOption("keyMap", "vim-prefix-m"); mark = [];},
93
+ "Y": function(cm) {cm.setOption("keyMap", "vim-prefix-y"); emptyBuffer(); yank = 0;},
94
+ "/": function(cm) {var f = CodeMirror.commands.find; f && f(cm); sdir = "f"},
95
+ "Shift-/": function(cm) {
96
+ var f = CodeMirror.commands.find;
97
+ if (f) { f(cm); CodeMirror.commands.findPrev(cm); sdir = "r"; }
98
+ },
99
+ "N": function(cm) {
100
+ var fn = CodeMirror.commands.findNext;
101
+ if (fn) sdir != "r" ? fn(cm) : CodeMirror.commands.findPrev(cm);
102
+ },
103
+ "Shift-N": function(cm) {
104
+ var fn = CodeMirror.commands.findNext;
105
+ if (fn) sdir != "r" ? CodeMirror.commands.findPrev(cm) : fn.findNext(cm);
106
+ },
107
+ "Shift-G": function(cm) {count == "" ? cm.setCursor(cm.lineCount()) : cm.setCursor(parseInt(count)-1); popCount(); CodeMirror.commands.goLineStart(cm);},
108
+ catchall: function(cm) {/*ignore*/}
109
+ };
110
+ // Add bindings for number keys
111
+ for (var i = 1; i < 10; ++i) map[i] = pushCountDigit(i);
112
+ // Add bindings that are influenced by number keys
113
+ iterObj({"H": "goColumnLeft", "L": "goColumnRight", "J": "goLineDown", "K": "goLineUp",
114
+ "Left": "goColumnLeft", "Right": "goColumnRight", "Down": "goLineDown", "Up": "goLineUp",
115
+ "Backspace": "goCharLeft", "Space": "goCharRight",
116
+ "B": function(cm) {moveToWord(cm, word, -1, "end");},
117
+ "E": function(cm) {moveToWord(cm, word, 1, "end");},
118
+ "W": function(cm) {moveToWord(cm, word, 1, "start");},
119
+ "Shift-B": function(cm) {moveToWord(cm, bigWord, -1, "end");},
120
+ "Shift-E": function(cm) {moveToWord(cm, bigWord, 1, "end");},
121
+ "Shift-W": function(cm) {moveToWord(cm, bigWord, 1, "start");},
122
+ "X": function(cm) {CodeMirror.commands.delCharRight(cm)},
123
+ "P": function(cm) {
124
+ var cur = cm.getCursor().line;
125
+ if (buf!= "") {
126
+ CodeMirror.commands.goLineEnd(cm);
127
+ cm.replaceSelection(buf, "end");
128
+ }
129
+ cm.setCursor(cur+1);
130
+ },
131
+ "Shift-X": function(cm) {CodeMirror.commands.delCharLeft(cm)},
132
+ "Shift-J": function(cm) {joinLineNext(cm)},
133
+ "Shift-`": function(cm) {
134
+ var cur = cm.getCursor(), cHar = cm.getRange({line: cur.line, ch: cur.ch}, {line: cur.line, ch: cur.ch+1});
135
+ cHar = cHar != cHar.toLowerCase() ? cHar.toLowerCase() : cHar.toUpperCase();
136
+ cm.replaceRange(cHar, {line: cur.line, ch: cur.ch}, {line: cur.line, ch: cur.ch+1});
137
+ cm.setCursor(cur.line, cur.ch+1);
138
+ },
139
+ "Ctrl-B": function(cm) {CodeMirror.commands.goPageUp(cm)},
140
+ "Ctrl-F": function(cm) {CodeMirror.commands.goPageDown(cm)},
141
+ "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
142
+ "U": "undo", "Ctrl-R": "redo", "Shift-4": "goLineEnd"},
143
+ function(key, cmd) { map[key] = countTimes(cmd); });
144
+
145
+ CodeMirror.keyMap["vim-prefix-g"] = {
146
+ "E": countTimes(function(cm) { moveToWord(cm, word, -1, "start");}),
147
+ "Shift-E": countTimes(function(cm) { moveToWord(cm, bigWord, -1, "start");}),
148
+ auto: "vim",
149
+ catchall: function(cm) {/*ignore*/}
150
+ };
151
+
152
+ CodeMirror.keyMap["vim-prefix-m"] = {
153
+ "A": function(cm) {mark["A"] = cm.getCursor().line;},
154
+ "Shift-A": function(cm) {mark["Shift-A"] = cm.getCursor().line;},
155
+ "B": function(cm) {mark["B"] = cm.getCursor().line;},
156
+ "Shift-B": function(cm) {mark["Shift-B"] = cm.getCursor().line;},
157
+ "C": function(cm) {mark["C"] = cm.getCursor().line;},
158
+ "Shift-C": function(cm) {mark["Shift-C"] = cm.getCursor().line;},
159
+ "D": function(cm) {mark["D"] = cm.getCursor().line;},
160
+ "Shift-D": function(cm) {mark["Shift-D"] = cm.getCursor().line;},
161
+ "E": function(cm) {mark["E"] = cm.getCursor().line;},
162
+ "Shift-E": function(cm) {mark["Shift-E"] = cm.getCursor().line;},
163
+ "F": function(cm) {mark["F"] = cm.getCursor().line;},
164
+ "Shift-F": function(cm) {mark["Shift-F"] = cm.getCursor().line;},
165
+ "G": function(cm) {mark["G"] = cm.getCursor().line;},
166
+ "Shift-G": function(cm) {mark["Shift-G"] = cm.getCursor().line;},
167
+ "H": function(cm) {mark["H"] = cm.getCursor().line;},
168
+ "Shift-H": function(cm) {mark["Shift-H"] = cm.getCursor().line;},
169
+ "I": function(cm) {mark["I"] = cm.getCursor().line;},
170
+ "Shift-I": function(cm) {mark["Shift-I"] = cm.getCursor().line;},
171
+ "J": function(cm) {mark["J"] = cm.getCursor().line;},
172
+ "Shift-J": function(cm) {mark["Shift-J"] = cm.getCursor().line;},
173
+ "K": function(cm) {mark["K"] = cm.getCursor().line;},
174
+ "Shift-K": function(cm) {mark["Shift-K"] = cm.getCursor().line;},
175
+ "L": function(cm) {mark["L"] = cm.getCursor().line;},
176
+ "Shift-L": function(cm) {mark["Shift-L"] = cm.getCursor().line;},
177
+ "M": function(cm) {mark["M"] = cm.getCursor().line;},
178
+ "Shift-M": function(cm) {mark["Shift-M"] = cm.getCursor().line;},
179
+ "N": function(cm) {mark["N"] = cm.getCursor().line;},
180
+ "Shift-N": function(cm) {mark["Shift-N"] = cm.getCursor().line;},
181
+ "O": function(cm) {mark["O"] = cm.getCursor().line;},
182
+ "Shift-O": function(cm) {mark["Shift-O"] = cm.getCursor().line;},
183
+ "P": function(cm) {mark["P"] = cm.getCursor().line;},
184
+ "Shift-P": function(cm) {mark["Shift-P"] = cm.getCursor().line;},
185
+ "Q": function(cm) {mark["Q"] = cm.getCursor().line;},
186
+ "Shift-Q": function(cm) {mark["Shift-Q"] = cm.getCursor().line;},
187
+ "R": function(cm) {mark["R"] = cm.getCursor().line;},
188
+ "Shift-R": function(cm) {mark["Shift-R"] = cm.getCursor().line;},
189
+ "S": function(cm) {mark["S"] = cm.getCursor().line;},
190
+ "Shift-S": function(cm) {mark["Shift-S"] = cm.getCursor().line;},
191
+ "T": function(cm) {mark["T"] = cm.getCursor().line;},
192
+ "Shift-T": function(cm) {mark["Shift-T"] = cm.getCursor().line;},
193
+ "U": function(cm) {mark["U"] = cm.getCursor().line;},
194
+ "Shift-U": function(cm) {mark["Shift-U"] = cm.getCursor().line;},
195
+ "V": function(cm) {mark["V"] = cm.getCursor().line;},
196
+ "Shift-V": function(cm) {mark["Shift-V"] = cm.getCursor().line;},
197
+ "W": function(cm) {mark["W"] = cm.getCursor().line;},
198
+ "Shift-W": function(cm) {mark["Shift-W"] = cm.getCursor().line;},
199
+ "X": function(cm) {mark["X"] = cm.getCursor().line;},
200
+ "Shift-X": function(cm) {mark["Shift-X"] = cm.getCursor().line;},
201
+ "Y": function(cm) {mark["Y"] = cm.getCursor().line;},
202
+ "Shift-Y": function(cm) {mark["Shift-Y"] = cm.getCursor().line;},
203
+ "Z": function(cm) {mark["Z"] = cm.getCursor().line;},
204
+ "Shift-Z": function(cm) {mark["Shift-Z"] = cm.getCursor().line;},
205
+ auto: "vim",
206
+ catchall: function(cm) {/*ignore*/}
207
+ }
208
+
209
+ CodeMirror.keyMap["vim-prefix-d"] = {
210
+ "D": countTimes(function(cm) { pushInBuffer("\n"+cm.getLine(cm.getCursor().line)); cm.removeLine(cm.getCursor().line); }),
211
+ "'": function(cm) {cm.setOption("keyMap", "vim-prefix-d'"); emptyBuffer();},
212
+ auto: "vim",
213
+ catchall: function(cm) {/*ignore*/}
214
+ };
215
+
216
+ CodeMirror.keyMap["vim-prefix-d'"] = {
217
+ "A": function(cm) {delTillMark(cm,"A");},
218
+ "Shift-A": function(cm) {delTillMark(cm,"Shift-A");},
219
+ "B": function(cm) {delTillMark(cm,"B");},
220
+ "Shift-B": function(cm) {delTillMark(cm,"Shift-B");},
221
+ "C": function(cm) {delTillMark(cm,"C");},
222
+ "Shift-C": function(cm) {delTillMark(cm,"Shift-C");},
223
+ "D": function(cm) {delTillMark(cm,"D");},
224
+ "Shift-D": function(cm) {delTillMark(cm,"Shift-D");},
225
+ "E": function(cm) {delTillMark(cm,"E");},
226
+ "Shift-E": function(cm) {delTillMark(cm,"Shift-E");},
227
+ "F": function(cm) {delTillMark(cm,"F");},
228
+ "Shift-F": function(cm) {delTillMark(cm,"Shift-F");},
229
+ "G": function(cm) {delTillMark(cm,"G");},
230
+ "Shift-G": function(cm) {delTillMark(cm,"Shift-G");},
231
+ "H": function(cm) {delTillMark(cm,"H");},
232
+ "Shift-H": function(cm) {delTillMark(cm,"Shift-H");},
233
+ "I": function(cm) {delTillMark(cm,"I");},
234
+ "Shift-I": function(cm) {delTillMark(cm,"Shift-I");},
235
+ "J": function(cm) {delTillMark(cm,"J");},
236
+ "Shift-J": function(cm) {delTillMark(cm,"Shift-J");},
237
+ "K": function(cm) {delTillMark(cm,"K");},
238
+ "Shift-K": function(cm) {delTillMark(cm,"Shift-K");},
239
+ "L": function(cm) {delTillMark(cm,"L");},
240
+ "Shift-L": function(cm) {delTillMark(cm,"Shift-L");},
241
+ "M": function(cm) {delTillMark(cm,"M");},
242
+ "Shift-M": function(cm) {delTillMark(cm,"Shift-M");},
243
+ "N": function(cm) {delTillMark(cm,"N");},
244
+ "Shift-N": function(cm) {delTillMark(cm,"Shift-N");},
245
+ "O": function(cm) {delTillMark(cm,"O");},
246
+ "Shift-O": function(cm) {delTillMark(cm,"Shift-O");},
247
+ "P": function(cm) {delTillMark(cm,"P");},
248
+ "Shift-P": function(cm) {delTillMark(cm,"Shift-P");},
249
+ "Q": function(cm) {delTillMark(cm,"Q");},
250
+ "Shift-Q": function(cm) {delTillMark(cm,"Shift-Q");},
251
+ "R": function(cm) {delTillMark(cm,"R");},
252
+ "Shift-R": function(cm) {delTillMark(cm,"Shift-R");},
253
+ "S": function(cm) {delTillMark(cm,"S");},
254
+ "Shift-S": function(cm) {delTillMark(cm,"Shift-S");},
255
+ "T": function(cm) {delTillMark(cm,"T");},
256
+ "Shift-T": function(cm) {delTillMark(cm,"Shift-T");},
257
+ "U": function(cm) {delTillMark(cm,"U");},
258
+ "Shift-U": function(cm) {delTillMark(cm,"Shift-U");},
259
+ "V": function(cm) {delTillMark(cm,"V");},
260
+ "Shift-V": function(cm) {delTillMark(cm,"Shift-V");},
261
+ "W": function(cm) {delTillMark(cm,"W");},
262
+ "Shift-W": function(cm) {delTillMark(cm,"Shift-W");},
263
+ "X": function(cm) {delTillMark(cm,"X");},
264
+ "Shift-X": function(cm) {delTillMark(cm,"Shift-X");},
265
+ "Y": function(cm) {delTillMark(cm,"Y");},
266
+ "Shift-Y": function(cm) {delTillMark(cm,"Shift-Y");},
267
+ "Z": function(cm) {delTillMark(cm,"Z");},
268
+ "Shift-Z": function(cm) {delTillMark(cm,"Shift-Z");},
269
+ auto: "vim",
270
+ catchall: function(cm) {/*ignore*/}
271
+ };
272
+
273
+ CodeMirror.keyMap["vim-prefix-y'"] = {
274
+ "A": function(cm) {yankTillMark(cm,"A");},
275
+ "Shift-A": function(cm) {yankTillMark(cm,"Shift-A");},
276
+ "B": function(cm) {yankTillMark(cm,"B");},
277
+ "Shift-B": function(cm) {yankTillMark(cm,"Shift-B");},
278
+ "C": function(cm) {yankTillMark(cm,"C");},
279
+ "Shift-C": function(cm) {yankTillMark(cm,"Shift-C");},
280
+ "D": function(cm) {yankTillMark(cm,"D");},
281
+ "Shift-D": function(cm) {yankTillMark(cm,"Shift-D");},
282
+ "E": function(cm) {yankTillMark(cm,"E");},
283
+ "Shift-E": function(cm) {yankTillMark(cm,"Shift-E");},
284
+ "F": function(cm) {yankTillMark(cm,"F");},
285
+ "Shift-F": function(cm) {yankTillMark(cm,"Shift-F");},
286
+ "G": function(cm) {yankTillMark(cm,"G");},
287
+ "Shift-G": function(cm) {yankTillMark(cm,"Shift-G");},
288
+ "H": function(cm) {yankTillMark(cm,"H");},
289
+ "Shift-H": function(cm) {yankTillMark(cm,"Shift-H");},
290
+ "I": function(cm) {yankTillMark(cm,"I");},
291
+ "Shift-I": function(cm) {yankTillMark(cm,"Shift-I");},
292
+ "J": function(cm) {yankTillMark(cm,"J");},
293
+ "Shift-J": function(cm) {yankTillMark(cm,"Shift-J");},
294
+ "K": function(cm) {yankTillMark(cm,"K");},
295
+ "Shift-K": function(cm) {yankTillMark(cm,"Shift-K");},
296
+ "L": function(cm) {yankTillMark(cm,"L");},
297
+ "Shift-L": function(cm) {yankTillMark(cm,"Shift-L");},
298
+ "M": function(cm) {yankTillMark(cm,"M");},
299
+ "Shift-M": function(cm) {yankTillMark(cm,"Shift-M");},
300
+ "N": function(cm) {yankTillMark(cm,"N");},
301
+ "Shift-N": function(cm) {yankTillMark(cm,"Shift-N");},
302
+ "O": function(cm) {yankTillMark(cm,"O");},
303
+ "Shift-O": function(cm) {yankTillMark(cm,"Shift-O");},
304
+ "P": function(cm) {yankTillMark(cm,"P");},
305
+ "Shift-P": function(cm) {yankTillMark(cm,"Shift-P");},
306
+ "Q": function(cm) {yankTillMark(cm,"Q");},
307
+ "Shift-Q": function(cm) {yankTillMark(cm,"Shift-Q");},
308
+ "R": function(cm) {yankTillMark(cm,"R");},
309
+ "Shift-R": function(cm) {yankTillMark(cm,"Shift-R");},
310
+ "S": function(cm) {yankTillMark(cm,"S");},
311
+ "Shift-S": function(cm) {yankTillMark(cm,"Shift-S");},
312
+ "T": function(cm) {yankTillMark(cm,"T");},
313
+ "Shift-T": function(cm) {yankTillMark(cm,"Shift-T");},
314
+ "U": function(cm) {yankTillMark(cm,"U");},
315
+ "Shift-U": function(cm) {yankTillMark(cm,"Shift-U");},
316
+ "V": function(cm) {yankTillMark(cm,"V");},
317
+ "Shift-V": function(cm) {yankTillMark(cm,"Shift-V");},
318
+ "W": function(cm) {yankTillMark(cm,"W");},
319
+ "Shift-W": function(cm) {yankTillMark(cm,"Shift-W");},
320
+ "X": function(cm) {yankTillMark(cm,"X");},
321
+ "Shift-X": function(cm) {yankTillMark(cm,"Shift-X");},
322
+ "Y": function(cm) {yankTillMark(cm,"Y");},
323
+ "Shift-Y": function(cm) {yankTillMark(cm,"Shift-Y");},
324
+ "Z": function(cm) {yankTillMark(cm,"Z");},
325
+ "Shift-Z": function(cm) {yankTillMark(cm,"Shift-Z");},
326
+ auto: "vim",
327
+ catchall: function(cm) {/*ignore*/}
328
+ };
329
+
330
+ CodeMirror.keyMap["vim-prefix-y"] = {
331
+ "Y": countTimes(function(cm) { pushInBuffer("\n"+cm.getLine(cm.getCursor().line+yank)); yank++; }),
332
+ "'": function(cm) {cm.setOption("keyMap", "vim-prefix-y'"); emptyBuffer();},
333
+ auto: "vim",
334
+ catchall: function(cm) {/*ignore*/}
335
+ };
336
+
337
+ CodeMirror.keyMap["vim-insert"] = {
338
+ "Esc": function(cm) {
339
+ cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1, true);
340
+ cm.setOption("keyMap", "vim");
341
+ editCursor("vim");
342
+ },
343
+ "Ctrl-N": function(cm) {/* Code to bring up autocomplete hint */},
344
+ "Ctrl-P": function(cm) {/* Code to bring up autocomplete hint */},
345
+ fallthrough: ["default"]
346
+ };
347
+ })();