Commit graph

352 commits

Author SHA1 Message Date
joshua stein 6dcf35dc25 my karma means nothing 2015-07-31 22:43:16 -05:00
Owen Marshall 8fae63929d Truncate at end-of-string, not at every EOL 2015-07-31 09:03:10 -04:00
joshua stein 09f65774c2 Story#description_or_story_cache: handle truncation properly 2015-07-30 18:12:57 -05:00
joshua stein 81b3be6165 add setting to show inline story previews in story list
Closes #148
2015-07-30 17:56:09 -05:00
joshua stein 0d61e0cf68 add "i am the author of this" checkbox for stories
Highlights username in a different color and says "authored by"
instead of just "by".

Move html class printing into a method in Story to use in the future
for friends, admin posts, etc.

Closes #171
2015-07-30 17:15:48 -05:00
joshua stein 8282181e49 Story: shrink hotness window to 24 hours 2015-07-24 00:51:11 -05:00
joshua stein 55bab8003d Story: validate url length according to db field length 2015-07-24 00:51:11 -05:00
joshua stein cbc1c50cd2 add user banning/unbanning from user view page 2015-07-24 00:51:11 -05:00
joshua stein 38ac6a4c3f Story: halve comment score weights in hotness 2015-07-24 00:51:11 -05:00
joshua stein 5989e9c808 Story: fix up bogus chars in title before saving, only 160 for now 2015-07-24 00:51:11 -05:00
joshua stein db63d22b83 use identicon for blank gravatars, makes conversations easier to follow 2015-07-24 00:51:11 -05:00
joshua stein 6cc5f196bf Tag: remove accessible_to, use valid_for?
They do the same thing now but a scope might be too limited in the
future so just pick one now.

Closes #100
2015-07-24 00:51:11 -05:00
joshua stein 434ad81752 Story: do url validation case insensitively 2015-07-24 00:51:10 -05:00
joshua stein 8f8ad57135 export a json version of user page, include karma and about text 2015-04-09 21:05:50 -05:00
joshua stein 88602f7535 StoriesPaginator: make per_page configurable 2015-04-03 12:58:14 -05:00
joshua stein fdf892e7f9 move user unread message count into a scope 2015-04-03 12:57:12 -05:00
joshua stein e9f005d83b User: a few more reserved usernames 2015-04-01 01:02:01 -05:00
joshua stein e974083413 Story: inactive tags that are marked for destruction are ok 2015-03-19 12:10:52 -05:00
joshua stein 26f17ae928 User: add some banned usernames from a long-ago comment by @kevinburke 2015-03-19 12:10:18 -05:00
joshua stein d286eab325 add option to show user avatars on stories and comments
just because
2015-03-12 23:23:15 -05:00
joshua stein 6695480fdb when auto-detecting story titles, try to find a canonical url and use it
should remedy duplicate stories being submitted under all of their
stupid blogspot.* domains instead of the canonical url represented
in the <link> tag
2015-03-10 17:41:40 -05:00
joshua stein 966579e596 Search: more sphinx chars to escape 2015-03-10 17:07:15 -05:00
joshua stein fd00205625 for admins, show some private info about users in user profiles 2015-02-17 11:47:27 -06:00
joshua stein 976eb522e8 Hat: provide a destroy method that can log a moderation 2015-02-17 11:47:26 -06:00
joshua stein 7f3adc0e9d fix some fallout from previous 2015-02-13 11:26:28 -06:00
joshua stein f9b309d342 separate story hiding from voting
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.
2015-02-11 11:37:03 -06:00
joshua stein 7d15b5db6d tldr, didn't comment 2015-02-09 23:11:25 -06:00
joshua stein 975e35d006 Search: escape @, it has special meaning to sphinx 2015-02-05 09:55:41 -06:00
joshua stein 8771afc5f5 try a bit harder at finding a submitted story's real title
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.
2015-02-03 11:20:07 -06:00
joshua stein a16150d8a5 allow searching stories by domain, link domain in story list to such a query 2015-01-29 10:16:46 -06:00
joshua stein 00d347c4f4 consolidate sql fragment to cast story/comment score 2015-01-28 15:02:40 -06:00
joshua stein bf928cf62b Story: take hotness window back down to 36, 48 is a bit stale 2015-01-27 12:14:26 -06:00
joshua stein 31df8973a8 Pushover: switch to subscriptions
users.pushover_device and users.pushover_sound columns can be
dropped once migrated
2015-01-15 13:23:31 -06:00
joshua stein f1cfe29b1f fix initial story hotness
Initial story hotness was zero, which excluded stories with no other
upvotes from the homepage.  Before creating, define initial hotness
to something.

Since this now makes very new stories show up on the homepage right
away, expand the window back to 48 hours.

This requires a Story.recalculate_all_hotnesses! to properly sort
things.
2015-01-13 13:00:55 -06:00
joshua stein 4b768e2f42 Search: clamp results to Sphinx's max_matches
Otherwise this will annoyingly raise an exception when fetching
results if offset exceeds max_matches
2015-01-11 12:59:41 -06:00
joshua stein 88709b5d04 move story tagging sorting into a function 2015-01-06 17:31:44 -06:00
joshua stein 9c73c87d28 add story cache showing for manually-specified unavailable stories 2015-01-06 17:31:09 -06:00
joshua stein 9f5e04bbba use _path for most things instead of _url
Instead of hard-coding the scheme and host everywhere, use _path
methods to show relative URLs.

Except that our previous setting of
Rails.application.routes.default_url_options in
config.after_initialize made this moot because Rails inserts that
host into all _path helpers for some reason.  So revert that
setting.

But then anything that wants an absolute URL doesn't know the
hostname and the root_url helper throws an exception.  So make a
Rails.application.root_url shortcut to pass the per-app settings in
Rails.application to root_url.

Now we can just use _path helpers most places but still use _url
ones where we need them, such as in RSS views and e-mail templates.
2015-01-02 17:02:55 -06:00
joshua stein c151fbeeb8 better tag hotness mod calculation 2015-01-01 10:25:14 -06:00
joshua stein 1cc16ecfbf tweak code formatting 2014-12-15 15:06:53 -06:00
joshua stein 606f5c9849 experiment with factoring comment scores into story hotness
might keep an active story alive on the front page and bury a story
with a "comment graveyard"
2014-12-15 15:06:53 -06:00
joshua stein 5c1cc0ae38 Hat: if link isn't a url, don't href to it (probably shouldn't call it link then) 2014-12-15 15:06:53 -06:00
joshua stein ddb9215aa0 log a moderation when hats are granted, since we're open and all that 2014-11-15 09:52:29 -06:00
joshua stein 31d4e97858 implement hats
https://lobste.rs/s/bkeYe9/about_lobsters/comments/ZD2tL3#c_ZD2tL3
2014-11-14 14:12:29 -06:00
joshua stein 5b94406640 Comment: include page anchor in urls 2014-11-14 12:46:09 -06:00
joshua stein 9e8b89be1c cast story.{upvotes,downvotes} to signed on mysql, integer on postgres
old mysql doesn't support 'cast(1 as integer)', but new/mariadb does

postgres doesn't support 'cast(1 as signed)'

should fix #145
2014-10-06 14:07:53 -05:00
joshua stein 09bd0026d3 ignore a story's submitter's comments when calculating hotness 2014-09-16 10:53:25 -05:00
joshua stein dfe6db4849 revert 85cb7c20, give up on planet rss aggregation 2014-08-31 20:35:41 -05:00
joshua stein 962b7e8d59 add per-tag story hotness modifiers 2014-08-31 20:27:54 -05:00
joshua stein e252d2d66e StoryRepository: positive_ranked should end at -1 2014-08-25 17:57:26 -05:00
joshua stein e3f6a4edd8 Merge pull request #163 from walle/upvoted_fix
add /upvoted page to show a logged-in user's upvoted stories
2014-08-17 19:09:04 -05:00
joshua stein 13de40df34 order newest stories by id, not created_at
same order (most likely) but id has an index on it and created_at
will need a full table scan
2014-08-17 18:58:45 -05:00
Fredrik Wallgren 2ffe322f64 Rename by_user to newest_by_user and sort accordingly. 2014-08-17 14:18:23 +02:00
Fredrik Wallgren ab8f8f3a72 Add upvoted route.
Upvoted route shows all stories a logged in user have upvoted
in reverse chronological order, latest upvote first.
It is not shown in the gui, but reachable at /upvoted.
2014-08-16 00:27:18 +02:00
joshua stein 85cb7c2057 first stab at planet rss aggregation
could probably use a prettier layout and auto-posting a weblog url
to the main site (carrying tags)
2014-08-03 22:07:57 -05:00
joshua stein 8a3b133d87 style/wrapping 2014-08-03 22:07:56 -05:00
Andrey Chernih fc52db5424 Refactor HomeController 2014-07-09 22:25:39 +04:00
joshua stein 270939b5a4 Story: return true from recalculate_all_hotnesses!
this is usually called from the console, and true is better than a
giant array of every Story object
2014-07-02 10:09:03 -05:00
joshua stein 78f4da6699 Search: escape " when sending to sphinx 2014-06-24 20:08:15 -05:00
joshua stein 023f8282ea as noted earlier, URI.parse is not very lenient
trying to use it in Story#domain but not in validate can ruin things
2014-06-05 07:54:48 -05:00
joshua stein 56774913c0 Story: experiment with making comment counts affect hotness 2014-05-06 21:32:17 -05:00
joshua stein aab34a9936 embed timestamp in password reset token, only work for 24 hours 2014-04-15 00:46:14 -05:00
joshua stein 73b8df5eb7 implement story merging
closes #137
2014-04-08 17:51:12 -05:00
joshua stein 9848cf5e47 Story: export tags in json view
closes #143
2014-04-03 10:23:37 -05:00
joshua stein eec85db1f8 bump up max edit times for stories and comments
not really any harm in letting people correct mistakes
2014-04-02 13:14:08 -05:00
joshua stein 7fb75af7fe simplify Story.find_similar_by_url arel, only pull undeleted stories 2014-03-28 10:45:01 -05:00
joshua stein bb9c9c5353 don't include hiders in story vote summary 2014-03-24 10:26:07 -05:00
joshua stein 6f30d99581 shrink story hotness window to 24 hours 2014-03-24 10:26:07 -05:00
joshua stein c09542a80a enforce a maximum username length of 25 2014-03-24 10:26:07 -05:00
joshua stein 7f9c227ed0 bring back story downvoting, remove low quality option
story hiding is still here, so hopefully this will result in less
bogus story downvotes
2014-03-24 10:26:06 -05:00
joshua stein 00eda60fdc Story#is_downvotable? is gone 2014-03-14 18:55:46 -05:00
joshua stein 8b60e5fd63 show story hider count on story detail page 2014-03-13 10:51:12 -05:00
joshua stein efe1353b87 update a user's unread message count after bulk-delete
only count messages that are both unread and undeleted
2014-03-06 15:27:13 -06:00
joshua stein 285fd82c16 check story tag permissions on editor, not creator 2014-03-06 13:54:30 -06:00
joshua stein 9535b05490 remove story downvoting, add story hiding
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
2014-03-03 17:20:21 -06:00
joshua stein 99c551cbfe move initial upvote of submitted story to Story model 2014-03-03 17:13:00 -06:00
joshua stein 888c80eb83 reserve "moderator" and "moderators" usernames 2014-02-21 11:41:47 -06:00
joshua stein 3a60d3abba show story downvoting usernames to moderators to detect problems
such as voting rings or users downvoting things instead of filtering
tags
2014-02-21 11:29:19 -06:00
joshua stein 95202f21b2 add Tag.active scope to deprecate tags without removing them 2014-02-21 10:57:30 -06:00
joshua stein 67fc2cc75c set maximum time during which comments and stories can be downvoted
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
2014-02-17 12:08:01 -06:00
joshua stein 9d16898477 User: move "new account" age into constant 2014-02-17 10:09:08 -06:00
joshua stein 1d5b004a36 Story: alpha sort methods, no functional changes 2014-02-17 10:07:36 -06:00
joshua stein 9918660ab4 Comment: alpha sort methods, no functional changes 2014-02-17 10:01:44 -06:00
Serge Paquet 519427586a use Rails4-style strong parameters mass assignment protection 2014-02-02 15:41:38 -05:00
joshua stein 20cf2bab65 show how many stories have been tagged with each on filters page
closes #93
closes #114
2014-01-24 13:53:10 -06:00
joshua stein fe83a5b780 use false instead of 0 for boolean column in where clause
fixes #113
2014-01-21 20:53:29 -06:00
joshua stein 71eeb6c7d2 be a good pushover user and let the user specify a sound
- move pushover particulars into User model
- Pushover class rescues errors, don't need to do it from User
2014-01-21 01:21:02 -06:00
joshua stein 00f8e9c189 use one of gravatar's default avatars rather than our own 2014-01-21 00:22:40 -06:00
joshua stein 3c7393c6a3 give tedu his karma back
fix bug introduced in 3757b279 that gave comment vote karma to the
voter rather than the commenter
2014-01-20 20:22:45 -06:00
joshua stein 27caa0a7a6 Merge pull request #106 from srgpqt/recent_threads
fix User#recent_threads for postgresql
2014-01-20 17:27:03 -08:00
Serge Paquet 79b64c3883 use standard create/update comment routes 2014-01-20 16:52:19 -05:00
Serge Paquet 41c9dfad5d fix DOM structure when replying to or updating comments 2014-01-20 16:52:19 -05:00
Serge Paquet 577ce2307b fix User#recent_threads for postgresql 2014-01-16 21:33:00 -05:00
joshua stein dd860f06e3 also escape ~ char before sending to sphinx 2014-01-14 21:53:46 -06:00
Serge Paquet d74a2c448f add postgresql support 2014-01-14 21:42:27 -05:00
joshua stein 5f6c13b26b Merge pull request #98 from srgpqt/master
remove redundant "story" variable in comment templates
2014-01-14 18:34:07 -08:00
joshua stein be2c706c06 fix Tag.accessible_to to allow moderators to use privileged tags 2014-01-14 11:39:56 -06:00
joshua stein e12d91cd43 allow users to delete their own accounts
not much can actually be deleted, but it can be put into a deleted
state
2014-01-13 10:12:17 -06:00
Serge Paquet aabe4ceed7 remove redundant "story" variable in comment templates 2014-01-13 02:11:34 -05:00
joshua stein 1ef58d6496 search: fix busted scope introduced in sphinx update 2014-01-13 00:59:37 -06:00
joshua stein 65a9a77104 Merge pull request #92 from srgpqt/filters
simplify and optimize Filters controller and template
2014-01-12 22:34:09 -08:00
joshua stein 4cfa2dae27 Merge pull request #86 from srgpqt/master
refactor Comment#ordered_for_story_or_thread_for_user method
2014-01-12 22:30:27 -08:00
joshua stein f1f6b3c7e0 alert the user when submitting a long-ago-submitted story
show the user a link to the previous story and let them know they
can submit it again if they want to (just by submitting the form
again)
2014-01-13 00:10:31 -06:00
joshua stein 22b77573a5 prevent new users from downvoting
don't show downvote arrows for logged-out and new users

color comments from new users in green like in the user tree,
and banned users in gray
2014-01-12 23:17:09 -06:00
joshua stein 0989d6b30b also log a moderation when a user is banned 2014-01-12 19:22:08 -06:00
joshua stein 287be48187 add stuff to deal with banning users 2014-01-12 15:09:32 -06:00
joshua stein 68a1f02a1c name /u/:username route 2014-01-12 14:22:47 -06:00
joshua stein 7abb4636dd reduce access required for privileged tags to just moderator 2014-01-12 13:28:07 -06:00
Serge Paquet 2c906efa7e simplify and optimize Filters controller and template 2014-01-09 01:44:03 -05:00
Serge Paquet e2c266af4b simplify Comment#arrange_for_user method 2014-01-08 23:48:24 -05:00
Serge Paquet 5988038071 make Comment#ordered_for_story_or_thread_for_user work on query scope 2014-01-08 23:48:24 -05:00
joshua stein d578482e3b move story comment counts out of keystore
it would be nice to use AR's built-in counter cache, but the
comments count has to reflect something custom so stick with what
was there
2014-01-08 22:20:56 -06:00
joshua stein 2f824a73a3 shrink story hotness window, things are moving faster now 2014-01-08 20:42:25 -06:00
joshua stein 40e4c10e26 fix busted PM e-mail notifications
do e-mail and pushover deliveries separately, catch and log errors
from each

closes #90
2014-01-08 20:42:24 -06:00
joshua stein 345388079e Merge pull request #83 from srgpqt/sphinx
upgrade thinking-sphinx gem; requires sphinx >= 2.0.6
2014-01-07 10:17:31 -08:00
joshua stein c576f86e4d in moderation auto-message, tell the user it's automated 2014-01-07 11:42:21 -06:00
joshua stein 1452e1c34d rip out default filtered tags 2014-01-07 11:42:21 -06:00
joshua stein ce495470c6 double max comment edit time to 90 minutes 2014-01-07 11:42:20 -06:00
Serge Paquet 709b0bff98 upgrade thinking-sphinx gem 2014-01-07 05:52:29 -05:00
Serge Paquet a46194d1be add Search#page_count method 2014-01-02 12:16:14 -05:00
Serge Paquet 3757b279ff add karma column to users table 2014-01-01 16:03:01 -05:00
Serge Paquet 9b0294c471 upgrade to rails v4.0.2 2013-12-30 17:40:52 -05:00
Serge Paquet b42189f45b replace some raw sql with database-agnostic activerecord queries 2013-12-30 16:23:59 -05:00
joshua stein 1e7dc17b56 set hotness with score+1 so a single downvote doesn't kill it 2013-12-28 11:52:52 -06:00
joshua stein 4fe74ab2e4 add "low quality" story downvote option, reorder 2013-12-28 11:52:52 -06:00
Serge Paquet 8fbf76b484 use activerecord query interface instead of deprecated finder methods 2013-12-25 16:43:50 -05:00
joshua stein c8e5aa3cac sphinx casts integers to unsigned, screwing up score attributes
cast them as bigints

closes #67
2013-12-19 16:04:51 -06:00
joshua stein c6191da912 InvitationRequest: require url (memo) for invitations
otherwise validating requests is kind of difficult
2013-12-02 10:44:36 -06:00
joshua stein 4914366ffe auto link invitiation request memos 2013-10-24 11:16:07 -05:00
joshua stein 66f433176a add an invitiation request queue
the user tree is pretty big to look through now, so let users submit
a request for an invitation, which logged-in users can browse and
instantly send invites to
2013-10-18 15:49:20 -05:00
joshua stein 249dd85ec3 allow non-logged-in users to define tag filters
when not logged in, store the filters in a long-lasting cookie and
do not cache the home page

for that one guy on hacker news that complained about lobste.rs not
having this
2013-08-05 02:19:55 -05:00
joshua stein dbc2e40684 move tag css class building to Tag model
add a tag_is_media class to tags with that type, use that for
matching in application.css instead
2013-08-05 01:02:48 -05:00
joshua stein 5c0dad2c4a strip spaces from urls as they are assigned 2013-07-19 22:07:03 -05:00
joshua stein ccb8094da1 change some before_create's to before_validation, :on => :create
random tokens need to be filled in before validation, otherwise the
validation is just checking a blank value
2013-07-19 22:05:00 -05:00
joshua stein eeda7668b6 on user pages, show their most commonly used tag 2013-07-01 15:53:43 -05:00
joshua stein 301fc79268 alpha user methods 2013-07-01 15:53:43 -05:00
joshua stein a471eb180a don't hardcode "Lobsters" and "lobste.rs" everywhere, use Rails.application.{name,domain} 2013-06-30 01:50:23 -05:00
joshua stein 2cdd385126 add front-end code to allow users to toggle mailing list reception 2013-06-30 00:54:03 -05:00
joshua stein 0325b026c1 rss_token and mailing_list_token have to be set before create, duh 2013-06-30 00:54:03 -05:00
joshua stein 7e0fc989d1 move countinual comment logging to model
comments can come in from other places than the controller now
2013-06-30 00:54:02 -05:00
joshua stein fd41bfa566 start on mailing list interface 2013-06-30 00:54:02 -05:00
joshua stein ed512cc065 move comment thread_id generation to Comment 2013-06-30 00:54:02 -05:00
joshua stein 7ff7b676e5 use cast() magic when passing score to sphinx
fixes problem with mysql/mariadb 5.5
2013-06-30 00:54:02 -05:00
joshua stein 78603d8349 unique mailing list tokens for everyone! 2013-06-30 00:54:01 -05:00
joshua stein b641d0232d sort of merge cache branch but don't do anything automatically
allow manual caching of story text using diffbot, if an api key is
configured and Story#fetch_story_cache! is called
2013-06-30 00:54:01 -05:00
joshua stein 68690647ab user newer-style validation methods, add banned usernames 2013-06-21 20:37:15 -05:00
joshua stein c9571dabaf back out 9ece666 removing utf8mb4 hacks, no longer needed 2013-05-26 12:32:54 -05:00
joshua stein 0ff4ef2484 Tag has_many taggings, and delete them on destroy 2013-03-30 11:37:38 -05:00
joshua stein 5e357f5684 allow moderators to edit story urls if they ever had one 2013-03-26 12:23:47 -05:00
joshua stein f585d07aa8 don't do @username expansion in user profile about section
most users are probably putting @username to mean a twitter profile,
not a link to a lobste.rs profile
2013-03-23 21:05:13 -05:00