react-carousel-query
Version:
A infinite carousel component made with react that handles the pagination for you.
130 lines (103 loc) • 3.26 kB
JavaScript
module.exports = toHast
var u = require('unist-builder')
var visit = require('unist-util-visit')
var position = require('unist-util-position')
var generated = require('unist-util-generated')
var definitions = require('mdast-util-definitions')
var one = require('./one')
var footer = require('./footer')
var handlers = require('./handlers')
var own = {}.hasOwnProperty
var deprecationWarningIssued = false
// Factory to transform.
function factory(tree, options) {
var settings = options || {}
// Issue a warning if the deprecated tag 'allowDangerousHTML' is used
if (settings.allowDangerousHTML !== undefined && !deprecationWarningIssued) {
deprecationWarningIssued = true
console.warn(
'mdast-util-to-hast: deprecation: `allowDangerousHTML` is nonstandard, use `allowDangerousHtml` instead'
)
}
var dangerous = settings.allowDangerousHtml || settings.allowDangerousHTML
var footnoteById = {}
h.dangerous = dangerous
h.definition = definitions(tree)
h.footnoteById = footnoteById
h.footnoteOrder = []
h.augment = augment
h.handlers = Object.assign({}, handlers, settings.handlers)
h.unknownHandler = settings.unknownHandler
visit(tree, 'footnoteDefinition', onfootnotedefinition)
return h
// Finalise the created `right`, a hast node, from `left`, an mdast node.
function augment(left, right) {
var data
var ctx
// Handle `data.hName`, `data.hProperties, `data.hChildren`.
if (left && 'data' in left) {
data = left.data
if (data.hName) {
if (right.type !== 'element') {
right = {
type: 'element',
tagName: '',
properties: {},
children: []
}
}
right.tagName = data.hName
}
if (right.type === 'element' && data.hProperties) {
right.properties = Object.assign({}, right.properties, data.hProperties)
}
if (right.children && data.hChildren) {
right.children = data.hChildren
}
}
ctx = left && left.position ? left : {position: left}
if (!generated(ctx)) {
right.position = {
start: position.start(ctx),
end: position.end(ctx)
}
}
return right
}
// Create an element for `node`.
function h(node, tagName, props, children) {
if (
(children === undefined || children === null) &&
typeof props === 'object' &&
'length' in props
) {
children = props
props = {}
}
return augment(node, {
type: 'element',
tagName: tagName,
properties: props || {},
children: children || []
})
}
function onfootnotedefinition(definition) {
var id = String(definition.identifier).toUpperCase()
// Mimick CM behavior of link definitions.
// See: <https://github.com/syntax-tree/mdast-util-definitions/blob/8290999/index.js#L26>.
if (!own.call(footnoteById, id)) {
footnoteById[id] = definition
}
}
}
// Transform `tree`, which is an mdast node, to a hast node.
function toHast(tree, options) {
var h = factory(tree, options)
var node = one(h, tree)
var foot = footer(h)
if (foot) {
node.children = node.children.concat(u('text', '\n'), foot)
}
return node
}