html-to-article-json
Version:
Converting HTML to article-json
296 lines (269 loc) • 6.91 kB
JavaScript
;
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);
};
};