News and announcements
This is the last release of series 0.8. It is a bugfix release, also including minor improvements, mainly at the gen and px levels. This is the last 'gen' version where ZPTs (Zope Page Templates) will work. They will be replaced with PXs (appy.px=PythonXml) in the next Appy version.
[pod,px] 'loop' variable, available in the pox/px context, allows to know if we are managing an even or odd elem via loop.<elem>.odd and loop.<elem>.even.
- Added the posssibility to create a custom widget that displays an icon for generating a doc from a pod field, but with an additional param allowing to customize the pod context.
- Some actions were triggered via icons. That was not explicit enough for basic users. So now, every action is triggerd by a button that displays an icon+a text.
- In the process of migrating from ZPT (Zope Page Templates) to appy.px (Python Xml).
- On Page instances, one may now define a method for conditionnally showing the 'edit' button on 'view' layout.
- An app may now, on its Config class, define a method getHomeObject that must return an object that will be the home object for a given (class of) user(s). This object's menu will appear when the user is consulting a page with no tied menu (like a search for example).
- Moved Appy fields into appy/fields together with their PX.
- Added a validator for String fields, for validating Belgian NISS numbers.
- Created param config.
- On a appy class it is now possible to define a static method 'generateUid' that generates a UID for every instance of this class, instead of using the standard Appy way to produce such UIDs.
- Changed the way to customize the Config in an app.
- PX is now thread-safe.
- Added the possibility to have several PX actions in the same XHTML tag. If several PX actions are defined, they are evaluated in this order: var, for, if.
- Added tag 'var2', similar to 'var', but that is executed after tags 'for' and 'if'.
- Managed special HTML attributes like 'checked' and 'selected'.
- Better error reporting when encountering a parsing error in a PX.
- Added boolean param 'unicode' that defines if PX result must be unicode or an encoded str.
- dav: improved Resource.soap: better handling of HTTP header SOAPAction.
- dav: Upgraded dav.py to use httplib.
- dav.Resource: allow to retrieve the result encoded or not in utf8.
- Added the possibility to define several variables, in 'with' statements, separated by ';'.
- Added the possibility, for function 'document', to import, into an ODT result, external documents of various formats: doc, xls, ppt, etc. This new 'ConvertImporter' uses LibreOffice to first convert the doc into PDF, and then uses the PdfImporter to split the PDF into images (one image per page) and include in in the pod result.
- Allowed to call a pod template within another pod template via new POD function 'pod'.
- Improved error handling.
- Bugfix: error when a pod template does not have a 'mimetype' file inside (https:/
- Bugfix: error when parsing some ods pod templates: some cells do not have attribute 'office:value-type' (see bug https:/
- An expression that begins with char ':' is considered XML code that will come into the result unescaped.
- Within the context of a 'for' statement, loop objects now have additional boolean attributes named 'first' and 'last' that allow to know if the currently walked element is, respectively, the first of the last element of the whole list.
- Added params 'pageBreakBefore' and 'pageBreakAfter' to OdtImporter and PodImporter.
- Updated 'print' statements throughout Appy code, in order to be Python3x as well as Python2x-compliant. But Python3x support is not yet complete.
- Added new method 'pageBreak' allowing to insert a page break via a note 'do xxx from pageBreak()'
- Line breaks which are found within pod expression results are converted to odf line-breaks into the pod result.
- gen now integrates ckeditor 4.1.
- Integrated ckeditor inline editing via boolean parameter field.inlineEdit.
- icons.pt can now be configured even for anonymous users.
- Added tool.sendMail as an easy access method for function appy.gen.
- A Page instance that does not have sub-pages does not show the portlet.
- Added field appyclass.
- Added field appyclass.
- appyclass.getIcons now receives the nav param, in case one wants to reproduce, on an icon or a picture, the link to the element. For example, on a artist's site that presents its artworks, getIcons can be used to create a clickable link to a small version of the artwork, that leads to the full-size picture.
- Bugfix: sort references.
- Allow to show transitions on 'view' and/or 'result' layout types.
- UI improvements.
- Added the possibility to define dict someClass.styles (with, currently, a single entry 'title'), allowing to specify alternative CSS classes for class-related elements (here, 'title' allows to define an alternative CSS class for the link allowing to click on some instance of the class on a query or ref.
- Added a basic integration of gen applications with Google Analytics.
- Bugfix in the query engine.
- Bugfix: do not show the Calendar widget (search and edit layouts) if field.calendar is False.
- Bugfix in the start and end dates for the Calendar widget.
- Added Config.
- Corrected Zope index type for Date fields.
- wrapper.appyUser returns the admin if the user is 'System Processes', the virtual user that runs when Zope is starting.
- Added the possibility, for an admin, to unlock a page that was locked for too long by some user.
- Improvement in the management of Unauthorized exceptions.
- Added attributes 'created' and 'modified', now accessible on Appy wrappers.
- Added method AbstractWrapper
- Replaced attributes tool.enableAdva
- Added a mechanism for caching method calls that are performed several times for displaying a single ui page (ie: field.show methods).
- Bugfix in the way to index text fields containing line breaks.
- Added a new script odfGrep.py that allows to search for some pattern within odt and ods files.
- Added script bin/checklo.py to check connection to LibreOffice.
- First version of a new template engine Python-XML, sharing the pod roots.
***pod now works with ODS (spreadsheet) templates! ***
Here is the full change log.
- Added the possibility to use POD with ODS (Calc) templates. Integration with gen (Pod field).
- Bugfix for https:/
- Bugfix while generating filenames for files included into pod results.
- Changed the way pod results are re-zipped, in order to be compliant with section 17.4 of the OpenDocument format specification (bug https:/
- Use, when available, Python's uuid module to generate images and file names to be included in pod results.
- Performance improvement: stop computing tag names, create a dict of precomputed tags before starting parsing.
- Bugfix: import several times an image from the same URL.
- Bugfix: it is now possible to generate indexes on back references.
- Added the possibility to span widgets on several columns on the search screen (param Field.scolspan).
- Added config param 'enableSessionT
- Bugfix: generate i18n label even for transitions for which show is False, because the label will be used within object's history.
- Allow to display, in history, differences between successive versions of XHTML fields via appy.shared.
- Allow to show the cumulative differences performed on historized String fields with format=
- One can now specify a different source language for every translation.
- field.history can now be a method. This way, historization can be enabled/disabled, field by field, according to any custom condition.
- Bugfixes in cleaning of XHTML fields.
- Allow Managers to delete data change events if things go wrong.
- Bugfix in generation of back reference for predefined Refs from model.py
- Bugfix while editing XHTML fields from class model.py::Page
- Added a system for locking pages when editing it.
- Added, on edit.pt (the unique Appy HTML form) a handler window.
- Stop using param 'cmp' in method .sort (deprecated in Python3). Used para 'key' instead.
- Wrapper.reindex: allow to specify attribute 'fields' containing the list of fields that must be reindexed. If not given, all object fields are reindexed.
- Improved search abilities.
- Added params Type.swidth and Type.sheight to allow for different sizes for the search widgets.
- Bugfix while generating the Translation class (page 'main' was not viewable because of field 'trToTool' for which page.show was False for an unknown reason).
- Added a link to the home page for anonymous users; resized fields 'login' and 'password'.
- Bugfixes with IE8 and JS function 'getElementsByN
- Converted files with country codes to UTF-8.
- Added appy.shared.
- Added a script for creating a local Debian repository (yes I know this is a bit far from the core Appy business)
Here's what has changed.
- xhtml2odt: allow, when converting tables, to take into account attributes 'width' of tds.
- bugfix when converting 'href' attrs of 'a' tags.
- Bugfix for https:/
- Added some layouts for Ref fields in Ref.wLayouts and Ref.wdLayouts.
- Added a new, simpler way of defining auto-references (=Ref fields that refer to the class containing the field), via method appy.gen.autoref.
- Stop catching exceptions raised by Actions (so a partial action can't be committed anymore).
- Cleaner and more robust approach when using Zope database indexes.
- ckeditor now works with IE.
- Now it is possible to index and search Ref fields.
- Added a i18n label used for the title of web pages and added a default favicon and the possibility to override it.
- Bugfix in the standard banner for RTL languages.
- Added some default page and field layouts.
- Added the possiblity to extract in a clean way text from XHTML field values.
- Fine-tuned indexing machinery with more accurate text extraction from text and xhtml fields.
- Added a new calendar field, allowing to add a single (typed) event by day.
- Added missing i18n in Ref field.
- Calendar: added the possibility in some calendar to view events from another calendar.
- Optimized Ref: do not ajax-call the Ref view macro when displaying a complete page.
- Added Ref.changeOrder to enable/disable (independently from write permission) the possibility to sort or change order of referred objects.
- Improved performance of the Ref field and added an icon for dissociating referred objects.
- Calendar field: added the possibility to define eventTypes dynamically: eventTypes can therefore be anything, ie object UIDs.
- Calendar field: added the possibility to define a start and or end date for defining a specific date range; also added param 'defaultDate' (by default=now): when the calendar is shown for the 1st time, it shows the month where this date is included.
- Calendar: display weekend days in a special way.
- Calendar: allow to insert additional, custom (XHTML or textual) info in any cell of the calendar, via new attribute Calendar.
- Bugfix for IE in master/slave relationships.
- Calendar field: added 2 params: 'preCompute' allows to specify a method that is called once every time a month is shown and whose result can be accessed by other methods; 'applicableEvents' allows to specify, for every day, a list of applicable events which can be a sub-set of all aplicable events (or even nothing).
- Added param Search.default allowing to define a default Search. The default search, if present, will be triggered when clicking on the main link for a class, instead of the query that collects all instances of this class.
- appy.gen.Type: removed 3 obsolete params: 'index', 'editDefault' and 'optional'. For achieving the same result than using 'editDefault', one may define 'by hand' an attribute on the Tool for storing the editable default value, and define, on the appropriate field in param 'default', a method that returns the value of the tool attribute.
- Added Type.defaultFor
- Removed obsolete test applications.
- For Strings with validator=
- Added a 'real' 'state' field to any Appy class, allowing to use it in search screens for example.
- Added 2 hook methods: getIcons and getSubTitles, allowing to add, in lists of objects (Refs or queries), icons besides the title and anything below it.
- Optimized query.pt: for every new query, 1 server request is done (previously, one standard request + one ajax request were done).
- Removed columns 'actions' (Refs, query): action icons are not included in the column containing the title (we avoid having empty columns whhen no action is available).
- For Type.shownInfo and tool.resultColu
- Added an index 'Modified' on every object (it represents the date of the last modification).
- Removed obsolete workflow-related code.
- Removed attributes Tool.showAllSta
- Changed the way to display the object's current state in the UI.
- Removed attributes showWorkflowForXXX
- Buttons for triggering workflow transitions are not located besides the standard actions (icons): edit, save, etc.
- Allow to use class Group as parameter of Search.group.
- Refactored i18n-related code.
- Calendar: added a method for retrieving events from a calendar.
- Searches can now be grouped into groups of groups of..., creating a tree structure in the portlet.
- It is now possible to define, via method 'getDynamicSear
- Added the possility to get an XML version of every object by calling URL <objectUrl>/xml; added the possiblity to call any method on any object by calling <objectUrl>
- Added appy.gen.
- Various security and bugfixes.
- Ergonomic improvements: added a breadcrumb, more compact design.
- Simplified management and rendering of phases.
- job.py: if the specified user does not exist in the DB, try with a user named 'admin'.
- Updated doc. Ready for publishing a new version of appyframework.org.
A new version of appyframework.org has been published.
The main pages have been reworked, documentation has evolved. Additional efforts are still needed, mainly for documenting gen.
A "manifesto" can now be downloaded, explaining Appy's philosophy, future and strategy.