Source code
Revision control
Copy as Markdown
Other Tools
{"version":3,"sources":["../node_modules/preact/dist/preact.esm.js","../node_modules/linkstate/dist/linkstate.es.js","../src/app/util.js","../src/app/model.js","../node_modules/classnames/index.js","../src/app/footer.js","../src/app/item.js","../src/app/index.js","../src/index.js"],"names":["VNode","h","nodeName","attributes","lastSimple","child","simple","i","children","EMPTY_CHILDREN","arguments","length","G","push","stack","pop","undefined","String","p","key","options","vnode","extend","obj","props","enqueueRender","component","_dirty","items","debounceRendering","defer","rerender","list","renderComponent","isSameNodeType","node","hydrating","splitText","_componentConstructor","isNamedNode","normalizedNodeName","toLowerCase","getNodeProps","defaultProps","createNode","isSvg","document","createElementNS","createElement","removeNode","parentNode","removeChild","setAccessor","name","old","value","style","cssText","_typeof","IS_NON_DIMENSIONAL","test","innerHTML","__html","useCapture","replace","t","substring","addEventListener","eventProxy","removeEventListener","_listeners","removeAttribute","ns","removeAttributeNS","setAttributeNS","setAttribute","className","setProperty","e","this","type","event","flushMounts","c","mounts","afterMount","componentDidMount","diff","dom","context","mountAll","parent","componentRoot","diffLevel","ownerSVGElement","ret","idiff","appendChild","out","prevSvgMode","isSvgMode","_component","nodeValue","createTextNode","replaceChild","__preactattr_","vnodeName","buildComponentFromVNode","firstChild","fc","vchildren","a","nextSibling","u","dangerouslySetInnerHTML","innerDiffNode","isHydrating","j","f","vchild","originalChildren","childNodes","keyed","keyedLen","min","len","childrenLen","vlen","_child","__key","trim","insertBefore","recollectNodeTree","unmountOnly","ref","removeChildren","lastChild","next","previousSibling","diffAttributes","attrs","collectComponent","constructor","components","createComponent","Ctor","inst","prototype","render","call","Component","doRender","o","nextBase","splice","state","setComponentProps","opts","_disable","__ref","base","componentWillMount","componentWillReceiveProps","prevContext","prevProps","syncComponentUpdates","isChild","rendered","cbase","previousProps","previousState","prevState","previousContext","isUpdate","initialBase","initialChildComponent","skip","shouldComponentUpdate","k","componentWillUpdate","getChildContext","toUnmount","childComponent","childProps","T","_parentComponent","S","E","baseParent","v","componentRef","unshift","componentDidUpdate","afterUpdate","_renderCallbacks","originalComponent","oldDom","isDirectOwner","isOwner","r","x","unmountComponent","beforeUnmount","componentWillUnmount","inner","merge","dlv","def","split","linkState","eventPath","path","target","match","checked","setState","uuid","random","Math","toString","pluralize","count","word","store","Promise","resolve","then","bind","setTimeout","callback","s","re","Object","assign","n","hasOwnProperty","TodoModel","sub","todos","onChanges","inform","forEach","cb","addTodo","title","concat","toggleAll","completed","map","todo","toggle","todoToToggle","_extends","destroy","filter","save","todoToSave","clearCompleted","classNames","classes","arg","argType","Array","isArray","apply","hasOwn","join","module","exports","define","amd","TodoFooter","nowShowing","_ref","completedCount","onClearCompleted","class","P","href","cx","selected","onClick","ESCAPE_KEY","ENTER_KEY","TodoItem","handleSubmit","_this","onSave","_this$props","onDestroy","val","editText","handleEdit","onEdit","_this$props2","_this$props3","onToggle","preventDefault","handleKeyDown","which","onCancel","handleDestroy","querySelector","focus","_ref$todo","editing","_ref2","onDblClick","onKeyDown","FILTERS","active","App","_Component","handleNewTodoKeyDown","keyCode","model","newTodo","edit","id","text","cancel","handleRoute","location","hash","_ref2$nowShowing","ALL_TODOS","shownTodos","activeTodoCount","reduce","placeholder","autoFocus","onChange","_this2"],"mappings":"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","file":"app.js","sourcesContent":["/** Virtual DOM Node */\nfunction VNode() {}\n\n/** Global options\n *\t@public\n *\t@namespace options {Object}\n */\nvar options = {\n\n\t/** If `true`, `prop` changes trigger synchronous component updates.\n *\t@name syncComponentUpdates\n *\t@type Boolean\n *\t@default true\n */\n\t//syncComponentUpdates: true,\n\n\t/** Processes all created VNodes.\n *\t@param {VNode} vnode\tA newly-created VNode to normalize/process\n */\n\t//vnode(vnode) { }\n\n\t/** Hook invoked after a component is mounted. */\n\t// afterMount(component) { }\n\n\t/** Hook invoked after the DOM is updated with a component's latest render. */\n\t// afterUpdate(component) { }\n\n\t/** Hook invoked immediately before a component is unmounted. */\n\t// beforeUnmount(component) { }\n};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\n/** JSX/hyperscript reviver\n*\tBenchmarks: https://esbench.com/bench/57ee8f8e330ab09900a1a1a0\n *\t@see http://jasonformat.com/wtf-is-jsx\n *\t@public\n */\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\t// if a \"vnode hook\" is defined, pass every created VNode to it\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\n/** Copy own-properties from `props` onto `obj`.\n *\t@returns obj\n *\t@private\n */\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\n/** Call a function asynchronously, as soon as possible.\n *\t@param {Function} callback\n */\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n\treturn h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\n// DOM properties that should NOT have \"px\" added when numeric\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\n/** Managed queue of dirty components to be re-rendered */\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p,\n\t list = items;\n\titems = [];\n\twhile (p = list.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\n/** Check if two nodes are equivalent.\n *\t@param {Element} node\n *\t@param {VNode} vnode\n *\t@private\n */\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\n/** Check if an Element has a given normalized name.\n*\t@param {Element} node\n*\t@param {String} nodeName\n */\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\n/**\n * Reconstruct Component-style `props` from a VNode.\n * Ensures default/fallback values from `defaultProps`:\n * Own-properties of `defaultProps` not present in `vnode.attributes` are added.\n * @param {VNode} vnode\n * @returns {Object} props\n */\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\n/** Create an element with the given nodeName.\n *\t@param {String} nodeName\n *\t@param {Boolean} [isSvg=false]\tIf `true`, creates an element within the SVG namespace.\n *\t@returns {Element} node\n */\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\n/** Remove a child node from its parent if attached.\n *\t@param {Element} node\t\tThe node to remove\n */\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\n/** Set a named attribute on the given Node, with special behavior for some names and event handlers.\n *\tIf `value` is `null`, the attribute/handler will be removed.\n *\t@param {Element} node\tAn element to mutate\n *\t@param {string} name\tThe name/key to set, such as an event or attribute name\n *\t@param {any} old\tThe last value that was set for this name/node pair\n *\t@param {any} value\tAn attribute value, such as a function to be used as an event handler\n *\t@param {Boolean} isSvg\tAre we currently diffing inside an svg?\n *\t@private\n */\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {\n\t\t// ignore\n\t} else if (name === 'ref') {\n\t\tif (old) old(null);\n\t\tif (value) value(node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\tsetProperty(node, name, value == null ? '' : value);\n\t\tif (value == null || value === false) node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink\\:?/, ''));\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\n/** Attempt to set a DOM property to the given value.\n *\tIE & FF throw for certain property-value combinations.\n */\nfunction setProperty(node, name, value) {\n\ttry {\n\t\tnode[name] = value;\n\t} catch (e) {}\n}\n\n/** Proxy an event to hooked event handlers\n *\t@private\n */\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\n/** Queue of components that have been mounted and are awaiting componentDidMount */\nvar mounts = [];\n\n/** Diff recursion count, used to track the end of the diff cycle. */\nvar diffLevel = 0;\n\n/** Global flag indicating if the diff is currently within an SVG */\nvar isSvgMode = false;\n\n/** Global flag indicating if the diff is performing hydration */\nvar hydrating = false;\n\n/** Invoke queued componentDidMount lifecycle methods */\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.pop()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\n/** Apply differences in a given vnode (and it's deep children) to a real DOM Node.\n *\t@param {Element} [dom=null]\t\tA DOM node to mutate into the shape of the `vnode`\n *\t@param {VNode} vnode\t\t\tA VNode (with descendants forming a tree) representing the desired DOM structure\n *\t@returns {Element} dom\t\t\tThe created/mutated element\n *\t@private\n */\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\t// diffLevel having been 0 here indicates initial entry into the diff (not a subdiff)\n\tif (!diffLevel++) {\n\t\t// when first starting the diff, check if we're diffing an SVG or within an SVG\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\t// hydration is indicated by the existing element to be diffed not having a prop cache\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\t// append the element if its a new parent\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\t// diffLevel being reduced to 0 means we're exiting the diff\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\t\t// invoke queued componentDidMount lifecycle methods\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\n/** Internals of `diff()`, separated to allow bypassing diffLevel / mount flushing. */\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\t// empty values (null, undefined, booleans) render as empty Text nodes\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\t// Fast case: Strings & Numbers create/update Text nodes.\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\n\t\t// update if it's already a Text node:\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\t/* istanbul ignore if */ /* Browser quirk that can't be covered: https://github.com/developit/preact/commit/fd4f21f5c45dfd75151bd27b4c217d8003aa5eb9 */\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\t// it wasn't a Text node: replace it with one and recycle the old Element\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\t// If the VNode represents a Component, perform a component diff:\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\t// If there's no existing element or it's the wrong type, create a new one:\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\t// move children into the replacement node\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t} // if the previous Element was mounted into the DOM, replace it inline\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\t// recycle the old element (skips non-Element node types)\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\t// Optimization: fast-path for elements containing a single TextNode:\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t}\n\t// otherwise, if there are existing or new children, diff them:\n\telse if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\t// Apply attributes/props from VNode to the DOM Element:\n\tdiffAttributes(out, vnode.attributes, props);\n\n\t// restore previous SVG mode: (in case we're exiting an SVG namespace)\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\n/** Apply child and attribute changes between a VNode and a DOM Node to the DOM.\n *\t@param {Element} dom\t\t\tElement whose children should be compared & mutated\n *\t@param {Array} vchildren\t\tArray of VNodes to compare to `dom.childNodes`\n *\t@param {Object} context\t\t\tImplicitly descendant context object (from most recent `getChildContext()`)\n *\t@param {Boolean} mountAll\n *\t@param {Boolean} isHydrating\tIf `true`, consumes externally created elements similar to hydration\n */\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\t// Build up a map of keyed children and an Array of unkeyed children:\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\t// attempt to find a node based on key matching\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// attempt to pluck a node of the same type from the existing children\n\t\t\telse if (!child && min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// morph the matched/found/created DOM child to match vchild (deep)\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// remove unused keyed children:\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\t// remove orphaned unkeyed children:\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\n/** Recursively recycle (or just unmount) a node and its descendants.\n *\t@param {Node} node\t\t\t\t\t\tDOM node to start unmount/removal from\n *\t@param {Boolean} [unmountOnly=false]\tIf `true`, only triggers unmount lifecycle, skips removal\n */\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\t// if node is owned by a Component, unmount that component (ends up recursing back here)\n\t\tunmountComponent(component);\n\t} else {\n\t\t// If the node's VNode had a ref function, invoke it with null here.\n\t\t// (this is part of the React spec, and smart for unsetting references)\n\t\tif (node['__preactattr_'] != null && node['__preactattr_'].ref) node['__preactattr_'].ref(null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\n/** Recollect/unmount all children.\n *\t- we use .lastChild here because it causes less reflow than .firstChild\n *\t- it's also cheaper than accessing the .childNodes Live NodeList\n */\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\n/** Apply differences in attributes from a VNode to the given DOM Element.\n *\t@param {Element} dom\t\tElement with attributes to diff `attrs` against\n *\t@param {Object} attrs\t\tThe desired end-state key-value attribute pairs\n *\t@param {Object} old\t\t\tCurrent/previous attributes (from previous VNode or element's prop cache)\n */\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\t// remove attributes no longer present on the vnode by setting them to undefined\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\t// add new & update changed attributes\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\n/** Retains a pool of Components for re-use, keyed on component name.\n *\tNote: since component names are not unique or even necessarily available, these are primarily a form of sharding.\n *\t@private\n */\nvar components = {};\n\n/** Reclaim a component for later re-use by the recycler. */\nfunction collectComponent(component) {\n\tvar name = component.constructor.name;\n\t(components[name] || (components[name] = [])).push(component);\n}\n\n/** Create a component. Normalizes differences between PFC's and classful Components. */\nfunction createComponent(Ctor, props, context) {\n\tvar list = components[Ctor.name],\n\t inst;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\tif (list) {\n\t\tfor (var i = list.length; i--;) {\n\t\t\tif (list[i].constructor === Ctor) {\n\t\t\t\tinst.nextBase = list[i].nextBase;\n\t\t\t\tlist.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn inst;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\n/** Set a component's `props` (generally derived from JSX attributes).\n *\t@param {Object} props\n *\t@param {Object} [opts]\n *\t@param {boolean} [opts.renderSync=false]\tIf `true` and {@link options.syncComponentUpdates} is `true`, triggers synchronous rendering.\n *\t@param {boolean} [opts.render=true]\t\t\tIf `false`, no render will be triggered.\n */\nfunction setComponentProps(component, props, opts, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tif (component.__ref = props.ref) delete props.ref;\n\tif (component.__key = props.key) delete props.key;\n\n\tif (!component.base || mountAll) {\n\t\tif (component.componentWillMount) component.componentWillMount();\n\t} else if (component.componentWillReceiveProps) {\n\t\tcomponent.componentWillReceiveProps(props, context);\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (opts !== 0) {\n\t\tif (opts === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tif (component.__ref) component.__ref(component);\n}\n\n/** Render a Component, triggering necessary lifecycle events and taking High-Order Components into account.\n *\t@param {Component} component\n *\t@param {Object} [opts]\n *\t@param {boolean} [opts.build=false]\t\tIf `true`, component will build and store a DOM node if not already associated with one.\n *\t@private\n */\nfunction renderComponent(component, opts, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t rendered,\n\t inst,\n\t cbase;\n\n\t// if updating\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (opts !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\t// context to pass to the child, can be updated via (grand-)parent component\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\t\t\t// set up high order component link\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\t// destroy high order component link\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || opts === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.unshift(component);\n\t} else if (!skip) {\n\t\t// Ensure that pending componentDidMount() hooks of child components\n\t\t// are called before the componentDidUpdate() hook in the parent.\n\t\t// Note: disabled as it causes duplicate hooks, see https://github.com/developit/preact/issues/750\n\t\t// flushMounts();\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, previousContext);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\tif (component._renderCallbacks != null) {\n\t\twhile (component._renderCallbacks.length) {\n\t\t\tcomponent._renderCallbacks.pop().call(component);\n\t\t}\n\t}\n\n\tif (!diffLevel && !isChild) flushMounts();\n}\n\n/** Apply the Component referenced by a VNode to the DOM.\n *\t@param {Element} dom\tThe DOM node to mutate\n *\t@param {VNode} vnode\tA Component-referencing VNode\n *\t@returns {Element} dom\tThe created/mutated element\n *\t@private\n */\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\t\t\t// passing dom/oldDom as nextBase will recycle it if unused, so bypass recycling on L229:\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/** Remove a component from the DOM and recycle it.\n *\t@param {Component} component\tThe Component instance to unmount\n *\t@private\n */\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\t// recursively tear down & recollect high-order component children:\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] && base['__preactattr_'].ref) base['__preactattr_'].ref(null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\tcollectComponent(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tif (component.__ref) component.__ref(null);\n}\n\n/** Base Component class.\n *\tProvides `setState()` and `forceUpdate()`, which trigger rendering.\n *\t@public\n *\n *\t@example\n *\tclass MyFoo extends Component {\n *\t\trender(props, state) {\n *\t\t\treturn <div />;\n *\t\t}\n *\t}\n */\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\t/** @public\n *\t@type {object}\n */\n\tthis.context = context;\n\n\t/** @public\n *\t@type {object}\n */\n\tthis.props = props;\n\n\t/** @public\n *\t@type {object}\n */\n\tthis.state = this.state || {};\n}\n\nextend(Component.prototype, {\n\n\t/** Returns a `boolean` indicating if the component should re-render when receiving the given `props` and `state`.\n *\t@param {object} nextProps\n *\t@param {object} nextState\n *\t@param {object} nextContext\n *\t@returns {Boolean} should the component re-render\n *\t@name shouldComponentUpdate\n *\t@function\n */\n\n\t/** Update component state by copying properties from `state` to `this.state`.\n *\t@param {object} state\t\tA hash of state properties to update with new values\n *\t@param {function} callback\tA function to be called once component state is updated\n */\n\tsetState: function setState(state, callback) {\n\t\tvar s = this.state;\n\t\tif (!this.prevState) this.prevState = extend({}, s);\n\t\textend(s, typeof state === 'function' ? state(s, this.props) : state);\n\t\tif (callback) (this._renderCallbacks = this._renderCallbacks || []).push(callback);\n\t\tenqueueRender(this);\n\t},\n\n\n\t/** Immediately perform a synchronous re-render of the component.\n *\t@param {function} callback\t\tA function to be called after component is re-rendered.\n *\t@private\n */\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) (this._renderCallbacks = this._renderCallbacks || []).push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\n\n\t/** Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n *\tVirtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n *\t@param {object} props\t\tProps (eg: JSX attributes) received from parent element/component\n *\t@param {object} state\t\tThe component's current state\n *\t@param {object} context\t\tContext object (if a parent component has provided context)\n *\t@returns VNode\n */\n\trender: function render() {}\n});\n\n/** Render JSX into a `parent` Element.\n *\t@param {VNode} vnode\t\tA (JSX) VNode to render\n *\t@param {Element} parent\t\tDOM element to render into\n *\t@param {Element} [merge]\tAttempt to re-use an existing DOM tree rooted at `merge`\n *\t@public\n *\n *\t@example\n *\t// render a div into <body>:\n *\trender(<div id=\"hello\">hello!</div>, document.body);\n *\n *\t@example\n *\t// render a \"Thing\" component into #foo:\n *\tconst Thing = ({ name }) => <span>{ name }</span>;\n *\trender(<Thing name=\"one\" />, document.querySelector('#foo'));\n */\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport { h, h as createElement, cloneElement, Component, render, rerender, options };export default preact;\n//# sourceMappingURL=preact.esm.js.map\n","function dlv(obj, key, def, p) {\n\tp = 0;\n\tkey = key.split ? key.split('.') : key;\n\twhile (obj && p<key.length) { obj = obj[key[p++]]; }\n\treturn obj===undefined ? def : obj;\n}\n\n/** Create an Event handler function that sets a given state property.\n *\t@param {Component} component\tThe component whose state should be updated\n *\t@param {string} key\t\t\t\tA dot-notated key path to update in the component's state\n *\t@param {string} eventPath\t\tA dot-notated key path to the value that should be retrieved from the Event or component\n *\t@returns {function} linkedStateHandler\n */\nfunction linkState(component, key, eventPath) {\n\tvar path = key.split('.');\n\treturn function(e) {\n\t\tvar t = e && e.target || this,\n\t\t\tstate = {},\n\t\t\tobj = state,\n\t\t\tv = typeof eventPath==='string' ? dlv(e, eventPath) : t.nodeName ? (t.type.match(/^che|rad/) ? t.checked : t.value) : e,\n\t\t\ti = 0;\n\t\tfor ( ; i<path.length-1; i++) {\n\t\t\tobj = obj[path[i]] || (obj[path[i]] = !i && component.state[path[i]] || {});\n\t\t}\n\t\tobj[path[i]] = v;\n\t\tcomponent.setState(state);\n\t};\n}\n\nexport default linkState;\n//# sourceMappingURL=linkstate.es.js.map\n","export function uuid() {\n let uuid = '';\n for (let i = 0; i < 32; i++) {\n let random = Math.random() * 16 | 0;\n if (i === 8 || i === 12 || i === 16 || i === 20) {\n uuid += '-';\n }\n uuid += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16);\n }\n return uuid;\n}\n\nexport function pluralize(count, word) {\n return count === 1 ? word : word + 's';\n}\n\nexport function store(namespace, data) {\n // if (data) return localStorage[namespace] = JSON.stringify(data);\n\n // let store = localStorage[namespace];\n // return store && JSON.parse(store) || [];\n return [];\n}\n","import { uuid, store } from './util';\n\nexport default class TodoModel {\n constructor(key, sub) {\n this.key = key;\n this.todos = store(key) || [];\n this.onChanges = [sub];\n }\n\n inform() {\n store(this.key, this.todos);\n this.onChanges.forEach( cb => cb() );\n }\n\n addTodo(title) {\n this.todos = this.todos.concat({\n id: uuid(),\n title,\n completed: false\n });\n this.inform();\n }\n\n toggleAll(completed) {\n this.todos = this.todos.map(\n todo => ({ ...todo, completed })\n );\n this.inform();\n }\n\n toggle(todoToToggle) {\n this.todos = this.todos.map( todo => (\n todo !== todoToToggle ? todo : ({ ...todo, completed: !todo.completed })\n ) );\n this.inform();\n }\n\n destroy(todo) {\n this.todos = this.todos.filter( t => t !== todo );\n this.inform();\n }\n\n save(todoToSave, title) {\n this.todos = this.todos.map( todo => (\n todo !== todoToSave ? todo : ({ ...todo, title })\n ));\n this.inform();\n }\n\n clearCompleted() {\n this.todos = this.todos.filter( todo => !todo.completed );\n this.inform();\n }\n}\n","/*!\n Copyright (c) 2016 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import cx from 'classnames';\nimport { h, Component } from 'preact';\nimport { pluralize } from './util';\n\nexport default class TodoFooter extends Component {\n render({ nowShowing, count, completedCount, onClearCompleted }) {\n return (\n <footer class=\"footer\">\n <span class=\"todo-count\">\n <strong>{count}</strong> {pluralize(count, 'item')} left\n </span>\n <ul class=\"filters\">\n <li>\n <a href=\"#/\" class={cx({ selected: nowShowing == 'all' })}>All</a>\n </li>\n {' '}\n <li>\n <a href=\"#/active\" class={cx({ selected: nowShowing == 'active' })}>Active</a>\n </li>\n {' '}\n <li>\n <a href=\"#/completed\" class={cx({ selected: nowShowing == 'completed' })}>Completed</a>\n </li>\n </ul>\n { completedCount > 0 && (\n <button class=\"clear-completed\" onClick={onClearCompleted}>\n Clear completed\n </button>\n ) }\n </footer>\n );\n }\n}\n","import cx from 'classnames';\nimport { h, Component } from 'preact';\n\nconst ESCAPE_KEY = 27;\nconst ENTER_KEY = 13;\n\nexport default class TodoItem extends Component {\n handleSubmit = () => {\n let { onSave, onDestroy, todo } = this.props,\n val = this.state.editText.trim();\n if (val) {\n onSave(todo, val);\n this.setState({ editText: val });\n }\n else {\n onDestroy(todo);\n }\n };\n\n handleEdit = () => {\n let { onEdit, todo } = this.props;\n onEdit(todo);\n this.setState({ editText: todo.title });\n };\n\n toggle = e => {\n let { onToggle, todo } = this.props;\n onToggle(todo);\n e.preventDefault();\n };\n\n handleKeyDown = e => {\n if (e.which===ESCAPE_KEY) {\n let { todo } = this.props;\n this.setState({ editText: todo.title });\n this.props.onCancel(todo);\n }\n else if (e.which===ENTER_KEY) {\n this.handleSubmit();\n }\n };\n\n handleDestroy = () => {\n this.props.onDestroy(this.props.todo);\n };\n\n // shouldComponentUpdate({ todo, editing, editText }) {\n // return (\n // todo !== this.props.todo ||\n // editing !== this.props.editing ||\n // editText !== this.state.editText\n // );\n // }\n\n componentDidUpdate() {\n let node = this.base && this.base.querySelector('.edit');\n if (node) node.focus();\n }\n\n render({ todo:{ title, completed }, onToggle, onDestroy, editing }, { editText }) {\n return (\n <li class={cx({ completed, editing })}>\n <div class=\"view\">\n <input\n class=\"toggle\"\n type=\"checkbox\"\n checked={completed}\n onChange={this.toggle}\n />\n <label onDblClick={this.handleEdit}>{title}</label>\n <button class=\"destroy\" onClick={this.handleDestroy} />\n </div>\n { editing && (\n <input\n class=\"edit\"\n value={editText}\n onBlur={this.handleSubmit}\n onInput={this.linkState('editText')}\n onKeyDown={this.handleKeyDown}\n />\n ) }\n </li>\n );\n }\n}\n","import { h, Component } from 'preact';\nimport linkState from 'linkstate';\n\nimport TodoModel from './model';\nimport TodoFooter from './footer';\nimport TodoItem from './item';\n\nconst ENTER_KEY = 13;\n\nconst FILTERS = {\n all: todo => true,\n active: todo => !todo.completed,\n completed: todo => todo.completed\n};\n\nexport default class App extends Component {\n constructor() {\n super();\n this.model = new TodoModel('preact-todos', () => this.setState({}) );\n addEventListener('hashchange', this.handleRoute.bind(this));\n this.handleRoute();\n }\n\n handleRoute() {\n let nowShowing = String(location.hash || '').split('/').pop();\n if (!FILTERS[nowShowing]) {\n nowShowing = 'all';\n }\n this.setState({ nowShowing });\n }\n\n handleNewTodoKeyDown = (e) => {\n if (e.keyCode !== ENTER_KEY) return;\n e.preventDefault();\n\n // let val = '';\n // if (this.state.newTodo === undefined) {\n // val = e.target.value.trim();\n // }\n\n let val = e.target.value.trim();\n\n if (val) {\n this.model.addTodo(val);\n this.setState({ newTodo: '' });\n }\n };\n\n toggleAll = event => {\n let checked = event.target.checked;\n this.model.toggleAll(checked);\n };\n\n toggle = todo => {\n this.model.toggle(todo);\n };\n\n destroy = todo => {\n this.model.destroy(todo);\n };\n\n edit = todo => {\n this.setState({ editing: todo.id });\n };\n\n save = (todoToSave, text) => {\n this.model.save(todoToSave, text);\n this.setState({ editing: null });\n };\n\n cancel = () => {\n this.setState({ editing: null });\n };\n\n clearCompleted = () => {\n this.model.clearCompleted();\n };\n\n render({ }, { nowShowing = ALL_TODOS, newTodo, editing }) {\n let { todos } = this.model,\n shownTodos = todos.filter( FILTERS[nowShowing] ),\n activeTodoCount = todos.reduce( (a, todo) => a + (todo.completed ? 0 : 1), 0),\n completedCount = todos.length - activeTodoCount;\n\n return (\n <div>\n <header class=\"header\">\n <h1>todos</h1>\n <input\n class=\"new-todo\"\n placeholder=\"What needs to be done?\"\n value={newTodo}\n onKeyDown={this.handleNewTodoKeyDown}\n onInput={linkState(this, 'newTodo')}\n autoFocus={true}\n />\n </header>\n\n { todos.length ? (\n <section class=\"main\">\n <input\n class=\"toggle-all\"\n type=\"checkbox\"\n onChange={this.toggleAll}\n checked={activeTodoCount === 0}\n />\n <ul class=\"todo-list\">\n { shownTodos.map( todo => (\n <TodoItem\n todo={todo}\n onToggle={this.toggle}\n onDestroy={this.destroy}\n onEdit={this.edit}\n editing={editing === todo.id}\n onSave={this.save}\n onCancel={this.cancel}\n />\n )) }\n </ul>\n </section>\n ) : null }\n\n { (activeTodoCount || completedCount) ? (\n <TodoFooter\n count={activeTodoCount}\n completedCount={completedCount}\n nowShowing={nowShowing}\n onClearCompleted={this.clearCompleted}\n />\n ) : null }\n </div>\n );\n }\n}\n","import { h, render } from 'preact';\nimport App from './app';\n// import 'todomvc-common';\n// import 'todomvc-common/base.css';\n// import 'todomvc-app-css/index.css';\nrender(<App />, document.querySelector('.todoapp'));\n"]}