feat: add comments focus feature.
This commit is contained in:
parent
8c3b52b94c
commit
910342184b
@ -63,6 +63,9 @@ export default defineConfig({
|
|||||||
vite: {
|
vite: {
|
||||||
// Add this for avoiding the needless import optimize in Vite.
|
// Add this for avoiding the needless import optimize in Vite.
|
||||||
optimizeDeps: { exclude: ['@napi-rs/canvas'] },
|
optimizeDeps: { exclude: ['@napi-rs/canvas'] },
|
||||||
|
esbuild: {
|
||||||
|
drop: ['console', 'debugger'],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
build: {
|
build: {
|
||||||
assets: 'cats',
|
assets: 'cats',
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import Aplayer from 'aplayer/dist/APlayer.min.js';
|
import Aplayer from 'aplayer/dist/APlayer.min.js';
|
||||||
import stickySidebar from './sticky-sidebar.js';
|
import stickySidebar from './sticky-sidebar.js';
|
||||||
|
|
||||||
|
const LOGO = '';
|
||||||
|
|
||||||
// Menu toggle.
|
// Menu toggle.
|
||||||
const menuBody = document.querySelector('.site-aside');
|
const menuBody = document.querySelector('.site-aside');
|
||||||
document.addEventListener('keydown', (event) => {
|
document.addEventListener('keydown', (event) => {
|
||||||
@ -212,10 +214,41 @@ if (typeof comments !== 'undefined' && comments !== null) {
|
|||||||
|
|
||||||
cancelReply();
|
cancelReply();
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: Highlighting the selected comment.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const scrollIntoView = (elem) => {
|
||||||
|
let top = 0;
|
||||||
|
|
||||||
|
const rect = elem.getBoundingClientRect();
|
||||||
|
const elemTop = rect.top + window.scrollY;
|
||||||
|
top = elemTop - (window.innerHeight / 2 - rect.height / 2);
|
||||||
|
|
||||||
|
const scrollOptions = {
|
||||||
|
top,
|
||||||
|
left: 0,
|
||||||
|
behavior: 'smooth',
|
||||||
|
};
|
||||||
|
|
||||||
|
window.scroll(scrollOptions);
|
||||||
|
};
|
||||||
|
|
||||||
|
const focusComment = () => {
|
||||||
|
// Highlighting the selected comment.
|
||||||
|
if (location.hash.startsWith('#atk-comment-')) {
|
||||||
|
for (const li of document.querySelectorAll('.comment-body')) {
|
||||||
|
li.classList.remove('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
const li = document.querySelector(location.hash);
|
||||||
|
if (li !== null) {
|
||||||
|
scrollIntoView(li);
|
||||||
|
li.querySelector('.comment-body').classList.add('active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
window.addEventListener('hashchange', focusComment);
|
||||||
|
window.addEventListener('load', focusComment);
|
||||||
|
|
||||||
// Add like button for updating likes.
|
// Add like button for updating likes.
|
||||||
const likeButton = document.querySelector('button.post-like');
|
const likeButton = document.querySelector('button.post-like');
|
||||||
|
|
||||||
|
@ -3025,6 +3025,10 @@ a:hover .overlay {
|
|||||||
border-bottom: 1px solid var(--border-light);
|
border-bottom: 1px solid var(--border-light);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.comment .active {
|
||||||
|
background-color: var(--bg-warning);
|
||||||
|
}
|
||||||
|
|
||||||
.comment:last-child {
|
.comment:last-child {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -32,11 +32,14 @@ export const latestComments = async (): Promise<Comment[]> => {
|
|||||||
if (trimTitle.includes(` - ${options.title}`)) {
|
if (trimTitle.includes(` - ${options.title}`)) {
|
||||||
trimTitle = trimTitle.substring(0, trimTitle.indexOf(` - ${options.title}`));
|
trimTitle = trimTitle.substring(0, trimTitle.indexOf(` - ${options.title}`));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const link = !options.isProd() && page !== null ? page.replace(options.website, import.meta.env.SITE) : page;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title: trimTitle,
|
title: trimTitle,
|
||||||
author: author ?? '',
|
author: author ?? '',
|
||||||
authorLink: authorLink ?? '',
|
authorLink: authorLink ?? '',
|
||||||
permalink: `${page}#atk-comment-${id}`,
|
permalink: `${link}#atk-comment-${id}`,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user