aaaaa
This commit is contained in:
commit
5ab2d8abfd
45 changed files with 9738 additions and 0 deletions
32
src/lib/utils/date.js
Normal file
32
src/lib/utils/date.js
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
export function formatDate(dateString) {
|
||||
const date = new Date(dateString);
|
||||
return date.toLocaleDateString('ru-RU', {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric'
|
||||
});
|
||||
}
|
||||
|
||||
export function formatDateTime(dateString) {
|
||||
const date = new Date(dateString);
|
||||
return date.toLocaleDateString('ru-RU', {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
});
|
||||
}
|
||||
|
||||
export function getRelativeTime(dateString) {
|
||||
const date = new Date(dateString);
|
||||
const now = new Date();
|
||||
const diffInSeconds = Math.floor((now - date) / 1000);
|
||||
|
||||
if (diffInSeconds < 60) return 'только что';
|
||||
if (diffInSeconds < 3600) return `${Math.floor(diffInSeconds / 60)} мин. назад`;
|
||||
if (diffInSeconds < 86400) return `${Math.floor(diffInSeconds / 3600)} ч. назад`;
|
||||
if (diffInSeconds < 604800) return `${Math.floor(diffInSeconds / 86400)} дн. назад`;
|
||||
|
||||
return formatDate(dateString);
|
||||
}
|
||||
26
src/lib/utils/markdown.js
Normal file
26
src/lib/utils/markdown.js
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import { marked } from 'marked';
|
||||
import sanitizeHtml from 'sanitize-html';
|
||||
|
||||
marked.setOptions({
|
||||
breaks: true,
|
||||
gfm: true
|
||||
});
|
||||
|
||||
const sanitizeOptions = {
|
||||
allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img', 'h1', 'h2', 'h3']),
|
||||
allowedAttributes: {
|
||||
...sanitizeHtml.defaults.allowedAttributes,
|
||||
img: ['src', 'alt', 'title'],
|
||||
a: ['href', 'name', 'target']
|
||||
}
|
||||
};
|
||||
|
||||
export function parseMarkdown(content) {
|
||||
const html = marked.parse(content);
|
||||
return sanitizeHtml(html, sanitizeOptions);
|
||||
}
|
||||
|
||||
export function extractExcerpt(content, length = 150) {
|
||||
const plainText = content.replace(/[#*`~]/g, '').replace(/\n/g, ' ');
|
||||
return plainText.slice(0, length) + (plainText.length > length ? '...' : '');
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue