UNPKG

html-to-article-json

Version:
296 lines (269 loc) 6.91 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _text = require('./text'); var _text2 = _interopRequireDefault(_text); var _embeds = require('embeds'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var transformers = { custom: function custom(_ref) { var height = _ref.height, width = _ref.width, secure = _ref.secure, src = _ref.src; return { type: 'embed', embedType: 'custom', caption: [], attribution: [], width: width, height: height, secure: secure, src: src }; }, vine: function vine(_ref2) { var id = _ref2.id, url = _ref2.url; return { type: 'embed', embedType: 'vine', caption: [], attribution: [], id: id, url: url }; }, spotify: function spotify(_ref3) { var spotifyUri = _ref3.spotifyUri, width = _ref3.width, height = _ref3.height, url = _ref3.url; return { type: 'embed', embedType: 'spotify', caption: [], attribution: [], spotifyUri: spotifyUri, width: width, height: height, url: url }; }, facebook: function facebook(_ref4) { var embedAs = _ref4.embedAs, headline = _ref4.headline, date = _ref4.date, text = _ref4.text, url = _ref4.url, user = _ref4.user; return { type: 'embed', embedType: 'facebook', caption: [], attribution: [], headline: headline || '', url: url, date: date, user: user, text: text, embedAs: embedAs }; }, instagram: function instagram(_ref5) { var date = _ref5.date, id = _ref5.id, text = _ref5.text, url = _ref5.url, user = _ref5.user; return { type: 'embed', embedType: 'instagram', caption: [], attribution: [], date: date || '', user: user || '', id: id, text: text, url: url }; }, twitter: function twitter(_ref6) { var embedAs = _ref6.embedAs, url = _ref6.url, date = _ref6.date, user = _ref6.user, id = _ref6.id, text = _ref6.text; return { type: 'embed', embedType: 'twitter', caption: [], attribution: [], embedAs: embedAs, url: url, date: date, user: user, id: id, text: text }; }, youtube: function youtube(_ref7) { var youtubeId = _ref7.youtubeId; return { type: 'embed', embedType: 'youtube', caption: [], attribution: [], youtubeId: youtubeId }; }, tumblr: function tumblr(_ref8) { var url = _ref8.url, did = _ref8.did, text = _ref8.text; return { type: 'embed', embedType: 'tumblr', caption: [], url: url, did: did, text: text }; }, tidal: function tidal(_ref9) { var dataId = _ref9.dataId, dataType = _ref9.dataType; return { type: 'embed', embedType: 'tidal', caption: [], dataId: dataId, dataType: dataType }; }, video: function video(_ref10) { var width = _ref10.width, height = _ref10.height, sources = _ref10.sources; return { type: 'embed', embedType: 'video', caption: [], attribution: [], width: width || '', height: height || '', sources: sources }; }, image: function image(_ref11) { var width = _ref11.width, height = _ref11.height, src = _ref11.src, alt = _ref11.alt; return { type: 'embed', embedType: 'image', caption: alt ? [{ content: alt, type: 'text' }] : [], attribution: [], width: width || '', height: height || '', src: src }; } }; exports.default = function (opts) { var text = (0, _text2.default)(opts); var _opts$customEmbedType = opts.customEmbedTypes, customEmbedTypes = _opts$customEmbedType === undefined ? [] : _opts$customEmbedType; var getEmbed = function getEmbed(elms) { for (var i = 0; i < elms.length; i++) { var elm = elms[i]; if (elm && elm.tagName) { var obj = toEmbedObj(elm) || getEmbed(elm.childNodes); if (obj) { return obj; } } } }; var parseCustomEmbed = function parseCustomEmbed(elm) { for (var i = 0; i < customEmbedTypes.length; ++i) { var customEmbed = customEmbedTypes[i]; var obj = customEmbed.parse(elm); if (obj) { return obj; } } }; var parseBuiltinEmbed = function parseBuiltinEmbed(elm) { var obj = (0, _embeds.parse)(elm); return obj && transformers[obj.type] && transformers[obj.type](obj); }; var toEmbedObj = function toEmbedObj(elm) { return parseCustomEmbed(elm) || parseBuiltinEmbed(elm) || null; }; var getCaption = function getCaption(elms, result, opts) { for (var i = 0; i < elms.length; i++) { var elm = elms[i]; // ELEMENT_NODE if (elm.tagName && elm.tagName.toLowerCase() !== 'cite' && elm.childNodes.length) { getCaption(elm.childNodes, result, text(opts, elm)); } // TEXT_NODE if (elm.nodeName === '#text' && elm.data.length > 0) { result.push(text(opts, elm)); } } return result; }; var getAttribution = function getAttribution(elms, result, opts) { for (var i = 0; i < elms.length; i++) { var elm = elms[i]; // ELEMENT_NODE if (elm.tagName && elm.childNodes.length) { getAttribution(elm.childNodes, result, text(opts, elm)); } // TEXT_NODE if (elm.nodeName === '#text' && elm.data.length > 0) { result.push(text(opts, elm)); } } return result; }; var getFigureProps = function getFigureProps(_ref12) { var attributes = _ref12.attributes, elm = _ref12.elm; var figureProps = {}; if (!elm.attributes || !elm.attributes.length) { return figureProps; } attributes.forEach(function (name) { var value = elm.getAttribute(name); if (value) { figureProps[name] = value; } }); return figureProps; }; return function (elm) { if (elm.tagName && elm.tagName.toLowerCase() === 'figure') { var obj = getEmbed(elm.childNodes); if (obj && opts.parseFigureProps) { obj.figureProps = getFigureProps({ attributes: opts.parseFigureProps, elm: elm }); } if (obj) { var figcaptions = elm.getElementsByTagName('figcaption'); obj.caption = getCaption(figcaptions, [], {}); var cites = elm.getElementsByTagName('cite'); obj.attribution = getAttribution(cites, [], {}); } return obj; } return toEmbedObj(elm); }; };