A story downvote is considered a flag, just meaning the story has
problems and not necessarily that the user wants to ignore it. By
moving hiding out of Vote and into a new HiddenStory model, a user
can now both downvote/flag and hide separately, or just one or the
other.
Ignore the title presented by the user unless we couldn't find
anything, but start out by fetching the URL and trying some <meta>
tags first, then <title>, then use the title the user brought.
stories should either be reported for spam (coming later), upvoted,
or left alone rather than being downvoted for being uninteresting.
since users don't like leaving uninteresting things alone, they can
now hide stories from their view without affecting the story's
score.
hiding is implemented as a Vote with its vote set to 0 and the
reason set to "H"
add a /hidden url which shows all of a user's hidden stories
while i'm here, simplify Vote guts and add some tests to make sure
all the flip-flopping stuff works right
always allow a user to "unvote" if they're previously downvoted, but
after a certain number of days, don't accept new downvotes
there isn't really any benefit in downvoting old stuff that is
already off the front pages or on a dead comment thread, other than
to maliciously strip karma for particular users
this is already done after submitting, which turns it into an
upvote, but now it will catch it when hitting the page from the
bookmarklet so the user doesn't have to fill out tags and stuff
first just to find out it's already submitted.
since this requires no confirmation, don't count it as an upvote
automatically, just redirect to the story page
- add users.is_moderator and look at that for most things, not
is_admin
- make default user in readme be a moderator
- log moderator actions in story edits, comment
deletions/undeletions (and later, user disabling).
- remove ability for moderators to edit comments, there's really no
reason to.