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
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
| |