brick_layer 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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)