Refactor page generations, and add hard-coded series naming.
[quanlib.git] / main.rb
diff --git a/main.rb b/main.rb
index 596e11ff526fec0f09227bda8bcad927ab163180..d193c22360fab18aa2850cbc5a2b6d132c2aa843 100644 (file)
--- a/main.rb
+++ b/main.rb
@@ -1,9 +1,10 @@
+require 'page'
 require 'store'
 require 'walkdir'
 
 outputDir = 'output'
 
-books = []
+book_ids = []
 imageCount = 0
 
 def handleArg(arg)
@@ -28,65 +29,41 @@ for arg in ARGV
   if ! arg.start_with?("--")
     puts 'Scanning directory "' + arg + '"...'
     w = WalkDir.new(@store, arg)
-    books += (w.books)
+    book_ids += (w.books)
   end
 end
 
 puts 'Creating output...'
 
-if ! Dir.exist?(outputDir)
-  Dir.mkdir(outputDir)
-end
-
-open(outputDir + '/index.html', 'w') do |fd|
-  fd.puts '<html>'
-  fd.puts '  <head>'
-  fd.puts '    <meta charset="utf-8"/>'
-  fd.puts '    <title>Books</title>'
-  fd.puts '    <style>'
-  fd.puts 'div { '
-  fd.puts '  display: inline-block;'
-  fd.puts '  width: 400px;'
-  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 '    </style>'
-  fd.puts '  </head>'
-  fd.puts '  <body>'
-  
-  for book in books
-    image = nil
-    if nil != book.cover
-      imageCount += 1
-      (path, mimeType) = book.cover.write_image(outputDir, 'image' + imageCount.to_s)
-      image = '<img height="200px" src="' + path + '"/>'
-    else
-      image = '(No cover image)'
-    end
+counts = {}
 
-    fd.puts '    <div><table>'
-    fd.puts '      <tr><td><a href="' + book.path + '">' + image + '</a></td>'
+('A'..'Z').each do |letter| 
+  book_ids = @store.query_books_by_author(letter + '%')
+  puts 'Authors starting with "' + letter + '":  ' + book_ids.length.to_s() + ' books.'
+  counts[letter] = book_ids.length
 
-    heading = book.heading()
-    description = book.description()
-    if nil != description
-      fd.puts '          <td><span class="popup">' + heading + '<span><p>' + heading + '</p><p>' + description + '</p></span></span></td></tr>'
-    else
-      fd.puts '          <td>' + heading + '</td></tr>'
-    end
-      
-    fd.puts '    </table></div>'
+  page = Page.new(@store)
+  if 'A' != letter
+    page.back = ['../output_' + (letter.ord - 1).chr + '/index.html', 'Prev']
   end
-  
-  fd.puts "    </table>"
-  fd.puts "  </body>"
-  fd.puts "</html>"
+  if 'Z' != letter
+    page.forward = ['../output_' + (letter.ord + 1).chr + '/index.html', 'Next']
+  end
+  page.output_dir = 'output_' + letter
+  page.title = "Authors starting with '" + letter + "'"
+  page.up = ['../output/index.html', 'Index']
+
+  page.write_html(book_ids)
 end
 
+content = '<table><tr><th>Author</th><th>Books</th></tr>'
+('A'..'Z').each do |letter|
+  content += '  <tr><td><a href="../output_' + letter + '/index.html">Starting with ' + letter + '</a></td><td>' + counts[letter].to_s + '</td></tr>'
+end
+page = Page.new(@store)
+page.output_dir = 'output'
+page.special = content
+page.write_html( [] )
+  
 @store.disconnect()
+