2021-03-31 19:56:33 +02:00
const {
JSDOM
} = require ( "jsdom" ) ;
const showdown = require ( "showdown" ) ;
require ( "./lib/showdown-prettify" ) ;
require ( "./lib/showdown-footnotes" ) ;
2021-04-01 00:45:26 +02:00
exports . showdown = function ( headerLevel ) {
return new showdown . Converter ( {
parseImgDimensions : true ,
headerLevelStart : headerLevel ,
extensions : [ "prettify" , "footnotes" ]
} ) ;
} ;
2021-04-06 19:29:04 +02:00
exports . extractBookData = function ( file , post , reduceHeadings ) {
2021-04-01 00:45:26 +02:00
let html = new JSDOM ( file ) ;
let page = html . window . document . getElementById ( "page" ) ;
// remove header section
let header = page . getElementsByTagName ( "header" ) ;
while ( header . length > 0 )
header [ 0 ] . parentNode . removeChild ( header [ 0 ] ) ;
2021-04-06 19:29:04 +02:00
if ( reduceHeadings ) {
// reduce all headings by 1
for ( let h = 5 ; h >= 1 ; h -- ) {
let heading = page . getElementsByTagName ( ` h ${ h } ` ) ;
while ( heading . length > 0 )
this . changeTag ( heading [ 0 ] , ` h ${ h + 1 } ` ) ;
}
2021-03-31 19:56:33 +02:00
}
2021-04-01 00:45:26 +02:00
return /*html*/ `
$ { post . prompt ? /*html*/ ` <p><i>This story was inspired by a Reedsy Prompt and submitted to their competition. As such, it has also been published on <a href=" ${ post . prompt } ">their website</a>.</i></p> ` : "" }
$ { page . outerHTML }
` ;
} ;
exports . replaceRelativeLinks = function ( element , tag ) {
if ( element [ tag ] && element [ tag ] . startsWith ( "./" ) )
element [ tag ] = ` ../ ${ element [ tag ] . substring ( 2 ) } ` ;
} ;
exports . changeTag = function ( element , newTag ) {
const newElement = element . ownerDocument . createElement ( newTag ) ;
newElement . innerHTML = element . innerHTML ;
for ( let a of element . attributes )
newElement . setAttribute ( a . nodeName , a . nodeValue ) ;
element . parentNode . replaceChild ( newElement , element ) ;
2021-03-31 19:56:33 +02:00
} ;