mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
chore(post menu): update plebones link to eth limo
This commit is contained in:
+1553
-1059
File diff suppressed because it is too large
Load Diff
+440
-350
File diff suppressed because it is too large
Load Diff
+2090
-1462
File diff suppressed because it is too large
Load Diff
+742
-556
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+382
-291
@@ -21,22 +21,23 @@ import packageJson from '../../../package.json';
|
|||||||
const { version } = packageJson;
|
const { version } = packageJson;
|
||||||
const commitRef = process?.env?.REACT_APP_COMMIT_REF ? ` ${process.env.REACT_APP_COMMIT_REF.slice(0, 7)}` : '';
|
const commitRef = process?.env?.REACT_APP_COMMIT_REF ? ` ${process.env.REACT_APP_COMMIT_REF.slice(0, 7)}` : '';
|
||||||
|
|
||||||
|
|
||||||
const Rules = () => {
|
const Rules = () => {
|
||||||
const {
|
const { defaultSubplebbits, isSettingsOpen, setIsSettingsOpen, selectedAddress, setSelectedAddress, selectedStyle, setSelectedTitle } = useGeneralStore(
|
||||||
defaultSubplebbits,
|
(state) => state,
|
||||||
isSettingsOpen, setIsSettingsOpen,
|
);
|
||||||
selectedAddress, setSelectedAddress,
|
|
||||||
selectedStyle,
|
|
||||||
setSelectedTitle,
|
|
||||||
} = useGeneralStore(state => state);
|
|
||||||
|
|
||||||
// temporary hardcode
|
// temporary hardcode
|
||||||
const plebtokenRules = [
|
const plebtokenRules = [
|
||||||
"This community is strictly SFW. Any NSFW language or content will be removed.",
|
'This community is strictly SFW. Any NSFW language or content will be removed.',
|
||||||
<span>Only post about the plebbit token ($PLEB). For general cryptocurrency discussion, go to <Link className='quotelink' to="/p/business-and-finance.eth">p/business-and-finance.eth</Link>.</span>,
|
<span>
|
||||||
"FUD is allowed unless blatantly meaningless and spammy."
|
Only post about the plebbit token ($PLEB). For general cryptocurrency discussion, go to{' '}
|
||||||
]
|
<Link className='quotelink' to='/p/business-and-finance.eth'>
|
||||||
|
p/business-and-finance.eth
|
||||||
|
</Link>
|
||||||
|
.
|
||||||
|
</span>,
|
||||||
|
'FUD is allowed unless blatantly meaningless and spammy.',
|
||||||
|
];
|
||||||
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
@@ -58,7 +59,6 @@ const Rules = () => {
|
|||||||
const { subplebbitAddress } = useParams();
|
const { subplebbitAddress } = useParams();
|
||||||
const subplebbit = useSubplebbit({ subplebbitAddress: selectedAddress });
|
const subplebbit = useSubplebbit({ subplebbitAddress: selectedAddress });
|
||||||
|
|
||||||
|
|
||||||
const handleOptionClick = () => {
|
const handleOptionClick = () => {
|
||||||
setOpenMenuCid(null);
|
setOpenMenuCid(null);
|
||||||
};
|
};
|
||||||
@@ -67,19 +67,23 @@ const Rules = () => {
|
|||||||
setOpenMobileMenuCid(null);
|
setOpenMobileMenuCid(null);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleOutsideClick = useCallback(
|
||||||
const handleOutsideClick = useCallback((e) => {
|
(e) => {
|
||||||
if (openMenuCid !== null && !postMenuCatalogRef.current.contains(e.target)) {
|
if (openMenuCid !== null && !postMenuCatalogRef.current.contains(e.target)) {
|
||||||
setOpenMenuCid(null);
|
setOpenMenuCid(null);
|
||||||
}
|
}
|
||||||
}, [openMenuCid, postMenuCatalogRef]);
|
},
|
||||||
|
[openMenuCid, postMenuCatalogRef],
|
||||||
|
);
|
||||||
|
|
||||||
const handleMobileOutsideClick = useCallback((e) => {
|
const handleMobileOutsideClick = useCallback(
|
||||||
|
(e) => {
|
||||||
if (openMobileMenuCid !== null && !postMenuMobileRef.current.contains(e.target)) {
|
if (openMobileMenuCid !== null && !postMenuMobileRef.current.contains(e.target)) {
|
||||||
setOpenMobileMenuCid(null);
|
setOpenMobileMenuCid(null);
|
||||||
}
|
}
|
||||||
}, [openMobileMenuCid, postMenuMobileRef]);
|
},
|
||||||
|
[openMobileMenuCid, postMenuMobileRef],
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (openMenuCid !== null) {
|
if (openMenuCid !== null) {
|
||||||
@@ -93,7 +97,6 @@ const Rules = () => {
|
|||||||
};
|
};
|
||||||
}, [openMenuCid, handleOutsideClick]);
|
}, [openMenuCid, handleOutsideClick]);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (openMobileMenuCid !== null) {
|
if (openMobileMenuCid !== null) {
|
||||||
document.addEventListener('click', handleMobileOutsideClick);
|
document.addEventListener('click', handleMobileOutsideClick);
|
||||||
@@ -106,18 +109,16 @@ const Rules = () => {
|
|||||||
};
|
};
|
||||||
}, [openMobileMenuCid, handleMobileOutsideClick]);
|
}, [openMobileMenuCid, handleMobileOutsideClick]);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const selectedSubplebbit = defaultSubplebbits.find((subplebbit) => subplebbit.address === subplebbitAddress);
|
const selectedSubplebbit = defaultSubplebbits.find((subplebbit) => subplebbit.address === subplebbitAddress);
|
||||||
if (subplebbitAddress) {
|
if (subplebbitAddress) {
|
||||||
setSelectedAddress(subplebbitAddress);
|
setSelectedAddress(subplebbitAddress);
|
||||||
} else if (subplebbit?.address) {
|
} else if (subplebbit?.address) {
|
||||||
setSelectedAddress(subplebbit.address)
|
setSelectedAddress(subplebbit.address);
|
||||||
}
|
}
|
||||||
if (selectedSubplebbit) {
|
if (selectedSubplebbit) {
|
||||||
setSelectedTitle(selectedSubplebbit.title);
|
setSelectedTitle(selectedSubplebbit.title);
|
||||||
@@ -157,240 +158,279 @@ const Rules = () => {
|
|||||||
navigate(`/p/${selected}`);
|
navigate(`/p/${selected}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Helmet>
|
<Helmet>
|
||||||
<title>
|
<title>{'Board Rules - ' + (subplebbit.title || subplebbit.address) + ' - plebchan'}</title>
|
||||||
{"Board Rules - " + (subplebbit.title || subplebbit.address) + " - plebchan"}
|
|
||||||
</title>
|
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<Container>
|
<Container>
|
||||||
<CreateBoardModal
|
<CreateBoardModal selectedStyle={selectedStyle} isOpen={isCreateBoardOpen} closeModal={() => setIsCreateBoardOpen(false)} />
|
||||||
selectedStyle={selectedStyle}
|
<AdminListModal selectedStyle={selectedStyle} isOpen={isAdminListOpen} closeModal={() => setIsAdminListOpen(false)} roles={subplebbit.roles} />
|
||||||
isOpen={isCreateBoardOpen}
|
<SettingsModal selectedStyle={selectedStyle} isOpen={isSettingsOpen} closeModal={() => setIsSettingsOpen(false)} />
|
||||||
closeModal={() => setIsCreateBoardOpen(false)} />
|
|
||||||
<AdminListModal
|
|
||||||
selectedStyle={selectedStyle}
|
|
||||||
isOpen={isAdminListOpen}
|
|
||||||
closeModal={() => setIsAdminListOpen(false)}
|
|
||||||
roles={subplebbit.roles} />
|
|
||||||
<SettingsModal
|
|
||||||
selectedStyle={selectedStyle}
|
|
||||||
isOpen={isSettingsOpen}
|
|
||||||
closeModal={() => setIsSettingsOpen(false)} />
|
|
||||||
<NavBar selectedStyle={selectedStyle}>
|
<NavBar selectedStyle={selectedStyle}>
|
||||||
<>
|
<>
|
||||||
<span className="boardList">
|
<span className='boardList'>
|
||||||
[
|
[
|
||||||
<Link to={`/p/all`} onClick={() => window.scrollTo(0, 0)}>All</Link>
|
<Link to={`/p/all`} onClick={() => window.scrollTo(0, 0)}>
|
||||||
|
All
|
||||||
|
</Link>
|
||||||
/
|
/
|
||||||
<Link to={`/p/subscriptions`} onClick={() => window.scrollTo(0, 0)}>Subscriptions</Link>
|
<Link to={`/p/subscriptions`} onClick={() => window.scrollTo(0, 0)}>
|
||||||
|
Subscriptions
|
||||||
|
</Link>
|
||||||
] [
|
] [
|
||||||
{defaultSubplebbits.map((subplebbit, index) => (
|
{defaultSubplebbits.map((subplebbit, index) => (
|
||||||
<span className="boardList" key={`span-${subplebbit.address}`}>
|
<span className='boardList' key={`span-${subplebbit.address}`}>
|
||||||
{index === 0 ? null : "\u00a0"}
|
{index === 0 ? null : '\u00a0'}
|
||||||
<Link to={`/p/${subplebbit.address}`} key={`a-${subplebbit.address}`} onClick={() => {
|
<Link
|
||||||
|
to={`/p/${subplebbit.address}`}
|
||||||
|
key={`a-${subplebbit.address}`}
|
||||||
|
onClick={() => {
|
||||||
setSelectedTitle(subplebbit.title);
|
setSelectedTitle(subplebbit.title);
|
||||||
setSelectedAddress(subplebbit.address);
|
setSelectedAddress(subplebbit.address);
|
||||||
}}
|
}}
|
||||||
>{subplebbit.title ? subplebbit.title : subplebbit.address}</Link>
|
>
|
||||||
{index !== defaultSubplebbits.length - 1 ? " /" : null}
|
{subplebbit.title ? subplebbit.title : subplebbit.address}
|
||||||
|
</Link>
|
||||||
|
{index !== defaultSubplebbits.length - 1 ? ' /' : null}
|
||||||
</span>
|
</span>
|
||||||
))}
|
))}
|
||||||
]
|
]
|
||||||
</span>
|
</span>
|
||||||
<span className="nav">
|
<span className='nav'>
|
||||||
[
|
[
|
||||||
<span id="button-span" style={{cursor: 'pointer'}} onClick={
|
<span
|
||||||
() => {
|
id='button-span'
|
||||||
window.electron && window.electron.isElectron ? (
|
style={{ cursor: 'pointer' }}
|
||||||
setIsCreateBoardOpen(true)
|
onClick={() => {
|
||||||
) : (
|
window.electron && window.electron.isElectron
|
||||||
alert(
|
? setIsCreateBoardOpen(true)
|
||||||
'You can create a board with the desktop version of plebchan:\nhttps://github.com/plebbit/plebchan/releases/latest\n\nIf you are comfortable with the command line, use plebbit-cli:\nhttps://github.com/plebbit/plebbit-cli\n\n'
|
: alert(
|
||||||
)
|
'You can create a board with the desktop version of plebchan:\nhttps://github.com/plebbit/plebchan/releases/latest\n\nIf you are comfortable with the command line, use plebbit-cli:\nhttps://github.com/plebbit/plebbit-cli\n\n',
|
||||||
)
|
);
|
||||||
}
|
}}
|
||||||
}>Create Board</span>
|
>
|
||||||
]
|
Create Board
|
||||||
[
|
|
||||||
<Link to={`/p/${selectedAddress}/rules/settings`} onClick={() => setIsSettingsOpen(true)}>Settings</Link>
|
|
||||||
]
|
|
||||||
[
|
|
||||||
<Link to="/">Home</Link>
|
|
||||||
]
|
|
||||||
</span>
|
</span>
|
||||||
<div id="board-nav-mobile" style={{ top: visible ? 0 : '-23px' }}>
|
] [
|
||||||
<div className="nav-container">
|
<Link to={`/p/${selectedAddress}/rules/settings`} onClick={() => setIsSettingsOpen(true)}>
|
||||||
<div className="board-select">
|
Settings
|
||||||
|
</Link>
|
||||||
|
] [<Link to='/'>Home</Link>]
|
||||||
|
</span>
|
||||||
|
<div id='board-nav-mobile' style={{ top: visible ? 0 : '-23px' }}>
|
||||||
|
<div className='nav-container'>
|
||||||
|
<div className='board-select'>
|
||||||
<strong>Board</strong>
|
<strong>Board</strong>
|
||||||
|
|
||||||
<select id="board-select-mobile" value={selectedAddress} onChange={handleSelectChange}>
|
<select id='board-select-mobile' value={selectedAddress} onChange={handleSelectChange}>
|
||||||
<option value="all">All</option>
|
<option value='all'>All</option>
|
||||||
<option value="subscriptions">Subscriptions</option>
|
<option value='subscriptions'>Subscriptions</option>
|
||||||
{!defaultSubplebbits.some(subplebbit => subplebbit.address === selectedAddress) && (
|
{!defaultSubplebbits.some((subplebbit) => subplebbit.address === selectedAddress) && <option value={selectedAddress}>{selectedAddress}</option>}
|
||||||
<option value={selectedAddress}>{selectedAddress}</option>
|
{defaultSubplebbits.map((subplebbit) => (
|
||||||
)}
|
<option key={`option-${subplebbit.address}`} value={subplebbit.address}>
|
||||||
{defaultSubplebbits.map(subplebbit => (
|
{subplebbit.title ? subplebbit.title : subplebbit.address}
|
||||||
<option key={`option-${subplebbit.address}`} value={subplebbit.address}
|
</option>
|
||||||
>{subplebbit.title ? subplebbit.title : subplebbit.address}</option>
|
|
||||||
))}
|
))}
|
||||||
</select>
|
</select>
|
||||||
<span id="button-span" style={{cursor: 'pointer'}} onClick={
|
|
||||||
() => alert(
|
<span
|
||||||
'You can create a board with the desktop version of plebchan:\nhttps://github.com/plebbit/plebchan/releases/latest\n\nIf you are comfortable with the command line, use plebbit-cli:\nhttps://github.com/plebbit/plebbit-cli\n\n'
|
id='button-span'
|
||||||
|
style={{ cursor: 'pointer' }}
|
||||||
|
onClick={() =>
|
||||||
|
alert(
|
||||||
|
'You can create a board with the desktop version of plebchan:\nhttps://github.com/plebbit/plebchan/releases/latest\n\nIf you are comfortable with the command line, use plebbit-cli:\nhttps://github.com/plebbit/plebbit-cli\n\n',
|
||||||
)
|
)
|
||||||
}>Create Board</span>
|
}
|
||||||
|
>
|
||||||
|
Create Board
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="page-jump">
|
<div className='page-jump'>
|
||||||
<Link to={`/p/${selectedAddress}/rules/settings`} onClick={() => setIsSettingsOpen(true)}>Settings</Link>
|
<Link to={`/p/${selectedAddress}/rules/settings`} onClick={() => setIsSettingsOpen(true)}>
|
||||||
|
Settings
|
||||||
|
</Link>
|
||||||
|
|
||||||
<Link to="/" onClick={() => {handleStyleChange({target: {value: "Yotsuba"}}); window.scrollTo(0, 0);}}>Home</Link>
|
<Link
|
||||||
|
to='/'
|
||||||
|
onClick={() => {
|
||||||
|
handleStyleChange({ target: { value: 'Yotsuba' } });
|
||||||
|
window.scrollTo(0, 0);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Home
|
||||||
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="separator-mobile"> </div>
|
<div id='separator-mobile'> </div>
|
||||||
<div id="separator-mobile"> </div>
|
<div id='separator-mobile'> </div>
|
||||||
</>
|
</>
|
||||||
</NavBar>
|
</NavBar>
|
||||||
<Header selectedStyle={selectedStyle}>
|
<Header selectedStyle={selectedStyle}>
|
||||||
<>
|
<>
|
||||||
<div className="banner">
|
<div className='banner'>
|
||||||
<ImageBanner />
|
<ImageBanner />
|
||||||
</div>
|
</div>
|
||||||
<>
|
<>
|
||||||
<div className="board-title">{subplebbit.title ?? null}</div>
|
<div className='board-title'>{subplebbit.title ?? null}</div>
|
||||||
<div className="board-address">p/{subplebbit.address}
|
<div className='board-address'>
|
||||||
<OfflineIndicator
|
p/{subplebbit.address}
|
||||||
address={subplebbit.address}
|
<OfflineIndicator address={subplebbit.address} className='offline' tooltipPlace='top' />
|
||||||
className="offline"
|
|
||||||
tooltipPlace="top" />
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
</>
|
</>
|
||||||
</Header>
|
</Header>
|
||||||
<Break selectedStyle={selectedStyle} />
|
<Break selectedStyle={selectedStyle} />
|
||||||
<PostForm selectedStyle={selectedStyle}>
|
<PostForm selectedStyle={selectedStyle}>
|
||||||
<ReplyFormLink id="post-form-link" selectedStyle={selectedStyle} style={{marginBottom: '10px'}}>
|
<ReplyFormLink id='post-form-link' selectedStyle={selectedStyle} style={{ marginBottom: '10px' }}>
|
||||||
<div id="return-button-mobile">
|
<div id='return-button-mobile'>
|
||||||
<span className="btn-wrap" onClick={()=> {window.scrollTo(0, 0)}}>
|
<span
|
||||||
|
className='btn-wrap'
|
||||||
|
onClick={() => {
|
||||||
|
window.scrollTo(0, 0);
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Link to={`/p/${selectedAddress}`}>Return</Link>
|
<Link to={`/p/${selectedAddress}`}>Return</Link>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div id="catalog-button-mobile">
|
<div id='catalog-button-mobile'>
|
||||||
<span className="btn-wrap">
|
<span className='btn-wrap'>
|
||||||
<Link to={`/p/${selectedAddress}/catalog`} onClick={()=> {window.scrollTo(0, 0)}}>Catalog</Link>
|
<Link
|
||||||
|
to={`/p/${selectedAddress}/catalog`}
|
||||||
|
onClick={() => {
|
||||||
|
window.scrollTo(0, 0);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Catalog
|
||||||
|
</Link>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div id="bottom-button-mobile">
|
<div id='bottom-button-mobile'>
|
||||||
<span className="btn-wrap">
|
<span className='btn-wrap'>
|
||||||
<span style={{cursor: 'pointer'}} onClick={() => window.scrollTo(0, document.body.scrollHeight)} onMouseOver={(event) => event.target.style.cursor='pointer'}>Bottom</span>
|
<span
|
||||||
|
style={{ cursor: 'pointer' }}
|
||||||
|
onClick={() => window.scrollTo(0, document.body.scrollHeight)}
|
||||||
|
onMouseOver={(event) => (event.target.style.cursor = 'pointer')}
|
||||||
|
>
|
||||||
|
Bottom
|
||||||
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</ReplyFormLink>
|
</ReplyFormLink>
|
||||||
</PostForm>
|
</PostForm>
|
||||||
<BoardStats subplebbitAddress={selectedAddress} />
|
<BoardStats subplebbitAddress={selectedAddress} />
|
||||||
<TopBar selectedStyle={selectedStyle}>
|
<TopBar selectedStyle={selectedStyle}>
|
||||||
<span className="style-changer">
|
<span className='style-changer'>
|
||||||
Style:
|
Style:
|
||||||
|
<select id='style-selector' onChange={handleStyleChange} value={selectedStyle}>
|
||||||
<select id="style-selector" onChange={handleStyleChange} value={selectedStyle}>
|
<option value='Yotsuba'>Yotsuba</option>
|
||||||
<option value="Yotsuba">Yotsuba</option>
|
<option value='Yotsuba-B'>Yotsuba B</option>
|
||||||
<option value="Yotsuba-B">Yotsuba B</option>
|
<option value='Futaba'>Futaba</option>
|
||||||
<option value="Futaba">Futaba</option>
|
<option value='Burichan'>Burichan</option>
|
||||||
<option value="Burichan">Burichan</option>
|
<option value='Tomorrow'>Tomorrow</option>
|
||||||
<option value="Tomorrow">Tomorrow</option>
|
<option value='Photon'>Photon</option>
|
||||||
<option value="Photon">Photon</option>
|
|
||||||
</select>
|
</select>
|
||||||
</span>
|
</span>
|
||||||
<span className="return-button" id="return-button-desktop">
|
<span className='return-button' id='return-button-desktop'>
|
||||||
[
|
[<Link to={`/p/${selectedAddress}`}>Return</Link>]
|
||||||
<Link to={`/p/${selectedAddress}`}>Return</Link>
|
|
||||||
]
|
|
||||||
</span>
|
</span>
|
||||||
<span className="return-button catalog-button" id="catalog-button-desktop">
|
<span className='return-button catalog-button' id='catalog-button-desktop'>
|
||||||
[
|
[<Link to={`/p/${selectedAddress}/catalog`}>Catalog</Link>]
|
||||||
<Link to={`/p/${selectedAddress}/catalog`}>Catalog</Link>
|
|
||||||
]
|
|
||||||
</span>
|
</span>
|
||||||
<span className="return-button catalog-button" id="bottom-button-desktop">
|
<span className='return-button catalog-button' id='bottom-button-desktop'>
|
||||||
[
|
[
|
||||||
<span id="button" style={{cursor: 'pointer'}} onClick={() => window.scrollTo(0, document.body.scrollHeight)}
|
<span
|
||||||
onMouseOver={(event) => event.target.style.cursor='pointer'}
|
id='button'
|
||||||
onTouchStart={() => window.scrollTo(0, document.body.scrollHeight)}>Bottom</span>
|
style={{ cursor: 'pointer' }}
|
||||||
|
onClick={() => window.scrollTo(0, document.body.scrollHeight)}
|
||||||
|
onMouseOver={(event) => (event.target.style.cursor = 'pointer')}
|
||||||
|
onTouchStart={() => window.scrollTo(0, document.body.scrollHeight)}
|
||||||
|
>
|
||||||
|
Bottom
|
||||||
|
</span>
|
||||||
]
|
]
|
||||||
</span>
|
</span>
|
||||||
</TopBar>
|
</TopBar>
|
||||||
<Tooltip id="tooltip" className="tooltip" />
|
<Tooltip id='tooltip' className='tooltip' />
|
||||||
<BoardForm selectedStyle={selectedStyle}>
|
<BoardForm selectedStyle={selectedStyle}>
|
||||||
<>
|
<>
|
||||||
<div className="thread">
|
<div className='thread'>
|
||||||
<div className="op-container">
|
<div className='op-container'>
|
||||||
<div className="post op op-desktop">
|
<div className='post op op-desktop'>
|
||||||
<hr />
|
<hr />
|
||||||
<div className="post-info">
|
<div className='post-info'>
|
||||||
<span className="name-block">
|
<span className='name-block'>
|
||||||
<span className="title">Rules</span>
|
<span className='title'>Rules</span>
|
||||||
|
|
||||||
<span className="name capcode"
|
<span
|
||||||
|
className='name capcode'
|
||||||
style={{ cursor: 'pointer' }}
|
style={{ cursor: 'pointer' }}
|
||||||
onClick={() => {setIsAdminListOpen(!isAdminListOpen)}}
|
onClick={() => {
|
||||||
>## Board Admins</span>
|
setIsAdminListOpen(!isAdminListOpen);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
## Board Admins
|
||||||
|
</span>
|
||||||
|
|
||||||
<span className="date-time">{getDate(subplebbit.createdAt)}</span>
|
<span className='date-time'>{getDate(subplebbit.createdAt)}</span>
|
||||||
|
|
||||||
<img src="assets/sticky.gif" alt="Sticky" title="Sticky" style={{marginBottom: "-1px", imageRendering: 'pixelated'}} />
|
<img src='assets/sticky.gif' alt='Sticky' title='Sticky' style={{ marginBottom: '-1px', imageRendering: 'pixelated' }} />
|
||||||
|
|
||||||
<img src="assets/closed.gif" alt="Closed" title="Closed" style={{marginBottom: "-1px", imageRendering: 'pixelated'}} />
|
<img src='assets/closed.gif' alt='Closed' title='Closed' style={{ marginBottom: '-1px', imageRendering: 'pixelated' }} />
|
||||||
<span>
|
<span>
|
||||||
[
|
[
|
||||||
<Link to={() => {}} style={{textDecoration: "none"}} className="reply-link">Reply</Link>
|
<Link to={() => {}} style={{ textDecoration: 'none' }} className='reply-link'>
|
||||||
|
Reply
|
||||||
|
</Link>
|
||||||
]
|
]
|
||||||
</span>
|
</span>
|
||||||
<PostMenu
|
<PostMenu
|
||||||
title="Post menu"
|
title='Post menu'
|
||||||
ref={el => {
|
ref={(el) => {
|
||||||
threadMenuRefs.current["rules"] = el;
|
threadMenuRefs.current['rules'] = el;
|
||||||
}}
|
}}
|
||||||
className='post-menu-button'
|
className='post-menu-button'
|
||||||
rotated={openMenuCid === "rules"}
|
rotated={openMenuCid === 'rules'}
|
||||||
onClick={(event) => {
|
onClick={(event) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const rect = threadMenuRefs.current["rules"].getBoundingClientRect();
|
const rect = threadMenuRefs.current['rules'].getBoundingClientRect();
|
||||||
setMenuPosition({ top: rect.top + window.scrollY, left: rect.left });
|
setMenuPosition({ top: rect.top + window.scrollY, left: rect.left });
|
||||||
setOpenMenuCid(prevCid => (prevCid === "rules" ? null : "rules"));
|
setOpenMenuCid((prevCid) => (prevCid === 'rules' ? null : 'rules'));
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
▶
|
▶
|
||||||
</PostMenu>
|
</PostMenu>
|
||||||
{createPortal(
|
{createPortal(
|
||||||
<PostMenuCatalog selectedStyle={selectedStyle}
|
<PostMenuCatalog
|
||||||
ref={el => {postMenuCatalogRef.current = el}}
|
selectedStyle={selectedStyle}
|
||||||
|
ref={(el) => {
|
||||||
|
postMenuCatalogRef.current = el;
|
||||||
|
}}
|
||||||
onClick={(event) => event.stopPropagation()}
|
onClick={(event) => event.stopPropagation()}
|
||||||
style={{position: "absolute",
|
style={{ position: 'absolute', top: menuPosition.top + 7, left: menuPosition.left }}
|
||||||
top: menuPosition.top + 7,
|
|
||||||
left: menuPosition.left}}>
|
|
||||||
<div className={`post-menu-thread post-menu-thread-${"rules"}`}
|
|
||||||
style={{ display: openMenuCid === "rules" ? 'block' : 'none' }}
|
|
||||||
>
|
>
|
||||||
<ul className="post-menu-catalog">
|
<div className={`post-menu-thread post-menu-thread-${'rules'}`} style={{ display: openMenuCid === 'rules' ? 'block' : 'none' }}>
|
||||||
|
<ul className='post-menu-catalog'>
|
||||||
{/* {isModerator ? (
|
{/* {isModerator ? (
|
||||||
<>
|
<>
|
||||||
change rules
|
change rules
|
||||||
</>
|
</>
|
||||||
) : null} */}
|
) : null} */}
|
||||||
<li
|
<li
|
||||||
onMouseOver={() => {setIsClientRedirectMenuOpen(true)}}
|
onMouseOver={() => {
|
||||||
onMouseLeave={() => {setIsClientRedirectMenuOpen(false)}}>
|
setIsClientRedirectMenuOpen(true);
|
||||||
|
}}
|
||||||
|
onMouseLeave={() => {
|
||||||
|
setIsClientRedirectMenuOpen(false);
|
||||||
|
}}
|
||||||
|
>
|
||||||
View on »
|
View on »
|
||||||
<ul className="dropdown-menu post-menu-catalog"
|
<ul className='dropdown-menu post-menu-catalog' style={{ display: isClientRedirectMenuOpen ? 'block' : 'none' }}>
|
||||||
style={{display: isClientRedirectMenuOpen ? 'block': 'none'}}>
|
<li onClick={() => handleOptionClick('rules')}>
|
||||||
<li onClick={() => handleOptionClick("rules")}>
|
<a href={`https://plebbitapp.eth.limo/#/p/${selectedAddress}`} target='_blank' rel='noreferrer'>
|
||||||
<a
|
Plebbit
|
||||||
href={`https://plebbitapp.eth.limo/#/p/${selectedAddress}`}
|
</a>
|
||||||
target="_blank" rel="noreferrer"
|
|
||||||
>Plebbit</a>
|
|
||||||
</li>
|
</li>
|
||||||
{/* <li onClick={() => handleOptionClick("rules")}>
|
{/* <li onClick={() => handleOptionClick("rules")}>
|
||||||
<a
|
<a
|
||||||
@@ -398,224 +438,275 @@ const Rules = () => {
|
|||||||
target="_blank" rel="noreferrer"
|
target="_blank" rel="noreferrer"
|
||||||
>Seedit</a>
|
>Seedit</a>
|
||||||
</li> */}
|
</li> */}
|
||||||
<li onClick={() => handleOptionClick("rules")}>
|
<li onClick={() => handleOptionClick('rules')}>
|
||||||
<a
|
<a href={`https://plebones.eth.limo/#/p/${selectedAddress}`} target='_blank' rel='noreferrer'>
|
||||||
href={`https://plebones.netlify.app/#/p/${selectedAddress}`}
|
Plebones
|
||||||
target="_blank" rel="noreferrer"
|
</a>
|
||||||
>Plebones</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</PostMenuCatalog>, document.body
|
</PostMenuCatalog>,
|
||||||
|
document.body,
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<div className="custom-paragraph" style={{paddingBottom: '17px'}}>
|
<div className='custom-paragraph' style={{ paddingBottom: '17px' }}>
|
||||||
{subplebbit.address === "plebtoken.eth" ? (
|
{subplebbit.address === 'plebtoken.eth'
|
||||||
plebtokenRules.map((rule, index) => (
|
? plebtokenRules.map((rule, index) => (
|
||||||
<React.Fragment key={index}>
|
<React.Fragment key={index}>
|
||||||
{index + 1}. {rule}
|
{index + 1}. {rule}
|
||||||
<br />
|
<br />
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
))
|
))
|
||||||
) : (
|
: subplebbit.rules?.map((rule, index) => (
|
||||||
subplebbit.rules?.map((rule, index) => (
|
|
||||||
<React.Fragment key={index}>
|
<React.Fragment key={index}>
|
||||||
{index + 1}. {rule}
|
{index + 1}. {rule}
|
||||||
<br />
|
<br />
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
))
|
))}
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="thread-mobile">
|
<div className='thread-mobile'>
|
||||||
<hr />
|
<hr />
|
||||||
<div className="op-container">
|
<div className='op-container'>
|
||||||
<div className="post op op-mobile">
|
<div className='post op op-mobile'>
|
||||||
<div className="post-info-mobile">
|
<div className='post-info-mobile'>
|
||||||
<button key={`mob-pb-`} className="post-menu-button-mobile"
|
<button
|
||||||
ref={el => {
|
key={`mob-pb-`}
|
||||||
threadMenuRefsMobile.current["rules"] = el;
|
className='post-menu-button-mobile'
|
||||||
|
ref={(el) => {
|
||||||
|
threadMenuRefsMobile.current['rules'] = el;
|
||||||
}}
|
}}
|
||||||
onClick={(event) => {
|
onClick={(event) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const rect = threadMenuRefsMobile.current["rules"].getBoundingClientRect();
|
const rect = threadMenuRefsMobile.current['rules'].getBoundingClientRect();
|
||||||
setMobileMenuPosition({ top: rect.top + window.scrollY, left: rect.left });
|
setMobileMenuPosition({ top: rect.top + window.scrollY, left: rect.left });
|
||||||
setOpenMobileMenuCid(prevCid => (prevCid === "rules" ? null : "rules"));
|
setOpenMobileMenuCid((prevCid) => (prevCid === 'rules' ? null : 'rules'));
|
||||||
}}
|
}}
|
||||||
style={{ all: 'unset', cursor: 'pointer' }}
|
style={{ all: 'unset', cursor: 'pointer' }}
|
||||||
>...</button>
|
>
|
||||||
|
...
|
||||||
|
</button>
|
||||||
{createPortal(
|
{createPortal(
|
||||||
<PostMenuMobile selectedStyle={selectedStyle}
|
<PostMenuMobile
|
||||||
ref={el => {postMenuMobileRef.current = el}}
|
selectedStyle={selectedStyle}
|
||||||
|
ref={(el) => {
|
||||||
|
postMenuMobileRef.current = el;
|
||||||
|
}}
|
||||||
onClick={(event) => event.stopPropagation()}
|
onClick={(event) => event.stopPropagation()}
|
||||||
style={{position: "absolute",
|
style={{
|
||||||
display: openMobileMenuCid === "rules" ? "block" : "none",
|
position: 'absolute',
|
||||||
|
display: openMobileMenuCid === 'rules' ? 'block' : 'none',
|
||||||
top: mobileMenuPosition.top + 20,
|
top: mobileMenuPosition.top + 20,
|
||||||
left: mobileMenuPosition.left}}>
|
left: mobileMenuPosition.left,
|
||||||
|
}}
|
||||||
|
>
|
||||||
<ul className={`post-menu-mobile-thread-description`}>
|
<ul className={`post-menu-mobile-thread-description`}>
|
||||||
<a style={{color: 'inherit', textDecoration: 'none'}}
|
<a
|
||||||
|
style={{ color: 'inherit', textDecoration: 'none' }}
|
||||||
href={`https://plebbitapp.eth.limo/#/p/${selectedAddress}`}
|
href={`https://plebbitapp.eth.limo/#/p/${selectedAddress}`}
|
||||||
target="_blank" rel="noreferrer">
|
target='_blank'
|
||||||
<li onClick={() => handleMobileOptionClick("rules")}>
|
rel='noreferrer'
|
||||||
View on plebbit
|
>
|
||||||
</li>
|
<li onClick={() => handleMobileOptionClick('rules')}>View on plebbit</li>
|
||||||
</a>
|
</a>
|
||||||
<a style={{color: 'inherit', textDecoration: 'none'}}
|
<a
|
||||||
href={`https://plebones.netlify.app/#/p/${selectedAddress}`}
|
style={{ color: 'inherit', textDecoration: 'none' }}
|
||||||
target="_blank" rel="noreferrer">
|
href={`https://plebones.eth.limo/#/p/${selectedAddress}`}
|
||||||
<li onClick={() => handleMobileOptionClick("rules")}>
|
target='_blank'
|
||||||
View on plebones
|
rel='noreferrer'
|
||||||
</li>
|
>
|
||||||
|
<li onClick={() => handleMobileOptionClick('rules')}>View on plebones</li>
|
||||||
</a>
|
</a>
|
||||||
</ul>
|
</ul>
|
||||||
</PostMenuMobile>, document.body
|
</PostMenuMobile>,
|
||||||
|
document.body,
|
||||||
)}
|
)}
|
||||||
<span className="name-block-mobile">
|
<span className='name-block-mobile'>
|
||||||
<span className="name-mobile capcode"
|
<span
|
||||||
|
className='name-mobile capcode'
|
||||||
style={{ cursor: 'pointer' }}
|
style={{ cursor: 'pointer' }}
|
||||||
onClick={() => {setIsAdminListOpen(!isAdminListOpen)}}
|
onClick={() => {
|
||||||
>## Board Admins</span>
|
setIsAdminListOpen(!isAdminListOpen);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
## Board Admins
|
||||||
|
</span>
|
||||||
|
|
||||||
<span className="thread-icons-mobile"
|
<span className='thread-icons-mobile' style={{ float: 'right', marginRight: '18px' }}>
|
||||||
style={{float: "right", marginRight: "18px"}}>
|
<img src='assets/sticky.gif' alt='Sticky' title='Sticky' style={{ marginTop: '-1px', marginRight: '2px', imageRendering: 'pixelated' }} />
|
||||||
<img src="assets/sticky.gif" alt="Sticky" title="Sticky" style={{marginTop: "-1px", marginRight: "2px", imageRendering: 'pixelated'}} />
|
|
||||||
|
|
||||||
<img src="assets/closed.gif" alt="Closed" title="Closed" style={{marginTop: "-1px", marginRight: "2px", imageRendering: 'pixelated'}} />
|
<img src='assets/closed.gif' alt='Closed' title='Closed' style={{ marginTop: '-1px', marginRight: '2px', imageRendering: 'pixelated' }} />
|
||||||
</span>
|
</span>
|
||||||
<br />
|
<br />
|
||||||
<span className="subject-mobile"
|
<span className='subject-mobile' style={{ marginBottom: '-15px' }}>
|
||||||
style={{marginBottom: "-15px"}}>Rules</span>
|
Rules
|
||||||
|
</span>
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
<span className="date-time-mobile post-number-mobile">{getDate(subplebbit.createdAt)}</span>
|
<span className='date-time-mobile post-number-mobile'>{getDate(subplebbit.createdAt)}</span>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<blockquote className="post-message-mobile">
|
<blockquote className='post-message-mobile'>
|
||||||
<div className="custom-paragraph">
|
<div className='custom-paragraph'>
|
||||||
{subplebbit.address === "plebtoken.eth" ? (
|
{subplebbit.address === 'plebtoken.eth'
|
||||||
plebtokenRules.map((rule, index) => (
|
? plebtokenRules.map((rule, index) => (
|
||||||
<React.Fragment key={index}>
|
<React.Fragment key={index}>
|
||||||
{index + 1}. {rule}
|
{index + 1}. {rule}
|
||||||
<br />
|
<br />
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
))
|
))
|
||||||
) : (
|
: subplebbit.rules?.map((rule, index) => (
|
||||||
subplebbit.rules?.map((rule, index) => (
|
|
||||||
<React.Fragment key={index}>
|
<React.Fragment key={index}>
|
||||||
{index + 1}. {rule}
|
{index + 1}. {rule}
|
||||||
<br />
|
<br />
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
))
|
))}
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<div className="post-link-mobile">
|
<div className='post-link-mobile'>
|
||||||
<Link to={() => {}} className="button-mobile">View Thread</Link>
|
<Link to={() => {}} className='button-mobile'>
|
||||||
|
View Thread
|
||||||
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
</BoardForm>
|
</BoardForm>
|
||||||
<Footer selectedStyle={selectedStyle}>
|
<Footer selectedStyle={selectedStyle}>
|
||||||
<Break id="break" selectedStyle={selectedStyle} style={{
|
<Break
|
||||||
marginTop: "-36px",
|
id='break'
|
||||||
width: "100%",
|
selectedStyle={selectedStyle}
|
||||||
}} />
|
style={{
|
||||||
<Break selectedStyle={selectedStyle} style={{
|
marginTop: '-36px',
|
||||||
width: "100%",
|
width: '100%',
|
||||||
}} />
|
}}
|
||||||
<span className="style-changer" style={{
|
/>
|
||||||
float: "right",
|
<Break
|
||||||
marginTop: "2px",
|
selectedStyle={selectedStyle}
|
||||||
}}>
|
style={{
|
||||||
Style:
|
width: '100%',
|
||||||
|
}}
|
||||||
<select id="style-selector" onChange={handleStyleChange} value={selectedStyle}>
|
/>
|
||||||
<option value="Yotsuba">Yotsuba</option>
|
<span
|
||||||
<option value="Yotsuba-B">Yotsuba B</option>
|
className='style-changer'
|
||||||
<option value="Futaba">Futaba</option>
|
style={{
|
||||||
<option value="Burichan">Burichan</option>
|
float: 'right',
|
||||||
<option value="Tomorrow">Tomorrow</option>
|
marginTop: '2px',
|
||||||
<option value="Photon">Photon</option>
|
}}
|
||||||
|
>
|
||||||
|
Style:
|
||||||
|
<select id='style-selector' onChange={handleStyleChange} value={selectedStyle}>
|
||||||
|
<option value='Yotsuba'>Yotsuba</option>
|
||||||
|
<option value='Yotsuba-B'>Yotsuba B</option>
|
||||||
|
<option value='Futaba'>Futaba</option>
|
||||||
|
<option value='Burichan'>Burichan</option>
|
||||||
|
<option value='Tomorrow'>Tomorrow</option>
|
||||||
|
<option value='Photon'>Photon</option>
|
||||||
</select>
|
</select>
|
||||||
</span>
|
</span>
|
||||||
<NavBar selectedStyle={selectedStyle} style={{
|
<NavBar
|
||||||
marginTop: "42px",
|
selectedStyle={selectedStyle}
|
||||||
}}>
|
style={{
|
||||||
|
marginTop: '42px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
<>
|
<>
|
||||||
<span className="boardList">
|
<span className='boardList'>
|
||||||
[
|
[
|
||||||
<Link to={`/p/all`} onClick={() => window.scrollTo(0, 0)}>All</Link>
|
<Link to={`/p/all`} onClick={() => window.scrollTo(0, 0)}>
|
||||||
|
All
|
||||||
|
</Link>
|
||||||
/
|
/
|
||||||
<Link to={`/p/subscriptions`} onClick={() => window.scrollTo(0, 0)}>Subscriptions</Link>
|
<Link to={`/p/subscriptions`} onClick={() => window.scrollTo(0, 0)}>
|
||||||
|
Subscriptions
|
||||||
|
</Link>
|
||||||
]
|
]
|
||||||
</span>
|
</span>
|
||||||
{defaultSubplebbits.map((subplebbit, index) => (
|
{defaultSubplebbits.map((subplebbit, index) => (
|
||||||
<span className="boardList" key={`span-${subplebbit.address}`}>
|
<span className='boardList' key={`span-${subplebbit.address}`}>
|
||||||
{index === 0 ? null : "\u00a0"}
|
{index === 0 ? null : '\u00a0'}
|
||||||
<Link to={`/p/${subplebbit.address}`} key={`a-${subplebbit.address}`} onClick={() => {
|
<Link
|
||||||
|
to={`/p/${subplebbit.address}`}
|
||||||
|
key={`a-${subplebbit.address}`}
|
||||||
|
onClick={() => {
|
||||||
setSelectedTitle(subplebbit.title);
|
setSelectedTitle(subplebbit.title);
|
||||||
setSelectedAddress(subplebbit.address);
|
setSelectedAddress(subplebbit.address);
|
||||||
}}
|
}}
|
||||||
>{subplebbit.title ? subplebbit.title : subplebbit.address}</Link>
|
>
|
||||||
{index !== defaultSubplebbits.length - 1 ? " /" : null}
|
{subplebbit.title ? subplebbit.title : subplebbit.address}
|
||||||
|
</Link>
|
||||||
|
{index !== defaultSubplebbits.length - 1 ? ' /' : null}
|
||||||
</span>
|
</span>
|
||||||
))}
|
))}
|
||||||
<span className="nav">
|
<span className='nav'>
|
||||||
[
|
[
|
||||||
<span id="button-span" style={{cursor: 'pointer'}} onClick={
|
<span
|
||||||
() => {
|
id='button-span'
|
||||||
window.electron && window.electron.isElectron ? (
|
style={{ cursor: 'pointer' }}
|
||||||
setIsCreateBoardOpen(true)
|
onClick={() => {
|
||||||
) : (
|
window.electron && window.electron.isElectron
|
||||||
alert(
|
? setIsCreateBoardOpen(true)
|
||||||
'You can create a board with the desktop version of plebchan:\nhttps://github.com/plebbit/plebchan/releases/latest\n\nIf you are comfortable with the command line, use plebbit-cli:\nhttps://github.com/plebbit/plebbit-cli\n\n'
|
: alert(
|
||||||
)
|
'You can create a board with the desktop version of plebchan:\nhttps://github.com/plebbit/plebchan/releases/latest\n\nIf you are comfortable with the command line, use plebbit-cli:\nhttps://github.com/plebbit/plebbit-cli\n\n',
|
||||||
)
|
);
|
||||||
}
|
}}
|
||||||
}>Create Board</span>
|
>
|
||||||
]
|
Create Board
|
||||||
[
|
</span>
|
||||||
<Link to={`/p/${selectedAddress}/rules/settings`} onClick={() => setIsSettingsOpen(true)}>Settings</Link>
|
] [
|
||||||
]
|
<Link to={`/p/${selectedAddress}/rules/settings`} onClick={() => setIsSettingsOpen(true)}>
|
||||||
[
|
Settings
|
||||||
<Link to="/" onClick={() => handleStyleChange({target: {value: "Yotsuba"}}
|
</Link>
|
||||||
)}>Home</Link>
|
] [
|
||||||
|
<Link to='/' onClick={() => handleStyleChange({ target: { value: 'Yotsuba' } })}>
|
||||||
|
Home
|
||||||
|
</Link>
|
||||||
]
|
]
|
||||||
</span>
|
</span>
|
||||||
</>
|
</>
|
||||||
</NavBar>
|
</NavBar>
|
||||||
<div id="version">
|
<div id='version'>
|
||||||
plebchan v{version}{commitRef}. GPL-2.0
|
plebchan v{version}
|
||||||
|
{commitRef}. GPL-2.0
|
||||||
</div>
|
</div>
|
||||||
<div className="footer-links"
|
<div
|
||||||
|
className='footer-links'
|
||||||
style={{
|
style={{
|
||||||
textAlign: "center",
|
textAlign: 'center',
|
||||||
fontSize: "x-small",
|
fontSize: 'x-small',
|
||||||
fontFamily: "arial",
|
fontFamily: 'arial',
|
||||||
marginTop: "5px",
|
marginTop: '5px',
|
||||||
marginBottom: "15px",
|
marginBottom: '15px',
|
||||||
}}>
|
}}
|
||||||
<a style={{textDecoration: 'underline'}} href="https://plebbit.com" target="_blank" rel="noopener noreferrer">About</a>
|
>
|
||||||
|
<a style={{ textDecoration: 'underline' }} href='https://plebbit.com' target='_blank' rel='noopener noreferrer'>
|
||||||
|
About
|
||||||
|
</a>
|
||||||
•
|
•
|
||||||
<a style={{textDecoration: 'underline'}} href="https://github.com/plebbit/plebchan/releases/latest" target="_blank" rel="noopener noreferrer">App</a>
|
<a style={{ textDecoration: 'underline' }} href='https://github.com/plebbit/plebchan/releases/latest' target='_blank' rel='noopener noreferrer'>
|
||||||
|
App
|
||||||
|
</a>
|
||||||
•
|
•
|
||||||
<a style={{textDecoration: 'underline'}} href="https://twitter.com/plebchan_eth" target="_blank" rel="noopener noreferrer">Twitter</a>
|
<a style={{ textDecoration: 'underline' }} href='https://twitter.com/plebchan_eth' target='_blank' rel='noopener noreferrer'>
|
||||||
|
Twitter
|
||||||
|
</a>
|
||||||
•
|
•
|
||||||
<a style={{textDecoration: 'underline'}} href="https://t.me/plebbit" target="_blank" rel="noopener noreferrer">Telegram</a>
|
<a style={{ textDecoration: 'underline' }} href='https://t.me/plebbit' target='_blank' rel='noopener noreferrer'>
|
||||||
|
Telegram
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</Footer>
|
</Footer>
|
||||||
</Container>
|
</Container>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
|
|
||||||
export default Rules;
|
export default Rules;
|
||||||
+1555
-1061
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1444
-1068
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user