brick_layer 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (312) hide show
  1. data/.gitignore +9 -0
  2. data/Gemfile +13 -0
  3. data/README.rdoc +278 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/javascripts/tiny_mce/langs/en.js +1 -0
  6. data/app/assets/javascripts/tiny_mce/license.txt +504 -0
  7. data/app/assets/javascripts/tiny_mce/plugins/advhr/css/advhr.css +5 -0
  8. data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
  9. data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
  10. data/app/assets/javascripts/tiny_mce/plugins/advhr/js/rule.js +43 -0
  11. data/app/assets/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js +1 -0
  12. data/app/assets/javascripts/tiny_mce/plugins/advhr/rule.htm +58 -0
  13. data/app/assets/javascripts/tiny_mce/plugins/advimage/css/advimage.css +13 -0
  14. data/app/assets/javascripts/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
  15. data/app/assets/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
  16. data/app/assets/javascripts/tiny_mce/plugins/advimage/image.htm +235 -0
  17. data/app/assets/javascripts/tiny_mce/plugins/advimage/img/sample.gif +0 -0
  18. data/app/assets/javascripts/tiny_mce/plugins/advimage/js/image.js +462 -0
  19. data/app/assets/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js +1 -0
  20. data/app/assets/javascripts/tiny_mce/plugins/advlink/css/advlink.css +8 -0
  21. data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
  22. data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
  23. data/app/assets/javascripts/tiny_mce/plugins/advlink/js/advlink.js +539 -0
  24. data/app/assets/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js +1 -0
  25. data/app/assets/javascripts/tiny_mce/plugins/advlink/link.htm +338 -0
  26. data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
  27. data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
  28. data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
  29. data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin_src.js +174 -0
  30. data/app/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
  31. data/app/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin_src.js +119 -0
  32. data/app/assets/javascripts/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
  33. data/app/assets/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js +431 -0
  34. data/app/assets/javascripts/tiny_mce/plugins/autosave/langs/en.js +4 -0
  35. data/app/assets/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
  36. data/app/assets/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js +120 -0
  37. data/app/assets/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
  38. data/app/assets/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js +161 -0
  39. data/app/assets/javascripts/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
  40. data/app/assets/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
  41. data/app/assets/javascripts/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
  42. data/app/assets/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js +43 -0
  43. data/app/assets/javascripts/tiny_mce/plugins/emotions/emotions.htm +42 -0
  44. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
  45. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
  46. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
  47. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
  48. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
  49. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
  50. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
  51. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
  52. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
  53. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
  54. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
  55. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
  56. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
  57. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
  58. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
  59. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
  60. data/app/assets/javascripts/tiny_mce/plugins/emotions/js/emotions.js +43 -0
  61. data/app/assets/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js +1 -0
  62. data/app/assets/javascripts/tiny_mce/plugins/example/dialog.htm +22 -0
  63. data/app/assets/javascripts/tiny_mce/plugins/example/editor_plugin.js +1 -0
  64. data/app/assets/javascripts/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
  65. data/app/assets/javascripts/tiny_mce/plugins/example/img/example.gif +0 -0
  66. data/app/assets/javascripts/tiny_mce/plugins/example/js/dialog.js +19 -0
  67. data/app/assets/javascripts/tiny_mce/plugins/example/langs/en.js +3 -0
  68. data/app/assets/javascripts/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
  69. data/app/assets/javascripts/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
  70. data/app/assets/javascripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
  71. data/app/assets/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css +143 -0
  72. data/app/assets/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
  73. data/app/assets/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js +405 -0
  74. data/app/assets/javascripts/tiny_mce/plugins/fullpage/fullpage.htm +259 -0
  75. data/app/assets/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js +232 -0
  76. data/app/assets/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js +1 -0
  77. data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
  78. data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js +159 -0
  79. data/app/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +110 -0
  80. data/app/assets/javascripts/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
  81. data/app/assets/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
  82. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
  83. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
  84. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  85. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  86. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  87. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  88. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  89. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  90. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  91. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
  92. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -0
  93. data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
  94. data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +83 -0
  95. data/app/assets/javascripts/tiny_mce/plugins/layer/editor_plugin.js +1 -0
  96. data/app/assets/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js +262 -0
  97. data/app/assets/javascripts/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
  98. data/app/assets/javascripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +139 -0
  99. data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin.js +1 -0
  100. data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin_src.js +954 -0
  101. data/app/assets/javascripts/tiny_mce/plugins/media/css/media.css +17 -0
  102. data/app/assets/javascripts/tiny_mce/plugins/media/editor_plugin.js +1 -0
  103. data/app/assets/javascripts/tiny_mce/plugins/media/editor_plugin_src.js +890 -0
  104. data/app/assets/javascripts/tiny_mce/plugins/media/js/embed.js +73 -0
  105. data/app/assets/javascripts/tiny_mce/plugins/media/js/media.js +470 -0
  106. data/app/assets/javascripts/tiny_mce/plugins/media/langs/en_dlg.js +1 -0
  107. data/app/assets/javascripts/tiny_mce/plugins/media/media.htm +922 -0
  108. data/app/assets/javascripts/tiny_mce/plugins/media/moxieplayer.swf +0 -0
  109. data/app/assets/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
  110. data/app/assets/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +54 -0
  111. data/app/assets/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
  112. data/app/assets/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js +433 -0
  113. data/app/assets/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
  114. data/app/assets/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js +74 -0
  115. data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -0
  116. data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js +871 -0
  117. data/app/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -0
  118. data/app/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -0
  119. data/app/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +1 -0
  120. data/app/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +27 -0
  121. data/app/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -0
  122. data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin.js +1 -0
  123. data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js +53 -0
  124. data/app/assets/javascripts/tiny_mce/plugins/preview/example.html +28 -0
  125. data/app/assets/javascripts/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
  126. data/app/assets/javascripts/tiny_mce/plugins/preview/preview.html +17 -0
  127. data/app/assets/javascripts/tiny_mce/plugins/print/editor_plugin.js +1 -0
  128. data/app/assets/javascripts/tiny_mce/plugins/print/editor_plugin_src.js +34 -0
  129. data/app/assets/javascripts/tiny_mce/plugins/save/editor_plugin.js +1 -0
  130. data/app/assets/javascripts/tiny_mce/plugins/save/editor_plugin_src.js +101 -0
  131. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
  132. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
  133. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js +61 -0
  134. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js +142 -0
  135. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js +1 -0
  136. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm +100 -0
  137. data/app/assets/javascripts/tiny_mce/plugins/spellchecker/css/content.css +1 -0
  138. data/app/assets/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
  139. data/app/assets/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js +436 -0
  140. data/app/assets/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
  141. data/app/assets/javascripts/tiny_mce/plugins/style/css/props.css +14 -0
  142. data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin.js +1 -0
  143. data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin_src.js +71 -0
  144. data/app/assets/javascripts/tiny_mce/plugins/style/js/props.js +709 -0
  145. data/app/assets/javascripts/tiny_mce/plugins/style/langs/en_dlg.js +1 -0
  146. data/app/assets/javascripts/tiny_mce/plugins/style/props.htm +845 -0
  147. data/app/assets/javascripts/tiny_mce/plugins/style/readme.txt +19 -0
  148. data/app/assets/javascripts/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -0
  149. data/app/assets/javascripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js +122 -0
  150. data/app/assets/javascripts/tiny_mce/plugins/table/cell.htm +180 -0
  151. data/app/assets/javascripts/tiny_mce/plugins/table/css/cell.css +17 -0
  152. data/app/assets/javascripts/tiny_mce/plugins/table/css/row.css +25 -0
  153. data/app/assets/javascripts/tiny_mce/plugins/table/css/table.css +13 -0
  154. data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -0
  155. data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin_src.js +1428 -0
  156. data/app/assets/javascripts/tiny_mce/plugins/table/js/cell.js +319 -0
  157. data/app/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -0
  158. data/app/assets/javascripts/tiny_mce/plugins/table/js/row.js +237 -0
  159. data/app/assets/javascripts/tiny_mce/plugins/table/js/table.js +489 -0
  160. data/app/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +1 -0
  161. data/app/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -0
  162. data/app/assets/javascripts/tiny_mce/plugins/table/row.htm +158 -0
  163. data/app/assets/javascripts/tiny_mce/plugins/table/table.htm +188 -0
  164. data/app/assets/javascripts/tiny_mce/plugins/template/blank.htm +12 -0
  165. data/app/assets/javascripts/tiny_mce/plugins/template/css/template.css +23 -0
  166. data/app/assets/javascripts/tiny_mce/plugins/template/editor_plugin.js +1 -0
  167. data/app/assets/javascripts/tiny_mce/plugins/template/editor_plugin_src.js +159 -0
  168. data/app/assets/javascripts/tiny_mce/plugins/template/js/template.js +106 -0
  169. data/app/assets/javascripts/tiny_mce/plugins/template/langs/en_dlg.js +1 -0
  170. data/app/assets/javascripts/tiny_mce/plugins/template/template.htm +31 -0
  171. data/app/assets/javascripts/tiny_mce/plugins/visualblocks/css/visualblocks.css +19 -0
  172. data/app/assets/javascripts/tiny_mce/plugins/visualblocks/editor_plugin.js +1 -0
  173. data/app/assets/javascripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js +63 -0
  174. data/app/assets/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
  175. data/app/assets/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js +83 -0
  176. data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js +1 -0
  177. data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin_src.js +122 -0
  178. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm +142 -0
  179. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm +142 -0
  180. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm +149 -0
  181. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm +142 -0
  182. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
  183. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
  184. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm +162 -0
  185. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
  186. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +132 -0
  187. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm +162 -0
  188. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js +28 -0
  189. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js +28 -0
  190. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js +111 -0
  191. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js +28 -0
  192. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js +53 -0
  193. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js +229 -0
  194. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js +53 -0
  195. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +1 -0
  196. data/app/assets/javascripts/tiny_mce/themes/advanced/about.htm +52 -0
  197. data/app/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -0
  198. data/app/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +55 -0
  199. data/app/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -0
  200. data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
  201. data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template_src.js +1467 -0
  202. data/app/assets/javascripts/tiny_mce/themes/advanced/image.htm +80 -0
  203. data/app/assets/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  204. data/app/assets/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
  205. data/app/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  206. data/app/assets/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  207. data/app/assets/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  208. data/app/assets/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  209. data/app/assets/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  210. data/app/assets/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  211. data/app/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
  212. data/app/assets/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
  213. data/app/assets/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  214. data/app/assets/javascripts/tiny_mce/themes/advanced/js/about.js +73 -0
  215. data/app/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +44 -0
  216. data/app/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +363 -0
  217. data/app/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +345 -0
  218. data/app/assets/javascripts/tiny_mce/themes/advanced/js/image.js +251 -0
  219. data/app/assets/javascripts/tiny_mce/themes/advanced/js/link.js +153 -0
  220. data/app/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +78 -0
  221. data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -0
  222. data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -0
  223. data/app/assets/javascripts/tiny_mce/themes/advanced/link.htm +57 -0
  224. data/app/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -0
  225. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +50 -0
  226. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
  227. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  228. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  229. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  230. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  231. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  232. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  233. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +215 -0
  234. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +24 -0
  235. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
  236. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
  237. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +48 -0
  238. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
  239. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  240. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  241. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  242. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +218 -0
  243. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
  244. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
  245. data/app/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -0
  246. data/app/assets/javascripts/tiny_mce/themes/simple/editor_template.js +1 -0
  247. data/app/assets/javascripts/tiny_mce/themes/simple/editor_template_src.js +84 -0
  248. data/app/assets/javascripts/tiny_mce/themes/simple/img/icons.gif +0 -0
  249. data/app/assets/javascripts/tiny_mce/themes/simple/langs/en.js +1 -0
  250. data/app/assets/javascripts/tiny_mce/themes/simple/skins/default/content.css +25 -0
  251. data/app/assets/javascripts/tiny_mce/themes/simple/skins/default/ui.css +32 -0
  252. data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
  253. data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
  254. data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
  255. data/app/assets/javascripts/tiny_mce/tiny_mce.js +1 -0
  256. data/app/assets/javascripts/tiny_mce/tiny_mce_popup.js +5 -0
  257. data/app/assets/javascripts/tiny_mce/tiny_mce_src.js +17480 -0
  258. data/app/assets/javascripts/tiny_mce/utils/editable_selects.js +70 -0
  259. data/app/assets/javascripts/tiny_mce/utils/form_utils.js +210 -0
  260. data/app/assets/javascripts/tiny_mce/utils/mctabs.js +162 -0
  261. data/app/assets/javascripts/tiny_mce/utils/validate.js +252 -0
  262. data/app/assets/stylesheets/brick_layer.css +4 -0
  263. data/app/assets/stylesheets/default_form.css.scss +117 -0
  264. data/app/assets/stylesheets/default_style.css.scss +90 -0
  265. data/app/assets/stylesheets/default_table.css.scss +40 -0
  266. data/app/assets/stylesheets/default_typography.css.scss +10 -0
  267. data/app/assets/stylesheets/reset.css +102 -0
  268. data/app/controllers/brick_layer/admin_controller.rb +3 -0
  269. data/app/controllers/brick_layer/data_sets_controller.rb +95 -0
  270. data/app/controllers/brick_layer/manager_controller.rb +7 -0
  271. data/app/controllers/brick_layer/routes_controller.rb +103 -0
  272. data/app/helpers/brick_layer/data_set_helper.rb +148 -0
  273. data/app/helpers/brick_layer/layout_helper.rb +20 -0
  274. data/app/helpers/brick_layer/site_helper.rb +5 -0
  275. data/app/models/brick_layer/data_set.rb +219 -0
  276. data/app/models/brick_layer/file_uploader.rb +7 -0
  277. data/app/models/brick_layer/route.rb +68 -0
  278. data/app/models/brick_layer/search.rb +61 -0
  279. data/app/views/brick_layer/data_sets/_form.html.haml +18 -0
  280. data/app/views/brick_layer/data_sets/edit.html.haml +7 -0
  281. data/app/views/brick_layer/data_sets/index.html.haml +25 -0
  282. data/app/views/brick_layer/data_sets/new.html.haml +5 -0
  283. data/app/views/brick_layer/data_sets/search.html.haml +1 -0
  284. data/app/views/brick_layer/data_sets/show.html.haml +32 -0
  285. data/app/views/brick_layer/layouts/brick_layer_layout.html.haml +40 -0
  286. data/app/views/brick_layer/manager/data_set_list.html.haml +1 -0
  287. data/app/views/brick_layer/manager/index.html.haml +1 -0
  288. data/app/views/brick_layer/routes/_form.html.haml +11 -0
  289. data/app/views/brick_layer/routes/_route.html.haml +15 -0
  290. data/app/views/brick_layer/routes/edit.html.haml +21 -0
  291. data/app/views/brick_layer/routes/index.html.haml +5 -0
  292. data/app/views/brick_layer/routes/new.html.haml +5 -0
  293. data/app/views/brick_layer/routes/show.html.haml +27 -0
  294. data/app/views/brick_layer/shared/_custom_data_sets_list.html.haml +9 -0
  295. data/config/initializers/brick_layer_carrierwave.rb +6 -0
  296. data/config/initializers/brick_layer_dragonfly.rb +10 -0
  297. data/config/routes.rb +28 -0
  298. data/lib/brick_layer/engine.rb +11 -0
  299. data/lib/brick_layer/extensions.rb +8 -0
  300. data/lib/brick_layer/serve_grid_fs_file.rb +22 -0
  301. data/lib/brick_layer.rb +27 -0
  302. data/lib/tasks/brick_layer_tasks.rake +4 -0
  303. data/lib/version.rb +3 -0
  304. data/spec/controllers/brick_layer/data_sets_controller_spec.rb +69 -0
  305. data/spec/helpers/brick_layer/data_set_helper_spec.rb +174 -0
  306. data/spec/helpers/brick_layer/layout_helper_spec.rb +17 -0
  307. data/spec/models/brick_layer/data_set_spec.rb +81 -0
  308. data/spec/models/brick_layer/route_spec.rb +76 -0
  309. data/spec/models/brick_layer/search_spec.rb +101 -0
  310. data/spec/routing/data_set_routing_spec.rb +83 -0
  311. data/spec/spec_helper.rb +44 -0
  312. metadata +588 -0
@@ -0,0 +1,20 @@
1
+ module BrickLayer::LayoutHelper
2
+ def standalone_navigation
3
+ html = ''
4
+ BrickLayer.data_sets_standalones.each do |klass_in_symbol_form|
5
+ klass_to_model_param = klass_in_symbol_form.to_s.underscore.pluralize
6
+ html += content_tag :li do
7
+ content_tag(:a, klass_in_symbol_form.to_s.underscore.titlecase, :href => data_sets_path(:model => klass_to_model_param))
8
+ end
9
+ end
10
+
11
+ content_tag( :ul, content_tag(:li, "Standalone Content") + html.html_safe )
12
+ end
13
+
14
+ def nested_routes(routes)
15
+ routes.map do |route, sub_routes|
16
+ render(route) + content_tag(:ul, nested_routes(sub_routes), :class => "sub_routes")
17
+ end.join.html_safe
18
+ end
19
+
20
+ end
@@ -0,0 +1,5 @@
1
+ module BrickLayer::SiteHelper
2
+ def collection_of_data_sets
3
+ PageDataSets.local_constant_names.map { |set| [set.to_s.underscore.titlecase, set] }
4
+ end
5
+ end
@@ -0,0 +1,219 @@
1
+ class BrickLayer::DataSet
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps
4
+
5
+ field :title, type: String
6
+ field :meta_description, type: String
7
+ field :meta_keywords, type: String
8
+ field :route_id, type: Integer
9
+
10
+ belongs_to :route, :class_name => "BrickLayer::Route"
11
+
12
+ # Expose set methods based on data set, this also gives you the ability to pull from fields that an object has set.
13
+ # This allows the methods to return the results with the method as the key in a hash to json conversion.
14
+ #
15
+ # Example:
16
+ # expose_data :method_1, :method_2
17
+ #
18
+ # def method_1
19
+ # list_of_results = result_1, result_2, result_3
20
+ # end
21
+ #
22
+ def self.expose_data(*field_array)
23
+ class << self
24
+ attr_accessor :collect_exposed_data_methods
25
+ end
26
+
27
+ @collect_exposed_data_methods = @collect_exposed_data_methods.blank? ? field_array : (@collect_exposed_data_methods + field_array)
28
+ define_method :exposed_data_methods do; self.class.collect_exposed_data_methods; end
29
+ end
30
+
31
+ # Override as_json to return proper exposed data methods
32
+ def as_json(options={})
33
+ original_attributes = super(options)
34
+ complete_attributes = {}
35
+
36
+ # This takes a generic data sets and preps it for to json conversion
37
+ unless self.route.blank?
38
+ obj = self.route_custom_template_class.new(self.attributes)
39
+ else
40
+ obj = self
41
+ end
42
+
43
+ if obj.respond_to?("exposed_data_methods")
44
+ obj.exposed_data_methods.each { |vfield| complete_attributes[vfield] = obj.send(vfield) }
45
+ end
46
+
47
+ complete_attributes.merge(original_attributes)
48
+ end
49
+
50
+ ### INTROSPECTION ###
51
+
52
+ # Display all fields in arry for the class
53
+ def self.all_fields(options={})
54
+ if options[:added_only]
55
+ results = self.fields.keys - BrickLayer::DataSet.fields.keys
56
+ else
57
+ results = self.fields.keys
58
+ end
59
+
60
+ results += options[:add_fields].map(&:to_s) if options[:add_fields]
61
+ options[:ignore_fields].each { |f| results.delete(f) } if options[:ignore_fields]
62
+
63
+ return results
64
+ end
65
+
66
+ # Display all exposed data methods in an array for the class
67
+ def self.exposed_data_methods
68
+ begin
69
+ return self.new.exposed_data_methods.map(&:to_s).uniq
70
+ rescue NoMethodError
71
+ []
72
+ end
73
+ end
74
+
75
+ # Display both fields and exposed data methods for the class
76
+ def self.all_fields_and_exposed_data_methods
77
+ (all_fields + exposed_data_methods).uniq
78
+ end
79
+
80
+ # Grab the custom class if this class has a route
81
+ def route_custom_template_class
82
+ "PageDataSets::#{self.route.data_set_template}".constantize unless self.route.try(:data_set_template).blank?
83
+ end
84
+
85
+ ############################
86
+
87
+
88
+ ### CUSTOM FIELD SUPPORT ###
89
+ class << self; attr_accessor :custom_fields, :custom_field_options; end
90
+
91
+ # This allows a user to create a custom field that will be recognized as a field type for other uses in the application
92
+ # like the UI
93
+ def self.custom_field(field_name, field_type, options={})
94
+ @custom_fields ||= {}
95
+ @custom_field_options ||= {}
96
+
97
+ if field_type == :image
98
+ @custom_fields[field_name.to_sym] = :file
99
+
100
+ field "#{field_name}_uid", type: String
101
+ field "#{field_name}_name", type: String
102
+
103
+ image_accessor field_name
104
+
105
+ # grab the sizes and expose it if sizes are set
106
+ if !options[:sizes].blank?
107
+ options[:sizes].each do |size_name, value|
108
+ expose_data "#{field_name}_#{size_name}".to_sym
109
+
110
+ define_method "#{field_name}_#{size_name}".to_sym do
111
+ self.send(field_name.to_s).try(:thumb, value).try(:url)
112
+ end
113
+ end
114
+ else
115
+ @custom_fields[field_name.to_sym] = field_type
116
+ field field_name, type: String
117
+ end
118
+
119
+ elsif field_type == :file
120
+ @custom_fields[field_name.to_sym] = field_type
121
+ field field_name, type: String
122
+
123
+ mount_uploader field_name.to_sym, BrickLayer::FileUploader, :mount_on => "#{field_name}_filename".to_sym
124
+ else
125
+ @custom_field_options[field_name.to_sym] = options unless options.blank?
126
+ @custom_fields[field_name.to_sym] = field_type
127
+ field field_name, type: String
128
+ end
129
+ end
130
+
131
+ # convert an array of ids to an array of objects
132
+ def translate_string_ids_to_objects(array_of_ids)
133
+ unless array_of_ids.blank?
134
+ return BrickLayer::DataSet.find(array_of_ids) if array_of_ids.is_a?(String)
135
+
136
+ return array_of_ids.map do |x|
137
+ begin
138
+ BrickLayer::DataSet.find(x)
139
+ rescue
140
+ x
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ # convert an id string to an object
147
+ def translate_obj_to_string(string_id)
148
+ begin
149
+ BrickLayer::DataSet.find(string_id)
150
+ rescue
151
+ string_id
152
+ end
153
+ end
154
+
155
+ # overriding #update_attributes to support the passing of object ids as an array of strings (works better for forms)
156
+ def update_attributes(update_hash)
157
+ update_hash.each do |k,v|
158
+ if self.relations.keys.include?(k.to_s)
159
+ self.send("#{k}=", translate_string_ids_to_objects(v)) if relations[k].macro == :referenced_in
160
+ self.send("#{k}=", translate_obj_to_string(v)) if relations[k].macro == :references_one
161
+ self.send("#{k}=", translate_string_ids_to_objects(v)) if relations[k].macro == :references_and_referenced_in_many || relations[k].macro == :references_many
162
+ else
163
+ self.send("#{k}=",v)
164
+ end
165
+ end
166
+
167
+ return self.save
168
+ end
169
+
170
+ ############################
171
+
172
+
173
+ ### SEARCH FUNCTIONALITY ###
174
+ # using mongoid_fulltext - go to https://github.com/aaw/mongoid_fulltext for more details
175
+
176
+ include Mongoid::FullTextSearch
177
+
178
+ def self.fulltext_search_in(*args)
179
+ search_in_hash = args.find { |x| x.is_a?(Hash) }
180
+
181
+ # Inject a type index filter (this allows easy support for STI full search scoping)
182
+ if search_in_hash
183
+ unless search_in_hash[:filters].blank?
184
+ new_hash = search_in_hash[:filters].merge({ :type_index => lambda { |x| x._type } })
185
+ else
186
+ new_hash = search_in_hash.merge({:filters => { :type_index => lambda { |x| x._type } }})
187
+ end
188
+ end
189
+
190
+ args.delete(search_in_hash) if args.include?(search_in_hash)
191
+
192
+ args << (new_hash || {:filters => { :type_index => lambda { |x| x._type } }})
193
+ super
194
+ end
195
+
196
+ # Override fulltext search to support inheritence
197
+ def self.fulltext_search(query_string,options={})
198
+ options.merge!({:type_index => self.name}) unless self.superclass == Object
199
+ super(query_string,options)
200
+ end
201
+
202
+ # Full Text Search Defaults
203
+ fulltext_search_in :title, :meta_description, :meta_keywords
204
+
205
+ ############################
206
+
207
+ def method_missing(*args)
208
+ # Catch Un-initiated Attributes
209
+ begin
210
+ super(*args)
211
+ rescue NoMethodError => e
212
+ if !self.route_custom_template_class.blank?
213
+ raise e unless self.route_custom_template_class.all_fields.include?(e.name.to_s)
214
+ else
215
+ Rails.logger.error("ERROR (NO METHOD): #{e}")
216
+ end
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,7 @@
1
+ class BrickLayer::FileUploader < CarrierWave::Uploader::Base
2
+ storage :grid_fs
3
+
4
+ def cache_dir
5
+ "#{Rails.root}/tmp/uploaded_files"
6
+ end
7
+ end
@@ -0,0 +1,68 @@
1
+ class BrickLayer::Route
2
+ include Mongoid::Document
3
+ include Mongoid::Ancestry
4
+ has_ancestry
5
+
6
+ field :current_parent_id, type: String
7
+ field :slug, type: String
8
+ field :data_set_template, type: String
9
+ field :full_path_cache, type: String
10
+
11
+ has_one :data_set, class_name: "BrickLayer::DataSet", autosave: true
12
+ accepts_nested_attributes_for :data_set, :allow_destroy => true
13
+
14
+ validates :slug, :uniqueness => { :scope => :current_parent_id }
15
+
16
+ before_validation :set_parent
17
+ before_save :set_full_path_cache
18
+ after_save :update_routes
19
+
20
+ # Grab or create root
21
+ def self.root
22
+ root_exist = BrickLayer::Route.where(:slug => "").count > 0
23
+
24
+ if root_exist
25
+ return BrickLayer::Route.where(:slug => "").first
26
+ else
27
+ return BrickLayer::Route.create(:slug => "")
28
+ end
29
+ end
30
+
31
+ # Display the full path for a route
32
+ def full_path
33
+ self.ancestors.sort_by { |x| x.ancestry.to_s }.map { |x| x.slug }.join("/") + "/#{self.slug}"
34
+ end
35
+
36
+ # For parent purposes
37
+ def to_s
38
+ slug.blank? ? "home (root)" : slug
39
+ end
40
+
41
+ # Use this method to keep up with hiearchry for #full_path
42
+ def set_parent
43
+ unless parent_id.blank?
44
+ self.current_parent_id = parent_id.to_s
45
+ end
46
+ end
47
+
48
+ # Set the full path cache for easy lookup
49
+ def set_full_path_cache
50
+ unless self.slug.blank?
51
+ self.full_path_cache = self.full_path
52
+ else
53
+ self.full_path_cache = ""
54
+ end
55
+ end
56
+
57
+ # Change parent
58
+ def change_parent_to(parent_route)
59
+ self.parent_id = parent_route.id
60
+ end
61
+
62
+ # Update Children Routes
63
+ def update_routes
64
+ unless self.children.blank?
65
+ self.children.each { |r| r.save }
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,61 @@
1
+ class BrickLayer::Search
2
+ MAPPINGS = {
3
+ :use_array => ["all","in","nin","near"],
4
+ :use_boolean => ["exists"],
5
+ :use_integer => ["gt","gte","lt","lte","size"]
6
+ }
7
+
8
+ class << self
9
+ # Actually perform the search with a set of params and options on an object
10
+ def perform_search(params,options={})
11
+ class_to_use = params[:model].blank? ? BrickLayer::DataSet : params[:model].gsub('"','').singularize.camelize.constantize
12
+
13
+ if params[:q]
14
+ fulltext_options = options[:ft_options].blank? ? {} : options[:ft_options]
15
+ results = class_to_use.fulltext_search(params[:q],fulltext_options)
16
+ elsif params[:queries]
17
+ params[:queries].each do |param_set|
18
+ query = params_to_query({param_set[0] => param_set[1]})
19
+ query_set = results || class_to_use
20
+
21
+ results = query_set.where(query)
22
+ end
23
+ else
24
+ query = params_to_query(params)
25
+ results = query.blank? ? [] : class_to_use.where(query)
26
+ end
27
+
28
+ return results
29
+ end
30
+
31
+ # Convert the passed in params to a mongoid compatible search query
32
+ def params_to_query(params_hash)
33
+ [:controller, :action, :format, :model].each { |a| params_hash.delete(a) }
34
+ query_params = {}
35
+ params_hash.each do |k,v|
36
+ break_up_params = k.to_s.split("_")
37
+ operator = break_up_params.delete_at(-1)
38
+ attribute = break_up_params.join("_")
39
+ query_params[attribute.to_sym.send(operator)] = value_wrapper( operator, (v.respond_to?("gsub") ? v.gsub('"','') : v) )
40
+ end
41
+
42
+ return query_params
43
+ end
44
+
45
+
46
+ private
47
+
48
+ # Wrap the compatiable values for the mongo search
49
+ def value_wrapper(operator, value)
50
+ if MAPPINGS[:use_array].include?(operator)
51
+ return eval(value) if value.include?("[") && value.include?("]")
52
+ return value if value.is_a?(Array)
53
+ return [value]
54
+ end
55
+
56
+ return eval(value) if MAPPINGS[:use_boolean].include?(operator)
57
+ return value.to_i if MAPPINGS[:use_integer].include?(operator)
58
+ return value
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,18 @@
1
+ - attributes_for(@model_constant, :added_only => true).each do |attribute|
2
+ = form_field_formatter(f, attribute)
3
+ - if f.object.send(attribute).respond_to?("image?") && !f.object.send("#{attribute}_uid").blank?
4
+ %p
5
+ = image_tag(f.object.send(attribute).thumb('100x100#').url)
6
+ = f.check_box("remove_#{attribute}")
7
+ = f.label "Remove #{attribute.titlecase}"
8
+
9
+ - if f.object.send(attribute).to_s.try(:include?, "/files/")
10
+ %p
11
+ = link_to "Current #{attribute} File", f.object.send(attribute).to_s
12
+ = f.check_box("remove_#{attribute}")
13
+ = f.label "Remove #{attribute.titlecase}"
14
+
15
+ - relations_for(@model_constant, :ignore => ["route"]).each do |relation|
16
+ .input.relation
17
+ %label= relation.titlecase
18
+ = relation_field_formatter(f, relation)
@@ -0,0 +1,7 @@
1
+ %h1== Edit #{@model_constant.to_s.titlecase} '#{@data_set.to_s}'
2
+
3
+ = simple_form_for @model_constant.find(@data_set.id), :as => :data_set, :url => data_set_path(:model => params[:model], :id => @data_set.id), :multipart => true, :method => :put do |f|
4
+ = render :partial => "form", :locals => { :f => f }
5
+ = f.button :submit, "Update"
6
+ &nbsp;|&nbsp;
7
+ = link_to "Cancel", :back
@@ -0,0 +1,25 @@
1
+ %h1= params[:model].titlecase
2
+ %p= link_to "Add More Data", new_data_set_path(:model => params[:model])
3
+
4
+ - if !@data_sets.blank?
5
+ %table
6
+ %thead
7
+ %tr
8
+ - attributes_for(@model_constant, :ignore_image_fields => true).each do |attribute|
9
+ %th= attribute.to_s.gsub("_","").titlecase
10
+ %th Actions
11
+
12
+ %tbody
13
+ - @data_sets.each do |data_set|
14
+ %tr
15
+ - attributes_for(@model_constant, :ignore_image_fields => true).each do |a|
16
+ %td= pretty_format_type(data_set.send(a))
17
+ %td
18
+ = link_to "View", data_set_path(:model => params[:model], :id => data_set.id)
19
+ &nbsp;|&nbsp;
20
+ = link_to "Edit", edit_data_set_path(:model => params[:model], :id => data_set.id)
21
+ - else
22
+ %p== Currently there are not any #{@model_constant.name.pluralize.titlecase} in the system
23
+
24
+ - content_for :subnavigation do
25
+ = render :partial => "brick_layer/shared/custom_data_sets_list"
@@ -0,0 +1,5 @@
1
+ %h1== New #{@model_constant.to_s.titlecase} Object
2
+
3
+ = simple_form_for @model_constant.new, :as => :data_set, :url => data_sets_path(:model => params[:model]), :multipart => true do |f|
4
+ = render :partial => "form", :locals => { :f => f }
5
+ = f.button :submit, "Create"
@@ -0,0 +1 @@
1
+ %h1== Search Results for #{params[:model].blank? ? 'All' : params[:model] } Documents
@@ -0,0 +1,32 @@
1
+ %h1== #{params[:model].titlecase.singularize} - #{@data_set.to_s}
2
+ %p
3
+ = link_to "Edit", edit_data_set_path(@data_set, :model => params[:model])
4
+ &nbsp;|&nbsp;
5
+ = link_to "Back to #{params[:model].titlecase.pluralize}", data_sets_path(:model => params[:model])
6
+
7
+ - unless attributes_for(@model_constant, :added_only => true).blank?
8
+ %dl
9
+ - attributes_for(@model_constant, :added_only => true).each do |attribute|
10
+ %dt== #{attribute.titlecase}:
11
+ - if @data_set.send(attribute).respond_to?("image?")
12
+ = image_tag(@data_set.send(attribute).thumb('100x100#').url)
13
+ - elsif @data_set.send(attribute).to_s.try(:include?,"/files/")
14
+ - uploaded_file = @data_set.send(attribute)
15
+ = link_to (uploaded_file.model.send("#{attribute}_filename") || uploaded_file.to_s), uploaded_file.url, :target => "_blank"
16
+ %br
17
+ - else
18
+ %dd= @data_set.send(attribute)
19
+
20
+ %br
21
+
22
+ - relations_for(@model_constant, :ignore => ["route"]).each do |relation|
23
+ %dt== #{relation.titlecase}:
24
+ %dd
25
+ - if @data_set.send(relation).is_a?(Array)
26
+ - @data_set.send(relation).each do |res|
27
+ = res.to_s.blank? ? "Nothing" : res.to_s
28
+ = ", " unless res == @data_set.send(relation).last
29
+
30
+ - else
31
+ = @data_set.send(relation).to_s.blank? ? "Nothing" : @data_set.send(relation).to_s
32
+ %br
@@ -0,0 +1,40 @@
1
+ !!! 5
2
+ %head
3
+ %title Site Manager
4
+ = stylesheet_link_tag "application"
5
+ = javascript_include_tag "tiny_mce/tiny_mce"
6
+ = csrf_meta_tags
7
+
8
+ %body#brick-layer
9
+ %nav
10
+ %ul
11
+ - if BrickLayer.enable_pages
12
+ %li= link_to "Pages", routes_path
13
+
14
+ - unless BrickLayer.data_sets_standalones.blank?
15
+ %li= link_to "Custom Data Sets", list_data_sets_path
16
+
17
+ %br.clear
18
+ - if yield(:subnavigation).blank? || BrickLayer.data_sets_standalones.blank?
19
+ #content= yield
20
+ - else
21
+ #content
22
+ #sub-navigation
23
+ = yield :subnavigation
24
+ #primary-content
25
+ = yield
26
+
27
+ %script(src="/javascripts/tiny_mce/tiny_mce.js" type="text/javascript")
28
+ %script(type="text/javascript")
29
+ :plain
30
+ tinyMCE.init({
31
+ mode : "textareas",
32
+ plugins: "inlinepopups",
33
+ editor_selector : "withEditor",
34
+ theme_advanced_toolbar_location: "top",
35
+ theme_advanced_toolbar_align : "left",
36
+ theme : "advanced",
37
+ theme_advanced_buttons1: "justifyleft,justifycenter,justifyright,|,bold,italic,underline,strikethrough,|,bullist,numlist,|,formatselect,|,code",
38
+ theme_advanced_buttons2: "",
39
+ theme_advanced_buttons3: ""
40
+ });
@@ -0,0 +1 @@
1
+ = render :partial => "brick_layer/shared/custom_data_sets_list"
@@ -0,0 +1 @@
1
+ %h1 Welcome to Brick Layer!
@@ -0,0 +1,11 @@
1
+ - parent_route = @route.parent || BrickLayer::Route.root
2
+
3
+ - unless @route == BrickLayer::Route.root
4
+ .related-inputs
5
+ %input(type="hidden" name="parent" value="#{parent_route.id}")
6
+ = parent_route.full_path
7
+ = "/" unless parent_route.slug == ""
8
+
9
+ = f.input :slug, :label => false, :placeholder => "Slug"
10
+
11
+ %p= f.input :data_set_template, :collection => collection_of_data_sets, :as => :select, :label => "Data Set Template", :prompt => "--- Choose a Template ---"
@@ -0,0 +1,15 @@
1
+ %li
2
+ = route.to_s
3
+ %small
4
+ (
5
+ - if route == BrickLayer::Route.root
6
+ = link_to "view page", "/brick_layer/pages", :target => "_blank"
7
+ - else
8
+ = link_to "view page", "/brick_layer/pages#{route.full_path}", :target => "_blank"
9
+
10
+ &nbsp;|&nbsp;
11
+ = link_to "edit", edit_route_path(route)
12
+ - unless route.slug == ""
13
+ &nbsp;|&nbsp;
14
+ = link_to "add", new_route_path(route, :parent => route.id)
15
+ )
@@ -0,0 +1,21 @@
1
+ %h1== Editing '#{@route.to_s}' Page
2
+
3
+ = simple_form_for @route, :url => route_path(@route) do |f|
4
+ = render :partial => "form", :locals => { :f => f }
5
+
6
+ %p= f.input :parent_id, :collection => @routes, :as => :select, :label => "Parent Route", :prompt => "--- Choose Route ---"
7
+
8
+ - unless @data_set_template.to_s.blank?
9
+ = f.simple_fields_for :data_set, @data_set_obj do |ff|
10
+ - attributes_for(@data_set_template).each do |attribute|
11
+ = form_field_formatter(ff, attribute)
12
+
13
+ - relations_for(@data_set_template, :ignore => ["route"]).each do |relation|
14
+ .input.relation
15
+ %label= relation.titlecase
16
+ = relation_field_formatter(f, relation)
17
+
18
+ %p
19
+ = f.submit "Update Page"
20
+ &nbsp;|&nbsp;
21
+ = link_to "Delete Route", route_path(@route), :method => :delete, :confirm => "You sure you want to remove this route?"
@@ -0,0 +1,5 @@
1
+ %h1 Pages
2
+ %p= link_to "New Route", new_route_path
3
+
4
+ #routes
5
+ = nested_routes(BrickLayer::Route.root.subtree.arrange(:order => [:slug, :asc]))
@@ -0,0 +1,5 @@
1
+ %h1 New Page
2
+
3
+ = simple_form_for @route, :url => routes_path do |f|
4
+ = render :partial => "form", :locals => { :f => f }
5
+ %p= f.submit "Create Page"
@@ -0,0 +1,27 @@
1
+ %h1== '#{@route.to_s}' Page
2
+
3
+ - unless attributes_for(@model_constant, :added_only => true).blank?
4
+ %dl
5
+ - attributes_for(@model_constant, :added_only => true).each do |attribute|
6
+ - if @data_set.respond_to?(attribute)
7
+ %dt== #{attribute.titlecase}:
8
+ %dd= @data_set.send(attribute)
9
+ %br
10
+
11
+ - relations_for(@model_constant, :ignore => ["route"]).each do |relation|
12
+ %dt== #{relation.titlecase}:
13
+ %dd
14
+ - if @data_set.send(relation).is_a?(Array)
15
+ - @data_set.send(relation).each do |res|
16
+ = res.to_s.blank? ? "Nothing" : res.to_s
17
+ = ", " unless res == @data_set.send(relation).last
18
+
19
+ - else
20
+ = @data_set.send(relation).to_s.blank? ? "Nothing" : @data_set.send(relation).to_s
21
+ %br
22
+
23
+ - if @model_constant.respond_to?("exposed_data_methods")
24
+ - @model_constant.exposed_data_methods.each do |vfield|
25
+ - if @data_set.respond_to?(vfield)
26
+ %dt== #{vfield.titlecase}:
27
+ %dd= @data_set.send(vfield,{:html => true})
@@ -0,0 +1,9 @@
1
+ %h1 List of Data Sets
2
+
3
+ - unless BrickLayer.data_sets_standalones.blank?
4
+ %ul
5
+ - BrickLayer.data_sets_standalones.sort.each do |set|
6
+ %li= link_to set.to_s.underscore.pluralize.titlecase, data_sets_path(:model => set.to_s.pluralize)
7
+ %br
8
+ - else
9
+ %p Currently no data sets are set in the config file.
@@ -0,0 +1,6 @@
1
+ CarrierWave.configure do |config|
2
+ config.grid_fs_database = Mongoid.database.name
3
+ config.grid_fs_host = Mongoid.config.master.connection.host
4
+ config.storage = :grid_fs
5
+ config.grid_fs_access_url = "/files"
6
+ end
@@ -0,0 +1,10 @@
1
+ require 'dragonfly/rails/images'
2
+
3
+ app = Dragonfly[:images]
4
+ app.configure_with(:imagemagick)
5
+
6
+ app.configure_with(:rails) do |c|
7
+ c.datastore = Dragonfly::DataStorage::MongoDataStore.new :db => Mongoid.database
8
+ end
9
+
10
+ app.define_macro_on_include(Mongoid::Document, :image_accessor)