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, '>']].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 |
|
29 | function escapeMarkdown(input) {
|
30 | return escapeMarkdownPart(input)
|
31 |
|
32 | .replace(/^(\d+)\./, '$1\\.');
|
33 | }
|
34 |
|
35 | function renderEntityMention(data) {
|
36 | return '[@' + escapeMarkdownPart(data.screen_name) + '](https://twitter.com/' + data.screen_name + ' "' + data.name + '")';
|
37 | }
|
38 |
|
39 | function renderEntityMedia(data) {
|
40 | return '[' + escapeMarkdownPart(data.display_url) + '](' + data.url + ')';
|
41 | }
|
42 |
|
43 | function renderEntityHashtag(data) {
|
44 | return '[#' + escapeMarkdownPart(data.text) + '](https://twitter.com/search?q=%23' + data.text + ')';
|
45 | }
|
46 |
|
47 | function renderEntityUrl(data) {
|
48 | return '[' + escapeMarkdownPart(data.display_url) + '](' + data.url + ' "' + data.expanded_url + '")';
|
49 | }
|
50 |
|
51 | function 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 |
|
66 | function 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 |
|
105 | module.exports = exports['default'];
|