Implemented news page, wrote moderation post
This commit is contained in:
@@ -19,6 +19,7 @@ let excluded = [ //messages that should not be logged
|
|||||||
|
|
||||||
'Combat log sent',
|
'Combat log sent',
|
||||||
'News sent',
|
'News sent',
|
||||||
|
'News sent (singular)',
|
||||||
|
|
||||||
'Can\'t train while attacking',
|
'Can\'t train while attacking',
|
||||||
'Can\'t untrain while attacking',
|
'Can\'t untrain while attacking',
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ Minor
|
|||||||
|
|
||||||
* Implement game ladder sorting.
|
* Implement game ladder sorting.
|
||||||
* Write unit tests (ensure that the game doesn't break from an update).
|
* Write unit tests (ensure that the game doesn't break from an update).
|
||||||
|
* Implement banning mechanism.
|
||||||
|
* Implement post scrolling for news page.
|
||||||
|
|
||||||
Patch
|
Patch
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
Moderation Of Usernames
|
||||||
|
---
|
||||||
|
_5 June 2019_
|
||||||
|
|
||||||
|
Let's talk about something serious: user [butthole69](/profile?username=butthole69). More importantly, their cheeky (pun intended) username.
|
||||||
|
|
||||||
|
Now, I don't mind this name in particular, although some websites might outright ban him, and other users with similarly creative names.
|
||||||
|
|
||||||
|
However, I will take exception to any usernames that are outright hurtful, attack any group or individual, or deliberately cross a line from funny or eye-rolling to offensive. This website is my house, and you are guests here; please remember that.
|
||||||
|
|
||||||
|
One of the items on my wishlist is a request from a fan - in game chat. This requires considerably more moderation than just usernames, so if the community can't be civil with just usernames, then I don't see any way that such a feature could be implemented in future.
|
||||||
|
|
||||||
|
If you feel something breeches these rules, I can most easily be reached via my discord server here: [KR Game Studios](https://discord.gg/FQmz8TN). My username is Ratstail91.
|
||||||
|
|
||||||
|
Thanks to butthole69 for bringing this topic to my attention, even if inadvertantly.
|
||||||
|
|
||||||
+2
-2
@@ -69,12 +69,12 @@ app.use('/styles', express.static(path.resolve(__dirname + '/../public/styles'))
|
|||||||
|
|
||||||
//the app file(s)
|
//the app file(s)
|
||||||
app.get('/*app.bundle.js', (req, res) => {
|
app.get('/*app.bundle.js', (req, res) => {
|
||||||
res.sendFile(path.resolve(`${__dirname}/../public/${req.originalUrl}`));
|
res.sendFile(path.resolve(`${__dirname}/../public/${req.originalUrl.split('/').pop()}`));
|
||||||
});
|
});
|
||||||
|
|
||||||
//fallback
|
//fallback
|
||||||
app.get('*', (req, res) => {
|
app.get('*', (req, res) => {
|
||||||
res.sendFile(path.resolve(__dirname + '/../public/index.html'));
|
res.sendFile(path.resolve(__dirname + '/../public/index.html'));
|
||||||
});
|
});
|
||||||
|
|
||||||
//startup
|
//startup
|
||||||
|
|||||||
+18
-1
@@ -11,6 +11,23 @@ const newsRequest = () => (req, res) => {
|
|||||||
let fpath = path.join(__dirname, '..', 'public', 'news');
|
let fpath = path.join(__dirname, '..', 'public', 'news');
|
||||||
let fileNames = fs.readdirSync(fpath);
|
let fileNames = fs.readdirSync(fpath);
|
||||||
|
|
||||||
|
//if it's one specific post
|
||||||
|
if (req.body.postId) {
|
||||||
|
if (!fileNames.includes(req.body.postId)) {
|
||||||
|
res.status(404).write('File Not Found');
|
||||||
|
res.end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let json = {};
|
||||||
|
json[req.body.postId] = fs.readFileSync(path.join(fpath, req.body.postId), 'utf8');
|
||||||
|
res.status(200).json(json);
|
||||||
|
res.end();
|
||||||
|
|
||||||
|
log('News sent (singular)', req.body.postId, JSON.stringify(json));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//set the maximum
|
//set the maximum
|
||||||
let max = parseInt(req.body.length) || 99;
|
let max = parseInt(req.body.length) || 99;
|
||||||
if (isNaN(max) || max > fileNames.length) {
|
if (isNaN(max) || max > fileNames.length) {
|
||||||
@@ -26,7 +43,7 @@ const newsRequest = () => (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//actually send the data
|
//actually send the data
|
||||||
res.json(json);
|
res.status(200).json(json);
|
||||||
res.end();
|
res.end();
|
||||||
|
|
||||||
log('News sent', max, fileNames, JSON.stringify(json));
|
log('News sent', max, fileNames, JSON.stringify(json));
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ export default class App extends React.Component {
|
|||||||
|
|
||||||
<LazyRoute path='/tasklist' component={() => import('./pages/task_list.jsx')} />
|
<LazyRoute path='/tasklist' component={() => import('./pages/task_list.jsx')} />
|
||||||
<LazyRoute path='/patronlist' component={() => import('./pages/patron_list.jsx')} />
|
<LazyRoute path='/patronlist' component={() => import('./pages/patron_list.jsx')} />
|
||||||
|
<LazyRoute path='/news/:postId' component={() => import('./pages/news.jsx')} />
|
||||||
|
|
||||||
<LazyRoute path='*' component={() => import('./pages/page_not_found.jsx')} />
|
<LazyRoute path='*' component={() => import('./pages/page_not_found.jsx')} />
|
||||||
</Switch>
|
</Switch>
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
//panels
|
||||||
|
import CommonLinks from '../panels/common_links.jsx';
|
||||||
|
import NewsPanel from '../panels/news.jsx';
|
||||||
|
|
||||||
|
class News extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.state = {
|
||||||
|
warning: '', //TODO: unified warning?
|
||||||
|
fetch: null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidUpdate(prevProps, prevState, snapshot) {
|
||||||
|
this.state.fetch();
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
let warningStyle = {
|
||||||
|
display: this.state.warning.length > 0 ? 'flex' : 'none'
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className='page'>
|
||||||
|
<div className='sidePanelPage'>
|
||||||
|
<div className='sidePanel'>
|
||||||
|
<CommonLinks />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className='mainPanel'>
|
||||||
|
<div className='warning' style={warningStyle}>
|
||||||
|
<p>{this.state.warning}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<NewsPanel
|
||||||
|
setWarning={this.setWarning.bind(this)}
|
||||||
|
getFetch={ (fn) => this.setState({ fetch: fn }) }
|
||||||
|
postId={this.props.match.params.postId}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
setWarning(s) {
|
||||||
|
this.setState({ warning: s });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default News;
|
||||||
@@ -31,7 +31,10 @@ class Signup extends React.Component {
|
|||||||
<div className='page constrained'>
|
<div className='page constrained'>
|
||||||
<Panel />
|
<Panel />
|
||||||
<Link to='/' className='centered'>Return Home</Link>
|
<Link to='/' className='centered'>Return Home</Link>
|
||||||
|
<div className='break' />
|
||||||
<p className='centered'>Remember to verify your email!</p>
|
<p className='centered'>Remember to verify your email!</p>
|
||||||
|
<div className='break' />
|
||||||
|
<p className='centered'>See the recent news post on<br /><Link to='/news/2019-06-05-01.md'>Moderation Of Usernames</Link>.</p>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class News extends React.Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (props.getFetch) {
|
if (props.getFetch) {
|
||||||
props.getFetch( () => this.sendRequest('/newsrequest', {length: this.props.length || 10}) );
|
props.getFetch( () => this.sendRequest('/newsrequest', {length: this.props.length || 10, postId: this.props.postId}) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user