preprocess-text-fix
This commit is contained in:
parent
a5d15f2808
commit
28c66a564a
|
@ -98,7 +98,7 @@ export const CommentsTree = (props: Props) => {
|
|||
<h2 class={styles.commentsHeader}>
|
||||
{t('Comments')} {comments().length.toString() || ''}
|
||||
<Show when={newReactions().length > 0}>
|
||||
<span class={styles.newReactions}> +{newReactions().length}</span>
|
||||
<span class={styles.newReactions}>{` +${newReactions().length}`}</span>
|
||||
</Show>
|
||||
</h2>
|
||||
<Show when={comments().length > 0}>
|
||||
|
@ -150,7 +150,7 @@ export const CommentsTree = (props: Props) => {
|
|||
<a href="?m=auth&mode=register" class={styles.link}>
|
||||
{t('sign up')}
|
||||
</a>{' '}
|
||||
{t('or')}
|
||||
{t('or')}{' '}
|
||||
<a href="?m=auth&mode=login" class={styles.link}>
|
||||
{t('sign in')}
|
||||
</a>
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
import type { Author, Community } from '~/graphql/schema/core.gen'
|
||||
|
||||
import { redirect, useNavigate, useSearchParams } from '@solidjs/router'
|
||||
import { clsx } from 'clsx'
|
||||
import { For, Show, createEffect, createMemo, createSignal, onMount } from 'solid-js'
|
||||
import { Button } from '~/components/_shared/Button'
|
||||
import stylesButton from '~/components/_shared/Button/Button.module.scss'
|
||||
import { FollowingCounters } from '~/components/_shared/FollowingCounters/FollowingCounters'
|
||||
import { ShowOnlyOnClient } from '~/components/_shared/ShowOnlyOnClient'
|
||||
import { FollowsFilter, useFollowing } from '~/context/following'
|
||||
import { useLocalize } from '~/context/localize'
|
||||
import { useSession } from '~/context/session'
|
||||
import type { Author, Community } from '~/graphql/schema/core.gen'
|
||||
import { FollowingEntity, Topic } from '~/graphql/schema/core.gen'
|
||||
import { isCyrillic } from '~/intl/translate'
|
||||
import { translit } from '~/intl/translit'
|
||||
|
@ -16,9 +17,6 @@ import { Modal } from '../../Nav/Modal'
|
|||
import { TopicBadge } from '../../Topic/TopicBadge'
|
||||
import { AuthorBadge } from '../AuthorBadge'
|
||||
import { Userpic } from '../Userpic'
|
||||
|
||||
import { useNavigate, useSearchParams } from '@solidjs/router'
|
||||
import stylesButton from '~/components/_shared/Button/Button.module.scss'
|
||||
import styles from './AuthorCard.module.scss'
|
||||
|
||||
type Props = {
|
||||
|
@ -251,7 +249,7 @@ export const AuthorCard = (props: Props) => {
|
|||
<div class={styles.authorActions}>
|
||||
<Button
|
||||
variant="secondary"
|
||||
onClick={() => navigate('/profile')}
|
||||
onClick={() => redirect('/profile')}
|
||||
value={
|
||||
<>
|
||||
<span class={styles.authorActionsLabel}>{t('Edit profile')}</span>
|
||||
|
|
|
@ -27,8 +27,8 @@ export const FooterView = () => {
|
|||
items: [
|
||||
{ title: t('Discours Manifest'), slug: '/manifest' },
|
||||
{ title: t('How it works'), slug: '/guide' },
|
||||
{ title: t('Dogma'), slug: '/guide/dogma' },
|
||||
{ title: t('Our principles'), slug: '/guide/principles' },
|
||||
{ title: t('Dogma'), slug: '/dogma' },
|
||||
{ title: t('Our principles'), slug: '/principles' },
|
||||
{ title: t('How to write an article'), slug: '/how-to-write-a-good-article' }
|
||||
]
|
||||
},
|
||||
|
@ -50,7 +50,7 @@ export const FooterView = () => {
|
|||
{ title: t('Authors'), slug: '/author' },
|
||||
{ title: t('Communities'), slug: '/community' },
|
||||
{ title: t('Partners'), slug: '/partners' },
|
||||
{ title: t('Special projects'), slug: '/guide/projects' },
|
||||
{ title: t('Special projects'), slug: '/projects' },
|
||||
{
|
||||
title: lang() === 'ru' ? 'English' : 'Русский',
|
||||
slug: `?lng=${lang() === 'ru' ? 'en' : 'ru'}`,
|
||||
|
|
|
@ -74,11 +74,11 @@ const data: PlaceholderData = {
|
|||
href: '/feed?by=last_comment',
|
||||
profileLinks: [
|
||||
{
|
||||
href: '/guide/debate',
|
||||
href: '/debate',
|
||||
label: 'Discussion rules'
|
||||
},
|
||||
{
|
||||
href: '/guide/debate#ban',
|
||||
href: '/debate#ban',
|
||||
label: 'Block rules'
|
||||
}
|
||||
]
|
||||
|
|
|
@ -27,7 +27,7 @@ export const AuthModalHeader = (props: Props) => {
|
|||
return {
|
||||
title: t(`${title} to add to your bookmarks`),
|
||||
description: t(
|
||||
'In bookmarks, you can save favorite discussions and materials that you want to return to'
|
||||
'In bookmarks, you can save favorite discussions and materials that you want to return to'
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ export const AuthModalHeader = (props: Props) => {
|
|||
return {
|
||||
title: t(`${title} to participate in discussions`),
|
||||
description: t(
|
||||
"You ll be able to participate in discussions, rate others' comments and learn about new responses"
|
||||
"You ll be able to participate in discussions, rate others' comments and learn about new responses"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ export const AuthModalHeader = (props: Props) => {
|
|||
return {
|
||||
title: t(`${title} to subscribe`),
|
||||
description: t(
|
||||
'This way you ll be able to subscribe to authors, interesting topics and customize your feed'
|
||||
'This way you ll be able to subscribe to authors, interesting topics and customize your feed'
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ export const AuthModalHeader = (props: Props) => {
|
|||
return {
|
||||
title: t(`${title} to subscribe to new publications`),
|
||||
description: t(
|
||||
'This way you ll be able to subscribe to authors, interesting topics and customize your feed'
|
||||
'This way you ll be able to subscribe to authors, interesting topics and customize your feed'
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ export const AuthModalHeader = (props: Props) => {
|
|||
return {
|
||||
title: t(`${title} to vote`),
|
||||
description: t(
|
||||
'This way we ll realize that you re a real person and ll take your vote into account. And you ll see how others voted'
|
||||
'This way we ll realize that you re a real person and ll take your vote into account. And you ll see how others voted'
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ export const AuthModal = () => {
|
|||
{t(
|
||||
'Get to know the most intelligent people of our time, edit and discuss the articles, share your expertise, rate and decide what to publish in the magazine'
|
||||
)}
|
||||
.
|
||||
.{' '}
|
||||
{t('New stories and more are waiting for you every day!')}
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { A, useLocation, useNavigate, useSearchParams } from '@solidjs/router'
|
||||
import { A, redirect, useLocation, useNavigate, useSearchParams } from '@solidjs/router'
|
||||
import { clsx } from 'clsx'
|
||||
import { For, Show, createEffect, createSignal, onCleanup, onMount } from 'solid-js'
|
||||
import { useLocalize } from '~/context/localize'
|
||||
|
@ -120,7 +120,7 @@ export const Header = (props: Props) => {
|
|||
requireAuthentication(() => {
|
||||
ev?.preventDefault()
|
||||
|
||||
navigate('/edit/new')
|
||||
redirect('/edit/new')
|
||||
}, 'create')
|
||||
}
|
||||
|
||||
|
@ -149,13 +149,9 @@ export const Header = (props: Props) => {
|
|||
}
|
||||
|
||||
const handleToggleMenuByLink = (event: MouseEvent, route: string) => {
|
||||
console.debug('toggling menu link', fixed(), route)
|
||||
event.preventDefault()
|
||||
if (loc.pathname === route) {
|
||||
toggleFixed()
|
||||
}
|
||||
|
||||
navigate(route)
|
||||
if (fixed()) toggleFixed()
|
||||
if (loc.pathname !== route) navigate(route)
|
||||
}
|
||||
return (
|
||||
<header
|
||||
|
@ -248,13 +244,13 @@ export const Header = (props: Props) => {
|
|||
<h4>{t('Participating')}</h4>
|
||||
<ul class="view-switcher">
|
||||
<li>
|
||||
<a href="/create">{t('Create post')}</a>
|
||||
<A href="/edit/new">{t('Create post')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/connect">{t('Suggest an idea')}</a>
|
||||
<A href="/connect">{t('Suggest an idea')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about/help">{t('Support the project')}</a>
|
||||
<A href="/support">{t('Support the project')}</A>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
@ -312,9 +308,9 @@ export const Header = (props: Props) => {
|
|||
</select>
|
||||
|
||||
<div class={styles.mainNavigationAdditionalLinks}>
|
||||
<a href="/about/dogma">{t('Dogma')}</a>
|
||||
<a href="/about/discussion-rules" innerHTML={t('Discussion rules')} />
|
||||
<a href="/about/principles">{t('Principles')}</a>
|
||||
<A href="/dogma">{t('Dogma')}</A>
|
||||
<A href="/terms">{t('Discussion rules')}</A>
|
||||
<A href="/principles">{t('Principles')}</A>
|
||||
</div>
|
||||
|
||||
<p
|
||||
|
@ -375,28 +371,28 @@ export const Header = (props: Props) => {
|
|||
>
|
||||
<ul class="nodash">
|
||||
<li>
|
||||
<a href="/about/manifest">{t('Manifesto')}</a>
|
||||
<A href="/manifest">{t('Manifesto')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about/dogma">{t('Dogma')}</a>
|
||||
<A href="/dogma">{t('Dogma')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about/principles">{t('Community Principles')}</a>
|
||||
<A href="/principles">{t('Community Principles')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about/guide">{t('Platform Guide')}</a>
|
||||
<A href="/guide">{t('Platform Guide')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about/manifest#participation">{t('Support us')}</a>
|
||||
<A href="/support">{t('Support us')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about/help">{t('How to help')}</a>
|
||||
<A href="/manifest#participation">{t('How to help')}</A>
|
||||
</li>
|
||||
<li class={styles.rightItem}>
|
||||
<a href="/connect">
|
||||
<A href="/connect">
|
||||
{t('Suggest an idea')}
|
||||
<Icon name="arrow-right-black" class={clsx(styles.icon, styles.rightItemIcon)} />
|
||||
</a>
|
||||
</A>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -409,34 +405,37 @@ export const Header = (props: Props) => {
|
|||
>
|
||||
<ul class="nodash">
|
||||
<li class="item">
|
||||
<a href="/expo">{t('Art')}</a>
|
||||
<A href="/expo">{t('Art')}</A>
|
||||
</li>
|
||||
<li class="item">
|
||||
<a href="/podcasts">{t('Podcasts')}</a>
|
||||
<A href="/expo/audio">{t('Music')}</A>
|
||||
</li>
|
||||
<li class="item">
|
||||
<a href="/about/projects">{t('Special Projects')}</a>
|
||||
<A href="/expo/video">{t('Video')}</A>
|
||||
</li>
|
||||
<li class="item">
|
||||
<A href="/projects">{t('Special Projects')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/topic/interview">#{t('Interview')}</a>
|
||||
<A href="/topic/interview">#{t('Interview')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/topic/reportage">#{t('Reports')}</a>
|
||||
<A href="/topic/reportage">#{t('Reports')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/topic/empiric">#{t('Experience')}</a>
|
||||
<A href="/topic/empiric">#{t('Experience')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/topic/society">#{t('Society')}</a>
|
||||
<A href="/topic/society">#{t('Society')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/topic/culture">#{t('Culture')}</a>
|
||||
<A href="/topic/culture">#{t('Culture')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/topic/theory">#{t('Theory')}</a>
|
||||
<A href="/topic/theory">#{t('Theory')}</A>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/topic/poetry">#{t('Poetry')}</a>
|
||||
<A href="/topic/poetry">#{t('Poetry')}</A>
|
||||
</li>
|
||||
<li class={styles.rightItem}>
|
||||
<A href="/topic">
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { redirect } from '@solidjs/router'
|
||||
import { clsx } from 'clsx'
|
||||
import type { JSX } from 'solid-js'
|
||||
import { Show } from 'solid-js'
|
||||
|
@ -23,9 +24,12 @@ export const Modal = (props: Props) => {
|
|||
|
||||
const handleHide = () => {
|
||||
console.debug('[Modal.handleHide]', modal())
|
||||
modal() && props.onClose?.()
|
||||
if (modal()) {
|
||||
if (props.hideClose) redirect('/')
|
||||
props.onClose?.()
|
||||
hideModal()
|
||||
}
|
||||
}
|
||||
|
||||
useEscKeyDownHandler(handleHide)
|
||||
return (
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import type { JSX } from 'solid-js/jsx-runtime'
|
||||
import { type ModalType, useUI } from '~/context/ui'
|
||||
|
||||
export default (props: { name: ModalType; children: JSX.Element }) => {
|
||||
export const Opener = (props: { name: ModalType; children: JSX.Element }) => {
|
||||
const { showModal } = useUI()
|
||||
return (
|
||||
<a href="#" onClick={() => showModal(props.name)}>
|
||||
|
@ -9,3 +9,5 @@ export default (props: { name: ModalType; children: JSX.Element }) => {
|
|||
</a>
|
||||
)
|
||||
}
|
||||
|
||||
export default Opener
|
||||
|
|
|
@ -20,7 +20,7 @@ export const Topics = () => {
|
|||
<A href="/podcasts">{t('Podcasts')}</A>
|
||||
</li>
|
||||
<li class={styles.item}>
|
||||
<A href="/guide/projects">{t('Special Projects')}</A>
|
||||
<A href="/projects">{t('Special Projects')}</A>
|
||||
</li>
|
||||
<li class={styles.item}>
|
||||
<A href="/topic/interview">#{t('Interview')}</A>
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
import { Meta } from '@solidjs/meta'
|
||||
import { useSearchParams } from '@solidjs/router'
|
||||
import { clsx } from 'clsx'
|
||||
import { For, Show, createMemo, createSignal, onMount } from 'solid-js'
|
||||
import { For, Show, createEffect, createMemo, createSignal, on } from 'solid-js'
|
||||
import { Loading } from '~/components/_shared/Loading'
|
||||
import { SearchField } from '~/components/_shared/SearchField'
|
||||
import { type SortFunction, useAuthors } from '~/context/authors'
|
||||
import { useAuthors } from '~/context/authors'
|
||||
import { useLocalize } from '~/context/localize'
|
||||
import type { Author } from '~/graphql/schema/core.gen'
|
||||
import enKeywords from '~/intl/locales/en/keywords.json'
|
||||
import ruKeywords from '~/intl/locales/ru/keywords.json'
|
||||
import { authorLetterReduce, translateAuthor } from '~/intl/translate'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { byFirstChar, byStat } from '~/lib/sortby'
|
||||
import { scrollHandler } from '~/utils/scroll'
|
||||
import { AuthorsList } from '../../AuthorsList'
|
||||
import styles from './AllAuthors.module.scss'
|
||||
|
@ -33,25 +32,21 @@ export const AllAuthors = (props: Props) => {
|
|||
const [searchQuery, setSearchQuery] = createSignal('')
|
||||
const alphabet = createMemo(() => ABC[lang()] || ABC['ru'])
|
||||
const [searchParams] = useSearchParams<{ by?: string }>()
|
||||
const { authorsSorted, addAuthors, setSortBy } = useAuthors()
|
||||
const { authorsSorted, addAuthors, setAuthorsSort } = useAuthors()
|
||||
createEffect(on(() => searchParams?.by || 'name', setAuthorsSort, {}))
|
||||
createEffect(() => addAuthors?.([...(props.authors || [])]))
|
||||
|
||||
onMount(() => {
|
||||
addAuthors([...props.authors])
|
||||
const sortStat: string = searchParams?.by || 'name'
|
||||
const sortfn = sortStat
|
||||
? (byStat(sortStat) as SortFunction<Author>)
|
||||
: (byFirstChar as SortFunction<Author>)
|
||||
setSortBy(sortfn)
|
||||
})
|
||||
const filteredAuthors = createMemo(() => {
|
||||
const query = searchQuery().toLowerCase()
|
||||
return authorsSorted?.().filter((a: Author) => a?.name?.toLowerCase().includes(query))
|
||||
})
|
||||
|
||||
const byLetterFiltered = createMemo<{ [letter: string]: Author[] }>(() => {
|
||||
return filteredAuthors().reduce(
|
||||
return (
|
||||
filteredAuthors()?.reduce(
|
||||
(acc, author: Author) => authorLetterReduce(acc, author, lang()),
|
||||
{} as { [letter: string]: Author[] }
|
||||
) || {}
|
||||
)
|
||||
})
|
||||
|
||||
|
@ -170,7 +165,7 @@ export const AllAuthors = (props: Props) => {
|
|||
</Show>
|
||||
<Show when={searchParams?.by !== 'name' && props.isLoaded}>
|
||||
<AuthorsList
|
||||
allAuthorsLength={authorsSorted()?.length || 0}
|
||||
allAuthorsLength={authorsSorted?.()?.length || 0}
|
||||
searchQuery={searchQuery()}
|
||||
query={searchParams?.by === 'followers' ? 'followers' : 'shouts'}
|
||||
/>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { Meta } from '@solidjs/meta'
|
||||
import { A, useSearchParams } from '@solidjs/router'
|
||||
import { clsx } from 'clsx'
|
||||
import { For, Show, createEffect, createMemo, createSignal, on, onMount } from 'solid-js'
|
||||
import { For, Show, createEffect, createMemo, createSignal, on } from 'solid-js'
|
||||
import { Loading } from '~/components/_shared/Loading'
|
||||
import { SearchField } from '~/components/_shared/SearchField'
|
||||
import { useLocalize } from '~/context/localize'
|
||||
|
@ -32,8 +32,8 @@ export const AllTopics = (props: Props) => {
|
|||
const { setTopicsSort, sortedTopics } = useTopics()
|
||||
const topics = createMemo(() => sortedTopics() || props.topics)
|
||||
const [searchParams] = useSearchParams<{ by?: string }>()
|
||||
createEffect(on(() => searchParams?.by || 'shouts', setTopicsSort, { defer: true }))
|
||||
onMount(() => setTopicsSort('shouts'))
|
||||
createEffect(on(() => searchParams?.by || 'shouts', setTopicsSort, {}))
|
||||
|
||||
// sorted derivative
|
||||
const byLetter = createMemo<{ [letter: string]: Topic[] }>(() => {
|
||||
return topics().reduce(
|
||||
|
|
|
@ -21,7 +21,7 @@ import ruKeywords from '~/intl/locales/ru/keywords.json'
|
|||
import enKeywords from '~/intl/locales/ru/keywords.json'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { byCreated } from '~/lib/sortby'
|
||||
import { FeedSearchParams } from '~/routes/feed/[...feed]'
|
||||
import { FeedSearchParams } from '~/routes/feed/[feed]'
|
||||
import { CommentDate } from '../../Article/CommentDate'
|
||||
import { getShareUrl } from '../../Article/SharePopup'
|
||||
import { AuthorBadge } from '../../Author/AuthorBadge'
|
||||
|
@ -264,7 +264,7 @@ export const FeedView = (props: FeedProps) => {
|
|||
<A href="#">Правила конструктивных дискуссий</A>
|
||||
</li>
|
||||
<li>
|
||||
<A href={'/guide/principles'}>Принципы сообщества</A>
|
||||
<A href={'/principles'}>Принципы сообщества</A>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
|
|
@ -35,7 +35,7 @@ export const FeedSettingsView = () => {
|
|||
</div>
|
||||
|
||||
<div>
|
||||
<label for="checkbox1">Комментарии к моим постам</label>
|
||||
<label for="checkbox1">Комментарии к моим постам</label>
|
||||
<div>
|
||||
<input type="checkbox" name="checkbox1" id="checkbox1" />
|
||||
<label for="checkbox1" />
|
||||
|
@ -69,7 +69,7 @@ export const FeedSettingsView = () => {
|
|||
</div>
|
||||
|
||||
<div>
|
||||
<label for="checkbox3">добавление моих текстов в коллекции</label>
|
||||
<label for="checkbox3">добавление моих текстов в коллекции</label>
|
||||
<div>
|
||||
<input type="checkbox" name="checkbox3" id="checkbox3" />
|
||||
<label for="checkbox3" />
|
||||
|
@ -90,7 +90,7 @@ export const FeedSettingsView = () => {
|
|||
</div>
|
||||
|
||||
<div>
|
||||
<label for="checkbox4">добавление моих текстов в коллекции</label>
|
||||
<label for="checkbox4">добавление моих текстов в коллекции</label>
|
||||
<div>
|
||||
<input type="checkbox" name="checkbox4" id="checkbox4" />
|
||||
<label for="checkbox4" />
|
||||
|
|
|
@ -1,24 +1,53 @@
|
|||
import { JSX } from 'solid-js'
|
||||
|
||||
import { Meta } from '@solidjs/meta'
|
||||
import { JSX, createMemo } from 'solid-js'
|
||||
import { useLocalize } from '~/context/localize'
|
||||
import enKeywords from '~/intl/locales/en/keywords.json'
|
||||
import ruKeywords from '~/intl/locales/ru/keywords.json'
|
||||
import { processJSXElement } from '~/intl/prepositions'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { TableOfContents } from '../TableOfContents'
|
||||
import { PageLayout } from '../_shared/PageLayout'
|
||||
|
||||
type Props = {
|
||||
title: string
|
||||
desc?: string
|
||||
children: JSX.Element
|
||||
}
|
||||
export const StaticPage = (props: Props) => {
|
||||
let articleBodyElement: HTMLElement | null = null
|
||||
const { t, lang } = useLocalize()
|
||||
const ogTitle = createMemo(() => t(props.title || 'Discours'))
|
||||
const description = createMemo(() => t(props.desc || ''))
|
||||
const ogImage = getImageUrl('production/image/logo_image.png')
|
||||
const keywords = createMemo(() => {
|
||||
const page = props.title.toLocaleLowerCase() as keyof typeof ruKeywords
|
||||
return `${lang() === 'ru' ? ruKeywords[page] : enKeywords[page]}`
|
||||
})
|
||||
|
||||
return (
|
||||
<PageLayout title={props.title}>
|
||||
<Meta name="descprition" content={description()} />
|
||||
<Meta name="keywords" content={keywords()} />
|
||||
<Meta name="og:type" content="article" />
|
||||
<Meta name="og:title" content={ogTitle()} />
|
||||
<Meta name="og:image" content={ogImage} />
|
||||
<Meta name="twitter:image" content={ogImage} />
|
||||
<Meta name="og:description" content={description()} />
|
||||
<Meta name="twitter:card" content="summary_large_image" />
|
||||
<Meta name="twitter:title" content={ogTitle()} />
|
||||
<Meta name="twitter:description" content={description()} />
|
||||
<h1>
|
||||
<span class="wrapped">{ogTitle()}</span>
|
||||
</h1>
|
||||
<article
|
||||
class="wide-container container--static-page"
|
||||
id="articleBody"
|
||||
ref={(el) => (articleBodyElement = el)}
|
||||
>
|
||||
<div class="row">
|
||||
<div class="col-md-12 col-xl-14 offset-md-5 order-md-first">{props.children}</div>
|
||||
<div class="col-md-12 col-xl-14 offset-md-5 order-md-first">
|
||||
{processJSXElement(props.children)}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 order-md-last">
|
||||
<TableOfContents
|
||||
|
|
|
@ -48,7 +48,7 @@ export const InviteMembers = (props: Props) => {
|
|||
const fetcher = async (page: number) => {
|
||||
await new Promise((resolve, reject) => {
|
||||
const checkDataLoaded = () => {
|
||||
if (authorsSorted().length > 0) {
|
||||
if ((authorsSorted?.().length || 0) > 0) {
|
||||
resolve(true)
|
||||
} else {
|
||||
setTimeout(checkDataLoaded, 100)
|
||||
|
|
|
@ -106,7 +106,7 @@ export const Newsletter = (props: Props) => {
|
|||
<Icon name="arrow-right" />
|
||||
</button>
|
||||
</div>
|
||||
<div class="description">Подпишитесь на рассылку лучших публикаций</div>
|
||||
<div class="description">{t('Subscribe to the best publications newsletter')}</div>
|
||||
</Show>
|
||||
<Show when={emailError()}>
|
||||
<div class={styles.error}>{emailError()}</div>
|
||||
|
|
|
@ -12,6 +12,7 @@ import loadAuthorByQuery from '~/graphql/query/core/author-by'
|
|||
import loadAuthorsAllQuery from '~/graphql/query/core/authors-all'
|
||||
import loadAuthorsByQuery from '~/graphql/query/core/authors-load-by'
|
||||
import { Author, Maybe, QueryLoad_Authors_ByArgs, Shout, Topic } from '~/graphql/schema/core.gen'
|
||||
import { byStat } from '~/lib/sortby'
|
||||
import { useFeed } from './feed'
|
||||
import { useGraphQL } from './graphql'
|
||||
|
||||
|
@ -38,7 +39,7 @@ type AuthorsContextType = {
|
|||
loadAuthors: (args: QueryLoad_Authors_ByArgs) => Promise<void>
|
||||
topAuthors: Accessor<Author[]>
|
||||
authorsByTopic: Accessor<{ [topicSlug: string]: Author[] }>
|
||||
setSortBy: (sortfn: SortFunction<Author>) => void
|
||||
setAuthorsSort: (stat: string) => void
|
||||
loadAllAuthors: () => Promise<Author[]>
|
||||
}
|
||||
|
||||
|
@ -52,6 +53,7 @@ export const AuthorsProvider = (props: { children: JSX.Element }) => {
|
|||
const [sortBy, setSortBy] = createSignal<SortFunction<Author>>()
|
||||
const { feedByAuthor } = useFeed()
|
||||
const { query } = useGraphQL()
|
||||
const setAuthorsSort = (stat: string) => setSortBy((_) => byStat(stat) as SortFunction<Author>)
|
||||
|
||||
// Эффект для отслеживания изменений сигнала sortBy и обновления authorsSorted
|
||||
createEffect(
|
||||
|
@ -59,7 +61,7 @@ export const AuthorsProvider = (props: { children: JSX.Element }) => {
|
|||
[sortBy, authorsEntities],
|
||||
([sortfn, authorsdict]) => {
|
||||
if (sortfn) {
|
||||
setAuthorsSorted([...filterAndSort(Object.values(authorsdict), sortfn)])
|
||||
setAuthorsSorted?.([...filterAndSort(Object.values(authorsdict), sortfn)])
|
||||
}
|
||||
},
|
||||
{ defer: true }
|
||||
|
@ -178,7 +180,7 @@ export const AuthorsProvider = (props: { children: JSX.Element }) => {
|
|||
loadAuthors,
|
||||
topAuthors,
|
||||
authorsByTopic,
|
||||
setSortBy
|
||||
setAuthorsSort
|
||||
}
|
||||
|
||||
return <AuthorsContext.Provider value={contextValue}>{props.children}</AuthorsContext.Provider>
|
||||
|
|
|
@ -11,6 +11,7 @@ import {
|
|||
useContext
|
||||
} from 'solid-js'
|
||||
import { TimeAgo, type i18n, i18next, i18nextInit } from '~/intl/i18next'
|
||||
import { processPrepositions } from '~/intl/prepositions'
|
||||
|
||||
i18nextInit()
|
||||
|
||||
|
@ -87,7 +88,7 @@ export const LocalizeProvider = (props: { children: JSX.Element }) => {
|
|||
try {
|
||||
return i18next.t(...args)
|
||||
} catch (_) {
|
||||
return args?.length > 0 ? (args[0] as string) : ''
|
||||
return args?.length > 0 ? processPrepositions(args[0] as string) : ''
|
||||
}
|
||||
}) as i18n['t'],
|
||||
lang,
|
||||
|
|
|
@ -105,11 +105,11 @@ const saveTopicsToIndexedDB = async (db: IDBDatabase, topics: Topic[]) => {
|
|||
await tx.done
|
||||
}
|
||||
}
|
||||
export type TopicSort = 'shouts' | 'followers' | 'authors' | 'title' | ''
|
||||
export type TopicSort = 'shouts' | 'followers' | 'authors' | 'title'
|
||||
export const TopicsProvider = (props: { children: JSX.Element }) => {
|
||||
const [topicEntities, setTopicEntities] = createSignal<{ [topicSlug: string]: Topic }>({})
|
||||
const [sortedTopics, setSortedTopics] = createSignal<Topic[]>([])
|
||||
const [sortAllBy, setSortAllBy] = createSignal<TopicSort>('')
|
||||
const [sortAllBy, setSortAllBy] = createSignal<TopicSort>('shouts')
|
||||
|
||||
createEffect(() => {
|
||||
const topics = Object.values(topicEntities())
|
||||
|
|
|
@ -10,18 +10,10 @@ import ru from '~/intl/locales/ru/translation.json'
|
|||
TimeAgo.addLocale(enTime)
|
||||
TimeAgo.addLocale(ruTime)
|
||||
|
||||
class AutoKeyMap extends Map<string, string> {
|
||||
get(key: string): string {
|
||||
return super.get(key) ?? key
|
||||
}
|
||||
}
|
||||
|
||||
export const i18nextInit = async (lng = 'ru') => {
|
||||
if (!i18next.isInitialized) {
|
||||
console.debug('[i18next] initializing...')
|
||||
|
||||
const enAutoKeyMap = new AutoKeyMap(Object.entries(en))
|
||||
|
||||
await i18next
|
||||
.use(HttpApi)
|
||||
.use(ICU)
|
||||
|
@ -34,7 +26,7 @@ export const i18nextInit = async (lng = 'ru') => {
|
|||
initImmediate: false,
|
||||
resources: {
|
||||
ru: { translation: ru },
|
||||
en: { translation: enAutoKeyMap }
|
||||
en: { translation: en }
|
||||
},
|
||||
interpolation: {
|
||||
escapeValue: false
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
"Subscribe what you like to tune your personal feed": "Subscribe to topics that interest you to customize your personal feed and get instant updates on new posts and discussions",
|
||||
"Subscribe who you like to tune your personal feed": "Subscribe to authors you're interested in to customize your personal feed and get instant updates on new posts and discussions",
|
||||
"The most interesting publications on the topic": "The most interesting publications on the topic {topicName}",
|
||||
"To find publications, art, comments, authors and topics of interest to you, just start typing your query": "To find publications, art, comments, authors and topics of interest to you, just start typing your query",
|
||||
"We couldn't find anything for your request": "We couldn’t find anything for your request",
|
||||
"To find publications, art, comments, authors and topics of interest to you, just start typing your query": "To find publications, art, comments, authors and topics of interest to you, just start typing your query",
|
||||
"We couldn't find anything for your request": "We couldn't find anything for your request",
|
||||
"We know you, please try to login": "This email address is already registered, please try to login",
|
||||
"We've sent you a message with a link to enter our website.": "We've sent you an email with a link to your email. Follow the link in the email to enter our website.",
|
||||
"Where": "From",
|
||||
|
|
|
@ -234,7 +234,7 @@
|
|||
"I know the password": "Я знаю пароль!",
|
||||
"Image format not supported": "Тип изображения не поддерживается",
|
||||
"images": "изображения",
|
||||
"In bookmarks, you can save favorite discussions and materials that you want to return to": "В закладках можно сохранять избранные дискуссии и материалы, к которым хочется вернуться",
|
||||
"In bookmarks, you can save favorite discussions and materials that you want to return to": "В закладках можно сохранять избранные дискуссии и материалы, к которым хочется вернуться",
|
||||
"Inbox": "Входящие",
|
||||
"Incorrect new password confirm": "Неверное подтверждение нового пароля",
|
||||
"Incorrect old password": "Старый пароль не верен",
|
||||
|
@ -444,7 +444,7 @@
|
|||
"Subscribe": "Подписаться",
|
||||
"Subscribe to comments": "Подписаться на комментарии",
|
||||
"Subscribe to the best publications newsletter": "Подпишитесь на рассылку лучших публикаций",
|
||||
"Subscribe us": "Подпишитесь на нас",
|
||||
"Subscribe us": "Подпишитесь на нас",
|
||||
"Subscribe what you like to tune your personal feed": "Подпишитесь на интересующие вас темы, чтобы настроить вашу персональную ленту и моментально узнавать о новых публикациях и обсуждениях",
|
||||
"Subscribe who you like to tune your personal feed": "Подпишитесь на интересующих вас авторов, чтобы настроить вашу персональную ленту и моментально узнавать о новых публикациях и обсуждениях",
|
||||
"subscriber": "подписчик",
|
||||
|
@ -483,11 +483,11 @@
|
|||
"This functionality is currently not available, we would like to work on this issue. Use the download link.": "В данный момент этот функционал не доступен, бы работаем над этой проблемой. Воспользуйтесь загрузкой по ссылке.",
|
||||
"This month": "За месяц",
|
||||
"This post has not been rated yet": "Эту публикацию еще пока никто не оценил",
|
||||
"This way we ll realize that you re a real person and ll take your vote into account. And you ll see how others voted": "Так мы поймем, что вы реальный человек, и учтем ваш голос. А вы увидите, как проголосовали другие",
|
||||
"This way you ll be able to subscribe to authors, interesting topics and customize your feed": "Так вы сможете подписаться на авторов, интересные темы и настроить свою ленту",
|
||||
"This way we ll realize that you re a real person and ll take your vote into account. And you ll see how others voted": "Так мы поймем, что вы реальный человек, и учтем ваш голос. А вы увидите, как проголосовали другие",
|
||||
"This way you ll be able to subscribe to authors, interesting topics and customize your feed": "Так вы сможете подписаться на авторов, интересные темы и настроить свою ленту",
|
||||
"This week": "За неделю",
|
||||
"This year": "За год",
|
||||
"To find publications, art, comments, authors and topics of interest to you, just start typing your query": "Для поиска публикаций, искусства, комментариев, интересных вам авторов и тем, просто начните вводить ваш запрос",
|
||||
"To find publications, art, comments, authors and topics of interest to you, just start typing your query": "Для поиска публикаций, искусства, комментариев, интересных вам авторов и тем, просто начните вводить ваш запрос",
|
||||
"To leave a comment please": "Чтобы оставить комментарий, необходимо",
|
||||
"To write a comment, you must": "Чтобы написать комментарий, необходимо",
|
||||
"today": "сегодня",
|
||||
|
@ -528,7 +528,7 @@
|
|||
"Views": "Просмотры",
|
||||
"We are working on collaborative editing of articles and in the near future you will have an amazing opportunity - to create together with your colleagues": "Мы работаем над коллаборативным редактированием статей и в ближайшем времени у вас появиться удивительная возможность - творить вместе с коллегами",
|
||||
"We can't find you, check email or": "Не можем вас найти, проверьте адрес электронной почты или",
|
||||
"We couldn't find anything for your request": "Мы не смогли ничего найти по вашему запросу",
|
||||
"We couldn't find anything for your request": "Мы не смогли ничего найти по вашему запросу",
|
||||
"We know you, please try to login": "Такой адрес почты уже зарегистрирован, попробуйте залогиниться",
|
||||
"We've sent you a message with a link to enter our website.": "Мы выслали вам письмо с ссылкой на почту. Перейдите по ссылке в письме, чтобы войти на сайт.",
|
||||
"Welcome to Discours": "Добро пожаловать в Дискурс",
|
||||
|
@ -558,7 +558,7 @@
|
|||
"You can now login using your new password": "Теперь вы можете входить с помощью нового пароля",
|
||||
"You can't edit this post": "Вы не можете редактировать этот материал",
|
||||
"You was successfully authorized": "Вы были успешно авторизованы",
|
||||
"You ll be able to participate in discussions, rate others' comments and learn about new responses": "Вы сможете участвовать в обсуждениях, оценивать комментарии других и узнавать о новых ответах",
|
||||
"You ll be able to participate in discussions, rate others' comments and learn about new responses": "Вы сможете участвовать в обсуждениях, оценивать комментарии других и узнавать о новых ответах",
|
||||
"You've confirmed email": "Вы подтвердили почту",
|
||||
"You've reached a non-existed page": "Вы попали на несуществующую страницу",
|
||||
"You've successfully logged out": "Вы успешно вышли из аккаунта",
|
||||
|
|
77
src/intl/prepositions.ts
Normal file
77
src/intl/prepositions.ts
Normal file
|
@ -0,0 +1,77 @@
|
|||
import { JSX } from "solid-js/jsx-runtime"
|
||||
import { mergeProps } from "solid-js/web"
|
||||
|
||||
export const dictionaryBefore = [
|
||||
'а', 'без', 'в', 'во', 'до', 'за', 'из', 'к', 'ко', 'на', 'над', 'о', 'об', 'от', 'по', 'под', 'при', 'про', 'с', 'со', 'у', 'через',
|
||||
'близ', 'вне', 'для', 'меж', 'ради', 'среди', 'около', 'против', 'между', 'перед', 'вокруг', 'возле',
|
||||
'и', 'но', 'да', 'или', 'либо', 'ни', 'как', 'то', 'не', 'что',
|
||||
'ведь', 'вот', 'вон', 'именно', 'лишь', 'просто', 'прямо', 'только', 'даже', 'уже', 'еще', 'все',
|
||||
'однако', 'хоть', 'хотя', 'будто', 'словно', 'точно', 'ровно', 'так', 'если', 'чтобы',
|
||||
'вдруг', 'опять', 'снова', 'вновь', 'тоже', 'также',
|
||||
'почти', 'едва', 'чуть', 'совсем', 'совершенно', 'абсолютно',
|
||||
'мол', 'дескать', 'якобы',
|
||||
'авось', 'небось', 'никак', 'неужели', 'разве', 'ужели',
|
||||
'вряд', 'пусть', 'пускай', 'давай', 'давайте',
|
||||
'нет', 'конечно', 'несомненно', 'безусловно',
|
||||
'итак', 'следовательно', 'значит', 'поэтому', 'потому',
|
||||
'вообще', 'кстати', 'кроме', 'впрочем', 'однако',
|
||||
'это', 'эта', 'этот', 'эти', 'та', 'тот', 'те',
|
||||
'ну', 'аж', 'вплоть', 'ведь',
|
||||
'весьма', 'крайне', 'очень', 'слишком',
|
||||
'всего', 'всего-навсего', 'лишь', 'только', 'исключительно',
|
||||
'вроде', 'типа', 'наподобие',
|
||||
'когда', 'куда', 'откуда', 'зачем', 'почему', 'отчего',
|
||||
'где', 'кто', 'кого', 'кому', 'кем',
|
||||
'который', 'которая', 'которое', 'которые',
|
||||
'чей', 'чья', 'чье', 'чьи',
|
||||
'каков', 'какова', 'каково', 'каковы',
|
||||
'сколько', 'насколько', 'настолько',
|
||||
'пока', 'пока не', 'едва', 'едва не',
|
||||
'чем', 'нежели', 'словно', 'будто',
|
||||
'хоть', 'хотя', 'пускай', 'пусть',
|
||||
'раз', 'раз уж', 'коли', 'коль',
|
||||
'чуть', 'чуть ли не', 'чуть не',
|
||||
]
|
||||
|
||||
export const dictionaryAfter = [
|
||||
'ли', 'же', 'бы', 'б', 'ж',
|
||||
'таки',
|
||||
'как', 'так', 'эдак',
|
||||
'эти', 'это', 'эта', 'этот',
|
||||
'те', 'то', 'та', 'тот',
|
||||
'а', 'и', 'но', 'да', 'нет'
|
||||
]
|
||||
|
||||
export const processPrepositions = (text: string): string => {
|
||||
const prepositionRegexBefore = new RegExp(`(^|\\s)(${dictionaryBefore.join('|')})(\\s|$)`, 'gmi')
|
||||
const prepositionRegexAfter = new RegExp(`(\\S+)\\s+(${dictionaryAfter.join('|')})(\\s|$)`, 'gmi')
|
||||
|
||||
return text
|
||||
.replace(prepositionRegexBefore, (_match, start, word, _end) => {
|
||||
return `${start}${word} `
|
||||
})
|
||||
.replace(prepositionRegexAfter, (_match, word, particle, end) => {
|
||||
return `${word} ${particle}${end}`
|
||||
})
|
||||
}
|
||||
|
||||
export function processJSXElement(element: JSX.Element): JSX.Element {
|
||||
if (typeof element === 'string') {
|
||||
return processPrepositions(element)
|
||||
}
|
||||
|
||||
if (Array.isArray(element)) {
|
||||
return element.map(processJSXElement)
|
||||
}
|
||||
|
||||
if (typeof element === 'object' && element !== null && 'props' in element) {
|
||||
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||
const newProps = mergeProps({}, element.props) as Record<string, any>
|
||||
if (newProps.children) {
|
||||
newProps.children = processJSXElement(newProps.children)
|
||||
}
|
||||
return mergeProps(element, { props: newProps })
|
||||
}
|
||||
|
||||
return element
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
import type { Author, Maybe, Reaction, Shout, Topic, TopicStat } from '~/graphql/schema/core.gen'
|
||||
|
||||
// biome-ignore lint/suspicious/noExplicitAny: sort by first char
|
||||
export const byFirstChar = (a: { name?: any; title?: any }, b: { name?: any; title?: any }) =>
|
||||
export const byFirstChar = (a: { name?: string; title?: string }, b: { name?: string; title?: string }) =>
|
||||
(a.name || a.title || '').localeCompare(b.name || b.title || '')
|
||||
|
||||
export const byCreated = (a: Shout | Reaction, b: Shout | Reaction) => {
|
||||
|
@ -29,6 +28,7 @@ export const byLength = (
|
|||
export type SomeStat = { [x: string]: Maybe<number> } | undefined | null
|
||||
|
||||
export const byStat = (metric: string) => {
|
||||
if (metric === 'name' || metric === 'title') return byFirstChar
|
||||
return (a: { stat?: SomeStat }, b: { stat?: SomeStat }) => {
|
||||
const aStat = a.stat?.[metric] ?? 0
|
||||
const bStat = b.stat?.[metric] ?? 0
|
||||
|
|
103
src/routes/(static)/debate.tsx
Normal file
103
src/routes/(static)/debate.tsx
Normal file
|
@ -0,0 +1,103 @@
|
|||
import { StaticPage } from '~/components/Views/StaticPage'
|
||||
|
||||
export default () => (
|
||||
<StaticPage
|
||||
title={'Principles'}
|
||||
desc={'Why you can earn a hole in your karma and how to receive rays of gratitude for your contribution to discussions in samizdat communities'}>
|
||||
|
||||
<p>
|
||||
Открытая редакция существует благодаря дружному сообществу авторов и читателей —
|
||||
вдумчивых и сознательных людей, приверженных ценностям гуманизма, демократии и прав
|
||||
человека. Мы очень ценим атмосферу осмысленного общения, которая здесь сложилась. Чтобы
|
||||
сохранить ее такой же уютной и творческой, мы составили правила общения
|
||||
в сообществе, руководствуясь которыми каждый мог бы соучаствовать в плодотворных
|
||||
дискуссиях, не задевая других. Ключевой принцип этих правил предельно прост —
|
||||
уважайте ближних, постарайтесь не нарушать законы Российской Федерации без крайней
|
||||
на то необходимости и помните, что в дискуссиях чутких и здравомыслящих
|
||||
людей рождается истина.
|
||||
</p>
|
||||
|
||||
<h3 id="ban">За что можно получить дырку в карме и выиграть бан в сообществе</h3>
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
Оскорбления, личные нападки, травля и угрозы. В любом виде. Конкретного человека или
|
||||
социальной группы — не суть. Агрессия, переход на личности
|
||||
и токсичность едва ли способствуют плодотворному общению.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
Шовинизм, расизм, сексизм, гомофобия, пропаганда ненависти, педофилии, суицида, распространение
|
||||
детской порнографии и другого человеконенавистнического контента.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
Спам, реклама, фейкньюз, ссылки на пропагандистские СМИ, вбросы дезинформации, специально
|
||||
уводящий от темы флуд, провокации, разжигание конфликтов, намеренный срыв дискуссий.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
Неаргументированная критика и комментарии вроде «отстой», «зачем
|
||||
я это увидел/а», «не читал, но осуждаю», «либераху
|
||||
порвало», «лол», «скатились», «первый нах» и тому
|
||||
подобные. Односложные реплики не подразумевают возможность обогащающего диалога,
|
||||
не продуктивны и никак не помогают авторам делать материалы лучше,
|
||||
а читателям — разобраться.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h3>За что можно получить лучи добра и благодарности в сообществе</h3>
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Вежливость и конструктивность.</strong> Мы выступаем за конструктивный
|
||||
диалог, аргументированные комментарии и доброжелательное отношение друг к другу.
|
||||
Задавайте содержательные вопросы, пишите развернутые комментарии, подкрепляйте
|
||||
их аргументами, чтобы диалог был полезен всем участникам, помогая глубже понять тему
|
||||
и разобраться в вопросе. И, пожалуйста, уважайте собеседника, даже если он вам
|
||||
лично не импонирует: только так получаются продуктивные дискуссии.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Обмен знаниями и историями.</strong> Осмысленные высказывания по теме поста,
|
||||
оригинальные рассуждения, рассказы о личном опыте и проектах, обмен профессиональной
|
||||
экспертизой, наблюдения и реальные истории из жизни — чем больше
|
||||
мы делимся друг с другом знаниями, тем интереснее и плодотворнее становится наше
|
||||
общение. Помните, что каждый вдумчивый ответ повышает качество дискуссий в сообществе
|
||||
и делает чтение самиздата ещё интереснее.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Чувство юмора и добродушие.</strong> Остроумие и дружелюбие не только
|
||||
направляют дискуссии в продуктивное русло, но и улучшают настроение.
|
||||
Не вредите негативом, которого в интернете и без нас хватает,
|
||||
и не травите на корню классные инициативы — всё великое начинается
|
||||
с малого. Мы за поддерживающую и вдохновляющую атмосферу в сообществе.
|
||||
Надеемся, вы тоже.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Благодарность и поддержка.</strong> Если публикация вам зашла, не стесняйтесь
|
||||
ставить лайки, делиться понравившимися материалами, благодарить авторов, читателей, художников
|
||||
и редакторов в комментариях. Цените и поддерживайте классные проекты, сильные
|
||||
тексты, новое искусство, осмысленные комментарии и вклад других
|
||||
в самиздат — сотрудничество делает нас сильнее и усиливает звучание идей
|
||||
и смыслов, которые помогают лучше понимать мир.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
</StaticPage>
|
||||
)
|
44
src/routes/(static)/dogma.tsx
Normal file
44
src/routes/(static)/dogma.tsx
Normal file
|
@ -0,0 +1,44 @@
|
|||
import { StaticPage } from '../../components/Views/StaticPage'
|
||||
|
||||
export default () => (
|
||||
<StaticPage title={'Dogma'} desc=''>
|
||||
<p>
|
||||
Дискурс — журнал с открытой горизонтальной редакцией. Содержание журнала определяется прямым
|
||||
голосованием его авторов. Мы нередко занимаем различные позиции по разным проблемам, но
|
||||
придерживаемся общих профессиональных принципов:
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
<b>На первое место ставим факты.</b> Наша задача — не судить, а наблюдать и непредвзято
|
||||
фиксировать происходящее. Все утверждения и выводы, которые мы делаем, подтверждаются фактами,
|
||||
цифрами, мнениями экспертов или ссылками на авторитетные источники.
|
||||
</li>
|
||||
<li>
|
||||
<b>Ответственно относимся к источникам.</b>
|
||||
Мы выбираем только надежные источники, проверяем информацию и рассказываем, как и откуда мы её
|
||||
получили, кроме случаев, когда это может нанести вред источникам. Тогда мы не раскроем их, даже в
|
||||
суде.
|
||||
</li>
|
||||
<li>
|
||||
<b>Выбираем компетентных и независимых экспертов</b>, понимая всю степень ответственности перед
|
||||
аудиторией.
|
||||
</li>
|
||||
<li>
|
||||
<b>
|
||||
Даем возможность высказаться всем заинтересованным сторонам, но не присоединяемся ни к чьему
|
||||
лагерю.
|
||||
</b>
|
||||
Ко всем событиям, компаниям и людям мы относимся с одинаковым скептицизмом.
|
||||
</li>
|
||||
<li>
|
||||
<b>Всегда исправляем ошибки, если мы их допустили.</b>
|
||||
Никто не безгрешен, иногда и мы ошибаемся. Заметили ошибку — отправьте{' '}
|
||||
<a href="/guide#editing">ремарку</a> автору или напишите нам на{' '}
|
||||
<a href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
welcome@discours.io
|
||||
</a>
|
||||
.
|
||||
</li>
|
||||
</ol>
|
||||
</StaticPage>
|
||||
)
|
216
src/routes/(static)/guide.tsx
Normal file
216
src/routes/(static)/guide.tsx
Normal file
|
@ -0,0 +1,216 @@
|
|||
import { StaticPage } from '~/components/Views/StaticPage'
|
||||
|
||||
export default () => (
|
||||
<StaticPage
|
||||
title={'How Discours works'}
|
||||
desc={'A guide to horizontal editorial: how an open journal works'}
|
||||
>
|
||||
<p>
|
||||
Дискурс — независимый журнал о культуре, науке, искусстве и обществе с
|
||||
<a href="/manifest">открытой редакцией</a>. У нас нет главного редактора, инвестора и вообще
|
||||
никого, кто бы принимал единоличные решения. Вместо традиционных иерархий Дискурс основан
|
||||
на принципах прямой демократии: в нашем горизонтальном сообществе все редакционные вопросы
|
||||
решаются открытым голосованием авторов журнала. Вот как это работает.
|
||||
</p>
|
||||
<h3 id="how-it-works">Как устроен сайт Дискурса</h3>
|
||||
<p>Дискурс состоит из четырех основных разделов:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
<a href="/topic">Темы</a>
|
||||
— у нас публикуются исследования, обзоры, эссе, интервью, репортажи, аналитика
|
||||
и другие материалы о культуре, науке, искусстве и обществе.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="/topic/art">Искусство</a>
|
||||
— здесь, например, представлены художественные произведения: литература, живопись,
|
||||
музыка, фотографии, видео. Этот раздел помогает прозвучать новому искусству, которое создают
|
||||
российские художники, писатели, режиссёры и музыканты.
|
||||
</p>
|
||||
</li>
|
||||
{/*
|
||||
<li>
|
||||
<p>
|
||||
<a href="/topic/events">События</a> — в этом разделе
|
||||
публикуются самые важные, по мнению редакции, культурные
|
||||
события России — выставки, лекции, концерты, кинопоказы, фестивали,
|
||||
художественные и политические акции. Напишите нам
|
||||
на <a href="mailto:welcome@discours.io" target="_blank">почту</a>, если вы
|
||||
хотите разместить объявление. Мы делаем это
|
||||
на безвозмездной основе.
|
||||
</p>
|
||||
</li >
|
||||
<li>
|
||||
<p>
|
||||
<a href="/edit/new" class="ng-scope" target="_blank">Редакция</a> —
|
||||
это внутренний раздел, где появляются новые материалы, которые присылают
|
||||
в редакцию. Здесь авторы обсуждают, редактируют и оценивают
|
||||
публикации, определяя таким образом содержание журнала.
|
||||
</p>
|
||||
</li>
|
||||
*/}
|
||||
</ul>
|
||||
<p>
|
||||
Материалы в Дискурсе объединяются по <b>темам</b>
|
||||
— ключевым словам, которые располагаются в конце материалов и связывают материалы
|
||||
по жанрам (например, <a href="/topic/interview">интервью</a>,{' '}
|
||||
<a href="/topic/reportage">репортажи</a>, <a href="/topic/essay">эссе</a>,{' '}
|
||||
<a href="/topic/likbez">ликбезы</a>
|
||||
), по тематике (<a href="/topic/cinema">кино</a>, <a href="/topic/philosophy">философия</a>,{' '}
|
||||
<a href="/topic/history">история</a>, <a href="/topic/absurdism">абсурдизм</a>,{' '}
|
||||
<a href="/topic/sex">секс</a> и т.д.) или в серии (как «
|
||||
<a href="/topic/zakony-mira">Законы мира</a>» или «
|
||||
<a href="/topic/za-liniey-mannergeyma">За линией Маннергейма</a>
|
||||
»). Темы объединяют сотни публикаций, помогают ориентироваться в журнале и следить
|
||||
за интересными материалами.
|
||||
</p>
|
||||
|
||||
<section>
|
||||
<h3 id="become-author">Как стать автором журнала</h3>
|
||||
<p>
|
||||
Дискурс объединяет журналистов, активистов, музыкантов, художников, фотографов, режиссеров,
|
||||
философов, ученых и других замечательных людей. Каждый может <a href="/edit/new">прислать</a>{' '}
|
||||
свой материал в журнал. Формат и тематика не имеют значения, единственное, что важно
|
||||
— <a href="/how-to-write-a-good-article">хороший</a> ли материал. Если сообщество
|
||||
поддержит вашу публикацию, она выйдет в журнале и станет доступна тысячам наших читателей.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<h3 id="voting">Как проходит голосование</h3>
|
||||
<p>
|
||||
Все присылаемые в Дискурс материалы попадают в
|
||||
<strong>«Редакцию»</strong>. Это внутренний раздел сайта, где участники сообщества решают,
|
||||
что будет опубликовано в Дискурсе. Как только работа получает одобрение как минимум пятерых
|
||||
авторов открытой редакции, она немедленно публикуется в журнале. Если же материал набирает
|
||||
более 20% голосов «против», он не выходит и может быть отправлен
|
||||
на доработку. Жестких сроков рассмотрения материалов у нас нет, иногда это занимает час,
|
||||
иногда месяц, обычно — несколько дней.
|
||||
</p>
|
||||
<section>
|
||||
<p>
|
||||
Как только сообщество поддержит публикацию, вы получите приглашение в интернет-редакцию
|
||||
и сможете голосовать за новые материалы.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<h3 id="editing">Как мы делаем тексты друг друга лучше</h3>
|
||||
<p>
|
||||
Дискурс — журнал с совместным редактированием. Совершенствовать тексты нам помогает{' '}
|
||||
<b>система ремарок</b>. Вы можете выделить часть текста в любой статье и оставить
|
||||
к ней замечание, вопрос или предложение — автор текста получит совет на почту
|
||||
и сможет его учесть. Так мы устраняем опечатки, неточности и советуем друг другу, как
|
||||
сделать тексты качественнее и интереснее.
|
||||
</p>
|
||||
<p>
|
||||
Среди участников сообщества есть профессиональные редакторы, которые помогают авторам делать тексты
|
||||
лучше. Если вашему материалу потребуется доработка, они помогут отредактировать текст, подобрать
|
||||
иллюстрации, придумать заголовок и красиво сверстать публикацию. Если вы хотите обсудить
|
||||
текст, прежде чем загрузить материал в интернет-редакцию — разместите его
|
||||
в google-документе, откройте доступ к редактированию по ссылке и напишите нам
|
||||
на
|
||||
<a href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
welcome@discours.io
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
<p>
|
||||
Если у вас возникают трудности с тем, чтобы подобрать к своему материалу иллюстрации,
|
||||
тоже пишите на
|
||||
<a href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
почту
|
||||
</a>
|
||||
— наши коллеги-художники могут вам помочь{' '}
|
||||
<a href="/edit/new?collab" target="_blank" rel="noreferrer">
|
||||
в режиме совместного редактирования
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
|
||||
<h3 id="perks">Что сообщество дает авторам</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Право определять, каким будет журнал</strong>. Дискурс — это общественная
|
||||
институция, созданная людьми и ради людей, функционирующая на условиях прямой
|
||||
демократии. Авторы публикуют статьи и художественные проекты, участвуют в обсуждениях,
|
||||
голосуют за работы коллег и таким образом вносят свой вклад в развитие проекта,
|
||||
определяя содержание и направление журнала.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Возможность обратиться к широкой аудитории</strong>. Дискурс читают десятки тысяч
|
||||
людей, и с каждым днем их становится больше.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Поддержка редакции</strong>. Дискурс предоставляет авторам аккредитацию
|
||||
на мероприятия, базу контактов, юридическую поддержку, ознакомление с книжными, кино-
|
||||
и музыкальными новинками до их выхода в свет. Если что-то из этого вам
|
||||
понадобится, пишите на почту{' '}
|
||||
<a href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
welcome@discours.io
|
||||
</a>
|
||||
— поможем.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Пресс-карты для корреспондентов</strong>. Три опубликованные статьи позволяют авторам
|
||||
Дискурса получить официальные удостоверения журналистов (пресс-карты) на следующий год.
|
||||
Пресс-карты удостоверяют, что вы журналист и можете пользоваться всеми теми правами,
|
||||
которые гарантирует Закон о СМИ. Кроме того, многие культурные институции (музеи, галереи
|
||||
и др.) предоставляют журналистам право свободного входа.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Помощь сотен специалистов в разных областях</strong>. В основе Дискурса лежит
|
||||
идея совместного редактирования. Участники редакционного сообщества — несколько сотен
|
||||
журналистов, исследователей, художников, литераторов из разных стран — изучают
|
||||
материалы друг друга до публикации и помогают сделать их качественнее
|
||||
и интереснее. Так, в редакции нередко складываются творческие союзы: например, авторов
|
||||
текстов и художников, создающих для них иллюстрации.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Пространство общения полное выдающихся людей</strong>. Дискурс — большое живое
|
||||
сообщество интеллектуалов, разбросанных по всему земному шару. Вступив в редакцию,
|
||||
вы сможете познакомиться со множеством интересных людей, которые определяют повестку
|
||||
завтрашнего дня, вдохновляют окружающих, создают новое и изучают старое, ищут знания
|
||||
и готовы ими делиться, чтобы менять мир в соответствии со своими идеалами.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="contacts">Как быть в курсе</h3>
|
||||
<p>
|
||||
За свежими публикациями Дискурса можно следить не только на сайте,
|
||||
но и на страницах в
|
||||
<a href="https://facebook.com/discoursio/" target="_blank" rel="noreferrer">
|
||||
Фейсбуке
|
||||
</a>
|
||||
,{' '}
|
||||
<a href="https://vk.com/discoursio" target="_blank" rel="noreferrer">
|
||||
ВКонтакте
|
||||
</a>{' '}
|
||||
и
|
||||
<a href="https://t.me/discoursio" target="_blank" rel="noreferrer">
|
||||
Телеграме
|
||||
</a>
|
||||
. А ещё раз в месяц мы отправляем <a href="#subscribe">почтовую рассылку</a>{' '}
|
||||
с дайджестом лучших материалов.
|
||||
</p>
|
||||
<p>
|
||||
Если вы хотите сотрудничать, что-то обсудить или предложить — пожалуйста, пишите на
|
||||
<a href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
welcome@discours.io
|
||||
</a>
|
||||
. Мы обязательно ответим.
|
||||
</p>
|
||||
</StaticPage>
|
||||
)
|
|
@ -1,89 +1,66 @@
|
|||
import { Meta } from '@solidjs/meta'
|
||||
import { Feedback } from '~/components/Discours/Feedback'
|
||||
import { Modal } from '~/components/Nav/Modal'
|
||||
import Opener from '~/components/Nav/Modal/Opener'
|
||||
import { Opener } from '~/components/Nav/Modal/Opener'
|
||||
import { StaticPage } from '~/components/Views/StaticPage'
|
||||
import { Newsletter } from '~/components/_shared/Newsletter'
|
||||
import { useLocalize } from '~/context/localize'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
|
||||
export default () => {
|
||||
const { t } = useLocalize()
|
||||
const ogImage = getImageUrl('production/image/logo_image.png')
|
||||
const ogTitle = t('Discours Manifest')
|
||||
const description = t(
|
||||
'Manifest of samizdat: principles and mission of an open magazine with a horizontal editorial board'
|
||||
)
|
||||
|
||||
return (
|
||||
<StaticPage title={ogTitle}>
|
||||
<>
|
||||
export default () => (
|
||||
<StaticPage
|
||||
title={'Discours Manifest'}
|
||||
desc={
|
||||
'Manifest of samizdat: principles and mission of \
|
||||
an open magazine with a horizontal editorial board'
|
||||
}
|
||||
>
|
||||
<Modal variant="wide" name="feedback">
|
||||
<Feedback />
|
||||
</Modal>
|
||||
<Modal variant="wide" name="subscribe">
|
||||
<Newsletter />
|
||||
</Modal>
|
||||
<Meta name="descprition" content={description} />
|
||||
<Meta name="keywords" content={t('keywords')} />
|
||||
<Meta name="og:type" content="article" />
|
||||
<Meta name="og:title" content={ogTitle} />
|
||||
<Meta name="og:image" content={ogImage} />
|
||||
<Meta name="twitter:image" content={ogImage} />
|
||||
<Meta name="og:description" content={description} />
|
||||
<Meta name="twitter:card" content="summary_large_image" />
|
||||
<Meta name="twitter:title" content={ogTitle} />
|
||||
<Meta name="twitter:description" content={description} />
|
||||
|
||||
<h1 id="manifest">
|
||||
<span class="wrapped">Манифест</span>
|
||||
</h1>
|
||||
|
||||
<p>
|
||||
Дискурс — независимый художественно-аналитический журнал с горизонтальной
|
||||
редакцией, основанный на принципах свободы слова, прямой демократии и совместного
|
||||
редактирования. Дискурс создаётся открытым медиасообществом ученых, журналистов, музыкантов,
|
||||
писателей, предпринимателей, философов, инженеров, художников и специалистов со всего
|
||||
мира, объединившихся, чтобы вместе делать общий журнал и объяснять с разных точек зрения
|
||||
мозаичную картину современности.
|
||||
Дискурс — независимый художественно-аналитический журнал с горизонтальной редакцией,
|
||||
основанный на принципах свободы слова, прямой демократии и совместного редактирования.
|
||||
Дискурс создаётся открытым медиасообществом ученых, журналистов, музыкантов, писателей,
|
||||
предпринимателей, философов, инженеров, художников и специалистов со всего мира,
|
||||
объединившихся, чтобы вместе делать общий журнал и объяснять с разных точек зрения мозаичную
|
||||
картину современности.
|
||||
</p>
|
||||
<p>
|
||||
Мы пишем о культуре, науке и обществе, рассказываем о новых идеях
|
||||
и современном искусстве, публикуем статьи, исследования, репортажи, интервью людей, чью
|
||||
прямую речь стоит услышать, и работы художников из разных стран —
|
||||
от фильмов и музыки до живописи и фотографии. Помогая друг другу делать
|
||||
публикации качественнее и общим голосованием выбирая лучшие материалы для журнала,
|
||||
мы создаём новую горизонтальную журналистику, чтобы честно рассказывать о важном
|
||||
и интересном.
|
||||
Мы пишем о культуре, науке и обществе, рассказываем о новых идеях
|
||||
и современном искусстве, публикуем статьи, исследования, репортажи, интервью людей, чью прямую
|
||||
речь стоит услышать, и работы художников из разных стран — от фильмов
|
||||
и музыки до живописи и фотографии. Помогая друг другу делать публикации качественнее
|
||||
и общим голосованием выбирая лучшие материалы для журнала, мы создаём новую горизонтальную
|
||||
журналистику, чтобы честно рассказывать о важном и интересном.
|
||||
</p>
|
||||
<p>
|
||||
Редакция Дискурса открыта для всех: у нас нет цензуры, запретных тем и идеологических
|
||||
рамок. Каждый может <a href="/edit/new">прислать материал</a> в журнал и
|
||||
<a href="/guide">присоединиться к редакции</a>. Предоставляя трибуну для независимой
|
||||
журналистики и художественных проектов, мы помогаем людям рассказывать свои истории так,
|
||||
чтобы они были услышаны. Мы убеждены: чем больше голосов будет звучать на Дискурсе, тем
|
||||
громче в полифонии мнений будет слышна истина.
|
||||
Редакция Дискурса открыта для всех: у нас нет цензуры, запретных тем и идеологических рамок.
|
||||
Каждый может <a href="/edit/new">прислать материал</a> в журнал и <a href="/guide">присоединиться к редакции</a>. Предоставляя трибуну для независимой журналистики
|
||||
и художественных проектов, мы помогаем людям рассказывать свои истории так, чтобы они были
|
||||
услышаны. Мы убеждены: чем больше голосов будет звучать на Дискурсе, тем громче
|
||||
в полифонии мнений будет слышна истина.
|
||||
</p>
|
||||
|
||||
<h2 class="h2" id="participation">
|
||||
<span class="wrapped">Как участвовать в самиздате</span>
|
||||
<span class="wrapped">Как участвовать в самиздате</span>
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
Дискурс создается <a href="/guide">открытым сообществом</a> энтузиастов новой независимой
|
||||
журналистики. Участвовать в открытой редакции и помогать журналу можно следующими
|
||||
способами:
|
||||
журналистики. Участвовать в открытой редакции и помогать журналу можно следующими способами:
|
||||
</p>
|
||||
<details open>
|
||||
<summary>
|
||||
<h3 id="contribute">Предлагать материалы</h3>
|
||||
</summary>
|
||||
<p>
|
||||
<a href="/edit/new">Создавайте</a> свои статьи и художественные работы — лучшие
|
||||
из них будут опубликованы в журнале. Дискурс — некоммерческое издание, авторы
|
||||
публикуются в журнале на общественных началах, получая при этом{' '}
|
||||
<a href="/edit/new?collab=true">поддержку</a> редакции, право голоса, множество других
|
||||
возможностей и читателей по всему миру.
|
||||
<a href="/edit/new">Создавайте</a> свои статьи и художественные работы — лучшие из
|
||||
них будут опубликованы в журнале. Дискурс — некоммерческое издание, авторы
|
||||
публикуются в журнале на общественных началах, получая при этом{' '}
|
||||
<a href="/edit/new?collab=true">поддержку</a> редакции, право голоса, множество других возможностей
|
||||
и читателей по всему миру.
|
||||
</p>
|
||||
</details>
|
||||
|
||||
|
@ -92,33 +69,33 @@ export default () => {
|
|||
<h3 id="donate">Поддерживать проект</h3>
|
||||
</summary>
|
||||
<p>
|
||||
Дискурс существует на пожертвования читателей. Если вам нравится журнал, пожалуйста,{' '}
|
||||
<a href="/support">поддержите</a> нашу работу. Ваши пожертвования пойдут на выпуск новых
|
||||
материалов, оплату серверов, труда программистов, дизайнеров и редакторов.
|
||||
Дискурс существует на пожертвования читателей. Если вам нравится журнал, пожалуйста,{' '}
|
||||
<a href="/support">поддержите</a> нашу работу. Ваши пожертвования пойдут на выпуск новых
|
||||
материалов, оплату серверов, труда программистов, дизайнеров и редакторов.
|
||||
</p>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
<h3 id="cooperation">Сотрудничать с журналом</h3>
|
||||
<h3 id="cooperation">Сотрудничать с журналом</h3>
|
||||
</summary>
|
||||
<p>
|
||||
Мы всегда открыты для сотрудничества и рады единомышленникам. Если вы хотите помогать
|
||||
журналу с редактурой, корректурой, иллюстрациями, переводами, версткой, подкастами,
|
||||
мероприятиями, фандрайзингом или как-то ещё — скорее пишите нам на
|
||||
Мы всегда открыты для сотрудничества и рады единомышленникам. Если вы хотите помогать журналу
|
||||
с редактурой, корректурой, иллюстрациями, переводами, версткой, подкастами, мероприятиями,
|
||||
фандрайзингом или как-то ещё — скорее пишите нам на
|
||||
<a href="mailto:welcome@discours.io">welcome@discours.io</a>.
|
||||
</p>
|
||||
<p>
|
||||
Если вы представляете некоммерческую организацию и хотите сделать с нами совместный
|
||||
проект, получить информационную поддержку или предложить другую форму
|
||||
сотрудничества — <a href="mailto:welcome@discours.io">пишите</a>.
|
||||
Если вы представляете некоммерческую организацию и хотите сделать с нами совместный
|
||||
проект, получить информационную поддержку или предложить другую форму сотрудничества —{' '}
|
||||
<a href="mailto:welcome@discours.io">пишите</a>.
|
||||
</p>
|
||||
<p>
|
||||
Если вы разработчик и хотите помогать с развитием сайта Дискурса,{' '}
|
||||
<a href="mailto:services@discours.io">присоединяйтесь к IT-команде самиздата</a>. Открытый
|
||||
код платформы для независимой журналистики, а также всех наших спецпроектов
|
||||
и медиаинструментов находится{' '}
|
||||
<a href="https://github.com/Discours">в свободном доступе на GitHub</a>.
|
||||
Если вы разработчик и хотите помогать с развитием сайта Дискурса,{' '}
|
||||
<a href="mailto:services@discours.io">присоединяйтесь к IT-команде самиздата</a>. Открытый код
|
||||
платформы для независимой журналистики, а также всех наших спецпроектов
|
||||
и медиаинструментов находится{' '}
|
||||
<a href="https://github.com/Discours">в свободном доступе на GitHub</a>.
|
||||
</p>
|
||||
</details>
|
||||
|
||||
|
@ -127,35 +104,31 @@ export default () => {
|
|||
<h3 id="follow">Как еще можно помочь</h3>
|
||||
</summary>
|
||||
<p>
|
||||
Советуйте Дискурс друзьям и знакомым. Обсуждайте и распространяйте наши
|
||||
публикации — все материалы открытой редакции можно читать и перепечатывать
|
||||
бесплатно. Подпишитесь на самиздат <a href="https://vk.com/discoursio">ВКонтакте</a>,
|
||||
в
|
||||
<a href="https://facebook.com/discoursio">Фейсбуке</a> и в
|
||||
<a href="https://t.me/discoursio">Телеграме</a>, а также на
|
||||
<Opener name="subscribe">рассылку лучших материалов</Opener>, чтобы не пропустить ничего
|
||||
Советуйте Дискурс друзьям и знакомым. Обсуждайте и распространяйте наши
|
||||
публикации — все материалы открытой редакции можно читать и перепечатывать
|
||||
бесплатно. Подпишитесь на самиздат <a href="https://vk.com/discoursio">ВКонтакте</a>, в
|
||||
<a href="https://facebook.com/discoursio">Фейсбуке</a> и в
|
||||
<a href="https://t.me/discoursio">Телеграме</a>, а также на
|
||||
<Opener name="subscribe">рассылку лучших материалов</Opener>, чтобы не пропустить ничего
|
||||
интересного.
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://forms.gle/9UnHBAz9Q3tjH5dAA">Рассказывайте о впечатлениях</a>{' '}
|
||||
от материалов открытой редакции, <Opener name="feedback">делитесь идеями</Opener>,
|
||||
интересными темами, о которых хотели бы узнать больше, и историями, которые нужно
|
||||
рассказать.
|
||||
<a href="https://forms.gle/9UnHBAz9Q3tjH5dAA">Рассказывайте о впечатлениях</a>{' '}
|
||||
от материалов открытой редакции, <Opener name="feedback">делитесь идеями</Opener>, интересными
|
||||
темами, о которых хотели бы узнать больше, и историями, которые нужно рассказать.
|
||||
</p>
|
||||
</details>
|
||||
|
||||
<h2 class="h2" id="connection">
|
||||
<span class="wrapped">Будем на связи</span>
|
||||
<span class="wrapped">Будем на связи</span>
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
Если вы хотите предложить материал, сотрудничать, рассказать о проблеме, которую нужно
|
||||
осветить, сообщить об ошибке или баге, что-то обсудить, уточнить или посоветовать,
|
||||
пожалуйста, <Opener name="feedback">напишите нам здесь</Opener> или на почту{' '}
|
||||
Если вы хотите предложить материал, сотрудничать, рассказать о проблеме, которую нужно осветить,
|
||||
сообщить об ошибке или баге, что-то обсудить, уточнить или посоветовать, пожалуйста,{' '}
|
||||
<Opener name="feedback">напишите нам здесь</Opener> или на почту{' '}
|
||||
<a href="mailto:welcome@discours.io">welcome@discours.io</a>. Мы обязательно ответим
|
||||
и постараемся реализовать все хорошие задумки.
|
||||
и постараемся реализовать все хорошие задумки.
|
||||
</p>
|
||||
</>
|
||||
</StaticPage>
|
||||
)
|
||||
}
|
||||
)
|
||||
|
|
|
@ -1,29 +1,7 @@
|
|||
import { Meta } from '@solidjs/meta'
|
||||
import { StaticPage } from '~/components/Views/StaticPage'
|
||||
import { useLocalize } from '~/context/localize'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
|
||||
export default () => {
|
||||
const { t } = useLocalize()
|
||||
|
||||
const ogTitle = t('Partners')
|
||||
const ogImage = getImageUrl('production/image/logo_image.png')
|
||||
const description = t('Discours Partners')
|
||||
|
||||
return (
|
||||
<StaticPage title={ogTitle}>
|
||||
<Meta name="descprition" content={description} />
|
||||
<Meta name="keywords" content={t('keywords')} />
|
||||
<Meta name="og:type" content="article" />
|
||||
<Meta name="og:title" content={ogTitle} />
|
||||
<Meta name="og:image" content={ogImage} />
|
||||
<Meta name="twitter:image" content={ogImage} />
|
||||
<Meta name="og:description" content={description} />
|
||||
<Meta name="twitter:card" content="summary_large_image" />
|
||||
<Meta name="twitter:title" content={ogTitle} />
|
||||
<Meta name="twitter:description" content={description} />
|
||||
|
||||
<h1>{t('Partners')}</h1>
|
||||
export default () => (
|
||||
<StaticPage title={'Partners'}>
|
||||
{''}
|
||||
</StaticPage>
|
||||
)
|
||||
}
|
||||
|
|
160
src/routes/(static)/principles.tsx
Normal file
160
src/routes/(static)/principles.tsx
Normal file
|
@ -0,0 +1,160 @@
|
|||
import { StaticPage } from '~/components/Views/StaticPage'
|
||||
|
||||
export default () => (
|
||||
<StaticPage
|
||||
title={'Principles'}
|
||||
desc={'Community values and rules of engagement for the open editorial team'}
|
||||
>
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Горизонтальность</strong>. Мы все разные, и это классно. Вертикалей в мире
|
||||
достаточно, мы — горизонтальное сообщество и ценим наши различия, потому что
|
||||
знаем — в них наша сила. Благодаря разнообразию сотен голосов, усиливающих друг
|
||||
друга, в сообществе складывается неповторимая синергия, которая помогает вместе достигать
|
||||
большего.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Многоголосие</strong>. Мы ценим свободу слова и аргументированные мнения.
|
||||
Предоставляя трибуну каждому, кому есть что сказать, самиздат отражает полифонию позиций, знаний
|
||||
и опыта, которые открывают более полную картину реальности.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Взаимопомощь</strong>. Мы помогаем друг другу, потому что хотим, чтобы в мире
|
||||
было еще больше хорошего. Обсуждая что-то, мы всегда интересуемся, чем можем помочь.
|
||||
В самиздате можно найти специалистов практически в любых сферах и получить
|
||||
поддержку от сотен людей. Благодаря коллективной экспертизе глобального сообщества
|
||||
в самиздате выходят крутейшие публикации, которыми можно вечно гордиться.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Взаимоуважение</strong>. Мы ценим, искренне уважаем друг друга и вместо
|
||||
борщевиков враждебности культивируем цветы добра, мира, знания и юмора. Нам некогда
|
||||
доказывать друг другу, кто круче. Гораздо приятнее сотрудничать, помогать и создавать что-то
|
||||
важное, интересное и полезное.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Созидание</strong>. Мы создаем, потому что любим создавать. Мы открыто делимся
|
||||
опытом, дарим идеи, обмениваемся мнениями и благодарим за критику, используя ее для
|
||||
совершенствования мастерства и саморазвития. Мы знаем, что мир не идеальное место,
|
||||
и делаем всё возможное, чтобы он стал лучше.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 class="h2" id="participation">
|
||||
<span class="wrapped">Как у нас принято себя вести</span>
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
Открытая редакция объединяет сотни потрясающих людей со всего мира, которые делают крутейшие
|
||||
вещи. Это пространство, где доверяют, вдохновляют, исследуют и создают новое вместе. Поскольку
|
||||
все в сообществе очень разные, как-то мы собрались и решили зафиксировать базовые
|
||||
ценности открытой редакции, а заодно придумали универсальные правила взаимодействия, чтобы
|
||||
общение было не только плодотворным, но и приятным для всех участников сообщества.
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Действуем, помогаем и делимся</strong>. В редакции мы создаем свои проекты
|
||||
и помогаем другим создавать свои — советами, делом, участием, вовлеченностью.
|
||||
Мы открыто делимся опытом, мнениями и идеями, потому что ценим силу сотрудничества
|
||||
и знаем, что идеи реализуются скорее, лучше и веселее, если над ними трудиться сообща.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Общаемся дружелюбно</strong>. Помните, по ту сторону монитора находятся реальные
|
||||
люди. Неуважение ранит других так же, как ранило бы вас самих. Поэтому не стоит
|
||||
кричать (даже капслоком), заполнять эфир желчью и бросаться грубостями — так
|
||||
вы рискуете не только растерять доверие окружающих, но и остаться непонятым.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Критикуем и реагируем конструктивно</strong>. Самиздат про то, чтобы разбираться
|
||||
в сложных вещах всем сообществом, поэтому мы тактично и без агрессии делимся
|
||||
мнениями, стараясь убедительно аргументировать позиции. И с благодарностью принимаем
|
||||
критику, используя ее для улучшения наших проектов. Мы верим, что каждый участник
|
||||
сообщества имеет добрые намерения, и придерживаемся принципов доброжелательной критики,
|
||||
стараемся делиться советами — лучшим средством для самосовершенствования. Обоснованная
|
||||
критика помогает и адресату, и всем участникам сообщества досконально изучить тему
|
||||
и глубже разобраться в проблеме.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Решаем трудности не агрессией, а диалогом</strong>. Обесценивать мнения
|
||||
и оскорблять других людей только потому, что вы с ними
|
||||
не согласны, — не лучший способ донести свою точку зрения. Конечно, важно
|
||||
высказаться, если вас что-то не устраивает и откровенно бесит. Но прежде чем
|
||||
сжигать оппонента гневом, попробуйте понять, почему этот «нехороший человек» так
|
||||
поступает. Возможно, аргументы собеседника окажутся убедительными или вам удастся изменить его
|
||||
мнение. В любом случае конфликты решаются в диалогах и проходят, а налаженное
|
||||
взаимопонимание останется надолго.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Не переходим на личности — это признак токсичности</strong>. Всегда
|
||||
мудрее обсуждать точку зрения человека, а не его самого, даже если он вам
|
||||
не импонирует. Предвзятое отношение ограничивает кругозор, добавляет преждевременные морщины
|
||||
и не помогает окружающим стать лучше. Вежливость и взаимоуважение —
|
||||
краеугольная основа вдумчивых и осмысленных дискуссий.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Благодарим за помощь</strong>. Благодарите коллег даже за самые,
|
||||
казалось бы, простые вещи. «Спасибо» не зря называют волшебным
|
||||
словом — на искренней благодарности держится любое подлинное сотрудничество.
|
||||
Поддержка воодушевляет на новые подвиги и напоминает, что мир делают прекрасным
|
||||
не машины, а живые люди.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Даем еще один шанс</strong>. Все совершают ошибки, и за один проступок
|
||||
не стоит вычеркивать людей из жизни. Ошибки нужны, чтобы на них учиться
|
||||
и делать выводы. Однако если многократно и систематически нарушать правила сообщества,
|
||||
наверняка можно заслужить минусы в карму от других участников и потерять доступ
|
||||
к сообществу.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Вместе создаем идеальную среду общения</strong>. Открытая редакция — это
|
||||
утопическое пространство обогащающей и осмысленной коммуникации. Атмосфера горизонтального
|
||||
сообщества складывается из действий каждого, поэтому мы действуем так, чтобы
|
||||
способствовать сотворчеству, коллективному познанию и развитию самиздата и нашей
|
||||
альтернативной интеллектуальной медиасреды.
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<strong>Помним, что всё в сообществе зависит от нас</strong>. Если нам чего-то
|
||||
не хватает, мы начинаем действовать — рассказываем об идее, находим
|
||||
единомышленников, готовим и запускаем проект. Так в сообществе становится на одну
|
||||
крутую активность больше. Так появилось наше сообщество. Так появился самиздат и все проекты
|
||||
открытой редакции. Чтобы в сообществе случилось что-то прекрасное, достаточно просто положить
|
||||
этому начало.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
</StaticPage>
|
||||
)
|
113
src/routes/(static)/support.tsx
Normal file
113
src/routes/(static)/support.tsx
Normal file
|
@ -0,0 +1,113 @@
|
|||
import { Donate } from '~/components/Discours/Donate'
|
||||
import { StaticPage } from '~/components/Views/StaticPage'
|
||||
|
||||
export default () => (
|
||||
<StaticPage
|
||||
title={'Support Discours'}
|
||||
desc={
|
||||
'Contribute to free samizdat. Support Discours \
|
||||
- an independent non-profit publication that works only for you. \
|
||||
Become a pillar of the open newsroom'
|
||||
}
|
||||
>
|
||||
<p>
|
||||
Дискурс — уникальное независимое издание с горизонтальной редакцией, существующее
|
||||
в интересах своих читателей. Ваша поддержка действительно много значит —
|
||||
не только для редакции Дискурса, но и для сохранения свободной мысли
|
||||
и некоммерческого искусства в нашем обществе.
|
||||
</p>
|
||||
<p>
|
||||
Дискурс существует на добровольных началах. Никакой медиахолдинг, фонд или государственная
|
||||
структура не финансирует нас — благодаря этому мы можем писать о том, что
|
||||
важно, а не о том, что выгодно. Сообщество наших волонтеров ежедневно трудится, чтобы
|
||||
рассказывать вам интересные, не освещенные другими изданиями истории —
|
||||
но мы не сможем делать это без вашей помощи. Пожертвования читателей составляют основу
|
||||
нашего бюджета и позволяют нам существовать.
|
||||
</p>
|
||||
<p>
|
||||
Если вам нравится то, что мы делаем и вы хотите, чтобы Дискурс продолжался,
|
||||
пожалуйста, поддержите проект.
|
||||
</p>
|
||||
<div class="row">
|
||||
<div class="col-sm-22 col-md-24">
|
||||
<Donate />
|
||||
</div>
|
||||
</div>
|
||||
<h3 id="financial-report">На что пойдут деньги?</h3>
|
||||
<p>
|
||||
Ваши пожертвования пойдут на оплату серверов, содержание офиса, зарплату редакции и налоги,
|
||||
оплату юридического сопровождения и труда бухгалтера, совершенствование сайта, аренду помещения
|
||||
для открытой редакции, на печать альманаха Дискурс с лучшими текстами авторов
|
||||
за полгода, а также на другие редакционные и технические расходы.
|
||||
</p>
|
||||
<h3>Ваша помощь позволит нам</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>Оставаться бесплатным изданием.</h4>
|
||||
<p>
|
||||
Мы делаем открытый журнал для всех желающих, а также собираем искусство лучших авторов
|
||||
по всему миру. Ваша поддержка позволяет нам становиться лучше.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Создавать еще больше контента.</h4>
|
||||
<p>
|
||||
Каждый день к нам присоединяются новые люди, и чем больше нас становится, тем больше
|
||||
мы творим и строже оцениваем результаты творчества друг друга. В результате
|
||||
повышается и количество, и качество контента. Каждый день мы трудимся, чтобы открывать
|
||||
нашим читателям новые грани окружающего мира.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Развивать форматы и расширять деятельность Дискурса.</h4>
|
||||
<p>
|
||||
Мы создаем различные спецпроекты и регулярно проводим необычные мероприятия.
|
||||
Мы хотим приносить пользу человечеству всеми возможными способами.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Модернизировать сайт.</h4>
|
||||
<p>
|
||||
Мы совершенствуем платформу и стараемся сделать проект максимально удобным для вас.
|
||||
Мы работаем над мобильной версией, новым дизайном, фукционалом, системой регистрации,
|
||||
навигации и рекомендаций, которые сделают наше общение еще увлекательней.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Выпускать альманах.</h4>
|
||||
<p>
|
||||
Выпускать раз в полугодие печатный альманах Дискурс с 33 лучшими текстами сайта.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Захватить весь мир</h4>
|
||||
<p>и принести «Дискурс» в каждый дом.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="trustee">Войдите в попечительский совет Дискурса</h3>
|
||||
<p>
|
||||
Вы хотите сделать крупное пожертвование? Станьте попечителем Дискурса —{' '}
|
||||
<a class="black-link" href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
напишите нам
|
||||
</a>
|
||||
, мы будем рады единомышленникам.
|
||||
</p>
|
||||
<h3 id="other">Как ещё можно поддержать Дискурс?</h3>
|
||||
<p>
|
||||
Есть много других способов поддержать Дискурс и труд наших авторов. Например, вы можете
|
||||
периодически рассказывать о проекте своим друзьям в соцсетях, делиться хорошими материалами
|
||||
или — что еще лучше — публиковать свои статьи в «Дискурсе».
|
||||
Но главное, что вы можете сделать для Дискурса, — читать нас. Мы вкладываем
|
||||
в журнал душу, и внимание каждого читателя убеждает нас в правильности выбранного пути.
|
||||
Не переключайтесь.
|
||||
</p>
|
||||
<p>
|
||||
Если вы хотите помочь проекту, но у вас возникли вопросы, напишите нам письмо
|
||||
по адресу{' '}
|
||||
<a class="black-link" href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
welcome@discours.io
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
</StaticPage>
|
||||
)
|
|
@ -1,88 +1,61 @@
|
|||
import { Meta } from '@solidjs/meta'
|
||||
import { StaticPage } from '~/components/Views/StaticPage'
|
||||
import { useLocalize } from '~/context/localize'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
|
||||
export default () => {
|
||||
const { t } = useLocalize()
|
||||
const ogTitle = t('Terms of use')
|
||||
const ogImage = getImageUrl('production/image/logo_image.png')
|
||||
const description = t('Rules of the journal Discours')
|
||||
|
||||
return (
|
||||
<StaticPage title={ogTitle}>
|
||||
<Meta name="descprition" content={description} />
|
||||
<Meta name="keywords" content={t('terms of use keywords')} />
|
||||
<Meta name="og:type" content="article" />
|
||||
<Meta name="og:title" content={ogTitle} />
|
||||
<Meta name="og:image" content={ogImage} />
|
||||
<Meta name="twitter:image" content={ogImage} />
|
||||
<Meta name="og:description" content={description} />
|
||||
<Meta name="twitter:card" content="summary_large_image" />
|
||||
<Meta name="twitter:title" content={ogTitle} />
|
||||
<Meta name="twitter:description" content={description} />
|
||||
|
||||
<h1 id="terms-of-use">
|
||||
<span class="wrapped">Пользовательское соглашение</span>
|
||||
</h1>
|
||||
|
||||
export default () => (
|
||||
<StaticPage title={'Terms of use'} desc={'Rules of the journal Discours'}>
|
||||
<p>
|
||||
Дискурс — это сообщество творческих людей, объединенных идеей делать интересный журнал
|
||||
для всех желающих. Авторы Дискурса сообща посредством прямого голосования определяют содержание
|
||||
журнала.
|
||||
Дискурс — это сообщество творческих людей, объединенных идеей делать интересный журнал для
|
||||
всех желающих. Авторы Дискурса сообща посредством прямого голосования определяют содержание журнала.
|
||||
</p>
|
||||
<p>Для того, чтобы Дискурс работал без помех, разработаны настоящие Правила.</p>
|
||||
<h3 id="definitions">Определения</h3>
|
||||
<p>
|
||||
<strong>Сайт</strong> — портал discours.io
|
||||
<strong>Сайт</strong> — портал discours.io
|
||||
</p>
|
||||
<p>
|
||||
<strong>Пользователь</strong> — лицо, пользующееся Сайтом, либо юридическое лицо,
|
||||
обладающее правами на интеллектуальную собственность.
|
||||
<strong>Пользователь</strong> — лицо, пользующееся Сайтом, либо юридическое лицо,
|
||||
обладающее правами на интеллектуальную собственность.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Публикация контента</strong> — размещение Пользователем посредством Сайта
|
||||
объектов авторских прав и другой информации для других пользователей.
|
||||
<strong>Публикация контента</strong> — размещение Пользователем посредством Сайта объектов
|
||||
авторских прав и другой информации для других пользователей.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Издательство</strong> — администрация сайта, которая занимается технической
|
||||
и издательской деятельностью для обеспечения функционирования Сайта и Альманаха.
|
||||
Издательство не вмешивается в принятие редакционных решений авторским сообществом.
|
||||
<strong>Издательство</strong> — администрация сайта, которая занимается технической
|
||||
и издательской деятельностью для обеспечения функционирования Сайта и Альманаха.
|
||||
Издательство не вмешивается в принятие редакционных решений авторским сообществом.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Альманах «Дискурс»</strong> (свидетельство о регистрации СМИ: ПИ №
|
||||
ФС77-63947 от 18.12.15) — печатное периодическое издание, которое выходит раз
|
||||
в год и состоит из лучших публикаций на Сайте за это время.
|
||||
<strong>Альманах «Дискурс»</strong> (свидетельство о регистрации СМИ: ПИ №
|
||||
ФС77-63947 от 18.12.15) — печатное периодическое издание, которое выходит раз
|
||||
в год и состоит из лучших публикаций на Сайте за это время.
|
||||
</p>
|
||||
<h3 id="copyright">Авторские права</h3>
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
Вся информация на сайте (включая тексты, изображения, видеоматериалы, аудиозаписи,
|
||||
программный код, дизайн сайта и т.д.) является объектом интеллектуальной собственности
|
||||
ее правообладателей и охраняется законодательством РФ.
|
||||
Вся информация на сайте (включая тексты, изображения, видеоматериалы, аудиозаписи,
|
||||
программный код, дизайн сайта и т.д.) является объектом интеллектуальной собственности
|
||||
ее правообладателей и охраняется законодательством РФ.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Публикуя контент на сайте, Пользователь на безвозмездной основе предоставляет
|
||||
Издательству право на воспроизведение, распространение, перевод, редактирование контента.
|
||||
Данное право предоставляется Издательству на весь срок действия авторских прав
|
||||
Пользователя.
|
||||
Публикуя контент на сайте, Пользователь на безвозмездной основе предоставляет
|
||||
Издательству право на воспроизведение, распространение, перевод, редактирование контента.
|
||||
Данное право предоставляется Издательству на весь срок действия авторских прав Пользователя.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Пользователь предоставляет Издательству право редактировать контент, в том числе вносить
|
||||
в него изменения, сокращения и дополнения, снабжать его иллюстрациями
|
||||
и пояснениями, исправлять ошибки и уточнять фактические сведения, при условии, что
|
||||
этим не искажается авторский замысел.
|
||||
Пользователь предоставляет Издательству право редактировать контент, в том числе вносить
|
||||
в него изменения, сокращения и дополнения, снабжать его иллюстрациями
|
||||
и пояснениями, исправлять ошибки и уточнять фактические сведения, при условии, что этим
|
||||
не искажается авторский замысел.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="ng-binding">
|
||||
Обнародование контента осуществляется Издательством в соответствии с условиями
|
||||
лицензии{' '}
|
||||
Обнародование контента осуществляется Издательством в соответствии с условиями лицензии{' '}
|
||||
<a
|
||||
href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.ru"
|
||||
target="_blank"
|
||||
|
@ -90,16 +63,16 @@ export default () => {
|
|||
>
|
||||
Creative Commons BY-NC-ND 4.0
|
||||
</a>
|
||||
. Все материалы сайта предназначены исключительно для личного некоммерческого использования.
|
||||
Права на дизайн и программный код сайта принадлежат Издательству.
|
||||
. Все материалы сайта предназначены исключительно для личного некоммерческого использования. Права
|
||||
на дизайн и программный код сайта принадлежат Издательству.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="ng-binding">
|
||||
Все аудиовизуальные произведения являются собственностью своих авторов и правообладателей
|
||||
и используются только в образовательных и информационных целях. Если
|
||||
вы являетесь собственником того или иного произведения и не согласны с его
|
||||
размещением на сайте, пожалуйста, напишите на
|
||||
Все аудиовизуальные произведения являются собственностью своих авторов и правообладателей
|
||||
и используются только в образовательных и информационных целях. Если
|
||||
вы являетесь собственником того или иного произведения и не согласны с его
|
||||
размещением на сайте, пожалуйста, напишите на
|
||||
<a href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
welcome@discours.io
|
||||
</a>
|
||||
|
@ -108,9 +81,9 @@ export default () => {
|
|||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Цитирование, распространение, доведение до всеобщего сведения материалов Cайта
|
||||
приветствуется. При использовании материалов сайта необходимо указать имя автора и активную
|
||||
ссылку на материал на Сайте.
|
||||
Цитирование, распространение, доведение до всеобщего сведения материалов Cайта
|
||||
приветствуется. При использовании материалов сайта необходимо указать имя автора и активную
|
||||
ссылку на материал на Сайте.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
@ -118,46 +91,45 @@ export default () => {
|
|||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
Находясь на Сайте, Пользователь подтверждает свое совершеннолетие, правоспособность,
|
||||
а также согласие с настоящими Правилами и политикой конфиденциальности
|
||||
и готовность нести полную ответственность за их соблюдение.
|
||||
Находясь на Сайте, Пользователь подтверждает свое совершеннолетие, правоспособность,
|
||||
а также согласие с настоящими Правилами и политикой конфиденциальности
|
||||
и готовность нести полную ответственность за их соблюдение.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>На сайте запрещено:</h4>
|
||||
<h4>На сайте запрещено:</h4>
|
||||
<ul>
|
||||
<li>
|
||||
Публиковать контент, авторские права на который принадлежат третьим лицам, без согласия
|
||||
этих лиц. Если авторские права на контент принадлежат нескольким лицам, то его публикация
|
||||
предполагает согласие их всех.
|
||||
Публиковать контент, авторские права на который принадлежат третьим лицам, без согласия
|
||||
этих лиц. Если авторские права на контент принадлежат нескольким лицам, то его публикация
|
||||
предполагает согласие их всех.
|
||||
</li>
|
||||
<li>Размещать коммерческую и политическую рекламу.</li>
|
||||
<li>Размещать коммерческую и политическую рекламу.</li>
|
||||
<li>
|
||||
Целенаправленно препятствовать нормальному функционированию сообщества и сайта
|
||||
discours.io
|
||||
Целенаправленно препятствовать нормальному функционированию сообщества и сайта discours.io
|
||||
</li>
|
||||
<li>Выдавать себя за другого человека и представляться его именем.</li>
|
||||
<li>Выдавать себя за другого человека и представляться его именем.</li>
|
||||
<li>
|
||||
Размещать информацию, которая не соответствует целям создания Сайта, ущемляет интересы
|
||||
Размещать информацию, которая не соответствует целям создания Сайта, ущемляет интересы
|
||||
других пользователей или третьих лиц, нарушает законы Российской Федерации.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Пользователь несет всю ответственность за содержание публикуемого контента и свое
|
||||
взаимодействие с другими пользователями, и обязуется возместить все расходы
|
||||
в случае предъявления каких-либо претензий третьими лицами. Издательство не несет
|
||||
ответственности за содержание публикуемой пользователями информации, в том числе
|
||||
за размещенные на сайте комментарии. Переписка между Пользователем
|
||||
и Издательством считается юридически значимой. Настоящие Правила могут быть изменены
|
||||
Издательством, изменения вступают в силу с момента публикации на Сайте.
|
||||
Пользователь несет всю ответственность за содержание публикуемого контента и свое
|
||||
взаимодействие с другими пользователями, и обязуется возместить все расходы
|
||||
в случае предъявления каких-либо претензий третьими лицами. Издательство не несет
|
||||
ответственности за содержание публикуемой пользователями информации, в том числе
|
||||
за размещенные на сайте комментарии. Переписка между Пользователем и Издательством
|
||||
считается юридически значимой. Настоящие Правила могут быть изменены Издательством, изменения
|
||||
вступают в силу с момента публикации на Сайте.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Если Пользователь очевидно и целенаправленно нарушает правила, Издательство может
|
||||
и принять в отношении автора следующие меры: вынести предупреждение и обязать
|
||||
Если Пользователь очевидно и целенаправленно нарушает правила, Издательство может
|
||||
и принять в отношении автора следующие меры: вынести предупреждение и обязать
|
||||
автора устранить допущенное нарушение, удалить контент, нарушающий правила, заблокировать или
|
||||
удалить аккаунт нарушителя.
|
||||
</p>
|
||||
|
@ -166,37 +138,36 @@ export default () => {
|
|||
<h3 id="privacy-policy">Политика конфиденциальности</h3>
|
||||
<ol>
|
||||
<li>
|
||||
<p>Сайт может собирать у пользователей следующие данные:</p>
|
||||
<p>Сайт может собирать у пользователей следующие данные:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Данные, которые пользователи сообщают о себе сами при подаче заявки, регистрации,
|
||||
авторизации или заполнения профиля, в том числе ФИО и контактную информацию.
|
||||
Конфиденциальные данные, такие как идентификатор и электронный адрес, используются для
|
||||
идентификации пользователя. Данные профиля, размещённые публично по желанию
|
||||
пользователя, которое выражается фактом их предоставления, используется для
|
||||
демонстрации другим пользователям той информации о себе, которую пользователь готов
|
||||
предоставить.
|
||||
Данные, которые пользователи сообщают о себе сами при подаче заявки, регистрации,
|
||||
авторизации или заполнения профиля, в том числе ФИО и контактную информацию.
|
||||
Конфиденциальные данные, такие как идентификатор и электронный адрес, используются для
|
||||
идентификации пользователя. Данные профиля, размещённые публично по желанию пользователя,
|
||||
которое выражается фактом их предоставления, используется для демонстрации другим
|
||||
пользователям той информации о себе, которую пользователь готов предоставить.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Данные, собранные автоматическим путем, такие, как cookie-файлы. Эти неперсонализированные
|
||||
данные могут использоваться для сбора статистики и улучшения работы сайта.
|
||||
данные могут использоваться для сбора статистики и улучшения работы сайта.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Издательство обеспечивает конфиденциальность персональных данных и применяет все
|
||||
необходимые организационные и технические меры по их защите.
|
||||
Издательство обеспечивает конфиденциальность персональных данных и применяет все необходимые
|
||||
организационные и технические меры по их защите.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="ng-binding">
|
||||
По желанию пользователя Издательство готово удалить любую информацию о нем, собранную
|
||||
автоматическим путем. Для этого следует написать на адрес электронной почты{' '}
|
||||
По желанию пользователя Издательство готово удалить любую информацию о нем, собранную
|
||||
автоматическим путем. Для этого следует написать на адрес электронной почты{' '}
|
||||
<a href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
welcome@discours.io
|
||||
</a>
|
||||
|
@ -205,16 +176,16 @@ export default () => {
|
|||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Если в информации, предоставляемой Издательству Пользователем, содержатся персональные
|
||||
данные последнего, то фактом их предоставления он соглашается
|
||||
на их обработку любым способом, не запрещенным законодательством РФ.
|
||||
Если в информации, предоставляемой Издательству Пользователем, содержатся персональные данные
|
||||
последнего, то фактом их предоставления он соглашается на их обработку любым
|
||||
способом, не запрещенным законодательством РФ.
|
||||
</p>
|
||||
<p class="ng-binding">
|
||||
Общедоступные видео на сайте могут транслироваться с YouTube и регулируются{' '}
|
||||
Общедоступные видео на сайте могут транслироваться с YouTube и регулируются{' '}
|
||||
<a href="https://policies.google.com/privacy" target="_blank" rel="noreferrer">
|
||||
политикой конфиденциальности Google
|
||||
</a>
|
||||
. Загрузка видео на сайт также означает согласие с
|
||||
. Загрузка видео на сайт также означает согласие с
|
||||
<a href="https://www.youtube.com/t/terms" target="_blank" rel="noreferrer">
|
||||
Условиями использования YouTube
|
||||
</a>
|
||||
|
@ -223,20 +194,19 @@ export default () => {
|
|||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Данные, которые мы получаем от вас, мы используем только в соответствии
|
||||
с принципами обработки данных, указанными в этом документе.
|
||||
Данные, которые мы получаем от вас, мы используем только в соответствии
|
||||
с принципами обработки данных, указанными в этом документе.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
<h3 id="feedback">Обратная связь</h3>
|
||||
<p class="ng-binding">
|
||||
Любые вопросы и предложения по поводу функционирования сайта можно направить
|
||||
по электронной почте{' '}
|
||||
Любые вопросы и предложения по поводу функционирования сайта можно направить
|
||||
по электронной почте{' '}
|
||||
<a href="mailto:welcome@discours.io" target="_blank" rel="noreferrer">
|
||||
welcome@discours.io
|
||||
</a>{' '}
|
||||
или через форму <a href="/connect">«предложить идею»</a>.
|
||||
или через форму <a href="/connect">«предложить идею»</a>.
|
||||
</p>
|
||||
</StaticPage>
|
||||
)
|
||||
}
|
||||
)
|
||||
|
|
71
src/routes/(static)/thanks.tsx
Normal file
71
src/routes/(static)/thanks.tsx
Normal file
|
@ -0,0 +1,71 @@
|
|||
import { StaticPage } from '~/components/Views/StaticPage'
|
||||
|
||||
export default () => (
|
||||
<StaticPage
|
||||
title={'Thank you'}
|
||||
desc={
|
||||
'Self-publishing exists thanks to the help of wonderful people from all over the world. Thank you!'
|
||||
}
|
||||
>
|
||||
{/*
|
||||
<h3><b>Команда</b></h3>
|
||||
<p>
|
||||
Константин Ворович — исполнительный директор,
|
||||
<a href="mailto:welcome@discours.io" target="_blank"
|
||||
>welcome@discours.io</a
|
||||
><br />
|
||||
Александр Гусев — технический архитектор,
|
||||
<a href="mailto:services@discours.io" target="_blank"
|
||||
>services@discours.io</a
|
||||
><br />
|
||||
Екатерина Ильина — шеф-редактор проекта,
|
||||
<a href="mailto:letter@discours.io" target="_blank"
|
||||
>letter@discours.io</a
|
||||
><br />
|
||||
Яна Климова — редактор сайта и соцсетей,
|
||||
<a href="mailto:letter@discours.io" target="_blank"
|
||||
>letter@discours.io</a
|
||||
><br />
|
||||
Николай Носачевский — голос и душа подкаста,
|
||||
<a href="mailto:podcast@discours.io" target="_blank"
|
||||
>podcast@discours.io</a
|
||||
>
|
||||
</p>
|
||||
*/}
|
||||
<h3>Неоценимый вклад в Дискурс внесли и вносят</h3>
|
||||
<p>
|
||||
Мария Бессмертная, Дамир Бикчурин, Константин Ворович, Ян Выговский, Эльдар Гариффулин, Павел
|
||||
Гафаров, Виктория Гендлина, Александр Гусев, Данила Давыдов, Константин Дубовик, Вячеслав Еременко,
|
||||
Кристина Ибрагим, Екатерина Ильина, Анна Капаева, Яна Климова, Александр Коренков, Ирэна Лесневская,
|
||||
Игорь Лобанов, Анастасия Лозовая, Григорий Ломизе, Евгений Медведев, Павел Никулин, Николай
|
||||
Носачевский, Андрей Орловский, Михаил Панин, Антон Панов, Павел Пепперштейн, Любовь Покровская, Илья
|
||||
Розовский, Денис Светличный, Павел Соколов, Сергей Стрельников, Глеб Струнников, Николай Тарковский,
|
||||
Кирилл Филимонов, Алексей Хапов, Екатерина Харитонова
|
||||
</p>
|
||||
<h3>Авторы</h3>
|
||||
<p>
|
||||
Мы безмерно благодарны{' '}
|
||||
<a href="/author" target="_blank" rel="noopener noreferrer">
|
||||
каждому автору
|
||||
</a>{' '}
|
||||
за участие и поддержку проекта. Сегодня, когда для большинства деньги стали целью
|
||||
и основным источником мотивации, бескорыстная помощь и основанный на энтузиазме труд
|
||||
бесценны. Именно вы своим трудом каждый день делаете Дискурс таким, какой он есть.
|
||||
</p>
|
||||
<h3>Иллюстраторы</h3>
|
||||
<p>
|
||||
Ольга Аверинова, Регина Акчурина, Айгуль Берхеева, Екатерина Вакуленко, Анастасия Викулова, Мария
|
||||
Власенко, Ванесса Гаврилова, Ольга Горше, Ксения Горшкова, Ангелина Гребенюкова, Илья Diliago, Антон
|
||||
Жаголкин, Саша Керова, Ольга Машинец, Злата Мечетина, Тала Никитина, Никита Поздняков, Матвей Сапегин,
|
||||
Татьяна Сафонова, Виктория Шибаева
|
||||
</p>
|
||||
<h3>Меценаты</h3>
|
||||
<p>
|
||||
Дискурс существует исключительно на пожертвования читателей. Мы бесконечно признательны
|
||||
всем, кто нас поддерживает. Ваши пожертвования — финансовый фундамент журнала. Благодаря
|
||||
вам мы развиваем платформу качественной журналистики, которая помогает самым разным авторам быть
|
||||
услышанными. Стать нашим меценатом и подписаться на ежемесячную поддержку проекта можно{' '}
|
||||
<a href="/support">здесь</a>.
|
||||
</p>
|
||||
</StaticPage>
|
||||
)
|
|
@ -1,5 +1,5 @@
|
|||
import { RouteSectionProps, createAsync, useLocation, useParams } from '@solidjs/router'
|
||||
import { ErrorBoundary, Suspense, createMemo, createReaction, createSignal, onMount } from 'solid-js'
|
||||
import { ErrorBoundary, Suspense, createEffect, createMemo, createSignal, on, onMount } from 'solid-js'
|
||||
import { FourOuFourView } from '~/components/Views/FourOuFour'
|
||||
import { Loading } from '~/components/_shared/Loading'
|
||||
import { gaIdentity } from '~/config'
|
||||
|
@ -20,7 +20,7 @@ export const route = {
|
|||
load: async ({ params }: RouteSectionProps<{ article: Shout }>) => await fetchShout(params.slug)
|
||||
}
|
||||
|
||||
export const ArticlePage = (props: RouteSectionProps<{ article: Shout }>) => {
|
||||
export default (props: RouteSectionProps<{ article: Shout }>) => {
|
||||
const params = useParams()
|
||||
const loc = useLocation()
|
||||
const article = createAsync(async () => props.data.article || (await fetchShout(params.slug)))
|
||||
|
@ -42,18 +42,22 @@ export const ArticlePage = (props: RouteSectionProps<{ article: Shout }>) => {
|
|||
}
|
||||
})
|
||||
|
||||
// docs: `a side effect that is run the first time the expression
|
||||
// wrapped by the returned tracking function is notified of a change`
|
||||
createReaction(() => {
|
||||
if (article()) {
|
||||
console.debug('[routes.slug] article signal changed once')
|
||||
createEffect(
|
||||
on(
|
||||
article,
|
||||
(a?: Shout) => {
|
||||
if (!a) return
|
||||
console.debug('[routes.slug] article found')
|
||||
window.gtag?.('event', 'page_view', {
|
||||
page_title: article()?.title,
|
||||
page_title: a.title,
|
||||
page_location: window.location.href,
|
||||
page_path: loc.pathname
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
{ defer: true }
|
||||
)
|
||||
)
|
||||
|
||||
return (
|
||||
<ErrorBoundary fallback={(_err) => <FourOuFourView />}>
|
||||
<Suspense fallback={<Loading />}>
|
||||
|
@ -75,5 +79,3 @@ export const ArticlePage = (props: RouteSectionProps<{ article: Shout }>) => {
|
|||
</ErrorBoundary>
|
||||
)
|
||||
}
|
||||
|
||||
export default ArticlePage
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { useNavigate, useParams } from '@solidjs/router'
|
||||
import { redirect, useParams } from '@solidjs/router'
|
||||
import { createEffect, createMemo, createSignal, lazy, on } from 'solid-js'
|
||||
import { AuthGuard } from '~/components/AuthGuard'
|
||||
import { PageLayout } from '~/components/_shared/PageLayout'
|
||||
|
@ -31,12 +31,11 @@ export const EditPage = () => {
|
|||
const { t } = useLocalize()
|
||||
const { session } = useSession()
|
||||
const snackbar = useSnackbar()
|
||||
const navigate = useNavigate()
|
||||
const fail = async (error: string) => {
|
||||
console.error(error)
|
||||
const errorMessage = error === 'forbidden' ? "You can't edit this post" : error
|
||||
await snackbar?.showSnackbar({ type: 'error', body: t(errorMessage) })
|
||||
navigate('/edit')
|
||||
redirect('/edit') // all drafts page
|
||||
}
|
||||
const [shout, setShout] = createSignal<Shout>()
|
||||
const params = useParams()
|
||||
|
|
|
@ -162,7 +162,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="content-block" style="vertical-align: top; padding: 0 0 20px" valign="top">
|
||||
— Дискурс
|
||||
— Дискурс
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
Loading…
Reference in New Issue
Block a user