Skip to content

Commit ffa3b21

Browse files
committed
feat: render the search result page nicely
1 parent 9e6af39 commit ffa3b21

File tree

3 files changed

+57
-23
lines changed

3 files changed

+57
-23
lines changed

app/assets/stylesheets/messages.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,11 @@
55
border-bottom: 1px solid #000;
66
}
77

8+
.search {
9+
padding: 0 0 1rem 0;
10+
border-bottom: 1px solid #000;
11+
}
12+
13+
h2 {
14+
font-size: 100%;
15+
}

app/helpers/messages_helper.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,24 @@
11
module MessagesHelper
2+
def without_list_prefix(subject)
3+
subject.sub(/^\[.+\]\s*/, '')
4+
end
5+
6+
MARGIN = 50
7+
def search_snippet(body, keyword)
8+
snippet = ''
9+
10+
offset = 0
11+
while (i = body.index(keyword, offset))
12+
start = [i - MARGIN, offset].max
13+
len = keyword.length + MARGIN
14+
snippet += body[start, len]
15+
offset = start + len
16+
end
17+
18+
if snippet.empty?
19+
return body[0, MARGIN * 2]
20+
else
21+
snippet
22+
end
23+
end
224
end

app/views/messages/index.html.erb

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,36 @@
22

33
<h1>blade.ruby-lang.org</h1>
44

5-
<%= form_with(method: :get) do |form| %>
6-
<%= form.text_field :q, { value: params[:q] } %>
7-
<%= form.submit "Search" %>
5+
<div class="search">
6+
<%= form_with(method: :get) do |form| %>
7+
<%= form.text_field :q, { value: params[:q] } %>
8+
<%= form.submit "Search" %>
89

9-
<p>
10-
<%
11-
[
12-
[:ruby_talk, 'ruby-talk (English)'],
13-
[:ruby_core, 'ruby-core (For developing Ruby iself, English)'],
14-
[:ruby_list, 'ruby-list (Japanese)'],
15-
[:ruby_dev, 'ruby-dev (For developing Ruby itself, Japanese)'],
16-
].each do |name, label|
17-
%>
18-
<span>
19-
<%= form.check_box name, {checked: params[name] != '0' } %>
20-
<%= form.label name, label %>
21-
</span>
22-
<% end %>
23-
</p>
24-
<% end %>
10+
<p>
11+
<%
12+
[
13+
[:ruby_talk, 'ruby-talk (English)'],
14+
[:ruby_core, 'ruby-core (For developing Ruby iself, English)'],
15+
[:ruby_list, 'ruby-list (Japanese)'],
16+
[:ruby_dev, 'ruby-dev (For developing Ruby itself, Japanese)'],
17+
].each do |name, label|
18+
%>
19+
<span>
20+
<%= form.check_box name, {checked: params[name] != '0' } %>
21+
<%= form.label name, label %>
22+
</span>
23+
<% end %>
24+
</p>
25+
<% end %>
26+
</div>
2527

2628
<% @messages.each do |message| %>
27-
<div>
29+
<div class="search-result">
2830
<% list_name = List.find_by_id(message.list_id).name %>
29-
<%= list_name %>:<%= message.list_seq %>
30-
<%= link_to message.subject, "/#{list_name}/#{message.list_seq}" %>
31-
<small><%= message.body %></small>
31+
<h2 class="subject">
32+
<span class="prefix"><%= list_name %>:<%= message.list_seq %></span>
33+
<%= link_to without_list_prefix(message.subject), "/#{list_name}/#{message.list_seq}" %>
34+
</h2>
35+
<div class="snippet"><%= search_snippet(message.body, params[:q]) %></div>
3236
</div>
3337
<% end %>

0 commit comments

Comments
 (0)