community_engine 2.0.0.beta1
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 +15 -0
- data/.gitmodules +0 -0
- data/.travis.yml +9 -0
- data/CHANGELOG +118 -0
- data/Gemfile +3 -0
- data/LICENSE +30 -0
- data/README.markdown +188 -0
- data/Rakefile +54 -0
- data/UPGRADING.markdown +93 -0
- data/about.yml +7 -0
- data/app/assets/images/auth/facebook_32.png +0 -0
- data/app/assets/images/auth/facebook_64.png +0 -0
- data/app/assets/images/auth/google_32.png +0 -0
- data/app/assets/images/auth/google_64.png +0 -0
- data/app/assets/images/auth/linked_in_32.png +0 -0
- data/app/assets/images/auth/linked_in_64.png +0 -0
- data/app/assets/images/auth/open_id_32.png +0 -0
- data/app/assets/images/auth/remove.png +0 -0
- data/app/assets/images/auth/twitter_32.png +0 -0
- data/app/assets/images/auth/twitter_64.png +0 -0
- data/app/assets/images/bg_h6btn.gif +0 -0
- data/app/assets/images/bg_navbar.gif +0 -0
- data/app/assets/images/clearbits/bg_rounded.gif +0 -0
- data/app/assets/images/clearbits/comment.gif +0 -0
- data/app/assets/images/clearbits/lock.gif +0 -0
- data/app/assets/images/clearbits/smile.gif +0 -0
- data/app/assets/images/close.gif +0 -0
- data/app/assets/images/cropper/marqueeHoriz.gif +0 -0
- data/app/assets/images/cropper/marqueeVert.gif +0 -0
- data/app/assets/images/feed.png +0 -0
- data/app/assets/images/icon_missing_medium.gif +0 -0
- data/app/assets/images/icon_missing_thumb.gif +0 -0
- data/app/assets/images/icons/31.png +0 -0
- data/app/assets/images/icons/52.png +0 -0
- data/app/assets/images/icons/accept.png +0 -0
- data/app/assets/images/icons/activity_default.png +0 -0
- data/app/assets/images/icons/add.png +0 -0
- data/app/assets/images/icons/book.png +0 -0
- data/app/assets/images/icons/bullet_arrow_down.png +0 -0
- data/app/assets/images/icons/bullet_arrow_down_50.png +0 -0
- data/app/assets/images/icons/clipping.png +0 -0
- data/app/assets/images/icons/comment.png +0 -0
- data/app/assets/images/icons/comments.png +0 -0
- data/app/assets/images/icons/date.png +0 -0
- data/app/assets/images/icons/delete.png +0 -0
- data/app/assets/images/icons/email.png +0 -0
- data/app/assets/images/icons/email_edit.png +0 -0
- data/app/assets/images/icons/email_go.png +0 -0
- data/app/assets/images/icons/email_open.png +0 -0
- data/app/assets/images/icons/group_go.png +0 -0
- data/app/assets/images/icons/heart.png +0 -0
- data/app/assets/images/icons/heart_add.png +0 -0
- data/app/assets/images/icons/heart_off.png +0 -0
- data/app/assets/images/icons/ical.gif +0 -0
- data/app/assets/images/icons/page_white.png +0 -0
- data/app/assets/images/icons/page_white_magnify.png +0 -0
- data/app/assets/images/icons/picture.png +0 -0
- data/app/assets/images/icons/poll.png +0 -0
- data/app/assets/images/icons/post.png +0 -0
- data/app/assets/images/icons/printer.png +0 -0
- data/app/assets/images/icons/rss.png +0 -0
- data/app/assets/images/icons/slides.png +0 -0
- data/app/assets/images/icons/tag_blue.png +0 -0
- data/app/assets/images/icons/user.png +0 -0
- data/app/assets/images/icons/user_add.png +0 -0
- data/app/assets/images/icons/user_edit.png +0 -0
- data/app/assets/images/icons/user_go.png +0 -0
- data/app/assets/images/icons/vote.png +0 -0
- data/app/assets/images/icons/world.png +0 -0
- data/app/assets/images/icons/wrench.png +0 -0
- data/app/assets/images/logo.gif +0 -0
- data/app/assets/images/reply_background.png +0 -0
- data/app/assets/images/search.gif +0 -0
- data/app/assets/images/spinner.gif +0 -0
- data/app/assets/images/spinner_black.gif +0 -0
- data/app/assets/images/spinner_bounce.gif +0 -0
- data/app/assets/images/swf/choose.png +0 -0
- data/app/assets/images/swf/line_grapher.swf +0 -0
- data/app/assets/images/swf/swfupload.swf +0 -0
- data/app/assets/images/thumb.gif +0 -0
- data/app/assets/javascripts/builder.js +136 -0
- data/app/assets/javascripts/calendarview.js +839 -0
- data/app/assets/javascripts/community_engine.js +20 -0
- data/app/assets/javascripts/cropper.css +182 -0
- data/app/assets/javascripts/cropper.js +566 -0
- data/app/assets/javascripts/forum.js +73 -0
- data/app/assets/javascripts/lightbox.js +151 -0
- data/app/assets/javascripts/prototip-min.js +27 -0
- data/app/assets/javascripts/rails.js +202 -0
- data/app/assets/javascripts/tinymce/plugins/curblyadvimage/css/advimage.css +84 -0
- data/app/assets/javascripts/tinymce/plugins/curblyadvimage/editor_plugin.js +52 -0
- data/app/assets/javascripts/tinymce/plugins/curblyadvimage/editor_plugin_src.js +45 -0
- data/app/assets/javascripts/tinymce/plugins/curblyadvimage/image.htm +180 -0
- data/app/assets/javascripts/tinymce/plugins/curblyadvimage/img/sample.gif +0 -0
- data/app/assets/javascripts/tinymce/plugins/curblyadvimage/js/functions.js +508 -0
- data/app/assets/javascripts/tinymce/plugins/curblyadvimage/langs/en.js +3 -0
- data/app/assets/javascripts/tinymce/plugins/curblyadvimage/langs/en_dlg.js +43 -0
- data/app/assets/stylesheets/community_engine.css +6 -0
- data/app/assets/stylesheets/forum.css +605 -0
- data/app/assets/stylesheets/lightbox.css +38 -0
- data/app/assets/stylesheets/prototip.css +73 -0
- data/app/assets/stylesheets/reset-fonts-grids.css +8 -0
- data/app/assets/stylesheets/screen.css +977 -0
- data/app/controllers/activities_controller.rb +38 -0
- data/app/controllers/admin_controller.rb +80 -0
- data/app/controllers/ads_controller.rb +85 -0
- data/app/controllers/albums_controller.rb +106 -0
- data/app/controllers/authorizations_controller.rb +41 -0
- data/app/controllers/base_controller.rb +151 -0
- data/app/controllers/categories_controller.rb +118 -0
- data/app/controllers/clippings_controller.rb +192 -0
- data/app/controllers/comment_sweeper.rb +35 -0
- data/app/controllers/comments_controller.rb +179 -0
- data/app/controllers/event_sweeper.rb +24 -0
- data/app/controllers/events_controller.rb +173 -0
- data/app/controllers/favorite_sweeper.rb +29 -0
- data/app/controllers/favorites_controller.rb +36 -0
- data/app/controllers/forums_controller.rb +71 -0
- data/app/controllers/friendships_controller.rb +126 -0
- data/app/controllers/homepage_features_controller.rb +68 -0
- data/app/controllers/invitations_controller.rb +46 -0
- data/app/controllers/messages_controller.rb +95 -0
- data/app/controllers/metro_areas_controller.rb +68 -0
- data/app/controllers/moderators_controller.rb +26 -0
- data/app/controllers/monitorships_controller.rb +20 -0
- data/app/controllers/page_sweeper.rb +33 -0
- data/app/controllers/pages_controller.rb +70 -0
- data/app/controllers/password_resets_controller.rb +52 -0
- data/app/controllers/photo_manager_controller.rb +11 -0
- data/app/controllers/photos_controller.rb +189 -0
- data/app/controllers/post_sweeper.rb +36 -0
- data/app/controllers/posts_controller.rb +252 -0
- data/app/controllers/rsvps_controller.rb +77 -0
- data/app/controllers/sb_posts_controller.rb +149 -0
- data/app/controllers/sessions_controller.rb +34 -0
- data/app/controllers/sitemap_controller.rb +21 -0
- data/app/controllers/statistics_controller.rb +34 -0
- data/app/controllers/taggable_sweeper.rb +38 -0
- data/app/controllers/tags_controller.rb +104 -0
- data/app/controllers/theme_controller.rb +60 -0
- data/app/controllers/topics_controller.rb +122 -0
- data/app/controllers/users_controller.rb +426 -0
- data/app/controllers/vote_sweeper.rb +16 -0
- data/app/controllers/votes_controller.rb +24 -0
- data/app/helpers/base_helper.rb +290 -0
- data/app/helpers/forums_helper.rb +31 -0
- data/app/helpers/friendships_helper.rb +16 -0
- data/app/helpers/monitorships_helper.rb +2 -0
- data/app/helpers/posts_helper.rb +17 -0
- data/app/helpers/sitemap_helper.rb +7 -0
- data/app/helpers/users_helper.rb +6 -0
- data/app/models/ad.rb +43 -0
- data/app/models/album.rb +12 -0
- data/app/models/asset.rb +3 -0
- data/app/models/authorization.rb +60 -0
- data/app/models/category.rb +20 -0
- data/app/models/choice.rb +13 -0
- data/app/models/clipping.rb +78 -0
- data/app/models/clipping_image.rb +9 -0
- data/app/models/comment.rb +122 -0
- data/app/models/country.rb +24 -0
- data/app/models/event.rb +61 -0
- data/app/models/facebook_profile.rb +32 -0
- data/app/models/facebook_publisher.rb +45 -0
- data/app/models/favorite.rb +47 -0
- data/app/models/forum.rb +22 -0
- data/app/models/friendship.rb +64 -0
- data/app/models/friendship_status.rb +3 -0
- data/app/models/homepage_feature.rb +15 -0
- data/app/models/invitation.rb +36 -0
- data/app/models/message.rb +84 -0
- data/app/models/message_thread.rb +33 -0
- data/app/models/metro_area.rb +16 -0
- data/app/models/moderatorship.rb +8 -0
- data/app/models/monitorship.rb +6 -0
- data/app/models/page.rb +8 -0
- data/app/models/photo.rb +83 -0
- data/app/models/poll.rb +39 -0
- data/app/models/post.rb +201 -0
- data/app/models/role.rb +5 -0
- data/app/models/rsvp.rb +24 -0
- data/app/models/sb_post.rb +67 -0
- data/app/models/state.rb +4 -0
- data/app/models/topic.rb +72 -0
- data/app/models/twitter_profile.rb +20 -0
- data/app/models/user.rb +483 -0
- data/app/models/user_notifier.rb +140 -0
- data/app/models/user_session.rb +14 -0
- data/app/models/vote.rb +19 -0
- data/app/views/activities/_activity.html.haml +56 -0
- data/app/views/activities/_icon.html.haml +14 -0
- data/app/views/activities/_unhandled_item.html.haml +1 -0
- data/app/views/activities/destroy.js.rjs +1 -0
- data/app/views/activities/index.html.haml +16 -0
- data/app/views/activities/network.html.haml +14 -0
- data/app/views/admin/comments.html.haml +71 -0
- data/app/views/admin/events.html.haml +33 -0
- data/app/views/admin/messages.html.haml +4 -0
- data/app/views/admin/users.html.haml +69 -0
- data/app/views/ads/edit.html.haml +46 -0
- data/app/views/ads/index.html.haml +43 -0
- data/app/views/ads/new.html.haml +44 -0
- data/app/views/ads/show.html.haml +36 -0
- data/app/views/albums/_form.html.haml +14 -0
- data/app/views/albums/edit.html.haml +16 -0
- data/app/views/albums/new.html.haml +15 -0
- data/app/views/albums/show.html.haml +32 -0
- data/app/views/base/_homepage_banner_message.html.haml +19 -0
- data/app/views/base/advertise.html.haml +8 -0
- data/app/views/base/plaxo.html.haml +5 -0
- data/app/views/base/site_index.html.haml +35 -0
- data/app/views/categories/_tips.html.haml +11 -0
- data/app/views/categories/edit.html.haml +34 -0
- data/app/views/categories/index.html.haml +30 -0
- data/app/views/categories/new.html.haml +9 -0
- data/app/views/categories/show.html.haml +45 -0
- data/app/views/clippings/_clipping.html.haml +18 -0
- data/app/views/clippings/_images.html.haml +3 -0
- data/app/views/clippings/_meta.html.haml +26 -0
- data/app/views/clippings/edit.html.haml +26 -0
- data/app/views/clippings/index.html.haml +35 -0
- data/app/views/clippings/load_images_from_uri.js.rjs +1 -0
- data/app/views/clippings/new.html.haml +29 -0
- data/app/views/clippings/new_clipping.html.haml +91 -0
- data/app/views/clippings/show.html.haml +56 -0
- data/app/views/clippings/site_index.html.haml +34 -0
- data/app/views/comments/_comment.html.haml +42 -0
- data/app/views/comments/_comment_form.html.haml +50 -0
- data/app/views/comments/_edit_form.html.haml +29 -0
- data/app/views/comments/create.js.rjs +20 -0
- data/app/views/comments/edit.js.rjs +7 -0
- data/app/views/comments/index.html.haml +23 -0
- data/app/views/comments/update.js.rjs +9 -0
- data/app/views/events/_event.html.haml +32 -0
- data/app/views/events/_subscribe.html.haml +7 -0
- data/app/views/events/edit.html.haml +34 -0
- data/app/views/events/index.html.haml +22 -0
- data/app/views/events/new.html.haml +32 -0
- data/app/views/events/show.html.haml +29 -0
- data/app/views/facebook/_fb_require.html.haml +11 -0
- data/app/views/favorites/_favorite.html.haml +5 -0
- data/app/views/favorites/create.js.rjs +17 -0
- data/app/views/favorites/destroy.js.rjs +14 -0
- data/app/views/favorites/index.html.haml +10 -0
- data/app/views/favorites/show.html.haml +13 -0
- data/app/views/forums/_form.html.haml +21 -0
- data/app/views/forums/edit.html.haml +11 -0
- data/app/views/forums/index.html.haml +70 -0
- data/app/views/forums/new.html.haml +9 -0
- data/app/views/forums/show.html.haml +85 -0
- data/app/views/friendships/_friendship.html.haml +16 -0
- data/app/views/friendships/_friendships.html.erb +14 -0
- data/app/views/friendships/accepted.html.haml +13 -0
- data/app/views/friendships/denied.html.haml +8 -0
- data/app/views/friendships/index.html.erb +3 -0
- data/app/views/friendships/index.xml.builder +29 -0
- data/app/views/friendships/pending.html.haml +7 -0
- data/app/views/friendships/show.html.haml +12 -0
- data/app/views/homepage_features/edit.html.haml +31 -0
- data/app/views/homepage_features/index.html.haml +30 -0
- data/app/views/homepage_features/new.html.haml +30 -0
- data/app/views/homepage_features/show.html.haml +29 -0
- data/app/views/invitations/index.html.erb +16 -0
- data/app/views/invitations/new.html.haml +33 -0
- data/app/views/layouts/application.html.haml +59 -0
- data/app/views/messages/_form.html.haml +24 -0
- data/app/views/messages/_inbox.html.haml +41 -0
- data/app/views/messages/_sent.html.haml +34 -0
- data/app/views/messages/_sidebar_nav.html.haml +9 -0
- data/app/views/messages/index.html.haml +8 -0
- data/app/views/messages/new.html.haml +10 -0
- data/app/views/messages/show.html.haml +40 -0
- data/app/views/metro_areas/edit.html.haml +16 -0
- data/app/views/metro_areas/index.html.haml +28 -0
- data/app/views/metro_areas/new.html.haml +16 -0
- data/app/views/metro_areas/show.html.haml +22 -0
- data/app/views/moderators/_toggle.html.erb +14 -0
- data/app/views/moderators/create.js.rjs +5 -0
- data/app/views/moderators/destroy.js.rjs +1 -0
- data/app/views/monitorships/create.js.rjs +4 -0
- data/app/views/monitorships/destroy.js.rjs +4 -0
- data/app/views/pages/_form.html.haml +25 -0
- data/app/views/pages/edit.html.haml +16 -0
- data/app/views/pages/edit.html.haml~ +16 -0
- data/app/views/pages/index.html.haml +34 -0
- data/app/views/pages/index.html.haml~ +28 -0
- data/app/views/pages/new.html.haml +14 -0
- data/app/views/pages/show.html.haml +8 -0
- data/app/views/pages/show.html.haml~ +6 -0
- data/app/views/password_resets/edit.html.haml +16 -0
- data/app/views/password_resets/new.html.haml +13 -0
- data/app/views/photo_manager/index.html.haml +49 -0
- data/app/views/photos/_manage_photos.html.haml +14 -0
- data/app/views/photos/_show_image_list.html.haml +24 -0
- data/app/views/photos/edit.html.haml +39 -0
- data/app/views/photos/index.html.haml +28 -0
- data/app/views/photos/index.xml.builder +9 -0
- data/app/views/photos/manage_photos.js.rjs +5 -0
- data/app/views/photos/new.html.haml +51 -0
- data/app/views/photos/recent.html.haml +8 -0
- data/app/views/photos/show.html.haml +53 -0
- data/app/views/polls/_edit.html.haml +15 -0
- data/app/views/polls/_excerpt.html.haml +4 -0
- data/app/views/polls/_new.html.haml +10 -0
- data/app/views/polls/_poll_ui.html.haml +37 -0
- data/app/views/polls/_polls_sidebar.html.haml +8 -0
- data/app/views/posts/_author_profile.html.haml +21 -0
- data/app/views/posts/_favorited_post.html.haml +10 -0
- data/app/views/posts/_post.html.haml +29 -0
- data/app/views/posts/_send_to_friend.html.erb +29 -0
- data/app/views/posts/_sidebar_post.html.haml +1 -0
- data/app/views/posts/edit.html.haml +48 -0
- data/app/views/posts/featured.html.haml +19 -0
- data/app/views/posts/index.html.haml +23 -0
- data/app/views/posts/manage.html.haml +66 -0
- data/app/views/posts/new.html.haml +67 -0
- data/app/views/posts/popular.html.haml +35 -0
- data/app/views/posts/preview.html.haml +27 -0
- data/app/views/posts/recent.html.haml +29 -0
- data/app/views/posts/show.html.haml +85 -0
- data/app/views/rsvps/edit.html.haml +9 -0
- data/app/views/rsvps/new.html.haml +9 -0
- data/app/views/sb_posts/_dummy_forum_post.html.erb +13 -0
- data/app/views/sb_posts/_edit.html.erb +31 -0
- data/app/views/sb_posts/_post.xml.builder +10 -0
- data/app/views/sb_posts/_reply_form.html.haml +37 -0
- data/app/views/sb_posts/_sb_post.html.haml +34 -0
- data/app/views/sb_posts/create.js.rjs +16 -0
- data/app/views/sb_posts/edit.html.erb +13 -0
- data/app/views/sb_posts/edit.js.rjs +6 -0
- data/app/views/sb_posts/index.html.haml +55 -0
- data/app/views/sb_posts/index.xml.builder +20 -0
- data/app/views/sb_posts/monitored.html.erb +55 -0
- data/app/views/sb_posts/monitored.xml.builder +15 -0
- data/app/views/sb_posts/update.js.rjs +5 -0
- data/app/views/sessions/new.html.haml +27 -0
- data/app/views/shared/_admin_nav.html.haml +19 -0
- data/app/views/shared/_bio_help.html.haml +4 -0
- data/app/views/shared/_box.html.haml +3 -0
- data/app/views/shared/_contact.html.haml +5 -0
- data/app/views/shared/_explore.html.haml +9 -0
- data/app/views/shared/_footer_content.html.haml +13 -0
- data/app/views/shared/_header.html.haml +42 -0
- data/app/views/shared/_location_chooser.html.haml +21 -0
- data/app/views/shared/_login_sidebar.html.haml +14 -0
- data/app/views/shared/_messages.html.haml +8 -0
- data/app/views/shared/_scripts_and_styles.html.haml +12 -0
- data/app/views/shared/_user_menu.html.haml +21 -0
- data/app/views/sitemap/index.html.haml +21 -0
- data/app/views/sitemap/index.xml.builder +28 -0
- data/app/views/statistics/activities.xml.builder +33 -0
- data/app/views/statistics/index.html.haml +56 -0
- data/app/views/tags/edit.html.haml +19 -0
- data/app/views/tags/index.html.haml +25 -0
- data/app/views/tags/manage.html.haml +37 -0
- data/app/views/tags/show.html.haml +65 -0
- data/app/views/topics/_form.html.haml +28 -0
- data/app/views/topics/_recent_topics_sidebar.haml +22 -0
- data/app/views/topics/edit.html.haml +10 -0
- data/app/views/topics/new.html.haml +21 -0
- data/app/views/topics/show.html.haml +107 -0
- data/app/views/topics/show.xml.builder +15 -0
- data/app/views/user_notifier/activation.text.erb +11 -0
- data/app/views/user_notifier/comment_notice.text.erb +8 -0
- data/app/views/user_notifier/follow_up_comment_notice.text.erb +15 -0
- data/app/views/user_notifier/follow_up_comment_notice_anonymous.text.erb +18 -0
- data/app/views/user_notifier/forgot_username.text.erb +8 -0
- data/app/views/user_notifier/friendship_accepted.text.erb +8 -0
- data/app/views/user_notifier/friendship_request.text.erb +8 -0
- data/app/views/user_notifier/message_notification.text.erb +14 -0
- data/app/views/user_notifier/new_forum_post_notice.text.erb +14 -0
- data/app/views/user_notifier/password_reset_instructions.text.erb +10 -0
- data/app/views/user_notifier/post_recommendation.text.erb +32 -0
- data/app/views/user_notifier/signup_invitation.text.erb +14 -0
- data/app/views/user_notifier/signup_notification.text.erb +16 -0
- data/app/views/users/_dashboard_nav.html.haml +40 -0
- data/app/views/users/_omniauth_connect.html.haml +21 -0
- data/app/views/users/_profile_completeness.html.haml +21 -0
- data/app/views/users/_profile_user_info_sidebar.html.haml +50 -0
- data/app/views/users/_search_options.html.haml +10 -0
- data/app/views/users/_sidebar_user.html.haml +8 -0
- data/app/views/users/_user.html.haml +31 -0
- data/app/views/users/crop_profile_photo.html.haml +40 -0
- data/app/views/users/dashboard.html.haml +44 -0
- data/app/views/users/edit.html.haml +75 -0
- data/app/views/users/edit_account.html.haml +64 -0
- data/app/views/users/forgot_username.html.haml +13 -0
- data/app/views/users/index.html.haml +18 -0
- data/app/views/users/invite.html.haml +31 -0
- data/app/views/users/new.html.haml +54 -0
- data/app/views/users/resend_activation.html.haml +13 -0
- data/app/views/users/show.html.haml +103 -0
- data/app/views/users/signup_completed.html.haml +8 -0
- data/app/views/users/statistics.html.haml +28 -0
- data/app/views/users/upload_profile_photo.html.haml +15 -0
- data/app/views/users/welcome_about.html.haml +66 -0
- data/app/views/users/welcome_invite.html.haml +33 -0
- data/app/views/users/welcome_photo.html.haml +29 -0
- data/app/views/votes/create.js.rjs +6 -0
- data/community_engine.gemspec +55 -0
- data/config/application_config.rb +162 -0
- data/config/initializers/cropper.rb +19 -0
- data/config/initializers/mce_options.rb +40 -0
- data/config/initializers/recaptcha_constants.rb +6 -0
- data/config/initializers/white_list.rb +7 -0
- data/config/locales/de-DE.yml +1271 -0
- data/config/locales/en.yml +1658 -0
- data/config/locales/es-AR.yml +758 -0
- data/config/locales/es-ES.yml +340 -0
- data/config/locales/es-MX.yml +672 -0
- data/config/locales/fr-FR.yml +1509 -0
- data/config/locales/ja-JP.yml +1321 -0
- data/config/locales/ru-RU.yml +97 -0
- data/config/locales/sr-CP.yml +89 -0
- data/config/locales/sv-SE.yml +1320 -0
- data/config/routes.rb +242 -0
- data/db/migrate/001_create_users.rb +26 -0
- data/db/migrate/002_add_activation_code_to_user.rb +11 -0
- data/db/migrate/003_create_photos.rb +22 -0
- data/db/migrate/004_add_tag_support.rb +21 -0
- data/db/migrate/005_create_friendships.rb +14 -0
- data/db/migrate/006_add_comments_tables.rb +18 -0
- data/db/migrate/007_create_friendship_statuses.rb +13 -0
- data/db/migrate/008_add_friendship_statuses.rb +14 -0
- data/db/migrate/009_create_clippings.rb +16 -0
- data/db/migrate/010_create_invitations.rb +14 -0
- data/db/migrate/011_create_homepage_features.rb +22 -0
- data/db/migrate/012_create_posts.rb +19 -0
- data/db/migrate/013_create_states.rb +13 -0
- data/db/migrate/014_add_states.rb +11 -0
- data/db/migrate/015_create_metro_areas.rb +15 -0
- data/db/migrate/016_add_metro_areas.rb +295 -0
- data/db/migrate/017_add_sessions_table.rb +20 -0
- data/db/migrate/018_create_categories.rb +11 -0
- data/db/migrate/019_change_comment_to_text_field.rb +10 -0
- data/db/migrate/020_create_login_slug.rb +9 -0
- data/db/migrate/021_add_category_names.rb +8 -0
- data/db/migrate/023_add_denied_friendship_status.rb +13 -0
- data/db/migrate/024_add_notification_preferences.rb +13 -0
- data/db/migrate/025_create_countries.rb +11 -0
- data/db/migrate/026_add_countries.rb +230 -0
- data/db/migrate/027_add_us_to_existing_metro_areas.rb +9 -0
- data/db/migrate/028_add_country_id_to_users.rb +9 -0
- data/db/migrate/029_add_us_to_users_with_states.rb +14 -0
- data/db/migrate/030_add_users_counter_cache.rb +9 -0
- data/db/migrate/031_news_to_talk.rb +10 -0
- data/db/migrate/033_featured_users.rb +9 -0
- data/db/migrate/034_add_last_login.rb +9 -0
- data/db/migrate/035_track_emailed.rb +9 -0
- data/db/migrate/036_create_skills.rb +11 -0
- data/db/migrate/037_create_offerings.rb +12 -0
- data/db/migrate/038_add_zag_to_users.rb +13 -0
- data/db/migrate/039_create_activities_table.rb +17 -0
- data/db/migrate/040_add_category_tips.rb +9 -0
- data/db/migrate/041_create_events_table.rb +19 -0
- data/db/migrate/042_add_privacy_to_users.rb +10 -0
- data/db/migrate/043_sql_session_store_setup.rb +39 -0
- data/db/migrate/044_category_improvements.rb +11 -0
- data/db/migrate/045_adding_indexes.rb +39 -0
- data/db/migrate/046_adding_ads.rb +20 -0
- data/db/migrate/047_add_polls.rb +30 -0
- data/db/migrate/049_add_activities_count.rb +9 -0
- data/db/migrate/050_create_initial_schema.rb +73 -0
- data/db/migrate/051_add_audience_limitation_to_ads.rb +9 -0
- data/db/migrate/052_create_assets.rb +21 -0
- data/db/migrate/053_create_favoritables.rb +23 -0
- data/db/migrate/054_add_published_as_to_posts.rb +13 -0
- data/db/migrate/055_add_published_at_to_posts.rb +15 -0
- data/db/migrate/056_create_roles.rb +28 -0
- data/db/migrate/057_add_more_indexes.rb +19 -0
- data/db/migrate/058_add_anonymous_commenting_fields.rb +15 -0
- data/db/migrate/059_create_messages.rb +16 -0
- data/db/migrate/060_still_more_indexes.rb +19 -0
- data/db/migrate/061_postgres_compatibility_changes.rb +9 -0
- data/db/migrate/062_add_notify_to_comments.rb +11 -0
- data/db/migrate/063_create_albums.rb +15 -0
- data/db/migrate/064_add_album_id_to_photos.rb +9 -0
- data/db/migrate/065_add_view_count_to_albums.rb +9 -0
- data/db/migrate/066_add_view_count_to_photos.rb +9 -0
- data/db/migrate/067_create_static_pages.rb +22 -0
- data/db/migrate/068_create_rsvps.rb +13 -0
- data/db/migrate/069_create_pages.rb +29 -0
- data/db/migrate/070_add_pages.rb +11 -0
- data/db/migrate/071_authlogic_compatibility_changes.rb +43 -0
- data/db/migrate/072_add_allow_rsvp_to_events.rb +9 -0
- data/db/migrate/073_add_taggings_count_to_tags.rb +9 -0
- data/db/migrate/074_add_threading_to_messages.rb +19 -0
- data/db/migrate/075_add_anonymous_forum_posting.rb +16 -0
- data/db/migrate/076_add_comment_notification_toggle.rb +9 -0
- data/db/migrate/077_paperclip_changes.rb +36 -0
- data/db/migrate/078_create_authorizations.rb +20 -0
- data/db/migrate/079_create_slugs.rb +18 -0
- data/db/sample/users.rb +55 -0
- data/generators/ce_plugin/USAGE +7 -0
- data/generators/ce_plugin/ce_plugin_generator.rb +25 -0
- data/generators/ce_plugin/templates/README +13 -0
- data/generators/ce_plugin/templates/desert_routes.rb +3 -0
- data/generators/ce_plugin/templates/init.rb +8 -0
- data/generators/ce_plugin/templates/plugin.rb +1 -0
- data/generators/plugin_migration/plugin_migration_generator.rb +101 -0
- data/generators/plugin_migration/templates/plugin_migration.erb +13 -0
- data/lang/TRANSLATION.markdown +32 -0
- data/lib/community_engine/authenticated_system.rb +167 -0
- data/lib/community_engine/authenticated_test_helper.rb +113 -0
- data/lib/community_engine/community_engine_sha1_crypto_method.rb +12 -0
- data/lib/community_engine/engine.rb +39 -0
- data/lib/community_engine/engines_extensions.rb +7 -0
- data/lib/community_engine/i18n_extensions.rb +31 -0
- data/lib/community_engine/localized_application.rb +83 -0
- data/lib/community_engine/rails_asset_extensions.rb +131 -0
- data/lib/community_engine/url_upload.rb +15 -0
- data/lib/community_engine/version.rb +10 -0
- data/lib/community_engine/viewable.rb +12 -0
- data/lib/community_engine.rb +34 -0
- data/lib/tag_hacks.rb +24 -0
- data/lib/tasks/community_engine_tasks.rake +87 -0
- data/public/favicon.ico +0 -0
- data/sample_files/s3.yml +17 -0
- data/test/fixtures/ads.yml +13 -0
- data/test/fixtures/albums.yml +16 -0
- data/test/fixtures/categories.yml +16 -0
- data/test/fixtures/clippings.yml +15 -0
- data/test/fixtures/comments.yml +55 -0
- data/test/fixtures/countries.yml +13 -0
- data/test/fixtures/events.yml +61 -0
- data/test/fixtures/files/Granite.bmp +0 -0
- data/test/fixtures/files/library.jpg +0 -0
- data/test/fixtures/forums.yml +10 -0
- data/test/fixtures/friendship_statuses.yml +10 -0
- data/test/fixtures/friendships.yml +15 -0
- data/test/fixtures/homepage_features.yml +13 -0
- data/test/fixtures/invitations.yml +5 -0
- data/test/fixtures/messages.yml +24 -0
- data/test/fixtures/metro_areas.yml +24 -0
- data/test/fixtures/moderatorships.yml +4 -0
- data/test/fixtures/monitorships.yml +10 -0
- data/test/fixtures/pages.yml +26 -0
- data/test/fixtures/photos.yml +29 -0
- data/test/fixtures/posts.yml +49 -0
- data/test/fixtures/roles.yml +9 -0
- data/test/fixtures/rsvps.yml +7 -0
- data/test/fixtures/sb_posts.yml +90 -0
- data/test/fixtures/states.yml +7 -0
- data/test/fixtures/taggings.yml +15 -0
- data/test/fixtures/tags.yml +11 -0
- data/test/fixtures/topics.yml +63 -0
- data/test/fixtures/users.yml +222 -0
- data/test/functional/activities_controller_test.rb +62 -0
- data/test/functional/admin_controller_test.rb +60 -0
- data/test/functional/ads_controller_test.rb +51 -0
- data/test/functional/albums_controller_test.rb +120 -0
- data/test/functional/base_controller_test.rb +27 -0
- data/test/functional/categories_controller_test.rb +51 -0
- data/test/functional/clippings_controller_test.rb +123 -0
- data/test/functional/comments_controller_test.rb +215 -0
- data/test/functional/events_controller_test.rb +104 -0
- data/test/functional/favorites_controller_test.rb +53 -0
- data/test/functional/forums_controller_test.rb +95 -0
- data/test/functional/friendships_controller_test.rb +98 -0
- data/test/functional/homepage_features_controller_test.rb +69 -0
- data/test/functional/invitations_controller_test.rb +45 -0
- data/test/functional/messages_controller_test.rb +154 -0
- data/test/functional/metro_areas_controller_test.rb +63 -0
- data/test/functional/moderators_controller_test.rb +22 -0
- data/test/functional/monitorships_controller_test.rb +72 -0
- data/test/functional/pages_controller_test.rb +95 -0
- data/test/functional/password_reset_controller_test.rb +34 -0
- data/test/functional/photo_manager_controller_test.rb +21 -0
- data/test/functional/photos_controller_test.rb +203 -0
- data/test/functional/posts_controller_test.rb +224 -0
- data/test/functional/rsvps_controller_test.rb +92 -0
- data/test/functional/sb_posts_controller_test.rb +193 -0
- data/test/functional/sessions_controller_test.rb +55 -0
- data/test/functional/sitemap_controller_test.rb +9 -0
- data/test/functional/statistics_controller_test.rb +18 -0
- data/test/functional/tags_controller_test.rb +52 -0
- data/test/functional/theme_controller_test.rb +11 -0
- data/test/functional/topics_controller_test.rb +201 -0
- data/test/functional/users_controller_test.rb +460 -0
- data/test/functional/votes_controller_test.rb +27 -0
- data/test/test_helper.rb +103 -0
- data/test/testapp/.gitignore +4 -0
- data/test/testapp/README +256 -0
- data/test/testapp/Rakefile +7 -0
- data/test/testapp/app/controllers/application_controller.rb +3 -0
- data/test/testapp/app/helpers/application_helper.rb +2 -0
- data/test/testapp/config/application.rb +45 -0
- data/test/testapp/config/application_config.rb +1 -0
- data/test/testapp/config/boot.rb +10 -0
- data/test/testapp/config/database.yml +22 -0
- data/test/testapp/config/environment.rb +6 -0
- data/test/testapp/config/environments/development.rb +25 -0
- data/test/testapp/config/environments/production.rb +49 -0
- data/test/testapp/config/environments/test.rb +35 -0
- data/test/testapp/config/initializers/backtrace_silencers.rb +7 -0
- data/test/testapp/config/initializers/inflections.rb +10 -0
- data/test/testapp/config/initializers/mime_types.rb +5 -0
- data/test/testapp/config/initializers/secret_token.rb +7 -0
- data/test/testapp/config/initializers/session_store.rb +8 -0
- data/test/testapp/config/locales/en.yml +5 -0
- data/test/testapp/config/routes.rb +3 -0
- data/test/testapp/config.ru +4 -0
- data/test/testapp/db/schema.rb +456 -0
- data/test/testapp/db/seeds.rb +7 -0
- data/test/testapp/doc/README_FOR_APP +2 -0
- data/test/testapp/lib/tasks/.gitkeep +0 -0
- data/test/testapp/public/404.html +26 -0
- data/test/testapp/public/422.html +26 -0
- data/test/testapp/public/500.html +26 -0
- data/test/testapp/public/favicon.ico +0 -0
- data/test/testapp/public/images/rails.png +0 -0
- data/test/testapp/public/robots.txt +5 -0
- data/test/testapp/script/rails +6 -0
- data/test/testapp/test/performance/browsing_test.rb +9 -0
- data/test/testapp/test/test_helper.rb +13 -0
- data/test/testapp/vendor/plugins/.gitkeep +0 -0
- data/test/unit/ad_test.rb +34 -0
- data/test/unit/asset_test.rb +15 -0
- data/test/unit/authorization_test.rb +55 -0
- data/test/unit/category_test.rb +22 -0
- data/test/unit/choice_test.rb +9 -0
- data/test/unit/clipping_image_test.rb +17 -0
- data/test/unit/clipping_test.rb +52 -0
- data/test/unit/comment_test.rb +107 -0
- data/test/unit/country_test.rb +15 -0
- data/test/unit/event_test.rb +75 -0
- data/test/unit/favorite_test.rb +71 -0
- data/test/unit/forum_test.rb +23 -0
- data/test/unit/friendship_status_test.rb +10 -0
- data/test/unit/friendship_test.rb +38 -0
- data/test/unit/homepage_feature_test.rb +10 -0
- data/test/unit/invitation_test.rb +27 -0
- data/test/unit/message_test.rb +49 -0
- data/test/unit/message_thread_test.rb +80 -0
- data/test/unit/metro_area_test.rb +10 -0
- data/test/unit/moderatorship_test.rb +30 -0
- data/test/unit/monitorships_test.rb +38 -0
- data/test/unit/page_test.rb +25 -0
- data/test/unit/photo_test.rb +42 -0
- data/test/unit/poll_test.rb +25 -0
- data/test/unit/post_test.rb +212 -0
- data/test/unit/rsvp_test.rb +33 -0
- data/test/unit/sb_post_test.rb +152 -0
- data/test/unit/state_test.rb +10 -0
- data/test/unit/tag_test.rb +22 -0
- data/test/unit/topic_test.rb +111 -0
- data/test/unit/user_notifier_test.rb +108 -0
- data/test/unit/user_test.rb +259 -0
- data/test/unit/vote_test.rb +9 -0
- data/vendor/plugins/activity_tracker/README +4 -0
- data/vendor/plugins/activity_tracker/Rakefile +22 -0
- data/vendor/plugins/activity_tracker/generators/activity_migration/USAGE +13 -0
- data/vendor/plugins/activity_tracker/generators/activity_migration/activity_migration_generator.rb +11 -0
- data/vendor/plugins/activity_tracker/generators/activity_migration/templates/migration.rb +17 -0
- data/vendor/plugins/activity_tracker/init.rb +1 -0
- data/vendor/plugins/activity_tracker/install.rb +1 -0
- data/vendor/plugins/activity_tracker/lib/activity.rb +40 -0
- data/vendor/plugins/activity_tracker/lib/activity_tracker.rb +80 -0
- data/vendor/plugins/activity_tracker/tasks/activity_tracker_tasks.rake +4 -0
- data/vendor/plugins/activity_tracker/test/abstract_unit.rb +47 -0
- data/vendor/plugins/activity_tracker/test/activity_tracker_test.rb +48 -0
- data/vendor/plugins/activity_tracker/test/database.yml +18 -0
- data/vendor/plugins/activity_tracker/test/debug.log +3329 -0
- data/vendor/plugins/activity_tracker/test/fixtures/test_post.rb +5 -0
- data/vendor/plugins/activity_tracker/test/fixtures/test_posts.yml +3 -0
- data/vendor/plugins/activity_tracker/test/fixtures/test_user.rb +4 -0
- data/vendor/plugins/activity_tracker/test/fixtures/test_users.yml +6 -0
- data/vendor/plugins/activity_tracker/test/schema.rb +21 -0
- data/vendor/plugins/activity_tracker/uninstall.rb +1 -0
- data/vendor/plugins/acts_as_list/README +23 -0
- data/vendor/plugins/acts_as_list/init.rb +3 -0
- data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
- data/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
- data/vendor/plugins/acts_as_publishable/README +3 -0
- data/vendor/plugins/acts_as_publishable/Rakefile +22 -0
- data/vendor/plugins/acts_as_publishable/generators/publishing/publishing_generator.rb +34 -0
- data/vendor/plugins/acts_as_publishable/generators/publishing/templates/migration.rb +13 -0
- data/vendor/plugins/acts_as_publishable/init.rb +3 -0
- data/vendor/plugins/acts_as_publishable/install.rb +3 -0
- data/vendor/plugins/acts_as_publishable/lib/acts_as_publishable.rb +81 -0
- data/vendor/plugins/acts_as_publishable/test/acts_as_publishable_test.rb +8 -0
- data/vendor/plugins/acts_as_publishable/uninstall.rb +1 -0
- data/vendor/plugins/auto_complete/README +23 -0
- data/vendor/plugins/auto_complete/Rakefile +22 -0
- data/vendor/plugins/auto_complete/init.rb +2 -0
- data/vendor/plugins/auto_complete/lib/auto_complete.rb +47 -0
- data/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb +143 -0
- data/vendor/plugins/auto_complete/test/auto_complete_test.rb +67 -0
- data/vendor/plugins/enumerations_mixin/LICENSE +20 -0
- data/vendor/plugins/enumerations_mixin/README_ENUMERATIONS +163 -0
- data/vendor/plugins/enumerations_mixin/init.rb +21 -0
- data/vendor/plugins/enumerations_mixin/lib/active_record/acts/enumerated.rb +177 -0
- data/vendor/plugins/enumerations_mixin/lib/active_record/aggregations/has_enumerated.rb +60 -0
- data/vendor/plugins/enumerations_mixin/lib/active_record/virtual_enumerations.rb +68 -0
- data/vendor/plugins/enumerations_mixin/virtual_enumerations_sample.rb +76 -0
- data/vendor/plugins/prototype_legacy_helper/README.markdown +13 -0
- data/vendor/plugins/prototype_legacy_helper/init.rb +1 -0
- data/vendor/plugins/prototype_legacy_helper/lib/prototype_legacy_helper.rb +432 -0
- data/vendor/plugins/prototype_legacy_helper/test/test_prototype_helper.rb +297 -0
- data/vendor/plugins/resource_feeder/README +4 -0
- data/vendor/plugins/resource_feeder/Rakefile +22 -0
- data/vendor/plugins/resource_feeder/init.rb +2 -0
- data/vendor/plugins/resource_feeder/lib/resource_feeder/atom.rb +71 -0
- data/vendor/plugins/resource_feeder/lib/resource_feeder/rss.rb +71 -0
- data/vendor/plugins/resource_feeder/lib/resource_feeder.rb +2 -0
- data/vendor/plugins/resource_feeder/test/atom_feed_test.rb +85 -0
- data/vendor/plugins/resource_feeder/test/rss_feed_test.rb +61 -0
- data/vendor/plugins/resource_feeder/test/test_helper.rb +60 -0
- data/vendor/plugins/respond_to_parent/MIT-LICENSE +20 -0
- data/vendor/plugins/respond_to_parent/README +47 -0
- data/vendor/plugins/respond_to_parent/Rakefile +22 -0
- data/vendor/plugins/respond_to_parent/init.rb +1 -0
- data/vendor/plugins/respond_to_parent/install.rb +1 -0
- data/vendor/plugins/respond_to_parent/lib/responds_to_parent.rb +70 -0
- data/vendor/plugins/respond_to_parent/test/responds_to_parent_test.rb +10 -0
- data/vendor/plugins/respond_to_parent/test/test_helper.rb +6 -0
- data/vendor/plugins/respond_to_parent/uninstall.rb +1 -0
- data/vendor/plugins/tiny_mce/CHANGELOG_PLUGIN.rdoc +91 -0
- data/vendor/plugins/tiny_mce/CHANGELOG_TINYMCE +1226 -0
- data/vendor/plugins/tiny_mce/DEV_UPGRADE_NOTES.rdoc +12 -0
- data/vendor/plugins/tiny_mce/init.rb +2 -0
- data/vendor/plugins/tiny_mce/install.rb +18 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce/base.rb +33 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce/configuration.rb +114 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce/exceptions.rb +14 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce/helpers.rb +43 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce/railtie.rb +13 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce/spell_checker.rb +67 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce/valid_tinymce_langs.yml +25 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce/valid_tinymce_options.yml +167 -0
- data/vendor/plugins/tiny_mce/lib/tiny_mce.rb +24 -0
- data/vendor/plugins/white_list/README +35 -0
- data/vendor/plugins/white_list/Rakefile +22 -0
- data/vendor/plugins/white_list/init.rb +35 -0
- data/vendor/plugins/white_list/lib/white_list_helper.rb +61 -0
- data/vendor/plugins/white_list/test/white_list_test.rb +120 -0
- metadata +1073 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
= Updating the bundled TinyMCE
|
|
2
|
+
|
|
3
|
+
1. Download the new TinyMCE tarball and extract it to your Desktop (or other easily accessible location)
|
|
4
|
+
2. Delete the copy of TinyMCE in the plugin at lib/tiny_mce/assets/tiny_mce (this ensures old/removed files are deleted)
|
|
5
|
+
3. Copy the source files of TinyMCE (not the documentation) to lib/tiny_mce/assets/tiny_mce (so in that folder you should have a tiny_mce.js file)
|
|
6
|
+
4. Update CHANGELOG_TINYMCE (simply download and overwrite the contents with that of http://tinymce.moxiecode.com/js/tinymce/changelog.txt)
|
|
7
|
+
5. Update lib/tiny_mce/valid_tinymce_options.yml with any new options, or remove old ones, as described in the tinymce changelog
|
|
8
|
+
6. Download all 'Complete' locales from http://tinymce.moxiecode.com/i18n/index.php?ctrl=lang&, unpack, and copy into place
|
|
9
|
+
7. Update lib/tiny_mce/valid_tinymce_langs.yml with any new languages, or remove old/incomplete ones
|
|
10
|
+
8. Update the CHANGELOG_PLUGIN.rdoc to say what you upgraded from, what you upgraded to, and your name
|
|
11
|
+
9. Update the 'Bundled TinyMCE version' value at the bottom of README.rdoc
|
|
12
|
+
10. Commit, push, and send pull request to http://github.com/kete/tiny_mce
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Lets output something to the console when people use script/plugin to install tiny_mce
|
|
2
|
+
puts <<-EOS
|
|
3
|
+
-------
|
|
4
|
+
|
|
5
|
+
tiny_mce plugin
|
|
6
|
+
|
|
7
|
+
Thanks for installing the tiny_mce plugin.
|
|
8
|
+
|
|
9
|
+
Complete the installation by running the following:
|
|
10
|
+
|
|
11
|
+
rake tiny_mce:install
|
|
12
|
+
|
|
13
|
+
Then to setup TinyMCE on your site, please view README.rdoc.
|
|
14
|
+
|
|
15
|
+
Read the section entitled 'Installation'
|
|
16
|
+
|
|
17
|
+
-------
|
|
18
|
+
EOS
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module TinyMCE
|
|
2
|
+
# The base module we include into ActionController::Base
|
|
3
|
+
module Base
|
|
4
|
+
# When this module is included, extend it with the available class methods
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.extend(ClassMethods)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module ClassMethods
|
|
10
|
+
# The controller declaration to enable tiny_mce on certain actions.
|
|
11
|
+
# Takes options hash, raw_options string, and any normal params you
|
|
12
|
+
# can send to a before_filter (only, except etc)
|
|
13
|
+
def uses_tiny_mce(options = {}, &block)
|
|
14
|
+
if block_given?
|
|
15
|
+
options = block.call
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
configuration = TinyMCE::Configuration.new(options.delete(:options), options.delete(:raw_options))
|
|
19
|
+
|
|
20
|
+
# Set instance vars in the current class
|
|
21
|
+
proc = Proc.new do |c|
|
|
22
|
+
configurations = c.instance_variable_get(:@tiny_mce_configurations) || []
|
|
23
|
+
configurations << configuration
|
|
24
|
+
c.instance_variable_set(:@tiny_mce_configurations, configurations)
|
|
25
|
+
c.instance_variable_set(:@uses_tiny_mce, true)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Run the above proc before each page load this method is declared in
|
|
29
|
+
before_filter(proc, options)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
module TinyMCE
|
|
2
|
+
class Configuration
|
|
3
|
+
# We use this to combine options and raw_options into one class and validate
|
|
4
|
+
# whether options passed in by the users are valid tiny mce configuration settings.
|
|
5
|
+
# Also loads which options are valid, and provides an plugins attribute to allow
|
|
6
|
+
# more configuration options dynamicly
|
|
7
|
+
|
|
8
|
+
# The default tiny_mce options. Tries it's best to determine the locale
|
|
9
|
+
# If the current locale doesn't have a lang in TinyMCE, default to en
|
|
10
|
+
def self.default_options
|
|
11
|
+
locale = I18n.locale.to_s[0,2] if defined?(I18n)
|
|
12
|
+
locale = :en unless locale && valid_langs.include?(locale)
|
|
13
|
+
{ 'mode' => 'textareas', 'editor_selector' => 'mceEditor',
|
|
14
|
+
'theme' => 'simple', 'language' => locale }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# The YAML file might not exist, might be blank, might be invalid, or
|
|
18
|
+
# might be valid. Catch all cases and make sure we always return a Hash
|
|
19
|
+
# Run it through an ERB parser so that environment specific code can be
|
|
20
|
+
# put in the file
|
|
21
|
+
def self.config_file_options
|
|
22
|
+
@@config_file_options ||= begin
|
|
23
|
+
tiny_mce_yaml_filepath = File.join(Rails.root.to_s, 'config', 'tiny_mce.yml')
|
|
24
|
+
return Hash.new unless File.exist?(tiny_mce_yaml_filepath)
|
|
25
|
+
tiny_mce_config = IO.read(tiny_mce_yaml_filepath)
|
|
26
|
+
tiny_mce_config = ERB.new(tiny_mce_config).result if defined?(ERB)
|
|
27
|
+
(YAML::load(tiny_mce_config) rescue nil) || Hash.new
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Parse the valid langs file and load it into an array
|
|
32
|
+
def self.valid_langs
|
|
33
|
+
@@valid_langs ||= begin
|
|
34
|
+
valid_langs_path = File.join(File.dirname(__FILE__), 'valid_tinymce_langs.yml')
|
|
35
|
+
File.open(valid_langs_path) { |f| YAML.load(f.read) }
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Parse the valid options file and load it into an array
|
|
40
|
+
def self.valid_options
|
|
41
|
+
@@valid_options ||= begin
|
|
42
|
+
valid_options_path = File.join(File.dirname(__FILE__), 'valid_tinymce_options.yml')
|
|
43
|
+
File.open(valid_options_path) { |f| YAML.load(f.read) }
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
attr_accessor :options, :raw_options
|
|
48
|
+
|
|
49
|
+
def initialize(options = {}, raw_options = nil)
|
|
50
|
+
options = Hash.new unless options.is_a?(Hash)
|
|
51
|
+
@options = self.class.default_options.
|
|
52
|
+
merge(self.class.config_file_options.stringify_keys).
|
|
53
|
+
merge(options.stringify_keys)
|
|
54
|
+
@raw_options = [raw_options]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Merge additional options and raw_options
|
|
58
|
+
def add_options(options = {}, raw_options = nil)
|
|
59
|
+
@options.merge!(options.stringify_keys) unless options.blank?
|
|
60
|
+
@raw_options << raw_options unless raw_options.blank?
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Merge additional options and raw_options, but don't overwrite existing
|
|
64
|
+
def reverse_add_options(options = {}, raw_options = nil)
|
|
65
|
+
@options.reverse_merge!(options.stringify_keys) unless options.blank?
|
|
66
|
+
@raw_options << raw_options unless raw_options.blank?
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def plugins
|
|
70
|
+
@options['plugins'] || []
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Validate and merge options and raw_options into a string
|
|
74
|
+
# to be used for tinyMCE.init() in the raw_tiny_mce_init helper
|
|
75
|
+
def to_json
|
|
76
|
+
raise TinyMCEInvalidOptionType.invalid_type_of(plugins, :for => :plugins) unless plugins.is_a?(Array)
|
|
77
|
+
|
|
78
|
+
json_options = []
|
|
79
|
+
@options.each_pair do |key, value|
|
|
80
|
+
raise TinyMCEInvalidOption.invalid_option(key) unless valid?(key)
|
|
81
|
+
json_options << "#{key} : " + case value
|
|
82
|
+
when String, Symbol, Fixnum
|
|
83
|
+
"'#{value.to_s}'"
|
|
84
|
+
when Array
|
|
85
|
+
'"' + value.join(',') + '"'
|
|
86
|
+
when TrueClass
|
|
87
|
+
'true'
|
|
88
|
+
when FalseClass
|
|
89
|
+
'false'
|
|
90
|
+
else
|
|
91
|
+
raise TinyMCEInvalidOptionType.invalid_type_of(value, :for => key)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
json_options.sort!
|
|
96
|
+
|
|
97
|
+
@raw_options.compact!
|
|
98
|
+
json_options += @raw_options unless @raw_options.blank?
|
|
99
|
+
|
|
100
|
+
"{\n" + json_options.delete_if {|o| o.blank? }.join(",\n") + "\n\n}"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Does the check to see if the option is valid. It checks the valid_options
|
|
104
|
+
# array (see above), checks if the start of the option name is in the plugin list
|
|
105
|
+
# or checks if it's an theme_advanced_container setting
|
|
106
|
+
def valid?(option)
|
|
107
|
+
option = option.to_s
|
|
108
|
+
self.class.valid_options.include?(option) ||
|
|
109
|
+
plugins.include?(option.split('_').first) ||
|
|
110
|
+
option =~ /^theme_advanced_container_\w+$/
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module TinyMCE
|
|
2
|
+
# Setup a couple of Exception classes that we use later on
|
|
3
|
+
class TinyMCEInvalidOption < Exception
|
|
4
|
+
def self.invalid_option(option)
|
|
5
|
+
new "Invalid option #{option} passed to tinymce"
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class TinyMCEInvalidOptionType < Exception
|
|
10
|
+
def self.invalid_type_of(value, parameters={})
|
|
11
|
+
new "Invalid value of type #{value.class} passed for TinyMCE option #{parameters[:for].to_s}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module TinyMCE
|
|
2
|
+
# The helper module we include into ActionController::Base
|
|
3
|
+
module Helpers
|
|
4
|
+
|
|
5
|
+
# Has uses_tiny_mce method been declared in the controller for this page?
|
|
6
|
+
def using_tiny_mce?
|
|
7
|
+
!@uses_tiny_mce.blank?
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def tiny_mce_configurations
|
|
11
|
+
@tiny_mce_configurations ||= [Configuration.new]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Parse @tiny_mce_options and @raw_tiny_mce_options to create a raw JS string
|
|
15
|
+
# used by TinyMCE. Returns errors if the option or options type is invalid
|
|
16
|
+
def raw_tiny_mce_init(options = {}, raw_options = nil)
|
|
17
|
+
tinymce_js = ""
|
|
18
|
+
|
|
19
|
+
tiny_mce_configurations.each do |configuration|
|
|
20
|
+
configuration.add_options(options, raw_options)
|
|
21
|
+
tinymce_js += "tinyMCE.init("
|
|
22
|
+
tinymce_js += configuration.to_json
|
|
23
|
+
tinymce_js += ");"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
tinymce_js
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Form the raw JS and wrap in in a <script> tag for inclusion in the <head>
|
|
30
|
+
def tiny_mce_init(options = {}, raw_options = nil)
|
|
31
|
+
javascript_tag raw_tiny_mce_init(options, raw_options)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def tiny_mce_init_if_needed(options = {}, raw_options = nil)
|
|
35
|
+
tiny_mce_init(options, raw_options) if using_tiny_mce?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def include_tiny_mce_if_needed(options = {}, raw_options = nil)
|
|
39
|
+
tiny_mce_init_if_needed(options, raw_options)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# The base module we include into ActionController::Base
|
|
2
|
+
module TinyMCE
|
|
3
|
+
|
|
4
|
+
# Provides Spell checking capability to tiny_mce plugin
|
|
5
|
+
# Note: this may not always be up to date.
|
|
6
|
+
# Please supply patches if this isn't working
|
|
7
|
+
module SpellChecker
|
|
8
|
+
|
|
9
|
+
require 'net/https'
|
|
10
|
+
require 'uri'
|
|
11
|
+
require 'rexml/document'
|
|
12
|
+
|
|
13
|
+
ASPELL_WORD_DATA_REGEX = Regexp.new(/\&\s\w+\s\d+\s\d+(.*)$/)
|
|
14
|
+
|
|
15
|
+
# Attempt to determine where Aspell is
|
|
16
|
+
# Might be slow and a horrible way to do it, but it works!
|
|
17
|
+
# Should also grab Mac OS X and Window path's instead of assuming linux
|
|
18
|
+
aspell_path = nil
|
|
19
|
+
['/usr/bin/aspell', '/usr/local/bin/aspell'].each do |path|
|
|
20
|
+
if File.exists?(path)
|
|
21
|
+
aspell_path = path
|
|
22
|
+
break
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
ASPELL_PATH = aspell_path || "aspell" # fall back to a pathless call
|
|
26
|
+
|
|
27
|
+
# The method called via AJAX request by the Spellchecking plugin in TinyMCE.
|
|
28
|
+
# Passes in various params (language, words, and method)
|
|
29
|
+
# Return a JSON object required by the Spellchecking plugin
|
|
30
|
+
def spellchecker
|
|
31
|
+
language, words, method = params[:params][0], params[:params][1], params[:method] unless params[:params].blank?
|
|
32
|
+
return render(:nothing => true) if language.blank? || words.blank? || method.blank?
|
|
33
|
+
headers["Content-Type"] = "text/plain"
|
|
34
|
+
headers["charset"] = "utf-8"
|
|
35
|
+
suggestions = check_spelling(words, method, language)
|
|
36
|
+
results = {"id" => nil, "result" => suggestions, "error" => nil}
|
|
37
|
+
render :json => results
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
# This method is called by the spellchecker action.
|
|
43
|
+
# Is sends a command to the system, and parses the output
|
|
44
|
+
# Returns different value depending on the command (checking words, or getting suggestions)
|
|
45
|
+
def check_spelling(spell_check_text, command, lang)
|
|
46
|
+
xml_response_values = Array.new
|
|
47
|
+
spell_check_text = spell_check_text.join(' ') if command == 'checkWords'
|
|
48
|
+
logger.debug("Spellchecking via: echo \"#{spell_check_text}\" | #{ASPELL_PATH} -a -l #{lang}")
|
|
49
|
+
spell_check_response = `echo "#{spell_check_text}" | #{ASPELL_PATH} -a -l #{lang}`
|
|
50
|
+
return xml_response_values if spell_check_response.blank?
|
|
51
|
+
spelling_errors = spell_check_response.split("\n").slice(1..-1)
|
|
52
|
+
for error in spelling_errors
|
|
53
|
+
error.strip!
|
|
54
|
+
if (match_data = error.match(ASPELL_WORD_DATA_REGEX))
|
|
55
|
+
if (command == 'checkWords')
|
|
56
|
+
arr = match_data[0].split(' ')
|
|
57
|
+
xml_response_values << arr[1]
|
|
58
|
+
elsif (command == 'getSuggestions')
|
|
59
|
+
xml_response_values << error.split(',')[1..-1].collect(&:strip!)
|
|
60
|
+
xml_response_values = xml_response_values.first
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
return xml_response_values
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#
|
|
2
|
+
# For more information about available languages, see
|
|
3
|
+
# http://tinymce.moxiecode.com/i18n/index.php?ctrl=lang&
|
|
4
|
+
# Should only include a list of completed translations (not incomplete ones which most are :-( )
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
- ca
|
|
9
|
+
- cs
|
|
10
|
+
- da
|
|
11
|
+
- en
|
|
12
|
+
- fi
|
|
13
|
+
- fr
|
|
14
|
+
- ka
|
|
15
|
+
- hu
|
|
16
|
+
- ja
|
|
17
|
+
- nb
|
|
18
|
+
- no
|
|
19
|
+
- pl
|
|
20
|
+
- pt
|
|
21
|
+
- ru
|
|
22
|
+
- sk
|
|
23
|
+
- sl
|
|
24
|
+
- sv
|
|
25
|
+
- zh-cn
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#
|
|
2
|
+
# For more information about each configuration options, see
|
|
3
|
+
# http://wiki.moxiecode.com/index.php/TinyMCE:Configuration
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
# General
|
|
7
|
+
- accessibility_warnings
|
|
8
|
+
- auto_focus
|
|
9
|
+
- browsers
|
|
10
|
+
- class_filter
|
|
11
|
+
- custom_shortcuts
|
|
12
|
+
- dialog_type
|
|
13
|
+
- directionality
|
|
14
|
+
- editor_deselector
|
|
15
|
+
- editor_selector
|
|
16
|
+
- elements
|
|
17
|
+
- gecko_spellcheck
|
|
18
|
+
- keep_styles
|
|
19
|
+
- language
|
|
20
|
+
- mode
|
|
21
|
+
- nowrap
|
|
22
|
+
- object_resizing
|
|
23
|
+
- plugins
|
|
24
|
+
- readonly
|
|
25
|
+
- skin
|
|
26
|
+
- skin_variant
|
|
27
|
+
- strict_loading_mode
|
|
28
|
+
- table_inline_editing
|
|
29
|
+
- theme
|
|
30
|
+
- script_url
|
|
31
|
+
|
|
32
|
+
# Callbacks
|
|
33
|
+
- cleanup_callback
|
|
34
|
+
- execcommand_callback
|
|
35
|
+
- file_browser_callback
|
|
36
|
+
- handle_event_callback
|
|
37
|
+
- handle_node_change_callback
|
|
38
|
+
- init_instance_callback
|
|
39
|
+
- onchange_callback
|
|
40
|
+
- oninit
|
|
41
|
+
- onpageload
|
|
42
|
+
- remove_instance_callback
|
|
43
|
+
- save_callback
|
|
44
|
+
- setup
|
|
45
|
+
- setupcontent_callback
|
|
46
|
+
- urlconverter_callback
|
|
47
|
+
|
|
48
|
+
# Cleanup/Output
|
|
49
|
+
- apply_source_formatting
|
|
50
|
+
- cleanup
|
|
51
|
+
- cleanup_on_startup
|
|
52
|
+
- convert_fonts_to_spans
|
|
53
|
+
- convert_newlines_to_brs
|
|
54
|
+
- custom_elements
|
|
55
|
+
- doctype
|
|
56
|
+
- element_format
|
|
57
|
+
- encoding
|
|
58
|
+
- entities
|
|
59
|
+
- entity_encoding
|
|
60
|
+
- extended_valid_elements
|
|
61
|
+
- fix_content_duplication
|
|
62
|
+
- fix_list_elements
|
|
63
|
+
- fix_table_elements
|
|
64
|
+
- fix_nesting
|
|
65
|
+
- font_size_classes
|
|
66
|
+
- font_size_style_values
|
|
67
|
+
- force_p_newlines
|
|
68
|
+
- force_br_newlines
|
|
69
|
+
- force_hex_style_colors
|
|
70
|
+
- forced_root_block
|
|
71
|
+
- formats
|
|
72
|
+
- indentation
|
|
73
|
+
- inline_styles
|
|
74
|
+
- invalid_elements
|
|
75
|
+
- merge_styles_invalid_parents
|
|
76
|
+
- remove_linebreaks
|
|
77
|
+
- remove_redundant_brs
|
|
78
|
+
- preformatted
|
|
79
|
+
- style_formats
|
|
80
|
+
- valid_child_elements
|
|
81
|
+
- valid_children
|
|
82
|
+
- valid_elements
|
|
83
|
+
- verify_css_classes
|
|
84
|
+
- verify_html
|
|
85
|
+
- removeformat_selector
|
|
86
|
+
|
|
87
|
+
# URL
|
|
88
|
+
- convert_urls
|
|
89
|
+
- relative_urls
|
|
90
|
+
- remove_script_host
|
|
91
|
+
- document_base_url
|
|
92
|
+
|
|
93
|
+
# Layout
|
|
94
|
+
- body_id
|
|
95
|
+
- body_class
|
|
96
|
+
- constrain_menus
|
|
97
|
+
- content_css
|
|
98
|
+
- popup_css
|
|
99
|
+
- popup_css_add
|
|
100
|
+
- editor_css
|
|
101
|
+
- width
|
|
102
|
+
- height
|
|
103
|
+
|
|
104
|
+
# Visual aids
|
|
105
|
+
- visual
|
|
106
|
+
- visual_table_class
|
|
107
|
+
|
|
108
|
+
# Undo/Redo
|
|
109
|
+
- custom_undo_redo
|
|
110
|
+
- custom_undo_redo_levels
|
|
111
|
+
- custom_undo_redo_keyboard_shortcuts
|
|
112
|
+
- custom_undo_redo_restore_selection
|
|
113
|
+
|
|
114
|
+
# File lists
|
|
115
|
+
- external_link_list_url
|
|
116
|
+
- external_image_list_url
|
|
117
|
+
- external_media_list_url
|
|
118
|
+
- external_template_list_url
|
|
119
|
+
|
|
120
|
+
# Triggers/Patches
|
|
121
|
+
- add_form_submit_trigger
|
|
122
|
+
- add_unload_trigger
|
|
123
|
+
- submit_patch
|
|
124
|
+
|
|
125
|
+
# Advanced theme
|
|
126
|
+
- theme_advanced_layout_manager
|
|
127
|
+
- theme_advanced_blockformats
|
|
128
|
+
- theme_advanced_styles
|
|
129
|
+
- theme_advanced_source_editor_width
|
|
130
|
+
- theme_advanced_source_editor_height
|
|
131
|
+
- theme_advanced_source_editor_wrap
|
|
132
|
+
- theme_advanced_toolbar_location
|
|
133
|
+
- theme_advanced_toolbar_align
|
|
134
|
+
- theme_advanced_statusbar_location
|
|
135
|
+
- theme_advanced_buttons1
|
|
136
|
+
- theme_advanced_buttons1_add
|
|
137
|
+
- theme_advanced_buttons1_add_before
|
|
138
|
+
- theme_advanced_buttons2
|
|
139
|
+
- theme_advanced_buttons2_add
|
|
140
|
+
- theme_advanced_buttons2_add_before
|
|
141
|
+
- theme_advanced_buttons3
|
|
142
|
+
- theme_advanced_buttons3_add
|
|
143
|
+
- theme_advanced_buttons3_add_before
|
|
144
|
+
- theme_advanced_buttons4
|
|
145
|
+
- theme_advanced_buttons4_add
|
|
146
|
+
- theme_advanced_buttons4_add_before
|
|
147
|
+
- theme_advanced_disable
|
|
148
|
+
- theme_advanced_containers
|
|
149
|
+
- theme_advanced_containers_default_class
|
|
150
|
+
- theme_advanced_containers_default_align
|
|
151
|
+
- theme_advanced_custom_layout
|
|
152
|
+
- theme_advanced_link_targets
|
|
153
|
+
- theme_advanced_resizing
|
|
154
|
+
- theme_advanced_resizing_min_width
|
|
155
|
+
- theme_advanced_resizing_min_height
|
|
156
|
+
- theme_advanced_resizing_max_width
|
|
157
|
+
- theme_advanced_resizing_max_height
|
|
158
|
+
- theme_advanced_resizing_use_cookie
|
|
159
|
+
- theme_advanced_resize_horizontal
|
|
160
|
+
- theme_advanced_path
|
|
161
|
+
- theme_advanced_fonts
|
|
162
|
+
- theme_advanced_font_sizes
|
|
163
|
+
- theme_advanced_text_colors
|
|
164
|
+
- theme_advanced_background_colors
|
|
165
|
+
- theme_advanced_default_foreground_color
|
|
166
|
+
- theme_advanced_default_background_color
|
|
167
|
+
- theme_advanced_more_colors
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Require all the necessary files to run TinyMCE
|
|
2
|
+
require 'tiny_mce/base'
|
|
3
|
+
require 'tiny_mce/exceptions'
|
|
4
|
+
require 'tiny_mce/configuration'
|
|
5
|
+
require 'tiny_mce/spell_checker'
|
|
6
|
+
require 'tiny_mce/helpers'
|
|
7
|
+
|
|
8
|
+
module TinyMCE
|
|
9
|
+
def self.initialize
|
|
10
|
+
return if @intialized
|
|
11
|
+
raise "ActionController is not available yet." unless defined?(ActionController)
|
|
12
|
+
ActionController::Base.send(:include, TinyMCE::Base)
|
|
13
|
+
ActionController::Base.send(:helper, TinyMCE::Helpers)
|
|
14
|
+
@intialized = true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Finally, lets include the TinyMCE base and helpers where
|
|
19
|
+
# they need to go (support for Rails 2 and Rails 3)
|
|
20
|
+
if defined?(Rails::Railtie)
|
|
21
|
+
require 'tiny_mce/railtie'
|
|
22
|
+
else
|
|
23
|
+
TinyMCE.initialize
|
|
24
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
WhiteList
|
|
2
|
+
=========
|
|
3
|
+
|
|
4
|
+
This White Listing helper will html encode all tags and strip all attributes that aren't specifically allowed.
|
|
5
|
+
It also strips href/src tags with invalid protocols, like javascript: especially. It does its best to counter any
|
|
6
|
+
tricks that hackers may use, like throwing in unicode/ascii/hex values to get past the javascript: filters. Check out
|
|
7
|
+
the extensive test suite.
|
|
8
|
+
|
|
9
|
+
<%= white_list @article.body %>
|
|
10
|
+
|
|
11
|
+
You can add or remove tags/attributes if you want to customize it a bit.
|
|
12
|
+
|
|
13
|
+
add table tags
|
|
14
|
+
|
|
15
|
+
WhiteListHelper.tags += %w(table td th)
|
|
16
|
+
|
|
17
|
+
remove tags
|
|
18
|
+
|
|
19
|
+
WhiteListHelper.tags -= %w(div span)
|
|
20
|
+
|
|
21
|
+
clear any attributes that are allowed for <a> tags
|
|
22
|
+
|
|
23
|
+
WhiteListHelper.attributes['a'] = []
|
|
24
|
+
|
|
25
|
+
allow a new attribute for the <img> tag
|
|
26
|
+
|
|
27
|
+
WhiteListHelper.attributes['img'] += %w(style)
|
|
28
|
+
|
|
29
|
+
add new tag with attributes
|
|
30
|
+
|
|
31
|
+
WhiteListHelper.attributes['table'] = %w(cellpadding cellspacing)
|
|
32
|
+
|
|
33
|
+
change allowed attributes for all tags
|
|
34
|
+
|
|
35
|
+
WhiteListHelper.attributes[nil] = %w(id class style)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
require 'rake/testtask'
|
|
3
|
+
require 'rake/rdoctask'
|
|
4
|
+
|
|
5
|
+
desc 'Default: run unit tests.'
|
|
6
|
+
task :default => :test
|
|
7
|
+
|
|
8
|
+
desc 'Test the white_list plugin.'
|
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
|
10
|
+
t.libs << 'lib'
|
|
11
|
+
t.pattern = 'test/**/*_test.rb'
|
|
12
|
+
t.verbose = true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc 'Generate documentation for the white_list plugin.'
|
|
16
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
17
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
18
|
+
rdoc.title = 'WhiteList'
|
|
19
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
|
20
|
+
rdoc.rdoc_files.include('README')
|
|
21
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
22
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'white_list_helper'
|
|
2
|
+
ActionView::Base.send :include, WhiteListHelper
|
|
3
|
+
ActiveRecord::Base.send :include, WhiteListHelper
|
|
4
|
+
|
|
5
|
+
ActiveRecord::Base.class_eval do
|
|
6
|
+
include ActionView::Helpers::TagHelper, ActionView::Helpers::TextHelper, WhiteListHelper, ActionView::Helpers::UrlHelper
|
|
7
|
+
|
|
8
|
+
def self.format_attribute(attr_name)
|
|
9
|
+
class << self; include ActionView::Helpers::TagHelper, ActionView::Helpers::TextHelper, WhiteListHelper; end
|
|
10
|
+
define_method(:body) { read_attribute attr_name }
|
|
11
|
+
define_method(:body=) { |value| write_attribute "#{attr_name}", value }
|
|
12
|
+
define_method(:body_html) { read_attribute "#{attr_name}_html" }
|
|
13
|
+
define_method(:body_html=) { |value| write_attribute "#{attr_name}_html", value }
|
|
14
|
+
before_save :format_content
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def dom_id
|
|
18
|
+
[self.class.name.downcase.pluralize.dasherize, id] * '-'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
def format_content
|
|
23
|
+
body.strip! if body.respond_to?(:strip!)
|
|
24
|
+
self.body_html = body.blank? ? '' : body_html_with_formatting
|
|
25
|
+
self.body = white_list(self.body)
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def body_html_with_formatting
|
|
30
|
+
body_html = auto_link(body) { |text| truncate(text, :length => 50) }
|
|
31
|
+
# textilized = RedCloth.new(body_html, [ :hard_breaks ]) #not using this
|
|
32
|
+
# textilized.hard_breaks = true if textilized.respond_to?("hard_breaks=")
|
|
33
|
+
white_list(body_html)
|
|
34
|
+
end
|
|
35
|
+
end
|