Commit Graph

258 Commits

Author SHA1 Message Date
Toby Zerner
fee88508ba Only display the first page of posts
Extra posts may be in the payload (mention links etc.) but we do not
want to display them.
2015-06-24 11:45:58 +09:30
Toby Zerner
e466dcc626 Significantly improve mobile UX
Most of #137 done.

- Use FastClick to make everything feel more responsive
- Use transforms for animations to make them silky smooth
- Style the drawer the same as the header to keep things simple
- Revert to fixed composer, but allow it to be minimised
- Add a separate notifications page for mobile so it’s easy to go back
- Add indicator to the menu button when there are unread notifications
- Close the drawer when navigating away
- Make dropdowns/modals scrollable
- Many other mobile tweaks and bug fixes

Didn’t take much care to keep CSS clean, due to #103
2015-06-24 11:44:53 +09:30
Toby Zerner
a09c86e42d Revert from a while ago: always append if reference item not found
API still needs some work though
2015-06-23 11:12:37 +09:30
Toby Zerner
6e5329047c Add light horizontal rule between posts. closes flarum/core#133
Also remove time information from event posts (it’s not useful)
2015-06-23 10:36:36 +09:30
Toby Zerner
64e5d50533 Allow author to delete discussion if there are no replies
Also disallow the first post in a discussion to be deleted or hidden
(thus preventing discussions with zero posts)

closes flarum/core#90 closes flarum/core#92
2015-06-23 10:34:33 +09:30
Toby Zerner
3a7efe202e Gracefully handle discussions with no posts
Although this should never happen
2015-06-23 10:30:06 +09:30
Toby Zerner
45ba693154 Speed up committing of scroll position in URL/marking as read 2015-06-23 10:29:08 +09:30
Toby Zerner
f35a9357f0 Default submit handler for form modals 2015-06-23 10:28:24 +09:30
Toby Zerner
a20e2591e6 Fix broken forgot password form. closes #116 2015-06-20 10:29:57 +09:30
Toby Zerner
63654bf195 Actually sort notifications (please) 2015-06-19 19:10:54 +09:30
Toby Zerner
07e2698504 Make sure notifications are sorted 2015-06-19 19:05:03 +09:30
Toby Zerner
056bf669c8 Ensure we make a new separator 2015-06-19 17:19:27 +09:30
Toby Zerner
004e8919b6 Fix infinite loop when @mentioning in a discussion composer 2015-06-19 15:48:51 +09:30
Toby Zerner
840bbfd995 Don't destroy discussion list in case of a redraw
i.e. the one in index-page’s onunload → composer.minimize
2015-06-19 14:34:52 +09:30
Toby Zerner
a714f12f8f Change criteria to work out which posts are intended to be displayed 2015-06-19 11:19:24 +09:30
Toby Zerner
46347023cc Implement time gap indicators
Get rid of short human times (1m, 1h, 1d) for now
2015-06-19 10:00:19 +09:30
Toby Zerner
32beab9238 Prevent JS error if discussion has been loaded without posts 2015-06-18 17:42:08 +09:30
Toby Zerner
f2b500a6e5 Use truncate for search suggestions 2015-06-18 17:41:47 +09:30
Toby Zerner
822a216cc9 Roughly implement routes and data preloading
Only preloading data for basic requests w/o query params, at least for
the moment - if we have to preload for something like
/?q=test&sort=newest, we end up having to duplicate a whole lot of
logic between JS/PHP.
2015-06-18 17:41:37 +09:30
Toby Zerner
2786dbd157 Simplify composer animation 2015-06-18 12:53:19 +09:30
Toby Zerner
bb651899b1 Extract into truncate helper 2015-06-17 18:22:14 +09:30
Toby Zerner
27b9dbe4c4 Clear the page's min-height when navigating away 2015-06-16 17:23:14 +09:30
Toby Zerner
0aed5f44bf Maintain scroll position when hiding the composer 2015-06-15 12:17:19 +09:30
Toby Zerner
1ff5e06525 Don't add duplicate posts to a discussion 2015-06-15 08:59:57 +09:30
Toby Zerner
66da905763 Fix saving of to-many relationships 2015-06-12 16:41:13 +09:30
Toby Zerner
40c9c7ef59 Add a separator above the delete control 2015-06-12 16:40:57 +09:30
Toby Zerner
5b6f86320d Return a promise from the new discussion action 2015-06-12 16:40:47 +09:30
Toby Zerner
81dc3a1c48 Make the FormModal component more flexible 2015-06-12 16:40:20 +09:30
Toby Zerner
5c21efe09d Move between title/post inputs with return and backspace keys 2015-06-12 16:37:43 +09:30
Toby Zerner
52ff2f25ba Don't pad the body when the composer is minimized 2015-06-12 16:37:19 +09:30
Toby Zerner
4582c18a3d Improve ordering of list items when specified key doesn't exist 2015-06-11 18:41:13 +09:30
Toby Zerner
525e2b1b3f Don't anchor scroll when the top of the page has been reached 2015-06-11 18:40:21 +09:30
Toby Zerner
070d8fb04d Fix scrolling to first post not working 2015-06-11 18:39:36 +09:30
Toby Zerner
0f5156afd4 Fix incorrect visible range in post scrubber 2015-06-11 18:39:12 +09:30
Toby Zerner
ac83cb1cf4 Fix sort menu not displaying the current option 2015-06-11 18:38:48 +09:30
Toby Zerner
16c714012f Fix incorrect highlighting of post excerpts 2015-06-10 14:42:14 +09:30
Toby Zerner
8b162344cd Lay the groundwork for translation & refactor asset compilation
Ditched the idea of having language packs as extensions. Reasoning:

1. Because we use machine keys for translations (rather than English
keys), extensions need to be able to define default translations. If
English translations are to be included in extensions and not in a
language pack extension, then it doesn’t make sense to have other
languages as language pack extensions. Inconsistency → complexity.

2. Translations should maintain version parity with their respective
extensions. There’s no way to do this if extension translations are
external to the extension.

Instead, localisation will be a core effort, as well as a per-extension
effort. Translators will be encouraged to send PRs to core + extensions.

In core, each locale has a directory containing three files:
- translations.yml
- config.js: contains pluralisation logic for the JS app, as well as
moment.js localisation if necessary
- config.php: contains pluralisation logic for the PHP app

Extensions can use the Flarum\Extend\Locale extender to add/override
translations/config to a locale.

Asset compilation has been completely refactored with a better
architecture. Translations + config.js are compiled and cached for the
currently active locale.
2015-06-10 14:23:56 +09:30
Toby Zerner
77601870e0 Clean up, use time helper rather than util 2015-06-10 13:59:25 +09:30
Toby Zerner
8f856f85db Externalize babel helpers.
Saves 2kB after minify+gzip :D
2015-06-08 15:28:45 +09:30
Toby Zerner
31a3de641f Use new flarum-gulp package. 2015-06-08 14:57:23 +09:30
Toby Zerner
250e16d970 Make composer sliding animation less jumpy when replying 2015-06-08 09:47:28 +09:30
Toby Zerner
a5ad1fded7 Fix user profile activity regression 2015-06-07 10:12:48 +09:30
Toby Zerner
73396e3e9c Fix error 2015-06-04 11:12:04 +09:30
Toby Zerner
42851f425b Rejig formatting API. closes flarum/core#85
It works but it’s not the most pretty thing in the world. @franzliedke
Would be great if you could take a look at the whole formatting API and
work your magic on it sometime… my brain is fried!
2015-06-04 10:48:07 +09:30
Toby Zerner
5d89618bbd Implement search on front end 2015-06-03 18:10:56 +09:30
Toby Zerner
ea510b5ea0 Fix composer only sliding down some of the way 2015-06-03 18:06:39 +09:30
Toby Zerner
5d29265a73 Use icon instead in composer title when replying to another thread 2015-06-01 17:55:05 +09:30
Toby Zerner
8638e9c9ca Tweak reply placeholder appearance 2015-06-01 17:54:37 +09:30
Toby Zerner
0f9549f4b9 Remove default relationships from serializers 2015-06-01 12:24:06 +09:30
Toby Zerner
7a35f5faf6 Fix/simplify timestamp live updating. closes flarum/core#101 2015-06-01 11:10:15 +09:30
Toby Zerner
be249cbcb5 Scroll to the bottom of the last post when jumping to last 2015-06-01 11:09:39 +09:30
Toby Zerner
47560dbc86 Force redraw to ensure focusing works 2015-06-01 10:43:16 +09:30
Toby Zerner
bfc4201338 Add icon to post edit composer 2015-06-01 10:29:11 +09:30
Toby Zerner
7362aff345 Make replyAction into a promise. closes #100 2015-06-01 10:29:01 +09:30
Toby Zerner
56981c1297 Add reply placeholder to bottom of post stream 2015-06-01 10:28:24 +09:30
Toby Zerner
3f6a3de863 Add 'state helpers', shortcuts to make querying app state easier 2015-06-01 10:26:23 +09:30
Toby Zerner
1153e41b7a Add text-editor API to get selection range 2015-06-01 08:49:46 +09:30
Toby Zerner
f8d681d9ab Fix bug where switching composer component would lead to incorrect rendering 2015-06-01 08:49:23 +09:30
Toby Zerner
44a4e31fe1 Simplify active discussion detection 2015-05-31 13:53:02 +09:30
Toby Zerner
8e7634e36d Fix post scrubber closing on mobile 2015-05-31 11:17:41 +09:30
Toby Zerner
e1f8fbdc32 Prevent error when trying to get relationship and no links have been loaded 2015-05-30 13:58:21 +09:30
Toby Zerner
8e4f4a549c Re-add event after a discussion has loaded
replyAction uses it
2015-05-30 12:06:48 +09:30
Toby Zerner
5db1751660 Add helper to format number with commas 2015-05-30 08:40:29 +09:30
Toby Zerner
ba1ddc0a14 Implement abbreviate-number helper. closes flarum/core#96 2015-05-30 08:08:57 +09:30
Toby Zerner
4edb95e9e2 Sync the discussion model/post stream when posts are added/removed 2015-05-29 18:56:29 +09:30
Toby Zerner
0d1b67274d Fix edge cases where posts would not be added/removed 2015-05-29 18:55:53 +09:30
Toby Zerner
102a9e498e Fix incorrect class name 2015-05-29 18:55:29 +09:30
Toby Zerner
456af4273b Sort included posts
They can be out of order in the payload due to relationship loading,
e.g. post #1 includes post #14 that has mentioned it, therefore #14
will be the first post in the payload. The new post stream doesn’t take
kindly to out of order posts.
2015-05-29 18:55:19 +09:30
Toby Zerner
2e82fb4015 Refactor discussion list styles, fix loading indicator height in pane 2015-05-29 18:31:17 +09:30
Toby Zerner
cafa6c7b5d New and improved post stream. 2015-05-29 18:17:50 +09:30
Toby Zerner
2741923714 Improvements to change/forgot password 2015-05-27 16:25:44 +09:30
Toby Zerner
696bfe5a07 Improve email changing/confirmation stuff 2015-05-27 16:24:54 +09:30
Toby Zerner
6fed357605 Allow ActionButtons to be disabled 2015-05-27 16:21:15 +09:30
Toby Zerner
c5d820a92d Hide "mark all as read" button from guests 2015-05-27 16:19:40 +09:30
Toby Zerner
796c2590a2 Add unread indicator to scrubber. closes #94 2015-05-27 16:18:21 +09:30
Toby Zerner
20dfc6c341 Retain relevant data when switching between login/signup modals 2015-05-26 18:05:07 +09:30
Toby Zerner
e5532d9618 Roughly implement change password/email, delete account modals 2015-05-26 18:03:02 +09:30
Toby Zerner
a4a0092513 Fix error when rendering deleted user 2015-05-26 18:02:04 +09:30
Toby Zerner
4849e423eb Redraw discussion list items if user marks all as read 2015-05-26 18:01:05 +09:30
Toby Zerner
61e110b245 Don't show load more button unnecessarily 2015-05-26 18:00:41 +09:30
Toby Zerner
85ba97ed5c Improve appearance/behaviour of login/signup/forgot modals 2015-05-26 16:25:25 +09:30
Toby Zerner
5fc2f3aeee Better handling of API server errors 2015-05-26 11:43:20 +09:30
Toby Zerner
feb4676aa0 Very rough implementation of forgot password 2015-05-26 11:14:06 +09:30
Toby Zerner
d1dfa92d6b Prevent composer from accidentally redrawing when reply button is clicked 2015-05-23 08:36:00 +09:30
Toby Zerner
1dc036da65 Only do double redraw if there is a component we need to get rid of 2015-05-23 08:35:12 +09:30
Toby Zerner
c4614788c6 Make the invoker responsible for positioning the composer cursor 2015-05-23 08:34:54 +09:30
Toby Zerner
9d7be35837 Fix notification grid row/column not toggling when first cell is disabled 2015-05-21 15:59:35 +09:30
Toby Zerner
935e2d272a Force redraw of composer component when switching in a new one 2015-05-21 13:08:33 +09:30
Toby Zerner
e1201c968b Maintain scroll position relative to bottom of hero when switching categories 2015-05-21 08:15:58 +09:30
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