diff --git a/Todo.elm b/Todo.elm index 658c990..ff3a0d5 100644 --- a/Todo.elm +++ b/Todo.elm @@ -89,45 +89,45 @@ update action model = Add -> { model | - uid <- model.uid + 1, - field <- "", - tasks <- + uid = model.uid + 1, + field = "", + tasks = if String.isEmpty model.field then model.tasks else model.tasks ++ [newTask model.field model.uid] } UpdateField str -> - { model | field <- str } + { model | field = str } EditingTask id isEditing -> - let updateTask t = if t.id == id then { t | editing <- isEditing } else t + let updateTask t = if t.id == id then { t | editing = isEditing } else t in - { model | tasks <- List.map updateTask model.tasks } + { model | tasks = List.map updateTask model.tasks } UpdateTask id task -> - let updateTask t = if t.id == id then { t | description <- task } else t + let updateTask t = if t.id == id then { t | description = task } else t in - { model | tasks <- List.map updateTask model.tasks } + { model | tasks = List.map updateTask model.tasks } Delete id -> - { model | tasks <- List.filter (\t -> t.id /= id) model.tasks } + { model | tasks = List.filter (\t -> t.id /= id) model.tasks } DeleteComplete -> - { model | tasks <- List.filter (not << .completed) model.tasks } + { model | tasks = List.filter (not << .completed) model.tasks } Check id isCompleted -> - let updateTask t = if t.id == id then { t | completed <- isCompleted } else t + let updateTask t = if t.id == id then { t | completed = isCompleted } else t in - { model | tasks <- List.map updateTask model.tasks } + { model | tasks = List.map updateTask model.tasks } CheckAll isCompleted -> - let updateTask t = { t | completed <- isCompleted } + let updateTask t = { t | completed = isCompleted } in - { model | tasks <- List.map updateTask model.tasks } + { model | tasks = List.map updateTask model.tasks } ChangeVisibility visibility -> - { model | visibility <- visibility } + { model | visibility = visibility } ---- VIEW ---- @@ -184,7 +184,7 @@ taskList address visibility tasks = case visibility of "Completed" -> todo.completed "Active" -> not todo.completed - "All" -> True + _ -> True allCompleted = List.all .completed tasks @@ -333,7 +333,10 @@ port focus = EditingTask id bool -> bool _ -> False - toSelector (EditingTask id _) = ("#todo-" ++ toString id) + toSelector act = + case act of + EditingTask id _ -> "#todo-" ++ toString id + _ -> "" in actions.signal |> Signal.filter needsFocus (EditingTask 0 True) diff --git a/elm-package.json b/elm-package.json index 4174bb9..0c8a4c4 100644 --- a/elm-package.json +++ b/elm-package.json @@ -8,8 +8,8 @@ ], "exposed-modules": [], "dependencies": { - "elm-lang/core": "2.0.0 <= v < 3.0.0", - "evancz/elm-html": "3.0.0 <= v < 4.0.0" + "elm-lang/core": "3.0.0 <= v < 4.0.0", + "evancz/elm-html": "4.0.2 <= v < 5.0.0" }, - "elm-version": "0.15.0 <= v < 0.16.0" -} \ No newline at end of file + "elm-version": "0.16.0 <= v < 0.17.0" +} diff --git a/index.html b/index.html index f61c02b..057117f 100644 --- a/index.html +++ b/index.html @@ -1,34 +1,11955 @@ - +Todo - - + localRuntime.Native = localRuntime.Native || {}; + localRuntime.Native.Array = localRuntime.Native.Array || {}; + if (localRuntime.Native.Array.values) + { + return localRuntime.Native.Array.values; + } + if ('values' in Elm.Native.Array) + { + return localRuntime.Native.Array.values = Elm.Native.Array.values; + } - - + var List = Elm.Native.List.make(localRuntime); - + render: createElement, + updateAndReplace: updateAndReplace + }; +}; - \ No newline at end of file +},{"virtual-dom/vdom/create-element":6,"virtual-dom/vdom/patch":9,"virtual-dom/vnode/is-vhook":13,"virtual-dom/vnode/vnode":18,"virtual-dom/vnode/vtext":20,"virtual-dom/vtree/diff":22}]},{},[23]); +Elm.VirtualDom = Elm.VirtualDom || {}; +Elm.VirtualDom.make = function (_elm) { + "use strict"; + _elm.VirtualDom = _elm.VirtualDom || {}; + if (_elm.VirtualDom.values) return _elm.VirtualDom.values; + var _U = Elm.Native.Utils.make(_elm), + $Basics = Elm.Basics.make(_elm), + $Graphics$Element = Elm.Graphics.Element.make(_elm), + $Json$Decode = Elm.Json.Decode.make(_elm), + $List = Elm.List.make(_elm), + $Maybe = Elm.Maybe.make(_elm), + $Native$VirtualDom = Elm.Native.VirtualDom.make(_elm), + $Result = Elm.Result.make(_elm), + $Signal = Elm.Signal.make(_elm); + var _op = {}; + var lazy3 = $Native$VirtualDom.lazy3; + var lazy2 = $Native$VirtualDom.lazy2; + var lazy = $Native$VirtualDom.lazy; + var defaultOptions = {stopPropagation: false + ,preventDefault: false}; + var Options = F2(function (a,b) { + return {stopPropagation: a,preventDefault: b}; + }); + var onWithOptions = $Native$VirtualDom.on; + var on = F3(function (eventName,decoder,toMessage) { + return A4($Native$VirtualDom.on, + eventName, + defaultOptions, + decoder, + toMessage); + }); + var attributeNS = $Native$VirtualDom.attributeNS; + var attribute = $Native$VirtualDom.attribute; + var property = $Native$VirtualDom.property; + var Property = {ctor: "Property"}; + var fromElement = $Native$VirtualDom.fromElement; + var toElement = $Native$VirtualDom.toElement; + var text = $Native$VirtualDom.text; + var node = $Native$VirtualDom.node; + var Node = {ctor: "Node"}; + return _elm.VirtualDom.values = {_op: _op + ,text: text + ,node: node + ,toElement: toElement + ,fromElement: fromElement + ,property: property + ,attribute: attribute + ,attributeNS: attributeNS + ,on: on + ,onWithOptions: onWithOptions + ,defaultOptions: defaultOptions + ,lazy: lazy + ,lazy2: lazy2 + ,lazy3: lazy3 + ,Options: Options}; +};Elm.Html = Elm.Html || {}; +Elm.Html.make = function (_elm) { + "use strict"; + _elm.Html = _elm.Html || {}; + if (_elm.Html.values) return _elm.Html.values; + var _U = Elm.Native.Utils.make(_elm), + $Basics = Elm.Basics.make(_elm), + $Graphics$Element = Elm.Graphics.Element.make(_elm), + $List = Elm.List.make(_elm), + $Maybe = Elm.Maybe.make(_elm), + $Result = Elm.Result.make(_elm), + $Signal = Elm.Signal.make(_elm), + $VirtualDom = Elm.VirtualDom.make(_elm); + var _op = {}; + var fromElement = $VirtualDom.fromElement; + var toElement = $VirtualDom.toElement; + var text = $VirtualDom.text; + var node = $VirtualDom.node; + var body = node("body"); + var section = node("section"); + var nav = node("nav"); + var article = node("article"); + var aside = node("aside"); + var h1 = node("h1"); + var h2 = node("h2"); + var h3 = node("h3"); + var h4 = node("h4"); + var h5 = node("h5"); + var h6 = node("h6"); + var header = node("header"); + var footer = node("footer"); + var address = node("address"); + var main$ = node("main"); + var p = node("p"); + var hr = node("hr"); + var pre = node("pre"); + var blockquote = node("blockquote"); + var ol = node("ol"); + var ul = node("ul"); + var li = node("li"); + var dl = node("dl"); + var dt = node("dt"); + var dd = node("dd"); + var figure = node("figure"); + var figcaption = node("figcaption"); + var div = node("div"); + var a = node("a"); + var em = node("em"); + var strong = node("strong"); + var small = node("small"); + var s = node("s"); + var cite = node("cite"); + var q = node("q"); + var dfn = node("dfn"); + var abbr = node("abbr"); + var time = node("time"); + var code = node("code"); + var $var = node("var"); + var samp = node("samp"); + var kbd = node("kbd"); + var sub = node("sub"); + var sup = node("sup"); + var i = node("i"); + var b = node("b"); + var u = node("u"); + var mark = node("mark"); + var ruby = node("ruby"); + var rt = node("rt"); + var rp = node("rp"); + var bdi = node("bdi"); + var bdo = node("bdo"); + var span = node("span"); + var br = node("br"); + var wbr = node("wbr"); + var ins = node("ins"); + var del = node("del"); + var img = node("img"); + var iframe = node("iframe"); + var embed = node("embed"); + var object = node("object"); + var param = node("param"); + var video = node("video"); + var audio = node("audio"); + var source = node("source"); + var track = node("track"); + var canvas = node("canvas"); + var svg = node("svg"); + var math = node("math"); + var table = node("table"); + var caption = node("caption"); + var colgroup = node("colgroup"); + var col = node("col"); + var tbody = node("tbody"); + var thead = node("thead"); + var tfoot = node("tfoot"); + var tr = node("tr"); + var td = node("td"); + var th = node("th"); + var form = node("form"); + var fieldset = node("fieldset"); + var legend = node("legend"); + var label = node("label"); + var input = node("input"); + var button = node("button"); + var select = node("select"); + var datalist = node("datalist"); + var optgroup = node("optgroup"); + var option = node("option"); + var textarea = node("textarea"); + var keygen = node("keygen"); + var output = node("output"); + var progress = node("progress"); + var meter = node("meter"); + var details = node("details"); + var summary = node("summary"); + var menuitem = node("menuitem"); + var menu = node("menu"); + return _elm.Html.values = {_op: _op + ,node: node + ,text: text + ,toElement: toElement + ,fromElement: fromElement + ,body: body + ,section: section + ,nav: nav + ,article: article + ,aside: aside + ,h1: h1 + ,h2: h2 + ,h3: h3 + ,h4: h4 + ,h5: h5 + ,h6: h6 + ,header: header + ,footer: footer + ,address: address + ,main$: main$ + ,p: p + ,hr: hr + ,pre: pre + ,blockquote: blockquote + ,ol: ol + ,ul: ul + ,li: li + ,dl: dl + ,dt: dt + ,dd: dd + ,figure: figure + ,figcaption: figcaption + ,div: div + ,a: a + ,em: em + ,strong: strong + ,small: small + ,s: s + ,cite: cite + ,q: q + ,dfn: dfn + ,abbr: abbr + ,time: time + ,code: code + ,$var: $var + ,samp: samp + ,kbd: kbd + ,sub: sub + ,sup: sup + ,i: i + ,b: b + ,u: u + ,mark: mark + ,ruby: ruby + ,rt: rt + ,rp: rp + ,bdi: bdi + ,bdo: bdo + ,span: span + ,br: br + ,wbr: wbr + ,ins: ins + ,del: del + ,img: img + ,iframe: iframe + ,embed: embed + ,object: object + ,param: param + ,video: video + ,audio: audio + ,source: source + ,track: track + ,canvas: canvas + ,svg: svg + ,math: math + ,table: table + ,caption: caption + ,colgroup: colgroup + ,col: col + ,tbody: tbody + ,thead: thead + ,tfoot: tfoot + ,tr: tr + ,td: td + ,th: th + ,form: form + ,fieldset: fieldset + ,legend: legend + ,label: label + ,input: input + ,button: button + ,select: select + ,datalist: datalist + ,optgroup: optgroup + ,option: option + ,textarea: textarea + ,keygen: keygen + ,output: output + ,progress: progress + ,meter: meter + ,details: details + ,summary: summary + ,menuitem: menuitem + ,menu: menu}; +};Elm.Html = Elm.Html || {}; +Elm.Html.Attributes = Elm.Html.Attributes || {}; +Elm.Html.Attributes.make = function (_elm) { + "use strict"; + _elm.Html = _elm.Html || {}; + _elm.Html.Attributes = _elm.Html.Attributes || {}; + if (_elm.Html.Attributes.values) + return _elm.Html.Attributes.values; + var _U = Elm.Native.Utils.make(_elm), + $Basics = Elm.Basics.make(_elm), + $Html = Elm.Html.make(_elm), + $Json$Encode = Elm.Json.Encode.make(_elm), + $List = Elm.List.make(_elm), + $Maybe = Elm.Maybe.make(_elm), + $Result = Elm.Result.make(_elm), + $Signal = Elm.Signal.make(_elm), + $String = Elm.String.make(_elm), + $VirtualDom = Elm.VirtualDom.make(_elm); + var _op = {}; + var attribute = $VirtualDom.attribute; + var contextmenu = function (value) { + return A2(attribute,"contextmenu",value); + }; + var property = $VirtualDom.property; + var stringProperty = F2(function (name,string) { + return A2(property,name,$Json$Encode.string(string)); + }); + var $class = function (name) { + return A2(stringProperty,"className",name); + }; + var id = function (name) { + return A2(stringProperty,"id",name); + }; + var title = function (name) { + return A2(stringProperty,"title",name); + }; + var accesskey = function ($char) { + return A2(stringProperty, + "accessKey", + $String.fromChar($char)); + }; + var dir = function (value) { + return A2(stringProperty,"dir",value); + }; + var draggable = function (value) { + return A2(stringProperty,"draggable",value); + }; + var dropzone = function (value) { + return A2(stringProperty,"dropzone",value); + }; + var itemprop = function (value) { + return A2(stringProperty,"itemprop",value); + }; + var lang = function (value) { + return A2(stringProperty,"lang",value); + }; + var tabindex = function (n) { + return A2(stringProperty,"tabIndex",$Basics.toString(n)); + }; + var charset = function (value) { + return A2(stringProperty,"charset",value); + }; + var content = function (value) { + return A2(stringProperty,"content",value); + }; + var httpEquiv = function (value) { + return A2(stringProperty,"httpEquiv",value); + }; + var language = function (value) { + return A2(stringProperty,"language",value); + }; + var src = function (value) { + return A2(stringProperty,"src",value); + }; + var height = function (value) { + return A2(stringProperty,"height",$Basics.toString(value)); + }; + var width = function (value) { + return A2(stringProperty,"width",$Basics.toString(value)); + }; + var alt = function (value) { + return A2(stringProperty,"alt",value); + }; + var preload = function (value) { + return A2(stringProperty,"preload",value); + }; + var poster = function (value) { + return A2(stringProperty,"poster",value); + }; + var kind = function (value) { + return A2(stringProperty,"kind",value); + }; + var srclang = function (value) { + return A2(stringProperty,"srclang",value); + }; + var sandbox = function (value) { + return A2(stringProperty,"sandbox",value); + }; + var srcdoc = function (value) { + return A2(stringProperty,"srcdoc",value); + }; + var type$ = function (value) { + return A2(stringProperty,"type",value); + }; + var value = function (value) { + return A2(stringProperty,"value",value); + }; + var placeholder = function (value) { + return A2(stringProperty,"placeholder",value); + }; + var accept = function (value) { + return A2(stringProperty,"accept",value); + }; + var acceptCharset = function (value) { + return A2(stringProperty,"acceptCharset",value); + }; + var action = function (value) { + return A2(stringProperty,"action",value); + }; + var autocomplete = function (bool) { + return A2(stringProperty,"autocomplete",bool ? "on" : "off"); + }; + var autosave = function (value) { + return A2(stringProperty,"autosave",value); + }; + var enctype = function (value) { + return A2(stringProperty,"enctype",value); + }; + var formaction = function (value) { + return A2(stringProperty,"formAction",value); + }; + var list = function (value) { + return A2(stringProperty,"list",value); + }; + var minlength = function (n) { + return A2(stringProperty,"minLength",$Basics.toString(n)); + }; + var maxlength = function (n) { + return A2(stringProperty,"maxLength",$Basics.toString(n)); + }; + var method = function (value) { + return A2(stringProperty,"method",value); + }; + var name = function (value) { + return A2(stringProperty,"name",value); + }; + var pattern = function (value) { + return A2(stringProperty,"pattern",value); + }; + var size = function (n) { + return A2(stringProperty,"size",$Basics.toString(n)); + }; + var $for = function (value) { + return A2(stringProperty,"htmlFor",value); + }; + var form = function (value) { + return A2(stringProperty,"form",value); + }; + var max = function (value) { + return A2(stringProperty,"max",value); + }; + var min = function (value) { + return A2(stringProperty,"min",value); + }; + var step = function (n) { + return A2(stringProperty,"step",n); + }; + var cols = function (n) { + return A2(stringProperty,"cols",$Basics.toString(n)); + }; + var rows = function (n) { + return A2(stringProperty,"rows",$Basics.toString(n)); + }; + var wrap = function (value) { + return A2(stringProperty,"wrap",value); + }; + var usemap = function (value) { + return A2(stringProperty,"useMap",value); + }; + var shape = function (value) { + return A2(stringProperty,"shape",value); + }; + var coords = function (value) { + return A2(stringProperty,"coords",value); + }; + var challenge = function (value) { + return A2(stringProperty,"challenge",value); + }; + var keytype = function (value) { + return A2(stringProperty,"keytype",value); + }; + var align = function (value) { + return A2(stringProperty,"align",value); + }; + var cite = function (value) { + return A2(stringProperty,"cite",value); + }; + var href = function (value) { + return A2(stringProperty,"href",value); + }; + var target = function (value) { + return A2(stringProperty,"target",value); + }; + var downloadAs = function (value) { + return A2(stringProperty,"download",value); + }; + var hreflang = function (value) { + return A2(stringProperty,"hreflang",value); + }; + var media = function (value) { + return A2(stringProperty,"media",value); + }; + var ping = function (value) { + return A2(stringProperty,"ping",value); + }; + var rel = function (value) { + return A2(stringProperty,"rel",value); + }; + var datetime = function (value) { + return A2(stringProperty,"datetime",value); + }; + var pubdate = function (value) { + return A2(stringProperty,"pubdate",value); + }; + var start = function (n) { + return A2(stringProperty,"start",$Basics.toString(n)); + }; + var colspan = function (n) { + return A2(stringProperty,"colSpan",$Basics.toString(n)); + }; + var headers = function (value) { + return A2(stringProperty,"headers",value); + }; + var rowspan = function (n) { + return A2(stringProperty,"rowSpan",$Basics.toString(n)); + }; + var scope = function (value) { + return A2(stringProperty,"scope",value); + }; + var manifest = function (value) { + return A2(stringProperty,"manifest",value); + }; + var boolProperty = F2(function (name,bool) { + return A2(property,name,$Json$Encode.bool(bool)); + }); + var hidden = function (bool) { + return A2(boolProperty,"hidden",bool); + }; + var contenteditable = function (bool) { + return A2(boolProperty,"contentEditable",bool); + }; + var spellcheck = function (bool) { + return A2(boolProperty,"spellcheck",bool); + }; + var async = function (bool) { + return A2(boolProperty,"async",bool); + }; + var defer = function (bool) { + return A2(boolProperty,"defer",bool); + }; + var scoped = function (bool) { + return A2(boolProperty,"scoped",bool); + }; + var autoplay = function (bool) { + return A2(boolProperty,"autoplay",bool); + }; + var controls = function (bool) { + return A2(boolProperty,"controls",bool); + }; + var loop = function (bool) { + return A2(boolProperty,"loop",bool); + }; + var $default = function (bool) { + return A2(boolProperty,"default",bool); + }; + var seamless = function (bool) { + return A2(boolProperty,"seamless",bool); + }; + var checked = function (bool) { + return A2(boolProperty,"checked",bool); + }; + var selected = function (bool) { + return A2(boolProperty,"selected",bool); + }; + var autofocus = function (bool) { + return A2(boolProperty,"autofocus",bool); + }; + var disabled = function (bool) { + return A2(boolProperty,"disabled",bool); + }; + var multiple = function (bool) { + return A2(boolProperty,"multiple",bool); + }; + var novalidate = function (bool) { + return A2(boolProperty,"noValidate",bool); + }; + var readonly = function (bool) { + return A2(boolProperty,"readOnly",bool); + }; + var required = function (bool) { + return A2(boolProperty,"required",bool); + }; + var ismap = function (value) { + return A2(boolProperty,"isMap",value); + }; + var download = function (bool) { + return A2(boolProperty,"download",bool); + }; + var reversed = function (bool) { + return A2(boolProperty,"reversed",bool); + }; + var classList = function (list) { + return $class(A2($String.join, + " ", + A2($List.map,$Basics.fst,A2($List.filter,$Basics.snd,list)))); + }; + var style = function (props) { + return A2(property, + "style", + $Json$Encode.object(A2($List.map, + function (_p0) { + var _p1 = _p0; + var key = _p1._0,value = _p1._1; + return {ctor: "_Tuple2",_0: key,_1: $Json$Encode.string(value)}; + }, + props))); + }; + var key = function (k) { return A2(stringProperty,"key",k);}; + return _elm.Html.Attributes.values = {_op: _op + ,key: key + ,style: style + ,$class: $class + ,classList: classList + ,id: id + ,title: title + ,hidden: hidden + ,type$: type$ + ,value: value + ,checked: checked + ,placeholder: placeholder + ,selected: selected + ,accept: accept + ,acceptCharset: acceptCharset + ,action: action + ,autocomplete: autocomplete + ,autofocus: autofocus + ,autosave: autosave + ,disabled: disabled + ,enctype: enctype + ,formaction: formaction + ,list: list + ,maxlength: maxlength + ,minlength: minlength + ,method: method + ,multiple: multiple + ,name: name + ,novalidate: novalidate + ,pattern: pattern + ,readonly: readonly + ,required: required + ,size: size + ,$for: $for + ,form: form + ,max: max + ,min: min + ,step: step + ,cols: cols + ,rows: rows + ,wrap: wrap + ,href: href + ,target: target + ,download: download + ,downloadAs: downloadAs + ,hreflang: hreflang + ,media: media + ,ping: ping + ,rel: rel + ,ismap: ismap + ,usemap: usemap + ,shape: shape + ,coords: coords + ,src: src + ,height: height + ,width: width + ,alt: alt + ,autoplay: autoplay + ,controls: controls + ,loop: loop + ,preload: preload + ,poster: poster + ,$default: $default + ,kind: kind + ,srclang: srclang + ,sandbox: sandbox + ,seamless: seamless + ,srcdoc: srcdoc + ,reversed: reversed + ,start: start + ,align: align + ,colspan: colspan + ,rowspan: rowspan + ,headers: headers + ,scope: scope + ,async: async + ,charset: charset + ,content: content + ,defer: defer + ,httpEquiv: httpEquiv + ,language: language + ,scoped: scoped + ,accesskey: accesskey + ,contenteditable: contenteditable + ,contextmenu: contextmenu + ,dir: dir + ,draggable: draggable + ,dropzone: dropzone + ,itemprop: itemprop + ,lang: lang + ,spellcheck: spellcheck + ,tabindex: tabindex + ,challenge: challenge + ,keytype: keytype + ,cite: cite + ,datetime: datetime + ,pubdate: pubdate + ,manifest: manifest + ,property: property + ,attribute: attribute}; +};Elm.Html = Elm.Html || {}; +Elm.Html.Events = Elm.Html.Events || {}; +Elm.Html.Events.make = function (_elm) { + "use strict"; + _elm.Html = _elm.Html || {}; + _elm.Html.Events = _elm.Html.Events || {}; + if (_elm.Html.Events.values) return _elm.Html.Events.values; + var _U = Elm.Native.Utils.make(_elm), + $Basics = Elm.Basics.make(_elm), + $Html = Elm.Html.make(_elm), + $Json$Decode = Elm.Json.Decode.make(_elm), + $List = Elm.List.make(_elm), + $Maybe = Elm.Maybe.make(_elm), + $Result = Elm.Result.make(_elm), + $Signal = Elm.Signal.make(_elm), + $VirtualDom = Elm.VirtualDom.make(_elm); + var _op = {}; + var keyCode = A2($Json$Decode._op[":="], + "keyCode", + $Json$Decode.$int); + var targetChecked = A2($Json$Decode.at, + _U.list(["target","checked"]), + $Json$Decode.bool); + var targetValue = A2($Json$Decode.at, + _U.list(["target","value"]), + $Json$Decode.string); + var defaultOptions = $VirtualDom.defaultOptions; + var Options = F2(function (a,b) { + return {stopPropagation: a,preventDefault: b}; + }); + var onWithOptions = $VirtualDom.onWithOptions; + var on = $VirtualDom.on; + var messageOn = F3(function (name,addr,msg) { + return A3(on, + name, + $Json$Decode.value, + function (_p0) { + return A2($Signal.message,addr,msg); + }); + }); + var onClick = messageOn("click"); + var onDoubleClick = messageOn("dblclick"); + var onMouseMove = messageOn("mousemove"); + var onMouseDown = messageOn("mousedown"); + var onMouseUp = messageOn("mouseup"); + var onMouseEnter = messageOn("mouseenter"); + var onMouseLeave = messageOn("mouseleave"); + var onMouseOver = messageOn("mouseover"); + var onMouseOut = messageOn("mouseout"); + var onBlur = messageOn("blur"); + var onFocus = messageOn("focus"); + var onSubmit = messageOn("submit"); + var onKey = F3(function (name,addr,handler) { + return A3(on, + name, + keyCode, + function (code) { + return A2($Signal.message,addr,handler(code)); + }); + }); + var onKeyUp = onKey("keyup"); + var onKeyDown = onKey("keydown"); + var onKeyPress = onKey("keypress"); + return _elm.Html.Events.values = {_op: _op + ,onBlur: onBlur + ,onFocus: onFocus + ,onSubmit: onSubmit + ,onKeyUp: onKeyUp + ,onKeyDown: onKeyDown + ,onKeyPress: onKeyPress + ,onClick: onClick + ,onDoubleClick: onDoubleClick + ,onMouseMove: onMouseMove + ,onMouseDown: onMouseDown + ,onMouseUp: onMouseUp + ,onMouseEnter: onMouseEnter + ,onMouseLeave: onMouseLeave + ,onMouseOver: onMouseOver + ,onMouseOut: onMouseOut + ,on: on + ,onWithOptions: onWithOptions + ,defaultOptions: defaultOptions + ,targetValue: targetValue + ,targetChecked: targetChecked + ,keyCode: keyCode + ,Options: Options}; +};Elm.Html = Elm.Html || {}; +Elm.Html.Lazy = Elm.Html.Lazy || {}; +Elm.Html.Lazy.make = function (_elm) { + "use strict"; + _elm.Html = _elm.Html || {}; + _elm.Html.Lazy = _elm.Html.Lazy || {}; + if (_elm.Html.Lazy.values) return _elm.Html.Lazy.values; + var _U = Elm.Native.Utils.make(_elm), + $Basics = Elm.Basics.make(_elm), + $Html = Elm.Html.make(_elm), + $List = Elm.List.make(_elm), + $Maybe = Elm.Maybe.make(_elm), + $Result = Elm.Result.make(_elm), + $Signal = Elm.Signal.make(_elm), + $VirtualDom = Elm.VirtualDom.make(_elm); + var _op = {}; + var lazy3 = $VirtualDom.lazy3; + var lazy2 = $VirtualDom.lazy2; + var lazy = $VirtualDom.lazy; + return _elm.Html.Lazy.values = {_op: _op + ,lazy: lazy + ,lazy2: lazy2 + ,lazy3: lazy3}; +};Elm.Todo = Elm.Todo || {}; +Elm.Todo.make = function (_elm) { + "use strict"; + _elm.Todo = _elm.Todo || {}; + if (_elm.Todo.values) return _elm.Todo.values; + var _U = Elm.Native.Utils.make(_elm), + $Basics = Elm.Basics.make(_elm), + $Html = Elm.Html.make(_elm), + $Html$Attributes = Elm.Html.Attributes.make(_elm), + $Html$Events = Elm.Html.Events.make(_elm), + $Html$Lazy = Elm.Html.Lazy.make(_elm), + $Json$Decode = Elm.Json.Decode.make(_elm), + $List = Elm.List.make(_elm), + $Maybe = Elm.Maybe.make(_elm), + $Result = Elm.Result.make(_elm), + $Signal = Elm.Signal.make(_elm), + $String = Elm.String.make(_elm); + var _op = {}; + var getStorage = Elm.Native.Port.make(_elm).inbound("getStorage", + "Maybe.Maybe Todo.Model", + function (v) { + return v === null ? Elm.Maybe.make(_elm).Nothing : Elm.Maybe.make(_elm).Just(typeof v === "object" && "tasks" in v && "field" in v && "uid" in v && "visibility" in v ? {_: {} + ,tasks: typeof v.tasks === "object" && v.tasks instanceof Array ? Elm.Native.List.make(_elm).fromArray(v.tasks.map(function (v) { + return typeof v === "object" && "description" in v && "completed" in v && "editing" in v && "id" in v ? {_: {} + ,description: typeof v.description === "string" || typeof v.description === "object" && v.description instanceof String ? v.description : _U.badPort("a string", + v.description) + ,completed: typeof v.completed === "boolean" ? v.completed : _U.badPort("a boolean (true or false)", + v.completed) + ,editing: typeof v.editing === "boolean" ? v.editing : _U.badPort("a boolean (true or false)", + v.editing) + ,id: typeof v.id === "number" ? v.id : _U.badPort("a number", + v.id)} : _U.badPort("an object with fields `description`, `completed`, `editing`, `id`", + v); + })) : _U.badPort("an array", + v.tasks) + ,field: typeof v.field === "string" || typeof v.field === "object" && v.field instanceof String ? v.field : _U.badPort("a string", + v.field) + ,uid: typeof v.uid === "number" ? v.uid : _U.badPort("a number", + v.uid) + ,visibility: typeof v.visibility === "string" || typeof v.visibility === "object" && v.visibility instanceof String ? v.visibility : _U.badPort("a string", + v.visibility)} : _U.badPort("an object with fields `tasks`, `field`, `uid`, `visibility`", + v)); + }); + var infoFooter = A2($Html.footer, + _U.list([$Html$Attributes.id("info")]), + _U.list([A2($Html.p, + _U.list([]), + _U.list([$Html.text("Double-click to edit a todo")])) + ,A2($Html.p, + _U.list([]), + _U.list([$Html.text("Written by ") + ,A2($Html.a, + _U.list([$Html$Attributes.href("https://github.com/evancz")]), + _U.list([$Html.text("Evan Czaplicki")]))])) + ,A2($Html.p, + _U.list([]), + _U.list([$Html.text("Part of ") + ,A2($Html.a, + _U.list([$Html$Attributes.href("http://todomvc.com")]), + _U.list([$Html.text("TodoMVC")]))]))])); + var is13 = function (code) { + return _U.eq(code, + 13) ? $Result.Ok({ctor: "_Tuple0"}) : $Result.Err("not the right key code"); + }; + var onEnter = F2(function (address,value) { + return A3($Html$Events.on, + "keydown", + A2($Json$Decode.customDecoder,$Html$Events.keyCode,is13), + function (_p0) { + return A2($Signal.message,address,value); + }); + }); + var ChangeVisibility = function (a) { + return {ctor: "ChangeVisibility",_0: a}; + }; + var visibilitySwap = F4(function (address, + uri, + visibility, + actualVisibility) { + return A2($Html.li, + _U.list([A2($Html$Events.onClick, + address, + ChangeVisibility(visibility))]), + _U.list([A2($Html.a, + _U.list([$Html$Attributes.href(uri) + ,$Html$Attributes.classList(_U.list([{ctor: "_Tuple2" + ,_0: "selected" + ,_1: _U.eq(visibility,actualVisibility)}]))]), + _U.list([$Html.text(visibility)]))])); + }); + var CheckAll = function (a) { + return {ctor: "CheckAll",_0: a}; + }; + var Check = F2(function (a,b) { + return {ctor: "Check",_0: a,_1: b}; + }); + var DeleteComplete = {ctor: "DeleteComplete"}; + var controls = F3(function (address,visibility,tasks) { + var tasksCompleted = $List.length(A2($List.filter, + function (_) { + return _.completed; + }, + tasks)); + var tasksLeft = $List.length(tasks) - tasksCompleted; + var item_ = _U.eq(tasksLeft,1) ? " item" : " items"; + return A2($Html.footer, + _U.list([$Html$Attributes.id("footer") + ,$Html$Attributes.hidden($List.isEmpty(tasks))]), + _U.list([A2($Html.span, + _U.list([$Html$Attributes.id("todo-count")]), + _U.list([A2($Html.strong, + _U.list([]), + _U.list([$Html.text($Basics.toString(tasksLeft))])) + ,$Html.text(A2($Basics._op["++"],item_," left"))])) + ,A2($Html.ul, + _U.list([$Html$Attributes.id("filters")]), + _U.list([A4(visibilitySwap,address,"#/","All",visibility) + ,$Html.text(" ") + ,A4(visibilitySwap,address,"#/active","Active",visibility) + ,$Html.text(" ") + ,A4(visibilitySwap, + address, + "#/completed", + "Completed", + visibility)])) + ,A2($Html.button, + _U.list([$Html$Attributes.$class("clear-completed") + ,$Html$Attributes.id("clear-completed") + ,$Html$Attributes.hidden(_U.eq(tasksCompleted,0)) + ,A2($Html$Events.onClick,address,DeleteComplete)]), + _U.list([$Html.text(A2($Basics._op["++"], + "Clear completed (", + A2($Basics._op["++"], + $Basics.toString(tasksCompleted), + ")")))]))])); + }); + var Delete = function (a) { return {ctor: "Delete",_0: a};}; + var Add = {ctor: "Add"}; + var UpdateTask = F2(function (a,b) { + return {ctor: "UpdateTask",_0: a,_1: b}; + }); + var EditingTask = F2(function (a,b) { + return {ctor: "EditingTask",_0: a,_1: b}; + }); + var todoItem = F2(function (address,todo) { + return A2($Html.li, + _U.list([$Html$Attributes.classList(_U.list([{ctor: "_Tuple2" + ,_0: "completed" + ,_1: todo.completed} + ,{ctor: "_Tuple2",_0: "editing",_1: todo.editing}]))]), + _U.list([A2($Html.div, + _U.list([$Html$Attributes.$class("view")]), + _U.list([A2($Html.input, + _U.list([$Html$Attributes.$class("toggle") + ,$Html$Attributes.type$("checkbox") + ,$Html$Attributes.checked(todo.completed) + ,A2($Html$Events.onClick, + address, + A2(Check,todo.id,$Basics.not(todo.completed)))]), + _U.list([])) + ,A2($Html.label, + _U.list([A2($Html$Events.onDoubleClick, + address, + A2(EditingTask,todo.id,true))]), + _U.list([$Html.text(todo.description)])) + ,A2($Html.button, + _U.list([$Html$Attributes.$class("destroy") + ,A2($Html$Events.onClick,address,Delete(todo.id))]), + _U.list([]))])) + ,A2($Html.input, + _U.list([$Html$Attributes.$class("edit") + ,$Html$Attributes.value(todo.description) + ,$Html$Attributes.name("title") + ,$Html$Attributes.id(A2($Basics._op["++"], + "todo-", + $Basics.toString(todo.id))) + ,A3($Html$Events.on, + "input", + $Html$Events.targetValue, + function (_p1) { + return A2($Signal.message, + address, + A2(UpdateTask,todo.id,_p1)); + }) + ,A2($Html$Events.onBlur,address,A2(EditingTask,todo.id,false)) + ,A2(onEnter,address,A2(EditingTask,todo.id,false))]), + _U.list([]))])); + }); + var taskList = F3(function (address,visibility,tasks) { + var cssVisibility = $List.isEmpty(tasks) ? "hidden" : "visible"; + var allCompleted = A2($List.all, + function (_) { + return _.completed; + }, + tasks); + var isVisible = function (todo) { + var _p2 = visibility; + switch (_p2) + {case "Completed": return todo.completed; + case "Active": return $Basics.not(todo.completed); + default: return true;} + }; + return A2($Html.section, + _U.list([$Html$Attributes.id("main") + ,$Html$Attributes.style(_U.list([{ctor: "_Tuple2" + ,_0: "visibility" + ,_1: cssVisibility}]))]), + _U.list([A2($Html.input, + _U.list([$Html$Attributes.id("toggle-all") + ,$Html$Attributes.type$("checkbox") + ,$Html$Attributes.name("toggle") + ,$Html$Attributes.checked(allCompleted) + ,A2($Html$Events.onClick, + address, + CheckAll($Basics.not(allCompleted)))]), + _U.list([])) + ,A2($Html.label, + _U.list([$Html$Attributes.$for("toggle-all")]), + _U.list([$Html.text("Mark all as complete")])) + ,A2($Html.ul, + _U.list([$Html$Attributes.id("todo-list")]), + A2($List.map, + todoItem(address), + A2($List.filter,isVisible,tasks)))])); + }); + var UpdateField = function (a) { + return {ctor: "UpdateField",_0: a}; + }; + var taskEntry = F2(function (address,task) { + return A2($Html.header, + _U.list([$Html$Attributes.id("header")]), + _U.list([A2($Html.h1,_U.list([]),_U.list([$Html.text("todos")])) + ,A2($Html.input, + _U.list([$Html$Attributes.id("new-todo") + ,$Html$Attributes.placeholder("What needs to be done?") + ,$Html$Attributes.autofocus(true) + ,$Html$Attributes.value(task) + ,$Html$Attributes.name("newTodo") + ,A3($Html$Events.on, + "input", + $Html$Events.targetValue, + function (_p3) { + return A2($Signal.message,address,UpdateField(_p3)); + }) + ,A2(onEnter,address,Add)]), + _U.list([]))])); + }); + var view = F2(function (address,model) { + return A2($Html.div, + _U.list([$Html$Attributes.$class("todomvc-wrapper") + ,$Html$Attributes.style(_U.list([{ctor: "_Tuple2" + ,_0: "visibility" + ,_1: "hidden"}]))]), + _U.list([A2($Html.section, + _U.list([$Html$Attributes.id("todoapp")]), + _U.list([A3($Html$Lazy.lazy2,taskEntry,address,model.field) + ,A4($Html$Lazy.lazy3, + taskList, + address, + model.visibility, + model.tasks) + ,A4($Html$Lazy.lazy3, + controls, + address, + model.visibility, + model.tasks)])) + ,infoFooter])); + }); + var NoOp = {ctor: "NoOp"}; + var actions = $Signal.mailbox(NoOp); + var focus = Elm.Native.Port.make(_elm).outboundSignal("focus", + function (v) { + return v; + }, + function () { + var toSelector = function (act) { + var _p4 = act; + if (_p4.ctor === "EditingTask") { + var id = _p4._0; + return A2($Basics._op["++"],"#todo-",$Basics.toString(id)); + } else { + return ""; + } + }; + var needsFocus = function (act) { + var _p5 = act; + if (_p5.ctor === "EditingTask") { + var id = _p5._0,bool = _p5._1; + return bool; + } else { + return false; + } + }; + return A2($Signal.map, + toSelector, + A3($Signal.filter, + needsFocus, + A2(EditingTask,0,true), + actions.signal)); + }()); + var emptyModel = {tasks: _U.list([]) + ,visibility: "All" + ,field: "" + ,uid: 0}; + var initialModel = A2($Maybe.withDefault,emptyModel,getStorage); + var newTask = F2(function (desc,id) { + return {description: desc + ,completed: false + ,editing: false + ,id: id}; + }); + var update = F2(function (action,model) { + var _p7 = action; + switch (_p7.ctor) + {case "NoOp": return model; + case "Add": return _U.update(model, + {uid: model.uid + 1 + ,field: "" + ,tasks: $String.isEmpty(model.field) ? model.tasks : A2($Basics._op["++"], + model.tasks, + _U.list([A2(newTask,model.field,model.uid)]))}); + case "UpdateField": var str = _p7._0; + return _U.update(model,{field: str}); + case "EditingTask": var id = _p7._0,isEditing = _p7._1; + var updateTask = function (t) { + return _U.eq(t.id,id) ? _U.update(t, + {editing: isEditing}) : t; + }; + return _U.update(model, + {tasks: A2($List.map,updateTask,model.tasks)}); + case "UpdateTask": var id = _p7._0,task = _p7._1; + var updateTask = function (t) { + return _U.eq(t.id,id) ? _U.update(t,{description: task}) : t; + }; + return _U.update(model, + {tasks: A2($List.map,updateTask,model.tasks)}); + case "Delete": var id = _p7._0; + return _U.update(model, + {tasks: A2($List.filter, + function (t) { + return !_U.eq(t.id,id); + }, + model.tasks)}); + case "DeleteComplete": return _U.update(model, + {tasks: A2($List.filter, + function (_p6) { + return $Basics.not(function (_) { + return _.completed; + }(_p6)); + }, + model.tasks)}); + case "Check": var id = _p7._0,isCompleted = _p7._1; + var updateTask = function (t) { + return _U.eq(t.id,id) ? _U.update(t, + {completed: isCompleted}) : t; + }; + return _U.update(model, + {tasks: A2($List.map,updateTask,model.tasks)}); + case "CheckAll": var isCompleted = _p7._0; + var updateTask = function (t) { + return _U.update(t,{completed: isCompleted}); + }; + return _U.update(model, + {tasks: A2($List.map,updateTask,model.tasks)}); + default: var visibility = _p7._0; + return _U.update(model,{visibility: visibility});} + }); + var model = A3($Signal.foldp, + update, + initialModel, + actions.signal); + var main = A2($Signal.map,view(actions.address),model); + var setStorage = Elm.Native.Port.make(_elm).outboundSignal("setStorage", + function (v) { + return {tasks: Elm.Native.List.make(_elm).toArray(v.tasks).map(function (v) { + return {description: v.description + ,completed: v.completed + ,editing: v.editing + ,id: v.id}; + }) + ,field: v.field + ,uid: v.uid + ,visibility: v.visibility}; + }, + model); + var Task = F4(function (a,b,c,d) { + return {description: a,completed: b,editing: c,id: d}; + }); + var Model = F4(function (a,b,c,d) { + return {tasks: a,field: b,uid: c,visibility: d}; + }); + return _elm.Todo.values = {_op: _op + ,Model: Model + ,Task: Task + ,newTask: newTask + ,emptyModel: emptyModel + ,NoOp: NoOp + ,UpdateField: UpdateField + ,EditingTask: EditingTask + ,UpdateTask: UpdateTask + ,Add: Add + ,Delete: Delete + ,DeleteComplete: DeleteComplete + ,Check: Check + ,CheckAll: CheckAll + ,ChangeVisibility: ChangeVisibility + ,update: update + ,view: view + ,onEnter: onEnter + ,is13: is13 + ,taskEntry: taskEntry + ,taskList: taskList + ,todoItem: todoItem + ,controls: controls + ,visibilitySwap: visibilitySwap + ,infoFooter: infoFooter + ,main: main + ,model: model + ,initialModel: initialModel + ,actions: actions}; +}; \ No newline at end of file