•  


GitHub - hayleigh-dot-dev/modem: A friendly Lustre package to help you build a router, handle links, and manage URLs.
Skip to content

A friendly Lustre package to help you build a router, handle links, and manage URLs.

Notifications You must be signed in to change notification settings

hayleigh-dot-dev/modem

Folders and files

Name Name
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

modem

Package Version Hex Docs

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!

Quickstart

Getting started with modem is easy! Most application's can get by with pattern matching on a url's path: no complicated router setup required. Let's see what that looks like with modem:

gleam add lustre modem
import
 gleam/uri
.
{
type
 Uri
}

import
 lustre

import
 lustre/attribute

import
 lustre/element
.
{
type
 Element
}

import
 lustre/element/html

import
 lustre/effect
.
{
type
 Effect
}

import
 modem


pub
 fn
 main
(
)
 {

  lustre
.
application
(
init
,
 update
,
 view
)

}


pub
 type
 Route
 {

  Wibble

  Wobble

}


fn
 init
(
_
)
 ->
 #
(
Route
,
 Effect
(
Msg
)
)
 {

  #
(
Wibble
,
 modem
.
init
(
on_url_change
)
)

}


fn
 on_url_change
(
uri
:
 Uri
)
 ->
 Msg
 {

  case
 uri
.
path_segments
(
uri
.
path
)
 {

    [
"wibble"
]
 ->
 OnRouteChange
(
Wibble
)

    [
"wobble"
]
 ->
 OnRouteChange
(
Wobble
)

    _
 ->
 OnRouteChange
(
Wibble
)

  }

}


pub
 type
 Msg
 {

  OnRouteChange
(
Route
)

}


fn
 update
(
_
,
 msg
:
 Msg
)
 ->
 #
(
Route
,
 Effect
(
Msg
)
)
 {

  case
 msg
 {

    OnRouteChange
(
route
)
 ->
 #
(
route
,
 effect
.
none
(
)
)

  }

}


fn
 view
(
route
:
 Route
)
 ->
 Element
(
Msg
)
 {

  html
.
div
(
[
]
,
 [

    html
.
nav
(
[
]
,
 [

      html
.
a
(
[
attribute
.
href
(
"/wibble"
)
]
,
 [
element
.
text
(
"Go to wibble"
)
]
)
,

      html
.
a
(
[
attribute
.
href
(
"/wobble"
)
]
,
 [
element
.
text
(
"Go to wobble"
)
]
)
,

    ]
)
,

    case
 route
 {

      Wibble
 ->
 html
.
h1
(
[
]
,
 [
element
.
text
(
"You're on wibble"
)
]
)

      Wobble
 ->
 html
.
h1
(
[
]
,
 [
element
.
text
(
"You're on wobble"
)
]
)

    }
,

  ]
)

}

Here's a breakdown of what's happening:

  • We define a Route type that represents the page or route we're currently on.

  • modem.init is an Effect that intercepts clicks to local links and browser back/forward navigation and lets you handle them.

  • on_url_change is a function we write that takes an incoming Uri and converts it to our app's Msg type.

  • In our view we can just use normal html.a. elements: no special link component necessary. Pattern matching on the Route type lets us render different content for each page.

- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본