muck-contents 0.1.1
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.
- data/.document +5 -0
- data/.gitignore +5 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +112 -0
- data/Rakefile +101 -0
- data/VERSION +1 -0
- data/app/controllers/admin/muck/contents_controller.rb +15 -0
- data/app/controllers/muck/contents_controller.rb +186 -0
- data/app/helpers/muck_contents_helper.rb +22 -0
- data/app/views/admin/contents/index.html.erb +28 -0
- data/app/views/contents/_admin.html.erb +7 -0
- data/app/views/contents/_form.html.erb +13 -0
- data/app/views/contents/edit.html.erb +6 -0
- data/app/views/contents/new.html.erb +5 -0
- data/app/views/contents/show.html.erb +5 -0
- data/config/muck_contents_routes.rb +8 -0
- data/db/migrate/20090703055724_add_contents.rb +49 -0
- data/db/migrate/20090806230610_add_layout_to_contents.rb +9 -0
- data/db/migrate/20090808005918_add_scope_index_to_slugs.rb +9 -0
- data/db/migrate/20090808175401_add_contents_comment_counter_cache.rb +9 -0
- data/lib/action_controller/acts/muck_content_handler.rb +84 -0
- data/lib/active_record/acts/muck_content.rb +313 -0
- data/lib/active_record/acts/muck_content_permission.rb +38 -0
- data/lib/active_record/acts/muck_content_translation.rb +40 -0
- data/lib/muck_contents/initialize_routes.rb +8 -0
- data/lib/muck_contents/tasks.rb +28 -0
- data/lib/muck_contents.rb +38 -0
- data/locales/en.yml +31 -0
- data/muck-contents.gemspec +641 -0
- data/public/javascripts/tiny_mce/langs/en.js +154 -0
- data/public/javascripts/tiny_mce/license.txt +504 -0
- data/public/javascripts/tiny_mce/plugins/advfiletoo/css/advfile.css +34 -0
- data/public/javascripts/tiny_mce/plugins/advfiletoo/editor_plugin.js +55 -0
- data/public/javascripts/tiny_mce/plugins/advfiletoo/editor_plugin_src.js +55 -0
- data/public/javascripts/tiny_mce/plugins/advfiletoo/file.htm +139 -0
- data/public/javascripts/tiny_mce/plugins/advfiletoo/img/upload.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/advfiletoo/js/functions.js +286 -0
- data/public/javascripts/tiny_mce/plugins/advfiletoo/langs/en_dlg.js +48 -0
- data/public/javascripts/tiny_mce/plugins/advhr/css/advhr.css +5 -0
- data/public/javascripts/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js +54 -0
- data/public/javascripts/tiny_mce/plugins/advhr/js/rule.js +43 -0
- data/public/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js +5 -0
- data/public/javascripts/tiny_mce/plugins/advhr/rule.htm +63 -0
- data/public/javascripts/tiny_mce/plugins/advimage/css/advimage.css +13 -0
- data/public/javascripts/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js +47 -0
- data/public/javascripts/tiny_mce/plugins/advimage/image.htm +238 -0
- data/public/javascripts/tiny_mce/plugins/advimage/img/sample.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/advimage/js/image.js +441 -0
- data/public/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js +43 -0
- data/public/javascripts/tiny_mce/plugins/advimagetoo/css/advimage.css +32 -0
- data/public/javascripts/tiny_mce/plugins/advimagetoo/editor_plugin.js +53 -0
- data/public/javascripts/tiny_mce/plugins/advimagetoo/editor_plugin_src.js +53 -0
- data/public/javascripts/tiny_mce/plugins/advimagetoo/image.htm +303 -0
- data/public/javascripts/tiny_mce/plugins/advimagetoo/img/sample.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/advimagetoo/js/functions.js +593 -0
- data/public/javascripts/tiny_mce/plugins/advimagetoo/langs/en_dlg.js +44 -0
- data/public/javascripts/tiny_mce/plugins/advlink/css/advlink.css +8 -0
- data/public/javascripts/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js +58 -0
- data/public/javascripts/tiny_mce/plugins/advlink/js/advlink.js +527 -0
- data/public/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js +52 -0
- data/public/javascripts/tiny_mce/plugins/advlink/link.htm +339 -0
- data/public/javascripts/tiny_mce/plugins/advlinktoo/css/advlink.css +8 -0
- data/public/javascripts/tiny_mce/plugins/advlinktoo/editor_plugin.js +58 -0
- data/public/javascripts/tiny_mce/plugins/advlinktoo/editor_plugin_src.js +58 -0
- data/public/javascripts/tiny_mce/plugins/advlinktoo/js/advlink.js +548 -0
- data/public/javascripts/tiny_mce/plugins/advlinktoo/langs/en_dlg.js +52 -0
- data/public/javascripts/tiny_mce/plugins/advlinktoo/link.htm +344 -0
- data/public/javascripts/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js +51 -0
- data/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js +117 -0
- data/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin_src.js +616 -0
- data/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js +95 -0
- data/public/javascripts/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js +79 -0
- data/public/javascripts/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js +40 -0
- data/public/javascripts/tiny_mce/plugins/emotions/emotions.htm +41 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/emotions/js/emotions.js +22 -0
- data/public/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js +20 -0
- data/public/javascripts/tiny_mce/plugins/example/dialog.htm +27 -0
- data/public/javascripts/tiny_mce/plugins/example/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/example/editor_plugin_src.js +81 -0
- data/public/javascripts/tiny_mce/plugins/example/img/example.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/example/js/dialog.js +19 -0
- data/public/javascripts/tiny_mce/plugins/example/langs/en.js +3 -0
- data/public/javascripts/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
- data/public/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css +182 -0
- data/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js +142 -0
- data/public/javascripts/tiny_mce/plugins/fullpage/fullpage.htm +577 -0
- data/public/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js +461 -0
- data/public/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js +85 -0
- data/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js +145 -0
- data/public/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +111 -0
- data/public/javascripts/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js +51 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +632 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
- data/public/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +80 -0
- data/public/javascripts/tiny_mce/plugins/layer/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js +209 -0
- data/public/javascripts/tiny_mce/plugins/media/css/content.css +6 -0
- data/public/javascripts/tiny_mce/plugins/media/css/media.css +16 -0
- data/public/javascripts/tiny_mce/plugins/media/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/media/editor_plugin_src.js +374 -0
- data/public/javascripts/tiny_mce/plugins/media/img/flash.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/media/img/quicktime.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/media/img/realmedia.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/media/img/shockwave.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/media/img/trans.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/media/img/windowsmedia.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/media/js/embed.js +73 -0
- data/public/javascripts/tiny_mce/plugins/media/js/media.js +628 -0
- data/public/javascripts/tiny_mce/plugins/media/langs/en_dlg.js +103 -0
- data/public/javascripts/tiny_mce/plugins/media/media.htm +824 -0
- data/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +50 -0
- data/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js +87 -0
- data/public/javascripts/tiny_mce/plugins/pagebreak/css/content.css +1 -0
- data/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js +74 -0
- data/public/javascripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/pagebreak/img/trans.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/paste/blank.htm +22 -0
- data/public/javascripts/tiny_mce/plugins/paste/css/blank.css +14 -0
- data/public/javascripts/tiny_mce/plugins/paste/css/pasteword.css +3 -0
- data/public/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js +394 -0
- data/public/javascripts/tiny_mce/plugins/paste/js/pastetext.js +42 -0
- data/public/javascripts/tiny_mce/plugins/paste/js/pasteword.js +56 -0
- data/public/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +5 -0
- data/public/javascripts/tiny_mce/plugins/paste/pastetext.htm +34 -0
- data/public/javascripts/tiny_mce/plugins/paste/pasteword.htm +29 -0
- data/public/javascripts/tiny_mce/plugins/preview/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js +50 -0
- data/public/javascripts/tiny_mce/plugins/preview/example.html +28 -0
- data/public/javascripts/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
- data/public/javascripts/tiny_mce/plugins/preview/preview.html +19 -0
- data/public/javascripts/tiny_mce/plugins/print/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/print/editor_plugin_src.js +31 -0
- data/public/javascripts/tiny_mce/plugins/safari/blank.htm +1 -0
- data/public/javascripts/tiny_mce/plugins/safari/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/safari/editor_plugin_src.js +545 -0
- data/public/javascripts/tiny_mce/plugins/save/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/save/editor_plugin_src.js +98 -0
- data/public/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
- data/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js +54 -0
- data/public/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js +126 -0
- data/public/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js +16 -0
- data/public/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm +105 -0
- data/public/javascripts/tiny_mce/plugins/spellchecker/css/content.css +1 -0
- data/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js +338 -0
- data/public/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
- data/public/javascripts/tiny_mce/plugins/style/css/props.css +13 -0
- data/public/javascripts/tiny_mce/plugins/style/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/style/editor_plugin_src.js +52 -0
- data/public/javascripts/tiny_mce/plugins/style/js/props.js +641 -0
- data/public/javascripts/tiny_mce/plugins/style/langs/en_dlg.js +63 -0
- data/public/javascripts/tiny_mce/plugins/style/props.htm +731 -0
- data/public/javascripts/tiny_mce/plugins/table/cell.htm +184 -0
- data/public/javascripts/tiny_mce/plugins/table/css/cell.css +17 -0
- data/public/javascripts/tiny_mce/plugins/table/css/row.css +25 -0
- data/public/javascripts/tiny_mce/plugins/table/css/table.css +13 -0
- data/public/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js +1115 -0
- data/public/javascripts/tiny_mce/plugins/table/js/cell.js +269 -0
- data/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js +29 -0
- data/public/javascripts/tiny_mce/plugins/table/js/row.js +212 -0
- data/public/javascripts/tiny_mce/plugins/table/js/table.js +410 -0
- data/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +74 -0
- data/public/javascripts/tiny_mce/plugins/table/merge_cells.htm +38 -0
- data/public/javascripts/tiny_mce/plugins/table/row.htm +161 -0
- data/public/javascripts/tiny_mce/plugins/table/table.htm +193 -0
- data/public/javascripts/tiny_mce/plugins/template/blank.htm +12 -0
- data/public/javascripts/tiny_mce/plugins/template/css/template.css +23 -0
- data/public/javascripts/tiny_mce/plugins/template/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/template/editor_plugin_src.js +156 -0
- data/public/javascripts/tiny_mce/plugins/template/js/template.js +106 -0
- data/public/javascripts/tiny_mce/plugins/template/langs/en_dlg.js +15 -0
- data/public/javascripts/tiny_mce/plugins/template/template.htm +39 -0
- data/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js +73 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm +149 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm +149 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm +154 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm +149 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm +170 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +136 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm +170 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js +25 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js +25 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js +123 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js +25 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js +60 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js +228 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js +59 -0
- data/public/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +32 -0
- data/public/javascripts/tiny_mce/templates/bio.htm +31 -0
- data/public/javascripts/tiny_mce/templates/country.htm +59 -0
- data/public/javascripts/tiny_mce/themes/advanced/about.htm +56 -0
- data/public/javascripts/tiny_mce/themes/advanced/anchor.htm +32 -0
- data/public/javascripts/tiny_mce/themes/advanced/charmap.htm +54 -0
- data/public/javascripts/tiny_mce/themes/advanced/color_picker.htm +76 -0
- data/public/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/public/javascripts/tiny_mce/themes/advanced/editor_template_src.js +1147 -0
- data/public/javascripts/tiny_mce/themes/advanced/image.htm +86 -0
- data/public/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/js/about.js +72 -0
- data/public/javascripts/tiny_mce/themes/advanced/js/anchor.js +37 -0
- data/public/javascripts/tiny_mce/themes/advanced/js/charmap.js +325 -0
- data/public/javascripts/tiny_mce/themes/advanced/js/color_picker.js +253 -0
- data/public/javascripts/tiny_mce/themes/advanced/js/image.js +245 -0
- data/public/javascripts/tiny_mce/themes/advanced/js/link.js +155 -0
- data/public/javascripts/tiny_mce/themes/advanced/js/source_editor.js +62 -0
- data/public/javascripts/tiny_mce/themes/advanced/langs/en.js +62 -0
- data/public/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +51 -0
- data/public/javascripts/tiny_mce/themes/advanced/link.htm +64 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/content.css +32 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +114 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +215 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +32 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +113 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +215 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/public/javascripts/tiny_mce/themes/advanced/source_editor.htm +32 -0
- data/public/javascripts/tiny_mce/themes/simple/editor_template.js +1 -0
- data/public/javascripts/tiny_mce/themes/simple/editor_template_src.js +85 -0
- data/public/javascripts/tiny_mce/themes/simple/img/icons.gif +0 -0
- data/public/javascripts/tiny_mce/themes/simple/langs/en.js +11 -0
- data/public/javascripts/tiny_mce/themes/simple/skins/default/content.css +25 -0
- data/public/javascripts/tiny_mce/themes/simple/skins/default/ui.css +32 -0
- data/public/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
- data/public/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
- data/public/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
- data/public/javascripts/tiny_mce/tiny_mce.js +1 -0
- data/public/javascripts/tiny_mce/tiny_mce_popup.js +294 -0
- data/public/javascripts/tiny_mce/tiny_mce_src.js +11059 -0
- data/public/javascripts/tiny_mce/utils/editable_selects.js +69 -0
- data/public/javascripts/tiny_mce/utils/form_utils.js +199 -0
- data/public/javascripts/tiny_mce/utils/mctabs.js +76 -0
- data/public/javascripts/tiny_mce/utils/validate.js +219 -0
- data/public/javascripts/tiny_mce_helper.js +73 -0
- data/rails/init.rb +24 -0
- data/tasks/muck_contents_tasks.rake +1 -0
- data/test/rails_root/.gitignore +8 -0
- data/test/rails_root/.rake_tasks +103 -0
- data/test/rails_root/Capfile +3 -0
- data/test/rails_root/Rakefile +18 -0
- data/test/rails_root/app/controllers/application_controller.rb +22 -0
- data/test/rails_root/app/controllers/contents_controller.rb +3 -0
- data/test/rails_root/app/controllers/default_controller.rb +7 -0
- data/test/rails_root/app/helpers/application_helper.rb +3 -0
- data/test/rails_root/app/models/.keep +0 -0
- data/test/rails_root/app/models/comment.rb +5 -0
- data/test/rails_root/app/models/content.rb +7 -0
- data/test/rails_root/app/models/content_permission.rb +3 -0
- data/test/rails_root/app/models/content_translation.rb +3 -0
- data/test/rails_root/app/models/user.rb +12 -0
- data/test/rails_root/app/models/user_session.rb +2 -0
- data/test/rails_root/app/views/default/index.html.erb +0 -0
- data/test/rails_root/app/views/layouts/_not_a_template.html.erb +1 -0
- data/test/rails_root/app/views/layouts/default.html.erb +26 -0
- data/test/rails_root/config/amazon_s3.yml +14 -0
- data/test/rails_root/config/boot.rb +109 -0
- data/test/rails_root/config/database.yml +19 -0
- data/test/rails_root/config/environment.rb +33 -0
- data/test/rails_root/config/environments/cucumber.rb +22 -0
- data/test/rails_root/config/environments/development.rb +19 -0
- data/test/rails_root/config/environments/production.rb +1 -0
- data/test/rails_root/config/environments/test.rb +46 -0
- data/test/rails_root/config/global_config.yml +80 -0
- data/test/rails_root/config/initializers/inflections.rb +10 -0
- data/test/rails_root/config/initializers/mime_types.rb +5 -0
- data/test/rails_root/config/initializers/requires.rb +13 -0
- data/test/rails_root/config/initializers/session_store.rb +8 -0
- data/test/rails_root/config/routes.rb +6 -0
- data/test/rails_root/db/.keep +0 -0
- data/test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb +16 -0
- data/test/rails_root/db/migrate/20090402033319_add_muck_activities.rb +36 -0
- data/test/rails_root/db/migrate/20090602041838_create_users.rb +39 -0
- data/test/rails_root/db/migrate/20090608073052_create_friends.rb +16 -0
- data/test/rails_root/db/migrate/20090613173314_create_comments.rb +24 -0
- data/test/rails_root/db/migrate/20090703055724_add_contents.rb +49 -0
- data/test/rails_root/db/migrate/20090704220055_create_slugs.rb +18 -0
- data/test/rails_root/db/migrate/20090704220120_acts_as_taggable_on_migration.rb +29 -0
- data/test/rails_root/db/migrate/20090730154102_allow_null_user.rb +9 -0
- data/test/rails_root/db/migrate/20090806230610_add_layout_to_contents.rb +9 -0
- data/test/rails_root/db/migrate/20090808005918_add_scope_index_to_slugs.rb +9 -0
- data/test/rails_root/db/migrate/20090808175401_add_contents_comment_counter_cache.rb +9 -0
- data/test/rails_root/db/schema.rb +186 -0
- data/test/rails_root/features/step_definitions/common_steps.rb +99 -0
- data/test/rails_root/features/step_definitions/content_steps.rb +15 -0
- data/test/rails_root/features/step_definitions/webrat_steps.rb +128 -0
- data/test/rails_root/features/support/env.rb +49 -0
- data/test/rails_root/features/support/paths.rb +27 -0
- data/test/rails_root/features/view_contents.feature +29 -0
- data/test/rails_root/lib/tasks/cucumber.rake +20 -0
- data/test/rails_root/public/.htaccess +40 -0
- data/test/rails_root/public/404.html +30 -0
- data/test/rails_root/public/422.html +30 -0
- data/test/rails_root/public/500.html +30 -0
- data/test/rails_root/public/dispatch.rb +10 -0
- data/test/rails_root/public/favicon.ico +0 -0
- data/test/rails_root/public/images/arrow_left.gif +0 -0
- data/test/rails_root/public/images/arrow_right.gif +0 -0
- data/test/rails_root/public/images/icons/accept.png +0 -0
- data/test/rails_root/public/images/icons/add.png +0 -0
- data/test/rails_root/public/images/icons/delete.png +0 -0
- data/test/rails_root/public/images/icons/vote.png +0 -0
- data/test/rails_root/public/images/loading.gif +0 -0
- data/test/rails_root/public/images/profile_default.jpg +0 -0
- data/test/rails_root/public/images/rails.png +0 -0
- data/test/rails_root/public/images/spinner.gif +0 -0
- data/test/rails_root/public/images/sprites.png +0 -0
- data/test/rails_root/public/javascripts/application.js +2 -0
- data/test/rails_root/public/javascripts/builder.js +136 -0
- data/test/rails_root/public/javascripts/controls.js +963 -0
- data/test/rails_root/public/javascripts/dragdrop.js +972 -0
- data/test/rails_root/public/javascripts/effects.js +1120 -0
- data/test/rails_root/public/javascripts/fancyzoom.min.js +1 -0
- data/test/rails_root/public/javascripts/jquery/jquery-ui.js +273 -0
- data/test/rails_root/public/javascripts/jquery/jquery.form.js +637 -0
- data/test/rails_root/public/javascripts/jquery/jquery.jgrowl.js +2 -0
- data/test/rails_root/public/javascripts/jquery/jquery.js +19 -0
- data/test/rails_root/public/javascripts/jquery/jquery.tips.js +69 -0
- data/test/rails_root/public/javascripts/muck.js +76 -0
- data/test/rails_root/public/javascripts/muck_activities.js +108 -0
- data/test/rails_root/public/javascripts/prototype.js +4225 -0
- data/test/rails_root/public/javascripts/scriptaculous.js +58 -0
- data/test/rails_root/public/javascripts/slider.js +277 -0
- data/test/rails_root/public/javascripts/sound.js +60 -0
- data/test/rails_root/public/robots.txt +1 -0
- data/test/rails_root/public/stylesheets/.keep +0 -0
- data/test/rails_root/public/stylesheets/admin.css +12 -0
- data/test/rails_root/public/stylesheets/blueprint/ie.css +26 -0
- data/test/rails_root/public/stylesheets/blueprint/liquid_screen.css +203 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/cross.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/key.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/tick.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/readme.txt +32 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/screen.css +97 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/readme.txt +14 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/screen.css +71 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/doc.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/email.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/external.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/feed.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/im.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/pdf.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/visited.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/xls.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/readme.txt +18 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/screen.css +40 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/liquid.css +134 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/src/liquid.css +197 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/readme.txt +10 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/screen.css +109 -0
- data/test/rails_root/public/stylesheets/blueprint/print.css +30 -0
- data/test/rails_root/public/stylesheets/blueprint/screen.css +251 -0
- data/test/rails_root/public/stylesheets/blueprint/sprite.css +1 -0
- data/test/rails_root/public/stylesheets/blueprint/src/forms.css +49 -0
- data/test/rails_root/public/stylesheets/blueprint/src/grid.css +213 -0
- data/test/rails_root/public/stylesheets/blueprint/src/grid.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/src/ie.css +59 -0
- data/test/rails_root/public/stylesheets/blueprint/src/print.css +85 -0
- data/test/rails_root/public/stylesheets/blueprint/src/reset.css +38 -0
- data/test/rails_root/public/stylesheets/blueprint/src/typography.css +105 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_100_f0f0f0_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_50_99c2ff_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_80_e6e6e6_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-soft_100_e7eef3_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_222222_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2694e8_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2e83ff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_72a7cf_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_888888_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_ffffff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/jquery-ui-1.7.1.custom.css +404 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_217bc0_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_2e83ff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_469bdd_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_6da8d5_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_d8e7f3_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_f9bd01_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/jquery-ui-1.7.1.custom.css +404 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/jquery-ui-1.7.1.custom.css +404 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/jquery-ui-1.7.1.custom.css +404 -0
- data/test/rails_root/public/stylesheets/reset.css +0 -0
- data/test/rails_root/public/stylesheets/styles.css +79 -0
- data/test/rails_root/script/about +3 -0
- data/test/rails_root/script/breakpointer +3 -0
- data/test/rails_root/script/console +3 -0
- data/test/rails_root/script/create_project.rb +52 -0
- data/test/rails_root/script/cucumber +8 -0
- data/test/rails_root/script/dbconsole +3 -0
- data/test/rails_root/script/destroy +3 -0
- data/test/rails_root/script/generate +3 -0
- data/test/rails_root/script/performance/benchmarker +3 -0
- data/test/rails_root/script/performance/profiler +3 -0
- data/test/rails_root/script/performance/request +3 -0
- data/test/rails_root/script/plugin +3 -0
- data/test/rails_root/script/process/inspector +3 -0
- data/test/rails_root/script/process/reaper +3 -0
- data/test/rails_root/script/process/spawner +3 -0
- data/test/rails_root/script/runner +3 -0
- data/test/rails_root/script/server +3 -0
- data/test/rails_root/test/factories.rb +139 -0
- data/test/rails_root/test/functional/.keep +0 -0
- data/test/rails_root/test/functional/contents_controller_test.rb +41 -0
- data/test/rails_root/test/integration/.keep +0 -0
- data/test/rails_root/test/mocks/development/.keep +0 -0
- data/test/rails_root/test/mocks/test/.keep +0 -0
- data/test/rails_root/test/shoulda_macros/controller.rb +49 -0
- data/test/rails_root/test/shoulda_macros/forms.rb +32 -0
- data/test/rails_root/test/shoulda_macros/models.rb +50 -0
- data/test/rails_root/test/shoulda_macros/pagination.rb +53 -0
- data/test/rails_root/test/shoulda_macros/plugins.rb +34 -0
- data/test/rails_root/test/test_helper.rb +55 -0
- data/test/rails_root/test/unit/.keep +0 -0
- data/test/rails_root/test/unit/content_permission_test.rb +30 -0
- data/test/rails_root/test/unit/content_test.rb +289 -0
- data/test/rails_root/test/unit/content_translation_test.rb +35 -0
- data/test/rails_root/test/unit/user_test.rb +12 -0
- data/test/rails_root/vendor/plugins/ssl_requirement/README +43 -0
- data/test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb +62 -0
- data/test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb +132 -0
- data/test/rails_root/vendor/plugins/validation_reflection/CHANGELOG +24 -0
- data/test/rails_root/vendor/plugins/validation_reflection/LICENSE +20 -0
- data/test/rails_root/vendor/plugins/validation_reflection/README +64 -0
- data/test/rails_root/vendor/plugins/validation_reflection/Rakefile +22 -0
- data/test/rails_root/vendor/plugins/validation_reflection/about.yml +7 -0
- data/test/rails_root/vendor/plugins/validation_reflection/init.rb +8 -0
- data/test/rails_root/vendor/plugins/validation_reflection/lib/boiler_plate/validation_reflection.rb +129 -0
- data/test/rails_root/vendor/plugins/validation_reflection/test/test_helper.rb +36 -0
- data/test/rails_root/vendor/plugins/validation_reflection/test/validation_reflection_test.rb +126 -0
- metadata +705 -0
data/.document
ADDED
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2009 Justin Ball
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
= MuckContents
|
|
2
|
+
|
|
3
|
+
Add contents to you website. News stories, blog posts and pages are all basically a page with content and a title. Muck content makes
|
|
4
|
+
it easy to add this content to your website.
|
|
5
|
+
|
|
6
|
+
=== Gems
|
|
7
|
+
Note that all gems below should be installed automatically as a muck-contents has them set as a dependency.
|
|
8
|
+
Many of the gems are found on github so before installing do:
|
|
9
|
+
gem sources -a http://gems.github.com
|
|
10
|
+
|
|
11
|
+
sudo gem install jbasdf-acts_as_git # Versioning. Requires a git installation.
|
|
12
|
+
sudo gem install collectiveidea-awesome_nested_set # Nested pages. Used to setup navigation hierarchy (http://github.com/collectiveidea/awesome_nested_set/tree/master)
|
|
13
|
+
sudo gem install rgrove-sanitize # Remove harmful html. (http://github.com/rgrove/sanitize/tree/master.)
|
|
14
|
+
sudo gem install mbleigh-acts-as-taggable-on # Tagging. (http://github.com/mbleigh/acts-as-taggable-on/tree/master)
|
|
15
|
+
sudo gem install friendly_id # Pretty urls (http://github.com/norman/friendly_id/tree/master)
|
|
16
|
+
sudo gem install babelphish # Translations
|
|
17
|
+
sudo gem install muck-solr # Search Install muck_solr (or another version of acts_as_solr)
|
|
18
|
+
|
|
19
|
+
=== Configure environment.rb
|
|
20
|
+
Paste in the following:
|
|
21
|
+
config.gem "collectiveidea-awesome_nested_set", :lib => 'awesome_nested_set'
|
|
22
|
+
config.gem "rgrove-sanitize", :lib => 'sanitize'
|
|
23
|
+
config.gem "mbleigh-acts-as-taggable-on", :source => "http://gems.github.com", :lib => "acts-as-taggable-on"
|
|
24
|
+
config.gem "friendly_id"
|
|
25
|
+
config.gem "babelphish"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
=== Gem configuration and setup
|
|
29
|
+
In your app do
|
|
30
|
+
script/generate friendly_id
|
|
31
|
+
script/generate acts_as_taggable_on_migration
|
|
32
|
+
rake db:migrate
|
|
33
|
+
|
|
34
|
+
== Setup
|
|
35
|
+
|
|
36
|
+
=== User model
|
|
37
|
+
Add the following method to your user model and modify it according to your specific needs:
|
|
38
|
+
|
|
39
|
+
def can_add_root_content?
|
|
40
|
+
admin?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
This method determines who can add content to any url on your website. For example, if you type in
|
|
44
|
+
http://www.example.com/a/test/page and that page does not exist, muck contents will automatically create
|
|
45
|
+
a page for you at that location if the logged in user has a method can_add_root_content? that returns true.
|
|
46
|
+
|
|
47
|
+
=== Content models
|
|
48
|
+
Create the following models in your project. This let's you add any other methods that you see fit.
|
|
49
|
+
|
|
50
|
+
class Content < ActiveRecord::Base
|
|
51
|
+
# This assumes you are using GlobalConfig. You can also set these values directly in the model
|
|
52
|
+
acts_as_muck_content(
|
|
53
|
+
:git_repository => GlobalConfig.content_git_repository,
|
|
54
|
+
:enable_translations => GlobalConfig.enable_auto_translations,
|
|
55
|
+
:enable_solr => GlobalConfig.content_enable_solr
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class ContentTranslation < ActiveRecord::Base
|
|
60
|
+
acts_as_muck_content_translation
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
class ContentPermission < ActiveRecord::Base
|
|
64
|
+
acts_as_muck_content_permission
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
=== Contents controller
|
|
68
|
+
Create a ContentsController and inherit from Muck::ContentsController. Unfortunately, due to routing issues this is required or
|
|
69
|
+
we'd have to hard code the routes to go to muck/contents which prevent modification of the contents_controller.
|
|
70
|
+
class ContentsController < Muck::ContentsController
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
Add a route for the new controller:
|
|
74
|
+
ActionController::Routing::Routes.draw do |map|
|
|
75
|
+
map.resource :contents
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
=== Application controller
|
|
80
|
+
Add acts_as_muck_content_handler if you want muck_contents to intercept pages that are not found and provide authorized users
|
|
81
|
+
and opportunity to add them.
|
|
82
|
+
|
|
83
|
+
class ApplicationController < ActionController::Base
|
|
84
|
+
acts_as_muck_content_handler
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
=== Content controller
|
|
88
|
+
Override the contents controller to change the the security model. For example:
|
|
89
|
+
|
|
90
|
+
class ContentsController < Muck::ContentsController
|
|
91
|
+
|
|
92
|
+
before_filter :login_required # require the user to be logged in to add content
|
|
93
|
+
|
|
94
|
+
# Modify this method to change how permissions are checked to see if a user can content.
|
|
95
|
+
# Each model that implements 'has_muck_content' can (and should) override can_add_content? to
|
|
96
|
+
# change how content permissions are handled.
|
|
97
|
+
def has_permission_to_add_content(user, parent)
|
|
98
|
+
parent.can_add_content?(user)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Setups up the layouts that are available in the 'layouts' pulldown.
|
|
102
|
+
# Override this method to change the available layouts. Note that the
|
|
103
|
+
# layout will need to exist in your 'views/layouts' directory
|
|
104
|
+
def setup_layouts
|
|
105
|
+
@content_layouts =
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
Copyright (c) 2009 Justin Ball, released under the MIT license
|
data/Rakefile
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
require 'rake/testtask'
|
|
3
|
+
require 'rake/rdoctask'
|
|
4
|
+
|
|
5
|
+
desc 'Default: run unit tests.'
|
|
6
|
+
task :default => :test
|
|
7
|
+
|
|
8
|
+
desc 'Test muck-contents.'
|
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
|
10
|
+
t.libs << 'lib'
|
|
11
|
+
t.libs << 'test/rails_root/test'
|
|
12
|
+
t.pattern = 'test/rails_root/test/**/*_test.rb'
|
|
13
|
+
t.verbose = true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
begin
|
|
17
|
+
require 'rcov/rcovtask'
|
|
18
|
+
Rcov::RcovTask.new do |t|
|
|
19
|
+
#t.libs << 'lib'
|
|
20
|
+
t.libs << 'test/rails_root/lib'
|
|
21
|
+
t.pattern = 'test/rails_root/test/**/*_test.rb'
|
|
22
|
+
t.verbose = true
|
|
23
|
+
t.output_dir = 'coverage'
|
|
24
|
+
t.rcov_opts << '--exclude "gems/*"'
|
|
25
|
+
end
|
|
26
|
+
rescue LoadError
|
|
27
|
+
task :rcov do
|
|
28
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
require 'rake/rdoctask'
|
|
33
|
+
desc 'Generate documentation for the muck-contents gem.'
|
|
34
|
+
Rake::RDocTask.new do |rdoc|
|
|
35
|
+
if File.exist?('VERSION.yml')
|
|
36
|
+
config = YAML.load(File.read('VERSION.yml'))
|
|
37
|
+
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
|
38
|
+
else
|
|
39
|
+
version = ""
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
43
|
+
rdoc.title = "muck_contents #{version}"
|
|
44
|
+
rdoc.rdoc_files.include('README*')
|
|
45
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
desc 'Translate this gem'
|
|
49
|
+
task :translate do
|
|
50
|
+
file = File.join(File.dirname(__FILE__), 'locales', 'en.yml')
|
|
51
|
+
system("babelphish -o -y #{file}")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
begin
|
|
55
|
+
require 'jeweler'
|
|
56
|
+
Jeweler::Tasks.new do |gemspec|
|
|
57
|
+
gemspec.name = "muck-contents"
|
|
58
|
+
gemspec.summary = "Add content to your muck based project"
|
|
59
|
+
gemspec.email = "justinball@gmail.com"
|
|
60
|
+
gemspec.homepage = "http://github.com/jbasdf/muck_contents"
|
|
61
|
+
gemspec.authors = ["Justin Ball"]
|
|
62
|
+
gemspec.rubyforge_project = 'muck-contents'
|
|
63
|
+
gemspec.add_dependency "muck-engine"
|
|
64
|
+
gemspec.add_dependency "muck-users"
|
|
65
|
+
gemspec.add_dependency "muck-comments"
|
|
66
|
+
gemspec.add_dependency "collectiveidea-awesome_nested_set"
|
|
67
|
+
gemspec.add_dependency "rgrove-sanitize"
|
|
68
|
+
gemspec.add_dependency "mbleigh-acts-as-taggable-on"
|
|
69
|
+
gemspec.add_dependency "friendly_id"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
rescue LoadError
|
|
73
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# rubyforge tasks
|
|
77
|
+
begin
|
|
78
|
+
require 'rake/contrib/sshpublisher'
|
|
79
|
+
namespace :rubyforge do
|
|
80
|
+
|
|
81
|
+
desc "Release gem and RDoc documentation to RubyForge"
|
|
82
|
+
task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
|
|
83
|
+
|
|
84
|
+
namespace :release do
|
|
85
|
+
desc "Publish RDoc to RubyForge."
|
|
86
|
+
task :docs => [:rdoc] do
|
|
87
|
+
config = YAML.load(
|
|
88
|
+
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
host = "#{config['username']}@rubyforge.org"
|
|
92
|
+
remote_dir = "/var/www/gforge-projects/muck-contents/"
|
|
93
|
+
local_dir = 'rdoc'
|
|
94
|
+
|
|
95
|
+
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
rescue LoadError
|
|
100
|
+
puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
|
|
101
|
+
end
|
data/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.1.1
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class Admin::Muck::ContentsController < ApplicationController
|
|
2
|
+
unloadable
|
|
3
|
+
|
|
4
|
+
def index
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def edit
|
|
8
|
+
@content = Content.find(params[:id])
|
|
9
|
+
@title = @content.title
|
|
10
|
+
respond_to do |format|
|
|
11
|
+
format.html { render :template => 'contents/edit' }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
class Muck::ContentsController < ApplicationController
|
|
2
|
+
unloadable
|
|
3
|
+
|
|
4
|
+
before_filter :login_required, :only => [:new, :create, :edit, :update, :destroy]
|
|
5
|
+
before_filter :setup_parent, :only => [:new, :create]
|
|
6
|
+
before_filter :get_secure_content, :only => [:edit, :update, :destroy]
|
|
7
|
+
before_filter :setup_layouts, :only => [:new, :create, :edit, :update]
|
|
8
|
+
|
|
9
|
+
def show
|
|
10
|
+
handle_content_request
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# If a content object is not found this method will render a 404 for users that are not allowed to add content.
|
|
14
|
+
# If the user is allowed to add content a redirect to new is performed so that the content can be added.
|
|
15
|
+
#
|
|
16
|
+
# Notes:
|
|
17
|
+
# Override 'new' by setting up @content and passing in a custom message via @new_content_message
|
|
18
|
+
# For example:
|
|
19
|
+
# def new
|
|
20
|
+
# @content = Content.new(:custom_scope => 'my-stuff')
|
|
21
|
+
# @new_content_message = 'Add Content to My Stuff'
|
|
22
|
+
# super
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# It is also simple to override the new template. Simply create a template in app/views/contents/new.html.erb
|
|
26
|
+
# and add something similar to the following:
|
|
27
|
+
# <div id="add_content">
|
|
28
|
+
# <%= output_errors(t('muck.contents.problem_adding_content'), {:class => 'help-box'}, @content) %>
|
|
29
|
+
# <% content_form(@content) do |f| -%>
|
|
30
|
+
# <%# Add custom fields here. ie %>
|
|
31
|
+
# <%= f.text_field :custom_thing %>
|
|
32
|
+
# <% end -%>
|
|
33
|
+
# </div>
|
|
34
|
+
def new
|
|
35
|
+
@content ||= Content.new
|
|
36
|
+
@content.uri = params[:path] if params[:path]
|
|
37
|
+
if has_permission_to_add_content(current_user, @parent, @content)
|
|
38
|
+
flash[:notice] = @new_content_message || t('muck.contents.page_doesnt_exist_create')
|
|
39
|
+
respond_to do |format|
|
|
40
|
+
format.html { render :template => 'contents/new'}
|
|
41
|
+
format.pjs { render :template => 'contents/new', :layout => 'popup'}
|
|
42
|
+
end
|
|
43
|
+
else
|
|
44
|
+
# TODO think about caching this:
|
|
45
|
+
@content = Content.find('404-page-not-found', :scope => MuckContents::GLOBAL_SCOPE) rescue nil
|
|
46
|
+
if @content.blank?
|
|
47
|
+
@content = Content.new(:title => I18n.t('muck.contents.default_404_title'), :body_raw => I18n.t('muck.contents.default_404_body'), :locale => I18n.locale.to_s)
|
|
48
|
+
@content.uri = '/404-page-not-found'
|
|
49
|
+
@content.save!
|
|
50
|
+
end
|
|
51
|
+
@title = @content.locale_title(I18n.locale)
|
|
52
|
+
respond_to do |format|
|
|
53
|
+
format.html { render :template => "contents/show", :status => 404 }
|
|
54
|
+
format.all { render :nothing => true, :status => 404 }
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def create
|
|
60
|
+
@content = Content.new(params[:content])
|
|
61
|
+
@content.contentable = @parent if @parent
|
|
62
|
+
@content.creator = current_user
|
|
63
|
+
@content.current_editor = current_user
|
|
64
|
+
@content.locale ||= I18n.locale
|
|
65
|
+
return permission_denied unless has_permission_to_add_content(current_user, @parent, @content)
|
|
66
|
+
|
|
67
|
+
@content.save!
|
|
68
|
+
respond_to do |format|
|
|
69
|
+
format.html do
|
|
70
|
+
redirect_back_or_default(@content.uri)
|
|
71
|
+
end
|
|
72
|
+
format.json { render :json => { :success => true, :content => @content, :parent_id => @parent ? @parent.id : nil } }
|
|
73
|
+
end
|
|
74
|
+
rescue ActiveRecord::RecordInvalid => ex
|
|
75
|
+
if @content
|
|
76
|
+
@errors = @content.errors.full_messages.to_sentence
|
|
77
|
+
else
|
|
78
|
+
@errors = ex
|
|
79
|
+
end
|
|
80
|
+
message = t('muck.contents.create_error', :errors => @errors)
|
|
81
|
+
respond_to do |format|
|
|
82
|
+
format.html do
|
|
83
|
+
flash[:error] = message
|
|
84
|
+
render :template => 'contents/new'
|
|
85
|
+
end
|
|
86
|
+
format.json { render :json => { :success => false, :message => message, :errors => @errors } }
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def edit
|
|
91
|
+
@page_title = @content.locale_title(I18n.locale)
|
|
92
|
+
respond_to do |format|
|
|
93
|
+
format.html { render :template => 'contents/edit'}
|
|
94
|
+
format.pjs { render :template => 'contents/edit', :layout => 'popup'}
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def update
|
|
99
|
+
@content.current_editor = current_user
|
|
100
|
+
@content.update_attributes(params[:content])
|
|
101
|
+
respond_to do |format|
|
|
102
|
+
format.html do
|
|
103
|
+
redirect_back_or_default(@content.uri)
|
|
104
|
+
end
|
|
105
|
+
format.json { render :json => { :success => true, :content => @content, :parent_id => @parent ? @parent.id : nil } }
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def destroy
|
|
110
|
+
@content.destroy
|
|
111
|
+
respond_to do |format|
|
|
112
|
+
format.html do
|
|
113
|
+
flash[:notice] = t('muck.contents.content_removed')
|
|
114
|
+
redirect_back_or_default(current_user)
|
|
115
|
+
end
|
|
116
|
+
format.js do
|
|
117
|
+
render(:update) do |page|
|
|
118
|
+
page << "jQuery('##{@content.dom_id}').fadeOut();"
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
format.json { render :json => { :success => true, :message => t("muck.contents.content_removed"), :content_id => @content.id } }
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
protected
|
|
126
|
+
|
|
127
|
+
# Setups up the layouts that are available in the 'layouts' pulldown.
|
|
128
|
+
# Override this method to change the available layouts. Note that the
|
|
129
|
+
# layout will need to exist in your 'views/layouts' directory
|
|
130
|
+
def setup_layouts
|
|
131
|
+
@content_layouts = []
|
|
132
|
+
get_layouts(File.join(RAILS_ROOT, 'app', 'views', 'layouts')).each do |layout|
|
|
133
|
+
@content_layouts << OpenStruct.new(:name => layout.titleize, :value => layout)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def get_layouts(path)
|
|
138
|
+
layouts = []
|
|
139
|
+
Dir.glob("#{path}/*").each do |layout_file|
|
|
140
|
+
if File.directory?(layout_file)
|
|
141
|
+
layouts << get_layouts(layout_file)
|
|
142
|
+
else
|
|
143
|
+
if layout_file.include?('.html.erb') || layout_file.include?('.html.haml')
|
|
144
|
+
trimmed_layout_file = File.basename(File.basename(layout_file, '.*'), '.*') # get ride of html.erb, html.haml
|
|
145
|
+
if trimmed_layout_file.first != '_'&& # don't include partials
|
|
146
|
+
layouts << trimmed_layout_file
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
layouts
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# This method checks to see if the specified user has the right o
|
|
155
|
+
# add content. Override this method in an individual controller
|
|
156
|
+
# to provide more restrictive or more liberal permissions.
|
|
157
|
+
# Parameters:
|
|
158
|
+
# user - The user attempting to add content.
|
|
159
|
+
# parent - The parent object of the content. May be nil.
|
|
160
|
+
# content - The content to be added. In an overridden method may want to check scope on the content
|
|
161
|
+
# to be sure a user doesn't attempt to change the scope to something they shouldn't have
|
|
162
|
+
# permission to.
|
|
163
|
+
def has_permission_to_add_content(user, parent, content)
|
|
164
|
+
return true if user.can_add_root_content?
|
|
165
|
+
return false if parent.blank?
|
|
166
|
+
parent.can_add_content?(user)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Pass the numeric id to this method to ensure that the operations update and delete occur on the correct object
|
|
170
|
+
def get_secure_content
|
|
171
|
+
@content = Content.find(params[:id])
|
|
172
|
+
unless @content.can_edit?(current_user)
|
|
173
|
+
respond_to do |format|
|
|
174
|
+
format.html do
|
|
175
|
+
flash[:notice] = I18n.t('muck.contents.cant_delete_content')
|
|
176
|
+
redirect_back_or_default current_user
|
|
177
|
+
end
|
|
178
|
+
format.js { render(:update){|page| page.alert I18n.t('muck.contents.cant_delete_content')}}
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def setup_parent
|
|
184
|
+
@parent = get_parent
|
|
185
|
+
end
|
|
186
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module MuckContentsHelper
|
|
2
|
+
|
|
3
|
+
# share is an optional share object that can be used to pre populate the form.
|
|
4
|
+
# options:
|
|
5
|
+
# html options for form:
|
|
6
|
+
# :html => {:id => 'a form'}
|
|
7
|
+
def content_form(content = nil, options = {}, &block)
|
|
8
|
+
content ||= Content.new
|
|
9
|
+
options[:html] = {} if options[:html].nil?
|
|
10
|
+
raw_block_to_partial('contents/form', options.merge(:content => content), &block)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# content uses friendly_id but we want the param in the form to use the number id
|
|
14
|
+
def get_content_form_url(content, parent)
|
|
15
|
+
if content.new_record?
|
|
16
|
+
contents_path(make_muck_parent_params(parent))
|
|
17
|
+
else
|
|
18
|
+
content_path(content.id, make_muck_parent_params(parent))
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<div id="content-pages">
|
|
2
|
+
<h2><%= t('muck.content.manage_pages_title') %></h2>
|
|
3
|
+
<div id="pageSearch">
|
|
4
|
+
<label>Search by Page Name:</label> <input id="autoPages" />
|
|
5
|
+
<span class="link-button"><%= link_to _("Add New Page"), new_admin_page_path %></span>
|
|
6
|
+
</div>
|
|
7
|
+
<div id="pageList">
|
|
8
|
+
<ul id="pageMasterUl">
|
|
9
|
+
<%= render :partial => 'admin/pages/page', :collection => @pages, :locals => {:parent_id => 0} -%>
|
|
10
|
+
</ul>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<input id="updatePath" type="hidden" value="<%=admin_pages_path%>">
|
|
15
|
+
|
|
16
|
+
<script type="text/javascript" language="JavaScript">
|
|
17
|
+
jQuery(document).ready(function() {
|
|
18
|
+
var data = <%= @pages.collect{|page| { :title => page.title, :id => page.id } }.to_json %>;
|
|
19
|
+
jQuery("#autoPages").autocomplete(data, {
|
|
20
|
+
minChars: 0,
|
|
21
|
+
autoFill: true,
|
|
22
|
+
mustMatch: false,
|
|
23
|
+
formatItem: function(item) {
|
|
24
|
+
return item.title;
|
|
25
|
+
}
|
|
26
|
+
}).result(function(event, item) { location.href = '/admin/pages/' + item.id + '/edit'; });
|
|
27
|
+
});
|
|
28
|
+
</script>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<% if logged_in? && content.can_edit?(current_user) -%>
|
|
2
|
+
<% if current_user.can_add_root_content? -%>
|
|
3
|
+
<%= link_to t('muck.contents.add'), new_content_path, :title => t('muck.contents.add_title'), :class => 'admin-content' -%> |
|
|
4
|
+
<% end -%>
|
|
5
|
+
<%= link_to t('muck.contents.edit'), edit_content_path(content.id), :title => t('muck.contents.edit_this_page'), :class => 'admin-content' -%> |
|
|
6
|
+
<%= link_to t('muck.contents.delete'), content_path(content.id), :method => :delete, :title => t('muck.contents.delete_title'), :class => 'admin-content', :confirm => t('muck.contents.confirm_delete_content') -%>
|
|
7
|
+
<% end -%>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<div id="<%= "#{content.dom_id}" %>" class="content_editor">
|
|
2
|
+
<% custom_form_for(content, :url => get_content_form_url(content, @parent), :html => html.merge(:id => "#{content.dom_id}_content_form", :class => 'content_form') ) do |f| -%>
|
|
3
|
+
<%= f.text_field :title, {:class => 'title', :tip => t('muck.contents.title_help'), :label => t('muck.contents.title_label') } %>
|
|
4
|
+
<%= f.text_area :body_raw, {:label => t('muck.contents.content_label'), :class => 'mceEditor', :id => 'mce_content', :tip_key => 'mce_content', :tip => t('muck.contents.content_help') } %>
|
|
5
|
+
<%= capture(f, &block) %>
|
|
6
|
+
<%= f.muck_select(:layout, :value, :name, t('muck.contents.choose_layout'), @content_layouts, {:tip => t('muck.contents.choose_layout_help')}) %>
|
|
7
|
+
<div class="button form-row">
|
|
8
|
+
<%= f.submit t('muck.contents.submit_content_button'), :class => "button share-submit", :id => "content_submit_#{content.dom_id}" %>
|
|
9
|
+
<%= f.hidden_field :uri_path unless content.uri_path.blank? %>
|
|
10
|
+
<%= f.hidden_field :custom_scope unless content.custom_scope.blank? %>
|
|
11
|
+
</div>
|
|
12
|
+
<% end %>
|
|
13
|
+
</div>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
class AddContents < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :contents, :force => true do |t|
|
|
4
|
+
t.integer :creator_id
|
|
5
|
+
t.string :title
|
|
6
|
+
t.text :body
|
|
7
|
+
t.string :locale
|
|
8
|
+
t.text :body_raw
|
|
9
|
+
t.integer :contentable_id
|
|
10
|
+
t.string :contentable_type
|
|
11
|
+
t.integer :parent_id
|
|
12
|
+
t.integer :lft
|
|
13
|
+
t.integer :rgt
|
|
14
|
+
t.boolean :is_public
|
|
15
|
+
t.string :state
|
|
16
|
+
t.timestamps
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
create_table :content_translations, :force => true do |t|
|
|
20
|
+
t.integer :content_id
|
|
21
|
+
t.string :title
|
|
22
|
+
t.text :body
|
|
23
|
+
t.string :locale
|
|
24
|
+
t.boolean :user_edited, :default => false
|
|
25
|
+
t.timestamps
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
create_table :content_permissions, :force => true do |t|
|
|
29
|
+
t.integer :content_id
|
|
30
|
+
t.integer :user_id
|
|
31
|
+
t.timestamps
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
add_index :contents, :parent_id
|
|
35
|
+
add_index :contents, :creator_id
|
|
36
|
+
|
|
37
|
+
add_index :content_translations, :content_id
|
|
38
|
+
add_index :content_translations, :locale
|
|
39
|
+
|
|
40
|
+
add_index :content_permissions, [:content_id, :user_id]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.down
|
|
44
|
+
drop_table :content_versions
|
|
45
|
+
drop_table :contents
|
|
46
|
+
drop_table :content_translations
|
|
47
|
+
drop_table :content_permissions
|
|
48
|
+
end
|
|
49
|
+
end
|