UNPKG

3.4 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', {
4 value: true
5});
6
7var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
8
9exports['default'] = render;
10
11function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
12
13function escapeMarkdownPart(input) {
14 return [
15
16 // escaping symbols: # * ( ) [ ] _ `
17 [/([\#\*\(\)\[\]\_\`\\])/g, '\\$1'],
18
19 // escaping less and more signs
20 [/\</g, '&lt;'], [/\>/g, '&gt;']].reduce(function (input, _ref) {
21 var _ref2 = _slicedToArray(_ref, 2);
22
23 var replaceFrom = _ref2[0];
24 var replaceTo = _ref2[1];
25 return input.replace(replaceFrom, replaceTo);
26 }, input);
27}
28
29function escapeMarkdown(input) {
30 return escapeMarkdownPart(input)
31 // escaping period after number at the string start
32 .replace(/^(\d+)\./, '$1\\.');
33}
34
35function renderEntityMention(data) {
36 return '[@' + escapeMarkdownPart(data.screen_name) + '](https://twitter.com/' + data.screen_name + ' "' + data.name + '")';
37}
38
39function renderEntityMedia(data) {
40 return '[' + escapeMarkdownPart(data.display_url) + '](' + data.url + ')';
41}
42
43function renderEntityHashtag(data) {
44 return '[#' + escapeMarkdownPart(data.text) + '](https://twitter.com/search?q=%23' + data.text + ')';
45}
46
47function renderEntityUrl(data) {
48 return '[' + escapeMarkdownPart(data.display_url) + '](' + data.url + ' "' + data.expanded_url + '")';
49}
50
51function renderEntity(type, data) {
52 switch (type) {
53 case 'user_mentions':
54 return renderEntityMention(data);
55 case 'media':
56 return renderEntityMedia(data);
57 case 'hashtags':
58 return renderEntityHashtag(data);
59 case 'urls':
60 return renderEntityUrl(data);
61 default:
62 return null;
63 }
64}
65
66function render(tweet) {
67 var text = tweet.text;
68 var _tweet$entities = tweet.entities;
69 var entities = _tweet$entities === undefined ? {} : _tweet$entities;
70
71 var replacements = [];
72
73 Object.keys(entities).forEach(function (entityKey) {
74 replacements.push.apply(replacements, _toConsumableArray(entities[entityKey].map(function (entity) {
75 return [renderEntity(entityKey, entity), entity.indices[0], entity.indices[1]];
76 })));
77 });
78
79 if (0 === replacements.length) {
80 return escapeMarkdown(tweet.text);
81 }
82
83 var lastPos = text.length;
84 var parts = replacements.sort(function (a, b) {
85 return b[1] - a[1];
86 }).map(function (replacement) {
87 var output = [replacement[0]];
88
89 if (replacement[2] < lastPos) {
90 output.push(escapeMarkdownPart(text.substr(replacement[2], lastPos - replacement[2])));
91 }
92
93 lastPos = replacement[1];
94
95 return output.join('');
96 });
97
98 if (lastPos > 0) {
99 parts.push(escapeMarkdown(text.substr(0, lastPos)));
100 }
101
102 return parts.reverse().join('');
103}
104
105module.exports = exports['default'];