preProcess

This commit is contained in:
v 2018-11-28 18:30:12 +03:00
parent e4ec93b5b2
commit 82264ba9e5

View File

@ -335,9 +335,11 @@ class WikiItem {
} }
async getData () { async getData () {
let data = await ( this.data !== undefined ? Promise.resolve( this.data ) : ( this.data = this.load( ))) let data = await ( this.data !== undefined ? this.data : ( this.data = this.load( )))
if ( Buffer.isBuffer( data ) && this.encoding != null ) return this.preProcess( data )
data = iconv.decode( data, this.encoding ) }
preProcess ( data ) {
return data return data
} }
@ -527,17 +529,12 @@ class Article extends ArticleStub {
super( pageInfo ) super( pageInfo )
} }
load () { async preProcess( data ) {
return super.load()
.then( body => this.preProcess( body ))
}
async preProcess( data, reply ) {
let src let src
try { try {
src = cheerio.load( data ) src = cheerio.load( data )
} catch ( e ) { } catch ( e ) {
log( 'cheerio.load error', e, data, reply ) log( 'cheerio.load error', e, data )
return data return data
} }
try { try {
@ -840,29 +837,21 @@ class Style extends LayoutItem {
this.data = data this.data = data
} }
async getData () { async preProcess ( data ) {
try {
const src = await super.getData()
return await this.transformStyle( src )
} catch ( err ) {
log( 'Style.getData error', this.url, err )
return ''
}
}
async transformStyle ( src ) {
// collect urls using dummy replacements // collect urls using dummy replacements
const urlre = /(url\(['"]?)([^\)]*[^\)'"])(['"]?\))/g const urlre = /(url\(['"]?)([^\)]*[^\)'"])(['"]?\))/g
const requests = [] const requests = []
src.replace( urlre, ( match, start, url, end ) => { data.replace( urlre, ( match, start, url, end ) => {
if ( ! url.startsWith( 'data:' )) { if ( ! url.startsWith( 'data:' )) {
const styleItem = new LayoutItem( urlconv.resolve( this.url, url )) const styleItem = new LayoutItem( urlconv.resolve( this.url, url ))
requests.push( styleItem.save() ) requests.push( styleItem.save() )
} else {
requests.push( url )
} }
return match return match
}) })
const resolvedUrls = await Promise.all( requests ) const resolvedUrls = await Promise.all( requests )
const transformed = src.replace( urlre, ( match, start, url, end ) => { const transformed = data.replace( urlre, ( match, start, url, end ) => {
let out = match let out = match
const rurl = resolvedUrls.shift() const rurl = resolvedUrls.shift()
if ( rurl != null ) { if ( rurl != null ) {