Ordering by `is_sticky and (unread subquery) desc` removes MySQL's
ability to use an index for ordering by `last_time`, which triggers a
filesort across the whole discussions table which is BAD.
This commit uses a union to add all stickied discussions to the query.
The results of the unioned queries are then ordered by the `is_sticky
and (unread subquery)` criteria, so the filesort only takes place on
a maximum of limit * 2 rows. Big performance win when you get up to
thousands of discussions!
Based on some limited testing, using a subquery seems to outperform a
join in this case (the join was invoking a temporary table, which is
always a bad sign).
This also adds logic to fix a bug where sticky discussions would remain
at the top even when marked as read using the "mark all as read" button.
I thought we had an open issue for this somewhere, but I can't seem to
find one. ref #988#1003
There is a Mithril bug which causes context.retain to be ineffective for
children nodes. https://github.com/MithrilJS/mithril.js/issues/1300
Thus, we have to assume that the children nodes (like the textarea)
may be recreated and thus we need to update its height on each redraw.
fixes#948
- Don't scroll to the bottom of the discussion when selecting "Reply"
from the menu if the composer is in full screen mode (ie. on mobile).
ref #1271
- After posting a reply, scroll to the end of the discussion
- Reduce the textarea height - previously it was 100vh, but this doesn't
account for the height of the iOS keyboard, so I've just arbitrarily
chosen 300px instead. There may be a better solution for this.
ref #1269
I believe the constant overlay of a loading div may be what's causing
the iOS cursor issues. This commit removes the fade animation so that
we can simply set display to none, which will hopefully fix the issue.
#1074 changed the input type for these fields to "color", but it turns
out the browser support for this input type sucks (they give you a very
limited color picker, and make it hard to input hex codes).
Not sure why this started happening now, but the admin navigation
dropdown wasn't receiving its children properly. This commit fixes a
flaw in our Mithril patch and allows an array of children to be passed
in the normal JSX way, rather than as an attribute.
* Returning the $default value if there's no config
This is especially important for the CookieFactory which accesses
the configuration before the application is installed
* Injecting the configuration values into the CookieFactory