= !MapGuide RFC 23 - Fusion Integration = This page contains a change request (RFC) for the !MapGuide Open Source project. More !MapGuide RFCs can be found on the [wiki:MapGuideRfcs RFCs] page. == Status == ||RFC Template Version||(1.0)|| ||Submission Date||July 24, 2007|| ||Last Modified||Paul Spencer [[Timestamp]]|| ||Author||Paul Spencer|| ||RFC Status||Not ready for review|| ||Implementation Status||pending|| ||Proposed Milestone||1.3|| ||Assigned PSC guide(s)|||| ||'''Voting History'''|||| ||+1|||| ||+0|||| ||-0|||| ||-1|||| == Overview == This RFC updates !MapGuide to incorporate DMSG's "Fusion" technology into !MapGuide OS to generate applications as an alternative to the existing AJAX viewer. == Motivation == The existing AJAX viewer has limited capacity for customization, both in functionality and appearance. Modifications require changes that modify every application that runs on the same servers, and are difficult to keep synchronized with changes in the AJAX viewer between releases (bug fixes etc) == Fusion Background == The Fusion framework is a flexible, extensible templating system that provides the ability to separate application presentation from its functional components. A Fusion application template is, at its simplest, is composed of an HTML page. A Fusion application is created by loading the fusion.js library into the HTML page and initializing the Fusion object in the onload event of the page. Fusion uses a special XML document, stored as an ApplicationDefinition resource in the !MapGuide OS server, to determine what functional components to create in the page. Fusion dynamically loads additional javascript files to create the necessary functionality and initialize the application. The functional pieces of a Fusion application are called "Widgets". A widget is a single, discrete piece of functionality. In general, widgets are completely self contained and do not require any other widget to be in the application in order to function although, in practice, some widgets are not very useful without other widgets. A widget typically has some form of representation inside the application, for instance as a button or a legend. Where the widget appears in the application is controlled by the use of HTML id attributes in the application template. Widgets are designed to be created "inside" HTML containers and usually size themselves according to their container. A widget's position in an application is not constrained by the fusion framework in any way, although different widgets are designed to be contained in specific ways. For instance, the container of a Legend widget would typically be a