thredded 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. metadata +303 -193
  3. data/MIT-LICENSE +0 -20
  4. data/README.mkdn +0 -46
  5. data/Rakefile +0 -31
  6. data/app/assets/javascripts/thredded/application.js +0 -15
  7. data/app/assets/stylesheets/thredded/application.css +0 -13
  8. data/app/controllers/thredded/application_controller.rb +0 -50
  9. data/app/controllers/thredded/messageboards_controller.rb +0 -9
  10. data/app/controllers/thredded/posts_controller.rb +0 -86
  11. data/app/controllers/thredded/preferences_controller.rb +0 -20
  12. data/app/controllers/thredded/private_topics_controller.rb +0 -25
  13. data/app/controllers/thredded/setups_controller.rb +0 -39
  14. data/app/controllers/thredded/topics_controller.rb +0 -121
  15. data/app/decorators/thredded/post_decorator.rb +0 -52
  16. data/app/decorators/thredded/topic_decorator.rb +0 -96
  17. data/app/helpers/thredded/application_helper.rb +0 -9
  18. data/app/helpers/thredded/messageboard_helper.rb +0 -52
  19. data/app/helpers/thredded/posts_helper.rb +0 -7
  20. data/app/helpers/thredded/topics_helper.rb +0 -21
  21. data/app/mailers/thredded/post_mailer.rb +0 -28
  22. data/app/mailers/thredded/topic_mailer.rb +0 -29
  23. data/app/models/thredded/ability.rb +0 -50
  24. data/app/models/thredded/attachment.rb +0 -24
  25. data/app/models/thredded/category.rb +0 -10
  26. data/app/models/thredded/image.rb +0 -27
  27. data/app/models/thredded/messageboard.rb +0 -92
  28. data/app/models/thredded/messageboard_decorator.rb +0 -18
  29. data/app/models/thredded/messageboard_preference.rb +0 -15
  30. data/app/models/thredded/null_preference.rb +0 -9
  31. data/app/models/thredded/null_topic_read.rb +0 -13
  32. data/app/models/thredded/null_user.rb +0 -27
  33. data/app/models/thredded/post.rb +0 -75
  34. data/app/models/thredded/post_notification.rb +0 -6
  35. data/app/models/thredded/private_topic.rb +0 -33
  36. data/app/models/thredded/private_user.rb +0 -7
  37. data/app/models/thredded/role.rb +0 -18
  38. data/app/models/thredded/topic.rb +0 -145
  39. data/app/models/thredded/topic_category.rb +0 -7
  40. data/app/models/thredded/user_detail.rb +0 -6
  41. data/app/models/thredded/user_extender.rb +0 -27
  42. data/app/models/thredded/user_preference.rb +0 -6
  43. data/app/models/thredded/user_topic_read.rb +0 -67
  44. data/app/uploaders/thredded/attachment_uploader.rb +0 -30
  45. data/app/uploaders/thredded/image_uploader.rb +0 -17
  46. data/app/views/thredded/messageboards/_messageboard.html.erb +0 -17
  47. data/app/views/thredded/messageboards/index.html.erb +0 -15
  48. data/app/views/thredded/post_mailer/at_notification.html.erb +0 -17
  49. data/app/views/thredded/post_mailer/at_notification.text.erb +0 -13
  50. data/app/views/thredded/posts/_form.html.erb +0 -25
  51. data/app/views/thredded/posts/_null_user.html.erb +0 -0
  52. data/app/views/thredded/posts/_post.html.erb +0 -25
  53. data/app/views/thredded/posts/_user.html.erb +0 -7
  54. data/app/views/thredded/posts/edit.html.erb +0 -28
  55. data/app/views/thredded/posts/index.html.erb +0 -74
  56. data/app/views/thredded/preferences/edit.html.erb +0 -23
  57. data/app/views/thredded/search/_form.html.erb +0 -9
  58. data/app/views/thredded/setups/_form.html.erb +0 -35
  59. data/app/views/thredded/setups/new.html.erb +0 -5
  60. data/app/views/thredded/shared/_currently_online.html.erb +0 -10
  61. data/app/views/thredded/shared/_error_msgs.html.erb +0 -7
  62. data/app/views/thredded/shared/_google_analytics.html.erb +0 -10
  63. data/app/views/thredded/shared/_topic_nav.html.erb +0 -18
  64. data/app/views/thredded/topic_mailer/message_notification.html.erb +0 -17
  65. data/app/views/thredded/topic_mailer/message_notification.text.erb +0 -13
  66. data/app/views/thredded/topics/_form.html.erb +0 -6
  67. data/app/views/thredded/topics/_topic_condensed.html.erb +0 -20
  68. data/app/views/thredded/topics/_topic_form.html.erb +0 -27
  69. data/app/views/thredded/topics/by_category.html.erb +0 -51
  70. data/app/views/thredded/topics/edit.html.erb +0 -25
  71. data/app/views/thredded/topics/index.html.erb +0 -52
  72. data/app/views/thredded/topics/menu/_new_topic.html.erb +0 -3
  73. data/app/views/thredded/topics/new.html.erb +0 -18
  74. data/app/views/thredded/topics/search.html.erb +0 -45
  75. data/config/routes.rb +0 -26
  76. data/db/migrate/20130425230852_create_thredded_tables.rb +0 -143
  77. data/lib/tasks/thredded_tasks.rake +0 -4
  78. data/lib/thredded/at_notification_extractor.rb +0 -15
  79. data/lib/thredded/at_notifier.rb +0 -65
  80. data/lib/thredded/at_users.rb +0 -17
  81. data/lib/thredded/email_processor.rb +0 -74
  82. data/lib/thredded/engine.rb +0 -17
  83. data/lib/thredded/filter/at_notification.rb +0 -11
  84. data/lib/thredded/filter/attachment.rb +0 -51
  85. data/lib/thredded/filter/base.rb +0 -13
  86. data/lib/thredded/filter/bbcode.rb +0 -75
  87. data/lib/thredded/filter/emoji.rb +0 -11
  88. data/lib/thredded/filter/markdown.rb +0 -25
  89. data/lib/thredded/filter/syntax.rb +0 -28
  90. data/lib/thredded/filter/textile.rb +0 -21
  91. data/lib/thredded/filter.rb +0 -4
  92. data/lib/thredded/messageboard_user_permissions.rb +0 -27
  93. data/lib/thredded/post_sql_builder.rb +0 -34
  94. data/lib/thredded/post_user_permissions.rb +0 -37
  95. data/lib/thredded/private_topic_notifier.rb +0 -56
  96. data/lib/thredded/private_topic_user_permissions.rb +0 -32
  97. data/lib/thredded/search_parser.rb +0 -45
  98. data/lib/thredded/search_sql_builder.rb +0 -25
  99. data/lib/thredded/setup_thredded.rb +0 -7
  100. data/lib/thredded/table_sql_builder.rb +0 -105
  101. data/lib/thredded/topic_sql_builder.rb +0 -32
  102. data/lib/thredded/topic_user_permissions.rb +0 -51
  103. data/lib/thredded/version.rb +0 -3
  104. data/lib/thredded.rb +0 -38
@@ -1,25 +0,0 @@
1
- <header>
2
- <nav>
3
- <ul class="breadcrumbs">
4
- <li><%= link_to 'Forums', thredded.root_path %></li>
5
- <li><%= link_to messageboard.name, messageboard_topics_path(messageboard, topic) %></li>
6
- <li>
7
- <span>
8
- Editing Topic <em><%= link_to topic.title, [messageboard, topic] %></em>
9
- </span>
10
- </li>
11
- </ul>
12
- </nav>
13
- </header>
14
-
15
- <div class="forms">
16
- <ul>
17
- <%= nested_form_for [@messageboard, @topic], html: { class: :topic_form, multipart: true } do |form| %>
18
- <%= render 'form', form: form, messageboard: messageboard.decorate %>
19
-
20
- <li class="submit">
21
- <%= form.submit 'Update Topic' %>
22
- </li>
23
- <% end %>
24
- </ul>
25
- </div>
@@ -1,52 +0,0 @@
1
- <% content_for :breadcrumbs do %>
2
- <ul class="breadcrumbs">
3
- <li><%= link_to 'Forums', thredded.root_path %></li>
4
- <li><span><%= messageboard.name %></span></li>
5
- </ul>
6
- <% end %>
7
-
8
- <% content_for :actions do %>
9
- <ul class="actions">
10
- <%= render 'thredded/search/form' %>
11
-
12
- <% if can? :create, Thredded::Topic %>
13
- <li class='new_topic'>
14
- <%= link_to 'new topic', new_messageboard_topic_path(messageboard) %>
15
- </li>
16
- <li class='new_private_topic'>
17
- <%= link_to 'private topic', new_messageboard_private_topic_path(messageboard) %>
18
- </li>
19
- <% end %>
20
- </ul>
21
- <% end %>
22
-
23
- <header>
24
- <nav>
25
- <%= yield :breadcrumbs %>
26
- <%= yield :actions %>
27
- </nav>
28
-
29
- <%= render 'thredded/shared/currently_online' %>
30
- </header>
31
-
32
- <section class="topics">
33
- <% if @sticky.any? %>
34
- <div class="stuck">
35
- <%= render partial: 'thredded/topics/topic_condensed',
36
- collection: @sticky.decorate, as: :topic %>
37
- </div>
38
- <% end %>
39
-
40
- <div class="currently">
41
- <%= render partial: 'thredded/topics/topic_condensed',
42
- collection: @topics.decorate, as: :topic %>
43
- </div>
44
- </section>
45
-
46
- <footer>
47
- <%= paginate @topics %>
48
- <nav>
49
- <%= yield :actions %>
50
- <%= yield :breadcrumbs %>
51
- </nav>
52
- </footer>
@@ -1,3 +0,0 @@
1
- <li>
2
- <%= link_to 'New Topic', new_messageboard_topic_path %>
3
- </li>
@@ -1,18 +0,0 @@
1
- <header>
2
- <nav>
3
- <ul class="breadcrumbs">
4
- <li><%= link_to 'Forums', thredded.root_path %></li>
5
- <li><%= link_to messageboard.name, [messageboard, @topic] %></li>
6
- <li><span>Create New Topic</span></li>
7
- </ul>
8
- </nav>
9
- </header>
10
-
11
- <div class="topic form">
12
- <%= nested_form_for [messageboard, @topic], html: { multipart: true } do |form| %>
13
- <ul>
14
- <%= render 'form', form: form, messageboard: messageboard.decorate %>
15
- <li class="submit"><%= form.submit 'Create New Topic' %></li>
16
- </ul>
17
- <% end %>
18
- </div>
@@ -1,45 +0,0 @@
1
- <% content_for :breadcrumbs do %>
2
- <ul class="breadcrumbs">
3
- <li><%= link_to 'Forums', thredded.root_path %></li>
4
- <li><%= link_to messageboard.title,
5
- messageboard_topics_path(messageboard) %></li>
6
- <li><span>Results for "<%= params[:q]%>"</span></li>
7
- </ul>
8
- <% end %>
9
-
10
- <% content_for :actions do %>
11
- <ul class="actions">
12
- <%= render 'thredded/search/form' %>
13
-
14
- <% if can? :create, Thredded::Topic %>
15
- <li class='new_topic'>
16
- <%= link_to 'new topic', new_messageboard_topic_path(messageboard) %>
17
- </li>
18
- <li class='new_private_topic'>
19
- <%= link_to 'private topic', new_messageboard_private_topic_path(messageboard) %>
20
- </li>
21
- <% end %>
22
- </ul>
23
- <% end %>
24
-
25
- <header>
26
- <nav>
27
- <%= yield :breadcrumbs %>
28
- <%= yield :actions %>
29
- </nav>
30
-
31
- <%= render partial: 'shared/currently_online' %>
32
- </header>
33
-
34
- <section class="topics">
35
- <div class="currently">
36
- <%= render partial: 'topics/topic_condensed', collection: @topics, as: :t %>
37
- </div>
38
- </section>
39
-
40
- <footer>
41
- <nav>
42
- <%= yield :actions %>
43
- <%= yield :breadcrumbs %>
44
- </nav>
45
- </footer>
data/config/routes.rb DELETED
@@ -1,26 +0,0 @@
1
- require 'thredded/setup_thredded'
2
-
3
- Thredded::Engine.routes.draw do
4
- constraints(Thredded::SetupThredded.new) do
5
- resources :setups, path: '', only: [:new, :create]
6
- root to: 'setups#new'
7
- end
8
-
9
- constraints(lambda{|req| req.env['QUERY_STRING'].include? 'q=' }) do
10
- get '/:messageboard_id(.:format)' => 'topics#search', as: :messageboard_search
11
- end
12
-
13
- get '/:messageboard_id/new(.:format)' => 'topics#new', as: :new_messageboard_topic
14
- get '/:messageboard_id/:id/edit.(:format)' => 'topics#edit', as: :edit_messageboard_topic
15
-
16
- resources :messageboards, only: [:index], path: '' do
17
- resource :preferences
18
- resources :private_topics, only: [:new, :create]
19
-
20
- resources :topics, except: [:show], path: '' do
21
- resources :posts, path: ''
22
- end
23
- end
24
-
25
- root to: 'messageboards#index'
26
- end
@@ -1,143 +0,0 @@
1
- class CreateThreddedTables < ActiveRecord::Migration
2
- def change
3
- create_table :thredded_attachments do |t|
4
- t.string :attachment
5
- t.string :content_type
6
- t.integer :file_size
7
- t.integer :post_id
8
- t.timestamps
9
- end
10
-
11
- create_table :thredded_categories do |t|
12
- t.integer :messageboard_id, null: false
13
- t.string :name, null: false
14
- t.string :description
15
- t.timestamps
16
- end
17
-
18
- create_table :thredded_images do |t|
19
- t.integer :post_id
20
- t.integer :width
21
- t.integer :height
22
- t.string :orientation
23
- t.timestamps
24
- end
25
-
26
- create_table :thredded_messageboards do |t|
27
- t.string :name, null: false
28
- t.string :slug
29
- t.text :description
30
- t.string :security, default: 'public'
31
- t.string :posting_permission, default: 'anonymous'
32
- t.integer :topics_count, default: 0
33
- t.integer :posts_count, default: 0
34
- t.boolean :closed, default: false, null: false
35
- t.timestamps
36
- end
37
-
38
- add_index :thredded_messageboards, :closed
39
-
40
- create_table :thredded_post_notifications do |t|
41
- t.string :email, null: false
42
- t.integer :post_id, null: false
43
- t.timestamps
44
- end
45
-
46
- create_table :thredded_posts do |t|
47
- t.integer :user_id
48
- t.string :user_email
49
- t.text :content
50
- t.string :ip
51
- t.string :filter, default: 'markdown'
52
- t.string :source, default: 'web'
53
- t.integer :topic_id, null: false
54
- t.integer :messageboard_id, null: false
55
- t.timestamps
56
- end
57
-
58
- create_table :thredded_private_users do |t|
59
- t.integer :private_topic_id
60
- t.integer :user_id
61
- t.timestamps
62
- end
63
-
64
- create_table :thredded_messageboard_preferences do |t|
65
- t.boolean :notify_on_mention, default: true
66
- t.boolean :notify_on_message, default: true
67
- t.string :filter, default: 'markdown', null: false
68
- t.integer :user_id, null: false
69
- t.integer :messageboard_id, null: false
70
- t.timestamps
71
- end
72
-
73
- add_index :thredded_messageboard_preferences, :user_id
74
- add_index :thredded_messageboard_preferences, :messageboard_id
75
-
76
- create_table :thredded_roles do |t|
77
- t.string :level
78
- t.integer :user_id
79
- t.integer :messageboard_id
80
- t.datetime :last_seen
81
- t.timestamps
82
- end
83
-
84
- add_index :thredded_roles, :user_id
85
- add_index :thredded_roles, :messageboard_id
86
-
87
- create_table :thredded_topic_categories do |t|
88
- t.integer :topic_id, null: false
89
- t.integer :category_id, null: false
90
- end
91
-
92
- create_table :thredded_topics do |t|
93
- t.integer :user_id, null: false
94
- t.integer :last_user_id, null: false
95
- t.string :title, null: false
96
- t.string :slug, null: false
97
- t.integer :messageboard_id, null: false
98
- t.integer :posts_count, default: 0
99
- t.string :attribs, default: '[]'
100
- t.boolean :sticky, default: false
101
- t.boolean :locked, default: false
102
- t.string :hash_id, null: false
103
- t.string :state, default: 'approved', null: false
104
- t.string :type
105
- t.timestamps
106
- end
107
-
108
- create_table :thredded_user_details do |t|
109
- t.integer :user_id, null: false
110
- t.datetime :latest_activity_at
111
- t.integer :posts_count, default: 0
112
- t.integer :topics_count, default: 0
113
- t.boolean :superadmin, default: false
114
- t.timestamps
115
- end
116
-
117
- add_index :thredded_user_details, :user_id
118
- add_index :thredded_user_details, :latest_activity_at
119
-
120
- create_table :thredded_user_preferences do |t|
121
- t.integer :user_id, null: false
122
- t.string :time_zone, default: 'Eastern Time (US & Canada)'
123
- t.timestamps
124
- end
125
-
126
- add_index :thredded_user_preferences, :user_id
127
-
128
- create_table :thredded_user_topic_reads do |t|
129
- t.integer :user_id, null: false
130
- t.integer :topic_id, null: false
131
- t.integer :post_id, null: false
132
- t.integer :posts_count, default: 0, null: false
133
- t.integer :page, default: 1, null: false
134
- t.timestamps
135
- end
136
-
137
- add_index :thredded_user_topic_reads, :user_id
138
- add_index :thredded_user_topic_reads, :topic_id
139
- add_index :thredded_user_topic_reads, :post_id
140
- add_index :thredded_user_topic_reads, :page
141
- add_index :thredded_user_topic_reads, :posts_count
142
- end
143
- end
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :thredded do
3
- # # Task goes here
4
- # end
@@ -1,15 +0,0 @@
1
- module Thredded
2
- class AtNotificationExtractor
3
- def initialize(content)
4
- @content = content
5
- end
6
-
7
- def extract
8
- scanned_names = @content.scan(/@([\w]+)(\W)?/)
9
- scanned_names += @content.scan(/@"([\w\ ]+)"(\W)?/)
10
- scanned_names
11
- .map(&:first)
12
- .uniq
13
- end
14
- end
15
- end
@@ -1,65 +0,0 @@
1
- require 'thredded/at_notification_extractor'
2
-
3
- module Thredded
4
- class AtNotifier
5
- def initialize(post)
6
- @post = post
7
- end
8
-
9
- def notifications_for_at_users
10
- members = at_notifiable_members
11
-
12
- if members.present?
13
- user_emails = members.map(&:email)
14
- Thredded::PostMailer.at_notification(post.id, user_emails).deliver
15
- mark_notified(members)
16
- end
17
- end
18
-
19
- def at_notifiable_members
20
- at_names = Thredded::AtNotificationExtractor.new(post.content).extract
21
- members = post.messageboard.members_from_list(at_names).all
22
-
23
- members.delete post.user
24
- members = exclude_previously_notified(members)
25
- members = exclude_those_that_are_not_private(members)
26
- members = exclude_those_opting_out_of_at_notifications(members)
27
-
28
- members
29
- end
30
-
31
- private
32
-
33
- attr_reader :post
34
-
35
- def exclude_those_opting_out_of_at_notifications(members)
36
- members.reject do |member|
37
- !Thredded::MessageboardPreference
38
- .for(member)
39
- .in(post.messageboard)
40
- .first
41
- .try(:notify_on_mention?)
42
- end
43
- end
44
-
45
- def exclude_those_that_are_not_private(members)
46
- members.reject do |member|
47
- post.topic.private? && post.topic.users.exclude?(member)
48
- end
49
- end
50
-
51
- def exclude_previously_notified(members)
52
- emails_notified = post.post_notifications.map(&:email)
53
-
54
- members.reject do |member|
55
- emails_notified.include? member.email
56
- end
57
- end
58
-
59
- def mark_notified(members)
60
- members.each do |member|
61
- post.post_notifications.create(email: member.email)
62
- end
63
- end
64
- end
65
- end
@@ -1,17 +0,0 @@
1
- require 'thredded/at_notification_extractor'
2
-
3
- module Thredded
4
- class AtUsers
5
- def self.render(content, messageboard)
6
- at_names = AtNotificationExtractor.new(content).extract
7
- members = messageboard.members_from_list(at_names)
8
-
9
- members.each do |member|
10
- content.gsub!(/@#{member.name}/i,
11
- %Q{<a href="/users/#{member.name}">@#{member.name}</a>})
12
- end
13
-
14
- content
15
- end
16
- end
17
- end
@@ -1,74 +0,0 @@
1
- class EmailProcessor
2
- attr_accessor :email, :messageboard, :user
3
-
4
- def initialize(email)
5
- @email = email
6
- @user = find_user
7
- @messageboard = find_messageboard
8
- end
9
-
10
- def self.process(email)
11
- processor = self.new(email)
12
- processor.create_or_update_topic
13
- end
14
-
15
- def create_or_update_topic
16
- if can_post_to_topic?
17
- topic = find_or_build_topic
18
- post = topic.posts.build(
19
- user: user,
20
- content: email.body,
21
- source: 'email',
22
- messageboard: messageboard,
23
- attachments_attributes: attachment_params,
24
- )
25
- post.user_email = user.email
26
-
27
- topic.save
28
- else
29
- return false
30
- end
31
- end
32
-
33
- private
34
-
35
- def attachment_params
36
- @attachment_params = {}
37
-
38
- email.attachments.each_with_index do |attachment, i|
39
- @attachment_params[i.to_s] = { 'attachment' => attachment }
40
- end
41
-
42
- @attachment_params
43
- end
44
-
45
- def can_post_to_topic?
46
- user && messageboard &&
47
- Ability.new(user).can?(:create, messageboard.topics.new)
48
- end
49
-
50
- def find_or_build_topic
51
- topic = find_topic
52
-
53
- if topic.nil?
54
- topic = messageboard.topics.build(title: email.subject)
55
- topic.user = user
56
- topic.state = 'pending'
57
- end
58
-
59
- topic.last_user = user
60
- topic
61
- end
62
-
63
- def find_topic
64
- Topic.where(hash_id: email.to).first
65
- end
66
-
67
- def find_messageboard
68
- Messageboard.where(name: email.to).first || find_topic.try(:messageboard)
69
- end
70
-
71
- def find_user
72
- User.where(email: email.from).first
73
- end
74
- end
@@ -1,17 +0,0 @@
1
- module Thredded
2
- class Engine < ::Rails::Engine
3
- isolate_namespace Thredded
4
-
5
- config.autoload_paths << File.expand_path('../../../app/decorators', __FILE__)
6
-
7
- config.generators do |g|
8
- g.test_framework :rspec, fixture: true
9
- g.fixture_replacement :factory_girl, dir: 'spec/factories'
10
- g.helper false
11
- end
12
-
13
- config.after_initialize do
14
- Thredded.user_class.send(:include, Thredded::UserExtender)
15
- end
16
- end
17
- end
@@ -1,11 +0,0 @@
1
- require 'thredded/at_users'
2
-
3
- module Thredded
4
- module Filter
5
- module AtNotification
6
- def filtered_content
7
- @filtered_content = Thredded::AtUsers.render(super, messageboard).html_safe
8
- end
9
- end
10
- end
11
- end
@@ -1,51 +0,0 @@
1
- module Thredded
2
- module Filter
3
- module Attachment
4
- def filtered_content
5
- content = super
6
- matches = content.scan(/(?<full>\[t:(?<tag>\w+)=?(?<img_nmb>\d+)? ?(?<attribs>[^\]]+)?\])/)
7
-
8
- matches.each do |match|
9
- str_buff = ''
10
- full = match[0]
11
- tag = match[1]
12
- img_number = match[2] ? match[2].to_i - 1 : 0 # default to first attachment
13
- attribs = match[3]
14
-
15
- if(tag != 'img' || !self.attachments[img_number])
16
- next
17
- end
18
-
19
- # start with img tag
20
- str_buff += '<img '
21
-
22
- # get attachment object at spot img_number - 1
23
- attachment = self.attachments[img_number]
24
- str_buff += 'src="' + attachment.attachment.to_s + '" '
25
-
26
- # do attribute stuff, left right first
27
- if !attribs.nil?
28
- if align = attribs.match(/(left|right)/)
29
- str_buff += 'class="align_' + align[0] + '" '
30
- end
31
-
32
- # attributes, width x height
33
- if wxh = attribs.match(/(\d+)x?(\d+)?/)
34
- str_buff += 'width="' + wxh[1] + '" '
35
- height = wxh[2].nil? ? wxh[1] : wxh[2]
36
- str_buff += 'height="' + height + '" '
37
- end
38
- end
39
-
40
- # end img tag
41
- str_buff += '/>'
42
-
43
- # replace in post content
44
- content = content.sub(full, str_buff)
45
- end
46
-
47
- content.html_safe
48
- end
49
- end
50
- end
51
- end
@@ -1,13 +0,0 @@
1
- module Thredded
2
- module Filter
3
- module Base
4
- Filters = []
5
-
6
- def filters; Filters; end
7
-
8
- def filtered_content
9
- self.content
10
- end
11
- end
12
- end
13
- end
@@ -1,75 +0,0 @@
1
- module Thredded
2
- module Filter
3
- module Bbcode
4
- require 'bb-ruby'
5
-
6
- BB = {
7
- 'Spoilers' => [
8
- /\[spoiler\](.*?)\[\/spoiler\1?\]/mi,
9
- '<blockquote class="spoiler">\1</blockquote>',
10
- 'Spoiler Text',
11
- '[spoiler]Dumbledore dies[/spoiler]',
12
- :spoiler],
13
- 'YouTube' => [
14
- /\[youtube\]https?\:\/\/(www\.)?youtube.com\/((watch)?\?vi?=|embed\/)(.*?)\[\/youtube\1?\]/i,
15
- '<iframe class="youtube" width="560" height="315" src="//www.youtube.com/embed/\4?&rel=0&theme=light&showinfo=0&hd=1&autohide=1&color=white" frameborder="0" allowfullscreen="allowfullscreen"></iframe>',
16
- 'Youtube Video',
17
- :video],
18
- 'Link (Legacy)' => [
19
- /\[link=(?:&quot;)?(.*?)(?:&quot;)?\](.*?)\[\/link\]/mi,
20
- '<a href="\1">\2</a>',
21
- 'Hyperlink to somewhere else',
22
- 'Maybe try looking on [link=http://google.com]Google[/link]?',
23
- :link],
24
- 'Link (Legacy Implied)' => [
25
- /\[link\](.*?)\[\/link\]/mi,
26
- '<a href="\1">\1</a>',
27
- 'Hyperlink (legacy implied)',
28
- "Maybe try looking on [link]http://google.com[/link]",
29
- :link],
30
- }
31
-
32
- def self.included(base)
33
- base.class_eval do
34
- Thredded::Post::Filters << :bbcode
35
- end
36
- end
37
-
38
- def filtered_content
39
- if filter.to_sym == :bbcode
40
- content = super
41
- content = replace_code_tags(content)
42
- content = replace_quote_tags(content)
43
- content = content.bbcode_to_html(BB)
44
- content = remove_empty_p_tags(content)
45
- content = CGI.unescapeHTML(content)
46
-
47
- content.html_safe
48
- else
49
- super
50
- end
51
- end
52
-
53
- def replace_code_tags(content)
54
- content.gsub!(/\[code\]/, '<pre><code>')
55
- content.gsub!(/\[code:(\D+?)\]/, '<pre><code class="language-\1" lang="\1">')
56
- content.gsub!(/\[\/code\]/, '</code></pre>')
57
- content.html_safe
58
- end
59
-
60
- def replace_quote_tags(content)
61
- content.gsub!(/\[quote(:.*)?=(?:&quot;)?(.*?)(?:&quot;)?\]/,
62
- '</p><fieldset><legend>\2</legend><blockquote><p>')
63
- content.gsub!(/\[quote(:.*?)?\]/,
64
- '</p><fieldset><blockquote><p>')
65
- content.gsub!(/\[\/quote\]/,
66
- '</p></blockquote></fieldset><p>')
67
- content.html_safe
68
- end
69
-
70
- def remove_empty_p_tags(content)
71
- content.gsub(/&lt;p&gt;\s*?&lt;\/p&gt;/, '')
72
- end
73
- end
74
- end
75
- end
@@ -1,11 +0,0 @@
1
- require 'rails_emoji'
2
-
3
- module Thredded
4
- module Filter
5
- module Emoji
6
- def filtered_content
7
- @filtered_content = RailsEmoji.render(super, size: 26).html_safe
8
- end
9
- end
10
- end
11
- end