rails_tinymce 0.0.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/.gitignore +3 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE +20 -0
- data/README.md +130 -0
- data/Rakefile +22 -0
- data/assets/app/controllers/attachments_controller.rb +31 -0
- data/assets/app/helpers/remote_link_renderer.rb +10 -0
- data/assets/app/models/tiny_print.rb +12 -0
- data/assets/app/models/tiny_video.rb +6 -0
- data/assets/app/views/attachments/_show_attachment_list.html.erb +34 -0
- data/assets/config/initializers/tiny_mce_plus_config.rb +76 -0
- data/assets/public/images/tiny_mce/spinner.gif +0 -0
- data/assets/public/javascripts/tiny_mce/.DS_Store +0 -0
- data/assets/public/javascripts/tiny_mce/blank.htm +9 -0
- data/assets/public/javascripts/tiny_mce/langs/en.js +154 -0
- data/assets/public/javascripts/tiny_mce/langs/readme.txt +9 -0
- data/assets/public/javascripts/tiny_mce/license.txt +504 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/css/advhr.css +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js +54 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/images/advhr.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/js/rule.js +34 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/jscripts/rule.js +43 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/langs/en.js +8 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/advhr/rule.htm +63 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/css/advimage.css +13 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js +49 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/image.htm +237 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/images/sample.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/img/sample.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/js/image.js +438 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/jscripts/functions.js +538 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/langs/en.js +27 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js +43 -0
- data/assets/public/javascripts/tiny_mce/plugins/advimage/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/css/advlink.css +8 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js +58 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/js/advlink.js +563 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/jscripts/functions.js +587 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/langs/en.js +46 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js +52 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/link.htm +339 -0
- data/assets/public/javascripts/tiny_mce/plugins/advlink/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js +51 -0
- data/assets/public/javascripts/tiny_mce/plugins/autosave/langs/en.js +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/autosave/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js +115 -0
- data/assets/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin_src.js +613 -0
- data/assets/public/javascripts/tiny_mce/plugins/contextmenu/css/contextmenu.css +74 -0
- data/assets/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js +84 -0
- data/assets/public/javascripts/tiny_mce/plugins/contextmenu/images/spacer.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/contextmenu/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/curblyadvimage/css/advimage.css +84 -0
- data/assets/public/javascripts/tiny_mce/plugins/curblyadvimage/editor_plugin.js +49 -0
- data/assets/public/javascripts/tiny_mce/plugins/curblyadvimage/editor_plugin_src.js +48 -0
- data/assets/public/javascripts/tiny_mce/plugins/curblyadvimage/image.htm +270 -0
- data/assets/public/javascripts/tiny_mce/plugins/curblyadvimage/img/sample.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/curblyadvimage/js/functions.js +511 -0
- data/assets/public/javascripts/tiny_mce/plugins/curblyadvimage/langs/en_dlg.js +43 -0
- data/assets/public/javascripts/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js +79 -0
- data/assets/public/javascripts/tiny_mce/plugins/directionality/images/ltr.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/directionality/images/rtl.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/directionality/langs/en.js +6 -0
- data/assets/public/javascripts/tiny_mce/plugins/directionality/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js +40 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/emotions.htm +41 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/emotions.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/readme.txt +2 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-cool.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-cry.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-embarassed.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-foot-in-mouth.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-frown.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-innocent.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-kiss.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-money-mouth.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-sealed.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-smile.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-surprised.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-undecided.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-wink.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/images/smiley-yell.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/js/emotions.js +22 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/jscripts/functions.js +21 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/langs/en.js +22 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js +20 -0
- data/assets/public/javascripts/tiny_mce/plugins/emotions/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/example/dialog.htm +27 -0
- data/assets/public/javascripts/tiny_mce/plugins/example/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/example/editor_plugin_src.js +81 -0
- data/assets/public/javascripts/tiny_mce/plugins/example/img/example.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/example/js/dialog.js +19 -0
- data/assets/public/javascripts/tiny_mce/plugins/example/langs/en.js +3 -0
- data/assets/public/javascripts/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/blank.htm +9 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css +178 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js +122 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/fullpage.htm +577 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/images/add.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/images/fullpage.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/images/move_down.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/images/move_up.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/images/remove.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js +462 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/jscripts/fullpage.js +580 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/langs/en.js +92 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js +85 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullscreen/css/page.css +21 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js +131 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +97 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullscreen/images/fullscreen.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullscreen/langs/en.js +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/fullscreen/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js +51 -0
- data/assets/public/javascripts/tiny_mce/plugins/iespell/images/iespell.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/iespell/langs/en.js +7 -0
- data/assets/public/javascripts/tiny_mce/plugins/iespell/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/css/inlinepopup.css +70 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +563 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/images/spacer.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/images/window_back.png +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/images/window_close.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/images/window_maximize.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/images/window_minimize.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/images/window_resize.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/jscripts/mcwindows.js +453 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/readme.txt +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +89 -0
- data/assets/public/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/assets/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +80 -0
- data/assets/public/javascripts/tiny_mce/plugins/insertdatetime/images/insertdate.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/insertdatetime/images/inserttime.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/insertdatetime/langs/en.js +12 -0
- data/assets/public/javascripts/tiny_mce/plugins/insertdatetime/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js +209 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/images/absolute.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/images/backward.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/images/forward.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/images/insert_layer.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/images/insertlayer.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/images/movebackward.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/images/moveforward.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/langs/en.js +9 -0
- data/assets/public/javascripts/tiny_mce/plugins/layer/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/css/content.css +6 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/css/media.css +152 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/editor_plugin_src.js +353 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/images/flash.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/images/media.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/images/quicktime.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/images/realmedia.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/images/shockwave.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/images/windowsmedia.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/img/flash.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/img/flv_player.swf +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/img/quicktime.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/img/realmedia.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/img/shockwave.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/img/trans.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/img/windowsmedia.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/js/embed.js +73 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/js/media.js +692 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/jscripts/embed.js +73 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/jscripts/media.js +590 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/langs/en.js +94 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/langs/en_dlg.js +103 -0
- data/assets/public/javascripts/tiny_mce/plugins/media/media.htm +851 -0
- data/assets/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +50 -0
- data/assets/public/javascripts/tiny_mce/plugins/nonbreaking/images/nonbreaking.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/nonbreaking/langs/en.js +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/noneditable/css/noneditable.css +9 -0
- data/assets/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js +81 -0
- data/assets/public/javascripts/tiny_mce/plugins/noneditable/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/pagebreak/css/content.css +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js +73 -0
- data/assets/public/javascripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/pagebreak/img/trans.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/blank.htm +22 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/css/blank.css +14 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/css/pasteword.css +3 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js +382 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/images/pastetext.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/images/pasteword.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/images/selectall.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/js/pastetext.js +42 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/js/pasteword.js +56 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/jscripts/pastetext.js +38 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/jscripts/pasteword.js +52 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/langs/en.js +10 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/pastetext.htm +34 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/pasteword.htm +29 -0
- data/assets/public/javascripts/tiny_mce/plugins/paste/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/preview/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js +187 -0
- data/assets/public/javascripts/tiny_mce/plugins/preview/example.html +28 -0
- data/assets/public/javascripts/tiny_mce/plugins/preview/images/preview.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
- data/assets/public/javascripts/tiny_mce/plugins/preview/langs/en.js +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/preview/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/print/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/print/editor_plugin_src.js +31 -0
- data/assets/public/javascripts/tiny_mce/plugins/print/images/print.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/print/langs/en.js +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/print/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/safari/blank.htm +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/safari/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/safari/editor_plugin_src.js +414 -0
- data/assets/public/javascripts/tiny_mce/plugins/save/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/save/editor_plugin_src.js +100 -0
- data/assets/public/javascripts/tiny_mce/plugins/save/images/cancel.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/save/images/save.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/save/langs/en.js +6 -0
- data/assets/public/javascripts/tiny_mce/plugins/save/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js +53 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/images/replace.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/images/replace_all_button_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/images/replace_button_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/images/search.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js +110 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/jscripts/searchreplace.js +86 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/langs/en.js +21 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js +16 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm +105 -0
- data/assets/public/javascripts/tiny_mce/plugins/spellchecker/css/content.css +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js +336 -0
- data/assets/public/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/css/props.css +13 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/editor_plugin_src.js +48 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/images/apply_button_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/images/style_info.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/images/styleprops.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/js/props.js +641 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/jscripts/props.js +633 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/langs/en.js +66 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/langs/en_dlg.js +63 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/props.htm +731 -0
- data/assets/public/javascripts/tiny_mce/plugins/style/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/cell.htm +183 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/css/cell.css +17 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/css/row.css +25 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/css/table.css +13 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js +1038 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/buttons.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_cell_props.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_delete.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_delete_col.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_delete_row.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_insert_col_after.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_insert_col_before.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_insert_row_after.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_insert_row_before.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_merge_cells.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_row_props.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/images/table_split_cells.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/js/cell.js +256 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js +28 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/js/row.js +207 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/js/table.js +382 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/jscripts/cell.js +249 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/jscripts/merge_cells.js +24 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/jscripts/row.js +200 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/jscripts/table.js +364 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/langs/en.js +79 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +74 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/merge_cells.htm +38 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/readme.txt +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/row.htm +160 -0
- data/assets/public/javascripts/tiny_mce/plugins/table/table.htm +192 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/blank.htm +12 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/css/template.css +23 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/editor_plugin_src.js +149 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/images/template.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/js/template.js +100 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/jscripts/template.js +143 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/langs/en.js +16 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/langs/en_dlg.js +15 -0
- data/assets/public/javascripts/tiny_mce/plugins/template/template.htm +39 -0
- data/assets/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js +73 -0
- data/assets/public/javascripts/tiny_mce/plugins/visualchars/images/visualchars.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/visualchars/langs/en.js +5 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm +149 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm +149 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm +154 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm +149 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/xhtmlxtras.css +24 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm +170 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +134 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/images/abbr.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/images/acronym.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/images/attribs.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/images/cite.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/images/date_time.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/images/del.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/images/ins.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/images/remove_button_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm +170 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js +25 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js +25 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js +123 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js +25 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js +50 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js +221 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js +49 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/jscripts/abbr.js +29 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/jscripts/acronym.js +29 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/jscripts/attributes.js +130 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/jscripts/cite.js +29 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/jscripts/del.js +54 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/jscripts/element_common.js +241 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/jscripts/ins.js +53 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en.js +42 -0
- data/assets/public/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +32 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/about.htm +56 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/anchor.htm +32 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/charmap.htm +54 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/css/colorpicker.css +53 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/css/editor_content.css +45 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/css/editor_popup.css +331 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/css/editor_ui.css +97 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/about.htm +31 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/common_buttons.htm +162 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/create_accessible_content.htm +45 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/images/insert_link_window.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/index.htm +27 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm +32 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/insert_image_button.htm +65 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/insert_link_button.htm +33 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/insert_table_button.htm +71 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/docs/en/style.css +28 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/editor_template_src.js +998 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/image.htm +86 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/anchor.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/anchor_symbol.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/backcolor.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/bold.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/bold_de_se.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/bold_es.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/bold_fr.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/bold_ru.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/bold_tw.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/browse.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/bullist.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/button_menu.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/buttons.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/cancel_button_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/charmap.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/cleanup.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/close.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/code.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/color.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/colors.jpg +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/copy.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/custom_1.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/cut.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/forecolor.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/help.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/hr.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/image.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/indent.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/insert_button_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/italic.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/italic_de_se.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/italic_es.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/italic_ru.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/italic_tw.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/justifycenter.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/justifyfull.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/justifyleft.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/justifyright.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/link.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/menu_check.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/newdocument.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/numlist.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/opacity.png +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/outdent.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/paste.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/redo.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/removeformat.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/separator.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/spacer.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/statusbar_resize.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/strikethrough.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/sub.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/sup.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/toolbar_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/underline.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/underline_es.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/underline_fr.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/underline_ru.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/underline_tw.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/undo.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/unlink.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/visualaid.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/xp/tab_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/xp/tab_end.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/xp/tab_sel_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/xp/tab_sel_end.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/images/xp/tabs_bg.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/js/about.js +76 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/js/anchor.js +33 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/js/charmap.js +325 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/js/color_picker.js +245 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/js/image.js +243 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/js/link.js +124 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/js/source_editor.js +62 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/jscripts/about.js +75 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/jscripts/anchor.js +74 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/jscripts/charmap.js +326 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/jscripts/color_picker.js +240 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/jscripts/image.js +81 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/jscripts/link.js +74 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/jscripts/source_editor.js +59 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/langs/en.js +62 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +51 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/link.htm +64 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/content.css +18 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +114 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +195 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +18 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +113 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +195 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/assets/public/javascripts/tiny_mce/themes/advanced/source_editor.htm +32 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/css/editor_content.css +25 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/css/editor_popup.css +41 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/css/editor_ui.css +125 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/editor_template.js +1 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/editor_template_src.js +85 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/bold.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/bold_de_se.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/bold_fr.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/bold_ru.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/bold_tw.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/bullist.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/buttons.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/cleanup.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/italic.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/italic_de_se.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/italic_ru.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/italic_tw.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/numlist.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/redo.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/separator.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/spacer.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/strikethrough.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/underline.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/underline_fr.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/underline_ru.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/underline_tw.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/images/undo.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/img/icons.gif +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/langs/en.js +11 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/skins/default/content.css +25 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/skins/default/ui.css +32 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
- data/assets/public/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
- data/assets/public/javascripts/tiny_mce/tiny_mce.js +1 -0
- data/assets/public/javascripts/tiny_mce/tiny_mce_popup.js +246 -0
- data/assets/public/javascripts/tiny_mce/tiny_mce_src.js +9608 -0
- data/assets/public/javascripts/tiny_mce/utils/editable_selects.js +61 -0
- data/assets/public/javascripts/tiny_mce/utils/form_utils.js +195 -0
- data/assets/public/javascripts/tiny_mce/utils/mclayer.js +210 -0
- data/assets/public/javascripts/tiny_mce/utils/mctabs.js +74 -0
- data/assets/public/javascripts/tiny_mce/utils/validate.js +219 -0
- data/generators/rails_tiny_mce_migration/rails_tiny_mce_migration_generator.rb +11 -0
- data/generators/rails_tiny_mce_migration/templates/migration.rb +24 -0
- data/init.rb +3 -0
- data/install.rb +1 -0
- data/lib/rails_tinymce.rb +3 -0
- data/lib/rails_tinymce/version.rb +3 -0
- data/lib/tiny_mce.rb +36 -0
- data/lib/tiny_mce_helper.rb +48 -0
- data/plugins/paperclip/LICENSE +26 -0
- data/plugins/paperclip/README.rdoc +174 -0
- data/plugins/paperclip/Rakefile +99 -0
- data/plugins/paperclip/cucumber/paperclip_steps.rb +6 -0
- data/plugins/paperclip/generators/paperclip/USAGE +5 -0
- data/plugins/paperclip/generators/paperclip/paperclip_generator.rb +27 -0
- data/plugins/paperclip/generators/paperclip/templates/paperclip_migration.rb.erb +19 -0
- data/plugins/paperclip/init.rb +1 -0
- data/plugins/paperclip/lib/paperclip.rb +353 -0
- data/plugins/paperclip/lib/paperclip/attachment.rb +414 -0
- data/plugins/paperclip/lib/paperclip/callback_compatability.rb +33 -0
- data/plugins/paperclip/lib/paperclip/geometry.rb +115 -0
- data/plugins/paperclip/lib/paperclip/interpolations.rb +108 -0
- data/plugins/paperclip/lib/paperclip/iostream.rb +58 -0
- data/plugins/paperclip/lib/paperclip/matchers.rb +4 -0
- data/plugins/paperclip/lib/paperclip/matchers/have_attached_file_matcher.rb +49 -0
- data/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +66 -0
- data/plugins/paperclip/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +48 -0
- data/plugins/paperclip/lib/paperclip/matchers/validate_attachment_size_matcher.rb +83 -0
- data/plugins/paperclip/lib/paperclip/processor.rb +49 -0
- data/plugins/paperclip/lib/paperclip/storage.rb +243 -0
- data/plugins/paperclip/lib/paperclip/thumbnail.rb +73 -0
- data/plugins/paperclip/lib/paperclip/upfile.rb +48 -0
- data/plugins/paperclip/paperclip.gemspec +37 -0
- data/plugins/paperclip/shoulda_macros/paperclip.rb +117 -0
- data/plugins/paperclip/tasks/paperclip_tasks.rake +79 -0
- data/plugins/paperclip/test/.gitignore +1 -0
- data/plugins/paperclip/test/attachment_test.rb +780 -0
- data/plugins/paperclip/test/database.yml +4 -0
- data/plugins/paperclip/test/fixtures/12k.png +0 -0
- data/plugins/paperclip/test/fixtures/50x50.png +0 -0
- data/plugins/paperclip/test/fixtures/5k.png +0 -0
- data/plugins/paperclip/test/fixtures/bad.png +1 -0
- data/plugins/paperclip/test/fixtures/s3.yml +8 -0
- data/plugins/paperclip/test/fixtures/text.txt +0 -0
- data/plugins/paperclip/test/fixtures/twopage.pdf +0 -0
- data/plugins/paperclip/test/geometry_test.rb +177 -0
- data/plugins/paperclip/test/helper.rb +108 -0
- data/plugins/paperclip/test/integration_test.rb +483 -0
- data/plugins/paperclip/test/interpolations_test.rb +124 -0
- data/plugins/paperclip/test/iostream_test.rb +71 -0
- data/plugins/paperclip/test/matchers/have_attached_file_matcher_test.rb +21 -0
- data/plugins/paperclip/test/matchers/validate_attachment_content_type_matcher_test.rb +30 -0
- data/plugins/paperclip/test/matchers/validate_attachment_presence_matcher_test.rb +21 -0
- data/plugins/paperclip/test/matchers/validate_attachment_size_matcher_test.rb +50 -0
- data/plugins/paperclip/test/paperclip_test.rb +327 -0
- data/plugins/paperclip/test/processor_test.rb +10 -0
- data/plugins/paperclip/test/storage_test.rb +303 -0
- data/plugins/paperclip/test/thumbnail_test.rb +227 -0
- data/plugins/responds_to_parent/MIT-LICENSE +20 -0
- data/plugins/responds_to_parent/README +42 -0
- data/plugins/responds_to_parent/Rakefile +22 -0
- data/plugins/responds_to_parent/init.rb +2 -0
- data/plugins/responds_to_parent/lib/parent_selector_assertion.rb +144 -0
- data/plugins/responds_to_parent/lib/responds_to_parent.rb +46 -0
- data/plugins/responds_to_parent/test/assert_select_parent_test.rb +318 -0
- data/plugins/responds_to_parent/test/responds_to_parent_test.rb +115 -0
- data/plugins/will_paginate/.gitignore +4 -0
- data/plugins/will_paginate/.manifest +49 -0
- data/plugins/will_paginate/CHANGELOG +92 -0
- data/plugins/will_paginate/LICENSE +18 -0
- data/plugins/will_paginate/README.rdoc +131 -0
- data/plugins/will_paginate/Rakefile +62 -0
- data/plugins/will_paginate/examples/apple-circle.gif +0 -0
- data/plugins/will_paginate/examples/index.haml +69 -0
- data/plugins/will_paginate/examples/index.html +92 -0
- data/plugins/will_paginate/examples/pagination.css +90 -0
- data/plugins/will_paginate/examples/pagination.sass +91 -0
- data/plugins/will_paginate/init.rb +1 -0
- data/plugins/will_paginate/lib/will_paginate.rb +86 -0
- data/plugins/will_paginate/lib/will_paginate/array.rb +16 -0
- data/plugins/will_paginate/lib/will_paginate/collection.rb +145 -0
- data/plugins/will_paginate/lib/will_paginate/core_ext.rb +32 -0
- data/plugins/will_paginate/lib/will_paginate/finder.rb +247 -0
- data/plugins/will_paginate/lib/will_paginate/named_scope.rb +132 -0
- data/plugins/will_paginate/lib/will_paginate/named_scope_patch.rb +39 -0
- data/plugins/will_paginate/lib/will_paginate/version.rb +9 -0
- data/plugins/will_paginate/lib/will_paginate/view_helpers.rb +373 -0
- data/plugins/will_paginate/test/boot.rb +21 -0
- data/plugins/will_paginate/test/collection_test.rb +140 -0
- data/plugins/will_paginate/test/console +8 -0
- data/plugins/will_paginate/test/database.yml +22 -0
- data/plugins/will_paginate/test/finder_test.rb +434 -0
- data/plugins/will_paginate/test/fixtures/admin.rb +3 -0
- data/plugins/will_paginate/test/fixtures/developer.rb +13 -0
- data/plugins/will_paginate/test/fixtures/developers_projects.yml +13 -0
- data/plugins/will_paginate/test/fixtures/project.rb +15 -0
- data/plugins/will_paginate/test/fixtures/projects.yml +6 -0
- data/plugins/will_paginate/test/fixtures/replies.yml +29 -0
- data/plugins/will_paginate/test/fixtures/reply.rb +7 -0
- data/plugins/will_paginate/test/fixtures/schema.rb +38 -0
- data/plugins/will_paginate/test/fixtures/topic.rb +6 -0
- data/plugins/will_paginate/test/fixtures/topics.yml +30 -0
- data/plugins/will_paginate/test/fixtures/user.rb +2 -0
- data/plugins/will_paginate/test/fixtures/users.yml +35 -0
- data/plugins/will_paginate/test/helper.rb +37 -0
- data/plugins/will_paginate/test/lib/activerecord_test_case.rb +36 -0
- data/plugins/will_paginate/test/lib/activerecord_test_connector.rb +69 -0
- data/plugins/will_paginate/test/lib/load_fixtures.rb +11 -0
- data/plugins/will_paginate/test/lib/view_test_process.rb +165 -0
- data/plugins/will_paginate/test/tasks.rake +56 -0
- data/plugins/will_paginate/test/view_test.rb +355 -0
- data/plugins/will_paginate/will_paginate.gemspec +21 -0
- data/rails_tinymce.gemspec +21 -0
- data/tasks/tiny_mce_plus_tasks.rake +23 -0
- data/test/tiny_mce_plus_test.rb +8 -0
- data/tiny_mce_options.yml +124 -0
- data/uninstall.rb +1 -0
- metadata +725 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
module WillPaginate
|
|
2
|
+
# = Invalid page number error
|
|
3
|
+
# This is an ArgumentError raised in case a page was requested that is either
|
|
4
|
+
# zero or negative number. You should decide how do deal with such errors in
|
|
5
|
+
# the controller.
|
|
6
|
+
#
|
|
7
|
+
# If you're using Rails 2, then this error will automatically get handled like
|
|
8
|
+
# 404 Not Found. The hook is in "will_paginate.rb":
|
|
9
|
+
#
|
|
10
|
+
# ActionController::Base.rescue_responses['WillPaginate::InvalidPage'] = :not_found
|
|
11
|
+
#
|
|
12
|
+
# If you don't like this, use your preffered method of rescuing exceptions in
|
|
13
|
+
# public from your controllers to handle this differently. The +rescue_from+
|
|
14
|
+
# method is a nice addition to Rails 2.
|
|
15
|
+
#
|
|
16
|
+
# This error is *not* raised when a page further than the last page is
|
|
17
|
+
# requested. Use <tt>WillPaginate::Collection#out_of_bounds?</tt> method to
|
|
18
|
+
# check for those cases and manually deal with them as you see fit.
|
|
19
|
+
class InvalidPage < ArgumentError
|
|
20
|
+
def initialize(page, page_num)
|
|
21
|
+
super "#{page.inspect} given as value, which translates to '#{page_num}' as page number"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# = The key to pagination
|
|
26
|
+
# Arrays returned from paginating finds are, in fact, instances of this little
|
|
27
|
+
# class. You may think of WillPaginate::Collection as an ordinary array with
|
|
28
|
+
# some extra properties. Those properties are used by view helpers to generate
|
|
29
|
+
# correct page links.
|
|
30
|
+
#
|
|
31
|
+
# WillPaginate::Collection also assists in rolling out your own pagination
|
|
32
|
+
# solutions: see +create+.
|
|
33
|
+
#
|
|
34
|
+
# If you are writing a library that provides a collection which you would like
|
|
35
|
+
# to conform to this API, you don't have to copy these methods over; simply
|
|
36
|
+
# make your plugin/gem dependant on the "will_paginate" gem:
|
|
37
|
+
#
|
|
38
|
+
# gem 'will_paginate'
|
|
39
|
+
# require 'will_paginate/collection'
|
|
40
|
+
#
|
|
41
|
+
# # now use WillPaginate::Collection directly or subclass it
|
|
42
|
+
class Collection < Array
|
|
43
|
+
attr_reader :current_page, :per_page, :total_entries, :total_pages
|
|
44
|
+
|
|
45
|
+
# Arguments to the constructor are the current page number, per-page limit
|
|
46
|
+
# and the total number of entries. The last argument is optional because it
|
|
47
|
+
# is best to do lazy counting; in other words, count *conditionally* after
|
|
48
|
+
# populating the collection using the +replace+ method.
|
|
49
|
+
def initialize(page, per_page, total = nil)
|
|
50
|
+
@current_page = page.to_i
|
|
51
|
+
raise InvalidPage.new(page, @current_page) if @current_page < 1
|
|
52
|
+
@per_page = per_page.to_i
|
|
53
|
+
raise ArgumentError, "`per_page` setting cannot be less than 1 (#{@per_page} given)" if @per_page < 1
|
|
54
|
+
|
|
55
|
+
self.total_entries = total if total
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Just like +new+, but yields the object after instantiation and returns it
|
|
59
|
+
# afterwards. This is very useful for manual pagination:
|
|
60
|
+
#
|
|
61
|
+
# @entries = WillPaginate::Collection.create(1, 10) do |pager|
|
|
62
|
+
# result = Post.find(:all, :limit => pager.per_page, :offset => pager.offset)
|
|
63
|
+
# # inject the result array into the paginated collection:
|
|
64
|
+
# pager.replace(result)
|
|
65
|
+
#
|
|
66
|
+
# unless pager.total_entries
|
|
67
|
+
# # the pager didn't manage to guess the total count, do it manually
|
|
68
|
+
# pager.total_entries = Post.count
|
|
69
|
+
# end
|
|
70
|
+
# end
|
|
71
|
+
#
|
|
72
|
+
# The possibilities with this are endless. For another example, here is how
|
|
73
|
+
# WillPaginate used to define pagination for Array instances:
|
|
74
|
+
#
|
|
75
|
+
# Array.class_eval do
|
|
76
|
+
# def paginate(page = 1, per_page = 15)
|
|
77
|
+
# WillPaginate::Collection.create(page, per_page, size) do |pager|
|
|
78
|
+
# pager.replace self[pager.offset, pager.per_page].to_a
|
|
79
|
+
# end
|
|
80
|
+
# end
|
|
81
|
+
# end
|
|
82
|
+
#
|
|
83
|
+
# The Array#paginate API has since then changed, but this still serves as a
|
|
84
|
+
# fine example of WillPaginate::Collection usage.
|
|
85
|
+
def self.create(page, per_page, total = nil, &block)
|
|
86
|
+
pager = new(page, per_page, total)
|
|
87
|
+
yield pager
|
|
88
|
+
pager
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Helper method that is true when someone tries to fetch a page with a
|
|
92
|
+
# larger number than the last page. Can be used in combination with flashes
|
|
93
|
+
# and redirecting.
|
|
94
|
+
def out_of_bounds?
|
|
95
|
+
current_page > total_pages
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Current offset of the paginated collection. If we're on the first page,
|
|
99
|
+
# it is always 0. If we're on the 2nd page and there are 30 entries per page,
|
|
100
|
+
# the offset is 30. This property is useful if you want to render ordinals
|
|
101
|
+
# besides your records: simply start with offset + 1.
|
|
102
|
+
def offset
|
|
103
|
+
(current_page - 1) * per_page
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# current_page - 1 or nil if there is no previous page
|
|
107
|
+
def previous_page
|
|
108
|
+
current_page > 1 ? (current_page - 1) : nil
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# current_page + 1 or nil if there is no next page
|
|
112
|
+
def next_page
|
|
113
|
+
current_page < total_pages ? (current_page + 1) : nil
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def total_entries=(number)
|
|
117
|
+
@total_entries = number.to_i
|
|
118
|
+
@total_pages = (@total_entries / per_page.to_f).ceil
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# This is a magic wrapper for the original Array#replace method. It serves
|
|
122
|
+
# for populating the paginated collection after initialization.
|
|
123
|
+
#
|
|
124
|
+
# Why magic? Because it tries to guess the total number of entries judging
|
|
125
|
+
# by the size of given array. If it is shorter than +per_page+ limit, then we
|
|
126
|
+
# know we're on the last page. This trick is very useful for avoiding
|
|
127
|
+
# unnecessary hits to the database to do the counting after we fetched the
|
|
128
|
+
# data for the current page.
|
|
129
|
+
#
|
|
130
|
+
# However, after using +replace+ you should always test the value of
|
|
131
|
+
# +total_entries+ and set it to a proper value if it's +nil+. See the example
|
|
132
|
+
# in +create+.
|
|
133
|
+
def replace(array)
|
|
134
|
+
result = super
|
|
135
|
+
|
|
136
|
+
# The collection is shorter then page limit? Rejoice, because
|
|
137
|
+
# then we know that we are on the last page!
|
|
138
|
+
if total_entries.nil? and length < per_page and (current_page == 1 or length > 0)
|
|
139
|
+
self.total_entries = offset + length
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
result
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
require 'will_paginate/array'
|
|
3
|
+
|
|
4
|
+
unless Hash.instance_methods.include? 'except'
|
|
5
|
+
Hash.class_eval do
|
|
6
|
+
# Returns a new hash without the given keys.
|
|
7
|
+
def except(*keys)
|
|
8
|
+
rejected = Set.new(respond_to?(:convert_key) ? keys.map { |key| convert_key(key) } : keys)
|
|
9
|
+
reject { |key,| rejected.include?(key) }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Replaces the hash without only the given keys.
|
|
13
|
+
def except!(*keys)
|
|
14
|
+
replace(except(*keys))
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
unless Hash.instance_methods.include? 'slice'
|
|
20
|
+
Hash.class_eval do
|
|
21
|
+
# Returns a new hash with only the given keys.
|
|
22
|
+
def slice(*keys)
|
|
23
|
+
allowed = Set.new(respond_to?(:convert_key) ? keys.map { |key| convert_key(key) } : keys)
|
|
24
|
+
reject { |key,| !allowed.include?(key) }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Replaces the hash with only the given keys.
|
|
28
|
+
def slice!(*keys)
|
|
29
|
+
replace(slice(*keys))
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
require 'will_paginate/core_ext'
|
|
2
|
+
|
|
3
|
+
module WillPaginate
|
|
4
|
+
# A mixin for ActiveRecord::Base. Provides +per_page+ class method
|
|
5
|
+
# and hooks things up to provide paginating finders.
|
|
6
|
+
#
|
|
7
|
+
# Find out more in WillPaginate::Finder::ClassMethods
|
|
8
|
+
#
|
|
9
|
+
module Finder
|
|
10
|
+
def self.included(base)
|
|
11
|
+
base.extend ClassMethods
|
|
12
|
+
class << base
|
|
13
|
+
alias_method_chain :method_missing, :paginate
|
|
14
|
+
# alias_method_chain :find_every, :paginate
|
|
15
|
+
define_method(:per_page) { 30 } unless respond_to?(:per_page)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# = Paginating finders for ActiveRecord models
|
|
20
|
+
#
|
|
21
|
+
# WillPaginate adds +paginate+, +per_page+ and other methods to
|
|
22
|
+
# ActiveRecord::Base class methods and associations. It also hooks into
|
|
23
|
+
# +method_missing+ to intercept pagination calls to dynamic finders such as
|
|
24
|
+
# +paginate_by_user_id+ and translate them to ordinary finders
|
|
25
|
+
# (+find_all_by_user_id+ in this case).
|
|
26
|
+
#
|
|
27
|
+
# In short, paginating finders are equivalent to ActiveRecord finders; the
|
|
28
|
+
# only difference is that we start with "paginate" instead of "find" and
|
|
29
|
+
# that <tt>:page</tt> is required parameter:
|
|
30
|
+
#
|
|
31
|
+
# @posts = Post.paginate :all, :page => params[:page], :order => 'created_at DESC'
|
|
32
|
+
#
|
|
33
|
+
# In paginating finders, "all" is implicit. There is no sense in paginating
|
|
34
|
+
# a single record, right? So, you can drop the <tt>:all</tt> argument:
|
|
35
|
+
#
|
|
36
|
+
# Post.paginate(...) => Post.find :all
|
|
37
|
+
# Post.paginate_all_by_something => Post.find_all_by_something
|
|
38
|
+
# Post.paginate_by_something => Post.find_all_by_something
|
|
39
|
+
#
|
|
40
|
+
# == The importance of the <tt>:order</tt> parameter
|
|
41
|
+
#
|
|
42
|
+
# In ActiveRecord finders, <tt>:order</tt> parameter specifies columns for
|
|
43
|
+
# the <tt>ORDER BY</tt> clause in SQL. It is important to have it, since
|
|
44
|
+
# pagination only makes sense with ordered sets. Without the <tt>ORDER
|
|
45
|
+
# BY</tt> clause, databases aren't required to do consistent ordering when
|
|
46
|
+
# performing <tt>SELECT</tt> queries; this is especially true for
|
|
47
|
+
# PostgreSQL.
|
|
48
|
+
#
|
|
49
|
+
# Therefore, make sure you are doing ordering on a column that makes the
|
|
50
|
+
# most sense in the current context. Make that obvious to the user, also.
|
|
51
|
+
# For perfomance reasons you will also want to add an index to that column.
|
|
52
|
+
module ClassMethods
|
|
53
|
+
# This is the main paginating finder.
|
|
54
|
+
#
|
|
55
|
+
# == Special parameters for paginating finders
|
|
56
|
+
# * <tt>:page</tt> -- REQUIRED, but defaults to 1 if false or nil
|
|
57
|
+
# * <tt>:per_page</tt> -- defaults to <tt>CurrentModel.per_page</tt> (which is 30 if not overridden)
|
|
58
|
+
# * <tt>:total_entries</tt> -- use only if you manually count total entries
|
|
59
|
+
# * <tt>:count</tt> -- additional options that are passed on to +count+
|
|
60
|
+
# * <tt>:finder</tt> -- name of the ActiveRecord finder used (default: "find")
|
|
61
|
+
#
|
|
62
|
+
# All other options (+conditions+, +order+, ...) are forwarded to +find+
|
|
63
|
+
# and +count+ calls.
|
|
64
|
+
def paginate(*args, &block)
|
|
65
|
+
options = args.pop
|
|
66
|
+
page, per_page, total_entries = wp_parse_options(options)
|
|
67
|
+
finder = (options[:finder] || 'find').to_s
|
|
68
|
+
|
|
69
|
+
if finder == 'find'
|
|
70
|
+
# an array of IDs may have been given:
|
|
71
|
+
total_entries ||= (Array === args.first and args.first.size)
|
|
72
|
+
# :all is implicit
|
|
73
|
+
args.unshift(:all) if args.empty?
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
WillPaginate::Collection.create(page, per_page, total_entries) do |pager|
|
|
77
|
+
count_options = options.except :page, :per_page, :total_entries, :finder
|
|
78
|
+
find_options = count_options.except(:count).update(:offset => pager.offset, :limit => pager.per_page)
|
|
79
|
+
|
|
80
|
+
args << find_options
|
|
81
|
+
# @options_from_last_find = nil
|
|
82
|
+
pager.replace send(finder, *args, &block)
|
|
83
|
+
|
|
84
|
+
# magic counting for user convenience:
|
|
85
|
+
pager.total_entries = wp_count(count_options, args, finder) unless pager.total_entries
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Iterates through all records by loading one page at a time. This is useful
|
|
90
|
+
# for migrations or any other use case where you don't want to load all the
|
|
91
|
+
# records in memory at once.
|
|
92
|
+
#
|
|
93
|
+
# It uses +paginate+ internally; therefore it accepts all of its options.
|
|
94
|
+
# You can specify a starting page with <tt>:page</tt> (default is 1). Default
|
|
95
|
+
# <tt>:order</tt> is <tt>"id"</tt>, override if necessary.
|
|
96
|
+
#
|
|
97
|
+
# See http://weblog.jamisbuck.org/2007/4/6/faking-cursors-in-activerecord where
|
|
98
|
+
# Jamis Buck describes this and also uses a more efficient way for MySQL.
|
|
99
|
+
def paginated_each(options = {}, &block)
|
|
100
|
+
options = { :order => 'id', :page => 1 }.merge options
|
|
101
|
+
options[:page] = options[:page].to_i
|
|
102
|
+
options[:total_entries] = 0 # skip the individual count queries
|
|
103
|
+
total = 0
|
|
104
|
+
|
|
105
|
+
begin
|
|
106
|
+
collection = paginate(options)
|
|
107
|
+
total += collection.each(&block).size
|
|
108
|
+
options[:page] += 1
|
|
109
|
+
end until collection.size < collection.per_page
|
|
110
|
+
|
|
111
|
+
total
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Wraps +find_by_sql+ by simply adding LIMIT and OFFSET to your SQL string
|
|
115
|
+
# based on the params otherwise used by paginating finds: +page+ and
|
|
116
|
+
# +per_page+.
|
|
117
|
+
#
|
|
118
|
+
# Example:
|
|
119
|
+
#
|
|
120
|
+
# @developers = Developer.paginate_by_sql ['select * from developers where salary > ?', 80000],
|
|
121
|
+
# :page => params[:page], :per_page => 3
|
|
122
|
+
#
|
|
123
|
+
# A query for counting rows will automatically be generated if you don't
|
|
124
|
+
# supply <tt>:total_entries</tt>. If you experience problems with this
|
|
125
|
+
# generated SQL, you might want to perform the count manually in your
|
|
126
|
+
# application.
|
|
127
|
+
#
|
|
128
|
+
def paginate_by_sql(sql, options)
|
|
129
|
+
WillPaginate::Collection.create(*wp_parse_options(options)) do |pager|
|
|
130
|
+
query = sanitize_sql(sql)
|
|
131
|
+
original_query = query.dup
|
|
132
|
+
# add limit, offset
|
|
133
|
+
add_limit! query, :offset => pager.offset, :limit => pager.per_page
|
|
134
|
+
# perfom the find
|
|
135
|
+
pager.replace find_by_sql(query)
|
|
136
|
+
|
|
137
|
+
unless pager.total_entries
|
|
138
|
+
count_query = original_query.sub /\bORDER\s+BY\s+[\w`,\s]+$/mi, ''
|
|
139
|
+
count_query = "SELECT COUNT(*) FROM (#{count_query})"
|
|
140
|
+
|
|
141
|
+
unless ['oracle', 'oci'].include?(self.connection.adapter_name.downcase)
|
|
142
|
+
count_query << ' AS count_table'
|
|
143
|
+
end
|
|
144
|
+
# perform the count query
|
|
145
|
+
pager.total_entries = count_by_sql(count_query)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def respond_to?(method, include_priv = false) #:nodoc:
|
|
151
|
+
case method.to_sym
|
|
152
|
+
when :paginate, :paginate_by_sql
|
|
153
|
+
true
|
|
154
|
+
else
|
|
155
|
+
super(method.to_s.sub(/^paginate/, 'find'), include_priv)
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
protected
|
|
160
|
+
|
|
161
|
+
def method_missing_with_paginate(method, *args, &block) #:nodoc:
|
|
162
|
+
# did somebody tried to paginate? if not, let them be
|
|
163
|
+
unless method.to_s.index('paginate') == 0
|
|
164
|
+
return method_missing_without_paginate(method, *args, &block)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# paginate finders are really just find_* with limit and offset
|
|
168
|
+
finder = method.to_s.sub('paginate', 'find')
|
|
169
|
+
finder.sub!('find', 'find_all') if finder.index('find_by_') == 0
|
|
170
|
+
|
|
171
|
+
options = args.pop
|
|
172
|
+
raise ArgumentError, 'parameter hash expected' unless options.respond_to? :symbolize_keys
|
|
173
|
+
options = options.dup
|
|
174
|
+
options[:finder] = finder
|
|
175
|
+
args << options
|
|
176
|
+
|
|
177
|
+
paginate(*args, &block)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Does the not-so-trivial job of finding out the total number of entries
|
|
181
|
+
# in the database. It relies on the ActiveRecord +count+ method.
|
|
182
|
+
def wp_count(options, args, finder)
|
|
183
|
+
excludees = [:count, :order, :limit, :offset, :readonly]
|
|
184
|
+
unless options[:select] and options[:select] =~ /^\s*DISTINCT\b/i
|
|
185
|
+
excludees << :select # only exclude the select param if it doesn't begin with DISTINCT
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# count expects (almost) the same options as find
|
|
189
|
+
count_options = options.except *excludees
|
|
190
|
+
|
|
191
|
+
# merge the hash found in :count
|
|
192
|
+
# this allows you to specify :select, :order, or anything else just for the count query
|
|
193
|
+
count_options.update options[:count] if options[:count]
|
|
194
|
+
|
|
195
|
+
# we may be in a model or an association proxy
|
|
196
|
+
klass = (@owner and @reflection) ? @reflection.klass : self
|
|
197
|
+
|
|
198
|
+
# forget about includes if they are irrelevant (Rails 2.1)
|
|
199
|
+
if count_options[:include] and
|
|
200
|
+
klass.private_methods.include?('references_eager_loaded_tables?') and
|
|
201
|
+
!klass.send(:references_eager_loaded_tables?, count_options)
|
|
202
|
+
count_options.delete :include
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# we may have to scope ...
|
|
206
|
+
counter = Proc.new { count(count_options) }
|
|
207
|
+
|
|
208
|
+
count = if finder.index('find_') == 0 and klass.respond_to?(scoper = finder.sub('find', 'with'))
|
|
209
|
+
# scope_out adds a 'with_finder' method which acts like with_scope, if it's present
|
|
210
|
+
# then execute the count with the scoping provided by the with_finder
|
|
211
|
+
send(scoper, &counter)
|
|
212
|
+
elsif match = /^find_(all_by|by)_([_a-zA-Z]\w*)$/.match(finder)
|
|
213
|
+
# extract conditions from calls like "paginate_by_foo_and_bar"
|
|
214
|
+
attribute_names = extract_attribute_names_from_match(match)
|
|
215
|
+
conditions = construct_attributes_from_arguments(attribute_names, args)
|
|
216
|
+
with_scope(:find => { :conditions => conditions }, &counter)
|
|
217
|
+
else
|
|
218
|
+
counter.call
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
count.respond_to?(:length) ? count.length : count
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def wp_parse_options(options) #:nodoc:
|
|
225
|
+
raise ArgumentError, 'parameter hash expected' unless options.respond_to? :symbolize_keys
|
|
226
|
+
options = options.symbolize_keys
|
|
227
|
+
raise ArgumentError, ':page parameter required' unless options.key? :page
|
|
228
|
+
|
|
229
|
+
if options[:count] and options[:total_entries]
|
|
230
|
+
raise ArgumentError, ':count and :total_entries are mutually exclusive'
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
page = options[:page] || 1
|
|
234
|
+
per_page = options[:per_page] || self.per_page
|
|
235
|
+
total = options[:total_entries]
|
|
236
|
+
[page, per_page, total]
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
private
|
|
240
|
+
|
|
241
|
+
# def find_every_with_paginate(options)
|
|
242
|
+
# @options_from_last_find = options
|
|
243
|
+
# find_every_without_paginate(options)
|
|
244
|
+
# end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
## stolen from: http://dev.rubyonrails.org/browser/trunk/activerecord/lib/active_record/named_scope.rb?rev=9084
|
|
2
|
+
|
|
3
|
+
module WillPaginate
|
|
4
|
+
# This is a feature backported from Rails 2.1 because of its usefullness not only with will_paginate,
|
|
5
|
+
# but in other aspects when managing complex conditions that you want to be reusable.
|
|
6
|
+
module NamedScope
|
|
7
|
+
# All subclasses of ActiveRecord::Base have two named_scopes:
|
|
8
|
+
# * <tt>all</tt>, which is similar to a <tt>find(:all)</tt> query, and
|
|
9
|
+
# * <tt>scoped</tt>, which allows for the creation of anonymous scopes, on the fly:
|
|
10
|
+
#
|
|
11
|
+
# Shirt.scoped(:conditions => {:color => 'red'}).scoped(:include => :washing_instructions)
|
|
12
|
+
#
|
|
13
|
+
# These anonymous scopes tend to be useful when procedurally generating complex queries, where passing
|
|
14
|
+
# intermediate values (scopes) around as first-class objects is convenient.
|
|
15
|
+
def self.included(base)
|
|
16
|
+
base.class_eval do
|
|
17
|
+
extend ClassMethods
|
|
18
|
+
named_scope :all
|
|
19
|
+
named_scope :scoped, lambda { |scope| scope }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module ClassMethods
|
|
24
|
+
def scopes #:nodoc:
|
|
25
|
+
read_inheritable_attribute(:scopes) || write_inheritable_attribute(:scopes, {})
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Adds a class method for retrieving and querying objects. A scope represents a narrowing of a database query,
|
|
29
|
+
# such as <tt>:conditions => {:color => :red}, :select => 'shirts.*', :include => :washing_instructions</tt>.
|
|
30
|
+
#
|
|
31
|
+
# class Shirt < ActiveRecord::Base
|
|
32
|
+
# named_scope :red, :conditions => {:color => 'red'}
|
|
33
|
+
# named_scope :dry_clean_only, :joins => :washing_instructions, :conditions => ['washing_instructions.dry_clean_only = ?', true]
|
|
34
|
+
# end
|
|
35
|
+
#
|
|
36
|
+
# The above calls to <tt>named_scope</tt> define class methods <tt>Shirt.red</tt> and <tt>Shirt.dry_clean_only</tt>. <tt>Shirt.red</tt>,
|
|
37
|
+
# in effect, represents the query <tt>Shirt.find(:all, :conditions => {:color => 'red'})</tt>.
|
|
38
|
+
#
|
|
39
|
+
# Unlike Shirt.find(...), however, the object returned by <tt>Shirt.red</tt> is not an Array; it resembles the association object
|
|
40
|
+
# constructed by a <tt>has_many</tt> declaration. For instance, you can invoke <tt>Shirt.red.find(:first)</tt>, <tt>Shirt.red.count</tt>,
|
|
41
|
+
# <tt>Shirt.red.find(:all, :conditions => {:size => 'small'})</tt>. Also, just
|
|
42
|
+
# as with the association objects, name scopes acts like an Array, implementing Enumerable; <tt>Shirt.red.each(&block)</tt>,
|
|
43
|
+
# <tt>Shirt.red.first</tt>, and <tt>Shirt.red.inject(memo, &block)</tt> all behave as if Shirt.red really were an Array.
|
|
44
|
+
#
|
|
45
|
+
# These named scopes are composable. For instance, <tt>Shirt.red.dry_clean_only</tt> will produce all shirts that are both red and dry clean only.
|
|
46
|
+
# Nested finds and calculations also work with these compositions: <tt>Shirt.red.dry_clean_only.count</tt> returns the number of garments
|
|
47
|
+
# for which these criteria obtain. Similarly with <tt>Shirt.red.dry_clean_only.average(:thread_count)</tt>.
|
|
48
|
+
#
|
|
49
|
+
# All scopes are available as class methods on the ActiveRecord descendent upon which the scopes were defined. But they are also available to
|
|
50
|
+
# <tt>has_many</tt> associations. If,
|
|
51
|
+
#
|
|
52
|
+
# class Person < ActiveRecord::Base
|
|
53
|
+
# has_many :shirts
|
|
54
|
+
# end
|
|
55
|
+
#
|
|
56
|
+
# then <tt>elton.shirts.red.dry_clean_only</tt> will return all of Elton's red, dry clean
|
|
57
|
+
# only shirts.
|
|
58
|
+
#
|
|
59
|
+
# Named scopes can also be procedural.
|
|
60
|
+
#
|
|
61
|
+
# class Shirt < ActiveRecord::Base
|
|
62
|
+
# named_scope :colored, lambda { |color|
|
|
63
|
+
# { :conditions => { :color => color } }
|
|
64
|
+
# }
|
|
65
|
+
# end
|
|
66
|
+
#
|
|
67
|
+
# In this example, <tt>Shirt.colored('puce')</tt> finds all puce shirts.
|
|
68
|
+
#
|
|
69
|
+
# Named scopes can also have extensions, just as with <tt>has_many</tt> declarations:
|
|
70
|
+
#
|
|
71
|
+
# class Shirt < ActiveRecord::Base
|
|
72
|
+
# named_scope :red, :conditions => {:color => 'red'} do
|
|
73
|
+
# def dom_id
|
|
74
|
+
# 'red_shirts'
|
|
75
|
+
# end
|
|
76
|
+
# end
|
|
77
|
+
# end
|
|
78
|
+
#
|
|
79
|
+
def named_scope(name, options = {}, &block)
|
|
80
|
+
scopes[name] = lambda do |parent_scope, *args|
|
|
81
|
+
Scope.new(parent_scope, case options
|
|
82
|
+
when Hash
|
|
83
|
+
options
|
|
84
|
+
when Proc
|
|
85
|
+
options.call(*args)
|
|
86
|
+
end, &block)
|
|
87
|
+
end
|
|
88
|
+
(class << self; self end).instance_eval do
|
|
89
|
+
define_method name do |*args|
|
|
90
|
+
scopes[name].call(self, *args)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
class Scope #:nodoc:
|
|
97
|
+
attr_reader :proxy_scope, :proxy_options
|
|
98
|
+
[].methods.each { |m| delegate m, :to => :proxy_found unless m =~ /(^__|^nil\?|^send|class|extend|find|count|sum|average|maximum|minimum|paginate)/ }
|
|
99
|
+
delegate :scopes, :with_scope, :to => :proxy_scope
|
|
100
|
+
|
|
101
|
+
def initialize(proxy_scope, options, &block)
|
|
102
|
+
[options[:extend]].flatten.each { |extension| extend extension } if options[:extend]
|
|
103
|
+
extend Module.new(&block) if block_given?
|
|
104
|
+
@proxy_scope, @proxy_options = proxy_scope, options.except(:extend)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def reload
|
|
108
|
+
load_found; self
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
protected
|
|
112
|
+
def proxy_found
|
|
113
|
+
@found || load_found
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
private
|
|
117
|
+
def method_missing(method, *args, &block)
|
|
118
|
+
if scopes.include?(method)
|
|
119
|
+
scopes[method].call(self, *args)
|
|
120
|
+
else
|
|
121
|
+
with_scope :find => proxy_options do
|
|
122
|
+
proxy_scope.send(method, *args, &block)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def load_found
|
|
128
|
+
@found = find(:all)
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|