From cec190e797347e89e83c9cd446ff6f1afd07591c Mon Sep 17 00:00:00 2001
From: Alexandros Georgantas <alexgeorg86@gmail.com>
Date: Thu, 11 Oct 2018 18:41:22 +0300
Subject: [PATCH] feat: download html for pagedJS

---
 packages/components/Epub/EpubBackend.js       | 21 +++++++++++++++++++
 .../Epub/converters/wax-paged-default.js      | 10 +++++++++
 .../Epub/converters/wax-paged-ucp.js          | 10 ++++++++-
 .../converters/wax-vivliostyle-default.js     | 10 +++++++++
 .../Epub/converters/wax-vivliostyle-ucp.js    | 11 ++++++++++
 packages/components/Epub/pagednation.js       |  4 +++-
 6 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/packages/components/Epub/EpubBackend.js b/packages/components/Epub/EpubBackend.js
index 6b4d6d24a..9d5d74ae8 100644
--- a/packages/components/Epub/EpubBackend.js
+++ b/packages/components/Epub/EpubBackend.js
@@ -148,6 +148,20 @@ const EpubBackend = app => {
       res.status(500).json({ error: error.message })
     }
   })
+  app.use('/api/pagedStyler/exportHTML/:id/', async (req, res, next) => {
+    const { id } = req.params
+    const path = `${process.cwd()}/uploads/paged/${id}/index.html`
+
+    try {
+      const file = await readFile(path)
+      res.setHeader('Content-Type', 'text/html')
+      res.setHeader('Content-Disposition', `attachment; filename=${id}.html`)
+      res.write(file, 'binary')
+      res.end()
+    } catch (error) {
+      res.status(500).json({ error: error.message })
+    }
+  })
 }
 
 const writeFile = (location, content) =>
@@ -157,5 +171,12 @@ const writeFile = (location, content) =>
       return resolve()
     })
   })
+const readFile = location =>
+  new Promise((resolve, reject) => {
+    fs.readFile(location, 'binary', (err, data) => {
+      if (err) return reject(err)
+      return resolve(data)
+    })
+  })
 
 module.exports = EpubBackend
diff --git a/packages/components/Epub/converters/wax-paged-default.js b/packages/components/Epub/converters/wax-paged-default.js
index 3cf747bcb..99fcb1874 100644
--- a/packages/components/Epub/converters/wax-paged-default.js
+++ b/packages/components/Epub/converters/wax-paged-default.js
@@ -144,6 +144,16 @@ module.exports = (
     }
   })
 
+  $('highlighter').each((i, elem) => {
+    const $elem = $(elem)
+    $elem.replaceWith($elem.text())
+  })
+  $('ornament').each((i, elem) => {
+    const $elem = $(elem)
+    const hr = $('<hr>')
+    $elem.replaceWith(hr)
+  })
+
   // replace inline notes with endnotes
   $('note').each((i, elem) => {
     const $elem = $(elem)
diff --git a/packages/components/Epub/converters/wax-paged-ucp.js b/packages/components/Epub/converters/wax-paged-ucp.js
index 97215b934..5257a2278 100644
--- a/packages/components/Epub/converters/wax-paged-ucp.js
+++ b/packages/components/Epub/converters/wax-paged-ucp.js
@@ -144,7 +144,15 @@ module.exports = (
       $elem.remove()
     }
   })
-
+  $('highlighter').each((i, elem) => {
+    const $elem = $(elem)
+    $elem.replaceWith($elem.text())
+  })
+  $('ornament').each((i, elem) => {
+    const $elem = $(elem)
+    const hr = $('<hr>')
+    $elem.replaceWith(hr)
+  })
   const hasNotes = $('note').length > 0
 
   if (hasNotes) {
diff --git a/packages/components/Epub/converters/wax-vivliostyle-default.js b/packages/components/Epub/converters/wax-vivliostyle-default.js
index 4198412e5..15f19d6b7 100644
--- a/packages/components/Epub/converters/wax-vivliostyle-default.js
+++ b/packages/components/Epub/converters/wax-vivliostyle-default.js
@@ -168,6 +168,16 @@ module.exports = (
     }
   })
 
+  $('highlighter').each((i, elem) => {
+    const $elem = $(elem)
+    $elem.replaceWith($elem.text())
+  })
+  $('ornament').each((i, elem) => {
+    const $elem = $(elem)
+    const hr = $('<hr>')
+    $elem.replaceWith(hr)
+  })
+
   // replace inline notes with endnotes
   $('note').each((i, elem) => {
     const $elem = $(elem)
diff --git a/packages/components/Epub/converters/wax-vivliostyle-ucp.js b/packages/components/Epub/converters/wax-vivliostyle-ucp.js
index 77107b4f5..79bad790a 100644
--- a/packages/components/Epub/converters/wax-vivliostyle-ucp.js
+++ b/packages/components/Epub/converters/wax-vivliostyle-ucp.js
@@ -164,6 +164,17 @@ module.exports = (
       $elem.remove()
     }
   })
+
+  $('highlighter').each((i, elem) => {
+    const $elem = $(elem)
+    $elem.replaceWith($elem.text())
+  })
+  $('ornament').each((i, elem) => {
+    const $elem = $(elem)
+    const hr = $('<hr>')
+    $elem.replaceWith(hr)
+  })
+
   const hasNotes = $('note').length > 0
 
   if (hasNotes) {
diff --git a/packages/components/Epub/pagednation.js b/packages/components/Epub/pagednation.js
index 7a3f9cb3a..a76df87a3 100644
--- a/packages/components/Epub/pagednation.js
+++ b/packages/components/Epub/pagednation.js
@@ -3,7 +3,9 @@ const cheerio = require('cheerio')
 const create = async (book, parts, resourceRoot, stylesRoot, fontsRoot) => {
   const output = cheerio.load(
     `<!DOCTYPE html><html><head><title>${book.title}</title>
-    <meta charset="UTF-8"></head><body class="hyphenate" lang="en-us"></body></html>`,
+    <meta charset="UTF-8"></head><body class="hyphenate" lang="en-us"><section class="titlepage"><header><h1 class="booktitle">${
+      book.title
+    }</h1></header></section></body></html>`,
   )
   const TOC = createTOC(parts)
   output('body').append(TOC.html())
-- 
GitLab