radiant-forum-extension 2.0.4 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/app/controllers/posts_controller.rb +13 -7
- data/app/models/post.rb +10 -4
- data/app/views/admin/forums/index.html.haml +3 -11
- data/app/views/forums/_standard_parts.html.haml +2 -5
- data/app/views/forums/index.html.haml +5 -0
- data/app/views/posts/_post.html.haml +1 -1
- data/app/views/posts/_search_form.html.haml +13 -10
- data/app/views/posts/index.html.haml +22 -8
- data/app/views/topics/_latest.html.haml +1 -1
- data/app/views/topics/index.html.haml +1 -0
- data/config/initializers/radiant_config.rb +1 -0
- data/config/locales/en.yml +15 -11
- data/forum_extension.rb +1 -1
- data/lib/forum_tags.rb +1 -1
- data/public/javascripts/gallery.js +7 -4
- data/radiant-forum-extension.gemspec +2 -2
- data/spec/lib/forum_tags_spec.rb +3 -3
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.5
|
@@ -7,11 +7,11 @@ class PostsController < ForumBaseController
|
|
7
7
|
before_filter :require_authority, :only => [:edit, :update, :destroy]
|
8
8
|
|
9
9
|
def index
|
10
|
-
|
11
|
-
posts =
|
10
|
+
@term = params[:q]
|
11
|
+
posts = @forum ? Post.in_forum(@forum) : Post.scoped
|
12
|
+
posts = posts.containing(@term) unless @term.blank?
|
13
|
+
posts = posts.from_reader(@reader) if @reader
|
12
14
|
posts = posts.in_topic(@topic) if @topic
|
13
|
-
posts = posts.in_forum(@forum) if @forum
|
14
|
-
posts = posts.containing(@term) if @term = params[:q]
|
15
15
|
@posts = posts.paginate(pagination_parameters)
|
16
16
|
render_page_or_feed
|
17
17
|
end
|
@@ -29,8 +29,12 @@ class PostsController < ForumBaseController
|
|
29
29
|
@post.topic = @forum.topics.new
|
30
30
|
end
|
31
31
|
respond_to do |format|
|
32
|
-
format.html {
|
33
|
-
|
32
|
+
format.html {
|
33
|
+
expires_now
|
34
|
+
}
|
35
|
+
format.js {
|
36
|
+
render :partial => 'posts/form', :layout => false
|
37
|
+
}
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
@@ -51,7 +55,9 @@ class PostsController < ForumBaseController
|
|
51
55
|
|
52
56
|
def edit
|
53
57
|
respond_to do |format|
|
54
|
-
format.html {
|
58
|
+
format.html {
|
59
|
+
expires_now
|
60
|
+
}
|
55
61
|
format.js { render :partial => 'posts/form' }
|
56
62
|
end
|
57
63
|
end
|
data/app/models/post.rb
CHANGED
@@ -20,9 +20,11 @@ class Post < ActiveRecord::Base
|
|
20
20
|
named_scope :non_comments, :conditions => "page_id IS NULL"
|
21
21
|
named_scope :imported, :conditions => "old_id IS NOT NULL"
|
22
22
|
named_scope :in_topic, lambda { |topic| { :conditions => ["topic_id = ?", topic.id] }}
|
23
|
-
named_scope :in_topics, lambda { |topics|
|
24
|
-
|
25
|
-
|
23
|
+
named_scope :in_topics, lambda { |topics|
|
24
|
+
ids = topics.map(&:id)
|
25
|
+
{ :conditions => ["topic_id IN (#{ids.map{"?"}.join(',')})", *ids] }
|
26
|
+
}
|
27
|
+
named_scope :from_reader, lambda { |reader| { :conditions => ["reader_id = ?", reader.id] }}
|
26
28
|
named_scope :latest, lambda { |count| { :order => 'created_at DESC', :limit => count }}
|
27
29
|
named_scope :except, lambda { |post| { :conditions => ["NOT posts.id = ?", post.id] }}
|
28
30
|
named_scope :distinct_readers, :select => "DISTINCT posts.reader_id" do
|
@@ -32,11 +34,15 @@ class Post < ActiveRecord::Base
|
|
32
34
|
end
|
33
35
|
named_scope :containing, lambda { |term|
|
34
36
|
{
|
35
|
-
:conditions => "posts.body LIKE :term OR topics.name LIKE :term", :term => "%#{term}%",
|
37
|
+
:conditions => ["posts.body LIKE :term OR topics.name LIKE :term", {:term => "%#{term}%"}],
|
36
38
|
:joins => "LEFT OUTER JOIN topics on posts.topic_id = topics.id"
|
37
39
|
}
|
38
40
|
}
|
39
41
|
|
42
|
+
def self.in_forum(forum)
|
43
|
+
in_topics(forum.topics)
|
44
|
+
end
|
45
|
+
|
40
46
|
def holder
|
41
47
|
page || topic
|
42
48
|
end
|
@@ -24,9 +24,6 @@
|
|
24
24
|
- tbody.title_cell do
|
25
25
|
%td.name
|
26
26
|
= link_to forum.name, edit_admin_forum_url(:id => forum)
|
27
|
-
-if forum.for_comments
|
28
|
-
%p.context
|
29
|
-
= t('for_comments')
|
30
27
|
|
31
28
|
- tbody.description_cell do
|
32
29
|
%td.forum_description
|
@@ -57,17 +54,12 @@
|
|
57
54
|
|
58
55
|
- tbody.modify_cell do
|
59
56
|
%td.actions
|
60
|
-
-if
|
57
|
+
- if admin?
|
58
|
+
= link_to image('minus') + ' ' + t('remove'), remove_admin_forum_url(:id => forum) , :class => 'action'
|
59
|
+
- else
|
61
60
|
%span.action.disabled
|
62
61
|
= image('minus_disabled')
|
63
62
|
= " " + t('remove')
|
64
|
-
-else
|
65
|
-
- if admin?
|
66
|
-
= link_to image('minus') + ' ' + t('remove'), remove_admin_forum_url(:id => forum) , :class => 'action'
|
67
|
-
- else
|
68
|
-
%span.action.disabled
|
69
|
-
= image('minus_disabled')
|
70
|
-
= " " + t('remove')
|
71
63
|
|
72
64
|
- render_region :bottom do |bottom|
|
73
65
|
- bottom.buttons do
|
@@ -16,11 +16,8 @@
|
|
16
16
|
= link_to t('navigation.forums'), forums_url
|
17
17
|
= link_to t('navigation.readers'), readers_url
|
18
18
|
= link_to t('navigation.new_topic'), new_post_url
|
19
|
-
|
20
|
-
|
21
|
-
= link_to t('log_out'), reader_logout_url
|
22
|
-
- else
|
23
|
-
= link_to t('log_in'), reader_login_url
|
19
|
+
= link_to t('navigation.your_account'), reader_account_url
|
20
|
+
= link_to t('navigation.search'), posts_url
|
24
21
|
- if Radiant::Config['forum.help_url']
|
25
22
|
= link_to t('navigation.forum_help'), Radiant::Config['forum.help_url']
|
26
23
|
|
@@ -1,8 +1,10 @@
|
|
1
|
-
%form.friendly{:action => posts_url}
|
1
|
+
%form.friendly{:action => posts_url, :method => :get}
|
2
|
+
%h2
|
3
|
+
=t('search_header')
|
2
4
|
%p
|
3
5
|
%label{:for => "q"}
|
4
6
|
= t('search_form.query_label')
|
5
|
-
= text_field_tag "q", params[:q], :class => '
|
7
|
+
= text_field_tag "q", params[:q], :class => 'titular'
|
6
8
|
|
7
9
|
%p
|
8
10
|
%label{:for => "forum_id"}
|
@@ -12,13 +14,14 @@
|
|
12
14
|
%option{:value => ""}= t('anywhere')
|
13
15
|
= options_from_collection_for_select(Forum.find(:all), "id", "name", params[:forum_id].to_i)
|
14
16
|
|
15
|
-
|
16
|
-
%
|
17
|
-
|
18
|
-
|
19
|
-
%
|
20
|
-
|
21
|
-
|
17
|
+
- if Radiant::Config['forum.allow_search_by_reader?']
|
18
|
+
%p
|
19
|
+
%label{:for => "reader_id"}
|
20
|
+
= t('search_form.person_label')
|
21
|
+
%select{:name => "reader_id"}
|
22
|
+
%option{:value => ""}
|
23
|
+
=t('anyone')
|
24
|
+
= options_from_collection_for_select(Reader.find(:all), "id", "name", params[:reader_id].to_i)
|
22
25
|
|
23
26
|
%p.buttons
|
24
|
-
|
27
|
+
%input{:type => 'submit', :value => "Search"}
|
@@ -1,18 +1,27 @@
|
|
1
|
+
- if !@term.blank? || @reader || @forum || @topic
|
2
|
+
- @searching = true
|
3
|
+
- summary = [t('showing_posts')]
|
4
|
+
- summary << t('in') + ' ' + link_to(@forum.name, forum_url(@forum)) if @forum
|
5
|
+
- summary << t('containing') + " <strong>#{@term}</strong>" unless @term.blank?
|
6
|
+
- summary << t('posted_by') + ' ' + link_to(@reader.name, reader_url(@reader)) if @reader
|
7
|
+
- summary << t('in_topic') + ' ' + link_to(@topic.name, forum_topic_url(@topic.forum, @topic)) if @topic
|
8
|
+
|
1
9
|
= render :partial => 'forums/standard_parts'
|
2
10
|
|
3
11
|
- content_for :title do
|
4
12
|
= t('posts_heading')
|
5
13
|
|
6
14
|
- content_for :introduction do
|
7
|
-
|
15
|
+
- if @searching
|
16
|
+
= summary.join(' ') + ":"
|
17
|
+
- else
|
18
|
+
= t('posts_introduction')
|
8
19
|
|
9
20
|
- content_for :sidebar do
|
21
|
+
- unless @searching && @posts.empty?
|
22
|
+
= render :partial => 'posts/search_form'
|
10
23
|
= render :partial => "topics/latest"
|
11
24
|
|
12
|
-
- content_for :newtopic do
|
13
|
-
.newmessage
|
14
|
-
= link_to t('new_topic'), new_post_url
|
15
|
-
|
16
25
|
- content_for :pagination do
|
17
26
|
= pagination_and_summary_for(@posts, t('post'))
|
18
27
|
|
@@ -26,11 +35,16 @@
|
|
26
35
|
|
27
36
|
- content_for :messages do
|
28
37
|
- if @posts.empty?
|
29
|
-
|
30
|
-
|
38
|
+
- if @searching
|
39
|
+
%p.has_error
|
40
|
+
= t('no_search_results')
|
41
|
+
= render :partial => 'posts/search_form'
|
42
|
+
- else
|
43
|
+
%p
|
44
|
+
= t('no_posts')
|
31
45
|
- else
|
32
46
|
= yield :pagination if @posts.previous_page
|
33
|
-
= render :partial => 'posts/post', :collection => @posts, :locals => {:with_context => true}
|
47
|
+
= render :partial => 'posts/post', :collection => @posts, :locals => {:with_context => true, :headless => false}
|
34
48
|
= yield :pagination if @posts.next_page
|
35
49
|
|
36
50
|
#forum
|
@@ -12,5 +12,6 @@ Radiant.config do |config|
|
|
12
12
|
forum.define 'paginate_posts?', :default => true
|
13
13
|
forum.define 'posts_per_page', :type => :integer, :default => 20
|
14
14
|
forum.define 'commentable_period', :type => :integer, :default => 7, :units => "days"
|
15
|
+
forum.define 'allow_search_by_reader?', :default => true
|
15
16
|
end
|
16
17
|
end
|
data/config/locales/en.yml
CHANGED
@@ -32,13 +32,7 @@ en:
|
|
32
32
|
confirm_remove_forum: "Delete forum?"
|
33
33
|
confirm_remove_post: "Delete post?"
|
34
34
|
confirm_remove_topic: "Delete topic?"
|
35
|
-
|
36
|
-
formats:
|
37
|
-
recently: "%A at %l:%M%p"
|
38
|
-
standard: "on %B %e, %Y at %l:%M%p"
|
39
|
-
this_year: "%B %e at %l:%M%p"
|
40
|
-
today: "today at %l:%M%p"
|
41
|
-
yesterday: "yesterday at %l:%M%p"
|
35
|
+
containing: "containing the phrase"
|
42
36
|
definitely_remove_post: "Yes: delete it"
|
43
37
|
edit_forum: "Edit forum"
|
44
38
|
edit_minimal: "e"
|
@@ -85,6 +79,7 @@ en:
|
|
85
79
|
forums: "Categories"
|
86
80
|
readers: "People"
|
87
81
|
new_topic: "New topic"
|
82
|
+
search: "Search"
|
88
83
|
topics: "Latest"
|
89
84
|
your_account: "Your account"
|
90
85
|
new_forum: "New forum"
|
@@ -101,6 +96,7 @@ en:
|
|
101
96
|
no_messages_yet: "No messages yet"
|
102
97
|
no_posts: "The forum is empty."
|
103
98
|
no_posts_found: "No messages found."
|
99
|
+
no_search_results: "Sorry: no messages match your criteria. Please use the form below to broaden your search."
|
104
100
|
no_topics: "No talk here yet."
|
105
101
|
notice:
|
106
102
|
topic_deleted: "Topic '%{name}' was deleted."
|
@@ -126,8 +122,8 @@ en:
|
|
126
122
|
zero: "Nothing found"
|
127
123
|
one: "One message found"
|
128
124
|
other: "%{count} messages found"
|
129
|
-
posts_heading: "
|
130
|
-
posts_introduction: 'This
|
125
|
+
posts_heading: "Search the forum"
|
126
|
+
posts_introduction: 'This begins as a full list of all the posts in the forum. Add criteria below to cut down the list to specific subjects and speakers.'
|
131
127
|
really_remove_post: "Are you sure you want to delete this comment?"
|
132
128
|
recent_topics: "Recent topics"
|
133
129
|
remove_minimal: "x"
|
@@ -147,10 +143,12 @@ en:
|
|
147
143
|
person_label: "From this person"
|
148
144
|
query_label: "Look for this text"
|
149
145
|
search_whole_forum: "search the whole forum"
|
146
|
+
search_header: "Forum Search"
|
150
147
|
search_introduction: "Please choose a search phrase and/or a person or discussion category."
|
151
148
|
search_results: "Search Results"
|
152
149
|
separator: ':'
|
153
150
|
showing: "showing"
|
151
|
+
showing_posts: "Showing topics and messages"
|
154
152
|
sorry_locked: "Sorry: this topic is locked."
|
155
153
|
start_topic: "Start a new conversation"
|
156
154
|
started: "started"
|
@@ -158,6 +156,13 @@ en:
|
|
158
156
|
started_topic_in: "started a new topic under"
|
159
157
|
started_topic_on: "started a new topic on %{date}"
|
160
158
|
sticky: "sticky"
|
159
|
+
time:
|
160
|
+
formats:
|
161
|
+
recently: "%A at %l:%M%p"
|
162
|
+
standard: "on %B %e, %Y at %l:%M%p"
|
163
|
+
this_year: "%B %e at %l:%M%p"
|
164
|
+
today: "today at %l:%M%p"
|
165
|
+
yesterday: "yesterday at %l:%M%p"
|
161
166
|
time_remaining_to_edit: "You have %{time} left to "
|
162
167
|
topic_count:
|
163
168
|
zero: "No discussion."
|
@@ -165,7 +170,6 @@ en:
|
|
165
170
|
other: "%{count} topics, most recently "
|
166
171
|
topic_show_introduction: ""
|
167
172
|
topic_removed: "Topic removed"
|
168
|
-
post_removed: "Post removed"
|
169
173
|
to: "to"
|
170
174
|
to_add_post: "To add a %{message_type}"
|
171
175
|
topic: "topic"
|
@@ -174,6 +178,6 @@ en:
|
|
174
178
|
topic_name: "Topic name"
|
175
179
|
topics: "Topics"
|
176
180
|
topics_heading: "Latest topics"
|
177
|
-
topics_introduction: 'This is a list of all the discussions going on here, with the most recently updated first. You can also see a more organised list of <a href="/forum/forums">discussion categories</a> or
|
181
|
+
topics_introduction: 'This is a list of all the discussions going on here, with the most recently updated first. You can also see a more organised list of <a href="/forum/forums">discussion categories</a> or <a href="/forum/posts">search</a> for particular posts and people.'
|
178
182
|
under: "under"
|
179
183
|
unknown_date: "unknown date"
|
data/forum_extension.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require_dependency 'application_controller'
|
2
2
|
|
3
3
|
class ForumExtension < Radiant::Extension
|
4
|
-
version "2.0.
|
4
|
+
version "2.0.5"
|
5
5
|
description "Nice clean forums and page comments for inclusion in your radiant site. Requires the reader extension and share_layouts."
|
6
6
|
url "http://spanner.org/radiant/forum"
|
7
7
|
|
data/lib/forum_tags.rb
CHANGED
@@ -145,7 +145,7 @@ module ForumTags
|
|
145
145
|
desc %{
|
146
146
|
Renders the reply date of the current topic in a colloquial form.
|
147
147
|
}
|
148
|
-
tag 'forum:topic:
|
148
|
+
tag 'forum:topic:replydate' do |tag|
|
149
149
|
I18n.l tag.locals.topic.replied_at, :format => :standard
|
150
150
|
end
|
151
151
|
|
@@ -38,6 +38,7 @@
|
|
38
38
|
mimic: function () {
|
39
39
|
self.zoomer.setImage(self.item.src);
|
40
40
|
self.image.attr('src', self.item.src);
|
41
|
+
self.controls.find('a.download').attr('href', self.item.download_url());
|
41
42
|
if (self.item.caption.html()) self.caption.html(self.item.caption.html()).show();
|
42
43
|
else self.caption.hide();
|
43
44
|
},
|
@@ -96,7 +97,6 @@
|
|
96
97
|
showControls: function (e) {
|
97
98
|
self.controls.fadeIn("fast");
|
98
99
|
self.closer.fadeIn("fast");
|
99
|
-
self.controls.find('a.download').attr('href', self.item.download_url());
|
100
100
|
},
|
101
101
|
hideControls: function (e) {
|
102
102
|
self.controls.fadeOut("fast");
|
@@ -108,11 +108,13 @@
|
|
108
108
|
var w = $(window);
|
109
109
|
var d = item.imageSize();
|
110
110
|
var p = self.container.offset();
|
111
|
-
|
112
|
-
self.container.animate({
|
111
|
+
var r = {
|
113
112
|
left: p.left + (self.image.innerWidth() - d.width)/2,
|
114
113
|
top: p.top + (self.image.innerHeight() - d.height)/2
|
115
|
-
}
|
114
|
+
};
|
115
|
+
if (resized.top <= 10) resized.top = 10;
|
116
|
+
self.image.animate(d, 'fast');
|
117
|
+
self.container.animate(r, 'fast');
|
116
118
|
self.controls.css({left: (d.width - 96)/2});
|
117
119
|
},
|
118
120
|
reposition: function (item) {
|
@@ -123,6 +125,7 @@
|
|
123
125
|
top: w.scrollTop() + (w.height() - d.height)/2,
|
124
126
|
left: w.scrollLeft() + (w.width() - d.width)/2
|
125
127
|
};
|
128
|
+
if (p.top <= 10) p.top = 10;
|
126
129
|
if (self.visible) {
|
127
130
|
self.image.animate(d, 'fast');
|
128
131
|
self.container.animate(p, 'fast');
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{radiant-forum-extension}
|
8
|
-
s.version = "2.0.
|
8
|
+
s.version = "2.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["spanner"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-07}
|
13
13
|
s.description = %q{Nice clean forums and page comments for inclusion in your radiant site. Derived long ago from beast. Requires the reader extension and share_layouts.}
|
14
14
|
s.email = %q{will@spanner.org}
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/lib/forum_tags_spec.rb
CHANGED
@@ -17,11 +17,11 @@ describe "Forum Tags" do
|
|
17
17
|
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:author /></r:forum:topic>}).as("Normal") }
|
18
18
|
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:date /></r:forum:topic>}).as(on_date) }
|
19
19
|
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:url /></r:forum:topic>}).as("/forum/forums/#{topic.forum.id}/topics/#{topic.id}") }
|
20
|
-
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:context /></r:forum:topic>}).as(%{
|
20
|
+
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:context /></r:forum:topic>}).as(%{reply from <a href="/readers/#{reader_id(:normal)}">Normal</a>}) }
|
21
21
|
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:body /></r:forum:topic>}).as("<p>original topic message</p>") }
|
22
22
|
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:link /></r:forum:topic>}).as(%{<a href="/forum/forums/#{topic.forum.id}/topics/#{topic.id}">#{topic.name}</a>}) }
|
23
|
-
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:summary /></r:forum:topic>}).as(%{<li><a href="/forum/forums/#{topic.forum.id}/topics/#{topic.id}">#{topic.name}</a><br />
|
24
|
-
it { should render(%{<r:forum:topic id="#{sticky.id}"><r:forum:topic:summary /></r:forum:topic>}).as(%{<li><a href="/forum/forums/#{sticky.forum.id}/topics/#{sticky.id}">#{sticky.name}</a><br />Started by <a href="/readers/#{reader_id(:normal)}">Normal</a
|
23
|
+
it { should render(%{<r:forum:topic id="#{topic.id}"><r:forum:topic:summary /></r:forum:topic>}).as(%{<li><a href="/forum/forums/#{topic.forum.id}/topics/#{topic.id}">#{topic.name}</a><br />reply from <a href="/readers/#{reader_id(:normal)}">Normal</a></li>}) }
|
24
|
+
it { should render(%{<r:forum:topic id="#{sticky.id}"><r:forum:topic:summary /></r:forum:topic>}).as(%{<li><a href="/forum/forums/#{sticky.forum.id}/topics/#{sticky.id}">#{sticky.name}</a><br />Started by <a href="/readers/#{reader_id(:normal)}">Normal</a></li>}) }
|
25
25
|
end
|
26
26
|
|
27
27
|
describe "r:forum:post tags" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: radiant-forum-extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
9
|
+
- 5
|
10
|
+
version: 2.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- spanner
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-07 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|