New in 0.5 Beta 4 since Beta 3: xajax PHP Changes: * Resolved issue with argument parser / decoder that could cause an infinite loop condition when a malformed request is sent to the server. * Added the ability to compile the xajax core files into a single include file, thus reducing load time. The compiled core has been stripped of all code comments, debug code and error trapping code. It is designed to be used on a production server with production ready xajax enabled pages (which have already been tested with the standard version of the xajax core). * Fixed issues in the script deferral feature that was introduced in beta 3 so that plugins are included in the correct order. * Added the ability to load an alternate language module that can provide debug, error and status message text in the desired language. * Tested on PHP 4 (4.3.10), PHP 5 (5.1.4, 5.2.2) and the Zend Core 2.0 xajax Javascript Changes: * Identified and resolved memory leak issues. * Added the ability to load an alternate language module that can provide debug, error and status message text in the desired language. * Improved / fixed issues with the newly renovated xajax.getFormValues: 1) Fixed the handling of input field names formatted as an array 2) Improved performance and organized the code * Tested on Internet Explorer 7.0, Firefox 2.0.0.6, Opera 9.23 ---- New in 0.5 Beta 3 since Beta 2: xajax PHP Changes: * Modified the plugin system so that plugins can effect the initial page load, the request processing and response processing phases. * Added / updated plugins to support the existing function registration, registration of callable objects and a new server side event processing registration. * Added a script generation deferral feature that allows xajax to insert a SCRIPT tag with a src attribute referring back to the xajax request URI that will then generate the client side javascript code. Style blocks generated by the loaded plugins will be handled in a similar manner. * Added xajaxUserFunction class to aide with the specification of a user call back function. The xajaxUserFunction objects can be used when registering functions and can include a reference to an include file. * Updated the function registration process so that functions can be registered in a variety of ways depending on which plugins are loaded. New registration methods can be added by adding a plugin to support the registration method and handle the processing of the functions specified. * Call options can now be specified when functions are registered. When the associated plugin accepts the function registration, the call options are saved; when the javascript function stubs are generated, the call options are included. Thus, each javascript stub function can be customized from within the PHP script. This elliminates the need to call xajax.call or xajax.request directly (in most cases). xajax Javascript Changes: * Added xajax.request function to replace xajax.call and provide support for the latest core changes that allow greater flexibility in registering functions, callable objects and server side event processing. * Added a context member to the request object so that the caller can set an object or value to be maintained throughout the processing of the request. Added response commands that allow the php script to effect the context object or value. * Reworked the xajax.getFormValues function to add two new features: 1) You can now request that getFormValues return only a portion of your form by passing the ID of a DIV tag or similar that contains the input controls to be read. 2) You can now access the return value of getFormValues as a javascript array. In prior versions, you would receive a string that could be transmitted to the server, but it was not very useful on the client side. Instead, you can read those values in your javascript and / or send them to the server as needed. ---- New in 0.5 Beta 2 since Beta 1: xajax.inc.php changes: * Modified portions of the code to allow PHP functions registered with xajax to optionally return text or XML data other than a response object that can be handled by a custom response handler function. These kinds of function must be called using xajax.call with a parameter that indicates the function that will handle the response. To use it the allowAllResponseTypes flag must be set to true. * New useUncompressedScripts flag allows you to switch to using the uncompressed * Javascript files easily. * The risk of cross-site scripting attacks via the automatic URI detection has * been dimished through additional protection. xajaxResponse.inc.php changes: * New removeScript and removeCSS methods to unload Javascript or CSS files in the client * New waitForScript and waitForCSS methods to attempt to load Javascript or CSS files and hold off on processing further commands until they're loaded or the queue times out. * New xajaxCall object you can use to assemble Javascript code for xajax.call quickly. Javascript engine: * It's new and it's shiny! Inside of xajax_core, there are ten modules: * xajax is the main module which handles the basic call/request/response lifecycle * xajax.callback allows functions to be called during the response lifecycle * xajax.config stores the run-time configuration of the xajax engine * xajax.css contains functions that manipulate stylesheets * xajax.dom contains functions that manipulate the HTML DOM * xajax.events contains functions that setup run-time DHTML events * xajax.forms contains functions that help you construct HTML forms * xajax.js contains functions that handle Javascript files * responseProcessor contains the default xajax XML response processor (with more to come) * tools contains some miscellaneous utility functions The changes between this engine and the previous one in Beta 1 are simply too numerous to mention, so your best bet is to check out all the tests to see how you can perform various tasks, and of course read the documentation once it goes online. This engine will provide a solid platform for further xajax client-side innovation going forward. ---- New in 0.5 Beta 1 since 0.2.4: Package-wide changes: * All of the PHP files have been moved to xajax_core, so the PHP and Javascript files are now in separate folders. * All tests and examples have been updated to work with the new 0.5 API. * A new file, legacy.inc.php, can be included in your PHP scripts if you want to be able to use the 0.2.4 xajax API. However, it is recommended you update your scripts to the 0.5 API as soon as possible as the legacy API will likely be dropped in a future version of xajax. * A new plugin layer has been implemented for the xajax and xajaxResponse classes. The basis for this is the xajaxPluginManager class which provides for registering and accessing plugins for the different xajax components. * xajax is now licensed under the BSD license rather than the LGPL license. This means you can include xajax and modify it when using it with commercial PHP applications without having to worry about tricky legal issues. xajax Plugin Layer: * xajax now uses plugins to process requests and output Javascript include code. You can subclass the default plugins to alter major xajax functionality or write your own plugins from scratch. * You can use plugins with xajaxResponse, allowing you to output custom commands to the Web client. (Note: this won't be very useful until the a new plugin system is implemented in the xajax Javascript engine.) * Plugin layer documentation forthcoming. xajax.inc.php changes: * The xajax constructor has been simplified to allow only one optional argument (the request URI). * New getGlobalResponse method lets you use the same response in multiple functions. It also makes it easier to set up the response to have the same encoding and entity settings as the xajax parent object. * New getVersion method returns the xajax version. * All of the ___On and ___Off methods have been replaced with a single setFlag (or setFlags) method. For instance, debugOn() would now be setFlag("debug", true). exitAllowedOff() would now be setFlag("exitAllowed", false). * New setTimeout and getTimeout methods for controlling the delay before the client shows an error alert if the xajax Javascript engine failed to load (just set to 0 to suppress any error alert). * Registering functions to use only GET or POST for the HTTP connection is no longer possible. All functions use POST by default, and if for some reason you need to force using GET, you can use the xajax.call syntax on the client-side. * The registerFunction method now provides an optional second argument for specifying a PHP file to include, thereby eliminating the need for the registerExternalFunction method. * New registerCallableObject method registers an object that xajax will check to see if it contains a method with the same name as the incoming xajax function. If it finds one, it will go ahead and call that method as if it had been manually registered with xajax (and in PHP 5, it will _always_ go ahead with the method call if a __call magic method is present). * The registerPreFunction and registerCatchAllFunction methods have been eliminated and replaced with the new registerEvent method. You can register one or more functions or class/object methods to be notified when certain events in the xajax lifecycle are triggered. The "pre function" is now the "beforeProcessing" event. The "catch all function" is now the "onMissingFunction" event. * The canProcessRequests and processRequests methods are now singular (i.e., canProcessRequest and processRequest). * All of the following methods use an xajaxRequestProcessorPlugin subclass (typically xajaxDefaultRequestProcessorPlugin) to perform all neccessary work: * canProcessRequest * getProcessMode * processRequest * All of the following methods use an xajaxIncludePlugin subclass (typically xajaxDefaultIncludePlugin) to perform all necessary work: * printJavascript * getJavascript * getJavascriptConfig * getJavascriptInclude xajaxResponse.inc.php changes: * All method names for adding commands have had their "add" prefixes removed (though of course addEvent and addHandler remain). In other words, addAssign is now just assign, addScript is now just script, etc. In addition, all of the command methods return $this (the xajaxResponse object) to allow for "fluent interface" usage in PHP 5. * Internally all of the commands are stored as array-based data structures and are only converted to XML upon final output. Several new methods allow for adding command data manually and merging commands from other response objects. Much of this functionality is extremely useful for response plugins. * As part of the new xajax plugin layer, response object plugins that were registered with the plugin manager can be accessed either via the plugin method on PHP 4 and 5 (with two different call types) or as properties via the __get magic method in PHP 5. * New includeScriptOnce and includeCSS commands available. * IMPORTANT: you may no longer return the getXML() method output as your return value in registered xajax functions. Please return the response object directly. xajax_uncompressed.js Javascript changes: * The Javascript engine for xajax has been substantially rewritten and is still undergoing major changes. Note that some of the changes are "reversed" when using the xajax legacy PHP class (specifically xajax.call, xajax.loadingFunction, and xajax.doneLoadingFunction work the same as before). * xajax.call now supports only two arguments, the first being the function name to call on the server and the second being a Javascript dictionary-style object you can use to specify parameters, event callbacks, and other options (in a manner reminiscent of Prototype). * xajax.loadingFunction and xajax.doneLoadingFunction have been replaced by xajax.eventFunctions.globalRequestDelay and xajax.eventFunctions.globalRequestComplete (though in most cases it is recommended that you make use of the per-call event callbacks mentioned above). * Instead of expecting options set by the xajax include code such as xajaxRequestUri or xajaxDebug, the Javascript engine now expects an xajaxConfig object to be present in the global namespace with properties such as requestURI and debug. * The xajax Javascript object is now written using brackets syntax ala Prototype and many other modern Javascript libraries.