TG comments widget synchronizing with page colors
This commit is contained in:
parent
e61fba63ea
commit
f96356678d
5 changed files with 44 additions and 2 deletions
34
src/components/Comments.astro
Normal file
34
src/components/Comments.astro
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
export interface Props {
|
||||||
|
tgpost: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { tgpost } = Astro.props;
|
||||||
|
---
|
||||||
|
|
||||||
|
<section id="comments" data-tgpost={tgpost}></section>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function loadComments() {
|
||||||
|
const tgscript = document.createElement('script')
|
||||||
|
|
||||||
|
tgscript.async = true
|
||||||
|
tgscript.src = 'https://telegram.org/js/telegram-widget.js?22'
|
||||||
|
tgscript.dataset.commentsLimit = '3'
|
||||||
|
|
||||||
|
const container = document.getElementById('comments')
|
||||||
|
|
||||||
|
tgscript.dataset.telegramDiscussion = container.dataset.tgpost
|
||||||
|
tgscript.dataset.dark = document.body.dataset.dark || '1'
|
||||||
|
tgscript.dataset.color = getCssVariableValue('--accent-fg')
|
||||||
|
|
||||||
|
container.append(tgscript)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCssVariableValue(name: string) {
|
||||||
|
const val = getComputedStyle(document.body).getPropertyValue(name)
|
||||||
|
return val.replace('!important', '').trimEnd()
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(loadComments, 200)
|
||||||
|
</script>
|
|
@ -262,7 +262,7 @@ import TextBox from "./TextBox.astro";
|
||||||
|
|
||||||
function reloadTheme() {
|
function reloadTheme() {
|
||||||
if (!lessLoaded) {
|
if (!lessLoaded) {
|
||||||
setTimeout(reloadTheme, 150)
|
setTimeout(reloadTheme, 100)
|
||||||
lessLoaded = true
|
lessLoaded = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
---
|
||||||
|
comments: dcat09/333
|
||||||
|
---
|
||||||
|
|
||||||
# Способы аутентификации и TOTP
|
# Способы аутентификации и TOTP
|
||||||
|
|
||||||
Доступ к любым конфиденциальным (и не очень) данным предоставляется определённому лицу. Для их получения, редактирования, удаления необходимо пройти аутентификацию -- дать понять системе разграничения доступа, что вы имеете право читать и изменять эти данные.
|
Доступ к любым конфиденциальным (и не очень) данным предоставляется определённому лицу. Для их получения, редактирования, удаления необходимо пройти аутентификацию -- дать понять системе разграничения доступа, что вы имеете право читать и изменять эти данные.
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { getCollection } from "astro:content";
|
||||||
|
|
||||||
import postRenderer from "../../post-renderer.mjs";
|
import postRenderer from "../../post-renderer.mjs";
|
||||||
import { postType } from "../../post-renderer.mjs";
|
import { postType } from "../../post-renderer.mjs";
|
||||||
|
import Comments from "../../components/Comments.astro";
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const posts = await getCollection("blog");
|
const posts = await getCollection("blog");
|
||||||
|
@ -20,7 +21,7 @@ export async function getStaticPaths() {
|
||||||
const post: postType = Astro.props.post;
|
const post: postType = Astro.props.post;
|
||||||
const {
|
const {
|
||||||
PostContent, title, description,
|
PostContent, title, description,
|
||||||
readingTime, date, image,
|
readingTime, date, image, comments,
|
||||||
} = await postRenderer(post);
|
} = await postRenderer(post);
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -46,6 +47,7 @@ const {
|
||||||
date={date}
|
date={date}
|
||||||
image={image}
|
image={image}
|
||||||
/>
|
/>
|
||||||
|
<Comments tgpost={comments} />
|
||||||
</BlogLayout>
|
</BlogLayout>
|
||||||
|
|
||||||
<style lang="less" is:global>
|
<style lang="less" is:global>
|
||||||
|
|
|
@ -22,6 +22,7 @@ export default async function postRenderer(post: postType) {
|
||||||
const title = postObj.headings[0]?.text || ''
|
const title = postObj.headings[0]?.text || ''
|
||||||
const description: string = fm.description
|
const description: string = fm.description
|
||||||
const readingTime: number = fm.readingTime
|
const readingTime: number = fm.readingTime
|
||||||
|
const comments: string = fm.comments || 'dcat09/1'
|
||||||
|
|
||||||
const dateStr = post.slug.split("-", 1)[0]
|
const dateStr = post.slug.split("-", 1)[0]
|
||||||
let date: Date | undefined
|
let date: Date | undefined
|
||||||
|
@ -42,5 +43,6 @@ export default async function postRenderer(post: postType) {
|
||||||
readingTime: readingTime,
|
readingTime: readingTime,
|
||||||
date: date,
|
date: date,
|
||||||
image: image,
|
image: image,
|
||||||
|
comments: comments,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue