GuestNo new alerts

Patches 18 to 20

- Updates79
I've been pushing lots of database schema changes lately, so the patch counter has jumped up a fair bit lol
Anyway, I've done a few things since 0.2.0 on April 8th:

* Many new unit tests. A unit test to the unversed is basically an automated test to see if there are bugs in the software. These are essential in just about any modern software, although many projects lack them altogether :'(

* Support for h1, h2 and h3 headers in posts. These are nice little headings you can use to break up section of content, a lower number means larger text, more or less.

* Internationalisation. It is easier for you to localise things into your own language, including setting a isocode which is reflected in the header (for better SEO) and you can customise more phrases than ever before.

* Markup Plugins. I've ported some core HTML parser features like headers and quotes to Plugin Markdown and Plugin BBCode, so you can use them there too, if you like those markup formats better.

* UI Improvements. Poll, moderation tools, move action posts, re-ordering forums by dragging them, more visual hints, more notices and a bunch of other things.

* Themes. You can now use the attachment manager in Cosora.

* Templates. Less inline styles, some templates have been split into smaller chunks to make them easier to deal with and I've used dyntmpl to reduce the amount of boilerplate in the control panel templates and to make them faster as-well.

We also use more client templates now rather than ugly inline HTML in script files, hooray.

* Plugins. More hooks and more plugins to help identify areas the software is weak in. There is more work to come with this.

* Bug fixes. I've fixed many, many bugs including some long-standing pests.

* Reverse-proxy. I've added a few bits of advice for handling these slightly annoying beasts and added some settings to disable a few security features, if they conflict with them.

* Better Client Performance. Scripts which don't need to be loaded aren't (e.g. member only stuff), more data is cached rather than having to ask the server over and over (including "uncacheables", more to come here), try to flush <head> to the browser early (?), etc.

* Performance. Script names are no longer concatenated with their hashes during requests but at start-up, setting headers is deferred to renderTemplate just in case they're unnecessary, WebSockets no longer thaws the topic list, a string builder is used to build the Link headers, Hyperdrive, etc.

* Non-image attachments. Very simple support for non-image embeds.

* And much much more.

Like always, patches require the updater / patcher rather than just overwriting files with new ones via Git.