brick_layer 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +9 -0
- data/Gemfile +13 -0
- data/README.rdoc +278 -0
- data/Rakefile +36 -0
- data/app/assets/javascripts/tiny_mce/langs/en.js +1 -0
- data/app/assets/javascripts/tiny_mce/license.txt +504 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/css/advhr.css +5 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/js/rule.js +43 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/rule.htm +58 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/css/advimage.css +13 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/image.htm +235 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/img/sample.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/js/image.js +462 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/css/advlink.css +8 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/js/advlink.js +539 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/link.htm +338 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
- data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin_src.js +174 -0
- data/app/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin_src.js +119 -0
- data/app/assets/javascripts/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js +431 -0
- data/app/assets/javascripts/tiny_mce/plugins/autosave/langs/en.js +4 -0
- data/app/assets/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js +120 -0
- data/app/assets/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js +161 -0
- data/app/assets/javascripts/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js +43 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/emotions.htm +42 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/js/emotions.js +43 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/dialog.htm +22 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/img/example.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/js/dialog.js +19 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/langs/en.js +3 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
- data/app/assets/javascripts/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css +143 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js +405 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/fullpage.htm +259 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js +232 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js +159 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +110 -0
- data/app/assets/javascripts/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +83 -0
- data/app/assets/javascripts/tiny_mce/plugins/layer/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js +262 -0
- data/app/assets/javascripts/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +139 -0
- data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin_src.js +954 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/css/media.css +17 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/editor_plugin_src.js +890 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/js/embed.js +73 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/js/media.js +470 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/media.htm +922 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/moxieplayer.swf +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +54 -0
- data/app/assets/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js +433 -0
- data/app/assets/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js +74 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js +871 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +27 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js +53 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/example.html +28 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/preview.html +17 -0
- data/app/assets/javascripts/tiny_mce/plugins/print/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/print/editor_plugin_src.js +34 -0
- data/app/assets/javascripts/tiny_mce/plugins/save/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/save/editor_plugin_src.js +101 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js +61 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js +142 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm +100 -0
- data/app/assets/javascripts/tiny_mce/plugins/spellchecker/css/content.css +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js +436 -0
- data/app/assets/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/css/props.css +14 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin_src.js +71 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/js/props.js +709 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/props.htm +845 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/readme.txt +19 -0
- data/app/assets/javascripts/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js +122 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/cell.htm +180 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/css/cell.css +17 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/css/row.css +25 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/css/table.css +13 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin_src.js +1428 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/js/cell.js +319 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/js/row.js +237 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/js/table.js +489 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/row.htm +158 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/table.htm +188 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/blank.htm +12 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/css/template.css +23 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/editor_plugin_src.js +159 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/js/template.js +106 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/template.htm +31 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualblocks/css/visualblocks.css +19 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualblocks/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js +63 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js +83 -0
- data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin_src.js +122 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm +142 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm +142 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm +149 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm +142 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm +162 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +132 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm +162 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js +28 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js +28 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js +111 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js +28 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js +53 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js +229 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js +53 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/about.htm +52 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +55 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template_src.js +1467 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/image.htm +80 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/about.js +73 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +44 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +363 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +345 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/image.js +251 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/link.js +153 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +78 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/link.htm +57 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +50 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +215 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +24 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +48 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +218 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/editor_template.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/editor_template_src.js +84 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/img/icons.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/langs/en.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/default/content.css +25 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/default/ui.css +32 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
- data/app/assets/javascripts/tiny_mce/tiny_mce.js +1 -0
- data/app/assets/javascripts/tiny_mce/tiny_mce_popup.js +5 -0
- data/app/assets/javascripts/tiny_mce/tiny_mce_src.js +17480 -0
- data/app/assets/javascripts/tiny_mce/utils/editable_selects.js +70 -0
- data/app/assets/javascripts/tiny_mce/utils/form_utils.js +210 -0
- data/app/assets/javascripts/tiny_mce/utils/mctabs.js +162 -0
- data/app/assets/javascripts/tiny_mce/utils/validate.js +252 -0
- data/app/assets/stylesheets/brick_layer.css +4 -0
- data/app/assets/stylesheets/default_form.css.scss +117 -0
- data/app/assets/stylesheets/default_style.css.scss +90 -0
- data/app/assets/stylesheets/default_table.css.scss +40 -0
- data/app/assets/stylesheets/default_typography.css.scss +10 -0
- data/app/assets/stylesheets/reset.css +102 -0
- data/app/controllers/brick_layer/admin_controller.rb +3 -0
- data/app/controllers/brick_layer/data_sets_controller.rb +95 -0
- data/app/controllers/brick_layer/manager_controller.rb +7 -0
- data/app/controllers/brick_layer/routes_controller.rb +103 -0
- data/app/helpers/brick_layer/data_set_helper.rb +148 -0
- data/app/helpers/brick_layer/layout_helper.rb +20 -0
- data/app/helpers/brick_layer/site_helper.rb +5 -0
- data/app/models/brick_layer/data_set.rb +219 -0
- data/app/models/brick_layer/file_uploader.rb +7 -0
- data/app/models/brick_layer/route.rb +68 -0
- data/app/models/brick_layer/search.rb +61 -0
- data/app/views/brick_layer/data_sets/_form.html.haml +18 -0
- data/app/views/brick_layer/data_sets/edit.html.haml +7 -0
- data/app/views/brick_layer/data_sets/index.html.haml +25 -0
- data/app/views/brick_layer/data_sets/new.html.haml +5 -0
- data/app/views/brick_layer/data_sets/search.html.haml +1 -0
- data/app/views/brick_layer/data_sets/show.html.haml +32 -0
- data/app/views/brick_layer/layouts/brick_layer_layout.html.haml +40 -0
- data/app/views/brick_layer/manager/data_set_list.html.haml +1 -0
- data/app/views/brick_layer/manager/index.html.haml +1 -0
- data/app/views/brick_layer/routes/_form.html.haml +11 -0
- data/app/views/brick_layer/routes/_route.html.haml +15 -0
- data/app/views/brick_layer/routes/edit.html.haml +21 -0
- data/app/views/brick_layer/routes/index.html.haml +5 -0
- data/app/views/brick_layer/routes/new.html.haml +5 -0
- data/app/views/brick_layer/routes/show.html.haml +27 -0
- data/app/views/brick_layer/shared/_custom_data_sets_list.html.haml +9 -0
- data/config/initializers/brick_layer_carrierwave.rb +6 -0
- data/config/initializers/brick_layer_dragonfly.rb +10 -0
- data/config/routes.rb +28 -0
- data/lib/brick_layer/engine.rb +11 -0
- data/lib/brick_layer/extensions.rb +8 -0
- data/lib/brick_layer/serve_grid_fs_file.rb +22 -0
- data/lib/brick_layer.rb +27 -0
- data/lib/tasks/brick_layer_tasks.rake +4 -0
- data/lib/version.rb +3 -0
- data/spec/controllers/brick_layer/data_sets_controller_spec.rb +69 -0
- data/spec/helpers/brick_layer/data_set_helper_spec.rb +174 -0
- data/spec/helpers/brick_layer/layout_helper_spec.rb +17 -0
- data/spec/models/brick_layer/data_set_spec.rb +81 -0
- data/spec/models/brick_layer/route_spec.rb +76 -0
- data/spec/models/brick_layer/search_spec.rb +101 -0
- data/spec/routing/data_set_routing_spec.rb +83 -0
- data/spec/spec_helper.rb +44 -0
- 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,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,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
|
+
|
|
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
|
+
|
|
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
|
+
|
|
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
|
+
|
|
11
|
+
= link_to "edit", edit_route_path(route)
|
12
|
+
- unless route.slug == ""
|
13
|
+
|
|
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
|
+
|
|
21
|
+
= link_to "Delete Route", route_path(@route), :method => :delete, :confirm => "You sure you want to remove this route?"
|
@@ -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,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)
|