From b0ed11b1a03aab548e3c274dfd89732e8e11892f Mon Sep 17 00:00:00 2001 From: Chris Jaekl Date: Tue, 28 Feb 2017 23:40:07 +0900 Subject: [PATCH] Improve metadata extraction from epubs, and clean up the display of popups in the output html. --- book.rb | 47 ++++++++++++++++++++++++++++++++++++++--------- main.rb | 17 ++++++++++++++++- 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/book.rb b/book.rb index f59b61a..3cf5139 100644 --- a/book.rb +++ b/book.rb @@ -6,9 +6,12 @@ require 'author' require 'cover' class Book + @@DC_NS_URL = 'http://purl.org/dc/elements/1.1/' + def initialize(fileName) @author = nil @cover = nil + @description = nil @path = fileName @series = nil @title = nil @@ -36,7 +39,11 @@ class Book return @cover end - def describe + def description + @description + end + + def heading result = [] if nil != @title @@ -45,7 +52,7 @@ class Book result.push('(Unknown title)') end if nil != @author - result.push(@author.to_s()) + result.push('by ' + @author.to_s() + '') end seriesInfo = [] @@ -191,13 +198,13 @@ class Book #------- # Author - creator = opfDoc.css('dc|creator', 'dc' => 'http://purl.org/dc/elements/1.1/') - if (nil != creator) and (creator.length > 0) - roleNode = creator.attr('role') - if nil != roleNode - role = roleNode.value - if ('aut' == role) and (creator.children.length > 0) and (nil != creator.children[0]) - name = creator.children[0].content + creators = opfDoc.css('dc|creator', 'dc' => @@DC_NS_URL) + if (creators.length > 0) + creator = creators[0] + if nil != creator + role = creator['opf:role'] + if 'aut' == role + name = creator.content parts = name.split(' ') if parts.length > 1 surname = parts[-1] @@ -210,6 +217,28 @@ class Book end end + #--------------------------------------- + # Title + + titles = opfDoc.css('dc|title', 'dc' => @@DC_NS_URL) + if titles.length > 0 + title = titles[0] + if nil != title + @title = title.content + end + end + + #--------------------------------------- + # Description + + descrNodes = opfDoc.css('dc|description', 'dc' => @@DC_NS_URL) + if (descrNodes.length > 0) + descrNode = descrNodes[0] + if nil != descrNode + @description = descrNode.content + end + end + #--------------------------------------- # Other metadata: series, volume, cover diff --git a/main.rb b/main.rb index 8617ab0..2d7f68b 100644 --- a/main.rb +++ b/main.rb @@ -26,6 +26,12 @@ open(outputDir + '/index.html', 'w') do |fd| fd.puts ' margin: 10px;' fd.puts ' border 3px solid #73ad21;' fd.puts '}' + fd.puts 'span.popup { }' + fd.puts 'span.popup:hover {text-decoration: none; background: #cfffff; z-index: 6; }' + fd.puts 'span.popup span {display: none; position: absolute; ' + fd.puts ' margin: 4px 0 0 0px; padding: 3px 3px 3px 3px;' + fd.puts ' border-style:solid; border-color:black; border-width:1px;}' + fd.puts 'span.popup:hover span {display: block; margin: 20px 0 0 0px; background: #ffffaf; z-index:6;}' fd.puts ' ' fd.puts ' ' fd.puts ' ' @@ -41,7 +47,16 @@ open(outputDir + '/index.html', 'w') do |fd| end fd.puts '
' - fd.puts ' ' + fd.puts ' ' + + heading = book.heading() + description = book.description() + if nil != description + fd.puts ' ' + else + fd.puts ' ' + end + fd.puts '
' + image + '' + book.describe() + '
' + image + '' + heading + '

' + heading + '

' + description + '

' + heading + '
' end -- 2.30.2