biblesearch / templates / index.html.ep /
Newer Older
204 lines | 6.296kb
add files
Yuki Kimoto authored on 2014-03-26
1
<%
2
  my $dbi = app->dbi;
3
  my $op = param('op') // '';
4
  my $book_id = param('book-id');
5
  
improve design
Yuki Kimoto authored on 2014-03-27
6
  my $show_word_count;
7
  my $word_count_h = {};
8
  my $word = param('word');
9
  my $word_length = length $word;
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
10
  my $word_q = quotemeta($word) if defined $word;
improve design
Yuki Kimoto authored on 2014-03-27
11
  if ($word_length) {
12
    $show_word_count = 1;
13
    for (my $i = 0; $i < 66; $i++) {
14
      my $num = sprintf "%02d", $i + 1;
15
      
16
      my $content = $dbi->select(
17
        'content_no_tag',
18
        table => 'book',
19
        where => {id => $num}
20
      )->value;
21
      my $content_length = length $content;
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
22
      $content =~ s/$word_q//g;
improve design
Yuki Kimoto authored on 2014-03-27
23
      my $content_length_no_word = length $content;
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
24
      
25
      # 文字の個数
improve design
Yuki Kimoto authored on 2014-03-27
26
      my $word_count = ($content_length - $content_length_no_word) / $word_length;
27
      $word_count_h->{$num} = $word_count;
28
    }
29
  }
30
  
improve design
Yuki Kimoto authored on 2014-03-27
31
  my $books = $dbi->model('book')->select(['id', 'short_name'])->all;
add files
Yuki Kimoto authored on 2014-03-26
32
  
improve design
Yuki Kimoto authored on 2014-03-27
33
  my $content;
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
34
  my $max_search_pos;
improve design
Yuki Kimoto authored on 2014-03-27
35
  if ($book_id) {
36
    $content = $dbi->model('book')->select(
37
      'content',
38
      where => {id => $book_id}
39
    )->value;
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
40
    
41
    # アンカーを追加
42
    if ($word_length) {
43
      my $i = 1;
44
      my $replace_cb = sub {
45
        my $word = shift;
46
        my $after = qq|<a style="background:#00ffff" id="word-$i">$word</a>|;
47
        $i++;
48
        return $after;
49
      };
50
      $content =~ s#($word_q)#$replace_cb->($1)#ge;
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
51
      $max_search_pos = $i - 1;
52
    }
53
  }
54
  
55
  # 前と次の見つかった書籍
56
  my $next_book_id;
57
  my $prev_book_id;
58
  my $found_books = [];
59
  for my $book (@$books) {
60
    if (!$word_length || $word_count_h->{$book->{id}} > 0) {
61
      push @$found_books, $book;
62
    }
63
  }
64
  for (my $i = 0; $i < @$found_books; $i++) {
65
    if ($book_id eq $found_books->[$i]{id}) {
66
      $prev_book_id = $found_books->[$i - 1]{id} if $i > 0;
67
      $next_book_id = $found_books->[$i + 1]{id} if $i < @$found_books;
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
68
    }
improve design
Yuki Kimoto authored on 2014-03-27
69
  }
add files
Yuki Kimoto authored on 2014-03-26
70
%>
71

            
72

            
73
% layout 'common';
74

            
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
75
%= javascript begin
76
  $(document).ready(function () {
77
    
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
78
    var fragment = location.hash;
79
    var current_pos;
80
    if (fragment) {
81
      var ret = fragment.match(/word-(\d)/);
82
      current_pos = ret[1] - 0;
83
    }
84
    else {
85
      current_pos = 1;
86
    }
87
    $("#word-pos").text(current_pos);
88
    
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
89
    $("#up-arrow").on('click', function () {
90
      var current_pos = $('#word-pos').text();
91
      var prev_pos = current_pos - 1;
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
92
      
93
      if (prev_pos < 1) {
94
        location.href = "<%= url_for('/')->query(word => $word, 'book-id' => $prev_book_id)->fragment("word-$word_count_h->{$prev_book_id}") %>";
95
      } else {
96
        location.href = '#word-' + prev_pos;
97
        $('#word-pos').text(prev_pos);
98
      }
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
99
    });
100

            
101
    $("#down-arrow").on('click', function () {
102
      var current_pos = $('#word-pos').text();
103
      var next_pos = current_pos - 0 + 1;
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
104
      
105
      if (next_pos > <%= $max_search_pos %>) {
106
        location.href = "<%= url_for('/')->query(word => $word, 'book-id' => $next_book_id)->fragment('word-1') %>";
107
      }
108
      else {
109
        location.href = '#word-' + next_pos;
110
        $('#word-pos').text(next_pos);
111
      }
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
112
    });
113
  });
114
% end
115

            
add files
Yuki Kimoto authored on 2014-03-26
116
<div id="container">
117

            
118
  <div id="boxA">
119
    <h1>口語訳聖書オンライン語句検索</h1>
120
  </div>
121

            
122
  <div id="boxB">
improve design
Yuki Kimoto authored on 2014-03-27
123
      <form style="margin-bottom:5px" action="<%= url_for('current') %>" method="get">
add files
Yuki Kimoto authored on 2014-03-26
124
        <%= text_field 'word' , style => "width:160px"%>
improve design
Yuki Kimoto authored on 2014-03-27
125
        <input type="submit" value="検索" style="width:50px;padding:2px;">
126
      </form>
add files
Yuki Kimoto authored on 2014-03-26
127
      <div style="margin-bottom:10px;">
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
128
        <table style="border-collapse: collapse;width:100%;color:#333333">
129
          <tr>
130
            <td style="width:90px">
131
              <a href="<%= url_for('/') %>" style="color:blue">聖書</a>
132
            </td>
133
            <td>
134
              % if ($word_length) {
135
                <span>
136
                  <a id="up-arrow" href="javascript:void()">▲</a>
137
                  <div id="word-pos" style="display:inline-block;border:1px solid #DDDDDD;padding:2px 5px;width:35px;text-align:center">
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
138
                    <%= $book_id ? ' ' : '-' %>
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
139
                  </div>
140
                  <a id="down-arrow" href="javascript:void()">▼</a>
141
                </span>
142
              % }
143
            </td>
144
          </tr>
145
        </table>
add files
Yuki Kimoto authored on 2014-03-26
146
      </div>
147
      <div style="border:1px solid gray;width:218px;height:400px;overflow:auto;padding:5px">
improve design
Yuki Kimoto authored on 2014-03-27
148
        <table style="border-collapse: collapse;width:100%;color:#333333">
149
            <tr style="border-bottom:1px solid #EEEEEE">
150
              <td>
151
152
              </td>
153
              <td style="text-align:right">
154
                % if ($word_length) {
155
                  回数
156
                % }
157
              </td>
158
            </tr>
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
159
          % my $prev_book_id;
add files
Yuki Kimoto authored on 2014-03-26
160
          % for my $book (@$books) {
improve design
Yuki Kimoto authored on 2014-03-27
161
            <tr>
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
162
              % if (!$word_length || $word_count_h->{$book->{id}} > 0) {
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
163
                <td style="<%= ($book_id // '') eq $book->{id} ? 'background:#DDDDDD' : '' %>">
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
164
                  % my $book_url_query = {'book-id' => $book->{id}};
165
                  % $book_url_query->{word} = $word if $word_length;
166
                  % my $book_url = url_for->query($book_url_query);
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
167
                  % $book_url->fragment('word-1') if $word_length;
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
168
                  <a class="book" id="<%= "book-$book->{id}" %>" href="<%= $book_url %>">
169
                    <%= $book->{short_name} %>
170
                  </a>
171
                </td>
172
                <td style="text-align:right">
173
                  <%= $word_count_h->{$book->{id}} %>
174
                </td>
検索の送りを作成
Yuki Kimoto authored on 2014-03-28
175
                
176
                % if ($prev_book_id && $book_id) {
177
                  $next_book_list->{$prev_book_id} = $book_id;
178
                  $prev_book_list->{$book_id} = $prev_book_id;
179
                % }
アンカーを移動できるようにした。
Yuki Kimoto authored on 2014-03-27
180
              % }
improve design
Yuki Kimoto authored on 2014-03-27
181
            </tr>
add files
Yuki Kimoto authored on 2014-03-26
182
          % }
improve design
Yuki Kimoto authored on 2014-03-27
183
        </table>
add files
Yuki Kimoto authored on 2014-03-26
184
      </div>
185
  </div>
186

            
187
  <div id="boxC">
improve design
Yuki Kimoto authored on 2014-03-27
188
    <div style="height:500px;overflow:auto">
189
      % if ($book_id) {
190
        %== $content
191
      % }
192
    </div>
add files
Yuki Kimoto authored on 2014-03-26
193
  </div>
194

            
195

            
196
  <div id="boxD">
improve design
Yuki Kimoto authored on 2014-03-27
197
    <div style="border-top:1px solid #AAAAAA;padding-top:10px;">
198
      This site is create by
199
      <a href="http://d.hatena.ne.jp/perlcodesample">Perl</a> +
200
      <a href="http://d.hatena.ne.jp/perlcodesample/20140319/1395203665">Mojolicious</a>.
201
      Auther is <a href="https://twitter.com/yukikimoto2">Yuki kimoto</a>.
202
    </div>
add files
Yuki Kimoto authored on 2014-03-26
203
  </div>
204
</div>