<% my $dbi = app->dbi; my $books = $dbi->model('book')->select(['id', 'short_name'])->all; %> % layout 'common'; %= javascript begin $(document).ready(function () { var current_word; var current_book_id; var found_book_ids = []; var max_search_pos; var current_word_count_h; var current_pos; var fragment = location.hash; $("#word-pos").text('-'); $("#up-arrow").on('click', function () { if (current_pos) { var prev_pos = current_pos - 1; if (prev_pos < 1) { var prev_book_id; for (var i = 0; i < found_book_ids.length; i++) { if (found_book_ids[i] === current_book_id) { prev_book_id = found_book_ids[i - 1]; } } if (prev_book_id) { current_pos = current_word_count_h[prev_book_id]; $('#books tr[id=book-' + prev_book_id + ']').find('.book').trigger('click'); } } else { location.href = '#word-' + prev_pos; current_pos--; $('#word-pos').text(prev_pos); } } }); $("#down-arrow").on('click', function () { if (current_pos) { var next_pos = current_pos - 0 + 1; if (next_pos > max_search_pos) { var next_book_id; for (var i = 0; i < found_book_ids.length; i++) { if (found_book_ids[i] === current_book_id) { next_book_id = found_book_ids[i + 1]; } } if (next_book_id) { current_pos = 1; $('#books tr[id=book-' + next_book_id + ']').find('.book').trigger('click'); } } else { location.href = '#word-' + next_pos; current_pos++; $('#word-pos').text(next_pos); } } }); // 書をクリック $('.book').on('click', function () { var book_id_str = $(this).attr('id'); var ret = book_id_str.match(/book-(\d+)/); var book_id = ret[1]; $.get('/api/book/' + book_id + '/content', function (result) { if (current_word) { var i = 1; var replace_cb = function (all, group1) { var after = '' + group1 + ''; i = i + 1; return after; }; var word_re = new RegExp('(' + current_word + ')', 'g'); result.content = result.content.replace(word_re, function (all, group1) { return replace_cb(all, group1); }); max_search_pos = i - 1; } $("#content").html(result.content); if (current_word) { if (!current_pos) { current_pos = 1; } location.href = '#word-' + current_pos; $('#word-pos').text(current_pos); } current_book_id = book_id; $('#books tr').each(function () { var book_id_str = $(this).attr('id'); if (book_id_str) { var book_id = (book_id_str.match(/book-(\d+)/))[1]; if (book_id === current_book_id) { $(this).find('.book-short-name').css('background', '#DDDDDD'); } else { $(this).find('.book-short-name').css('background', '#FFFFFF'); } } }); }); }); // 検索をクリック $('#search').on('click', function () { var word = $(this).closest('div').find('[name=word]').val(); if (word) { var word_count_h; $.get('/api/word-count/' + word, function (result) { var word_count_h = result.word_count; current_word_count_h = word_count_h; $('#books tr').each(function () { var book_id_str = $(this).attr('id'); if (book_id_str) { var book_id = (book_id_str.match(/book-(\d+)/))[1]; if (word_count_h[book_id] === 0) { $(this).css('display', 'none'); } else { found_book_ids.push(book_id); } $(this).find('.word-count').text(word_count_h[book_id]); } }); $('#word-count-header').text('回数'); current_word = word; $('#up-down').css('display', 'inline'); }); } return false; }); }); % end

口語訳聖書オンライン語句検索

<%= text_field 'word' , style => "width:160px" %>
聖書
% my $prev_book_id; % for my $book (@$books) { {id}" %>"> % }
{id}" %>" href="javascript:void(0)"> <%= $book->{short_name} %>
This site is create by Perl + Mojolicious. Auther is Yuki kimoto.