Commit Graph

684 Commits

Author SHA1 Message Date
Toby Zerner
208d90293d Fix extension settings 2015-10-11 23:18:57 +10:30
Toby Zerner
4580ebe100 Show posts even if they don't have a user 2015-10-11 22:28:23 +10:30
Toby Zerner
cf42765513 External helpers are included by default now 2015-10-11 11:37:23 +10:30
Toby Zerner
7387dfb7da Concatenate items in {second}, not {first} 2015-10-11 10:09:22 +10:30
Toby Zerner
18def302d6 Bundle unminified JS; minify via ClosureCompilerService when in production
Falls back to a less effective minification library if ClosureCompilerService errors or is unavailable. Minification takes a while (20 seconds or so), but it only happens when assets are modified. Still, this means enabling/disabling extensions is taking far too long. Possible solutions:

- Don't minify initially; set a process running in the background to do minification, and server unminified assets in the meantime.
- Refactor compiler to send each JS file to CCS individually, only if that particular file has been modified.

flarum/gulp has also been updated to no longer support uglification.

closes #582
2015-10-09 00:33:53 +10:30
Toby Zerner
bddbf24055 Make punctuate translatable, rename to punctuateSeries 2015-10-08 22:42:03 +10:30
Toby Zerner
c3cf5fe074 Only show restore button for comment posts 2015-10-08 17:45:44 +10:30
Toby Zerner
dd67291ce0 Major refactor and improvements
- Reorganised all namespaces and class names for consistency and structure. Following PSR bylaws (Abstract prefix, Interface/Trait suffix).
  - Move models into root of Core, because writing `use Flarum\Core\Discussion` is nice. Namespace the rest by type. (Namespacing by entity was too arbitrary.)
  - Moved some non-domain stuff out of Core: Database, Formatter, Settings.
  - Renamed config table and all references to "settings" for consistency.
  - Remove Core class and add url()/isInstalled()/inDebugMode() as instance methods of Foundation\Application.
  - Cleanup, docblocking, etc.

- Improvements to HTTP architecture
  - API and forum/admin Actions are now actually all the same thing (simple PSR-7 Request handlers), renamed to Controllers.
  - Upgrade to tobscure/json-api 0.2 branch.
  - Where possible, moved generic functionality to tobscure/json-api (e.g. pagination links). I'm quite happy with the backend balance now re: #262

- Improvements to other architecture
  - Use Illuminate's Auth\Access\Gate interface/implementation instead of our old Locked trait. We still use events to actually determine the permissions though. Our Policy classes are actually glorified event subscribers.
  - Extract model validation into Core\Validator classes.
  - Make post visibility permission stuff much more efficient and DRY.

- Renamed Flarum\Event classes for consistency. ref #246
  - `Configure` prefix for events dedicated to configuring an object.
  - `Get` prefix for events whose listeners should return something.
  - `Prepare` prefix when a variable is passed by reference so it can be modified.
  - `Scope` prefix when a query builder is passed.

- Miscellaneous improvements/bug-fixes. I'm easily distracted!
  - Increase default height of post composer.
  - Improve post stream redraw flickering in Safari by keying loading post placeholders with their IDs. ref #451
  - Use a PHP JavaScript minification library for minifying TextFormatter's JavaScript, instead of ClosureCompilerService (can't rely on external service!)
  - Use UrlGenerator properly in various places. closes #123
  - Make Api\Client return Response object. closes #128
  - Allow extensions to specify custom icon images.
  - Allow external API/admin URLs to be optionally specified in config.php. If the value or "url" is an array, we look for the corresponding path inside. Otherwise, we append the path to the base URL, using the corresponding value in "paths" if present. closes #244
2015-10-08 14:28:02 +10:30
dcsjapan
1a3e085a9c Fixes namespace errors in keys for the two extracted strings. 2015-10-06 09:56:12 +09:00
dcsjapan
78cd35d93c Extract leftover core strings
Adds app.trans calls for a couple strings in core:
- The "there are no discussions" message in DiscussionList.js
- The user deletion confirmation message in UserControls.js
- Also adds new HTML-style tags to LogInModal.js and SignUpModal.js
2015-10-06 05:52:03 +09:00
dcsjapan
4725ac4131 Extract admin strings
Adds app.trans calls for strings used by the admin UI.
- Strings for AddExtensionModal.js not included.
- Corresponding YAML will be sent later w/ more extracted strings.
2015-10-05 19:06:41 +09:00
Toby Zerner
2223e1a13c Add compiled JS 2015-10-03 16:59:53 +09:30
Toby Zerner
296b822636 Merge branch 'master' into composer 2015-10-03 16:41:23 +09:30
Mike Nolan
56e10ce6ba Read documentation link broken
This fixes #510 by putting in the link to the themes documentation
2015-10-02 17:24:01 +01:00
Toby Zerner
03f862fe8c Merge branch 'master' into composer 2015-10-02 17:57:24 +09:30
Toby Zerner
e251cf34c4 Use composer.json for extension metadata 2015-10-02 17:49:16 +09:30
dcsjapan
a590150698 Fixes core.deleted_username as well. 2015-10-02 16:37:09 +09:00
dcsjapan
0a66229169 Add "forum" namespacing to previously renamed core keys
- Does not affect "core.deleted_user" global string.
- Corresponding YAML will be sent later w/ more extracted strings.
2015-10-02 15:54:39 +09:00
Toby Zerner
4e5b3099f8 Fix scrubber dragging division by zero
closes #64
2015-09-29 17:46:05 +09:30
Toby Zerner
e0aa99fabb Properly mark all notifications as read
Previously, clicking the "mark all notifications as read" button would individually mark each of the visible notifications as read. Since we now always show a badge with the number of unread notifications, we need to make sure that all notifications (not just the visible ones) can be marked as read. Otherwise it would be possible to get stuck with an unread badge there.

This commit adds a new API endpoint which marks *all* of a user's notifications as read. The JSON-API spec doesn't cover this kind of thing (updating all instances of a certain resource type), so I'm a bit unsure regarding what the endpoint should actually be. For now I've gone with POST /notifications/read, but I'm open to suggestions.

ref #500
2015-09-29 16:41:05 +09:30
Toby Zerner
6463d912a9 Properly handle errors in change email modal 2015-09-29 15:19:06 +09:30
Toby Zerner
b39a991940 Remove "go to email provider" buttons
closes #541
2015-09-29 15:18:55 +09:30
Toby Zerner
0db4708ef9 Add missing semicolon 2015-09-29 14:29:40 +09:30
Franz Liedke
ce094be83e Sync notification count when clicking on them or marking all as read
Refs #500.
2015-09-29 01:28:47 +02:00
Franz Liedke
f5b5d9ca5c Use correct method for notification drawer on mobile
Refs #500.
2015-09-29 01:28:47 +02:00
Franz Liedke
040ce52724 Return both unread and new notification count from the API
Related to #500.
2015-09-29 01:28:47 +02:00
Franz Liedke
1f7afb3e4a Implement third state for notification list dropdown
Related to #500.
2015-09-29 00:50:28 +02:00
Toby Zerner
538a3e5e98 Prevent infinite redraw loop in IE
Welp, this is probably the most subtle bug I've ever tracked down and fixed.

Turns out that IE has this bug where the "oninput" event will be triggered whenever the "placeholder" attribute is changed. Most placeholders get their value from app.trans. The app.trans method returns a VirtualElement – which is an array, not a string! That means when Mithril's diffing algorithm was comparing the old value to the new value, it was comparing two different array instances, and thus deciding the value was dirty and the placeholder attribute needed to be updated. Due to the IE bug, that was leading to the "oninput" event being triggered... and then through Mithril's auto-redraw mechanism, a redraw would be triggered, and so the cycle continued.

Since the inputs in the LogInModal (among others) only update the component state on the "onchange" event (i.e. when the input loses focus), the intermittent redraws would cause the input's value to be cleared continuously. That's what was causing #464. Could've been easily and superficially patched by changing them to use "oninput" events, but luckily I dived a little deeper!

Glad that's over. Running IE11's buggy dev tools in an underpowered VM isn't fun. Would not recommend.

closes #464
2015-09-25 23:44:15 +09:30
Toby Zerner
f1c40eeccc Prevent empty beforeunload dialog on Internet Explorer 2015-09-25 23:21:10 +09:30
dcsjapan
4851596c78 Revises the dashboard links to emphasize beta testing procedure.
Closes flarum/core#542
- Includes a disclaimer stating that the software is provided mainly
for testing.
- Directs bug reports to the Support tag in the forums instead of the
issue tracker
- Directs feedback to the Features tag in the forums
2015-09-25 12:55:13 +09:00
Toby Zerner
88372640aa Remove core key reorganization comments 2015-09-24 14:22:32 +09:30
Toby Zerner
fdb598187f Revert to "go to email provider" button 2015-09-24 14:22:14 +09:30
Toby Zerner
b126055611 Add "last reply" icon to discussion list 2015-09-24 09:05:52 +09:30
dcsjapan
c2ad1181b1 Merge remote-tracking branch 'flarum/master' into core-key-reorganization 2015-09-23 14:58:34 +09:00
dcsjapan
d5d7185794 Primary key renaming
Improved consistency for existing core translation key names.

See flarum/core#265
- Completely overhauled core en.yml
- Replaced existing key names in all core JS files to match
- Extracted a hardcoded string in IndexPage.js
- Combined two app.trans calls in DiscussionControls.js
- Removed hardcoded spaces from LogInModal.js and SignUpModal.js
- Added two new keys from DiscussionControls.js (soft delete)
- Created two new “reused keys” to YML to accommodate same
2015-09-23 14:58:33 +09:00
Toby Zerner
a0267d9515 Add extra check to make sure post has been fully loaded
Ref #295
2015-09-23 12:22:37 +09:30
Toby Zerner
3020710959 Move post Restore control into same section as Delete Forever 2015-09-22 17:58:19 +09:30
Toby Zerner
5598e885b7 Improve admin permissions page with icons, visual tweaks 2015-09-22 17:52:16 +09:30
Toby Zerner
264725d872 Allow discussions to be hidden and restored 2015-09-22 17:48:21 +09:30
Toby Zerner
c7ed189cf3 Use ES6 syntax 2015-09-22 17:23:47 +09:30
Toby Zerner
ab6e3351b4 Redraw old data after unsuccessful save 2015-09-22 17:23:28 +09:30
Toby Zerner
f591851cb2 Patch Mithril with a route shortcut attribute
Instead of:

<a href={app.route.user(user)} config={m.route}>

We can use:

<a route={app.route.user(user)}>
2015-09-22 17:09:38 +09:30
Toby Zerner
f55d95c9b7 Select contents of search input on focus 2015-09-22 17:06:06 +09:30
Toby Zerner
d610ea663f Keep post actions visible when controls dropdown is open
Also show without hover on touch devices
2015-09-22 17:05:14 +09:30
Toby Zerner
8ab0686666 Properly hide loading spinner on unsuccessful post edit 2015-09-22 16:57:06 +09:30
Toby Zerner
efca923d30 Add "Debug" button to inspect the response of a failed AJAX request
Related to #118
2015-09-18 16:46:46 +09:30
Toby Zerner
4041c18014 Further tweaks to post layout
Move footer after actions so that we'll be able to have larger things
in the footer (e.g. Answers) without pushing down the controls.
2015-09-18 14:38:57 +09:30
Toby Zerner
514eec7466 Clean up 2015-09-18 13:29:50 +09:30
Toby Zerner
4752142c11 Reflect composer's focus state in a property 2015-09-18 13:15:58 +09:30
Toby Zerner
6582c5fcf0 Smooth out initial composer slide animation 2015-09-18 13:14:12 +09:30
Toby Zerner
6fff3cc0dc Add abstract SettingsModal component in admin app
Makes building settings modals (that update basic config values) a
whole lot quicker/easier.
2015-09-18 13:13:25 +09:30
Toby Zerner
0b406a06a1 Patch Mithril with a bidi attribute
Enables quick bidirectional bindings. So instead of this:

<input value={prop()} oninput={m.withAttr('value', prop)}/>

... we can do this:

<input bidi={prop}/>
2015-09-18 13:06:37 +09:30
Toby Zerner
1fc369c59e Cleanup, update changelog 2015-09-18 13:01:31 +09:30
Toby Zerner
dbd33f687c Remove "custom" home page input
Also add an API to let extensions define additional default route
options.

Allowing default routes with parameters (e.g. /d/123) is very difficult
because of the way Mithril routing works, and it doesn't have a
convincing use-case to justify the trouble. So I've removed the custom
input altogether.

closes #427
2015-09-17 12:56:39 +09:30
Franz Liedke
9767bce1e3 Move dropdown mouseover to correct location
Related to #496.
2015-09-16 09:00:33 +02:00
Franz Liedke
ffcba1f173 Always use label as tooltip for header icons
Closes #496.
2015-09-16 08:45:45 +02:00
Toby Zerner
b0da51309e Copy properties when monkey-patching 2015-09-16 16:03:25 +09:30
Toby Zerner
8414a59908 Don't use a default dropdown label 2015-09-16 10:12:49 +09:30
Toby Zerner
e524c59f97 Improve external authentication API
Some providers (e.g. Twitter) don't expose user email addresses, so it
turns out we can't use that as the sole form of identification/account
matching.

This commit introduces a new `auth_tokens` table which stores arbitrary
attributes during the sign up process. For example, when Twitter is
authenticated, a new auth token containing the user's Twitter ID will
be created. When sign up is completed with this token, that Twitter ID
will be set as an attribute on the user's account.
2015-09-15 15:56:48 +09:30
Toby Zerner
cac670e699 Focus on username field when login buttons are present 2015-09-15 13:04:45 +09:30
Toby Zerner
fa265152c7 Clean up new post layout 2015-09-15 12:42:03 +09:30
Toby Zerner
5c98a08e0f Merge branch 'master' into compact-posts 2015-09-15 11:27:49 +09:30
Toby Zerner
6beb4fe898 Add external authenticator (social login) API
Allows registrations to be completed with a pre-confirmed email address
and no password.
2015-09-15 11:27:31 +09:30
Toby Zerner
8cccaaaf6b Improve API error handling
- Change 'path' key to 'source.pointer', as per spec
- Add 500 error detail if debug mode is on
2015-09-14 15:40:07 +09:30
Toby Zerner
d5b58b3146 Only set XHR authorization header if token isn't empty 2015-09-14 14:49:11 +09:30
Toby Zerner
f00d2b1363 Remove unused component 2015-09-14 14:48:05 +09:30
Toby Zerner
efff485d6c Restyle posts to be more compact, relocate controls 2015-09-08 10:29:00 +09:30
Toby Zerner
6a5427b600 Make unread discussion titles less overwhelming 2015-09-08 10:27:50 +09:30
Toby Zerner
e8621636c5 Add init hook as a way to effectively monkey patch constructors
Related to #246
2015-09-08 10:27:02 +09:30
Toby Zerner
8c4e095f23 Allow first post to be hidden/restored
Anti-spam extensions may automatically hide the first post in a
discussion, and thus we had to implement smarter permissions so
discussions with zero posts wouldn't be visible to users other than the
author/mods. This change allows those hidden posts to be restored again.
2015-09-07 16:03:45 +09:30
Toby Zerner
f6e21b75e1 Remove unused translations 2015-09-05 16:05:02 +09:30
Toby Zerner
695df18be0 Don't show placeholder when loading discussions 2015-09-04 13:50:17 +09:30
Toby Zerner
7a6c48c30b Correct check that a translation is an object
typeof translation === 'object' returns true when translation is null
2015-09-04 12:19:02 +09:30
Toby Zerner
9bf6862c6d Clean up Post CSS 2015-09-04 12:17:30 +09:30
Toby Zerner
44f460cb11 Prevent ItemList crash when item is a number 2015-09-04 12:17:01 +09:30
Toby Zerner
7cce5b02ba Allow non-array value to be passed into listItems
Useful in some scenarios when using JSX
2015-09-04 12:16:23 +09:30
Toby Zerner
722058f2fb Move generic util into lib
Might come in handy for the admin section later on
2015-09-04 12:15:41 +09:30
Toby Zerner
70815b024a Make Dropdown and NotificationsDropdown components more extensible 2015-09-04 12:15:11 +09:30
Toby Zerner
7269385786 Make a copy of props passed into a component
Prevents some rare errors where the props object is read-only, and is
generally safer.
2015-09-04 12:13:55 +09:30
Toby Zerner
2f8a449b74 Simplify notification markup 2015-09-04 12:12:48 +09:30
Toby Zerner
b3aa0298d5 Fix use of "new" keyword making eslint angry 2015-09-04 12:12:21 +09:30
Toby Zerner
e192402a42 Add item priorities 2015-09-04 12:11:45 +09:30
Franz Liedke
f0c240f863 Add a first empty state to the discussion list 2015-09-03 09:59:33 +02:00
Franz Liedke
bd47653377 Merge pull request #403 from mtotheikle/allow-extra-signup-data
Allow support for passing extra signup data to API
2015-09-01 18:28:53 +02:00
Michael Williams
07ed4d10c0 Allow support for passing extra signup data to API 2015-09-01 07:58:14 -07:00
Toby Zerner
bf83b36882 Remove redundant call 2015-09-01 10:08:37 +09:30
Toby Zerner
2438bbfd41 Reload post if user relationship isn't loaded
May fix #295, but haven't been able to reproduce/test.
2015-08-31 14:03:08 +09:30
Toby Zerner
e7f4e5060c Use GroupBadge component to display user badges
closes #277
2015-08-31 13:44:05 +09:30
Toby Zerner
283abb88c2 Fix reply composer preview button
closes #238
2015-08-31 13:27:04 +09:30
Toby Zerner
af2307868a Fix JavaScript style 2015-08-31 13:19:51 +09:30
Toby Zerner
f9d724738c Add syntax highlighting for code blocks
We might consider extracting this into an extension, but TextFormatter
does syntax highlighting for code blocks by default in live previews
anyway.

closes #248
2015-08-31 13:17:16 +09:30
Toby Zerner
42e722d824 Fix incorrect translation output
app.trans returns a VirtualElement, so there's no need to wrap it in
m.trust.

closes #237
2015-08-31 12:41:36 +09:30
Toby Zerner
0ae2d18f28 Extract base Page class 2015-08-31 12:05:33 +09:30
Toby Zerner
0474f410a4 Refactor start/endComputation into lazyRedraw method 2015-08-31 12:04:51 +09:30
Toby Zerner
f44e9f5140 Remove <script> tags from plain post content
closes #362
2015-08-31 10:49:24 +09:30
Franz Liedke
a04acca92e Allow Ctrl key for submitting posts, too
Closes #276.
2015-08-29 17:09:14 +02:00
Toby Zerner
67f6b8599d Allow string primitives to be added to ItemLists 2015-08-29 15:25:36 +09:30
Toby Zerner
d352c49e29 Reorganise dashboard help text 2015-08-27 10:59:50 +09:30
Toby Zerner
b0db7bf751 Polish admin dashboard 2015-08-27 10:50:15 +09:30
Toby Zerner
3e4a8fe769 Collapse search input on tablets. closes flarum/core#162
While this solution isn't perfect (perhaps a search icon which opens a
dropdown would be better, like Discourse does) - it'll do for now :)
2015-08-27 08:34:19 +09:30
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