class Object
Constants
- BOOKMARK_COMMENT_LENGTH
- BOOKMARK_RPAGE
- PAGE_SIZE
- SEARCH_RPAGE
Public Instance Methods
book_bookmark(book)
click to toggle source
# File lib/honyomi/web/app.rb, line 345 def book_bookmark(book) @book_id = book.id @header_title = header_title_book(book, @params[:query]) @header_info = header_info_book(book, @params[:query]) render_bookmarks(@database.books_bookmark(book), [{key: "page.page_no", order: "ascending"}]) end
book_home(book)
click to toggle source
# File lib/honyomi/web/app.rb, line 189 def book_home(book) text_page(book, 1) end
favstar(page)
click to toggle source
# File lib/honyomi/web/app.rb, line 513 def favstar(page) classes = @database.bookmark?(page) ? "star favorited" : "star" attr = [] attr << %Q|honyomi-id="#{page.book.id}"| attr << %Q|honyomi-page-no="#{page.page_no}"| attr << %Q|honyomi-title="#{page.book.title}"| bm = @database.bookmark_from_page(page) attr << %Q|honyomi-comment="#{escape_html(bm.comment).gsub("\n", " ")}"| if bm && bm.comment "<a href=\"javascript:\" id=\"star-#{page.book.id}-#{page.page_no}\" class=\"#{classes}\" #{attr.join(" ")}>Star</a>" end
header_info_book(book, query)
click to toggle source
# File lib/honyomi/web/app.rb, line 436 def header_info_book(book, query) query = query ? "&query=#{query}" : "" file_mb = File.stat(book.path).size / (1024 * 1024) pages = @params[:b] == '1' ? "<a href=\"/v/#{book.id}\">#{book.page_num}</a>" : "<strong>#{book.page_num}</strong>" bm = @database.books_bookmark(book) if @params[:b] == '1' bm_text = ", <strong><span class=\"boomark-number\">#{bm.count}</span></strong> bookmarks. " else bm_text = ", <a href=\"/v/#{book.id}?b=1\"><span class=\"boomark-number\">#{bm.count}</span></a> bookmarks. " end %Q|#{pages} pages#{bm_text} <a href="/v/#{book.id}?dl=1">Download</a> <span class="file-size">(#{file_mb}M)</span>| end
header_title_book(book, query)
click to toggle source
# File lib/honyomi/web/app.rb, line 420 def header_title_book(book, query) query = query ? "?query=#{query}" : "" first_page = @database.book_page(book, 1) has_image = File.exist?(Util.image_path(first_page)) <<EOF <div class="title"> <a href='/#{query}'>HOME</a> > <a href='/v/#{book.id}#{query}' id="book-title" honyomi-book-id="#{book.id}" honyomi-book-image="#{has_image ? "1" : "0"}">#{escape_html(book.title)}</a> <span class='edit-link'>- <a href="#">Edit</a></span> </div> <div class="etc"> <span id="book-author">#{escape_html(book.author)}</span> <span><a id="book-url" href="#{book.url}">#{escape_html(book.url)}</a></span> </div> EOF end
home()
click to toggle source
# File lib/honyomi/web/app.rb, line 161 def home if @params[:b] == '1' @header_info = %Q|<a href="/">#{@database.books.size}</a> books, <strong>#{@database.bookmarks.size}</strong> bookmarks.| render_bookmarks(@database.bookmarks, [{key: "timestamp", order: "descending"}]) else @header_info = %Q|<strong>#{@database.books.size}</strong> books, <a href="/?b=1">#{@database.bookmarks.size}</a> bookmarks.| r = @database.books.map { |book| <<EOF <li>#{book.id}: <a href="/v/#{book.id}">#{book.title}</a> (#{book.page_num}P)</li> EOF }.reverse @content = <<EOF <ul> #{r.join("\n")} </ul> EOF haml :index end end
render_bookmarks(bookmarks, sort_keys)
click to toggle source
# File lib/honyomi/web/app.rb, line 352 def render_bookmarks(bookmarks, sort_keys) rpage = @params[:rpage] ? @params[:rpage].to_i : 1 sorted = bookmarks.sort(sort_keys, offset: (rpage - 1) * BOOKMARK_RPAGE, limit: BOOKMARK_RPAGE) r = sorted.map { |bookmark| page = bookmark.page book = page.book title = book.title image_path = Util.image_path(page) has_image = File.exist? image_path content = [] content << bookmark.comment if bookmark.comment content << page.text if !has_image && page.text r = [] rest = BOOKMARK_COMMENT_LENGTH content.each do |e| if e.length > rest r << e[0, rest] break else r << e rest -= e.length end end content = r.map { |e| "<p>#{escape_html(e)}</p>" }.join("\n") if has_image content += %|<p><img src="/v/#{page.book.id}?image=1&page=#{page.page_no}" width="250px"/></p>| end <<EOF <div class="result"> <div class="title"> <div class="ss-box">#{favstar(page)}</div> <div><a href="/v/#{book.id}?page=#{page.page_no}">#{book.title}</a> (P#{page.page_no})</div> <div class="ss-end"></div> </div> <div class="main"> <div class="result-body-element">#{content}</div> </div> </div> EOF } pagination_str = "" if rpage * BOOKMARK_RPAGE < bookmarks.count pagination_str = <<EOF <ul class="pager"> <li><a href='#{url + "?b=1&rpage=#{rpage + 1}"}' rel='next'>Next</a></li> </ul> EOF end @content = <<EOF <div class="autopagerize_page_element"> #{r.join("\n")} </div> #{pagination_str} EOF haml :index end
render_page(page, options = {})
click to toggle source
# File lib/honyomi/web/app.rb, line 452 def render_page(page, options = {}) book = page.book # with_number with_number = "" if options[:with_number] with_number = <<EOF <div class="no row"> <div class="col-xs-8"> <div class="ss-box">#{favstar(page)}</div> <a href="##{page.page_no}">P#{page.page_no}</a> <a href="javascript:" class="page-text-toggle">Text</a> <a href="/v/#{book.id}?pdf=1#page=#{page.page_no}">Pdf</a> </div> </div> EOF end # comment comment = "" bm = @database.bookmark_from_page(page) if bm && bm.comment && !bm.comment.empty? comment = <<EOF <div class="comment"> #{Util.render_bookmark_comment_to_html(bm)} </div> EOF end <<EOF <div class="page" id="#{page.page_no}"> #{with_number} #{comment} #{render_page_main(page, options)} </div> EOF end
render_page_main(page, options)
click to toggle source
# File lib/honyomi/web/app.rb, line 492 def render_page_main(page, options) image_path = Util.image_path(page) text = Util.highlight_keywords(page.text, options[:keywords], 'highlight').gsub("\n\n", "<br/><br/>") if File.exist?(image_path) body = <<EOF <div class="page-text hidden">#{text}</div> <div><img src="/v/#{page.book.id}?image=1&page=#{page.page_no}" width="100%"/></div> EOF else body = text end <<EOF <div class="main"> #{body} </div> EOF end
search_book_home(book)
click to toggle source
# File lib/honyomi/web/app.rb, line 193 def search_book_home(book) @book_id = book.id @header_title = header_title_book(book, @params[:query]) search_common(@params[:query] + " book:#{book.id}", [["page_no", :asc]], false ) end
search_common(query, sort_keys, is_filter)
click to toggle source
# File lib/honyomi/web/app.rb, line 265 def search_common(query, sort_keys, is_filter) results, snippet = @database.search(Query.new(query)) rpage = @params[:rpage] ? @params[:rpage].to_i : 1 rpage_entries = results.paginate(sort_keys, :page => rpage, :size => SEARCH_RPAGE) pagination_str = "" if (rpage - 1) * SEARCH_RPAGE + rpage_entries.count < results.count pagination_str = <<EOF <ul class="pager"> <li><a href='#{url + "?query=#{escape(@params[:query])}&rpage=#{rpage + 1}"}' rel='next'>Next</a></li> </ul> EOF end books = {} results.each do |page| books[page.book.path] = 1 end if is_filter @header_info = %Q|#{books.size} books, #{results.size} pages| else @header_info = %Q|#{results.size} pages| end r = rpage_entries.map do |page| if is_filter query_plus = escape "#{query} book:#{page.book.id}" query_minus = escape "#{query} -book:#{page.book.id}" filter_str = "<div class=\"col-xs-6\"><a href=\"/?query=#{query_plus}\">Filter+</a> <a href=\"/?query=#{query_minus}\">Filter-</a></div>" else filter_str = "" end bm = @database.bookmark_from_page(page) comment_hits = snippet.execute(bm ? (bm.comment || "") : "") text_hits = snippet.execute(page.text || "") main_contents = wrap_result_body_element(comment_hits) + wrap_result_body_element(text_hits) image_path = Util.image_path(page) if File.exist? image_path main_contents += %|<div><img src="/v/#{page.book.id}?image=1&page=#{page.page_no}" width="250px"/></div>| end <<EOF <div class="result"> <div class="title"> <div class="ss-box">#{favstar(page)}</div> <div><a href="/v/#{page.book.id}?query=#{escape(@params[:query])}&page=#{page.page_no}">#{page.book.title}</a> (P#{page.page_no})</div> <div class="ss-end"></div> </div> <div class="row info"> #{filter_str} </div> <div class="main"> #{main_contents} </div> </div> EOF end @content = <<EOF <div class="autopagerize_page_element"> #{r.join("\n")} </div> #{pagination_str} EOF haml :index end
search_home()
click to toggle source
# File lib/honyomi/web/app.rb, line 182 def search_home search_common(@params[:query], [["_score", :desc]], true ) end
text_all(book)
click to toggle source
# File lib/honyomi/web/app.rb, line 203 def text_all(book) @book_id = book.id @header_title = header_title_book(book, @params[:query]) @header_info = header_info_book(book, @params[:query]) pages = @database.book_pages(book.id) keywords = Util.extract_keywords(@params[:query]) @content = pages.map { |page| render_page(page, keywords: keywords, with_number: true) }.join("\n") haml :index end
text_page(book, page_no)
click to toggle source
# File lib/honyomi/web/app.rb, line 220 def text_page(book, page_no) keywords = Util.extract_keywords(@params[:query]) page = @database.pages["#{book.id}:#{page_no}"] @book_id = book.id @header_title = header_title_book(book, @params[:query]) @header_info = header_info_book(book, @params[:query]) @content = "" pages = @database.book_pages(@book_id) page_index = page_no - 1 prev_link = "" if page_index > 0 prev_link = <<EOF <ul class="pager"> <li><a href='#{url + "?page=#{[page_no - 1, 1].max}"}' >Prev</a></li> </ul> EOF end main_contents = (pages.to_a[page_index, PAGE_SIZE] || []).map do |page| render_page(page, keywords: keywords, with_number: true) end pagination_str = "" if page_index + PAGE_SIZE < pages.count pagination_str = <<EOF <ul class="pager"> <li><a href='#{url + "?page=#{page_no + PAGE_SIZE}"}' rel='next'>Next</a></li> </ul> EOF end @content = <<EOF #{prev_link} <div class="autopagerize_page_element"> #{main_contents.join("\n")} </div> #{pagination_str} EOF haml :index end
wrap_result_body_element(hits)
click to toggle source
# File lib/honyomi/web/app.rb, line 525 def wrap_result_body_element(hits) r = hits.map { |segment| "<div class=\"result-body-element\">" + segment.gsub("\n", "") + "</div>" }.join("\n") "<p>#{r}</p>" end