@snippetify/book-reader
Version:
Book reader utilities
52 lines (43 loc) • 1.25 kB
JavaScript
const Page = require('./models/Page')
const ReferenceBuilder = require('./ReferenceBuilder')
class PageBuilder {
constructor () {
this.config = {}
this.page = new Page({})
this.referenceBuilder = ReferenceBuilder.getInstance()
}
static getInstance () {
return new PageBuilder()
}
setConfig (config) {
this.config = config
this.referenceBuilder.setConfig(config.reference)
return this
}
setPage (page) {
this.page = page
return this
}
reset () {
this.page = new Page({})
return this
}
build () {
this.addReferences()
return $('<div />', { 'data-no': this.page.no, 'data-abbr': this.page.abbr }).html(this.page.content)
}
addReferences () {
let paragraph = 0
this.page.content = $(this.page.content)
.filter((_, elem) => elem.nodeType !== 3) // Remove text node
.map((i, elem) => {
if ($(elem).is('p')) {
$(elem).attr({ 'data-pos': ++paragraph }).append(this.referenceBuilder.build(this.page, paragraph)) // Add references
}
return $(elem).attr({ 'data-id': `${this.page.no}.${i + 1}` }).get(0) // Add element id
})
return this
}
}
module.exports = PageBuilder
module.exports.default = PageBuilder