modem

modem: a device that converts signals produced by one type of device (such as a computer) to a form compatible with another (such as a telephone) – Merriam-Webster

Modem is a little library for Lustre that helps you manage navigation and URLs in the browser. It converts url requests into messages that you can handle in your app’s update function. Modem isn’t a router, but it can help you build one!

Types

pub type Options {
  Options(
    handle_internal_links: Bool,
    handle_external_links: Bool,
  )
}

Constructors

  • Options(handle_internal_links: Bool, handle_external_links: Bool)

    Arguments

    • handle_internal_links

      Enable this option if you’d like to trigger your url change handler when a link to the same domain is clicked. When enabled, internal links will always update the url shown in the browser’s address bar but they won’t trigger a page load.

    • handle_external_links

      Enable this option if you’d like to trigger your url change handler even when the link is to some external domain. You might want to do this for example to save some state in your app before the user navigates away.

      You will need to manually call load to actually navigate to the external link!

Functions

pub fn advanced(
  options: Options,
  handler: fn(Uri) -> a,
) -> Effect(a)

Initialise an advanced modem that lets you configure what types of links to intercept. Take a look at the Options type for info on what can be configured.

pub fn back(steps: Int) -> Effect(a)

The browser maintains a history stack of all the url’s the user has visited. This function lets you move back the given number of steps in that stack. If you reach the beginning of the stack, further attempts to go back will do nothing (unfortunately time travel is not quite possible yet).

Note: if you navigate back and then push a new url, you will clear the forward history of the stack.

Note: you can go too far back and end up navigating the user off your app if you’re not careful.

pub fn forward(steps: Int) -> Effect(a)

The browser maintains a history stack of all the url’s the user has visited. This function lets you move forward the given number of steps in that stack. If you reach the end of the stack, further attempts to go forward will do nothing (unfortunately time travel is not quite possible yet).

Note: you can go too far forward and end up navigating the user off your app if you’re not careful.

pub fn init(handler: fn(Uri) -> a) -> Effect(a)

Initialise a simple modem that intercepts internal links and sends them to your update function through the provided handler.

pub fn load(uri: Uri) -> Effect(a)

Load a new uri. This will always trigger a full page reload even if the uri is relative or the same as the current page.

Note: if you load a new uri while the user has navigated using the back or forward buttons, you will clear any forward history in the stack!

pub fn push(uri: Uri) -> Effect(a)

Push a new uri to the browser’s history stack. If the uri has the same domain and port as the current page, or the uri is relative, this will not trigger a full page reload.

Note: if you push a new uri while the user has navigated using the back or forward buttons, you will clear any forward history in the stack!

pub fn replace(uri: Uri) -> Effect(a)

Replace the current uri in the browser’s history stack. If the uri has the same domain and port as the current page, or the uri is relative, this will not trigger a full page reload.

Search Document