patternplate-client
Version:
Universal javascript client application for patternplate
127 lines (91 loc) • 9.79 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _github = require('hast-util-sanitize/lib/github');
var _github2 = _interopRequireDefault(_github);
var _lodash = require('lodash');
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _remark = require('remark');
var _remark2 = _interopRequireDefault(_remark);
var _remarkGemojiToEmoji = require('remark-gemoji-to-emoji');
var _remarkGemojiToEmoji2 = _interopRequireDefault(_remarkGemojiToEmoji);
var _remarkVdom = require('remark-vdom');
var _remarkVdom2 = _interopRequireDefault(_remarkVdom);
var _markdownLink = require('./markdown-link');
var _markdownLink2 = _interopRequireDefault(_markdownLink);
var _markdownCode = require('./markdown-code');
var _markdownCode2 = _interopRequireDefault(_markdownCode);
var _markdownHeadline = require('./markdown-headline');
var _markdownHeadline2 = _interopRequireDefault(_markdownHeadline);
var _wrap = require('./wrap');
var _wrap2 = _interopRequireDefault(_wrap);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = render;
function render(source, options) {
var base = options.base,
hash = options.hash,
highlights = options.highlights,
highlight = options.highlight,
query = options.query,
pathname = options.pathname,
onHashChange = options.onHashChange;
var h = _react2.default.createElement;
var headline = (0, _wrap2.default)(_markdownHeadline2.default);
var table = (0, _wrap2.default)(strictChildren(MarkdownGeneric, ['thead', 'tbody']));
var tbody = (0, _wrap2.default)(strictChildren(MarkdownGeneric, ['tr']));
var tr = (0, _wrap2.default)(strictChildren(MarkdownGeneric, ['td', 'th']));
var td = (0, _wrap2.default)(MarkdownGeneric);
var link = { base: base, hash: hash, query: query, pathname: pathname, onHashChange: onHashChange };
var code = { highlights: highlights, highlight: highlight };
var components = {
a: (0, _wrap2.default)(_markdownLink2.default, link),
code: (0, _wrap2.default)(_markdownCode2.default, code),
h1: headline,
h2: headline,
h3: headline,
h4: headline,
h5: headline,
h6: headline,
table: table,
thead: tbody,
tbody: tbody,
tr: tr,
th: td,
td: td
};
var sanitize = (0, _lodash.merge)({}, _github2.default);
sanitize.attributes = {
a: ['href', 'title'],
code: ['className'],
img: ['src', 'alt']
};
var opts = { h: h, components: components, sanitize: sanitize };
return (0, _remark2.default)().use(_remarkVdom2.default, opts).use(_remarkGemojiToEmoji2.default).process(source).contents;
}
function MarkdownGeneric(props) {
var Component = props.tagName;
return _react2.default.createElement(
Component,
null,
props.children
);
}
function strictChildren(Component, tagNames) {
function StrictChildren(props) {
var children = _react.Children.toArray(props.children).filter(function (child) {
return (typeof child === 'undefined' ? 'undefined' : (0, _typeof3.default)(child)) === 'object' && (0, _lodash.includes)(tagNames, child.props.tagName);
});
return _react2.default.createElement(
Component,
props,
children
);
}
return StrictChildren;
}
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NvdXJjZS9hcHBsaWNhdGlvbi9jb21wb25lbnRzL2NvbW1vbi9tYXJrZG93bi9yZW5kZXIuanMiXSwibmFtZXMiOlsicmVuZGVyIiwic291cmNlIiwib3B0aW9ucyIsImJhc2UiLCJoYXNoIiwiaGlnaGxpZ2h0cyIsImhpZ2hsaWdodCIsInF1ZXJ5IiwicGF0aG5hbWUiLCJvbkhhc2hDaGFuZ2UiLCJoIiwiY3JlYXRlRWxlbWVudCIsImhlYWRsaW5lIiwidGFibGUiLCJzdHJpY3RDaGlsZHJlbiIsIk1hcmtkb3duR2VuZXJpYyIsInRib2R5IiwidHIiLCJ0ZCIsImxpbmsiLCJjb2RlIiwiY29tcG9uZW50cyIsImEiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJ0aGVhZCIsInRoIiwic2FuaXRpemUiLCJhdHRyaWJ1dGVzIiwiaW1nIiwib3B0cyIsInVzZSIsInByb2Nlc3MiLCJjb250ZW50cyIsInByb3BzIiwiQ29tcG9uZW50IiwidGFnTmFtZSIsImNoaWxkcmVuIiwidGFnTmFtZXMiLCJTdHJpY3RDaGlsZHJlbiIsInRvQXJyYXkiLCJmaWx0ZXIiLCJjaGlsZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O2tCQUVlQSxNOzs7QUFFZixTQUFTQSxNQUFULENBQWdCQyxNQUFoQixFQUF3QkMsT0FBeEIsRUFBaUM7QUFBQSxLQUN6QkMsSUFEeUIsR0FDMkNELE9BRDNDLENBQ3pCQyxJQUR5QjtBQUFBLEtBQ25CQyxJQURtQixHQUMyQ0YsT0FEM0MsQ0FDbkJFLElBRG1CO0FBQUEsS0FDYkMsVUFEYSxHQUMyQ0gsT0FEM0MsQ0FDYkcsVUFEYTtBQUFBLEtBQ0RDLFNBREMsR0FDMkNKLE9BRDNDLENBQ0RJLFNBREM7QUFBQSxLQUNVQyxLQURWLEdBQzJDTCxPQUQzQyxDQUNVSyxLQURWO0FBQUEsS0FDaUJDLFFBRGpCLEdBQzJDTixPQUQzQyxDQUNpQk0sUUFEakI7QUFBQSxLQUMyQkMsWUFEM0IsR0FDMkNQLE9BRDNDLENBQzJCTyxZQUQzQjs7QUFFaEMsS0FBTUMsSUFBSSxnQkFBTUMsYUFBaEI7QUFDQSxLQUFNQyxXQUFXLCtDQUFqQjs7QUFFQSxLQUFNQyxRQUFRLG9CQUFLQyxlQUFlQyxlQUFmLEVBQWdDLENBQUMsT0FBRCxFQUFVLE9BQVYsQ0FBaEMsQ0FBTCxDQUFkO0FBQ0EsS0FBTUMsUUFBUSxvQkFBS0YsZUFBZUMsZUFBZixFQUFnQyxDQUFDLElBQUQsQ0FBaEMsQ0FBTCxDQUFkO0FBQ0EsS0FBTUUsS0FBSyxvQkFBS0gsZUFBZUMsZUFBZixFQUFnQyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQWhDLENBQUwsQ0FBWDtBQUNBLEtBQU1HLEtBQUssb0JBQUtILGVBQUwsQ0FBWDs7QUFFQSxLQUFNSSxPQUFPLEVBQUNoQixVQUFELEVBQU9DLFVBQVAsRUFBYUcsWUFBYixFQUFvQkMsa0JBQXBCLEVBQThCQywwQkFBOUIsRUFBYjtBQUNBLEtBQU1XLE9BQU8sRUFBQ2Ysc0JBQUQsRUFBYUMsb0JBQWIsRUFBYjs7QUFFQSxLQUFNZSxhQUFhO0FBQ2xCQyxLQUFHLDRDQUFtQkgsSUFBbkIsQ0FEZTtBQUVsQkMsUUFBTSw0Q0FBbUJBLElBQW5CLENBRlk7QUFHbEJHLE1BQUlYLFFBSGM7QUFJbEJZLE1BQUlaLFFBSmM7QUFLbEJhLE1BQUliLFFBTGM7QUFNbEJjLE1BQUlkLFFBTmM7QUFPbEJlLE1BQUlmLFFBUGM7QUFRbEJnQixNQUFJaEIsUUFSYztBQVNsQkMsY0FUa0I7QUFVbEJnQixTQUFPYixLQVZXO0FBV2xCQSxjQVhrQjtBQVlsQkMsUUFaa0I7QUFhbEJhLE1BQUlaLEVBYmM7QUFjbEJBO0FBZGtCLEVBQW5COztBQWlCQSxLQUFNYSxXQUFXLG1CQUFNLEVBQU4sbUJBQWpCO0FBQ0FBLFVBQVNDLFVBQVQsR0FBc0I7QUFDckJWLEtBQUcsQ0FBQyxNQUFELEVBQVMsT0FBVCxDQURrQjtBQUVyQkYsUUFBTSxDQUFDLFdBQUQsQ0FGZTtBQUdyQmEsT0FBSyxDQUFDLEtBQUQsRUFBUSxLQUFSO0FBSGdCLEVBQXRCOztBQU1BLEtBQU1DLE9BQU8sRUFBQ3hCLElBQUQsRUFBSVcsc0JBQUosRUFBZ0JVLGtCQUFoQixFQUFiOztBQUVBLFFBQU8sd0JBQ0xJLEdBREssdUJBQ0tELElBREwsRUFFTEMsR0FGSyxnQ0FHTEMsT0FISyxDQUdHbkMsTUFISCxFQUlMb0MsUUFKRjtBQUtBOztBQUVELFNBQVN0QixlQUFULENBQXlCdUIsS0FBekIsRUFBZ0M7QUFDL0IsS0FBTUMsWUFBWUQsTUFBTUUsT0FBeEI7QUFDQSxRQUFPO0FBQUMsV0FBRDtBQUFBO0FBQVlGLFFBQU1HO0FBQWxCLEVBQVA7QUFDQTs7QUFPRCxTQUFTM0IsY0FBVCxDQUF3QnlCLFNBQXhCLEVBQW1DRyxRQUFuQyxFQUE2QztBQUM1QyxVQUFTQyxjQUFULENBQXdCTCxLQUF4QixFQUErQjtBQUM5QixNQUFNRyxXQUFXLGdCQUFTRyxPQUFULENBQWlCTixNQUFNRyxRQUF2QixFQUNmSSxNQURlLENBQ1IsaUJBQVM7QUFDaEIsVUFBTyxRQUFPQyxLQUFQLHVEQUFPQSxLQUFQLE9BQWlCLFFBQWpCLElBQTZCLHNCQUFTSixRQUFULEVBQW1CSSxNQUFNUixLQUFOLENBQVlFLE9BQS9CLENBQXBDO0FBQ0EsR0FIZSxDQUFqQjtBQUlBLFNBQU87QUFBQyxZQUFEO0FBQWVGLFFBQWY7QUFBdUJHO0FBQXZCLEdBQVA7QUFDQTs7QUFNRCxRQUFPRSxjQUFQO0FBQ0EiLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdoIGZyb20gJ2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvZ2l0aHViJztcbmltcG9ydCB7aW5jbHVkZXMsIG1lcmdlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHQsIENoaWxkcmVufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgcmVtYXJrIGZyb20gJ3JlbWFyayc7XG5pbXBvcnQgZW1vamkgZnJvbSAncmVtYXJrLWdlbW9qaS10by1lbW9qaSc7XG5pbXBvcnQgdmRvbSBmcm9tICdyZW1hcmstdmRvbSc7XG5cbmltcG9ydCBNYXJrZG93bkxpbmsgZnJvbSAnLi9tYXJrZG93bi1saW5rJztcbmltcG9ydCBNYXJrZG93bkNvZGUgZnJvbSAnLi9tYXJrZG93bi1jb2RlJztcbmltcG9ydCBNYXJrZG93bkhlYWRsaW5lIGZyb20gJy4vbWFya2Rvd24taGVhZGxpbmUnO1xuaW1wb3J0IHdyYXAgZnJvbSAnLi93cmFwJztcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyO1xuXG5mdW5jdGlvbiByZW5kZXIoc291cmNlLCBvcHRpb25zKSB7XG5cdGNvbnN0IHtiYXNlLCBoYXNoLCBoaWdobGlnaHRzLCBoaWdobGlnaHQsIHF1ZXJ5LCBwYXRobmFtZSwgb25IYXNoQ2hhbmdlfSA9IG9wdGlvbnM7XG5cdGNvbnN0IGggPSBSZWFjdC5jcmVhdGVFbGVtZW50O1xuXHRjb25zdCBoZWFkbGluZSA9IHdyYXAoTWFya2Rvd25IZWFkbGluZSk7XG5cblx0Y29uc3QgdGFibGUgPSB3cmFwKHN0cmljdENoaWxkcmVuKE1hcmtkb3duR2VuZXJpYywgWyd0aGVhZCcsICd0Ym9keSddKSk7XG5cdGNvbnN0IHRib2R5ID0gd3JhcChzdHJpY3RDaGlsZHJlbihNYXJrZG93bkdlbmVyaWMsIFsndHInXSkpO1xuXHRjb25zdCB0ciA9IHdyYXAoc3RyaWN0Q2hpbGRyZW4oTWFya2Rvd25HZW5lcmljLCBbJ3RkJywgJ3RoJ10pKTtcblx0Y29uc3QgdGQgPSB3cmFwKE1hcmtkb3duR2VuZXJpYyk7XG5cblx0Y29uc3QgbGluayA9IHtiYXNlLCBoYXNoLCBxdWVyeSwgcGF0aG5hbWUsIG9uSGFzaENoYW5nZX07XG5cdGNvbnN0IGNvZGUgPSB7aGlnaGxpZ2h0cywgaGlnaGxpZ2h0fTtcblxuXHRjb25zdCBjb21wb25lbnRzID0ge1xuXHRcdGE6IHdyYXAoTWFya2Rvd25MaW5rLCBsaW5rKSxcblx0XHRjb2RlOiB3cmFwKE1hcmtkb3duQ29kZSwgY29kZSksXG5cdFx0aDE6IGhlYWRsaW5lLFxuXHRcdGgyOiBoZWFkbGluZSxcblx0XHRoMzogaGVhZGxpbmUsXG5cdFx0aDQ6IGhlYWRsaW5lLFxuXHRcdGg1OiBoZWFkbGluZSxcblx0XHRoNjogaGVhZGxpbmUsXG5cdFx0dGFibGUsXG5cdFx0dGhlYWQ6IHRib2R5LFxuXHRcdHRib2R5LFxuXHRcdHRyLFxuXHRcdHRoOiB0ZCxcblx0XHR0ZFxuXHR9O1xuXG5cdGNvbnN0IHNhbml0aXplID0gbWVyZ2Uoe30sIGdoKTtcblx0c2FuaXRpemUuYXR0cmlidXRlcyA9IHtcblx0XHRhOiBbJ2hyZWYnLCAndGl0bGUnXSxcblx0XHRjb2RlOiBbJ2NsYXNzTmFtZSddLFxuXHRcdGltZzogWydzcmMnLCAnYWx0J11cblx0fTtcblxuXHRjb25zdCBvcHRzID0ge2gsIGNvbXBvbmVudHMsIHNhbml0aXplfTtcblxuXHRyZXR1cm4gcmVtYXJrKClcblx0XHQudXNlKHZkb20sIG9wdHMpXG5cdFx0LnVzZShlbW9qaSlcblx0XHQucHJvY2Vzcyhzb3VyY2UpXG5cdFx0LmNvbnRlbnRzO1xufVxuXG5mdW5jdGlvbiBNYXJrZG93bkdlbmVyaWMocHJvcHMpIHtcblx0Y29uc3QgQ29tcG9uZW50ID0gcHJvcHMudGFnTmFtZTtcblx0cmV0dXJuIDxDb21wb25lbnQ+e3Byb3BzLmNoaWxkcmVufTwvQ29tcG9uZW50Pjtcbn1cblxuTWFya2Rvd25HZW5lcmljLnByb3BUeXBlcyA9IHtcblx0dGFnTmFtZTogdC5zdHJpbmcsXG5cdGNoaWxkcmVuOiB0LmFueVxufTtcblxuZnVuY3Rpb24gc3RyaWN0Q2hpbGRyZW4oQ29tcG9uZW50LCB0YWdOYW1lcykge1xuXHRmdW5jdGlvbiBTdHJpY3RDaGlsZHJlbihwcm9wcykge1xuXHRcdGNvbnN0IGNoaWxkcmVuID0gQ2hpbGRyZW4udG9BcnJheShwcm9wcy5jaGlsZHJlbilcblx0XHRcdC5maWx0ZXIoY2hpbGQgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGNoaWxkID09PSAnb2JqZWN0JyAmJiBpbmNsdWRlcyh0YWdOYW1lcywgY2hpbGQucHJvcHMudGFnTmFtZSk7XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gPENvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L0NvbXBvbmVudD47XG5cdH1cblxuXHRTdHJpY3RDaGlsZHJlbi5wcm9wVHlwZXMgPSB7XG5cdFx0Y2hpbGRyZW46IHQuYW55XG5cdH07XG5cblx0cmV0dXJuIFN0cmljdENoaWxkcmVuO1xufVxuIl19