Skip to content

Releases: maxence-charriere/go-app

App resize listener

08 Jan 11:21
Compare
Choose a tag to compare

Hello there,

This release brings a way to be notified that that app window size changed within components. It can be done by implementing the Resizer interface:

type myCompo struct{
    app.Compo
}

func (c *myCompo) OnAppResize(ctx app.Context) {
    // Handle app resizing.
}

It can be quite a handful when building layout components. Shell and Flow has been refactored and now uses this mechanism.

Context app update fix

05 Jan 09:12
Compare
Choose a tag to compare
  • Context in OnMount now correctly reports whether an app update is available.

Blank navigation fix

05 Jan 06:53
db9f244
Compare
Choose a tag to compare

Hello,
Small patch today:

  • Fixed a bug that prevented _bank navigation for paths within the app host
  • Context now have a variable that reports whether the app has been updated in the background

Detect app update

04 Jan 11:30
de538c3
Compare
Choose a tag to compare

Hello there,

This version introduces the Updater interface.
It allows a component to be notified that the app has been updated.

This will allow notifying your users that the app has been updated and modifications are available by reloading the page.

Check the Lifecycle article in the doc to see how to use it.

Improve BrowserStorage + Fixes

29 Dec 14:46
Compare
Choose a tag to compare

Hello,
Here is the changelog:

Documentation & fixes

26 Nov 16:24
0961ba4
Compare
Choose a tag to compare

Hello there.
Big update today since this release introduces a dogfooded documentation for the package:

go-app documentation

Next to this here are the fixes:

  • Iframe attributes have been added
  • Fixed crash when using Javascript function New and Call with interface{}
  • manifest.json has been renamed manifest.webmanifest in order to follow Google PWA guidelines

This release also introduces some experimental widgets that are layout related:

Those widgets are used in the documentation introduced above. Since they are experimental, their API may change.

Bug fixes

25 Aug 05:11
7a55893
Compare
Choose a tag to compare

Hello,

This version provides the following changes:

  • Fixed a bug where boolean attributes were not updated
  • Min() and Max() HTML element functions now take an interface{} argument rather than string

Ads.txt Proxy fixes

12 Aug 11:12
96f2622
Compare
Choose a tag to compare

Hello,

Here is a small release that brings the following:

  • The handler now proxy an ads.txt file that is located at the root of the static files directory. This allows complying with AdSense requirements.
  • app.Input().Step(v int) has been changed to app.Input().Step(v float64) since step can be a decimal value.

Fixes and improvements

11 Jul 14:10
Compare
Choose a tag to compare

Hello,

Here is v7.0.3 which introduces the following changes:

  • Fixed bug that did not remove event handlers when components were dismounted
  • Refactored how scripts are loaded in the Handler by using defer attribute
  • Added Iframe missing attributes
  • Generated GitHub pages are now installable with Chrome
# How to update:
go get -u github.com/maxence-charriere/go-app/v7

Version 7

28 Jun 18:23
Compare
Choose a tag to compare

Hello there,
I'm thrilled to release version 7 of go-app.

This version is focused on internal improvements that improve code quality and maintainability. Unfortunately, those improvements bring a few small changes in the API, which is why there is a version bump.

What is new?

  • Context that is bound to a UI element lifecycle. The context can be used with functions that accept context.Context. Contexts are canceled when the UI element they are bound with is dismounted. It is passed in Mounter and Navigator interfaces, and event handlers.

  • TestMatch: testing api to unit test specific UI element:

    tree := app.Div().Body(
        app.H2().Body(
            app.Text("foo"),
        ),
        app.P().Body(
            app.Text("bar"),
        ),
    )
    
    // Testing root:
    err := app.TestMatch(tree, app.TestUIDescriptor{
        Path:     TestPath(),
        Expected: app.Div(),
    })
    // OK => err == nil
    
    // Testing h2:
    err := app.TestMatch(tree, app.TestUIDescriptor{
        Path:     TestPath(0),
        Expected: app.H3(),
    })
    // KO => err != nil because we ask h2 to match with h3
    
    // Testing text from p:
    err = app.TestMatch(tree, app.TestUIDescriptor{
        Path:     TestPath(1, 0),
        Expected: app.Text("bar"),
    })
    // OK => err == nil
  • Support for aria HTML element property: Fix #419

    app.Div().
        Aria("foo", "bar").
        Text("foobar")
  • A default logger can be set

  • go-app PWA can now be deployed a GitHub Page with the help of GenerateStaticWebsite function:

    package main
    
    import (
        "fmt"
    
        "github.com/maxence-charriere/go-app/v7/pkg/app"
    )
    
    func main() {
        err := app.GenerateStaticWebsite("DST_DIR", &app.Handler{
      	  Name:      "Github Pages Hello",
      	  Title:     "Github Pages Hello",
      	  Resources: app.GitHubPages("goapp-github-pages"),
        })
    
        if err != nil {
      	  fmt.Println(err)
      	  return
        }
    
        fmt.Println("static website generated")
    }

    It generates files that can directly be dropped into a GitHub repository to serve the PWA.
    See live example: https://maxence-charriere.github.io/goapp-github-pages/

  • Support for robots.txt: A robots file is now served by the Handler when /web/robots.txt exists

  • Internal code refactored to be more maintainable

  • Serving static resources can now be customized by implementing the ResourceProvider interface

How to migrate from v6 to v7

go-app v7 mainly introduced internal improvements. Despite trying to keep the API the same as v6, those changes resulted in API minor modifications that break compatibility.

Here is a guide on how to adapt v6 code to make it work with v7.

Imports

Go import instructions using v6:

import (
    "github.com/maxence-charriere/go-app/v6/pkg/app"
)

must be changed to v7:

import (
    "github.com/maxence-charriere/go-app/v7/pkg/app"
)

http.Handler

  • RootDir field has been removed.
    Handler now uses the Resources field to define where app resources and static resources are located. This has a default value that is retro compatible with local static resources. If static resources are located on a remote bucket, use the following:

    app.Handler{
        Resources: app.RemoteBucket("BUCKET_URL"),
    }
  • UseMinimalDefaultStyles field has been removed.
    go-app now use CSS styles that only apply to the loading screen and context menus. The former default styles have been removed since they could conflict with some CSS frameworks.

Component interfaces

Some interfaces to deals with the lifecycle of components have been modified to take a context as the first argument. Component with methods that satisfies the following interfaces must be updated:

  • Mounter: OnMount() become OnMount(ctx app.Context)
  • Navigator: OnNav(u *url.URL) become OnNav(ctx app.Context u *url.URL)

Event handlers

EventHandler function signature has been also modified to take a context as the first argument:

  • func(src app.Value, e app.Event) become func(ctx app.Context, e app.Event)

  • Source is now accessed from the context:

    // Event handler that retrieve input value when onchange is fired:
    func (c *myCompo) OnChange(ctx app.Context, e app.Event) {
        v := ctx.JSSrc().Get("value")
    }