mirror of
https://github.com/correl/elm-mdl.git
synced 2024-12-18 03:00:11 +00:00
README
This commit is contained in:
parent
4d57d5dc12
commit
c06b99e723
5 changed files with 159 additions and 21 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,4 @@
|
|||
elm-stuff
|
||||
.*.sw?
|
||||
elm.js
|
||||
index.html
|
||||
|
|
52
Demo/Textfields.elm
Normal file
52
Demo/Textfields.elm
Normal file
|
@ -0,0 +1,52 @@
|
|||
module Demo.Textfields where
|
||||
|
||||
import Array exposing (Array)
|
||||
import Html exposing (Html)
|
||||
|
||||
import Material.Textfield as Textfield
|
||||
import Material.Grid as Grid exposing (..)
|
||||
|
||||
|
||||
type alias Model = Array Textfield.Model
|
||||
|
||||
|
||||
model : Model
|
||||
model =
|
||||
let t0 = Textfield.model in
|
||||
[ t0
|
||||
, { t0 | label = Just { text = "Labelled", float = False } }
|
||||
, { t0 | label = Just { text = "Floating label", float = True }}
|
||||
, { t0
|
||||
| label = Just { text = "Disabled", float = False }
|
||||
, isDisabled = True
|
||||
}
|
||||
, { t0
|
||||
| label = Just { text = "With error and value", float = False }
|
||||
, error = Just "The input is wrong!"
|
||||
, value = "Incorrect input"
|
||||
}
|
||||
]
|
||||
|> Array.fromList
|
||||
|
||||
|
||||
type Action =
|
||||
Field Int Textfield.Action
|
||||
|
||||
|
||||
update : Action -> Model -> Model
|
||||
update (Field k action) fields =
|
||||
Array.get k fields
|
||||
|> Maybe.map (Textfield.update action)
|
||||
|> Maybe.map (\field' -> Array.set k field' fields)
|
||||
|> Maybe.withDefault fields
|
||||
|
||||
|
||||
view : Signal.Address Action -> Model -> Html
|
||||
view addr model =
|
||||
model
|
||||
|> Array.indexedMap (\k field ->
|
||||
Textfield.view (Signal.forwardTo addr (Field k)) field
|
||||
)
|
||||
|> Array.toList
|
||||
|> List.map (\x -> cell [size All 3] [x])
|
||||
|> grid
|
50
Native/Material.js
Normal file
50
Native/Material.js
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Helper functions for accessing Google Material Design lite.
|
||||
*/
|
||||
|
||||
// ELM Boilerplate
|
||||
Elm.Native.Material = {};
|
||||
Elm.Native.Material.make = function(elm) {
|
||||
elm.Native = elm.Native || {};
|
||||
elm.Native.Material = elm.Native.Material || {};
|
||||
if (elm.Native.Material.values) {
|
||||
return elm.Native.Material.values;
|
||||
}
|
||||
|
||||
var Signal = Elm.Native.Signal.make(elm);
|
||||
var Json = Elm.Native.Json.make(elm);
|
||||
|
||||
function property(key, value) {
|
||||
return { key: key, value: value };
|
||||
}
|
||||
|
||||
function on(name, options, decoder, createMessage)
|
||||
{
|
||||
function eventHandler(event)
|
||||
{
|
||||
if (options.withGeometry)
|
||||
{
|
||||
event.boundingClientRect = event.currentTarget.getBoundingClientRect();
|
||||
}
|
||||
var value = A2(Json.runDecoderValue, decoder, event);
|
||||
if (value.ctor === 'Ok')
|
||||
{
|
||||
if (options.stopPropagation)
|
||||
{
|
||||
event.stopPropagation();
|
||||
}
|
||||
if (options.preventDefault)
|
||||
{
|
||||
event.preventDefault();
|
||||
}
|
||||
Signal.sendMessage(createMessage(value._0));
|
||||
}
|
||||
}
|
||||
|
||||
return property('on' + name, eventHandler);
|
||||
}
|
||||
|
||||
return elm.Native.Material.values = {
|
||||
on : F4(on)
|
||||
}
|
||||
}
|
55
README.md
Normal file
55
README.md
Normal file
|
@ -0,0 +1,55 @@
|
|||
# Material Design Components in Elm
|
||||
|
||||
Port of Google's
|
||||
[Material Design Lite](https://www.getmdl.io/)
|
||||
CSS/JS implementation of the
|
||||
[Material Design Specification](https://www.google.com/design/spec/material-design/introduction.html).
|
||||
|
||||
MDL is implemented primarily through CSS, with a little bit of Javascript
|
||||
adding and removing CSS classes in response to DOM events. This port
|
||||
re-implements the CSS parts in Elm, but relies on the CSS of MDL verbatim.
|
||||
|
||||
*CAUTION* This is an early and incomplete prototype. Use at your own risk.
|
||||
|
||||
|
||||
### Get Started
|
||||
|
||||
Build the demo:
|
||||
|
||||
> elm-make Demo.elm
|
||||
|
||||
This will construct a file `index.html`; open that in your browser.
|
||||
|
||||
The library has a tiny native component (for measuring geometry of rendered
|
||||
elements, a necessity for re-implementing MDL ripple-animations), and so
|
||||
cannot be in the elm-package library. If you wish to use the library, I
|
||||
know no better way than to copy `Material.elm` and `Material/*` to your
|
||||
own project.
|
||||
|
||||
|
||||
### Contribute
|
||||
|
||||
Please do! The easiest place to start is to add more CSS-only components. These require no porting of Javascript, just putting together css-classes as instructed by the [MDL Component Documentation](https://www.getmdl.io/components/index.html). Take a look at
|
||||
|
||||
- [Badges](https://www.getmdl.io/components/index.html#badges-section)
|
||||
- [Cards](https://www.getmdl.io/components/index.html#cards-section)
|
||||
- [Dialogs](https://www.getmdl.io/components/index.html#dialog-section)
|
||||
- [Footers](https://www.getmdl.io/components/index.html#layout-section/footer)
|
||||
- [Lists](https://www.getmdl.io/components/index.html#lists-section)
|
||||
- [Shadows](https://github.com/google/material-design-lite/tree/v1.1.2/src/shadow)
|
||||
|
||||
The remaining components, use Javascript
|
||||
in various ways. Toggles seem to use Javascript exclusively to insert ripple-animations and __might__ be easy to implement using the `Ripple.elm`
|
||||
component:
|
||||
|
||||
- [Toggles](https://www.getmdl.io/components/index.html#toggles-section)
|
||||
|
||||
The rest I haven't looked at; they may or may not be straightforward to port
|
||||
to Elm.
|
||||
|
||||
- [Tables](https://www.getmdl.io/components/index.html#tables-section)
|
||||
- [Spinners](https://www.getmdl.io/components/index.html#loading-section)
|
||||
- [Sliders](https://www.getmdl.io/components/index.html#sliders-section)
|
||||
- [Menus](https://www.getmdl.io/components/index.html#menus-section)
|
||||
- [Snackbars](https://www.getmdl.io/components/index.html#snackbar-section)
|
||||
- [Tooltips](https://www.getmdl.io/components/index.html#tooltips-section)
|
|
@ -1,21 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>elm-mdl-demo</title>
|
||||
|
||||
<!-- MDL -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Roboto:400,300,500|Roboto+Mono|Roboto+Condensed:400,700&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
|
||||
<link rel="stylesheet" href="https://code.getmdl.io/1.1.1/material.min.css" />
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<!-- elm -->
|
||||
<script src="elm.js"></script>
|
||||
<script>
|
||||
app = Elm.fullscreen(Elm.Main);
|
||||
</script>
|
||||
</body>
|
Loading…
Reference in a new issue