Version 1.25

not released yet

  • jQuery serializeObject added to ww.jquery.js
    Extends the $().serialize() method to parse captured form variables into an object where the properties map to form variable names and the values are read from the form data.

  • wwUtils ApplicationConfiguration Improvements
    Added easier subclass implementation support for ApplicationConfiguration() when using Configuration files as the config store. You can now simply create a single constructor and call the base class (:base(null,"ConfigName")). Updated documentation for usage.

  • Updated to Entity Framework Code First 4.4 (EF Framework 5.0 for .NET 4.0)
    The Westwind.BusinessFramework library now uses version 4.40 of the Entity Framework. We'll switch to V 5.0 in the next major update which will switch all libraries to .NET 4.5.

  • Updated to jQuery 1.83 and jQuery UI 1.9.2
    The default script libraries used have been updated to jQuery 1.83 and jQuery UI 1.9.2.

  • Transparent Support for Json.Net JSON Serialization added
    Json.Net support in the toolkit has always been present but the code has been made dynamic so that there's no hard dependence anywhere on Json.Net. To use Json.Net as your serializer instead of the default West Wind one simply add it to your project and set JSONSerializer.DefaultJsonParserType = SupportedJsonParserTypes.JsonNet; in Application_Start. (Westwind.Web)

  • String date support for JSON deserialization
    You can now use plain date strings for locale specific dates (3/5/2011). Parsing uses standard .NET date parsing with the currently active server culture. This is in addition for automatic support for ISO and MS Ajax dates already supported. (Westwind.Web)

  • centerInClient jQuery Plug-in centerOnlyOnce Option
    The centerInClient() plugin now be used to center only once by using the the { centerOnceOnly: true } option. This centers the element only on first access and leaves it alone on subsequent accesses which is common for UI display. (Westwind.Web)

  • .stretchToBottom Plugin
    A small plug-in that takes an element and stretches it to the bottom of a parent container (or window). (Westwind.Web)

  • Many improvements to EF Code First Business Object Class
    Improved auto-detection of save and update operation. Improved handling of transaction management. Better support for attaching non-tracked entities to a dbContext. (Westwind.BusinessFramework)

  • Many small enhancements in the AppConfiguration Class
    Improved performance of .config file reader. Fixed several small issues that caused the Initialize() method not to be fired on the default constructors. Empty encrypted values no longer encrypt anything. Updated documentation. SqlServerConfigurationProvider can now auto-create the configuration table if permissions allow. (Westwind.Utilties)

  • New Expando object in Utilities library
    Added an dynamic, extensible .NET class that can be subclassed and allows extension through dynamically added properties at runtime. More info can be found in the blog post. (Westwind.Utilities)

  • New DynamicDataReader and DynamicDataRow Classes
    Added new dynamic classes that wrap DataReader and DataRow objects and expose these collection based interfaces to a property based interface. Each of these classes takes a DataReader or DataRow as a constructor parameter and exposes each of the field values as dynamic properties for cleaner interface. DataReader and DataRow examples. (Westwind.Utilities)


Version 1.20

released April 10th, 2012

  • CallbackMethod Attribute for REST calls now allows limiting HTTP Verb Access
    You can now specify the AllowedHttpVerbs option to limit access only to specific HTTP verbs when processing requests. As before the default is to allow all verbs, but you can now be explicit about it. (Westwind.Web)

  • CallbackMethod Response.StatusCode preserved on Error Responses
    CallbackMethod calls now preserve any non-200 status code value if set from within a Callback method when an error occurs. Previously, any error automatically triggered a 500 status response. Now any non-200 HTTP code will be rendered which allows you more control for returning failures. (Westwind.Web)

  • Improved Dictionary Deserialization Support for West Wind JSON Serializer
    The default West Wind Serializer now supports deserialization of typed dictionaries. Most types except object will deserialize properly now when serialized/deserialized with the West Wind parser on both ends. Previously only Dictionary serialization was supported. (Westwind.Web)

  • Request, Response and Context Properties added to CallbackHandler
    In order to facilitate access to the current request's intrinsic objects there are now Request, Response and Context properties on the CallbackHandler instance. This allows quick access to handle HTTP operations like caching or specification of content type etc. (Westwind.Web)
    Recommended Action: Change any references of ControlResources script methods that are obsoleted and move them to the ScriptLoader static methods instead. You can find them in debugger warnings if you have any in your code.

  • New AutoComplete WebForms Control
    The AutoComplete Webforms control wraps the jQuery.ui AutoComplete control and provides an easy way to serve the server data to the client either via external Url or via an event handler from control on the Page. Handles automatic script loading using project wide defaults. (Westwind.Web)

  • Major internal updates to Application Configuration Components
    Updated internal workings and a few bug fixes for the AppConfiguration class and configuration providers to further simplify setting up of configuration objects. AppConfiguration allows strongly typed classes to represent application configuration information for .config files, .xml files, strings and SQL storage of config data. (Westwind.Utilities)

  • Updated jQuery showStatus() function
    showStatus() is a JavaScript function to display a fixed status bar on the bottom of a Web page. This update provides new styling and an animated display mode that slides in the status bar to show and slides out to hide. Also added new options to manually close the status bar and display an afterTimeoutText message. (ww.jquery.js)

  • Many improvements to the EfCodeFirstBusiness Class
    Added DbNative class that provides common ADO .NET SQL operations to the a custom Context (Context.Db.ExecuteDataReader() for example). This allows fallback to non-LINQ queries, support for stored procs and more efficient data retrieval for data binding when needed. New dbContextFactory that can be used to create HttpRequest or Thread scoped EfCodeFirst contexts. (Westwind.BusinessObjects)

  • Update code base to jQuery 1.71
    The script components have been updated to default loading jQuery 1.71 now for CDN urls and all the local script resources have been updated and tested with jQuery 1.71. (Westwind.Web)

  • New Server Side ScriptLoader Class
    Class that includes routines for loading jQuery, jQueryUI and ww.jquery both as string <script> tags or WebForm embeddable scripts. Refactored out of the ControlResources class to clarify intent and separate functionality. Matching ControlResources methods have been marked [Obsolete]. (Westwind.Utilities)

  • New ObjectFactory<T> Class
    This class provides a generic way to create class instances that are tied to a particular thread or a particular ASP.NET Web Request via HttpContext.Items. Class is useful to create reusable singletons that are pinned to the lifetime of a thread or Web request. Example internal use: Optional support for Web Request tied DbContext/DataContext objects for Entity Framework and Linq to Sql. (Westwind.Utilities)

  • ClientScriptProxy.GetWebResourceUrl() and ClientScriptProxy.GetClientScriptResourceUrl()
    These methods can now return Resource Urls without requiring the Page framework - they work in MVC and WebPages projects. (Westwind.Web)


Version 1.18

September 28, 2011

  • Add Routing Support to CallbackHandler via RouteUrl Attribute
    You can now specify routing Urls as part of a callback method with the CallbackMethod attribute: [CallbackMethod(RoutingUrl="StockQuote/{quote}")] where the route parameters can match method parameters including basic type conversion of simple types. A CallbackHandlerRouteHandler.RegisterRoutes() method can automatically register all routes of a handler.

  • Support for Accept header Content Type Parsing for Response type (Json or XML)
    CallbackHandler now can sniff Accept headers for application/json,application/javascript,text/xml and return the appropriate style response, in addition to explicit format=xml querystring values. The AjaxMethodCallback, ServiceProxy classes and ajaxJson and ajaxCallMethod functions now also explicitly set the Accept headers when making AJAX calls using XHR.

  • Provide support for XML Responses from CallbackMethod REST Services
    Any handlers that work with [CallbackMethod] attributes now support XML based input and output for its REST interface. You can specify format=xml on the querystring to force output to XML as well as optionally support XML input of a single XML object.

  • New Entity Framework CodeFirst Business Object Layer - EfCodeFirstBusinessBase Class
    Added a BusinessBase class in the Westwind.BusinessFramework assembly that provides business object services around Entity Framework CodeFirst (DbContext) style development. The new class provides a similar business repository-like wrapper around Entity Framework's DbContext and Entity classes which greatly simplifies CRUD operations.

  • ReflectionUtils.GetPropertyInfoEx
    Helper method that retrieves a PropertyInfo structure based on an object and property/child hierarchy string.

  • Fix Google Translation Code in Localization Administration Form
    Fixed issue in the Google translation code caused by Google's change over to new AJAX forms. The TranslateService.TranslateGoogle() method now uses a JSON call to retrieve translation data.

  • New Serializable PropertyBag class added to Utility Library
    Property bag is a customized Dictionary style class that can serialize to and from clean XML easily. Useful for internal implementations that need to store and retrieve arbitrary field data in a database or other external store.

  • Updated to jQuery 1.64 and jQuery UI 1.8.12
    Updated jQuery and jQuery ui to the latest versions in Westwind.Web assembly resources and CDN links as well as in the sample Web application's script folders (used for fallback if CDN is down).

  • WebUtils.jQueryLink() and ControlResources.jQueryLink()
    Both of these methods embed full jQuery <script> tags into the page based on the ControlResources configuration settings for CDN and Fallback Urls and default load specifications. Greatly simplifies embedding of jquery references consistently (<%= WebUtils.jQueryLink() %>).

  • NuGet Support added
    We've added NuGet packagers for Westwind.Utilities, Westwind.Web, Westwind.BusinessFramework and Westwind.Globalization to facilitate adding Web Toolkit functionality to your projects inside of Visual Studio without having to install the full Toolkit.

Version 1.16

released Aug. 17th, 2010
  • Move Toolkit Project to VS 2010 and .NET 4.0
    Updated projects to open in Visual Studio 2010 by default and to utilize the .NET 4.0 libraries. As of this release the changeover is superficial - very few .NET 4.0 features are used, but in the future enhancements will add 4.0 features into the base code. The VS 2008/.NET 3.5 version is now available seperately for download and in the code repository (see homepage).

  • DragPanel.Centered property
    Allows for centering of the drag panel on the page initially starts up.

  • Improved Non-JSON Return Type Support
    You can now return a few more specific binary types from Callback methods in order to serve non-JSON data from your service. You can now return Stream, byte[] and Bitmap results which will be returned as raw binary data (or an image in the case of Bitmap). You can also return raw string results via the ReturnsAsRawString attribute parameter, or by specifying ResultFormat=string.

  • Version for ScriptItems in ScriptContainer
    You can now specify an optional version number for any script references created in the script container with the Version attribute. Specifying a version number will append a version id (as a string) to every URL generated through the ScriptContainer regardless of whether it's a static URL source or a resource url. Useful to force updated versions of scripts to update.

Version 1.15

releaseed Apr. 9, 2010

  • jQuery reved to Version 1.4.2
    Updated the internal version of jQuery used in the Toolkit to Version 1.4.2 by default.

  • jQuery UI reved to Version 1.8
    Updated the version of jQuery UI used to the latest 1.8 release to sync up with jQuery 1.4. Fixed various issues with the jQueryDatePicker control related to this update and updated the themes to reflect the latest release.

  • ControlResources.JQueryLoadMode and CDN Library Loading
    Allows specification how jQuery and jQueryUI are loaded by default. The default - as before - is from WebResources, but you can now specify a ControlResources.jQUeryLoadMode of ContentDeliveryNetWork and jQueryCdnUrl and jQueryUiCdnUrl rl from which to load resources. If the CDN URL is not available or there's no internet access for local only dev it falls back to WebResources (or a fixed local url for jQuery UI).

  • Support for multiple ScriptContainers on Pages
    You can now have multiple ScriptContainer controls on a single page, which means that you can have a script container in a Page, MasterPage and User Control simultaneously and have all scripts combined. Duplicated scripts are loaded only once. Priority for scripts loading will depend on control load order of the page.

  • JSONP Support for Server CallbackMethods
    Any Callback methods can now serve JSONP results if a jsonp or callback querystring value that specifies the local JavaScript function that is called is provided.

  • Add DataBindingItem.UnboundValue for Validation Purposes
    The DataBindingItem control now receives an UnboundValue property that holds the unbound value which is useful for calls to the OnValidatation handler to verify data.

  • Add ClientScriptProxy::RegisterClientScriptBlock Script in Header Options
    You can now use an overload of ClientScriptProxy to optionally render JavaScript blocks into the Html header of the page if the header contains an runat="server" attribute. This allows for cleaner script rendering and more choice (HeaderTop,Header,Script) for script placement.

  • DataBinder Improvements
    Added better support for ASP.NET Validator integration. Validators are automatically checked by Unbind() now and report error messages more cleanly in the DataBinder error formatting and validation messages. HideValidators (true by default) will hide original validator messages and use only the error display of the binder. Added a new BindingModes.UnbindOnly mode. Added default BindingErrorMessage, UnbindingErrorbindingErrorMessage and IsRequiredErrorMessage properties that use string.Format style messages for default binding error messages. DataBindingItem gets a new UnboundValue property that is set once a value has been unbound - useful for manual validation code using in Validate and Binding events.


Version 1.12

released Dec. 15th, 2009
  • New Pager WebControl
    The pager is a free standing and control and data independent pager control that can be put on a page to display paging information for anything. By simply setting ActivePage, TotalItems and PageSize the page will render itself according to those settings. The control is CSS friendly and allows customization through styling as well as many options to hide and show various pager compoennts and customize text. The control also includes several filtering methods that can automatically page content based on IQueryable<T> (including data filtering on the server returning only those records required for the page), IEnumerable<T> and DataTable. The pager generates SEO friendly HREF links for page navigation.

  • CallbackMethods can now return Stream and raw String Results
    You can now return results as Stream or raw strings. Stream returns are automatically send directly into the output stream which are useful for image end points for example. Raw String result methods need to use [CallbackMethod(ReturnAsRawString = true, ContentType="text/plain")] to identify the method as returning raw string output which can be useful for operations like plug-ins that work with non-JSON string data.

  • $$() Function to Select jQuery Set for ASP.NET ClientIDs
    Added a $$() function that retrieves jQuery matches based on an ID that can contain ASP.NET NamingContainer syntax. Routine matches first by name and then matches id attribute based on trailing _controlID value.

  • postJSON() jQuery Method Added
    Added a postJSON() method/plug-in that provides the same behavior as jQuery's native getJSON, but instead uses POST values to push data to the server. Useful for ASP.NET MVC V2 which disables JSON GET results by default.

  • Added "cleanup" option to .editable and .contentEditable jQuery plugins
    You can now use $("#divContent").editable("cleanup") to easily remove content editing and restore the original content similar to pressing ESC while editing.

  • Added jqGrid and jQuery AutoComplete Examples
    Added examples for two popular jQuery plug-ins that require data from the server using AjaxMethodCallback.

  • ResponseFilterStream Class
    Implements a stream class that can be easily to filter Response output using Response.Filter. This class creates a stream and provides several events to capture and/or transform output easily without creation of a new Stream class for each use case. Events include TransformStream, TransformString, CaptureStream, CaptureString and WriteStream, WriteString.

  • Added StringUtils.ImgRef
    Creates an image link via code. Doesn't render anything if image url passed is null or empty. Useful for ViewModel displays with <%= expression %>
    tags.

  • Fixed Encryption bug with Configuration Providers working on XmlSerialized Strings and SqlServer Data
    Fixed bug that caused encryption not to be applied when using configuration settings from string and Sql Server data base stores. Several of the storage routines failed to call the encryption and decryption routines appropriately. Fixed.

  • Added StringUtils.SetUrlEncodedKey
    Added this routine to allow injection of urlencoded key/values into a query string. Useful for components that need to inject query string values into existing URLs like the Pager component which aims to create SEO friendly paging Urls (without javascript links).

  • onBindingErrorLink Hook for BindingError Links of DataBinder
    The DataBinder control now can fire an onBindingErrorLink handler to allow hooking custom actions when a binding error link is clicked. For example, it might be useful to make a potentially hidden or obstructed control visible in the viewport, or activate the parent tab page etc.

  • Updated display of the ResourceId List in the Localization Admin Form
    Resource IDs are now displayed in a grouped display where ids with the same base name (btnSubmit.Caption, btnSubmit.Tooltip) as the previous are indented so that that primary resource keys are easier to spot.

  • Generate Strongly Typed Resources that use ResourceProvider for ASP.NET Applications
    You can now generate strongly typed resources from all Global Resources. Unlike the native .NET strongly typed resources, these generated resources use the ASP.NET ResourceProvider, so no resource set duplication occurs for ResourceManager and ResourceProvider accessed resources.

  • Many small UI improvements to the Web Localization Administration Form
    The LocalizationAdmin.aspx page has been updated with many small UI tweaks to make it easier to quickly add and edit resources. The Add Resource window now has a new Add and Keep Open button to allow quicker entry of new ResourceId and values. There's now an option to add a new ResourceSet that opens the new ResourceId form to add a new Id in a new ResourceSet. Localization comments can now be displayed and edited via a separate button that is bolded if a comment exists.

Version 1.10

Oct. 7, 2009

  • Added WCF and ASMX Support for AjaxMethodCallback control
    You can now set up WCF and ASMX calls through the AjaxMethodCallback control by pointing at the URL and setting the ClientProxyTargetType. This will generate a proxy and provide simple method stubs to WCF/ASMX services in the same way as the native ASP.NET AJAX and AjaxMethod callback clients do. In effect you get the same call syntax regardless which service backend you use - complete interchangeability.

  • Added MVC support for Westwind.Globalization and Resource Administration
    You can now edit resources through the Localization Admin API on MVC projects. Updated the Resx import and export functionality to work using standard .resx resources in lieu of WebForm's Local and Global resources. This allows for easy interactive editing for Web project resources through the Admin user interface. Documentation updated with MVC specific topic.

  • DbResxConverter Enhancements Database Localization Imports/Exports
    The DbResXCoverter class' task is to import and export Resx resources from the West Wind database format that is used to administer localization resources or for use with the Database Resource Provider or Resource Manager. The DbResXConverter acts as an importer and exporter to data format. In this update the converter can now handle standard Resx resources in addition to ASP.NET style local and global resources which effectively makes it possible to import and export resources of ANY .NET project for editing with the resource editor. This is the basis of the new MVC support in the previous item. Resources imported now maintain their proper file system casing on import and export so on export the filenames remain the same (important for source control systems).

  • Updated the Web LocalizationAdmin UI
    Updated the Localization Admin form with various small user interface fixes for small inconsistencies that failed to update the user interface at times. Faster operation with fewer AJAX reloads.

  • Banner Manager Administration Interface Updates
    The banner manager has now been updated to provide easier viewing and updates of banners as well as a link that shows embeddable links for banners (both ASP.NET and static links for non-ASP.NET sites).

  • jQuery Datepicker Auto zIndex Handling
    Added logic to the date picker to automatically deal with zIndex issues forcing the date picker to the top of the zOrder always. Implemented due to many support requests.

  • Fixed: Error handling on AjaxMethodCallbacks in IE 8
    Fixed a bug caused by IE bug that returns xhr as null in some error cases (such as timeouts) where requests have not returned from the server. Fixed.

  • Timeout Property added the AjaxMethodCallback Server and Client Controls
    Provides an easier way to specify the XHR request timeout when making server callbacks. Was previously available but only on the HttpClient property. This makes it much easier to specify the timeout explicitly.

  • Refactored AppConfiguration Class
    Modified the AppConfiguration class to use Configuration Providers that handle persistence into the configuration store. This drastically cleans up the AppConfiguration interface and provides a more consistent configuration model by explicitly configuring a Configuration provider.

    Code Change Alert: This update requires changes to the configuration of the AppConfiguration initialization code to use a provider initialization instead of calling internal methods. If you rather stick with the existing format change the base class your configuration inherits from to _AppConfiguration which continues to use the old interface.

  • getUrlEncodedKey and setUrlEncodedKey JavaScript Querystring parsing
    Two new functions in the JavaScript library allow retrieving values from the query string and stuffing values into the query string to allow modifying of Urls on the client. Useful for Postback scenarios that must change the postback parameters on the client for things like manual paging for example.

  • Many small Tweaks and Fixes to LINQ to SQL Business Object Layer
    Added several new overload hook methods for OnLoaded(), OnNewEntityLoaded and OnValidate() to facilitate simpler subclassing points for common overload operations. Fixed bug with LoadBase() and lambda expressions.

    Several small WestWindJsonSerializer fixes for empty strings
    Fixed a couple of issues related to empty strings or non-quoted strings serialization. Additional checks performed for invalid JSON inputs to Deserialize.


Version 1.05

Sept. 1, 2009

  • contentEditable and Editable jQuery Plug-ins
    Added a content editable jQuery plug-in to ww.jquery.js. Meant as a quick inline edit component makes any DOM content editable and provides a save button underneath the content.

  • Updated jQuery .shadow() Plugin to use native Browser Shadows when available
    FireFox 3.5 and Safari now support box-shadow with their proprietary versions and the .shadow() plugin now checks for these native features and uses them if available. This produces much nicer shadows that are also much more efficient since they don't have a backing <div> tag.

  • Updated jQuery Date Picker to latest version in jQuery.ui
    The date picker is now hooked up to jquery.ui 1.72 and uses standard jQuery Ui theming. There are a few slight changes that will affect existing applications in that the .js library and .css files are now loaded externally rather than through resources. It's simply not possible due to the new theming to keep all resources required synched so we opted to make this stuff external and linkable instead.

    Action Required: Please be sure to update your /scripts directory with jquery-ui-custom.js/.min.js (or your own customized version) and the scripts/Themes folder. These are required to load the script and CSS resources externally.

  • Added maxZIndex jQuery plug
    Small plugin that returns the maxium zIndex in the document. Also can set the zIndex to force an elemnt to the top of the zOrder.

  • Fixed a number of Date Parsing Issues
    Fixed issue with dates prior to JavaScript base date (1/1/1970). Now works properly for MsAjax formatted dates. Support for native JSON parsers.
  • Fixed JSON parsing for literal Escape Characters
    The JSON serializer previously incorrectly deserialized literal strings that contained escape characters as literals. The string characters where escaped instead of being treated as string content. Fixed.

  • String.format function Fix
    Fixed a but in JavaScript String.format() that would only encode the first matched {n} expression.

  • Fix bug with ClientScriptProxy.RegisterCssLink
    Fixed a bug that caused CSS links to be duplicated if the key or url was the same. CSS links are now stored and checked for existance to avoid duplicate injections of the same script link.

  • Default Client onPageError() function that shows errors on Status bar
    Since almost every Ajax application needs an error callback we added a default onPageError(error) function to ww.jquery.js. It uses showStatus() to display an error message on a 'status' bar. Note showStatus requires a couple of CSS styles to display correctly - see showStatus.

  • Added ability to hide Statusbar after Timeout period
    Added special 'hide' keyword to the showStatus function which hides the status bar without accessing the __statusbar instance explicitly. You can also specify 'hide' for afterTimeoutText to allow the status bar to show only a message and then automatically hide itself after the timeout is up.

  • Moved ValidationError and ValidationErrorCollection into Westwind.Utilities
    Moved these classes into the general utilities assembly from the business layer assembly so they can be more easily used in other types of projects since validation or binding errors are often critical for temporary error message storage before display. With this change these components are more easily reusable generically.

  • Added ScriptVariables.GetClientScript() method that returns just script string
    This new method allows using ScriptVariables in MVC applications by embedding the component into a view and calling GetClientScript() to render the generated HTML as string.

  • Added BeginTransaction/CommitTransaction/RollbackTransaction to DataContextSql
    This functionality wraps the native ADO.NET transaction functionality provided by the data context with easier to use transaction handling. This code also keeps the connection open if a transaction is active to keep the transaction context alive. This support was added for consistency although we recommend that you use TransactionScope for easier transaction management.

Version 1.0

released June 2, 2009