Task #27 - Fix for export markdown function and archiving.
This commit is contained in:
parent
7fd4e99649
commit
d005a9f3c8
@ -11,7 +11,7 @@ const path = require('path');
|
||||
*/
|
||||
class Export extends Controller {
|
||||
static get services() {
|
||||
return [...super.services, 'models']
|
||||
return [...super.services, 'models', 'app']
|
||||
}
|
||||
/*
|
||||
* Serve the main page.
|
||||
@ -40,11 +40,12 @@ class Export extends Controller {
|
||||
const temp_dir = path.resolve(os.tmpdir(), uuid())
|
||||
|
||||
await fs.mkdir(temp_dir)
|
||||
this._markdown_recurse(page0, temp_dir)
|
||||
await this._markdown_recurse(page0, temp_dir)
|
||||
|
||||
/* Archive directory */
|
||||
const exec = require('child_process').exec;
|
||||
exec('zip -r ' + path.resolve(temp_dir, 'archive.zip') + ' ' + path.resolve(temp_dir), (error) => {
|
||||
console.log('zip -9jpr ' + path.resolve(temp_dir, '../archive.zip') + ' ' + path.resolve(temp_dir) + '/')
|
||||
exec('cd ' + path.resolve(temp_dir) + '; zip -r archive.zip *', (error) => {
|
||||
if (error) {
|
||||
console.error(`exec error: ${error}`);
|
||||
return res.error(500);
|
||||
@ -56,16 +57,17 @@ class Export extends Controller {
|
||||
}
|
||||
|
||||
async _markdown_recurse(root, temp_dir) { //recursive function for creating directory and generating markdown pages
|
||||
console.log('root', root)
|
||||
const fs = require('fs').promises
|
||||
const Page = this.models.get('api:Page')
|
||||
const child = await Page.find({ UUID: { $in: root.ChildPageIds } })
|
||||
|
||||
for (const page of child) {
|
||||
const markdown = this._generate_markdown(page)
|
||||
const markdown = await this._generate_markdown(page)
|
||||
await fs.writeFile(path.resolve(temp_dir, page.Name.replace(/\s/g, '_')) + '.md', markdown)
|
||||
if (page.ChildPageIds && page.ChildPageIds.length) {
|
||||
const sub_temp_dir = path.resolve(temp_dir, page.Name.replace(/\s/g, '_'))
|
||||
// console.log(sub_temp_dir)
|
||||
await fs.mkdir(sub_temp_dir)
|
||||
this._markdown_recurse(page, sub_temp_dir)
|
||||
await this._markdown_recurse(page, sub_temp_dir)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -91,16 +93,19 @@ class Export extends Controller {
|
||||
const html_name = page.Name.replace(/\s/g, '_') + '.html'
|
||||
mapping[page.UUID] = html_name
|
||||
}
|
||||
const sidebar_html = this._generate_sidebar(page0) //generates the sidebar contents
|
||||
console.log(page0)
|
||||
const sidebar_html = await this._generate_sidebar(mapping, page0) //generates the sidebar contents
|
||||
|
||||
const temp_dir = path.resolve(os.tmpdir(), uuid()) //make temporary directory
|
||||
await fs.mkdir(temp_dir)
|
||||
|
||||
/* Generates html files from template */
|
||||
for (const page of pages) {
|
||||
const fs = require('fs').promises
|
||||
const contents = await fs.readFile('../assets/export-template.html')
|
||||
const content_html = this._generate_html(page)
|
||||
const contents = (await fs.readFile(path.resolve(this.app.directories.assets, 'export-template.html'))).toString('utf8')
|
||||
console.log(page)
|
||||
//console.log({contents})
|
||||
const content_html = await this._generate_html(page)
|
||||
//console.log({content_html, sidebar_html})
|
||||
const page_html = contents.replace('%%SIDEBAR%%', sidebar_html).replace('%%CONTENTS%%', content_html)
|
||||
await fs.writeFile(path.resolve(temp_dir, mapping[page.UUID]), page_html)
|
||||
}
|
||||
@ -112,18 +117,21 @@ class Export extends Controller {
|
||||
return res.error(500);
|
||||
return;
|
||||
}
|
||||
|
||||
return res.sendFile(`${path.resolve(temp_dir, 'archive.zip')}`)
|
||||
})
|
||||
}
|
||||
async _generate_sidebar(root) { //generate sidebar from mapping array and root
|
||||
if (root.ChildPageIds < 1) {
|
||||
return '<a class="nav-link" href="' + mapping[root.UUID] + '">' + root.Name + '</a>'
|
||||
async _generate_sidebar(mapping, upper_node) { //generate sidebar from mapping array and upper_node
|
||||
const Page = this.models.get('api:Page')
|
||||
console.log(upper_node)
|
||||
console.log(upper_node.ChildPageIds == 'undefined')
|
||||
if (upper_node.ChildPageIds == 'undefined') {
|
||||
return '<a class="nav-link" href="' + mapping[upper_node.UUID] + '">' + upper_node.Name + '</a>'
|
||||
} else {
|
||||
let base = '<nav class="nav nav-pills flex-column">'
|
||||
for (const childrenId of root.ChildPageIds) {
|
||||
base += this._generate_sidebar(await Page.findOne({ UUID: childrenId }))
|
||||
for (const childrenId of upper_node.ChildPageIds) {
|
||||
base += (await this._generate_sidebar(await Page.findOne({ UUID: childrenId })))
|
||||
}
|
||||
console.log({ base })
|
||||
return base
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user