threddedDANIEL 0.14.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +744 -0
- data/app/assets/images/favicons/README.md +3 -0
- data/app/assets/images/favicons/amazon.png +0 -0
- data/app/assets/images/favicons/github.png +0 -0
- data/app/assets/images/favicons/google_branding/logo_calendar_128px.png +0 -0
- data/app/assets/images/favicons/google_branding/logo_docs_48px.png +0 -0
- data/app/assets/images/favicons/google_branding/logo_drive_48px.png +0 -0
- data/app/assets/images/favicons/google_branding/logo_forms_48px.png +0 -0
- data/app/assets/images/favicons/google_branding/logo_sheets_48px.png +0 -0
- data/app/assets/images/favicons/google_branding/logo_slides_48px.png +0 -0
- data/app/assets/images/favicons/stackexchange.png +0 -0
- data/app/assets/images/favicons/twitter.png +0 -0
- data/app/assets/images/favicons/wikipedia.png +0 -0
- data/app/assets/images/thredded/breadcrumb-chevron.svg +1 -0
- data/app/assets/images/thredded/follow.svg +1 -0
- data/app/assets/images/thredded/lock.svg +1 -0
- data/app/assets/images/thredded/moderation.svg +1 -0
- data/app/assets/images/thredded/private-messages.svg +1 -0
- data/app/assets/images/thredded/settings.svg +1 -0
- data/app/assets/images/thredded/three-dot-menu.svg +3 -0
- data/app/assets/images/thredded/unfollow.svg +1 -0
- data/app/assets/javascripts/thredded.es6 +2 -0
- data/app/assets/javascripts/thredded/components/currently_online.es6 +32 -0
- data/app/assets/javascripts/thredded/components/flash_messages.es6 +9 -0
- data/app/assets/javascripts/thredded/components/mention_autocompletion.es6 +40 -0
- data/app/assets/javascripts/thredded/components/post_form.es6 +37 -0
- data/app/assets/javascripts/thredded/components/preview_area.es6 +56 -0
- data/app/assets/javascripts/thredded/components/quote_post.es6 +49 -0
- data/app/assets/javascripts/thredded/components/time_stamps.es6 +25 -0
- data/app/assets/javascripts/thredded/components/topic_form.es6 +94 -0
- data/app/assets/javascripts/thredded/components/topics.es6 +46 -0
- data/app/assets/javascripts/thredded/components/turboforms.es6 +25 -0
- data/app/assets/javascripts/thredded/components/user_preferences_form.es6 +66 -0
- data/app/assets/javascripts/thredded/components/user_textcomplete.es6 +50 -0
- data/app/assets/javascripts/thredded/components/users_select.es6 +122 -0
- data/app/assets/javascripts/thredded/core/csrf_tokens.es6 +9 -0
- data/app/assets/javascripts/thredded/core/debounce.es6 +32 -0
- data/app/assets/javascripts/thredded/core/escape_html.es6 +7 -0
- data/app/assets/javascripts/thredded/core/hide_soft_keyboard.es6 +7 -0
- data/app/assets/javascripts/thredded/core/on_page_load.es6 +54 -0
- data/app/assets/javascripts/thredded/core/serialize_form.es6 +9 -0
- data/app/assets/javascripts/thredded/core/thredded.es6 +1 -0
- data/app/assets/javascripts/thredded/dependencies.js +8 -0
- data/app/assets/javascripts/thredded/dependencies/autosize.js +1 -0
- data/app/assets/javascripts/thredded/dependencies/textcomplete.js +1 -0
- data/app/assets/javascripts/thredded/dependencies/timeago.js +1 -0
- data/app/assets/javascripts/thredded/dependencies/ujs.js +1 -0
- data/app/assets/javascripts/thredded/thredded.es6 +2 -0
- data/app/assets/stylesheets/thredded.scss +3 -0
- data/app/assets/stylesheets/thredded/_base.scss +13 -0
- data/app/assets/stylesheets/thredded/_dependencies.scss +0 -0
- data/app/assets/stylesheets/thredded/_email.scss +51 -0
- data/app/assets/stylesheets/thredded/_thredded.scss +33 -0
- data/app/assets/stylesheets/thredded/base/_alerts.scss +44 -0
- data/app/assets/stylesheets/thredded/base/_buttons.scss +73 -0
- data/app/assets/stylesheets/thredded/base/_dropdown-menu.scss +83 -0
- data/app/assets/stylesheets/thredded/base/_forms.scss +84 -0
- data/app/assets/stylesheets/thredded/base/_grid.scss +58 -0
- data/app/assets/stylesheets/thredded/base/_lists.scss +31 -0
- data/app/assets/stylesheets/thredded/base/_nav.scss +67 -0
- data/app/assets/stylesheets/thredded/base/_tables.scss +17 -0
- data/app/assets/stylesheets/thredded/base/_typography.scss +72 -0
- data/app/assets/stylesheets/thredded/base/_variables.scss +141 -0
- data/app/assets/stylesheets/thredded/components/_alerts.scss +19 -0
- data/app/assets/stylesheets/thredded/components/_base.scss +25 -0
- data/app/assets/stylesheets/thredded/components/_currently-online.scss +54 -0
- data/app/assets/stylesheets/thredded/components/_empty.scss +11 -0
- data/app/assets/stylesheets/thredded/components/_flash-message.scss +19 -0
- data/app/assets/stylesheets/thredded/components/_following.scss +14 -0
- data/app/assets/stylesheets/thredded/components/_form-list.scss +39 -0
- data/app/assets/stylesheets/thredded/components/_icons.scss +3 -0
- data/app/assets/stylesheets/thredded/components/_main-section.scss +9 -0
- data/app/assets/stylesheets/thredded/components/_mention-autocomplete.scss +57 -0
- data/app/assets/stylesheets/thredded/components/_messageboard.scss +155 -0
- data/app/assets/stylesheets/thredded/components/_onebox.scss +275 -0
- data/app/assets/stylesheets/thredded/components/_pagination.scss +35 -0
- data/app/assets/stylesheets/thredded/components/_post-form.scss +27 -0
- data/app/assets/stylesheets/thredded/components/_post.scss +138 -0
- data/app/assets/stylesheets/thredded/components/_preferences.scss +19 -0
- data/app/assets/stylesheets/thredded/components/_preview_area.scss +11 -0
- data/app/assets/stylesheets/thredded/components/_topic-delete.scss +8 -0
- data/app/assets/stylesheets/thredded/components/_topic-header.scss +111 -0
- data/app/assets/stylesheets/thredded/components/_topics.scss +186 -0
- data/app/assets/stylesheets/thredded/layout/_main-container.scss +16 -0
- data/app/assets/stylesheets/thredded/layout/_main-navigation.scss +79 -0
- data/app/assets/stylesheets/thredded/layout/_moderation.scss +97 -0
- data/app/assets/stylesheets/thredded/layout/_navigation.scss +87 -0
- data/app/assets/stylesheets/thredded/layout/_search-navigation.scss +126 -0
- data/app/assets/stylesheets/thredded/layout/_user-navigation.scss +20 -0
- data/app/assets/stylesheets/thredded/layout/_user.scss +10 -0
- data/app/assets/stylesheets/thredded/utilities/_is-compact.scss +26 -0
- data/app/assets/stylesheets/thredded/utilities/_is-expanded.scss +16 -0
- data/app/commands/thredded/at_notification_extractor.rb +23 -0
- data/app/commands/thredded/autofollow_users.rb +62 -0
- data/app/commands/thredded/create_messageboard.rb +42 -0
- data/app/commands/thredded/mark_all_read.rb +22 -0
- data/app/commands/thredded/moderate_post.rb +48 -0
- data/app/commands/thredded/notify_following_users.rb +78 -0
- data/app/commands/thredded/notify_private_topic_users.rb +34 -0
- data/app/controllers/concerns/thredded/new_post_params.rb +21 -0
- data/app/controllers/concerns/thredded/new_private_post_params.rb +21 -0
- data/app/controllers/concerns/thredded/new_private_topic_params.rb +25 -0
- data/app/controllers/concerns/thredded/new_topic_params.rb +19 -0
- data/app/controllers/concerns/thredded/render_preview.rb +16 -0
- data/app/controllers/thredded/application_controller.rb +145 -0
- data/app/controllers/thredded/autocomplete_users_controller.rb +52 -0
- data/app/controllers/thredded/messageboard_groups_controller.rb +31 -0
- data/app/controllers/thredded/messageboards_controller.rb +53 -0
- data/app/controllers/thredded/moderation_controller.rb +103 -0
- data/app/controllers/thredded/post_permalinks_controller.rb +11 -0
- data/app/controllers/thredded/post_previews_controller.rb +29 -0
- data/app/controllers/thredded/posts_controller.rb +97 -0
- data/app/controllers/thredded/preferences_controller.rb +42 -0
- data/app/controllers/thredded/private_post_permalinks_controller.rb +12 -0
- data/app/controllers/thredded/private_post_previews_controller.rb +29 -0
- data/app/controllers/thredded/private_posts_controller.rb +96 -0
- data/app/controllers/thredded/private_topic_previews_controller.rb +15 -0
- data/app/controllers/thredded/private_topics_controller.rb +102 -0
- data/app/controllers/thredded/read_states_controller.rb +13 -0
- data/app/controllers/thredded/theme_previews_controller.rb +34 -0
- data/app/controllers/thredded/topic_previews_controller.rb +15 -0
- data/app/controllers/thredded/topics_controller.rb +205 -0
- data/app/forms/thredded/edit_topic_form.rb +51 -0
- data/app/forms/thredded/post_form.rb +54 -0
- data/app/forms/thredded/private_post_form.rb +50 -0
- data/app/forms/thredded/private_topic_form.rb +160 -0
- data/app/forms/thredded/topic_form.rb +95 -0
- data/app/forms/thredded/user_preferences_form.rb +110 -0
- data/app/helpers/thredded/application_helper.rb +129 -0
- data/app/helpers/thredded/nav_helper.rb +42 -0
- data/app/helpers/thredded/render_helper.rb +15 -0
- data/app/helpers/thredded/urls_helper.rb +134 -0
- data/app/jobs/thredded/activity_updater_job.rb +21 -0
- data/app/jobs/thredded/auto_follow_and_notify_job.rb +14 -0
- data/app/jobs/thredded/notify_private_topic_users_job.rb +12 -0
- data/app/mailer_previews/thredded/base_mailer_preview.rb +118 -0
- data/app/mailer_previews/thredded/post_mailer_preview.rb +13 -0
- data/app/mailer_previews/thredded/private_topic_mailer_preview.rb +13 -0
- data/app/mailers/thredded/base_mailer.rb +18 -0
- data/app/mailers/thredded/post_mailer.rb +21 -0
- data/app/mailers/thredded/private_topic_mailer.rb +21 -0
- data/app/models/concerns/thredded/content_moderation_state.rb +67 -0
- data/app/models/concerns/thredded/friendly_id_reserved_words_and_pagination.rb +17 -0
- data/app/models/concerns/thredded/moderation_state.rb +14 -0
- data/app/models/concerns/thredded/notifier_preference.rb +19 -0
- data/app/models/concerns/thredded/post_common.rb +76 -0
- data/app/models/concerns/thredded/search_parser.rb +41 -0
- data/app/models/concerns/thredded/topic_common.rb +94 -0
- data/app/models/concerns/thredded/topics_search.rb +67 -0
- data/app/models/concerns/thredded/user_topic_read_state_common.rb +42 -0
- data/app/models/thredded/category.rb +18 -0
- data/app/models/thredded/messageboard.rb +120 -0
- data/app/models/thredded/messageboard_group.rb +19 -0
- data/app/models/thredded/messageboard_notifications_for_followed_topics.rb +30 -0
- data/app/models/thredded/messageboard_user.rb +14 -0
- data/app/models/thredded/notifications_for_followed_topics.rb +25 -0
- data/app/models/thredded/notifications_for_private_topics.rb +22 -0
- data/app/models/thredded/null_user.rb +51 -0
- data/app/models/thredded/null_user_topic_read_state.rb +17 -0
- data/app/models/thredded/post.rb +77 -0
- data/app/models/thredded/post_moderation_record.rb +56 -0
- data/app/models/thredded/private_post.rb +63 -0
- data/app/models/thredded/private_topic.rb +89 -0
- data/app/models/thredded/private_user.rb +8 -0
- data/app/models/thredded/stats.rb +25 -0
- data/app/models/thredded/topic.rb +179 -0
- data/app/models/thredded/topic_category.rb +8 -0
- data/app/models/thredded/user_detail.rb +27 -0
- data/app/models/thredded/user_extender.rb +75 -0
- data/app/models/thredded/user_messageboard_preference.rb +45 -0
- data/app/models/thredded/user_permissions/admin/if_admin_column_true.rb +14 -0
- data/app/models/thredded/user_permissions/admin/none.rb +14 -0
- data/app/models/thredded/user_permissions/message/readers_of_writeable_boards.rb +15 -0
- data/app/models/thredded/user_permissions/moderate/if_moderator_column_true.rb +16 -0
- data/app/models/thredded/user_permissions/moderate/none.rb +16 -0
- data/app/models/thredded/user_permissions/read/all.rb +27 -0
- data/app/models/thredded/user_permissions/write/all.rb +16 -0
- data/app/models/thredded/user_permissions/write/none.rb +16 -0
- data/app/models/thredded/user_post_notification.rb +29 -0
- data/app/models/thredded/user_preference.rb +26 -0
- data/app/models/thredded/user_private_topic_read_state.rb +13 -0
- data/app/models/thredded/user_topic_follow.rb +34 -0
- data/app/models/thredded/user_topic_read_state.rb +13 -0
- data/app/notifiers/thredded/email_notifier.rb +25 -0
- data/app/policies/thredded/messageboard_group_policy.rb +16 -0
- data/app/policies/thredded/messageboard_policy.rb +49 -0
- data/app/policies/thredded/post_policy.rb +64 -0
- data/app/policies/thredded/private_post_policy.rb +38 -0
- data/app/policies/thredded/private_topic_policy.rb +24 -0
- data/app/policies/thredded/topic_policy.rb +49 -0
- data/app/view_hooks/thredded/all_view_hooks.rb +125 -0
- data/app/view_models/thredded/base_topic_view.rb +43 -0
- data/app/view_models/thredded/messageboard_group_view.rb +27 -0
- data/app/view_models/thredded/post_view.rb +89 -0
- data/app/view_models/thredded/posts_page_view.rb +27 -0
- data/app/view_models/thredded/private_topic_view.rb +20 -0
- data/app/view_models/thredded/private_topics_page_view.rb +31 -0
- data/app/view_models/thredded/topic_email_view.rb +18 -0
- data/app/view_models/thredded/topic_posts_page_view.rb +17 -0
- data/app/view_models/thredded/topic_view.rb +68 -0
- data/app/view_models/thredded/topics_page_view.rb +38 -0
- data/app/views/layouts/thredded/application.html.erb +18 -0
- data/app/views/thredded/categories/_category.html.erb +1 -0
- data/app/views/thredded/error_pages/forbidden.html.erb +6 -0
- data/app/views/thredded/error_pages/not_found.html.erb +6 -0
- data/app/views/thredded/kaminari/_first_page.html.erb +11 -0
- data/app/views/thredded/kaminari/_gap.html.erb +8 -0
- data/app/views/thredded/kaminari/_last_page.html.erb +11 -0
- data/app/views/thredded/kaminari/_next_page.html.erb +11 -0
- data/app/views/thredded/kaminari/_page.html.erb +12 -0
- data/app/views/thredded/kaminari/_paginator.html.erb +23 -0
- data/app/views/thredded/kaminari/_prev_page.html.erb +11 -0
- data/app/views/thredded/messageboard_groups/new.html.erb +28 -0
- data/app/views/thredded/messageboards/_form.html.erb +30 -0
- data/app/views/thredded/messageboards/_messageboard.html.erb +20 -0
- data/app/views/thredded/messageboards/_messageboard_meta.html.erb +13 -0
- data/app/views/thredded/messageboards/edit.html.erb +15 -0
- data/app/views/thredded/messageboards/index.html.erb +34 -0
- data/app/views/thredded/messageboards/new.html.erb +15 -0
- data/app/views/thredded/moderation/_nav.html.erb +19 -0
- data/app/views/thredded/moderation/_post.html.erb +19 -0
- data/app/views/thredded/moderation/_post_moderation_actions.html.erb +12 -0
- data/app/views/thredded/moderation/_post_moderation_record.html.erb +46 -0
- data/app/views/thredded/moderation/_user_moderation_state.html.erb +3 -0
- data/app/views/thredded/moderation/_user_post.html.erb +12 -0
- data/app/views/thredded/moderation/_users_search_form.html.erb +13 -0
- data/app/views/thredded/moderation/activity.html.erb +20 -0
- data/app/views/thredded/moderation/history.html.erb +13 -0
- data/app/views/thredded/moderation/pending.html.erb +24 -0
- data/app/views/thredded/moderation/user.html.erb +54 -0
- data/app/views/thredded/moderation/users.html.erb +41 -0
- data/app/views/thredded/post_mailer/post_notification.html.erb +26 -0
- data/app/views/thredded/post_mailer/post_notification.text.erb +14 -0
- data/app/views/thredded/post_previews/preview.html.erb +1 -0
- data/app/views/thredded/post_previews/update.html.erb +1 -0
- data/app/views/thredded/posts/_content.html.erb +1 -0
- data/app/views/thredded/posts/_form.html.erb +5 -0
- data/app/views/thredded/posts/_post.html.erb +13 -0
- data/app/views/thredded/posts/_user.html.erb +3 -0
- data/app/views/thredded/posts/edit.html.erb +16 -0
- data/app/views/thredded/posts/new.html.erb +15 -0
- data/app/views/thredded/posts_common/_actions.html.erb +28 -0
- data/app/views/thredded/posts_common/_content.html.erb +3 -0
- data/app/views/thredded/posts_common/_form.html.erb +22 -0
- data/app/views/thredded/posts_common/_header.html.erb +8 -0
- data/app/views/thredded/posts_common/_header_with_topic.html.erb +15 -0
- data/app/views/thredded/posts_common/_header_with_user_and_topic.html.erb +18 -0
- data/app/views/thredded/posts_common/actions/_delete.html.erb +4 -0
- data/app/views/thredded/posts_common/actions/_edit.html.erb +3 -0
- data/app/views/thredded/posts_common/actions/_mark_as_unread.html.erb +2 -0
- data/app/views/thredded/posts_common/actions/_quote.html.erb +4 -0
- data/app/views/thredded/posts_common/form/_after_content.html.erb +8 -0
- data/app/views/thredded/posts_common/form/_before_content.html.erb +8 -0
- data/app/views/thredded/posts_common/form/_content.html.erb +7 -0
- data/app/views/thredded/posts_common/form/_content_field.html.erb +8 -0
- data/app/views/thredded/posts_common/form/_preview_area.html.erb +16 -0
- data/app/views/thredded/preferences/_form.html.erb +95 -0
- data/app/views/thredded/preferences/_messageboards_nav.html.erb +8 -0
- data/app/views/thredded/preferences/_messageboards_nav_item.html.erb +2 -0
- data/app/views/thredded/preferences/edit.html.erb +20 -0
- data/app/views/thredded/private_post_previews/preview.html.erb +1 -0
- data/app/views/thredded/private_post_previews/update.html.erb +1 -0
- data/app/views/thredded/private_posts/_content.html.erb +1 -0
- data/app/views/thredded/private_posts/_form.html.erb +6 -0
- data/app/views/thredded/private_posts/_private_post.html.erb +6 -0
- data/app/views/thredded/private_posts/edit.html.erb +16 -0
- data/app/views/thredded/private_posts/new.html.erb +11 -0
- data/app/views/thredded/private_topic_mailer/message_notification.html.erb +26 -0
- data/app/views/thredded/private_topic_mailer/message_notification.text.erb +15 -0
- data/app/views/thredded/private_topic_previews/preview.html.erb +1 -0
- data/app/views/thredded/private_topics/_breadcrumbs.html.erb +4 -0
- data/app/views/thredded/private_topics/_form.html.erb +39 -0
- data/app/views/thredded/private_topics/_header.html.erb +17 -0
- data/app/views/thredded/private_topics/_no_private_topics.html.erb +6 -0
- data/app/views/thredded/private_topics/_private_topic.html.erb +23 -0
- data/app/views/thredded/private_topics/edit.html.erb +35 -0
- data/app/views/thredded/private_topics/header/_participant.html.erb +1 -0
- data/app/views/thredded/private_topics/index.html.erb +32 -0
- data/app/views/thredded/private_topics/new.html.erb +11 -0
- data/app/views/thredded/private_topics/private_topic/_participant.html.erb +1 -0
- data/app/views/thredded/private_topics/show.html.erb +28 -0
- data/app/views/thredded/search/_form.html.erb +13 -0
- data/app/views/thredded/shared/_breadcrumbs.html.erb +6 -0
- data/app/views/thredded/shared/_content_moderation_blocked_state.html.erb +8 -0
- data/app/views/thredded/shared/_currently_online.html.erb +6 -0
- data/app/views/thredded/shared/_flash_messages.html.erb +7 -0
- data/app/views/thredded/shared/_header.html.erb +3 -0
- data/app/views/thredded/shared/_nav.html.erb +19 -0
- data/app/views/thredded/shared/_page.html.erb +15 -0
- data/app/views/thredded/shared/currently_online/_header.html.erb +5 -0
- data/app/views/thredded/shared/currently_online/_user_list.html.erb +3 -0
- data/app/views/thredded/shared/currently_online/_user_list_item.html.erb +6 -0
- data/app/views/thredded/shared/nav/_moderation.html.erb +14 -0
- data/app/views/thredded/shared/nav/_notification_preferences.html.erb +8 -0
- data/app/views/thredded/shared/nav/_private_topics.html.erb +12 -0
- data/app/views/thredded/shared/nav/_standalone.html.erb +12 -0
- data/app/views/thredded/shared/nav/_standalone_profile.html.erb +3 -0
- data/app/views/thredded/shared/preview.html.erb +10 -0
- data/app/views/thredded/theme_previews/_section_title.html.erb +3 -0
- data/app/views/thredded/theme_previews/show.html.erb +99 -0
- data/app/views/thredded/topic_previews/preview.html.erb +1 -0
- data/app/views/thredded/topics/_followers.html.erb +12 -0
- data/app/views/thredded/topics/_form.html.erb +32 -0
- data/app/views/thredded/topics/_header.html.erb +32 -0
- data/app/views/thredded/topics/_sticky_topics_divider.html.erb +1 -0
- data/app/views/thredded/topics/_topic.html.erb +47 -0
- data/app/views/thredded/topics/_topic_form_admin_options.html.erb +12 -0
- data/app/views/thredded/topics/edit.html.erb +50 -0
- data/app/views/thredded/topics/index.html.erb +35 -0
- data/app/views/thredded/topics/new.html.erb +12 -0
- data/app/views/thredded/topics/search.html.erb +39 -0
- data/app/views/thredded/topics/show.html.erb +46 -0
- data/app/views/thredded/users/_link.html.erb +14 -0
- data/app/views/thredded/users/_post.html.erb +6 -0
- data/app/views/thredded/users/_posts.html.erb +7 -0
- data/bin/rails +6 -0
- data/config/i18n-tasks.yml +16 -0
- data/config/locales/de.yml +257 -0
- data/config/locales/en.yml +253 -0
- data/config/locales/es.yml +257 -0
- data/config/locales/fr.yml +255 -0
- data/config/locales/it.yml +257 -0
- data/config/locales/pl.yml +257 -0
- data/config/locales/pt-BR.yml +258 -0
- data/config/locales/ru.yml +255 -0
- data/config/locales/zh-CN.yml +246 -0
- data/config/routes.rb +87 -0
- data/db/migrate/20160329231848_create_thredded.rb +257 -0
- data/db/seeds.rb +4 -0
- data/db/upgrade_migrations/20160611094616_upgrade_v0_5_to_v0_6.rb +28 -0
- data/db/upgrade_migrations/20160723012349_upgrade_v0_6_to_v0_7.rb +46 -0
- data/db/upgrade_migrations/20161019150201_upgrade_v0_7_to_v0_8.rb +34 -0
- data/db/upgrade_migrations/20161113161801_upgrade_v0_8_to_v0_9.rb +60 -0
- data/db/upgrade_migrations/20170125033319_upgrade_v0_9_to_v0_10.rb +36 -0
- data/db/upgrade_migrations/20170312131417_upgrade_thredded_v0_10_to_v0_11.rb +23 -0
- data/db/upgrade_migrations/20170420163138_upgrade_thredded_v0_11_to_v0_12.rb +28 -0
- data/db/upgrade_migrations/20170811090735_upgrade_thredded_v0_13_to_v_014.rb +21 -0
- data/lib/generators/thredded/install/USAGE +8 -0
- data/lib/generators/thredded/install/install_generator.rb +20 -0
- data/lib/generators/thredded/install/templates/initializer.rb +160 -0
- data/lib/tasks/thredded_tasks.rake +14 -0
- data/lib/thredded.rb +190 -0
- data/lib/thredded/base_migration.rb +14 -0
- data/lib/thredded/base_notifier.rb +28 -0
- data/lib/thredded/collection_to_strings_with_cache_renderer.rb +86 -0
- data/lib/thredded/content_formatter.rb +129 -0
- data/lib/thredded/database_seeder.rb +290 -0
- data/lib/thredded/db_tools.rb +103 -0
- data/lib/thredded/email_transformer.rb +22 -0
- data/lib/thredded/email_transformer/base.rb +47 -0
- data/lib/thredded/email_transformer/onebox.rb +21 -0
- data/lib/thredded/engine.rb +28 -0
- data/lib/thredded/errors.rb +68 -0
- data/lib/thredded/formatting_demo_content.rb +30 -0
- data/lib/thredded/html_pipeline/at_mention_filter.rb +78 -0
- data/lib/thredded/html_pipeline/autolink_filter.rb +15 -0
- data/lib/thredded/html_pipeline/kramdown_filter.rb +39 -0
- data/lib/thredded/html_pipeline/onebox_filter.rb +143 -0
- data/lib/thredded/html_pipeline/wrap_iframes_filter.rb +13 -0
- data/lib/thredded/version.rb +5 -0
- data/lib/thredded/view_hooks/config.rb +37 -0
- data/lib/thredded/view_hooks/renderer.rb +30 -0
- data/vendor/assets/javascripts/autosize.min.js +6 -0
- data/vendor/assets/javascripts/textcomplete.min.js +2 -0
- metadata +1035 -0
@@ -0,0 +1,143 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'onebox'
|
4
|
+
|
5
|
+
module Thredded
|
6
|
+
module HtmlPipeline
|
7
|
+
class OneboxFilter < ::HTML::Pipeline::Filter
|
8
|
+
SANITIZE_CONFIG = Sanitize::Config.merge(
|
9
|
+
Sanitize::Config::ONEBOX,
|
10
|
+
attributes: {
|
11
|
+
'a' => Sanitize::Config::ONEBOX[:attributes]['a'] + %w[target],
|
12
|
+
},
|
13
|
+
add_attributes: {
|
14
|
+
'iframe' => {
|
15
|
+
'seamless' => 'seamless',
|
16
|
+
'sandbox' => 'allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox' \
|
17
|
+
' allow-presentation',
|
18
|
+
}
|
19
|
+
},
|
20
|
+
transformers: (Sanitize::Config::ONEBOX[:transformers] || []) + [
|
21
|
+
lambda do |env|
|
22
|
+
next unless env[:node_name] == 'a'
|
23
|
+
a_tag = env[:node]
|
24
|
+
a_tag['href'] ||= '#'
|
25
|
+
if a_tag['href'] =~ %r{^(?:[a-z]+:)?//}
|
26
|
+
a_tag['target'] = '_blank'
|
27
|
+
a_tag['rel'] = 'nofollow noopener'
|
28
|
+
else
|
29
|
+
a_tag.remove_attribute('target')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
]
|
33
|
+
)
|
34
|
+
|
35
|
+
class << self
|
36
|
+
# In development and test, caching is usually disabled.
|
37
|
+
# Regardless, always store the onebox in a file cache to enable offline development,
|
38
|
+
# persistence between test runs, and to improve performance.
|
39
|
+
attr_accessor :onebox_views_cache
|
40
|
+
attr_accessor :onebox_data_cache
|
41
|
+
end
|
42
|
+
|
43
|
+
if Rails.env.development? || Rails.env.test?
|
44
|
+
self.onebox_views_cache = ActiveSupport::Cache::FileStore.new('tmp/cache/onebox-views')
|
45
|
+
self.onebox_data_cache = ActiveSupport::Cache::FileStore.new('tmp/cache/onebox-data')
|
46
|
+
end
|
47
|
+
|
48
|
+
def call
|
49
|
+
doc.css('a').each do |element|
|
50
|
+
url = element['href'].to_s
|
51
|
+
next unless url.present? && url == element.content && on_its_own_line?(element)
|
52
|
+
onebox_html = render_onebox_with_cache(url)
|
53
|
+
next if onebox_html.empty?
|
54
|
+
fixup_paragraph! element
|
55
|
+
element.swap onebox_html
|
56
|
+
end
|
57
|
+
doc
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def render_onebox_with_cache(url)
|
63
|
+
onebox_views_cache.fetch("onebox-views:#{url}#{':p' if context[:onebox_placeholders]}",
|
64
|
+
expires_in: context[:onebox_views_cache_expires_in] || 1.week) do
|
65
|
+
render_onebox(url)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def render_onebox(url)
|
70
|
+
preview = Onebox.preview(url, onebox_options(url))
|
71
|
+
if context[:onebox_placeholders]
|
72
|
+
%(<p><a href="#{ERB::Util.html_escape(url)}" target="_blank" rel="nofollow noopener">) \
|
73
|
+
"#{preview.placeholder_html}</a></p>"
|
74
|
+
else
|
75
|
+
preview.to_s.strip
|
76
|
+
end
|
77
|
+
rescue StandardError => e
|
78
|
+
Rails.logger.error("Onebox error for #{url}: #{e}")
|
79
|
+
<<~HTML
|
80
|
+
<p><a href="#{ERB::Util.html_escape(url)}" target="_blank" rel="nofollow noopener">#{ERB::Util.html_escape(url)}</p>
|
81
|
+
HTML
|
82
|
+
end
|
83
|
+
|
84
|
+
def onebox_options(_url)
|
85
|
+
{ cache: context[:onebox_data_cache] || self.class.onebox_data_cache || Rails.cache,
|
86
|
+
sanitize_config: SANITIZE_CONFIG }
|
87
|
+
end
|
88
|
+
|
89
|
+
def onebox_views_cache
|
90
|
+
context[:onebox_views_cache] || self.class.onebox_views_cache || Rails.cache
|
91
|
+
end
|
92
|
+
|
93
|
+
def on_its_own_line?(element)
|
94
|
+
siblings = element.parent.children
|
95
|
+
element_index = siblings.index(element)
|
96
|
+
all_blank_until_br?(siblings[0...element_index].reverse) &&
|
97
|
+
all_blank_until_br?(siblings[element_index + 1..-1])
|
98
|
+
end
|
99
|
+
|
100
|
+
def all_blank_until_br?(nodes)
|
101
|
+
nodes.take_while { |node| !node_name?(node, 'br') }
|
102
|
+
.all? { |node| node.text? && node.blank? }
|
103
|
+
end
|
104
|
+
|
105
|
+
def fixup_paragraph!(element)
|
106
|
+
# Can't have a div inside a paragraph, so split the paragraph
|
107
|
+
p = element.parent
|
108
|
+
return unless node_name?(p, 'p')
|
109
|
+
children_after = p.children[p.children.index(element) + 1..-1]
|
110
|
+
remove_leading_blanks! children_after
|
111
|
+
# Move the onebox out of and after the paragraph
|
112
|
+
p.add_next_sibling element
|
113
|
+
# Move all the elements after the onebox to a new paragraph
|
114
|
+
unless children_after.empty?
|
115
|
+
new_p = Nokogiri::XML::Node.new 'p', doc
|
116
|
+
element.add_next_sibling new_p
|
117
|
+
children_after.each { |child| new_p.add_child child }
|
118
|
+
end
|
119
|
+
# The original paragraph might have been split just after a <br> or whitespace, remove them if so:
|
120
|
+
remove_leading_blanks! p.children.reverse
|
121
|
+
p.remove if p.children.empty?
|
122
|
+
end
|
123
|
+
|
124
|
+
# @param children [Nokogiri::XML::NodeSet]
|
125
|
+
def remove_leading_blanks!(children)
|
126
|
+
to_remove = children.take_while do |c|
|
127
|
+
if node_name?(c, 'br') || c.text? && c.content.blank?
|
128
|
+
c.remove
|
129
|
+
true
|
130
|
+
else
|
131
|
+
c.content = c.content.lstrip
|
132
|
+
false
|
133
|
+
end
|
134
|
+
end
|
135
|
+
to_remove.each { |c| children.delete(c) }
|
136
|
+
end
|
137
|
+
|
138
|
+
def node_name?(node, node_name)
|
139
|
+
node && node.node_name && node.node_name.casecmp(node_name).zero?
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Thredded
|
4
|
+
module HtmlPipeline
|
5
|
+
# Wraps iframes with a <div class="thredded--embed-16-by-9"/>
|
6
|
+
class WrapIframesFilter < ::HTML::Pipeline::Filter
|
7
|
+
def call
|
8
|
+
doc.css('iframe').wrap('<div class="thredded--embed-16-by-9"/>')
|
9
|
+
doc
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Thredded
|
4
|
+
module ViewHooks
|
5
|
+
class Config
|
6
|
+
def initialize
|
7
|
+
# @type Array<Proc>
|
8
|
+
@before = []
|
9
|
+
# @type Array<Proc>
|
10
|
+
@replace = []
|
11
|
+
# @type Array<Proc>
|
12
|
+
@after = []
|
13
|
+
end
|
14
|
+
|
15
|
+
# @param [Proc] block
|
16
|
+
# @return [Array<Proc>]
|
17
|
+
def before(&block)
|
18
|
+
@before << block if block
|
19
|
+
@before
|
20
|
+
end
|
21
|
+
|
22
|
+
# @param [Proc] block
|
23
|
+
# @return [Array<Proc>]
|
24
|
+
def replace(&block)
|
25
|
+
@replace << block if block
|
26
|
+
@replace
|
27
|
+
end
|
28
|
+
|
29
|
+
# @param [Proc] block
|
30
|
+
# @return [Array<Proc>]
|
31
|
+
def after(&block)
|
32
|
+
@after << block if block
|
33
|
+
@after
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Thredded
|
4
|
+
module ViewHooks
|
5
|
+
class Renderer
|
6
|
+
# @param config [Thredded::ViewHooks::Config]
|
7
|
+
def initialize(view_context, config)
|
8
|
+
@view_context = view_context
|
9
|
+
@config = config
|
10
|
+
end
|
11
|
+
|
12
|
+
# @return [String]
|
13
|
+
def render(**args, &original_content)
|
14
|
+
@view_context.safe_join [
|
15
|
+
*@config.before,
|
16
|
+
*(@config.replace.presence || [original_content]),
|
17
|
+
*@config.after,
|
18
|
+
].map { |proc| render_proc(**args, &proc) }, ''
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def render_proc(**args, &proc)
|
24
|
+
@view_context.capture do
|
25
|
+
@view_context.instance_exec(**args, &proc)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
/*!
|
2
|
+
Autosize 4.0.0
|
3
|
+
license: MIT
|
4
|
+
http://www.jacklmoore.com/autosize
|
5
|
+
*/
|
6
|
+
!function(e,t){if("function"==typeof define&&define.amd)define(["exports","module"],t);else if("undefined"!=typeof exports&&"undefined"!=typeof module)t(exports,module);else{var n={exports:{}};t(n.exports,n),e.autosize=n.exports}}(this,function(e,t){"use strict";function n(e){function t(){var t=window.getComputedStyle(e,null);"vertical"===t.resize?e.style.resize="none":"both"===t.resize&&(e.style.resize="horizontal"),s="content-box"===t.boxSizing?-(parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)):parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),isNaN(s)&&(s=0),l()}function n(t){var n=e.style.width;e.style.width="0px",e.offsetWidth,e.style.width=n,e.style.overflowY=t}function o(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}function r(){var t=e.style.height,n=o(e),r=document.documentElement&&document.documentElement.scrollTop;e.style.height="";var i=e.scrollHeight+s;return 0===e.scrollHeight?void(e.style.height=t):(e.style.height=i+"px",u=e.clientWidth,n.forEach(function(e){e.node.scrollTop=e.scrollTop}),void(r&&(document.documentElement.scrollTop=r)))}function l(){r();var t=Math.round(parseFloat(e.style.height)),o=window.getComputedStyle(e,null),i="content-box"===o.boxSizing?Math.round(parseFloat(o.height)):e.offsetHeight;if(i!==t?"hidden"===o.overflowY&&(n("scroll"),r(),i="content-box"===o.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight):"hidden"!==o.overflowY&&(n("hidden"),r(),i="content-box"===o.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight),a!==i){a=i;var l=d("autosize:resized");try{e.dispatchEvent(l)}catch(e){}}}if(e&&e.nodeName&&"TEXTAREA"===e.nodeName&&!i.has(e)){var s=null,u=e.clientWidth,a=null,c=function(){e.clientWidth!==u&&l()},p=function(t){window.removeEventListener("resize",c,!1),e.removeEventListener("input",l,!1),e.removeEventListener("keyup",l,!1),e.removeEventListener("autosize:destroy",p,!1),e.removeEventListener("autosize:update",l,!1),Object.keys(t).forEach(function(n){e.style[n]=t[n]}),i.delete(e)}.bind(e,{height:e.style.height,resize:e.style.resize,overflowY:e.style.overflowY,overflowX:e.style.overflowX,wordWrap:e.style.wordWrap});e.addEventListener("autosize:destroy",p,!1),"onpropertychange"in e&&"oninput"in e&&e.addEventListener("keyup",l,!1),window.addEventListener("resize",c,!1),e.addEventListener("input",l,!1),e.addEventListener("autosize:update",l,!1),e.style.overflowX="hidden",e.style.wordWrap="break-word",i.set(e,{destroy:p,update:l}),t()}}function o(e){var t=i.get(e);t&&t.destroy()}function r(e){var t=i.get(e);t&&t.update()}var i="function"==typeof Map?new Map:function(){var e=[],t=[];return{has:function(t){return e.indexOf(t)>-1},get:function(n){return t[e.indexOf(n)]},set:function(n,o){e.indexOf(n)===-1&&(e.push(n),t.push(o))},delete:function(n){var o=e.indexOf(n);o>-1&&(e.splice(o,1),t.splice(o,1))}}}(),d=function(e){return new Event(e,{bubbles:!0})};try{new Event("test")}catch(e){d=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!1),t}}var l=null;"undefined"==typeof window||"function"!=typeof window.getComputedStyle?(l=function(e){return e},l.destroy=function(e){return e},l.update=function(e){return e}):(l=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return n(e,t)}),e},l.destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],o),e},l.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],r),e}),t.exports=l});
|
@@ -0,0 +1,2 @@
|
|
1
|
+
/** https://unpkg.com/textcomplete@0.14.5/dist/textcomplete.min.js **/
|
2
|
+
!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(2),s=(function(e){e&&e.__esModule}(o),function(){function e(t,n,i){r(this,e),this.data=t,this.term=n,this.strategy=i}return i(e,[{key:"replace",value:function(e,t){var n=this.strategy.replace(this.data);if(null!==n){Array.isArray(n)&&(t=n[1]+t,n=n[0]);var r=this.strategy.matchText(e);if(r)return n=n.replace(/\$&/g,r[0]).replace(/\$(\d)/g,function(e,t){return r[parseInt(t,10)]}),[[e.slice(0,r.index),n,e.slice(r.index+r[0].length)].join(""),t]}}},{key:"render",value:function(){return this.strategy.template(this.data,this.term)}}]),e}());t.default=s},function(e){"use strict";function t(){}function n(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function r(){this._events=new t,this._eventsCount=0}var i=Object.prototype.hasOwnProperty,o="~";Object.create&&(t.prototype=Object.create(null),(new t).__proto__||(o=!1)),r.prototype.eventNames=function(){var e,t,n=[];if(0===this._eventsCount)return n;for(t in e=this._events)i.call(e,t)&&n.push(o?t.slice(1):t);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},r.prototype.listeners=function(e,t){var n=o?o+e:e,r=this._events[n];if(t)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,u=new Array(s);i<s;i++)u[i]=r[i].fn;return u},r.prototype.emit=function(e,t,n,r,i,s){var u=o?o+e:e;if(!this._events[u])return!1;var a,l,c=this._events[u],h=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),h){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,r),!0;case 5:return c.fn.call(c.context,t,n,r,i),!0;case 6:return c.fn.call(c.context,t,n,r,i,s),!0}for(l=1,a=new Array(h-1);l<h;l++)a[l-1]=arguments[l];c.fn.apply(c.context,a)}else{var f,d=c.length;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),h){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,n);break;case 4:c[l].fn.call(c[l].context,t,n,r);break;default:if(!a)for(f=1,a=new Array(h-1);f<h;f++)a[f-1]=arguments[f];c[l].fn.apply(c[l].context,a)}}return!0},r.prototype.on=function(e,t,r){var i=new n(t,r||this),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.once=function(e,t,r){var i=new n(t,r||this,!0),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.removeListener=function(e,n,r,i){var s=o?o+e:e;if(!this._events[s])return this;if(!n)return 0==--this._eventsCount?this._events=new t:delete this._events[s],this;var u=this._events[s];if(u.fn)u.fn!==n||i&&!u.once||r&&u.context!==r||(0==--this._eventsCount?this._events=new t:delete this._events[s]);else{for(var a=0,l=[],c=u.length;a<c;a++)(u[a].fn!==n||i&&!u[a].once||r&&u[a].context!==r)&&l.push(u[a]);l.length?this._events[s]=1===l.length?l[0]:l:0==--this._eventsCount?this._events=new t:delete this._events[s]}return this},r.prototype.removeAllListeners=function(e){var n;return e?(n=o?o+e:e,this._events[n]&&(0==--this._eventsCount?this._events=new t:delete this._events[n])):(this._events=new t,this._eventsCount=0),this},r.prototype.off=r.prototype.removeListener,r.prototype.addListener=r.prototype.on,r.prototype.setMaxListeners=function(){return this},r.prefixed=o,r.EventEmitter=r,e.exports=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e){return e}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(10),u=function(e){return e&&e.__esModule?e:{default:e}}(s),a=function(){function e(t){r(this,e),this.props=t,this.cache=t.cache?{}:null}return o(e,[{key:"destroy",value:function(){return this.cache=null,this}},{key:"buildQuery",value:function(e){if("function"==typeof this.props.context){var t=this.props.context(e);if("string"==typeof t)e=t;else if(!t)return null}var n=this.matchText(e);return n?new u.default(this,n[this.index],n):null}},{key:"search",value:function(e,t,n){this.cache?this.searchWithCache(e,t,n):this.props.search(e,t,n)}},{key:"replace",value:function(e){return this.props.replace(e)}},{key:"searchWithCache",value:function(e,t,n){var r=this;this.cache&&this.cache[e]?t(this.cache[e]):this.props.search(e,function(n){r.cache&&(r.cache[e]=n),t(n)},n)}},{key:"matchText",value:function(e){return"function"==typeof this.match?this.match(e):e.match(this.match)}},{key:"match",get:function(){return this.props.match}},{key:"index",get:function(){return"number"==typeof this.props.index?this.props.index:2}},{key:"template",get:function(){return this.props.template||i}}]),e}();t.default=a},function(e,t){"use strict";function n(e){var t=e.getBoundingClientRect(),n=e.ownerDocument,r=n.defaultView,i=n.documentElement,o={top:t.top+r.pageYOffset,left:t.left+r.pageXOffset};return i&&(o.top-=i.clientTop,o.left-=i.clientLeft),o}function r(e){return e>=o&&e<=s}function i(e){var t=window.getComputedStyle(e);if(r(t.lineHeight.charCodeAt(0)))return r(t.lineHeight.charCodeAt(t.lineHeight.length-1))?parseFloat(t.lineHeight)*parseFloat(t.fontSize):parseFloat(t.lineHeight);var n=document.body;if(!n)return 0;var i=document.createElement(e.nodeName);i.innerHTML=" ",i.style.fontSize=t.fontSize,i.style.fontFamily=t.fontFamily,n.appendChild(i);var o=i.offsetHeight;return n.removeChild(i),o}Object.defineProperty(t,"__esModule",{value:!0}),t.calculateElementOffset=n,t.getLineHeightPx=i;var o=(t.createCustomEvent=function(){return"function"==typeof window.CustomEvent?function(e,t){return new document.defaultView.CustomEvent(e,{cancelable:t&&t.cancelable||!1,detail:t&&t.detail||void 0})}:function(e,t){var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,!1,t&&t.cancelable||!1,t&&t.detail||void 0),n}}(),"0".charCodeAt(0)),s="9".charCodeAt(0)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(3),h=n(0),f=(r(h),function(e){function t(){return i(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return s(t,e),u(t,[{key:"destroy",value:function(){return this}},{key:"applySearchResult",value:function(){throw new Error("Not implemented.")}},{key:"getCursorOffset",value:function(){throw new Error("Not implemented.")}},{key:"getBeforeCursor",value:function(){throw new Error("Not implemented.")}},{key:"emitMoveEvent",value:function(e){var t=(0,c.createCustomEvent)("move",{cancelable:!0,detail:{code:e}});return this.emit("move",t),t}},{key:"emitEnterEvent",value:function(){var e=(0,c.createCustomEvent)("enter",{cancelable:!0});return this.emit("enter",e),e}},{key:"emitChangeEvent",value:function(){var e=(0,c.createCustomEvent)("change",{detail:{beforeCursor:this.getBeforeCursor()}});return this.emit("change",e),e}},{key:"emitEscEvent",value:function(){var e=(0,c.createCustomEvent)("esc",{cancelable:!0});return this.emit("esc",e),e}},{key:"getCode",value:function(e){return 9===e.keyCode?"ENTER":13===e.keyCode?"ENTER":27===e.keyCode?"ESC":38===e.keyCode?"UP":40===e.keyCode?"DOWN":78===e.keyCode&&e.ctrlKey?"DOWN":80===e.keyCode&&e.ctrlKey?"UP":"OTHER"}}]),t}(l.default));t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(11),h=r(c),f=n(0),d=(r(f),n(3)),p="dropdown-menu textcomplete-dropdown",v=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));n.shown=!1,n.items=[],n.activeItem=null,n.footer=e.footer,n.header=e.header,n.maxCount=e.maxCount||10,n.el.className=e.className||p,n.rotate=!e.hasOwnProperty("rotate")||e.rotate,n.placement=e.placement;var r=e.style;return r&&Object.keys(r).forEach(function(e){n.el.style[e]=r[e]}),n}return s(t,e),u(t,null,[{key:"createElement",value:function(){var e=document.createElement("ul"),t=e.style;t.display="none",t.position="absolute",t.zIndex="10000";var n=document.body;return n&&n.appendChild(e),e}}]),u(t,[{key:"destroy",value:function(){var e=this.el.parentNode;return e&&e.removeChild(this.el),this.clear()._el=null,this}},{key:"render",value:function(e,t){var n=(0,d.createCustomEvent)("render",{cancelable:!0});if(this.emit("render",n),n.defaultPrevented)return this;var r=e.map(function(e){return e.data}),i=e.slice(0,this.maxCount||e.length).map(function(e){return new h.default(e)});return this.clear().setStrategyId(e[0]).renderEdge(r,"header").append(i).renderEdge(r,"footer").setOffset(t).show(),this.emit("rendered",(0,d.createCustomEvent)("rendered")),this}},{key:"deactivate",value:function(){return this.hide().clear()}},{key:"select",value:function(e){var t={searchResult:e.searchResult},n=(0,d.createCustomEvent)("select",{cancelable:!0,detail:t});return this.emit("select",n),n.defaultPrevented?this:(this.deactivate(),this.emit("selected",(0,d.createCustomEvent)("selected",{detail:t})),this)}},{key:"up",value:function(e){return this.shown?this.moveActiveItem("prev",e):this}},{key:"down",value:function(e){return this.shown?this.moveActiveItem("next",e):this}},{key:"getActiveItem",value:function(){return this.activeItem}},{key:"append",value:function(e){var t=this,n=document.createDocumentFragment();return e.forEach(function(e){t.items.push(e),e.appended(t),n.appendChild(e.el)}),this.el.appendChild(n),this}},{key:"setOffset",value:function(e){if(e.left?this.el.style.left=e.left+"px":e.right&&(this.el.style.right=e.right+"px"),this.isPlacementTop()){var t=document.documentElement;t&&(this.el.style.bottom=t.clientHeight-e.top+e.lineHeight+"px")}else this.el.style.top=e.top+"px";return this}},{key:"show",value:function(){if(!this.shown){var e=(0,d.createCustomEvent)("show",{cancelable:!0});if(this.emit("show",e),e.defaultPrevented)return this;this.el.style.display="block",this.shown=!0,this.emit("shown",(0,d.createCustomEvent)("shown"))}return this}},{key:"hide",value:function(){if(this.shown){var e=(0,d.createCustomEvent)("hide",{cancelable:!0});if(this.emit("hide",e),e.defaultPrevented)return this;this.el.style.display="none",this.shown=!1,this.emit("hidden",(0,d.createCustomEvent)("hidden"))}return this}},{key:"clear",value:function(){return this.el.innerHTML="",this.items.forEach(function(e){return e.destroy()}),this.items=[],this}},{key:"moveActiveItem",value:function(e,t){var n="next"===e?this.activeItem?this.activeItem.next:this.items[0]:this.activeItem?this.activeItem.prev:this.items[this.items.length-1];return n&&(n.activate(),t.preventDefault()),this}},{key:"setStrategyId",value:function(e){var t=e&&e.strategy.props.id;return t?this.el.setAttribute("data-strategy",t):this.el.removeAttribute("data-strategy"),this}},{key:"renderEdge",value:function(e,t){var n=("header"===t?this.header:this.footer)||"",r="function"==typeof n?n(e):n,i=document.createElement("li");return i.classList.add("textcomplete-"+t),i.innerHTML=r,this.el.appendChild(i),this}},{key:"isPlacementTop",value:function(){return"top"===this.placement}},{key:"el",get:function(){return this._el||(this._el=t.createElement()),this._el}}]),t}(l.default);t.default=v},function(e,t,n){"use strict";(function(e){function t(e){return e&&e.__esModule?e:{default:e}}var r=n(8),i=t(r),o=n(12),s=t(o),u=void 0;u=e.Textcomplete&&e.Textcomplete.editors?e.Textcomplete.editors:{},u.Textarea=s.default,e.Textcomplete=i.default,e.Textcomplete.editors=u}).call(t,n(7))},function(e){var t;t=function(){return this}();try{t=t||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(9),l=r(a),c=n(4),h=(r(c),n(5)),f=r(h),d=n(2),p=r(d),v=n(0),y=(r(v),n(1)),m=r(y),g=["handleChange","handleEnter","handleEsc","handleHit","handleMove","handleSelect"],b=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.completer=new l.default,r.isQueryInFlight=!1,r.nextPendingQuery=null,r.dropdown=new f.default(n.dropdown||{}),r.editor=e,r.options=n,g.forEach(function(e){r[e]=r[e].bind(r)}),r.startListening(),r}return s(t,e),u(t,[{key:"destroy",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this.completer.destroy(),this.dropdown.destroy(),e&&this.editor.destroy(),this.stopListening(),this}},{key:"register",value:function(e){var t=this;return e.forEach(function(e){t.completer.registerStrategy(new p.default(e))}),this}},{key:"trigger",value:function(e){return this.isQueryInFlight?this.nextPendingQuery=e:(this.isQueryInFlight=!0,this.nextPendingQuery=null,this.completer.run(e)),this}},{key:"handleHit",value:function(e){var t=e.searchResults;t.length?this.dropdown.render(t,this.editor.getCursorOffset()):this.dropdown.deactivate(),this.isQueryInFlight=!1,null!==this.nextPendingQuery&&this.trigger(this.nextPendingQuery)}},{key:"handleMove",value:function(e){"UP"===e.detail.code?this.dropdown.up(e):this.dropdown.down(e)}},{key:"handleEnter",value:function(e){var t=this.dropdown.getActiveItem();t?(this.dropdown.select(t),e.preventDefault()):this.dropdown.deactivate()}},{key:"handleEsc",value:function(e){this.dropdown.shown&&(this.dropdown.deactivate(),e.preventDefault())}},{key:"handleChange",value:function(e){null!=e.detail.beforeCursor?this.trigger(e.detail.beforeCursor):this.dropdown.deactivate()}},{key:"handleSelect",value:function(e){this.emit("select",e),e.defaultPrevented||this.editor.applySearchResult(e.detail.searchResult)}},{key:"startListening",value:function(){var e=this;this.editor.on("move",this.handleMove).on("enter",this.handleEnter).on("esc",this.handleEsc).on("change",this.handleChange),this.dropdown.on("select",this.handleSelect),["show","shown","render","rendered","selected","hidden","hide"].forEach(function(t){e.dropdown.on(t,function(){return e.emit(t)})}),this.completer.on("hit",this.handleHit)}},{key:"stopListening",value:function(){this.completer.removeAllListeners(),this.dropdown.removeAllListeners(),this.editor.removeListener("move",this.handleMove).removeListener("enter",this.handleEnter).removeListener("esc",this.handleEsc).removeListener("change",this.handleChange)}}]),t}(m.default);t.default=b},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),l=r(a),c=n(2),h=(r(c),n(0)),f=(r(h),["handleQueryResult"]),d=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.strategies=[],f.forEach(function(t){e[t]=e[t].bind(e)}),e}return s(t,e),u(t,[{key:"destroy",value:function(){return this.strategies.forEach(function(e){return e.destroy()}),this}},{key:"registerStrategy",value:function(e){return this.strategies.push(e),this}},{key:"run",value:function(e){var t=this.extractQuery(e);t?t.execute(this.handleQueryResult):this.handleQueryResult([])}},{key:"extractQuery",value:function(e){for(var t=0;t<this.strategies.length;t++){var n=this.strategies[t].buildQuery(e);if(n)return n}return null}},{key:"handleQueryResult",value:function(e){this.emit("hit",{searchResults:e})}}]),t}(l.default);t.default=d},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(0),u=r(s),a=n(2),l=(r(a),function(){function e(t,n,r){i(this,e),this.strategy=t,this.term=n,this.match=r}return o(e,[{key:"execute",value:function(e){var t=this;this.strategy.search(this.term,function(n){e(n.map(function(e){return new u.default(e,t.term,t.strategy)}))},this.match)}}]),e}());t.default=l},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.CLASS_NAME=void 0;var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(5),u=(r(s),n(0)),a=(r(u),t.CLASS_NAME="textcomplete-item"),l=a+" active",c=["onClick","onMouseover"],h=function(){function e(t){var n=this;i(this,e),this.searchResult=t,this.active=!1,c.forEach(function(e){n[e]=n[e].bind(n)})}return o(e,[{key:"destroy",value:function(){this.el.removeEventListener("mousedown",this.onClick,!1),this.el.removeEventListener("mouseover",this.onMouseover,!1),this.el.removeEventListener("touchstart",this.onClick,!1),this.active&&(this.dropdown.activeItem=null),this._el=null}},{key:"appended",value:function(e){this.dropdown=e,this.siblings=e.items,this.index=this.siblings.length-1}},{key:"activate",value:function(){if(!this.active){var e=this.dropdown.getActiveItem();e&&e.deactivate(),this.dropdown.activeItem=this,this.active=!0,this.el.className=l}return this}},{key:"deactivate",value:function(){return this.active&&(this.active=!1,this.el.className=a,this.dropdown.activeItem=null),this}},{key:"onClick",value:function(e){e.preventDefault(),this.dropdown.select(this)}},{key:"onMouseover",value:function(){this.activate()}},{key:"el",get:function(){if(this._el)return this._el;var e=document.createElement("li");e.className=this.active?l:a;var t=document.createElement("a");return t.innerHTML=this.searchResult.render(),e.appendChild(t),this._el=e,e.addEventListener("mousedown",this.onClick),e.addEventListener("mouseover",this.onMouseover),e.addEventListener("touchstart",this.onClick),e}},{key:"next",get:function(){var e=void 0;if(this.index===this.siblings.length-1){if(!this.dropdown.rotate)return null;e=0}else e=this.index+1;return this.siblings[e]}},{key:"prev",get:function(){var e=void 0;if(0===this.index){if(!this.dropdown.rotate)return null;e=this.siblings.length-1}else e=this.index-1;return this.siblings[e]}}]),e}();t.default=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var s=i.get;if(void 0!==s)return s.call(r)},l=n(13),c=r(l),h=n(4),f=r(h),d=n(3),p=n(0),v=(r(p),n(14)),y=["onInput","onKeydown"],m=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.el=e,y.forEach(function(e){n[e]=n[e].bind(n)}),n.startListening(),n}return s(t,e),u(t,[{key:"destroy",value:function(){return a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"destroy",this).call(this),this.stopListening(),this.el=null,this}},{key:"applySearchResult",value:function(e){var t=this.getBeforeCursor();if(null!=t){var n=e.replace(t,this.getAfterCursor());this.el.focus(),Array.isArray(n)&&((0,c.default)(this.el,n[0],n[1]),this.el.dispatchEvent(new Event("input")))}}},{key:"getCursorOffset",value:function(){var e=(0,d.calculateElementOffset)(this.el),t=this.getElScroll(),n=this.getCursorPosition(),r=(0,d.getLineHeightPx)(this.el),i=e.top-t.top+n.top+r,o=e.left-t.left+n.left;return"rtl"!==this.el.dir?{top:i,left:o,lineHeight:r}:{top:i,right:document.documentElement?document.documentElement.clientWidth-o:0,lineHeight:r}}},{key:"getBeforeCursor",value:function(){return this.el.selectionStart!==this.el.selectionEnd?null:this.el.value.substring(0,this.el.selectionEnd)}},{key:"getAfterCursor",value:function(){return this.el.value.substring(this.el.selectionEnd)}},{key:"getElScroll",value:function(){return{top:this.el.scrollTop,left:this.el.scrollLeft}}},{key:"getCursorPosition",value:function(){return v(this.el,this.el.selectionEnd)}},{key:"onInput",value:function(){this.emitChangeEvent()}},{key:"onKeydown",value:function(e){var t=this.getCode(e),n=void 0;"UP"===t||"DOWN"===t?n=this.emitMoveEvent(t):"ENTER"===t?n=this.emitEnterEvent():"ESC"===t&&(n=this.emitEscEvent()),n&&n.defaultPrevented&&e.preventDefault()}},{key:"startListening",value:function(){this.el.addEventListener("input",this.onInput),this.el.addEventListener("keydown",this.onKeydown)}},{key:"stopListening",value:function(){this.el.removeEventListener("input",this.onInput),this.el.removeEventListener("keydown",this.onKeydown)}}]),t}(f.default);t.default=m},function(e,t){"use strict";function n(){if("undefined"!=typeof Event)return new Event("input",{bubbles:!0,cancelable:!0});var e=document.createEvent("Event");return e.initEvent("input",!0,!0),e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){for(var i=e.value,o=t+(r||""),s=document.activeElement,u=0,a=0;u<i.length&&u<o.length&&i[u]===o[u];)u++;for(;i.length-a-1>=0&&o.length-a-1>=0&&i[i.length-a-1]===o[o.length-a-1];)a++;u=Math.min(u,Math.min(i.length,o.length)-a),e.setSelectionRange(u,i.length-a);var l=o.substring(u,o.length-a);return e.focus(),document.execCommand("insertText",!1,l)||(e.value=o,e.dispatchEvent(n())),e.setSelectionRange(t.length,t.length),s&&s.focus(),e}},function(e){!function(){function t(e,t,o){if(!r)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");var s=o&&o.debug||!1;if(s){var u=document.querySelector("#input-textarea-caret-position-mirror-div");u&&u.parentNode.removeChild(u)}var a=document.createElement("div");a.id="input-textarea-caret-position-mirror-div",document.body.appendChild(a);var l=a.style,c=window.getComputedStyle?getComputedStyle(e):e.currentStyle;l.whiteSpace="pre-wrap","INPUT"!==e.nodeName&&(l.wordWrap="break-word"),l.position="absolute",s||(l.visibility="hidden"),n.forEach(function(e){l[e]=c[e]}),i?e.scrollHeight>parseInt(c.height)&&(l.overflowY="scroll"):l.overflow="hidden",a.textContent=e.value.substring(0,t),"INPUT"===e.nodeName&&(a.textContent=a.textContent.replace(/\s/g," "));var h=document.createElement("span");h.textContent=e.value.substring(t)||".",a.appendChild(h);var f={top:h.offsetTop+parseInt(c.borderTopWidth),left:h.offsetLeft+parseInt(c.borderLeftWidth)};return s?h.style.backgroundColor="#aaa":document.body.removeChild(a),f}var n=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],r="undefined"!=typeof window,i=r&&null!=window.mozInnerScreenX;void 0!==e&&void 0!==e.exports?e.exports=t:r&&(window.getCaretCoordinates=t)}()}]);
|
metadata
ADDED
@@ -0,0 +1,1035 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: threddedDANIEL
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.14.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Joel Oliveira
|
8
|
+
- Gleb Mazovetskiy
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2018-06-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: pundit
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 1.1.0
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 1.1.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: active_record_union
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 1.3.0
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 1.3.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: db_text_search
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.2.0
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.2.0
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: friendly_id
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: htmlentities
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: kaminari
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: nokogiri
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rails
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 4.2.10
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 4.2.10
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rb-gravatar
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :runtime
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: inline_svg
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :runtime
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: kramdown
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
type: :runtime
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: onebox
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - "~>"
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '1.8'
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: 1.8.13
|
178
|
+
type: :runtime
|
179
|
+
prerelease: false
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - "~>"
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '1.8'
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 1.8.13
|
188
|
+
- !ruby/object:Gem::Dependency
|
189
|
+
name: html-pipeline
|
190
|
+
requirement: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
type: :runtime
|
196
|
+
prerelease: false
|
197
|
+
version_requirements: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
- !ruby/object:Gem::Dependency
|
203
|
+
name: rinku
|
204
|
+
requirement: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
type: :runtime
|
210
|
+
prerelease: false
|
211
|
+
version_requirements: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
- !ruby/object:Gem::Dependency
|
217
|
+
name: gemoji
|
218
|
+
requirement: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - "~>"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 2.1.0
|
223
|
+
type: :runtime
|
224
|
+
prerelease: false
|
225
|
+
version_requirements: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: 2.1.0
|
230
|
+
- !ruby/object:Gem::Dependency
|
231
|
+
name: sanitize
|
232
|
+
requirement: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
237
|
+
type: :runtime
|
238
|
+
prerelease: false
|
239
|
+
version_requirements: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
- !ruby/object:Gem::Dependency
|
245
|
+
name: sass
|
246
|
+
requirement: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: 3.4.21
|
251
|
+
type: :runtime
|
252
|
+
prerelease: false
|
253
|
+
version_requirements: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: 3.4.21
|
258
|
+
- !ruby/object:Gem::Dependency
|
259
|
+
name: autoprefixer-rails
|
260
|
+
requirement: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
265
|
+
type: :runtime
|
266
|
+
prerelease: false
|
267
|
+
version_requirements: !ruby/object:Gem::Requirement
|
268
|
+
requirements:
|
269
|
+
- - ">="
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
version: '0'
|
272
|
+
- !ruby/object:Gem::Dependency
|
273
|
+
name: timeago_js
|
274
|
+
requirement: !ruby/object:Gem::Requirement
|
275
|
+
requirements:
|
276
|
+
- - ">="
|
277
|
+
- !ruby/object:Gem::Version
|
278
|
+
version: '0'
|
279
|
+
type: :runtime
|
280
|
+
prerelease: false
|
281
|
+
version_requirements: !ruby/object:Gem::Requirement
|
282
|
+
requirements:
|
283
|
+
- - ">="
|
284
|
+
- !ruby/object:Gem::Version
|
285
|
+
version: '0'
|
286
|
+
- !ruby/object:Gem::Dependency
|
287
|
+
name: sprockets-es6
|
288
|
+
requirement: !ruby/object:Gem::Requirement
|
289
|
+
requirements:
|
290
|
+
- - ">="
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: '0'
|
293
|
+
type: :runtime
|
294
|
+
prerelease: false
|
295
|
+
version_requirements: !ruby/object:Gem::Requirement
|
296
|
+
requirements:
|
297
|
+
- - ">="
|
298
|
+
- !ruby/object:Gem::Version
|
299
|
+
version: '0'
|
300
|
+
- !ruby/object:Gem::Dependency
|
301
|
+
name: capybara
|
302
|
+
requirement: !ruby/object:Gem::Requirement
|
303
|
+
requirements:
|
304
|
+
- - "~>"
|
305
|
+
- !ruby/object:Gem::Version
|
306
|
+
version: '2.4'
|
307
|
+
type: :development
|
308
|
+
prerelease: false
|
309
|
+
version_requirements: !ruby/object:Gem::Requirement
|
310
|
+
requirements:
|
311
|
+
- - "~>"
|
312
|
+
- !ruby/object:Gem::Version
|
313
|
+
version: '2.4'
|
314
|
+
- !ruby/object:Gem::Dependency
|
315
|
+
name: selenium-webdriver
|
316
|
+
requirement: !ruby/object:Gem::Requirement
|
317
|
+
requirements:
|
318
|
+
- - ">="
|
319
|
+
- !ruby/object:Gem::Version
|
320
|
+
version: 3.5.0
|
321
|
+
type: :development
|
322
|
+
prerelease: false
|
323
|
+
version_requirements: !ruby/object:Gem::Requirement
|
324
|
+
requirements:
|
325
|
+
- - ">="
|
326
|
+
- !ruby/object:Gem::Version
|
327
|
+
version: 3.5.0
|
328
|
+
- !ruby/object:Gem::Dependency
|
329
|
+
name: webmock
|
330
|
+
requirement: !ruby/object:Gem::Requirement
|
331
|
+
requirements:
|
332
|
+
- - ">="
|
333
|
+
- !ruby/object:Gem::Version
|
334
|
+
version: '0'
|
335
|
+
type: :development
|
336
|
+
prerelease: false
|
337
|
+
version_requirements: !ruby/object:Gem::Requirement
|
338
|
+
requirements:
|
339
|
+
- - ">="
|
340
|
+
- !ruby/object:Gem::Version
|
341
|
+
version: '0'
|
342
|
+
- !ruby/object:Gem::Dependency
|
343
|
+
name: database_cleaner
|
344
|
+
requirement: !ruby/object:Gem::Requirement
|
345
|
+
requirements:
|
346
|
+
- - ">="
|
347
|
+
- !ruby/object:Gem::Version
|
348
|
+
version: '0'
|
349
|
+
type: :development
|
350
|
+
prerelease: false
|
351
|
+
version_requirements: !ruby/object:Gem::Requirement
|
352
|
+
requirements:
|
353
|
+
- - ">="
|
354
|
+
- !ruby/object:Gem::Version
|
355
|
+
version: '0'
|
356
|
+
- !ruby/object:Gem::Dependency
|
357
|
+
name: factory_bot_rails
|
358
|
+
requirement: !ruby/object:Gem::Requirement
|
359
|
+
requirements:
|
360
|
+
- - ">="
|
361
|
+
- !ruby/object:Gem::Version
|
362
|
+
version: '0'
|
363
|
+
type: :development
|
364
|
+
prerelease: false
|
365
|
+
version_requirements: !ruby/object:Gem::Requirement
|
366
|
+
requirements:
|
367
|
+
- - ">="
|
368
|
+
- !ruby/object:Gem::Version
|
369
|
+
version: '0'
|
370
|
+
- !ruby/object:Gem::Dependency
|
371
|
+
name: faker
|
372
|
+
requirement: !ruby/object:Gem::Requirement
|
373
|
+
requirements:
|
374
|
+
- - ">="
|
375
|
+
- !ruby/object:Gem::Version
|
376
|
+
version: 1.6.2
|
377
|
+
type: :development
|
378
|
+
prerelease: false
|
379
|
+
version_requirements: !ruby/object:Gem::Requirement
|
380
|
+
requirements:
|
381
|
+
- - ">="
|
382
|
+
- !ruby/object:Gem::Version
|
383
|
+
version: 1.6.2
|
384
|
+
- !ruby/object:Gem::Dependency
|
385
|
+
name: launchy
|
386
|
+
requirement: !ruby/object:Gem::Requirement
|
387
|
+
requirements:
|
388
|
+
- - ">="
|
389
|
+
- !ruby/object:Gem::Version
|
390
|
+
version: '0'
|
391
|
+
type: :development
|
392
|
+
prerelease: false
|
393
|
+
version_requirements: !ruby/object:Gem::Requirement
|
394
|
+
requirements:
|
395
|
+
- - ">="
|
396
|
+
- !ruby/object:Gem::Version
|
397
|
+
version: '0'
|
398
|
+
- !ruby/object:Gem::Dependency
|
399
|
+
name: rspec-rails
|
400
|
+
requirement: !ruby/object:Gem::Requirement
|
401
|
+
requirements:
|
402
|
+
- - ">="
|
403
|
+
- !ruby/object:Gem::Version
|
404
|
+
version: 3.5.0
|
405
|
+
type: :development
|
406
|
+
prerelease: false
|
407
|
+
version_requirements: !ruby/object:Gem::Requirement
|
408
|
+
requirements:
|
409
|
+
- - ">="
|
410
|
+
- !ruby/object:Gem::Version
|
411
|
+
version: 3.5.0
|
412
|
+
- !ruby/object:Gem::Dependency
|
413
|
+
name: simplecov
|
414
|
+
requirement: !ruby/object:Gem::Requirement
|
415
|
+
requirements:
|
416
|
+
- - ">="
|
417
|
+
- !ruby/object:Gem::Version
|
418
|
+
version: '0'
|
419
|
+
type: :development
|
420
|
+
prerelease: false
|
421
|
+
version_requirements: !ruby/object:Gem::Requirement
|
422
|
+
requirements:
|
423
|
+
- - ">="
|
424
|
+
- !ruby/object:Gem::Version
|
425
|
+
version: '0'
|
426
|
+
- !ruby/object:Gem::Dependency
|
427
|
+
name: rubocop
|
428
|
+
requirement: !ruby/object:Gem::Requirement
|
429
|
+
requirements:
|
430
|
+
- - '='
|
431
|
+
- !ruby/object:Gem::Version
|
432
|
+
version: 0.49.1
|
433
|
+
type: :development
|
434
|
+
prerelease: false
|
435
|
+
version_requirements: !ruby/object:Gem::Requirement
|
436
|
+
requirements:
|
437
|
+
- - '='
|
438
|
+
- !ruby/object:Gem::Version
|
439
|
+
version: 0.49.1
|
440
|
+
- !ruby/object:Gem::Dependency
|
441
|
+
name: rails-i18n
|
442
|
+
requirement: !ruby/object:Gem::Requirement
|
443
|
+
requirements:
|
444
|
+
- - ">="
|
445
|
+
- !ruby/object:Gem::Version
|
446
|
+
version: '0'
|
447
|
+
type: :development
|
448
|
+
prerelease: false
|
449
|
+
version_requirements: !ruby/object:Gem::Requirement
|
450
|
+
requirements:
|
451
|
+
- - ">="
|
452
|
+
- !ruby/object:Gem::Version
|
453
|
+
version: '0'
|
454
|
+
- !ruby/object:Gem::Dependency
|
455
|
+
name: kaminari-i18n
|
456
|
+
requirement: !ruby/object:Gem::Requirement
|
457
|
+
requirements:
|
458
|
+
- - ">="
|
459
|
+
- !ruby/object:Gem::Version
|
460
|
+
version: '0'
|
461
|
+
type: :development
|
462
|
+
prerelease: false
|
463
|
+
version_requirements: !ruby/object:Gem::Requirement
|
464
|
+
requirements:
|
465
|
+
- - ">="
|
466
|
+
- !ruby/object:Gem::Version
|
467
|
+
version: '0'
|
468
|
+
- !ruby/object:Gem::Dependency
|
469
|
+
name: http_accept_language
|
470
|
+
requirement: !ruby/object:Gem::Requirement
|
471
|
+
requirements:
|
472
|
+
- - ">="
|
473
|
+
- !ruby/object:Gem::Version
|
474
|
+
version: '0'
|
475
|
+
type: :development
|
476
|
+
prerelease: false
|
477
|
+
version_requirements: !ruby/object:Gem::Requirement
|
478
|
+
requirements:
|
479
|
+
- - ">="
|
480
|
+
- !ruby/object:Gem::Version
|
481
|
+
version: '0'
|
482
|
+
- !ruby/object:Gem::Dependency
|
483
|
+
name: mysql2
|
484
|
+
requirement: !ruby/object:Gem::Requirement
|
485
|
+
requirements:
|
486
|
+
- - ">="
|
487
|
+
- !ruby/object:Gem::Version
|
488
|
+
version: '0'
|
489
|
+
type: :development
|
490
|
+
prerelease: false
|
491
|
+
version_requirements: !ruby/object:Gem::Requirement
|
492
|
+
requirements:
|
493
|
+
- - ">="
|
494
|
+
- !ruby/object:Gem::Version
|
495
|
+
version: '0'
|
496
|
+
- !ruby/object:Gem::Dependency
|
497
|
+
name: pg
|
498
|
+
requirement: !ruby/object:Gem::Requirement
|
499
|
+
requirements:
|
500
|
+
- - ">="
|
501
|
+
- !ruby/object:Gem::Version
|
502
|
+
version: '0'
|
503
|
+
type: :development
|
504
|
+
prerelease: false
|
505
|
+
version_requirements: !ruby/object:Gem::Requirement
|
506
|
+
requirements:
|
507
|
+
- - ">="
|
508
|
+
- !ruby/object:Gem::Version
|
509
|
+
version: '0'
|
510
|
+
- !ruby/object:Gem::Dependency
|
511
|
+
name: sqlite3
|
512
|
+
requirement: !ruby/object:Gem::Requirement
|
513
|
+
requirements:
|
514
|
+
- - ">="
|
515
|
+
- !ruby/object:Gem::Version
|
516
|
+
version: '0'
|
517
|
+
type: :development
|
518
|
+
prerelease: false
|
519
|
+
version_requirements: !ruby/object:Gem::Requirement
|
520
|
+
requirements:
|
521
|
+
- - ">="
|
522
|
+
- !ruby/object:Gem::Version
|
523
|
+
version: '0'
|
524
|
+
- !ruby/object:Gem::Dependency
|
525
|
+
name: puma
|
526
|
+
requirement: !ruby/object:Gem::Requirement
|
527
|
+
requirements:
|
528
|
+
- - ">="
|
529
|
+
- !ruby/object:Gem::Version
|
530
|
+
version: '0'
|
531
|
+
type: :development
|
532
|
+
prerelease: false
|
533
|
+
version_requirements: !ruby/object:Gem::Requirement
|
534
|
+
requirements:
|
535
|
+
- - ">="
|
536
|
+
- !ruby/object:Gem::Version
|
537
|
+
version: '0'
|
538
|
+
- !ruby/object:Gem::Dependency
|
539
|
+
name: rails_email_preview
|
540
|
+
requirement: !ruby/object:Gem::Requirement
|
541
|
+
requirements:
|
542
|
+
- - ">="
|
543
|
+
- !ruby/object:Gem::Version
|
544
|
+
version: 2.0.1
|
545
|
+
type: :development
|
546
|
+
prerelease: false
|
547
|
+
version_requirements: !ruby/object:Gem::Requirement
|
548
|
+
requirements:
|
549
|
+
- - ">="
|
550
|
+
- !ruby/object:Gem::Version
|
551
|
+
version: 2.0.1
|
552
|
+
- !ruby/object:Gem::Dependency
|
553
|
+
name: roadie-rails
|
554
|
+
requirement: !ruby/object:Gem::Requirement
|
555
|
+
requirements:
|
556
|
+
- - ">="
|
557
|
+
- !ruby/object:Gem::Version
|
558
|
+
version: '0'
|
559
|
+
type: :development
|
560
|
+
prerelease: false
|
561
|
+
version_requirements: !ruby/object:Gem::Requirement
|
562
|
+
requirements:
|
563
|
+
- - ">="
|
564
|
+
- !ruby/object:Gem::Version
|
565
|
+
version: '0'
|
566
|
+
- !ruby/object:Gem::Dependency
|
567
|
+
name: i18n-tasks
|
568
|
+
requirement: !ruby/object:Gem::Requirement
|
569
|
+
requirements:
|
570
|
+
- - ">="
|
571
|
+
- !ruby/object:Gem::Version
|
572
|
+
version: 0.9.18
|
573
|
+
type: :development
|
574
|
+
prerelease: false
|
575
|
+
version_requirements: !ruby/object:Gem::Requirement
|
576
|
+
requirements:
|
577
|
+
- - ">="
|
578
|
+
- !ruby/object:Gem::Version
|
579
|
+
version: 0.9.18
|
580
|
+
- !ruby/object:Gem::Dependency
|
581
|
+
name: web-console
|
582
|
+
requirement: !ruby/object:Gem::Requirement
|
583
|
+
requirements:
|
584
|
+
- - ">="
|
585
|
+
- !ruby/object:Gem::Version
|
586
|
+
version: '0'
|
587
|
+
type: :development
|
588
|
+
prerelease: false
|
589
|
+
version_requirements: !ruby/object:Gem::Requirement
|
590
|
+
requirements:
|
591
|
+
- - ">="
|
592
|
+
- !ruby/object:Gem::Version
|
593
|
+
version: '0'
|
594
|
+
- !ruby/object:Gem::Dependency
|
595
|
+
name: thredded-markdown_coderay
|
596
|
+
requirement: !ruby/object:Gem::Requirement
|
597
|
+
requirements:
|
598
|
+
- - ">="
|
599
|
+
- !ruby/object:Gem::Version
|
600
|
+
version: '0'
|
601
|
+
type: :development
|
602
|
+
prerelease: false
|
603
|
+
version_requirements: !ruby/object:Gem::Requirement
|
604
|
+
requirements:
|
605
|
+
- - ">="
|
606
|
+
- !ruby/object:Gem::Version
|
607
|
+
version: '0'
|
608
|
+
- !ruby/object:Gem::Dependency
|
609
|
+
name: thredded-markdown_katex
|
610
|
+
requirement: !ruby/object:Gem::Requirement
|
611
|
+
requirements:
|
612
|
+
- - ">="
|
613
|
+
- !ruby/object:Gem::Version
|
614
|
+
version: '0'
|
615
|
+
type: :development
|
616
|
+
prerelease: false
|
617
|
+
version_requirements: !ruby/object:Gem::Requirement
|
618
|
+
requirements:
|
619
|
+
- - ">="
|
620
|
+
- !ruby/object:Gem::Version
|
621
|
+
version: '0'
|
622
|
+
- !ruby/object:Gem::Dependency
|
623
|
+
name: turbolinks
|
624
|
+
requirement: !ruby/object:Gem::Requirement
|
625
|
+
requirements:
|
626
|
+
- - ">="
|
627
|
+
- !ruby/object:Gem::Version
|
628
|
+
version: '0'
|
629
|
+
type: :development
|
630
|
+
prerelease: false
|
631
|
+
version_requirements: !ruby/object:Gem::Requirement
|
632
|
+
requirements:
|
633
|
+
- - ">="
|
634
|
+
- !ruby/object:Gem::Version
|
635
|
+
version: '0'
|
636
|
+
description: |-
|
637
|
+
The best Rails 4.2+ forums engine ever. Its goal is to be as simple and feature rich as possible.
|
638
|
+
Thredded works with SQLite, MySQL (v5.6.4+), and PostgreSQL. See the demo at https://thredded.org/.
|
639
|
+
email:
|
640
|
+
- joel@thredded.com
|
641
|
+
- glex.spb@gmail.com
|
642
|
+
executables: []
|
643
|
+
extensions: []
|
644
|
+
extra_rdoc_files: []
|
645
|
+
files:
|
646
|
+
- MIT-LICENSE
|
647
|
+
- README.md
|
648
|
+
- app/assets/images/favicons/README.md
|
649
|
+
- app/assets/images/favicons/amazon.png
|
650
|
+
- app/assets/images/favicons/github.png
|
651
|
+
- app/assets/images/favicons/google_branding/logo_calendar_128px.png
|
652
|
+
- app/assets/images/favicons/google_branding/logo_docs_48px.png
|
653
|
+
- app/assets/images/favicons/google_branding/logo_drive_48px.png
|
654
|
+
- app/assets/images/favicons/google_branding/logo_forms_48px.png
|
655
|
+
- app/assets/images/favicons/google_branding/logo_sheets_48px.png
|
656
|
+
- app/assets/images/favicons/google_branding/logo_slides_48px.png
|
657
|
+
- app/assets/images/favicons/stackexchange.png
|
658
|
+
- app/assets/images/favicons/twitter.png
|
659
|
+
- app/assets/images/favicons/wikipedia.png
|
660
|
+
- app/assets/images/thredded/breadcrumb-chevron.svg
|
661
|
+
- app/assets/images/thredded/follow.svg
|
662
|
+
- app/assets/images/thredded/lock.svg
|
663
|
+
- app/assets/images/thredded/moderation.svg
|
664
|
+
- app/assets/images/thredded/private-messages.svg
|
665
|
+
- app/assets/images/thredded/settings.svg
|
666
|
+
- app/assets/images/thredded/three-dot-menu.svg
|
667
|
+
- app/assets/images/thredded/unfollow.svg
|
668
|
+
- app/assets/javascripts/thredded.es6
|
669
|
+
- app/assets/javascripts/thredded/components/currently_online.es6
|
670
|
+
- app/assets/javascripts/thredded/components/flash_messages.es6
|
671
|
+
- app/assets/javascripts/thredded/components/mention_autocompletion.es6
|
672
|
+
- app/assets/javascripts/thredded/components/post_form.es6
|
673
|
+
- app/assets/javascripts/thredded/components/preview_area.es6
|
674
|
+
- app/assets/javascripts/thredded/components/quote_post.es6
|
675
|
+
- app/assets/javascripts/thredded/components/time_stamps.es6
|
676
|
+
- app/assets/javascripts/thredded/components/topic_form.es6
|
677
|
+
- app/assets/javascripts/thredded/components/topics.es6
|
678
|
+
- app/assets/javascripts/thredded/components/turboforms.es6
|
679
|
+
- app/assets/javascripts/thredded/components/user_preferences_form.es6
|
680
|
+
- app/assets/javascripts/thredded/components/user_textcomplete.es6
|
681
|
+
- app/assets/javascripts/thredded/components/users_select.es6
|
682
|
+
- app/assets/javascripts/thredded/core/csrf_tokens.es6
|
683
|
+
- app/assets/javascripts/thredded/core/debounce.es6
|
684
|
+
- app/assets/javascripts/thredded/core/escape_html.es6
|
685
|
+
- app/assets/javascripts/thredded/core/hide_soft_keyboard.es6
|
686
|
+
- app/assets/javascripts/thredded/core/on_page_load.es6
|
687
|
+
- app/assets/javascripts/thredded/core/serialize_form.es6
|
688
|
+
- app/assets/javascripts/thredded/core/thredded.es6
|
689
|
+
- app/assets/javascripts/thredded/dependencies.js
|
690
|
+
- app/assets/javascripts/thredded/dependencies/autosize.js
|
691
|
+
- app/assets/javascripts/thredded/dependencies/textcomplete.js
|
692
|
+
- app/assets/javascripts/thredded/dependencies/timeago.js
|
693
|
+
- app/assets/javascripts/thredded/dependencies/ujs.js
|
694
|
+
- app/assets/javascripts/thredded/thredded.es6
|
695
|
+
- app/assets/stylesheets/thredded.scss
|
696
|
+
- app/assets/stylesheets/thredded/_base.scss
|
697
|
+
- app/assets/stylesheets/thredded/_dependencies.scss
|
698
|
+
- app/assets/stylesheets/thredded/_email.scss
|
699
|
+
- app/assets/stylesheets/thredded/_thredded.scss
|
700
|
+
- app/assets/stylesheets/thredded/base/_alerts.scss
|
701
|
+
- app/assets/stylesheets/thredded/base/_buttons.scss
|
702
|
+
- app/assets/stylesheets/thredded/base/_dropdown-menu.scss
|
703
|
+
- app/assets/stylesheets/thredded/base/_forms.scss
|
704
|
+
- app/assets/stylesheets/thredded/base/_grid.scss
|
705
|
+
- app/assets/stylesheets/thredded/base/_lists.scss
|
706
|
+
- app/assets/stylesheets/thredded/base/_nav.scss
|
707
|
+
- app/assets/stylesheets/thredded/base/_tables.scss
|
708
|
+
- app/assets/stylesheets/thredded/base/_typography.scss
|
709
|
+
- app/assets/stylesheets/thredded/base/_variables.scss
|
710
|
+
- app/assets/stylesheets/thredded/components/_alerts.scss
|
711
|
+
- app/assets/stylesheets/thredded/components/_base.scss
|
712
|
+
- app/assets/stylesheets/thredded/components/_currently-online.scss
|
713
|
+
- app/assets/stylesheets/thredded/components/_empty.scss
|
714
|
+
- app/assets/stylesheets/thredded/components/_flash-message.scss
|
715
|
+
- app/assets/stylesheets/thredded/components/_following.scss
|
716
|
+
- app/assets/stylesheets/thredded/components/_form-list.scss
|
717
|
+
- app/assets/stylesheets/thredded/components/_icons.scss
|
718
|
+
- app/assets/stylesheets/thredded/components/_main-section.scss
|
719
|
+
- app/assets/stylesheets/thredded/components/_mention-autocomplete.scss
|
720
|
+
- app/assets/stylesheets/thredded/components/_messageboard.scss
|
721
|
+
- app/assets/stylesheets/thredded/components/_onebox.scss
|
722
|
+
- app/assets/stylesheets/thredded/components/_pagination.scss
|
723
|
+
- app/assets/stylesheets/thredded/components/_post-form.scss
|
724
|
+
- app/assets/stylesheets/thredded/components/_post.scss
|
725
|
+
- app/assets/stylesheets/thredded/components/_preferences.scss
|
726
|
+
- app/assets/stylesheets/thredded/components/_preview_area.scss
|
727
|
+
- app/assets/stylesheets/thredded/components/_topic-delete.scss
|
728
|
+
- app/assets/stylesheets/thredded/components/_topic-header.scss
|
729
|
+
- app/assets/stylesheets/thredded/components/_topics.scss
|
730
|
+
- app/assets/stylesheets/thredded/layout/_main-container.scss
|
731
|
+
- app/assets/stylesheets/thredded/layout/_main-navigation.scss
|
732
|
+
- app/assets/stylesheets/thredded/layout/_moderation.scss
|
733
|
+
- app/assets/stylesheets/thredded/layout/_navigation.scss
|
734
|
+
- app/assets/stylesheets/thredded/layout/_search-navigation.scss
|
735
|
+
- app/assets/stylesheets/thredded/layout/_user-navigation.scss
|
736
|
+
- app/assets/stylesheets/thredded/layout/_user.scss
|
737
|
+
- app/assets/stylesheets/thredded/utilities/_is-compact.scss
|
738
|
+
- app/assets/stylesheets/thredded/utilities/_is-expanded.scss
|
739
|
+
- app/commands/thredded/at_notification_extractor.rb
|
740
|
+
- app/commands/thredded/autofollow_users.rb
|
741
|
+
- app/commands/thredded/create_messageboard.rb
|
742
|
+
- app/commands/thredded/mark_all_read.rb
|
743
|
+
- app/commands/thredded/moderate_post.rb
|
744
|
+
- app/commands/thredded/notify_following_users.rb
|
745
|
+
- app/commands/thredded/notify_private_topic_users.rb
|
746
|
+
- app/controllers/concerns/thredded/new_post_params.rb
|
747
|
+
- app/controllers/concerns/thredded/new_private_post_params.rb
|
748
|
+
- app/controllers/concerns/thredded/new_private_topic_params.rb
|
749
|
+
- app/controllers/concerns/thredded/new_topic_params.rb
|
750
|
+
- app/controllers/concerns/thredded/render_preview.rb
|
751
|
+
- app/controllers/thredded/application_controller.rb
|
752
|
+
- app/controllers/thredded/autocomplete_users_controller.rb
|
753
|
+
- app/controllers/thredded/messageboard_groups_controller.rb
|
754
|
+
- app/controllers/thredded/messageboards_controller.rb
|
755
|
+
- app/controllers/thredded/moderation_controller.rb
|
756
|
+
- app/controllers/thredded/post_permalinks_controller.rb
|
757
|
+
- app/controllers/thredded/post_previews_controller.rb
|
758
|
+
- app/controllers/thredded/posts_controller.rb
|
759
|
+
- app/controllers/thredded/preferences_controller.rb
|
760
|
+
- app/controllers/thredded/private_post_permalinks_controller.rb
|
761
|
+
- app/controllers/thredded/private_post_previews_controller.rb
|
762
|
+
- app/controllers/thredded/private_posts_controller.rb
|
763
|
+
- app/controllers/thredded/private_topic_previews_controller.rb
|
764
|
+
- app/controllers/thredded/private_topics_controller.rb
|
765
|
+
- app/controllers/thredded/read_states_controller.rb
|
766
|
+
- app/controllers/thredded/theme_previews_controller.rb
|
767
|
+
- app/controllers/thredded/topic_previews_controller.rb
|
768
|
+
- app/controllers/thredded/topics_controller.rb
|
769
|
+
- app/forms/thredded/edit_topic_form.rb
|
770
|
+
- app/forms/thredded/post_form.rb
|
771
|
+
- app/forms/thredded/private_post_form.rb
|
772
|
+
- app/forms/thredded/private_topic_form.rb
|
773
|
+
- app/forms/thredded/topic_form.rb
|
774
|
+
- app/forms/thredded/user_preferences_form.rb
|
775
|
+
- app/helpers/thredded/application_helper.rb
|
776
|
+
- app/helpers/thredded/nav_helper.rb
|
777
|
+
- app/helpers/thredded/render_helper.rb
|
778
|
+
- app/helpers/thredded/urls_helper.rb
|
779
|
+
- app/jobs/thredded/activity_updater_job.rb
|
780
|
+
- app/jobs/thredded/auto_follow_and_notify_job.rb
|
781
|
+
- app/jobs/thredded/notify_private_topic_users_job.rb
|
782
|
+
- app/mailer_previews/thredded/base_mailer_preview.rb
|
783
|
+
- app/mailer_previews/thredded/post_mailer_preview.rb
|
784
|
+
- app/mailer_previews/thredded/private_topic_mailer_preview.rb
|
785
|
+
- app/mailers/thredded/base_mailer.rb
|
786
|
+
- app/mailers/thredded/post_mailer.rb
|
787
|
+
- app/mailers/thredded/private_topic_mailer.rb
|
788
|
+
- app/models/concerns/thredded/content_moderation_state.rb
|
789
|
+
- app/models/concerns/thredded/friendly_id_reserved_words_and_pagination.rb
|
790
|
+
- app/models/concerns/thredded/moderation_state.rb
|
791
|
+
- app/models/concerns/thredded/notifier_preference.rb
|
792
|
+
- app/models/concerns/thredded/post_common.rb
|
793
|
+
- app/models/concerns/thredded/search_parser.rb
|
794
|
+
- app/models/concerns/thredded/topic_common.rb
|
795
|
+
- app/models/concerns/thredded/topics_search.rb
|
796
|
+
- app/models/concerns/thredded/user_topic_read_state_common.rb
|
797
|
+
- app/models/thredded/category.rb
|
798
|
+
- app/models/thredded/messageboard.rb
|
799
|
+
- app/models/thredded/messageboard_group.rb
|
800
|
+
- app/models/thredded/messageboard_notifications_for_followed_topics.rb
|
801
|
+
- app/models/thredded/messageboard_user.rb
|
802
|
+
- app/models/thredded/notifications_for_followed_topics.rb
|
803
|
+
- app/models/thredded/notifications_for_private_topics.rb
|
804
|
+
- app/models/thredded/null_user.rb
|
805
|
+
- app/models/thredded/null_user_topic_read_state.rb
|
806
|
+
- app/models/thredded/post.rb
|
807
|
+
- app/models/thredded/post_moderation_record.rb
|
808
|
+
- app/models/thredded/private_post.rb
|
809
|
+
- app/models/thredded/private_topic.rb
|
810
|
+
- app/models/thredded/private_user.rb
|
811
|
+
- app/models/thredded/stats.rb
|
812
|
+
- app/models/thredded/topic.rb
|
813
|
+
- app/models/thredded/topic_category.rb
|
814
|
+
- app/models/thredded/user_detail.rb
|
815
|
+
- app/models/thredded/user_extender.rb
|
816
|
+
- app/models/thredded/user_messageboard_preference.rb
|
817
|
+
- app/models/thredded/user_permissions/admin/if_admin_column_true.rb
|
818
|
+
- app/models/thredded/user_permissions/admin/none.rb
|
819
|
+
- app/models/thredded/user_permissions/message/readers_of_writeable_boards.rb
|
820
|
+
- app/models/thredded/user_permissions/moderate/if_moderator_column_true.rb
|
821
|
+
- app/models/thredded/user_permissions/moderate/none.rb
|
822
|
+
- app/models/thredded/user_permissions/read/all.rb
|
823
|
+
- app/models/thredded/user_permissions/write/all.rb
|
824
|
+
- app/models/thredded/user_permissions/write/none.rb
|
825
|
+
- app/models/thredded/user_post_notification.rb
|
826
|
+
- app/models/thredded/user_preference.rb
|
827
|
+
- app/models/thredded/user_private_topic_read_state.rb
|
828
|
+
- app/models/thredded/user_topic_follow.rb
|
829
|
+
- app/models/thredded/user_topic_read_state.rb
|
830
|
+
- app/notifiers/thredded/email_notifier.rb
|
831
|
+
- app/policies/thredded/messageboard_group_policy.rb
|
832
|
+
- app/policies/thredded/messageboard_policy.rb
|
833
|
+
- app/policies/thredded/post_policy.rb
|
834
|
+
- app/policies/thredded/private_post_policy.rb
|
835
|
+
- app/policies/thredded/private_topic_policy.rb
|
836
|
+
- app/policies/thredded/topic_policy.rb
|
837
|
+
- app/view_hooks/thredded/all_view_hooks.rb
|
838
|
+
- app/view_models/thredded/base_topic_view.rb
|
839
|
+
- app/view_models/thredded/messageboard_group_view.rb
|
840
|
+
- app/view_models/thredded/post_view.rb
|
841
|
+
- app/view_models/thredded/posts_page_view.rb
|
842
|
+
- app/view_models/thredded/private_topic_view.rb
|
843
|
+
- app/view_models/thredded/private_topics_page_view.rb
|
844
|
+
- app/view_models/thredded/topic_email_view.rb
|
845
|
+
- app/view_models/thredded/topic_posts_page_view.rb
|
846
|
+
- app/view_models/thredded/topic_view.rb
|
847
|
+
- app/view_models/thredded/topics_page_view.rb
|
848
|
+
- app/views/layouts/thredded/application.html.erb
|
849
|
+
- app/views/thredded/categories/_category.html.erb
|
850
|
+
- app/views/thredded/error_pages/forbidden.html.erb
|
851
|
+
- app/views/thredded/error_pages/not_found.html.erb
|
852
|
+
- app/views/thredded/kaminari/_first_page.html.erb
|
853
|
+
- app/views/thredded/kaminari/_gap.html.erb
|
854
|
+
- app/views/thredded/kaminari/_last_page.html.erb
|
855
|
+
- app/views/thredded/kaminari/_next_page.html.erb
|
856
|
+
- app/views/thredded/kaminari/_page.html.erb
|
857
|
+
- app/views/thredded/kaminari/_paginator.html.erb
|
858
|
+
- app/views/thredded/kaminari/_prev_page.html.erb
|
859
|
+
- app/views/thredded/messageboard_groups/new.html.erb
|
860
|
+
- app/views/thredded/messageboards/_form.html.erb
|
861
|
+
- app/views/thredded/messageboards/_messageboard.html.erb
|
862
|
+
- app/views/thredded/messageboards/_messageboard_meta.html.erb
|
863
|
+
- app/views/thredded/messageboards/edit.html.erb
|
864
|
+
- app/views/thredded/messageboards/index.html.erb
|
865
|
+
- app/views/thredded/messageboards/new.html.erb
|
866
|
+
- app/views/thredded/moderation/_nav.html.erb
|
867
|
+
- app/views/thredded/moderation/_post.html.erb
|
868
|
+
- app/views/thredded/moderation/_post_moderation_actions.html.erb
|
869
|
+
- app/views/thredded/moderation/_post_moderation_record.html.erb
|
870
|
+
- app/views/thredded/moderation/_user_moderation_state.html.erb
|
871
|
+
- app/views/thredded/moderation/_user_post.html.erb
|
872
|
+
- app/views/thredded/moderation/_users_search_form.html.erb
|
873
|
+
- app/views/thredded/moderation/activity.html.erb
|
874
|
+
- app/views/thredded/moderation/history.html.erb
|
875
|
+
- app/views/thredded/moderation/pending.html.erb
|
876
|
+
- app/views/thredded/moderation/user.html.erb
|
877
|
+
- app/views/thredded/moderation/users.html.erb
|
878
|
+
- app/views/thredded/post_mailer/post_notification.html.erb
|
879
|
+
- app/views/thredded/post_mailer/post_notification.text.erb
|
880
|
+
- app/views/thredded/post_previews/preview.html.erb
|
881
|
+
- app/views/thredded/post_previews/update.html.erb
|
882
|
+
- app/views/thredded/posts/_content.html.erb
|
883
|
+
- app/views/thredded/posts/_form.html.erb
|
884
|
+
- app/views/thredded/posts/_post.html.erb
|
885
|
+
- app/views/thredded/posts/_user.html.erb
|
886
|
+
- app/views/thredded/posts/edit.html.erb
|
887
|
+
- app/views/thredded/posts/new.html.erb
|
888
|
+
- app/views/thredded/posts_common/_actions.html.erb
|
889
|
+
- app/views/thredded/posts_common/_content.html.erb
|
890
|
+
- app/views/thredded/posts_common/_form.html.erb
|
891
|
+
- app/views/thredded/posts_common/_header.html.erb
|
892
|
+
- app/views/thredded/posts_common/_header_with_topic.html.erb
|
893
|
+
- app/views/thredded/posts_common/_header_with_user_and_topic.html.erb
|
894
|
+
- app/views/thredded/posts_common/actions/_delete.html.erb
|
895
|
+
- app/views/thredded/posts_common/actions/_edit.html.erb
|
896
|
+
- app/views/thredded/posts_common/actions/_mark_as_unread.html.erb
|
897
|
+
- app/views/thredded/posts_common/actions/_quote.html.erb
|
898
|
+
- app/views/thredded/posts_common/form/_after_content.html.erb
|
899
|
+
- app/views/thredded/posts_common/form/_before_content.html.erb
|
900
|
+
- app/views/thredded/posts_common/form/_content.html.erb
|
901
|
+
- app/views/thredded/posts_common/form/_content_field.html.erb
|
902
|
+
- app/views/thredded/posts_common/form/_preview_area.html.erb
|
903
|
+
- app/views/thredded/preferences/_form.html.erb
|
904
|
+
- app/views/thredded/preferences/_messageboards_nav.html.erb
|
905
|
+
- app/views/thredded/preferences/_messageboards_nav_item.html.erb
|
906
|
+
- app/views/thredded/preferences/edit.html.erb
|
907
|
+
- app/views/thredded/private_post_previews/preview.html.erb
|
908
|
+
- app/views/thredded/private_post_previews/update.html.erb
|
909
|
+
- app/views/thredded/private_posts/_content.html.erb
|
910
|
+
- app/views/thredded/private_posts/_form.html.erb
|
911
|
+
- app/views/thredded/private_posts/_private_post.html.erb
|
912
|
+
- app/views/thredded/private_posts/edit.html.erb
|
913
|
+
- app/views/thredded/private_posts/new.html.erb
|
914
|
+
- app/views/thredded/private_topic_mailer/message_notification.html.erb
|
915
|
+
- app/views/thredded/private_topic_mailer/message_notification.text.erb
|
916
|
+
- app/views/thredded/private_topic_previews/preview.html.erb
|
917
|
+
- app/views/thredded/private_topics/_breadcrumbs.html.erb
|
918
|
+
- app/views/thredded/private_topics/_form.html.erb
|
919
|
+
- app/views/thredded/private_topics/_header.html.erb
|
920
|
+
- app/views/thredded/private_topics/_no_private_topics.html.erb
|
921
|
+
- app/views/thredded/private_topics/_private_topic.html.erb
|
922
|
+
- app/views/thredded/private_topics/edit.html.erb
|
923
|
+
- app/views/thredded/private_topics/header/_participant.html.erb
|
924
|
+
- app/views/thredded/private_topics/index.html.erb
|
925
|
+
- app/views/thredded/private_topics/new.html.erb
|
926
|
+
- app/views/thredded/private_topics/private_topic/_participant.html.erb
|
927
|
+
- app/views/thredded/private_topics/show.html.erb
|
928
|
+
- app/views/thredded/search/_form.html.erb
|
929
|
+
- app/views/thredded/shared/_breadcrumbs.html.erb
|
930
|
+
- app/views/thredded/shared/_content_moderation_blocked_state.html.erb
|
931
|
+
- app/views/thredded/shared/_currently_online.html.erb
|
932
|
+
- app/views/thredded/shared/_flash_messages.html.erb
|
933
|
+
- app/views/thredded/shared/_header.html.erb
|
934
|
+
- app/views/thredded/shared/_nav.html.erb
|
935
|
+
- app/views/thredded/shared/_page.html.erb
|
936
|
+
- app/views/thredded/shared/currently_online/_header.html.erb
|
937
|
+
- app/views/thredded/shared/currently_online/_user_list.html.erb
|
938
|
+
- app/views/thredded/shared/currently_online/_user_list_item.html.erb
|
939
|
+
- app/views/thredded/shared/nav/_moderation.html.erb
|
940
|
+
- app/views/thredded/shared/nav/_notification_preferences.html.erb
|
941
|
+
- app/views/thredded/shared/nav/_private_topics.html.erb
|
942
|
+
- app/views/thredded/shared/nav/_standalone.html.erb
|
943
|
+
- app/views/thredded/shared/nav/_standalone_profile.html.erb
|
944
|
+
- app/views/thredded/shared/preview.html.erb
|
945
|
+
- app/views/thredded/theme_previews/_section_title.html.erb
|
946
|
+
- app/views/thredded/theme_previews/show.html.erb
|
947
|
+
- app/views/thredded/topic_previews/preview.html.erb
|
948
|
+
- app/views/thredded/topics/_followers.html.erb
|
949
|
+
- app/views/thredded/topics/_form.html.erb
|
950
|
+
- app/views/thredded/topics/_header.html.erb
|
951
|
+
- app/views/thredded/topics/_sticky_topics_divider.html.erb
|
952
|
+
- app/views/thredded/topics/_topic.html.erb
|
953
|
+
- app/views/thredded/topics/_topic_form_admin_options.html.erb
|
954
|
+
- app/views/thredded/topics/edit.html.erb
|
955
|
+
- app/views/thredded/topics/index.html.erb
|
956
|
+
- app/views/thredded/topics/new.html.erb
|
957
|
+
- app/views/thredded/topics/search.html.erb
|
958
|
+
- app/views/thredded/topics/show.html.erb
|
959
|
+
- app/views/thredded/users/_link.html.erb
|
960
|
+
- app/views/thredded/users/_post.html.erb
|
961
|
+
- app/views/thredded/users/_posts.html.erb
|
962
|
+
- bin/rails
|
963
|
+
- config/i18n-tasks.yml
|
964
|
+
- config/locales/de.yml
|
965
|
+
- config/locales/en.yml
|
966
|
+
- config/locales/es.yml
|
967
|
+
- config/locales/fr.yml
|
968
|
+
- config/locales/it.yml
|
969
|
+
- config/locales/pl.yml
|
970
|
+
- config/locales/pt-BR.yml
|
971
|
+
- config/locales/ru.yml
|
972
|
+
- config/locales/zh-CN.yml
|
973
|
+
- config/routes.rb
|
974
|
+
- db/migrate/20160329231848_create_thredded.rb
|
975
|
+
- db/seeds.rb
|
976
|
+
- db/upgrade_migrations/20160611094616_upgrade_v0_5_to_v0_6.rb
|
977
|
+
- db/upgrade_migrations/20160723012349_upgrade_v0_6_to_v0_7.rb
|
978
|
+
- db/upgrade_migrations/20161019150201_upgrade_v0_7_to_v0_8.rb
|
979
|
+
- db/upgrade_migrations/20161113161801_upgrade_v0_8_to_v0_9.rb
|
980
|
+
- db/upgrade_migrations/20170125033319_upgrade_v0_9_to_v0_10.rb
|
981
|
+
- db/upgrade_migrations/20170312131417_upgrade_thredded_v0_10_to_v0_11.rb
|
982
|
+
- db/upgrade_migrations/20170420163138_upgrade_thredded_v0_11_to_v0_12.rb
|
983
|
+
- db/upgrade_migrations/20170811090735_upgrade_thredded_v0_13_to_v_014.rb
|
984
|
+
- lib/generators/thredded/install/USAGE
|
985
|
+
- lib/generators/thredded/install/install_generator.rb
|
986
|
+
- lib/generators/thredded/install/templates/initializer.rb
|
987
|
+
- lib/tasks/thredded_tasks.rake
|
988
|
+
- lib/thredded.rb
|
989
|
+
- lib/thredded/base_migration.rb
|
990
|
+
- lib/thredded/base_notifier.rb
|
991
|
+
- lib/thredded/collection_to_strings_with_cache_renderer.rb
|
992
|
+
- lib/thredded/content_formatter.rb
|
993
|
+
- lib/thredded/database_seeder.rb
|
994
|
+
- lib/thredded/db_tools.rb
|
995
|
+
- lib/thredded/email_transformer.rb
|
996
|
+
- lib/thredded/email_transformer/base.rb
|
997
|
+
- lib/thredded/email_transformer/onebox.rb
|
998
|
+
- lib/thredded/engine.rb
|
999
|
+
- lib/thredded/errors.rb
|
1000
|
+
- lib/thredded/formatting_demo_content.rb
|
1001
|
+
- lib/thredded/html_pipeline/at_mention_filter.rb
|
1002
|
+
- lib/thredded/html_pipeline/autolink_filter.rb
|
1003
|
+
- lib/thredded/html_pipeline/kramdown_filter.rb
|
1004
|
+
- lib/thredded/html_pipeline/onebox_filter.rb
|
1005
|
+
- lib/thredded/html_pipeline/wrap_iframes_filter.rb
|
1006
|
+
- lib/thredded/version.rb
|
1007
|
+
- lib/thredded/view_hooks/config.rb
|
1008
|
+
- lib/thredded/view_hooks/renderer.rb
|
1009
|
+
- vendor/assets/javascripts/autosize.min.js
|
1010
|
+
- vendor/assets/javascripts/textcomplete.min.js
|
1011
|
+
homepage: https://thredded.org
|
1012
|
+
licenses:
|
1013
|
+
- MIT
|
1014
|
+
metadata: {}
|
1015
|
+
post_install_message:
|
1016
|
+
rdoc_options: []
|
1017
|
+
require_paths:
|
1018
|
+
- lib
|
1019
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
1020
|
+
requirements:
|
1021
|
+
- - "~>"
|
1022
|
+
- !ruby/object:Gem::Version
|
1023
|
+
version: '2.1'
|
1024
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
1025
|
+
requirements:
|
1026
|
+
- - ">="
|
1027
|
+
- !ruby/object:Gem::Version
|
1028
|
+
version: '0'
|
1029
|
+
requirements: []
|
1030
|
+
rubyforge_project:
|
1031
|
+
rubygems_version: 2.6.8
|
1032
|
+
signing_key:
|
1033
|
+
specification_version: 4
|
1034
|
+
summary: The best Rails forums engine ever.
|
1035
|
+
test_files: []
|