Added get_template() loading components/templates/{$template}.tpl

Returns false if file not found or cannot be read.
Check if headers_set in addition to count($this->response)

This will send an HTTP status code of 403 even if errors are reported.
Use parentElement.matches() in Element.ancestor()

This allows for finding ancestors by means other than tagName
Added template handing.

Beginning of an idea I had to combine <template> elements, JSON, and
localStorage to make ajax requests only send the dynamic content.
Updated wywiwyg editor for use with document.execCommand()

No longer use getSelection() and substrings. Instead, use the built-in API
for contenteditable.

data-editor-command will be passed as the first argument for execCommand,
null will always be passed as the second, and the third argument can be one
of several things. If data-prompt is set, it will be the return from a prompt
created, using data-prompt as its message (for links and such). If
data-editor-value is set, it will use that instead. Finally, if none of these are
true, it will be null.

Added several more menuitems and menus, attempting to make better use
of the full set of features.

See https://developer.mozilla.org/en-US/docs/Midas
Updated action to URL and use wysiwyg menu
Modified for use with the new wysiwyg menu and updating posts.

First, update query for wysiwyg listeners to match all commands in menu.

Look for data-editor-command, data-editor-value, and data-prompt for
arguments to pass to document.execCommand().

Added description to form created for updating posts (uses meta name=
description for initial value)
Added requirement of, and ability to update description in edit_post.
Added missing name on textarea created for meta description.
Set article header to position: sticky.

This will leave it in place until it hits the top of the window, after wish it will
be pushed down and behave as though it were position: fixed