Commit Graph

684 Commits

Author SHA1 Message Date
Toby Zerner
dea759d5b8 Fix JS docblock 2015-08-26 17:11:54 +09:30
Toby Zerner
734badb4bc Begin JavaScript cleanup 2015-08-26 16:56:33 +09:30
Toby Zerner
c5edf48bf2 Fix error on index page 2015-08-26 16:56:32 +09:30
Toby Zerner
df385b7df2 Monkey patch mithril so we can use JSX component syntax
<Alert foo="bar"/> instead of Alert.component({foo: 'bar'})
2015-08-26 16:56:32 +09:30
Toby Zerner
e2bb399db9 Make sure active discussion is highlighted 2015-08-26 11:02:12 +09:30
Toby Zerner
b8fc0bc376 Make discussion slug URL parameter optional 2015-08-25 19:32:41 +09:30
Toby Zerner
52bf8b3c1c Add notification excerpts to help distinguish posts 2015-08-21 09:54:41 +09:30
Toby Zerner
4e8f69a18c Remove old code 2015-08-19 14:54:08 +09:30
Toby Zerner
9489173082 Fix some front-end bugs 2015-08-14 12:50:39 +09:30
Toby Zerner
014bacb7ab Add ability to uninstall an extension 2015-08-14 12:48:29 +09:30
Toby Zerner
fa77ad7e0d Update class name 2015-08-13 13:07:30 +09:30
Toby Zerner
dc56e7dc0f Fix unnecessary ?near=1 in some URLs 2015-08-13 13:06:55 +09:30
Toby Zerner
c4992407aa Reuse CommentPost component for PostsUserPage 2015-08-13 13:06:23 +09:30
Toby Zerner
430665e3c8 Don't hide login modal; wait for page to refresh 2015-08-13 13:05:38 +09:30
Toby Zerner
5f3bbabea8 Move locale dropdown to right side of header 2015-08-13 13:05:12 +09:30
Toby Zerner
011701e483 Make sure user cards disappear properly on old browsers
closes flarum/core#222
2015-08-13 13:04:24 +09:30
Toby Zerner
c3b2fa5a99 Prevent badge tooltips from being cut off
By overflow in the notifications dropdown. closes flarum/core#228
2015-08-13 13:01:13 +09:30
Toby Zerner
360f65e270 Fix broken signup
closes flarum/core#231
2015-08-13 13:00:26 +09:30
Toby Zerner
9c7fab5d8c Support running in subdirectory with base_path config 2015-08-13 12:58:59 +09:30
Toby Zerner
3f809761d3 Improve extensions page
- Allow extensions to define an icon in their flarum.json
- Show a "please wait" modal when enabling/disabling an extension
- Styling tweaks
2015-08-07 08:51:03 +09:30
Toby Zerner
4979e4d614 Remove session event handler 2015-08-06 16:13:41 +09:30
Toby Zerner
9def5d2b5d Clean up 2015-08-06 16:00:22 +09:30
Toby Zerner
a856aa8047 Make link to email provider open in new window
closes flarum/core#62
2015-08-06 15:09:55 +09:30
Toby Zerner
32648147e2 Reload page on login
closes flarum/core#145
2015-08-06 15:04:20 +09:30
Toby Zerner
de42c316c0 Remove blockquotes from post previews
Closes flarum/core#144
2015-08-06 13:28:26 +09:30
Toby Zerner
edddeeb553 Make some changes to facilitate updates to mentions extension 2015-08-06 13:16:53 +09:30
Toby Zerner
fa5c7cb123 Build very rough HTML-only content
And redirect to the "no JS" mode if the JS app crashes on boot.

ClientView/ClientAction is all a bit of a mess and will need to be
radically cleaned up at some point...
2015-08-06 12:21:11 +09:30
Toby Zerner
80e13ae289 Implement default route config setting 2015-08-06 12:18:59 +09:30
Toby Zerner
c8084c3925 Remove footer and move language selection to header 2015-08-06 12:16:55 +09:30
Toby Zerner
0d968536bc Tweak dropdown caret margins 2015-08-05 19:21:00 +09:30
Toby Zerner
f182689c90 Allow extension of functions that may not be defined 2015-08-05 19:20:49 +09:30
Toby Zerner
4c06e78b57 Allow/disallow signup per config 2015-08-05 18:19:26 +09:30
Toby Zerner
3f0089e8bb Determine user card editing permissions in one place 2015-08-05 16:22:05 +09:30
Toby Zerner
5005e37cfb Focus on the first input too, in case it's not a text field 2015-08-05 16:07:43 +09:30
Toby Zerner
57e37e06ef Disable "start discussion" button if no permission 2015-08-05 16:06:25 +09:30
Toby Zerner
8be5d5af0f Still set username if user is undefined
Fixes "Started 12 hours ago by undefined" on discussion author avatar
tooltip
2015-08-05 12:17:36 +09:30
Toby Zerner
f42c3cd1ed Allow admins to delete users 2015-08-05 12:08:28 +09:30
Toby Zerner
1679f1e27b Implement edit user modal
EditUserHandler is a bit rough
2015-08-05 11:49:37 +09:30
Toby Zerner
fff2ffe847 Rename user page components for consistency 2015-08-05 11:48:35 +09:30
Toby Zerner
f49d0e5341 Allow locale to be selected in footer 2015-08-05 09:50:57 +09:30
Toby Zerner
187517a9c7 Remove ability for users to delete themselves 2015-08-04 21:35:41 +09:30
Toby Zerner
c74b3434e7 Refactor notification list loading
So that notifications are reloaded (if needed) every time the
notifications dropdown button is clicked
2015-08-04 21:22:40 +09:30
Toby Zerner
61a06abd59 Allow discussion list to be refreshed without clearing it 2015-08-04 19:13:42 +09:30
Toby Zerner
26c87de317 Add an API to show a count in the document title 2015-08-04 19:04:17 +09:30
Toby Zerner
e091b037f3 Radically simplify user activity system
The activity system we were using was built around a separate table.
Whenever the user posted something, or deleted a post, we would sync
the table. The advantage of this was that we could aggregate activity
of all different types very efficiently.

It turns out that it came with a huge disadvantage: there was no
efficient way to enforce permissions on activity. If a user posted
something in a private tag, everyone could still see it on their
activity feed. My stopgap solution was to only sync activity for posts
that are viewable by guests, but that was way too limited.

It also turns out that aggregating activity of different types is
really not that useful, especially considering most of it is the user
making posts. So I've gotten rid of that whole overly-complicated
system, and just made the user profile display separate lists of posts
and discussions, retrieved from those respective APIs. The discussions
page is an actual discussion list too, which is pretty cool.

It's still technically possible to aggregate different activity types
(basically just aggregate API responses together), but we can do that
later if there's a need for it.

This is probably my favourite commit of the day :)
2015-08-04 18:44:22 +09:30
Toby Zerner
186bdc7fd4 Tweak some text/comments 2015-08-04 17:14:54 +09:30
Toby Zerner
5b3484d3c8 Improve error handling somewhat
- Fix composer crashing/not showing alert on error
- Make a general ValidationException which takes an array of field ⇒
messages to be outputted nicely by the API
2015-08-04 13:03:46 +09:30
Toby Zerner
a14be00041 Sort out default dropdown caret icons 2015-08-04 11:42:24 +09:30
Toby Zerner
b8a224f87b Implement basic bio formatting. closes flarum/core#203 2015-08-04 11:41:47 +09:30
Toby Zerner
e6e2cdd3e9 Responsive fixes
- Make composer absolutely positioned on mobile to work around iOS 8/9
bug
- Make search results dropdown appear on mobile

closes flarum/core#137
2015-08-04 11:27:51 +09:30
Toby Zerner
addb061458 Change default dropdown caret icon 2015-08-04 11:01:11 +09:30
Toby Zerner
00e5f94bce Change the way composer is aligned
Also ensure that the correct body class is applied on the user page
2015-08-04 10:49:33 +09:30
Toby Zerner
ecb1023c66 Fix user bio placeholder not showing up 2015-08-04 10:42:37 +09:30
Toby Zerner
2e4d38b3e7 Move config/permission actions to API; clean up cache flushing 2015-08-04 10:40:04 +09:30
Toby Zerner
afe031f269 Validate color fields on appearance page 2015-08-04 10:38:49 +09:30
Toby Zerner
83e8503df1 Rough implementation of appearance settings 2015-08-03 14:35:51 +09:30
Toby Zerner
70901b1420 Rough extension management implementation 2015-08-03 12:03:30 +09:30
Toby Zerner
8f4ef28475 Make the back button a functional link 2015-08-02 17:26:57 +09:30
Toby Zerner
d44ffd1866 Remove modal responsibility for loading UI; using loading button state 2015-08-02 17:25:05 +09:30
Toby Zerner
5876ee30ed Remove old code 2015-08-02 17:22:18 +09:30
Toby Zerner
fde7afd3e2 Finish admin permissions page and clean up everything 2015-07-31 20:16:47 +09:30
Toby Zerner
e204794b91 Allow custom variables to be set on the client app 2015-07-31 20:08:27 +09:30
Toby Zerner
42fd8e26c1 Begin implementing permissions page 2015-07-29 21:00:27 +09:30
Toby Zerner
f96cac6057 Implement basic settings page 2015-07-29 21:00:09 +09:30
Toby Zerner
d71d8f59c2 Clean up route definition code style 2015-07-29 20:58:49 +09:30
Toby Zerner
e863bd53d3 Get admin area working again 2015-07-29 20:58:22 +09:30
Toby Zerner
a58ac5345d PERF: more efficient retaining of posts 2015-07-28 22:58:17 +09:30
Toby Zerner
fe16510e90 Prevent flicker when editing a post 2015-07-28 22:57:58 +09:30
Toby Zerner
1c1d4f5f37 PERF: more efficient retaining of discussion list items 2015-07-28 22:39:03 +09:30
Toby Zerner
42d02569ac Make sure discussion list is refreshed if it needs to be 2015-07-28 21:24:38 +09:30
Toby Zerner
ce54f06e42 Don't close notifications dropdown if opening in a new tab 2015-07-28 18:51:53 +09:30
Toby Zerner
d3534fcda8 Ensure the correct relationship values are returned 2015-07-28 18:28:31 +09:30
Toby Zerner
acfa49b027 PERF: hide discussion list pane on mobile 2015-07-28 18:17:51 +09:30
Toby Zerner
5a2c00e41d Make sure slidable parameters are reset correctly 2015-07-28 17:37:46 +09:30
Toby Zerner
85831a62ee Update the composer height on redraw
For some reason, the text editor isn't being retained across route
changes, and it loses its height style. This reapplies it on every
redraw.
2015-07-28 17:26:03 +09:30
Toby Zerner
ff6f2ebf82 Properly disable buttons 2015-07-28 17:19:00 +09:30
Toby Zerner
97334bea12 Don't display notifications with deleted subjects 2015-07-28 17:15:09 +09:30
Toby Zerner
40112ae553 Refactor composer live previews for better performance 2015-07-28 16:06:25 +09:30
Toby Zerner
b87cd3ed53 Fix scrolling to the bottom of an item 2015-07-28 15:26:51 +09:30
Toby Zerner
697cb2ed63 Supporting routing of URL with nothing after the discussion ID
closes flarum/core#181
2015-07-28 13:46:43 +09:30
Toby Zerner
bb04eada7a Prevent crash if user's groups aren't loaded. closes flarum/core#173 2015-07-28 13:35:07 +09:30
Toby Zerner
e2a4cf5ccb Add preview button to composer 2015-07-28 13:34:42 +09:30
Toby Zerner
f07ab4633b Add ability to refresh index page by clicking on logo. closes flarum/core#188 2015-07-28 12:27:45 +09:30
Toby Zerner
7a67d3ab95 Fix swiping to the right to mark as read 2015-07-28 12:15:45 +09:30
Toby Zerner
283dcad848 Fix Safari header redraw problem. closes flarum/core#187 2015-07-28 10:13:58 +09:30
Toby Zerner
427450f137 Fix attribute name 2015-07-27 19:54:15 +09:30
Toby Zerner
e257454343 Make formatText util an object so it can be extended 2015-07-27 14:17:12 +09:30
Toby Zerner
ab6b44f2db Update gulp module configuration 2015-07-27 14:16:55 +09:30
Toby Zerner
aec641d65b Use System.get instead of System.import
Means we get drop Promise polyfill
2015-07-27 14:16:39 +09:30
Toby Zerner
aaffbe4aa8 Selectively construct request params 2015-07-27 12:44:24 +09:30
Toby Zerner
b2badde77f Always show results container to ensure it gets config'd 2015-07-27 12:32:30 +09:30
Toby Zerner
00de9ee9a4 Another pages loading count fix 2015-07-27 12:28:03 +09:30
Toby Zerner
cdb26eb226 Prevent pages loading count from going negative 2015-07-27 12:23:36 +09:30
Toby Zerner
de210108c3 Make sure pages loading count is kept in sync 2015-07-27 12:16:05 +09:30
Toby Zerner
3467aa9e90 Start loading the next page of posts immediately 2015-07-27 12:12:07 +09:30
Toby Zerner
b01b4b04d3 Fix user page display on mobile 2015-07-23 20:24:05 +09:30
Toby Zerner
52c9539be3 Appearance tweaks 2015-07-23 16:39:20 +09:30
Toby Zerner
e698e2220b Fix translation key 2015-07-23 16:38:51 +09:30
Toby Zerner
512c2b10f4 Redraw after loading missing posts 2015-07-23 16:38:39 +09:30
Toby Zerner
6c8144f90a Set default item priorities 2015-07-23 16:38:30 +09:30
Toby Zerner
61e4763c68 Componentize welcome hero close button 2015-07-23 14:47:27 +09:30
Toby Zerner
806f67f7eb Anchor scroll to bottom when live previewing reply 2015-07-23 14:32:49 +09:30
Toby Zerner
1e74d57526 Fix notification list appearance 2015-07-23 14:32:21 +09:30
Toby Zerner
ce5e4b6c0f Don't allow includes to be specified
Relations must be set to include by default on the API instead
2015-07-23 14:31:46 +09:30
Toby Zerner
65feedc891 Fix discussion list not rendering for guests 2015-07-23 14:31:07 +09:30
Toby Zerner
497b65289e Fix sign up modal 2015-07-23 14:30:55 +09:30
Toby Zerner
a30f591c15 Fix activity page load more button appearance 2015-07-22 16:05:38 +09:30
Toby Zerner
017c258e46 Live preview of post editing/replying thanks to TextFormatter 👏 2015-07-22 16:05:00 +09:30
Toby Zerner
a0fe68272c Implement TextFormatter for posts
Get rid of formatting on user bios, we'll do that with JavaScript
2015-07-22 16:03:48 +09:30
Toby Zerner
d40c28a370 Tweak display of badges in the discussion hero 2015-07-22 09:58:14 +09:30
Toby Zerner
e1a51f095f Random cleanup 2015-07-22 09:57:25 +09:30
Toby Zerner
e82a50e53b Update modal responsive control classes 2015-07-22 09:56:01 +09:30
Toby Zerner
e3c59732c2 Use stable sort for item lists 2015-07-22 09:55:36 +09:30
Toby Zerner
5b8705bfc4 Fix PostStream endless loading due to broken scroll anchor 2015-07-22 09:55:20 +09:30
Toby Zerner
23cd3320c0 Preload data just before boot, not when the store is initialised 2015-07-22 09:54:49 +09:30
Toby Zerner
49e9ab362a Persist modal across routes
Don't hide it unless it's already been shown, otherwise bootstrap JS
won't be initialized correctly
2015-07-22 09:54:00 +09:30
Toby Zerner
a66db6323a Fix search routing
Blurring the input causes a redraw, which hides the results and
invalidates the current index. So the routing wasn't working.

Drawer is now hidden on IndexPage construction.
2015-07-22 09:52:58 +09:30
Toby Zerner
9af141ce0b Hide the drawer/modal when constructing all pages
Might be better to do this on config... also extract it into a parent
"Page" component
2015-07-22 09:51:41 +09:30
Toby Zerner
d0c8777430 PERF: fix subtrees never being retained if "mark all as read" was clicked
I didn't realise, performance was terrible for people who have ever
clicked the "mark all as read" button!
2015-07-22 09:50:55 +09:30
Toby Zerner
a7baab8a86 Fix discussion composer title field not focusing editor on 'enter' 2015-07-22 09:49:25 +09:30
Toby Zerner
0cb3378658 Merge branch 'evented-api' 2015-07-21 10:40:38 +09:30
Toby Zerner
aff859d7ea Cleanup unused import 2015-07-20 18:14:03 +09:30
Toby Zerner
b31a290f00 Don't override username if already set 2015-07-20 18:13:56 +09:30
Toby Zerner
6b601ae2d6 Only render posts with the discussion relationship 2015-07-20 18:13:40 +09:30
Toby Zerner
7dd7b3f32c Separate icon from notification grid labels 2015-07-20 18:12:30 +09:30
Toby Zerner
53c621d999 Update event post API
- Use more appropriate component class name
- Allow username to be moved in translation
2015-07-20 18:12:08 +09:30
Toby Zerner
82f1daeef4 Change discussion list sorting labels 2015-07-20 18:11:04 +09:30
Toby Zerner
23dd966b45 Rename method 2015-07-20 18:10:32 +09:30
Toby Zerner
741b9b0ea5 Render discussion hero badges properly 2015-07-20 18:10:21 +09:30
Toby Zerner
930ddf3253 Get rid of extension convenience method
We might reintroduce this later, but for now I want to keep the
extensions API as light as possible and get input before we add stuff
2015-07-20 18:09:37 +09:30
Toby Zerner
6b7cf1b6bf Rework extension bootstrapping
System JS modules don't execute when they're registered, so we need to
import them explicitly. While we're at it, we may as well make the
locale bootstrapper a module too.
2015-07-20 18:08:28 +09:30
Toby Zerner
f977658417 PERF: Only show search results when field has focus 2015-07-18 22:58:26 +09:30
Toby Zerner
9ca4feb6e8 Add some comments 2015-07-18 10:56:01 +09:30
Toby Zerner
24f100899c Don't apply background color if there is none 2015-07-18 10:55:56 +09:30
Toby Zerner
0af9784a59 Fix bad translation key 2015-07-18 10:11:42 +09:30
Toby Zerner
f93ff7cb3f Make front-end localizable 2015-07-17 17:43:28 +09:30
Toby Zerner
a9ded36b57 Major CSS revamp
- Get rid of Bootstrap (except we still rely on some JS)
- Use BEM class names
- Rework variables/theme config
- Fix various bugs, including some on mobile

The CSS is still not ideal – it needs to be cleaned up some more. But
that can be a focus for after beta.
2015-07-17 14:47:49 +09:30
Toby Zerner
76678f72f2 Case-sensitive filename changes 2015-07-15 15:54:34 +09:30
Toby Zerner
ab6c03c0cc Massive JavaScript cleanup
- Use JSX for templates
- Docblock/comment everything
- Mostly passes ESLint (still some work to do)
- Lots of renaming, refactoring, etc.

CSS hasn't been updated yet.
2015-07-15 14:01:11 +09:30
Toby Zerner
9fa3492c0e Clean up discussion model 2015-07-08 10:51:30 +09:30
Toby Zerner
a74623c718 Make admin open in a new window 2015-07-08 10:51:16 +09:30
Toby Zerner
42f1fa1272 Improve fulltext search API and interface 2015-07-07 20:35:18 +09:30
Toby Zerner
4c5cf96b95 Fix discussion search result suggestion excerpts
So that they show the relevant part of the post
2015-07-07 16:16:20 +09:30
Toby Zerner
013d11554d Add discussion list refresh button
Closes flarum/core#139. Haven’t done pull to refresh yet though, but
that can come later.
2015-07-07 15:32:08 +09:30
Toby Zerner
e1a65380ef Tweak discussion list styles some more 2015-07-07 15:30:48 +09:30
Toby Zerner
99876e9e36 Initial refactor of client actions, data preloading, SEO
An initial stab at flarum/core#126. Still WIP. Preliminary
implementation of flarum/core#128 and flarum/core#13.
2015-07-07 15:29:21 +09:30
Toby Zerner
fcc5aa17ea Tweak discussion list contextual controls 2015-07-07 09:21:43 +09:30
Toby Zerner
c06639fdc8 This should've been with the last commit
I blame GitHub for Mac again :]
2015-07-07 09:21:27 +09:30
Toby Zerner
5fe88e448e Improve post stream
- Return all discussion post IDs from API requests which add/remove
posts, so the post stream updates appropriately. Related to #146
- Always unload posts that are two pages away, no matter how fast
you’re scrolling
- Retrieve posts from cache instead of reloading them
- Fix various bugs. Maybe #152, needs confirmation
2015-07-06 16:26:27 +09:30
Toby Zerner
330e60871a Fix read tracking not working 2015-07-05 13:58:07 +09:30
Toby Zerner
31474764ee Fix post scrubber unread indicator overflow 2015-07-05 13:53:06 +09:30
Toby Zerner
1d21670663 New look for discussion reply/unread count
Also decrease the max page width by 100px
2015-07-05 13:52:46 +09:30
Toby Zerner
a74b40fe47 Massive refactor
- Use contextual namespaces within Flarum\Core
- Clean up and docblock everything
- Refactor Activity/Notification blueprint stuff
- Refactor Formatter stuff
- Refactor Search stuff
- Upgrade to JSON-API 1.0
- Removed “addedPosts” and “removedPosts” relationships from discussion
API. This was used for adding/removing event posts after renaming a
discussion etc. Instead we should make an additional request to get all
new posts

Todo:
- Fix Extenders and extensions
- Get rid of repository interfaces
- Fix other bugs I’ve inevitably introduced
2015-07-04 12:24:48 +09:30
Toby Zerner
e18d8b35e5 Refactor component API a bit 2015-06-26 19:09:43 +09:30
Toby Zerner
5202ce00c4 Split up post controls into "user", "moderation", "destructive" 2015-06-26 16:15:30 +09:30
Toby Zerner
fe82631f95 Tweak user bio editing UI 2015-06-26 13:57:21 +09:30
Toby Zerner
3ba495091e Flattening items breaks things; recurse to get the first element instead 2015-06-26 13:52:54 +09:30
Toby Zerner
0526e223e4 Always show composer header. closes flarum/core#112 2015-06-26 12:18:13 +09:30
Toby Zerner
8f6b373ea1 Constrain the unread part of the scrubber to after the handle 2015-06-26 12:09:59 +09:30
Toby Zerner
e887d75b8b Show badges in notifications 2015-06-26 12:09:28 +09:30
Toby Zerner
6acc6698f5 Don't clear filter when search is cleared 2015-06-26 12:08:46 +09:30
Toby Zerner
9e6ad1f244 Only show search suggestion excerpt if we have it
We won’t have it if we didn’t do a fulltext search
2015-06-26 12:08:23 +09:30
Toby Zerner
35c05862a4 Fix unwanted onbeforeunload message 2015-06-26 11:57:52 +09:30
Toby Zerner
f2f23138b2 Tweak how discussion sidebar displays on mobile
Give all items in an item list a class on their <li>. Super helpful for
styling
2015-06-25 15:38:29 +09:30
Toby Zerner
099b910be9 Prevent incorrect badge redraw diffing 2015-06-25 15:35:11 +09:30
Toby Zerner
cbd3509ad2 More accurate scrubber height resizing 2015-06-25 15:34:34 +09:30
Toby Zerner
aec6a4b86c Fix faulty detection of touch device 2015-06-25 15:34:14 +09:30
Toby Zerner
2c70c4fa82 Fix active discussion not highlighting in pane 2015-06-25 15:33:56 +09:30
Toby Zerner
4778d15dcb Clean up 2015-06-25 15:33:37 +09:30
Toby Zerner
bda8b5d88d Give all components config on the root element
So that extensions can work on it no matter what
2015-06-25 15:33:29 +09:30
Toby Zerner
8fe2f54489 Split discussion controls into three groups:
- user (reply, subscription)
- moderation (rename, sticky, tags)
- destructive (delete)

Will keep extension-added items organised nicely
2015-06-25 15:31:15 +09:30
Toby Zerner
6881229702 Close the composer completely if the reply is empty 2015-06-25 10:34:37 +09:30
Toby Zerner
34ca6d4515 Implement onbeforeunload composer confirmation. closes flarum/core#113 2015-06-25 10:34:14 +09:30
Toby Zerner
f3b8c31e18 Make home button route correctly, not respond on middle click
Amends flarum/core#140, closes flarum/core#136
2015-06-25 08:14:51 +09:30
Toby Zerner
e8bb044701 Discussion list refactor, gestures
Also make base Component class automatically assign this.element :)
2015-06-24 17:56:39 +09:30
Toby Zerner
3b7c7de83b Fix deleting posts causing subsequent posts to display incorrectly 2015-06-24 11:46:43 +09:30
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
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