All Projects → billstclair → Elm Port Funnel

billstclair / Elm Port Funnel

Licence: mit
Funnel ALL your port modules through a single pair of ports

Programming Languages

elm
856 projects

Funneling Your Ports

billstclair/elm-port-funnel allows you to use a single outgoing/incoming pair of ports to communicate with the JavaScript for any number of PortFunnel-aware modules, which I'm going to call "funnels".

On the JavaScript side, you pick a directory for PortFunnel.js and the JavaScript files for the funnels. Some boilerplate JS in your index.html file loads PortFunnel.js, and tells it the names of the funnels. It takes care of loading them and wiring them up.

On the Elm side, you create the two ports, tell the PortFunnel module about them with a ModuleDesc instance, call the action functions in the funnel modules, in response to events, and dispatch off of the name field in the GenericMessage you get from your subscription port, to process that message in each specific module, and handle its Result. This is illustrated by three top-level applications in the example directory.

DEVELOPERS-GUIDE.md has details for people who want to write funnels. For simple examples, see the files Echo.elm and AddXY.elm in the src/PortFunnel directory, and the corresponding Echo.js and AddXY.js files in the example/site/js/PortFunnel directory.

The README in the example directory tells you how to configure the JavaScript for your own funnels. The main example is live at billstclair.github.io/elm-port-funnel.

Existing PortFunnel Modules

PortFunnel.Echo and PortFunnel.AddXY, which ship with billstclair/elm-port-funnel, are the simple, canonical example modules. Below is a list of other funnel modules. If you write one, please add it to this list by submitting a pull request on this README file.

Credit

Thank you to Murphy Randall (@splodingsocks on Twitter and Elm Slack), whose elm-conf 2017 talk introduced me to the idea that billstclair/elm-port-funnel takes to its logical extreme.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].