Goal - Make EwfTextBox immutable and improve parameters (EnduraCode) We need to completely revamp the constructor parameters of the text box to make it immutable. We should also try to eliminate invalid parameter combinations, such as being able to pass a postBackHandler while also passing a value for AutoPostBack. | - There is now a new form control to replace EwfTextBox, called TextControl. It uses the new PageComponent model. It takes all options as constructor parameters, and it includes a full set of CSS elements for custom styling.
- The text-control generated form-item getters now use the new TextControl component, have slightly different names, and only have a single overload that does not include a useValueParameter parameter. This is a breaking change. The method will use any non-null value.
|
Goal - Prevent duplicate post backs caused by keyboard (EnduraCode) Our click blocking overlay that we put up when a form is submitted only really stops duplicate post backs caused by clicking. Duplicate post backs can still be caused by the keyboard, for example in RSIS by hitting enter multiple times when jumping to a task. | - It is no longer possible to cause duplicate form submissions by rapid-firing the Enter key or otherwise. We now have JavaScript that directly prevents form submission when a request is already in-progress. Previously the framework only blocked mouse clicks, which was an incomplete solution.
|
Goal - Reimplement autofocus (EnduraCode) The old EwfPage.SetFocus method does not let you focus on something that doesn't exist until after the post-back. Furthermore, it is tied to Web Forms and won't work with our new .NET-Standard-compatible page component model. Reimplement autofocus to fix these problems and also make it easier to specify just a region and let the framework choose the first focusable item. | - The web framework previously let you specify a Web Forms control that should have focus when a page loads. It now has a completely new autofocus subsystem that supports the PageComponent model: you can wrap parts of the page in FlowAutofocusRegion, PhrasingAutofocusRegion, and EtherealAutofocus region, and the framework will automatically choose the first focusable element within the regions. The regions support autofocus conditions, which let you specify whether a region should be active for initial requests of the page and/or after specific post-backs. Focusable elements include form controls as well as action components. When possible, we use HTML's new autofocus attribute, and otherwise we fall back to jQuery document.ready calls.
This new autofocus subsystem lets you specify autofocus at whatever granularity is best for your situation. You can improve the maintainability of a page by using a broad region, enabling you to add, remove, or reorder individual focusable elements and have the framework automatically focus on whichever happens to be first. This subsystem is also designed to work for post-backs in which the region you want to focus on doesn't exist before the post-back, for example when you have a button that adds a new row to a table. - When modification errors occur on a post-back, the framework ignores your autofocus regions and automatically focuses on the first error message. This will help to make your forms less frustrating to users when there is a validation error.
|
EnduraCode support - Ad Hoc Development | - Developer notification emails now come from do-not-reply@notifications.enterpriseweblibrary.org instead of using the EmailDefaultFromAddress in the General provider. If you are using SmtpServer as your EmailSendingService in configuration, please verify that your server will deliver mail with this From address.
- The General provider interface (SystemGeneralProvider) no longer includes the AsposePdfLicenseName, AsposeWordsLicenseName, FormsLogInEmail, or FormsLogInPassword members. This is a breaking change; please remove these implementations. Please also remove the "partial" keyword on the class if it is present (declaration should now be "internal class General: SystemGeneralProvider"). Aspose license files are now handled via the System Manager, if you are using it, and otherwise are assumed to be located in "Library/Configuration/Aspose Licenses/Aspose.Pdf.lic" and "Library/Configuration/Aspose Licenses/Aspose.Words.lic".
- There is now a FormItemSetup class which replaces some parameters used when creating form items. This is a breaking change.
- The MergeFieldTree control is now the ToFieldTreeDisplay extension method. This is a breaking change.
- There is now a ToRowTreeDisplay extension method on MergeRowTree. This allows you to display mail-merging data on a page, in one line of code. You can specify which fields and children to include, and in what order. The data is displayed using form-item lists and sections for each child.
- HtmlBlockPlaceholder is now HtmlBlockContainer, and it is now built on the new PageComponent model. This is a breaking change.
- EwfHyperlink now has two new behaviors. ResourceInfo.ToHyperlinkModalBoxBehavior navigates to the resource in a modal box, which is managed by EWL and is fully responsive. ResourceInfo.ToHyperlinkParentContextBehavior navigates to the resource in the "parent browsing context", which is useful for links displayed on pages that open within modal boxes.
- The web framework's error-display subsystem now uses the new PageComponent model instead of Web Forms. This is a breaking change if you are using it directly, but most people do not.
- Form item labels now properly use the HTML *label* element, with the *for* attribute. This improves accessibility.
- Please uninstall the Humanizer, SendGrid.SmtpApi, and System.* (except System.Collections.Immutable, System.Net.Http, System.Security.Cryptography.*, and System.ValueTuple) NuGet packages; they are no longer used and NuGet is not smart enough to remove them automatically. In the case of Humanizer, if you do not do the uninstallation before the EWL update, you will need to reinstall Humanizer.Core to get the project references back.
- The web framework now contains an EmailAddressControl component. This uses an input element with type="email" under the hood.
|