1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _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 |
|
9 | exports['default'] = render;
|
10 |
|
11 | function _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 |
|
13 | function escapeMarkdownPart(input) {
|
14 | return [
|
15 |
|
16 |
|
17 | [/([\#\*\(\)\[\]\_\`\\])/g, '\\$1'],
|
18 |
|
19 |
|
20 | [/\</g, '<'], [/\>/g, '>'],
|
21 |
|
22 |
|
23 | [/\n/g, '<br />']].reduce(function (input, _ref) {
|
24 | var _ref2 = _slicedToArray(_ref, 2);
|
25 |
|
26 | var replaceFrom = _ref2[0];
|
27 | var replaceTo = _ref2[1];
|
28 | return input.replace(replaceFrom, replaceTo);
|
29 | }, input);
|
30 | }
|
31 |
|
32 | function escapeMarkdown(input) {
|
33 | return escapeMarkdownPart(input)
|
34 |
|
35 | .replace(/^(\d+)\./, '$1\\.');
|
36 | }
|
37 |
|
38 | function renderEntityMention(data) {
|
39 | return '[@' + escapeMarkdownPart(data.screen_name) + '](https://twitter.com/' + data.screen_name + ' "' + data.name + '")';
|
40 | }
|
41 |
|
42 | function renderEntityMedia(data) {
|
43 | return '[' + escapeMarkdownPart(data.display_url) + '](' + data.url + ')';
|
44 | }
|
45 |
|
46 | function renderEntityHashtag(data) {
|
47 | return '[#' + escapeMarkdownPart(data.text) + '](https://twitter.com/search?q=%23' + data.text + ')';
|
48 | }
|
49 |
|
50 | function renderEntityUrl(data) {
|
51 | return '[' + escapeMarkdownPart(data.display_url) + '](' + data.url + ' "' + data.expanded_url + '")';
|
52 | }
|
53 |
|
54 | function renderEntity(type, data) {
|
55 | switch (type) {
|
56 | case 'user_mentions':
|
57 | return renderEntityMention(data);
|
58 | case 'media':
|
59 | return renderEntityMedia(data);
|
60 | case 'hashtags':
|
61 | return renderEntityHashtag(data);
|
62 | case 'urls':
|
63 | return renderEntityUrl(data);
|
64 | default:
|
65 | return null;
|
66 | }
|
67 | }
|
68 |
|
69 | function render(tweet) {
|
70 | var text = tweet.text;
|
71 | var _tweet$entities = tweet.entities;
|
72 | var entities = _tweet$entities === undefined ? {} : _tweet$entities;
|
73 |
|
74 | var replacements = [];
|
75 |
|
76 | Object.keys(entities).forEach(function (entityKey) {
|
77 | replacements.push.apply(replacements, _toConsumableArray(entities[entityKey].map(function (entity) {
|
78 | return [renderEntity(entityKey, entity), entity.indices[0], entity.indices[1]];
|
79 | })));
|
80 | });
|
81 |
|
82 | if (0 === replacements.length) {
|
83 | return escapeMarkdown(tweet.text);
|
84 | }
|
85 |
|
86 | var lastPos = text.length;
|
87 | var parts = replacements.sort(function (a, b) {
|
88 | return b[1] - a[1];
|
89 | }).map(function (replacement) {
|
90 | var output = [replacement[0]];
|
91 |
|
92 | if (replacement[2] < lastPos) {
|
93 | output.push(escapeMarkdownPart(text.substr(replacement[2], lastPos - replacement[2])));
|
94 | }
|
95 |
|
96 | lastPos = replacement[1];
|
97 |
|
98 | return output.join('');
|
99 | });
|
100 |
|
101 | if (lastPos > 0) {
|
102 | parts.push(escapeMarkdown(text.substr(0, lastPos)));
|
103 | }
|
104 |
|
105 | return parts.reverse().join('');
|
106 | }
|
107 |
|
108 | module.exports = exports['default'];
|