rostra 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +18 -7
- data/app/assets/images/rostra/anonymous_avatar.png +0 -0
- data/app/assets/javascripts/rostra/application.js +64 -8
- data/app/assets/javascripts/rostra/tiny_mce/jquery.tinymce.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/langs/en.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advhr/css/advhr.css +5 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advhr/js/rule.js +43 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advhr/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advhr/rule.htm +58 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advimage/css/advimage.css +13 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advimage/image.htm +235 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advimage/img/sample.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advimage/js/image.js +462 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advimage/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advlink/css/advlink.css +8 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advlink/js/advlink.js +532 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advlink/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advlink/link.htm +338 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/autolink/editor_plugin_src.js +172 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/autoresize/editor_plugin_src.js +137 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/autosave/editor_plugin_src.js +431 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/autosave/langs/en.js +4 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/bbcode/editor_plugin_src.js +120 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/contextmenu/editor_plugin_src.js +160 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/editor_plugin_src.js +43 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/emotions.htm +41 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/js/emotions.js +22 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/emotions/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example/dialog.htm +22 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example/img/example.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example/js/dialog.js +19 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example/langs/en.js +3 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullpage/css/fullpage.css +143 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullpage/editor_plugin_src.js +405 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullpage/fullpage.htm +259 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullpage/js/fullpage.js +232 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullpage/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullscreen/editor_plugin_src.js +159 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/fullscreen/fullscreen.htm +110 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +83 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/layer/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/layer/editor_plugin_src.js +214 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +139 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/lists/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/lists/editor_plugin_src.js +781 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/media/css/media.css +17 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/media/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/media/editor_plugin_src.js +822 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/media/js/embed.js +73 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/media/js/media.js +389 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/media/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/media/media.htm +897 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/media/moxieplayer.swf +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +54 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/noneditable/editor_plugin_src.js +95 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/pagebreak/editor_plugin_src.js +74 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/paste/editor_plugin_src.js +861 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/paste/js/pastetext.js +36 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/paste/js/pasteword.js +51 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/paste/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/paste/pastetext.htm +27 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/paste/pasteword.htm +21 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/preview/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/preview/editor_plugin_src.js +53 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/preview/example.html +28 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/preview/preview.html +17 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/print/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/print/editor_plugin_src.js +34 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/save/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/save/editor_plugin_src.js +101 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/searchreplace/editor_plugin_src.js +61 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/searchreplace/js/searchreplace.js +142 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/searchreplace/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/searchreplace/searchreplace.htm +100 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/spellchecker/css/content.css +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/spellchecker/editor_plugin_src.js +434 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/style/css/props.css +13 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/style/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/style/editor_plugin_src.js +55 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/style/js/props.js +635 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/style/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/style/props.htm +840 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/tabfocus/editor_plugin_src.js +122 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/cell.htm +180 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/css/cell.css +17 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/css/row.css +25 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/css/table.css +13 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/editor_plugin_src.js +1364 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/js/cell.js +319 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/js/merge_cells.js +27 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/js/row.js +237 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/js/table.js +450 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/merge_cells.htm +32 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/row.htm +158 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/table/table.htm +188 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/template/blank.htm +12 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/template/css/template.css +23 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/template/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/template/editor_plugin_src.js +159 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/template/js/template.js +106 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/template/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/template/template.htm +31 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/visualchars/editor_plugin_src.js +83 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/wordcount/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/wordcount/editor_plugin_src.js +114 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/abbr.htm +142 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/acronym.htm +142 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/attributes.htm +149 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/cite.htm +142 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/del.htm +162 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +132 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/ins.htm +162 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/js/abbr.js +28 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/js/acronym.js +28 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/js/attributes.js +111 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/js/cite.js +28 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/js/del.js +53 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/js/element_common.js +229 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/js/ins.js +53 -0
- data/app/assets/javascripts/rostra/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/about.htm +52 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/anchor.htm +26 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/charmap.htm +51 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/color_picker.htm +74 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/editor_template_src.js +1358 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/image.htm +80 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/js/about.js +73 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/js/anchor.js +42 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/js/charmap.js +355 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/js/color_picker.js +329 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/js/image.js +251 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/js/link.js +153 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/js/source_editor.js +56 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/langs/en.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/link.htm +57 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/shortcuts.htm +47 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/content.css +50 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/default/ui.css +214 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/highcontrast/content.css +24 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/o2k7/content.css +48 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/o2k7/ui.css +217 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/advanced/source_editor.htm +25 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/editor_template.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/editor_template_src.js +84 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/img/icons.gif +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/langs/en.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/skins/default/content.css +25 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/skins/default/ui.css +32 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/javascripts/rostra/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
- data/app/assets/javascripts/rostra/tiny_mce/tiny_mce.js +1 -0
- data/app/assets/javascripts/rostra/tiny_mce/tiny_mce_popup.js +5 -0
- data/app/assets/javascripts/rostra/tiny_mce/tiny_mce_src.js +15617 -0
- data/app/assets/javascripts/rostra/tiny_mce/utils/editable_selects.js +70 -0
- data/app/assets/javascripts/rostra/tiny_mce/utils/form_utils.js +210 -0
- data/app/assets/javascripts/rostra/tiny_mce/utils/mctabs.js +162 -0
- data/app/assets/javascripts/rostra/tiny_mce/utils/validate.js +252 -0
- data/app/assets/stylesheets/rostra/application.css +113 -20
- data/app/assets/stylesheets/rostra/flash_messages.css +3 -0
- data/app/assets/stylesheets/rostra/forms.css +4 -4
- data/app/assets/stylesheets/rostra/typography.css +1 -0
- data/app/controllers/rostra/answers_controller.rb +1 -8
- data/app/controllers/rostra/application_controller.rb +17 -3
- data/app/controllers/rostra/comments_controller.rb +31 -0
- data/app/controllers/rostra/questions_controller.rb +3 -9
- data/app/helpers/rostra/application_helper.rb +58 -0
- data/app/models/comment.rb +13 -0
- data/app/models/rostra/ability.rb +7 -2
- data/app/models/rostra/answer.rb +1 -0
- data/app/models/rostra/question.rb +20 -0
- data/app/views/layouts/rostra/application.html.erb +0 -2
- data/app/views/rostra/answers/_form.html.erb +2 -2
- data/app/views/rostra/answers/vote.js.erb +2 -1
- data/app/views/rostra/questions/_form.html.erb +2 -2
- data/app/views/rostra/questions/index.html.erb +24 -14
- data/app/views/rostra/questions/show.html.erb +46 -13
- data/app/views/rostra/questions/vote.js.erb +2 -1
- data/app/views/rostra/shared/_sidebar.html.erb +9 -2
- data/app/views/rostra/shared/_votes.html.erb +13 -21
- data/config/routes.rb +1 -0
- data/db/migrate/20111012020025_create_comments.rb +18 -0
- data/db/migrate/20111016021105_create_impressions_table.rb +37 -0
- data/lib/generators/rostra/install_generator.rb +14 -0
- data/lib/generators/rostra/templates/config/initializers/rostra.rb +26 -0
- data/lib/rostra/config.rb +38 -0
- data/lib/rostra/engine.rb +3 -1
- data/lib/rostra/version.rb +1 -1
- data/lib/rostra.rb +60 -5
- metadata +296 -15
- data/app/helpers/rostra/questions_helper.rb +0 -4
- data/app/views/rostra/shared/_answers_votes.html.erb +0 -27
@@ -19,22 +19,45 @@ nav {
|
|
19
19
|
float: right;
|
20
20
|
}
|
21
21
|
#page_content {
|
22
|
-
width:
|
22
|
+
width: 630px;
|
23
23
|
border-right: 1px solid #ccc;
|
24
24
|
padding-right: 100px;
|
25
25
|
}
|
26
|
+
body#questions.index #page_content,
|
27
|
+
body#questions.show #page_content {
|
28
|
+
margin-left: 80px;
|
29
|
+
width: 550px;
|
30
|
+
}
|
26
31
|
#sidebar {
|
27
32
|
float: right;
|
28
|
-
width:
|
29
|
-
|
33
|
+
width: 180px;
|
34
|
+
padding: 0 30px;
|
35
|
+
}
|
36
|
+
#sidebar .button {
|
37
|
+
width: 100%;
|
30
38
|
}
|
39
|
+
#sidebar ul {
|
40
|
+
list-style: none;
|
41
|
+
padding: 0;
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
img.avatar {
|
46
|
+
float: right;
|
47
|
+
box-shadow: 0 1px 4px #666;
|
48
|
+
width: 48px;
|
49
|
+
height: 48px;
|
50
|
+
margin: 0 0 10px 20px;
|
51
|
+
}
|
52
|
+
|
53
|
+
|
31
54
|
div#questions {
|
32
55
|
min-height: 250px;
|
33
56
|
}
|
34
57
|
.question {
|
35
|
-
margin-bottom:
|
58
|
+
margin-bottom: 43px;
|
36
59
|
border-bottom: dashed 1px #E0E0E0;
|
37
|
-
padding-bottom:
|
60
|
+
padding-bottom: 45px;
|
38
61
|
}
|
39
62
|
.question h3 {
|
40
63
|
margin-bottom: 5px;
|
@@ -59,6 +82,7 @@ div#questions {
|
|
59
82
|
}
|
60
83
|
.question .text {
|
61
84
|
margin-bottom: 25px;
|
85
|
+
min-height: 73px;
|
62
86
|
}
|
63
87
|
.question a.view_more {
|
64
88
|
margin-left: 10px;
|
@@ -74,17 +98,44 @@ div#questions {
|
|
74
98
|
float: right;
|
75
99
|
}
|
76
100
|
|
77
|
-
|
78
|
-
|
101
|
+
/* questions stats section */
|
102
|
+
.question .stats {
|
103
|
+
float: left;
|
104
|
+
width: 43px;
|
105
|
+
margin-left: -80px;
|
106
|
+
padding: 7px 4px 10px;
|
107
|
+
background: #e0e0e0;
|
108
|
+
border: 1px solid #aaa;
|
79
109
|
}
|
110
|
+
.question .stats span {
|
111
|
+
display: block;
|
112
|
+
text-align: center;
|
113
|
+
}
|
114
|
+
.question .stats > div {
|
115
|
+
padding: 8px 0 11px;
|
116
|
+
border-top: 1px solid #aaa;
|
117
|
+
}
|
118
|
+
.question .stats .vote_count {
|
119
|
+
padding-top: 0;
|
120
|
+
border-top: none;
|
121
|
+
}
|
122
|
+
.question .stats .views_count {
|
123
|
+
padding-bottom: 0;
|
124
|
+
}
|
125
|
+
.question .stats span.count {
|
126
|
+
font-size: 24px;
|
127
|
+
font-weight: bold;
|
128
|
+
}
|
129
|
+
.question .stats span.type {
|
130
|
+
font-size: 10px;
|
131
|
+
}
|
132
|
+
|
133
|
+
|
80
134
|
|
81
135
|
/* styles for question on question show page */
|
82
136
|
body#questions.show .question {
|
83
137
|
border-bottom: none;
|
84
|
-
margin-bottom:
|
85
|
-
}
|
86
|
-
body#questions.show #page_content {
|
87
|
-
margin-left: 50px;
|
138
|
+
margin-bottom: 20px;
|
88
139
|
}
|
89
140
|
|
90
141
|
|
@@ -105,12 +156,15 @@ body#questions.show #page_content {
|
|
105
156
|
}
|
106
157
|
#answers .answer cite {
|
107
158
|
color: #aaa;
|
159
|
+
display: block;
|
160
|
+
margin-top: 20px;
|
108
161
|
}
|
109
162
|
#answers .answer cite a {
|
110
163
|
font-style: normal;
|
111
164
|
margin-left: 5px;
|
112
165
|
}
|
113
166
|
#answers .answer .text {
|
167
|
+
clear: right;
|
114
168
|
margin-top: 10px;
|
115
169
|
}
|
116
170
|
|
@@ -123,6 +177,7 @@ form#new_rostra_answer {
|
|
123
177
|
}
|
124
178
|
form#new_rostra_answer .field label {
|
125
179
|
font-size: 16px;
|
180
|
+
margin-bottom: 10px;
|
126
181
|
}
|
127
182
|
form#new_rostra_answer .field label abbr {
|
128
183
|
display: none;
|
@@ -133,15 +188,59 @@ form#new_rostra_answer .field textarea {
|
|
133
188
|
margin: 10px 0;
|
134
189
|
}
|
135
190
|
|
191
|
+
/* comment form */
|
192
|
+
form.comment {
|
193
|
+
display: none;
|
194
|
+
}
|
195
|
+
form.comment label {
|
196
|
+
display: none;
|
197
|
+
}
|
198
|
+
form.comment textarea {
|
199
|
+
height: 100px;
|
200
|
+
margin-top: 25px !important;
|
201
|
+
}
|
202
|
+
|
203
|
+
/* comments */
|
204
|
+
.comments {
|
205
|
+
clear: both;
|
206
|
+
padding: 5px 0 15px;
|
207
|
+
}
|
208
|
+
.comments .comment {
|
209
|
+
background: #E0E0E0;
|
210
|
+
padding: 8px 10px;
|
211
|
+
margin-top: 10px;
|
212
|
+
}
|
213
|
+
.comments .comment .timestamp {
|
214
|
+
float: none;
|
215
|
+
text-align: right;
|
216
|
+
margin-top: 5px
|
217
|
+
}
|
218
|
+
.comments .comment .timestamp a {
|
219
|
+
margin-right: 5px
|
220
|
+
}
|
221
|
+
.comments .comment .timestamp a:first-child {
|
222
|
+
margin-left: 10px
|
223
|
+
}
|
224
|
+
.comments .editable form textarea {
|
225
|
+
min-height: 50px;
|
226
|
+
margin-bottom: 0;
|
227
|
+
}
|
228
|
+
.comments .editable form button {
|
229
|
+
padding: 3px 6px 4px;
|
230
|
+
margin-right: 5px;
|
231
|
+
font-size: 10px;
|
232
|
+
}
|
233
|
+
|
234
|
+
|
136
235
|
/*voting styles*/
|
137
|
-
.vote_wrapper
|
236
|
+
.vote_wrapper {
|
138
237
|
text-align: center;
|
139
238
|
width: 43px;
|
140
239
|
font-size: 22px;
|
141
240
|
font-weight: bold;
|
142
241
|
line-height: 12px;
|
143
242
|
float: left;
|
144
|
-
margin: -5px 0 0 -
|
243
|
+
margin: -5px 0 0 -66px;
|
145
244
|
}
|
146
245
|
.vote {
|
147
246
|
background-image: url("vote_arrows.png");
|
@@ -149,29 +248,23 @@ form#new_rostra_answer .field textarea {
|
|
149
248
|
width: 43px;
|
150
249
|
height: 43px;
|
151
250
|
display: block;
|
152
|
-
text-indent: -
|
251
|
+
text-indent: -9999px;
|
153
252
|
background-color: transparent;
|
154
253
|
}
|
155
|
-
|
156
254
|
.vote:hover{
|
157
255
|
background-color: transparent;
|
158
256
|
}
|
159
|
-
|
160
257
|
.vote.up{
|
161
258
|
background-position: 0 0;
|
162
259
|
}
|
163
|
-
|
164
260
|
.vote.up:hover, .vote.up.selected{
|
165
261
|
background-position: 0 -43px;
|
166
262
|
}
|
167
|
-
|
168
263
|
.vote.down{
|
169
264
|
background-position: 0 -129px;
|
170
265
|
}
|
171
|
-
|
172
266
|
.vote.down:hover, .vote.down.selected{
|
173
267
|
background-position: 0 -86px;
|
174
268
|
}
|
175
269
|
|
176
270
|
|
177
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
form .hint {
|
2
2
|
display: block;
|
3
|
-
margin-top:
|
3
|
+
margin-top: 5px;
|
4
4
|
color: #aaa;
|
5
5
|
}
|
6
6
|
form label abbr {
|
@@ -10,7 +10,8 @@ form label abbr {
|
|
10
10
|
}
|
11
11
|
form .field {
|
12
12
|
position: relative;
|
13
|
-
width:
|
13
|
+
width: 100%;
|
14
|
+
margin-bottom: 15px;
|
14
15
|
}
|
15
16
|
form label {
|
16
17
|
font-weight: bold;
|
@@ -19,7 +20,6 @@ form label {
|
|
19
20
|
}
|
20
21
|
form input,
|
21
22
|
form textarea {
|
22
|
-
margin-bottom: 15px;
|
23
23
|
padding: 3px;
|
24
24
|
width: 100%;
|
25
25
|
}
|
@@ -36,5 +36,5 @@ span.error {
|
|
36
36
|
.field_with_errors input,
|
37
37
|
.field_with_errors textarea {
|
38
38
|
background: #fde6e4;
|
39
|
-
border:
|
39
|
+
border: 2px solid red;
|
40
40
|
}
|
@@ -3,5 +3,6 @@ a, a:visited { }
|
|
3
3
|
a:hover { }
|
4
4
|
h1 { font-size: 36px; margin: 20px 0 50px; padding-bottom: 5px; border-bottom: 1px #ccc solid; }
|
5
5
|
h3 { font-size: 22px; margin: 0 0 10px 0; }
|
6
|
+
h4 { font-size: 18px; margin: 30px 0 10px 0; border-bottom: 1px #ccc solid; padding-bottom: 5px; }
|
6
7
|
|
7
8
|
|
@@ -4,14 +4,7 @@ module Rostra
|
|
4
4
|
before_filter :fetch_question
|
5
5
|
|
6
6
|
def vote
|
7
|
-
|
8
|
-
current_user.clear_votes(@answer)
|
9
|
-
elsif current_user.voted_against?(@answer) && params[:vote_type] == 'down'
|
10
|
-
current_user.clear_votes(@answer)
|
11
|
-
else
|
12
|
-
current_user.vote_exclusively_for(@answer) if params[:vote_type] == 'up'
|
13
|
-
current_user.vote_exclusively_against(@answer) if params[:vote_type] == 'down'
|
14
|
-
end
|
7
|
+
rostra_user.vote_on(@answer, params[:vote_direction])
|
15
8
|
|
16
9
|
respond_to do |format|
|
17
10
|
format.html { redirect_to question_path(@question, anchor: "rostra_answer_#{@answer.id}") }
|
@@ -1,16 +1,30 @@
|
|
1
1
|
module Rostra
|
2
2
|
class ApplicationController < ActionController::Base
|
3
3
|
|
4
|
-
|
4
|
+
include Rostra::Config
|
5
|
+
|
6
|
+
helper_method :user_logged_in?, :rostra_user, :main_app_login_path, :main_app_signup_path
|
5
7
|
|
6
8
|
rescue_from CanCan::AccessDenied do |exception|
|
7
9
|
after_access_denied
|
8
10
|
end
|
9
11
|
|
12
|
+
def rostra_user
|
13
|
+
send(Rostra::Config.rostra_user)
|
14
|
+
end
|
15
|
+
|
16
|
+
def main_app_login_path
|
17
|
+
send(:main_app).send(Rostra::Config.main_app_login_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def main_app_signup_path
|
21
|
+
send(:main_app).send(Rostra::Config.main_app_signup_path)
|
22
|
+
end
|
23
|
+
|
10
24
|
# Check if a user is logged in
|
11
25
|
#
|
12
26
|
def user_signed_in?
|
13
|
-
|
27
|
+
rostra_user
|
14
28
|
end
|
15
29
|
|
16
30
|
private
|
@@ -18,7 +32,7 @@ module Rostra
|
|
18
32
|
# Override <tt>cancan</tt>'s default class of <tt>Ability</tt> to user <tt>Rostra::Ability</tt>.
|
19
33
|
#
|
20
34
|
def current_ability
|
21
|
-
@current_ability ||= Rostra::Ability.new(
|
35
|
+
@current_ability ||= Rostra::Ability.new(rostra_user)
|
22
36
|
end
|
23
37
|
|
24
38
|
# Override this method to if finer control over what happens when <tt>cancan</tt> denies access.
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Rostra
|
2
|
+
class CommentsController < ApplicationController
|
3
|
+
load_and_authorize_resource
|
4
|
+
|
5
|
+
before_filter :fetch_question
|
6
|
+
|
7
|
+
def create
|
8
|
+
|
9
|
+
if @comment.save
|
10
|
+
redirect_to @question
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def update
|
15
|
+
@comment.update_attributes(:comment => params[:value])
|
16
|
+
render :text => @comment.comment
|
17
|
+
end
|
18
|
+
|
19
|
+
def destroy
|
20
|
+
@comment.destroy
|
21
|
+
redirect_to @question
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def fetch_question
|
27
|
+
@question = Question.find(params[:question_id])
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -3,14 +3,7 @@ module Rostra
|
|
3
3
|
load_and_authorize_resource
|
4
4
|
|
5
5
|
def vote
|
6
|
-
|
7
|
-
current_user.clear_votes(@question)
|
8
|
-
elsif current_user.voted_against?(@question) && params[:vote_type] == 'down'
|
9
|
-
current_user.clear_votes(@question)
|
10
|
-
else
|
11
|
-
current_user.vote_exclusively_for(@question) if params[:vote_type] == 'up'
|
12
|
-
current_user.vote_exclusively_against(@question) if params[:vote_type] == 'down'
|
13
|
-
end
|
6
|
+
rostra_user.vote_on(@question, params[:vote_direction])
|
14
7
|
|
15
8
|
respond_to do |format|
|
16
9
|
format.html { redirect_to @question }
|
@@ -20,11 +13,12 @@ module Rostra
|
|
20
13
|
|
21
14
|
def index
|
22
15
|
@questions = Question.order('created_at desc')
|
23
|
-
@user =
|
16
|
+
@user = rostra_user
|
24
17
|
end
|
25
18
|
|
26
19
|
def show
|
27
20
|
@answers = @question.answers
|
21
|
+
impressionist(@question) # increments page views
|
28
22
|
end
|
29
23
|
|
30
24
|
def new
|
@@ -1,4 +1,62 @@
|
|
1
1
|
module Rostra
|
2
2
|
module ApplicationHelper
|
3
|
+
|
4
|
+
# Creates a list of tags linking to...TODO: Where should these link?
|
5
|
+
#
|
6
|
+
def tag_list(question)
|
7
|
+
content_tag :div, "Tags: #{question.tags.map { |tag| link_to tag, ''}.join}".html_safe, class: 'tags'
|
8
|
+
end
|
9
|
+
|
10
|
+
# Finds the url to the user's avatar following this logic:
|
11
|
+
#
|
12
|
+
# 1. Calls the method defined in the <tt>Rostra::Config</tt>
|
13
|
+
# 2. Uses the users email address to looks for a gravatar
|
14
|
+
# 3. Renders <tt>app/assets/images/rostra/anonymous_avatar.png</tt>
|
15
|
+
#
|
16
|
+
def avatar_url(user)
|
17
|
+
avatar_method = Rostra::Config.rostra_user_avatar
|
18
|
+
|
19
|
+
if user.respond_to?(avatar_method)
|
20
|
+
user.send(avatar_method)
|
21
|
+
else
|
22
|
+
default_url = "#{main_app.root_url}assets/rostra/anonymous_avatar.png"
|
23
|
+
gravatar_id = Digest::MD5.hexdigest(user.rostra_user_email.downcase)
|
24
|
+
"http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Method to build links for ajax-y voting arrows.
|
29
|
+
#
|
30
|
+
def link_to_vote(direction, resource)
|
31
|
+
if user_signed_in? && ( (direction == :up && rostra_user.voted_for?(resource)) || (direction == :down && rostra_user.voted_against?(resource)) )
|
32
|
+
selected = 'selected'
|
33
|
+
else
|
34
|
+
selected = ''
|
35
|
+
end
|
36
|
+
|
37
|
+
link_to "Vote #{direction.capitalize}", vote_path(resource, direction), method: :put, remote: true, class: "vote #{direction} #{selected}"
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns a rostra object's base class name. For example, <tt>@question</tt> is an instance of
|
41
|
+
# Rostra::Question and so:
|
42
|
+
#
|
43
|
+
# class_name(@question) # => 'question'
|
44
|
+
#
|
45
|
+
def class_name(resource)
|
46
|
+
resource.class.name.split('::').last.downcase
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def vote_path(resource, direction)
|
52
|
+
return '#' if !user_signed_in? || can?(:manage, resource)
|
53
|
+
|
54
|
+
if resource.is_a?(Rostra::Question)
|
55
|
+
vote_question_path(resource, vote_direction: direction)
|
56
|
+
else
|
57
|
+
vote_question_answer_path(resource.question, resource, vote_direction: direction)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
3
61
|
end
|
4
62
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Comment < ActiveRecord::Base
|
2
|
+
|
3
|
+
include ActsAsCommentable::Comment
|
4
|
+
|
5
|
+
belongs_to :commentable, :polymorphic => true
|
6
|
+
belongs_to :user
|
7
|
+
|
8
|
+
validates :comment, :presence => true
|
9
|
+
validates_presence_of :user_id, :commentable_type, :commentable_id
|
10
|
+
|
11
|
+
default_scope :order => 'created_at ASC'
|
12
|
+
|
13
|
+
end
|
@@ -10,8 +10,13 @@ module Rostra
|
|
10
10
|
if logged_in?
|
11
11
|
can :manage, Question, :user => user
|
12
12
|
can :manage, Answer, :user => user
|
13
|
-
can
|
14
|
-
|
13
|
+
can :manage, Comment, :user => user
|
14
|
+
|
15
|
+
can :vote, Question
|
16
|
+
cannot :vote, Question, :user => user
|
17
|
+
|
18
|
+
can :vote, Answer
|
19
|
+
cannot :vote, Answer, :user => user
|
15
20
|
end
|
16
21
|
|
17
22
|
can :read, :all
|
data/app/models/rostra/answer.rb
CHANGED
@@ -6,10 +6,30 @@ module Rostra
|
|
6
6
|
|
7
7
|
acts_as_taggable
|
8
8
|
acts_as_voteable
|
9
|
+
is_impressionable
|
9
10
|
|
10
11
|
validates :title, :presence => true, :uniqueness => true, :length => { :minimum => 15 }
|
11
12
|
validates :user, :presence => true
|
12
13
|
validates :tag_list, :presence => true
|
13
14
|
|
15
|
+
# Finds questions asked within the last 15 days ordered by non-unique page views.
|
16
|
+
#
|
17
|
+
def self.trending(limit = 5)
|
18
|
+
Question
|
19
|
+
.where(created_at: (15.days.ago)..(Time.now))
|
20
|
+
.limit(limit)
|
21
|
+
.joins(:impressions)
|
22
|
+
.group('impressions.impressionable_id')
|
23
|
+
.order('count(impressions.impressionable_id) desc')
|
24
|
+
end
|
25
|
+
|
26
|
+
def answer_count
|
27
|
+
@answer_count = answers.count
|
28
|
+
end
|
29
|
+
|
30
|
+
def unique_page_views
|
31
|
+
impressionist_count(filter: :ip_address)
|
32
|
+
end
|
33
|
+
|
14
34
|
end
|
15
35
|
end
|
@@ -10,8 +10,6 @@
|
|
10
10
|
<div id="page_wrap">
|
11
11
|
<nav>
|
12
12
|
<%= link_to 'Recent questions', questions_path %>
|
13
|
-
<%= link_to 'Logout', main_app.destroy_user_session_path, :method => :post %>
|
14
|
-
|
15
13
|
</nav>
|
16
14
|
<% flash.each do |name, msg| %>
|
17
15
|
<%= content_tag :div, msg, id: "flash_#{name}", class: 'flash' %>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<% @answer ||= @question.answers.build %>
|
2
2
|
|
3
3
|
<%= simple_form_for [@question, @answer], validate: true do |f| %>
|
4
|
-
<%= f.hidden_field :user_id, value:
|
4
|
+
<%= f.hidden_field :user_id, value: rostra_user.id %>
|
5
5
|
<%= f.hidden_field :question_id, value: @question.id %>
|
6
|
-
<%= f.input :text, label: 'Answer this question' %>
|
6
|
+
<%= f.input :text, label: 'Answer this question', input_html: { class: 'wysiwyg' } %>
|
7
7
|
<%= f.submit @answer.new_record? ? 'Answer' : 'Update' %>
|
8
8
|
<% end %>
|
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
var selector = "#rostra_answer_<%= @answer.id%> .vote_wrapper";
|
2
|
+
$(selector).replaceWith('<%= escape_javascript(render(:partial => 'rostra/shared/votes', locals: {resource: @answer})) %>');
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= simple_form_for @question, validate: true do |f| %>
|
2
|
-
<%= f.hidden_field :user_id, value:
|
2
|
+
<%= f.hidden_field :user_id, value: rostra_user.id %>
|
3
3
|
<%= f.input :title %>
|
4
|
-
<%= f.input :details %>
|
4
|
+
<%= f.input :details, input_html: {class: 'wysiwyg'} %>
|
5
5
|
<%= f.input :tag_list, label: 'Tags', hint: 'Separate tags with commas' %>
|
6
6
|
<%= f.submit "Post your question" %>
|
7
7
|
<% end %>
|
@@ -11,29 +11,39 @@
|
|
11
11
|
|
12
12
|
<% @questions.each do |question| %>
|
13
13
|
<div class="question">
|
14
|
+
|
15
|
+
<div class="stats">
|
16
|
+
<div class="vote_count">
|
17
|
+
<span class="count"><%= question.plusminus %></span>
|
18
|
+
<span class="type"><%= question.plusminus.abs == 1 ? 'vote' : 'votes' %></span>
|
19
|
+
</div>
|
20
|
+
<div class="answer_count">
|
21
|
+
<span class="count"><%= question.answer_count %></span>
|
22
|
+
<span class="type"><%= question.answer_count.abs == 1 ? 'answer' : 'answers' %></span>
|
23
|
+
</div>
|
24
|
+
<div class="views_count">
|
25
|
+
<span class="count"><%= question.unique_page_views %></span>
|
26
|
+
<span class="type"><%= question.unique_page_views.abs == 1 ? 'view' : 'views' %></span>
|
27
|
+
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<%= image_tag avatar_url(question.user), class: 'avatar' %>
|
32
|
+
|
14
33
|
<h3 class="title"><%= link_to question.title, question %></h3>
|
15
34
|
<cite>
|
16
|
-
Asked by <%= question.user.
|
35
|
+
Asked by <%= question.user.rostra_user_name %>
|
17
36
|
<%= link_to 'edit', edit_question_path(question) if can? :manage, question %>
|
18
37
|
</cite>
|
19
38
|
<div class="text">
|
20
|
-
<% if question.details.length >
|
21
|
-
<%=
|
22
|
-
truncate(question.details, length: 250) +
|
23
|
-
link_to("view more", question, class: "view_more")
|
24
|
-
) %>
|
25
|
-
|
39
|
+
<% if question.details.length > 500 %>
|
40
|
+
<%= strip_tags(truncate(question.details, length: 500)) + link_to("view more", question, class: "view_more") %>
|
26
41
|
<% else %>
|
27
|
-
<%=
|
42
|
+
<%= strip_tags(question.details) %>
|
28
43
|
<% end %>
|
29
44
|
</div>
|
30
45
|
<div class="timestamp"><%= time_ago_in_words(question.updated_at) %> ago</div>
|
31
|
-
|
32
|
-
Tags:
|
33
|
-
<% question.tags.each do |tag| %>
|
34
|
-
<%= link_to tag, "" %>
|
35
|
-
<% end %>
|
36
|
-
</div>
|
46
|
+
<%= tag_list(question) %>
|
37
47
|
</div>
|
38
48
|
<% end %>
|
39
49
|
|