Skip to content

Releases: UdashFramework/udash-core

v0.9.1

14 Aug 13:27
a8ea1ee
Compare
Choose a tag to compare

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

20 Mar 16:09
10832eb
Compare
Choose a tag to compare

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

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

Read more

v0.8.0

23 Aug 14:44
149e0f6
Compare
Choose a tag to compare

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 in rest-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 across 0.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

Full Changelog

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-rpcmodule 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 into core.
  • 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...
Read more

v0.7.2

16 Aug 09:18
Compare
Choose a tag to compare

v0.6.2

16 Aug 09:17
Compare
Choose a tag to compare

v0.7.1

05 Jul 11:00
Compare
Choose a tag to compare

Fixes

  • Lazy initialization of the UrlChangeProviders (#209)
  • Improved handling of fragment change in WindowUrlPathChangeProvider (#209)

v0.7.0

29 Jun 07:56
Compare
Choose a tag to compare

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)
  • 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
  • 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 on Property for safe returning properties with read-only access - instead of _.transform(identity) (#196)
  • New FileUploadState.NotStarted as blank value for Property[FileUploadState] (06de0fa)
  • transformToSeq handles subproperties changes (#165)
  • Implicit conversion from Opt[T] to Modifier (#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 with GenCodec and ModelPropertyCreator (#181)
  • Ids of properties are now sequential numbers instead of UUID (#177)
  • io.udash.Window is deprecated now, use org.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 extending RPCCompanion from RPC/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 uses JsonString wrapper as RawValue (#175 & #164)

Udash REST - Guide

  • Removed JAWN dependency (#170)
  • Fixed double encoding of URL part arguments (#173)

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 use Property.blank constructor.
  • Do not use WindowUrlChangeProvider.currentFragment in order to obtain the current routing path. Use applicationInstance.currentUrl instead.
  • io.udash.Window is deprecated now, use org.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 extending RPCCompanion from RPC/RESTFramework, usually: io.udash.rpc.DefaultClientUdashRPCFramework, io.udash.rpc.DefaultServerUdashRPCFramework.
  • FileUploadState properties are initialized with NotStarted by default (#179)

v0.6.1

13 Apr 09:21
Compare
Choose a tag to compare

Fixed problem with double-encoding of URL part parameters in Udash REST.

v0.6.0

02 Feb 10:55
Compare
Choose a tag to compare

General changes

  • New modules: udash-auth and udash-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] or ModelPropertyCreator.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 with force parameter, listenOnce, clearListeners (#117)
  • Registration class: new method restart (#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 and repeatWithIndex (#120)
  • Fixed ModelProperty initialization (#127)
  • DOM Bindings get custom DOM manipulation methods (#122)
  • DOM Bindings use Node instead of Element 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 and ViewRenderer (#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

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 replaces Icons (#130 and #142)
  • FontAwesome special modifiers (#157)
  • onSubmit argument in the UdashForm constructors (#158)
  • Added missing ComponentIds in the UdashForm elements (#158)
  • Support for i18n in UdashPopover and UdashTooltip (#158)
  • UdashPopover and UdashTooltip events moved to the TooltipEvent 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 your DefaultAtmosphereFramework. Applications from the old versions of Udash Generator call this method in the ApplicationServer class. (#104)
  • You don't have to define ImmutableValue[T] in order to create Property[T]. Just remove all the usages of ImmutableValue. (#151)
  • You have to declare ModelPropertyCreator[T] for the class T if you want to create ModelProperty[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 the ContainerState and FinalState traits. Remember to replace also View with ContainerView and FinalView respectively. Check Udash Guide for more details. (#109)
  • Frontend routing registry: (#150)
    • replace /:/ with /
  • You have to declare GenCodec[T] for the class T 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 and UdashTooltip with these defined in the TooltipEvent object (#158)
    • replace io.udash.utils.Bidirectional with bidirectional from RoutingRegistry

v0.5.0

06 Jun 12:32
Compare
Choose a tag to compare

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() and clearValidators() (#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 for TranslationKey0 (#82)
  • TranslationKeys reduce method (#82)
  • Untranslatable as subtype of TranslationKey0 (#82)

Udash Bootstrap

  • Handling null input in date picker (#97 && #101)

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 create PropertyCreator in companion object of your model. (#91)
  • Bootstrap Date Picker takes Option[Date] now (#101)
  • Select can display custom labels, you can provide Select.defaultLabel as label factory (#76)