'use strict'
var html = require('property-information/html')
var svg = require('property-information/svg')
var voids = require('html-void-elements')
var omission = require('./omission')
var one = require('./one')
module.exports = toHtml
var quotationMark = '"'
var apostrophe = "'"
var deprecationWarningIssued = false
function toHtml(node, options) {
var settings = options || {}
var quote = settings.quote || quotationMark
var alternative = quote === quotationMark ? apostrophe : quotationMark
var smart = settings.quoteSmart
var value =
node && typeof node === 'object' && 'length' in node
? {type: 'root', children: node}
: node
if (quote !== quotationMark && quote !== apostrophe) {
throw new Error(
'Invalid quote `' +
quote +
'`, expected `' +
apostrophe +
'` or `' +
quotationMark +
'`'
)
}
if (settings.allowDangerousHTML !== undefined) {
if (!deprecationWarningIssued) {
deprecationWarningIssued = true
console.warn(
'Deprecation warning: `allowDangerousHTML` is a nonstandard option, use `allowDangerousHtml` instead'
)
}
}
return one(
{
valid: settings.allowParseErrors ? 0 : 1,
safe: settings.allowDangerousCharacters ? 0 : 1,
schema: settings.space === 'svg' ? svg : html,
omit: settings.omitOptionalTags && omission,
quote: quote,
alternative: alternative,
smart: smart,
unquoted: Boolean(settings.preferUnquoted),
tight: settings.tightAttributes,
upperDoctype: Boolean(settings.upperDoctype),
tightDoctype: Boolean(settings.tightDoctype),
bogusComments: Boolean(settings.bogusComments),
tightLists: settings.tightCommaSeparatedLists,
tightClose: settings.tightSelfClosing,
collapseEmpty: settings.collapseEmptyAttributes,
dangerous: settings.allowDangerousHtml || settings.allowDangerousHTML,
voids: settings.voids || voids.concat(),
entities: settings.entities || {},
close: settings.closeSelfClosing,
closeEmpty: settings.closeEmptyElements
},
value
)
}