The Fluid Renderer system, constructed by direct translation from Java code forming the "RSF Renderer", has increasingly come to be seen as a source of confusion and fragility. The JSON dialect(s) that it operates are hard to write, and increasingly we have come to see that facilities provided in the Renderer are more properly, powerfully and usably supplied within the JSON dialect operated by the IoC system and graded defaults scheme for standard Fluid components, which did not exist when the renderer was first written.
We should eliminate the JSON dialects parsed by the Fluid Renderer entirely from direct use in client code, instead providing a facility where arbitrary rendering effect can be achieved by writing standard Fluid components in an IoC tree, some of which will be in direct correspondence with the old Fluid renderer types e.g. UIInput, UISelect etc.
Initially this implementation will work by translation - as part of FLUID-4260, the framework will automatically construct a standard "renderer component tree" which will then be fed to a standard invocation of the old renderer. Over time, we plan to be able to remove the majority of implementation code from the "old renderer" entirely (e.g. primitives for looping and branching through templates, which can be seen as a limited and cumbersome implementation of the more powerful directives available in the IoC system itself - branching -> type/grade resolution for
FLUID-4916, FLUID-4932, etc., looping -> FLUID-5022).
This work will allow the resolution of a number of Renderer goals written up separately under various heads - e.g.
FLUID-4260 "Renderer antigen" support
FLUID-4261 "Tag singularity" problem caused by mismatches between component structure and template structure
FLUID-2962 Arbitrary allocation of rendering work between server-side and client side
FLUID-4189 Expanded renderer component workflow
This work will also be assisted by
FLUID-5045 which will allow Model Transformations material to appear in a general IoC tree, as well as enabled by FLUID-4982, the "asynchronous ginger world" which is required to allow template references to be freely interleaved amongst the component tree for FLUID-4260.