1. Updated ext-all.css to use version 2.1. Previously was mistakenly using v2.0.2.
  2. Fixed bug in Store where if .Data property was set and AutoLoad="true" a JavaScript error was thrown. Now if Data is not null, AutoLoad is set to "false".
  3. Added new GridPanel sample to demonstrate connecting directly to a .xml file. See \Coolite.Sandbox\GridPanel\XmlReader\Direct.aspx
  4. Renamed JavaScriptExtDateTimeJsonConverter class to CtorDateTimeJsonConverter.
  5. Renamed RegexCheckJsonConverter to RegexJsonConverter.
  6. Renamed JavaScriptDateTimeJsonConverter to CtorDateTimeJsonConverter.

    Example

    // returns new Date(2008, 7, 4, 18, 55, 18)
  7. Added ISODateTimeJsonConverter which formats Json DateTime objects without the millisecond format specifier.

    Example

    // returns "2008-04-12T12:53:25Z"
  8. Added JSONDateTimeJsonConverter which formats DateTime objects using the "yyyy-MM-dd'T'HH:mm:ss" pattern. The "server-time" is returned. The DateTime object is not converted to UTC. Please use ISODateTimeJsonConverter if UTC is required.

    No timezone information is added to the converted string.

    This is now the default DateTimeConverter if using the Coolite.Ext.Web.JSON.Serialize Method.

    Example

    // returns "2008-04-12T12:53:25"
  9. Changed RecordField.DateFormat to use .NET format specifier syntax.

    See http://code.google.com/p/datejs/wiki/FormatSpecifiers for good comparison of difference between .NET/Java and PHP/Unix date and time format specifier syntax.
  10. Set RecordField.DateFormat to return "yyyy-MM-dd'T'HH:mm:ss" pattern if .Type is "Date" and no DateFormat is set. The Data must be serialized using the Coolite.Ext.Web.JSON.Serialize Method. Otherwise the DateFormat may need to be set.

    Example (Old)

    <ext:RecordField Name="Availability" Type="Date" DateFormat="Y-m-dTh:i:s" />
    Example (New)

    <ext:RecordField Name="Availability" Type="Date" />
  11. Added .Plugins property to Component. The Plugins property accepts an object or array of Plugin controls that will provide custom functionality for this component. The only requirement for a valid plugin is that it contain an init method that accepts a reference of type Ext.Component. When a component is created, if any plugins are available, the component will call the init method on each plugin, passing a reference to itself. Each plugin can then call methods or respond to events on the component as needed to provide its functionality.

    The following example demonstrates adding a Plugin to a Component using markup syntax.

    Example

    <Plugins>
    
            <ux:TabCloseMenu ID="TabCloseMenu1" runat="server" />
    
    </Plugins>
    The following example demonstrates adding a GenericPlugin to a Component using markup syntax. The GenericPlugin provides a convenient wrapper to ease adding a Plugin to a Component.

    Example

    <Plugins>
    
            <ext:GenericPlugin 
    
                    runat="server"
    
                    InstanceOf="Ext.ux.TabCloseMenu" 
    
                    Path="~/Plugins/TabCloseMenu.js"
    
                    />
    
    </Plugins>
    The InstanceOf property is used by the Plugin to create a "new" JavaScript instance of the Plugin.

    Example

    // If InstanceOf property is set with the following.
    
    InstanceOf="Ext.ux.TabCloseMenu"
    
    
    
    // The constructor will be set as follows
    
    new Ext.ux.TabCloseMenu()
    The Path property is used to set the src attribute of the <script> element. The <script> element is rendered in sequence with the other included <script> elements.

    Relative, Absolute, Virtual, Application root and remote paths are valid values.

    Example

    // Relative
    
    "../Plugins/TabCloseMenu.js"
    
    
    
    // Absolute
    
    "Plugins/TabCloseMenu.js"
    
    
    
    // Virtual
    
    "/Plugins/TabCloseMenu.js"
    
    
    
    // Application Root
    
    "~/Plugins/TabCloseMenu.js"
    
    
    
    // Remote
    
    "http://www.example.com/Plugins/TabCloseMenu.js"
    The following example demonstrates adding a GenericPlugin from code-behind.

    Example

    this.TabPanel1.Plugins.Add(
    
            new GenericPlugin(
    
                    "Ext.ux.TabCloseMenu",
    
                    "~/Plugins/TabCloseMenu.js"));
    To create a custom Plugin control, your class must inherit from the Coolite.Ext.Web.Plugin class.

    The following demonstrates creating the TabCloseMenu Plugin.

    Example

    using System.ComponentModel;
    
    using System.Web.UI;
    
    using Coolite.Ext.Web;
    
    
    
    namespace Coolite.Ext.UX
    
    {
    
            [InstanceOf("Ext.ux.TabCloseMenu")]
    
            [ClientScript(typeof(TabCloseMenu), "Coolite.Ext.UX.TabCloseMenu.TabCloseMenu.js")]
    
            [ToolboxData("<{0}:TabCloseMenu runat=\"server\" />")]
    
            [Description("Very simple plugin for adding a close context menu to tabs")]
    
            public class TabCloseMenu : Plugin { }
    
    }
    The InstanceOfAttribute can be set instead of the InstanceOf property. If both are set, the InstanceOf property will be used. If neither is set, an ArgumentException is thrown.

    The ClientScriptAttribute provides the Embedded Resource path to the required JavaScript file. Please ensure the file is marked as "Embedded Resource". To mark the file as an Embedded Resource, within Visual Studio, right-click on the file, select Properties, then set the "Build Action" to "Embedded Resource".
  12. Added new PagingMemoryProxy. Now if <ext:PagingToolBar> is added to GridPanel, the GridPanel will automatically enable Paging of the client-side data.

    See Coolite\Sandbox\GridPanel\MemoryProxy\PagingSortin gMemoryData.aspx