Releases: UdashFramework/udash-core
v0.9.1
What's Changed
- Update selenium-java to 4.8.2 by @scala-steward in #1087
- Added
GeneratedSchemaName
for better customization of generated schema names by @ghik in #1095
Full Changelog: v0.9.0...v0.9.1
v0.9.0
It's been a while since the last stable release, it might be a good time to publish one.
Most of the changes in 0.9.x release series improve usability of the framework and fix bugs.
The milestone releases for 0.9.x were used internally at @AVSystem on a regular basis,
so I'm pretty confident that this is the most battle-tested version of Udash available.
Udash maintenance relies on our internal usage patterns.
The framework didn't need much polishing over last years, but we might still be tempted to release a pure Scala
frontend component framework based on Udash should we find resources for a 1.x release.
New Contributors
- @mereszeta made their first contribution in #438
- @catap made their first contribution in #494
- @najder-k made their first contribution in #511
- @OndrejSpanel made their first contribution in #543
- @attomir made their first contribution in #642
- @minettiandrea made their first contribution in #847
- @sebaciv made their first contribution in #1058
Key deprecations
We no longer support udash-charts wrapper in favour of https://scalablytyped.org/ usage.
Property validations were removed and replaced with component-specific validations (#291).
Scala 2.11 and 2.12 is no longer supported.
What's Changed
- Remove Spring from guide by @ddworak in #377
- Remove 2.11 and Bootstrap 3 support by @ddworak in #382
- Support dynamic dropdown items by @ddworak in #381
- Property validation removal by @ddworak in #291
- Added RestDataCompanionWithDeps by @ghik in #406
- Require only ReadableProperty for lang by @ddworak in #383
- Cookie names and values are URL-encoded by @ghik in #422
- Final view removal by @ddworak in #432
- Scala 2.13 by @ghik in #434
- Distinguish full and element-by-element transformation by @ddworak in #449
- Improve type inference for bidirectional property transformations by @ddworak in #452
- Zipped seq properties should notify about element changes by @ddworak in #457
- Avoid fireValueListeners / valueChanged redundancy by @ddworak in #458
- Remove udash-charts by @ddworak in #465
- Remove overdesigned wrappers by @ddworak in #466
- 2.12 removal by @ddworak in #900
- Improve PropertyCreators usage by @ddworak in #464
- Push Seq type verification to implicits for roSubSeq by @ddworak in #463
- Avoid overload for combining SeqProperty elements with another property by @ddworak in #462
- handle exceptions from
onClose
by @ddworak in #468 - View#onClose by @ddworak in #467
- Supress non-forced updates on transformed properties by @ddworak in #474
- Added util for conditional require by @mereszeta in #438
- Fiddle by @ddworak in #480
- Class-generated component ID by @ddworak in #481
- PropertyID removed by @ddworak in #492
- Simplified Udash Listenable by @ddworak in #493
- Introduced support of tags inside translation. by @catap in #494
- Use jsdom version supported by env repo by @ddworak in #506
- Don't emit patches to new listeners in transformToSeq by @ddworak in #507
- Callback sequencer revamp by @ddworak in #504
- Fixed inifinite loop in packageDoc by @najder-k in #511
- Separate DatePicker initialization from options propagation by @bgrochal in #512
- Prevent rerendering of static views by default by @ddworak in #514
- Initial index values for
repeatWithIndex
should not be 0. by @bgrochal in #525 - DocumentFragments should be rendered conditionally by @bgrochal in #526
- Use
jobs.exclude
key instead ofmatrix.exclude
by @bgrochal in #532 - Combined filtered sequences initialization fix by @ddworak in #534
- bootstrap4 without i18n (and RPC) dependency by @ddworak in #539
- Fix BS4 DatePicker initialization with pre-populated input and jQuery callbacks cleanup by @bgrochal in #538
- Fix @transientDefault documentation by @OndrejSpanel in #543
- i18n API simplified by @ddworak in #540
- Fix resource names in JS dependencies by @ddworak in #548
- Avoid linear list usages in routing by @ddworak in #551
- Remove Patch#clearsProperty by @ddworak in #559
- SttpRestClient request configuration by @mowczare in #570
- View rendering improvements by @ddworak in #584
- Non-element node handling in view replacement by @ddworak in #583
- Markdown improvements by @ddworak in #641
- Publish CrossCollections by @ddworak in #645
- Removed
Glyphicons
from docs by @catap in #653 - Added support diferent sides at bootstrap's auto margin by @catap in #649
- REST anchors workaround by @ddworak in #646
- Turn TranslationKeys into case classes by @attomir in #642
- Added
udash.local
andguide.udash.local
to guide's vhost. by @catap in #660 - Switch to use
Url
atredirectTo
andchangeUrl
by @catap in #663 - Optional query/header/cookie/body parameter support by @ghik in #661
- Remove ReadableProperty#readable by @ddworak in #686
- API proposal: ReadableProperty#mirror by @ddworak in #687
- Fix view renderer for nested views by @ddworak in #701
- guide: use openjdk11 as base image by @catap in #710
- FileService: a way to work with file at frontend by @catap in #656
- Use GitHub Actions by @ddworak in #705
- Remove silencer by @ddworak in #722
- ConnectionStatus should be final by @Starzu in #723
- Fix repeat init with empty SeqProperty by @Starzu in #763
- Fix "Key not found" error in
repeatWithIndex
by @Starzu in #776 - REST server can be now implemented directly as a class, without API trait by @ghik in #821
- Ignore scaladoc and publish empty javadoc jars by @ghik in #823
- Fix show/hide events in UdashDatePicker by @ddworak in #825
- Fix repeat with DocumentFragments by @ddworak in #834
- Added bindings for datetime/date/time inputs by @mereszeta in #832
- Handle routing failure on reload by @ddworak in #836
- Introduce CallLogging#logAll by @ddworak in #843
- jQuery-less application init by @ddworak in #839
- Unification of forwarders by @ddworak in https://github....
v0.8.0
We - the Udash team @AVSystem - are proud to announce the availability of Udash 0.8.0. 🎉 It’s been a long and productive year since 0.7.0 release with over 1100 commits and a ton of features and improvements to the framework.
Udash 0.8 is not binary backwards compatible with 0.7, although from our experience in internal product upgrades, the update should not pose any issues undetected by the Scala compiler. Please note that 0.8.x
is the last release series with Scala 2.11 support, as we’ll be moving to support 2.13 in 0.9.x
. We always aim to support at least 2 latest stable Scala major versions, so 2.12 will still be supported (at least until 2.14.0 is widely available).
You might’ve noticed that we’re a team now as opposed to a single maintainer, which is both good and bad news, since in this case it doesn’t only mean more resources, but also that the previous maintainer, @Starzu, went on to follow other projects (involving Udash from what we heard!). We want to thank Mateusz for his work and we’re very happy to have him as an active member of the @UdashFramework organization and community. In case you need a point of contact about anything regarding Udash, I(@ddworak) had stepped up to the role of the main maintainer now.
We want Udash to enable developers to build frontend applications mostly based on their existing Scala experience. The framework has been a great success for our full-stack teams and has been extensively deployed to production since its first inception 4 years ago. We’re now focused on polishing existing features of the framework to allow easier entry for Scala developers of all levels. Please feel free to submit issues, PRs or hit us up on our Gitter channel - any help or feedback is highly appreciated.
Key changes
- Udash artifacts are now simpler - the JVM and JS dependencies are no longer distinguished by name, so you can just include e.g.
"io.udash" %%% "udash-core" % “0.8.0”
in your shared project, no more-backend
,-shared
and-frontend
. udash-rest
was completely revamped. It is now an independent module, has more complete support on both front- and back-end and generates shiny OpenAPI specs. The default backend is based on sttp with alternative Jetty implementation inrest-jetty
. Make sure to check it out on https://guide.udash.io/rest#overview.- Properties & bindings received a lot of love with better support for collections, less magic/macros, covariance, better callback handling and a ton of bugfixes.
udash-bootstrap4
module wrapping Bootstrap 4 components was added with FontAwesome 5.10.1. Bootstrap 3 goes EOL and will be only bugfixed across0.8.x
minor releases to eventually disappear in 0.9.0.- As always, all of our dependencies are updated, from now on with the help of Scala Steward.
- All of our demos in Udash Guide are up-to-date and open source, with code snippets generated via macros. Now you can be twice as sure it works in your code as well :)
- We’re now successfully testing against OpenJDK11 and Graal.
Implemented enhancements:
- Cookie parameters #240
- UdashDropdown in Bootstrap 4 #243
- Bootstrap 4 wrapper #205
- Support REST interfaces exposing #207
- REST: Allow multipart RESTName #200
- REST: incremental compilation support #199
- Support application/x-www-form-urlencoded #198
Fixed bugs:
- SeqPropertyCreators not created for Seqs nested in Properties #321
- Killed binding fires again #282
- UrlChangeProvider throws error when clicking anchor elements that don't have an href attribute #277
- Divergent Implicit Type Error for SeqProperty #271
A complete list of merged pull requests is appended to the end of these release notes.
What’s next?
In the 0.9.x
series we intend to:
- Add cats compatibility module.
- Rework
udash-rpc
module for more customizability and less dependencies with pure Scala implementation. - Reduce the responsibility of Properties (e.g. by moving validations to components) and allow uniform usage across the API.
- Simplify
Binding
cleanup for dynamic views. - Remove jQuery requirement from charts module.
- Merge
utils
package intocore
. - Remove Bootstrap 3 module in favour of new Bootstrap 4 one.
Credits
This release wouldn’t happen without the help of our wonderful committers - thanks to all of you for the great work!
commits added removed
329 59862 20691 Mateusz Starzec <[email protected]>
226 5820 29546 Dawid Dworak <[email protected]>
173 12483 7678 ghik <[email protected]>
64 5902 5901 Michał Wolny <[email protected]>
36 40 40 Scala Steward <[email protected]>
15 7256 1357 malchik <[email protected]>
13 434 4157 bgrochal <[email protected]>
10 342 61 Mateusz Owczarek <[email protected]>
7 7338 160 Sören Brunk <[email protected]>
5 68 41 Kamil Pietruszka <[email protected]>
4 71 58 bartpr <[email protected]>
3 61 35 Grzegorz Kozłowski <[email protected]>
3 45 9 smiklos <[email protected]>
2 2 2 Leonard Ehrenfried <[email protected]>
1 3 1 Szymon Seget <[email protected]>
1 2 2 Gregory <[email protected]>
1 1 1 peteraa <[email protected]>
1 1 1 Kyle Goodale <[email protected]>
Merged pull requests:
- B4 missing
no-gutters
style #374 - FontAwesome 5.10.1 #371
- Date Range Picker and List Group BS Guides restoration #370
- Tempus Dominus date picker fixes #369
- Final 0.8.0 updates #368
- Allow unboxed series data #367
- Fix broken brand name style #361
- Fix produce updates on SeqFrag / DocumentFragments #350
- Bootstrap4 improvements #346
- Covariant ReadableProperties #348
- transformToSeq fixes #347
- showIf/Else with simple conditions #341
- Add committer list generation script #337
- Single file support #336
- Remove Bootstrap-only component from default io.udash API #324
- SeqPropertyCreator simplified #322
- Use coursier for fetching plugins as well #320
- Test on OpenJDK 11 with Graal #318
- Remove GNU GPL from guide #313
- Common build.sbt #309
- Driver update #303
- Seq subProp regressions fix #300
- PropertyTest split #297
- Automatic demo snippet generation PoC #284
- Share platform-independent CSS utils #289
- Allow replacing current state instead of pushing a new one #287
- Callback queuing fixes #285
- Callback queuing cleanup #283
- Fixed typo (.fixedWidht -> .fixedWidth) #281
- rest-jetty module with Jetty based REST client #280
- Handle anchor without href #278
- Property implicits cleanup #276
- Initial doc update before 0.8 #269
- RestServlet now has a configurable limit on request payload size #268
- Bootstrap4 remastere...
v0.7.2
- Atmosphere security upgrade (Atmosphere/atmosphere#2349)
v0.6.2
- Atmosphere security upgrade (Atmosphere/atmosphere#2349)
v0.7.1
v0.7.0
General changes
- Numerous performance improvements in Properties
- Improved serialization performance in RPC and REST
- Fixed double encoding in RPC and REST
- Libraries upgrade:
- Scala.js: 0.6.22 -> 0.6.23
- Scala.js DOM: 0.9.4 -> 0.9.6
- Udash jQuery wrapper: 1.1.0 -> 1.2.0 (jQuery v3.3.1) - changelog
- AVSystem Scala Commons: 1.25.5 -> 1.28.0
- Silencer: 0.6 -> 1.0
- Atmosphere: 2.4.15 -> 2.4.24
- Scala Logging: 3.7.2 -> 3.9.0
- Moment.js: 2.19.4 -> 2.22.0
Udash Core - Guide
- Routing without
#
(#98 & #185)- Example usage in Udash Guide (UdashFramework/udash-guide@e5c5fc4)
- Example usage in Udash Giter8 template (UdashFramework/udash.g8@8d9b048)
- Refactored API of input bindings (#161 & #186 & #191)
- All bindings return
InputBinding
- Always two arguments lists: behavior and apperance
- Selectors API is more generic now
- All bindings return
- Transformation methods on
Property
no longer listen on the origin if it's not required (#195 & #201) - Immutable properties (#176)
_.toProperty
,_.toModelProperty
and_.toSeqProperty
extension methods
BlankValue
type class (#179)Property.blank
constructor- Deprecation of
Property.empty
ReadableWrapper
and_.readable
method onProperty
for safe returning properties with read-only access - instead of_.transform(identity)
(#196)- New
FileUploadState.NotStarted
as blank value forProperty[FileUploadState]
(06de0fa) transformToSeq
handles subproperties changes (#165)- Implicit conversion from
Opt[T]
toModifier
(#178) - InlineStyleOps for convenient inline styles reactive property binding (#193)
Seq[Property[A]] ->
ReadableSeqProperty[A]` combine extension method (#192)HasGenCodecAndModelPropertyCreator
- mixin for companion objects of classes withGenCodec
andModelPropertyCreator
(#181)- Ids of properties are now sequential numbers instead of UUID (#177)
io.udash.Window
is deprecated now, useorg.scalajs.dom.window
instead (#98 & #185)
Udash RPC - Guide
- Data in RPC messages is no longer double-encoded (#175 & #183)
- The
@RPC
and@REST
are no longer required. Each RPC/REST trait needs companion object extendingRPCCompanion
fromRPC/RESTFramework
(#187) - Call timeout is exposed in
DefaultServerRPC
constructor now (#182) - Customizable logging of RPC call failures (#190)
CallLogging
handles also fire&forget requesets now (#194)- Removed JAWN dependency (#170)
UdashRPCFramework
explicitly usesJsonString
wrapper asRawValue
(#175 & #164)
Udash REST - Guide
Migration from v0.6
You can also take a look at migration PR in Udash Guide. UdashFramework/udash-guide#42
- Creation of empty properties is deprecated now, you should always initialize property directly or define
Blank
value and useProperty.blank
constructor. - Do not use
WindowUrlChangeProvider.currentFragment
in order to obtain the current routing path. UseapplicationInstance.currentUrl
instead. io.udash.Window
is deprecated now, useorg.scalajs.dom.window
instead.- The format of the serialized data (RPC/REST) will change after upgrade from Udash 0.6.
- The
@RPC
and@REST
are no longer required. Each RPC/REST trait needs companion object extendingRPCCompanion
fromRPC/RESTFramework
, usually:io.udash.rpc.DefaultClientUdashRPCFramework
,io.udash.rpc.DefaultServerUdashRPCFramework
. FileUploadState
properties are initialized withNotStarted
by default (#179)
v0.6.1
v0.6.0
General changes
- New modules:
udash-auth
andudash-css
- Optimization of a generated JavaScript size (#143 & #144 & AVSystem/scala-commons#42)
- Udash Generator is deprecated. Use Udash Giter8 Template instead.
- Libraries upgrade:
- Scala.js: 0.6.16 -> 0.6.22
- Scala.js DOM: 0.9.2 -> 0.9.4
- Udash jQuery wrapper: 1.0.1 -> 1.1.0 (jQuery v3.2.1)
- AVSystem Scala Commons: 1.20.3 -> 1.25.5
- Silencer: 0.5 -> 0.6
- ScalaTags: 0.6.5 -> 0.6.7
- Atmosphere: 2.4.9 -> 2.4.15
- RosHTTP: 2.0.1 -> 2.1.0
- Scala Logging: 3.5.0 -> 3.7.2
- Eonasdan Bootstrap DatetimePicker: 4.17.43 -> 4.17.47
- Moment.js: 2.18.1 -> 2.19.4
Udash Core - Guide
- Properties performance improvements (#139 & #144)
- Properties are now cross-compilable (#151)
- A standard class can be used as a ModelProperty template (#151)
- Removed
ImmutableValue
-> Property can contain anything now (#151) ModelPropertyCreator
has to be created explicitly (object T extends HasModelPropertyCreator[T]
orModelPropertyCreator.materialize[T]
) (#151)CallbackSequencer
is no longer an object - now it's a ThreadLocal (#151)CrossLogging
- a cross-compiled logger (#148)- Views and States hierarchy refactoring (#109)
- DOM bindings - handling nested bindings clean up (#118)
- Properties - new methods:
set
withforce
parameter,listenOnce
,clearListeners
(#117) Registration
class: new methodrestart
(#117)StaticViewFactory
is no longer abstract (#116)- Views are no longer rendered if presenter thrown an exception in
handleState
method (#116) - Application handles errors in routing -
onRoutingFailure
(#116) - Application
reload
method - rerenders whole application (#121) - New bindings:
showIfElse
andrepeatWithIndex
(#120) - Fixed
ModelProperty
initialization (#127) - DOM Bindings get custom DOM manipulation methods (#122)
- DOM Bindings use
Node
instead ofElement
now (#122) - Fixed problem with listeners modifying listeners set (#122)
- Removed
ExecutionContext
from sjs packages and Properties (#128) - Listener registration with initial call (#129)
- View will not be recreated when a root state changed but the
ViewFactory
is the same (#134) - More user-friendly errors in
Application
andViewRenderer
(#147) - Renamed
/:/
to/
(#150) - Moved all the routing-related stuff to RoutingRegistry to limit its visibility as much as possible (#150)
Udash RPC - Guide
- RPC calls failure interceptors (#115)
- RPC call timeout exception:
UsesServerRPC.CallTimeout
(#115) - GenCodec instead of GenCodec.Auto in RPC and REST (#140)
- Client's connection status callbacks (#156)
Udash REST - Guide
- Server-side implementation for Udash REST interfaces (#107)
- REST implementation utils moved to
RESTConverters
(#133 - thanks @leonardehrenfried) - Add ability to specify protocol for rest adapters (#138 - thanks @leonardehrenfried and @esamson)
Udash CSS - Guide
- Support for cross-compiled CSS - uses DSL from ScalaCSS with custom macros for cross-compilation. (#105 & #123)
- Puts only CSS class names into the JS code. You can render styles on a server-side and server them as a standard CSS file.
Udash Bootstrap - Guide
- Components accept
Readable
versions of properties whenever possible (#114) - Datepicker implementation cleanup (#106)
UdashIcons
replacesIcons
(#130 and #142)- FontAwesome special modifiers (#157)
onSubmit
argument in theUdashForm
constructors (#158)- Added missing
ComponentId
s in theUdashForm
elements (#158) - Support for i18n in
UdashPopover
andUdashTooltip
(#158) UdashPopover
andUdashTooltip
events moved to theTooltipEvent
object (#158)
Udash Charts - Guide
highcharts
initializer without configuration argument (#119)
Udash Auth - Guide
- Support for user authorization in UI and backend RPC endpoints (#116)
Migration from v0.5
- Do NOT call
init()
on yourDefaultAtmosphereFramework
. Applications from the old versions of Udash Generator call this method in theApplicationServer
class. (#104) - You don't have to define
ImmutableValue[T]
in order to createProperty[T]
. Just remove all the usages ofImmutableValue
. (#151) - You have to declare
ModelPropertyCreator[T]
for the classT
if you want to createModelProperty[T]
. (#151)
object T extends HasModelPropertyCreator[T]
or
object T {
implicit val mpc: ModelPropertyCreator[T] = ModelPropertyCreator.materialize[T]
}
- If you use hierarchical states, replace the
State
trait with theContainerState
andFinalState
traits. Remember to replace alsoView
withContainerView
andFinalView
respectively. Check Udash Guide for more details. (#109) - Frontend routing registry: (#150)
- replace
/:/
with/
- replace
- You have to declare
GenCodec[T]
for the classT
if you want to use it in RPC communication. (#140)
object T extends HasGenCodec[T]
or
object T {
implicit val codec: GenCodec[T] = GenCodec.materialize[T]
}
- Replace events from
UdashPopover
andUdashTooltip
with these defined in theTooltipEvent
object (#158)- replace
io.udash.utils.Bidirectional
withbidirectional
fromRoutingRegistry
- replace
v0.5.0
General changes
- Support for Scala 2.12
- Libraries upgrade:
- Scala.js: 0.6.12 -> 0.6.16
- ScalaTags: 0.6.0 -> 0.6.5
- AVSystem Scala Commons: 1.17.2 -> 1.20.3
- Atmosphere: 2.4.5 -> 2.4.9
- JAWN: 0.9.0 -> 0.10.4
- RosHTTP: 1.1.0 -> 2.0.1
- Bootstrap: 3.3.7 -> 3.3.7-1
Udash Core
- PropertyCreator - duplication warnings (#91)
- Current state of application is available as
Property
(#89) Select
can display custom labels (#76).empty
in properties companions (#85)Property
-touch()
andclearValidators()
(#92)- Fixed bug in input debouncing (#78)
- Minified version of JS dependencies (#83)
- Fixed frontend logger (#87)
Udash RPC
- Serialization of RPC exceptions (#84)
Udash i18n
GenCodec
forTranslationKey0
(#82)TranslationKey
s reduce method (#82)Untranslatable
as subtype ofTranslationKey0
(#82)
Udash Bootstrap
Udash Charts
- Raw Scala.js wrapper of HighCharts (#95)
Migration from v0.4
- Now if
PropertyCreator
is created by macro twice, duplication warning will be generated. It's recommended to createPropertyCreator
in companion object of your model. (#91) - Bootstrap Date Picker takes
Option[Date]
now (#101) Select
can display custom labels, you can provideSelect.defaultLabel
as label factory (#76)