1.7.0 2023xxxx BF: Composite: Correction from mounting (dock/undock) composites with namespace BF: Composite: Correction when inserting markup into composites If the markup for a composite was removed from the DOM, content was not inserted when the composite was reinserted into the DOM. BF: Composite: Correction when loading CSS modules If a module is first requested programmatically by name, the CSS was not loaded when the module was later loaded as an element. BF: Composite: Correction of the view model binding Initial values of modules were not set in the corresponding HTML elements. BF: Composite Mount Events: Correction of the unwanted assignment of child elements BF: Reactive: Correction of incorrect creation of proxies for HTML elements BF: Reactive: Correction of unwanted rendering when docking modules CR: Composite: Omission of the attribute namespace Replaced by extended composite ID name@namespace (separated by colon). e.g. model@a:b:c -> ./modules/a/b/c/model.js -> a.b.c.model The approach with the attribute namespace was not practical. CR: Composite: Omission of attributes strict in combination with composite The combination of the attribute strict was not practicable for namespaces. The notation for the module files is now used 1:1. CR: Composite: Added EVENT_MODULE_LOAD when a module is loaded Is called once per module. CR: Composite: Added EVENT_MODULE_DOCK/EVENT_MODULE_READY/EVENT_MODULE_UNDOCK CR: Composite Render Iterate: Optimization for updating markup If the array does not change in length, the existing markup is only updated without replacing it completely. CR: Composite Render Iterate: Optimization of the error output in the view CR: Composite Render Condition: Optimization of the error output in the view CR: Composite Render: Optimization of IDs before rendering Possible expressions at initial IDs are already resolved before rendering. CR: Datasource: Optimization of language selection Alternatively, the languages of the browser without tags are considered. RFC 5646: lang-tag-tag-... -> lang CR: Expression: Optimization of the return of errors Errors are returned as error objects instead of text. CR: Expression: Extension of the element expression by //...// for embedding logic e.g. {{#[element://index+1//]}} when index is a variable CR: Expression: Optimization when interpreting in combination with text e.g. previously brackets had to be used CR: Messages: Change in case of multiple keys, the first one wins Overwriting messages at runtime is generally not possible. CR: Messages: Added locales/messages for modules Locales/messages are loaded with the module from the module directory. Modules can extend messages but not change/overwrite them. Locales/messages for modules are used as global locales/messages, no difference in use. 1.6.1 20230410 BF: Composite: Added recursion detection for include of composite markup If a recursion is detected when the module is included, an error is output. BF: Composite: Correction of validation with message and notification without model BF: Composite: Correction of mounting of child elements in a condition BF: Composite: Correction of the queue during rendering when a lock exists BF: Expression: Unification of the suppressed output Only the value undefined but not the string "undefined" suppresses the output. False and comparable non-true values are now output. BF: Reactive: Correction for the use of arrays The data type incorrectly changed from array to object. BF: Reactive: Correction/optimization for elements with iterate The renderer always updates the top element with iterate in the DOM so that temporary variables are available in the expressions. BF: Reactive: Correction of recursive triggered updates BF: Review: Optimization and corrections Added detection of future incompatibilities. Reduce the size of the releases. BF: Test: Correction of wrong output of Element.prototype.toPlainString() CR: Reactive: Optimization of object-model-view decoupling CR: Reactive: Refactoring to distinguish from frameworks with similar name CR: SiteMap: Inactive by default Attribute static is then not required for composites. Simplifies micro frontends without face-flow. SiteMap becomes active with the call of the method SiteMap.customize(...). CR: Expression: Extension of the syntax for elements and variables - support of the underscore at the beginning - support of complex element syntax #[...] CR: Expression: Optimization (consequent new implementation) - complete new approach for parser and interpreter CR: Expression: Omission of automatic use of get and is methods for fields - since getters and setters are available in JavaScript CR: Expression: omission of tolerance for undefined parts in object chains (like JSP EL) - is too extensive in JavaScript with ReferenceError/TypeError/undefined/false/null/... - is replaced by (?...), in case of error this syntax in the brackets will return false CR: Composite: Errors during rendering are output in the view - Rendering does not abort - Errors are also logged as errors on the console - Errors can also be subscribed as a composite event CR: Composite: Renamed method Object.using(...) in Object.use(...) CR: Composite: Optimization when loading module resources - change of sequence to: JS, CSS, HTML (markup) - JavaScript for modules is only loaded if no JavaScript model exists - CSS for modules is only loaded if HTML is also loaded - omission of the HEAD request Minimizes HTTP requests in the background and when loading the page. CR: Composite: Extension of the element ID with a unique identifier format: name:qualifier...#identifier@namespace...:model The unique identifier is for the view and business logic, but has no effect on composite. CR: Composite: Added @-attributes as attribute templates for elements Creates corresponding attributes, which is convenient if they use expressions as value. CR: Composite: Changing the behavior of the validation Synchronization and function execution are no longer blocked by violations. For the previous strict behavior, the attributes validate and strict must be combined. CR: Scripting: Outsourcing and isolating the execution of Composite JavaScript CR: Scripting: Optimization macros for Composite JavaScript - can now be used anywhere in the code, also in combination with conditions - can now also be separated from the next command with a semicolon CR: Scripting: Added macro #export for Composite JavaScript Makes local variables and constants from modules usable in the global namespace. CR: Scripting: Added macro #use for Composite JavaScript Creates namespaces if they do not already exist. CR: Scripting: Added macro (?...) for Composite JavaScript In case of an error the value of the enclosed logic is equivalent to false without throwing an error, except for syntax errors. except for syntax errors. CR: Datasource: Optimization when loading module resources - omission of the HEAD request - omission of XML error when the request receives an error page Minimizes HTTP requests in the background and when loading the page. CR: Messages: Added messages as alternative object tree for associative array Messages CR: Messages: Added Messages.customize(label, ...values) to fill placeholders with values CR: Namespace: Renamed method Namespace.using(...) in Namespace.use(...) CR: Extension: Math.unique(...) replaces Math.uniqueId(...) CR: Extension: Math.serial() replaces Math.uniqueSerialId(...) The method is now completely time-based and independent of Math.unique(). The serial is still unique and as text chronologically sortable. CR: Release: Added the manual (de/en) to the release package (zip) CR: Release: Channels with major number are omitted CR: Release: Revision of the release channels - standard: contains all minimized for test and deployment - standard-max: contains all not minimized and with comments for development and testing - core: contains all minimized, except the Test API for deployment - core-max: contains all minimized, except the Test API not minimized and with comments for development and testing - micro: contains all minimized, except SiteMap, minimized for development and testing and deployment of micro frontends without face-flow - micro-max: contains all minimized, except SiteMap not minimized and with comments for development and testing of micro frontends without face-flow - micro-core: contains all minimized, except the Test API and SiteMap for deployment of micro frontends without face-flow - micro-core-max: contains all minimized, except the test API and SiteMap not minimized and with comments for development and testing of micro frontends without face-flow 1.6.0 00000000 NT: Unwanted version in registry.npmjs.org :-| Therefore there is no official version 1.6.0. 1.5.1 20230107 BF: Release: Correction of the missing release directory for jsDelivr CR: Release: New channel for lite version Lite is a version without test module/extension. 1.5.0 20230105 BF: Review: Optimization and corrections BF: Documentation: Correction of encoding BF: Build: Optimization / correction of the release process BF: Composite Events: Correction of the missing selector for: EVENT_RENDER_START, EVENT_MOUNT_START, EVENT_RENDER_NEXT, EVENT_MOUNT_NEXT BF: Test: Correction of the output of failed assertions CR: Reactive: Added for a reactivity rendering Rendering can be reactive to changes in data objects and trigger partial rendering at consumers CR: Composite: Added a domain concept based on namespaces In the markup, the parent composite elements that use the attribute namespace define the namespace to be used for the model and modules. CR: Composite: Aligned to the syntax for: COMPOSITE_ID / ELEMENT_ID / CUSTOMIZE_SCOPE ELEMENT_ID characters : and @ can only be used correctly COMPOSITE_ID / ELEMENT_ID character - is omitted, analogous to the syntax for CSS and variables in JavaScript CUSTOMIZE_SCOPE must start with _ a-z A-Z according to the W3C standard CR: Composite: Extension of the element id for an optional reference The reference to a module in the namespace is added at the end of the ID syntax, after qualifiers and separated by the @ character: e.g. buttonSend:...@Imprint:Contact As with qualifiers, the : character can be used to separate object levels. CR: Composite Events: Extended of EVENT_RENDER_NEXT for generated text nodes If text nodes contain expressions, they are split and reassembled from a sequence of new static and dynamic text nodes. EVENT_RENDER_NEXT now also captures the and text nodes thus created during rendering. CR: NPM: Change to a package with scope (is also already in 1.4.0) The change was made afterwards of the 1.4.0 release. CR: Build: Releases are now only available on the release page CR: Build: Switch to UglifyJS CR: Server: Added Ant task to start and stop the web server CR: Playground: Added as a playground for development Develop with the current sources without build. CR: Test: Update web server to version 5.5.x CR: Test: Added Assert.assertUndefined(...) / Assert.assertNotUndefined(...) 1.4.0 20211210 BF: Composite: Correction in the use of attributes If numbers are used as value could cause errors during rendering. BF: Composite Expression Language: Line breaks in the expressions are supported Multiline expressions are now possible. BF: Composite: Correction for a URL without a file The paths of the modules were composed incorrectly. BF: DataSource: Correction for a URL without a file The paths of the data files were composed incorrectly. BF: MVC SiteMap: Correction of the method customize when using variable paths BF: Review: Correction/optimization JavaScript (no functional change) BF: Test: Correction in determining the browser engine for WebKit and Blink CR: Composite Expression Language: Added keywords eeq (===), nee (!==) CR: Composite: Added attribute strict for loading of modules/composites New default behavior without attribute: The names of the resources to be loaded always start with lower case. With the attribute strict, the actual spelling of the composite ID is used. Example: