Serenity is a ASP.NET Core / TypeScript application platform which has been built on open source technologies.
It aims to make development easier while reducing maintenance costs by avoiding boiler-plate code, reducing the time spent on repetitive tasks and applying best software design practices.
Who/What This Platform Is For
Serenity is best suited to business applications with many data entry forms, administrative interface of public facing web sites, and mobile application back ends.
This doesn't mean that it can't be used for other types of applications. Some of its features can be helpful for any kind of application.
Visual Studio 2019 version: Serene for Visual Studio 2019
If you are looking for ASP.NET MVC / .NET Framework version (which is obsolete) for Visual Studio 2017 or earlier here is the link: Serene MVC version
Web Site
Visit https://serenity.is/ for more information and links.
Online Demo
Check https://demo.serenity.is for an online demo of Serene.
Documentation
See Serenity Developer Guide for documentation, tutorials and more information:
https://serenity.is/docs
For Issues and Questions
Please don't hesitate to ask any questions in GitHub:
https://github.com/serenity-is/Serenity
Change log
8.7.1 (2024-10-16)
Features
- ComboboxEditor tries to preserve order during initSelection for async / sync sources.
- Add an optional hook for fetchScriptData that allows intercepting script data loading by fetch / xhr (sync) primarily for testing purposes.
- Use queueMicrotask for side effect import of referenced types as it may cause issues for circular deps (noticed with swc based jest tests)
- Allow passing callback and fail arguments to loadByIdAndOpenDialog
- Added a Html.ModulePageInit extension that generates pageInit script and also auto includes related css if exists
- Added a Html.AutoIncludeModuleCss extension to auto include es module's related css file generated by esbuild into pages, e.g. GridPage etc.
- Added layout option to grid/panel page extensions
- Make use of esbuild's CSS import / bundling functionality in samples like Northwind, split page specific CSS rules into their own XYZPage.css file imported by XYZPage.ts
- Also delete extra .css and .css.map files that maybe generated by esbuild in TSBuild clean plugin
- Updated Microsoft.Extensions.Caching.Memory to 8.0.1, System.Text.Json to 8.0.5, Microsoft.TypeScript.MSBuild to 5.6.2, FluentMigrator to 6.2.0, MailKit to 4.8.0, Mono.Cecil to 0.11.6, Npgsql to 8.0.4, Selenium.WebDriver to 4.25.0, xunit to 2.9.2
- Updated @swc/core to 1.7.26, typescript to 5.6.2, dompurify to 3.1.7, preact to 10.24.2, tsbuild to 8.7.4
8.7.0 (2024-10-07)
Features
- Completely rewritten 2FA authentication system supporting Email, SMS, Authenticator apps, and other methods by implementing relevant interfaces in
Serenity.Pro.Extensions .
- Introduced a new 2FA settings UI to configure, enable, and disable 2FA methods for the current user.
- Added a
TwoFactorData field to the Users table. This migration also removes the MobilePhoneVerified and TwoFactorAuth columns, as they are no longer used.
- New
Authenticator two-factor method (Serenity.Pro.TwoFactorAuthenticator ) allows using Authenticator apps (TOTP) for 2FA (available only in Business/Enterprise versions).
- Rewritten
~/Serenity.Extensions/common-style.css and ~/Serenity.Extensions/common-theme.css to align closely with the premium theme. These now include SlickGrid, Select2, and jQuery File Upload styles. Serene users should remove slick.grid.css , jquery.fileupload.css , and select2.css from their appsettings.bundles.json files.
- Added AI translation options to the Translation page. The default implementation works with any local or remote API compatible with OpenAI. Other APIs can be integrated by implementing an interface.
- Built-in types from corelib and SleekGrid are now included in the code generation process (Sergen/Pro.Coder). This reduces the occurrence of errors when dependencies are missing, such as when
npm install fails or isn't run.
- Added more checks to the
sergen doctor command, including version mismatches between Serenity.Net.* and sergen .
- Updated various libraries: Microsoft.Data.SqlClient to 5.2.2, Microsoft.Data.Sqlite to 8.0.8, MailKit to 4.7.1.1, X.PagedList.Mvc.Core to 10.1.2, Bogus to 35.6.1, @swc/core to 1.7.23, esbuild to 0.23.1, rollup to 4.21.2, terser to 5.31.6, tslib to 2.7.0, typescript to 5.5.4, chart.js to 4.4.4, dompurify to 3.1.6, tsbuild to 8.6.6, @preact/signals to 1.3.0, and preact to 10.23.2.
- Switched to
X.Web.PagedList from X.PagedList.Mvc.Core , as the latter is deprecated.
- Replaced
StackExchange.Exceptional.AspNetCore with a custom fork, Serenity.Exceptional.AspNetCore (https://github.com/serenity-is/exceptional), removing the remaining System.Data.SqlClient reference. This reduces platform-specific assemblies under bin/runtime by about 4MB.
- Removed the
Microsoft.Data.Sqlite reference from StartSharp.Web . Users can add the reference manually if needed, saving 20MB of platform-specific assemblies.
- Sergen now generates an ESM helper (e.g., ESM entry points generator in Pro.Coder) in addition to an MVC helper with the
MVC command.
- Shortcut constants are now generated directly under the ESM helper class for entry points with unique filenames matching root folders.
- Sergen now processes
.mts files when parsing TypeScript code.
- You can now extend default EntryPoints in
sergen.json by specifying "+" as the first item.
- Added a generic version of the
GridPage extension that retrieves the page title from the Row type.
- Set
moduleResolution to bundler (supported in TypeScript 5.0.2+) since esbuild/rollup are used for bundling.
- Added an
itemId function to DataGrid that returns the ID property value of a given item.
ToolButton now accepts HTMLElement as a title, simplifying the rendering of Bootstrap dropdowns and other buttons in the toolbar.
- Converted most corelib code using
document.createElement /Fluent to JSX syntax.
- Set
ServerTypings to use PreferRelativePaths = true (defaults@6.6.0) to avoid issues when no @/* mapping is found in tsconfig.json , or it is defined in a base file in another directory without a baseUrl: "." configuration.
- Code is now generated for abstract types (like base endpoints) that have a
ScriptInclude attribute.
- Switched the
Texts.ts declaration class to use the texts namespace instead of the root namespace.
- Generated shortcut constants for individual nested local text classes in
Texts.ts , such as ValidationTexts , in addition to just Texts .
- Introduced a
TransformInclude interface in corelib. When extended by an interface, it allows generating client types for those types during transformation, useful for compile-time checking of page props and other script interfaces referenced server-side.
- Improved class member ordering in code generation for source generators when a service/row class is split into partial files by ordering members by originating source file.
- Added distributed cache support to
Throttler .
- Added a
Config.defaultReturnUrl setting and getReturnUrl function in corelib, which can be used on the login page to get the return URL from the query string or fallback to a default. The Config.defaultReturnUrl function can be overridden for custom logic.
- Added a
ValidationError constructor that accepts localizer and local text message arguments.
- Added
DataProtectorBinaryTokenExtensions to streamline IDataProtector usage with BinaryReader/BinaryWriter and Base64UrlEncode/Base64UrlDecode , reducing repeated code when encoding/decoding tokens.
- Added a new
FunctionCallCriteria base type and an UpperFunctionCriteria subclass to handle LIKE statements in case-sensitive databases by automatically applying UPPER for StringField types.
- Added several SleekGrid samples to
Serenity.Demo.AdvancedSamples .
- Removed the direct dependency of
Serenity.Data on Microsoft.Data.SqlClient by using reflection where necessary.
- Switched to esbuild for generating
corelib/wwwroot/index.global.js instead of Rollup.
- Added
IconClassAttribute to specify icons for UI elements, currently used for the 2FA interface.
Breaking Changes
- Removed legacy namespace-based server typings generation support for Sergen/Pro.Coder. Existing generated files under
Imports/ServerTypings will not be deleted, but migrating to modern ESM modules is strongly recommended.
- Removed legacy namespace mode code generation support in Sergen. It now only generates ESM-style code, even in projects with namespace-based code.
- The legacy Open Sans font under
~/Serenity.Assets/Content/font-open-sans.css has been removed. Serene users should update appsettings.bundles.json to reference ~/Serenity.Assets/fonts/open-sans/open-sans.css .
- The legacy
~/Serenity.Assets/Content/font-awesome.css has been removed. Serene users should replace it with ~/Serenity.Assets/line-awesome/css/line-awesome-fa.min.css to switch to the Line Awesome font.
- Removed unused assets such as
bootstrap-icons , tabler-icons , jquery.fileupload.css , jspdf.js , jquery.autoNumeric.js , jquery.validate.js , and legacy font versions.
- Removed
toastr.css and toastr.js from Serenity.Assets . They are now integrated into corelib and pro-theme/common-style files.
- Removed
select2.css and related files from Serenity.Assets . They are now integrated into pro-theme/common-style files.
- Sergen no longer supports the "restore" command as all assets are delivered as static web assets or via npm. Legacy namespace typings restore is no longer supported.
Bug Fixes
- Fixed an issue where
this.time could be null when DateTimeEditor uses flatpickr or the browser's default input.
- Fixed a script error in the
BasicProgressDialog cancel function.
8.6.4 (2024-08-29)
Features
- A new
dotnet sergen doctor command that will check a project for issues related to environment and NPM/NuGet package versions.
- Update jsx-dom to 8.1.5
Bugfixes
- Fix conversion issue with Sql VarBinary columns and setting to null (Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query). This could effect SqlUploadStorage.
8.6.3 (2024-08-24)
Features
- Introducing a new
ServiceEndpointModelBinderProvider that can be added to options.ModelMetadataDetailsProviders in Startup.cs as options.ModelMetadataDetailsProviders.Add(new ServiceEndpointBindingMetadataProvider()); instead of using options.ModelBinderProviders.Insert(0, new ServiceEndpointModelBinderProvider()); .
- Added a
sanitizeUrl method that can be used with JSX href attributes to sanitize URLs rendered from user content.
- Added a third optional
options argument for extensions of GridPage and PanelPage .
Bugfixes
- Fixed an issue where
DateTimeEditor couldn't be set back to readonly=false .
- Corrected the text for the validation rule of lowercase characters in passwords.
8.6.2 (2024-08-11)
Features
[Breaking Change] Enhanced security against XSS attacks: HTML strings returned from formatters and format functions are now automatically sanitized by default. While formatters should already use ctx.escape() to handle any user-provided or dynamic content, this change adds an extra layer of protection. The default sanitizer is a basic regex-based solution, but if DOMPurify is available globally, it will be used instead. You can also specify a custom sanitizer by setting gridDefaults.sanitizer (in @serenity-is/sleekgrid ) via ScriptInit.ts . Keep in mind that most sanitizers will strip out unsafe content, including JavaScript URLs like javascript:void(0) . To ensure security and compatibility, it is recommended to update existing formatters to use jsx-dom or Fluent instead of returning raw HTML strings. If necessary (though not advised), you can disable sanitization by setting gridDefaults.sanitizer to a pass-through function, such as (dirtyHtml: string) => dirtyHtml .
- Sergen now generates files with a
.tsx extension instead of .ts for Dialog , Grid , and Page components, simplifying the use of JSX syntax (e.g., jsx-dom) in your projects.
Bugfixes
- Fixed Pro.Coder ESM/MVC source generators do not operate properly with Visual Studio in some cases.
- Fixed an issue where the tooltip toggle method did not return the instance if it was disposed.
8.6.1 (2024-08-07)
Features
Bugfixes
- Fix frozen columns not rendered when scrolling vertically if horizontal scroll is bigger than frozen cols
8.6.0 (2024-07-13)
Features
- Updated esbuild to 0.23.0 in tsbuild 8.6.0 which is necessary for modern (non experimental) decorator support in TypeScript. Please remove experimentalDecorators line from tsconfig.json after updating "@serenity-is/tsbuild" to 8.6.0 or later and update Visual Studio (for TypeScript update).
- Added experimental editor addon support, which provides ability to add content like icons, text, buttons inside and next to editors. See Editor Addons Sample for more info.
- New EditorCssClass attribute that adds a css class to the editor element.
- Added value option to PropertyGrid, which if not "false", loads the given value as initial entity
- PropertyGrid is divided into functional sub components like PropertyFieldElement, PropertyFieldCaption, PropertyGridCategory, PropertyTabs etc.
- PropertyGrid defaultCategory and categoryOrder options which was unused
- Remove first-category class from the property grid's first as it can be done via css
- Add a vertical gap between categories
- Remove category links generation in property grid (they were hidden before)
- Aded data-category attribute to category divs in property grid
- Allow passing editor type to the propertygrid item via its type reference instead of string
- Removed unused toastr options like closeMethod, closeDuration, closeEasing, showDuration, hideDuration etc. which was related to animation but were not implemented.
- By setting timeOut option to -1 for toastr, the notification can be made sticky. It required setting both timeOut and extendedTimeOut to 0 before.
- Add ability to lazily load types via Config.lazyTypeLoader callback. For it to work getOrLoad / tryGetOrLoad functions of corresponding type registry (e.g. DialogTypeRegistry / FormatterTypeRegistry etc.) should be used instead of get/tryGet which may result in async behavior that should be handled by the caller.
- Handle passive event listener warnings for combobox editor
- Try to avoid Router closing dialogs when clicking a hash link that does not look like a handled route (e.g. #edit/..., #new etc.)
- Drag drop in tree grid sample no longer requires jquery.event.drag
- Determine the default editor type as TimeSpanEditor for TimeSpan typed properties. (#7206). Add multiplier option to legacy TimeEditor (integer value) that allows storing seconds or milliseconds instead of the minutes which was the default.
- Avoid signal aborted without reason errors in console for service calls
Bugfixes
- Fix criteria DateTimeOffset and DateTime JSON parsing (#7180) caused by difference in System.Text.Json
- DateTimeFormatter does not use the passed DisplayFormat.
- Don't return empty string for Fluent.val on non-existing inputs, e.g. when this.el is null. Return undefined instead like it was for jQuery.
- Fix filter display value not showing for enum editor, #7193
- Add back css for .drag-helper which is used in drag drop in tree grid sample
8.5.6 (2024-06-13)
Features
- Replace the internal "remove" event, triggered by Fluent when an element is cleaned up (e.g., by calling
remove() on itself or empty() on its parent), with a new "disposing" event. Note: This may be a breaking change if you were using this undocumented event.
- Enable the space key in the date-time editor to set the current date and time again (only when the field is empty or all text is selected).
- Added support for
ByteArrayField and RowField in the GenerateRowFields attribute.
Bugfixes
- Fix the esbuild minifier locks for empty code blocks.
- Resolve the issue where the column picker dialog closes when dragging and dropping.
8.5.5 (2024-06-08)
Bugfixes
- Fix static Dialog.onClose for modals when the modal is not initialized as the event triggered on body is not regular bs modal events
8.5.4 (2024-06-08)
Bugfixes
- Fix assigned fields array for more than 64 fields is not cleared during clone if only one of the first 64 fields were assigned before cloning
8.5.3 (2024-06-07)
Features
[Breaking Change] Moved image processing methods like ScaleImage from UploadStorageExtensions to DefaultUploadProcessor as virtual methods. Removed FileUploadBehavior.CheckUploadedImageAndCreateThumbs and used the existing IUploadProcessor interface instead.
- Added additional metadata such as
EntityType (row full name), EntityTable (table name), EntityId (ID property value), EntityField /EntityProperty (field/property where the upload editor is placed) to enable tracing files back to their original entities. Also set generated ImageSize and ThumbSize as metadata to avoid loading image files to get actual sizes when required. This prepares for adding custom metadata like tags, descriptions, etc., to files if desired.
IUploadProcessor no longer returns a Success flag and raises an exception instead. The check for .Success should be removed from FilePage after updating to Serenity 8.5.3+. The property still exists but is obsolete and will always return true, so this is not a breaking change.
- There is no need to set the original name in
FilePage as the upload processor handles it now.
- Improved handling of situations where a script or CSS file is locked by a process when trying to get the content hash.
- Made EsBuild the default script/CSS minifier, as Nuglify has issues with some script syntax.
- Added
allStart / allStop events to the uploader and triggered allStart , allStop , batchStart , batchStop events on upload input if available.
- Updated Google Maps editor sample for the latest API changes.
Bugfixes
- Fixed an issue where the widget constructor would fail when an empty array is passed as an element.
8.5.2 (2024-06-05)
Features
- Added a "More Information" link (https://serenity.is/docs/av) for the failed AV scan message.
- Improved the combobox editor by attempting to transfer the text typed into the inplace-add dialog, if the dialog provides a name property via its getNameProperty function.
Bugfixes
- Fixed an issue where upload editors did not display errors returned from TemporaryUpload and incorrectly assumed the upload was successful, even in cases of blacklist or other validation errors.
- Resolved a problem where the data audit log migration added in version 8.5.1 failed in SQLite (e.g., tests/Linux) due to SQLite's lack of support for altering columns.
8.5.1 (2024-06-04)
Features
- Added optional generic type arguments to several Fluent functions, such as
closest .
Fluent.findEach now passes the index as the second argument to the callback.
- Introduced static versions of
Dialog.onOpen and Dialog.onClose that function even when the dialog is not yet initialized, as the mode (modal, panel, UI) is unknown at that time.
- Added
onOpen and onClose methods to BaseDialog to attach event handlers for dialogs, which operate even before the dialog is initialized.
- Changed the second argument (previously
before ) to an options object for Dialog.onOpen and Dialog.onClose to allow the oneOff option. This change may be breaking if the second argument, such as before , was used.
- Switched to using a bitmask instead of a boolean array for assigned field tracking. If the number of fields is less than 64, this reduces the amount of allocations.
- Released
tsbuild 8.5.0, which updates esbuild to 0.21.4. After updating tsbuild , the experimentalDecorators option in tsconfig.json is no longer needed when using TypeScript 5.0+.
- Added a context argument to the
Serenity decorator function to support JavaScript decorators in addition to TypeScript experimental decorators.
- Utilized
CSS.escape to prevent issues when a field name contains special characters while searching for quick filters.
- Enabled pending changes confirmation to work even when the dialog is not yet initialized. Normally,
DialogUtils.pendingChangesConfirmation should be called from the initDialog method, but some instances call it from the constructor where the dialog is not yet created.
- Increased the size of the
TableName , RecordId , and FieldName columns to 200 in the DataAuditLog table (StartSharp).
Bugfixes
- Fixed: Replaced
select * with select datname in PostgreSQL database queries for data migrations.
8.5.0 (2024-05-16)
Features
- Allow
permissionService to be passed as null to the TransientGrantingPermissionService . This enables wrapping within another permission service. If permissionService is null and no transient permissions are granted, it returns false .
- Add
ITransientGrantor interface to LogicOperatorPermissionService to ensure the wrapped permission service retains transient granting support.
- Add
ITransientGrantor interface to OpenIdScopePermissionWrapper to preserve the ITransientGrantor interface if the wrapped permission service implements it (StartSharp).
- Add
ITransientGrantor support to the default IPermissionService implementation (PermissionService ), eliminating the need for separate configuration in Startup.cs .
[Breaking Change] Added IsAllGranted and GetGranted methods to the ITransientGrantor interface. Custom implementations not using TransientGrantingPermissionService should be updated to include these methods.
- Add impersonation/transient grant support during report callback execution based on current user/transient granting status. This is useful for background task report generation.
- Introduce
AddSingletonWrapped extension to simplify wrapping services like IPermissionService .
- Added
AsObjectNoCheck function to skip TrackWithChecks errors for behaviors, etc. Use with caution.
- Add
FileName property to ReportRenderResult to determine the download name from the result without accessing the rendered report.
- Introduce
IReportCallbackInterceptor interface.
- Allow passing
bubbles /cancelable via event args through Fluent.trigger .
[Breaking Change] Rename previously exported SleekGrid compat editor types, such as changing IntegerEditor to IntegerCellEdit , to avoid clashes with corelib editor types. These legacy editor types are rarely used in Serenity apps, so this change should not cause issues.
Bugfixes
- Fixed batch ending condition in the
Uploader class affecting multiple uploads (#7139).
- Added support for jQuery UI tabs active/link selectors in
TabExtensions methods.
- Restored color application to category titles as previously implemented.
8.4.8 (2024-05-03)
Features:
- New AuditedAttribute which when placed on a row property like Audited(false), can skip auditing for that particular field
- Add option to prefer relative paths in sergen.json ("../ServerTypes/" instead of "@/ServerTypes/") which is better when directly referencing TypeScript source code in feature projects from Jest tests etc.
- Hide category links in Serene just like in StartSharp. Category links are deprecated and will be eventually removed.
Bugfixes:
- Remove extra folder for RequestHandlers while generating code with sergen
- Fix clicking on category link click closing dialog, due to renderContents called before derived initializers (e.g. arrow functions) run, causing this.categoryLinkClick to be undefined.
- Fix upload issue in Serene due to HandleUploadRequest in FilePage returning ServiceResponse type instead of UploadResponse, resulting in missing value in JSON serialization.
8.4.7 (2024-04-27)
Features:
- Introduced a new IInitializeLocalTexts abstraction, which should be used in Startup.cs instead of an InitializeLocalTexts method by calling services.AddLocalTextInitializer() in ConfigureServices, and calling app.InitializeLocalTexts in Configure method.
- Add option to show service errors as notification by passing third arg as true. Show errors in slick remote view as notification instead of alert dialog like it was before.
- Made messages shown in showServiceError function localizable
- Set UseHardlinksIfPossible to true for copying files under node_modules/.dotnet
- Removing get_entity/set_entity/get_entityId/set_entityId methods in entity/property dialogs, which were remaining from Saltaralle times and using properties instead
- Moved byId and findById methods up to Widget class as preparation for obsoleting/removing TemplatedWidget
- Removing TemplateScript type and registration. .Template.html and ts.html files were already deprecated before along with getTemplate which will be removed soon.
- TemplatedWidget is deprecated, use Widget instead. TemplatedPanel is deprecated, use BasePanel. TemplatedDialog is deprecated, use BaseDialog. These changes reflect deprecating legacy template mechanism in 8.2.0. Use renderContents method to return markup via tsx/jsx-dom, or Fluent(...).getNode(). Even though legacy getTemplate() will be supported internally, it is not recommended.
- Allow passing editorType as type in addition to string for PromptDialog
- Pad column names with spaces to avoid unique column errors while exporting to Excel (if multiple columns has the same display name), and also add _numbers to table names
- Set IgnoreHTTPSErrors to true for PuppeteerHtmlToPdf to overcome development certificate issues
Bugfixes:
- Fix TemporaryFileHelper.TryDeleteOrMark not working properly with virtual file systems
- Fix prompt dialog validateValue callback
- Fix SqlFileSystem null reference exception during GetFiles
- Fix impersonation links sometimes failing due to base64 / url encoding and caching issues
- Add missing top/left to select2-offscreen which was in the original css. This was causing unnecessary scroll bars.
8.4.6 (2024-04-16)
Bugfixes:
- Fix sortablejs removing draggable attribute from .slick-resizable-handle after columns change, stopping column resizing
- DataExplorer might fail on Postgres as migrator create ID field with quotes
- Fix sorting issue when data explorer grid is sorted manually by ID, and clear sort columns when changing table
- Missing brackets in DisplayName expression for EmailQueueRow causing issue in Postgres due to the way FluentMigrator quotes field names by default
8.4.5 (2024-04-16)
Features:
- Update SixLabors.ImageSharp to 2.1.8 (2.1.7 seems to have a vulnerability)
Bugfixes:
- Contains operator not working properly in filter dialog
- Select2 positioning does not work inside a modal when page is scrolled down
8.4.4 (2024-04-06)
Features:
- Improve drag drop group by handling StartSharp
- Added an unhandledRejectionHandler which should be installed via ScriptInit.ts or errorhandling-init.ts file via
window.addEventListener("unhandledrejection", ErrorHandling.unhandledRejectionHandler); so that it does not result in unhandled promise errors for serviceCall/serviceFetch methods.
[Breaking Change] As jsx-dom has recently fixed an issue (before version 8.1.4) where ref callbacks were not executed for React style class components like Serenity Widgets, we will no longer call the ref callback from the Widget itself to avoid double execution. This might cause problems when an older version of jsx-dom is used. So, after updating to Serenity 8.4.4+, please update jsx-dom in your package.json to 8.1.4+ and run npm install.
- Widget.element is no longer deprecated, it just returns a Fluent object wrapping this.domNode
- Added a Fluent.findEach function that executes a callback for each element found with a Fluent object
- Added Fluent.after and Fluent.before methods similar to jQuery ones.
- Added frequently used click/focus methods to Fluent to make it easier to port from jQuery
- Add static versions of Fluent.findAll, Fluent.findEach, Fluent.findFirst that works with the document
- Removing typings for jQuery extensions getWidget and tryGetWidget as they are causing a global jQuery object to be available in TypeScript context even if it doesn't. The methods are still there. If you still use them cast jQuery object to any or add a global.d.ts with contents of old jquery-globals.d.ts that is removed in the commit.
- Message dialog types are now ignored for routing, e.g. they don't modify the URL hash when opening/closing
- Updated System.Text.Json to 8.0.3, Dapper to 2.1.35, Microsoft.Data.SqlClient to 5.2.0, System.IO.Abstractions.TestingHelpers, coverlet.collector, Selenium.WebDriver and db connectors in sergen
- Updated SleekGrid to 1.8.0
Bugfixes:
- Select2 input was not readonly for multi select even if the select itself is readonly
- Fix select all button function in CheckLookupEditor
- Label style width was set to XYZpxpx instead of XYZpx breaking form label widths
- Missing parens in coalesce for vMin calculation in IntegerEditor
- Allow clearing by backspace in autonumeric based editors when minValue > 0
8.4.3 (2024-03-25)
Bugfixes:
- Fix possible closure variable issue with edit link formatting
8.4.2 (2024-03-24)
Bugfixes:
- Fix select2 null ref error in some cases
8.4.1 (2024-03-22)
Features:
- The url method in jquery validate port made functional again.
- JsonField.ValueFromJson is now be able to read from non string fields just like Newtonsoft version did before the System.Text.Json switch
8.4.0 (2024-03-20)
Bugfixes
- Panel root element is not removed on destroy
8.3.9 (2024-03-20)
Bugfixes
- Fluent.getWidget and Fluent.tryGetWidget uses wrong target and fails
- Order for reason / message in service call / fetch Promise reject reason
8.3.8 (2024-03-19)
Features:
- Improve generated dynamic script code behavior when Serenity is not pre-loaded
- Make getWidget and tryGetWidget available on Fluent. It was normally available but declaration merging did not properly change "@serenity-is/base" to "@serenity-is/corelib" although base was bundled into corelib
- Improve router resolve handling when pending requests are in progress
[Breaking change] Panel events will fire at the .panel-body instead of .s-Panel. This will make it compatible with ui dialog behavior and will allow attaching panelopen events before the panel body is wrapped with a s-Panel. We also now fire new modalbeforeopen modalopen etc. events at .modal-body for Bootstrap modal to make behavior consistent between all dialog types. This is required as it is possible for our dialogs to be opened later as a panel, ui-dialog or modal, but this information is not available on Dialog class creation and the body element is not yet wrapped with any of dialog types yet.
8.3.7 (2024-03-10)
Features:
- Added
Fluent.matches method which is like $.is but don't support any custom selectors and calls element.matches
- Added
Fluent.class method which directly sets the className property. This should be preferred to addClass for element creation
- Added a
Fluent.isDefaultPrevented helper to overcome issues when jQuery exists or not so that we don't have to check both e.defaultPrevented and e.isDefaultPrevented?.()
- Added a
Fluent.eventProp helper to read a property from event, event.originalEvent or event.detail as jQuery does not pass custom properties like route etc. to the synthetic event.
SubDialogHelper.bindToDataChange auto extracts the original event if used with jQuery so that data change info can be easily accessed
- Also trigger ajaxStart/ajaxStop events on document when jquery is not available
- NProgress works when jQuery is not available (StartSharp)
- Allow directly passing formatSelection and formatResult from ComboboxOptions to Select2, so that providerOptions don't need to be set explicitly.
8.3.6 (2024-03-03)
Features:
- Add Fluent.byId which is shortcut for Fluent(document.getElementById)
- Add Fluent.each and Fluent.style which executes a callback with the node or css style declaration if element is not null
Bugfixes:
- Column resizing does not work in Firefox without jQuery resizable due to longstanding Firefox issue
8.3.5 (2024-02-28)
Bugfixes:
8.3.4 (2024-02-24)
Features:
- New actions dropdown in grid sample for StartSharp.
Bugfixes:
- ComboboxEditor.get_text returning
[object Object] affecting inline editing etc.
- CKEditor container class assignment
- Fix Drag Drop in Tree Grid sample which requires jquery and jquery.event.drag scripts.
8.3.3 (2024-02-21)
Bugfixes:
- Fix select2/combobox paging more results calculation
8.3.2 (2024-02-20)
Features:
- Implemented the use of AsyncLocal instead of ThreadLocal for ImpersonatingUserAccessor and TransientGrantingPermissionService. This change enables background tasks to work with async code even when HttpContext is unavailable.
- Changed event handling from touchstart/mousedown to click for mobile browsers, preventing the select2 dropdown from opening while touch scrolling.
- Applied focus to select2 when the hidden input is focused, such as by clicking its label.
- Removed left/top rules from select2-offscreen to prevent the hidden input from scrolling to the top of the page when its label is clicked.
- Updated the following packages:
- Microsoft.Data.SqlClient to 5.1.5
- Dapper to 2.1.28
- Nuglify to 1.21.4
- System.Text.Json to 8.0.2
- Microsoft.Data.Sqlite to 8.0.2
- Microsoft.TypeScript.MSBuild to 5.3.3
- Markdig to 0.35.0
- Bogus to 35.4.0
- PuppeteerSharp to 14.1.0
- Updated Sergen's references Scriban, Microsoft.Data.Sqlite, MySqlConnector, Npgsql, Spectre.Console to the latest versions.
- Several packages in test projects including Selenium.WebDriver to 4.17.0, WebDriverManager to 2.17.2, System.IO.Abstractions.TestingHelpers to 2.0.15.
- Added
fullscreen-lg-down class to FilterDialog.
- Updated OpenIddict to 5.2.0 in StartSharp.
[Breaking Change] Removed external Select2 script usage since 8.3.0 and embedded it. Replaced Select2.util.stripDiacritics with the stripDiacritics method from @serenity-is/corelib .
Bugfixes:
- Ensured destruction of flatpickr instance for dateeditor/datetimeeditor.
- Fixed Flatpickr clearing the input value on focus out of readonly input as disable returns true for the current date.
- Addressed an issue where some nodes may not have the hasChildNodes method (https://github.com/orgs/serenity-is/discussions/7080) and Fluent.empty is called on the wrong element in Select2.
- Resolved a scenario where Comboboxeditor was sometimes returning
more: true while there are no more pages.
- Corrected WarningDialog to show WarningTitle instead of SuccessTitle (#7082).
- Added a check for null before Fluent.prependTo.
- Applied class toggle for category collapse icon in propertygrid.ts (#7084).
8.3.1 (2024-02-09)
Bugfixes:
- Fix potential stack overflow with Fluent.remove
8.3.0 (2024-02-09)
Features:
- In this version, we are removing the jQuery dependency, along with other scripts like
Select2 , jQuery Validate , autoNumeric . These three plugins have been converted to TypeScript without jQuery dependencies and are embedded into Serenity Corelib. The jQuery mask input plugin and Colorbox are also removed, but they do not have any alternatives, and we do not plan to introduce any. MaskedInput is not used anywhere in our templates/samples and had very limited usage. Colorbox was used for viewing larger images by clicking upload editor thumbnails, but they will simply open in a new tab for now.
- Fluent removes the attribute if the value passed to the Fluent.setAttribute is null.
- Added prevSibling and nextSibling functions to Fluent, which work similarly to prevAll and nextAll except for a single element, and when the selector is null, they act like .prev/.next.
[Breaking Change] jQuery Validator is converted to TypeScript by removing jQuery dependency and is embedded in the Serenity corelib. You should remove the one in appsettings.bundles.json as it will no longer be used.
- The default date format for upload format date is
yyyyMMddhhmmss if not specified. (#7067)
[Breaking Change] Select2 is converted to TypeScript by removing jQuery dependency and is embedded in the Serenity corelib. You should remove the one in appsettings.bundles.json as it will no longer be used.
[Breaking Change] The base Select2Editor is renamed to ComboboxEditor , and a Combobox abstraction class is introduced. This change will make it possible to replace Select2 with another library in the future if desired. Several Serenity specific types like Select2SearchQuery etc. are renamed to ComboboxSearchQuery and similar. Some methods like getSelect2Options etc are renamed to getComboboxOptions . To pass Select2 specific options, you should override that method and provide a getProviderOptions callback.
- Flatpickr will no longer open on click by default, only on button click just like it was the case with UI datepicker. Flatpickr options can be changed for DateEditor/DateTimeEditor by overriding the getFlatpickrOptions method.
- Bootstrap Modal does not allow focusing on any element outside the modal, so any inputs in flatpickr/ui datepicker/select2 etc. could not be focused while inside a modal. We applied some workarounds/patches to those components and Bootstrap itself.
- Use Fluent.toggle for hiding grid field in the property grid instead of toggling the hidden class, so that it can be shown with Fluent.toggle again (https://github.com/serenity-premium/startsharp/issues/892).
[Breaking Change] jquery.autoNumeric is converted to TypeScript by removing jQuery dependency and is embedded in the Serenity corelib (We evaluated the latest version of autoNumeric which does not have jQuery dependency, but it is almost 10 times the size). You should remove the one in appsettings.bundles.json as it will no longer be used.
[Breaking Change] MaskedEditor, which depends on a very old jquery.maskedinput plugin, is deprecated. You may still use it by including jQuery and the plugin, but it is not recommended. The option is to add a validation rule or find another mask input library.
[Breaking Change] Colorbox is removed from StartSharp/Serene as we no longer have jQuery. You may still use it by including it together with jQuery, but it is not recommended. Currently, the images will open in a new tab for upload editor thumbnails.
- Added Tooltip.isAvailable method to check if bootstrap tooltip is available.
[Breaking Change] @Decorators.option is deprecated and will be removed completely in a future version as it is not compatible with JSX. Please convert them to regular constructor options/props.
- Replaced several jQuery plugins used in StartSharp Dashboard with other options like Sortable.
Bugfixes:
- Fix TextAreaEditor displaying undefined on new record mode.
- Bootstrap 5 Tooltip display issue when jQuery is not loaded.
- The flatpickr trigger button now has type "button" so that it does not cause submit/validation.
- Space key does not set the date editor to today with flatpickr.
8.2.2 (2024-01-21)
Features:
- Change autoOpen to true for Dialog class (not TemplatedDialog/EntityDialog etc.)
- Support returning false or a promise that return false from Dialog button click event to prevent closing for dialog with buttons that have a "result"
Bugfixes:
- Wrong check for getting readonly state in select2editor
8.2.1 (2024-01-20)
- This release incorporates significant changes, notably the removal of jQuery UI dependency from our libraries. Although jQuery is still employed for select2, validation, and a few other widgets, these will also be replaced or removed in the near future. Please refer to the release notes at https://serenity.is/docs for guidance on migrating your code.
- Introducing a
Fluent object/function, similar to jQuery but designed for a single element, offering a subset of functions. Its aim is not 100%, not even half compatibility, and it serves to simplify the migration of existing code. The Widget's element property now returns a Fluent object instead of a jQuery object. It is recommended to use .domNode instead of the .element property where possible, with the latter marked as deprecated for easier identification of its usage.
- Serenity widgets can now be seamlessly used with jsx-dom without requiring wrapping. Widget components can be created without passing a jQuery element, as the component will automatically create its element, akin to calling
Widget.create .
- The TypeScript scanner and parser are entirely rewritten based on the latest TypeScript source code, passing over 12,000 test cases and resulting in the same set of tokens/AST nodes.
[Breaking Change] SleekGrid scripts (e.g., slick.core.js , slick.grid.js , etc.) will now be shipped via the new Serenity.SleekGrid package instead of Serenity.Assets . Update all references from ~/Serenity.Assets/Scripts/slick.* to a single reference of ~/Serenity.SleekGrid/index.global.js containing all those scripts bundled together.
- The outdated
jquery.fileupload.js , which had a jQuery UI dependency, is no longer required as we now have a custom uploader component. Remove it from appsettings.bundles.json .
- Introducing
~/Serenity.Assets/Scripts/jquery-ui-datepicker.js , which should replace ~/Serenity.Assets/Scripts/jquery-ui.js . It exclusively contains the jQuery DatePicker widget. StartSharp users should refer to the latest source code to integrate flatpicker instead.
- SleekGrid column formatters now support returning HTML elements, either through
document.createElement or jsx-dom. This feature is currently experimental.
- Merged the
jQuery.dialogExtendQ plugin into corelib. Remove the inclusion in appsettings.bundles.json .
- Implemented a compact version of the column/property script bundle, reducing uncompressed script size by about 65%.
- Introducing
faIcon and fabIcon helpers providing autocompletion for Line Awesome (Font Awesome) icons.
- Added
gridPageInit and panelPageInit functions for use in GridPage and PanelPage, replacing initFullHeightGridPage .
- Sergen now has limited support for type literals and intersection types for options/props in addition to simple type aliases and interfaces.
- Introduced
IPasswordStrengthValidator interface for abstraction of password strength rules and validation (#7054).
- To obtain widgets directly from an HTML element, use the new
tryGetWidget and getWidgetFrom helpers instead of their jQuery counterparts.
[Breaking Change] All dialogs deriving from EntityDialog are panels by default. Add @Decorators.panel(false) to make one open as a modal/dialog. All those deriving from GridEditorDialog /PropertyDialog are modal/dialog by default.
- Panels can now have dialog buttons. Use
@Decorators.staticPanel to remove dialog buttons inherited from PropertyDialog , along with the close button.
- Adjusted
TabExtensions to handle Bootstrap tabs when jQuery UI is not available.
- Ensure that if another reset password token is requested, the prior one becomes invalid by updating the
LastUpdateDate of the user.
- Also handle
SingleField in Pro.Coder RowFields source generator.
- Hide category links by default. Use CSS
.category-links { display: flex } if you want to bring them back.
- Improved wrapping behavior of toolbar buttons. The extra divs with
.buttons-outer , .buttons-inner , .button-outer are all removed.
-
[Breaking Change] Templates, e.g. .Template.html or .ts.html files are deprecated. Use tsx and renderContents . Even though it is still possible to use getTemplate() method for now, it will be removed in the next version. TemplatedDialog, TemplatedPanel etc. classes will be removed or replaced with versions that does not use templates.
8.1.5 (2023-12-14)
Features:
- Removing jQuery.blockUI.js and toastr.js from Serenity.Assets as we no longer use them. Please remove them from appsettings.bundles.json if you still have them there.
- Include source maps of base and base-ui in corelib
- No need for "file:" prefix in package.json for "./node_modules/dotnet/"
8.1.4 (2023-12-13)
Features:
- Use lowercase version of folder name while restoring to node_modules/.dotnet
- Set @serenity-is/corelib to file:./node_modules/.dotnet/serenity.corelib so that it uses the same version of the Serenity.Corelib NuGet package referenced in the project.
8.1.3 (2023-12-13)
Features:
** [Breaking Change]** Replacing Serenity.Scripts with a new Serenity.Corelib package which will be a NuGet version of the NPM package @serenity-is/corelib . Replace "Serenity.Scripts/Serenity.Corelib.js" in appsettings.bundles.json with "Serenity.Corelib/index.global.js".
- When a module is not found, for example when npm install is not run, try to resolve modules via "file:" mappings configured in dependencies and also NuGet package folders.
Bugfixes:
- Fix jquery ui datepicker culture not working
8.1.2 (2023-12-10)
Bugfixes:
- Remove extra comma in generated package.json files, causing failure only with pnpm
8.1.1 (2023-12-10)
Features:
- Implemented a better method for installing node types from NuGet packages and project references. Just remove "prepare" script in package.json and add "preinstall": "dotnet build -target:RestoreNodeTypes". Serenity will automatically install nuget/package refs to node_modules/.dotnet directory and patch your package.json so that there is a reference to every library that is referenced by your project. This will improve TypeScript experience. As the folder name under .dotnet will be created with the project/nuget package names (not npm package id) alternative path mapping for
@serenity-is/* suggested in 8.0.9 will not be useful, and @serenity-is/* path mapping can be removed after upgrading.
8.1.0 (2023-12-10)
Bugfixes:
- Reverted running RestoreNodeTypes in design time build as it might be breaking NuGet restore order
8.0.9 (2023-12-10)
Features:
- Also restore node types for project/package references to "./node_modules/.dotnet/" so that these files don't get erased during npm install, leading to typescript compilation warnings during initial project creation.
- Try to run RestoreNodeTypes target also in design time builds. It is recommended to replace
"prepare": "dotnet build -target:RestoreTypings" line with "prepare": "dotnet build -target:RestoreNodeTypes" if you only use modular code.
- Changed fetchScriptData logic to better handle exceptions. Increase test coverage for lookup and scriptdata methods.
8.0.8 (2023-12-09)
Features:
- Replace E-Mail with Email and e-mail with email in texts for consistency and it seems like it is now the accepted norm
Bugfixes:
- Fix error in uiPickerZIndexWorkaround
- Fix MailboxLoginView demo and predefined logins in Serenity.Pro.EmailClient
8.0.7 (2023-12-07)
Bugfixes:
- Special case for distinct lookup scripts returning array of values instead of objects, causing distinct lookup scripts to fail displaying properly when fetched via DynamicData endpoint
- Enum flags editor was broken after recent updates
8.0.5 (2023-12-04)
Bugfixes:
- Issue with async fetch not returning data properly, causing async lookup loading to fail
8.0.4 (2023-12-04)
Features:
- Trigger jQuery ajaxStop and ajaxStart events and increase/decrease jQuery.active during fetch requests so that processes like NProgress can be notified until we implement our own events
8.0.3 (2023-12-04)
Features:
- Using MSBuild's new command-line build property extraction feature in Sergen for .NET 8+ to determine properties like OutDir, TargetFramework, etc. in a more consistent way.
- Made it possible to pass MSBuild properties to Sergen so that it does not have to parse property items from the project file. This helps with cases where it cannot determine a property correctly, such as output path, configuration, etc. This may also speed up transforms as Sergen does not have to parse properties itself. Refer to Directory.Build.targets in the common-features repository for a sample and
-prop syntax.
- Implemented finding tsconfig extends from node_modules folders when the extends property contains a non-relative path. This is similar to how TypeScript implements extends via the node resolution algorithm.
- Improved Sergen's algorithm for discovering included files from tsconfig.json to match TypeScript itself as closely as possible.
- Cached file system for TypeScript parsing transformations, speeding up transform times in Sergen.
- Added an option to ignore null value for
[Unique] constraint on a single field.
- Q.serviceCall / Q.serviceRequest methods and generated services now return
PromiseLike instead of JQueryXHR . This is preparation for the replacement of jQuery ajax with fetch in the future. It is still possible to cast the return type to JQueryXHR for now, but don't rely on it always returning such type.
[Breaking Change] IFileSystem has a new GetLastWriteTimeUtc property. This is done to remove the extra IGeneratorFileSystem interface and the same property from ITemporaryFileSystem . If you have a custom implementation for IFileSystem , you should also implement the GetLastWriteTimeUtc method.
[Breaking Change] No longer shipping TypeScript's tslib functions (e.g., helpers) along with Serenity.CoreLib.js. If you still have namespaces (non-modular) TypeScript code, please remove the "noEmitHelpers": true line from your tsconfig.json.
- The
localText function now accepts a second optional parameter that will be used as default if a translation is not found in the registry.
- Moved more functions into the base library from corelib. Removing usages of
Q.isEmptyOrNull , Q.startsWith , Q.endsWith , Q.some , etc. functions as JavaScript has better alternatives.
- Corelib and templates will target ES2017 instead of ES5. No issues are expected as ES2017 support in browsers is at 98%, and the remaining 2% mostly includes IE, which we haven't supported for a long time.
ScriptData functions like getLookup , getForm , getColumns , etc., will use ~/DynamicData (e.g., JSON loading) instead of ~/DynJS.axd (script loading) by default. This will avoid calling eval , which is considered harmful, while dynamically loading lookups, etc.
- Using
fetch instead of jQuery ajax/XHR for async versions of ScriptData functions like getLookupAsync , etc.
- JSON.NET serialized enums as numbers by default, while we used
JsonStringEnumConverter with System.Text.Json , which broke handling in some cases. We implemented a new EnumJsonConverter that is more compatible with the JSON.NET behavior.
- In tsconfig.json,
jsx-dom/min is set as the default jsxImportSource in common-features and pro-features projects, in addition to StartSharp itself.
- Serenity no longer uses the legacy jQuery blockUI plugin even if it is loaded.
Bugfixes:
GetRelativePath workaround for Pro.Coder is not working exactly the same as System.IO.Path.GetRelativePath , which is not available in .NET Standard 2. This was causing strange paths in transformed files from time to time.
PopulateObject failed when the generic type is an interface, causing reports with parameters to not work properly.
- Fixed NullReferenceException during impersonation.
8.0.2 (2023-11-22)
Bugfixes:
- Sergen not able to read connection strings from appsettings.json due to handling difference by System.Text.Json
8.0.1 (2023-11-22)
Features:
- We are migrating from
Newtonsoft.Json to System.Text.Json , as it is the recommended and more performant library in .NET. To make the switch, please remove the .AddNewtonsoftJson statement from Startup.cs , add the line services.Configure<JsonOptions>(options => JSON.Defaults.Populate(options.JsonSerializerOptions)); , and optionally remove Microsoft.AspNetCore.Mvc.NewtonsoftJson from the project file. The transition should go smoothly as we've addressed many compatibility issues between the two JSON libraries. You only need to add System.Text.Json specific attributes, such as JsonPropertyName , to properties/classes that already have Newtonsoft.Json specific attributes. For more information, refer to https://github.com/serenity-is/Serenity/issues/7021.
- Serenity and feature package sources have been updated to leverage C# 12 features like primary constructors and collection initializers.
- The StartSharp dashboard page has been rewritten using jsx-dom. All HTML markup in the
DashboardIndex.cshtml file has been converted into functional components. This serves as a useful sample for jsx-dom and will simplify the creation/customization of your own dashboards.
- Our sample pages now utilize the
jsx-dom/min runtime, as full SVG support in jsx-dom is typically unnecessary. We will soon change the default jsx runtime in tsconfig.json for new StartSharp/Serene projects to jsx-dom/min and remove the explicit pragma statement from our sample pages. This change won't affect your existing projects. However, be aware that our samples will assume this jsx runtime by default. So, if you copy-paste our samples into your application but have a different jsx runtime configured in your tsconfig.json , such as preact, remember to add /** jsxImportSource jsx-dom/min */ to those .tsx files. Alternatively, you can change your jsxImportSource in tsconfig.json to jsx-dom/min .
- We are currently developing a new
@serenity-is/base NPM package that will include core functions and classes from @serenity-is/corelib , mostly from the old Q namespace. This new base library will be shared between @serenity-is/corelib and a new UI library that we plan to develop. The upcoming UI library, likely named @serenity-is/ui , is in the planning phase and will probably be based on jsx-dom , with no dependencies on jQuery or jQuery UI . Presently, @serenity-is/base is packed into @serenity-is/corelib , so no changes are required in this release.
Bugfixes:
- Addressed an issue with esbuild watch not functioning in the latest versions of tsbuild. Please update
tsbuild to version 8.0.1 or later in your package.json file.
8.0.0 (2023-11-16)
Features:
This is a major update that supports .NET 8. Before switching to this version, ensure that your Visual Studio 2022 version is 17.8.0 or later. .NET SDK 8 should be installed through the Visual Studio update or manually if you are not using VS. In your project file, change the target to net8.0 :
<TargetFramework>net8.0</TargetFramework>
Next, update the following packages to at least the listed versions below:
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.0" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.0" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.4" />
Next, update Serenity and Pro packages to version 8.0. This should be enough to transition to .NET 8 as there aren't many breaking changes affecting Serenity-based applications.
Note that Serenity 8.0+ will no longer support .NET 6/.NET 7.
We won't release a .NET 8 version of Serene yet, as most users who download it won't have the required Visual Studio 17.8.0 update, causing issues for newcomers. Serene users should apply the changes noted in these release notes to their apps after updating their Visual Studio.
Updated Microsoft.TypeScript.MSBuild to 5.2.2, now the recommended TypeScript version.
Updated several NuGet package references to their latest versions, including Newtonsoft.Json , Scriban , Mono.Cecil , Microsoft.Data.SqlClient , Dapper , MailKit , Nuglify , SixLabors.ImageSharp , etc.
[Breaking Change] serenity.css is moved to Serenity.Extensions as a static asset for easy updates. After updating, delete wwwroot/Content/serenity/serenity.css and replace the serenity.css reference in your appsettings.json with ~/Serenity.Extensions/common-style.css . Serene users should also replace their ~/Content/site/common-theme.css reference with ~/Serenity.Extensions/common-theme.css . These changes will make it easier for Serene users to update their core CSS files.
Removed the following legacy scripts and CSS files from the Serenity.Assets package:
Content/aristo/aristo.css
Content/bootstrap-theme.css (Bootstrap 3)
Content/bootstrap.css (Bootstrap 3)
Content/ionicons.css
Content/page.css
Content/simple-line-icons.css
Content/slick-default-theme.css
Content/slick.columnpicker.css
Content/slick.headerbuttons.css
Content/slick.headermenu.css
Content/slick.pager.css
Scripts/bootstrap.js (Bootstrap 3)
Scripts/jquery/jquery.slim.js
Scripts/jquery.cropzoom.js
Scripts/jquery.iframe-transport.js
Scripts/jquery.json.js
Scripts/jquery.scrollintoview.js
Scripts/jquery.slimscroll.js
Scripts/jsrender.js
Scripts/pace.js
Scripts/react*.js
Scripts/rsvp.js
Scripts/saltarelle/linq.js
Scripts/saltarelle/mscorlib.js
These files have not been used by Serene/StartSharp for a long time. If you still have references to any of the above files in your appsettings.bundles.json , remove those references or install those files via libman.json or similar.
Updated jQuery to 3.7.1
Removed jQuery 3.5.1 files from Serenity.Assets. If you still have a reference in your appsettings.bundles.json like "~/Serenity.Assets/Scripts/jquery-{version}.js" , please change it to "~/Serenity.Assets/jquery/jquery.js" or install it via libman.
Removed the full version of jQuery UI from Serenity.Assets, e.g., jquery-ui-1.12.1.js , as it does not have the patches we applied to jquery-ui.js , which is our trimmed custom version. If you still have a reference in appsettings.bundles.json like "~/Serenity.Assets/Scripts/jquery-ui-{version}.js" , replace it with "~/Serenity.Assets/Scripts/jquery-ui.js" or install it via libman/npm (though you won't have our patches in that case).
Updated CKEditor to 4.22.1, the last open-source version. Switched to moono-lisa skin, which is flatter than moono.
Updated Bootstrap to 5.3.2, offering more customization options via CSS variables and supporting a dark theme.
Updated esbuild to 0.19.15, which has some breaking changes related to watch mode. Please update tsbuild to 8.0.0 and apply changes in StartSharp repository's tsbuild.js to your project.
TSBuild now has a type definition so that you can see what options it provides. Serenity.Pro.Theme rules are updated to comply with this change. Apply changes in _Layout.cshtml and _LayoutHead.cshtml so that a data-bs-theme="dark" attribute is added to the HTML element when the cosmos-dark or another similar dark theme is used.
Implemented Select2 localization using Q.localText and Q.format functions. Removing the Select2-locales folder from Serenity.Assets, as they were not suitable to use with Serenity localization.
StartSharp template now comes with a .gitignore file with ignore patterns suitable for general Serenity applications.
Bugfixes:
- Allow
Fields.XYZ while determining the IsActive property and others in addition to fields.XYZ , but the Fields property is only there for compatibility and is effectively obsolete.
- Background image was not shown in no-layout pages like login in the glassy-light theme.
- Add the hidden class to wizard dialog panes so that validation doesn't run for inactive steps, unlike usual tab forms.
- PuppeteerHtmlToPdf fix affecting Base64 data URIs.
6.9.6 (2023-11-09)
Features:
- The default ignore option for jQuery validation has been changed to include elements matching
[style*="display:none"], [style*="display: none"] *, .hidden *, input[type=hidden], .no-validate . This change replaces the previous default of :hidden, .no-validate . The reason for this update is that the previous default settings required a workaround for validating inputs in hidden tabs. The workaround involved altering the visibility of hidden tabs by setting their display properties to flex or block , and visibility property to hidden to make them considered as not(:hidden) . However, this approach occasionally caused issues, especially when dealing with inputs in inactive tabs, as they were not effectively hidden due to the display property manipulation. Simply setting the ignore rule to empty and validating all inputs was not a viable solution, as some fields may intentionally be hidden using methods like .hide() , indicating that they should not be subject to validation. This change also necessitated modifications in serenity.css , pro-theme.css , and jquery-ui , so make sure to update your versions of Serenity.Pro.Theme , Serenity.Assets , and Serenity.Scripts accordingly.
- Enhancements have been made to improve the performance of methods utilized by source generators, such as
EnumerateBaseClasses , IsOrSubClassOf , and IsAssignableFrom .
- An experimental
IDiskUploadFileSystem implementation in Serenity.Pro.Extensions package has been introduced. This implementation enables the storage of files and directories in a database table named FileSystem . Additionally, a SqlUploadStorage implementation has been provided, which leverages the aforementioned IDiskUploadFileSystem for file uploads.
- A new attribute,
HideLabelAttribute , has been added. It corresponds to the LabelWidth("0", JustThis = true) setting.
Bug Fixes:
- The
BasedOnRowPropertyNameAnalyzer has been enhanced to also process properties of the base entity class.
- A bug where switching to an inactive jQueryUI/Bootstrap tab with validation errors occurred has been resolved.
6.9.5 (2023-10-28)
Features:
- New BasedOnRowPropertyNameAnalyzer and its associated fix that raises an error in development time if a column/form type with
BasedOnRow and CheckNames = true has a property that does not match any property name in the row type. It offers to add [IgnoreName] attribute as a fix, or if only the case mismatch, renaming to the correct property name (Serenity.Pro.Coder/StartSharp).
- New RowPropertyAccessorsAnalyzer that can generate getters/setters of style
fields.SomeField[this] at development time if the property is a simple { get; set; } , { get; } or just empty braces {} . It can also convert a simple field member like SomeProperty; to a field accessor property. The analyzer also raises errors if the accessors use a mismatching field (Serenity.Pro.Coder/StartSharp). See 6.9.5 release notes for more information about these analyzers and code fixes.
Bugfixes:
- Name property determined from existing entity uses "Field" instead of "StringField"
- Fix typo in chunking authentication cookie handling
6.9.4 (2023-10-26)
Bugfixes:
- Workaround in HtmlReportCallbackUrlBuilder for ASP.NET chunking cookies when authentication cookie contains too many claims
- Missing line break while sergen updates module exports under ServerTypes
6.9.3 (2023-10-22)
Bugfixes:
- Improve the declaration of classic namespace Q in Serenity.Corelib.d.ts via declare import Q = Serenity;
6.9.2 (2023-10-22)
Bugfixes:
- Issue with new Serenity.CoreLib.d.ts while using classic namespace mode (non modular)
- Don't generate column properties in classic namespace mode (non modular) as it is causing some issues
- Try Serenity.LookupEditor first instead of Serenity.Lookup while generating form properties
6.9.1 (2023-10-22)
Features:
- Sergen now utilizes the
IncludeGlobalUsings property when specified in sergen.json during client type generation.
- Removed unused
System.Collections references from generated client type files.
- Introduced a new
MigrationKeyAttribute that derives from MigrationBaseAttribute , offering a direct option for migrations, eliminating the need for defining a local MigrationAttribute .
- Added the
TargetDBAttribute and DefaultDBAttribute , allowing for simplified usage without the necessity of locally defining a DefaultDBAttribute class.
- Relocated the logic for the
EnsureDatabase function to the MigrationUtils class within Serenity.Extensions, enabling calls from DataMigrations.cs .
- Transferred all feature-specific migrations in StartSharp to their respective projects.
Bugfixes:
- Fixed a missing equal sign in the
Service typing Methods constant.
6.9.0 (2023-10-20)
Features:
[Breaking Change] Removed the "@serenity-is/corelib/q" and "@serenity-is/corelib/slick" submodules. After updating the corelib NPM package and Serenity packages to 6.9.x, please search and replace them with "@serenity-is/corelib" in all *.ts and *.tsx files within your project. All types from those modules are now available in the @serenity-is/corelib module. This change simplifies migration from namespaces in TypeScript, as the previous structure was causing confusion.
Sergen Enhancements:
- Sergen now reuses existing entities when generating code for a new entity.
- When generating code for multiple entities simultaneously, Sergen can also reuse information from rows that are going to be generated.
- Sergen generates
ForeignKey(typeof(ExistingRow)) instead of ForeignKey("ExistingTable", "SomeId") for foreign key (FK) properties if the primary key (PK) entity is already available.
- Sergen generates
Origin(jSome, nameof(SomeRow.SomeField)) instead of Expression("jSome.[SomeFieldName]") if the origin entity and property are available.
- Sergen can automatically determine the name property of the joined table related to an FK property if the PK entity is available and has a
[NameProperty] .
- Sergen automatically adds a
LookupEditor attribute to the generated property if the primary key entity has a LookupScript attribute, using ServiceLookupEditor if no lookup script attribute is present.
- Sergen adds a
ServiceLookupPermission attribute to generated rows, allowing fine-tuning of access to lookup columns via ServiceLookupEditor.
Columns.ts files generated by Sergen and Pro.Coder now include all properties as Column<TRow> , making it easy to access them. For example, you can create var columns = new SomeColumns(super.getColumns()) in a grid and access a property like columns.MyProperty without searching by field name. Columns classes also include a static Fields property similar to XYZRow.Fields .
- Added a
MigrationAttributeBase class that can be reused by feature packages to define their specific MigrationAttribute classes while checking for migration version correctness.
User Experience Improvements:
- The "What to Generate" option is now preselected during code generation.
- Generated import statements are ordered similarly to how Visual Studio Code's "Organize Imports" does.
Added Features:
- Added a "ConfigureSections" extension that can automatically configure all settings with the "DefaultSectionKey" attribute by discovering them from a type source. This eliminates the need to manually call "Configure" or "ConfigureSection" for each package and Serenity packages to 6.9.x.
- Optimized calls to
loadScriptAsync so that calling getLookupAsync multiple times successively results in only one service call.
StartSharp Updates:
- Moved the DataAuditLog migration to its own project. Changed the version key, as if an existing project already has the same migration, FluentMigrator would raise an error.
- Changed the key for Email Queue Job in appsettings to
"EmailQueueJob" from "MailingService," which was incorrect.
- Prefer IMAP/SMTP username instead of the user's email for Email Client.
Other Updates:
- Updated SleekGrid to version 1.6.2.
- Added
* , ? , < , and > to the list of invalid characters for file and path names in Linux, especially for use in uploads.
Bugfixes:
- Addressed an issue with Brotli compression if .NET 7 Runtime is used, as it no longer allows custom compression levels.
6.8.3 (2023-10-09)
Bugfixes:
- Don't generate ListExcel method if only Row & Services are selected as Columns type is not available
- Date editor persist / restore results in dates in format yyyy-MM-dd
6.8.2 (2023-10-05)
Features:
[Breaking Change] Changed namespace of IRolePermissionService from Serenity.Serenity.Net.Core.Authorization to Serenity.Abstractions
- Used single line getter/setter style for rows, also for sergen
- Switching to tags instead of namespace for determining which migrations to run. So, instead of checking for a particular namespace like "Serenity.Demo.Northwind.Migrations", checking if the migration has "NorthwindDB" tag. For "Default" database, we allow migrations with "DefaultDB" tag, in addition to migrations without any tags to avoid skipping legacy migrations or migrations that user added but forgot to add a tag.
- Removed migration skipping feature when database name does not match what was expected, as it seems to have helped no-one, while causing confusion for users that are not aware of it
- Updated Microsoft.Data.Sqlite 7.0.11 and Microsoft.Data.SqlClient to 5.1.1
- Updated Microsoft.TypeScript.MSBuild to 4.9.5, which is the last version before v5
- Made use of C# global usings feature both in Serene and StartSharp. Please note that while generating code, Sergen can't yet parse global usings. So, if you expect generated code to omit such usings you need to set them manually in sergen.json for now.
- Switched to file scoped namespaces also in Serene
- Defined a new TypeSource class implementing ITypeSource, and used that instead of listing assemblies in Startup.cs
(StartSharp)
- Moved application specific service implementations into AppServices namespace.
- Set RootNamespace instead of AssemblyName in project file, so that newly added files don't include ".Web" suffix.
- Backported account password and some other changes to Serene from StartSharp.
Bugfixes:
- Fix click event in Card View sample
6.8.1 (2023-09-23)
Features:
- New GenerateFields attribute that can be used instead of RowTemplate, and more stable as it does not need to copy properties and their attributes from the template class to the Row class
(StartSharp) . This is now the recommended approach, though RowTemplate still work but may be removed in the future. Set EnableGenerateFields to true in sergen.json to use this while generating code via sergen (recommended for Pro users). You still need to write getters and setters as usual instead of a simple { get; set; } , until C# introduces partial properties.
- Changed the base class for UploadResponse to ServiceResponse.
- Added more tests for corelib including formatters.
- New
IRolePermissionService interface abstraction allowing checking a role's permission separately.
- New experimental code generator for Flutter apps (StartSharp/Enterprise) for transforming form / columns etc. from C# to Dart/Flutter code similar to what sergen does for TypeScript/C#.
- New OpenId Scope to Permission mapping so that external apps connecting via a user account can be limited to a subset of permissions (StartSharp). You will need to register
IRolePermissionService implementation and OpenIdScopePermissionWrapper for it to work. See Startup.cs and RolePermissionService.cs in latest StartSharp code.
Bugfixes:
- Some Editor/formatter type parameters could not be passed from the RowTemplate to the source generated Row class, as the row fields source generator could not access the code generated by client types source generator, causing Roslyn to error. Workaround was to internally call the client types source generator, but the recommended way is to use new GenerateFields.
6.8.0 (2023-08-14)
Features:
- New Serenity.Pro.OpenIdClient Package which is exclusively available to Business/Enterprise customers, this update introduces the Serenity.Pro.OpenIdClient package, enabling seamless external login via Google, Microsoft, GitHub, and more. The implementation includes robust account link and unlink actions. [StartSharp]
- [WARNING!] To thwart potential XSS attacks via email links, a critical security measure has been implemented. The
LoginPage.tsx now incorporates a defensive check to only accept return URLs that begin with a forward slash (/ ). Our gratitude to Tasfaout Abderrahim for bringing this to our attention. Please apply the check in LoginPage.tsx that looks like if (returnUrl && /^\//.test(returnUrl)) { .
- [BREAKING CHANGE!] The
SettingStorage module has undergone modifications to enhance performance and security. The getItem and setItem methods may now return Promises, eliminating synchronous XHR calls. Consequently, similar adjustments extend to the DataGrid 's restoreSettings , persistSettings , and getPersistedSettings methods. Users with custom code using these methods must ensure compatibility with the Promise return type (e.g., utilize async operations). Furthermore, a new restoreSettingsFrom method takes precedence over restoreSettings in mixins, derived classes, etc. It's important to note that restoreSettingsFrom does not handle null settings parameters. [BREAKING CHANGE]
- Added .mpp (MS Project), .vsd, .vsdx (Visio) to default extension whitelist
- Set SameSite.Lax for CSRF-TOKEN cookie
- Enhanced
initFullHeightGridPage with flex layout and responsive handling instead of trying to calculate grid height from other divs in page
- Adapted pro theme css for new
initFullHeightGridPage version
- Added a setHeight option for cases where initFullHeightGridPage is used with another container type like in split master detail sample
- Implemented reCAPTCHA for signup form [StartSharp]
- Restored reCAPTCHA functionality with a special property processor. Need to
services.ConfigureSection<RecaptchaSettings>(Configuration); in Startup.cs, and set Recaptcha:SiteKey and Recaptcha:SecretKey in appsettings.json by generating them from https://www.google.com/recaptcha/admin (use v2 ones, not sure newer ones work). Unless they are set, Recaptcha property will be made invisible in the form. See Signup form in StartSharp for an example.
- Enhanced form item handling by clearing category when lacking Category but having Tab attribute
- Also get base row type properties with BasedOnRow attribute
- Introduced IUserClaimCreator interface and its default implementation DefaultUserClaimCreator. You should register it in Startup.cs and use it instead of the static implementation in UserRetrieveService class. If you have any custom claims you can inherit DefaultUserClaimCreator and override AddClaims method then register your class instead of DefaultUserClaimCreator.
Replace UserRetrieveService.CreatePrincipal with IUserClaimCreator dependency whereever it is used.
- Applied patch for jquery ui touch events so that grid columns can be dragged in mobile
- New HandleControllerExceptionAttribute that can redirect errors to ValidationError page.
- Generated a more compact and merge friendly version of Texts.ts file.
- Introduced IHasPassword interface that allows to check if user has a password set via IUserDefinition
- Added a LocalTextPrefix property to FormScript and ColumnsScript attribute that may be used to override the local text prefix calculated from form key and namespace
- Updated jsx-dom to 8.0.7
- If reportParams is passed as null, JSON serialize the report instance in HTML report callback url builder
- Set Content-Disposition header for preview as well so save name for the generated pdf will not be Render.pdf always
- Moved password related page / service codes like Forgot/Reset/Change password to Serenity.Extensions to make them easier to update and reduce amount of code in StartSharp/Serene.
- Introduced an IElevationHandler and RequiresElevation attribute so that user will have to enter password again before performing some critical actions.
- Added hidden-xs css rule for compatibility with bs4
Bugfixes:
- Fix sergen code generation errors for form, columns etc. in non-modular projects
- Fix several invalid source links in Demo
- Don't auto fill demo username/pass for activation page
- Possible issue with Postgress in SqlErrorStore while inserting exceptions
- Fix styling for grouping bar when group columns are longer than the width via x-scrolling
6.7.6 (2023-05-24)
Features:
- Abstracted script and css minifier dependencies, so that another minifier can be used instead of NUglify for bundling
- Added experimental
esbuild based minifier [StartSharp]
- Updated preact in Serenity.Assets to 10.14.1
- Added
/** jsxImportSource jsx-dom */ to files where jsx-dom are used, so that it can understood which library is used without relying on the default in tsconfig.json
- Rewrote EmailClient with ES modules and preact, removed Serenity.Pro.UI package as it was only ever used by EmailClient. [StartSharp]
- Improve look and feel of e-mail client [StartSharp]
- Added a mock IMAP server implementation to EmailClient for demo purposes
- [BREAKING CHANGE]
Serenity.Pro.UI package is now obsoleted as it was only used by the old email client. It will not get any new versions and you should remove its reference from your project file.
- Changed default jsxImportSource back to
preact in tsconfig.json [StartSharp]
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> line which was in web.config for development purposes is removed. If you deploy to IIS and did not remove that line in your production site after publishing, you should.
Bugfixes:
- Resolve issue with enum / select editors causing display text to be saved instead of value in dropdown editors [StartSharp]
6.7.5 (2023-05-21)
Features:
- added ExtensionBlacklistInclude, ExtensionBlacklistExclude, ExtensionWhitelistInclude and ExtensionWhitelistExclude that allows including, excluding extensions from defaults without having to write all the extensions again
- update bootstrap icons to 1.10.5
- trigger panelopening, panelopened, panelclosing, panelclosed events on window while a panel is closing / opening
Bugfixes:
- email client now working due to preact not included in appsettings.bundles.json [StartSharp]
- enable System.Drawing.Common 6.0 in linux by adding runtimeconfig.template.json file [StartSharp]
- fix failing source gen tests caused by line endings [StartSharp]
6.7.2 (2023-05-13)
Features:
- Generated API documentation for
@serenity-is/corelib and @serenity-is/sleekgrid packages via TypeDoc and made them available at https://serenity.is/docs under Api Reference (TypeScript) section.
- Added
jsx-dom integration which is a library similar to React. but which directly creates HTML elements instead of using a VDOM . It offers better compatibility with existing Serenity Widget structure that use jQuery and contains code that modify DOM directly. It will mostly be used in renderContents() method instead of the getTemplate() so that events can be bound at widget creation, and references to elements can be acquired. There is currently no dependency to jsx-dom in @serenity-is/corelib itself but it exposes a jsxDomWidget method than can be used to create a jsx-dom compatible functional component from a widget type, like var StringEditor_ = jsxDomWidget(StringEditor); <StringEditor_ readonly={true} maxlength={50} /> .
- Switched to JSX automatic runtime (https://www.typescriptlang.org/tsconfig#jsxImportSource) in
StartSharp by setting "jsx": "react-jsx" and "jsxImportSource": "jsx-dom" in tsconfig.json . If you need to use React or Preact etc. in one your .tsx files, you may switch the runtime by adding a pragma comment on top of the file like /** @jsxImportSource react */ .
**/*Page.tsx files are also considered as ESM entry points for esbuild in tsbuild and sergen .
- Adapted membership page codes in StartSharp to use
jsx-dom by renaming them first from XYZPage.ts to XYZPage.tsx and using renderContents instead of getTemplate .
- Added
useIdPrefix() and Widget.useIdPrefix() methods to make it easier to generate unique ID's based on the Widget's idPrefix in jsx-dom based code similar to ~_ prefix in classic templates.
findElementWithId method can optionally accept a context parameter that controls where the search is performed. This is useful for detached elements (e.g. not added to document yet) created by jsx-dom to locate cascading etc. elements.
- Replaced
toastr with an embedded version rewritten in TypeScript adapted from https://raw.githubusercontent.com/JPeer264/toastr2/master/src/Toastr.ts . This will make it possible to show notifications which failed when toastr.js is not loaded in the page. You may remove toastr.js from appsettings.bundles.json but leave toastr.css for now as it is still required.
- CardViewMixin can accept
jsx-dom based card templates in addition to React ones.
- Moved
corelib and tsbuild to root packages/ folder from src/Serenity.Scripts/ in Serenity repository.
- Improved
globalExternals optimization in tsbuild so that it generates less number of chunks on build.
- Increased test coverage for
@serenity-is/corelib/q methods and refactored test files (.spec.ts ) to be next to the files (.ts ) they have tests for.
- Added async versions of Authorization script methods like
Q.Authorization.userDefinitionAsync which should be preffered over sync counterparts where possible.
- IExceptionLogger interface is obsolete! Please log exceptions directly via .NET's ILogger interface and its LogError method. StartSharp users should replace
app.UseExceptional() line with app.UseExceptionLogger() in Startup.cs, which also enables implicit logging to StackExchange.Exceptional via InformationalException type.
- Added InformationalException type that will be used to log via ILogger interface to Exceptional
- Updated
@serenity-is/sleekgrid to 1.6.0.
- [Breaking Change] parseDate and parseISODateTime functions returns an Invalid Date instance (e.g. its
.valueOf() method returns NaN ) instead of "false" or "null" as they used to be, which was a wrong decision at time. It was causing invalid dates to be considered equal to empty dates sometimes. Javascript Date constructor also returns a Date instance with NaN value for invalid dates.
- Round calculated width when scale / delta parameters are specified in DataGrid, which is true for latest theme.
- Normalized all the line endings to LF in Serenity, common-features and StartSharp repository via a
.gitattributes file.
- Made DefaultRowTypeRegistry use typeSource on every call to the AllRowTypes (#6776) so that if the ITypeSource implementation returns a dynamic list of types, it can pick them.
- Introduced new
UI Elements sample pages containing Bootstrap components, Icon classes etc. [StartSharp]
- Removed RuntimeCompilation as Hot Reload does the same thing [StartSharp]
Bugfixes:
- Referencing generic types in generated form type short name assignments which caused problems with
Widget<any> in TypeScript
- AutoValidateAntiforgeryIgnoreBearerFilter were logging another message when antiforgery validation failed
- Fix lazy android check in jquery.maskedinput.js introduced a few versions back.
6.7.1 (2023-04-07)
Features:
- Added IUploadFileResponder interface, whose default implementation will only send text/plain, application/pdf, and ones whose mime type starting with image/ as inline, and rest as application/octet-stream with content-disposition attachment for security purposes. Please use it in your FilePage.cs Read method. See the latest
FilePage.cs in StartSharp/Serene repository.
- [BREAKING CHANGE] moving ExtensionBlacklist to UploadSettings from IUploadOptions. Added an ExtensionWhitelist that only allows usual extensions by default (.3gp;.7z;.ai;.avi;.bmp;.csv;.doc;.docx;.eps;.jpg;.jpeg;.json;.gif;.gz;.ico;.mpg;.mpeg;.mp3;.mp4;.mkv;.pdf;.png;.ppt;.pptx;.psd;.rar;.rtf;.svg;.tif;.tiff;.txt;.wav;.webm;.webp;.xls;.xlsx;.xml;.xps;.zip;). You'll need to override them in appsettings.json if you need more extensions (UploadSettings:ExtensionWhitelist, UploadSettings:ExtensionBlacklist)
- updated missing translations in Serene/StartSharp/Serenity
- use ASP.NET Core's FileExtensionContentTypeProvider instead of manually listing known mime types
6.7.0 (2023-04-06)
Features:
[WARNING!] This release focuses on addressing potential security issues that were recently discovered by Fabian Densborn from SEC Consult. Serene/StartSharp users must either create a new project from the 6.7.0+ template or manually apply the relevant changes from this commit to their existing applications after updating Serenity packages to 6.7.0+: https://github.com/serenity-is/serene/commit/6dce8162f4382badd429a9f0f1470acb64e8c4fd
Serenity.is would like to express gratitude to Fabian Densborn for his discovery, analysis, and coordination, as well as the SEC Consult Vulnerability Lab (https://www.sec-consult.com) for responsibly reporting the identified issues and collaborating with us as we addressed them.
Added the option to use ClamAV (https://www.clamav.net/) as an antivirus scanner for temporary uploads. To enable it, add services.ConfigureSection<Serenity.Extensions.ClamAVSettings>(Configuration); and services.AddSingleton<IUploadAVScanner, Serenity.Extensions.ClamAVUploadScanner>(); to your Startup.cs after upgrading to Serenity/Serenity.Extensions 6.7.0+. Consult ClamAV documentation on how to install it on your platform. This feature will be enabled by default once these changes have been made in Startup.cs. If you want to disable it for development purposes, set ClamAV:Enabled to false in your appsettings.Development.json (not recommended for production!).
Added extensionless and .htm /.html to the upload file extensions blacklist by default. An attacker can include malicious scripts in such an HTML file, send an administrative user a link to that file via email, and if the administrative user is already logged in to the site while clicking the link, the script can call services, perform actions, etc. on behalf of the user as the cookies are sent by the browser.
Ensured that the Forgot password page does not reveal information to identify whether a user with the entered email exists.
Ensured that reset password tokens can only be used once. They already expired in 3 hours, but if an attacker could see the link within that time frame (e.g., by eavesdropping), they could use it to change the password again.
6.6.6 (2023-04-04)
Bugfixes:
- Fix empty text can't be used as DisplayName in forms/columns
6.6.5 (2023-04-04)
Bugfixes:
- [BREAKING CHANGE] removing legacy AsyncLookupEditor from corelib as it is getting mixed up with AsyncLookupEditorAttribute in server side which is just a LookupEditor with Async = true
6.6.4 (2023-04-03)
Features:
- Added default support for new languages including Arabic, Bangla, Czech, French, Hindi, Indonesian, Japanese, Korean, Dutch, Romanian, Swedish, Chinese Traditional. Used machine translation for all these languages in addition to the existing languages. As these may not always be the best possible translations, any pull requests with improved texts are welcome.
- Used embedded resources under texts/resources folder for JSON translation files instead of static web assets under wwwroot/texts as these files are not meant to be directly accessed via web. This will also reduce number of published files, and simplify deployment.
- Introduced quick filter option in Translations page to show/hide user translated and text that has any translation in the target language. There are also buttons to export translated values / original values to make translation easier. Each translation resource folder also contains a template JSON file in English language that can be used as source.
- ITypeSource may return its assemblies if available via the new IGetAssemblies interface
- Introduce LanguageIdKeyPair to use as dictionary key in LocalTextRegistry.
- Added IGetAllTexts interface to LocalTextRegistry to return all registered texts
- Added ILanguageFallbacks interface for LocalTextRegistry to get/set language fallbacks.
- Added initialization support to LocalText directly, so that readonly localtexts can be used in nested text classes without having analyzer warnings
- PropertyItemsLocalTextRegistration to register texts defined implicitly via DisplayName, Tab, Category, Hint, Placeholder attributes in Forms/Columns so that they can be seen/translated in Translations page
- Also handle Hint, Placeholder, Category, Tab attributes for Row/Entity local text registration
- NavigationLocalTextRegistration to register texts for navigation items from attributes
- Moved NavigationItemAttribute down to Serenity.Core from Serenity.Web
- Site local text package has a default regex that will be included in addition to anything you define in appsettings.bundles.json, so you may remove LocalTextPackages section from your appsettings.json unless you included some additional texts there.
Bugfixes:
- Fix fields without displayname attributes are shown with their local text keys in grids/forms. Use the propertyname as implicit display name.
- Crash in Arabic culture in the constructor of ScriptCulture
6.6.3 (2023-03-24)
Features:
- Adjust brotli and gzip compression levels based on content length, caching duration and bundle type etc. as brotli with its default level is too slow, sometimes 100 times slower than gzip default level
- Add getRowDefinition() method to return row type and read idProperty etc. from there.
Bugfixes:
- Inline editing required fields that does not have NotNull/Required flag.
6.6.2 (2023-03-23)
Bugfixes:
- Generated navigation link referred to the old page class name ending with Controller
6.6.1 (2023-03-18)
Bugfixes:
- Criteria parser with params failed in some cases, especially with IN statements like 'a in @values'. Note that you can't use parens there, e.g.
a in (@values) is invalid unlike SQL.
6.6.0 (2023-03-14)
Features:
- Added a new Criteria builder functionality, so that criteria can be defined easier without having to remember the JSON array structure. E.g. instead of
[['SomeField'], Criteria.Operator.in, [[1, 2, 3]]] you can write Criteria('SomeField').in([1, 2, 3]) , or instead of [Criteria.Operator.isNull, ['SomeField']] you can write Criteria('SomeField').isNull() with intellisense support.
- Introduced ability to parse criteria from an SQL like expression at client side, e.g.
request.Criteria = Criteria.and(request.Criteria, Criteria.parse('A = 'b' and B > 5 and (C in (1, 2, 3) or D like 'x%'))
- It can also parse parameterized expressions similar to Dapper:
Criteria.parse("xyz = @p1 and abc like @p2", { p1: 5, p2: 'test%' })
- There is also a third recommended option using tagged string literals:
Criteria.parse`xyz = ${15} and abc like ${'b%'}`
- Converted all basic samples pages (Serenity.Demo.BasicSamples) to fully modular code, e.g. ESM
- Converted all advanced samples pages (Serenity.Demo.AdvancedSamples) to fully modular code, e.g. ESM [StartSharp]
- Renamed all page controllers so that they use Page.cs suffix instead of Controller suffix. This made it more consistent, as their file names ended with Page.cs while the type they contained was named Controller.
- Renamed all service endpoint controllers so that they use Endpoint.cs suffix
- ServiceEndpoint now derives from ControllerBase instead of Controller as services should not normally return views. If you returned view from a service endpoint for any reason, you'll need to move it to a controller. The endpoints generated by Sergen will have Endpoint suffix instead of Controller suffix. Similarly, pages will have Page suffix.
- Updated sergen and Pro.Coder so that it works fine with controllers without Controller suffix, e.g. XYZPage or XYZEndpoint
- There is now a new source generator in
Serenity.Pro.Coder that generates full paths to ESM modules, just like MVC does it for view paths. This will allow referencing ESM module scripts with compile time check and intelli-sense [StartSharp].
- Sergen now has a
ForeignFieldSelection option that defaults to All . When it is NameOnly it will bring only the name field from foreign rows instead of all fields, so that your entities will be smaller and will cause less issues when a joined row's fields are renamed / removed. When it is None no foreign view fields will be generated.
- There is now a
IncludeForeignFields option in sergen.json that allows including more fields by their field names, when the ForeignFieldSelection is None or Name .
- Added
FileScopedNamespaces option to sergen.json so that the generated code can use the file scoped namespace feature in C# 10.
- Added
DeclareJoinConstants option to sergen.json. When true generated rows will have join constants like const string jCustomer = nameof(Customer) and it will be used in expressions. This will make it easier to rename a join alias and use Origin etc. attributes.
- Added
EnableRowTemplates option to sergen.json so that the generated row will define the RowTemplate class supported by Serenity.Pro.Coder [StartSharp]
- Added
OmitDefaultSchema option to sergen.json. When it is true, the default schema name, e.g. "dbo" for SQL Server won't be emitted in generated field expressions in Row.cs
- Added
SaveGeneratedTables option to sergen.json. When set to false, sergen will not save connection settings and table options like Identifier, Module etc. back to sergen.json after code generation.
- Added TSBuild -> EntryPoints setting to sergen.json. This is a list of globs for ESM entry points which defaults to
**/*Page.ts and **/*ScriptInit.ts . This globs if specified are read by tsbuild script and the new ESM module paths source generator.
- There is a new JSON schema for sergen.json that will be picked up by Visual Studio automatically so that you can have intellisense support and descriptions while editing sergen.json files.
- It is now possible to use "Extends" function in sergen.json similar to tsconfig.json to extend the settings from a base file.
- A special type of extends value can be used to extend from defaults. E.g. when you set
"Extends": "defaults@6.6.0" your settings will be extended from the defaults we set for 6.6.0 version of Sergen. The values for defaults6.6.0 are: DeclareJoinConstants: true, EndOfLine: LF, FileScopedNamespaces: true, ForeignFieldSelection: NameOnly, OmitDefaultSchema: true, SaveGeneratedTables: false, Restore: Exclude Files/Typings, ServerTypings -> LocalTexts: true . This way you can use modern recommended defaults, while keeping backward compatibility for those who still want to use old defaults.
- Simplified scriban templates in Sergen
- [Breaking Change] CKEditorBasePath default is changed to "~/Serenity.Assets/Scripts/ckeditor/" instead of the obsolete one "~/Scripts/ckeditor/".
- Added more hooks and injection points in
GridEditController so that it is now possible to dynamically set editor parameters, use a different editor type in a column for different rows, implement cascaded dropdowns etc. [StartSharp]
- Moved GridPage related extensions and types to Serenity.Extensions so that it can be used in feature projects
- It is now recommended to remove GridPageModel, GridPage.cshtml from your Serene/StartSharp and use the one in Serenity.Extensions instead
- The module for GridPage, e.g. SomePage.ts should have a default export function pageInit() instead of a jQuery ready script so that it can be passed options from controller/model and tested properly. jQuery ready is also generally not necessary for ES modules.
- There is now a PanelPage extension that creates a PanelDiv instead of a GridDiv.
- GridPage and PanelPage uses ModelPage extension which accepts a ModulePageModel that includes additional parameters like HtmlMarkup, Options to pass to the default export in page module, Layout, PageId etc. parameters.
- Obsoleted EnvironmentSettings.IsPublicDemo and used preprocessor directives instead
- Introduced s-site-logo-img class which allows specifiying the site logo for a img via its content property, so that the site logo for all pages like login, sidebar etc. can be changed from one location by overriding css rule like .s-site-logo-img { content: url(.../mylogo.png); } etc.
- There is also a s-form-title-logo class that adjusts the look of logo in the forms, e.g. rounded with sidebar band background. It might be used to adjust logo styling by overriding its css rules.
- Removed all the .cshtml files for membership related pages like Login, Signup, Reset etc. and moved their script code into Page.ts files so that it can be checked at compile time.
- [BREAKING CHANGE] There is no longer a globally defined Q.Lookup interface while using ES modules. If you referenced it in some modular code, you should
import { Lookup } from "serenity-is/corelib/q" and replace Q.Lookup with Lookup in your project.
- IEditDialog.load methods fail argument made optional. It was normally optional but did not seem so in the typing.
- Arrange method in dialog type made public instead of protected
- Sergen prefers importing from
@serenity-is/corelib/q instead of @serenity-is/corelib for types that are exported from both modules, like ServiceResponse, PropertyItem etc. This helps with dts-generator tool as it has problems with types with same names that are imported from multiple modules.
- Introduced DefaultSectionKeyAttribute so that settings can be configured by their default section key via the new ConfigureSection extension
Bugfixes:
- Fixed styling for EntityGridDialog panel
- jQuery UI datepicker was showing under the dialog when using it in a inline editing grid inside a dialog [StartSharp]
- Remove loading class from parent element as select2 will only remove the class from the input
- fix error when trying to to use Q.formatDate outside of 10:00 and 19:59 with format 'dd.mm.yyyy hh:mm' (#6723)
6.5.4 (2023-02-28)
Features:
- Implemented OpenID Authorization Code Flow, e.g. logging via the web site instead of with user/password in mobile / desktop apps
[StartSharp] .
- [BREAKING CHANGE] The services required for OpenIdAuthorizationControllerBase is changed, so you should get latest version of
OpenIdAuthorizationController.cs from the StartSharp repository if you have that in your project.
Bugfixes:
- Handle the case where select2 is destroyed before the request is completed or timer fires
- Fixed icon for FileDownloadFormatter
- SelectEditor with async source should not update/clear its items when cascade value change etc.
- Resolve issue with group by in oracle due to alias starting with underscore
6.5.3 (2023-02-27)
Features:
- Add virtual methods / protected members to DefaultSqlConnections / DefaultConnectionStrings for better extensibility
- Changed update button text in german to Aktualisieren instead of Bearbeitung which was reported to be incorrect (#6689)
Bugfixes:
- Fix field size not set to the correct variable, possibly affecting precision/scale
- BasePermissionAttribute should accept null values for compatibility
6.5.2 (2023-02-21)
Features:
- Added SqlNow, SqlUtcNow, SqlDateTimeOffset, Case, CaseSwitch, Coalesce dynamic expression attributes
- Added ability to use another type of expression attribute as arguments to the dynamic expression attributes, e.g. use SqlNow etc. in a DateDiff attribute like:
[DateDiff(DateParts.Day, typeof(SqlNowAttribute), "t0.ReleaseDate")]
- Add ability to get/set the groupitemmetadataprovider in RemoteView
- DraggableGroupingMixin will try to create and auto register GroupItemMetadataProvider itself if it is not already registered and pass it to the view
- Make SqlConnections available to use for the derived classes of RowLookupScripts
- Added
ISiteAbsoluteUrl abstraction to access web site's internal (local) and external (public) url's and EnviromentSettings:InternalSiteUrl setting that takes precedence over request's base URI, and SiteExternalUrl for report callbacks.
- Refactored HTML to PDF conversion process via new
IHtmlToPdfConverter , IHtmlReportPdfRenderer , IHtmlReportRenderUrlBuilder abstractions
- [BREAKING CHANGE] To register the default implementations for
IHtmlToPdfConverter , IHtmlReportPdfRenderer etc. services.AddReporting should be called instead of services.AddExcelExporter in Startup.cs.
- Added new
HtmlToPdfOptions class that implements IHtmlToPdfOptions like the converters.
- Completely redesigned and refactored reporting system and abstractions via new
IReportFactory , IReportRenderer , IReportRetrieveHandler , IReportTreeFactory interfaces. Make sure to call services.AddReporting() in Startup.cs.
- Added Puppeteer based HTML to PDF converter implementation with Chrome and experimental Firefox option [StartSharp].
services.AddPuppeteerHtmlToPdf should be called before services.AddReporting line to use Puppeteer instead of WKHtmlToPdf. To make some old reports keep using old WKHtmlToPdf based converter, add [UseWKHtmlToPdf(true)] attribute on the report classes.
TemplateHelper.RenderViewToString can access the current request/action context if available
- Added experimental
HtmlReportFileUrlBuilder that can use a temporary folder, instead of a callback for HTML report rendering.
Bugfixes:
- MultipleUploadEditor should selecting multiple files in upload dialog
- Fix Criteria.Exist for sqlite as it does not like double parenthesis (#6687)
- Group summaries was not displayed in some cases like when the group item metadata provider is not passed to the view options
- File watcher should not try to create watcher if the directory does not exist
- Add section.content for proper layout when opening panels if the navigation is hidden e.g. hideNav=1
6.5.1 (2023-02-03)
Features:
- Introduced new BaseExpressionAttribute which allows inherited expression attributes to perform translation based on target dialect. Also the dialect itself can customize the translation by implementing the new ISqlExpressionTranslator interface.
- New ConcatAttribute, DatePartAttribute and DateDiffAttribute dynamic SQL expression types that generates expression based on server type.
- Optional Format for expression attribute types
- Allow overriding field size via attribute
- Allow specifying join alias in OriginAttribute indirectly via propery name of a property with LeftJoinAttribute
- New useCssVars option in SleekGrid that allows using inline css variables at grid container element to position columns instead of a CSS stylesheet appended to the head
- Don't swallow exception in source generators so that issues can be identified if any [StartSharp]
Bugfixes:
- LookupScriptRegistration should not try to run for abstract classes.
- Fix typo in Sum aggregator name and aggregator display texts
6.5.0 (2023-01-26)
Features:
- [BREAKING CHANGE] Updating Microsoft.Data.SqlClient to 5.1.0. As Encrypt=true became the default in 4.x+ (https://techcommunity.microsoft.com/t5/sql-server-blog/released-general-availability-of-microsoft-data-sqlclient-4-0/ba-p/2983346) it may cause connections to fail. Please see the linked doc, and either install a trusted certificate in your SQL server (recommended!), or set TrustServerCertificate=true or Encrypt=false in your connection strings both in development and deployment/production!
- Updated packages including Newtonsoft.json to 13.0.2, SixLabors.ImageSharp to 2.1.3, NUglify to 1.20.4, Microsoft.Build to 17.3.2, Spectre.Console to 0.46.0, Npgsql to 7.01, MySqlConnector to 2.2.5, Microsoft.Data.Sqlite to 7.0.2, FirebirdSql.Data.FirebirdClient to 9.11, Scriban to 5.5.2
- Html encode jquery validator messages in showLabel function
- Updated SleekGrid to 1.5.3 which includes useCssVars option to use css vars for cell positioning instead of dynamic stylesheet (up to 50 columns). This should reduce amount of css reflows on page load etc. It is not enabled by default yet.
6.4.10 (2023-01-24)
Bugfixes:
- propertygrid should htmlEncode field captions
- draggabble grouping mixin should htmlEncode grouped column captions
6.4.9 (2023-01-21)
Bugfixes:
[WARNING!] If htmlEncode is not called when using local texts in ascript method (e.g. <div>{ text("SomeKey") }</div> instead of <div>{htmlEncode(text("SomeKey")) }</div> , like getTemplate etc. an attackermay use the translations screen to inject javascript. This affected partsof our demo as everyone can login as admin and can use the translationscreen. The translations are reset every 30 mins in our demo so it was nota big issue. But you are strongly recommended to check your own code inaddition to standard screens like login, reset password etc. See ourlatest commits in Serene/StartSharp/Common Features, etc. repositories forfixes we applied. Even if no one other than the admin can entertranslations screen, it is still a good idea to mitigate the risk as youshould not trust translators, even the admin himself. We can't change the"text" or "tryGetText" functions to htmlEncode by default, as they may beused by others in contexts other than HTML like functions which expectsraw text like notify messages, dialog titles, column titles etc., whichwould result in double HTML encoding. Prefer localText() function insteadof obsolete text() function for better discoverability (but it does notencode as well)
[BREAKING CHANGE] htmlEncode now also encodes single and double quotes just like attrEncode. This is done to avoid cases where a developer might use htmlEncode in an attribute instead of attrEncode by mistake.
6.4.8 (2023-01-18)
Bugfixes:
6.4.7 (2023-01-16)
Bugfixes:
- fix sleekgrid groupitemmetadataprovider group header totals
6.4.6 (2023-01-16)
Bugfixes:
- fix sleekgrid groupitemmetadataprovider colspan calculation
6.4.4 (2023-01-08)
Bugfixes:
- Removed corelib/coverage folder from Serenity.Scripts nuget contents
6.4.3 (2023-01-07)
Release Notes: https://serenity.is/docs/release-notes/6.4.3
Features:
- Flutter based mobile applications for Android/iOS [StartSharp Enterprise]
- OpenIddict integration and JWT authentication options [StartSharp]
- Introduced AutoValidateAntiforgeryIgnoreBearerFilter attribute which can be used in place of AutoValidateAntiforgeryAttribute and will skip anti-forgery validation when the request contains an
Authentication: Bearer header and there are no cookie headers.
- New Glassy Light theme [StartSharp]
- Improved handling for type registries like
EnumTypeRegistry , EditorTypeRegistry , and FormatterTypeRegistry . Improved error messages that are displayed when a type cannot be found. They can now discover types that are registered after the type initialization process is completed. Use a common base type registry for all type registries to make it consistent.
- [BREAKING CHANGE]
Q.getTypeName is renamed to Q.getTypeShortName . Got rid of some static type properties like __typeName$, __metadata$ etc. that is no longer necessary. Used defineproperty for system related props like __typeName etc. to make them non enumerable
- [BREAKING CHANGE] toastr notification functions like
Q.notifyError and Q.notifyInfo will escape HTML by default. This is to avoid possible script injection attacks. Pass escapeHtml: false if you need the old behavior.
- Removed jQuery ScrollIntoView hard-coded dependency and use it only if it is available. You may remove
jquery.scrollintoview.js from appsettings.bundles.json .
- Removed
jquery.iframe-transport.js dependency. You may remove it from your appsettings.bundles.json as it is only used by jquery.upload plugin for very old browsers like IE9 etc.
- Serenity.Pro.UI.js dependency as it is only used for legacy
EmailClient sample.
- Removed TemplateBundle from
appsettings.bundles.json , introduced ColumnAndFormBundle that combines ColumnsBundle and FormBundle .
- Rewrote Dashboard with ES Modules [StartSharp]
- GroupItemMetadataProvider SleekGrid plugin is ported to ES Modules. Slick.Data.GroupItemMetadataProvider is now obsolete, use GroupItemMetadataProvider from "@serenity-is/sleekgrid" or Slick.GroupItemMetadataProvider
- Q.alert, Q.confirm, etc. methods are suffixed with
Dialog to avoid mixing up with the browser methods, e.g. Q.alertDialog , Q.confirmDialog . Old methods are still available but obsolete.
- TsBuild trigger argument is now obsolete. You should change
prepare script in package.json file with dotnet build -target:RestoreTypings
- [BREAKING CHANGE] Some row properties are only available via IRow or IEditableRow interface. Introduced IEditableRow and instead of making desktop UI editing (e.g. WPF INotifyPropertyChanged, IsAnyFieldChanged, IsEditing) etc. related properties / methods of row instances only accessible via this interface. They were confusing and polluting the row interface in web applications where they were almost never used. Cast the row instance like ((IEditableRow)row).BeginEdit() etc to access them if ever used. Similary, "IdField, IgnoreConstraints, NameField, Table, TrackAssignments, TrackWithChecks, GetDictionaryData, GetDictionaryDataKeys, SetDictionaryData" properties and fields can only be accessed via IRow interface. This is done to avoid polluting intellisense list as they are very rarely used, and as a preparation to fix swagger / apiexplorer integration
- [BREAKING CHANGE] rename MethodChainingExtensions to ChainableExtensions and only support single action overload as that is the only one which is used anywhere so far
- [BREAKING CHANGE] make rarely used ValidateEnum and ValidateDateRange methods non-extension methods so they don't come up in the intellisense for rows. Not a breaking change unless you used them as extension methods.
- improved binding convention of IDbConnection and IUnitOfWork and ServiceRequest types in ServiceEndpoints so that api browsers like swagger etc. can analyse it better and not crash
- [BREAKING CHANGE]
Slick.Event is renamed to Slick.EventEmitter , and Slick.EventHandler is renamed to Slick.EventSubscriber , Slick.Handler is renamed to Slick.EventListener to avoid mixing up with browser types with same names.
- Introduced TransactionSettingsAttribute and added a TransactionSettings which can be configured via options pattern. ServiceEndpoint will check the attribute or transaction settings like IsolationLevel. The attribute, settings and the UnitOfWork object has a DeferStart option that defers starting the transaction until the Connection is opened. This flag might have undesired side effects, so use it at your own risk if you know what you are doing.
- Added the TransactionlessUnitOfWork which is an implementation of IUnitOfWork that does not actually start any transaction. Should only be used in edge cases to call methods that expect a IUnitOfWork instance, but you are sure that the whole operation will be readonly, or you don't really need a transaction. If using with save handlers etc it might be risky. Make sure there are no service behaviors that run behind the scenes which may write or require a transaction.
- Improved
TSTypeLister performance by making it not dive into huge directories like node_modules if not needed.
Bugfixes:
6.4.2 (2022-12-09)
Release Notes: https://serenity.is/docs/release-notes/6.4.2
Bugfixes:
- fix script null reference issue with MultipleFileUploadEditors
- include source maps for some pro nuget packages in static web assets which were missing them (StartSharp)
- the key sent to IFilenameFormatSanitizer contained "|" chars
6.4.1 (2022-12-09)
Features:
- added AutoValidateAntiforgeryIgnoreBearerAttribute which can be used instead of AutoValidateAntiforgeryTokenAttribute to skip AntiForgery validation when cookie header is not present and Authorization header is Bearer (e.g. JWT etc). use it in place of AutoValidateAntiforgeryTokenAttribute in Startup.cs to try.
- implemented OpenIddict integration for OpenID / JWT authentication schemes in Serenity.Pro.OpenIddict (StartSharp)
- added LocalTextDataScript to access local text as a JSON object from mobile apps etc. by specifying package name with "pack" and language ID with "lang" query string parameters via DynJS.axd/RemoteData.LocalText or DynamicData/RemoteData.LocalText
- introduced IFilenameFormatSanitizer interface which can be used in place of default sanitizing logic in upload filename formatting by implementing it in a custom upload editor attribute by deriving from default ones or
injecting the implementation via DI.
- added StringHelper.SanitizeFilePath and made StringHelper.SanitizeFilename handle more invalid filename chars returned from Path.GetInvalidFilenameChars.
- serenity demo is moved to https://demo.serenity.is, old https://serenity.is/demo urls are redirected so it is not expected to cause a problem
- StartSharp repository is moved to https://github.com/serenity-premium/startsharp
Bugfixes:
- AllowNonImage in UploadOptions should be true, as it is mainly used for temporary uploads
6.4.0 (2022-12-05)
Features:
- switch to pnpm for Serenity and feature projects (Serene / StartSharp still use npm)
- also use state store for script type registry
- allow mocking Q.debounce function in corelib for testing purposes
- use jquery event bindings in SleekGrid where possible for better compatibility with legacy plugins
- make sure interface checks via Q.isAssignableFrom etc. succeed by checking via __typeName even if the same interface is bundled into multiple scripts
- abstracted SixLabors.ImageSharp dependency via new IImageProcessor interface, that might allow replacing that library with another in the future
- ThumbnailGenerator class is now obsolete, use it via DI by IImageProcessor interface
- abstracted upload processor via IUploadProcessor interface
- UploadProcessor is now obsolete, inject and use IUploadProcessor interface via DI
- abstracted upload file and image validation with new IUploadValidator interface.
- introduced IUploadOptions interface and UploadOptions class for keeping default upload options and using in FilePage
- reorganized upload editor attributes through new abstract class BaseUploadEditorAttribute
- image validation is now only performed for the extensions specified in ImageExtensions which is ".gif;.jpg;.jpeg;.png;" by default
- default extension black list can now be modified via ExtensionBlackList property of upload editor attributes
- added UploadIntent property to upload editor attributes, which is a string that is passed to the upload editors and as a query string back to FilePage during temporary upload. This can be used to customize default thumbnail size, validations etc. in upload method based on intent.
- [BREAKING CHANGE] IUploadStorage.CopyFrom and IUploadStorage.WriteFile methods accept OverwriteOption enum instead of bool? autoRename flag which was confusing
- introduced full set of undelete handler related types and behaviors
- completed XML documentation for Serenity.Services and Serenity.Web
- switched to typescript modules also in Serene
- update bootstrap, bootstrap-icons and jquery.
- updated sleekgrid to 1.4.4
- jquery is now at Serenity.Assets/jquery/jquery.js instead of Serenity.Assets/Scripts/jquery-3.5.1.js, you should update your includes in appsettings.bundles.json
- updated movie tutorial for typescript modules
- updated serenity docs like introduction, di, configuration, authentication, localization, caching for latest serenity version
- updated serenity docs api reference to include descriptions for all serenity libs
Bugfixes:
- fix row selection mixin select all button state not updated for some cases
- corelib/slick had an embedded corelib/q copy because of esbuild configuration issue
- initially generated modular ServiceTyping by sergen contained invalid method URLs with Administration/User
- sleekgrid: auto column hints plugin were not working properly because of jquery event binding difference
- sleekgrid: fix rtl mode scroll column rendering
- sleekgrid: old column filter row headers are not deleted before creating new ones
6.3.6 (2022-11-15)
Bugfixes:
- null for ImportClause in TSTypeLister
6.3.5 (2022-11-15)
Bugfixes:
- better detection for formatters type in clienttypes transformation
6.3.4 (2022-11-15)
Features:
- add option to disable module re-exports (or indexes) for servertypings transform in sergen.json under ServerTypings/ModuleReExports
6.3.3 (2022-11-14)
Features:
- change TOptions generic argument for Widget to default to any
6.3.2 (2022-11-14)
Bugfixes:
- fix group totals is not displayed
6.3.1 (2022-11-08)
Bugfixes:
- possible null reference exception in sergen when combination types used as interfaces
6.3.0 (2022-11-06)
Release Notes: https://serenity.is/docs/release-notes/6.3.0
Features:
- ported all common features projects to ES modules, including Serenity.Extensions, Serenity.Demo.BasicSamples, Serenity.Demo.Northwind
- ported all pro features projects to ES modules, including Serenity.Pro.Extensions, Serenity.Demo.AdvancedSamples, Serenity.Pro.Meeting etc. [StartSharp]
- moved CSHTML views for feature packages to
/Areas/ProjectName and code files to /Modules instead of /ProjectName/
- added simplified IFileSystem base interface which removes dependency to System.IO.Abstractions, but it can still be used in tests
- upload behavior refinements, remove hard coded dependency to editor attributes and use interfaces instead
- allow upload attributes other than ImageUploadEditor / MultipleImageUploadEditor to be also handled by upload behaviors by implementing some interfaces
- renamed MultipleImageUploadEditor to MultipleFileUploadEditor, ImageUploadBehavior to FileUploadBehavior
- testable disk upload storage via IDiskUploadFileSystem abstraction. it can also be used to create a custom disk upload storage.
- ported several tests including local texts, globalfilter written in .NET framework for Serenity.Core
- use LookupEditorBaseAttribute / ServiceLookupEditorBaseAttribute for editors defined in modules as well
- replace const enums with normal enums to comply with isolatedModules option
- export Formatter interface from @serenity-is/corelib in additional to @serenity-is/corelib/slick
- enable tsbuild clear plugin by default only when splitting is true. it is still possible to enable it by specifying clean: true
- delete only .js / .js.map files when clean plugin is enabled for tsbuild
- don't use const enum for es modules service method exports, but use const object instead
- better handling for enum types in es modules
- better handling for Razor SDK projects that use ProjectName dir instead of Modules folder
- improve imports for external module types in code / source generators
- moved ui overrides to serenity corelib from pro.extensions
- create new buttons-inner divs when a toolbar has separator, instead of creating a separator div
- specify full names for more classes including QuickSearchInput, TemplatedDialog etc.
- Areas/ProjectName is also scanned by MVC generator for views / strip view parts
- set buttontext as icon font only for < jquery ui 1.12.1 as 1.13x does not allow html in button text
- reuse editor type finding for external libs as long as their namespace match with project name. this improves type discovery for modules, as typescript does not preserve decorators in .d.ts files. make sure your namespaces match the project name, e.g. an editor with key 'MyLib.MySome.MyEditor' should be exported from a 'MyLib.MySome' project (mylib.mysome npm package) with 'MyEditor' classname.
- extends support for tsconfig.json in source / code generator
- better determination of module name in TSModuleResolver for node_modules packages
- also restore dist/index.js for project references to node_modules in addition to dist/index.ts
- auto fake import enums in form.ts / columns.ts if possible, to avoid errors when such types are in a different module
- add ResolveWithHash to HtmlScriptExtensions so it can be used to avoid caching issues while importing module page scripts under esm/..
- instead of removing a property from the form.ts when the editor type can't be discovered, assume it as a widget so it can be understood something is wrong and "as any" etc can be used to reference the form field in such cases
- adapt email client css for BS5 theme [StartSharp]
Bugfixes:
- output directory for Razor SDK projects should use ProjectName dir instead of Modules
- fix RowSelectionModel plugin export
- fix executeOnceWhenVisible alias in corelib typings
- fix GlobFilter regex based matching for
Modules/**/* style patterns
- fix TSFileLister does not work exactly like tsconfig for patterns, as TypeScript considers all patterns to start at root unlike gitignore patterns
- fix deepClone does not work properly with Date and several other types of objects (used https://github.com/angus-c/just)
- also check for "None" in addition to "none" or other cases for module / namespace detection
- fix email client script error [StartSharp]
6.2.9 (2022-10-22)
Features:
- add tests for es module editor option generation
- don't generate row type if it has ScriptSkip attribute, even if it is referenced by something else.
- don't generate row / other type members if it has scriptskip or ignore attribute
- use export for nested permission key namespaces
6.2.8 (2022-10-22)
Bugfixes:
- fix options for editors defined in es modules not generated in client types
6.2.7 (2022-10-22)
Features:
- try to import formatter types used by columns to Columns.ts so that modular formatters can be registered from the grids that they are used from
- add option to disable particular transform in source generator with sergen.json MVC/SourceGenerator and ClientTypes/SourceGenerator settings by using false.
- go back to non-incremental source generator for clienttypes as it breaks syntax highlighting when referencing .ts files as AdditionalTexts, and there is no single output .Web.js for modules [StartSharp]
- disable source generator when SourceGeneratorTransform is false in project file [StartSharp]
- read MVC/StripViewPaths from sergen.json in ViewPathsSourceGenerator if available [StartSharp]
6.2.6 (2022-10-17)
Features:
- published @serenity-is/tsbuild npm package which will be used from tsbuild.js
- added NodeScriptRunner for running tsbuild in watch mode (imported from .NET SpaServices)
- added startnodescripts settings in appsettings.Development to npm run tsbuild:watch in development at startup (StartSharp)
- try to import dialog types used by inplace add editors to Form.ts so that modular dialogs can be registered from the dialogs that these editors are used from
- include full name of class in registerClass calls for code generated by sergen
- removed maximizable dialog from sergen scriban templates as it is not a part of core and not used anymore
- send an empty source map with 202 status, instead of 403, to avoid seeing warnings when SourceMapSecurityMiddleware is enabled
- handling for root namespace in client types source generator (StartSharp)
- made add button functional in dashboard task list (StartSharp)
- reverted back to Microsoft.Data.SqlClient to 3.1.1 from 4.1.0 in sergen, as Encrypt=true became the default in 4.x+ (https://techcommunity.microsoft.com/t5/sql-server-blog/released-general-availability-of-microsoft-data-sqlclient-4-0/ba-p/2983346) which is a [BREAKING CHANGE] causing connections to fail. As Serenity.Data used 2.1.0 of Microsoft.Data.SqlClient, only sergen was affected by this issue, not StartSharp or Serene apps. Please see the linked doc, and either install a trusted certificate in your SQL server, or set TrustServerCertificate=true or Encrypt=false in your connection string, as we'll be updating Microsoft.Data.SqlClient to newer versions in the future, that may bring back this error.
Bugfixes:
- fix invalid relative module paths generated in source generator
- fix cache is reset for previously reset groups after update, even if they are not reset in current transaction
6.2.5 (2022-10-15)
Features:
- publish tsbuild as npm package (@serenity-is/tsbuild)
Bugfixes:
- don't sort desc column first, if multiple SortOrder attributes are defined (#6559)
6.2.4 (2022-10-13)
- ignore DataGrid.defaultRowHeight and DataGrid.defaultHeaderHeight in getSlickOptions() as they cause sleekgrid to fail rendering in Serene etc. where they are not set.
6.2.3 (2022-10-13)
Features:
- move restoretypings target to Serenity.Net.Web.targets, this allows restoring typings\lib\index.d.ts files without having to run dotnet sergen restore
6.2.2 (2022-10-13)
Bugfixes:
- fix referenced packages node_modules index.d.ts restoring for modular coding in Serenity.Pro.Coder.targets [StartSharp]
- recreate package-lock.json on template build [StartSharp] so node_modules populated correctly. delete your package-lock.json and node_modules than run npm i if you have such an issue.
6.2.1 (2022-10-11)
Bugfixes:
- handle case where logger factory is null in DefaultSqlConnections causing sergen generate command to fail
6.2.0 (2022-10-10)
Features:
- implement logging support for SqlHelper via WrappedConnection and DefaultSqlConnections
- improve logging for SqlHelper, include ms and command hash code
- added brotli support to dynamic scripts and script bundles
- converted serenity json texts to static web assets. AddAllTexts() is obsolete, use services.AddBaseTexts(env.WebRootFileProvider).AddJsonTexts(env.WebRootFileProvider, "Scripts/site/texts").AddJsonTexts(env.ContentRootFileProvider, "App_Data/texts")
- convert module texts to static web assets in common and pro packages
- converted all StartSharp modules to modular TypeScript [StartSharp]
- renamed ScriptInitialization.ts to ScriptInit.ts
- removed namespace typings [StartSharp]
- removed StartSharp.Web.js [StartSharp]
- enable logging for sql only in development, added a appsettings.Development.json [StartSharp]
- pass keepNames option as true to esbuild so widgets can keep their css class names like s-RolePermissionDialog etc
- no need for PreserveCompliationContext as it is set by Razor sdk
- moved SourceMapSecurityMiddlewareExtensions to usual namespace (Serenity.Extensions.DependencyInjection)
Bugfixes:
- fix interfaces and enums are declared multiple times in Q / Slick / Serenity namespaces in Serenity.CoreLib.d.ts
- update sleekgrid to fix script error with selection models
- fix clean plugin for tsbuild
6.1.9 (2022-10-02)
Features:
- enabled source generator (Serenity.Pro.Coder) in StartSharp template
- [Breaking Change] Q.Config.responsiveDialogs is now assumed to be true by default (this should not affect anyone unless using a very old version like 2.x etc)
- move idPrefix up to widget, introduce renderContents method which can be overridden to manually to initialize widget content via another method instead of an html template
- remove unused jsRender method
6.1.8 (2022-09-29)
Bugfixes:
- fix source mapping for corelib.js
- [Breaking Change] please override getPropertyItemsData instead of getPropertyItems (bug since 6.1.0) when there is not a form key / columns key
6.1.7 (2022-09-29)
Bugfixes:
- don't include package.json / tsconfig.json files inside Serenity.Scripts nuget package as content files
6.1.6 (2022-09-29)
Bugfixes:
- resolve issue with msbuild locator causing sergen restore to fail
6.1.5 (2022-09-21)
Bugfixes:
- fix sergen servertypings not removing suffixes like .Entities
6.1.4 (2022-09-20)
- fix slickgrid headers trimmed in smaller screen when in a sub dialog
6.1.3 (2022-09-05)
Bugfixes:
- wrap grid creation in jquery ready for modular page in sergen
- fix possible null ref exception when Cecil returns null for typeDef.Resolve()
6.1.2 (2022-09-05)
Bugfixes:
- fix output dir for razor sdk projects modular servertypes
- fix for modular import from self file
6.1.1 (2022-09-04)
Bugfixes:
- must set nameIsHtml in GridRowSelectionMixin.createSelectColumn
6.1.0 (2022-09-04)
Features:
- rewrote slickgrid (sleekgrid) in typescript (https://github.com/serenity-is/sleekgrid)
- formatters can add classes, attributes and tooltip to the target cell directly via ctx properties
- allow setting end of line character to lf/crlf manually in sergen.json via "EndOfLine" setting.
- published @serenity-is/corelib as an npm package (modular version with embedded source)
- useAsync option for datagrid, entitygrid, propertydialog and entitydialog
- ability to retrieve data as json from dynamic scripts e.g. lookups etc via /DynamicData instead of /DynJS.axd
- code generator will generate code with only usings that are actually used implemented via helper methods in Scriban templates
- [Breaking Change] Columns and Form dynamic scripts returns an object (PropertyItemsData) instead of array. It should not be a breaking change if you receive those scripts via Q.getColumns, Q.getForm etc. methods (legacy), but make sure you update both Serenity.Scripts and Serenity.Web to 6.1.0 at least.
- Q.ScriptData methods won't raise a client side error if a script that does not seem to be registered (registeredscripts) is tried to be loaded, it will try, then fail if server does not return it
- preparation for es6 modular typescript code generation / transform / source generators (StartSharp)
- new .NET Source Generators for clienttypes, servertypings and mvc commands in addition to a row fields source generator via RowTemplate class (StartSharp, Serenity.Pro.Coder nuget package)
- [Breaking Change] global Promise interface augmentation is removed, please update your target to ES6 in tsconfig.json if you use Promise.resolve etc. anywhere
6.0.8 (2022-07-12)
Features:
- add option to set background color when using padwithfill
6.0.7 (2022-07-11)
Bugfixes:
- fix utf 8 bom not written to generated files in last two versions
6.0.6 (2022-07-11)
Features:
- remove app specific texts from Serenity
6.0.5 (2022-07-11)
Features:
- add key for EmailEditor (please prefer EmailAddressEditor)
6.0.4 (2022-07-10)
Features:
- remove System.IO.Abstractions dependency from Serenity.CodeGenerator as preparation for source generators
- add key constant to all editor, foramtter, filtering attributes
- use pnpm if installed
- use libman instead of npm for typings where possible
Bugfixes:
- fix cast error occuring in TSTypeLister in rare cases
- fix generated texts not accessible
- slick grid getCellNode should return an element not jQuery object
6.0.3 (2022-06-24)
Features:
- remove ss type related code from import generator
- allow and handle IEnumerable, IList, ISet, IDictionary types in response types in addition to List, Dictionary etc. in response types for server typings generator
- don't generate proxy method for service actions implementing IActionResult
- add handleRoute method to entity grid allowing to override default route handling behavior
- better handling for multi part routes when restoring location hash in case the first part causes a service call
Bugfixes:
- raise an error in FormatFileName when OriginalName passed is null
- pass original name to generated .jpg file when temporary file is scaled and a .jpg file is generated on upload
6.0.2 (2022-06-16)
Features:
- add autoRename = null option to upload storage which means overwrite [Breaking Change]
- also apply flag to the existing generated field for notmapped field types
- added JoinNonEmpty methods to StringHelper (like StringHelper.Join but for arrays similar to string.Join)
- add ability to directly set a value without checking expiration status in TwoLevelCache
- use C# 10 global usings feature in Serenity source
Bugfixes:
- fix syntax error with tabindex property in slickgrid.js
- fix project refs check in sergen
- load validation messages after page is ready (after local texts are ready). (#6389)
6.0.1 (2022-04-21)
Features:
- rewrote typescript parser in c# using a modified / optimized version of https://github.com/ToCSharp/TypeScriptAST
- increased performance of sergen client types command using new typescript parser
- added ServiceLookupPermissionAttribute which will simplify permission checks for service lookups
- sergen generates AuthorizeList attributes on top of the List and ListExcel methods in endpoints (#6364)
- sergen generates TextualField field type as lowercase string keyword (#6341)
- made AutoParam consistent after cloning SqlQuery (#6330)
- added ISqlDialectMapper interface
Bugfixes:
- upload editor progress fix
- setting Old property to the null to prevent a few issues while re-using a save request handler. (#6356)
- null check added where to sergen connections checked. (#6360)
6.0.0 (2022-03-26)
Features:
- moving to .NET 6 and ASP.NET Core as .NET 5 will soon be out of support
- will only support Visual Studio 2022 with latest updates as Visual Studio 2019 does not support .NET 6. please don't update to Serenity 6 if you still have to use VS2019.
- [BREAKING CHANGE] replaced System.Drawing.Common with ImageSharp, as System.Drawing.Common is only officially supported in Windows now.
- updated Dapper, FluentMigrator and many other packages to their latest versions
5.2.4 (2022-03-09)
Features:
- a better console ui for sergen with multiple selection support
- added on demand service resolver interface - IServiceResolve
- use System.Text.Json for sergen transform
- allow passing project refs optionally to sergen
- don't register keys with logical operators in NestedPermissionKeyRegistration
Bugfixes:
- resolve more errors with corelib when jquery not loaded, $ is not jquery, or document not initialized. fix bootstrap 5+ check (bootstrap 4 was also returning 5+)
- SqlUpdate.SetTo xml comment correction (#6225)
5.2.3 (2021-01-20)
Bugfixes:
- bootstrap modal dialog stays under jQuery UI dialogs (StartSharp)
- error in console while closing a bootstrap modal when a jquery ui dialog is open
- inline action font style normal
- remove schema names from worklog tables
5.2.2 (2022-01-18)
Features:
- add bootstrap v5.1.3 RTL versions to Serenity.Assets
- don't generate unused less file for apps created from recent templates
- removed unused less commands from project file
- add support for generating a separate .rtl bundle if any bundle parts contains {.rtl} placeholder
- add RTL support to new pro theme (StartSharp)
- added rtl rules for dashboard, pro-theme and pro-extensions
- used rtlcss for x.rtl.css on build of pro packages
- update npm version check in project creation wizard (npm 8+ / node 16+)
- project wizard removes empty typings folders when features are deselected
Bugfixes:
- fix padding / alignment of multiple select
- fix classes and html dir generation in Layout.cshtml (StartSharp)
- fix worklog module class name typo in WorkLogGrid
5.2.1 (2022-01-16)
Bugfixes:
- Serenity.Scripts contains package.json etc as content files due to a change in NET6 SDK possibly
5.2.0 (2022-01-15)
- bootstrap 5 support (5.1.3)
- pro theme with simplified (1/3 size) bootstrap 5 compatible css (StartSharp)
- new dark theme cosmos (StartSharp)
- no longer use select2, slickgrid etc. css files (all in pro theme, StartSharp)
- completely removed AdminLTE
- redesigned dashboard with new charts, chat panel etc.
- use chartjs instead of morris
- use css variables for easy color scheme / theme development (StartSharp)
- no longer use less for css
- classic theme layout option via s-classic-layout on html element (header instead of a sidebar band) (StartSharp)
- use nprogress instead of pace (StartSharp)
- custom enum flags editor and sample (StartSharp)
- use bs5 collapsible for sidebar (StartSharp)
- separate templates for VS 2022 / VS 2019. required due to VS 2022 extension incompatibility / amd64 (StartSharp)
- bring back module selection dialog on project creation (StartSharp)
- abstract navigation model
- use line awesome instead with shims instead of font awesome 4 (StartSharp)
- added sample work log module (StartSharp)
- fix all pro-theme issues (https://github.com/serenity-is/Serenity/milestone/1?closed=1)
5.1.3 (2022-01-15)
Bugfixes:
- fix missing static web assets issue in Serenity.Scripts due to target framework bug
5.1.2 (2022-01-14)
Features:
- this is a preparation release for new Bootstrap 5 based pro theme in StartSharp. Some changes might potentially break Bootstrap 3 apps. Revert to 5.1.1 if you have any issues.
- added CustomData dictionary properties to ServiceRequest / ServiceResponse, avoid using them and define custom subclasses except in rare cases where that's not possible
- don't set CSRF-TOKEN header for crossDomain requests as it is causing a CORS pre-flight validation
- allow join attributes to be used based on dialects
- add option to negate dialect match, throw an error if there are multiple matches for the same dialect
- add ability for dialects to optionally change SqlQuery.ToString() by implementing ISqlQueryToString interface
- made OuterApplyAttribute, LeftJoinAttribute, InnerJoinAttribute, and ExpressionAttribute accept ServerType to set their Dialect, added NegateDialect property
- allow tablename to be changed based on dialect as well
- allow foreign keys to be selected based on dialect
- use NavigationGroup / NavigationSection attributes to reorganize existing navigation items to groups / sections (StartSharp pro theme)
- add bs- prefix where needed for data attributes for bs5 compability
- allow option to pass a multiplier and delta for column widths which is useful when switching to a larger font, as widths set server side may not match expected size
- add bootstrap 5.1.3, line awesome with font awesome shims, tabler icons, and preact 10.6.4
- add nprogress (to be used instead of pace)
- change dropdown type timeouts down to 200 ms from 500 ms for a more responsive ui, don't show search icon before actually calling the service
- remove sourcemappingurls from bundled css as it is not supported at the moment in nuglify etc.
- add latest open sans and poppins fonts
- removing source maps for bootstrap as sass code is not useful while inspecting
- removed legacy serenity less files, and use output serenity.css instead (now serenity.css is for legacy BS3 apps only)
- removed less dependency
- added INavigationModel, and INavigationModelFactory interfaces
- removed todo from UniqueFieldSaveBehavior and UniqueConstraintSaveBehavior (#6176)
- added Oracle12cDialect which prefers offset fetch instead of rownum
- get rid of "Update" button and use "Save" both for "Create" and "Update" modes
- move to latest stable version of node / npm (16.13.2 / 8.1.2)
- better npm install implementation for Serenity.Scripts / Serenity.Assets
Bugfixes:
- check for form content type before trying to read from form in JsonRequestAttribute
- SaveRequestHandler should not modify the request entity but clone it as it can be modified in validate request phase, for example trimming etc.
- clone may leave assignedFields in invalid state
- fix bs5 modal showing
- fix bs5 close button markup
- fix group separator naming in ScriptCulture.cs
- fix restore command in linux
- grouping panel should not scroll with the grid columns, it has no relation to horizontal scroll of the grid
- fix pane top when there is frozen columns and grouping panel is visible (#6213)
5.1.1 (2021-10-29)
Bugfixes:
- fix issue with tslib, corelib and rollup causing Serenity.CoreLib.js to fail
5.1.0 (2021-10-26)
Features:
- better handling for custom types like dynamic, list etc. for code generation in endpoints
- generate c# keywords like string, int, long instead of system type names like String, Int32, Int64 for property types, closes #6026
- remove unnecessary space from title for fields that start with underscore, closes #6041
- add ColumnsType to MasterDetailRelationAttribute that will be used instead of IncludeColumns, and IncludeColumnNames which is a string array instead of comma separated string, closes #6048
Bugfixes:
- fix summaries not shown under groups at first when grouping changed by drag drop
- add NotNull attribute to generated row primary keys that are not nullable
- fix possible issue in rare cases with dapper query overloads that accept dynamic type params
5.0.51 (2021-09-18)
Features:
- cleanup code analysis warnings
- include base class properties while searching for id / name properties in server typings row generation
- temporary workaround for database caret references, which is a legacy feature
Bugfixes:
- fix extension comparison for meta files in DiskUploadStorage
- add export to generated permission keys namespaces, thanks @marcobisio
- swallow exception in TemporaryFileStorage as this may cause startup errors and result in application pool crash while trying to create temporary folder, better to ignore than crash
5.0.50 (2021-09-07)
Features:
- fix dateeditor validation for min max dates using jquery format instead of Q.format
5.0.49 (2021-09-02)
Features:
- embed debug info inside dlls
5.0.48 (2021-09-02)
Features:
- another attempt to make sourcelink debugging work again
5.0.47 (2021-09-02)
Features:
- attempt to make sourcelink debugging work again, hopefully
Bugfixes:
- handle css bundle url rewrite case when bundle key contains slashes
5.0.46 (2021-08-31)
Features:
- add option to include an ErrorId in service errors
- make dependency injection for service handlers easier by implementing auto register, and optional generic classes, and get rid of repositories all together, see next commit in common-features repository CustomerEndpoint and sample handler codes
- update sergen to remove repository class and add request handlers instead, and update generated endpoint classes to use new DI friendly structure
- get rid of ".Entities" namespace suffix for generated rows, the less namespaces the better
Bugfixes:
- server typings generator should ignore arguments with [FromServices] attribute while generating code.
5.0.45 (2021-07-20)
Features:
- sergen generates and uses columnKey on first code generation
Bugfixes:
- fix typos in api docs
- fix FieldReadPermission ApplyToLookups option used incorrectly
- postgres issue with code generation when a schema other than public is used
- jquery validate options classList add/remove raises errors if the class is an empty string
5.0.44 (2021-07-12)
Features:
- allow getItemMetadata to return css class for slick cells
Bugfixes:
- Fix min value issue in decimal editor
5.0.48 (2021-09-02)
Features:
- another attempt to make sourcelink debugging work again
5.0.47 (2021-09-02)
Features:
- attempt to make sourcelink debugging work again, hopefully
Bugfixes:
- handle css bundle url rewrite case when bundle key contains slashes
5.0.46 (2021-08-31)
Features:
- add option to include an ErrorId in service errors
- make dependency injection for service handlers easier by implementing auto register, and optional generic classes, and get rid of repositories all together, see next commit in common-features repository CustomerEndpoint and sample handler codes
- update sergen to remove repository class and add request handlers instead, and update generated endpoint classes to use new DI friendly structure
- get rid of ".Entities" namespace suffix for generated rows, the less namespaces the better
Bugfixes:
- server typings generator should ignore arguments with [FromServices] attribute while generating code.
5.0.45 (2021-07-20)
Features:
- sergen generates and uses columnKey on first code generation
Bugfixes:
- fix typos in api docs
- fix FieldReadPermission ApplyToLookups option used incorrectly
- postgres issue with code generation when a schema other than public is used
- jquery validate options classList add/remove raises errors if the class is an empty string
5.0.44 (2021-07-12)
Features:
- allow getItemMetadata to return css class for slick cells
Bugfixes:
- Fix min value issue in decimal editor
5.0.43 (2021-05-29)
Features:
- updated jspdf to latest version
- speed up server typings command via caching and improving assembly resolving
5.0.42 (2021-05-22)
Features:
- better error handling for file uploads if server returns an error message or HTTP error
5.0.41 (2021-05-10)
Features:
- ability to disable toastr dialog positioning by not including position-toast in positionClass option
- better atribute base class for service lookup editor derived client type
5.0.40 (2021-05-10)
Features:
- handle stylesheet issue when running slickgrid tests in jsdom environment
- implement similar logic to service lookup editor like lookup editor for client type base attribute type determination
5.0.39 (2021-04-30)
Features:
- add extra plugin interfaces for configure servies / background jobs
- handle bootstrap 4 nav tab markup
- use dispose instead of destroy for bootstrap 4
- added full namespaced class name for widgets
Bugfixes:
- SqlQuery union should not emit parens for first query as it breaks in Sqlite
- fixed operator for max value validation in date editor
- quick filter date time range handle utc properly
5.0.38 (2021-03-25)
Features:
- rename JsonFilterAttribute back to JsonFilter. Please prefer [JsonRequest] attribute as JsonFilter is now obsolete
5.0.37 (2021-03-25)
Features:
- Added tests for connection ById and TryById methods using mocks
- Added SqlQuery tests
- Added tests for MasterDetailRelationBehavior
Bugfixes:
- Fix TwoLevelCache.Get returns null when local cache does not have an item but distributed cache has
- Rename JsonFilter to JsonFilterAttribute, made AllowXYZ properties settable as attribute argument
5.0.36 (2021-01-26)
Bugfixes:
- Fix null reference error while setting FileUploadEditor value to null directly
5.0.35 (2021-01-25)
Features:
- Added documentation for Serenity.Entity
5.0.34 (2021-01-18)
Features:
- Added IIsSensitiveMessage interface that controls if the exception message can be revealed to the end user in all environments, implement it for ValidationError
- Added ISaveExceptionBehavior and IDeleteExceptionBehavior which can be used to preview exception and throw different exceptions instead of database ones etc. This replaces ISqlExceptionHumanizer.
Bugfixes:
- Sergen transform might fail if typeRoots in tsconfig.json is null
- Fix ui progress bar styling
5.0.33 (2021-01-16)
Features:
- Also scan for annotation types in referenced assemblies during Cecil import generation in Sergen
5.0.32 (2021-01-16)
Features:
- Improve dotnet sergen restore performance
- Don't copy files under wwwroot\Scripts\serenity for submodules, can now get them through static web assets
5.0.31 (2021-01-16)
Features:
- Improve base type detection in client types generator
- Implement getFallbackTemplate for Entity/Property dialogs so templates under Views\Templates are no longer necessary
5.0.30 (2021-01-15)
Bugfixes:
- Register nested permission display names in user permissions UI
5.0.29 (2021-01-15)
Features:
- Output sergen.exe directly to bin directory, exclude Debug/Release and TargetFramework. You may need to update reference if you are using Serenity as submodule.
- Generate XYZColumns.columnsKey just like XYZForm.formKey
- Use TypingsToPackage item type to determine typings that will be packaged, also use msbuild to determine package references in sergen
5.0.28 (2021-01-14)
Bugfixes:
- Bring back exception logging in service endpoints
- Resolve issue while restoring typings in sergen
5.0.27 (2021-01-13)
Features:
- Obsolete ICustomizedFormScript, use ICustomizePropertyItems instead
- Add ImplicitPermissionAttribute to Serenity.Net.Core (implementation only in StartSharp currently)
- Add ExportColumns to ListRequest which will be used for Excel export column list etc instead of IncludeColumns which has a different purpose and not guranteed to be persist order as it is a hashset
- Add IDataReportRenderer abstraction for rendering a data only report to excel format
- Move IExternalReport interface to Serenity.Services
- Move DynamicDataReport to Serenity.Services but rename to TabularDataReport as the public interface has changed
- Add an IExcelExporter interface to abstract exporting data from List services to Excel
- Add ISqlExceptionHumanizer interface abstraction for producing user friendly exceptions from sql exceptions like FK, PK etc.
- Move DataAuditLogAttribute to Serenity.Net.Data
- Start splitting more features into Razor class libraries, like Northwind, Basic Samples etc.
- Improved Sergen to better work with razor class libraries
- Add restore option to control file patterns to include/exclude in restore
- Update sergen restore command to handle version variables, and Directory.Build.props
- Reuse typings folder which will contain index.d.ts files matching @types npm structure, restore and prefer typings in recursive project references
- Modify sergen TSTypeLister to get list of files directly from tsconfig.json instead of hardcoded files if possible
- Also produce typings\serenity.corelib\index.d.ts which is compatible with typeRoots option in tsconfig
- Use MsBuild.Evaluation library to resolve project references and packed typings
- Allow FormScript / ColumnScript without specifiying key, but use type FullName in that case (Module attribute won't be used in any case)
- Handle "." in folder names, allow project.name as a root dir by default for Sergen MVC command
- Also provide static web assets with Serenity.Scripts (for now optional)
5.0.26 (2021-01-09)
Features:
- Add optional exception logging to image / upload checker
- Add localizations for image check results
- Also include typing files under wwwroot/Scripts/serenity while scanning script types
- Convert include exclude tables for Data Explorer to regex (StartSharp)
- Add DataProtectionKeysFolder setting (StartSharp)
- Improve WkhtmlToPdf location finding, better error message (StartSharp)
- Add exception logging to file uploads (StartSharp)
Bugfixes:
- Add missing progress_bar.gif
- Fix mail forward (StartSharp)
- Fix password editor in mail client (StartSharp)
- Fix component factory prop derived by inherited classes (StartSharp)
- Fix data explorer schema provider assembly (StartSharp)
- Hide note editor from Other Form One Tab sample (StartSharp)
- Remove where from Northwind Sales By Category view
5.0.25 (2021-01-07)
Features:
- Improve CSS relative URL rewrite handling in CssBundleManager, add tests for rewrite logic
5.0.24 (2021-01-06)
Bugfixes:
- fix error with sergen during new module code generation
5.0.22 (2021-01-05)
Bugfixes:
- HtmlContentEditor.CKEditorBasePath had to end with a slash
5.0.21 (2021-01-05)
Bugfixes:
- TimeEditor left at Serenity.Serenity namespace due to typo
5.0.20 (2021-01-01)
Features:
- Serenity.NET 5 which only supports .NET 5+
- Embrace dependency injection which makes testing easier, and many integrated features in .NET / ASP.NET Core itself, like caching, options etc.
- [Breaking Change] Due to dependency injection usage and obsoleting of Serenity specific Authentication, Dependency etc. classes there are many breaking changes, see Serenity docs and GitHub repo for upgrade notes.
- Prepared Stargen upgrade tool for StartSharp users
- Removed "Dependency" class which was a service locator abstraction, and used Dependency Injection (DI) instead (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0)
- Removed Config class and used Options pattern where possible (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-5.0)
- There is almost no static classes / state in Serenity framework now
- Replaced "ILocalCache" interface with .NET Core's "IMemoryCache"
- Replaced Serenity specific "IDistributedCache" interface and their implementations Serenity.Caching.Redis / Serenity.Caching.Couchbase with .NET Core's "IDistributedCache"
- Removed "IAuthenticationService" interface and "AuthenticationService" static class, introduced an injectable "IUserAccessor" abstraction
- Removed Serenity specific "Log" class, and used .NET Core's own logging system
- Replaced ExtensibilityHelper.SelfAssemblies with a ITypeSource abstraction
- Replaced static SqlConnections with ISqlConnections abstraction, it is now theorically possible to use dynamic connection strings per request (multi tenancy++)
- Use DI with lookup scripts, data scripts etc.
- Introduced IRequestContext for service handlers
- Row base class is replaced with IRow interface, and there is a generic Row< TFields > base class with access to its Fields type
- Rows can theorically have different set of custom fields and attributes per request (multi tenancy++)
- Service behaviors rewritten for DI and they can get constructor injection
- Script/CSS bundling use options pattern, and bundles can be specified at runtime, also IFileProvider of .NET used so non-physical files can be included in bundles.
- Default sql dialect can be set per async context
- Redesigned upload system, opens way to use different storage providers like Azure, S3 etc.
- Rewrote core script library with modular typescript
3.14.5 (2020-11-24)
Features:
- support ICustomQueryParameter interface of Dapper, used to control parameter type like varchar (ansi), fixed length etc.
Bugfixes:
- try another logic similar to original one implemented for changeSelect2
3.14.4 (2020-11-23)
Bugfixes:
- fix changeSelect2 is raised even when value is set through .value property due to check using hasClass instead of data
3.14.3 (2020-10-21)
Bugfixes:
- prefix
__rownum__ alias with x as Oracle does not seem to like it
3.14.2 (2020-10-19)
Features:
- option to disable layout timer in datagrid
Bugfixes:
- row number over order by does not gurantee order and might mess paging in some rare cases on SQL 2005/2008
- missing localization for "set to now" in date time editor
- datetime editor time part is not readonly when editor itself is readonly
- keyprefix not used properly for get in RedisDistributedCache
- fix infinite resizing on some cases in datagrid due to layout timer
- reading pathLink.href directly results in full address like localhost:6543/ instead of just /, so use getAttribute to fix Q.Config.AppPath
3.14.1 (2020-09-09)
Bugfixes:
- fix setting a date editor date to today in UTC minus time zone resulting in one day before
- make sure quick search text and field is persisted after user change if quickSearch persistance flag is true
3.14.0 (2020-08-06)
Features:
- ability to enable local sorting on remote view, might be useful for in memory grid editors, override getViewOptions to enable and set localSort to true
- bring back flexify decorator for backward compatibility (please don't use it)
Bugfixes:
- datepicker icon not displayed in Serene due to url encoding problem
- set datepicker img width default to 16px by css as it is now a svg
- checked null in GetName() and GetText() Enum extention methods (#4252)
- restore Select2Item interface under Serenity namespace
- fix issue with validation error highlighting of select2 editors
- don't return last set value in date time picker, if the value was now or today. should resolve issues with validation on create.
3.13.7 (2020-07-21)
Bugfixes:
- also include Serenity.CoreLib.d.ts under Scripts/typings/serenity/ as older projects still use that one in tsconfig.json (if you have it there, change path to Scripts/serenity/Serenity.CoreLib.d.ts
3.13.6 (2020-07-20)
Bugfixes:
- include recaptcha and maskededitor in corelib again
3.13.5 (2020-07-09)
Features:
- added FieldInsertPermissionAttribute, FieldUpdatePermissionAttribute, FieldModifyPermissionAttribute which works similar to FieldReadPermissionAttribute to set relevant permission on all fields, which can be overridden field level on particular fields
- add ability to clear local text registry through a new IRemoveAll interface. required for runtime translation reloading in .NET Core as it is not possible to register a new ILocalTextRegistry unlike .NET framework
3.13.4 (2020-06-12)
Features:
- added option to use bootstrap modal for dialogs instead of jQuery UI.
- Q.alert, Q.confirm etc works without jQuery UI and it can use Bootstrap if available. it fallbacks to browser native dialogs if both is not loaded, though options will only be limited to the message.
- Q.blockUI can work without blockUI plugin, but just for full screen blocking
- serenity corelib itself can be loaded without loading external scripts like jQuery, jQuery UI, toastr etc. but functionality will be limited. useful for testing and frontend pages.
- removed dependency on saltaralle mscorlib.js. no longer have to include it, unless you have some code that uses "ss." namespace in your project. most of them can be converted to "Q." alternatives. search for (ss as any) or (ss.) in your code before removing.
- introduced splitted parts of Serenity.CoreLib.js so that only required libs can be loaded when needed. useful for frontend apps. the list of libs: serenity-core.js (contains Q and core types / functions), serenity-widget.js (contains base widget type, ui related typings, toolbar etc. depends on core), serenity-forms.js (contains validation, templated panel, property grid, property panel, depends on core and widget), serenity-editors.js (contains most editor types, depends on core and widget), serenity-slick.js (contains remoteview and other slickgrid related types, depends on core), serenity-dialogs.js (contains templated dialog, property dialog and entity dialog, depends on core, widget and forms), serenity-quickfilter.js (contains quick search and quick filter bar, depends on core, widget and editors), serenity-filterpanel.js (contains filter panel and dialog, depends on core, widget, editors, quickfilter, forms and dialogs), serenity-grids.js (contains data and entity grid, depends on core, slick, widget, forms, editors, dialogs, quickfilter and filterpanel).
- optional flatpickr support for date/time editors. enabled with DateEditor.useFlatpickr = true or used automatically when flatpickr is loaded in page and jQuery UI datepicker itself not.
- a new layout watcher that can call layout for elements when their width / height / or visibility change by using a timer. used to resolve slickgrid layout issues.
- replace COREFX ifdefs with NET45 as .NET CORE and ASP.NET CORE is now the default. this will open way to use other IDEs like Visual Studio Code for .NET CORE projects. OmniSharp extension VSCODE does not work well with #IFs and project references.
Bugfixes:
- make sure DateTimeField does not fail on read if the data reader returns a DateTimeOffset
- if date/time kind is local, should convert the value to universal time before formatting, as .net format function does not do this conversion automatically
3.12.6 (2020-04-12)
Bugfixes:
- fix css bundle manager removes quotes in url for data uris while adjusting relative paths in css bundle
3.12.5 (2020-04-12)
Bugfixes:
- fix css bundle manager ignoring usemincss setting if the included file already has .min.css extension
- jquery.validate has changed required logic to not trim input value by default, so whitespace was considered valid for string inputs
3.12.4 (2020-03-09)
Bugfixes:
- shouldn't validate not null fields with default values on insert, if they are not assigned explicitly as the default value will be applied automatically. resolves create service issues with notnull fields with defaultvalue attributes, where these fields are not visible in form.
3.12.3 (2020-02-22)
Features:
- if null value handling is set to include, row converter should also serialize null fields
- define JsonSettings.StrictIncludeNulls and JsonSettings.TolerantIncludeNulls which serializes null values, and checks them on deserialization. JSON class methods also has an additional includeNulls (default = false) to be able to use these settings.
- added NavigationPermissionAttribute which takes precedence over ReadPermissionAttribute on a row to determine permission for page and navigation item of the row.
- add AsSqlValue method which calls AsObject by default to Field object. this will be useful for fields which has a different storage type then their value type, e.g. JsonField
- added JsonField type. it has no attributes that controls serialization options like nulls so such options must be set through Field.Settings property if required for now.
- don't show an error if xhr status is abort
- added async source support to Select2Editor
- added async option to use getLookupAsync to lookup editor
- added ServiceLookupEditor type
- don't use type delay for initial load, hide select2 spinner while waiting for type delay
- add async option to lookupeditor which makes it work like a service lookup editor
- added FieldReadPermissionAttribute which determines the default permission required to read fields of a row, optionally excluding [LookupInclude] and Id/Name fields. This will make it easier to use a ServiceLookupEditor with a row, for example by setting [ReadPermission("Northwind:Lookups")], [FieldReadPermission("Northwind:General", ApplyToLookups = false)], [NavigationPermission("Northwind:General")], so only users with Northwind.General can see the page and read all the fields through the list service / grid, while a user with Northwind.Lookups permission can call List service but can only read ID + Name + LookupInclude fields through it.
- adding missing field HeaderHtmlUrl to IHtmlToPdfOptions
- include pdb file for serenity.web for source link debug support
- ensure connection is open for better compatibility with mvc version in dapper interface
Bugfixes:
- fix Q.getLookupAsync not actually working async
- avoid double initSelection by setting select2-change-triggered
- fix layout timer registration cleanup
- title text should be read from child with .title-text class
- avoid exception while determining url when a controller has multiple action methods with same name
3.12.2 (2020-01-11)
Bugfixes:
- DataGrid.updateInterface might fail if grid has no toolbar
- make sure quick filters bar can still be created within a fake toolbar div, even when grid has no toolbar
3.12.1 (2020-01-11)
Bugfixes:
- revert updates to System.Threading.Tasks.Extensions and System.Runtime.CompilerServices.Unsafe in Sergen (NET45)
3.12.0 (2020-01-08)
Bugfixes:
- fix embedded resource issue with new sergen tool
3.11.0 (2020-01-08)
Features:
- introduce sergen as a global/local dotnet tool as DotNetCliToolReference can't be used with .NET Core 3+ (remove DotNetCliToolReference from CSPROJ, run "dotnet new tool-manifest" in CSPROJ dir, followed by "dotnet tool install sergen", then "dotnet tool restore" and use "dotnet sergen" as before)
3.10.1 (2020-01-08)
Bugfixes:
- compatibility issue with dotnet sergen
3.10.0 (2020-01-08)
Features:
- support for .NET Core / ASP.NET Core 3.1 (you'll need Visual Studio 2019 as .NET Core 3 SDK is not supported in VS 2017 or older versions.)
- selectable ability like checkbox selection for radio (#4777)
3.9.13 (2019-12-10)
Features:
- generate TS code for types with NestedPermissionKeys attribute
- added ScriptSkip attribute to optionally skip code generation for some types and service methods
- converted quick filter bar into a separate component, so that it can be used without a data grid
- added ability for toolbar buttons to control their own visibility and disabled states through updateInterface handler if a visible/disabled option as a function is set
- added readOnly property and reated interface methods to datagrid, updateInterface calls toolbar.updateInterface for new toolbutton disabled/visible methods
- added getInsertPermission method to EntityGrid, transfer readOnly property to opened dialogs if any
- implemented readOnly property for entity dialog
- added useViewMode method which when true opens entity dialog in view mode initially and shows an edit button
- added getInsertPermission, getUpdatePermission, getDeletePermission methods which controls button visibility to EntityDialog
- added EditorUtils.setContainerReadOnly method which is used by entity dialog to make all form editors readonly in readonly/view modes
- server typings generator generates row permissions in Row.ts
- use permissions in grid/dialog/row typings generated by sergen
Bugfixes:
- jquery ui tabsshow event is now tabsactivate
3.9.12 (2019-11-12)
Features:
- add support for NOT "!" and Parenthesis "()" to LogicOperatorPermissionService
- activated thumbnail generation in .NET Core using System.Drawing.Common, make sure to run "sudo apt install libc6-dev " and "sudo apt install libgdiplus" if using Linux
- update TypeScript to 3.6.4, this is now the recommended version
Bugfixes:
- use occurred instead of occured in error messages
- fileSizeDisplay inconsistency
- file upload editor, maxsize only works for images
- wait cursor not removed after columnpicker quick search
- datagrid.itemAt should return an object of TItem type, not any.
3.9.11 (2019-08-26)
Features:
- removing mono.cecil from tooling, please take latest CodeGenerationHelpers.ttinclude from Serene/StartSharp that doesn't require Cecil reference
- add option to show checkboxes only in some rows for GridRowSelectionMixin
Bugfixes:
- fix bug with clearing slick event handlers
- fix property grid item orders might get messed up, if tabs and categories are in mixed order, e.g. same category name used in a tab, but separate locations
3.9.10 (2019-07-30)
Features:
- introduce EntityGridDialog which is a mixture of an EntityGrid and EntityDialog, than allows editing
records in a side panel on grid [StartSharp]
- complete missing XML docs for Serenity.Data
- change error message to suggest IgnoreName instead of NotMapped for skipping property name check with CheckNames
- update packages in node based sergen cli
- added a toggle method to Serenity.TabsExtensions
Bugfixes:
- if user changed CustomTemplates via the config UI, it was not used properly in sergen until restart
- handle issue with template registration when a project directory has a Modules parent directory in full path
- [IMPORTANT!] fluentmigrator output might reveal connection string in exception message when migrations fail.
please set CustomErrors=RemoteOnly in your web.config, and ASPNETCORE_ENVIRONMENT to PRODUCTION for .NET Core.
Also apply changes in SiteInitialization.DataMigrations.cs and DataMigrations.cs.
3.9.9 (2019-05-24)
Features:
- SqlSettings.DefaultCommandTimeout global setting to set command timeouts, and connection.SetCommandTimeout extension method to set timeout for a connection (only works with WrappedConnection)
- made set of criteria operator constants available in script side as Serenity.Criteria.Operator
- complete missing XML documentation for Serenity.Core
3.9.8 (2019-04-16)
Bugfixes:
- sergen nuget package missing System.Threading.Tasks.Extensions.dll used by scriban 2.0
3.9.7 (2019-04-15)
Features:
- update to asp.net core 2.2, make sure you install 2.2 sdk for your Visual Studio version (SDK 2.2.106 for VS 2017, SDK 2.2.203 for VS 2019 as of writing), updated many packages including Newtonsoft.Json, FakeItEasy, Microsoft.AspNet.Mvc
- add better error handling when a property has [LeftJoin] or [InnerJoin] attribute but no [ForeignKey] attribute.
3.9.6 (2019-04-05)
Features:
- Visual Studio 2019 support
- added annotation type support, which allows separating undesired dependencies, like UI related attributes from row properties into a annotation class.
- added AutoColumnWidthMixin which auto sizes grid columns based on content width [StartSharp]
- improve responsive layout algorithm for data grids in mobile devices
- recommended method to ignore checking a property name when form/columns class has a BasedOnRow(CheckNames = true) is now [IgnoreName], not [NotMapped] attribute, though old one still works for compability.
3.9.5 (2019-03-27)
Features:
- handle toastr invalid path casing
3.9.4 (2019-03-27)
Bugfixes:
- fix syntax error in DotnetCorePathFinder
3.9.3 (2019-03-27)
Features:
- better handling for nuget locations in linux / mac
3.9.2 (2019-03-27)
Features:
- skip packages without id for dotnet sergen restore, e.g. Microsoft.AspNetCore.App
3.9.1 (2019-03-27)
Features:
- check runtimeconfig.dev.json for nuget folders (attempting to fix linux / mac transform issue)
3.9.0 (2019-03-15)
Features:
- added basic attributes to support plugin architecture (work in progress...)
- [Breaking Change] Serenity.Web NuGet package no longer contains / has reference to Serenity script, css and image files, so you need to manually install Serenity.Scripts NuGet package in your project after updating.
Also update Serenity.Web.Assets package. If using AspNetCore add reference to Serenity.Web.Assets and Serenity.Web.Scripts packages in CSPROJ file next to Serenity.Web reference.
Bugfixes:
- StackExchange.Exceptional delete, protect etc. actions wasn't working in ASP.NET Core properly due to AntiForgery system [StartSharp]
3.8.7 (2019-02-27)
Features:
- update bootstrap dependency to 3.4.1
3.8.6 (2019-02-09)
Features:
- modern flat design for grids, dialogs and toolbars [StartSharp]
- when there are items without a tab, instead of showing an empty tab caption, create those property items before the tab (thanks @dfaruque)
- ability to register data scripts using classes like lookup scripts
- row field value name indexed get access should also look field by property name and also in dictionary data if available
- made target optional for PropertyGrid.save and it returns the new/passed target object. added value property to PropertyGrid.
3.8.5 (2019-01-03)
Bugfixes:
- ensure not-mapped fields that are populated by MasterDetailRelation or LinkingSetRelation are only loaded if explicitly included (e.g. column is visible) for ListRequestHandler and loaded in default Details mode for RetrieveRequestHandler
3.8.4 (2019-01-02)
Bugfixes:
- fix inplace add script error in lookup editor
3.8.3 (2018-12-29)
Features:
- added idle (session) timeout feature and related sample [StartSharp]
- implemented impersonate as (login as) functionality in users page [StartSharp]
- backported two factor authentication sample to .NET core [StartSharp]
- added from address setting for mailing in .NET core version [StartSharp]
- added selectedItem getter in SelectEditor (thanks @dfaruque)
- changed protection level of clearItems, addItem and addOption in lookup editor to public (thanks @dfaruque)
- ability to specify location of button separator (thanks @Jin)
- added GridRadioSelectionMixin (thanks @Jin)
- moved most of lookup editor code like cascading, filtering etc. into select2editor base class so that they can be reused in custom editors
- enum editor supports multiple option
Bugfixes:
- fix ui look of datetimeeditor (thanks @adam feng)
- fix fonts folder casing issue in linux
- fixed OracleSchemaProvider based on pull request by @kilroyFR
- hotkeyContext of tool button definition is ignored (thanks @hannesb)
3.8.2 (2018-12-04)
Features:
- skip enum members that has Ignore attribute in ServerTypingsGenerator
- trigger change handler when now button is clicked in date/time editor
- trigger change event of TimeEditor hour input when minute changes
Bugfixes:
- set minutes section readonly when time editor is readonly
- hide delete buttons on images when MultipleImageUploadEditor is readonly
- fix typo on unsubscribe viewOnDataChanged of SlickGrid
3.8.1 (2018-11-03)
Bugfixes:
- resolve package downgrade issue with System.Data.SqlClient
3.8.0 (2018-11-03)
Features:
- updated to .net core 2.1, updated many packages
- when a field can't be loaded from database using getFromReader, show the name of the field and row type so that developer can understand which field has an invalid type
- added local text generation ability (optional) to server typings so that local texts can be accessed with completion and compile time checking. currently only processes row field texts and nested local texts.
- serenity guide is now hosted at https://serenity.is/docs
- added readonly option to CheckTreeEditor and subclasses like CheckLookupEditor
- improve UniversalAssemblyResolver so that more packages can be located / loaded by sergen
- divide InBrace function of CodeWriter to StartBrace and EndBrace functions so blocks can be manually opened and closed
Bugfixes:
- if allowNegatives is true and minValue / maxValue is not specified, minValue is set to 999999999999.99 instead of -999999999999.99 in decimal editor
- only switch to main tab if current tab is being made disabled
- add / to handler paths to make them only available at root, see https://github.com/volkanceylan/Serenity/issues/4017
3.7.7 (2018-09-15)
Features:
- enabled StackExchange.Exceptional (e.g. exception logging) in ASP.NET Core version [StartSharp]
- added docs for migrating Serene project to StartSharp inplace / to a new project [StartSharp]
- added sample daily background task that generates PDF from a report and sends it by e-mail [StartSharp]
- better handling when header filters mixin is working client side with formatted column text instead of underlying value [StartSharp]
- add cke_dialog class to allow header filter search input work under dialogs [StartSharp]
- use timeout give cascaded dropdowns a chance to update / clear themselves, also fixes quick filter clear problem
- updated Scriban to 1.2.3
- implemented IReadOnly in RadioButtonEditor (thanks @dfaruque)
- made ApplyDefaultValues return row for chaining, added unassignedOnly option to the method
- modified css classes used for OneThirdWidthAttribute, QuarterWidthAttribute, ThreeQuarterWidthAttribute and TwoThirdWidthAttribute so that they stay around 250-350 pixels in worst case. might be a breaking change for your existing layouts.
- added JustThis option to form layout attributes like HalfWidth etc, so that you won't have to cancel form widths to just set width for one item
- added JustThis option to LabelWidthAttribute just like FormWidthAttribute
- added VariantField which should correspond to sql_variant (sergen doesn't auto use it yet)
- stop auto numeric from raising errors when an out of range value set manually, only fix value on tab out if some action performed to change value
- added AllowNegatives property to IntegerEditor and DecimalEditor, which alongside AllowNegativesByDefault static property controls ability to edit negative values in editors when MinValue is not explicitly set
- added widthset to PropertyItem which determines if an explicit width value is assigned to property in columns.cs etc.
- split part that loads persisted settings when settings = null in DataGrid.restoreSettings into its own function, getPersistedSettings
Bugfixes:
- if there was an exception, shouldn't commit transaction but dispose (rollback) it in .net core service endpoints
- resolve issue that fields with a space inside name can't be removed from grouping [StartSharp]
- check value of [ReadOnly(false)] attribute before setting item as read only
- ResetLabelWidth attribute shouldn't require a value
- gray out now button in DateTimeEditor when readonly
- handle issue with extra whitespaces in generated Row.cs after scriban update
- fix typo for tabbingDirections in slick.grid.js (thanks @globtech1)
- delete .orig file in DeleteFileAndRelated as well (thanks @globtech1)
3.7.6 (2018-07-10)
Features:
- updated Serenity.Web.Assets package
3.7.5 (2018-07-10)
Features:
- added drag & drop grouping mixin and related sample [StartSharp]
- added customizable summaries mixin and related sample [StartSharp]
- group headers and summary footers uses column formatter if available
- ignore when one or more of requested distinct fields are not allowed and instead of raising exception return null to gracefully handle issue
Bugfixes:
- handle ckeditor warning about upload plugin
3.7.4 (2018-07-05)
Features:
- introduced AllowHideAttribute which when set on a property to false, doesn't let that column to be hidden in column picker dialog
- added collapseAll() and expandAll() to TreeGridMixin.ts, thanks @dfaruque
- Bengali translation, thanks @dfaruque
- remove quick filter if user doesn't have permission to column
- advanced filter should only show columns that user has read permission to (thanks @kilroyFR)
- renamed ColumnFiltersMixin to HeaderFiltersMixin [StartSharp]
- better positioning for header filter popup [StartSharp]
- added ability to check for roles like permissions with Role:RoleKey if role has a key set (a new field added to Roles table) [StartSharp]
- fix SqlErrorStore error logging in non sql server type database servers
Bugfixes:
- fix typos in [DefaultHandler] implementation for Save and Delete handlers
- avoid duplicate key exception while adding implict permissions in UserPermissionService
- fix some ClientTypes conditional files left behind even if related features are not selected
3.7.3 (2018-06-28)
Features:
- updated Serenity.Web.Assets package
3.7.2 (2018-06-28)
Features:
- added ability to select distinct fields to ListRequest and its handler by using DistinctFields which works similar to Sort property
- excel style column filtering grid mixin and related sample [StartSharp]
- call init async on widget if the widget is async as well
Bugfixes:
- removed BW operator from StringFiltering (thanks @marcobisio)
- added missing return statement that causes switch on advanced filter contains to fall back to startsWith operator (thanks @edwardch)
- replaced default keyPrefix with config.KeyPrefix in RedisDistributedCache (thanks @MungoWang)
- handle null reference exception gracefully when row type doesn't have a nested fields type
- .net core memory cache raises an exception if time span is less than zero (#3514)
3.7.1 (2018-05-16)
Bugfixes:
- fix sergen generating empty files due to a change in template engine (scriban) we use
3.7.0 (2018-05-14)
Features:
- support for UNION including INTERSECT, EXCEPT and/or ALL (where DB support is available) to SqlQuery using .Union method
- added ability to determine Name field by using new [NameProperty] attribute instead of INameRow interface if name field is of non-string type
- introduced [DefaultHandler] attribute, which when placed on a service handler, e.g. ListRequestHandler, SaveHandler etc, allows behaviors like MasterDetailRelationBehavior, LinkingSetRelationBehavior, UpdatableExtensionBehavior etc to use your custom handlers (MySaveHandler etc.) instead of generic ones for that row type. This allows logic in your custom handlers to be reused for related records, e.g. detail rows for MasterDetailRelation without having to write a behavior.
- added [DataAuditLog] attribute which allows simple audit logging for change operations to any entity (StartSharp)
- set filename field after upload so that audit logging can take the final value
- data audit log viewer sample (StartSharp)
- split master details grid sample (StartSharp)
- add MigrationAttribute to enforce migration versioning
- switched to SourceLink from GitLink
- removed .Net45.csproj versions for some Serenity libraries like Core, Data, Entity, Services...
- updated all packages including AspNetCore, AspNet.Mvc, Newtonsoft.Json, Nuglify, Selenium, CKEditor etc.
- use double right arrow character for organization dropdown (StartSharp)
- added documentation about upgrading from Serene to StartSharp, inplace or by migration (StartSharp)
- handle *.ts *.cs includes for ServerTypings / ClientTypes to get less merge conflicts on .csproj files
- added debounce function
- got rid of .Net45.csproj files for Serenity.Core, Serenity.Data, Serenity.Data.Entity, Serenity.Services and Serenity.Caching packages, switched to SourceLink
Bugfixes:
- resolve intellisense issue on project creation (StartSharp)
- presencefield bug on updatable extension (thanks @marcobisio)
- fix missing element in Recaptcha Widget Editor (thanks @edson)
- fix typo in closequote for sql2000dialect (thanks @hannesb)
- FastReflection should try to skip visibility checks
3.6.0 (2018-03-31)
Features:
- changes to widget for React integration (currently StartSharp only), you'll need to add @types/react to your package.json even if you'll not use React at all
- include react scripts in Serenity.Web.Assets
- full featured e-mail client (IMAP) sample written with React and MailKit (StartSharp)
- rewrote CardViewMixin with React (StartSharp)
- introduced Serenity.Pro.Scripts nuget package which makes it possible to update StartSharp scripts. It contains UI, App and EmailClient scripts now.
- allow viewing / editing with inplace button even if the lookup editor itself is readonly
- use inline source maps for better script debugging experience with corelib
- add helpers required for spread operator
- grouping helper in corelib
- ability to do replacements in ScriptBundles.json, e.g. replace development version of some script with prod using web.config setting Replacements
- improve typing of widget class, make editor discovery more tolerant even if type doesn't have a registerEditor attribute
- don't try to minimize files ending in min.js when script bundling is on
- deprecating Saltaralle, no longer Serenity.Script package
Bugfixes:
- fix some slickgrid compability issues in chrome related to jquery changes
- fix return type declarations of some script data functions
3.5.5 (2018-02-20)
Bugfixes:
- null reference exception during servertypings generation of types with generic parameters
3.5.4 (2018-02-19)
Features:
- add reference to Serenity.Web.Tooling package so that it auto updates as well
- [Breaking Change] need to replace "externalType.Interfaces.Add(intf.FullName)" with "externalType.Interfaces.Add(intf.InterfaceType.FullName)" in CodeGenerationHelpers.ttinclude
- MasterKeyField option to use another field as master key in master row, thanks @hannesb
3.5.3 (2018-02-19)
Bugfixes:
- resolve possible problem with loadScriptAsync
- [InstrinicProperty] in legacy script form import generator is causing issues
3.5.2 (2018-02-18)
Bugfixes:
- fix Row.scriban sergen template
3.5.1 (2018-02-18)
Bugfixes:
- add missing Mono.Cecil.dll
3.5.0 (2018-02-18)
Features:
- rewrote servertypings generator using mono.cecil to reduce assembly loading errors on .net core sergen transform
- added CheckLookupEditor which is similar to lookup editor with multiple option but uses checkboxes instead
- updated AspNetCore, jQuery, Redis, Couchbase, Nuglify, Dapper and some other packages
- added module attribute that will be used to auto determine local text prefix and lookup script keys
- [LookupScript] attribute can now be used without specifying a lookup key. In that case lookup key will be auto generated from row module / name and / or class namespace.
- no need to set localTextPrefix as it will now be determined by RowIdentifier, e.g. module identifier dot row type name without row suffix
- added IIsDeletedRow which works similar to IIsActiveDeletedRow but as a Boolean fields
- added IgnoreDeleted option to UniqueConstraintAttribute and UniqueAttribute to skip soft deleted records on check
- added CheckNames option to BasedOnRowAttribute so that property name matching with row can be validated optionally to ensure valid / exact case matching property names. can turn check off on a property by adding [NotMapped]
- ability to skip minification for specific files using NoMinimize option in ScriptBundling settings
- added ResolvePath function to ContentHashCache resolve virtual paths to absolute or cdn urls when enabled
- seek to page 1 after a change in filters / sort orders / quick filter in slick grid
- more descriptive error message when lookup script is not found
- try to give more info when lookup script fails to load due to permissions or another exception
- error handler to show runtime errors in browser console as toast on localhost / 127.0.0.1
- make sure there is only one type with a lookup key, raise an error otherwise to warn user
- overflow hidden to prevent double scrollbars in iframedialog
- removing responsive() attribute from dialog template as its should be default now in all except legacy apps
- validate cache on commit even if row doesn't have TwoLevelCachedAttribute, so that attribute is not required anymore
- added ForceCascadeDelete option to LinkingSetRelationAttribute and MasterDetailRelationAttribute that forces deletion of sub records even if master row uses soft delete
- removing old ResponsiveDialog and MultiColumnResponsiveDialog samples as we now have a different way to handle them. removed responsiveDialog decorators as it is no longer needed. [Serene]
- added CheckNames = true to all BasedOnRow attributes so that property / field name matching can be validated [Serene]
- increase upload request limits to 50mb [Serene]
- make sure colorbox scale properly for very large images [Serene]
- finalize agenda and decision tabs in meeting module [StartSharp]
- include ckeditor in pages where required to improve first time startup time [StartSharp]
- use tablename and module attributes for all rows, move external lookups to Lookups namespace instead of Scripts, remove explicit lookup keys from all lookups as it can be auto generated now. [StartSharp]
Bugfixes:
- possible race condition in css / script bundling at first startup
- fix quick search input property/method reference, closes #3248
- check-box vertical alignment issue
- fix northwind employee symbols [Serene]
- fix missing navigation icons [Serene]
3.4.4 (2018-01-30)
Bugfixes:
- fix issue with formatter displayFormat option not working after TS port, and a few other options in other editor / formatters
3.4.3 (2018-01-28)
Features:
- implemented sorting and text search functionality in DataExplorer sample [StartSharp]
Bugfixes:
- fix email and image upload editor value properties are readonly in TS typings
- added new EmailAddressEditor with one input for e-mail editing (unlike EmailEditor)
- fix MinuteFormatter returns empty text
3.4.2 (2018-01-26)
Bugfixes:
- fix possible script registration issue with enum types
3.4.1 (2018-01-26)
Bugfixes:
- use categories default was changed during TypeScript port
- persist sort order wasn't working
3.4.0 (2018-01-24)
Features:
- 4 new themes: Azure, Azure Light, Cosmos, Cosmos Light [StartSharp]
- ported all code left in Saltaralle (12K+ lines) to TypeScript
- Optimized ServerTypings generation so that it produces a MyProject.Web.js file that is up to %50 less in minified size.
- [BREAKING CHANGE] used const enum feature in TypeScript 2.4 to generate field names in ServerTypings Row.ts. Replace "var fld = SomeRow.Fields" with "import fld = SomeRow.Fields" and move that line to just under "namespace" declaration.
- don't validate CSRF token when user is not logged in or cookie token is null (e.g. json service client)
- changed icon for alert dialog (thanks @Jin)
- added descending property in DateYearEditorAttribute (thanks @dfaruque)
Bugfixes:
- fix enum field cast error
- CompareValue() of field types based on list/array returns wrong value (#3156, thanks @hannesb)
3.3.15 (2018-01-04)
Bugfixes:
- missing closing double quote in site.less for new module generated by sergen
3.3.14 (2017-12-27)
Features:
- prevent reloading grid while loading persisted quick search
- validate permission on ReportRegistry.GetReport method to secure execution
- message dialog style changes for modern look
- made inplace add functionality compatible with multiple lookup editor. when multiple editing items works by double clicking on labels.
- give a hint about field name when cast exception occurs on a field asobject method (thanks @dfaruque)
- serins npm package (serin for startsharp)
Bugfixes:
- took care of unnecessary loops on distinct lookup registration
- should put quotes around guid values in sql debug text
- fix search for previously loaded CKEditor script
- preprocessor directive to determine site.less folder in new sergen was wrong, so site.module.less was created in wrong directory
- RadioButtonEditor missing options in constructor in Editors.ts
- renamed getEntityIsActiveField (older name) in d.ts to getIsActiveProperty (current name), thanks @ tky753
- set property item as localizable only if Localizable attribute value is true
- fix sqlite connection string database location invalid due to a change in Microsoft.Data.Sqlite
- fix hint and title options are mixed in ExcelExportHelper.ts [Serene]
- show pdf in new window not working on some browsers [Serene]
- fix exception while adding implicit permissions [Serene]
3.3.13 (2017-11-23)
Features:
- added DateOnly option to DateTimeField, which means field has date value only (it only affects json serialization / deserialization not get/set value), DateTimeKind.Unspecified means a DateTime field with Time portion that shouldn't apply any timezone conversions (this might be breaking change if you relied on DateTimeKind.Unspecified means date only), DateTimeKind.Local means server should apply it to its local time zone (as before), DateTimeKind.Utc means store and retrieve as utc (as before). Added tests, property grid changes, and a useUtc option to DateTimeEditor that should be true when DateTimeKind.Local or DateTimeKind.Utc is used.
- create log file with FileShare.Read flag in FileLogger
3.3.12 (2017-11-21)
Features:
- introduce FormWidthAttribute which works similar to FormCssClass attribute before, but targeted only at bootstrap grid classes. FormCssClassAttribute is still usable but intended for other cases, like offset, and custom field css classes
- ability to add break point, e.g. wrap to next row before this field for bootstrap grid fields, using one of line-break-xs, line-break-sm, line-break-md, line-break-lg attributes
- added Q.attrEncode which should be used instead of Q.htmlEncode for attribute values, if you are using Q.htmlEncode in any formatter to generate attribute value, please replace it with attrEncode as quotes can be a problem
Bugfixes:
- fix utc datetime deserialization issue due to DateTimeOffset
- added missing date time picker sprites image
3.3.11 (2017-11-15)
Features:
added getdisplaytextfor and getcriteriafor to filter store
autocomplete lookup editor should add item on init selection
make quick filter loadState, saveState, displayText methods available in TypeScript
improve fallback template logic
3.3.10 (2017-11-11)
Features:
- added wizard dialog widget and related order wizard sample [StartSharp]
- added UntilNext option to LabelWidthAttribute and FormCssClassAttribute (e.g. HalfWidth etc) so that it applies to all following properties until another one of same kind is used
- port BooleanEditor, MaskedEditor, StringEditor, TextAreaEditor, TimeEditor classes to TypeScript from Saltaralle
- ability to save quick filter display text
- ability to save quick search text and field
- accept unicode letters as valid sql identifiers
- use Pascalize instead of Capitalize while generating module name from connection key
- added some new attribute derived from FormCssClassAttribute for bootstrap grid system form (thanks @estrusco)
- ability to use a fallback template if can't find expected default one in templated widget
Bugfixes:
- fix slick grid column header has border on hover inside dialog
- replace ".Entities." with "." in ScriptDtoGenerator (for saltaralle)
- fix RadioButtonEditor not able to clear checks on setting value
3.3.9 (2017-11-04)
Bugfixes:
- fix constructor of DistinctValuesEditorAttribute
3.3.8 (2017-11-04)
Features:
- added DistinctValuesScript, DistinctValuesEditorAttribute and related logic to automatically define distinct lookup scripts on fields
- extract UploadedFile into public class to be able to use in other methods
- move up getDialogTitle method from PropertyDialog to TemplatedDialog
- cleanup serenity.jqueryui.less duplicates
Bugfixes:
- fix service typing generation for legacy result type endpoints
- fix included deleted toggle background position
- report dialog broken after panel feature
- remove selectmenu and bring back shake effect as quicksearch is still using it
3.3.7 (2017-11-01)
Features:
- give more descriptive error, and show error notification in addition to exception when dialog type is not found
- also show a notification when enum type is not found as users generally don't check console for errors
- more descriptive error and notification when widget can't be found on an element
- add missing methods like tryFirst, single etc. in Q.cs
Bugfixes:
- CKEditor fail when initialized /destroyed in an invisible element / dialog / panel.
3.3.6 (2017-10-30)
Features:
- use font awesome icons for dialog titlebar buttons, merge aristo.css into serenity.css, change titlebar styling
- cleanup dialogExtendQ
- dont swallow exceptions in ScriptBundleManager
3.3.5 (2017-10-25)
Features:
- introduce explicity included bundles , e.g. ones with "/" in their names and has to be included explicity, using @Html.ScriptBundle or @Html.StyleBundle, which allows using different sets of bundles for different parts of sites.
- set customer in new order dialog to selected customer in quick filter of order grid [Serene]
Bugfixes:
- fix RouteDialog call in initEntityDialog method should use itemType passed in parameters
3.3.4 (2017-10-14)
Features:
- easy to configure cdn support (experimental, in use at serenity.is/demo)
- allow cdns to cache dynamic scripts for anonymous access
- check bundled script rights also when checkRights() on concatenated script is called
- increase scriban template loop limits as some users has tables with many columns (300+)
- added LocalTextScript method to HtmlScriptExtensions that works well with CDNs
- fix typo in image upload validation error and show file size in KBs/MBs
- localize select all button in check tree editor
Bugfixes:
- custom template path option is not used in .net desktop serene
3.3.3 (2017-10-23)
Features:
- dont auto focus first element on mobile device, as it shows keyboard
- prevent jquery ui dialog from focusing an input in mobile devices
- removing embedded touch punch from cropzoom.js as it was causing dialog back button in android browsers to not work. better to exclude cropzoom.js from layouthead.cshtml completely in your project unless you use it specially.
- resolve possible memory leak in jquery ui remove event / cleanData method due to HtmlElementCollection enumeration
- remove layout events when full height grid div is removed
- removed fastclick.js as it is no longer useful in mobile devices [Serene]
- don't spin logo in mobile devices [Serene]
- hide some quick filters in order / customer screens for xs devices using hidden-xs bootstrap class [Serene]
- specify TypeScriptToolsVersion in web.csproj as VS2017 asks for it on template project creation anyway [Serene]
Bugfixes:
- fix HostingEnvironment.MapPath in ASP.NET Core / IIS when app is hosted under a virtual subdirectory, fixes script bundling
- add back spacing line between foreign row fields in generated code
- call select2 destroy on base select2 editor, not lookupeditorbase
- check view is not null before calling populate in initialPopulate
- destroy mouse trap instance on toolbar destroy to prevent memory leaks
3.3.2 (2017-10-22)
Bugfixes:
- select2 sprites broken in high res devices
3.3.1 (2017-10-21)
Features:
- release new assets package (3.3.1)
3.3.0 (2017-10-21)
Features:
- we now have an embedded css minifier / bundler similar to script bundler. CSS bundler can override URLs in bundled CSS files to absolute paths. it is now possible to include other dynamic scripts in script bundles using dynamic://ScriptName syntax, e.g. dynamic://Lookup.Northwind.Product.
- use new css bundling and dynamic script bundling features to improve page load times dramatically and decrease number of loaded resources like scripts, css etc when bundling is enabled [Serene]
- login now has a slim layout page, embedded css and javascript so that Serene.Web.js and site.css, and some other scripts that are not required in login page are not loaded [Serene]
- use font awesome instead of simple line icons in navigation to remove dependency on simple line icons [Serene]
- allow overriding separator in ConcatenatedScript
- allow returning css from dynjs handler / middleware, separate legacy BundleCssHandler to its own file
- use font awesome icons in column picker instead of simple line icons
- slimmer version of jquery ui is default now. it doesn't contain extra effects, tooltips, spinner, accordion, jQuery 1.7 support
- font open sans data uri version that only contains Normal version, which will be used by default in Serene
- use browser Promise if available, fallback to jQuery.Deferred or RSVP. RSVP is no longer required.
- convert most used toolbar buttons, pager buttons, back buttons, dialog close button, quick search icon, select2, date picker and filter panel images to data uris image to data uris
- improve submodule.targets file to auto include serenity projects and remove DLLs if projects exists
Bugfixes:
- fix dynamic script middleware gzip support check
3.2.2 (2017-10-18)
Features:
- added openDialogsAsPanel option (which is null by default, e.g. auto) to data grids that allows overriding panel / dialog opening mode per grid.
- added openDialogAsPanel option to lookup editor (null = auto by default)
Bugfixes:
- bring back default options populated by sergen on first run (.net framework version)
3.2.1 (2017-10-18)
Features:
- restore hash in login page returnURL (e.g. returnUrl=Northwind/Customer/Edit#12) [Serene]
Bugfixes:
- panel is not closed when browser back button pressed
- build error in Serene due to TypeScript.MsBuild package on build servers
3.2.0 (2017-10-17)
Features:
- using dialogs as full page panel support, which also works fine with grids, applied it in Northwind Customer and Order dialogs
- better responsive handling in x-small devices
- [BREAKING CHANGE] panels are hidden by default, so you need to .removeClass('hidden') after appending panel element to a container. see EntityDialogAsPanel sample Index.cshtml
3.1.1 (2017-10-16)
Bugfixes:
- fix null reference exception on t4 transform
- Skip Take With Order By clause used correct syntax for OracleDialect
3.1.0 (2017-10-16)
Features:
- support CSRF (cross site request forgery) protection in Serenity pages / services. it is highly recommended to apply changes in latest Serene commit to your existing project to enable CSRF protection!
- .net core sergen no longer has dependency to serenity.web, thus asp.net core, so it is now much slimmer and 10 times faster to load
- improved .net core build / dotnet sergen transform time significantly (20x) if input files (.ts) didn't change by employing caching in TSTypeLister.
- t4 transform files in .net framework version is also much faster (caching + change control), see latest commit
- t4 transform doesn't modify files if only line endings changed, solves a problem with git due to line ending transformation (files was looking like changed after T4 transform)
- servertypings t4 transform doesn't invoke tsc if none of files changed
- typescript compiler is only invoked when an input file changes which improves build time significantly, see changes in Serene.csproj
- using Microsoft.TypeScript.MsBuild package instead of Node based TSC in Serene AspNetCore (usually 2x faster)
- less compiler is only invoked when an input file changes which improves build time significantly, see changes in Serene.csproj
- use scriban template engine for sergen
- it is now possible to override templates sergen uses by setting "CustomTemplates" option to a directory with .scriban templates. if there is a template with same name (e.g. Row.scriban) in that directory sergen uses that, otherwise uses default embedded one.
- sergen provides option to generate custom files by setting CustomGenerate option in configuration file. this is a dictionary of template file => output file format ({0} class name, {1} Module, {2} class path, {3} typings path)
- it is possible to show / editor custom settings (boolean/string) by adding them to CustomSettings dictionary in sergen configuration file. these settings are available as {{CustomSettings.SettingKey}} in scriban templates.
- added "mvct" command to sergen that does mvc / clienttypes at once. used this option for pre build script instead of two calls to dotnet-sergen.
- removed rowwithregion, lookup generate options etc as they are now possible with custom generate option and custom settings
- sergen no longer generates code for Saltaralle. script project option is removed. use an older sergen version if you still generate code for saltaralle.
- put each field on separate line for easier merge in ServerTypings generated files (for easier merge in git)
- support quick filter persist / restore (thanks @marcobisio, pull request #1455)
- add FullTextContains quick search type (simple version of pull request #2200 that only support quick search with contains for performance reasons, thanks @marcobisio)
3.0.8 (2017-10-11)
Features:
- made it possible to use bootstrap col-md-6, col-sm-4 etc. to layout form fields.
- added attribute FormCssClassAttribute for applying custom sizes.
- use HalfWidthAttribute, OneThirdWidthAttribute, QuarterWidth etc. for quick field sizing
- added ImplicitPermissionAttribute and related auto permission granting system which is a much better alternative to LogicOperatorPermissionService. e.g. when a user / role has Northwind:Modify permission, it should also automatically have Northwind:View and Northwind:General permissions
- in addition to resizing canvas, also invalidate grid on resize, fixes some display issues on windows 7 pcs
- added missing class declaration for IStringValue to .d.ts
- more descriptive error message for "Can't find {0} enum type!"
- more descriptive error message for "{0} field on {1} is read before assigned a value!"
3.0.7 (2017-10-07)
Features:
- add Tab attribute to forms that works similar to Category attribute but works with bootstrap tabs. can be combined with categories.
3.0.6 (2017-10-02)
Features:
- added autoComplete option to LookupEditor, which allows creating new items by user typed text
- sampled autoComplete with Northwind Customer's country / city editing [Serene]
3.0.5 (2017-09-06)
Features:
- allow overriding dialect for SqlInsert and SqlUpdate like SqlQuery does
Bugfixes:
- fix culture identifiers in .net core version UserCultureProvider and don't crash if a culture is not found in the system [Serene]
- fix upload problem in linux due to case sensitivity
- set readonly flag of ckeditor instance after instance is ready
3.0.4 (2017-09-05)
Bugfixes:
- try to resolve problem with dotnet sergen restore in linux due to case sensitivity and nuget lowercasing package ids
3.0.3 (2017-09-04)
Features:
- dotnet sergen servertypings can try to find output DLL itself so assemblies option in sergen.json can be removed for normal workflows
- dotnet sergen servertypings uses release output dll if its date is newer than debug output dll
3.0.2 (2017-09-04)
Features:
- rowregistry can support multiple rows per ConnectionKey / TableName pair
3.0.1 (2017-09-04)
Bugfixes:
- fix dotnet sergen failing with assembly load error
3.0.0 (2017-09-03)
Features:
- upgraded to .NET Core 2.0 / AspNetCore 2.0
- ability to use full .net framework with Serene AspNetCore version (wait for guide)
- typescript 2.4 is now recommended version
- make sure dotnet-sergen can load assembly and list types properly before trying to generate server typings
- added tablename as attribute on Row for RowWithRegion (thanks @dfaruque)
- raise forbidresult from PageAuthorizeAttribute when user doesn't have permission but logged in
- make display order and IDisplayOrderRow work with rows of non-integer ID columns
- handle service exceptions in asp.net core service endpoints similar to mvc ones
Bugfixes:
- fix unused select overload (thanks @TomaszKustra)
2.10.3 (2017-08-17)
Features:
- experimental functionality to use a Serenity editor as a Vue component using special element
- date/datetime editor year range option default to -100:+50 instead of -10:+10 (better for birth date etc.)
- router use history.back() only when dialog is closed by x button or escape key
2.10.2 (2017-08-12)
Features:
- option to use original file name as uploaded file name with a {4} format parameter in FileNameFormat. it auto adds file (1).docx etc if there is already a file with same name on disk
Bugfixes:
- resolve problem if router can't use history.back(), e.g. history is empty somehow
2.10.1 (2017-08-10)
Features:
- added option to ignore enum members (thanks @Estrusco)
Bugfixes:
- resolve problem with Firefox / hash based router while editing items in detail editors. You may add Q.Router.enabled = false in ScriptInitialization.ts if still having issues or wan't to disable this "feature".
- findElementWithRelativeId missing # (thanks @Estrusco)
2.10.0 (2017-07-23)
Features:
- updated all packages, including Newtonsoft.Json, Nuglify, AspNetCore, StackExchange.Redis
2.9.32 (2017-07-23)
Features:
- better handling of return url when forms auth login url is absolute
- try to restore previous hash if non-routed dialog opened
Bugfixes:
- fix issues with dotnet-sergen and non-matching assembly versions
2.9.31 (2017-07-18)
Bugfixes:
- router didn't attach to hashchange at start
2.9.30 (2017-07-18)
Features:
- use shorter hash fragments for not properly routed dialogs
- added option to disable router (add "Q.Router.enabled = false" in ScriptInitialization.ts)
- when time dropdown changes trigger a change event for date input in DateTimeEditor
Bugfixes:
- set file size correctly when uploaded file is not an image
- skip assemblies that doesn't like to list types
2.9.29 (2017-07-17)
Bugfixes:
- resolve routing problem when a dialog is closed and another opened right away
2.9.28 (2017-07-16)
Features:
- basic hash based router for handling back button in mobile / desktop (primarily for modal dialogs). it can also handle forward button / bookmarking if implemented properly by routing targets.
2.9.27 (2017-07-13)
Features:
- pass item class from attribute in navigation items
2.9.26 (2017-07-13)
Features:
- ability to add css class to navigation items
- wrapped headers in grid sample [Serene]
2.9.25 (2017-07-06)
Features:
- made back button in mobile mode a bit bigger to make it easier to click in small touch devices, closes #1800
- updated spanish translations (thanks @gustavo)
- triggerDataChange overload that accepts a jQuery object is renamed to triggerDataChanged
- exit gracefully when assembly DLL file is not found for sergen transform Bugfixes:
- inplace add lowercases typed text in new item dialog
- jquery ui button noconflict .d.ts typing change warning
- resolve possible null reference exception in GlobFilter
2.9.24 (2017-05-14)
Bugfixes:
- possible filtering problem with DateTimeOffset deserialization in JSON.NET and date/time fields
2.9.23 (2017-05-09)
Features:
- added NestedPermissionKeys attribute that works kinda similar to NestedLocalTexts attribute for permission key registration
2.9.22 (2017-05-07)
Features:
- allow specifying an external lookup type on rows in LookupScriptAttribute constructor, or a generic type through LookupType property, simplifies multi tenancy
- added .gitignore compatible high performance GlobFilter class
- introduce mail settings and pickup directory functionality in .net core version
Bugfixes:
- code generator for .net core should look for sergen.json instead of project.json
- when an appsetting key is not available, null reference exception occurs
- template helper can't find views in .net core version
- fix typo in signup (thanks @Febriantos) [Serene]
2.9.21 (2017-03-26)
Features:
- run tsc directly, not through npm, to avoid weird error log with npm
- ScriptInitialization.ts reference to LanguageList
- toastr 2.1.33 has getContainer method, so removing one in Serenity, update toastr typings version in your packages.json to ^2.1.33
- don't show "undefined" when a XHR connection error occurs. try to be more descriptive but it will be limited as there is no possibility to get exact error.
- return to avoid kestrel header errors in .net core when browser requests .map files which doesn't exist from DynamicScriptMiddleware
2.9.20 (2017-03-19)
Features:
- allow setting CKEditor readonly option after widget initialization
Bugfixes:
- script bundling settings are not read in .net core version
- don't crash on t4 transform when a class has no namespace
2.9.19 (2017-03-16)
Bugfixes:
- fix .net core version file name casing issues in linux
2.9.18 (2017-03-16)
Bugfixes:
- backport prefix determination algorithm to sergen net45 version
2.9.17 (2017-03-13)
Features:
- Visual Studio 2017 support (.NET Core version no longer works on Visual Studio 2015 sorry because of project.json to csproj change. you need to use VS Code or upgrade to VS2017)
- obsoleted jsrender (will later replace with Vue)
- added language cookie to cookies sent to pdf renderer [Serene]
2.9.9 (2017-03-02)
Features:
- use TypeScript compiler from npm. Visual Studio still uses its own extension for intellisense and compile on save, so make sure your version matches.
Bugfixes:
- try fix nuget sergen path issue by moving back it to tools folder from tools/net45
2.9.8 (2017-02-17)
Bugfixes:
- fix issue with stored proc (e.g. sqlite pragma foreign_key_list) returning empty resultset with 0 fields, dapper is raising multi map error. backporting fix from Dapper itself.
2.9.7 (2017-02-17)
Bugfixes:
- resolve bug caused by TypeScript __extends helper copying all static members including __metadata which shouldn't be as Saltaralle type system depends on it being a unique array. this is revealed by panel decorator getting applied to base class as well.
2.9.6 (2017-02-15)
Features:
- obsoleted linq.js (e.g. Saltaralle.Linq). if you still have saltaralle code that depends on linq.js, add it to your layouthead.cshtml manually, e.g. @Html.Script("~/Scripts/Saltaralle/linq.js")
2.9.5 (2017-02-14)
Features:
- sergen .net core / node version tolerates whitespace in paths and other arguments
- russian texts update (thanks @ÃÂáÃÂõÃÂÃÂÃÂóÃÂõÃÂù ÃÂáÃÂþÃÂñÃÂþÃÂûÃÂõÃÂò)
Bugfixes:
- handle issue with servertypings.tt and datetimeoffset/bytearray field types
2.9.4 (2017-01-04)
Features:
- allow spaces in dotnet-sergen arguments (requires updating npm sergen too, e.g. npm update -g sergen)
2.9.3 (2017-01-31)
Features:
- allow using .ts.html suffix in addition to .Template.html to let Visual Studio group a template under its related component, e.g. SomeDialog.ts => SomeDialog.ts.html
- add module template prefix to template key automatically (might be a breaking change if you relied on exact file name)
Bugfixes:
- fix group declaration on group import for slickgrid.d.ts
2.9.2 (2017-01-31)
Features:
- backport schema providers in sergen .net core version to .net framework version
- use Serene.Web for .NET core project template, instead of longer Serene.AspNetCore name
- fill in (CascadeField, CascadeValue) and (FilterField, FilterValue) in InitNewEntity method of LookupEditorBase, e.g. InplaceAdd
- sergen generates code for mvc, clienttypes before build, and servertypings post build in asp.net core version (project.json)
2.9.1 (2017-01-29)
Features:
- new [Origin] attribute to auto set Expression, DisplayName, Size and Scale attributes from the originating row for view fields.
- allow specifying a [ForeignKey] by using a row type that has a [TableName] attribute. ID field can also be automatically determined if row has a property with [Identity] attribute, or a single property with [PrimaryKey] attribute. Implementing IIdField doesn't help ID field detection.
- for script bundling, replace MsieJsEngine + UglifyJS with Nuglify which is based on MS Ajax Minifier, faster and effective resource wise.
- put semicolon between ConcatenatedScript parts to avoid javascript errors with certain minified files
- allowClear param in enum editor (thanks @Estrusco)
2.9.0 (2017-01-25)
Features:
- Sergen for .NET Core now works with Firebird, MySql, Postgres, Sqlite in addition to SqlServer.
- New schema provider system in Sergen to query database metadata
- Made FirebirdDialect quoting compatible with with FluentMigrator one
Bugfixes:
- use this.uniqueName while binding to layout, to resolve script errors after widget is destroyed, and use it to unbind on destroy
- fix report dialog not showing parameters (thanks @Scott)
2.8.11 (2017-01-21)
Features:
- Serin uses latest VSIX template from VSGallery instead of embedding a template in itself [Serene]
- Serin replaces connection strings to use Sqlite in OSX / Linux [Serene]
- Serene ASP.NET Core version now works with Sqlite (no code generation support yet) [Serene]
- Serene ASP.NET Core comes with Sqlite factory preconfigured
- Serene uses MsSqlLocalDB instance in Windows by default [Serene]
- increased speed of Sqlite migrations for Northwind dramatically
Bugfixes:
- resolved problem with .NET Core and Sqlite with reader.GetBytes() as Microsoft.Data.Sqlite doesn't support it
- fixed Serenity.FluentMigrator and Sqlite compability problem about case sensitivity
2.8.10 (2017-01-20)
Bugfixes:
- resolve delete error on localization behavior
2.8.9 (2017-01-20)
- simplified data localization with a behavior
- localizations are integrated into saverequest and retrieveresponse for easier implementation
- add language / culture switching support to ASP.NET Core version [Serene]
2.8.8 (2017-01-18)
Features:
- resolve regression bug with script bundling
2.8.7 (2017-01-17)
Features:
- develop npm sergen package to workaround dotnet cli tool bug about readline/readkey
2.8.6 (2017-01-15)
Bugfixes:
- implement console readline hint without using console width or setcursorposition
2.8.5 (2017-01-15)
Bugfixes:
- remove test check in sergen cli
2.8.4 (2017-01-15)
Bugfixes:
- can't use auto completion in sergen thanks to cli bug
2.8.3 (2017-01-14)
Bugfixes:
- resolve problem with dotnet-sergen self assemblies
2.8.2 (2017-01-14)
Features:
- lazy load connection string provider factory
Bugfixes:
- resolve problem with dotnet-sergen can't load FluentMigrator assembly
2.8.1 (2017-01-13)
Features:
- Serene now runs on ASP.NET Core / .NET Core (Beta)
- allow specifying expressions for a field based on connection dialect type, for example [Expression("CONCAT(A, B)"), Expression("A || B", Dialect = "Sqlite")], match with longest dialect name wins
- [DisplayName] and [InstanceName] used Title instead of Tablename in generated row.cs (thanks @dfaruque)
2.8.0 (2017-01-10)
Features:
- Serenity NuGet packages now contains netstandard1.6 targets (e.g. .NET Core support)
- new command line code generator (dotnet-sergen) for .NET cli
- criteria.exists overload that accepts a sqlquery
- ability to add a quickfilter separator line on columns or manually
- option to add a css class to a quick filter, e.g. something like visible-lg to make it visible only on large devices
- boolean quick filter takes display texts from filtering options
- moving /modules/common/imports to /imports and /modules/common/migrations to /migrations [Serene] by default
- switched to NPM for TypeScript typings (.d.ts) files, see upgrade guide in GitHub
Bugfixes:
- don't use prefix if a field name is equal to prefix length in sergen
2.7.2 (2016-12-25)
Bugfixes:
- release assets package containing slickgrid mac fix
2.7.1 (2016-12-25)
Features:
- remove direct checks on ISqlDialect type and use new ISqlDialect.ServerType and ISqlDialect.NeedsBoolWorkaround properties, which also resolves problems with custom Oracle dialect
- OracleDialect like search is now case insensitive by default
Bugfixes:
- fix slickgrid mousewheel bug occuring on mac / chrome (thanks @mkoval-ua)
2.7.0 (2016-12-22)
Features:
- ConnectionKeyAttribute can now accept a type, e.g. a row type, to get its value from that source type, instead of explicitly listing the connection key string.
- PageAuthorizeAttribute can now accept a source type, e.g. a row type that gets ReadPermission attribute from, instead of hardcoding the permission
- ServiceAuthorizeAttribute and its new subclasses, AuthorizeCreateAttribute and AuthorizeUpdateAttribute and AuthorizeDeleteAttribute can now get a source type parameter, e.g. a row type where they'll read relevant permissions from source type, instead of hard coding the permission. Their permission determination algorithms closely matches relevant handlers.
- RowLookupScript lookups inheritance chain for ReadPermissionAttribute
- Request handler looks in inheritance chain for permission attributes, and save/delete handlers should also look for readpermissionattribute
- added HeaderCssClass attribute
Bugfixes:
2.6.10 (2016-12-12)
Bugfixes:
- fix date required even if not
2.6.9 (2016-12-12)
Bugfixes:
2.6.8 (2016-12-11)
Features:
- when no category is specified for any of items, don't show default category name, even if useCategories is true, but create category div for CSS compability
- added inplaceaddpermission to lookup editor
- disable inplace add functionality if select2 editor is readonly
- call dialog arrange method on resize and active tab change
- add "d": date only, "g": dd/MM/yyyy HH:mm (culture specific dmy order), "G": dd/MM/yyyy HH:mm:ss (culture specific dmy order), "s": yyyy-MM-ddTHH:mm:ss, "u": yyyy-MM-ddTHH:mm:ss.fffZ format specifiers for Q.formatDate function
- Q.formatDate can now accept an iso date/time string or normal date string in addition to a Date object
- Q.parseDate can also parse iso date/time values
- feature selection wizard while creating a new application with Serene template. you can now optionally exclude Northwind, Meeting, Organization, Samples etc. [Serene]
- added attendee editor to meeting UI [Serene]
2.6.7 (2016-12-09)
Bugfixes:
- fix datetimeoffset conversion bug affecting json deserialization
2.6.6 (2016-12-09)
Bugfixes:
- fix typescript services transform error when node is null somehow
- update typescript services used for t4 transforms to 2.0.6
- possible problem with asyncPostProcessCleanup when a column is removed
2.6.5 (2016-12-08)
Features:
- code generator single & multiple tabs merged into a new datagrid based interface
- added DateTimeOffset field type
- added ByteArray field type for small binary column types like timestamp, varbinary(8) etc.
- add minbuffer (number of buffered rows on top and bottom), and renderAllCells (render all cells in row, including non visible ones, helps with inline editing tab order) options to slick.grid
- give a more informational error message about "query affected N rows while 1 expected"
- added IReadOnly class to TypeScript defs
- add optional AdminLTE style for login and signup pages (thanks @DucThanhNguyen) [Serene]
- default timeout of 90 secs for running migrations [Serene]
- sample for dynamic navigation items (thanks @DucThanhNguyen) [Serene]
Bugfixes:
- delete button in multiple image upload editor gets lost for long file names
- fix android keyboard hiding when search on menu is clicked
- oracle sequences should now work (Oracle users, please report)
- datetimeeditor fails on empty string
2.6.4 (2016-11-26)
Features:
- updated font-awesome to 4.7.0
- updated simple line icons to 2.4.0
- LinkingSetRelation and MasterDetailRelation shouldn't delete detail records when master is IIsActiveDeletedRow
- local text key fallback registry (thanks @DucThanhNguyen)
Bugfixes:
- filter panel incorrect paren handling when a paren comes right after a line without paren
- missing closing paren at end for filter panel display text
2.6.3 (2016-11-26)
Features:
- make capture log work without integer ID
- handle double slashes as single slash in navigation items
- auto create intermediate menus on secondary or more levels for navigation items
- auto created navigation items now has min display order of their children
- add FullPath property to NavigationItem which can be used to get localized captions for navigation items. see change in LeftNavigation.cshtml
- it's now possible to custom handle filters by overriding ApplyFieldEqualityFilter in ListRequestHandler
- equality filter multiple values with IN filtering are now supported natively by ListRequestHandler
- ability to custom handle and ignore an equality filter in ListRequestHandler by behaviors
- LinkingSetRelationBehavior handles equality filters by default. set HandleEqualityFilter to false for manual handling.
- don't allow sorting for fields with NotMapped or Sortable(false) attribute
- set sortable false for fields with NotMapped attribute
- don't allow filtering on NotMapped fields
- fix some mistakes in Vietnamese translation (thanks @DucThanhNguyen)
- add ReportHelper.execute method and related sample in OrderGrid for invoice printing [Serene]
- move forward 18 years 6 months in Northwind order dates with a migration (sql server only) [Serene]
- add quick filter to Representatives in customer grid which is handled by LinkingSetRelation [Serene]
2.6.2 (2016-11-19)
Features:
- added tree grid drag & drop sample (thanks @dallemann for sponsoring this sample) [Serene]
- added entity dialog as panel sample [Serene]
- added vietnamese language and translation (thanks @DucThanhNguyen)
- added ability to inject dynamic navigation items through INavigationItemSource interface (thanks @DucThanhNguyen)
- include field level permission keys in permission dialog
Bugfixes:
- entity dialog load fails when onSuccess parameter is null
2.6.1 (2016-11-15)
Features:
- ability to use original ID column with GridEditorBase instead of "__id"
Bugfixes:
- if an item is just readonly in property grid, it should still be serialized
- fix tree grid mixin doesn't work when toggle column has no formatter
2.6.0 (2016-11-12)
Features:
- implemented field level permissions, just add one or more of ReadPermission, ModifyPermission, InsertPermission, UpdatePermission attributes to properties in a row.
- added LogicOperatorPermissionService that allows using & (and), | (or) operators in permission checks, e.g. ReadPermission("A&B|C")
- ListField, RowField, RowListField types has NotMapped flag by default so no need to add [NotMapped] attribute explicitly
- ListField also supports value comparison just like RowListField
- added setSelectedKeys method to GridRowSelectionMixin (thanks @estrusco)
- added other form in tab with one toolbar sample (thanks @estrusco) [Serene]
- added a report page for Northwind, more report samples are on the way [Serene]
2.5.9 (2016-11-07)
Features:
- expand category when related link is clicked
Bugfixes:
- fields in collapsed categories could be focused
2.5.8 (2016-11-08)
Features:
- TreeGridMixin for tree view like grid functionality
- added Collapsible attribute, for collapsible categories in forms (thanks @marcobisio)
- added selectKeys method to GridRowSelectionMixin (so no need to access $items directly)
- added Tree Grid sample [Serene]
- filter sample for showing orders containing a specific products in details [Serene]
Bugfixes:
- don't show pdf button in new order dialog [Serene]
- use connection.InsertAndGetID with row, instead of SqlInsert to avoid errors in postgresql and similar
2.5.7 (2016-11-04)
Features:
- added innerjoin attribute (thanks @marcobisio)
- added tabextesnsions.selectTab helper (thanks @estrusco)
Bugfixes:
- fix includecolumns parameter in data grid doesn't get cleared when columns are made hidden
- fix category filtering in report repository
2.5.6 (2016-10-30)
Bugfixes:
- avoid multiple populate on quick filter initialization. it was due to usage of change event and async initialization
2.5.5 (2016-10-29)
Features:
- integrated StackExchange.Exceptional [Serene]
- added validation to another form in tab sample [Serene]
- added inline action buttons sample [Serene]
Bugfixes:
- column picker dialog changing height while dragging
- fix dashboard link doesn't get active if url doesn't end with '/'
2.5.4 (2016-10-28)
Bugfixes:
- fix paging LIMIT OFFSET statement for MySql dialect
2.5.3 (2016-10-24)
Bugfixes:
- resolve problem with IE11 and slickgrid layout, that is caused by height() returning non-integer values in jQuery v3, which leads to stack overflows
2.5.2 (2016-10-23)
Bugfixes:
- fix jquery.event.drag.min.js causing problem when bundling is enabled
2.5.1 (2016-10-22)
Features:
- upgraded to TypeScript 2.0
- fix look of ui dialog buttons after jQuery UI update
- added date time quick filtering option
- better handling when date entered in a quick filter is invalid
2.5.0 (2016-10-21)
Features:
- updated bootstrap from 3.3.6 to 3.3.7
- updated CouchbaseNetClient from 1.3.10 to 2.3.8
- updated FakeItEasy, from 1.25.3.0 to 2.3.1
- updated jQuery from 2.2.3 to 3.1.1
- updated jQuery.TypeScript.DefinitelyTyped from 3.0.5 to 3.1.2
- updated jQuery UI from 1.11.4 to 1.12.1
- updated jqueryui.TypeScript.DefinitelyTyped from 1.4.6 to 1.5.1
- updated jquery.validation from 1.14.0 to 1.15.1
- updated jquery.validation.TypeScript.DefinitelyTyped from 0.4.3 to 0.4.5
- updated MsieJavascriptEngine from 1.7.0 to 2.0.0
- updated Newtonsoft.Json from 8.0.3 to 9.0.1
- updated qunit.TypeScript.DefinitelyTyped from 0.3.3 to 0.3.5
- updated RazorGenerator.Templating from 2.3.11 to 2.4.7
- updated Selenium.WebDriver from 2.48.2 to 3.0.0
- updated sortablejs.TypeScript.DefinitelyTyped from 0.1.7 to 0.1.8
- updated StackExchange.Redis from 1.0.488 to 1.1.608
- updated System.Data.SqlLocalDb from 1.14.0 to 1.15.0
- updated toastr.TypeScript.DefinitelyTyped from 0.3.0 to 0.3.1
- removed jquery.event.drag 2.2 package and embedded version 2.3 (from 6pac/SlickGrid) in Serene.Web.Assets as it is compatible with jQuery v3
- added data-field attribute to input fields in product grid (@wldkrd1) [Serene]
- added showing another form in tab sample [Serene]
- removed VS 15 (which is vNext, not 2015) from supported list as it was preventing upload in VSGallery [Serene]
2.4.13 (2016-10-14)
Features:
- added FilterField / FilterValue to UpdatableExtensionAttribute for extension tables that might have a constant value in addition to key matching, e.g. an address extension table with CustomerID / AddressType field
- added FilterField/FilterValue option to MasterDetailRelation and LinkingSetRelation, which works just like UpdatableRelation
- make sure bracket differences don't affect field matching process in UpdatableExtensionBehavior, by removing brackets before expression comparison
- made ClientSide flag/attribute obsolete as it was causing confusion, use NotMapped instead
Bugfixes:
- fix look of static text block sample in IE11 [Serene]
2.4.12 (2016-10-13)
Features:
- added updatable extension attribute and related behavior for 1 to 1 extension tables
- added Static Text Block sample [Serene]
- handle IndexCompare for RowListField type
- added RowField type
Bugfixes:
- fix reference to Q.ErrorHandling.showServiceError in Saltaralle code
2.4.11 (2016-10-06)
Features:
- increase checkbox column width for row selection mixin by 1 due to ie11 text overflow issue
- make source and disabled optional in Select2Item interface
- rename addItem method in Select2Editor that takes two strings to addOption to avoid confusion
- added enabling row selection sample [Serene]
- added user image to user table and navigation (thanks @edson)
2.4.10 (2016-09-16)
Features:
- added quick filter for boolean fields
- made dateRangeQuickFilter method public in DataGrid so it can be customized simpler in StoredProcedureGrid sample
- update bootstrap-slider and fix clash with jquery slider
- add missing cascadeFrom property to declaration of LookupEditorBase in TypeScript
2.4.9 (2016-09-14)
Features:
2.4.8 (2016-09-13)
Bugfixes:
- increase version of Serenity.Web.Assets and publish as SlickGrid is released through its nuget package
2.4.7 (2016-09-13)
Features:
- add optional async post render cleanup support to slickgrid. this opens way to use Serenity widgets in slickgrid, though experimental.
- if async post render delay or async post cleanup delay is less than zero, work synchronously.
Bugfixes:
- shouldn't set ID field to null on insert in LinkingSetRelation, as some users has GUID primary keys without Insertable(false) on them
2.4.6 (2016-09-11)
Bugfixes:
- if replace fields in fileNameFormat of upload editors are foreign / calculated, they might not be available in create. handle this case by reloading row from database before setting file name.
2.4.5 (2016-09-10)
Features:
- dialog types specified in LookupEditor attribute can now be found with or without Dialog suffix
- can specify lookup cache expiration in LookupScriptAttributes with Expiration attribute in seconds
- fix generated dialog code for maximizable option
- added stored procedure grid sample (thanks @mrajalko) [Serene]
- deleted css applies to entire slick grid row (thanks @wldkrd1)
2.4.4 (2016-08-18)
Features:
- option to generate lookup script and related lookup editor attributes in sergen (thanks @rolembergfilho)
- resolve problem with msiejavascriptengine in win10 anniversary update
- add quotes to support spaces in uploaded file names
- added a 3rd option to file name format in upload editors to reference current date/time, e.g. {3:yyyyMMdd}
- ability to reference field values in file name formats of upload editors using |SomeField|
Bugfixes:
- call notLoggedInHandler only if received error code is NotLoggedIn
2.4.3 (2016-08-08)
Features:
- make option name pascal case even if option is not originating from TS in ClientTypesGenerator
- turned on xml docs for Serenity.Core and Serenity.Data on request, others assemblies will follow
Bugfixes:
- close button was showing close text in a recent jQuery ui version
- Q.toId not working properly with negative IDs
- calling SlickRemoteView.updateItems between beginUpdate / endUpdate might cause problems in some cases
- resolve issues with SSDeclarations.ts in some complex legacy projects
2.4.2 (2016-07-29)
Features:
- added sample for searchable Visual Studio Gallery questions and answers in Serene, which also acts as a sample for using non-SQL data sources with Serenity
- fix look of login panel in IE11 (need to not use flexbox for propertygrid, fieldset and form that is not under a dialog)
Bugfixes:
- add missing Serenity.Web.Assets package with rtl slick.grid.min.js
2.4.1 (2016-07-29)
Features:
- serene and slickgrid now has RTL support (thanks @misafer)
2.4.0 (2016-07-27)
Features:
- try to resolve issues with lessc file as some users report nuget doesn't copy it under tools folder
2.3.7 (2016-07-21)
Features:
- added populate linked data sample [Serene]
- added serial auto numbering sample [Serene]
- added product excel import sample [Serene]
Bugfixes:
- fix column ordering not restored properly from persistance
- use sheet name and table style specified properly in excel generator (thanks @Estrusco)
2.3.6 (2016-07-20)
Bugfixes:
- fix error in client side criteria value conversion
2.3.5 (2016-07-20)
Features:
- use an older version of VSSDK.ComponentModelHost to keep compability with VS 2012 & 2013
- try to convert criteria values received from client side to field type, to avoid errors in some db engines like Oracle for dates, and get better performance for indexed fields
2.3.4 (2016-07-19)
Bugfixes:
- fix usage of ROWNUM for Oracle paging queries
2.3.3 (2016-07-18)
Features:
- rename EditorUtils.setReadOnly to setReadonly for overload that takes jQuery parameter
- added readonly dialog sample [Serene]
Bugfixes:
- fix paging for Oracle queries
2.3.2 (2016-07-15)
Features:
- make RetrieveRequest interface members optional in TypeScript
- added get id of inserted record sample [Serene]
- added dialog boxes sample
- auto replace 'f' with '0' for excel date/time display formats
- changed login design using vegas plugin (thanks @jsbUSMBC)
- made login page responsive
2.3.1 (2016-07-13)
Features:
- Serene template size gets down to 2.5MB from 21MB+, by excluding NuGet packages from VSIX
- static assets and code generation tools in Serenity.Web and Serenity.CodeGenerator NuGet packages are moved into new Serenity.Web.Assets and Serenity.Web.Tooling packages, which are separately versioned from other Serenity packages to reduce download sizes.
- converted Flot, iCheck and some other parts in Serene to NuGet references
- disable tslint by adding an empty tslint.json
- added removing add button sample [Serene]
2.2.8 (2016-07-09)
Features:
- added RadioButtonEditor (thanks @Estrusco)
- made RadioButtonEditor work with enums and lookups
- optional GridEditor and GridEditorDialog generation in sergen (thanks @dfaruque)
- added initial values for quick filters sample [Serene]
2.2.7 (2016-07-07)
Bugfixes:
- CascadeField property of LookupEditorBase is not converted to an ES5 property
2.2.6 (2016-07-07)
Bugfixes:
- fix issue with Recaptcha due to their change in response and json deserialization by using tolerant mode
2.2.5 (2016-07-04)
Features:
- ability to generate code for multiple tables at once in sergen (thanks @dfaruque)
- ability to choose which files to generate in sergen. e.g. row, endpoint, grid, page... (thanks @dfaruque)
2.2.4 (2016-07-02)
Bugfixes:
- SaveHandler was updating two times in some cases
- dropdown filter text is lost in filter bar after editing second time
2.2.3 (2016-06-11)
Features:
- search for subdirectories when adding translation json files from a directory
- added pt-BR translations (thanks @rolemberfilho)
- split site texts for Northwind / Samples to separate directories [Serene]
Bugfixes:
- fix datagrid title can't be set if its not null
2.2.2 (2016-06-06)
Features:
- added OracleDialect(thanks @dfaruque)
- Serene and Northwind now works with Oracle [Serene]
- alternative row generation with RowFieldsSurroundWithRegion config option in Sergen for those who likes regions (by @dfaruque)
Bugfixes:
- resolve automatic trimming problem for NotNull fields
2.2.1 (2016-05-28)
Features:
- add ListField as an alias for CustomClassField>. ListField also acts like RowListField when cloning rows, so it clones the list itself.
Bugfixes:
- options defined as property for formatters or editors written in TypeScript couldn't be set
- invalid cast error for Time fields, due to a bug in ADO.NET that converts parameter type to DateTime when you set it to Time!
2.2.0 (2016-05-21)
Features:
- linking set behavior can now load list of selected items in a list request, so it is possible to show them in a grid column, or use it with in combination with a master detail scenario
- showed representative names in customer grid
- master detail relation can now work with non integer keys
- multi level master detail is now possible
- columnselection and includecolumns can be overridden for master detail relation
- conditional row formatting sample [Serene]
2.1.9 (2016-05-19)
Features:
- sergen generates files with UTF-8 preamble (BOM) again. BOM was lost after TFS integration work, though files was still UTF-8.
2.1.8 (2016-05-18)
Bugfixes:
- dialog translation save was broken after a TS conversion
2.1.7 (2016-05-17)
Features:
- sergen generates StreamField for timestamp / rowversion columns, not Int64
- translate image upload editor errors
- show row selection column as [x] in column picker dialog
- don't display row selection column in pdf output [Serene]
2.1.6 (2016-05-16)
Bugfixes:
- addValidationRule stopped working after 2.1.3 due to a typo in conversion of CustomValidation.cs to TypeScript
2.1.5 (2016-05-13)
Features:
- we now have a cute, responsive column picker that works also with touch devices
- integrate sortable.js (https://github.com/RubaXa/Sortable) for column picker
- ability to persist / restore grid settings like visible columns, column widths, sort order, advanced filter (quick filter can't be persisted yet) to local storage, session storage, database or any medium you like. thanks to Mark (@c9482) for sponsoring this feature. how-to is coming.
- compile TypeScript files on project build (in addition to compile on save) of Serene.Web, using tsc.exe as a build step, but reporting TypeScript errors as warnings to avoid potential problems with T4 files [Serene]
- Q.centerDialog to center an auto height dialog after open
- removed Q.arrayClone helper function as Array.slice does the same thing
- fixed some flexbox height issues with IE11
- port Widget, TemplatedWidget and TemplatedDialog to TypeScript
- [BREAKING CHANGE] Widget.create method had to be changed to a more TypeScript compatible signature. Please take TranslationGrid.ts createToolbarExtensions method source from latest Serene
2.1.4 (2016-05-13)
Bugfixes:
- include enums that are not referenced in rows, but only columns/forms in ServerTypings.tt / ServerImports.tt
- fix CustomerDialog not opening due to script error in CustomerOrdersGrid [Serene]
2.1.3 (2016-05-12)
Features:
- made refresh button in grids without text to save space
- update TypeScript typings to latest versions
- added Q.Config.responsiveDialogs parameter to enable responsive for all dialogs without need to add responsive decorator
- added separator option to ToolButton, to put a separator line between groups
- add missing MsieJavascriptEngine reference to Serenity.Web.nuspec
- Serenity.Externals.js and Serenity.Externals.Slick.js is merged into Serenity.CoreLib.js
- made Note dialog responsive [Serene]
- invoke TSC (TypeScript compiler) after generating files with ServerTypings.tt
2.1.2 (2016-05-11)
Features:
- quote file names while calling Kdiff3 and TF.exe to prevent problems with whitespaces
- made code generated by sergen more compatible with ones generated by .tt files
2.1.1 (2016-05-10)
Features:
- Sergen will try to locate TSC and execute it after generating TypeScript code to avoid script errors
- if script project doesn't exist switch to TypeScript generation by default and don't try to generate Saltaralle code
2.1.0 (2016-05-09)
Features:
- Serene no longer comes with Serene.Script project. It's TypeScript only. Developer Guide needs to be updated.
- your existing code written in Saltaralle should continue to work. Please report any issues at GitHub repository.
- all Serene code is ported to TypeScript
- start obsoleting mscorlib.js and linq.js to lower dependencies and library size. can't remove yet as Serenity.Script.UI depends on it.
- linq like first, tryFirst, single etc. extensions in Q
- removed unused jlayout and metisMenu plugins
- IE8 is no longer supported as now we are targeting ES5 (jQuery 2.0 that we used for long time didn't support it anyway)
- make use of Object.defineProperty to make properties like value etc. feel more natural in TypeScript
- added EnumType option to EnumEditor, usable instead of EnumKey
- ability to define quick filters on columns at server side
- quick filters support multiple selection option
- added sortable attribute for controlling column sortability at server side
- multiple and or helpers for client side criteria building
- remove unused xss validation method
- root namespaces doesn't need export keyword to be available in ClientTypes.tt etc.
- HtmlBasicContentEditor in Serene moved to Serenity.Script.UI as HtmlNoteContentEditor
- ClientTypes.tt and ServerTypings.tt works with/without Saltaralle libraries
- all Serene dialogs will use responsive layout, e.g. flexbox by default (requires IE10+, can be turned off)
- Serene products inline editing sample has dropdowns in category and supplier columns
Bugfixes:
- error about restoreCssFromHiddenInit method in Mac/Safari
See full change log at:
https://github.com/volkanceylan/Serenity/blob/master/CHANGELOG.md
WARNING!
VSGallery recently closed Q&A section for all extensions. Please DON'T use Review section below to ask questions. We can't even respond to your reviews. Use GitHub issues for questions at:
https://github.com/volkanceylan/Serenity
| |