* develop:
Added control for copying the value macro to the clipboard
Enabled built-in colorpicker for any value which name ends with “color”. (Fixes issue 39.) Added remove link for any value form element. Fixed issue where no value could be added after the last remaining one was removed.
Moved content of style attributes to main.less or the stylesheet skins of Root and Site.
Adapted original Antville colors for some of UIKits elements (e.g. primary button, default alert, pagination) and the Jala calendar
* Fixed value of layout sandbox cookie in Layout.sandbox() method
* Removed (yet) unused Layout.sandbox_action()
* Removed (yet) unused session.data.layout in HopObject.onRequest()
* Moved code setting res.contentType to top of Tag.rss_xml_action()
* Disburdened constructor methods of most of the prototypes by moving most of the code to the new static add() method.
* Added temporary debugging method HopObject.confirmConstructor() to log a warning whenever a constructor is directly called – in which case it should be checked if the static add() method is to be preferred.
* Removed obsolete code in Poll.edit_action() method.
* Removed call for Site.processHref() method in Site.getStaticUrl() - still to be evaluated
* Added call for Feature.getPermission() in Site.getPermission()
* Metadata is now written to its own table instead of a column only
* Values are saved as JSON-like structure only for certain types (like Array or Function)
* Adding custom metadata is more generic using the new HopObject methods setMetadata(), getMetadata() and deleteMetadata()
* Searching keys and values via common SQL query is much more straightforward (no JSON-like structure involved when basic types like String and Number)
* 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
* Slightly modified the message informing about successful deletion of an object
* Fixed type when calling Membership.remove() in Site.unsubscribe_action() method
* Fixed bug causing exception when calling Membership.remove() method with no arguments
* FIxed still incorrect permissions for editing and deleting a membership
* Slightly increased sizes of some input elements for convenience
* Added SQL patch updating constraints of the membership role column (MySQL)
* Removed obsolete title and description properties from Layout
* Minor layout enhancements and wording edits
* 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 Admin.queue(), Admin.dequeue() and Admin.purgeSites() methods to use new Admin.Job prototype
* Refactored Exporter and Importer objects to use new Admin.Job prototype (the way sites are im/exported still needs to be rewritten)
* Refactored resetting and importing a layout to always backup the current layout in a temporary ZIP file
* Moved import_action() method along with corresponding skins from Root to Site
* Moved #create skin from $Root to $Site
* Added the root site itself to the Root.sites collection
* Permitted deletion of the root site by adding appropriate checks and treatment in Site.remove()
* Moved call for Admin.dequeue() from scheduler() to nightly() method
* Removed obsolete Admin.importExport() method
* Removed obsolete app.data.exports and app.data.imports properties
* Replaced custom SQL query in Comment.remove() with code using new Membership.comments collection
* Removed obsolete Sql.COMMENTS statement
* Added getConfirmText() method to Comment, File, Image, Layout, Membership, Poll, Skin and Story prototypes – which is used in HopObject.delete_action() for more convenient feedback about what is going to be deleted (fixes issue 37 for now)
* Fully enabled translation in global breadcrumb_macro()
* Removed obsolete Layout.getTitle() method
* Disabled translation in HopObject.toString() methods
* Fixed and added some i18n messages to ease translation
* 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
* Moved the private copy() method in Root.create_action() to helma.File.copyDirectory() in Global.js (will be committed later)
* Replaced the copy routine with call for Layout.reset()