(.+?)<\/div><\/div><\/div>/g
for (let ma; (ma = matchYoutube.exec(html));) {
if (ma[4] === 'YouTube') {
let youtubeId = ma[3]
cache.set(youtubeId, null)
}
}
let matchSoundCloud = /
/g
html = html.replace(matchSoundCloud, (match, url) => {
return render(m('.soundcloud.leftalign', [
'SoundCloud song ', m('a', {href: url, rel: 'nofollow'}, url.replace('https://soundcloud.com', ''))
]))
})
if (cache.size === 0) {
continueParsing()
} else {
getYoutubeInfo([...cache.keys()])
}
function getYoutubeInfo (ids) {
fetch('https://www.googleapis.com/youtube/v3/videos?id=' + ids + '&part=snippet&maxResults=50&key=' + youtubeKey).then((raw) => {
let data = []
try {
data = JSON.parse(raw).items
} catch (e) { }
data.forEach((video) => {
cache.set(video.id, video.snippet)
completeCount++
})
if (completeCount === cache.size || data.length === 0) {
html = html.replace(matchYoutube, replaceYoutube)
continueParsing()
}
})
}
function replaceYoutube (match, origSrc, src, id, origin) {
let youtubeId = id
let thumbnail = 'http://img.youtube.com/vi/' + youtubeId + '/hqdefault.jpg'
let youtubeUrl = 'https://youtube.com/watch?v=' + youtubeId
let title = 'Youtube Video'
let caption = ''
let data = cache.get(youtubeId)
if (data) {
thumbnail = (data.thumbnails.standard || data.thumbnails.high || data.thumbnails.medium || data.thumbnails.default).url
title = data.title
caption = data.title + ' on YouTube'
} else {
return ''
}
return render(m('figure.youtube', [
m('a', {href: youtubeUrl, rel: 'nofollow'},
m('img', {src: thumbnail, alt: title})
),
m('figcaption', m('a', {href: youtubeUrl, rel: 'nofollow'}, caption))
]))
}
function continueParsing () {
// html = tidy(html, tidyOptions).trim()
resolve(html)
}
})
}
export function fixDoubleSpacing (html) {
// from FimFictionConverter by Nyerguds
html = html.replace(/\s\s+/g, ' ')
// push spaces to the closed side of tags
html = html.replace(/\s+(<[a-z][^>]*>)\s+/g, ' $1')
html = html.replace(/\s+(<\/[a-z][^>]*>)\s+/g, '$1 ')
return html
}
export function fixParagraphIndent (html) {
// from FimFictionConverter by Nyerguds
let fixIndent = 2
if (fixIndent > 0) {
// only trigger indenting when finding as many whitespace characters in a row as indicated by the FixIndent setting.
// Add indented class, with the search keeping into account that there could be opening tags behind the p tag.
html = html.replace(new RegExp('
((<([^>]+)>)*)\\s{' + fixIndent + '}\\s*', 'g'), '
$1')
html = html.replace(new RegExp('
((<([^>]+)>)*)\\s{' + fixIndent + '}\\s*', 'g'), '
$3')
// Cleanup of remaining start whitespace in already indented paragraphs:
html = html.replace(/
]*)>((<[^>]+>)*)\\s+/g, '
$2')
}
return html
}