* Removed “extras” code because I just forgot I already implemented a Feature prototype
* Added global <% feature %> macro calling the main() method of the desired feature
* Added Feature.getPermission() method which can be invoked from HopObject.getPermission()
* Refactored connect feature to work with modified Feature prototype
* Added global app.data.extras collection and registerExtra() method
* Defined res.handlers.extra in HopObject.onRequest() handler to provide extra macros
* Implemented reCAPTCHA for anonymously contacting an Antville member as proof of concept
* Added type argument to global formatDate() and format_filter() methods
* Added JSON.js module
* Added app.data.features collection
* Fixed routine for salting passwords (probably due to jQuery upgrade)
* Renamed Members.salt_js_action() method to Members.salt_txt_action()
* Added markgettext_macro()
* Readjusted Admin.dropdown_macro() and the global defineConstants() methods to work with the modified markgettext() calls
* Updated Members.properties and added SQL patch for lowercasing all membership status due to the modified margettext() calls
* Added Membership.role_macro() as convenience method
* Removed syntactic sugar from HopObject.link_macro() and moved it to the compatibility layer to prevent current layouts from breaking
* Removed obsolete permission for non-existing Image.replace_action()
* Refactored and unified remove() methods and calls for greater flexibility as well as reliability
* Added option to remove all comments by a user to Comment.remove() method and $Comment#delete skin
* Added global #listItemFlag skin as well as listItemFlag_macro() for rendering vertically written text of items in a list view (e.g. closed)
* Fixed bug in gettext_macro() and ngettext_macro() causing incorrect whitespace
* Refactored timezone and locale handling
* Modified automatic translation of untitled links in HopObject.link_macro()
* Added honeypot to login and registration forms
* Fixed client-side JavaScript to be evaluated when login or registration form is submitted, not only when the submit button is clicked
* Removed redundant filter expression from DB mapping of Membership.images collection
* Added Membership.content collection
* Changed terminology from open to running polls, thus renaming Polls.open_action() method and Polls.open collection
* Moved a lot of CSS used in root or administration sections from Site#stylesheet to $Root#stylesheet skin
* Added Root.updateDomains() method (most likely already obsolete)
* Removed Root.processHref() method (only necessary for very advanced setup) and obsolete comments
* Fixed Root.xgettext() method to correctly read UTF-8 encoded data
* Fixed Site.deleted_macro() to return the date object for late formatting
* Refactored Site.processHref() for more convenient custom domain name mapping
* Renamed Skins.advanced_action() method to Skins.all_action()
* Removed redundant filter from Stories.comments collection
* Removed unnecessary filter from Story.comments collection
* Added setup routine to Root.main_action() which is executed when there is an unconfigured root site or no privileged user (admin)
* Modified $Image#edit skin: check for Image.fileName property insteaed of "created" when deciding whether to show the name and dimension input fields
* Added missing res.data.title to $Members#register skin
* Removed app.log() calls when catching login or registration exceptions
* Added empty User.onLogout() method to get rid of some "errors" in the log file
* Removed obsolete code
* Added warning when a site sends passwords in clear text
* Fixed really ugly bug preventing IE(7?) from setting the charset encoding to UTF-8; the hyphen is necessary, UTF8 won't work!