From 8e14fe2e7c9e8a067a65f64f5f7d63f2419a3f73 Mon Sep 17 00:00:00 2001 From: HF Date: Fri, 1 Apr 2022 23:26:24 +0200 Subject: [PATCH] add telegram embeds --- public/embico/telegram.png | Bin 0 -> 267 bytes src/components/MdLink.jsx | 1 + src/components/Modtools.jsx | 2 +- src/components/embeds/Telegram.jsx | 84 +++ src/components/embeds/index.js | 5 + src/components/hooks/drag.js | 4 +- .../hooks/{useInterval.js => interval.js} | 0 src/components/hooks/postMessage.js | 25 + src/components/telegram-widget.js | 528 ++++++++++++++++++ 9 files changed, 646 insertions(+), 3 deletions(-) create mode 100644 public/embico/telegram.png create mode 100644 src/components/embeds/Telegram.jsx rename src/components/hooks/{useInterval.js => interval.js} (100%) create mode 100644 src/components/hooks/postMessage.js create mode 100644 src/components/telegram-widget.js diff --git a/public/embico/telegram.png b/public/embico/telegram.png new file mode 100644 index 0000000000000000000000000000000000000000..00450dce0ce799939156ad7f0652989d38208c79 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}V1Q4EYuvtvKm_DL82|tO|NQgM z@4x@9y!_I5;_1D2-}gWGu=DP_)z{uEz4ChgrB^dAyy!mt?EA03@4o$h^Yz!0k3UX7 z`E=^Zr%gBCZoK)n{Kyks$Hvz{<5)_9{DRL1Fa*BMy)FUdr+T_LhDcnlJ-=P3!GMQ3 zV7UgX$Ku2P>os_G&N MUHx3vIVCg!0CA>+w*UYD literal 0 HcmV?d00001 diff --git a/src/components/MdLink.jsx b/src/components/MdLink.jsx index 374e5899..3c2c7343 100644 --- a/src/components/MdLink.jsx +++ b/src/components/MdLink.jsx @@ -15,6 +15,7 @@ const titleAllowed = [ 'matrix.pixelplanet.fun', 'youtube', 'youtu.be', + 't.me', ]; const MdLink = ({ href, title }) => { diff --git a/src/components/Modtools.jsx b/src/components/Modtools.jsx index 2156b1a0..eb8adb68 100644 --- a/src/components/Modtools.jsx +++ b/src/components/Modtools.jsx @@ -7,7 +7,7 @@ import React, { useState, useEffect } from 'react'; import { useSelector, shallowEqual } from 'react-redux'; import { t } from 'ttag'; -import useInterval from './hooks/useInterval'; +import useInterval from './hooks/interval'; import { getToday, dateToString } from '../core/utils'; const keptState = { diff --git a/src/components/embeds/Telegram.jsx b/src/components/embeds/Telegram.jsx new file mode 100644 index 00000000..21d1e41d --- /dev/null +++ b/src/components/embeds/Telegram.jsx @@ -0,0 +1,84 @@ +import React, { useState, useEffect, useRef } from 'react'; + +import usePostMessage from '../hooks/postMessage'; + +const urlStr = 't.me/'; + +function getUserPostFromUrl(url) { + let aPos = url.indexOf(urlStr); + if (aPos === -1) { + return url; + } + aPos += urlStr.length; + if (aPos >= url.length) { + return url; + } + let bPos = url.indexOf('/', aPos); + if (bPos === -1) { + bPos = url.length; + return url.substring(aPos); + } + const user = url.substring(aPos, bPos); + bPos += 1; + if (bPos >= url.length) { + return user; + } + aPos = url.indexOf('/', bPos); + if (aPos === -1) { + aPos = url.length; + } + const post = url.substring(bPos, aPos); + return `${user} | ${post}`; +} + +const Telegram = ({ url }) => { + const [frameHeight, setFrameHeight] = useState(200); + const iFrameRef = useRef(null); + + usePostMessage(iFrameRef, + (data) => { + try { + const pdata = JSON.parse(data); + if (pdata.event === 'resize') { + if (pdata.height) { + setFrameHeight(pdata.height); + } + } + } catch { + console.error(`Could not read postMessage from frame: ${data}`); + } + }, + ); + + const userPost = url.substring(url.indexOf(urlStr) + urlStr.length) + const embedCode = + // eslint-disable-next-line max-len + ``; + +// srcDoc={embedCode} + return ( +