Commit Graph

319 Commits

Author SHA1 Message Date
Toby Zerner
41ecfa348d Performance improvements 2015-05-21 06:49:07 +09:30
Toby Zerner
3c7078b423 New user activity feed API.
Originally the user activity feed was implemented using UNIONs. I was
looking at make an API to add activity “sources”, or extra UNION
queries (select from posts, mentions, etc.) but quickly realised that
this is too slow and there’s no way to make it scale.

So I’ve implemented an API which is very similar to how notifications
work (see previous commit). The `activity` table is an aggregation of
stuff that happens, and it’s kept in sync by an ActivitySyncer which is
used whenever a post it created/edited/deleted, a user is
mentioned/unmentioned, etc.

Again, the API is very simple (see Core\Activity\PostedActivity +
Core\Handlers\Events\UserActivitySyncer)
2015-05-20 12:30:27 +09:30
Toby Zerner
98b3d0f89e Simplify and improve notifications API.
It turns out that the idea of “sending” a notification is flawed. (What
happens if the notification subject is deleted shortly after? The
notified user would end up with a dud notification which would be
confusing. What about if a post is edited to mention an extra user? If
you sent out notifications, the users who’ve already been mentioned
would get a duplicate notification.)

Instead, I’ve introduced the idea of notification “syncing”. Whenever a
change is made to a piece of data (e.g. a post is created, edited, or
deleted), you make a common notification and “sync” it to a set of
users. The users who’ve received this notification before won’t get it
again. It will be sent out to new users, and hidden from users who’ve
received it before but are no longer recipients (e.g. users who’ve been
“unmentioned” in a post).

To keep track of this, we use the existing notifications database
table, with an added `is_deleted` column. The syncing/diffing is
handled all behind the scenes; the API is extremely simple (see
Core\Notifications\DiscussionRenamedNotification +
Core\Events\Handlers\DiscussionRenamedNotifier)
2015-05-20 12:24:01 +09:30
Toby Zerner
03b47c3591 Prevent moment deprecation warning 2015-05-19 10:12:18 +09:30
Toby Zerner
f35fe5d0e2 Actually implement persistent avatar removal in the front-end 2015-05-19 09:27:04 +09:30
Toby Zerner
5fff4791f8 Disable composer textarea before it has fully slid up
Prevents early focusing of the textarea while it is still off the edge
of the viewport, which was causing scroll position to jump
2015-05-19 09:17:48 +09:30
Toby Zerner
0dda55d06a GitHub for Mac sucks, why does it leave out a file sometimes? 2015-05-18 18:50:43 +09:30
Toby Zerner
9135749bb4 Rename JS sub-components so that descriptors are before the noun, not after
To be consistent with the naming in PHP world.

e.g. ReplyComposer instead of ComposerReply
2015-05-18 18:50:24 +09:30
Toby Zerner
1b4b03356a Better API error handling 2015-05-18 18:13:16 +09:30
Toby Zerner
e879a65a0c Show composer after discussion is reloaded following login 2015-05-18 15:38:19 +09:30
Toby Zerner
8cba7ad3f2 Clicking on an index nav item should always refresh the discussion list 2015-05-18 15:27:39 +09:30
Toby Zerner
4c3712f9b0 Refresh discussion after logging in. Fixes #68 2015-05-18 15:07:04 +09:30
Toby Zerner
cfd6873461 Only allow user profile to be edited if user has permission. Fixes #72 2015-05-18 14:58:59 +09:30
Toby Zerner
e4b15d72da Make avatar edit menu extensible 2015-05-18 14:58:23 +09:30
Toby Zerner
4534d8ddda Fix broken login/signup links
They’re still broken, hoping that
https://github.com/babel/babel/issues/1150#issuecomment-102881157 will
fix
2015-05-18 14:58:08 +09:30
Toby Zerner
9d8afce204 Don't affix the sidebar if it is taller than the viewport. fixes #79 2015-05-18 14:47:08 +09:30
Toby Zerner
3462dd68d2 Set document.title on every page 2015-05-18 14:28:15 +09:30
Toby Zerner
d904efb556 Actually fade out post when it is being edited 2015-05-18 14:27:29 +09:30
Toby Zerner
7f48a98af8 Make discussion edit permission specific to renaming 2015-05-18 12:34:03 +09:30
Toby Zerner
895fad928d Fix broken composer extensibility 2015-05-18 10:55:07 +09:30
Toby Zerner
e1a96fc284 Oops duplicate method name 2015-05-18 10:48:48 +09:30
Toby Zerner
aa2bc23039 Drastically improve how the composer looks and behaves
- New, cleaner, more prominent look
- Make it statically positioned down the bottom on mobile, so you can
still scroll up to look at posts
- Fix some bugs with animation, jumping between views
2015-05-18 10:40:14 +09:30
Toby Zerner
e6362a222e Fix sometimes trying to jump to NaN in the stream 2015-05-18 10:37:47 +09:30
Toby Zerner
0a3daee326 Add a space between avatar/username for better display on mobile 2015-05-18 10:37:24 +09:30
Toby Zerner
39437c86bb Minimise composer when exiting a page, rather than entering it 2015-05-18 10:37:07 +09:30
Toby Zerner
a8a2596228 Properly initialise subtree retainers 2015-05-18 10:35:12 +09:30
Toby Zerner
2820b76c9b Make discussion list includes extensible 2015-05-14 23:10:11 +09:30
Toby Zerner
fe81f71d73 Note for the future 2015-05-14 22:41:08 +09:30
Toby Zerner
d96da61b1b New look for notifications 2015-05-14 22:41:08 +09:30
Toby Zerner
3aab626b22 Add pulsate/flash animations for drawing attention to posts 2015-05-14 22:41:07 +09:30
Toby Zerner
be6b620457 Transform post time into a date 2015-05-14 22:41:06 +09:30
Toby Zerner
bb04d91b08 Add helper function for punctuating a list
e.g. [1,2,3] ⇒ [1, ‘, ‘, 2, ‘, and’, 3]
2015-05-14 22:41:06 +09:30
Toby Zerner
28aa7ed62f Add methods for doing stuff in text editor
Used by the mentions extension
2015-05-14 22:41:06 +09:30
Toby Zerner
a06a973d89 Only give dropdown menu items padding if they have an icon 2015-05-14 22:41:06 +09:30
Toby Zerner
dbf6a043a6 Automatically hook up onload/config functions
So that every component's DOM can be config'd by extensions
2015-05-14 22:41:06 +09:30
Toby Zerner
228c9f1214 Add convenience route generation functions
Many instances throughout the app need to be updated to use these :)
2015-05-14 22:41:06 +09:30
Toby Zerner
e0b778729d Make discussion actions public; use existing reply composer if it's already set up 2015-05-14 22:41:06 +09:30
Toby Zerner
ba437660db Fix up post stream jumping to index 2015-05-14 22:41:06 +09:30
Toby Zerner
781dc2ef0c New component for post excerpts, which will be shown in search results
Perhaps also in user activity stream. They are used in the mentions
extension.

In order to generate the excerpt, each formatter can implement a
“strip” method which basically converts block formatting into inline
formatting.
2015-05-14 22:41:05 +09:30
Toby Zerner
e5340b8ff7 Don't be so picky about the slug 2015-05-14 22:41:05 +09:30
Toby Zerner
aa765e3119 Only add initial posts to the post stream if they have content 2015-05-14 22:41:05 +09:30
Toby Zerner
4baac3fab1 Prevent JS error for now 2015-05-14 22:41:05 +09:30
Toby Zerner
25dd66028b Nicer API for changing discussion request includes (array instead of string) 2015-05-14 22:41:05 +09:30
Toby Zerner
2c0b87f8c2 Don't bother confirming exit if there's no content 2015-05-14 22:41:05 +09:30
Toby Zerner
9328277961 Focus at the end of the textarea when showing composer 2015-05-14 22:41:05 +09:30
Toby Zerner
a8d762abff Make text editor's controller accessible 2015-05-14 22:41:05 +09:30
Toby Zerner
6e6f81b6ff Tweak composer anchoring/animation 2015-05-14 22:41:04 +09:30
Toby Zerner
e8e3bc005d Prevent re-showing the composer when it's already showing 2015-05-14 22:41:04 +09:30
Toby Zerner
b682cf1575 Update the discussion's post relationship when a reply is added 2015-05-14 22:41:04 +09:30
Toby Zerner
7c1c5f07d3 Make it possible for extensions to modify data before saving 2015-05-14 22:41:04 +09:30
Toby Zerner
4d17e172a7 Close the drawer when page content is touched. Fixes #69 2015-05-11 11:03:40 +09:30
Toby Zerner
5aafc8ce62 Make sure discussion list subtrees don't go missing. Fixes #66 2015-05-11 10:47:42 +09:30
Toby Zerner
535276ca93 Remove circular dependency that was breaking the app 2015-05-07 22:14:31 +09:30
Toby Zerner
0f3d7ceafe Don't let a discussion have an empty slug as it messes with the router 2015-05-07 16:53:57 +09:30
Toby Zerner
fb788168b4 Fix post deletion error 2015-05-07 16:53:39 +09:30
Toby Zerner
aa1e0ef687 Fix user activity load more 2015-05-07 16:53:30 +09:30
Toby Zerner
a5b2a3da03 Work around Mithril bug 2015-05-07 15:41:04 +09:30
Toby Zerner
16c6bd4f23 Clean up discussion list retaining mechanism 2015-05-07 10:27:29 +09:30
Toby Zerner
6b8dfdfb1c Retain scroll position when navigating between index/discussion 2015-05-07 10:27:04 +09:30
Toby Zerner
a1ce2fa2ef Prevent expensive redrawing in the discussion list 2015-05-07 09:19:57 +09:30
Toby Zerner
ad042fb0ef Fix discussion list pagination 2015-05-07 08:58:04 +09:30
Toby Zerner
dc7d1fdefa Tweak user card hover trigger
So that it doesn’t appear when hovering over badges
2015-05-06 12:23:48 +09:30
Toby Zerner
b839c721e1 Fix replying when not logged in 2015-05-06 12:13:25 +09:30
Toby Zerner
46553de539 Fix admin URL 2015-05-06 11:35:21 +09:30
Toby Zerner
99dc94e238 Remove placeholder user controls for now 2015-05-06 11:29:58 +09:30
Toby Zerner
54f731942e Add user group badges 2015-05-06 11:25:19 +09:30
Toby Zerner
707c60d3ab Tweak user card UI 2015-05-06 11:24:42 +09:30
Toby Zerner
7f828fffbb Cleanup 2015-05-06 11:22:03 +09:30
Toby Zerner
69b6266ea9 Fix avatar dropdown UI 2015-05-06 11:21:50 +09:30
Toby Zerner
ff6523a82a Add icon to notification preferences 2015-05-06 08:33:12 +09:30
Toby Zerner
45033d7d59 Fix up hidden post styles; don't show user card 2015-05-06 08:33:00 +09:30
Toby Zerner
8e1ba5a2af Dasherize post/notification type class names 2015-05-06 08:32:33 +09:30
Toby Zerner
cc73b5fc56 Fix notifications dropdown closing when unread count is updated 2015-05-05 17:30:36 +09:30
Toby Zerner
efeb236feb Change notification type components to be like post types 2015-05-05 17:30:18 +09:30
Toby Zerner
a822deaa98 Clean up post type heritable view arguments 2015-05-05 17:29:43 +09:30
Toby Zerner
11b39605e2 Refactor post components and controls 2015-05-05 17:07:12 +09:30
Toby Zerner
762137c6df Move discussion controls out of lib and into forum 2015-05-05 17:06:46 +09:30
Toby Zerner
0824634a83 Return true if the composer was shown 2015-05-05 17:06:05 +09:30
Toby Zerner
e0936d8100 Add convenience method to get a record by a property 2015-05-05 17:05:16 +09:30
Toby Zerner
1eef01da05 Simplify model registration 2015-05-05 17:05:02 +09:30
Toby Zerner
220c1ac2d1 Change extend function so that a value doesn't have to be returned
override should be used instead to override the return value.
2015-05-05 17:04:42 +09:30
Toby Zerner
701eb6c2dd Clean up discussion renamed notification 2015-05-05 14:27:59 +09:30
Toby Zerner
f0219de93f Fix admin 2015-05-05 09:16:53 +09:30
Toby Zerner
342c8db5bd Share bower components between forum/admin 2015-05-05 09:16:34 +09:30
Toby Zerner
45ab262547 API for syncing added/removed posts after a discussion is updated 2015-05-04 12:17:26 +09:30
Toby Zerner
ae2930dc35 Show login modal if replying as guest; disable button if no permission
Also hide the first item in dropdown-split menus
2015-05-04 11:08:45 +09:30
Toby Zerner
538784744c Show login modal when starting a discussion as a guest 2015-05-04 10:44:03 +09:30
Toby Zerner
ebcf045ca1 Ability to clear a retained subtree 2015-05-04 10:43:40 +09:30
Toby Zerner
95c192c380 Fix logout redirection 2015-05-04 10:30:38 +09:30
Toby Zerner
f31973981c Fix override util super context 2015-05-04 10:30:29 +09:30
Toby Zerner
2288be12ff Fix issue with Mithril 0.2.0 (invalid m.route call) 2015-05-04 10:30:06 +09:30
Toby Zerner
041bef1f78 Update mithril 2015-05-04 10:29:38 +09:30
Toby Zerner
abe7b1fd2e Don't enable pane pinned by default 2015-05-04 08:54:47 +09:30
Toby Zerner
9dd56bf0a4 Prevent error when discussion doesn't have any posts 2015-05-03 12:09:05 +09:30
Toby Zerner
d9d190b772 Gracefully handle non-existent/deleted users during rendering 2015-05-03 12:08:41 +09:30
Toby Zerner
f2e2d59e6f Use new sort criteria format 2015-05-03 12:08:12 +09:30
Toby Zerner
318e8d2f33 Use new config property name in avatar editor 2015-05-03 11:53:11 +09:30
Toby Zerner
3ff0b806a4 All method should return an array, not an object 2015-05-02 08:47:10 +09:30
Toby Zerner
58833b9fdb Allow list items to specify a wrapper class 2015-05-02 08:46:52 +09:30
Toby Zerner
ea9d49b15e Allow extensions to easily override a function and call super 2015-05-02 08:46:38 +09:30
Toby Zerner
74bd697de9 Cleanup 2015-05-02 08:45:52 +09:30
Toby Zerner
b829edb07c Redraw after hiding modal 2015-05-02 08:45:24 +09:30
Toby Zerner
7d12f7853b Allow components to initialise props 2015-05-02 08:45:11 +09:30
Toby Zerner
3796193291 Only add a post to the post stream once 2015-05-02 08:44:52 +09:30
Toby Zerner
e9f0ef83b0 Remove posts from the post stream by ID 2015-05-02 08:44:42 +09:30
Toby Zerner
5fad4acd76 Use new config keys 2015-05-02 08:44:03 +09:30
Toby Zerner
ffc2863f70 Extensibility: discussion list params
Also give the root controller the name of the current route so they can
easily route back to it
2015-05-02 08:43:38 +09:30
Toby Zerner
288fd694a8 Extensibility: data when starting a new discussion 2015-05-02 08:39:44 +09:30
Toby Zerner
f15e7c6501 Extensibility: posts on user activity stream 2015-05-02 08:38:24 +09:30
Toby Zerner
fe0c2d0632 Extensibility: params for discussion page API request 2015-05-02 08:38:05 +09:30
Toby Zerner
8bc09551bb Extract discussion controls into the model 2015-05-02 08:36:59 +09:30
Toby Zerner
fbdd730ce3 Make discussion hero extensible 2015-05-02 08:36:04 +09:30
Toby Zerner
4d04d801d1 Unify icon class name, change the way icons are floated in menus 2015-05-02 08:32:45 +09:30
Toby Zerner
e4a880c4f4 Skin colour tweaks 2015-05-02 08:29:43 +09:30
Toby Zerner
ec343cb442 Ability to merge list items 2015-05-02 08:28:02 +09:30
Toby Zerner
68c0cdb1a9 Combine route/query params in route construction
One params object is passed, and then route params are extracted into
the route and the rest are appended as query params.
2015-05-02 08:21:40 +09:30
Toby Zerner
72be607a17 Preload session as the last step in initialisation before boot
Can’t remember why…
2015-05-02 08:18:45 +09:30
Toby Zerner
a0ade68d65 Fix pin button active state 2015-04-25 23:26:43 +09:30
Toby Zerner
b68a4711dc Replace Ember app with Mithril app 2015-04-25 22:28:39 +09:30