* develop:
Renamed Stories.render_action() to render_json_action()
Added account image with link to https://gravatar.com
Added HTML sanitizer for comments and stories. Fixes issue 64.
Added button for easily adding a username to the troll filter
Implemented “gaslighting” of troll comments, i.e. hiding a comment of a known troll for everyone else but themselves
Removed misleading trailing “(Server)” from console output
Fixes issue 143
Separated rendering of core and custom CSS with Less and added more detailed error output
Improved display of console messages
Added bottom margin after article meta in case there is no title
Introduced another value for the color of borders, vertical and horizontal lines
Conflicts:
code/Global/0.node.js
code/Global/Global.js
code/Site/$Site.skin
code/Story/$Story.skin
code/Story/Story.js
code/Story/Story.skin
* Replaced req.data with req.params in Stories.create_action() and Images.create_action() to prevent leaking of unwanted data (e.g. http_*) to the database
* Renamed and refactored Story.setMetadata() to Story.setCustomContent()
* Renamed Story.isMetadata() to Story.isCustomContent()
* Added JSON.pad() and JSON.sendPaddedResponse() methods
* Added calls for JSON.sendPaddedResponse() in Stories.create_action() and Images.create_action()
* Removed numbered, footnote-like links in most of the noficitaion messages
* Added prefix to subjects of notification mails (like “[Antville] ...”) for convenience
* Added markgettext() calls for most of the prototype names and their plural forms – this time in each corresponding prototype file, though
* Added options argument to global sendMail() method, currently only to switch inclusion of generic footer in mail body
* Fix bug in Membership.contact_action() method when an unknown (i.e. unregistered or unsubscribed) user tries to send a message via contact form
* Unified naming of notify skins (e.g. #notify_delete instead of #notify_deletion)
* Updated and rebuilt i18n and message files
* 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 second argument to HopObject.remove() method; if set to true, any object will be removed without any checks for permissions or the like
* Enhanced notfound and error screens
* Removed obsolete Image.site property
* Added missing LogEntry.remove() method
* Added Site.deleted property
* Fixed missing calls for remove() methods of some collections in Site.remove()
* Added Root#stylesheet skin for future CSS classes necessary for GUI elements
* Added missing Site.entries collection
* Removed troublesome if condition in Skin.remove()
* Generally deny access to Skin.main_action
* Added missing Skin.getFormValue() method
* Added check in Skin.update() if the Site#page skin contains the <% response.body %> macro
* Added Skins.onRequest() method checking if we are in-between two Skins objects
* Hopefully fixed redirect loop bug of XSS check in HopObject.onRequest()
* Added Root.xgettext() method as a more reliable way of extracting gettext call strings (esp. from skins)
* Added global default_filter() method as alternative (and fix in some cases) for the “default” macro parameter
* Do not show a story’s summary in top stories view but instead try the title and apply the newly introduced default_filter() method with the clipped story text to it
* Modified LogEntry to fit into the new logging mechanics
* Added commitRequests(), commitReferrers() and purgeReferrers() to Root prototype
* Added referrers collection to Root
* Re-added Site.spamfilter property for now
* Refactored Site.referrers_macro() and Story.referrers_macro() (formerly backlinks_macro, but compatibility is granted)
* Removed obsolete method Stories.flushRequests()
* Reactivated referrers (thus, including backlinks) for privileged users for testing purposes
* Added global nightly() method which is called from a new cronjob at 5 am
* Added calls for referrer purge and commit methods in Root to scheduler
* Added Story.count() method to increment the request counter; overwrites Helma's built-in HopObject method but it's anyway redundant with HopObject.size()
* Added utility methods for database access in Sql.js
* Added Membership.toString() method for human-readable output
* Assigned Membership.valueOf() method original toString() method
* Fixed output of site list in userland
* Added mountpoint for Api prototype in Root
* Added trimming for Story text and title input