From 9836da4af17e8109aba464c127ced782a18eadf6 Mon Sep 17 00:00:00 2001 From: "Paul D. Fernhout" Date: Sat, 27 Jun 2015 11:43:28 -0400 Subject: [PATCH 01/63] Add unloadingTest.html This is a test of unloading components when another component is mounted on a different root. The test currently fails. See Issue #694 for details. --- tests/unloadingTest.html | 101 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 tests/unloadingTest.html diff --git a/tests/unloadingTest.html b/tests/unloadingTest.html new file mode 100644 index 00000000..c3aaf446 --- /dev/null +++ b/tests/unloadingTest.html @@ -0,0 +1,101 @@ + + + + + + Mithril unloading test + + + + + +

This tests unloading of components which have an unloader method.

+

+ The test mounts Component1 on div "one" with a nested internal component and an "open" button. + The internal component displays its creation time and an input field. + The open button when clicked will in turn mount Component2 on div "two" with a close button. + The close button will unmount the second component. +

+

When the second component is mounted or unmounted, the expected behavior is:

+ +

Check the console for logging as to redraws and unload events.

+
+
+ + + + From c873fa5bf661bb887222445ee90aa559f11c9ccb Mon Sep 17 00:00:00 2001 From: ikki3355 Date: Fri, 23 Oct 2015 08:45:17 -0500 Subject: [PATCH 02/63] clear pendingRequests count on routeUnobtrusive(e) --- mithril.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mithril.js b/mithril.js index 58760547..a179d996 100644 --- a/mithril.js +++ b/mithril.js @@ -1017,6 +1017,8 @@ var m = (function app(window, undefined) { var currentTarget = e.currentTarget || e.srcElement; var args = m.route.mode === "pathname" && currentTarget.search ? parseQueryString(currentTarget.search.slice(1)) : {}; while (currentTarget && currentTarget.nodeName.toUpperCase() !== "A") currentTarget = currentTarget.parentNode; + // clear pendingRequests because we want an immediate route change + pendingRequests = 0; m.route(currentTarget[m.route.mode].slice(modes[m.route.mode].length), args); } function setScroll() { From b52f2278397fc0c7d999bcf80156e03493e92c64 Mon Sep 17 00:00:00 2001 From: impinball Date: Fri, 6 Nov 2015 15:59:30 -0500 Subject: [PATCH 03/63] Re-enable some failing tests --- test/mithril.deferred.js | 2 +- test/mithril.render.js | 2 +- test/mithril.route.js | 9 ++++----- test/mithril.trust.js | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/test/mithril.deferred.js b/test/mithril.deferred.js index 1f31eb1c..ea7a8184 100644 --- a/test/mithril.deferred.js +++ b/test/mithril.deferred.js @@ -118,7 +118,7 @@ describe("m.deferred()", function () { }) // FIXME: this is a bug. - xit("synchronously throws subclasses of Errors on creation", function () { + it("synchronously throws subclasses of Errors on creation", function () { expect(function () { m.deferred().reject(new TypeError()) }).to.throw() diff --git a/test/mithril.render.js b/test/mithril.render.js index 34faa178..27e3c154 100644 --- a/test/mithril.render.js +++ b/test/mithril.render.js @@ -1318,7 +1318,7 @@ describe("m.render()", function () { // FIXME: implement document.createRange().createContextualFragment() in the // mock document to fix this test - xit("keeps unkeyed identity if mixed with elements/trusted text and identity can be inferred", function () { // eslint-disable-line + it("keeps unkeyed identity if mixed with elements/trusted text and identity can be inferred", function () { // eslint-disable-line var root = mock.document.createElement("div") m.render(root, m("div", [ diff --git a/test/mithril.route.js b/test/mithril.route.js index 7317d268..b82642ea 100644 --- a/test/mithril.route.js +++ b/test/mithril.route.js @@ -39,7 +39,6 @@ describe("m.route()", function () { // Use these instead of `it` and `xit` in this set of tests if you need a // root element. var dit = makeIt(it) - var xdit = makeIt(xit) // Wraps the `it` function for dependency injection that doesn't require // `this` @@ -103,7 +102,7 @@ describe("m.route()", function () { }) // FIXME: this causes others to fail - xdit("skips route change if component ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line + dit("skips route change if component ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line mode("search") var spy = sinon.spy() @@ -131,7 +130,7 @@ describe("m.route()", function () { }) // FIXME: this causes others to fail - xdit("skips route change if subcomponent ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line + dit("skips route change if subcomponent ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line mode("search") var spy = sinon.spy() @@ -162,7 +161,7 @@ describe("m.route()", function () { }) // FIXME: this causes others to fail - xdit("skips route change if non-curried component ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line + dit("skips route change if non-curried component ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line mode("search") var spy = sinon.spy() @@ -191,7 +190,7 @@ describe("m.route()", function () { }) // FIXME: this causes others to fail - xdit("skips route change if non-curried subcomponent ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line + dit("skips route change if non-curried subcomponent ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line mode("search") var spy = sinon.spy() diff --git a/test/mithril.trust.js b/test/mithril.trust.js index 748fa75e..41881b31 100644 --- a/test/mithril.trust.js +++ b/test/mithril.trust.js @@ -43,7 +43,7 @@ describe("m.trust()", function () { // FIXME: this is a bug (trusted string's contents rendered as just // textual contents) - xit("works with mixed trusted content in td", function () { + it("works with mixed trusted content in td", function () { var root = document.createElement("table") root.appendChild(root = document.createElement("tr")) From c17eac7436b871609ea865ee3480f0c12ca89222 Mon Sep 17 00:00:00 2001 From: Isiah Meadows Date: Sat, 7 Nov 2015 06:34:11 -0500 Subject: [PATCH 04/63] Create CONTRIBUTING.md I added the following to it: - Bug reporting - Feature requests - Contributing guide - Style guide --- CONTRIBUTING.md | 853 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 853 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..f76cec42 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,853 @@ +# Bug reports + +Use the [issue tracker](https://github.com/lhorie/mithril.js/issues). Do check to make sure your bug hasn't already been filed. Please give the following information, where possible: + +1. The version of Mithril you're using, whether it's the dev version or [the version on npm](http://npm.im/mithril.js). The version on npm may not have all the latest bug fixes, so your bug might very well be fixed in the dev version. +2. A detailed explanation of the bug. +3. A test case. The simpler, the better. + +# Feature requests + +Use the [issue tracker](https://github.com/lhorie/mithril.js/issues). Please do the following, where possible: + +1. Check to make sure your suggestion hasn't already been filed. There's a nice collection of some of these feature requests [here](https://github.com/lhorie/mithril.js/issues/802). +2. Clearly denote your issue as a feature request. It helps make the intent clearer. Even better is to denote it in the title. +3. Describe your idea. This is the most important part. +4. Submit, and wait for feedback. Don't forget to drop by the [Gitter room](https://gitter.im/lhorie/mithril.js) to get some publicity. It gets traffic daily. :smile: + +# Contributing + +We welcome any and all contributions. This is a community-driven project. Although we don't have a lot, we do have a few guidelines for contributions. + +1. Please adhere to the style guide. It's pretty lengthy, but most everything is checked by ESLint, and if anything fails to check, the build will fail, and you will know about it. Most of it is common practice and common sense. ESLint is also set up to check for other common errors, such as undeclared variables and invalid `typeof` values. +2. Please make sure there are no regressions with your patch. Please don't disable existing tests, and please don't send a PR with new, disabled tests. + - There are a few known failing tests currently (PRs welcome): [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.deferred.js#L121-L125) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.render.js#L1321-L1343) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L106-L131) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L134-L162) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L165-L191) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L194-L222) +3. For any new features introduced, be sure to write new unit tests for it. Maximum coverage is what we want. +4. Try to not leave any extra `TODO`s, `FIXME`s, etc. in your code. ESLint will nag at you until you fix whatever problem it is. + - Note that it's only a warning, not an error. It won't fail the CI tests, and there's a few outstanding ones inside Mithril right now. + +It is assumed that all contributions you make you have the appropriate rights to and that it may be made available under the MIT License, the license used for this project. + +# Style Guide + +The style is checked with ESLint. This style guide is here for one reason only: consistency. This should work for most code here, but this shouldn't be considered absolute &endash; consistency with the surrounding code is higher priority than following this guide. Also, if some sort of hack is impossible without violating this guide (e.g. if Mithril ever needs [Bluebird's infamous hack](https://stackoverflow.com/q/24987896)), just make sure the code is consistent with what's around it. + +### Line length + +Keep lines down to a maximum of 80 characters. Minifiers are very good at compressing whitespace, so don't be afraid to use it. + +The only exception to this rule is with long regexes. Append `// eslint-disable-line max-len` to the end of those lines. + +### Function length + +Keep function length to no more than 20 statements, including those in nested blocks. + +The only exceptions are for revealing module wrappers and Mocha `describe` and `context` blocks. + +This isn't checked for the tests, but still, keep it reasonable. + +### Line endings + +Use Windows-style line endings (i.e. CRLF). + +End each file with a line break. + +### Semicolons + +Avoid semicolons. (A few resources to help you understand this: [*](http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding) [*](http://inimino.org/~inimino/blog/javascript_semicolons) [*](http://jamesallardice.com/understanding-automatic-semi-colon-insertion-in-javascript/)) + +### Redundant expressions + +Don't use redundant parentheses, curly braces, `undefined`s, labels, ternaries, etc. Examples: + +- `var foo = value === 1 ? true : false` is better written as `var foo = value === 1`. +- `var foo = (value === 1) ? bar : baz` is better written as `var foo = value === 1 ? bar : baz`. +- `var foo = undefined` is better written as `var foo`. +- `return undefined` is better written as `return`. +- `delete(obj.foo)` is better written as `delete obj.foo`. +- `return` at the end of a function if you're returning `undefined` should just be omitted. +- If you're returning `null`, there's usually little reason to not just return `undefined`. +- Unused variables should be removed. +- An exception is detailed below for assignment in conditions. + +### Equality testing + +Use strict equality (`===`/`!==`), not loose equality (`==`/`!=`). The only exception is if you're testing for `null` or `undefined`, in which loose equality, `value == null` and `value != null` is preferred. The reason is for type safety with primitives. + +### `eval` and friends + +Never use `eval`, the `Function` constructor, and friends. Those will fail when running under CSP restrictions, and this library should work in those environments. + +### Quotes + +Prefer double quotes to single quotes, but using single quotes to avoid escaping is okay. + +### Strict mode + +All code must be in strict mode, preferably wrapped in an IIFE. + +## Comments + +Comments are helpful. Use descriptive comments where needed, so others can read it and understand it. If a non-obvious hack is used, explain it with a comment. But don't repeat yourself with a redundant comment when the code adequately describes itself. + +```js +// Good, code is self-descriptive +var CARD_DECK_SIZE = 52 + +// Shuffle the deck of cards. +for (var i = 0; i < CARD_DECK_SIZE; i++) { + var j = i + (Math.random() * CARD_DECK_SIZE - i)|0 + + var tmp = deck[i] + deck[i] = deck[j] + deck[j] = tmp +} + +// Also good, requires a descriptive comment. +function toFastProperties(obj) { + // Bluebird's toFastProperties hack. Forces V8 to optimize object as prototype, + // significantly speeding up property access. + + /* eslint-disable no-eval */ + function C() {} + C.prototype = obj + new C() + return + eval(obj) + /* eslint-enable no-eval */ +} + +// Bad, redundant comments +var CARD_DECK_SIZE = 52 + +// Shuffle the deck of cards. +function shuffle(deck) { + for (var i = 0; i < CARD_DECK_SIZE; i++) { + // Generate a random card index to swap at. + var j = i + (Math.random() * CARD_DECK_SIZE - i)|0 + + // Swap the cards at each index. + var tmp = deck[i] + deck[i] = deck[j] + deck[j] = tmp + } +} +``` + +### Magic values + +Prefer constant variables to magic values where it helps with code readability. Also, don't use comments in place of a constant. + +```js +// Good +var CARD_DECK_SIZE = 52 +for (var i = 0; i < CARD_DECK_SIZE; i++) { + var j = i + (Math.random() * CARD_DECK_SIZE - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} + +// Bad, what's 52 for? +for (var i = 0; i < 52; i++) { + var j = i + (Math.random() * 52 - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} + +// Also bad, comment not substitute for constant +// 52 cards in a deck +for (var i = 0; i < 52; i++) { + var j = i + (Math.random() * 52 - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} +``` + +### Distracting comments + +Don't comment *everything*. It's distracting, pointless, and a waste of time. Only comment when you need to. + +```js +// Extremely bad. Don't *ever* do this. + +// This function loops through each item in a list, calling `f` with each item +// and their respective index. If the function `f` returns explicitly with +// `false`, iteration stops. This function returns the original list for +// convenience. +function forEach(list, f) { + // Loop through each entry in the list with the loop index `i` + for (var i = 0; i < list.length; i++) { + // Call the function with the current item and index + if (f(list[i], i) === false) { + // If the function explicitly returns `false`, immediately stop + // iteration. + break + } + } + // Return the list, for convenience. + return list +} +``` + +### Initial whitespace + +Start your comments with a space. It's more readable. + +```js +// Good +// This is a comment. + +// Bad +//This is a comment. +``` + +### Grammar and spelling + +Use proper grammar and spelling in your comments. This shouldn't need explanation. + +## Whitespace + +Use vertical whitespace and indentation to your advantage. It helps with readability, and minifiers are astonishingly great at removing this. :stuck_out_tongue_winking_eye: + +```js +// Good +function iterate() { + var index = 0 + var list = [] + while (hasNext()) { + list.push(next(index)) + index++ + } + + for (var i = 0; i < list.length; i++) { + read(list[i]) + } +} + +// Bad +function iterate() { + var index = 0 + var list = [] + while (hasNext()) list.push(next(index++)) + for (var i = 0; i < list.length; i++) read(list[i]) +} + +// Even worse +function iterate() { + var list = [] + for (var index = 0; hasNext(); list.push(next(index++))) {} + for (var i = 0; i < list.length; i++) read(list[i]) +} +``` + +### Trailing whitespace + +Please don't leave trailing spaces anywhere. It makes diffs harder to read. + +### Indentation and vertical whitespace + +Indent with hard tabs. Each one counts for 4 spaces. + +Never mix tabs and spaces. Don't use smart tabs. + +### Excessive whitespace + +Keep whitespace within reason. Limit vertical whitespace to no more than 2 consecutive blank lines, and don't start or end blocks with plain whitespace. Don't use more than one character of horizontal whitespace beyond indentation. + +```js +// Bad +function iterate() { + var index = 0 + var list = [] + + while (hasNext()) { + list.push(next(index)) + index++ + } + + // Too many empty lines + + + + for (var i = 0; i < list.length; i++) { + read(list[i]) + } +} + +// Also bad +var a = 2 +// ^^ ^^ +``` + +### Control keywords + +Always surround control keywords (e.g. `if`, `else`, `for`) with whitespace. + +## Operators + +### Binary operators + +Always surround binary keyword operators (e.g. `in`, `instanceof`) with whitespace. + +Always surround any other binary operator with whitespace, including assignment operators. Add line breaks after the operator, not before. + +```js +// Good +var a = 1 + 2 +a = 3 +a += 4 + +var a = 1 + 2 + 3 + 4 + 5 + + 6 + 7 + 8 + 9 + 10 + +// Bad +var a = 1+2 +var a = 1 +2 +var a = 1+ 2 +var a=1+2 +var a=1 + 2 +a=3 +a+=4 + +var a = 1 + 2 + 3 + 4 + 5 + + 6 + 7 + 8 + 9 + 10 +``` + +As an exception, casting to a 32-bit integer (i.e. `x|0`) doesn't require whitespace surrounding it. + +```js +// This is okay +var casted = value|0 +``` + +### Unary operators + +Always use whitespace between an unary keyword operator (e.g. `delete`, `new`) with whitespace. + +Do not use spaces between any other unary operator and the value they apply to. + +```js +// Good +!a +!!a +~~a +a++ +++a +-1 +~1 + +// Okay ++!a + +// Bad +! a +!! a +! ! a +++ a +a ++ ++ ! a + +// Even worse +- 1 +~ 1 +``` + +Don't use `new function () {}`. Just use an object literal instead, and an IIFE if needed. + +## Objects + +### Exterior whitespace + +Do not include space between the opening curly brace and the first object key in single line objects. For multi-line objects, don't include any extra preceding whitespace at the beginning or end. + +```js +// Good +var object = {foo: 1} + +var object = { + foo: 1, + bar: 2, + baz: 3, + quux: "string" +} + +// Bad +var object = { foo: 1 } + +var object = { + + foo: 1, + bar: 2, + baz: 3, + quux: "string" + +} +``` + +### Interior whitespace + +Use no space before an object key and the colon, but use a single space between the colon and value. + +```js +// Good +var object = {foo: 1} + +// Bad +var object = {foo:1} +var object = {foo : 1} + +// Very bad +var object = {foo :1} +``` + +### Larger objects + +Non-trivial objects should occupy multiple lines. + +```js +// Good +var object = { + foo: 1, + bar: 2, + baz: 3, + quux: "string" +} + +// Bad +var object = {foo: 1, bar: 2, baz: 3, quux: "string"} +``` + +### Comma placement + +Commas come last. Also, don't use trailing commas. + +```js +// Good +var object = { + foo: 1, + bar: 2 +} + +// Bad +var object = { + foo: 1, + bar: 2, // Trailing comma +} + +var object = { + foo: 1 +, bar: 2 // Comma first +} +``` + +### Member access + +When chaining methods and/or properties across multiple lines, dots come first. + +```js +// Good +object + .foo() + .bar() + +// Bad +object. + foo(). + bar() +``` + +### Property quoting + +Quote properties when needed. Never quote valid identifiers. This may lead to some inconsistency in whether properties are quoted or not in the object, but that inconsistency is okay, and is the only exception in consistency. + +```js +// Good +var object = { + foo: 1, + bar: 2 +} + +var object = { + foo: 1, + "non-identifier": 2 +} + +// Bad +var object = { + "foo": 1, + "bar": 2 +} + +var object = { + "foo": 1, + "non-identifier": 2 +} +``` + +### Iteration + +When iterating objects with `for-in`, filter it with `Object.prototype.hasOwnProperty` first. This may be on the same line if that's the only condition. If this is used more than once, make a local `hasOwn` alias to use like `hasOwn.call(object, prop)`. + +## Variables and declarations + +Use camel case (e.g. `loopIndex`) for variables, pascal case (e.g. `MyClass`) for classes, and upper case with underscores (e.g. `MAX_VALUE`) for constants. + +Use `self` to capture `this` where needed. (i.e. `var self = this`) + +Prefer short but clear, descriptive, and self-documenting variable names. + +Single letter names are only okay in these contexts: + +- Loop variables: `i`, `j`, etc. +- Function arguments in small, trivial functional utilities: `f`, `g`, etc. +- Standard mathematical algorithms: `x`, `y`, `a`, `b`, etc. + +```js +// Good +function forEach(list, f) { + for (var i = 0; i < list.length; i++) { + f(list[i], i) + } + return list +} + +function ajax(url, callback) { + var xhr = new XMLHttpRequest() + xhr.open("GET", url) + xhr.onreadystatechange = function () { + if (this.readyState === 4) { + callback(this.responseText, this.status) + } + } + xhr.send() +} + +// Bad +function iterateArray(listOfEntries, callback) { + for (var index = 0; index < listOfEntries.length; index++) { + callback(listOfEntries[index], index) + } + return listOfEntries +} + +function getRequestStringFromServer(serverLocation, functionToCall) { + var xmlHttpRequest = new XMLHttpRequest() + xmlHttpRequest.open("GET", serverLocation) + xmlHttpRequest.onreadystatechange = function () { + if (this.readyState === 4) { + functionToCall(this.responseText, this.status) + } + } + xmlHttpRequest.send() +} + +// Even worse +function e(l, c) { + for (var x = 0; x < l.length; x++) { + c(l[x], x) + } + return l +} + +function a(u, f) { + var x = new XMLHttpRequest() + x.open("GET", url) + x.onreadystatechange = function () { + if (this.readyState === 4) { + f(this.responseText,this.status) + } + } + x.send() +} +``` + +### Multiple variable declarations + +If a variable is assigned a value when it's declared, it gets its own line. + +If a variable is not immediately assigned a value, it may be grouped with others that aren't first assigned values. + +Do group related variables. + +Variable declarations in the init block of a for loop are excluded from this rule, but the number of declarations should still be minimized. + +```js +// Good +var a = 1 +var b = 2 +var c, d + +// Also good +var foo, bar, baz, quux +var spam, eggs, ham +var shouldUpdate, initialize + +// Okay, since it's within a for loop +for (var i = 0, test; (test = foo === 1); i++) { + doSomething(i) +} + +// Bad +var a = 1, b = 2, c, d + +// Even worse +var foo, bar, baz, quux, spam, eggs, ham, shouldUpdate, initialize +``` + +## Assignment + +### Native functions + +Don't assign to native functions or prototypes beyond polyfills. Ever. + +### Function declarations + +Don't assign to a function declaration. Declarations look like static values, so they should be treated that way. There is no difference in size, either. + +```js +// Bad +function foo() { return 1 } +foo = function () { return 2 } + +// Even worse +function foo() { return 1 } +foo = 2 +``` + +### Conditions + +Avoid assigning directly in conditions. If you need to assign in a condition, wrap them in a new set of parentheses. + +```js +// Good +var test = foo === 1 +if (test) { + doSomething() +} + +var test = foo === 1 +for (var i = 0; test; i++, test = foo === 1) { + doSomething(i) +} + +if ((test = foo === 1)) { + doSomething() +} + +for (var i = 0, test; (test = foo === 1); i++) { + doSomething(i) +} + +// Bad +if (test = foo === 1) { + doSomething() +} + +for (var i = 0, test; test = foo === 1; i++) { + doSomething(i) +} +``` + +## Functions + +Prefer anonymous functions to named functions in expressions where possible + +Prefer named function declarations to assigning a function to a declared variable where possible. + +```js +// Good +setTimeout(function () { doSomething() }, 0) + +function foo() { + return 1 +} + +// Good, uses recursion +setTimeout(function f() { + doSomething() + if (shouldRepeat()) setTimeout(f, 0) +}, 0) + +// Bad +requestAnimationFrame(function foo() { runNext() }) + +var foo = function () { + return 1 +} +``` + +### Anonymous functions + +Anonymous functions must have a single space between `function` and the arguments and between the arguments and the opening brace. + +### Named functions, function declarations + +Named functions and function declarations must have no space between the function name and the arguments and a single space between the arguments and the opening brace. + +## Blocks and conditionals + +### Curly braces + +Curly braces are required for blocks if the body takes up more than one line. This goes for functions as well. They are optional if it fits within one line, but don't be afraid to use them where you see fit. + +Do put an extra space after the first brace and before the final brace in single-line functions. + +```js +// Good +if (condition) doSomething() + +if (condition) { + doSomething() +} + +if (condition) { + doSomething() +} else { + doSomethingElse() +} + +if (condition) { + doSomething() + doSomethingElse() +} + +setTimeout(function () { doSomething() }, 0) + +setTimeout(function () { + doSomething() +}, 0) + +// Bad +if (condition) { doSomething(); doSomethingElse() } + +if (condition) + doSomething() + +setTimeout(function () { doSomething(); doSomethingElse() }, 0) + +setTimeout(function () {doSomething()}, 0) +``` + +### Function declarations + +Function declarations should always take more than one line. + +```js +// Good +function foo() { + return bar +} + +// Bad +function foo() { return bar } +``` + +### `if`-`else` + +Be consistent with braces in `if`-`else` statements. + +```js +// Good +if (condition) doSomething() +else doSomethingElse() + +if (condition) { + doSomething() +} else { + doSomethingElse() +} + +if (condition) { + doSomething() +} else if (anotherCondition) { + doSomethingElse() +} else { + doAnotherThing() +} + +// Okay +if (condition) doSomething() +else if (anotherCondition) doSomethingElse() +else doAnotherThing() + +// Bad +if (condition) doSomething() +else { + doSomethingElse() +} + +if (condition) doSomething() +else if (anotherCondition) { + doSomethingElse() +} else doAnotherThing() + + +if (condition) { + doSomething() +} else doSomethingElse() +``` + +### Empty blocks + +Mark empty blocks as intentionally empty via a comment or similar. Don't just leave an empty block and/or semicolon. + +```js +// Good +for (var i = 0; i < list.length && cond(list[i]); i++) { + // empty +} + +// Bad +for (var i = 0; i < list.length && cond(list[i]); i++) {} + +// Also bad +for (var i = 0; i < list.length && cond(list[i]); i++) { + ; +} + +// Even worse +for (var i = 0; i < list.length && cond(list[i]); i++); +``` + +### Nesting + +Don't nest `if` statements in `else` blocks if you don't need to. + +```js +// Good +if (test) { + doSomething() +} else if (otherTest) { + doSomethingElse() +} + +if (test) { + doSomething() +} else { + if (otherTest) { + doSomethingElse() + } + + doThisOtherThing() +} + +// Bad +if (test) { + doSomething() +} else { + if (otherTest) { + doSomethingElse() + } +} +``` + +Don't nest curly braces beyond 4 levels deep. This includes blocks, loops, and functions, as well as IIFE wrappers. This also includes the tests. There's rarely a reason to go farther, as most of the time, it's a signal to refactor and/or re-organize your code. + +### Brace style + +Put the `else`, `catch`, and `finally` on the same line as its closing brace. + +(Obviously, this doesn't apply to `if`-`else` statements that don't use curly braces.) From 814b5035ee60aaa2493846bad169a279e94b47b9 Mon Sep 17 00:00:00 2001 From: Florian Albertz Date: Sat, 7 Nov 2015 14:37:29 +0100 Subject: [PATCH 05/63] Do not use `window` when it is not available --- mithril.js | 2 +- mithril.min.js | 2 +- mithril.min.js.map | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mithril.js b/mithril.js index 864565f4..f52e6d0e 100644 --- a/mithril.js +++ b/mithril.js @@ -1,7 +1,7 @@ (function (global, factory) { "use strict" /* eslint-disable no-undef */ - var m = factory(window) + var m = factory(typeof window !== "undefined" ? window : {}) if (typeof module === "object" && module != null && module.exports) { module.exports = m } else if (typeof define === "function" && define.amd) { diff --git a/mithril.min.js b/mithril.min.js index 2e6fdad3..9dbccf83 100644 --- a/mithril.min.js +++ b/mithril.min.js @@ -4,5 +4,5 @@ http://github.com/lhorie/mithril.js (c) Leo Horie License: MIT */ -!function(a,b){"use strict";var c=b(window);"object"==typeof module&&null!=module&&module.exports?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):a.m=c}(this,function(a,b){"use strict";function c(a){return"function"==typeof a}function d(a){return"[object Object]"===Ka.call(a)}function e(a){return"[object String]"===Ka.call(a)}function f(){}function g(a,b){for(var c=0;cd;d++)if(a[d]!==b[d])return!1;return!0}function y(a,b,c){return a.tag!==b.tag?!0:x(c,Object.keys(b.attrs))?a.attrs.id!==b.attrs.id?!0:a.attrs.key!==b.attrs.key?!0:"all"===n.redraw.strategy()?!(b.configContext&&b.configContext.retain===!0):"diff"===n.redraw.strategy()?b.configContext&&b.configContext.retain===!1:void 0:!0}function z(a,b,d){y(a,b,d)&&(b.nodes.length&&Z(b.nodes),b.configContext&&c(b.configContext.onunload)&&b.configContext.onunload(),b.controllers&&g(b.controllers,function(a){a.unload&&a.onunload({preventDefault:f})}))}function A(a,b){return a.attrs.xmlns?a.attrs.xmlns:"svg"===a.tag?"http://www.w3.org/2000/svg":"math"===a.tag?"http://www.w3.org/1998/Math/MathML":b}function B(a,b,c){c.length&&(a.views=b,a.controllers=c,g(c,function(a){if(a.onunload&&a.onunload.$old&&(a.onunload=a.onunload.$old),Ta&&a.onunload){var b=a.onunload;a.onunload=f,a.onunload.$old=b}}))}function C(a,b,d,e,f){var g=b.attrs.config;if(c(g)){var h=f.configContext=f.configContext||{};a.push(function(){return g.call(b,d,!e,h,f)})}}function D(a,c,d,e,f,g,h,i){var j=a.nodes[0];return e&&Y(j,c.tag,c.attrs,a.attrs,f),a.children=U(j,c.tag,b,b,c.children,a.children,!1,0,c.attrs.contenteditable?j:d,f,h),a.nodes.intact=!0,i.length&&(a.views=g,a.controllers=i),j}function E(a,b,c){var d;a.$trusted?d=_(b,c,a):(d=[Fa.createTextNode(a)],Pa.test(b.nodeName)||s(b,d[0],c));var e;return e="string"==typeof a||"number"==typeof a||"boolean"==typeof a?new a.constructor(a):a,e.nodes=d,e}function F(a,b,c,d,e,f){var g=b.nodes;return d&&d===Fa.activeElement||(a.$trusted?(Z(g,b),g=_(c,e,a)):"textarea"===f?c.value=a:d?d.innerHTML=a:((1===g[0].nodeType||g.length>1)&&(Z(b.nodes,b),g=[Fa.createTextNode(a)]),q(c,g[0],e,a))),b=new a.constructor(a),b.nodes=g,b}function G(a,b,c,d,e,f,g){return 0===a.nodes.length?E(b,d,c):a.valueOf()!==b.valueOf()||e?F(b,a,d,f,c,g):(a.nodes.intact=!0,a)}function H(a){if(!a.$trusted)return Ma(a)?a.length:1;var b=a.match(/<[^\/]|\>\s*[^<]/g);return null!=b?b.length:void 0}function I(a,c,d,e,f,g,h,i,j){a=r(a);var k=[],l=c.length===a.length,m=0,n={},p=!1;o(c,function(a,b){p=!0,n[c[b].attrs.key]={action:Qa,index:b}}),w(a),p&&(c=u(a,c,n,d));for(var q=0,s=0,t=a.length;t>s;s++){var x=U(d,f,c,e,a[s],c[q],g,e+m||m,h,i,j);x!==b&&(l=l&&x.nodes.intact,m+=H(x),c[q++]=x)}return l||v(a,c,k),c}function J(a,b,c,d,e){if(null!=b){if(Ka.call(b)===Ka.call(a))return b;if(e&&e.nodes){var f=c-d,g=f+(Ma(a)?a:b.nodes).length;Z(e.nodes.slice(f,g),e.slice(f,g))}else b.nodes&&Z(b.nodes,b)}return b=new a.constructor,b.tag&&(b={}),b.nodes=[],b}function K(a,c){return c===b?a.attrs.is?Fa.createElement(a.tag,a.attrs.is):Fa.createElement(a.tag):a.attrs.is?Fa.createElementNS(c,a.tag,a.attrs.is):Fa.createElementNS(c,a.tag)}function L(a,b,c,d){return d?Y(b,a.tag,a.attrs,{},c):a.attrs}function M(a,c,d,e,f,g){return null!=a.children&&0!==a.children.length?U(c,a.tag,b,b,a.children,d.children,!0,0,a.attrs.contenteditable?c:e,f,g):a.children}function N(a,b,c,d,e,f,g){var h={tag:a.tag,attrs:b,children:c,nodes:[d]};return B(h,f,g),h.children&&!h.children.nodes&&(h.children.nodes=[]),"select"===a.tag&&"value"in a.attrs&&Y(d,a.tag,{value:a.attrs.value},{},e),h}function O(a,b,c,d){var e="diff"===n.redraw.strategy()&&a?a.indexOf(b):-1;return e>-1?c[e]:"function"==typeof d?new d:{}}function P(a,b,c,d){null!=d.onunload&&Va.push({controller:d,handler:d.onunload}),a.push(c),b.push(d)}function Q(a,b,c,d,e,f){var g=O(c.views,b,d,a.controller),h=+(a&&a.attrs&&a.attrs.key);return a=0===Ta||Wa||d&&d.indexOf(g)>-1?a.view(g):{tag:"placeholder"},"retain"===a.subtree?c:(h===h&&((a.attrs=a.attrs||{}).key=h),P(f,e,b,g),a)}function R(a,b,c,d){for(var e=b&&b.controllers;null!=a.view;)a=Q(a,a.view.$original||a.view,b,e,d,c);return a}function S(a,b,c,d,e,f,g,h,i,j,k,l){var m;if(a){m=K(b,c);var n=L(b,m,c,d),o=M(b,m,e,f,c,g);e=N(b,n,o,m,c,h,i)}else m=D(e,b,f,d,c,h,g,i);return(a||k&&null!=m)&&s(j,m,l),C(g,b,m,a,e),e}function T(a,b,c,d,f,g,h,i){var j=[],k=[];if(a=R(a,b,j,k),!a.tag&&k.length)throw new Error("Component template must return a virtual element, not an array, string, etc.");a.attrs=a.attrs||{},b.attrs=b.attrs||{};var l=Object.keys(a.attrs),m=l.length>+("key"in a.attrs);return z(a,b,l),e(a.tag)?S(0===b.nodes.length,a,A(a,h),m,b,c,i,j,k,d,g,f):void 0}function U(a,b,e,f,g,h,i,j,k,l,m){return g=p(g),"retain"===g.subtree?h:(h=J(g,h,j,f,e),Ma(g)?I(g,h,a,j,b,i,k,l,m):null!=g&&d(g)?T(g,h,k,a,j,i,l,m):c(g)?h:G(h,g,j,a,i,k,b))}function V(a,b){return a.action-b.action||a.index-b.index}function W(a){return"list"!==a&&"style"!==a&&"form"!==a&&"type"!==a&&"width"!==a&&"height"!==a}function X(a,b,e,f,g,i){if("config"!==a&&"key"!==a)if(c(b)&&"on"===a.slice(0,2))f[a]=aa(b,f);else if("style"===a&&null!=b&&d(b)){h(b,function(a,b){(null==e||e[b]!==a)&&(f.style[b]=a)});for(var j in e)La.call(e,j)&&(La.call(b,j)||(f.style[j]=""))}else null!=g?"href"===a?f.setAttributeNS("http://www.w3.org/1999/xlink","href",b):f.setAttribute("className"===a?"class":a,b):a in f&&W(a)?("input"!==i||f[a]!==b)&&(f[a]=b):f.setAttribute(a,b)}function Y(a,b,c,d,e){return h(c,function(c,f){var g=d[f];if(f in d&&g===c)"value"===f&&"input"===b&&a.value!=c&&(a.value=c);else{d[f]=c;try{X(f,c,g,a,e,b)}catch(h){if(h.message.indexOf("Invalid argument")<0)throw h}}}),d}function Z(a,b){for(var c=a.length-1;c>=0;c--)if(a[c]&&a[c].parentNode){try{a[c].parentNode.removeChild(a[c])}catch(d){}b=[].concat(b),b[c]&&$(b[c])}a.length&&(a.length=0)}function $(a){a.configContext&&c(a.configContext.onunload)&&(a.configContext.onunload(),a.configContext.onunload=null),a.controllers&&g(a.controllers,function(a){c(a.onunload)&&a.onunload({preventDefault:f})}),a.children&&(Ma(a.children)?g(a.children,$):a.children.tag&&$(a.children))}function _(a,b,c){var d=a.childNodes[b];if(d){var e=1!==d.nodeType,f=Fa.createElement("span");e?(a.insertBefore(f,d||null),f.insertAdjacentHTML("beforebegin",c),a.removeChild(f)):d.insertAdjacentHTML("beforebegin",c)}else Xa(a,c);for(var g=[];a.childNodes[b]!==d;)g.push(a.childNodes[b]),b++;return g}function aa(a,b){return function(c){c=c||event,n.redraw.strategy("diff"),n.startComputation();try{return a.call(b,c)}finally{ia()}}}function ba(a){var b=Za.indexOf(a);return 0>b?Za.push(a)-1:b}function ca(a){function b(){return arguments.length&&(a=arguments[0]),a}return b.toJSON=function(){return a},b}function da(a,b){function c(){return e.apply(this,b)||this}function d(c){for(var d=[c].concat(b),e=1;e0&&Ia(gb),gb=Ha(ha,fb)}function ha(){db&&(db(),db=null),g(ab,function(a,b){var c=bb[b];if(cb[b]){var d=[cb[b]];n.render(a,c.view?c.view(cb[b],d):"")}}),eb&&(eb(),eb=null),gb=null,hb=new Date,n.redraw.strategy("diff")}function ia(){"none"===n.redraw.strategy()?(Ta--,n.redraw.strategy("diff")):n.endComputation()}function ja(b){a[b]=function(){var a=Ga[n.route.mode];"pathname"===n.route.mode&&(a+=Ga.search),lb!==na(a)&&nb(a)},db=qa,a[b]()}function ka(){return("pathname"===n.route.mode?"":Ga.pathname)+mb[n.route.mode]}function la(b){if(a.history.pushState){db=qa;var c=b?"replaceState":"pushState";eb=function(){a.history[c](null,Fa.title,mb[n.route.mode]+lb)},nb(mb[n.route.mode]+lb)}else Ga[n.route.mode]=lb,nb(mb[n.route.mode]+lb)}function ma(a,b,c){arguments.length<3&&"object"!=typeof b&&(c=b,b=null);var d=lb;lb=a;var e,f,g=b||{},i=lb.indexOf("?");if(i>=0){var j=sa(lb.slice(i+1));h(g,function(a,b){j[b]=g[b]}),e=ra(j),f=lb.slice(0,i)}else e=ra(b),f=lb;if(e){var k=-1===f.indexOf("?")?"?":"&";lb=f+k+e}return la(c||d===a)}function na(a){return a.slice(mb[n.route.mode].length)}function oa(a,b,c){var d=c.indexOf("?");d>=0?(kb=sa(c.substr(d+1,c.length)),c=c.substr(0,d)):kb={};var e=Object.keys(b),f=e.indexOf(c);if(f>=0)return n.mount(a,b[e[f]]),!0;for(var h in b)if(La.call(b,h)){if(h===c)return n.mount(a,b[h]),!0;var i=new RegExp("^"+h.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(i.test(c))return c.replace(i,function(){var c=h.match(/:[^\/]+/g)||[],d=[].slice.call(arguments,1,-2);g(c,function(a,b){a=a.replace(/:|\./g,""),kb[a]=decodeURIComponent(d[b])}),n.mount(a,b[h])}),!0}}function pa(a){if(a=a||event,!a.ctrlKey&&!a.metaKey&&2!==a.which){a.preventDefault?a.preventDefault():a.returnValue=!1;var b,c=a.currentTarget||a.srcElement;for(b="pathname"===n.route.mode&&c.search?sa(c.search.slice(1)):{};c&&"A"!==c.nodeName.toUpperCase();)c=c.parentNode;n.route(c[n.route.mode].slice(mb[n.route.mode].length),b)}}function qa(){"hash"!==n.route.mode&&Ga.hash?Ga.hash=Ga.hash:a.scrollTo(0,0)}function ra(a,c){var e={},f=[];return h(a,function(a,h){var i=c?c+"["+h+"]":h;if(null===a)f.push(encodeURIComponent(i));else if(d(a))f.push(ra(a,i));else if(Ma(a)){var j=[];e[i]=e[i]||{},g(a,function(a){e[i][a]||(e[i][a]=!0,j.push(encodeURIComponent(i)+"="+encodeURIComponent(a)))}),f.push(j.join("&"))}else a!==b&&f.push(encodeURIComponent(i)+"="+encodeURIComponent(a))}),f.join("&")}function sa(a){if(""===a||null==a)return{};"?"===a.charAt(0)&&(a=a.slice(1));var b=a.split("&"),c={};return g(b,function(a){var b=a.split("="),d=decodeURIComponent(b[0]),e=2===b.length?decodeURIComponent(b[1]):null;null!=c[d]?(Ma(c[d])||(c[d]=[c[d]]),c[d].push(e)):c[d]=e}),c}function ta(a){var c=ba(a);Z(a.childNodes,$a[c]),$a[c]=b}function ua(a,b){function e(a){j=a||sb,g(l,function(a){j===rb?a.resolve(k):a.reject(k)})}function f(a,b,e,f){if((null!=k&&d(k)||c(k))&&c(a))try{var g=0;a.call(k,function(a){g++||(k=a,b())},function(a){g++||(k=a,e())})}catch(h){n.deferred.onerror(h),k=h,e()}else f()}function h(){var d;try{d=k&&k.then}catch(g){return n.deferred.onerror(g),k=g,j=qb,h()}f(d,function(){j=pb,h()},function(){j=qb,h()},function(){try{j===pb&&c(a)?k=a(k):j===qb&&c(b)&&(k=b(k),j=pb)}catch(g){return n.deferred.onerror(g),k=g,e()}k===i?(k=TypeError(),e()):f(d,function(){e(rb)},e,function(){e(j===pb&&rb)})})}var i=this,j=0,k=0,l=[];i.promise={},i.resolve=function(a){return j||(k=a,j=pb,h()),this},i.reject=function(a){return j||(k=a,j=qb,h()),this},i.promise.then=function(a,b){var c=new ua(a,b);return j===rb?c.resolve(k):j===sb?c.reject(k):l.push(c),c.promise}}function va(a,b){var c=n.prop(b);return a.then(c),c.then=function(c,d){return va(a.then(c,d),b)},c["catch"]=c.then.bind(null,null),c["finally"]=function(a){function d(){return n.deferred().resolve(a()).promise}return c.then(function(a){return va(d().then(function(){return a}),b)},function(a){return va(d().then(function(){throw new Error(a)}),b)})},c}function wa(a){return a instanceof EvalError||a instanceof RangeError||a instanceof ReferenceError||a instanceof SyntaxError||a instanceof TypeError||a instanceof URIError}function xa(a){return a}function ya(){return"mithril_callback_"+(new Date).getTime()+"_"+Math.round(1e16*Math.random()).toString(36)}function za(c){var d=ya(),e=Fa.createElement("script");a[d]=function(f){e.parentNode.removeChild(e),c.onload({type:"load",target:{responseText:f}}),a[d]=b},e.onerror=function(){return e.parentNode.removeChild(e),c.onerror({type:"error",target:{status:500,responseText:'{"error": "Error making jsonp request"}'}}),a[d]=b,!1},e.onload=function(){return!1},e.src=c.url+(c.url.indexOf("?")>0?"&":"?")+(c.callbackKey?c.callbackKey:"callback")+"="+d+"&"+ra(c.data||{}),Fa.body.appendChild(e)}function Aa(b){var d=new a.XMLHttpRequest;if(d.open(b.method,b.url,!0,b.user,b.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?b.onload({type:"load",target:d}):b.onerror({type:"error",target:d}))},b.serialize===JSON.stringify&&b.data&&"GET"!==b.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),b.deserialize===JSON.parse&&d.setRequestHeader("Accept","application/json, text/*"),c(b.config)){var f=b.config(d,b);null!=f&&(d=f)}var g;if(g="GET"!==b.method&&b.data?b.data:"",g&&!e(g)&&g.constructor!==a.FormData)throw new Error("Request data should be either be a string or FormData. Check the `serialize` option in `m.request`");return d.send(g),d}function Ba(a){return a.dataType&&"jsonp"===a.dataType.toLowerCase()?za(a):Aa(a)}function Ca(a,b,c){if("GET"===a.method&&"jsonp"!==a.dataType){var d=a.url.indexOf("?")<0?"?":"&",e=ra(b);a.url+=e?d+e:""}else a.data=c(b);return a}function Da(a,b){var c=a.match(/:[a-z]\w+/gi);return c&&b&&g(c,function(c){var d=c.slice(1);a=a.replace(c,b[d]),delete b[d]}),a}function Ea(a){return a.responseText}var Fa,Ga,Ha,Ia,Ja="v0.2.1",Ka={}.toString,La={}.hasOwnProperty,Ma=Array.isArray||function(a){return"[object Array]"===Ka.call(a)},Na=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,Oa=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,Pa=/^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/;i(a),n.deps=function(b){return i(a=b||a),a},n.version=function(){return Ja};var Qa=1,Ra=2,Sa=3,Ta=0;n.startComputation=function(){Ta++},n.endComputation=function(){Ta>1?Ta--:(Ta=0,n.redraw())};var Ua,Va=[],Wa=!1,Xa=function(){try{return Fa.createRange().createContextualFragment("x"),function(a,b){a.appendChild(Fa.createRange().createContextualFragment(b))}}catch(a){return function(a,b){a.insertAdjacentHTML("beforeend",b)}}}(),Ya={appendChild:function(a){Ua===b&&(Ua=Fa.createElement("html")),Fa.documentElement&&Fa.documentElement!==a?Fa.replaceChild(a,Fa.documentElement):Fa.appendChild(a),this.childNodes=Fa.childNodes},insertBefore:function(a){this.appendChild(a)},childNodes:[]},Za=[],$a={};n.render=function(a,c,d){if(!a)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var e,f=[],h=ba(a),i=a===Fa;e=i||a===Fa.documentElement?Ya:a,i&&"html"!==c.tag&&(c={tag:"html",attrs:{},children:c}),$a[h]===b&&Z(e.childNodes),d===!0&&ta(a),$a[h]=U(e,null,b,b,c,$a[h],!1,0,null,b,f),g(f,function(a){a()})},n.trust=function(a){return a=new String(a),a.$trusted=!0,a},n.prop=function(a){return(null!=a&&d(a)||c(a))&&c(a.then)?va(a):ca(a)};var _a,ab=[],bb=[],cb=[],db=null,eb=null,fb=16;n.component=function(a){for(var b=[],c=1;cd&&(d=ab.length);var e=!1,f={preventDefault:function(){e=!0,db=eb=null}};return g(Va,function(a){a.handler.call(a.controller,f),a.controller.onunload=null}),e?g(Va,function(a){a.controller.onunload=a.handler}):Va=[],cb[d]&&c(cb[d].onunload)&&cb[d].onunload(f),ea(b,a,d,e)};var gb=0,hb=0,ib=Ha===a.requestAnimationFrame?ga:function(){+new Date-hb>fb&&ga()},jb=!1;n.redraw=function(a){if(!jb){jb=!0,a&&(Wa=!0);try{gb&&!a?ib():(ha(),gb=Ha(function(){gb=0},fb))}finally{jb=Wa=!1}}},n.redraw.strategy=n.prop(),n.withAttr=function(a,b,c){return function(d){d=d||event;var e,f=d.currentTarget||this,g=c||this;e=a in f?f[a]:f.getAttribute(a),b.call(g,e)}};var kb,lb,mb={pathname:"",hash:"#",search:"?"},nb=f,ob=!1;n.route=function(a,b,c,d){if(0===arguments.length)return lb;if(3===arguments.length&&e(b))nb=function(d){var e=lb=na(d);if(!oa(a,c,e)){if(ob)throw new Error("Ensure the default route matches one of the routes defined in m.route");ob=!0,n.route(b,!0),ob=!1}},ja("hash"===n.route.mode?"onhashchange":"onpopstate");else if(a.addEventListener||a.attachEvent)a.href=ka()+d.attrs.href,a.addEventListener?(a.removeEventListener("click",pa),a.addEventListener("click",pa)):(a.detachEvent("onclick",pa),a.attachEvent("onclick",pa));else if(e(a))return ma.apply(this,arguments)},n.route.param=function(a){if(!kb)throw new Error("You must call m.route(element, defaultRoute, routes) before calling m.route.param()");return a?kb[a]:kb},n.route.mode="search",n.route.buildQueryString=ra,n.route.parseQueryString=sa;var pb=1,qb=2,rb=3,sb=4;return n.deferred=function(){var a=new ua;return a.promise=va(a.promise),a},n.deferred.onerror=function(a){if(wa(a))throw Ta=0,a},n.sync=function(a){function b(a,b){return function(g){return e[a]=g,b||(f="reject"),0===--d&&(c.promise(e),c[f](e)),g}}var c=n.deferred(),d=a.length,e=new Array(d),f="resolve";return a.length>0?g(a,function(a,c){a.then(b(c,!0),b(c,!1))}):c.resolve([]),c.promise},n.request=function(a){a.background!==!0&&n.startComputation();var b=new ua,c=xa,d=xa,e=Ea;return a.dataType&&"jsonp"===a.dataType.toLowerCase()||(c=a.serialize||JSON.stringify,d=a.deserialize||JSON.parse,e=function(a){return 0===a.responseText.length&&d===JSON.parse?null:a.responseText}),a.serialize=c,a.deserialize=d,a.method=(a.method||"GET").toUpperCase(),a.url=Da(a.url,a.data),a=Ca(a,a.data,c),a.onload=a.onerror=function(c){c=c||event;var f,h,i="load"===c.type;f=i?a.unwrapSuccess:a.unwrapError;try{h=(f||xa)(d(e(c.target,a)),c.target),i&&(Ma(h)&&a.type?g(h,function(b,c){h[c]=new a.type(b)}):a.type&&(h=new a.type(h)))}catch(j){n.deferred.onerror(j),h=j,i=!1}b[i?"resolve":"reject"](h),a.background!==!0&&n.endComputation()},Ba(a),b.promise=va(b.promise,a.initialValue),b.promise},n}); +!function(a,b){"use strict";var c=b("undefined"!=typeof window?window:{});"object"==typeof module&&null!=module&&module.exports?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):a.m=c}(this,function(a,b){"use strict";function c(a){return"function"==typeof a}function d(a){return"[object Object]"===Ka.call(a)}function e(a){return"[object String]"===Ka.call(a)}function f(){}function g(a,b){for(var c=0;cd;d++)if(a[d]!==b[d])return!1;return!0}function y(a,b,c){return a.tag!==b.tag?!0:x(c,Object.keys(b.attrs))?a.attrs.id!==b.attrs.id?!0:a.attrs.key!==b.attrs.key?!0:"all"===n.redraw.strategy()?!(b.configContext&&b.configContext.retain===!0):"diff"===n.redraw.strategy()?b.configContext&&b.configContext.retain===!1:void 0:!0}function z(a,b,d){y(a,b,d)&&(b.nodes.length&&Z(b.nodes),b.configContext&&c(b.configContext.onunload)&&b.configContext.onunload(),b.controllers&&g(b.controllers,function(a){a.unload&&a.onunload({preventDefault:f})}))}function A(a,b){return a.attrs.xmlns?a.attrs.xmlns:"svg"===a.tag?"http://www.w3.org/2000/svg":"math"===a.tag?"http://www.w3.org/1998/Math/MathML":b}function B(a,b,c){c.length&&(a.views=b,a.controllers=c,g(c,function(a){if(a.onunload&&a.onunload.$old&&(a.onunload=a.onunload.$old),Ta&&a.onunload){var b=a.onunload;a.onunload=f,a.onunload.$old=b}}))}function C(a,b,d,e,f){var g=b.attrs.config;if(c(g)){var h=f.configContext=f.configContext||{};a.push(function(){return g.call(b,d,!e,h,f)})}}function D(a,c,d,e,f,g,h,i){var j=a.nodes[0];return e&&Y(j,c.tag,c.attrs,a.attrs,f),a.children=U(j,c.tag,b,b,c.children,a.children,!1,0,c.attrs.contenteditable?j:d,f,h),a.nodes.intact=!0,i.length&&(a.views=g,a.controllers=i),j}function E(a,b,c){var d;a.$trusted?d=_(b,c,a):(d=[Fa.createTextNode(a)],Pa.test(b.nodeName)||s(b,d[0],c));var e;return e="string"==typeof a||"number"==typeof a||"boolean"==typeof a?new a.constructor(a):a,e.nodes=d,e}function F(a,b,c,d,e,f){var g=b.nodes;return d&&d===Fa.activeElement||(a.$trusted?(Z(g,b),g=_(c,e,a)):"textarea"===f?c.value=a:d?d.innerHTML=a:((1===g[0].nodeType||g.length>1)&&(Z(b.nodes,b),g=[Fa.createTextNode(a)]),q(c,g[0],e,a))),b=new a.constructor(a),b.nodes=g,b}function G(a,b,c,d,e,f,g){return 0===a.nodes.length?E(b,d,c):a.valueOf()!==b.valueOf()||e?F(b,a,d,f,c,g):(a.nodes.intact=!0,a)}function H(a){if(!a.$trusted)return Ma(a)?a.length:1;var b=a.match(/<[^\/]|\>\s*[^<]/g);return null!=b?b.length:void 0}function I(a,c,d,e,f,g,h,i,j){a=r(a);var k=[],l=c.length===a.length,m=0,n={},p=!1;o(c,function(a,b){p=!0,n[c[b].attrs.key]={action:Qa,index:b}}),w(a),p&&(c=u(a,c,n,d));for(var q=0,s=0,t=a.length;t>s;s++){var x=U(d,f,c,e,a[s],c[q],g,e+m||m,h,i,j);x!==b&&(l=l&&x.nodes.intact,m+=H(x),c[q++]=x)}return l||v(a,c,k),c}function J(a,b,c,d,e){if(null!=b){if(Ka.call(b)===Ka.call(a))return b;if(e&&e.nodes){var f=c-d,g=f+(Ma(a)?a:b.nodes).length;Z(e.nodes.slice(f,g),e.slice(f,g))}else b.nodes&&Z(b.nodes,b)}return b=new a.constructor,b.tag&&(b={}),b.nodes=[],b}function K(a,c){return c===b?a.attrs.is?Fa.createElement(a.tag,a.attrs.is):Fa.createElement(a.tag):a.attrs.is?Fa.createElementNS(c,a.tag,a.attrs.is):Fa.createElementNS(c,a.tag)}function L(a,b,c,d){return d?Y(b,a.tag,a.attrs,{},c):a.attrs}function M(a,c,d,e,f,g){return null!=a.children&&0!==a.children.length?U(c,a.tag,b,b,a.children,d.children,!0,0,a.attrs.contenteditable?c:e,f,g):a.children}function N(a,b,c,d,e,f,g){var h={tag:a.tag,attrs:b,children:c,nodes:[d]};return B(h,f,g),h.children&&!h.children.nodes&&(h.children.nodes=[]),"select"===a.tag&&"value"in a.attrs&&Y(d,a.tag,{value:a.attrs.value},{},e),h}function O(a,b,c,d){var e="diff"===n.redraw.strategy()&&a?a.indexOf(b):-1;return e>-1?c[e]:"function"==typeof d?new d:{}}function P(a,b,c,d){null!=d.onunload&&Va.push({controller:d,handler:d.onunload}),a.push(c),b.push(d)}function Q(a,b,c,d,e,f){var g=O(c.views,b,d,a.controller),h=+(a&&a.attrs&&a.attrs.key);return a=0===Ta||Wa||d&&d.indexOf(g)>-1?a.view(g):{tag:"placeholder"},"retain"===a.subtree?c:(h===h&&((a.attrs=a.attrs||{}).key=h),P(f,e,b,g),a)}function R(a,b,c,d){for(var e=b&&b.controllers;null!=a.view;)a=Q(a,a.view.$original||a.view,b,e,d,c);return a}function S(a,b,c,d,e,f,g,h,i,j,k,l){var m;if(a){m=K(b,c);var n=L(b,m,c,d),o=M(b,m,e,f,c,g);e=N(b,n,o,m,c,h,i)}else m=D(e,b,f,d,c,h,g,i);return(a||k&&null!=m)&&s(j,m,l),C(g,b,m,a,e),e}function T(a,b,c,d,f,g,h,i){var j=[],k=[];if(a=R(a,b,j,k),!a.tag&&k.length)throw new Error("Component template must return a virtual element, not an array, string, etc.");a.attrs=a.attrs||{},b.attrs=b.attrs||{};var l=Object.keys(a.attrs),m=l.length>+("key"in a.attrs);return z(a,b,l),e(a.tag)?S(0===b.nodes.length,a,A(a,h),m,b,c,i,j,k,d,g,f):void 0}function U(a,b,e,f,g,h,i,j,k,l,m){return g=p(g),"retain"===g.subtree?h:(h=J(g,h,j,f,e),Ma(g)?I(g,h,a,j,b,i,k,l,m):null!=g&&d(g)?T(g,h,k,a,j,i,l,m):c(g)?h:G(h,g,j,a,i,k,b))}function V(a,b){return a.action-b.action||a.index-b.index}function W(a){return"list"!==a&&"style"!==a&&"form"!==a&&"type"!==a&&"width"!==a&&"height"!==a}function X(a,b,e,f,g,i){if("config"!==a&&"key"!==a)if(c(b)&&"on"===a.slice(0,2))f[a]=aa(b,f);else if("style"===a&&null!=b&&d(b)){h(b,function(a,b){(null==e||e[b]!==a)&&(f.style[b]=a)});for(var j in e)La.call(e,j)&&(La.call(b,j)||(f.style[j]=""))}else null!=g?"href"===a?f.setAttributeNS("http://www.w3.org/1999/xlink","href",b):f.setAttribute("className"===a?"class":a,b):a in f&&W(a)?("input"!==i||f[a]!==b)&&(f[a]=b):f.setAttribute(a,b)}function Y(a,b,c,d,e){return h(c,function(c,f){var g=d[f];if(f in d&&g===c)"value"===f&&"input"===b&&a.value!=c&&(a.value=c);else{d[f]=c;try{X(f,c,g,a,e,b)}catch(h){if(h.message.indexOf("Invalid argument")<0)throw h}}}),d}function Z(a,b){for(var c=a.length-1;c>=0;c--)if(a[c]&&a[c].parentNode){try{a[c].parentNode.removeChild(a[c])}catch(d){}b=[].concat(b),b[c]&&$(b[c])}a.length&&(a.length=0)}function $(a){a.configContext&&c(a.configContext.onunload)&&(a.configContext.onunload(),a.configContext.onunload=null),a.controllers&&g(a.controllers,function(a){c(a.onunload)&&a.onunload({preventDefault:f})}),a.children&&(Ma(a.children)?g(a.children,$):a.children.tag&&$(a.children))}function _(a,b,c){var d=a.childNodes[b];if(d){var e=1!==d.nodeType,f=Fa.createElement("span");e?(a.insertBefore(f,d||null),f.insertAdjacentHTML("beforebegin",c),a.removeChild(f)):d.insertAdjacentHTML("beforebegin",c)}else Xa(a,c);for(var g=[];a.childNodes[b]!==d;)g.push(a.childNodes[b]),b++;return g}function aa(a,b){return function(c){c=c||event,n.redraw.strategy("diff"),n.startComputation();try{return a.call(b,c)}finally{ia()}}}function ba(a){var b=Za.indexOf(a);return 0>b?Za.push(a)-1:b}function ca(a){function b(){return arguments.length&&(a=arguments[0]),a}return b.toJSON=function(){return a},b}function da(a,b){function c(){return e.apply(this,b)||this}function d(c){for(var d=[c].concat(b),e=1;e0&&Ia(gb),gb=Ha(ha,fb)}function ha(){db&&(db(),db=null),g(ab,function(a,b){var c=bb[b];if(cb[b]){var d=[cb[b]];n.render(a,c.view?c.view(cb[b],d):"")}}),eb&&(eb(),eb=null),gb=null,hb=new Date,n.redraw.strategy("diff")}function ia(){"none"===n.redraw.strategy()?(Ta--,n.redraw.strategy("diff")):n.endComputation()}function ja(b){a[b]=function(){var a=Ga[n.route.mode];"pathname"===n.route.mode&&(a+=Ga.search),lb!==na(a)&&nb(a)},db=qa,a[b]()}function ka(){return("pathname"===n.route.mode?"":Ga.pathname)+mb[n.route.mode]}function la(b){if(a.history.pushState){db=qa;var c=b?"replaceState":"pushState";eb=function(){a.history[c](null,Fa.title,mb[n.route.mode]+lb)},nb(mb[n.route.mode]+lb)}else Ga[n.route.mode]=lb,nb(mb[n.route.mode]+lb)}function ma(a,b,c){arguments.length<3&&"object"!=typeof b&&(c=b,b=null);var d=lb;lb=a;var e,f,g=b||{},i=lb.indexOf("?");if(i>=0){var j=sa(lb.slice(i+1));h(g,function(a,b){j[b]=g[b]}),e=ra(j),f=lb.slice(0,i)}else e=ra(b),f=lb;if(e){var k=-1===f.indexOf("?")?"?":"&";lb=f+k+e}return la(c||d===a)}function na(a){return a.slice(mb[n.route.mode].length)}function oa(a,b,c){var d=c.indexOf("?");d>=0?(kb=sa(c.substr(d+1,c.length)),c=c.substr(0,d)):kb={};var e=Object.keys(b),f=e.indexOf(c);if(f>=0)return n.mount(a,b[e[f]]),!0;for(var h in b)if(La.call(b,h)){if(h===c)return n.mount(a,b[h]),!0;var i=new RegExp("^"+h.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(i.test(c))return c.replace(i,function(){var c=h.match(/:[^\/]+/g)||[],d=[].slice.call(arguments,1,-2);g(c,function(a,b){a=a.replace(/:|\./g,""),kb[a]=decodeURIComponent(d[b])}),n.mount(a,b[h])}),!0}}function pa(a){if(a=a||event,!a.ctrlKey&&!a.metaKey&&2!==a.which){a.preventDefault?a.preventDefault():a.returnValue=!1;var b,c=a.currentTarget||a.srcElement;for(b="pathname"===n.route.mode&&c.search?sa(c.search.slice(1)):{};c&&"A"!==c.nodeName.toUpperCase();)c=c.parentNode;n.route(c[n.route.mode].slice(mb[n.route.mode].length),b)}}function qa(){"hash"!==n.route.mode&&Ga.hash?Ga.hash=Ga.hash:a.scrollTo(0,0)}function ra(a,c){var e={},f=[];return h(a,function(a,h){var i=c?c+"["+h+"]":h;if(null===a)f.push(encodeURIComponent(i));else if(d(a))f.push(ra(a,i));else if(Ma(a)){var j=[];e[i]=e[i]||{},g(a,function(a){e[i][a]||(e[i][a]=!0,j.push(encodeURIComponent(i)+"="+encodeURIComponent(a)))}),f.push(j.join("&"))}else a!==b&&f.push(encodeURIComponent(i)+"="+encodeURIComponent(a))}),f.join("&")}function sa(a){if(""===a||null==a)return{};"?"===a.charAt(0)&&(a=a.slice(1));var b=a.split("&"),c={};return g(b,function(a){var b=a.split("="),d=decodeURIComponent(b[0]),e=2===b.length?decodeURIComponent(b[1]):null;null!=c[d]?(Ma(c[d])||(c[d]=[c[d]]),c[d].push(e)):c[d]=e}),c}function ta(a){var c=ba(a);Z(a.childNodes,$a[c]),$a[c]=b}function ua(a,b){function e(a){j=a||sb,g(l,function(a){j===rb?a.resolve(k):a.reject(k)})}function f(a,b,e,f){if((null!=k&&d(k)||c(k))&&c(a))try{var g=0;a.call(k,function(a){g++||(k=a,b())},function(a){g++||(k=a,e())})}catch(h){n.deferred.onerror(h),k=h,e()}else f()}function h(){var d;try{d=k&&k.then}catch(g){return n.deferred.onerror(g),k=g,j=qb,h()}f(d,function(){j=pb,h()},function(){j=qb,h()},function(){try{j===pb&&c(a)?k=a(k):j===qb&&c(b)&&(k=b(k),j=pb)}catch(g){return n.deferred.onerror(g),k=g,e()}k===i?(k=TypeError(),e()):f(d,function(){e(rb)},e,function(){e(j===pb&&rb)})})}var i=this,j=0,k=0,l=[];i.promise={},i.resolve=function(a){return j||(k=a,j=pb,h()),this},i.reject=function(a){return j||(k=a,j=qb,h()),this},i.promise.then=function(a,b){var c=new ua(a,b);return j===rb?c.resolve(k):j===sb?c.reject(k):l.push(c),c.promise}}function va(a,b){var c=n.prop(b);return a.then(c),c.then=function(c,d){return va(a.then(c,d),b)},c["catch"]=c.then.bind(null,null),c["finally"]=function(a){function d(){return n.deferred().resolve(a()).promise}return c.then(function(a){return va(d().then(function(){return a}),b)},function(a){return va(d().then(function(){throw new Error(a)}),b)})},c}function wa(a){return a instanceof EvalError||a instanceof RangeError||a instanceof ReferenceError||a instanceof SyntaxError||a instanceof TypeError||a instanceof URIError}function xa(a){return a}function ya(){return"mithril_callback_"+(new Date).getTime()+"_"+Math.round(1e16*Math.random()).toString(36)}function za(c){var d=ya(),e=Fa.createElement("script");a[d]=function(f){e.parentNode.removeChild(e),c.onload({type:"load",target:{responseText:f}}),a[d]=b},e.onerror=function(){return e.parentNode.removeChild(e),c.onerror({type:"error",target:{status:500,responseText:'{"error": "Error making jsonp request"}'}}),a[d]=b,!1},e.onload=function(){return!1},e.src=c.url+(c.url.indexOf("?")>0?"&":"?")+(c.callbackKey?c.callbackKey:"callback")+"="+d+"&"+ra(c.data||{}),Fa.body.appendChild(e)}function Aa(b){var d=new a.XMLHttpRequest;if(d.open(b.method,b.url,!0,b.user,b.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?b.onload({type:"load",target:d}):b.onerror({type:"error",target:d}))},b.serialize===JSON.stringify&&b.data&&"GET"!==b.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),b.deserialize===JSON.parse&&d.setRequestHeader("Accept","application/json, text/*"),c(b.config)){var f=b.config(d,b);null!=f&&(d=f)}var g;if(g="GET"!==b.method&&b.data?b.data:"",g&&!e(g)&&g.constructor!==a.FormData)throw new Error("Request data should be either be a string or FormData. Check the `serialize` option in `m.request`");return d.send(g),d}function Ba(a){return a.dataType&&"jsonp"===a.dataType.toLowerCase()?za(a):Aa(a)}function Ca(a,b,c){if("GET"===a.method&&"jsonp"!==a.dataType){var d=a.url.indexOf("?")<0?"?":"&",e=ra(b);a.url+=e?d+e:""}else a.data=c(b);return a}function Da(a,b){var c=a.match(/:[a-z]\w+/gi);return c&&b&&g(c,function(c){var d=c.slice(1);a=a.replace(c,b[d]),delete b[d]}),a}function Ea(a){return a.responseText}var Fa,Ga,Ha,Ia,Ja="v0.2.1",Ka={}.toString,La={}.hasOwnProperty,Ma=Array.isArray||function(a){return"[object Array]"===Ka.call(a)},Na=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,Oa=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,Pa=/^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/;i(a),n.deps=function(b){return i(a=b||a),a},n.version=function(){return Ja};var Qa=1,Ra=2,Sa=3,Ta=0;n.startComputation=function(){Ta++},n.endComputation=function(){Ta>1?Ta--:(Ta=0,n.redraw())};var Ua,Va=[],Wa=!1,Xa=function(){try{return Fa.createRange().createContextualFragment("x"),function(a,b){a.appendChild(Fa.createRange().createContextualFragment(b))}}catch(a){return function(a,b){a.insertAdjacentHTML("beforeend",b)}}}(),Ya={appendChild:function(a){Ua===b&&(Ua=Fa.createElement("html")),Fa.documentElement&&Fa.documentElement!==a?Fa.replaceChild(a,Fa.documentElement):Fa.appendChild(a),this.childNodes=Fa.childNodes},insertBefore:function(a){this.appendChild(a)},childNodes:[]},Za=[],$a={};n.render=function(a,c,d){if(!a)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var e,f=[],h=ba(a),i=a===Fa;e=i||a===Fa.documentElement?Ya:a,i&&"html"!==c.tag&&(c={tag:"html",attrs:{},children:c}),$a[h]===b&&Z(e.childNodes),d===!0&&ta(a),$a[h]=U(e,null,b,b,c,$a[h],!1,0,null,b,f),g(f,function(a){a()})},n.trust=function(a){return a=new String(a),a.$trusted=!0,a},n.prop=function(a){return(null!=a&&d(a)||c(a))&&c(a.then)?va(a):ca(a)};var _a,ab=[],bb=[],cb=[],db=null,eb=null,fb=16;n.component=function(a){for(var b=[],c=1;cd&&(d=ab.length);var e=!1,f={preventDefault:function(){e=!0,db=eb=null}};return g(Va,function(a){a.handler.call(a.controller,f),a.controller.onunload=null}),e?g(Va,function(a){a.controller.onunload=a.handler}):Va=[],cb[d]&&c(cb[d].onunload)&&cb[d].onunload(f),ea(b,a,d,e)};var gb=0,hb=0,ib=Ha===a.requestAnimationFrame?ga:function(){+new Date-hb>fb&&ga()},jb=!1;n.redraw=function(a){if(!jb){jb=!0,a&&(Wa=!0);try{gb&&!a?ib():(ha(),gb=Ha(function(){gb=0},fb))}finally{jb=Wa=!1}}},n.redraw.strategy=n.prop(),n.withAttr=function(a,b,c){return function(d){d=d||event;var e,f=d.currentTarget||this,g=c||this;e=a in f?f[a]:f.getAttribute(a),b.call(g,e)}};var kb,lb,mb={pathname:"",hash:"#",search:"?"},nb=f,ob=!1;n.route=function(a,b,c,d){if(0===arguments.length)return lb;if(3===arguments.length&&e(b))nb=function(d){var e=lb=na(d);if(!oa(a,c,e)){if(ob)throw new Error("Ensure the default route matches one of the routes defined in m.route");ob=!0,n.route(b,!0),ob=!1}},ja("hash"===n.route.mode?"onhashchange":"onpopstate");else if(a.addEventListener||a.attachEvent)a.href=ka()+d.attrs.href,a.addEventListener?(a.removeEventListener("click",pa),a.addEventListener("click",pa)):(a.detachEvent("onclick",pa),a.attachEvent("onclick",pa));else if(e(a))return ma.apply(this,arguments)},n.route.param=function(a){if(!kb)throw new Error("You must call m.route(element, defaultRoute, routes) before calling m.route.param()");return a?kb[a]:kb},n.route.mode="search",n.route.buildQueryString=ra,n.route.parseQueryString=sa;var pb=1,qb=2,rb=3,sb=4;return n.deferred=function(){var a=new ua;return a.promise=va(a.promise),a},n.deferred.onerror=function(a){if(wa(a))throw Ta=0,a},n.sync=function(a){function b(a,b){return function(g){return e[a]=g,b||(f="reject"),0===--d&&(c.promise(e),c[f](e)),g}}var c=n.deferred(),d=a.length,e=new Array(d),f="resolve";return a.length>0?g(a,function(a,c){a.then(b(c,!0),b(c,!1))}):c.resolve([]),c.promise},n.request=function(a){a.background!==!0&&n.startComputation();var b=new ua,c=xa,d=xa,e=Ea;return a.dataType&&"jsonp"===a.dataType.toLowerCase()||(c=a.serialize||JSON.stringify,d=a.deserialize||JSON.parse,e=function(a){return 0===a.responseText.length&&d===JSON.parse?null:a.responseText}),a.serialize=c,a.deserialize=d,a.method=(a.method||"GET").toUpperCase(),a.url=Da(a.url,a.data),a=Ca(a,a.data,c),a.onload=a.onerror=function(c){c=c||event;var f,h,i="load"===c.type;f=i?a.unwrapSuccess:a.unwrapError;try{h=(f||xa)(d(e(c.target,a)),c.target),i&&(Ma(h)&&a.type?g(h,function(b,c){h[c]=new a.type(b)}):a.type&&(h=new a.type(h)))}catch(j){n.deferred.onerror(j),h=j,i=!1}b[i?"resolve":"reject"](h),a.background!==!0&&n.endComputation()},Ba(a),b.promise=va(b.promise,a.initialValue),b.promise},n}); //# sourceMappingURL=mithril.min.js.map \ No newline at end of file diff --git a/mithril.min.js.map b/mithril.min.js.map index 6093f350..100cda44 100644 --- a/mithril.min.js.map +++ b/mithril.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["mithril.js"],"names":["global","factory","m","window","module","exports","define","amd","this","undefined","isFunction","object","isObject","type","call","isString","noop","forEach","list","f","i","length","forOwn","obj","prop","hasOwn","initialize","$document","document","$location","location","$cancelAnimationFrame","cancelAnimationFrame","clearTimeout","$requestAnimationFrame","requestAnimationFrame","setTimeout","checkForAttrs","pairs","parseSelector","tag","cell","match","classes","parser","exec","attrs","id","push","pair","attrParser","getChildrenFromList","hasAttrs","args","children","slice","isArray","assignAttrs","classAttr","value","attr","join","arguments","parameterize","Error","forKeys","key","dataToString","data","toString","e","injectTextNode","parent","first","index","insertNode","nodeValue","flatten","concat","apply","node","insertBefore","childNodes","handleKeysDiffer","existing","cached","action","MOVE","from","element","nodes","createElement","INSERTION","actions","changes","sort","sortChanges","newCached","Array","change","DELETION","clear","splice","dummy","changeElement","maybeChanged","diffKeys","parentElement","keysDiffer","cachedCell","diffArray","_","parentNode","indexOf","buildArrayKeys","guid","arraySortCompare","a","b","len","elemIsDifferentEnough","dataAttrKeys","Object","keys","redraw","strategy","configContext","retain","maybeRecreateObject","onunload","controllers","controller","unload","preventDefault","getObjectNamespace","namespace","xmlns","unloadCachedControllers","views","$old","pendingRequests","scheduleConfigsToBeCalled","configs","isNew","config","context","buildUpdatedNode","editable","hasKeys","setAttributes","build","contenteditable","intact","handleNonexistentNodes","$trusted","injectHTML","createTextNode","voidElements","test","nodeName","constructor","reattachNodes","parentTag","activeElement","innerHTML","nodeType","handleTextNode","shouldReattach","valueOf","getSubArrayCount","item","buildArray","subArrayCount","shouldMaintainIdentities","cacheCount","makeCache","parentIndex","parentCache","offset","end","constructNode","is","createElementNS","constructAttrs","constructChildren","reconstructCached","getController","view","cachedControllers","updateLists","unloaders","handler","checkView","forcing","subtree","markViews","$original","initObjectNode","buildObject","shouldSetAttrDirectly","trySetAttribute","dataAttr","cachedAttr","autoredraw","rule","style","setAttributeNS","setAttribute","dataAttrs","cachedAttrs","message","removeChild","nextSibling","isElement","placeholder","insertAdjacentHTML","insertAdjacentBeforeEnd","callback","event","startComputation","endFirstComputation","getCellCacheKey","nodeCache","gettersetter","store","toJSON","component","Ctrl","originalCtrl","ctrl","rest","originalView","prototype","output","initComponent","root","isPrevented","isNullComponent","roots","topComponent","components","removeRootElement","reset","actuallyPerformRedraw","lastRedrawId","FRAME_BUDGET","computePreRedrawHook","render","computePostRedrawHook","lastRedrawCallTime","Date","endComputation","runHistoryListener","listener","path","route","mode","search","currentRoute","normalizeRoute","redirect","setScroll","getRouteBase","pathname","modes","computeAndLaunchRedirect","shouldReplaceHistoryEntry","history","pushState","method","title","routeTo","params","oldRoute","queryString","currentPath","queryIndex","paramsObj","parseQueryString","buildQueryString","delimiter","routeByValue","router","queryStart","routeParams","substr","mount","matcher","RegExp","replace","values","decodeURIComponent","routeUnobtrusive","ctrlKey","metaKey","which","returnValue","currentTarget","srcElement","toUpperCase","hash","scrollTo","prefix","duplicates","str","encodeURIComponent","charAt","split","string","cacheKey","cellCache","Deferred","onSuccess","onFailure","finish","state","REJECTED","next","deferred","RESOLVED","resolve","promiseValue","reject","thennable","then","success","fail","notThennable","count","onerror","fire","REJECTING","RESOLVING","self","TypeError","promise","propify","initialValue","bind","_callback","reason","isNativeError","EvalError","RangeError","ReferenceError","SyntaxError","URIError","identity","generateCallbackKey","getTime","Math","round","random","getJsonp","options","callbackKey","script","resp","onload","target","responseText","status","src","url","body","appendChild","runXhr","xhr","XMLHttpRequest","open","user","password","onreadystatechange","readyState","serialize","JSON","stringify","setRequestHeader","deserialize","parse","maybeXhr","FormData","send","ajax","dataType","toLowerCase","bindData","xhrOptions","querystring","parameterizeUrl","tokens","token","defaultExtract","jsonp","VERSION","hasOwnProperty","deps","mock","version","html","createRange","createContextualFragment","documentNode","documentElement","replaceChild","forceRecreation","isDocumentRoot","trust","String","ev","unloader","performRedraw","redrawing","force","withAttr","withAttrCallback","callbackThis","targetProp","_this","getAttribute","isDefaultRoute","arg1","arg2","vdom","source","addEventListener","attachEvent","href","removeEventListener","detachEvent","param","sync","synchronizer","pos","resolved","results","outstanding","arg","request","background","extract","unwrap","response","doSuccess","unwrapSuccess","unwrapError","res"],"mappings":"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","file":"mithril.min.js"} \ No newline at end of file +{"version":3,"sources":["mithril.js"],"names":["global","factory","m","window","module","exports","define","amd","this","undefined","isFunction","object","isObject","type","call","isString","noop","forEach","list","f","i","length","forOwn","obj","prop","hasOwn","initialize","$document","document","$location","location","$cancelAnimationFrame","cancelAnimationFrame","clearTimeout","$requestAnimationFrame","requestAnimationFrame","setTimeout","checkForAttrs","pairs","parseSelector","tag","cell","match","classes","parser","exec","attrs","id","push","pair","attrParser","getChildrenFromList","hasAttrs","args","children","slice","isArray","assignAttrs","classAttr","value","attr","join","arguments","parameterize","Error","forKeys","key","dataToString","data","toString","e","injectTextNode","parent","first","index","insertNode","nodeValue","flatten","concat","apply","node","insertBefore","childNodes","handleKeysDiffer","existing","cached","action","MOVE","from","element","nodes","createElement","INSERTION","actions","changes","sort","sortChanges","newCached","Array","change","DELETION","clear","splice","dummy","changeElement","maybeChanged","diffKeys","parentElement","keysDiffer","cachedCell","diffArray","_","parentNode","indexOf","buildArrayKeys","guid","arraySortCompare","a","b","len","elemIsDifferentEnough","dataAttrKeys","Object","keys","redraw","strategy","configContext","retain","maybeRecreateObject","onunload","controllers","controller","unload","preventDefault","getObjectNamespace","namespace","xmlns","unloadCachedControllers","views","$old","pendingRequests","scheduleConfigsToBeCalled","configs","isNew","config","context","buildUpdatedNode","editable","hasKeys","setAttributes","build","contenteditable","intact","handleNonexistentNodes","$trusted","injectHTML","createTextNode","voidElements","test","nodeName","constructor","reattachNodes","parentTag","activeElement","innerHTML","nodeType","handleTextNode","shouldReattach","valueOf","getSubArrayCount","item","buildArray","subArrayCount","shouldMaintainIdentities","cacheCount","makeCache","parentIndex","parentCache","offset","end","constructNode","is","createElementNS","constructAttrs","constructChildren","reconstructCached","getController","view","cachedControllers","updateLists","unloaders","handler","checkView","forcing","subtree","markViews","$original","initObjectNode","buildObject","shouldSetAttrDirectly","trySetAttribute","dataAttr","cachedAttr","autoredraw","rule","style","setAttributeNS","setAttribute","dataAttrs","cachedAttrs","message","removeChild","nextSibling","isElement","placeholder","insertAdjacentHTML","insertAdjacentBeforeEnd","callback","event","startComputation","endFirstComputation","getCellCacheKey","nodeCache","gettersetter","store","toJSON","component","Ctrl","originalCtrl","ctrl","rest","originalView","prototype","output","initComponent","root","isPrevented","isNullComponent","roots","topComponent","components","removeRootElement","reset","actuallyPerformRedraw","lastRedrawId","FRAME_BUDGET","computePreRedrawHook","render","computePostRedrawHook","lastRedrawCallTime","Date","endComputation","runHistoryListener","listener","path","route","mode","search","currentRoute","normalizeRoute","redirect","setScroll","getRouteBase","pathname","modes","computeAndLaunchRedirect","shouldReplaceHistoryEntry","history","pushState","method","title","routeTo","params","oldRoute","queryString","currentPath","queryIndex","paramsObj","parseQueryString","buildQueryString","delimiter","routeByValue","router","queryStart","routeParams","substr","mount","matcher","RegExp","replace","values","decodeURIComponent","routeUnobtrusive","ctrlKey","metaKey","which","returnValue","currentTarget","srcElement","toUpperCase","hash","scrollTo","prefix","duplicates","str","encodeURIComponent","charAt","split","string","cacheKey","cellCache","Deferred","onSuccess","onFailure","finish","state","REJECTED","next","deferred","RESOLVED","resolve","promiseValue","reject","thennable","then","success","fail","notThennable","count","onerror","fire","REJECTING","RESOLVING","self","TypeError","promise","propify","initialValue","bind","_callback","reason","isNativeError","EvalError","RangeError","ReferenceError","SyntaxError","URIError","identity","generateCallbackKey","getTime","Math","round","random","getJsonp","options","callbackKey","script","resp","onload","target","responseText","status","src","url","body","appendChild","runXhr","xhr","XMLHttpRequest","open","user","password","onreadystatechange","readyState","serialize","JSON","stringify","setRequestHeader","deserialize","parse","maybeXhr","FormData","send","ajax","dataType","toLowerCase","bindData","xhrOptions","querystring","parameterizeUrl","tokens","token","defaultExtract","jsonp","VERSION","hasOwnProperty","deps","mock","version","html","createRange","createContextualFragment","documentNode","documentElement","replaceChild","forceRecreation","isDocumentRoot","trust","String","ev","unloader","performRedraw","redrawing","force","withAttr","withAttrCallback","callbackThis","targetProp","_this","getAttribute","isDefaultRoute","arg1","arg2","vdom","source","addEventListener","attachEvent","href","removeEventListener","detachEvent","param","sync","synchronizer","pos","resolved","results","outstanding","arg","request","background","extract","unwrap","response","doSuccess","unwrapSuccess","unwrapError","res"],"mappings":"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","file":"mithril.min.js"} \ No newline at end of file From 9fab2b8371f87a7a8367a02fb51103b71c8dc495 Mon Sep 17 00:00:00 2001 From: Isiah Meadows Date: Sat, 7 Nov 2015 06:34:11 -0500 Subject: [PATCH 06/63] Create CONTRIBUTING.md I added the following to it: - Bug reporting - Feature requests - Contributing guide - Style guide --- .eslintrc | 1 + CONTRIBUTING.md | 856 ++++++++++++++++++++++++ Gruntfile.js | 114 ++-- docs/layout/tools/template-converter.js | 12 +- mithril.js | 22 +- test-deps/mock.js | 10 +- test/input-cursor.html | 22 +- test/mithril.js | 2 +- test/mithril.mount.js | 72 +- test/mithril.redraw.js | 26 +- test/mithril.render.js | 140 ++-- test/mithril.request.js | 32 +- test/mithril.route.buildQueryString.js | 4 +- test/mithril.route.js | 210 +++--- test/mithril.route.parseQueryString.js | 4 +- test/mithril.startComputation.js | 2 +- test/mithril.trust.js | 4 +- test/svg.html | 28 +- 18 files changed, 1209 insertions(+), 352 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/.eslintrc b/.eslintrc index f77243f3..3417ee64 100644 --- a/.eslintrc +++ b/.eslintrc @@ -53,6 +53,7 @@ "block-spacing": 2, "brace-style": [2, "1tbs", {"allowSingleLine": true}], "camelcase": 2, + "comma-dangle": [2, "always-multiline"], "comma-spacing": 2, "comma-style": 2, "consistent-this": [2, "self"], diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..e4864595 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,856 @@ +# Bug reports + +Use the [issue tracker](https://github.com/lhorie/mithril.js/issues). Do check to make sure your bug hasn't already been filed. Please give the following information, where possible: + +1. The version of Mithril you're using, whether it's the dev version or [the version on npm](http://npm.im/mithril.js). The version on npm may not have all the latest bug fixes, so your bug might very well be fixed in the dev version. +2. A detailed explanation of the bug. +3. A test case. The simpler, the better. + +# Feature requests + +Use the [issue tracker](https://github.com/lhorie/mithril.js/issues). Please do the following, where possible: + +1. Check to make sure your suggestion hasn't already been filed. There's a nice collection of some of these feature requests [here](https://github.com/lhorie/mithril.js/issues/802). +2. Clearly denote your issue as a feature request. It helps make the intent clearer. Even better is to denote it in the title. +3. Describe your idea. This is the most important part. +4. Submit, and wait for feedback. Don't forget to drop by the [Gitter room](https://gitter.im/lhorie/mithril.js) to get some publicity. It gets traffic daily. :smile: + +# Contributing + +We welcome any and all contributions. This is a community-driven project. Although we don't have a lot, we do have a few guidelines for contributions. + +1. Please adhere to the style guide. It's pretty lengthy, but most everything is checked by ESLint, and if anything fails to check, the build will fail, and you will know about it. Most of it is common practice and common sense. ESLint is also set up to check for other common errors, such as undeclared variables and invalid `typeof` values. +2. Please make sure there are no regressions with your patch. Please don't disable existing tests, and please don't send a PR with new, disabled tests. + - There are a few known failing tests currently (PRs welcome): [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.deferred.js#L121-L125) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.render.js#L1321-L1343) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L106-L131) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L134-L162) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L165-L191) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L194-L222) +3. For any new features introduced, be sure to write new unit tests for it. Maximum coverage is what we want. +4. Try to not leave any extra `TODO`s, `FIXME`s, etc. in your code. ESLint will nag at you until you fix whatever problem it is. + - Note that it's only a warning, not an error. It won't fail the CI tests, and there's a few outstanding ones inside Mithril right now. + +It is assumed that all contributions you make you have the appropriate rights to and that it may be made available under the MIT License, the license used for this project. + +# Style Guide + +The style is checked with ESLint. This style guide is here for one reason only: consistency. This should work for most code here, but this shouldn't be considered absolute &endash; consistency with the surrounding code is higher priority than following this guide. Also, if some sort of hack is impossible without violating this guide (e.g. if Mithril ever needs [Bluebird's infamous hack](https://stackoverflow.com/q/24987896)), just make sure the code is consistent with what's around it. + +### Line length + +Keep lines down to a maximum of 80 characters. Minifiers are very good at compressing whitespace, so don't be afraid to use it. + +The only exception to this rule is with long regexes. Append `// eslint-disable-line max-len` to the end of those lines. + +### Function length + +Keep function length to no more than 20 statements, including those in nested blocks. + +The only exceptions are for revealing module wrappers and Mocha `describe` and `context` blocks. + +This isn't checked for the tests, but still, keep it reasonable. + +### Line endings + +Use Windows-style line endings (i.e. CRLF). + +End each file with a line break. + +### Semicolons + +Avoid semicolons. (A few resources to help you understand this: [*](http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding) [*](http://inimino.org/~inimino/blog/javascript_semicolons) [*](http://jamesallardice.com/understanding-automatic-semi-colon-insertion-in-javascript/)) + +### Redundant expressions + +Don't use redundant parentheses, curly braces, `undefined`s, labels, ternaries, etc. Examples: + +- `var foo = value === 1 ? true : false` is better written as `var foo = value === 1`. +- `var foo = (value === 1) ? bar : baz` is better written as `var foo = value === 1 ? bar : baz`. +- `var foo = undefined` is better written as `var foo`. +- `return undefined` is better written as `return`. +- `delete(obj.foo)` is better written as `delete obj.foo`. +- `return` at the end of a function if you're returning `undefined` should just be omitted. +- If you're returning `null`, there's usually little reason to not just return `undefined`. +- Unused variables should be removed. +- An exception is detailed below for assignment in conditions. + +### Equality testing + +Use strict equality (`===`/`!==`), not loose equality (`==`/`!=`). The only exception is if you're testing for `null` or `undefined`, in which loose equality, `value == null` and `value != null` is preferred. The reason is for type safety with primitives. + +### `eval` and friends + +Never use `eval`, the `Function` constructor, and friends. Those will fail when running under CSP restrictions, and this library should work in those environments. + +### Quotes + +Prefer double quotes to single quotes, but using single quotes to avoid escaping is okay. + +### Strict mode + +All code must be in strict mode, preferably wrapped in an IIFE. + +## Comments + +Comments are helpful. Use descriptive comments where needed, so others can read it and understand it. If a non-obvious hack is used, explain it with a comment. But don't repeat yourself with a redundant comment when the code adequately describes itself. + +```js +// Good, code is self-descriptive +var CARD_DECK_SIZE = 52 + +// Shuffle the deck of cards. +for (var i = 0; i < CARD_DECK_SIZE; i++) { + var j = i + (Math.random() * CARD_DECK_SIZE - i)|0 + + var tmp = deck[i] + deck[i] = deck[j] + deck[j] = tmp +} + +// Also good, requires a descriptive comment. +function toFastProperties(obj) { + // Bluebird's toFastProperties hack. Forces V8 to optimize object as prototype, + // significantly speeding up property access. + + /* eslint-disable no-eval */ + function C() {} + C.prototype = obj + new C() + return + eval(obj) + /* eslint-enable no-eval */ +} + +// Bad, redundant comments +var CARD_DECK_SIZE = 52 + +// Shuffle the deck of cards. +function shuffle(deck) { + for (var i = 0; i < CARD_DECK_SIZE; i++) { + // Generate a random card index to swap at. + var j = i + (Math.random() * CARD_DECK_SIZE - i)|0 + + // Swap the cards at each index. + var tmp = deck[i] + deck[i] = deck[j] + deck[j] = tmp + } +} +``` + +### Magic values + +Prefer constant variables to magic values where it helps with code readability. Also, don't use comments in place of a constant. + +```js +// Good +var CARD_DECK_SIZE = 52 +for (var i = 0; i < CARD_DECK_SIZE; i++) { + var j = i + (Math.random() * CARD_DECK_SIZE - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} + +// Bad, what's 52 for? +for (var i = 0; i < 52; i++) { + var j = i + (Math.random() * 52 - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} + +// Also bad, comment not substitute for constant +// 52 cards in a deck +for (var i = 0; i < 52; i++) { + var j = i + (Math.random() * 52 - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} +``` + +### Distracting comments + +Don't comment *everything*. It's distracting, pointless, and a waste of time. Only comment when you need to. + +```js +// Extremely bad. Don't *ever* do this. + +// This function loops through each item in a list, calling `f` with each item +// and their respective index. If the function `f` returns explicitly with +// `false`, iteration stops. This function returns the original list for +// convenience. +function forEach(list, f) { + // Loop through each entry in the list with the loop index `i` + for (var i = 0; i < list.length; i++) { + // Call the function with the current item and index + if (f(list[i], i) === false) { + // If the function explicitly returns `false`, immediately stop + // iteration. + break + } + } + // Return the list, for convenience. + return list +} +``` + +### Initial whitespace + +Start your comments with a space. It's more readable. + +```js +// Good +// This is a comment. + +// Bad +//This is a comment. +``` + +### Grammar and spelling + +Use proper grammar and spelling in your comments. This shouldn't need explanation. + +## Whitespace + +Use vertical whitespace and indentation to your advantage. It helps with readability, and minifiers are astonishingly great at removing this. :stuck_out_tongue_winking_eye: + +```js +// Good +function iterate() { + var index = 0 + var list = [] + while (hasNext()) { + list.push(next(index)) + index++ + } + + for (var i = 0; i < list.length; i++) { + read(list[i]) + } +} + +// Bad +function iterate() { + var index = 0 + var list = [] + while (hasNext()) list.push(next(index++)) + for (var i = 0; i < list.length; i++) read(list[i]) +} + +// Even worse +function iterate() { + var list = [] + for (var index = 0; hasNext(); list.push(next(index++))) {} + for (var i = 0; i < list.length; i++) read(list[i]) +} +``` + +### Trailing whitespace + +Please don't leave trailing spaces anywhere. It makes diffs harder to read. + +### Indentation and vertical whitespace + +Indent with hard tabs. Each one counts for 4 spaces. + +Never mix tabs and spaces. Don't use smart tabs. + +### Excessive whitespace + +Keep whitespace within reason. Limit vertical whitespace to no more than 2 consecutive blank lines, and don't start or end blocks with plain whitespace. Don't use more than one character of horizontal whitespace beyond indentation. + +```js +// Bad +function iterate() { + var index = 0 + var list = [] + + while (hasNext()) { + list.push(next(index)) + index++ + } + + // Too many empty lines + + + + for (var i = 0; i < list.length; i++) { + read(list[i]) + } +} + +// Also bad +var a = 2 +// ^^ ^^ +``` + +### Control keywords + +Always surround control keywords (e.g. `if`, `else`, `for`) with whitespace. + +## Operators + +### Binary operators + +Always surround binary keyword operators (e.g. `in`, `instanceof`) with whitespace. + +Always surround any other binary operator with whitespace, including assignment operators. Add line breaks after the operator, not before. + +```js +// Good +var a = 1 + 2 +a = 3 +a += 4 + +var a = 1 + 2 + 3 + 4 + 5 + + 6 + 7 + 8 + 9 + 10 + +// Bad +var a = 1+2 +var a = 1 +2 +var a = 1+ 2 +var a=1+2 +var a=1 + 2 +a=3 +a+=4 + +var a = 1 + 2 + 3 + 4 + 5 + + 6 + 7 + 8 + 9 + 10 +``` + +As an exception, casting to a 32-bit integer (i.e. `x|0`) doesn't require whitespace surrounding it. + +```js +// This is okay +var casted = value|0 +``` + +### Unary operators + +Always use whitespace between an unary keyword operator (e.g. `delete`, `new`) with whitespace. + +Do not use spaces between any other unary operator and the value they apply to. + +```js +// Good +!a +!!a +~~a +a++ +++a +-1 +~1 + +// Okay ++!a + +// Bad +! a +!! a +! ! a +++ a +a ++ ++ ! a + +// Even worse +- 1 +~ 1 +``` + +Don't use `new function () {}`. Just use an object literal instead, and an IIFE if needed. + +## Objects + +### Exterior whitespace + +Do not include space between the opening curly brace and the first object key in single line objects. For multi-line objects, don't include any extra preceding whitespace at the beginning or end. + +```js +// Good +var object = {foo: 1} + +var object = { + foo: 1, + bar: 2, + baz: 3, + quux: "string", +} + +// Bad +var object = { foo: 1 } + +var object = { + + foo: 1, + bar: 2, + baz: 3, + quux: "string", + +} +``` + +### Interior whitespace + +Use no space before an object key and the colon, but use a single space between the colon and value. + +```js +// Good +var object = {foo: 1} + +// Bad +var object = {foo:1} +var object = {foo : 1} + +// Very bad +var object = {foo :1} +``` + +### Larger objects + +Non-trivial objects should occupy multiple lines. + +```js +// Good +var object = { + foo: 1, + bar: 2, + baz: 3, + quux: "string", +} + +// Bad +var object = {foo: 1, bar: 2, baz: 3, quux: "string"} +``` + +### Comma placement + +Commas come last. Also, use trailing commas if the object takes multiple lines. + +```js +// Good +var object = { + foo: 1, + bar: 2, +} + +// Bad +var object = { + foo: 1, + bar: 2 // No trailing comma +} + +var object = { + foo: 1 +, bar: 2 // Comma first +} + +// Trailing comma in single-line object +var object = {foo: 1,} +``` + +### Member access + +When chaining methods and/or properties across multiple lines, dots come first. + +```js +// Good +object + .foo() + .bar() + +// Bad +object. + foo(). + bar() +``` + +### Property quoting + +Quote properties when needed. Never quote valid identifiers. This may lead to some inconsistency in whether properties are quoted or not in the object, but that inconsistency is okay, and is the only exception in consistency. + +```js +// Good +var object = { + foo: 1, + bar: 2, +} + +var object = { + foo: 1, + "non-identifier": 2, +} + +// Bad +var object = { + "foo": 1, + "bar": 2, +} + +var object = { + "foo": 1, + "non-identifier": 2, +} +``` + +### Iteration + +When iterating objects with `for-in`, filter it with `Object.prototype.hasOwnProperty` first. This may be on the same line if that's the only condition. If this is used more than once, make a local `hasOwn` alias to use like `hasOwn.call(object, prop)`. + +## Variables and declarations + +Use camel case (e.g. `loopIndex`) for variables, pascal case (e.g. `MyClass`) for classes, and upper case with underscores (e.g. `MAX_VALUE`) for constants. + +Use `self` to capture `this` where needed. (i.e. `var self = this`) + +Prefer short but clear, descriptive, and self-documenting variable names. + +Single letter names are only okay in these contexts: + +- Loop variables: `i`, `j`, etc. +- Function arguments in small, trivial functional utilities: `f`, `g`, etc. +- Standard mathematical algorithms: `x`, `y`, `a`, `b`, etc. + +```js +// Good +function forEach(list, f) { + for (var i = 0; i < list.length; i++) { + f(list[i], i) + } + return list +} + +function ajax(url, callback) { + var xhr = new XMLHttpRequest() + xhr.open("GET", url) + xhr.onreadystatechange = function () { + if (this.readyState === 4) { + callback(this.responseText, this.status) + } + } + xhr.send() +} + +// Bad +function iterateArray(listOfEntries, callback) { + for (var index = 0; index < listOfEntries.length; index++) { + callback(listOfEntries[index], index) + } + return listOfEntries +} + +function getRequestStringFromServer(serverLocation, functionToCall) { + var xmlHttpRequest = new XMLHttpRequest() + xmlHttpRequest.open("GET", serverLocation) + xmlHttpRequest.onreadystatechange = function () { + if (this.readyState === 4) { + functionToCall(this.responseText, this.status) + } + } + xmlHttpRequest.send() +} + +// Even worse +function e(l, c) { + for (var x = 0; x < l.length; x++) { + c(l[x], x) + } + return l +} + +function a(u, f) { + var x = new XMLHttpRequest() + x.open("GET", url) + x.onreadystatechange = function () { + if (this.readyState === 4) { + f(this.responseText,this.status) + } + } + x.send() +} +``` + +### Multiple variable declarations + +If a variable is assigned a value when it's declared, it gets its own line. + +If a variable is not immediately assigned a value, it may be grouped with others that aren't first assigned values. + +Do group related variables. + +Variable declarations in the init block of a for loop are excluded from this rule, but the number of declarations should still be minimized. + +```js +// Good +var a = 1 +var b = 2 +var c, d + +// Also good +var foo, bar, baz, quux +var spam, eggs, ham +var shouldUpdate, initialize + +// Okay, since it's within a for loop +for (var i = 0, test; (test = foo === 1); i++) { + doSomething(i) +} + +// Bad +var a = 1, b = 2, c, d + +// Even worse +var foo, bar, baz, quux, spam, eggs, ham, shouldUpdate, initialize +``` + +## Assignment + +### Native functions + +Don't assign to native functions or prototypes beyond polyfills. Ever. + +### Function declarations + +Don't assign to a function declaration. Declarations look like static values, so they should be treated that way. There is no difference in size, either. + +```js +// Bad +function foo() { return 1 } +foo = function () { return 2 } + +// Even worse +function foo() { return 1 } +foo = 2 +``` + +### Conditions + +Avoid assigning directly in conditions. If you need to assign in a condition, wrap them in a new set of parentheses. + +```js +// Good +var test = foo === 1 +if (test) { + doSomething() +} + +var test = foo === 1 +for (var i = 0; test; i++, test = foo === 1) { + doSomething(i) +} + +if ((test = foo === 1)) { + doSomething() +} + +for (var i = 0, test; (test = foo === 1); i++) { + doSomething(i) +} + +// Bad +if (test = foo === 1) { + doSomething() +} + +for (var i = 0, test; test = foo === 1; i++) { + doSomething(i) +} +``` + +## Functions + +Prefer anonymous functions to named functions in expressions where possible + +Prefer named function declarations to assigning a function to a declared variable where possible. + +```js +// Good +setTimeout(function () { doSomething() }, 0) + +function foo() { + return 1 +} + +// Good, uses recursion +setTimeout(function f() { + doSomething() + if (shouldRepeat()) setTimeout(f, 0) +}, 0) + +// Bad +requestAnimationFrame(function foo() { runNext() }) + +var foo = function () { + return 1 +} +``` + +### Anonymous functions + +Anonymous functions must have a single space between `function` and the arguments and between the arguments and the opening brace. + +### Named functions, function declarations + +Named functions and function declarations must have no space between the function name and the arguments and a single space between the arguments and the opening brace. + +## Blocks and conditionals + +### Curly braces + +Curly braces are required for blocks if the body takes up more than one line. This goes for functions as well. They are optional if it fits within one line, but don't be afraid to use them where you see fit. + +Do put an extra space after the first brace and before the final brace in single-line functions. + +```js +// Good +if (condition) doSomething() + +if (condition) { + doSomething() +} + +if (condition) { + doSomething() +} else { + doSomethingElse() +} + +if (condition) { + doSomething() + doSomethingElse() +} + +setTimeout(function () { doSomething() }, 0) + +setTimeout(function () { + doSomething() +}, 0) + +// Bad +if (condition) { doSomething(); doSomethingElse() } + +if (condition) + doSomething() + +setTimeout(function () { doSomething(); doSomethingElse() }, 0) + +setTimeout(function () {doSomething()}, 0) // Body needs some space +``` + +### Function declarations + +Function declarations should always take more than one line. + +```js +// Good +function foo() { + return bar +} + +// Bad +function foo() { return bar } +``` + +### `if`-`else` + +Be consistent with braces in `if`-`else` statements. + +```js +// Good +if (condition) doSomething() +else doSomethingElse() + +if (condition) { + doSomething() +} else { + doSomethingElse() +} + +if (condition) { + doSomething() +} else if (anotherCondition) { + doSomethingElse() +} else { + doAnotherThing() +} + +// Okay +if (condition) doSomething() +else if (anotherCondition) doSomethingElse() +else doAnotherThing() + +// Bad +if (condition) doSomething() +else { + doSomethingElse() +} + +if (condition) doSomething() +else if (anotherCondition) { + doSomethingElse() +} else doAnotherThing() + + +if (condition) { + doSomething() +} else doSomethingElse() +``` + +### Empty blocks + +Mark empty blocks as intentionally empty via a comment or similar. Don't just leave an empty block and/or semicolon. + +```js +// Good +for (var i = 0; i < list.length && cond(list[i]); i++) { + // empty +} + +// Bad +for (var i = 0; i < list.length && cond(list[i]); i++) {} + +// Also bad +for (var i = 0; i < list.length && cond(list[i]); i++) { + ; +} + +// Even worse +for (var i = 0; i < list.length && cond(list[i]); i++); +``` + +### Nesting + +Don't nest `if` statements in `else` blocks if you don't need to. + +```js +// Good +if (test) { + doSomething() +} else if (otherTest) { + doSomethingElse() +} + +if (test) { + doSomething() +} else { + if (otherTest) { + doSomethingElse() + } + + doThisOtherThing() +} + +// Bad +if (test) { + doSomething() +} else { + if (otherTest) { + doSomethingElse() + } +} +``` + +Don't nest curly braces beyond 4 levels deep. This includes blocks, loops, and functions, as well as IIFE wrappers. This also includes the tests. There's rarely a reason to go farther, as most of the time, it's a signal to refactor and/or re-organize your code. + +### Brace style + +Put the `else`, `catch`, and `finally` on the same line as its closing brace. + +(Obviously, this doesn't apply to `if`-`else` statements that don't use curly braces.) diff --git a/Gruntfile.js b/Gruntfile.js index a22e6198..5e933cb2 100755 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -21,7 +21,7 @@ module.exports = function (grunt) { // eslint-disable-line "refactoring", "routing", "tools", - "web-services" + "web-services", ] var api = [ @@ -42,7 +42,7 @@ module.exports = function (grunt) { // eslint-disable-line "mithril.sync", "mithril.trust", "mithril.withAttr", - "mithril.xhr" + "mithril.xhr", ] var md2htmlTasks = {} @@ -59,12 +59,12 @@ module.exports = function (grunt) { // eslint-disable-line md2htmlTasks[name] = { options: { layout: inputFolder + "/layout/" + layout + ".html", - templateData: {topic: title} + templateData: {topic: title}, }, files: [{ src: [src], - dest: tempFolder + "/" + name + ".html" - }] + dest: tempFolder + "/" + name + ".html", + }], } }) } @@ -79,7 +79,7 @@ module.exports = function (grunt) { // eslint-disable-line eslint: { options: { extensions: [".js"], - fix: true + fix: true, }, all: [ "**/*.js", @@ -88,17 +88,17 @@ module.exports = function (grunt) { // eslint-disable-line "!archive/**", "!deploy/**", "!mithril.closure-compiler-externs.js", - "!docs/layout/lib/**" - ] + "!docs/layout/lib/**", + ], }, mocha_phantomjs: { // eslint-disable-line camelcase test: { src: ["test/index.html"], options: { - reporter: "dot" - } - } + reporter: "dot", + }, + }, }, md2html: md2htmlTasks, @@ -111,11 +111,11 @@ module.exports = function (grunt) { // eslint-disable-line "http://github.com/lhorie/mithril.js", "(c) Leo Horie", "License: MIT", - "*/" + "*/", ].join("\n"), - sourceMap: true + sourceMap: true, }, - mithril: {src: "mithril.js", dest: "mithril.min.js"} + mithril: {src: "mithril.js", dest: "mithril.min.js"}, }, zip: { @@ -124,10 +124,10 @@ module.exports = function (grunt) { // eslint-disable-line src: [ currentVersionArchiveFolder + "/mithril.min.js", currentVersionArchiveFolder + "/mithril.min.js.map", - currentVersionArchiveFolder + "/mithril.js" + currentVersionArchiveFolder + "/mithril.js", ], - dest: currentVersionArchiveFolder + "/mithril.min.zip" - } + dest: currentVersionArchiveFolder + "/mithril.min.zip", + }, }, replace: { @@ -135,105 +135,105 @@ module.exports = function (grunt) { // eslint-disable-line force: true, patterns: [ {match: /\.md/g, replacement: ".html"}, - {match: /\$version/g, replacement: version} - ] + {match: /\$version/g, replacement: version}, + ], }, links: { expand: true, flatten: true, src: [tempFolder + "/**/*.html"], - dest: currentVersionArchiveFolder + "/" + dest: currentVersionArchiveFolder + "/", }, index: { src: inputFolder + "/layout/index.html", - dest: currentVersionArchiveFolder + "/index.html" + dest: currentVersionArchiveFolder + "/index.html", }, commonjs: { expand: true, flatten: true, src: [inputFolder + "/layout/*.json"], - dest: currentVersionArchiveFolder + dest: currentVersionArchiveFolder, }, cdnjs: { src: "deploy/cdnjs-package.json", - dest: "../cdnjs/ajax/libs/mithril/package.json" - } + dest: "../cdnjs/ajax/libs/mithril/package.json", + }, }, copy: { style: { src: inputFolder + "/layout/style.css", - dest: currentVersionArchiveFolder + "/style.css" + dest: currentVersionArchiveFolder + "/style.css", }, pages: { src: inputFolder + "/layout/pages.json", - dest: currentVersionArchiveFolder + "/pages.json" + dest: currentVersionArchiveFolder + "/pages.json", }, lib: { expand: true, cwd: inputFolder + "/layout/lib/", src: "./**", - dest: currentVersionArchiveFolder + "/lib/" + dest: currentVersionArchiveFolder + "/lib/", }, tools: { expand: true, cwd: inputFolder + "/layout/tools/", src: "./**", - dest: currentVersionArchiveFolder + "/tools/" + dest: currentVersionArchiveFolder + "/tools/", }, comparisons: { expand: true, cwd: inputFolder + "/layout/comparisons/", src: "./**", - dest: currentVersionArchiveFolder + "/comparisons/" + dest: currentVersionArchiveFolder + "/comparisons/", }, unminified: { src: "mithril.js", - dest: currentVersionArchiveFolder + "/mithril.js" + dest: currentVersionArchiveFolder + "/mithril.js", }, minified: { src: "mithril.min.js", - dest: currentVersionArchiveFolder + "/mithril.min.js" + dest: currentVersionArchiveFolder + "/mithril.min.js", }, readme: { src: "README.md", - dest: currentVersionArchiveFolder + "/README.md" + dest: currentVersionArchiveFolder + "/README.md", }, map: { src: "mithril.min.js.map", - dest: currentVersionArchiveFolder + "/mithril.min.js.map" + dest: currentVersionArchiveFolder + "/mithril.min.js.map", }, typescript: { src: "mithril.d.ts", - dest: currentVersionArchiveFolder + "/mithril.d.ts" + dest: currentVersionArchiveFolder + "/mithril.d.ts", }, publish: { expand: true, cwd: currentVersionArchiveFolder, src: "./**", - dest: outputFolder + dest: outputFolder, }, archive: { expand: true, cwd: currentVersionArchiveFolder, src: "./**", - dest: outputFolder + "/archive/v" + version - } + dest: outputFolder + "/archive/v" + version, + }, }, "saucelabs-browsers": { @@ -245,7 +245,7 @@ module.exports = function (grunt) { // eslint-disable-line return version === "dev" || version === "beta" || +version >= 38 // The latest ESR version }) - } + }, }, chrome: { @@ -256,7 +256,7 @@ module.exports = function (grunt) { // eslint-disable-line return version === "dev" || version === "beta" || +version >= 41 }) - } + }, }, ie: { @@ -265,7 +265,7 @@ module.exports = function (grunt) { // eslint-disable-line return browser.browserName === "internet explorer" && !/2003/.test(browser.platform) }) - } + }, }, edge: { @@ -273,7 +273,7 @@ module.exports = function (grunt) { // eslint-disable-line return browsers.filter(function (browser) { return browser.browserName === "microsoftedge" }) - } + }, }, safari: { @@ -281,7 +281,7 @@ module.exports = function (grunt) { // eslint-disable-line return browsers.filter(function (browser) { return browser.browserName === "safari" }) - } + }, }, opera: { @@ -289,8 +289,8 @@ module.exports = function (grunt) { // eslint-disable-line return browsers.filter(function (browser) { return browser.browserName === "opera" }) - } - } + }, + }, }, saucelabs: { @@ -303,7 +303,7 @@ module.exports = function (grunt) { // eslint-disable-line urls: ["http://localhost:8000/test/index.html"], sauceConfig: { "record-video": false, - "record-screenshots": false + "record-screenshots": false, }, build: process.env.TRAVIS_JOB_ID, onTestComplete: function (result, callback) { @@ -312,13 +312,13 @@ module.exports = function (grunt) { // eslint-disable-line var url = [ "https://saucelabs.com/rest/v1", user, "jobs", - result.job_id + result.job_id, ].join("/") require("request").put({ url: url, auth: {user: user, pass: pass}, - json: {passed: result.passed} + json: {passed: result.passed}, }, function (error, response) { if (error) { return callback(error) @@ -331,24 +331,24 @@ module.exports = function (grunt) { // eslint-disable-line } }) }, - tunnelTimeout: 5 - } - } + tunnelTimeout: 5, + }, + }, }, connect: { server: { options: { port: 8888, - base: "." - } - } + base: ".", + }, + }, }, clean: { options: {force: true}, - generated: [tempFolder] - } + generated: [tempFolder], + }, }) grunt.loadNpmTasks("grunt-saucelabs-browsers") @@ -370,7 +370,7 @@ module.exports = function (grunt) { // eslint-disable-line "md2html", "replace", "copy", - "clean" + "clean", ]) grunt.registerTask("test", ["eslint:all", "mocha_phantomjs"]) @@ -379,6 +379,6 @@ module.exports = function (grunt) { // eslint-disable-line grunt.registerTask("sauce", [ "saucelabs-browsers:all", "connect", - "saucelabs" + "saucelabs", ]) } diff --git a/docs/layout/tools/template-converter.js b/docs/layout/tools/template-converter.js index 55217ba3..34323507 100644 --- a/docs/layout/tools/template-converter.js +++ b/docs/layout/tools/template-converter.js @@ -14,7 +14,7 @@ window.templateConverter = (function () { return [ new DOMParser() .parseFromString(markup, "text/html") - .childNodes[1] + .childNodes[1], ] } @@ -39,7 +39,7 @@ window.templateConverter = (function () { list.push({ tag: el.nodeName.toLowerCase(), attrs: attrs, - children: createVirtual(el.childNodes) + children: createVirtual(el.childNodes), }) } }) @@ -115,7 +115,7 @@ window.templateConverter = (function () { var body = this.virtuals.join("," + tab) return "[" + tab + body + tab.slice(0, -1) + "]" } - } + }, } return { @@ -134,12 +134,12 @@ window.templateConverter = (function () { m("textarea", { autofocus: true, style: {width: "100%", height: "40%"}, - onchange: m.withAttr("value", ctrl.source) + onchange: m.withAttr("value", ctrl.source), }, ctrl.source()), m("button", {onclick: ctrl.convert}, "Convert"), m("textarea", {style: {width: "100%", height: "40%"}}, - ctrl.output()) + ctrl.output()), ]) - } + }, } })() diff --git a/mithril.js b/mithril.js index 864565f4..7f1cba65 100644 --- a/mithril.js +++ b/mithril.js @@ -231,7 +231,7 @@ index: i, from: existing[key].index, element: cached.nodes[existing[key].index] || - $document.createElement("div") + $document.createElement("div"), } } else { existing[key] = {action: INSERTION, index: i} @@ -263,7 +263,7 @@ insertNode(parent, dummy, index) newCached.splice(index, 0, { attrs: {key: data[index].attrs.key}, - nodes: [dummy] + nodes: [dummy], }) newCached.nodes[index] = dummy break @@ -691,7 +691,7 @@ tag: data.tag, attrs: attrs, children: children, - nodes: [node] + nodes: [node], } unloadCachedControllers(cached, views, controllers) @@ -729,7 +729,7 @@ if (controller.onunload != null) { unloaders.push({ controller: controller, - handler: controller.onunload + handler: controller.onunload, }) } @@ -1130,7 +1130,7 @@ this.appendChild(node) }, - childNodes: [] + childNodes: [], } var nodeCache = [] @@ -1293,7 +1293,7 @@ preventDefault: function () { isPrevented = true computePreRedrawHook = computePostRedrawHook = null - } + }, } forEach(unloaders, function (unloader) { @@ -1431,7 +1431,7 @@ var modes = { pathname: "", hash: "#", - search: "?" + search: "?", } var redirect = noop @@ -1948,8 +1948,8 @@ options.onload({ type: "load", target: { - responseText: resp - } + responseText: resp, + }, }) window[callbackKey] = undefined @@ -1962,8 +1962,8 @@ type: "error", target: { status: 500, - responseText: '{"error": "Error making jsonp request"}' - } + responseText: '{"error": "Error making jsonp request"}', + }, }) window[callbackKey] = undefined diff --git a/test-deps/mock.js b/test-deps/mock.js index 239af53c..21a0bc9c 100644 --- a/test-deps/mock.js +++ b/test-deps/mock.js @@ -49,7 +49,7 @@ this.mock = (function (global) { // the browser. Still waiting on mocha-phantomjs to update to be // compatible with PhantomJS 2.x. phantom: global.window && global.window.navigator && - /PhantomJS/.test(global.window.navigator.userAgent) + /PhantomJS/.test(global.window.navigator.userAgent), } var document = window.document = { @@ -102,7 +102,7 @@ this.mock = (function (global) { }, addEventListener: function () {}, - removeEventListener: function () {} + removeEventListener: function () {}, } }, @@ -156,7 +156,7 @@ this.mock = (function (global) { traverse(document) return out - } + }, } document.documentElement = document.createElement("html") @@ -182,7 +182,7 @@ this.mock = (function (global) { indices[id] = callbacks.length callbacks.push({ callback: callback, - id: id + id: id, }) return id } @@ -258,7 +258,7 @@ this.mock = (function (global) { replaceState: function (data, title, url) { location.pathname = location.search = location.hash = url - } + }, } return window diff --git a/test/input-cursor.html b/test/input-cursor.html index 8ee57964..71ee843e 100644 --- a/test/input-cursor.html +++ b/test/input-cursor.html @@ -20,13 +20,13 @@ function test(sel) { return m("li", [ m("p", m("code", "m(" + JSON.stringify(sel) + ")")), - m.apply(null, arguments) + m.apply(null, arguments), ]) } m.module(document.getElementById("test"), { controller: function() { - this.title = m.prop("hello world"); + this.title = m.prop("hello world") }, view: function (ctrl) { @@ -35,18 +35,18 @@ m.module(document.getElementById("test"), { m("ul", [ test("input[list=data]", { onkeyup: m.withAttr("value", ctrl.title), - value: ctrl.title() + value: ctrl.title(), }), test("datalist#data", [ m("option", "John"), m("option", "Bob"), - m("option", "Mary") + m("option", "Mary"), ]), test("textarea", { onkeyup: m.withAttr("value", ctrl.title), - value: ctrl.title() + value: ctrl.title(), }), m("li", [ @@ -63,11 +63,11 @@ m.module(document.getElementById("test"), { m("code", "m(\"div[contenteditable]\")")), m("div[contenteditable]", { style: {border: "1px solid #888"}, - onkeyup: m.withAttr("innerHTML", ctrl.title) + onkeyup: m.withAttr("innerHTML", ctrl.title), }, m.trust(ctrl.title())), - ]) - ]) - ]); - } -}); + ]), + ]), + ]) + }, +}) diff --git a/test/mithril.js b/test/mithril.js index bf86f972..37b618d6 100644 --- a/test/mithril.js +++ b/test/mithril.js @@ -202,7 +202,7 @@ describe("m()", function () { controller: spy, view: function () { return m("div", "testing") - } + }, } var args = {age: 12} diff --git a/test/mithril.mount.js b/test/mithril.mount.js index f76de2eb..a5ae6e61 100644 --- a/test/mithril.mount.js +++ b/test/mithril.mount.js @@ -22,7 +22,7 @@ describe("m.mount()", function () { function pure(view) { return { controller: function () {}, - view: view + view: view, } } @@ -38,7 +38,7 @@ describe("m.mount()", function () { return [ whatever % 2 ? m("span", "% 2") : undefined, m("div", "bugs"), - m("a") + m("a"), ] }) @@ -64,7 +64,7 @@ describe("m.mount()", function () { var mod1 = m.mount(root1, { controller: controller1, - view: view1 + view: view1, }) var controller2 = sinon.spy(function () { this.value = "test2" }) // eslint-disable-line @@ -73,7 +73,7 @@ describe("m.mount()", function () { var mod2 = mount(root2, { controller: controller2, - view: view2 + view: view2, }) expect(controller1).to.have.been.called @@ -97,7 +97,7 @@ describe("m.mount()", function () { controller: function () { this.onunload = spy }, - view: function () {} + view: function () {}, }) clear(root) @@ -114,7 +114,7 @@ describe("m.mount()", function () { var component = { controller: ctrlSpy, - view: viewSpy + view: viewSpy, } var arg = {} @@ -148,7 +148,7 @@ describe("m.mount()", function () { var sub = { controller: ctrlSpy, - view: viewSpy + view: viewSpy, } mount(root, pure(function () { return sub })) @@ -168,7 +168,7 @@ describe("m.mount()", function () { var subsub = { controller: ctrl1, - view: view1 + view: view1, } var ctrl2 = sinon.spy() @@ -176,7 +176,7 @@ describe("m.mount()", function () { var sub = { controller: ctrl2, - view: view2 + view: view2, } mount(root, pure(function () { return sub })) @@ -326,7 +326,7 @@ describe("m.mount()", function () { }, view: function () { return m("div") - } + }, } mount(root, pure(function () { @@ -358,7 +358,7 @@ describe("m.mount()", function () { }, view: function () { return m("div") - } + }, } var sub = { @@ -367,7 +367,7 @@ describe("m.mount()", function () { }, view: function (ctrl, opts) { return m.component(subsub, {key: opts.key}) - } + }, } mount(root, pure(function () { @@ -400,7 +400,7 @@ describe("m.mount()", function () { controller: function () { m.redraw() }, - view: spy + view: spy, } mount(root, pure(function () { return sub })) @@ -418,7 +418,7 @@ describe("m.mount()", function () { controller: function () { m.redraw() }, - view: spy + view: spy, } var sub = pure(function () { return subsub }) @@ -439,14 +439,14 @@ describe("m.mount()", function () { var CommentList = pure(function (ctrl, props) { return m(".list", props.list.map(function (i) { return m(".comment", [ - m.component(Reply, {key: i}) + m.component(Reply, {key: i}), ]) })) }) mount(root, pure(function () { return m(".outer", [ - m(".inner", m.component(CommentList, {list: [1, 2, 3]})) + m(".inner", m.component(CommentList, {list: [1, 2, 3]})), ]) })) @@ -461,7 +461,7 @@ describe("m.mount()", function () { controller: function () { this.onunload = spy }, - view: function () {} + view: function () {}, }) m.mount(root, pure(function () {})) @@ -480,7 +480,7 @@ describe("m.mount()", function () { return m("div", { config: function (el, init) { if (init) count += 1 - } + }, }) })) @@ -506,9 +506,9 @@ describe("m.mount()", function () { m(".foo", { key: 1, config: test, - onclick: function () { show = !show } + onclick: function () { show = !show }, }), - show ? m(".bar", {key: 2}) : null + show ? m(".bar", {key: 2}) : null, ] })) @@ -530,9 +530,9 @@ describe("m.mount()", function () { mount(root, pure(function () { return show ? [ m("h1", "1"), - sub + sub, ] : [ - m("h1", "2") + m("h1", "2"), ] })) @@ -561,10 +561,10 @@ describe("m.mount()", function () { a = !a m.redraw(true) found = root.childNodes[0].childNodes[1] - } + }, }, "asd"), a ? m("#a", "aaa") : null, - "test" + "test", ]) }) @@ -573,7 +573,7 @@ describe("m.mount()", function () { config: function (el, init, ctx) { if (!init) ctx.onunload = onunload - } + }, } m.mount(root, pure(function () { return Comp })) @@ -603,10 +603,10 @@ describe("m.mount()", function () { m.redraw(true) found = root.childNodes[0].childNodes[1] m.redraw.strategy("none") - } + }, }, "asd"), a ? m("#a", "aaa") : null, - "test" + "test", ]) }) @@ -615,7 +615,7 @@ describe("m.mount()", function () { config: function (el, init, ctx) { if (!init) ctx.onunload = onunload - } + }, } m.mount(root, pure(function () { return Comp })) @@ -635,7 +635,7 @@ describe("m.mount()", function () { var root = mock.document.createElement("div") var view = sinon.stub().returns(m("div", { - onclick: function () { m.redraw(true) } + onclick: function () { m.redraw(true) }, })) m.mount(root, pure(view)) @@ -667,7 +667,7 @@ describe("m.mount()", function () { this.foo = m.request({method: "GET", url: "/foo"}) }, - view: view + view: view, } mount(root, pure(function () { return Comp })) @@ -692,20 +692,20 @@ describe("m.mount()", function () { controller: function () { this.foo = m.request({method: "GET", url: "/foo"}) }, - view: view1 + view: view1, } var Comp2 = { controller: function () { this.bar = m.request({method: "GET", url: "/bar"}) }, - view: view2 + view: view2, } mount(root, pure(function () { return m("div", [ Comp1, - Comp2 + Comp2, ]) })) @@ -752,7 +752,7 @@ describe("m.mount()", function () { return m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - } + }, }) }) @@ -795,9 +795,9 @@ describe("m.mount()", function () { ctrl.bar = true m.redraw(true) el = root.childNodes[0].childNodes[1] - } + }, }, "click me"), - ctrl.bar ? m.component(sub) : "" + ctrl.bar ? m.component(sub) : "", ]) })) diff --git a/test/mithril.redraw.js b/test/mithril.redraw.js index ada5b196..a6efe643 100644 --- a/test/mithril.redraw.js +++ b/test/mithril.redraw.js @@ -15,7 +15,7 @@ describe("m.redraw()", function () { m.mount(root, { controller: function () { ctx = this }, // eslint-disable-line - view: function (ctrl) { return ctrl.value } + view: function (ctrl) { return ctrl.value }, }) mock.requestAnimationFrame.$resolve() @@ -38,7 +38,7 @@ describe("m.redraw()", function () { m.mount(root, { controller: function () {}, - view: view + view: view, }) mock.requestAnimationFrame.$resolve() // teardown m.redraw() @@ -57,7 +57,7 @@ describe("m.redraw()", function () { var view = sinon.spy() m.mount(root, { controller: function () {}, - view: view + view: view, }) mock.requestAnimationFrame.$resolve() // teardown m.redraw(true) @@ -88,7 +88,7 @@ describe("m.redraw()", function () { function pure(view) { return { controller: noop, - view: view + view: view, } } @@ -138,8 +138,8 @@ describe("m.redraw()", function () { }, view: function () { return m("div") - } - } + }, + }, }) expect(strategy).to.equal("all") @@ -164,8 +164,8 @@ describe("m.redraw()", function () { }, view: function () { return m("div", {config: config}) - } - } + }, + }, }) route("/bar1") @@ -185,10 +185,10 @@ describe("m.redraw()", function () { strategy = m.redraw.strategy() ctrl.number++ m.redraw.strategy("none") - } + }, }, ctrl.number) - } - } + }, + }, }) root.childNodes[0].onclick({}) mock.requestAnimationFrame.$resolve() @@ -211,9 +211,9 @@ describe("m.redraw()", function () { config: config, onclick: function () { m.redraw.strategy("all") - } + }, }) - }) + }), }) root.childNodes[0].onclick({}) mock.requestAnimationFrame.$resolve() diff --git a/test/mithril.render.js b/test/mithril.render.js index 34faa178..7b00ccc3 100644 --- a/test/mithril.render.js +++ b/test/mithril.render.js @@ -62,7 +62,7 @@ describe("m.render()", function () { m.render(root, m("svg", [m("g")])) expect(root.childNodes[0].childNodes[0]).to.contain.all.keys({ nodeName: "G", - namespaceURI: "http://www.w3.org/2000/svg" + namespaceURI: "http://www.w3.org/2000/svg", }) }) @@ -237,7 +237,7 @@ describe("m.render()", function () { m.render(root, m("#foo", [ [m("div", "a"), m("div", "b")], [m("div", "c"), m("div", "d")], - m("#bar") + m("#bar"), ])) expect(root.childNodes[0].childNodes[3].childNodes[0].nodeValue) @@ -269,7 +269,7 @@ describe("m.render()", function () { ["a", "b", "c", "d"].map(function () { return [m("div"), " "] }), - m("span") + m("span"), ])) expect(root.childNodes[0].childNodes[8].nodeName).to.equal("SPAN") }) @@ -282,7 +282,7 @@ describe("m.render()", function () { m.render(root, m("#foo", [ [m("div", "a"), m("div", "b"), m("div", "c")], - m("#bar") + m("#bar"), ])) expect(root.childNodes[0].childNodes[2].childNodes[0].nodeValue) @@ -295,12 +295,12 @@ describe("m.render()", function () { m.render(root, m("main", [ m("button"), - m("article", [m("section"), m("nav")]) + m("article", [m("section"), m("nav")]), ])) m.render(root, m("main", [ m("button"), - m("article", [m("span"), m("nav")]) + m("article", [m("span"), m("nav")]), ])) expect(root.childNodes[0].childNodes[1].childNodes[0].nodeName) @@ -313,12 +313,12 @@ describe("m.render()", function () { m.render(root, m("main", [ m("button"), - m("article", [m("section"), m("nav")]) + m("article", [m("section"), m("nav")]), ])) m.render(root, m("main", [ m("button"), - m("article", ["test", m("nav")]) + m("article", ["test", m("nav")]), ])) expect(root.childNodes[0].childNodes[1].childNodes[0].nodeValue) @@ -331,12 +331,12 @@ describe("m.render()", function () { m.render(root, m("main", [ m("button"), - m("article", [m("section"), m("nav")]) + m("article", [m("section"), m("nav")]), ])) m.render(root, m("main", [ m("button"), - m("article", [m.trust("test"), m("nav")]) + m("article", [m.trust("test"), m("nav")]), ])) expect(root.childNodes[0].childNodes[1].childNodes[0].nodeValue) @@ -550,7 +550,7 @@ describe("m.render()", function () { var config = sinon.spy() m.render(root, m("div", { - config: function (el, init, ctx) { ctx.data = 1 } + config: function (el, init, ctx) { ctx.data = 1 }, })) m.render(root, m("div", {config: config})) @@ -564,7 +564,7 @@ describe("m.render()", function () { var index = 0 var node = m("div", { - config: function (el, init, ctx) { ctx.data = index++ } + config: function (el, init, ctx) { ctx.data = index++ }, }) m.render(root, [node, node]) @@ -604,7 +604,7 @@ describe("m.render()", function () { m.render(root, m("div", [ ["foo", "bar"], ["foo", "bar"], - ["foo", "bar"] + ["foo", "bar"], ])) m.render(root, m("div", ["asdf", "asdf2", "asdf3"])) @@ -619,7 +619,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 1}, 1), m("a", {key: 2}, 2), - m("a", {key: 3}, 3) + m("a", {key: 3}, 3), ]) var firstBefore = root.childNodes[0] @@ -628,7 +628,7 @@ describe("m.render()", function () { m("a", {key: 4}, 4), m("a", {key: 1}, 1), m("a", {key: 2}, 2), - m("a", {key: 3}, 3) + m("a", {key: 3}, 3), ]) var firstAfter = root.childNodes[1] @@ -648,7 +648,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 1}, 1), m("a", {key: 2}, 2), - m("a", {key: 3}, 3) + m("a", {key: 3}, 3), ]) var firstBefore = root.childNodes[0] @@ -656,7 +656,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 4}, 4), m("a", {key: 1}, 1), - m("a", {key: 2}, 2) + m("a", {key: 2}, 2), ]) var firstAfter = root.childNodes[1] @@ -676,7 +676,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 1}, 1), m("a", {key: 2}, 2), - m("a", {key: 3}, 3) + m("a", {key: 3}, 3), ]) var firstBefore = root.childNodes[1] @@ -684,7 +684,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 2}, 2), m("a", {key: 3}, 3), - m("a", {key: 4}, 4) + m("a", {key: 4}, 4), ]) var firstAfter = root.childNodes[0] @@ -706,7 +706,7 @@ describe("m.render()", function () { m("a", {key: 2}, 2), m("a", {key: 3}, 3), m("a", {key: 4}, 4), - m("a", {key: 5}, 5) + m("a", {key: 5}, 5), ]) var firstBefore = root.childNodes[0] @@ -717,7 +717,7 @@ describe("m.render()", function () { m("a", {key: 4}, 4), m("a", {key: 10}, 10), m("a", {key: 1}, 1), - m("a", {key: 2}, 2) + m("a", {key: 2}, 2), ]) var firstAfter = root.childNodes[2] @@ -740,7 +740,7 @@ describe("m.render()", function () { m("a", {key: 2}, 2), m("a", {key: 3}, 3), m("a", {key: 4}, 4), - m("a", {key: 5}, 5) + m("a", {key: 5}, 5), ]) var firstBefore = root.childNodes[0] @@ -753,7 +753,7 @@ describe("m.render()", function () { m("a", {key: 2}, 2), m("a", {key: 1}, 1), m("a", {key: 6}, 6), - m("a", {key: 7}, 7) + m("a", {key: 7}, 7), ]) var firstAfter = root.childNodes[3] @@ -780,7 +780,7 @@ describe("m.render()", function () { m("a", {key: 2}), m("a"), m("a", {key: 4}), - m("a", {key: 5}) + m("a", {key: 5}), ]) var firstBefore = root.childNodes[0] @@ -794,7 +794,7 @@ describe("m.render()", function () { m("a", {key: 5}), m("a"), m("a", {key: 1}), - m("a", {key: 2}) + m("a", {key: 2}), ]) var firstAfter = root.childNodes[3] @@ -848,8 +848,8 @@ describe("m.render()", function () { key: 1, config: function (el, init, ctx) { ctx.onunload = spy - } - }) + }, + }), ]) m.render(root, [ m("div", {key: 2}), @@ -857,8 +857,8 @@ describe("m.render()", function () { key: 1, config: function (el, init, ctx) { ctx.onunload = spy - } - }) + }, + }), ]) expect(spy).to.not.have.been.called }) @@ -918,7 +918,7 @@ describe("m.render()", function () { m.render(root, m("ul", [ m("li", {key: 0}, 0), m("li", {key: 2}, 2), - m("li", {key: 4}, 4) + m("li", {key: 4}, 4), ])) m.render(root, m("ul", [ @@ -927,7 +927,7 @@ describe("m.render()", function () { m("li", {key: 2}, 2), m("li", {key: 3}, 3), m("li", {key: 4}, 4), - m("li", {key: 5}, 5) + m("li", {key: 5}, 5), ])) expect( @@ -963,7 +963,7 @@ describe("m.render()", function () { m("li", {key: 2}, 2), m("li", {key: 3}, 3), m("li", {key: 4}, 4), - m("li", {key: 5}, 5) + m("li", {key: 5}, 5), ])) m.render(root, m("ul", [ @@ -971,7 +971,7 @@ describe("m.render()", function () { m("li", {key: 1}, 1), m("li", {key: 2}, 2), m("li", {key: 4}, 4), - m("li", {key: 5}, 5) + m("li", {key: 5}, 5), ])) expect( @@ -991,7 +991,7 @@ describe("m.render()", function () { m("li", {key: 2}, 2), m("li", {key: 3}, 3), m("li", {key: 4}, 4), - m("li", {key: 5}, 5) + m("li", {key: 5}, 5), ])) m.render(root, m("ul", [ @@ -1000,7 +1000,7 @@ describe("m.render()", function () { m("li", {key: 3}, 3), m("li", {key: 4}, 4), m("li", {key: 5}, 5), - m("li", {key: 6}, 6) + m("li", {key: 6}, 6), ])) m.render(root, m("ul", [ @@ -1009,7 +1009,7 @@ describe("m.render()", function () { m("li", {key: 14}, 14), m("li", {key: 15}, 15), m("li", {key: 16}, 16), - m("li", {key: 17}, 17) + m("li", {key: 17}, 17), ])) expect( @@ -1045,7 +1045,7 @@ describe("m.render()", function () { m.render(root, [m("div", { config: function (el, init, ctx) { ctx.onunload = onunload1 - } + }, })]) m.render(root, []) @@ -1053,7 +1053,7 @@ describe("m.render()", function () { m.render(root, [m("div", { config: function (el, init, ctx) { ctx.onunload = onunload2 - } + }, })]) m.render(root, []) @@ -1069,7 +1069,7 @@ describe("m.render()", function () { m.render(root, [ m("div.green", [m("div")]), - m("div.blue") + m("div.blue"), ]) expect(root.childNodes).to.have.length(2) @@ -1103,7 +1103,7 @@ describe("m.render()", function () { m("div", {key: 3}, 3), m("div", {key: 4}, 4), m("div", {key: 5}, 5), - null, null, null, null, null, null, null, null, null, null + null, null, null, null, null, null, null, null, null, null, ])) m.render(root, m("div", [ @@ -1116,7 +1116,7 @@ describe("m.render()", function () { null, null, m("div", {key: 12}, 12), null, null, - m("div", {key: 15}, 15) + m("div", {key: 15}, 15), ])) m.render(root, m("div", [ @@ -1125,7 +1125,7 @@ describe("m.render()", function () { m("div", {key: 3}, 3), m("div", {key: 4}, 4), m("div", {key: 5}, 5), - null, null, null, null, null, null, null, null, null, null + null, null, null, null, null, null, null, null, null, null, ])) expect( @@ -1146,9 +1146,9 @@ describe("m.render()", function () { [ m("div", {key: 3}, 3), m("div", {key: 4}, 4), - m("div", {key: 5}, 5) + m("div", {key: 5}, 5), ], - [m("div", {key: 6}, 6)] + [m("div", {key: 6}, 6)], ])) m.render(root, m("div", [ @@ -1157,9 +1157,9 @@ describe("m.render()", function () { [ m("div", {key: 3}, 3), m("div", {key: 4}, 4), - m("div", {key: 5}, 5) + m("div", {key: 5}, 5), ], - [m("div", {key: 6}, 6)] + [m("div", {key: 6}, 6)], ])) expect( @@ -1184,7 +1184,7 @@ describe("m.render()", function () { m.render(root, [ m("#div-1", {key: 1}), m("#div-2", {key: 2}), - m("#div-3", {key: 3}) + m("#div-3", {key: 3}), ]) root.appendChild(root.childNodes[1]) @@ -1192,7 +1192,7 @@ describe("m.render()", function () { m.render(root, [ m("#div-1", {key: 1}), m("#div-3", {key: 3}), - m("#div-2", {key: 2}) + m("#div-2", {key: 2}), ]) expect( @@ -1229,7 +1229,7 @@ describe("m.render()", function () { m("a", {key: 1}), m("a", {key: 2}), m("a", {key: 3}), - m("i") + m("i"), ])) var before = root.childNodes[0].childNodes[3] @@ -1237,7 +1237,7 @@ describe("m.render()", function () { m("b", {key: 3}), m("b", {key: 4}), m("i"), - m("b", {key: 1}) + m("b", {key: 1}), ])) var after = root.childNodes[0].childNodes[2] @@ -1252,7 +1252,7 @@ describe("m.render()", function () { m("a", {key: 2}), "foo", m("a", {key: 3}), - m("i") + m("i"), ])) var before = root.childNodes[0].childNodes[4] @@ -1261,7 +1261,7 @@ describe("m.render()", function () { m("a", {key: 4}), "bar", m("i"), - m("a", {key: 1}) + m("a", {key: 1}), ])) var after = root.childNodes[0].childNodes[3] @@ -1276,7 +1276,7 @@ describe("m.render()", function () { m("a", {key: 2}), null, m("a", {key: 3}), - m("i") + m("i"), ])) var before = root.childNodes[0].childNodes[4] @@ -1285,7 +1285,7 @@ describe("m.render()", function () { m("a", {key: 4}), null, m("i"), - m("a", {key: 1}) + m("a", {key: 1}), ])) var after = root.childNodes[0].childNodes[3] @@ -1300,7 +1300,7 @@ describe("m.render()", function () { m("a", {key: 2}), undefined, m("a", {key: 3}), - m("i") + m("i"), ])) var before = root.childNodes[0].childNodes[4] @@ -1309,7 +1309,7 @@ describe("m.render()", function () { m("a", {key: 4}), undefined, m("i"), - m("a", {key: 1}) + m("a", {key: 1}), ])) var after = root.childNodes[0].childNodes[3] @@ -1326,7 +1326,7 @@ describe("m.render()", function () { m("a", {key: 2}), m.trust("a"), m("a", {key: 3}), - m("i") + m("i"), ])) var before = root.childNodes[0].childNodes[4] @@ -1335,7 +1335,7 @@ describe("m.render()", function () { m("a", {key: 4}), m.trust("a"), m("i"), - m("a", {key: 1}) + m("a", {key: 1}), ])) var after = root.childNodes[0].childNodes[3] @@ -1361,7 +1361,7 @@ describe("m.render()", function () { m.render(root, m("div", {}, [ m("div", {}, "0"), m("div", {}, "1"), - m("div", {}, "2") + m("div", {}, "2"), ])) expect( @@ -1371,7 +1371,7 @@ describe("m.render()", function () { ).to.eql(["0", "1", "2"]) m.render(root, m("div", {}, [ - m("div", {}, "0") + m("div", {}, "0"), ])) expect( @@ -1386,7 +1386,7 @@ describe("m.render()", function () { m.render(root, m("span", {}, [ m("div", {}, "0"), m("div", {}, "1"), - m("div", {}, "2") + m("div", {}, "2"), ])) expect( @@ -1396,7 +1396,7 @@ describe("m.render()", function () { ).to.eql(["0", "1", "2"]) m.render(root, m("span", {}, [ - m("div", {}, "0") + m("div", {}, "0"), ])) expect( @@ -1421,9 +1421,9 @@ describe("m.render()", function () { view: function (ctrl) { return m("input", { value: ctrl.inputValue(), - onkeyup: m.withAttr("value", ctrl.inputValue) + onkeyup: m.withAttr("value", ctrl.inputValue), }) - } + }, }) mock.requestAnimationFrame.$resolve() @@ -1467,11 +1467,11 @@ describe("m.render()", function () { return m("form", {onsubmit: ctrl.submit}, [ m("input", { onkeyup: m.withAttr("value", ctrl.inputValue), - value: ctrl.inputValue() + value: ctrl.inputValue(), }), - m("button[type=submit]") + m("button[type=submit]"), ]) - } + }, }) var form = root.childNodes[0] @@ -1512,7 +1512,7 @@ describe("m.render()", function () { view: function (ctrl) { return m("select", { size: ctrl.values.length, - multiple: "multiple" + multiple: "multiple", }, [ ctrl.values.map(function (v) { var opts = {value: v} @@ -1520,9 +1520,9 @@ describe("m.render()", function () { opts.selected = "selected" } return m("option", opts, v) - }) + }), ]) - } + }, }) mock.requestAnimationFrame.$resolve() diff --git a/test/mithril.request.js b/test/mithril.request.js index fd8ab1f4..e2409959 100644 --- a/test/mithril.request.js +++ b/test/mithril.request.js @@ -21,12 +21,12 @@ describe("m.request()", function () { it("sets the correct properties on `GET`", function () { var prop = request({ method: "GET", - url: "test" + url: "test", }) expect(prop()).to.contain.keys({ method: "GET", - url: "test" + url: "test", }) }) @@ -49,12 +49,12 @@ describe("m.request()", function () { var prop = request({ method: "POST", url: "http://domain.com:80", - data: {} + data: {}, }) expect(prop()).to.contain.keys({ method: "POST", - url: "http://domain.com:80" + url: "http://domain.com:80", }) }) @@ -62,7 +62,7 @@ describe("m.request()", function () { expect(request({ method: "POST", url: "http://domain.com:80/:test1", - data: {test1: "foo"} + data: {test1: "foo"}, })().url).to.equal("http://domain.com:80/foo") }) @@ -72,7 +72,7 @@ describe("m.request()", function () { var prop = m.request({ method: "GET", url: "test", - deserialize: function () { throw new Error("error occurred") } + deserialize: function () { throw new Error("error occurred") }, }).then(null, error) resolve() @@ -86,7 +86,7 @@ describe("m.request()", function () { var prop = m.request({ method: "GET", url: "test", - deserialize: function () { throw new Error("error occurred") } + deserialize: function () { throw new Error("error occurred") }, }).catch(error) resolve() @@ -99,7 +99,7 @@ describe("m.request()", function () { var data = m.prop() var prop = m.request({ method: "GET", - url: "test" + url: "test", }) .then(function () { return "foo" }) .finally(data) @@ -142,7 +142,7 @@ describe("m.request()", function () { var prop = m.request({ method: "GET", url: "test", - deserialize: function () { throw new Error("error occurred") } + deserialize: function () { throw new Error("error occurred") }, }) .catch(error) .finally(function () { error("finally") }) @@ -158,7 +158,7 @@ describe("m.request()", function () { var prop = m.request({ method: "GET", url: "test", - deserialize: function () { throw new TypeError("error occurred") } + deserialize: function () { throw new TypeError("error occurred") }, }).then(null, error) try { @@ -178,7 +178,7 @@ describe("m.request()", function () { m.request({ method: "POST", url: "test", - data: {foo: 1} + data: {foo: 1}, }).then(null, error) var xhr = mock.XMLHttpRequest.$instances.pop() @@ -194,7 +194,7 @@ describe("m.request()", function () { m.request({ method: "POST", - url: "test" + url: "test", }).then(null, error) var xhr = mock.XMLHttpRequest.$instances.pop() @@ -207,7 +207,7 @@ describe("m.request()", function () { var prop = m.request({ method: "POST", url: "test", - initialValue: "foo" + initialValue: "foo", }) var initialValue = prop() @@ -220,7 +220,7 @@ describe("m.request()", function () { var prop = m.request({ method: "POST", url: "test", - initialValue: "foo" + initialValue: "foo", }).then(function (value) { return value }) var initialValue = prop() @@ -233,7 +233,7 @@ describe("m.request()", function () { var prop = m.request({ method: "POST", url: "test", - initialValue: "foo" + initialValue: "foo", }).then(function () { return "bar" }) resolve() @@ -290,7 +290,7 @@ describe("m.request()", function () { url: "/test", dataType: "jsonp", data: data, - callbackKey: callbackKey + callbackKey: callbackKey, }) } diff --git a/test/mithril.route.buildQueryString.js b/test/mithril.route.buildQueryString.js index bd53ad5e..f8c2e159 100644 --- a/test/mithril.route.buildQueryString.js +++ b/test/mithril.route.buildQueryString.js @@ -15,11 +15,11 @@ describe("m.route.buildQueryString()", function () { foo: "bar", hello: ["world", "mars", "mars"], world: { - test: 3 + test: 3, }, bam: "", yup: null, - removed: undefined + removed: undefined, }) ).to.equal("foo=bar&hello=world&hello=mars&world%5Btest%5D=3&bam=&yup") }) diff --git a/test/mithril.route.js b/test/mithril.route.js index 7317d268..20da73ec 100644 --- a/test/mithril.route.js +++ b/test/mithril.route.js @@ -13,7 +13,7 @@ describe("m.route()", function () { var types = { search: "?", hash: "#", - pathname: "/" + pathname: "/", } return function (type) { @@ -32,7 +32,7 @@ describe("m.route()", function () { function pure(view) { return { controller: noop, - view: view + view: view, } } @@ -74,7 +74,7 @@ describe("m.route()", function () { mode("search") route(root, "/test1", { - "/test1": pure(function () { return "foo" }) + "/test1": pure(function () { return "foo" }), }) expect(mock.location.search).to.equal("?/test1") @@ -88,12 +88,12 @@ describe("m.route()", function () { route(root, "/", { "/": { controller: function () { route1 = m.route() }, - view: noop + view: noop, }, "/test13": { controller: function () { route2 = m.route() }, - view: noop - } + view: noop, + }, }) m.route("/test13") @@ -113,7 +113,7 @@ describe("m.route()", function () { }, view: function () { return m("div") - } + }, } route(root, "/a", { @@ -121,8 +121,8 @@ describe("m.route()", function () { "/b": { controller: spy, - view: noop - } + view: noop, + }, }) route("/b") @@ -142,7 +142,7 @@ describe("m.route()", function () { }, view: function () { return m("div") - } + }, } var sub = pure(function () { return subsub }) @@ -152,8 +152,8 @@ describe("m.route()", function () { "/b": { controller: spy, - view: noop - } + view: noop, + }, }) route("/b") @@ -173,7 +173,7 @@ describe("m.route()", function () { }, view: function () { return m("div") - } + }, } route(root, "/a", { @@ -181,8 +181,8 @@ describe("m.route()", function () { "/b": { controller: spy, - view: noop - } + view: noop, + }, }) route("/b") @@ -202,7 +202,7 @@ describe("m.route()", function () { }, view: function () { return m("div") - } + }, } var sub = pure(function () { return subsub }) @@ -212,8 +212,8 @@ describe("m.route()", function () { "/b": { controller: spy, - view: noop - } + view: noop, + }, }) route("/b") @@ -229,26 +229,26 @@ describe("m.route()", function () { var sub1 = { controller: ctrl1, - view: function () { return m("div") } + view: function () { return m("div") }, } var sub2 = { controller: ctrl2, - view: function () { return m("div") } + view: function () { return m("div") }, } route(root, "/a", { "/a": pure(function () { return m(".page-a", [ - m("h1"), m.component(sub1, {x: 11}) + m("h1"), m.component(sub1, {x: 11}), ]) }), "/b": pure(function () { return m(".page-b", [ - m("h2"), m.component(sub2, {y: 22}) + m("h2"), m.component(sub2, {y: 22}), ]) - }) + }), }) route("/b") @@ -264,7 +264,7 @@ describe("m.route()", function () { var Component = pure(function () { return m(".comp") }) route(root, "/foo", { - "/foo": pure(function () { return [Component] }) + "/foo": pure(function () { return [Component] }), }) expect(root.childNodes[0].nodeName).to.equal("DIV") @@ -279,7 +279,7 @@ describe("m.route()", function () { view: function (ctrl) { return m("div", ctrl.name) - } + }, } route(root, "/", { @@ -287,7 +287,7 @@ describe("m.route()", function () { return m("div", [ m("a[href=/]", {config: m.route}, "foo"), m("a[href=/bar]", {config: m.route}, "bar"), - m.component(MyComponent, {name: "Jane"}) + m.component(MyComponent, {name: "Jane"}), ]) }), @@ -295,9 +295,9 @@ describe("m.route()", function () { return m("div", [ m("a[href=/]", {config: m.route}, "foo"), m("a[href=/bar]", {config: m.route}, "bar"), - m.component(MyComponent, {name: "Bob"}) + m.component(MyComponent, {name: "Bob"}), ]) - }) + }), }) route("/bar") @@ -313,9 +313,9 @@ describe("m.route()", function () { "/test2": pure(function () { return [ "foo", - m("a", {href: "/test2", config: m.route}, "Test2") + m("a", {href: "/test2", config: m.route}, "Test2"), ] - }) + }), }) expect(mock.location.pathname).to.equal("/test2") @@ -327,7 +327,7 @@ describe("m.route()", function () { mode("hash") route(root, "/test3", { - "/test3": pure(function () { return "foo" }) + "/test3": pure(function () { return "foo" }), }) expect(mock.location.hash).to.equal("#/test3") @@ -338,7 +338,7 @@ describe("m.route()", function () { mode("search") route(root, "/test4/foo", { - "/test4/:test": pure(function () { return m.route.param("test") }) + "/test4/:test": pure(function () { return m.route.param("test") }), }) expect(mock.location.search).to.equal("?/test4/foo") @@ -357,7 +357,7 @@ describe("m.route()", function () { m.route(root, "/test5/foo", { "/": component, - "/test5/:test": component + "/test5/:test": component, }) var paramValueBefore = m.route.param("test") @@ -381,7 +381,7 @@ describe("m.route()", function () { m.route(root, "/test6/foo", { "/": component, - "/test6/:a1": component + "/test6/:a1": component, }) var paramValueBefore = m.route.param("a1") @@ -406,7 +406,7 @@ describe("m.route()", function () { m.route(root, "/test7/foo", { "/": component, - "/test7/:a1": component + "/test7/:a1": component, }) var routeValueBefore = m.route() @@ -428,7 +428,7 @@ describe("m.route()", function () { route(root, "/test8/foo/SEP/bar/baz", { "/test8/:test/SEP/:path...": pure(function () { return m.route.param("test") + "_" + m.route.param("path") - }) + }), }) expect(mock.location.search).to.equal("?/test8/foo/SEP/bar/baz") @@ -441,7 +441,7 @@ describe("m.route()", function () { route(root, "/test9/foo/bar/SEP/baz", { "/test9/:test.../SEP/:path": pure(function () { return m.route.param("test") + "_" + m.route.param("path") - }) + }), }) expect(mock.location.search).to.equal("?/test9/foo/bar/SEP/baz") @@ -454,7 +454,7 @@ describe("m.route()", function () { route(root, "/test10/foo%20bar", { "/test10/:test": pure(function () { return m.route.param("test") - }) + }), }) expect(root.childNodes[0].nodeValue).to.equal("foo bar") @@ -465,7 +465,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(function () { return "foo" }), - "/test11": pure(function () { return "bar" }) + "/test11": pure(function () { return "bar" }), }) route("/test11/") @@ -479,7 +479,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(noop), - "/test12": pure(noop) + "/test12": pure(noop), }) route("/test12?a=foo&b=bar") @@ -496,7 +496,7 @@ describe("m.route()", function () { "/": pure(function () { return "bar" }), "/test13/:test": pure(function () { return m.route.param("test") - }) + }), }) route("/test13/foo?test=bar") @@ -510,7 +510,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(function () { return "bar" }), - "/test14": pure(function () { return "foo" }) + "/test14": pure(function () { return "foo" }), }) route("/test14?test&test2=") @@ -525,7 +525,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(noop), - "/test12": pure(noop) + "/test12": pure(noop), }) route("/test12", {a: "foo", b: "bar"}) @@ -540,7 +540,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(noop), - "/test12": pure(noop) + "/test12": pure(noop), }) route("/test12", {a: "foo", b: "bar"}) @@ -562,10 +562,10 @@ describe("m.route()", function () { return m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - } + }, }) }), - "/test14": pure(noop) + "/test14": pure(noop), }) route("/test14") @@ -585,11 +585,11 @@ describe("m.route()", function () { m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - } - }) + }, + }), ] }), - "/test15": pure(function () { return [m("div")] }) + "/test15": pure(function () { return [m("div")] }), }) route("/test15") @@ -607,10 +607,10 @@ describe("m.route()", function () { return m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - } + }, }) }), - "/test16": pure(function () { return m("a") }) + "/test16": pure(function () { return m("a") }), }) route("/test16") @@ -629,11 +629,11 @@ describe("m.route()", function () { m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - } - }) + }, + }), ] }), - "/test17": pure(function () { return m("a") }) + "/test17": pure(function () { return m("a") }), }) route("/test17") @@ -651,10 +651,10 @@ describe("m.route()", function () { return m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - } + }, }) }), - "/test18": pure(function () { return [m("a")] }) + "/test18": pure(function () { return [m("a")] }), }) route("/test18") @@ -674,8 +674,8 @@ describe("m.route()", function () { key: 1, config: function (el, init, ctx) { ctx.onunload = onunload - } - }) + }, + }), ] }), "/test20": pure(function () { @@ -684,10 +684,10 @@ describe("m.route()", function () { key: 2, config: function (el, init, ctx) { ctx.onunload = onunload - } - }) + }, + }), ] - }) + }), }) route("/test20") @@ -707,8 +707,8 @@ describe("m.route()", function () { key: 1, config: function (el, init, ctx) { ctx.onunload = onunload - } - }) + }, + }), ] }), "/test21": pure(function () { @@ -716,10 +716,10 @@ describe("m.route()", function () { m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - } - }) + }, + }), ] - }) + }), }) route("/test21") @@ -732,7 +732,7 @@ describe("m.route()", function () { route(root, "/foo", { "/foo": pure(function () { return m("div", "foo") }), - "/bar": pure(function () { return m("div", "bar") }) + "/bar": pure(function () { return m("div", "bar") }), }) var foo = root.childNodes[0].childNodes[0].nodeValue @@ -757,7 +757,7 @@ describe("m.route()", function () { }), "/bar1": pure(function () { return m("main", m("a", {config: config}, "foo")) - }) + }), }) route("/bar1") @@ -774,8 +774,8 @@ describe("m.route()", function () { controller: function () { value = m.route.param("arg") }, view: function () { return "" - } - } + }, + }, }) expect(value).to.equal("foo+bar") }) @@ -785,7 +785,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(function () { return "foo" }), - "/test22": pure(function () { return "bar" }) + "/test22": pure(function () { return "bar" }), }) m.route("/test22/") @@ -799,7 +799,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(function () { return "foo" }), - "/test23": pure(function () { return "bar" }) + "/test23": pure(function () { return "bar" }), }) route(new String("/test23/")) // eslint-disable-line no-new-wrappers @@ -817,8 +817,8 @@ describe("m.route()", function () { controller: function () { value = m.route.param("arg") }, view: function () { return "" - } - } + }, + }, }) expect(value).to.equal("foo+bar") }) @@ -832,8 +832,8 @@ describe("m.route()", function () { controller: function () { value = m.route.param("arg") }, view: function () { return "" - } - } + }, + }, }) expect(value).to.equal("foo+bar") @@ -845,10 +845,10 @@ describe("m.route()", function () { route(root, "/a", { "/a": { controller: function () { m.route("/b") }, - view: function () { return "a" } + view: function () { return "a" }, }, - "/b": pure(function () { return "b" }) + "/b": pure(function () { return "b" }), }) expect(root.childNodes[0].nodeValue).to.equal("b") @@ -862,9 +862,9 @@ describe("m.route()", function () { controller: function () { m.route("/b?foo=1", {foo: 2}) }, - view: function () { return "a" } + view: function () { return "a" }, }, - "/b": pure(function () { return "b" }) + "/b": pure(function () { return "b" }), }) expect(mock.location.search).to.equal("?/b?foo=2") @@ -876,7 +876,7 @@ describe("m.route()", function () { route(root, "/a", { "/a": pure(function () { return "a" }), - "/b": pure(function () { return "b" }) + "/b": pure(function () { return "b" }), }) route("/b") @@ -890,7 +890,7 @@ describe("m.route()", function () { route(root, "/a", { "/a": pure(function () { return "a" }), - "/b": pure(function () { return "b" }) + "/b": pure(function () { return "b" }), }) route("/a") @@ -908,13 +908,13 @@ describe("m.route()", function () { return m("a", { config: function (el, init) { if (!init) initCount++ - } + }, }) }) route(root, "/a", { "/a": a, - "/b": pure(a.view) + "/b": pure(a.view), }) route("/b") @@ -931,13 +931,13 @@ describe("m.route()", function () { config: function (el, init, ctx) { ctx.retain = false if (!init) initCount++ - } + }, }) }) route(root, "/a", { "/a": a, - "/b": pure(a.view) + "/b": pure(a.view), }) route("/b") @@ -954,13 +954,13 @@ describe("m.route()", function () { config: function (el, init, ctx) { ctx.retain = true if (!init) initCount++ - } + }, }) }) route(root, "/a", { "/a": a, - "/b": pure(a.view) + "/b": pure(a.view), }) route("/b") @@ -984,7 +984,7 @@ describe("m.route()", function () { }), "/b": pure(function () { return m("section", m("a", {config: config})) - }) + }), }) route("/b") @@ -1006,7 +1006,7 @@ describe("m.route()", function () { }), "/b": pure(function () { return m("section", m("a", {config: config})) - }) + }), }) route("/b") @@ -1028,7 +1028,7 @@ describe("m.route()", function () { }), "/b": pure(function () { return m("section", m("a", {config: config})) - }) + }), }) route("/b") @@ -1042,7 +1042,7 @@ describe("m.route()", function () { function diff(view) { return { controller: function () { m.redraw.strategy("diff") }, - view: view + view: view, } } @@ -1055,13 +1055,13 @@ describe("m.route()", function () { return m("a", { config: function (el, init) { if (!init) initCount++ - } + }, }) }) route(root, "/a", { "/a": a, - "/b": diff(a.view) + "/b": diff(a.view), }) route("/b") @@ -1078,13 +1078,13 @@ describe("m.route()", function () { config: function (el, init, ctx) { ctx.retain = true if (!init) initCount++ - } + }, }) }) route(root, "/a", { "/a": a, - "/b": diff(a.view) + "/b": diff(a.view), }) route("/b") @@ -1101,13 +1101,13 @@ describe("m.route()", function () { config: function (el, init, ctx) { ctx.retain = false if (!init) initCount++ - } + }, }) }) route(root, "/a", { "/a": a, - "/b": diff(a.view) + "/b": diff(a.view), }) route("/b") @@ -1131,7 +1131,7 @@ describe("m.route()", function () { }), "/b": diff(function () { return m("section", m("a", {config: config})) - }) + }), }) route("/b") @@ -1154,7 +1154,7 @@ describe("m.route()", function () { }), "/b": diff(function () { return m("section", m("a", {config: config})) - }) + }), }) route("/b") @@ -1177,7 +1177,7 @@ describe("m.route()", function () { }), "/b": diff(function () { return m("section", m("a", {config: config})) - }) + }), }) m.route("/b") @@ -1204,12 +1204,12 @@ describe("m.route()", function () { controller: function () { m.redraw.strategy("diff") }, view: function () { return m("section", m("a", {config: config})) - } + }, } route(root, "/a", { "/a": pure(function () { return m("div", a) }), - "/b": pure(function () { return m("div", b) }) + "/b": pure(function () { return m("div", b) }), }) route("/b") @@ -1226,10 +1226,10 @@ describe("m.route()", function () { return m("div", { config: function (el) { el.childNodes[0].modified = true - } + }, }, m("div")) }), - "/b": pure(function () { return m("div", m("div")) }) + "/b": pure(function () { return m("div", m("div")) }), }) route("/b") diff --git a/test/mithril.route.parseQueryString.js b/test/mithril.route.parseQueryString.js index 3acc68ba..1999ae39 100644 --- a/test/mithril.route.parseQueryString.js +++ b/test/mithril.route.parseQueryString.js @@ -18,7 +18,7 @@ describe("m.route.parseQueryString()", function () { foo: "bar", hello: ["world", "mars"], bam: "", - yup: null + yup: null, }) }) @@ -28,7 +28,7 @@ describe("m.route.parseQueryString()", function () { expect(args).to.eql({ foo: "bar", - "hello[]": ["world", "mars", "pluto"] + "hello[]": ["world", "mars", "pluto"], }) }) }) diff --git a/test/mithril.startComputation.js b/test/mithril.startComputation.js index cfa58063..dffe557c 100644 --- a/test/mithril.startComputation.js +++ b/test/mithril.startComputation.js @@ -12,7 +12,7 @@ describe("m.startComputation(), m.endComputation()", function () { var root = mock.document.createElement("div") var controller = m.mount(root, { controller: function () {}, - view: function (ctrl) { return ctrl.value } + view: function (ctrl) { return ctrl.value }, }) mock.requestAnimationFrame.$resolve() diff --git a/test/mithril.trust.js b/test/mithril.trust.js index 748fa75e..262bb964 100644 --- a/test/mithril.trust.js +++ b/test/mithril.trust.js @@ -36,7 +36,7 @@ describe("m.trust()", function () { var root = document.createElement("div") m.render(root, [ m.trust("

1

123

2

"), - m("i", "foo") + m("i", "foo"), ]) expect(root.childNodes[3].tagName).to.equal("I") }) @@ -49,7 +49,7 @@ describe("m.trust()", function () { m.render(root, [ m.trust("12"), - m("td", "foo") + m("td", "foo"), ]) expect(root.childNodes[2].tagName).to.equal("td") diff --git a/test/svg.html b/test/svg.html index 322d1045..5f99195c 100644 --- a/test/svg.html +++ b/test/svg.html @@ -57,20 +57,20 @@ m.render(document.getElementById("test"), [ height: 100, width: 100, transform: "translate(30) rotate(45 50 50)", - style: {stroke: "#000", fill: "#0086b2"} + style: {stroke: "#000", fill: "#0086b2"}, }), m("a[href='http://google.com'][title='SVG link'][target=_new]", { - style: {textDecoration: "underline"} + style: {textDecoration: "underline"}, }, [ - m("text[x=0][y=20]", "SVG Link") - ]) + m("text[x=0][y=20]", "SVG Link"), + ]), ]), m("svg[height=201px][width=201px]", [ m("image[href='http://placekitten.com/201/201']", { height: "200px", width: "200px", - title: "Cat picture" - }) + title: "Cat picture", + }), ]), m("svg[title='Line drawings']", { "enable-background": "new 0 0 340 333", @@ -78,7 +78,7 @@ m.render(document.getElementById("test"), [ viewBox: "0 0 340 333", width: "340px", x: "0px", - y: "0px" + y: "0px", }, [ m("path.path", { d: [ @@ -141,7 +141,7 @@ m.render(document.getElementById("test"), [ type: "rotate", repeatCount: "indefinite", dur: "12h", - by: 360 + by: 360, }), m("circle[r=7]") ]), @@ -151,7 +151,7 @@ m.render(document.getElementById("test"), [ y2: 93, "stroke-linecap": "round", stroke: "green", - opacity: 0.9 + opacity: 0.9, }), m("animateTransform[attributeName=transform]", { type: "rotate", @@ -167,13 +167,13 @@ m.render(document.getElementById("test"), [ y1: -20, y2: 102, "stroke-linecap": "round", - stroke: "red" + stroke: "red", }), m("animateTransform[attributeName=transform]", { type: "rotate", repeatCount: "indefinite", dur: "60s", - by: 360 + by: 360, }), m("circle[r=4][fill=blue]") ]) @@ -207,8 +207,8 @@ m.render(document.getElementById("test"), [ }, m("div", {xmlns: "http://www.w3.org/1999/xhtml"}, [ m.trust("this is a piece of html rendered as " + "" + - "SVG foreignObject") - ])) - ]) + "SVG foreignObject"), + ])), + ]), ]) From 8d1f33860bd48f0dfde3ed8aa9c7052614bf0123 Mon Sep 17 00:00:00 2001 From: Isiah Meadows Date: Tue, 10 Nov 2015 13:55:06 -0500 Subject: [PATCH 07/63] Spell check != grammar check --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4864595..354bc999 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,7 +19,7 @@ Use the [issue tracker](https://github.com/lhorie/mithril.js/issues). Please do We welcome any and all contributions. This is a community-driven project. Although we don't have a lot, we do have a few guidelines for contributions. -1. Please adhere to the style guide. It's pretty lengthy, but most everything is checked by ESLint, and if anything fails to check, the build will fail, and you will know about it. Most of it is common practice and common sense. ESLint is also set up to check for other common errors, such as undeclared variables and invalid `typeof` values. +1. Please adhere to the style guide. It's pretty lengthy, but most of it is checked by ESLint, and if anything fails to check, the build will fail, and you will know about it. Most of it is common practice and common sense. ESLint is also set up to check for other common errors, such as undeclared variables and invalid `typeof` values. 2. Please make sure there are no regressions with your patch. Please don't disable existing tests, and please don't send a PR with new, disabled tests. - There are a few known failing tests currently (PRs welcome): [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.deferred.js#L121-L125) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.render.js#L1321-L1343) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L106-L131) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L134-L162) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L165-L191) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L194-L222) 3. For any new features introduced, be sure to write new unit tests for it. Maximum coverage is what we want. From d4b618d2afb213884aa71fa65153a343b156a25d Mon Sep 17 00:00:00 2001 From: Isiah Meadows Date: Tue, 10 Nov 2015 14:24:31 -0500 Subject: [PATCH 08/63] Clarify a few things [ci skip] --- CONTRIBUTING.md | 51 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 354bc999..b492bb37 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,12 +25,13 @@ We welcome any and all contributions. This is a community-driven project. Althou 3. For any new features introduced, be sure to write new unit tests for it. Maximum coverage is what we want. 4. Try to not leave any extra `TODO`s, `FIXME`s, etc. in your code. ESLint will nag at you until you fix whatever problem it is. - Note that it's only a warning, not an error. It won't fail the CI tests, and there's a few outstanding ones inside Mithril right now. + - If you must, use a `TODO(): whatever` (or the equivalent `FIXME`, etc.) if it's something you are actively working on, or if it's something more general, file an issue titled "TODO: " and reference the `TODO` comment itself. -It is assumed that all contributions you make you have the appropriate rights to and that it may be made available under the MIT License, the license used for this project. +It is assumed that you have the appropriate rights to all contributions that you make, and that they can be made available under the MIT License which is used for this project. # Style Guide -The style is checked with ESLint. This style guide is here for one reason only: consistency. This should work for most code here, but this shouldn't be considered absolute &endash; consistency with the surrounding code is higher priority than following this guide. Also, if some sort of hack is impossible without violating this guide (e.g. if Mithril ever needs [Bluebird's infamous hack](https://stackoverflow.com/q/24987896)), just make sure the code is consistent with what's around it. +The style is checked with ESLint. This style guide is here for one reason only: consistency. This should work for most code here, but this shouldn't be considered absolute &endash; consistency with the surrounding code is higher priority than following this guide. Also, if some sort of hack is impossible without violating this guide (e.g. if Mithril ever needs [Bluebird's infamous hack](https://stackoverflow.com/q/24987896)), just make sure the code is consistent with what's around it, and that you document how the hack works if you can, and why the hack was employed. If it's a more common one such as Bluebird's, a direct link to a description suffices for how. ### Line length @@ -245,7 +246,11 @@ function iterate() { ### Trailing whitespace -Please don't leave trailing spaces anywhere. It makes diffs harder to read. +Please don't leave trailing whitespace anywhere. It makes diffs harder to read. + +Blank lines should have no indentation or spaces. It should be empty other than a line ending. + +All files should end with a trailing space. Some editors add this on their own, so it will result in unnecessary lines in later diffs if you don't. ### Indentation and vertical whitespace @@ -793,6 +798,46 @@ if (condition) { } else doSomethingElse() ``` +### `do`-`while` loops + +This should be avoided in most cases, since the only good use case is if the intent is "do this, and then check" each iteration. This should only be used in cases like below: + +```js +// Form 1 +doSomething() + +while (condition) { + doSomething() +} + +// Form 2 +while (true) { + doSomething() + if (!condition) break +} +``` + +Always use braces. Also, there must be a semicolon at the end of the `while` condition. This is the only exception to the semicolon rule, since the omission is a syntax error. The semicolon is never automatically inserted before ES6. + +```js +// Good +do { + doSomething() +} while (condition); + +// Bad +do doSomething() +while (condition); + +// Syntax errors +do { + doSomething() +} while (condition) + +do doSomething() +while (condition) +``` + ### Empty blocks Mark empty blocks as intentionally empty via a comment or similar. Don't just leave an empty block and/or semicolon. From 7eb2c9a5b1581733bcdde3387e60edef74b96dd2 Mon Sep 17 00:00:00 2001 From: Isiah Meadows Date: Tue, 10 Nov 2015 14:26:12 -0500 Subject: [PATCH 09/63] Add mention of browser [ci skip] --- CONTRIBUTING.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b492bb37..0d33390d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,8 +3,9 @@ Use the [issue tracker](https://github.com/lhorie/mithril.js/issues). Do check to make sure your bug hasn't already been filed. Please give the following information, where possible: 1. The version of Mithril you're using, whether it's the dev version or [the version on npm](http://npm.im/mithril.js). The version on npm may not have all the latest bug fixes, so your bug might very well be fixed in the dev version. -2. A detailed explanation of the bug. -3. A test case. The simpler, the better. +2. The name and version of the browser(s) affected. +3. A detailed explanation of the bug. +4. A test case. The simpler, the better. # Feature requests From 2ccd07b8f0274cb5dc35fc88a41ac3bff86428ac Mon Sep 17 00:00:00 2001 From: Isiah Meadows Date: Tue, 10 Nov 2015 14:43:10 -0500 Subject: [PATCH 10/63] Remove redundant part, s/space/line break/ --- CONTRIBUTING.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0d33390d..9c17170a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -52,8 +52,6 @@ This isn't checked for the tests, but still, keep it reasonable. Use Windows-style line endings (i.e. CRLF). -End each file with a line break. - ### Semicolons Avoid semicolons. (A few resources to help you understand this: [*](http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding) [*](http://inimino.org/~inimino/blog/javascript_semicolons) [*](http://jamesallardice.com/understanding-automatic-semi-colon-insertion-in-javascript/)) @@ -251,7 +249,7 @@ Please don't leave trailing whitespace anywhere. It makes diffs harder to read. Blank lines should have no indentation or spaces. It should be empty other than a line ending. -All files should end with a trailing space. Some editors add this on their own, so it will result in unnecessary lines in later diffs if you don't. +All files should end with a trailing line break. Some editors add this on their own, so it will result in unnecessary lines in later diffs if you don't. ### Indentation and vertical whitespace From 0c38f9ec1c49f6d550f7d79e3b3ebfe03f7a9282 Mon Sep 17 00:00:00 2001 From: Dan Okkels Brendstrup Date: Thu, 12 Nov 2015 23:45:06 +0100 Subject: [PATCH 11/63] Read version number + other info from package.json --- Gruntfile.js | 17 +++++++++-------- package.json | 11 +++++++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index a22e6198..a67c3931 100755 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,7 +1,8 @@ /* eslint-env node */ module.exports = function (grunt) { // eslint-disable-line - var version = "0.2.1" + var pkg = grunt.file.readJSON("package.json") + var currentYear = grunt.template.today("yyyy") var inputFolder = "./docs" var tempFolder = "./temp" var archiveFolder = "./archive" @@ -72,7 +73,7 @@ module.exports = function (grunt) { // eslint-disable-line makeTasks("guide", guide) makeTasks("api", api) - var currentVersionArchiveFolder = archiveFolder + "/v" + version + var currentVersionArchiveFolder = archiveFolder + "/v" + pkg.version grunt.initConfig({ // Keep this in sync with the .eslintignore @@ -107,10 +108,10 @@ module.exports = function (grunt) { // eslint-disable-line options: { banner: [ "/*", - "Mithril v" + version, - "http://github.com/lhorie/mithril.js", - "(c) Leo Horie", - "License: MIT", + pkg.name + " v" + pkg.version, + pkg.homepage, + "(c) 2014-" + currentYear + " " + pkg.author.name, + "License: " + pkg.license, "*/" ].join("\n"), sourceMap: true @@ -135,7 +136,7 @@ module.exports = function (grunt) { // eslint-disable-line force: true, patterns: [ {match: /\.md/g, replacement: ".html"}, - {match: /\$version/g, replacement: version} + {match: /\$version/g, replacement: pkg.version} ] }, @@ -232,7 +233,7 @@ module.exports = function (grunt) { // eslint-disable-line expand: true, cwd: currentVersionArchiveFolder, src: "./**", - dest: outputFolder + "/archive/v" + version + dest: outputFolder + "/archive/v" + pkg.version } }, diff --git a/package.json b/package.json index 63391944..4ef7f167 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,19 @@ { - "name": "mithril", + "name": "Mithril", "description": "Mithril.js beta build - use this to help us test the releases before they are released", "version": "0.2.1", + "homepage": "http://mithril.js.org", + "license": "MIT", + "author": { + "name": "Leo Horie" + }, "repository": { "type": "git", "url": "git@github.com:lhorie/mithril.js.git" }, + "bugs": { + "url" : "http://github.com/lhorie/mithril.js/issues" + }, "scripts": { "test": "grunt test" }, @@ -33,7 +41,6 @@ "sinon": "^1.17.2", "sinon-chai": "^2.8.0" }, - "license": "MIT", "files": [ "mithril.min.js", "mithril.min.js.map", From e3e2fba06048505ec8b119b26d349f9f4fdb024b Mon Sep 17 00:00:00 2001 From: Leo Horie Date: Thu, 12 Nov 2015 18:54:08 -0500 Subject: [PATCH 12/63] remove broken badge --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 6f19f097..13e795a3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ [![JS.ORG](https://img.shields.io/badge/js.org-mithril-ffb400.svg?style=flat-square)](http://js.org) [![Join the chat at https://gitter.im/lhorie/mithril.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/lhorie/mithril.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![Support and Consulting Services](https://s3-us-west-2.amazonaws.com/supportedsourceassets/buttons/supportandservices1.png)](http://supportedsource.org/consulting-services-and-support/Mithril) [![Build Status](https://travis-ci.org/lhorie/mithril.js.svg?branch=master)](https://travis-ci.org/lhorie/mithril.js) # Mithril From 04afc9a2c5d3f9e4388c008bcfbf837f26a554c4 Mon Sep 17 00:00:00 2001 From: Leo Horie Date: Thu, 12 Nov 2015 22:36:05 -0500 Subject: [PATCH 13/63] stop eslint nag --- mithril.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mithril.js b/mithril.js index 6dd538b4..70247887 100644 --- a/mithril.js +++ b/mithril.js @@ -1,4 +1,4 @@ -void (function (global, factory) { +void (function (global, factory) { // eslint-disable-line "use strict" /* eslint-disable no-undef */ var m = factory(window) From 28366212b0f80bd2ade7224fa01fcd834237d825 Mon Sep 17 00:00:00 2001 From: Leo Horie Date: Thu, 12 Nov 2015 23:30:50 -0500 Subject: [PATCH 14/63] prevent IE error #810 --- mithril.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mithril.js b/mithril.js index 70247887..ae8bec8b 100644 --- a/mithril.js +++ b/mithril.js @@ -510,7 +510,10 @@ void (function (global, factory) { // eslint-disable-line editable.innerHTML = data } else { // was a trusted string - if (nodes[0].nodeType === 1 || nodes.length > 1) { + if (nodes[0].nodeType === 1 || + nodes.length > 1 || + !nodes[0].nodeValue.trim() + ) { clear(cached.nodes, cached) nodes = [$document.createTextNode(data)] } From 5269f9b1ce741a28003a5023abf8f71798f3a62a Mon Sep 17 00:00:00 2001 From: Leo Horie Date: Thu, 12 Nov 2015 23:42:27 -0500 Subject: [PATCH 15/63] don't use non-standard trim, dies on Travis CI --- mithril.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mithril.js b/mithril.js index cc0e4f1f..9a70070c 100644 --- a/mithril.js +++ b/mithril.js @@ -512,7 +512,7 @@ void (function (global, factory) { // eslint-disable-line // was a trusted string if (nodes[0].nodeType === 1 || nodes.length > 1 || - !nodes[0].nodeValue.trim() + (nodes[0].nodeValue.trim && !nodes[0].nodeValue.trim()) ) { clear(cached.nodes, cached) nodes = [$document.createTextNode(data)] From 101d4523b449ef3051168fbe6e846e71bd67054d Mon Sep 17 00:00:00 2001 From: Dan Okkels Brendstrup Date: Fri, 13 Nov 2015 08:40:08 +0100 Subject: [PATCH 16/63] Revert to lowercase NPM package name As per https://docs.npmjs.com/files/package.json#name as mentioned by @Pumpuli in #845. --- Gruntfile.js | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index a67c3931..9844f85b 100755 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -108,7 +108,7 @@ module.exports = function (grunt) { // eslint-disable-line options: { banner: [ "/*", - pkg.name + " v" + pkg.version, + "Mithril v" + pkg.version, pkg.homepage, "(c) 2014-" + currentYear + " " + pkg.author.name, "License: " + pkg.license, diff --git a/package.json b/package.json index 4ef7f167..cc9d7dc2 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "Mithril", + "name": "mithril", "description": "Mithril.js beta build - use this to help us test the releases before they are released", "version": "0.2.1", "homepage": "http://mithril.js.org", From b7ae45b6e0ab0e83b774779ec2e4092d7a68380c Mon Sep 17 00:00:00 2001 From: impinball Date: Fri, 13 Nov 2015 21:40:25 -0500 Subject: [PATCH 17/63] Address @lhorie's comments, fix HTML test files --- .eslintrc | 2 +- CONTRIBUTING.md | 239 +++++++++++++++++++---------------------- mithril.js | 4 + test/index.html | 2 +- test/mithril.mount.js | 1 - test/mithril.render.js | 1 - test/svg.html | 32 +++--- 7 files changed, 131 insertions(+), 150 deletions(-) diff --git a/.eslintrc b/.eslintrc index 3417ee64..52b95c9e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -65,7 +65,7 @@ "no-array-constructor": 2, "no-lonely-if": 2, "no-new-object": 2, - "no-multiple-empty-lines": [2, {"max": 2}], + "no-multiple-empty-lines": [2, {"max": 1}], "no-spaced-func": 2, "no-unneeded-ternary": 2, "object-curly-spacing": 2, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4864595..82c3777c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,32 +19,49 @@ Use the [issue tracker](https://github.com/lhorie/mithril.js/issues). Please do We welcome any and all contributions. This is a community-driven project. Although we don't have a lot, we do have a few guidelines for contributions. -1. Please adhere to the style guide. It's pretty lengthy, but most everything is checked by ESLint, and if anything fails to check, the build will fail, and you will know about it. Most of it is common practice and common sense. ESLint is also set up to check for other common errors, such as undeclared variables and invalid `typeof` values. +1. Please try to adhere to the style guide. Most of it is checked by ESLint. ESLint is also set up to check for other common errors, such as undeclared variables and invalid `typeof` values. 2. Please make sure there are no regressions with your patch. Please don't disable existing tests, and please don't send a PR with new, disabled tests. - There are a few known failing tests currently (PRs welcome): [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.deferred.js#L121-L125) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.render.js#L1321-L1343) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L106-L131) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L134-L162) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L165-L191) [*](https://github.com/lhorie/mithril.js/blob/next/test/mithril.route.js#L194-L222) 3. For any new features introduced, be sure to write new unit tests for it. Maximum coverage is what we want. 4. Try to not leave any extra `TODO`s, `FIXME`s, etc. in your code. ESLint will nag at you until you fix whatever problem it is. - Note that it's only a warning, not an error. It won't fail the CI tests, and there's a few outstanding ones inside Mithril right now. -It is assumed that all contributions you make you have the appropriate rights to and that it may be made available under the MIT License, the license used for this project. +It is assumed that for all contributions you make, you have the appropriate rights to and it may be made available under the MIT License, the license used for this project. # Style Guide -The style is checked with ESLint. This style guide is here for one reason only: consistency. This should work for most code here, but this shouldn't be considered absolute &endash; consistency with the surrounding code is higher priority than following this guide. Also, if some sort of hack is impossible without violating this guide (e.g. if Mithril ever needs [Bluebird's infamous hack](https://stackoverflow.com/q/24987896)), just make sure the code is consistent with what's around it. +The style is checked with ESLint. This style guide is here for one reason only: consistency. This should work for most code here, but it shouldn't be considered absolute &endash; consistency with the surrounding code is higher priority than following this guide. Also, if you need some sort of hack that doesn't follow this style guide like [Bluebird's `toFastProperties` hack](https://stackoverflow.com/q/24987896), make sure the code is consistent with what's around it, and disable whatever ESLint warnings you need to. (In that case, you would use `no-eval` and `no-unused-expressions`). + +### EditorConfig + +This project has its own [EditorConfig](http://editorconfig.org/). Most common editors either support it natively or have a plugin to support it. Here's links for several editors: + +- [Atom](https://atom.io/packages/editorconfig) +- [Nodepad++](https://github.com/editorconfig/editorconfig-notepad-plus-plus#readme) +- [Sublime Text](https://packagecontrol.io/packages/EditorConfig) +- [Vim](http://www.vim.org/scripts/script.php?script_id=3934) +- [Emacs](https://marmalade-repo.org/packages/editorconfig) +- IntelliJ, WebStorm: You're already set, since it supports EditorConfig natively. +- [Eclipse](https://marketplace.eclipse.org/content/editorconfig-eclipse) +- [Visual Studio](https://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328) +- [Xcode](https://github.com/MarcoSero/EditorConfig-Xcode) +- [Komodo](http://komodoide.com/packages/addons/editorconfig/) + +EditorConfig also has [their own curated list](http://editorconfig.org/#download) of plugins. Do note that Text Mate's plugin doesn't support multiple properties used in this repo's `.editorconfig`. ### Line length -Keep lines down to a maximum of 80 characters. Minifiers are very good at compressing whitespace, so don't be afraid to use it. +Please keep line length down to a maximum of 80 characters. -The only exception to this rule is with long regexes. Append `// eslint-disable-line max-len` to the end of those lines. +The only exception to this rule is with long regexes and test names. You can use `// eslint-disable-line max-len` to suppress this. ### Function length -Keep function length to no more than 20 statements, including those in nested blocks. +Please keep function length to no more than 20 statements, including those in nested blocks. -The only exceptions are for revealing module wrappers and Mocha `describe` and `context` blocks. +The only exceptions are for revealing module wrappers and Mocha `describe` and `context` blocks. If you need to suppress this, you can use `// eslint-disable-line max-statements` at the beginning of the function. -This isn't checked for the tests, but still, keep it reasonable. +This isn't checked for the tests, but still, please keep it reasonable. ### Line endings @@ -54,25 +71,21 @@ End each file with a line break. ### Semicolons -Avoid semicolons. (A few resources to help you understand this: [*](http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding) [*](http://inimino.org/~inimino/blog/javascript_semicolons) [*](http://jamesallardice.com/understanding-automatic-semi-colon-insertion-in-javascript/)) +Avoid semicolons. A few resources to help you understand this: [*](http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding) [*](http://inimino.org/~inimino/blog/javascript_semicolons) [*](http://jamesallardice.com/understanding-automatic-semi-colon-insertion-in-javascript/) ### Redundant expressions -Don't use redundant parentheses, curly braces, `undefined`s, labels, ternaries, etc. Examples: +Don't use redundant parentheses, curly braces, `undefined`s, ternaries, etc. - `var foo = value === 1 ? true : false` is better written as `var foo = value === 1`. -- `var foo = (value === 1) ? bar : baz` is better written as `var foo = value === 1 ? bar : baz`. - `var foo = undefined` is better written as `var foo`. - `return undefined` is better written as `return`. - `delete(obj.foo)` is better written as `delete obj.foo`. -- `return` at the end of a function if you're returning `undefined` should just be omitted. -- If you're returning `null`, there's usually little reason to not just return `undefined`. -- Unused variables should be removed. -- An exception is detailed below for assignment in conditions. +- As an exception, use an extra set of parentheses when assigning in conditions. ### Equality testing -Use strict equality (`===`/`!==`), not loose equality (`==`/`!=`). The only exception is if you're testing for `null` or `undefined`, in which loose equality, `value == null` and `value != null` is preferred. The reason is for type safety with primitives. +Prefer strict equality (`===`/`!==`) to loose equality (`==`/`!=`), unless you're comparing against `null` or `undefined`, where loose equality (`== null`/`!= null`) is preferred. It's more type-safe with primitives. ### `eval` and friends @@ -84,14 +97,14 @@ Prefer double quotes to single quotes, but using single quotes to avoid escaping ### Strict mode -All code must be in strict mode, preferably wrapped in an IIFE. +Any code not in the global scope should be in strict mode unless there's a good reason it shouldn't be. Browsers run it faster, and there's certain things where it's safer. ## Comments Comments are helpful. Use descriptive comments where needed, so others can read it and understand it. If a non-obvious hack is used, explain it with a comment. But don't repeat yourself with a redundant comment when the code adequately describes itself. ```js -// Good, code is self-descriptive +// Good var CARD_DECK_SIZE = 52 // Shuffle the deck of cards. @@ -103,7 +116,7 @@ for (var i = 0; i < CARD_DECK_SIZE; i++) { deck[j] = tmp } -// Also good, requires a descriptive comment. +// Also good function toFastProperties(obj) { // Bluebird's toFastProperties hack. Forces V8 to optimize object as prototype, // significantly speeding up property access. @@ -117,7 +130,7 @@ function toFastProperties(obj) { /* eslint-enable no-eval */ } -// Bad, redundant comments +// Bad var CARD_DECK_SIZE = 52 // Shuffle the deck of cards. @@ -132,47 +145,8 @@ function shuffle(deck) { deck[j] = tmp } } -``` - -### Magic values - -Prefer constant variables to magic values where it helps with code readability. Also, don't use comments in place of a constant. - -```js -// Good -var CARD_DECK_SIZE = 52 -for (var i = 0; i < CARD_DECK_SIZE; i++) { - var j = i + (Math.random() * CARD_DECK_SIZE - i)|0 - var tmp = a[i] - a[i] = a[j] - a[j] = tmp -} - -// Bad, what's 52 for? -for (var i = 0; i < 52; i++) { - var j = i + (Math.random() * 52 - i)|0 - var tmp = a[i] - a[i] = a[j] - a[j] = tmp -} - -// Also bad, comment not substitute for constant -// 52 cards in a deck -for (var i = 0; i < 52; i++) { - var j = i + (Math.random() * 52 - i)|0 - var tmp = a[i] - a[i] = a[j] - a[j] = tmp -} -``` - -### Distracting comments - -Don't comment *everything*. It's distracting, pointless, and a waste of time. Only comment when you need to. - -```js -// Extremely bad. Don't *ever* do this. +// Also bad // This function loops through each item in a list, calling `f` with each item // and their respective index. If the function `f` returns explicitly with // `false`, iteration stops. This function returns the original list for @@ -192,6 +166,38 @@ function forEach(list, f) { } ``` +### Magic values + +Prefer constant variables to magic values where it helps with code readability. Also, don't use comments in place of a constant. + +```js +// Good +var CARD_DECK_SIZE = 52 +for (var i = 0; i < CARD_DECK_SIZE; i++) { + var j = i + (Math.random() * CARD_DECK_SIZE - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} + +// Bad +for (var i = 0; i < 52; i++) { + var j = i + (Math.random() * 52 - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} + +// Also bad +// Note: 52 cards in a deck +for (var i = 0; i < 52; i++) { + var j = i + (Math.random() * 52 - i)|0 + var tmp = a[i] + a[i] = a[j] + a[j] = tmp +} +``` + ### Initial whitespace Start your comments with a space. It's more readable. @@ -206,7 +212,7 @@ Start your comments with a space. It's more readable. ### Grammar and spelling -Use proper grammar and spelling in your comments. This shouldn't need explanation. +Please try to use proper grammar and spelling. Not all of us are perfect English speakers (even us native ones struggle at times), but it's easier to understand down the road when reading the code. ## Whitespace @@ -235,7 +241,7 @@ function iterate() { for (var i = 0; i < list.length; i++) read(list[i]) } -// Even worse +// Also bad function iterate() { var list = [] for (var index = 0; hasNext(); list.push(next(index++))) {} @@ -245,7 +251,7 @@ function iterate() { ### Trailing whitespace -Please don't leave trailing spaces anywhere. It makes diffs harder to read. +Please don't leave trailing spaces, even in blank likes. It makes diffs harder to read. If your [editor supports EditorConfig, or you've downloaded a plugin for it](http://editorconfig.org/#download), you're already set. Otherwise, searching " strip trailing whitespace blank lines" should help you. ### Indentation and vertical whitespace @@ -255,7 +261,7 @@ Never mix tabs and spaces. Don't use smart tabs. ### Excessive whitespace -Keep whitespace within reason. Limit vertical whitespace to no more than 2 consecutive blank lines, and don't start or end blocks with plain whitespace. Don't use more than one character of horizontal whitespace beyond indentation. +Keep whitespace within reason. Limit vertical whitespace to no more than 1 consecutive blank line, and don't start or end blocks with plain whitespace. Don't use more than one character of horizontal whitespace beyond indentation. ```js // Bad @@ -268,8 +274,6 @@ function iterate() { index++ } - // Too many empty lines - for (var i = 0; i < list.length; i++) { @@ -282,6 +286,8 @@ var a = 2 // ^^ ^^ ``` +If you're find yourself resorting to multiple consecutive blank lines to separate logic, consider refactoring the code into smaller functions if possible. + ### Control keywords Always surround control keywords (e.g. `if`, `else`, `for`) with whitespace. @@ -298,25 +304,20 @@ Always surround any other binary operator with whitespace, including assignment // Good var a = 1 + 2 a = 3 -a += 4 var a = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 // Bad var a = 1+2 -var a = 1 +2 -var a = 1+ 2 var a=1+2 -var a=1 + 2 a=3 -a+=4 var a = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 ``` -As an exception, casting to a 32-bit integer (i.e. `x|0`) doesn't require whitespace surrounding it. +In the event you're casting to a 32-bit integer (i.e. `x|0`), it's okay to omit the whitespace. Mithril doesn't currently have any instances of this, but it may in the future. ```js // This is okay @@ -332,31 +333,15 @@ Do not use spaces between any other unary operator and the value they apply to. ```js // Good !a -!!a -~~a -a++ -++a -1 ~1 -// Okay -+!a - // Bad ! a -!! a -! ! a -++ a -a ++ -+ ! a - -// Even worse - 1 ~ 1 ``` -Don't use `new function () {}`. Just use an object literal instead, and an IIFE if needed. - ## Objects ### Exterior whitespace @@ -398,8 +383,6 @@ var object = {foo: 1} // Bad var object = {foo:1} var object = {foo : 1} - -// Very bad var object = {foo :1} ``` @@ -420,6 +403,8 @@ var object = { var object = {foo: 1, bar: 2, baz: 3, quux: "string"} ``` +Prefer plain objects over `new function () {}`, but if you feel the latter is better, use `// eslint-disable-line no-new-func` on the first line. + ### Comma placement Commas come last. Also, use trailing commas if the object takes multiple lines. @@ -442,7 +427,7 @@ var object = { , bar: 2 // Comma first } -// Trailing comma in single-line object +// Also bad var object = {foo: 1,} ``` @@ -464,7 +449,7 @@ object. ### Property quoting -Quote properties when needed. Never quote valid identifiers. This may lead to some inconsistency in whether properties are quoted or not in the object, but that inconsistency is okay, and is the only exception in consistency. +Quote properties when needed. Never quote valid identifiers. This may lead to some inconsistency in whether properties are quoted or not in the object, but that inconsistency is okay. ```js // Good @@ -502,7 +487,7 @@ Use `self` to capture `this` where needed. (i.e. `var self = this`) Prefer short but clear, descriptive, and self-documenting variable names. -Single letter names are only okay in these contexts: +Single letter names are generally okay in these contexts: - Loop variables: `i`, `j`, etc. - Function arguments in small, trivial functional utilities: `f`, `g`, etc. @@ -517,15 +502,12 @@ function forEach(list, f) { return list } -function ajax(url, callback) { - var xhr = new XMLHttpRequest() - xhr.open("GET", url) - xhr.onreadystatechange = function () { - if (this.readyState === 4) { - callback(this.responseText, this.status) - } +// Also good +function forEach(list, func) { + for (var index = 0; index < list.length; index++) { + func(list[index], index) } - xhr.send() + return list } // Bad @@ -536,35 +518,13 @@ function iterateArray(listOfEntries, callback) { return listOfEntries } -function getRequestStringFromServer(serverLocation, functionToCall) { - var xmlHttpRequest = new XMLHttpRequest() - xmlHttpRequest.open("GET", serverLocation) - xmlHttpRequest.onreadystatechange = function () { - if (this.readyState === 4) { - functionToCall(this.responseText, this.status) - } - } - xmlHttpRequest.send() -} - -// Even worse +// Also bad function e(l, c) { for (var x = 0; x < l.length; x++) { c(l[x], x) } return l } - -function a(u, f) { - var x = new XMLHttpRequest() - x.open("GET", url) - x.onreadystatechange = function () { - if (this.readyState === 4) { - f(this.responseText,this.status) - } - } - x.send() -} ``` ### Multiple variable declarations @@ -596,7 +556,7 @@ for (var i = 0, test; (test = foo === 1); i++) { // Bad var a = 1, b = 2, c, d -// Even worse +// Also bad var foo, bar, baz, quux, spam, eggs, ham, shouldUpdate, initialize ``` @@ -615,7 +575,7 @@ Don't assign to a function declaration. Declarations look like static values, so function foo() { return 1 } foo = function () { return 2 } -// Even worse +// Also bad function foo() { return 1 } foo = 2 ``` @@ -632,8 +592,9 @@ if (test) { } var test = foo === 1 -for (var i = 0; test; i++, test = foo === 1) { +for (var i = 0; test; i++) { doSomething(i) + test = foo === 1 } if ((test = foo === 1)) { @@ -793,6 +754,21 @@ if (condition) { } else doSomethingElse() ``` +## `do`-`while` loops + +Always use braces. + +```js +// Good +do { + doSomething() +} while (condition) + +// Bad +do doSomething() +while (condition) +``` + ### Empty blocks Mark empty blocks as intentionally empty via a comment or similar. Don't just leave an empty block and/or semicolon. @@ -800,7 +776,12 @@ Mark empty blocks as intentionally empty via a comment or similar. Don't just le ```js // Good for (var i = 0; i < list.length && cond(list[i]); i++) { - // empty + // do nothing +} + +// Even better +for (var i = 0; i < list.length; i++) { + if (!cond(list[i])) break } // Bad @@ -852,5 +833,3 @@ Don't nest curly braces beyond 4 levels deep. This includes blocks, loops, and f ### Brace style Put the `else`, `catch`, and `finally` on the same line as its closing brace. - -(Obviously, this doesn't apply to `if`-`else` statements that don't use curly braces.) diff --git a/mithril.js b/mithril.js index 7f1cba65..aaf27974 100644 --- a/mithril.js +++ b/mithril.js @@ -1815,6 +1815,10 @@ return fire() } + if (state === REJECTING) { + m.deferred.onerror(promiseValue) + } + thennable(then, function () { state = RESOLVING fire() diff --git a/test/index.html b/test/index.html index 6880ccfe..b4ca2f5c 100644 --- a/test/index.html +++ b/test/index.html @@ -67,7 +67,7 @@ runner.on('fail', function (test, err) { result: false, message: err.message, stack: err.stack, - titles: flattenTitles(test) + titles: flattenTitles(test), }) }) diff --git a/test/mithril.mount.js b/test/mithril.mount.js index a5ae6e61..5c7803e1 100644 --- a/test/mithril.mount.js +++ b/test/mithril.mount.js @@ -469,7 +469,6 @@ describe("m.mount()", function () { expect(spy).to.have.been.called }) - it("calls config with truthy init only once", function () { mock.requestAnimationFrame.$resolve() diff --git a/test/mithril.render.js b/test/mithril.render.js index 7b00ccc3..6a019ce3 100644 --- a/test/mithril.render.js +++ b/test/mithril.render.js @@ -911,7 +911,6 @@ describe("m.render()", function () { expect(root.childNodes[0].nodeName).to.equal("DIV") }) - // https://github.com/lhorie/mithril.js/issues/157 it("renders nodes with new keys correctly", function () { var root = mock.document.createElement("div") diff --git a/test/svg.html b/test/svg.html index 5f99195c..6ecd34f6 100644 --- a/test/svg.html +++ b/test/svg.html @@ -94,13 +94,13 @@ m.render(document.getElementById("test"), [ "s 11 -61 -11 -80", "s -79 -7 -70 -41", "C 46.039,146.545,53.039,128.545,66.039,133.545", - "z" + "z", ].join(" "), fill: "#FFFFFF", stroke: "#000000", "stroke-miterlimit": 10, - "stroke-width": 4 - }) + "stroke-width": 4, + }), ]), m("svg[height=270px][width=270px][viewBox='0 0 270 270']", [ m("g[transform='translate(150,150)'][title=Clock]", [ @@ -109,7 +109,7 @@ m.render(document.getElementById("test"), [ r: 108, fill: "none", "stroke-width": 4, - stroke: "gray" + stroke: "gray", }), m("circle", { r: 97, @@ -117,7 +117,7 @@ m.render(document.getElementById("test"), [ "stroke-width": 11, stroke: "black", "stroke-dasharray": "4,46.789082", - transform: "rotate(-1.5)" + transform: "rotate(-1.5)", }), m("circle", { r: 100, @@ -125,8 +125,8 @@ m.render(document.getElementById("test"), [ "stroke-width": 5, stroke: "black", "stroke-dasharray": "2,8.471976", - transform: "rotate(-.873)" - }) + transform: "rotate(-.873)", + }), ]), m("g[transform='rotate(180)']", [ m("g#hour", [ @@ -135,7 +135,7 @@ m.render(document.getElementById("test"), [ y2: 75, "stroke-linecap": "round", stroke: "blue", - opacity: 0.5 + opacity: 0.5, }), m("animateTransform[attributeName=transform]", { type: "rotate", @@ -143,7 +143,7 @@ m.render(document.getElementById("test"), [ dur: "12h", by: 360, }), - m("circle[r=7]") + m("circle[r=7]"), ]), m("g#minute", [ m("line", { @@ -157,9 +157,9 @@ m.render(document.getElementById("test"), [ type: "rotate", repeatCount: "indefinite", dur: "60min", - by: 360 + by: 360, }), - m("circle[r=6][fill=red]") + m("circle[r=6][fill=red]"), ]), m("g#second", [ m("line", { @@ -175,9 +175,9 @@ m.render(document.getElementById("test"), [ dur: "60s", by: 360, }), - m("circle[r=4][fill=blue]") - ]) - ]) + m("circle[r=4][fill=blue]"), + ]), + ]), ]), m("script", "(" + function () { "use strict" @@ -195,7 +195,7 @@ m.render(document.getElementById("test"), [ rotate("hour", 30 * (hours + minutes / 60 + seconds / 3600)) rotate("minute", 6 * (minutes + seconds / 60)) rotate("second", 6 * seconds) - }.toString() + ")()") + }.toString() + ")()"), ]), m("svg[height=200px][width=200px]", [ m("foreignObject", { @@ -203,7 +203,7 @@ m.render(document.getElementById("test"), [ y: 0, width: "100px", height: "100px", - transform: "translate(0,0)" + transform: "translate(0,0)", }, m("div", {xmlns: "http://www.w3.org/1999/xhtml"}, [ m.trust("this is a piece of html rendered as " + "" + From e9d46d0e062866cccc03208bbdeadc6ffc9cd9f4 Mon Sep 17 00:00:00 2001 From: Dan Okkels Brendstrup Date: Sun, 15 Nov 2015 20:59:53 +0100 Subject: [PATCH 18/63] Download button + links point to Installation page --- docs/installation.md | 2 +- docs/layout/api.html | 2 +- docs/layout/guide.html | 2 +- docs/layout/index.html | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index 206caa37..b19f7ad3 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -6,7 +6,7 @@ Mithril is available from a variety of sources: ### Direct download -You can [download a zip of the latest version version here](http://lhorie.github.io/mithril/mithril.min.zip). +You can [download a zip of the latest version version here](mithril.min.zip). Links to older versions can be found in the [change log](change-log.html). diff --git a/docs/layout/api.html b/docs/layout/api.html index 63bdd3b1..4cd8543b 100644 --- a/docs/layout/api.html +++ b/docs/layout/api.html @@ -14,7 +14,7 @@ API Community Learn - Download + Download Github diff --git a/docs/layout/guide.html b/docs/layout/guide.html index 3623adb4..8eb90a00 100644 --- a/docs/layout/guide.html +++ b/docs/layout/guide.html @@ -14,7 +14,7 @@ API Community Learn - Download + Download Github diff --git a/docs/layout/index.html b/docs/layout/index.html index 7b34ad28..b91fedea 100644 --- a/docs/layout/index.html +++ b/docs/layout/index.html @@ -14,7 +14,7 @@ API Community Learn - Download + Download Github @@ -28,7 +28,7 @@

Guide - Download v$version + Download v$version

From d7ef127be2e10a9b15e6590e43cdcf4decf3dfec Mon Sep 17 00:00:00 2001 From: impinball Date: Fri, 20 Nov 2015 00:55:04 -0500 Subject: [PATCH 19/63] Isolate m.prop() and m.deferred() implementations (mostly) This mostly isolates the implementations for both of these. Now, everything here calls the method itself, not any of the external methods. Few driveby fixes as well: 1. Git now ignores archive/ again (it's a build artifact, and can be removed when updating `master`) 2. Since I had to rewrite most of the Deferred implementation, the new version passes one of the skipped tests, so it is now enabled. --- .gitignore | 1 + mithril.js | 289 ++++++++++++++++++++++----------------- mithril.min.js | 6 +- mithril.min.js.map | 2 +- test/mithril.deferred.js | 3 +- test/mithril.prop.js | 6 +- 6 files changed, 170 insertions(+), 137 deletions(-) diff --git a/.gitignore b/.gitignore index 3c3629e6..aeab5a02 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +archive diff --git a/mithril.js b/mithril.js index 9a70070c..0d265c55 100644 --- a/mithril.js +++ b/mithril.js @@ -1193,9 +1193,39 @@ void (function (global, factory) { // eslint-disable-line return prop } + function isPromise(object) { + return object != null && (isObject(object) || isFunction(object)) && + isFunction(object.then) + } + + function propify(promise) { + var prop = m.prop() + promise.then(prop) + + prop.then = promise.then.bind(promise) + prop.catch = promise.then.bind(promise, undefined) + + prop.finally = function (callback) { + function _callback() { + return m.deferred().resolve(callback()).promise + } + + return promise.then(function (value) { + return _callback().then(function () { + return value + }) + }, function (reason) { + return _callback().then(function () { + throw reason + }) + }) + } + + return prop + } + m.prop = function (store) { - if ((store != null && isObject(store) || isFunction(store)) && - isFunction(store.then)) { + if (isPromise(store)) { return propify(store) } else { return gettersetter(store) @@ -1732,164 +1762,167 @@ void (function (global, factory) { // eslint-disable-line function Deferred(onSuccess, onFailure) { var self = this - var state = 0 - var promiseValue = 0 + var promiseValue var next = [] + var func = push - self.promise = {} + function coerce(value, next, error) { + if (isPromise(value)) { + return value.then(function (value) { + coerce(value, next, error) + }, function (e) { + coerce(e, error, error) + }) + } else { + return next(promiseValue = value) + } + } + + function resolve(deferred) { + deferred.resolve(promiseValue) + } + + function reject(deferred) { + deferred.reject(promiseValue) + } + + function push(deferred) { + next.push(deferred) + } + + function init(promise) { + if (func !== reject) promise(promiseValue) + return promise + } self.resolve = function (value) { - if (!state) { - promiseValue = value - state = RESOLVING - - fire() + if (func === push) { + fire(RESOLVING, value, self) } return this } self.reject = function (value) { - if (!state) { - promiseValue = value - state = REJECTING - - fire() + if (func === push) { + fire(REJECTING, value, self) } return this } - self.promise.then = function (onSuccess, onFailure) { - var deferred = new Deferred(onSuccess, onFailure) - if (state === RESOLVED) { - deferred.resolve(promiseValue) - } else if (state === REJECTED) { - deferred.reject(promiseValue) - } else { - next.push(deferred) - } - return deferred.promise + self.promise = function (value) { + if (arguments.length) coerce(value, noop, noop) + return func !== reject ? promiseValue : undefined } - function finish(type) { - state = type || REJECTED - forEach(next, function (deferred) { - if (state === RESOLVED) { - deferred.resolve(promiseValue) - } else { - deferred.reject(promiseValue) - } + self.promise.then = function (onSuccess, onFailure) { + var deferred = new Deferred(onSuccess, onFailure) + func(deferred) + return init(deferred.promise) + } + + self.promise.catch = function (callback) { + return self.promise.then(null, callback) + } + + self.promise.finally = function (callback) { + function _callback() { + var p = new Deferred().resolve(callback()).promise + if (func !== reject) p(promiseValue) + return p + } + + return self.promise.then(function () { + return _callback().then(function () { + return promiseValue + }) + }, function () { + _callback().then(function () { + throw promiseValue + }) }) } - function thennable(then, success, fail, notThennable) { - if (((promiseValue != null && isObject(promiseValue)) || - isFunction(promiseValue)) && isFunction(then)) { - try { - // count protects against abuse calls from spec checker - var count = 0 - then.call(promiseValue, function (value) { - if (count++) return - promiseValue = value - success() - }, function (value) { - if (count++) return - promiseValue = value - fail() - }) - } catch (e) { - m.deferred.onerror(e) - promiseValue = e - fail() - } - } else { - notThennable() + function run(callback) { + func = callback + forEach(next, callback) + // Clear these (which hold all the extra references) + finish = fire = null // eslint-disable-line no-func-assign + } + + function finish(value, state) { + coerce(value, function () { + run(state === RESOLVED ? resolve : reject) + }, function () { + run(reject) + }) + } + + function doThen(value, deferred) { + // count protects against abuse calls from spec checker + var count = 0 + + try { + return value.then(function (value) { + if (count++) return + fire(RESOLVING, value, deferred) + }, function (value) { + if (count++) return + fire(REJECTING, value, deferred) + }) + } catch (e) { + m.deferred.onerror(e) + return fire(REJECTING, e, deferred) } } - function fire() { - // check if it's a thenable - var then + function notThennable(value, state, deferred) { try { - then = promiseValue && promiseValue.then + if (state === RESOLVING && isFunction(onSuccess)) { + value = onSuccess(value) + } else if (state === REJECTING && isFunction(onFailure)) { + value = onFailure(value) + state = RESOLVING + } } catch (e) { m.deferred.onerror(e) - promiseValue = e - state = REJECTING - return fire() + return finish(e, REJECTED) + } + + if (value === deferred) { + return finish(TypeError(), REJECTED) + } else { + return finish(value, state === RESOLVING ? RESOLVED : REJECTED) + } + } + + function fire(state, value, deferred) { + // check if it's a thenable + var thenable + try { + thenable = isPromise(value) + } catch (e) { + m.deferred.onerror(e) + return fire(REJECTING, e, deferred) } if (state === REJECTING) { - m.deferred.onerror(promiseValue) + m.deferred.onerror(value) } - thennable(then, function () { - state = RESOLVING - fire() - }, function () { - state = REJECTING - fire() - }, function () { - try { - if (state === RESOLVING && isFunction(onSuccess)) { - promiseValue = onSuccess(promiseValue) - } else if (state === REJECTING && isFunction(onFailure)) { - promiseValue = onFailure(promiseValue) - state = RESOLVING - } - } catch (e) { - m.deferred.onerror(e) - promiseValue = e - return finish() - } - - if (promiseValue === self) { - promiseValue = TypeError() - finish() - } else { - thennable(then, function () { - finish(RESOLVED) - }, finish, function () { - finish(state === RESOLVING && RESOLVED) - }) - } - }) + if (thenable) { + return doThen(value, deferred) + } else { + return notThennable(value, state, deferred) + } } } m.deferred = function () { - var deferred = new Deferred() - deferred.promise = propify(deferred.promise) - return deferred + return new Deferred() } - function propify(promise, initialValue) { - var prop = m.prop(initialValue) - promise.then(prop) - - prop.then = function (resolve, reject) { - return propify(promise.then(resolve, reject), initialValue) - } - - prop.catch = prop.then.bind(null, null) - - prop.finally = function (callback) { - function _callback() { - return m.deferred().resolve(callback()).promise - } - - return prop.then(function (value) { - return propify(_callback().then(function () { - return value - }), initialValue) - }, function (reason) { - return propify(_callback().then(function () { - throw new Error(reason) - }), initialValue) - }) - } - - return prop - } + m.deferred.prototype = Deferred.prototype + m.deferred.prototype.constructor = m.deferred function isNativeError(e) { return e instanceof EvalError || @@ -1908,7 +1941,7 @@ void (function (global, factory) { // eslint-disable-line } m.sync = function (args) { - var deferred = m.deferred() + var deferred = new Deferred() var outstanding = args.length var results = new Array(outstanding) var method = "resolve" @@ -2077,7 +2110,6 @@ void (function (global, factory) { // eslint-disable-line m.request = function (options) { if (options.background !== true) m.startComputation() - var deferred = new Deferred() var serialize = identity @@ -2127,7 +2159,6 @@ void (function (global, factory) { // eslint-disable-line } } } catch (e) { - m.deferred.onerror(e) response = e doSuccess = false } @@ -2138,7 +2169,7 @@ void (function (global, factory) { // eslint-disable-line } ajax(options) - deferred.promise = propify(deferred.promise, options.initialValue) + deferred.promise(options.initialValue) return deferred.promise } diff --git a/mithril.min.js b/mithril.min.js index 9dbccf83..fe7f1f47 100644 --- a/mithril.min.js +++ b/mithril.min.js @@ -1,8 +1,8 @@ /* Mithril v0.2.1 -http://github.com/lhorie/mithril.js -(c) Leo Horie +http://mithril.js.org +(c) 2014-2015 Leo Horie License: MIT */ -!function(a,b){"use strict";var c=b("undefined"!=typeof window?window:{});"object"==typeof module&&null!=module&&module.exports?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):a.m=c}(this,function(a,b){"use strict";function c(a){return"function"==typeof a}function d(a){return"[object Object]"===Ka.call(a)}function e(a){return"[object String]"===Ka.call(a)}function f(){}function g(a,b){for(var c=0;cd;d++)if(a[d]!==b[d])return!1;return!0}function y(a,b,c){return a.tag!==b.tag?!0:x(c,Object.keys(b.attrs))?a.attrs.id!==b.attrs.id?!0:a.attrs.key!==b.attrs.key?!0:"all"===n.redraw.strategy()?!(b.configContext&&b.configContext.retain===!0):"diff"===n.redraw.strategy()?b.configContext&&b.configContext.retain===!1:void 0:!0}function z(a,b,d){y(a,b,d)&&(b.nodes.length&&Z(b.nodes),b.configContext&&c(b.configContext.onunload)&&b.configContext.onunload(),b.controllers&&g(b.controllers,function(a){a.unload&&a.onunload({preventDefault:f})}))}function A(a,b){return a.attrs.xmlns?a.attrs.xmlns:"svg"===a.tag?"http://www.w3.org/2000/svg":"math"===a.tag?"http://www.w3.org/1998/Math/MathML":b}function B(a,b,c){c.length&&(a.views=b,a.controllers=c,g(c,function(a){if(a.onunload&&a.onunload.$old&&(a.onunload=a.onunload.$old),Ta&&a.onunload){var b=a.onunload;a.onunload=f,a.onunload.$old=b}}))}function C(a,b,d,e,f){var g=b.attrs.config;if(c(g)){var h=f.configContext=f.configContext||{};a.push(function(){return g.call(b,d,!e,h,f)})}}function D(a,c,d,e,f,g,h,i){var j=a.nodes[0];return e&&Y(j,c.tag,c.attrs,a.attrs,f),a.children=U(j,c.tag,b,b,c.children,a.children,!1,0,c.attrs.contenteditable?j:d,f,h),a.nodes.intact=!0,i.length&&(a.views=g,a.controllers=i),j}function E(a,b,c){var d;a.$trusted?d=_(b,c,a):(d=[Fa.createTextNode(a)],Pa.test(b.nodeName)||s(b,d[0],c));var e;return e="string"==typeof a||"number"==typeof a||"boolean"==typeof a?new a.constructor(a):a,e.nodes=d,e}function F(a,b,c,d,e,f){var g=b.nodes;return d&&d===Fa.activeElement||(a.$trusted?(Z(g,b),g=_(c,e,a)):"textarea"===f?c.value=a:d?d.innerHTML=a:((1===g[0].nodeType||g.length>1)&&(Z(b.nodes,b),g=[Fa.createTextNode(a)]),q(c,g[0],e,a))),b=new a.constructor(a),b.nodes=g,b}function G(a,b,c,d,e,f,g){return 0===a.nodes.length?E(b,d,c):a.valueOf()!==b.valueOf()||e?F(b,a,d,f,c,g):(a.nodes.intact=!0,a)}function H(a){if(!a.$trusted)return Ma(a)?a.length:1;var b=a.match(/<[^\/]|\>\s*[^<]/g);return null!=b?b.length:void 0}function I(a,c,d,e,f,g,h,i,j){a=r(a);var k=[],l=c.length===a.length,m=0,n={},p=!1;o(c,function(a,b){p=!0,n[c[b].attrs.key]={action:Qa,index:b}}),w(a),p&&(c=u(a,c,n,d));for(var q=0,s=0,t=a.length;t>s;s++){var x=U(d,f,c,e,a[s],c[q],g,e+m||m,h,i,j);x!==b&&(l=l&&x.nodes.intact,m+=H(x),c[q++]=x)}return l||v(a,c,k),c}function J(a,b,c,d,e){if(null!=b){if(Ka.call(b)===Ka.call(a))return b;if(e&&e.nodes){var f=c-d,g=f+(Ma(a)?a:b.nodes).length;Z(e.nodes.slice(f,g),e.slice(f,g))}else b.nodes&&Z(b.nodes,b)}return b=new a.constructor,b.tag&&(b={}),b.nodes=[],b}function K(a,c){return c===b?a.attrs.is?Fa.createElement(a.tag,a.attrs.is):Fa.createElement(a.tag):a.attrs.is?Fa.createElementNS(c,a.tag,a.attrs.is):Fa.createElementNS(c,a.tag)}function L(a,b,c,d){return d?Y(b,a.tag,a.attrs,{},c):a.attrs}function M(a,c,d,e,f,g){return null!=a.children&&0!==a.children.length?U(c,a.tag,b,b,a.children,d.children,!0,0,a.attrs.contenteditable?c:e,f,g):a.children}function N(a,b,c,d,e,f,g){var h={tag:a.tag,attrs:b,children:c,nodes:[d]};return B(h,f,g),h.children&&!h.children.nodes&&(h.children.nodes=[]),"select"===a.tag&&"value"in a.attrs&&Y(d,a.tag,{value:a.attrs.value},{},e),h}function O(a,b,c,d){var e="diff"===n.redraw.strategy()&&a?a.indexOf(b):-1;return e>-1?c[e]:"function"==typeof d?new d:{}}function P(a,b,c,d){null!=d.onunload&&Va.push({controller:d,handler:d.onunload}),a.push(c),b.push(d)}function Q(a,b,c,d,e,f){var g=O(c.views,b,d,a.controller),h=+(a&&a.attrs&&a.attrs.key);return a=0===Ta||Wa||d&&d.indexOf(g)>-1?a.view(g):{tag:"placeholder"},"retain"===a.subtree?c:(h===h&&((a.attrs=a.attrs||{}).key=h),P(f,e,b,g),a)}function R(a,b,c,d){for(var e=b&&b.controllers;null!=a.view;)a=Q(a,a.view.$original||a.view,b,e,d,c);return a}function S(a,b,c,d,e,f,g,h,i,j,k,l){var m;if(a){m=K(b,c);var n=L(b,m,c,d),o=M(b,m,e,f,c,g);e=N(b,n,o,m,c,h,i)}else m=D(e,b,f,d,c,h,g,i);return(a||k&&null!=m)&&s(j,m,l),C(g,b,m,a,e),e}function T(a,b,c,d,f,g,h,i){var j=[],k=[];if(a=R(a,b,j,k),!a.tag&&k.length)throw new Error("Component template must return a virtual element, not an array, string, etc.");a.attrs=a.attrs||{},b.attrs=b.attrs||{};var l=Object.keys(a.attrs),m=l.length>+("key"in a.attrs);return z(a,b,l),e(a.tag)?S(0===b.nodes.length,a,A(a,h),m,b,c,i,j,k,d,g,f):void 0}function U(a,b,e,f,g,h,i,j,k,l,m){return g=p(g),"retain"===g.subtree?h:(h=J(g,h,j,f,e),Ma(g)?I(g,h,a,j,b,i,k,l,m):null!=g&&d(g)?T(g,h,k,a,j,i,l,m):c(g)?h:G(h,g,j,a,i,k,b))}function V(a,b){return a.action-b.action||a.index-b.index}function W(a){return"list"!==a&&"style"!==a&&"form"!==a&&"type"!==a&&"width"!==a&&"height"!==a}function X(a,b,e,f,g,i){if("config"!==a&&"key"!==a)if(c(b)&&"on"===a.slice(0,2))f[a]=aa(b,f);else if("style"===a&&null!=b&&d(b)){h(b,function(a,b){(null==e||e[b]!==a)&&(f.style[b]=a)});for(var j in e)La.call(e,j)&&(La.call(b,j)||(f.style[j]=""))}else null!=g?"href"===a?f.setAttributeNS("http://www.w3.org/1999/xlink","href",b):f.setAttribute("className"===a?"class":a,b):a in f&&W(a)?("input"!==i||f[a]!==b)&&(f[a]=b):f.setAttribute(a,b)}function Y(a,b,c,d,e){return h(c,function(c,f){var g=d[f];if(f in d&&g===c)"value"===f&&"input"===b&&a.value!=c&&(a.value=c);else{d[f]=c;try{X(f,c,g,a,e,b)}catch(h){if(h.message.indexOf("Invalid argument")<0)throw h}}}),d}function Z(a,b){for(var c=a.length-1;c>=0;c--)if(a[c]&&a[c].parentNode){try{a[c].parentNode.removeChild(a[c])}catch(d){}b=[].concat(b),b[c]&&$(b[c])}a.length&&(a.length=0)}function $(a){a.configContext&&c(a.configContext.onunload)&&(a.configContext.onunload(),a.configContext.onunload=null),a.controllers&&g(a.controllers,function(a){c(a.onunload)&&a.onunload({preventDefault:f})}),a.children&&(Ma(a.children)?g(a.children,$):a.children.tag&&$(a.children))}function _(a,b,c){var d=a.childNodes[b];if(d){var e=1!==d.nodeType,f=Fa.createElement("span");e?(a.insertBefore(f,d||null),f.insertAdjacentHTML("beforebegin",c),a.removeChild(f)):d.insertAdjacentHTML("beforebegin",c)}else Xa(a,c);for(var g=[];a.childNodes[b]!==d;)g.push(a.childNodes[b]),b++;return g}function aa(a,b){return function(c){c=c||event,n.redraw.strategy("diff"),n.startComputation();try{return a.call(b,c)}finally{ia()}}}function ba(a){var b=Za.indexOf(a);return 0>b?Za.push(a)-1:b}function ca(a){function b(){return arguments.length&&(a=arguments[0]),a}return b.toJSON=function(){return a},b}function da(a,b){function c(){return e.apply(this,b)||this}function d(c){for(var d=[c].concat(b),e=1;e0&&Ia(gb),gb=Ha(ha,fb)}function ha(){db&&(db(),db=null),g(ab,function(a,b){var c=bb[b];if(cb[b]){var d=[cb[b]];n.render(a,c.view?c.view(cb[b],d):"")}}),eb&&(eb(),eb=null),gb=null,hb=new Date,n.redraw.strategy("diff")}function ia(){"none"===n.redraw.strategy()?(Ta--,n.redraw.strategy("diff")):n.endComputation()}function ja(b){a[b]=function(){var a=Ga[n.route.mode];"pathname"===n.route.mode&&(a+=Ga.search),lb!==na(a)&&nb(a)},db=qa,a[b]()}function ka(){return("pathname"===n.route.mode?"":Ga.pathname)+mb[n.route.mode]}function la(b){if(a.history.pushState){db=qa;var c=b?"replaceState":"pushState";eb=function(){a.history[c](null,Fa.title,mb[n.route.mode]+lb)},nb(mb[n.route.mode]+lb)}else Ga[n.route.mode]=lb,nb(mb[n.route.mode]+lb)}function ma(a,b,c){arguments.length<3&&"object"!=typeof b&&(c=b,b=null);var d=lb;lb=a;var e,f,g=b||{},i=lb.indexOf("?");if(i>=0){var j=sa(lb.slice(i+1));h(g,function(a,b){j[b]=g[b]}),e=ra(j),f=lb.slice(0,i)}else e=ra(b),f=lb;if(e){var k=-1===f.indexOf("?")?"?":"&";lb=f+k+e}return la(c||d===a)}function na(a){return a.slice(mb[n.route.mode].length)}function oa(a,b,c){var d=c.indexOf("?");d>=0?(kb=sa(c.substr(d+1,c.length)),c=c.substr(0,d)):kb={};var e=Object.keys(b),f=e.indexOf(c);if(f>=0)return n.mount(a,b[e[f]]),!0;for(var h in b)if(La.call(b,h)){if(h===c)return n.mount(a,b[h]),!0;var i=new RegExp("^"+h.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(i.test(c))return c.replace(i,function(){var c=h.match(/:[^\/]+/g)||[],d=[].slice.call(arguments,1,-2);g(c,function(a,b){a=a.replace(/:|\./g,""),kb[a]=decodeURIComponent(d[b])}),n.mount(a,b[h])}),!0}}function pa(a){if(a=a||event,!a.ctrlKey&&!a.metaKey&&2!==a.which){a.preventDefault?a.preventDefault():a.returnValue=!1;var b,c=a.currentTarget||a.srcElement;for(b="pathname"===n.route.mode&&c.search?sa(c.search.slice(1)):{};c&&"A"!==c.nodeName.toUpperCase();)c=c.parentNode;n.route(c[n.route.mode].slice(mb[n.route.mode].length),b)}}function qa(){"hash"!==n.route.mode&&Ga.hash?Ga.hash=Ga.hash:a.scrollTo(0,0)}function ra(a,c){var e={},f=[];return h(a,function(a,h){var i=c?c+"["+h+"]":h;if(null===a)f.push(encodeURIComponent(i));else if(d(a))f.push(ra(a,i));else if(Ma(a)){var j=[];e[i]=e[i]||{},g(a,function(a){e[i][a]||(e[i][a]=!0,j.push(encodeURIComponent(i)+"="+encodeURIComponent(a)))}),f.push(j.join("&"))}else a!==b&&f.push(encodeURIComponent(i)+"="+encodeURIComponent(a))}),f.join("&")}function sa(a){if(""===a||null==a)return{};"?"===a.charAt(0)&&(a=a.slice(1));var b=a.split("&"),c={};return g(b,function(a){var b=a.split("="),d=decodeURIComponent(b[0]),e=2===b.length?decodeURIComponent(b[1]):null;null!=c[d]?(Ma(c[d])||(c[d]=[c[d]]),c[d].push(e)):c[d]=e}),c}function ta(a){var c=ba(a);Z(a.childNodes,$a[c]),$a[c]=b}function ua(a,b){function e(a){j=a||sb,g(l,function(a){j===rb?a.resolve(k):a.reject(k)})}function f(a,b,e,f){if((null!=k&&d(k)||c(k))&&c(a))try{var g=0;a.call(k,function(a){g++||(k=a,b())},function(a){g++||(k=a,e())})}catch(h){n.deferred.onerror(h),k=h,e()}else f()}function h(){var d;try{d=k&&k.then}catch(g){return n.deferred.onerror(g),k=g,j=qb,h()}f(d,function(){j=pb,h()},function(){j=qb,h()},function(){try{j===pb&&c(a)?k=a(k):j===qb&&c(b)&&(k=b(k),j=pb)}catch(g){return n.deferred.onerror(g),k=g,e()}k===i?(k=TypeError(),e()):f(d,function(){e(rb)},e,function(){e(j===pb&&rb)})})}var i=this,j=0,k=0,l=[];i.promise={},i.resolve=function(a){return j||(k=a,j=pb,h()),this},i.reject=function(a){return j||(k=a,j=qb,h()),this},i.promise.then=function(a,b){var c=new ua(a,b);return j===rb?c.resolve(k):j===sb?c.reject(k):l.push(c),c.promise}}function va(a,b){var c=n.prop(b);return a.then(c),c.then=function(c,d){return va(a.then(c,d),b)},c["catch"]=c.then.bind(null,null),c["finally"]=function(a){function d(){return n.deferred().resolve(a()).promise}return c.then(function(a){return va(d().then(function(){return a}),b)},function(a){return va(d().then(function(){throw new Error(a)}),b)})},c}function wa(a){return a instanceof EvalError||a instanceof RangeError||a instanceof ReferenceError||a instanceof SyntaxError||a instanceof TypeError||a instanceof URIError}function xa(a){return a}function ya(){return"mithril_callback_"+(new Date).getTime()+"_"+Math.round(1e16*Math.random()).toString(36)}function za(c){var d=ya(),e=Fa.createElement("script");a[d]=function(f){e.parentNode.removeChild(e),c.onload({type:"load",target:{responseText:f}}),a[d]=b},e.onerror=function(){return e.parentNode.removeChild(e),c.onerror({type:"error",target:{status:500,responseText:'{"error": "Error making jsonp request"}'}}),a[d]=b,!1},e.onload=function(){return!1},e.src=c.url+(c.url.indexOf("?")>0?"&":"?")+(c.callbackKey?c.callbackKey:"callback")+"="+d+"&"+ra(c.data||{}),Fa.body.appendChild(e)}function Aa(b){var d=new a.XMLHttpRequest;if(d.open(b.method,b.url,!0,b.user,b.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?b.onload({type:"load",target:d}):b.onerror({type:"error",target:d}))},b.serialize===JSON.stringify&&b.data&&"GET"!==b.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),b.deserialize===JSON.parse&&d.setRequestHeader("Accept","application/json, text/*"),c(b.config)){var f=b.config(d,b);null!=f&&(d=f)}var g;if(g="GET"!==b.method&&b.data?b.data:"",g&&!e(g)&&g.constructor!==a.FormData)throw new Error("Request data should be either be a string or FormData. Check the `serialize` option in `m.request`");return d.send(g),d}function Ba(a){return a.dataType&&"jsonp"===a.dataType.toLowerCase()?za(a):Aa(a)}function Ca(a,b,c){if("GET"===a.method&&"jsonp"!==a.dataType){var d=a.url.indexOf("?")<0?"?":"&",e=ra(b);a.url+=e?d+e:""}else a.data=c(b);return a}function Da(a,b){var c=a.match(/:[a-z]\w+/gi);return c&&b&&g(c,function(c){var d=c.slice(1);a=a.replace(c,b[d]),delete b[d]}),a}function Ea(a){return a.responseText}var Fa,Ga,Ha,Ia,Ja="v0.2.1",Ka={}.toString,La={}.hasOwnProperty,Ma=Array.isArray||function(a){return"[object Array]"===Ka.call(a)},Na=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,Oa=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,Pa=/^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/;i(a),n.deps=function(b){return i(a=b||a),a},n.version=function(){return Ja};var Qa=1,Ra=2,Sa=3,Ta=0;n.startComputation=function(){Ta++},n.endComputation=function(){Ta>1?Ta--:(Ta=0,n.redraw())};var Ua,Va=[],Wa=!1,Xa=function(){try{return Fa.createRange().createContextualFragment("x"),function(a,b){a.appendChild(Fa.createRange().createContextualFragment(b))}}catch(a){return function(a,b){a.insertAdjacentHTML("beforeend",b)}}}(),Ya={appendChild:function(a){Ua===b&&(Ua=Fa.createElement("html")),Fa.documentElement&&Fa.documentElement!==a?Fa.replaceChild(a,Fa.documentElement):Fa.appendChild(a),this.childNodes=Fa.childNodes},insertBefore:function(a){this.appendChild(a)},childNodes:[]},Za=[],$a={};n.render=function(a,c,d){if(!a)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var e,f=[],h=ba(a),i=a===Fa;e=i||a===Fa.documentElement?Ya:a,i&&"html"!==c.tag&&(c={tag:"html",attrs:{},children:c}),$a[h]===b&&Z(e.childNodes),d===!0&&ta(a),$a[h]=U(e,null,b,b,c,$a[h],!1,0,null,b,f),g(f,function(a){a()})},n.trust=function(a){return a=new String(a),a.$trusted=!0,a},n.prop=function(a){return(null!=a&&d(a)||c(a))&&c(a.then)?va(a):ca(a)};var _a,ab=[],bb=[],cb=[],db=null,eb=null,fb=16;n.component=function(a){for(var b=[],c=1;cd&&(d=ab.length);var e=!1,f={preventDefault:function(){e=!0,db=eb=null}};return g(Va,function(a){a.handler.call(a.controller,f),a.controller.onunload=null}),e?g(Va,function(a){a.controller.onunload=a.handler}):Va=[],cb[d]&&c(cb[d].onunload)&&cb[d].onunload(f),ea(b,a,d,e)};var gb=0,hb=0,ib=Ha===a.requestAnimationFrame?ga:function(){+new Date-hb>fb&&ga()},jb=!1;n.redraw=function(a){if(!jb){jb=!0,a&&(Wa=!0);try{gb&&!a?ib():(ha(),gb=Ha(function(){gb=0},fb))}finally{jb=Wa=!1}}},n.redraw.strategy=n.prop(),n.withAttr=function(a,b,c){return function(d){d=d||event;var e,f=d.currentTarget||this,g=c||this;e=a in f?f[a]:f.getAttribute(a),b.call(g,e)}};var kb,lb,mb={pathname:"",hash:"#",search:"?"},nb=f,ob=!1;n.route=function(a,b,c,d){if(0===arguments.length)return lb;if(3===arguments.length&&e(b))nb=function(d){var e=lb=na(d);if(!oa(a,c,e)){if(ob)throw new Error("Ensure the default route matches one of the routes defined in m.route");ob=!0,n.route(b,!0),ob=!1}},ja("hash"===n.route.mode?"onhashchange":"onpopstate");else if(a.addEventListener||a.attachEvent)a.href=ka()+d.attrs.href,a.addEventListener?(a.removeEventListener("click",pa),a.addEventListener("click",pa)):(a.detachEvent("onclick",pa),a.attachEvent("onclick",pa));else if(e(a))return ma.apply(this,arguments)},n.route.param=function(a){if(!kb)throw new Error("You must call m.route(element, defaultRoute, routes) before calling m.route.param()");return a?kb[a]:kb},n.route.mode="search",n.route.buildQueryString=ra,n.route.parseQueryString=sa;var pb=1,qb=2,rb=3,sb=4;return n.deferred=function(){var a=new ua;return a.promise=va(a.promise),a},n.deferred.onerror=function(a){if(wa(a))throw Ta=0,a},n.sync=function(a){function b(a,b){return function(g){return e[a]=g,b||(f="reject"),0===--d&&(c.promise(e),c[f](e)),g}}var c=n.deferred(),d=a.length,e=new Array(d),f="resolve";return a.length>0?g(a,function(a,c){a.then(b(c,!0),b(c,!1))}):c.resolve([]),c.promise},n.request=function(a){a.background!==!0&&n.startComputation();var b=new ua,c=xa,d=xa,e=Ea;return a.dataType&&"jsonp"===a.dataType.toLowerCase()||(c=a.serialize||JSON.stringify,d=a.deserialize||JSON.parse,e=function(a){return 0===a.responseText.length&&d===JSON.parse?null:a.responseText}),a.serialize=c,a.deserialize=d,a.method=(a.method||"GET").toUpperCase(),a.url=Da(a.url,a.data),a=Ca(a,a.data,c),a.onload=a.onerror=function(c){c=c||event;var f,h,i="load"===c.type;f=i?a.unwrapSuccess:a.unwrapError;try{h=(f||xa)(d(e(c.target,a)),c.target),i&&(Ma(h)&&a.type?g(h,function(b,c){h[c]=new a.type(b)}):a.type&&(h=new a.type(h)))}catch(j){n.deferred.onerror(j),h=j,i=!1}b[i?"resolve":"reject"](h),a.background!==!0&&n.endComputation()},Ba(a),b.promise=va(b.promise,a.initialValue),b.promise},n}); +void function(a,b){"use strict";var c=b("undefined"!=typeof window?window:{});"object"==typeof module&&null!=module&&module.exports?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):a.m=c}(this,function(a,b){"use strict";function c(a){return"function"==typeof a}function d(a){return"[object Object]"===La.call(a)}function e(a){return"[object String]"===La.call(a)}function f(){}function g(a,b){for(var c=0;cd;d++)if(a[d]!==b[d])return!1;return!0}function y(a,b,c){return a.tag!==b.tag?!0:x(c,Object.keys(b.attrs))?a.attrs.id!==b.attrs.id?!0:a.attrs.key!==b.attrs.key?!0:"all"===n.redraw.strategy()?!(b.configContext&&b.configContext.retain===!0):"diff"===n.redraw.strategy()?b.configContext&&b.configContext.retain===!1:void 0:!0}function z(a,b,d){y(a,b,d)&&(b.nodes.length&&Z(b.nodes),b.configContext&&c(b.configContext.onunload)&&b.configContext.onunload(),b.controllers&&g(b.controllers,function(a){a.unload&&a.onunload({preventDefault:f})}))}function A(a,b){return a.attrs.xmlns?a.attrs.xmlns:"svg"===a.tag?"http://www.w3.org/2000/svg":"math"===a.tag?"http://www.w3.org/1998/Math/MathML":b}function B(a,b,c){c.length&&(a.views=b,a.controllers=c,g(c,function(a){if(a.onunload&&a.onunload.$old&&(a.onunload=a.onunload.$old),Ua&&a.onunload){var b=a.onunload;a.onunload=f,a.onunload.$old=b}}))}function C(a,b,d,e,f){var g=b.attrs.config;if(c(g)){var h=f.configContext=f.configContext||{};a.push(function(){return g.call(b,d,!e,h,f)})}}function D(a,c,d,e,f,g,h,i){var j=a.nodes[0];return e&&Y(j,c.tag,c.attrs,a.attrs,f),a.children=U(j,c.tag,b,b,c.children,a.children,!1,0,c.attrs.contenteditable?j:d,f,h),a.nodes.intact=!0,i.length&&(a.views=g,a.controllers=i),j}function E(a,b,c){var d;a.$trusted?d=_(b,c,a):(d=[Ga.createTextNode(a)],Qa.test(b.nodeName)||s(b,d[0],c));var e;return e="string"==typeof a||"number"==typeof a||"boolean"==typeof a?new a.constructor(a):a,e.nodes=d,e}function F(a,b,c,d,e,f){var g=b.nodes;return d&&d===Ga.activeElement||(a.$trusted?(Z(g,b),g=_(c,e,a)):"textarea"===f?c.value=a:d?d.innerHTML=a:((1===g[0].nodeType||g.length>1||g[0].nodeValue.trim&&!g[0].nodeValue.trim())&&(Z(b.nodes,b),g=[Ga.createTextNode(a)]),q(c,g[0],e,a))),b=new a.constructor(a),b.nodes=g,b}function G(a,b,c,d,e,f,g){return 0===a.nodes.length?E(b,d,c):a.valueOf()!==b.valueOf()||e?F(b,a,d,f,c,g):(a.nodes.intact=!0,a)}function H(a){if(!a.$trusted)return Na(a)?a.length:1;var b=a.match(/<[^\/]|\>\s*[^<]/g);return null!=b?b.length:void 0}function I(a,c,d,e,f,g,h,i,j){a=r(a);var k=[],l=c.length===a.length,m=0,n={},p=!1;o(c,function(a,b){p=!0,n[c[b].attrs.key]={action:Ra,index:b}}),w(a),p&&(c=u(a,c,n,d));for(var q=0,s=0,t=a.length;t>s;s++){var x=U(d,f,c,e,a[s],c[q],g,e+m||m,h,i,j);x!==b&&(l=l&&x.nodes.intact,m+=H(x),c[q++]=x)}return l||v(a,c,k),c}function J(a,b,c,d,e){if(null!=b){if(La.call(b)===La.call(a))return b;if(e&&e.nodes){var f=c-d,g=f+(Na(a)?a:b.nodes).length;Z(e.nodes.slice(f,g),e.slice(f,g))}else b.nodes&&Z(b.nodes,b)}return b=new a.constructor,b.tag&&(b={}),b.nodes=[],b}function K(a,c){return c===b?a.attrs.is?Ga.createElement(a.tag,a.attrs.is):Ga.createElement(a.tag):a.attrs.is?Ga.createElementNS(c,a.tag,a.attrs.is):Ga.createElementNS(c,a.tag)}function L(a,b,c,d){return d?Y(b,a.tag,a.attrs,{},c):a.attrs}function M(a,c,d,e,f,g){return null!=a.children&&0!==a.children.length?U(c,a.tag,b,b,a.children,d.children,!0,0,a.attrs.contenteditable?c:e,f,g):a.children}function N(a,b,c,d,e,f,g){var h={tag:a.tag,attrs:b,children:c,nodes:[d]};return B(h,f,g),h.children&&!h.children.nodes&&(h.children.nodes=[]),"select"===a.tag&&"value"in a.attrs&&Y(d,a.tag,{value:a.attrs.value},{},e),h}function O(a,b,c,d){var e="diff"===n.redraw.strategy()&&a?a.indexOf(b):-1;return e>-1?c[e]:"function"==typeof d?new d:{}}function P(a,b,c,d){null!=d.onunload&&Wa.push({controller:d,handler:d.onunload}),a.push(c),b.push(d)}function Q(a,b,c,d,e,f){var g=O(c.views,b,d,a.controller),h=+(a&&a.attrs&&a.attrs.key);return a=0===Ua||Xa||d&&d.indexOf(g)>-1?a.view(g):{tag:"placeholder"},"retain"===a.subtree?c:(h===h&&((a.attrs=a.attrs||{}).key=h),P(f,e,b,g),a)}function R(a,b,c,d){for(var e=b&&b.controllers;null!=a.view;)a=Q(a,a.view.$original||a.view,b,e,d,c);return a}function S(a,b,c,d,e,f,g,h,i,j,k,l){var m;if(a){m=K(b,c);var n=L(b,m,c,d),o=M(b,m,e,f,c,g);e=N(b,n,o,m,c,h,i)}else m=D(e,b,f,d,c,h,g,i);return(a||k&&null!=m)&&s(j,m,l),C(g,b,m,a,e),e}function T(a,b,c,d,f,g,h,i){var j=[],k=[];if(a=R(a,b,j,k),!a.tag&&k.length)throw new Error("Component template must return a virtual element, not an array, string, etc.");a.attrs=a.attrs||{},b.attrs=b.attrs||{};var l=Object.keys(a.attrs),m=l.length>+("key"in a.attrs);return z(a,b,l),e(a.tag)?S(0===b.nodes.length,a,A(a,h),m,b,c,i,j,k,d,g,f):void 0}function U(a,b,e,f,g,h,i,j,k,l,m){return g=p(g),"retain"===g.subtree?h:(h=J(g,h,j,f,e),Na(g)?I(g,h,a,j,b,i,k,l,m):null!=g&&d(g)?T(g,h,k,a,j,i,l,m):c(g)?h:G(h,g,j,a,i,k,b))}function V(a,b){return a.action-b.action||a.index-b.index}function W(a){return"list"!==a&&"style"!==a&&"form"!==a&&"type"!==a&&"width"!==a&&"height"!==a}function X(a,b,e,f,g,i){if("config"!==a&&"key"!==a)if(c(b)&&"on"===a.slice(0,2))f[a]=aa(b,f);else if("style"===a&&null!=b&&d(b)){h(b,function(a,b){(null==e||e[b]!==a)&&(f.style[b]=a)});for(var j in e)Ma.call(e,j)&&(Ma.call(b,j)||(f.style[j]=""))}else null!=g?"href"===a?f.setAttributeNS("http://www.w3.org/1999/xlink","href",b):f.setAttribute("className"===a?"class":a,b):a in f&&W(a)?("input"!==i||f[a]!==b)&&(f[a]=b):f.setAttribute(a,b)}function Y(a,b,c,d,e){return h(c,function(c,f){var g=d[f];if(f in d&&g===c)"value"===f&&"input"===b&&a.value!=c&&(a.value=c);else{d[f]=c;try{X(f,c,g,a,e,b)}catch(h){if(h.message.indexOf("Invalid argument")<0)throw h}}}),d}function Z(a,b){for(var c=a.length-1;c>=0;c--)if(a[c]&&a[c].parentNode){try{a[c].parentNode.removeChild(a[c])}catch(d){}b=[].concat(b),b[c]&&$(b[c])}a.length&&(a.length=0)}function $(a){a.configContext&&c(a.configContext.onunload)&&(a.configContext.onunload(),a.configContext.onunload=null),a.controllers&&g(a.controllers,function(a){c(a.onunload)&&a.onunload({preventDefault:f})}),a.children&&(Na(a.children)?g(a.children,$):a.children.tag&&$(a.children))}function _(a,b,c){var d=a.childNodes[b];if(d){var e=1!==d.nodeType,f=Ga.createElement("span");e?(a.insertBefore(f,d||null),f.insertAdjacentHTML("beforebegin",c),a.removeChild(f)):d.insertAdjacentHTML("beforebegin",c)}else Ya(a,c);for(var g=[];a.childNodes[b]!==d;)g.push(a.childNodes[b]),b++;return g}function aa(a,b){return function(c){c=c||event,n.redraw.strategy("diff"),n.startComputation();try{return a.call(b,c)}finally{ka()}}}function ba(a){var b=$a.indexOf(a);return 0>b?$a.push(a)-1:b}function ca(a){function b(){return arguments.length&&(a=arguments[0]),a}return b.toJSON=function(){return a},b}function da(a){return null!=a&&(d(a)||c(a))&&c(a.then)}function ea(a){var c=n.prop();return a.then(c),c.then=a.then.bind(a),c["catch"]=a.then.bind(a,b),c["finally"]=function(b){function c(){return n.deferred().resolve(b()).promise}return a.then(function(a){return c().then(function(){return a})},function(a){return c().then(function(){throw a})})},c}function fa(a,b){function c(){return e.apply(this,b)||this}function d(c){for(var d=[c].concat(b),e=1;e0&&Ja(hb),hb=Ia(ja,gb)}function ja(){eb&&(eb(),eb=null),g(bb,function(a,b){var c=cb[b];if(db[b]){var d=[db[b]];n.render(a,c.view?c.view(db[b],d):"")}}),fb&&(fb(),fb=null),hb=null,ib=new Date,n.redraw.strategy("diff")}function ka(){"none"===n.redraw.strategy()?(Ua--,n.redraw.strategy("diff")):n.endComputation()}function la(b){a[b]=function(){var a=Ha[n.route.mode];"pathname"===n.route.mode&&(a+=Ha.search),mb!==pa(a)&&ob(a)},eb=sa,a[b]()}function ma(){return("pathname"===n.route.mode?"":Ha.pathname)+nb[n.route.mode]}function na(b){if(a.history.pushState){eb=sa;var c=b?"replaceState":"pushState";fb=function(){a.history[c](null,Ga.title,nb[n.route.mode]+mb)},ob(nb[n.route.mode]+mb)}else Ha[n.route.mode]=mb,ob(nb[n.route.mode]+mb)}function oa(a,b,c){arguments.length<3&&"object"!=typeof b&&(c=b,b=null);var d=mb;mb=a;var e,f,g=b||{},i=mb.indexOf("?");if(i>=0){var j=ua(mb.slice(i+1));h(g,function(a,b){j[b]=g[b]}),e=ta(j),f=mb.slice(0,i)}else e=ta(b),f=mb;if(e){var k=-1===f.indexOf("?")?"?":"&";mb=f+k+e}return na(c||d===a)}function pa(a){return a.slice(nb[n.route.mode].length)}function qa(a,b,c){var d=c.indexOf("?");d>=0?(lb=ua(c.substr(d+1,c.length)),c=c.substr(0,d)):lb={};var e=Object.keys(b),f=e.indexOf(c);if(f>=0)return n.mount(a,b[e[f]]),!0;for(var h in b)if(Ma.call(b,h)){if(h===c)return n.mount(a,b[h]),!0;var i=new RegExp("^"+h.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(i.test(c))return c.replace(i,function(){var c=h.match(/:[^\/]+/g)||[],d=[].slice.call(arguments,1,-2);g(c,function(a,b){a=a.replace(/:|\./g,""),lb[a]=decodeURIComponent(d[b])}),n.mount(a,b[h])}),!0}}function ra(a){if(a=a||event,!a.ctrlKey&&!a.metaKey&&2!==a.which){a.preventDefault?a.preventDefault():a.returnValue=!1;var b,c=a.currentTarget||a.srcElement;for(b="pathname"===n.route.mode&&c.search?ua(c.search.slice(1)):{};c&&"A"!==c.nodeName.toUpperCase();)c=c.parentNode;n.route(c[n.route.mode].slice(nb[n.route.mode].length),b)}}function sa(){"hash"!==n.route.mode&&Ha.hash?Ha.hash=Ha.hash:a.scrollTo(0,0)}function ta(a,c){var e={},f=[];return h(a,function(a,h){var i=c?c+"["+h+"]":h;if(null===a)f.push(encodeURIComponent(i));else if(d(a))f.push(ta(a,i));else if(Na(a)){var j=[];e[i]=e[i]||{},g(a,function(a){e[i][a]||(e[i][a]=!0,j.push(encodeURIComponent(i)+"="+encodeURIComponent(a)))}),f.push(j.join("&"))}else a!==b&&f.push(encodeURIComponent(i)+"="+encodeURIComponent(a))}),f.join("&")}function ua(a){if(""===a||null==a)return{};"?"===a.charAt(0)&&(a=a.slice(1));var b=a.split("&"),c={};return g(b,function(a){var b=a.split("="),d=decodeURIComponent(b[0]),e=2===b.length?decodeURIComponent(b[1]):null;null!=c[d]?(Na(c[d])||(c[d]=[c[d]]),c[d].push(e)):c[d]=e}),c}function va(a){var c=ba(a);Z(a.childNodes,_a[c]),_a[c]=b}function wa(a,d){function e(a,b,c){return da(a)?a.then(function(a){e(a,b,c)},function(a){e(a,c,c)}):b(q=a)}function h(a){a.resolve(q)}function i(a){a.reject(q)}function j(a){s.push(a)}function k(a){t=a,g(s,a),l=p=null}function l(a,b){e(a,function(){k(b===sb?h:i)},function(){k(i)})}function m(a,b){var c=0;try{return a.then(function(a){c++||p(qb,a,b)},function(a){c++||p(rb,a,b)})}catch(d){return n.deferred.onerror(d),p(rb,d,b)}}function o(b,e,f){try{e===qb&&c(a)?b=a(b):e===rb&&c(d)&&(b=d(b),e=qb)}catch(g){return n.deferred.onerror(g),l(g,tb)}return b===f?l(TypeError(),tb):l(b,e===qb?sb:tb)}function p(a,b,c){var d;try{d=da(b)}catch(e){return n.deferred.onerror(e),p(rb,e,c)}return a===rb&&n.deferred.onerror(b),d?m(b,c):o(b,a,c)}var q,r=this,s=[],t=j;r.resolve=function(a){return t===j&&p(qb,a,r),this},r.reject=function(a){return t===j&&p(rb,a,r),this},r.promise=function(a){return arguments.length&&e(a,f,f),t!==i?q:b},r.promise.then=function(a,b){var c=new wa(a,b);return t!==i&&c.promise(q),t(c),c.promise},r.promise["catch"]=function(a){return r.promise.then(null,a)},r.promise["finally"]=function(a){function b(){return n.deferred().resolve(a()).promise}return r.promise.then(function(){return b().then(function(){return q})},function(){b().then(function(){throw q})})}}function xa(a){return a instanceof EvalError||a instanceof RangeError||a instanceof ReferenceError||a instanceof SyntaxError||a instanceof TypeError||a instanceof URIError}function ya(a){return a}function za(){return"mithril_callback_"+(new Date).getTime()+"_"+Math.round(1e16*Math.random()).toString(36)}function Aa(c){var d=za(),e=Ga.createElement("script");a[d]=function(f){e.parentNode.removeChild(e),c.onload({type:"load",target:{responseText:f}}),a[d]=b},e.onerror=function(){return e.parentNode.removeChild(e),c.onerror({type:"error",target:{status:500,responseText:'{"error": "Error making jsonp request"}'}}),a[d]=b,!1},e.onload=function(){return!1},e.src=c.url+(c.url.indexOf("?")>0?"&":"?")+(c.callbackKey?c.callbackKey:"callback")+"="+d+"&"+ta(c.data||{}),Ga.body.appendChild(e)}function Ba(b){var d=new a.XMLHttpRequest;if(d.open(b.method,b.url,!0,b.user,b.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?b.onload({type:"load",target:d}):b.onerror({type:"error",target:d}))},b.serialize===JSON.stringify&&b.data&&"GET"!==b.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),b.deserialize===JSON.parse&&d.setRequestHeader("Accept","application/json, text/*"),c(b.config)){var f=b.config(d,b);null!=f&&(d=f)}var g;if(g="GET"!==b.method&&b.data?b.data:"",g&&!e(g)&&g.constructor!==a.FormData)throw new Error("Request data should be either be a string or FormData. Check the `serialize` option in `m.request`");return d.send(g),d}function Ca(a){return a.dataType&&"jsonp"===a.dataType.toLowerCase()?Aa(a):Ba(a)}function Da(a,b,c){if("GET"===a.method&&"jsonp"!==a.dataType){var d=a.url.indexOf("?")<0?"?":"&",e=ta(b);a.url+=e?d+e:""}else a.data=c(b);return a}function Ea(a,b){var c=a.match(/:[a-z]\w+/gi);return c&&b&&g(c,function(c){var d=c.slice(1);a=a.replace(c,b[d]),delete b[d]}),a}function Fa(a){return a.responseText}var Ga,Ha,Ia,Ja,Ka="v0.2.1",La={}.toString,Ma={}.hasOwnProperty,Na=Array.isArray||function(a){return"[object Array]"===La.call(a)},Oa=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,Pa=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,Qa=/^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/;i(a),n.deps=function(b){return i(a=b||a),a},n.version=function(){return Ka};var Ra=1,Sa=2,Ta=3,Ua=0;n.startComputation=function(){Ua++},n.endComputation=function(){Ua>1?Ua--:(Ua=0,n.redraw())};var Va,Wa=[],Xa=!1,Ya=function(){try{return Ga.createRange().createContextualFragment("x"),function(a,b){a.appendChild(Ga.createRange().createContextualFragment(b))}}catch(a){return function(a,b){a.insertAdjacentHTML("beforeend",b)}}}(),Za={appendChild:function(a){Va===b&&(Va=Ga.createElement("html")),Ga.documentElement&&Ga.documentElement!==a?Ga.replaceChild(a,Ga.documentElement):Ga.appendChild(a),this.childNodes=Ga.childNodes},insertBefore:function(a){this.appendChild(a)},childNodes:[]},$a=[],_a={};n.render=function(a,c,d){if(!a)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var e,f=[],h=ba(a),i=a===Ga;e=i||a===Ga.documentElement?Za:a,i&&"html"!==c.tag&&(c={tag:"html",attrs:{},children:c}),_a[h]===b&&Z(e.childNodes),d===!0&&va(a),_a[h]=U(e,null,b,b,c,_a[h],!1,0,null,b,f),g(f,function(a){a()})},n.trust=function(a){return a=new String(a),a.$trusted=!0,a},n.prop=function(a){return da(a)?ea(a):ca(a)};var ab,bb=[],cb=[],db=[],eb=null,fb=null,gb=16;n.component=function(a){for(var b=[],c=1;cd&&(d=bb.length);var e=!1,f={preventDefault:function(){e=!0,eb=fb=null}};return g(Wa,function(a){a.handler.call(a.controller,f),a.controller.onunload=null}),e?g(Wa,function(a){a.controller.onunload=a.handler}):Wa=[],db[d]&&c(db[d].onunload)&&db[d].onunload(f),ga(b,a,d,e)};var hb=0,ib=0,jb=Ia===a.requestAnimationFrame?ia:function(){+new Date-ib>gb&&ia()},kb=!1;n.redraw=function(a){if(!kb){kb=!0,a&&(Xa=!0);try{hb&&!a?jb():(ja(),hb=Ia(function(){hb=0},gb))}finally{kb=Xa=!1}}},n.redraw.strategy=n.prop(),n.withAttr=function(a,b,c){return function(d){d=d||event;var e,f=d.currentTarget||this,g=c||this;e=a in f?f[a]:f.getAttribute(a),b.call(g,e)}};var lb,mb,nb={pathname:"",hash:"#",search:"?"},ob=f,pb=!1;n.route=function(a,b,c,d){if(0===arguments.length)return mb;if(3===arguments.length&&e(b))ob=function(d){var e=mb=pa(d);if(!qa(a,c,e)){if(pb)throw new Error("Ensure the default route matches one of the routes defined in m.route");pb=!0,n.route(b,!0),pb=!1}},la("hash"===n.route.mode?"onhashchange":"onpopstate");else if(a.addEventListener||a.attachEvent)a.href=ma()+d.attrs.href,a.addEventListener?(a.removeEventListener("click",ra),a.addEventListener("click",ra)):(a.detachEvent("onclick",ra),a.attachEvent("onclick",ra));else if(e(a))return oa.apply(this,arguments)},n.route.param=function(a){if(!lb)throw new Error("You must call m.route(element, defaultRoute, routes) before calling m.route.param()");return a?lb[a]:lb},n.route.mode="search",n.route.buildQueryString=ta,n.route.parseQueryString=ua;var qb=1,rb=2,sb=3,tb=4;return n.deferred=function(){return new wa},n.deferred.prototype=wa.prototype,n.deferred.prototype.constructor=n.deferred,n.deferred.onerror=function(a){if(xa(a))throw Ua=0,a},n.sync=function(a){function b(a,b){return function(g){return e[a]=g,b||(f="reject"),0===--d&&(c.promise(e),c[f](e)),g}}var c=new wa,d=a.length,e=new Array(d),f="resolve";return a.length>0?g(a,function(a,c){a.then(b(c,!0),b(c,!1))}):c.resolve([]),c.promise},n.request=function(a){a.background!==!0&&n.startComputation();var b=new wa,c=ya,d=ya,e=Fa;return a.dataType&&"jsonp"===a.dataType.toLowerCase()||(c=a.serialize||JSON.stringify,d=a.deserialize||JSON.parse,e=function(a){return 0===a.responseText.length&&d===JSON.parse?null:a.responseText}),a.serialize=c,a.deserialize=d,a.method=(a.method||"GET").toUpperCase(),a.url=Ea(a.url,a.data),a=Da(a,a.data,c),a.onload=a.onerror=function(c){c=c||event;var f,h,i="load"===c.type;f=i?a.unwrapSuccess:a.unwrapError;try{h=(f||ya)(d(e(c.target,a)),c.target),i&&(Na(h)&&a.type?g(h,function(b,c){h[c]=new a.type(b)}):a.type&&(h=new a.type(h)))}catch(j){h=j,i=!1}b[i?"resolve":"reject"](h),a.background!==!0&&n.endComputation()},Ca(a),b.promise(a.initialValue),b.promise},n}); //# sourceMappingURL=mithril.min.js.map \ No newline at end of file diff --git a/mithril.min.js.map b/mithril.min.js.map index 100cda44..11d8303a 100644 --- a/mithril.min.js.map +++ b/mithril.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["mithril.js"],"names":["global","factory","m","window","module","exports","define","amd","this","undefined","isFunction","object","isObject","type","call","isString","noop","forEach","list","f","i","length","forOwn","obj","prop","hasOwn","initialize","$document","document","$location","location","$cancelAnimationFrame","cancelAnimationFrame","clearTimeout","$requestAnimationFrame","requestAnimationFrame","setTimeout","checkForAttrs","pairs","parseSelector","tag","cell","match","classes","parser","exec","attrs","id","push","pair","attrParser","getChildrenFromList","hasAttrs","args","children","slice","isArray","assignAttrs","classAttr","value","attr","join","arguments","parameterize","Error","forKeys","key","dataToString","data","toString","e","injectTextNode","parent","first","index","insertNode","nodeValue","flatten","concat","apply","node","insertBefore","childNodes","handleKeysDiffer","existing","cached","action","MOVE","from","element","nodes","createElement","INSERTION","actions","changes","sort","sortChanges","newCached","Array","change","DELETION","clear","splice","dummy","changeElement","maybeChanged","diffKeys","parentElement","keysDiffer","cachedCell","diffArray","_","parentNode","indexOf","buildArrayKeys","guid","arraySortCompare","a","b","len","elemIsDifferentEnough","dataAttrKeys","Object","keys","redraw","strategy","configContext","retain","maybeRecreateObject","onunload","controllers","controller","unload","preventDefault","getObjectNamespace","namespace","xmlns","unloadCachedControllers","views","$old","pendingRequests","scheduleConfigsToBeCalled","configs","isNew","config","context","buildUpdatedNode","editable","hasKeys","setAttributes","build","contenteditable","intact","handleNonexistentNodes","$trusted","injectHTML","createTextNode","voidElements","test","nodeName","constructor","reattachNodes","parentTag","activeElement","innerHTML","nodeType","handleTextNode","shouldReattach","valueOf","getSubArrayCount","item","buildArray","subArrayCount","shouldMaintainIdentities","cacheCount","makeCache","parentIndex","parentCache","offset","end","constructNode","is","createElementNS","constructAttrs","constructChildren","reconstructCached","getController","view","cachedControllers","updateLists","unloaders","handler","checkView","forcing","subtree","markViews","$original","initObjectNode","buildObject","shouldSetAttrDirectly","trySetAttribute","dataAttr","cachedAttr","autoredraw","rule","style","setAttributeNS","setAttribute","dataAttrs","cachedAttrs","message","removeChild","nextSibling","isElement","placeholder","insertAdjacentHTML","insertAdjacentBeforeEnd","callback","event","startComputation","endFirstComputation","getCellCacheKey","nodeCache","gettersetter","store","toJSON","component","Ctrl","originalCtrl","ctrl","rest","originalView","prototype","output","initComponent","root","isPrevented","isNullComponent","roots","topComponent","components","removeRootElement","reset","actuallyPerformRedraw","lastRedrawId","FRAME_BUDGET","computePreRedrawHook","render","computePostRedrawHook","lastRedrawCallTime","Date","endComputation","runHistoryListener","listener","path","route","mode","search","currentRoute","normalizeRoute","redirect","setScroll","getRouteBase","pathname","modes","computeAndLaunchRedirect","shouldReplaceHistoryEntry","history","pushState","method","title","routeTo","params","oldRoute","queryString","currentPath","queryIndex","paramsObj","parseQueryString","buildQueryString","delimiter","routeByValue","router","queryStart","routeParams","substr","mount","matcher","RegExp","replace","values","decodeURIComponent","routeUnobtrusive","ctrlKey","metaKey","which","returnValue","currentTarget","srcElement","toUpperCase","hash","scrollTo","prefix","duplicates","str","encodeURIComponent","charAt","split","string","cacheKey","cellCache","Deferred","onSuccess","onFailure","finish","state","REJECTED","next","deferred","RESOLVED","resolve","promiseValue","reject","thennable","then","success","fail","notThennable","count","onerror","fire","REJECTING","RESOLVING","self","TypeError","promise","propify","initialValue","bind","_callback","reason","isNativeError","EvalError","RangeError","ReferenceError","SyntaxError","URIError","identity","generateCallbackKey","getTime","Math","round","random","getJsonp","options","callbackKey","script","resp","onload","target","responseText","status","src","url","body","appendChild","runXhr","xhr","XMLHttpRequest","open","user","password","onreadystatechange","readyState","serialize","JSON","stringify","setRequestHeader","deserialize","parse","maybeXhr","FormData","send","ajax","dataType","toLowerCase","bindData","xhrOptions","querystring","parameterizeUrl","tokens","token","defaultExtract","jsonp","VERSION","hasOwnProperty","deps","mock","version","html","createRange","createContextualFragment","documentNode","documentElement","replaceChild","forceRecreation","isDocumentRoot","trust","String","ev","unloader","performRedraw","redrawing","force","withAttr","withAttrCallback","callbackThis","targetProp","_this","getAttribute","isDefaultRoute","arg1","arg2","vdom","source","addEventListener","attachEvent","href","removeEventListener","detachEvent","param","sync","synchronizer","pos","resolved","results","outstanding","arg","request","background","extract","unwrap","response","doSuccess","unwrapSuccess","unwrapError","res"],"mappings":"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","file":"mithril.min.js"} \ No newline at end of file +{"version":3,"sources":["mithril.js"],"names":["global","factory","m","window","module","exports","define","amd","this","undefined","isFunction","object","isObject","type","call","isString","noop","forEach","list","f","i","length","forOwn","obj","prop","hasOwn","initialize","$document","document","$location","location","$cancelAnimationFrame","cancelAnimationFrame","clearTimeout","$requestAnimationFrame","requestAnimationFrame","setTimeout","checkForAttrs","pairs","parseSelector","tag","cell","match","classes","parser","exec","attrs","id","push","pair","attrParser","getChildrenFromList","hasAttrs","args","children","slice","isArray","assignAttrs","classAttr","value","attr","join","arguments","parameterize","Error","forKeys","key","dataToString","data","toString","e","injectTextNode","parent","first","index","insertNode","nodeValue","flatten","concat","apply","node","insertBefore","childNodes","handleKeysDiffer","existing","cached","action","MOVE","from","element","nodes","createElement","INSERTION","actions","changes","sort","sortChanges","newCached","Array","change","DELETION","clear","splice","dummy","changeElement","maybeChanged","diffKeys","parentElement","keysDiffer","cachedCell","diffArray","_","parentNode","indexOf","buildArrayKeys","guid","arraySortCompare","a","b","len","elemIsDifferentEnough","dataAttrKeys","Object","keys","redraw","strategy","configContext","retain","maybeRecreateObject","onunload","controllers","controller","unload","preventDefault","getObjectNamespace","namespace","xmlns","unloadCachedControllers","views","$old","pendingRequests","scheduleConfigsToBeCalled","configs","isNew","config","context","buildUpdatedNode","editable","hasKeys","setAttributes","build","contenteditable","intact","handleNonexistentNodes","$trusted","injectHTML","createTextNode","voidElements","test","nodeName","constructor","reattachNodes","parentTag","activeElement","innerHTML","nodeType","trim","handleTextNode","shouldReattach","valueOf","getSubArrayCount","item","buildArray","subArrayCount","shouldMaintainIdentities","cacheCount","makeCache","parentIndex","parentCache","offset","end","constructNode","is","createElementNS","constructAttrs","constructChildren","reconstructCached","getController","view","cachedControllers","updateLists","unloaders","handler","checkView","forcing","subtree","markViews","$original","initObjectNode","buildObject","shouldSetAttrDirectly","trySetAttribute","dataAttr","cachedAttr","autoredraw","rule","style","setAttributeNS","setAttribute","dataAttrs","cachedAttrs","message","removeChild","nextSibling","isElement","placeholder","insertAdjacentHTML","insertAdjacentBeforeEnd","callback","event","startComputation","endFirstComputation","getCellCacheKey","nodeCache","gettersetter","store","toJSON","isPromise","then","propify","promise","bind","_callback","deferred","resolve","reason","component","Ctrl","originalCtrl","ctrl","rest","originalView","prototype","output","initComponent","root","isPrevented","isNullComponent","roots","topComponent","components","removeRootElement","reset","actuallyPerformRedraw","lastRedrawId","FRAME_BUDGET","computePreRedrawHook","render","computePostRedrawHook","lastRedrawCallTime","Date","endComputation","runHistoryListener","listener","path","route","mode","search","currentRoute","normalizeRoute","redirect","setScroll","getRouteBase","pathname","modes","computeAndLaunchRedirect","shouldReplaceHistoryEntry","history","pushState","method","title","routeTo","params","oldRoute","queryString","currentPath","queryIndex","paramsObj","parseQueryString","buildQueryString","delimiter","routeByValue","router","queryStart","routeParams","substr","mount","matcher","RegExp","replace","values","decodeURIComponent","routeUnobtrusive","ctrlKey","metaKey","which","returnValue","currentTarget","srcElement","toUpperCase","hash","scrollTo","prefix","duplicates","str","encodeURIComponent","charAt","split","string","cacheKey","cellCache","Deferred","onSuccess","onFailure","coerce","next","error","promiseValue","reject","run","func","finish","fire","state","RESOLVED","doThen","count","RESOLVING","REJECTING","onerror","notThennable","REJECTED","TypeError","thenable","self","isNativeError","EvalError","RangeError","ReferenceError","SyntaxError","URIError","identity","generateCallbackKey","getTime","Math","round","random","getJsonp","options","callbackKey","script","resp","onload","target","responseText","status","src","url","body","appendChild","runXhr","xhr","XMLHttpRequest","open","user","password","onreadystatechange","readyState","serialize","JSON","stringify","setRequestHeader","deserialize","parse","maybeXhr","FormData","send","ajax","dataType","toLowerCase","bindData","xhrOptions","querystring","parameterizeUrl","tokens","token","defaultExtract","jsonp","VERSION","hasOwnProperty","deps","mock","version","html","createRange","createContextualFragment","documentNode","documentElement","replaceChild","forceRecreation","isDocumentRoot","trust","String","ev","unloader","performRedraw","redrawing","force","withAttr","withAttrCallback","callbackThis","targetProp","_this","getAttribute","isDefaultRoute","arg1","arg2","vdom","source","addEventListener","attachEvent","href","removeEventListener","detachEvent","param","sync","synchronizer","pos","resolved","results","outstanding","arg","request","background","extract","unwrap","response","doSuccess","unwrapSuccess","unwrapError","res","initialValue"],"mappings":";;;;;;IAAK,UAAWA,EAAQC,GACvB,YAEA,IAAIC,GAAID,EAA0B,mBAAXE,QAAyBA,UAC1B,iBAAXC,SAAiC,MAAVA,QAAkBA,OAAOC,QAC1DD,OAAOC,QAAUH,EACW,kBAAXI,SAAyBA,OAAOC,IACjDD,OAAO,WAAc,MAAOJ,KAE5BF,EAAOE,EAAIA,GAGVM,KAAM,SAAUL,EAAQM,GAC1B,YAQA,SAASC,GAAWC,GACnB,MAAyB,kBAAXA,GAGf,QAASC,GAASD,GACjB,MAA6B,oBAAtBE,GAAKC,KAAKH,GAGlB,QAASI,GAASJ,GACjB,MAA6B,oBAAtBE,GAAKC,KAAKH,GAOlB,QAASK,MAET,QAASC,GAAQC,EAAMC,GACtB,IAAK,GAAIC,GAAI,EAAGA,EAAIF,EAAKG,SAAWF,EAAED,EAAKE,GAAIA,QAKhD,QAASE,GAAOC,EAAKJ,GACpB,IAAK,GAAIK,KAAQD,GAAK,GAAIE,GAAOX,KAAKS,EAAKC,IACtCL,EAAEI,EAAIC,GAAOA,GAAO,MAY1B,QAASE,GAAWvB,GACnBwB,GAAYxB,EAAOyB,SACnBC,GAAY1B,EAAO2B,SACnBC,GAAwB5B,EAAO6B,sBAC9B7B,EAAO8B,aACRC,GAAyB/B,EAAOgC,uBAC/BhC,EAAOiC,WAqBT,QAASC,GAAcC,GACtB,MAAgB,OAATA,GACN1B,EAAS0B,MACP,OAASA,IAAS,QAAUA,IAAS,WAAaA,IAGtD,QAASC,GAAcC,EAAKC,GAG3B,IAFA,GACIC,GADAC,KAEiC,OAA7BD,EAAQE,GAAOC,KAAKL,KAC3B,GAAiB,KAAbE,EAAM,IAAaA,EAAM,GAC5BD,EAAKD,IAAME,EAAM,OACX,IAAiB,MAAbA,EAAM,GAChBD,EAAKK,MAAMC,GAAKL,EAAM,OAChB,IAAiB,MAAbA,EAAM,GAChBC,EAAQK,KAAKN,EAAM,QACb,IAAoB,MAAhBA,EAAM,GAAG,GAAY,CAC/B,GAAIO,GAAOC,GAAWL,KAAKH,EAAM,GACjCD,GAAKK,MAAMG,EAAK,IAAMA,EAAK,KAAOA,EAAK,GAAK,IAAK,GAInD,MAAON,GAGR,QAASQ,GAAoBC,EAAUC,GACtC,GAAIC,GAAWF,EAAWC,EAAKE,MAAM,GAAKF,CAC1C,OAAwB,KAApBC,EAASjC,QAAgBmC,GAAQF,EAAS,IACtCA,EAAS,GAETA,EAIT,QAASG,GAAYhB,EAAMK,EAAOY,EAAWf,GAC5CrB,EAAOwB,EAAO,SAAUa,EAAOC,GAC1BA,IAASF,GACI,MAAfZ,EAAMc,IACU,KAAhBd,EAAMc,IACPjB,EAAQK,KAAKF,EAAMc,IAGnBnB,EAAKK,MAAMc,GAAQ,IAEnBnB,EAAKK,MAAMc,GAAQd,EAAMc,KAIvBjB,EAAQtB,SACXoB,EAAKK,MAAMY,GAAaf,EAAQkB,KAAK,MAUvC,QAAS3D,GAAEsC,EAAKF,GACf,IAAK,GAAIe,MAAWjC,EAAI,EAAGA,EAAI0C,UAAUzC,OAAQD,IAChDiC,EAAKjC,EAAI,GAAK0C,UAAU1C,EAGzB,IAAIR,EAAS4B,GAAM,MAAOuB,IAAavB,EAAKa,EAC5C,IAAID,GAAWf,EAAcC,GACzBQ,EAAQM,EAAWd,KACnBoB,EAAY,SAAWZ,GAAQ,QAAU,YACzCL,GAAQD,IAAK,MAAOM,SAExB,KAAK/B,EAASyB,GACb,KAAM,IAAIwB,OAAM,8DAIjB,IAAIrB,GAAUJ,EAAcC,EAAKC,EAKjC,OAJAA,GAAKa,SAAWH,EAAoBC,EAAUC,GAE9CI,EAAYhB,EAAMK,EAAOY,EAAWf,GAE7BF,EAGR,QAASwB,GAAQ/C,EAAMC,GACtBF,EAAQC,EAAM,SAAU4B,EAAO1B,GAE9B,MADA0B,GAAQA,GAASA,EAAMA,MAChBA,GAAsB,MAAbA,EAAMoB,KAAe/C,EAAE2B,EAAO1B,KAKhD,QAAS+C,GAAaC,GAGrB,IACC,GAAY,MAARA,GAAmC,MAAnBA,EAAKC,WACxB,MAAOD,GAEP,MAAOE,IAIT,MAAO,GAIR,QAASC,GAAeC,EAAQC,EAAOC,EAAON,GAC7C,IACCO,EAAWH,EAAQC,EAAOC,GAC1BD,EAAMG,UAAYR,EACjB,MAAOE,KAMV,QAASO,GAAQ3D,GAEhB,IAAK,GAAIE,GAAI,EAAGA,EAAIF,EAAKG,OAAQD,IAC5BoC,GAAQtC,EAAKE,MAChBF,EAAOA,EAAK4D,OAAOC,SAAU7D,GAG7BE,IAIF,OAAOF,GAGR,QAASyD,GAAWH,EAAQQ,EAAMN,GACjCF,EAAOS,aAAaD,EAAMR,EAAOU,WAAWR,IAAU,MAOvD,QAASS,GAAiBf,EAAMgB,EAAUC,EAAQb,GACjDP,EAAQG,EAAM,SAAUF,EAAK9C,GAC5B8C,EAAMA,EAAIA,IACNkB,EAASlB,GACZkB,EAASlB,IACRoB,OAAQC,GACRb,MAAOtD,EACPoE,KAAMJ,EAASlB,GAAKQ,MACpBe,QAASJ,EAAOK,MAAMN,EAASlB,GAAKQ,QACnC/C,GAAUgE,cAAc,QAG1BP,EAASlB,IAAQoB,OAAQM,GAAWlB,MAAOtD,IAI7C,IAAIyE,KAEJvE,GAAO8D,EAAU,SAAUzB,GAC1BkC,EAAQ7C,KAAKW,IAGd,IAAImC,GAAUD,EAAQE,KAAKC,GACvBC,EAAY,GAAIC,OAAMb,EAAOhE,OAkCjC,OAjCA4E,GAAUP,MAAQL,EAAOK,MAAMnC,QAE/BtC,EAAQ6E,EAAS,SAAUK,GAC1B,GAAIzB,GAAQyB,EAAOzB,KAEnB,QAAQyB,EAAOb,QACf,IAAKc,IACJC,EAAMhB,EAAOX,GAAOgB,MAAOL,EAAOX,IAClCuB,EAAUK,OAAO5B,EAAO,EACxB,MAED,KAAKkB,IACJ,GAAIW,GAAQ5E,GAAUgE,cAAc,MACpCY,GAAMrC,IAAME,EAAKM,GAAO5B,MAAMoB,IAC9BS,EAAWH,EAAQ+B,EAAO7B,GAC1BuB,EAAUK,OAAO5B,EAAO,GACvB5B,OAAQoB,IAAKE,EAAKM,GAAO5B,MAAMoB,KAC/BwB,OAAQa,KAETN,EAAUP,MAAMhB,GAAS6B,CACzB,MAED,KAAKhB,IACJ,GAAIiB,GAAgBL,EAAOV,QACvBgB,EAAejC,EAAOU,WAAWR,EACjC+B,KAAiBD,GAAmC,OAAlBA,GACrChC,EAAOS,aAAauB,EAAeC,GAAgB,MAEpDR,EAAUvB,GAASW,EAAOc,EAAOX,MACjCS,EAAUP,MAAMhB,GAAS8B,KAIpBP,EAGR,QAASS,GAAStC,EAAMiB,EAAQD,EAAUuB,GACzC,GAAIC,GAAaxC,EAAK/C,SAAWgE,EAAOhE,MAWxC,OATKuF,IACJ3C,EAAQG,EAAM,SAAUtB,EAAO1B,GAC9B,GAAIyF,GAAaxB,EAAOjE,EACxB,OAAOwF,GAAaC,GACnBA,EAAW/D,OACX+D,EAAW/D,MAAMoB,MAAQpB,EAAMoB,MAI9B0C,EACIzB,EAAiBf,EAAMgB,EAAUC,EAAQsB,GAEzCtB,EAKT,QAASyB,GAAU1C,EAAMiB,EAAQK,GAEhCzE,EAAQmD,EAAM,SAAU2C,EAAG3F,GACT,MAAbiE,EAAOjE,IAAYsE,EAAM1C,KAAK+B,MAAMW,EAAOL,EAAOjE,GAAGsE,SAO1DzE,EAAQoE,EAAOK,MAAO,SAAUV,EAAM5D,GACd,MAAnB4D,EAAKgC,YAAsBtB,EAAMuB,QAAQjC,GAAQ,GACpDqB,GAAOrB,IAAQK,EAAOjE,OAIpBgD,EAAK/C,OAASgE,EAAOhE,SAAQgE,EAAOhE,OAAS+C,EAAK/C,QAEtDgE,EAAOK,MAAQA,EAGhB,QAASwB,GAAe9C,GACvB,GAAI+C,GAAO,CACXlD,GAAQG,EAAM,WAOb,MANAnD,GAAQmD,EAAM,SAAUtB,GACvBA,EAAQA,GAASA,EAAMA,MACnBA,GAAsB,MAAbA,EAAMoB,MAClBpB,EAAMoB,IAAM,cAAgBiD,QAGvB,IAKT,QAASC,GAAiBC,EAAGC,GAC5BD,EAAEtB,OACFuB,EAAEvB,MACF,IAAIwB,GAAMF,EAAEhG,MACZ,IAAIkG,IAAQD,EAAEjG,OAAQ,OAAO,CAC7B,KAAK,GAAID,GAAI,EAAOmG,EAAJnG,EAASA,IACxB,GAAIiG,EAAEjG,KAAOkG,EAAElG,GAAI,OAAO,CAE3B,QAAO,EAGR,QAASoG,GAAsBpD,EAAMiB,EAAQoC,GAC5C,MAAIrD,GAAK5B,MAAQ6C,EAAO7C,KAAY,EAC/B4E,EAAiBK,EAAcC,OAAOC,KAAKtC,EAAOvC,QAInDsB,EAAKtB,MAAMC,KAAOsC,EAAOvC,MAAMC,IAAW,EAC1CqB,EAAKtB,MAAMoB,MAAQmB,EAAOvC,MAAMoB,KAAY,EAEpB,QAAxBhE,EAAE0H,OAAOC,aACHxC,EAAOyC,eACfzC,EAAOyC,cAAcC,UAAW,GACC,SAAxB7H,EAAE0H,OAAOC,WACZxC,EAAOyC,eACbzC,EAAOyC,cAAcC,UAAW,EAF3B,QATC,EAeT,QAASC,GAAoB5D,EAAMiB,EAAQoC,GAEtCD,EAAsBpD,EAAMiB,EAAQoC,KACnCpC,EAAOK,MAAMrE,QAAQgF,EAAMhB,EAAOK,OAClCL,EAAOyC,eACTpH,EAAW2E,EAAOyC,cAAcG,WACjC5C,EAAOyC,cAAcG,WAGlB5C,EAAO6C,aACVjH,EAAQoE,EAAO6C,YAAa,SAAUC,GACjCA,EAAWC,QACdD,EAAWF,UAAUI,eAAgBrH,OAO1C,QAASsH,GAAmBlE,EAAMmE,GACjC,MAAOnE,GAAKtB,MAAM0F,MAAQpE,EAAKtB,MAAM0F,MACvB,QAAbpE,EAAK5B,IAAgB,6BACR,SAAb4B,EAAK5B,IAAiB,qCACtB+F,EAcF,QAASE,GAAwBpD,EAAQqD,EAAOR,GAC3CA,EAAY7G,SACfgE,EAAOqD,MAAQA,EACfrD,EAAO6C,YAAcA,EACrBjH,EAAQiH,EAAa,SAAUC,GAK9B,GAJIA,EAAWF,UAAYE,EAAWF,SAASU,OAC9CR,EAAWF,SAAWE,EAAWF,SAASU,MAGvCC,IAAmBT,EAAWF,SAAU,CAC3C,GAAIA,GAAWE,EAAWF,QAC1BE,GAAWF,SAAWjH,EACtBmH,EAAWF,SAASU,KAAOV,MAM/B,QAASY,GAA0BC,EAAS1E,EAAMY,EAAM+D,EAAO1D,GAG9D,GAAI2D,GAAS5E,EAAKtB,MAAMkG,MACxB,IAAItI,EAAWsI,GAAS,CACvB,GAAIC,GAAU5D,EAAOyC,cAAgBzC,EAAOyC,iBAG5CgB,GAAQ9F,KAAK,WACZ,MAAOgG,GAAOlI,KAAKsD,EAAMY,GAAO+D,EAAOE,EAAS5D,MAKnD,QAAS6D,GACR7D,EACAjB,EACA+E,EACAC,EACAb,EACAG,EACAI,EACAZ,GAEA,GAAIlD,GAAOK,EAAOK,MAAM,EAgBxB,OAfI0D,IACHC,EAAcrE,EAAMZ,EAAK5B,IAAK4B,EAAKtB,MAAOuC,EAAOvC,MAAOyF,GAGzDlD,EAAO/B,SAAWgG,EAAMtE,EAAMZ,EAAK5B,IAAK/B,EAAWA,EAClD2D,EAAKd,SAAU+B,EAAO/B,UAAU,EAAO,EACvCc,EAAKtB,MAAMyG,gBAAkBvE,EAAOmE,EAAUZ,EAAWO,GAE1DzD,EAAOK,MAAM8D,QAAS,EAElBtB,EAAY7G,SACfgE,EAAOqD,MAAQA,EACfrD,EAAO6C,YAAcA,GAGflD,EAGR,QAASyE,GAAuBrF,EAAMI,EAAQE,GAC7C,GAAIgB,EACAtB,GAAKsF,SACRhE,EAAQiE,EAAWnF,EAAQE,EAAON,IAElCsB,GAAS/D,GAAUiI,eAAexF,IAC7ByF,GAAaC,KAAKtF,EAAOuF,WAC7BpF,EAAWH,EAAQkB,EAAM,GAAIhB,GAI/B,IAAIW,EAYJ,OAPCA,GAHmB,gBAATjB,IACO,gBAATA,IACS,iBAATA,GACC,GAAIA,GAAK4F,YAAY5F,GAErBA,EAGViB,EAAOK,MAAQA,EAERL,EAGR,QAAS4E,GAAc7F,EACtBiB,EACAsB,EACAwC,EACAzE,EACAwF,GAEA,GAAIxE,GAAQL,EAAOK,KA0BnB,OAzBKyD,IAAYA,IAAaxH,GAAUwI,gBACnC/F,EAAKsF,UACRrD,EAAMX,EAAOL,GACbK,EAAQiE,EAAWhD,EAAejC,EAAON,IACjB,aAAd8F,EAEVvD,EAAchD,MAAQS,EACZ+E,EAEVA,EAASiB,UAAYhG,IAGK,IAAtBsB,EAAM,GAAG2E,UACZ3E,EAAMrE,OAAS,GACdqE,EAAM,GAAGd,UAAU0F,OAAS5E,EAAM,GAAGd,UAAU0F,UAEhDjE,EAAMhB,EAAOK,MAAOL,GACpBK,GAAS/D,GAAUiI,eAAexF,KAEnCG,EAAeoC,EAAejB,EAAM,GAAIhB,EAAON,KAIjDiB,EAAS,GAAIjB,GAAK4F,YAAY5F,GAC9BiB,EAAOK,MAAQA,EACRL,EAGR,QAASkF,GACRlF,EACAjB,EACAM,EACAF,EACAgG,EACArB,EACAe,GAEA,MAA4B,KAAxB7E,EAAOK,MAAMrE,OACToI,EAAuBrF,EAAMI,EAAQE,GAClCW,EAAOoF,YAAcrG,EAAKqG,WAAaD,EAC1CP,EAAc7F,EAAMiB,EAAQb,EAAQ2E,EAAUzE,EACpDwF,IAED7E,EAAOK,MAAM8D,QAAS,EACfnE,GAIT,QAASqF,GAAiBC,GACzB,IAAIA,EAAKjB,SAMF,MAAIlG,IAAQmH,GACXA,EAAKtJ,OAEL,CALP,IAAIqB,GAAQiI,EAAKjI,MAAM,oBACvB,OAAa,OAATA,EAAsBA,EAAMrB,OAAhC,OAQF,QAASuJ,GACRxG,EACAiB,EACAsB,EACAjC,EACAwF,EACAM,EACArB,EACAZ,EACAO,GAEA1E,EAAOS,EAAQT,EACf,IAAIsB,MACA8D,EAASnE,EAAOhE,SAAW+C,EAAK/C,OAChCwJ,EAAgB,EAUhBzF,KACA0F,GAA2B,CAC/B7G,GAAQoB,EAAQ,SAAUvC,EAAO1B,GAChC0J,GAA2B,EAC3B1F,EAASC,EAAOjE,GAAG0B,MAAMoB,MAAQoB,OAAQc,GAAU1B,MAAOtD,KAG3D8F,EAAe9C,GACX0G,IACHzF,EAASqB,EAAStC,EAAMiB,EAAQD,EAAUuB,GAM3C,KAAK,GADDoE,GAAa,EACR3J,EAAI,EAAGmG,EAAMnD,EAAK/C,OAAYkG,EAAJnG,EAASA,IAAK,CAEhD,GAAIuJ,GAAOrB,EAAM3C,EAAeuD,EAAW7E,EAAQX,EAAON,EAAKhD,GAC9DiE,EAAO0F,GAAaP,EACpB9F,EAAQmG,GAAiBA,EACzB1B,EAAUZ,EAAWO,EAElB6B,KAASlK,IACZ+I,EAASA,GAAUmB,EAAKjF,MAAM8D,OAC9BqB,GAAiBH,EAAiBC,GAClCtF,EAAO0F,KAAgBJ,GAMzB,MAFKnB,IAAQ1C,EAAU1C,EAAMiB,EAAQK,GAE9BL,EAGR,QAAS2F,GAAU5G,EAAMiB,EAAQX,EAAOuG,EAAaC,GACpD,GAAc,MAAV7F,EAAgB,CACnB,GAAIxE,GAAKC,KAAKuE,KAAYxE,GAAKC,KAAKsD,GAAO,MAAOiB,EAElD,IAAI6F,GAAeA,EAAYxF,MAAO,CACrC,GAAIyF,GAASzG,EAAQuG,EACjBG,EAAMD,GAAU3H,GAAQY,GAAQA,EAAOiB,EAAOK,OAAOrE,MAEzDgF,GAAM6E,EAAYxF,MAAMnC,MAAM4H,EAAQC,GACrCF,EAAY3H,MAAM4H,EAAQC,QACjB/F,GAAOK,OACjBW,EAAMhB,EAAOK,MAAOL,GAStB,MALAA,GAAS,GAAIjB,GAAK4F,YAGd3E,EAAO7C,MAAK6C,MAChBA,EAAOK,SACAL,EAGR,QAASgG,GAAcjH,EAAMmE,GAC5B,MAAIA,KAAc9H,EACb2D,EAAKtB,MAAMwI,GACP3J,GAAUgE,cAAcvB,EAAK5B,IAAK4B,EAAKtB,MAAMwI,IAE7C3J,GAAUgE,cAAcvB,EAAK5B,KAE3B4B,EAAKtB,MAAMwI,GACd3J,GAAU4J,gBAAgBhD,EAAWnE,EAAK5B,IAAK4B,EAAKtB,MAAMwI,IAE1D3J,GAAU4J,gBAAgBhD,EAAWnE,EAAK5B,KAInD,QAASgJ,GAAepH,EAAMY,EAAMuD,EAAWa,GAC9C,MAAIA,GACIC,EAAcrE,EAAMZ,EAAK5B,IAAK4B,EAAKtB,SAAWyF,GAE9CnE,EAAKtB,MAId,QAAS2I,GACRrH,EACAY,EACAK,EACA8D,EACAZ,EACAO,GAEA,MAAqB,OAAjB1E,EAAKd,UAA6C,IAAzBc,EAAKd,SAASjC,OACnCiI,EAAMtE,EAAMZ,EAAK5B,IAAK/B,EAAWA,EAAW2D,EAAKd,SACvD+B,EAAO/B,UAAU,EAAM,EACvBc,EAAKtB,MAAMyG,gBAAkBvE,EAAOmE,EAAUZ,EAC9CO,GAEM1E,EAAKd,SAId,QAASoI,GACRtH,EACAtB,EACAQ,EACA0B,EACAuD,EACAG,EACAR,GAEA,GAAI7C,IACH7C,IAAK4B,EAAK5B,IACVM,MAAOA,EACPQ,SAAUA,EACVoC,OAAQV,GAeT,OAZAyD,GAAwBpD,EAAQqD,EAAOR,GAEnC7C,EAAO/B,WAAa+B,EAAO/B,SAASoC,QACvCL,EAAO/B,SAASoC,UAKA,WAAbtB,EAAK5B,KAAoB,SAAW4B,GAAKtB,OAC5CuG,EAAcrE,EAAMZ,EAAK5B,KAAMmB,MAAOS,EAAKtB,MAAMa,UAChD4E,GAEKlD,EAGR,QAASsG,GAAcjD,EAAOkD,EAAMC,EAAmB1D,GACtD,GAAIzD,GAAgC,SAAxBxE,EAAE0H,OAAOC,YAAyBa,EAC7CA,EAAMzB,QAAQ2E,GACd,EAED,OAAIlH,GAAQ,GACJmH,EAAkBnH,GACO,kBAAfyD,GACV,GAAIA,MAQb,QAAS2D,GAAYpD,EAAOR,EAAa0D,EAAMzD,GACnB,MAAvBA,EAAWF,UACd8D,GAAU/I,MACTmF,WAAYA,EACZ6D,QAAS7D,EAAWF,WAItBS,EAAM1F,KAAK4I,GACX1D,EAAYlF,KAAKmF,GAKlB,QAAS8D,GACR7H,EACAwH,EACAvG,EACAwG,EACA3D,EACAQ,GAEA,GAAIP,GAAawD,EAActG,EAAOqD,MAAOkD,EAAMC,EAClDzH,EAAK+D,YAGFjE,IAAQE,GAAQA,EAAKtB,OAASsB,EAAKtB,MAAMoB,IAU7C,OALCE,GAHuB,IAApBwE,IAAyBsD,IAC3BL,GACAA,EAAkB5E,QAAQkB,GAAc,GAClC/D,EAAKwH,KAAKzD,IAET3F,IAAK,eAGO,WAAjB4B,EAAK+H,QAA6B9G,GAClCnB,IAAQA,KACVE,EAAKtB,MAAQsB,EAAKtB,WAAaoB,IAAMA,GAEvC4H,EAAYpD,EAAOR,EAAa0D,EAAMzD,GAC/B/D,GAGR,QAASgI,GAAUhI,EAAMiB,EAAQqD,EAAOR,GAEvC,IADA,GAAI2D,GAAoBxG,GAAUA,EAAO6C,YACrB,MAAb9D,EAAKwH,MACXxH,EAAO6H,EAAU7H,EAAMA,EAAKwH,KAAKS,WAAajI,EAAKwH,KAAMvG,EACxDwG,EAAmB3D,EAAaQ,EAElC,OAAOtE,GAGR,QAASkI,GACRvD,EACA3E,EACAmE,EACAa,EACA/D,EACA8D,EACAL,EACAJ,EACAR,EACAvB,EACA6D,EACA9F,GAEA,GAAIM,EACJ,IAAI+D,EAAO,CACV/D,EAAOqG,EAAcjH,EAAMmE,EAE3B,IAAIzF,GAAQ0I,EAAepH,EAAMY,EAAMuD,EAAWa,GAC9C9F,EAAWmI,EAAkBrH,EAAMY,EAAMK,EAAQ8D,EACpDZ,EAAWO,EACZzD,GAASqG,EAAkBtH,EAAMtB,EAAOQ,EAAU0B,EAAMuD,EACvDG,EAAOR,OAERlD,GAAOkE,EAAiB7D,EAAQjB,EAAM+E,EAAUC,EAASb,EACxDG,EAAOI,EAASZ,EAQlB,QANIa,GAASyB,GAA0B,MAARxF,IAC9BL,EAAWgC,EAAe3B,EAAMN,GAIjCmE,EAA0BC,EAAS1E,EAAMY,EAAM+D,EAAO1D,GAC/CA,EAGR,QAASkH,GACRnI,EACAiB,EACA8D,EACAxC,EACAjC,EACA8F,EACAjC,EACAO,GAEA,GAAIJ,MACAR,IAIJ,IAFA9D,EAAOgI,EAAUhI,EAAMiB,EAAQqD,EAAOR,IAEjC9D,EAAK5B,KAAO0F,EAAY7G,OAC5B,KAAM,IAAI2C,OAAM,+EAIjBI,GAAKtB,MAAQsB,EAAKtB,UAClBuC,EAAOvC,MAAQuC,EAAOvC,SAEtB,IAAI2E,GAAeC,OAAOC,KAAKvD,EAAKtB,OAChCsG,EAAU3B,EAAapG,SAAW,OAAS+C,GAAKtB,MAIpD,OAFAkF,GAAoB5D,EAAMiB,EAAQoC,GAE9B1G,EAASqD,EAAK5B,KACV8J,EAAuC,IAAxBjH,EAAOK,MAAMrE,OAAc+C,EAChDkE,EAAmBlE,EAAMmE,GAAYa,EAAS/D,EAAQ8D,EACtDL,EAASJ,EAAOR,EAAavB,EAAe6D,EAC5C9F,GAJF,OAQD,QAAS4E,GACR3C,EACAuD,EACAgB,EACAD,EACA7G,EACAiB,EACAmF,EACA9F,EACAyE,EACAZ,EACAO,GAqDA,MADA1E,GAAOD,EAAaC,GACC,WAAjBA,EAAK+H,QAA6B9G,GACtCA,EAAS2F,EAAU5G,EAAMiB,EAAQX,EAAOuG,EAAaC,GACjD1H,GAAQY,GACJwG,EAAWxG,EAAMiB,EAAQsB,EAAejC,EAAOwF,EACrDM,EAAgBrB,EAAUZ,EAAWO,GACpB,MAAR1E,GAAgBxD,EAASwD,GAC5BmI,EAAYnI,EAAMiB,EAAQ8D,EAAUxC,EAAejC,EACzD8F,EAAgBjC,EAAWO,GAClBpI,EAAW0D,GACdiB,EAEAkF,EAAelF,EAAQjB,EAAMM,EAAOiC,EAC1C6D,EAAgBrB,EAAUe,IAI7B,QAASlE,GAAYqB,EAAGC,GACvB,MAAOD,GAAE/B,OAASgC,EAAEhC,QAAU+B,EAAE3C,MAAQ4C,EAAE5C,MAG3C,QAAS8H,GAAsB5I,GAC9B,MAAgB,SAATA,GACG,UAATA,GACS,SAATA,GACS,SAATA,GACS,UAATA,GACS,WAATA,EAGF,QAAS6I,GAAgB7I,EAAM8I,EAAUC,EAAY3H,EAAMuD,EAAW/F,GAErE,GAAa,WAAToB,GAA8B,QAATA,EAEpB,GAAIlD,EAAWgM,IAAkC,OAArB9I,EAAKL,MAAM,EAAG,GAC9CyB,EAAKpB,GAAQgJ,GAAWF,EAAU1H,OAC5B,IAAa,UAATpB,GAAgC,MAAZ8I,GAAoB9L,EAAS8L,GAAW,CAEtEpL,EAAOoL,EAAU,SAAU/I,EAAOkJ,IACf,MAAdF,GAAsBA,EAAWE,KAAUlJ,KAC9CqB,EAAK8H,MAAMD,GAAQlJ,IAIrB,KAAK,GAAIkJ,KAAQF,GAAgBlL,GAAOX,KAAK6L,EAAYE,KACnDpL,GAAOX,KAAK4L,EAAUG,KAAO7H,EAAK8H,MAAMD,GAAQ,SAE/B,OAAbtE,EAEG,SAAT3E,EACHoB,EAAK+H,eAAe,+BAAgC,OACnDL,GAED1H,EAAKgI,aAAsB,cAATpJ,EAAuB,QAAUA,EAClD8I,GAEQ9I,IAAQoB,IAAQwH,EAAsB5I,IAYpC,UAARpB,GAAmBwC,EAAKpB,KAAU8I,KACrC1H,EAAKpB,GAAQ8I,GAGd1H,EAAKgI,aAAapJ,EAAM8I,GAI1B,QAASrD,GAAcrE,EAAMxC,EAAKyK,EAAWC,EAAa3E,GAqBzD,MApBAjH,GAAO2L,EAAW,SAAUP,EAAU9I,GACrC,GAAI+I,GAAaO,EAAYtJ,EAC7B,IAAMA,IAAQsJ,IAAiBP,IAAeD,EAU1B,UAAT9I,GAA4B,UAARpB,GAG7BwC,EAAKrB,OAAS+I,IACf1H,EAAKrB,MAAQ+I,OAd2C,CACxDQ,EAAYtJ,GAAQ8I,CACpB,KACCD,EAAgB7I,EAAM8I,EAAUC,EAAY3H,EAAMuD,EACjD/F,GACA,MAAO8B,GAGR,GAAIA,EAAE6I,QAAQlG,QAAQ,oBAAsB,EAAG,KAAM3C,OAUjD4I,EAGR,QAAS7G,GAAMX,EAAOL,GACrB,IAAK,GAAIjE,GAAIsE,EAAMrE,OAAS,EAAGD,GAAK,EAAGA,IACtC,GAAIsE,EAAMtE,IAAMsE,EAAMtE,GAAG4F,WAAY,CACpC,IACCtB,EAAMtE,GAAG4F,WAAWoG,YAAY1H,EAAMtE,IACrC,MAAOkD,IAOTe,KAAYP,OAAOO,GACfA,EAAOjE,IAAIgH,EAAO/C,EAAOjE,IAM3BsE,EAAMrE,SAAQqE,EAAMrE,OAAS,GAGlC,QAAS+G,GAAO/C,GACXA,EAAOyC,eAAiBpH,EAAW2E,EAAOyC,cAAcG,YAC3D5C,EAAOyC,cAAcG,WACrB5C,EAAOyC,cAAcG,SAAW,MAE7B5C,EAAO6C,aACVjH,EAAQoE,EAAO6C,YAAa,SAAUC,GACjCzH,EAAWyH,EAAWF,WACzBE,EAAWF,UAAUI,eAAgBrH,MAIpCqE,EAAO/B,WACNE,GAAQ6B,EAAO/B,UAClBrC,EAAQoE,EAAO/B,SAAU8E,GACf/C,EAAO/B,SAASd,KAC1B4F,EAAO/C,EAAO/B,WAmBjB,QAASqG,GAAWnF,EAAQE,EAAON,GAClC,GAAIiJ,GAAc7I,EAAOU,WAAWR,EAEpC,IAAI2I,EAAa,CAChB,GAAIC,GAAqC,IAAzBD,EAAYhD,SACxBkD,EAAc5L,GAAUgE,cAAc,OAEtC2H,IACH9I,EAAOS,aAAasI,EAAaF,GAAe,MAChDE,EAAYC,mBAAmB,cAAepJ,GAC9CI,EAAO4I,YAAYG,IAEnBF,EAAYG,mBAAmB,cAAepJ,OAG/CqJ,IAAwBjJ,EAAQJ,EAIjC,KADA,GAAIsB,MACGlB,EAAOU,WAAWR,KAAW2I,GACnC3H,EAAM1C,KAAKwB,EAAOU,WAAWR,IAC7BA,GAGD,OAAOgB,GAER,QAASkH,IAAWc,EAAU/M,GAC7B,MAAO,UAAU2D,GAChBA,EAAIA,GAAKqJ,MACTzN,EAAE0H,OAAOC,SAAS,QAClB3H,EAAE0N,kBACF,KACC,MAAOF,GAAS5M,KAAKH,EAAQ2D,GAC5B,QACDuJ,OA8DH,QAASC,IAAgBrI,GACxB,GAAIf,GAAQqJ,GAAU9G,QAAQxB,EAC9B,OAAe,GAARf,EAAYqJ,GAAU/K,KAAKyC,GAAW,EAAIf,EASlD,QAASsJ,IAAaC,GACrB,QAASzM,KAER,MADIsC,WAAUzC,SAAQ4M,EAAQnK,UAAU,IACjCmK,EAOR,MAJAzM,GAAK0M,OAAS,WACb,MAAOD,IAGDzM,EAGR,QAAS2M,IAAUxN,GAClB,MAAiB,OAAVA,IAAmBC,EAASD,IAAWD,EAAWC,KACvDD,EAAWC,EAAOyN,MAGrB,QAASC,IAAQC,GAChB,GAAI9M,GAAOtB,EAAEsB,MAsBb,OArBA8M,GAAQF,KAAK5M,GAEbA,EAAK4M,KAAOE,EAAQF,KAAKG,KAAKD,GAC9B9M,EAAAA,SAAa8M,EAAQF,KAAKG,KAAKD,EAAS7N,GAExCe,EAAAA,WAAe,SAAUkM,GACxB,QAASc,KACR,MAAOtO,GAAEuO,WAAWC,QAAQhB,KAAYY,QAGzC,MAAOA,GAAQF,KAAK,SAAUzK,GAC7B,MAAO6K,KAAYJ,KAAK,WACvB,MAAOzK,MAEN,SAAUgL,GACZ,MAAOH,KAAYJ,KAAK,WACvB,KAAMO,QAKFnN,EAmBR,QAASuC,IAAa6K,EAAWvL,GAIhC,QAASwL,KACR,MAAOC,GAAa/J,MAAMvE,KAAM6C,IAAS7C,KAO1C,QAASoL,GAAKmD,GAEb,IAAK,GADDC,IAAQD,GAAMjK,OAAOzB,GAChBjC,EAAI,EAAGA,EAAI0C,UAAUzC,OAAQD,IACrC4N,EAAKhM,KAAKc,UAAU1C,GAGrB,OAAO6N,GAAalK,MAAM6J,EAAWI,GAjBtC,GAAIF,GAAeF,EAAUzG,YAAcnH,EACvCiO,EAAeL,EAAUhD,MAAQ5K,CAMjC8N,KAAiB9N,IACpB6N,EAAKK,UAAYJ,EAAaI,WAY/BtD,EAAKS,UAAY4C,CACjB,IAAIE,IAAUhH,WAAY0G,EAAMjD,KAAMA,EAMtC,OAJIvI,GAAK,IAAqB,MAAfA,EAAK,GAAGa,MACtBiL,EAAOrM,OAASoB,IAAKb,EAAK,GAAGa,MAGvBiL,EAYR,QAASC,IAAcR,EAAWS,EAAM3K,EAAO4K,GAC9C,GAAIC,GAAgC,OAAdX,CAEtB,KAAKU,EAAa,CACjBpP,EAAE0H,OAAOC,SAAS,OAClB3H,EAAE0N,mBACF4B,GAAM9K,GAAS2K,EACfT,EAAYa,GAAeb,IAAczG,WAAYnH,EACrD,IAAImH,GAAa,IAAKyG,EAAUzG,YAAcnH,EAe9C,OAXI4N,KAAca,KACjBvH,GAAYxD,GAASyD,EACrBuH,GAAWhL,GAASkK,GAGrBf,KAEI0B,GACHI,GAAkBN,EAAM3K,GAGlBwD,GAAYxD,GAGhB6K,GACHI,GAAkBN,EAAM3K,GA0C1B,QAASiL,IAAkBN,EAAM3K,GAChC8K,GAAMlJ,OAAO5B,EAAO,GACpBwD,GAAY5B,OAAO5B,EAAO,GAC1BgL,GAAWpJ,OAAO5B,EAAO,GACzBkL,GAAMP,GACNtB,GAAUzH,OAAOwH,GAAgBuB,GAAO,GASzC,QAASQ,MACJC,GAAe,GAAG/N,GAAsB+N,IAC5CA,GAAe5N,GAAuB0F,GAAQmI,IAwC/C,QAASnI,MACJoI,KACHA,KACAA,GAAuB,MAGxB/O,EAAQuO,GAAO,SAAUH,EAAMjO,GAC9B,GAAIwN,GAAYc,GAAWtO,EAC3B,IAAI8G,GAAY9G,GAAI,CACnB,GAAIiC,IAAQ6E,GAAY9G,GACxBlB,GAAE+P,OAAOZ,EACRT,EAAUhD,KAAOgD,EAAUhD,KAAK1D,GAAY9G,GAAIiC,GAAQ,OAMvD6M,KACHA,KACAA,GAAwB,MAGzBJ,GAAe,KACfK,GAAqB,GAAIC,MACzBlQ,EAAE0H,OAAOC,SAAS,QAGnB,QAASgG,MACoB,SAAxB3N,EAAE0H,OAAOC,YACZe,KACA1I,EAAE0H,OAAOC,SAAS,SAElB3H,EAAEmQ,iBAkCJ,QAASC,IAAmBC,GAC3BpQ,EAAOoQ,GAAY,WAClB,GAAIC,GAAO3O,GAAU3B,EAAEuQ,MAAMC,KACR,cAAjBxQ,EAAEuQ,MAAMC,OAAqBF,GAAQ3O,GAAU8O,QAC/CC,KAAiBC,GAAeL,IAAOM,GAASN,IAGrDR,GAAuBe,GACvB5Q,EAAOoQ,KAGR,QAASS,MACR,OAAyB,aAAjB9Q,EAAEuQ,MAAMC,KAAsB,GAAK7O,GAAUoP,UACpDC,GAAMhR,EAAEuQ,MAAMC,MAGhB,QAASS,IAAyBC,GACjC,GAAIjR,EAAOkR,QAAQC,UAAW,CAC7BtB,GAAuBe,EACvB,IAAIQ,GAASH,EACZ,eACA,WACDlB,IAAwB,WACvB/P,EAAOkR,QAAQE,GAAQ,KACtB5P,GAAU6P,MACVN,GAAMhR,EAAEuQ,MAAMC,MAAQE,KAGxBE,GAASI,GAAMhR,EAAEuQ,MAAMC,MAAQE,QAE/B/O,IAAU3B,EAAEuQ,MAAMC,MAAQE,GAC1BE,GAASI,GAAMhR,EAAEuQ,MAAMC,MAAQE,IAIjC,QAASa,IAAQhB,EAAOiB,EAAQN,GAC3BtN,UAAUzC,OAAS,GAAuB,gBAAXqQ,KAClCN,EAA4BM,EAC5BA,EAAS,KAGV,IAAIC,GAAWf,EAEfA,IAAeH,CACf,IAEImB,GAAaC,EAFbxO,EAAOqO,MACPI,EAAalB,GAAa3J,QAAQ,IAGtC,IAAI6K,GAAc,EAAG,CACpB,GAAIC,GAAYC,GAAiBpB,GAAarN,MAAMuO,EAAa,GACjExQ,GAAO+B,EAAM,SAAUM,EAAOO,GAC7B6N,EAAU7N,GAAOb,EAAKa,KAEvB0N,EAAcK,GAAiBF,GAC/BF,EAAcjB,GAAarN,MAAM,EAAGuO,OAEpCF,GAAcK,GAAiBP,GAC/BG,EAAcjB,EAGf,IAAIgB,EAAa,CAChB,GAAIM,GAAyC,KAA7BL,EAAY5K,QAAQ,KAAc,IAAM,GACxD2J,IAAeiB,EAAcK,EAAYN,EAG1C,MAAOT,IAAyBC,GAC/BO,IAAalB,GAwDf,QAASI,IAAeJ,GACvB,MAAOA,GAAMlN,MAAM2N,GAAMhR,EAAEuQ,MAAMC,MAAMrP,QAGxC,QAAS8Q,IAAa9C,EAAM+C,EAAQ5B,GACnC,GAAI6B,GAAa7B,EAAKvJ,QAAQ,IAE1BoL,IAAc,GACjBC,GAAcN,GACbxB,EAAK+B,OAAOF,EAAa,EAAG7B,EAAKnP,SAClCmP,EAAOA,EAAK+B,OAAO,EAAGF,IAEtBC,KAKD,IAAI3K,GAAOD,OAAOC,KAAKyK,GACnB1N,EAAQiD,EAAKV,QAAQuJ,EAEzB,IAAI9L,GAAS,EAEZ,MADAxE,GAAEsS,MAAMnD,EAAM+C,EAAOzK,EAAKjD,MACnB,CAGR,KAAK,GAAI+L,KAAS2B,GACjB,GAAI3Q,GAAOX,KAAKsR,EAAQ3B,GAAQ,CAC/B,GAAIA,IAAUD,EAEb,MADAtQ,GAAEsS,MAAMnD,EAAM+C,EAAO3B,KACd,CAGR,IAAIgC,GAAU,GAAIC,QAAO,IACxBjC,EAAMkC,QAAQ,iBAAkB,SAC9BA,QAAQ,WAAY,aAAe,MAEtC,IAAIF,EAAQ3I,KAAK0G,GAYhB,MAVAA,GAAKmC,QAAQF,EAAS,WACrB,GAAI9K,GAAO8I,EAAM/N,MAAM,gBACnBkQ,KAAYrP,MAAMzC,KAAKgD,UAAW,EAAG,GACzC7C,GAAQ0G,EAAM,SAAUzD,EAAK9C,GAC5B8C,EAAMA,EAAIyO,QAAQ,QAAS,IAC3BL,GAAYpO,GAAO2O,mBAAmBD,EAAOxR,MAE9ClB,EAAEsS,MAAMnD,EAAM+C,EAAO3B,OAGf,GAMX,QAASqC,IAAiBxO,GAGzB,GAFAA,EAAIA,GAAKqJ,OAELrJ,EAAEyO,UAAWzO,EAAE0O,SAAuB,IAAZ1O,EAAE2O,MAAhC,CAEI3O,EAAE+D,eACL/D,EAAE+D,iBAEF/D,EAAE4O,aAAc,CAGjB,IAEI7P,GAFA8P,EAAgB7O,EAAE6O,eAAiB7O,EAAE8O,UAUzC,KALC/P,EADoB,aAAjBnD,EAAEuQ,MAAMC,MAAuByC,EAAcxC,OACzCqB,GAAiBmB,EAAcxC,OAAOpN,MAAM,OAK7C4P,GAA0D,MAAzCA,EAAcpJ,SAASsJ,eAC9CF,EAAgBA,EAAcnM,UAG/B9G,GAAEuQ,MAAM0C,EAAcjT,EAAEuQ,MAAMC,MAAMnN,MAAM2N,GAAMhR,EAAEuQ,MAAMC,MAAMrP,QAC7DgC,IAGF,QAAS0N,MACa,SAAjB7Q,EAAEuQ,MAAMC,MAAmB7O,GAAUyR,KACxCzR,GAAUyR,KAAOzR,GAAUyR,KAE3BnT,EAAOoT,SAAS,EAAG,GAIrB,QAAStB,IAAiBtR,EAAQ6S,GACjC,GAAIC,MACAC,IA0BJ,OAzBApS,GAAOX,EAAQ,SAAUgD,EAAOnC,GAC/B,GAAI0C,GAAMsP,EAASA,EAAS,IAAMhS,EAAO,IAAMA,CAE/C,IAAc,OAAVmC,EACH+P,EAAI1Q,KAAK2Q,mBAAmBzP,QACtB,IAAItD,EAAS+C,GACnB+P,EAAI1Q,KAAKiP,GAAiBtO,EAAOO,QAC3B,IAAIV,GAAQG,GAAQ,CAC1B,GAAIgE,KACJ8L,GAAWvP,GAAOuP,EAAWvP,OAE7BjD,EAAQ0C,EAAO,SAAUgH,GACnB8I,EAAWvP,GAAKyG,KACpB8I,EAAWvP,GAAKyG,IAAQ,EACxBhD,EAAK3E,KAAK2Q,mBAAmBzP,GAAO,IACnCyP,mBAAmBhJ,OAItB+I,EAAI1Q,KAAK2E,EAAK9D,KAAK,UACTF,KAAUlD,GACpBiT,EAAI1Q,KAAK2Q,mBAAmBzP,GAAO,IAClCyP,mBAAmBhQ,MAGf+P,EAAI7P,KAAK,KAGjB,QAASmO,IAAiB0B,GACzB,GAAY,KAARA,GAAqB,MAAPA,EAAa,QACT,OAAlBA,EAAIE,OAAO,KAAYF,EAAMA,EAAInQ,MAAM,GAE3C,IAAIjB,GAAQoR,EAAIG,MAAM,KAClBnC,IAaJ,OAZAzQ,GAAQqB,EAAO,SAAUwR,GACxB,GAAI7Q,GAAO6Q,EAAOD,MAAM,KACpB3P,EAAM2O,mBAAmB5P,EAAK,IAC9BU,EAAwB,IAAhBV,EAAK5B,OAAewR,mBAAmB5P,EAAK,IAAM,IAC3C,OAAfyO,EAAOxN,IACLV,GAAQkO,EAAOxN,MAAOwN,EAAOxN,IAAQwN,EAAOxN,KACjDwN,EAAOxN,GAAKlB,KAAKW,IAEjB+N,EAAOxN,GAAOP,IAIT+N,EAMR,QAAS9B,IAAMP,GACd,GAAI0E,GAAWjG,GAAgBuB,EAC/BhJ,GAAMgJ,EAAKnK,WAAY8O,GAAUD,IACjCC,GAAUD,GAAYtT,EAkBvB,QAASwT,IAASC,EAAWC,GAM5B,QAASC,GAAOzQ,EAAO0Q,EAAMC,GAC5B,MAAInG,IAAUxK,GACNA,EAAMyK,KAAK,SAAUzK,GAC3ByQ,EAAOzQ,EAAO0Q,EAAMC,IAClB,SAAUhQ,GACZ8P,EAAO9P,EAAGgQ,EAAOA,KAGXD,EAAKE,EAAe5Q,GAI7B,QAAS+K,GAAQD,GAChBA,EAASC,QAAQ6F,GAGlB,QAASC,GAAO/F,GACfA,EAAS+F,OAAOD,GAGjB,QAASvR,GAAKyL,GACb4F,EAAKrR,KAAKyL,GAiDX,QAASgG,GAAI/G,GACZgH,EAAOhH,EACPzM,EAAQoT,EAAM3G,GAEdiH,EAASC,EAAO,KAGjB,QAASD,GAAOhR,EAAOkR,GACtBT,EAAOzQ,EAAO,WACb8Q,EAAII,IAAUC,GAAWpG,EAAU8F,IACjC,WACFC,EAAID,KAIN,QAASO,GAAOpR,EAAO8K,GAEtB,GAAIuG,GAAQ,CAEZ,KACC,MAAOrR,GAAMyK,KAAK,SAAUzK,GACvBqR,KACJJ,EAAKK,GAAWtR,EAAO8K,IACrB,SAAU9K,GACRqR,KACJJ,EAAKM,GAAWvR,EAAO8K,KAEvB,MAAOnK,GAER,MADApE,GAAEuO,SAAS0G,QAAQ7Q,GACZsQ,EAAKM,GAAW5Q,EAAGmK,IAI5B,QAAS2G,GAAazR,EAAOkR,EAAOpG,GACnC,IACKoG,IAAUI,IAAavU,EAAWwT,GACrCvQ,EAAQuQ,EAAUvQ,GACRkR,IAAUK,IAAaxU,EAAWyT,KAC5CxQ,EAAQwQ,EAAUxQ,GAClBkR,EAAQI,IAER,MAAO3Q,GAER,MADApE,GAAEuO,SAAS0G,QAAQ7Q,GACZqQ,EAAOrQ,EAAG+Q,IAGlB,MAAI1R,KAAU8K,EACNkG,EAAOW,YAAaD,IAEpBV,EAAOhR,EAAOkR,IAAUI,GAAYH,GAAWO,IAIxD,QAAST,GAAKC,EAAOlR,EAAO8K,GAE3B,GAAI8G,EACJ,KACCA,EAAWpH,GAAUxK,GACpB,MAAOW,GAER,MADApE,GAAEuO,SAAS0G,QAAQ7Q,GACZsQ,EAAKM,GAAW5Q,EAAGmK,GAO3B,MAJIoG,KAAUK,IACbhV,EAAEuO,SAAS0G,QAAQxR,GAGhB4R,EACIR,EAAOpR,EAAO8K,GAEd2G,EAAazR,EAAOkR,EAAOpG,GAjJpC,GACI8F,GADAiB,EAAOhV,KAEP6T,KACAK,EAAO1R,CA0BXwS,GAAK9G,QAAU,SAAU/K,GAIxB,MAHI+Q,KAAS1R,GACZ4R,EAAKK,GAAWtR,EAAO6R,GAEjBhV,MAGRgV,EAAKhB,OAAS,SAAU7Q,GAIvB,MAHI+Q,KAAS1R,GACZ4R,EAAKM,GAAWvR,EAAO6R,GAEjBhV,MAGRgV,EAAKlH,QAAU,SAAU3K,GAExB,MADIG,WAAUzC,QAAQ+S,EAAOzQ,EAAO3C,EAAMA,GACnC0T,IAASF,EAASD,EAAe9T,GAGzC+U,EAAKlH,QAAQF,KAAO,SAAU8F,EAAWC,GACxC,GAAI1F,GAAW,GAAIwF,IAASC,EAAWC,EAGvC,OAFIO,KAASF,GAAQ/F,EAASH,QAAQiG,GACtCG,EAAKjG,GACEA,EAASH,SAGjBkH,EAAKlH,QAALkH,SAAqB,SAAU9H,GAC9B,MAAO8H,GAAKlH,QAAQF,KAAK,KAAMV,IAGhC8H,EAAKlH,QAALkH,WAAuB,SAAU9H,GAChC,QAASc,KACR,MAAOtO,GAAEuO,WAAWC,QAAQhB,KAAYY,QAGzC,MAAOkH,GAAKlH,QAAQF,KAAK,WACxB,MAAOI,KAAYJ,KAAK,WACvB,MAAOmG,MAEN,WACF/F,IAAYJ,KAAK,WAChB,KAAMmG,QAuFV,QAASkB,IAAcnR,GACtB,MAAOA,aAAaoR,YACnBpR,YAAaqR,aACbrR,YAAasR,iBACbtR,YAAauR,cACbvR,YAAagR,YACbhR,YAAawR,UAuCf,QAASC,IAASpS,GACjB,MAAOA,GAGR,QAASqS,MACR,MAAO,qBAAsB,GAAI5F,OAAO6F,UAAY,IAClDC,KAAKC,MAAsB,KAAhBD,KAAKE,UAAkB/R,SAAS,IAG9C,QAASgS,IAASC,GACjB,GAAIC,GAAcP,KACdQ,EAAS7U,GAAUgE,cAAc,SAErCxF,GAAOoW,GAAe,SAAUE,GAC/BD,EAAOxP,WAAWoG,YAAYoJ,GAE9BF,EAAQI,QACP7V,KAAM,OACN8V,QACCC,aAAcH,KAIhBtW,EAAOoW,GAAe9V,GAGvB+V,EAAOrB,QAAU,WAahB,MAZAqB,GAAOxP,WAAWoG,YAAYoJ,GAE9BF,EAAQnB,SACPtU,KAAM,QACN8V,QACCE,OAAQ,IACRD,aAAc,6CAIhBzW,EAAOoW,GAAe9V,GAEf,GAGR+V,EAAOE,OAAS,WACf,OAAO,GAGRF,EAAOM,IAAMR,EAAQS,KACnBT,EAAQS,IAAI9P,QAAQ,KAAO,EAAI,IAAM,MACrCqP,EAAQC,YAAcD,EAAQC,YAAc,YAC7C,IAAMA,EACN,IAAMtE,GAAiBqE,EAAQlS,UAEhCzC,GAAUqV,KAAKC,YAAYT,GAG5B,QAASU,IAAOZ,GACf,GAAIa,GAAM,GAAIhX,GAAOiX,cA0BrB,IAxBAD,EAAIE,KAAKf,EAAQ/E,OAAQ+E,EAAQS,KAAK,EAAMT,EAAQgB,KACnDhB,EAAQiB,UAETJ,EAAIK,mBAAqB,WACD,IAAnBL,EAAIM,aACHN,EAAIN,QAAU,KAAOM,EAAIN,OAAS,IACrCP,EAAQI,QAAQ7V,KAAM,OAAQ8V,OAAQQ,IAEtCb,EAAQnB,SAAStU,KAAM,QAAS8V,OAAQQ,MAKvCb,EAAQoB,YAAcC,KAAKC,WAC7BtB,EAAQlS,MACW,QAAnBkS,EAAQ/E,QACT4F,EAAIU,iBAAiB,eACpB,mCAGEvB,EAAQwB,cAAgBH,KAAKI,OAChCZ,EAAIU,iBAAiB,SAAU,4BAG5BnX,EAAW4V,EAAQtN,QAAS,CAC/B,GAAIgP,GAAW1B,EAAQtN,OAAOmO,EAAKb,EACnB,OAAZ0B,IAAkBb,EAAMa,GAG7B,GAAI5T,EAQJ,IAHCA,EAHsB,QAAnBkS,EAAQ/E,QAAqB+E,EAAQlS,KAGjCkS,EAAQlS,KAFR,GAKJA,IAAUrD,EAASqD,IAASA,EAAK4F,cAAgB7J,EAAO8X,SAC3D,KAAM,IAAIjU,OAAM,qGAKjB,OADAmT,GAAIe,KAAK9T,GACF+S,EAGR,QAASgB,IAAK7B,GACb,MAAIA,GAAQ8B,UAA+C,UAAnC9B,EAAQ8B,SAASC,cACjChC,GAASC,GAETY,GAAOZ,GAIhB,QAASgC,IAASC,EAAYnU,EAAMsT,GACnC,GAA0B,QAAtBa,EAAWhH,QAA4C,UAAxBgH,EAAWH,SAAsB,CACnE,GAAI5E,GAAS+E,EAAWxB,IAAI9P,QAAQ,KAAO,EAAI,IAAM,IACjDuR,EAAcvG,GAAiB7N,EACnCmU,GAAWxB,KAAOyB,EAAchF,EAASgF,EAAc,OAEvDD,GAAWnU,KAAOsT,EAAUtT,EAE7B,OAAOmU,GAGR,QAASE,IAAgB1B,EAAK3S,GAC7B,GAAIsU,GAAS3B,EAAIrU,MAAM,cAQvB,OAPIgW,IAAUtU,GACbnD,EAAQyX,EAAQ,SAAUC,GACzB,GAAIzU,GAAMyU,EAAMpV,MAAM,EACtBwT,GAAMA,EAAIpE,QAAQgG,EAAOvU,EAAKF,UACvBE,GAAKF,KAGP6S,EAGR,QAAS6B,IAAeC,GACvB,MAAOA,GAAMjC,aAtiEd,GAyCIjV,IAAWE,GAAWK,GAAwBH,GAzC9C+W,GAAU,SAGVjY,MAAUwD,SACV5C,MAAYsX,eAcZvV,GAAU0C,MAAM1C,SAAW,SAAU7C,GACxC,MAA6B,mBAAtBE,GAAKC,KAAKH,IAiBdiC,GAAS,uCACTM,GAAa,+BACb2G,GAAe,yFAenBnI,GAAWvB,GAGXD,EAAE8Y,KAAO,SAAUC,GAElB,MADAvX,GAAWvB,EAAS8Y,GAAQ9Y,GACrBA,GAGRD,EAAEgZ,QAAU,WACX,MAAOJ,IA+IR,IAAI1S,IAAW,EACXR,GAAY,EACZL,GAAO,EA4KPqD,GAAkB,CACtB1I,GAAE0N,iBAAmB,WAAchF,MACnC1I,EAAEmQ,eAAiB,WACdzH,GAAkB,EACrBA,MAEAA,GAAkB,EAClB1I,EAAE0H,UAuUJ,IAkYIuR,IAlYApN,MAcAG,IAAU,EA+TVuB,GAA0B,WAC7B,IAEC,MADA9L,IAAUyX,cAAcC,yBAAyB,KAC1C,SAAU7U,EAAQJ,GACxBI,EAAOyS,YACNtV,GAAUyX,cAAcC,yBAAyBjV,KAElD,MAAOE,GACR,MAAO,UAAUE,EAAQJ,GACxBI,EAAOgJ,mBAAmB,YAAapJ,QA6CtCkV,IACHrC,YAAa,SAAUjS,GAClBmU,KAAS1Y,IACZ0Y,GAAOxX,GAAUgE,cAAc,SAG5BhE,GAAU4X,iBACZ5X,GAAU4X,kBAAoBvU,EAC/BrD,GAAU6X,aAAaxU,EAAMrD,GAAU4X,iBAEvC5X,GAAUsV,YAAYjS,GAGvBxE,KAAK0E,WAAavD,GAAUuD,YAG7BD,aAAc,SAAUD,GACvBxE,KAAKyW,YAAYjS,IAGlBE,eAGG6I,MACAiG,KAEJ9T,GAAE+P,OAAS,SAAUZ,EAAM5M,EAAMgX,GAChC,IAAKpK,EACJ,KAAM,IAAIrL,OAAM,oFAIjB,IAGIgB,GAHA8D,KACA/F,EAAK+K,GAAgBuB,GACrBqK,EAAiBrK,IAAS1N,EAI7BqD,GADG0U,GAAkBrK,IAAS1N,GAAU4X,gBACjCD,GAEAjK,EAGJqK,GAA+B,SAAbjX,EAAKD,MAC1BC,GAAQD,IAAK,OAAQM,SAAWQ,SAAUb,IAGvCuR,GAAUjR,KAAQtC,GAAW4F,EAAMrB,EAAKE,YACxCuU,KAAoB,GAAM7J,GAAMP,GAEpC2E,GAAUjR,GAAMuG,EAAMtE,EAAM,KAAMvE,EAAWA,EAAWgC,EACvDuR,GAAUjR,IAAK,EAAO,EAAG,KAAMtC,EAAWqI,GAE3C7H,EAAQ6H,EAAS,SAAUE,GAAUA,OAQtC9I,EAAEyZ,MAAQ,SAAUhW,GAGnB,MAFAA,GAAQ,GAAIiW,QAAOjW,GACnBA,EAAM+F,UAAW,EACV/F,GA+CRzD,EAAEsB,KAAO,SAAUyM,GAClB,MAAIE,IAAUF,GACNI,GAAQJ,GAERD,GAAaC,GAItB,IAMIwB,IANAD,MACAE,MACAxH,MACA8H,GAAuB,KACvBE,GAAwB,KACxBH,GAAe,EAkCnB7P,GAAE0O,UAAY,SAAUA,GAEvB,IAAK,GADDvL,MACKjC,EAAI,EAAGA,EAAI0C,UAAUzC,OAAQD,IACrCiC,EAAKL,KAAKc,UAAU1C,GAGrB,OAAO2C,IAAa6K,EAAWvL,IAkChCnD,EAAEsS,MAAQtS,EAAEE,OAAS,SAAUiP,EAAMT,GACpC,IAAKS,EACJ,KAAM,IAAIrL,OAAM,4EAIjB,IAAIU,GAAQ8K,GAAMvI,QAAQoI,EACd,GAAR3K,IAAWA,EAAQ8K,GAAMnO,OAE7B,IAAIiO,IAAc,EAEduK,GACHxR,eAAgB,WACfiH,GAAc,EACdU,GAAuBE,GAAwB,MAqBjD,OAjBAjP,GAAQ8K,GAAW,SAAU+N,GAC5BA,EAAS9N,QAAQlL,KAAKgZ,EAAS3R,WAAY0R,GAC3CC,EAAS3R,WAAWF,SAAW,OAG5BqH,EACHrO,EAAQ8K,GAAW,SAAU+N,GAC5BA,EAAS3R,WAAWF,SAAW6R,EAAS9N,UAGzCD,MAGG7D,GAAYxD,IAAUhE,EAAWwH,GAAYxD,GAAOuD,WACvDC,GAAYxD,GAAOuD,SAAS4R,GAGtBzK,GAAcR,EAAWS,EAAM3K,EAAO4K,GAc9C,IAAIQ,IAAe,EACfK,GAAqB,EAarB4J,GAAgB7X,KAClB/B,EAAOgC,sBACR0N,GACA,YACM,GAAIO,MAASD,GAAqBJ,IACtCF,MAICmK,IAAY,CAEhB9Z,GAAE0H,OAAS,SAAUqS,GACpB,IAAID,GAAJ,CACAA,IAAY,EACRC,IAAO/N,IAAU,EACrB,KACK4D,KAAiBmK,EACpBF,MAEAnS,KACAkI,GAAe5N,GAAuB,WACrC4N,GAAe,GACbC,KAEH,QACDiK,GAAY9N,IAAU,KAIxBhM,EAAE0H,OAAOC,SAAW3H,EAAEsB,OAsCtBtB,EAAEga,SAAW,SAAU1Y,EAAM2Y,EAAkBC,GAC9C,MAAO,UAAU9V,GAEhBA,EAAIA,GAAKqJ,KACT,IAEI0M,GAFAlH,EAAgB7O,EAAE6O,eAAiB3S,KACnC8Z,EAAQF,GAAgB5Z,IAI3B6Z,GADG7Y,IAAQ2R,GACEA,EAAc3R,GAEd2R,EAAcoH,aAAa/Y,GAGzC2Y,EAAiBrZ,KAAKwZ,EAAOD,IAM/B,IAQI/H,IAAa1B,GARbM,IACHD,SAAU,GACVqC,KAAM,IACN3C,OAAQ,KAGLG,GAAW9P,EACXwZ,IAAiB,CAwErBta,GAAEuQ,MAAQ,SAAUpB,EAAMoL,EAAMC,EAAMC,GACrC,GAAyB,IAArB7W,UAAUzC,OAEb,MAAOuP,GACD,IAAyB,IAArB9M,UAAUzC,QAAgBN,EAAS0Z,GAE7C3J,GAAW,SAAU8J,GACpB,GAAIpK,GAAOI,GAAeC,GAAe+J,EACzC,KAAKzI,GAAa9C,EAAMqL,EAAMlK,GAAO,CACpC,GAAIgK,GACH,KAAM,IAAIxW,OAAM,wEAIjBwW,KAAiB,EACjBta,EAAEuQ,MAAMgK,GAAM,GACdD,IAAiB,IAInBlK,GACkB,SAAjBpQ,EAAEuQ,MAAMC,KAAkB,eAAiB,kBACtC,IAAIrB,EAAKwL,kBAAoBxL,EAAKyL,YAExCzL,EAAK0L,KAAO/J,KAAiB2J,EAAK7X,MAAMiY,KACpC1L,EAAKwL,kBACRxL,EAAK2L,oBAAoB,QAASlI,IAClCzD,EAAKwL,iBAAiB,QAAS/H,MAE/BzD,EAAK4L,YAAY,UAAWnI,IAC5BzD,EAAKyL,YAAY,UAAWhI,SAEvB,IAAI/R,EAASsO,GAEnB,MAAOoC,IAAQ1M,MAAMvE,KAAMsD,YAI7B5D,EAAEuQ,MAAMyK,MAAQ,SAAUhX,GACzB,IAAKoO,GACJ,KAAM,IAAItO,OAAM,sFAIjB,OAAIE,GACIoO,GAAYpO,GAEZoO,IAITpS,EAAEuQ,MAAMC,KAAO,SAiJfxQ,EAAEuQ,MAAMwB,iBAAmBA,GAC3B/R,EAAEuQ,MAAMuB,iBAAmBA,EAkB3B,IAAIiD,IAAY,EACZC,GAAY,EACZJ,GAAW,EACXO,GAAW,CA0Zf,OAjQAnV,GAAEuO,SAAW,WACZ,MAAO,IAAIwF,KAGZ/T,EAAEuO,SAASS,UAAY+E,GAAS/E,UAChChP,EAAEuO,SAASS,UAAUlF,YAAc9J,EAAEuO,SAWrCvO,EAAEuO,SAAS0G,QAAU,SAAU7Q,GAC9B,GAAImR,GAAcnR,GAEjB,KADAsE,IAAkB,EACZtE,GAIRpE,EAAEib,KAAO,SAAU9X,GAMlB,QAAS+X,GAAaC,EAAKC,GAC1B,MAAO,UAAU3X,GAOhB,MANA4X,GAAQF,GAAO1X,EACV2X,IAAU/J,EAAS,UACF,MAAhBiK,IACL/M,EAASH,QAAQiN,GACjB9M,EAAS8C,GAAQgK,IAEX5X,GAbT,GAAI8K,GAAW,GAAIwF,IACfuH,EAAcnY,EAAKhC,OACnBka,EAAU,GAAIrV,OAAMsV,GACpBjK,EAAS,SAsBb,OARIlO,GAAKhC,OAAS,EACjBJ,EAAQoC,EAAM,SAAUoY,EAAKra,GAC5Bqa,EAAIrN,KAAKgN,EAAaha,GAAG,GAAOga,EAAaha,GAAG,MAGjDqN,EAASC,YAGHD,EAASH,SA8IjBpO,EAAEwb,QAAU,SAAUpF,GACjBA,EAAQqF,cAAe,GAAMzb,EAAE0N,kBAEnC,IAAIa,GAAW,GAAIwF,IAEfyD,EAAY3B,GACZ+B,EAAc/B,GACd6F,EAAUhD,EAwDd,OAtDKtC,GAAQ8B,UAA+C,UAAnC9B,EAAQ8B,SAASC,gBACzCX,EAAYpB,EAAQoB,WAAaC,KAAKC,UACtCE,EAAcxB,EAAQwB,aAAeH,KAAKI,MAC1C6D,EAAU,SAAUzE,GACnB,MAAgC,KAA5BA,EAAIP,aAAavV,QACnByW,IAAgBH,KAAKI,MACf,KAEAZ,EAAIP,eAKdN,EAAQoB,UAAYA,EACpBpB,EAAQwB,YAAcA,EAEtBxB,EAAQ/E,QAAU+E,EAAQ/E,QAAU,OAAO8B,cAC3CiD,EAAQS,IAAM0B,GAAgBnC,EAAQS,IAAKT,EAAQlS,MACnDkS,EAAUgC,GAAShC,EAASA,EAAQlS,KAAMsT,GAC1CpB,EAAQI,OAASJ,EAAQnB,QAAU,SAAU0E,GAC5CA,EAAKA,GAAMlM,KACX,IACIkO,GAAQC,EADRC,EAAwB,SAAZlC,EAAGhZ,IAIlBgb,GADGE,EACMzF,EAAQ0F,cAER1F,EAAQ2F,WAGlB,KACCH,GAAYD,GAAU9F,IACrB+B,EAAY8D,EAAQ/B,EAAGlD,OAAQL,IAAWuD,EAAGlD,QAC1CoF,IACCvY,GAAQsY,IAAaxF,EAAQzV,KAChCI,EAAQ6a,EAAU,SAAUI,EAAK9a,GAChC0a,EAAS1a,GAAK,GAAIkV,GAAQzV,KAAKqb,KAEtB5F,EAAQzV,OAClBib,EAAW,GAAIxF,GAAQzV,KAAKib,KAG7B,MAAOxX,GACRwX,EAAWxX,EACXyX,GAAY,EAGbtN,EAASsN,EAAY,UAAY,UAAUD,GAEvCxF,EAAQqF,cAAe,GAAMzb,EAAEmQ,kBAGpC8H,GAAK7B,GACL7H,EAASH,QAAQgI,EAAQ6F,cAClB1N,EAASH,SAGVpO","file":"mithril.min.js"} \ No newline at end of file diff --git a/test/mithril.deferred.js b/test/mithril.deferred.js index 1f31eb1c..5ea21950 100644 --- a/test/mithril.deferred.js +++ b/test/mithril.deferred.js @@ -117,8 +117,7 @@ describe("m.deferred()", function () { expect(value2()).to.be.an("error") }) - // FIXME: this is a bug. - xit("synchronously throws subclasses of Errors on creation", function () { + it("synchronously throws subclasses of Errors on creation", function () { expect(function () { m.deferred().reject(new TypeError()) }).to.throw() diff --git a/test/mithril.prop.js b/test/mithril.prop.js index 4be4b1b9..c1fe9c23 100644 --- a/test/mithril.prop.js +++ b/test/mithril.prop.js @@ -53,12 +53,14 @@ describe("m.prop()", function () { it("returns a thenable when wrapping a Mithril promise", function () { var defer = m.deferred() - var prop = m.prop(defer.promise).then(function () { + var prop = m.prop(defer.promise) + + var promise = prop.then(function () { return "test2" }) defer.resolve("test") - expect(prop()).to.equal("test2") + expect(promise()).to.equal("test2") }) }) From 3ae005bd1dc19e2472ae74dd32f560afb0a75b3f Mon Sep 17 00:00:00 2001 From: impinball Date: Fri, 20 Nov 2015 02:53:28 -0500 Subject: [PATCH 20/63] Unfix test --- test/mithril.prop.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/mithril.prop.js b/test/mithril.prop.js index c1fe9c23..4be4b1b9 100644 --- a/test/mithril.prop.js +++ b/test/mithril.prop.js @@ -53,14 +53,12 @@ describe("m.prop()", function () { it("returns a thenable when wrapping a Mithril promise", function () { var defer = m.deferred() - var prop = m.prop(defer.promise) - - var promise = prop.then(function () { + var prop = m.prop(defer.promise).then(function () { return "test2" }) defer.resolve("test") - expect(promise()).to.equal("test2") + expect(prop()).to.equal("test2") }) }) From e0f51db6182efcbf196251e9eac6bf3ced63523a Mon Sep 17 00:00:00 2001 From: impinball Date: Wed, 25 Nov 2015 22:43:02 -0500 Subject: [PATCH 21/63] Disable tests that mysteriously affect others --- test/mithril.route.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/test/mithril.route.js b/test/mithril.route.js index 64e03794..f130c279 100644 --- a/test/mithril.route.js +++ b/test/mithril.route.js @@ -39,6 +39,7 @@ describe("m.route()", function () { // Use these instead of `it` and `xit` in this set of tests if you need a // root element. var dit = makeIt(it) + var xdit = makeIt(xit) // Wraps the `it` function for dependency injection that doesn't require // `this` @@ -101,8 +102,8 @@ describe("m.route()", function () { expect(route2).to.equal("/test13") }) - // FIXME: this causes others to fail - dit("skips route change if component ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line + // FIXME: this causes others to fail, even though it passes + xdit("skips route change if component ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line mode("search") var spy = sinon.spy() @@ -129,8 +130,8 @@ describe("m.route()", function () { expect(spy).to.not.have.been.called }) - // FIXME: this causes others to fail - dit("skips route change if subcomponent ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line + // FIXME: this causes others to fail, even though it passes + xdit("skips route change if subcomponent ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line mode("search") var spy = sinon.spy() @@ -160,8 +161,8 @@ describe("m.route()", function () { expect(spy).to.not.have.been.called }) - // FIXME: this causes others to fail - dit("skips route change if non-curried component ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line + // FIXME: this causes others to fail, even though it passes + xdit("skips route change if non-curried component ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line mode("search") var spy = sinon.spy() @@ -189,8 +190,8 @@ describe("m.route()", function () { expect(spy).to.not.have.been.called }) - // FIXME: this causes others to fail - dit("skips route change if non-curried subcomponent ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line + // FIXME: this causes others to fail, even though it passes + xdit("skips route change if non-curried subcomponent ctrl.onunload calls preventDefault", function (root) { // eslint-disable-line mode("search") var spy = sinon.spy() From 0b173deed753ce86762f02e79446e32324064770 Mon Sep 17 00:00:00 2001 From: impinball Date: Wed, 25 Nov 2015 22:45:45 -0500 Subject: [PATCH 22/63] Merge 'origin/patch-2', remove trailing commas --- .eslintrc | 1 - CONTRIBUTING.md | 27 ++- Gruntfile.js | 114 ++++++------- docs/layout/tools/template-converter.js | 12 +- mithril.js | 22 +-- test-deps/mock.js | 10 +- test/index.html | 2 +- test/input-cursor.html | 20 +-- test/mithril.js | 2 +- test/mithril.mount.js | 72 ++++---- test/mithril.redraw.js | 26 +-- test/mithril.render.js | 140 ++++++++-------- test/mithril.request.js | 32 ++-- test/mithril.route.buildQueryString.js | 4 +- test/mithril.route.js | 210 ++++++++++++------------ test/mithril.route.parseQueryString.js | 4 +- test/mithril.startComputation.js | 2 +- test/mithril.trust.js | 4 +- test/svg.html | 60 +++---- 19 files changed, 380 insertions(+), 384 deletions(-) diff --git a/.eslintrc b/.eslintrc index 3e4f6cf2..14612a91 100644 --- a/.eslintrc +++ b/.eslintrc @@ -53,7 +53,6 @@ "block-spacing": 2, "brace-style": [2, "1tbs", {"allowSingleLine": true}], "camelcase": 2, - "comma-dangle": [2, "always-multiline"], "comma-spacing": 2, "comma-style": 2, "consistent-this": [2, "self"], diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a113e406..4054409d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -120,8 +120,8 @@ for (var i = 0; i < CARD_DECK_SIZE; i++) { // Also good function toFastProperties(obj) { - // Bluebird's toFastProperties hack. Forces V8 to optimize object as prototype, - // significantly speeding up property access. + // Bluebird's toFastProperties hack. Forces V8 to optimize object as + // prototype, significantly speeding up property access. /* eslint-disable no-eval */ function C() {} @@ -362,7 +362,7 @@ var object = { foo: 1, bar: 2, baz: 3, - quux: "string", + quux: "string" } // Bad @@ -373,7 +373,7 @@ var object = { foo: 1, bar: 2, baz: 3, - quux: "string", + quux: "string" } ``` @@ -402,7 +402,7 @@ var object = { foo: 1, bar: 2, baz: 3, - quux: "string", + quux: "string" } // Bad @@ -413,28 +413,25 @@ Prefer plain objects over `new function () {}`, but if you feel the latter is be ### Comma placement -Commas come last. Also, use trailing commas if the object takes multiple lines. +Commas come last. Don't use trailing commas ```js // Good var object = { foo: 1, - bar: 2, + bar: 2 } // Bad var object = { foo: 1, - bar: 2 // No trailing comma + bar: 2, // Trailing comma } var object = { foo: 1 , bar: 2 // Comma first } - -// Also bad -var object = {foo: 1,} ``` ### Member access @@ -461,23 +458,23 @@ Quote properties when needed. Never quote valid identifiers. This may lead to so // Good var object = { foo: 1, - bar: 2, + bar: 2 } var object = { foo: 1, - "non-identifier": 2, + "non-identifier": 2 } // Bad var object = { "foo": 1, - "bar": 2, + "bar": 2 } var object = { "foo": 1, - "non-identifier": 2, + "non-identifier": 2 } ``` diff --git a/Gruntfile.js b/Gruntfile.js index 654dad3d..9844f85b 100755 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -22,7 +22,7 @@ module.exports = function (grunt) { // eslint-disable-line "refactoring", "routing", "tools", - "web-services", + "web-services" ] var api = [ @@ -43,7 +43,7 @@ module.exports = function (grunt) { // eslint-disable-line "mithril.sync", "mithril.trust", "mithril.withAttr", - "mithril.xhr", + "mithril.xhr" ] var md2htmlTasks = {} @@ -60,12 +60,12 @@ module.exports = function (grunt) { // eslint-disable-line md2htmlTasks[name] = { options: { layout: inputFolder + "/layout/" + layout + ".html", - templateData: {topic: title}, + templateData: {topic: title} }, files: [{ src: [src], - dest: tempFolder + "/" + name + ".html", - }], + dest: tempFolder + "/" + name + ".html" + }] } }) } @@ -80,7 +80,7 @@ module.exports = function (grunt) { // eslint-disable-line eslint: { options: { extensions: [".js"], - fix: true, + fix: true }, all: [ "**/*.js", @@ -89,17 +89,17 @@ module.exports = function (grunt) { // eslint-disable-line "!archive/**", "!deploy/**", "!mithril.closure-compiler-externs.js", - "!docs/layout/lib/**", - ], + "!docs/layout/lib/**" + ] }, mocha_phantomjs: { // eslint-disable-line camelcase test: { src: ["test/index.html"], options: { - reporter: "dot", - }, - }, + reporter: "dot" + } + } }, md2html: md2htmlTasks, @@ -112,11 +112,11 @@ module.exports = function (grunt) { // eslint-disable-line pkg.homepage, "(c) 2014-" + currentYear + " " + pkg.author.name, "License: " + pkg.license, - "*/", + "*/" ].join("\n"), - sourceMap: true, + sourceMap: true }, - mithril: {src: "mithril.js", dest: "mithril.min.js"}, + mithril: {src: "mithril.js", dest: "mithril.min.js"} }, zip: { @@ -125,10 +125,10 @@ module.exports = function (grunt) { // eslint-disable-line src: [ currentVersionArchiveFolder + "/mithril.min.js", currentVersionArchiveFolder + "/mithril.min.js.map", - currentVersionArchiveFolder + "/mithril.js", + currentVersionArchiveFolder + "/mithril.js" ], - dest: currentVersionArchiveFolder + "/mithril.min.zip", - }, + dest: currentVersionArchiveFolder + "/mithril.min.zip" + } }, replace: { @@ -136,105 +136,105 @@ module.exports = function (grunt) { // eslint-disable-line force: true, patterns: [ {match: /\.md/g, replacement: ".html"}, - {match: /\$version/g, replacement: pkg.version}, - ], + {match: /\$version/g, replacement: pkg.version} + ] }, links: { expand: true, flatten: true, src: [tempFolder + "/**/*.html"], - dest: currentVersionArchiveFolder + "/", + dest: currentVersionArchiveFolder + "/" }, index: { src: inputFolder + "/layout/index.html", - dest: currentVersionArchiveFolder + "/index.html", + dest: currentVersionArchiveFolder + "/index.html" }, commonjs: { expand: true, flatten: true, src: [inputFolder + "/layout/*.json"], - dest: currentVersionArchiveFolder, + dest: currentVersionArchiveFolder }, cdnjs: { src: "deploy/cdnjs-package.json", - dest: "../cdnjs/ajax/libs/mithril/package.json", - }, + dest: "../cdnjs/ajax/libs/mithril/package.json" + } }, copy: { style: { src: inputFolder + "/layout/style.css", - dest: currentVersionArchiveFolder + "/style.css", + dest: currentVersionArchiveFolder + "/style.css" }, pages: { src: inputFolder + "/layout/pages.json", - dest: currentVersionArchiveFolder + "/pages.json", + dest: currentVersionArchiveFolder + "/pages.json" }, lib: { expand: true, cwd: inputFolder + "/layout/lib/", src: "./**", - dest: currentVersionArchiveFolder + "/lib/", + dest: currentVersionArchiveFolder + "/lib/" }, tools: { expand: true, cwd: inputFolder + "/layout/tools/", src: "./**", - dest: currentVersionArchiveFolder + "/tools/", + dest: currentVersionArchiveFolder + "/tools/" }, comparisons: { expand: true, cwd: inputFolder + "/layout/comparisons/", src: "./**", - dest: currentVersionArchiveFolder + "/comparisons/", + dest: currentVersionArchiveFolder + "/comparisons/" }, unminified: { src: "mithril.js", - dest: currentVersionArchiveFolder + "/mithril.js", + dest: currentVersionArchiveFolder + "/mithril.js" }, minified: { src: "mithril.min.js", - dest: currentVersionArchiveFolder + "/mithril.min.js", + dest: currentVersionArchiveFolder + "/mithril.min.js" }, readme: { src: "README.md", - dest: currentVersionArchiveFolder + "/README.md", + dest: currentVersionArchiveFolder + "/README.md" }, map: { src: "mithril.min.js.map", - dest: currentVersionArchiveFolder + "/mithril.min.js.map", + dest: currentVersionArchiveFolder + "/mithril.min.js.map" }, typescript: { src: "mithril.d.ts", - dest: currentVersionArchiveFolder + "/mithril.d.ts", + dest: currentVersionArchiveFolder + "/mithril.d.ts" }, publish: { expand: true, cwd: currentVersionArchiveFolder, src: "./**", - dest: outputFolder, + dest: outputFolder }, archive: { expand: true, cwd: currentVersionArchiveFolder, src: "./**", - dest: outputFolder + "/archive/v" + pkg.version, - }, + dest: outputFolder + "/archive/v" + pkg.version + } }, "saucelabs-browsers": { @@ -246,7 +246,7 @@ module.exports = function (grunt) { // eslint-disable-line return version === "dev" || version === "beta" || +version >= 38 // The latest ESR version }) - }, + } }, chrome: { @@ -257,7 +257,7 @@ module.exports = function (grunt) { // eslint-disable-line return version === "dev" || version === "beta" || +version >= 41 }) - }, + } }, ie: { @@ -266,7 +266,7 @@ module.exports = function (grunt) { // eslint-disable-line return browser.browserName === "internet explorer" && !/2003/.test(browser.platform) }) - }, + } }, edge: { @@ -274,7 +274,7 @@ module.exports = function (grunt) { // eslint-disable-line return browsers.filter(function (browser) { return browser.browserName === "microsoftedge" }) - }, + } }, safari: { @@ -282,7 +282,7 @@ module.exports = function (grunt) { // eslint-disable-line return browsers.filter(function (browser) { return browser.browserName === "safari" }) - }, + } }, opera: { @@ -290,8 +290,8 @@ module.exports = function (grunt) { // eslint-disable-line return browsers.filter(function (browser) { return browser.browserName === "opera" }) - }, - }, + } + } }, saucelabs: { @@ -304,7 +304,7 @@ module.exports = function (grunt) { // eslint-disable-line urls: ["http://localhost:8000/test/index.html"], sauceConfig: { "record-video": false, - "record-screenshots": false, + "record-screenshots": false }, build: process.env.TRAVIS_JOB_ID, onTestComplete: function (result, callback) { @@ -313,13 +313,13 @@ module.exports = function (grunt) { // eslint-disable-line var url = [ "https://saucelabs.com/rest/v1", user, "jobs", - result.job_id, + result.job_id ].join("/") require("request").put({ url: url, auth: {user: user, pass: pass}, - json: {passed: result.passed}, + json: {passed: result.passed} }, function (error, response) { if (error) { return callback(error) @@ -332,24 +332,24 @@ module.exports = function (grunt) { // eslint-disable-line } }) }, - tunnelTimeout: 5, - }, - }, + tunnelTimeout: 5 + } + } }, connect: { server: { options: { port: 8888, - base: ".", - }, - }, + base: "." + } + } }, clean: { options: {force: true}, - generated: [tempFolder], - }, + generated: [tempFolder] + } }) grunt.loadNpmTasks("grunt-saucelabs-browsers") @@ -371,7 +371,7 @@ module.exports = function (grunt) { // eslint-disable-line "md2html", "replace", "copy", - "clean", + "clean" ]) grunt.registerTask("test", ["eslint:all", "mocha_phantomjs"]) @@ -380,6 +380,6 @@ module.exports = function (grunt) { // eslint-disable-line grunt.registerTask("sauce", [ "saucelabs-browsers:all", "connect", - "saucelabs", + "saucelabs" ]) } diff --git a/docs/layout/tools/template-converter.js b/docs/layout/tools/template-converter.js index 34323507..55217ba3 100644 --- a/docs/layout/tools/template-converter.js +++ b/docs/layout/tools/template-converter.js @@ -14,7 +14,7 @@ window.templateConverter = (function () { return [ new DOMParser() .parseFromString(markup, "text/html") - .childNodes[1], + .childNodes[1] ] } @@ -39,7 +39,7 @@ window.templateConverter = (function () { list.push({ tag: el.nodeName.toLowerCase(), attrs: attrs, - children: createVirtual(el.childNodes), + children: createVirtual(el.childNodes) }) } }) @@ -115,7 +115,7 @@ window.templateConverter = (function () { var body = this.virtuals.join("," + tab) return "[" + tab + body + tab.slice(0, -1) + "]" } - }, + } } return { @@ -134,12 +134,12 @@ window.templateConverter = (function () { m("textarea", { autofocus: true, style: {width: "100%", height: "40%"}, - onchange: m.withAttr("value", ctrl.source), + onchange: m.withAttr("value", ctrl.source) }, ctrl.source()), m("button", {onclick: ctrl.convert}, "Convert"), m("textarea", {style: {width: "100%", height: "40%"}}, - ctrl.output()), + ctrl.output()) ]) - }, + } } })() diff --git a/mithril.js b/mithril.js index bb92d6fd..9a70070c 100644 --- a/mithril.js +++ b/mithril.js @@ -231,7 +231,7 @@ void (function (global, factory) { // eslint-disable-line index: i, from: existing[key].index, element: cached.nodes[existing[key].index] || - $document.createElement("div"), + $document.createElement("div") } } else { existing[key] = {action: INSERTION, index: i} @@ -263,7 +263,7 @@ void (function (global, factory) { // eslint-disable-line insertNode(parent, dummy, index) newCached.splice(index, 0, { attrs: {key: data[index].attrs.key}, - nodes: [dummy], + nodes: [dummy] }) newCached.nodes[index] = dummy break @@ -694,7 +694,7 @@ void (function (global, factory) { // eslint-disable-line tag: data.tag, attrs: attrs, children: children, - nodes: [node], + nodes: [node] } unloadCachedControllers(cached, views, controllers) @@ -732,7 +732,7 @@ void (function (global, factory) { // eslint-disable-line if (controller.onunload != null) { unloaders.push({ controller: controller, - handler: controller.onunload, + handler: controller.onunload }) } @@ -1133,7 +1133,7 @@ void (function (global, factory) { // eslint-disable-line this.appendChild(node) }, - childNodes: [], + childNodes: [] } var nodeCache = [] @@ -1296,7 +1296,7 @@ void (function (global, factory) { // eslint-disable-line preventDefault: function () { isPrevented = true computePreRedrawHook = computePostRedrawHook = null - }, + } } forEach(unloaders, function (unloader) { @@ -1434,7 +1434,7 @@ void (function (global, factory) { // eslint-disable-line var modes = { pathname: "", hash: "#", - search: "?", + search: "?" } var redirect = noop @@ -1955,8 +1955,8 @@ void (function (global, factory) { // eslint-disable-line options.onload({ type: "load", target: { - responseText: resp, - }, + responseText: resp + } }) window[callbackKey] = undefined @@ -1969,8 +1969,8 @@ void (function (global, factory) { // eslint-disable-line type: "error", target: { status: 500, - responseText: '{"error": "Error making jsonp request"}', - }, + responseText: '{"error": "Error making jsonp request"}' + } }) window[callbackKey] = undefined diff --git a/test-deps/mock.js b/test-deps/mock.js index 21a0bc9c..239af53c 100644 --- a/test-deps/mock.js +++ b/test-deps/mock.js @@ -49,7 +49,7 @@ this.mock = (function (global) { // the browser. Still waiting on mocha-phantomjs to update to be // compatible with PhantomJS 2.x. phantom: global.window && global.window.navigator && - /PhantomJS/.test(global.window.navigator.userAgent), + /PhantomJS/.test(global.window.navigator.userAgent) } var document = window.document = { @@ -102,7 +102,7 @@ this.mock = (function (global) { }, addEventListener: function () {}, - removeEventListener: function () {}, + removeEventListener: function () {} } }, @@ -156,7 +156,7 @@ this.mock = (function (global) { traverse(document) return out - }, + } } document.documentElement = document.createElement("html") @@ -182,7 +182,7 @@ this.mock = (function (global) { indices[id] = callbacks.length callbacks.push({ callback: callback, - id: id, + id: id }) return id } @@ -258,7 +258,7 @@ this.mock = (function (global) { replaceState: function (data, title, url) { location.pathname = location.search = location.hash = url - }, + } } return window diff --git a/test/index.html b/test/index.html index b4ca2f5c..6880ccfe 100644 --- a/test/index.html +++ b/test/index.html @@ -67,7 +67,7 @@ runner.on('fail', function (test, err) { result: false, message: err.message, stack: err.stack, - titles: flattenTitles(test), + titles: flattenTitles(test) }) }) diff --git a/test/input-cursor.html b/test/input-cursor.html index 71ee843e..f291b302 100644 --- a/test/input-cursor.html +++ b/test/input-cursor.html @@ -20,7 +20,7 @@ function test(sel) { return m("li", [ m("p", m("code", "m(" + JSON.stringify(sel) + ")")), - m.apply(null, arguments), + m.apply(null, arguments) ]) } @@ -35,18 +35,18 @@ m.module(document.getElementById("test"), { m("ul", [ test("input[list=data]", { onkeyup: m.withAttr("value", ctrl.title), - value: ctrl.title(), + value: ctrl.title() }), test("datalist#data", [ m("option", "John"), m("option", "Bob"), - m("option", "Mary"), + m("option", "Mary") ]), test("textarea", { onkeyup: m.withAttr("value", ctrl.title), - value: ctrl.title(), + value: ctrl.title() }), m("li", [ @@ -55,7 +55,7 @@ m.module(document.getElementById("test"), { m("div[contenteditable]", { style: {border: "1px solid #888"}, onkeyup: m.withAttr("innerHTML", ctrl.title) - }, ctrl.title()), + }, ctrl.title()) ]), m("li", [ @@ -63,11 +63,11 @@ m.module(document.getElementById("test"), { m("code", "m(\"div[contenteditable]\")")), m("div[contenteditable]", { style: {border: "1px solid #888"}, - onkeyup: m.withAttr("innerHTML", ctrl.title), - }, m.trust(ctrl.title())), - ]), - ]), + onkeyup: m.withAttr("innerHTML", ctrl.title) + }, m.trust(ctrl.title())) + ]) + ]) ]) - }, + } }) diff --git a/test/mithril.js b/test/mithril.js index 37b618d6..bf86f972 100644 --- a/test/mithril.js +++ b/test/mithril.js @@ -202,7 +202,7 @@ describe("m()", function () { controller: spy, view: function () { return m("div", "testing") - }, + } } var args = {age: 12} diff --git a/test/mithril.mount.js b/test/mithril.mount.js index 5c7803e1..fa68d11f 100644 --- a/test/mithril.mount.js +++ b/test/mithril.mount.js @@ -22,7 +22,7 @@ describe("m.mount()", function () { function pure(view) { return { controller: function () {}, - view: view, + view: view } } @@ -38,7 +38,7 @@ describe("m.mount()", function () { return [ whatever % 2 ? m("span", "% 2") : undefined, m("div", "bugs"), - m("a"), + m("a") ] }) @@ -64,7 +64,7 @@ describe("m.mount()", function () { var mod1 = m.mount(root1, { controller: controller1, - view: view1, + view: view1 }) var controller2 = sinon.spy(function () { this.value = "test2" }) // eslint-disable-line @@ -73,7 +73,7 @@ describe("m.mount()", function () { var mod2 = mount(root2, { controller: controller2, - view: view2, + view: view2 }) expect(controller1).to.have.been.called @@ -97,7 +97,7 @@ describe("m.mount()", function () { controller: function () { this.onunload = spy }, - view: function () {}, + view: function () {} }) clear(root) @@ -114,7 +114,7 @@ describe("m.mount()", function () { var component = { controller: ctrlSpy, - view: viewSpy, + view: viewSpy } var arg = {} @@ -148,7 +148,7 @@ describe("m.mount()", function () { var sub = { controller: ctrlSpy, - view: viewSpy, + view: viewSpy } mount(root, pure(function () { return sub })) @@ -168,7 +168,7 @@ describe("m.mount()", function () { var subsub = { controller: ctrl1, - view: view1, + view: view1 } var ctrl2 = sinon.spy() @@ -176,7 +176,7 @@ describe("m.mount()", function () { var sub = { controller: ctrl2, - view: view2, + view: view2 } mount(root, pure(function () { return sub })) @@ -326,7 +326,7 @@ describe("m.mount()", function () { }, view: function () { return m("div") - }, + } } mount(root, pure(function () { @@ -358,7 +358,7 @@ describe("m.mount()", function () { }, view: function () { return m("div") - }, + } } var sub = { @@ -367,7 +367,7 @@ describe("m.mount()", function () { }, view: function (ctrl, opts) { return m.component(subsub, {key: opts.key}) - }, + } } mount(root, pure(function () { @@ -400,7 +400,7 @@ describe("m.mount()", function () { controller: function () { m.redraw() }, - view: spy, + view: spy } mount(root, pure(function () { return sub })) @@ -418,7 +418,7 @@ describe("m.mount()", function () { controller: function () { m.redraw() }, - view: spy, + view: spy } var sub = pure(function () { return subsub }) @@ -439,14 +439,14 @@ describe("m.mount()", function () { var CommentList = pure(function (ctrl, props) { return m(".list", props.list.map(function (i) { return m(".comment", [ - m.component(Reply, {key: i}), + m.component(Reply, {key: i}) ]) })) }) mount(root, pure(function () { return m(".outer", [ - m(".inner", m.component(CommentList, {list: [1, 2, 3]})), + m(".inner", m.component(CommentList, {list: [1, 2, 3]})) ]) })) @@ -461,7 +461,7 @@ describe("m.mount()", function () { controller: function () { this.onunload = spy }, - view: function () {}, + view: function () {} }) m.mount(root, pure(function () {})) @@ -479,7 +479,7 @@ describe("m.mount()", function () { return m("div", { config: function (el, init) { if (init) count += 1 - }, + } }) })) @@ -505,9 +505,9 @@ describe("m.mount()", function () { m(".foo", { key: 1, config: test, - onclick: function () { show = !show }, + onclick: function () { show = !show } }), - show ? m(".bar", {key: 2}) : null, + show ? m(".bar", {key: 2}) : null ] })) @@ -529,9 +529,9 @@ describe("m.mount()", function () { mount(root, pure(function () { return show ? [ m("h1", "1"), - sub, + sub ] : [ - m("h1", "2"), + m("h1", "2") ] })) @@ -560,10 +560,10 @@ describe("m.mount()", function () { a = !a m.redraw(true) found = root.childNodes[0].childNodes[1] - }, + } }, "asd"), a ? m("#a", "aaa") : null, - "test", + "test" ]) }) @@ -572,7 +572,7 @@ describe("m.mount()", function () { config: function (el, init, ctx) { if (!init) ctx.onunload = onunload - }, + } } m.mount(root, pure(function () { return Comp })) @@ -602,10 +602,10 @@ describe("m.mount()", function () { m.redraw(true) found = root.childNodes[0].childNodes[1] m.redraw.strategy("none") - }, + } }, "asd"), a ? m("#a", "aaa") : null, - "test", + "test" ]) }) @@ -614,7 +614,7 @@ describe("m.mount()", function () { config: function (el, init, ctx) { if (!init) ctx.onunload = onunload - }, + } } m.mount(root, pure(function () { return Comp })) @@ -634,7 +634,7 @@ describe("m.mount()", function () { var root = mock.document.createElement("div") var view = sinon.stub().returns(m("div", { - onclick: function () { m.redraw(true) }, + onclick: function () { m.redraw(true) } })) m.mount(root, pure(view)) @@ -666,7 +666,7 @@ describe("m.mount()", function () { this.foo = m.request({method: "GET", url: "/foo"}) }, - view: view, + view: view } mount(root, pure(function () { return Comp })) @@ -691,20 +691,20 @@ describe("m.mount()", function () { controller: function () { this.foo = m.request({method: "GET", url: "/foo"}) }, - view: view1, + view: view1 } var Comp2 = { controller: function () { this.bar = m.request({method: "GET", url: "/bar"}) }, - view: view2, + view: view2 } mount(root, pure(function () { return m("div", [ Comp1, - Comp2, + Comp2 ]) })) @@ -751,7 +751,7 @@ describe("m.mount()", function () { return m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - }, + } }) }) @@ -794,9 +794,9 @@ describe("m.mount()", function () { ctrl.bar = true m.redraw(true) el = root.childNodes[0].childNodes[1] - }, + } }, "click me"), - ctrl.bar ? m.component(sub) : "", + ctrl.bar ? m.component(sub) : "" ]) })) diff --git a/test/mithril.redraw.js b/test/mithril.redraw.js index a6efe643..ada5b196 100644 --- a/test/mithril.redraw.js +++ b/test/mithril.redraw.js @@ -15,7 +15,7 @@ describe("m.redraw()", function () { m.mount(root, { controller: function () { ctx = this }, // eslint-disable-line - view: function (ctrl) { return ctrl.value }, + view: function (ctrl) { return ctrl.value } }) mock.requestAnimationFrame.$resolve() @@ -38,7 +38,7 @@ describe("m.redraw()", function () { m.mount(root, { controller: function () {}, - view: view, + view: view }) mock.requestAnimationFrame.$resolve() // teardown m.redraw() @@ -57,7 +57,7 @@ describe("m.redraw()", function () { var view = sinon.spy() m.mount(root, { controller: function () {}, - view: view, + view: view }) mock.requestAnimationFrame.$resolve() // teardown m.redraw(true) @@ -88,7 +88,7 @@ describe("m.redraw()", function () { function pure(view) { return { controller: noop, - view: view, + view: view } } @@ -138,8 +138,8 @@ describe("m.redraw()", function () { }, view: function () { return m("div") - }, - }, + } + } }) expect(strategy).to.equal("all") @@ -164,8 +164,8 @@ describe("m.redraw()", function () { }, view: function () { return m("div", {config: config}) - }, - }, + } + } }) route("/bar1") @@ -185,10 +185,10 @@ describe("m.redraw()", function () { strategy = m.redraw.strategy() ctrl.number++ m.redraw.strategy("none") - }, + } }, ctrl.number) - }, - }, + } + } }) root.childNodes[0].onclick({}) mock.requestAnimationFrame.$resolve() @@ -211,9 +211,9 @@ describe("m.redraw()", function () { config: config, onclick: function () { m.redraw.strategy("all") - }, + } }) - }), + }) }) root.childNodes[0].onclick({}) mock.requestAnimationFrame.$resolve() diff --git a/test/mithril.render.js b/test/mithril.render.js index bd6c6096..ec6ba1ce 100644 --- a/test/mithril.render.js +++ b/test/mithril.render.js @@ -62,7 +62,7 @@ describe("m.render()", function () { m.render(root, m("svg", [m("g")])) expect(root.childNodes[0].childNodes[0]).to.contain.all.keys({ nodeName: "G", - namespaceURI: "http://www.w3.org/2000/svg", + namespaceURI: "http://www.w3.org/2000/svg" }) }) @@ -237,7 +237,7 @@ describe("m.render()", function () { m.render(root, m("#foo", [ [m("div", "a"), m("div", "b")], [m("div", "c"), m("div", "d")], - m("#bar"), + m("#bar") ])) expect(root.childNodes[0].childNodes[3].childNodes[0].nodeValue) @@ -269,7 +269,7 @@ describe("m.render()", function () { ["a", "b", "c", "d"].map(function () { return [m("div"), " "] }), - m("span"), + m("span") ])) expect(root.childNodes[0].childNodes[8].nodeName).to.equal("SPAN") }) @@ -282,7 +282,7 @@ describe("m.render()", function () { m.render(root, m("#foo", [ [m("div", "a"), m("div", "b"), m("div", "c")], - m("#bar"), + m("#bar") ])) expect(root.childNodes[0].childNodes[2].childNodes[0].nodeValue) @@ -295,12 +295,12 @@ describe("m.render()", function () { m.render(root, m("main", [ m("button"), - m("article", [m("section"), m("nav")]), + m("article", [m("section"), m("nav")]) ])) m.render(root, m("main", [ m("button"), - m("article", [m("span"), m("nav")]), + m("article", [m("span"), m("nav")]) ])) expect(root.childNodes[0].childNodes[1].childNodes[0].nodeName) @@ -313,12 +313,12 @@ describe("m.render()", function () { m.render(root, m("main", [ m("button"), - m("article", [m("section"), m("nav")]), + m("article", [m("section"), m("nav")]) ])) m.render(root, m("main", [ m("button"), - m("article", ["test", m("nav")]), + m("article", ["test", m("nav")]) ])) expect(root.childNodes[0].childNodes[1].childNodes[0].nodeValue) @@ -331,12 +331,12 @@ describe("m.render()", function () { m.render(root, m("main", [ m("button"), - m("article", [m("section"), m("nav")]), + m("article", [m("section"), m("nav")]) ])) m.render(root, m("main", [ m("button"), - m("article", [m.trust("test"), m("nav")]), + m("article", [m.trust("test"), m("nav")]) ])) expect(root.childNodes[0].childNodes[1].childNodes[0].nodeValue) @@ -550,7 +550,7 @@ describe("m.render()", function () { var config = sinon.spy() m.render(root, m("div", { - config: function (el, init, ctx) { ctx.data = 1 }, + config: function (el, init, ctx) { ctx.data = 1 } })) m.render(root, m("div", {config: config})) @@ -564,7 +564,7 @@ describe("m.render()", function () { var index = 0 var node = m("div", { - config: function (el, init, ctx) { ctx.data = index++ }, + config: function (el, init, ctx) { ctx.data = index++ } }) m.render(root, [node, node]) @@ -604,7 +604,7 @@ describe("m.render()", function () { m.render(root, m("div", [ ["foo", "bar"], ["foo", "bar"], - ["foo", "bar"], + ["foo", "bar"] ])) m.render(root, m("div", ["asdf", "asdf2", "asdf3"])) @@ -619,7 +619,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 1}, 1), m("a", {key: 2}, 2), - m("a", {key: 3}, 3), + m("a", {key: 3}, 3) ]) var firstBefore = root.childNodes[0] @@ -628,7 +628,7 @@ describe("m.render()", function () { m("a", {key: 4}, 4), m("a", {key: 1}, 1), m("a", {key: 2}, 2), - m("a", {key: 3}, 3), + m("a", {key: 3}, 3) ]) var firstAfter = root.childNodes[1] @@ -648,7 +648,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 1}, 1), m("a", {key: 2}, 2), - m("a", {key: 3}, 3), + m("a", {key: 3}, 3) ]) var firstBefore = root.childNodes[0] @@ -656,7 +656,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 4}, 4), m("a", {key: 1}, 1), - m("a", {key: 2}, 2), + m("a", {key: 2}, 2) ]) var firstAfter = root.childNodes[1] @@ -676,7 +676,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 1}, 1), m("a", {key: 2}, 2), - m("a", {key: 3}, 3), + m("a", {key: 3}, 3) ]) var firstBefore = root.childNodes[1] @@ -684,7 +684,7 @@ describe("m.render()", function () { m.render(root, [ m("a", {key: 2}, 2), m("a", {key: 3}, 3), - m("a", {key: 4}, 4), + m("a", {key: 4}, 4) ]) var firstAfter = root.childNodes[0] @@ -706,7 +706,7 @@ describe("m.render()", function () { m("a", {key: 2}, 2), m("a", {key: 3}, 3), m("a", {key: 4}, 4), - m("a", {key: 5}, 5), + m("a", {key: 5}, 5) ]) var firstBefore = root.childNodes[0] @@ -717,7 +717,7 @@ describe("m.render()", function () { m("a", {key: 4}, 4), m("a", {key: 10}, 10), m("a", {key: 1}, 1), - m("a", {key: 2}, 2), + m("a", {key: 2}, 2) ]) var firstAfter = root.childNodes[2] @@ -740,7 +740,7 @@ describe("m.render()", function () { m("a", {key: 2}, 2), m("a", {key: 3}, 3), m("a", {key: 4}, 4), - m("a", {key: 5}, 5), + m("a", {key: 5}, 5) ]) var firstBefore = root.childNodes[0] @@ -753,7 +753,7 @@ describe("m.render()", function () { m("a", {key: 2}, 2), m("a", {key: 1}, 1), m("a", {key: 6}, 6), - m("a", {key: 7}, 7), + m("a", {key: 7}, 7) ]) var firstAfter = root.childNodes[3] @@ -780,7 +780,7 @@ describe("m.render()", function () { m("a", {key: 2}), m("a"), m("a", {key: 4}), - m("a", {key: 5}), + m("a", {key: 5}) ]) var firstBefore = root.childNodes[0] @@ -794,7 +794,7 @@ describe("m.render()", function () { m("a", {key: 5}), m("a"), m("a", {key: 1}), - m("a", {key: 2}), + m("a", {key: 2}) ]) var firstAfter = root.childNodes[3] @@ -848,8 +848,8 @@ describe("m.render()", function () { key: 1, config: function (el, init, ctx) { ctx.onunload = spy - }, - }), + } + }) ]) m.render(root, [ m("div", {key: 2}), @@ -857,8 +857,8 @@ describe("m.render()", function () { key: 1, config: function (el, init, ctx) { ctx.onunload = spy - }, - }), + } + }) ]) expect(spy).to.not.have.been.called }) @@ -917,7 +917,7 @@ describe("m.render()", function () { m.render(root, m("ul", [ m("li", {key: 0}, 0), m("li", {key: 2}, 2), - m("li", {key: 4}, 4), + m("li", {key: 4}, 4) ])) m.render(root, m("ul", [ @@ -926,7 +926,7 @@ describe("m.render()", function () { m("li", {key: 2}, 2), m("li", {key: 3}, 3), m("li", {key: 4}, 4), - m("li", {key: 5}, 5), + m("li", {key: 5}, 5) ])) expect( @@ -962,7 +962,7 @@ describe("m.render()", function () { m("li", {key: 2}, 2), m("li", {key: 3}, 3), m("li", {key: 4}, 4), - m("li", {key: 5}, 5), + m("li", {key: 5}, 5) ])) m.render(root, m("ul", [ @@ -970,7 +970,7 @@ describe("m.render()", function () { m("li", {key: 1}, 1), m("li", {key: 2}, 2), m("li", {key: 4}, 4), - m("li", {key: 5}, 5), + m("li", {key: 5}, 5) ])) expect( @@ -990,7 +990,7 @@ describe("m.render()", function () { m("li", {key: 2}, 2), m("li", {key: 3}, 3), m("li", {key: 4}, 4), - m("li", {key: 5}, 5), + m("li", {key: 5}, 5) ])) m.render(root, m("ul", [ @@ -999,7 +999,7 @@ describe("m.render()", function () { m("li", {key: 3}, 3), m("li", {key: 4}, 4), m("li", {key: 5}, 5), - m("li", {key: 6}, 6), + m("li", {key: 6}, 6) ])) m.render(root, m("ul", [ @@ -1008,7 +1008,7 @@ describe("m.render()", function () { m("li", {key: 14}, 14), m("li", {key: 15}, 15), m("li", {key: 16}, 16), - m("li", {key: 17}, 17), + m("li", {key: 17}, 17) ])) expect( @@ -1044,7 +1044,7 @@ describe("m.render()", function () { m.render(root, [m("div", { config: function (el, init, ctx) { ctx.onunload = onunload1 - }, + } })]) m.render(root, []) @@ -1052,7 +1052,7 @@ describe("m.render()", function () { m.render(root, [m("div", { config: function (el, init, ctx) { ctx.onunload = onunload2 - }, + } })]) m.render(root, []) @@ -1068,7 +1068,7 @@ describe("m.render()", function () { m.render(root, [ m("div.green", [m("div")]), - m("div.blue"), + m("div.blue") ]) expect(root.childNodes).to.have.length(2) @@ -1102,7 +1102,7 @@ describe("m.render()", function () { m("div", {key: 3}, 3), m("div", {key: 4}, 4), m("div", {key: 5}, 5), - null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null ])) m.render(root, m("div", [ @@ -1115,7 +1115,7 @@ describe("m.render()", function () { null, null, m("div", {key: 12}, 12), null, null, - m("div", {key: 15}, 15), + m("div", {key: 15}, 15) ])) m.render(root, m("div", [ @@ -1124,7 +1124,7 @@ describe("m.render()", function () { m("div", {key: 3}, 3), m("div", {key: 4}, 4), m("div", {key: 5}, 5), - null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null ])) expect( @@ -1145,9 +1145,9 @@ describe("m.render()", function () { [ m("div", {key: 3}, 3), m("div", {key: 4}, 4), - m("div", {key: 5}, 5), + m("div", {key: 5}, 5) ], - [m("div", {key: 6}, 6)], + [m("div", {key: 6}, 6)] ])) m.render(root, m("div", [ @@ -1156,9 +1156,9 @@ describe("m.render()", function () { [ m("div", {key: 3}, 3), m("div", {key: 4}, 4), - m("div", {key: 5}, 5), + m("div", {key: 5}, 5) ], - [m("div", {key: 6}, 6)], + [m("div", {key: 6}, 6)] ])) expect( @@ -1183,7 +1183,7 @@ describe("m.render()", function () { m.render(root, [ m("#div-1", {key: 1}), m("#div-2", {key: 2}), - m("#div-3", {key: 3}), + m("#div-3", {key: 3}) ]) root.appendChild(root.childNodes[1]) @@ -1191,7 +1191,7 @@ describe("m.render()", function () { m.render(root, [ m("#div-1", {key: 1}), m("#div-3", {key: 3}), - m("#div-2", {key: 2}), + m("#div-2", {key: 2}) ]) expect( @@ -1228,7 +1228,7 @@ describe("m.render()", function () { m("a", {key: 1}), m("a", {key: 2}), m("a", {key: 3}), - m("i"), + m("i") ])) var before = root.childNodes[0].childNodes[3] @@ -1236,7 +1236,7 @@ describe("m.render()", function () { m("b", {key: 3}), m("b", {key: 4}), m("i"), - m("b", {key: 1}), + m("b", {key: 1}) ])) var after = root.childNodes[0].childNodes[2] @@ -1251,7 +1251,7 @@ describe("m.render()", function () { m("a", {key: 2}), "foo", m("a", {key: 3}), - m("i"), + m("i") ])) var before = root.childNodes[0].childNodes[4] @@ -1260,7 +1260,7 @@ describe("m.render()", function () { m("a", {key: 4}), "bar", m("i"), - m("a", {key: 1}), + m("a", {key: 1}) ])) var after = root.childNodes[0].childNodes[3] @@ -1275,7 +1275,7 @@ describe("m.render()", function () { m("a", {key: 2}), null, m("a", {key: 3}), - m("i"), + m("i") ])) var before = root.childNodes[0].childNodes[4] @@ -1284,7 +1284,7 @@ describe("m.render()", function () { m("a", {key: 4}), null, m("i"), - m("a", {key: 1}), + m("a", {key: 1}) ])) var after = root.childNodes[0].childNodes[3] @@ -1299,7 +1299,7 @@ describe("m.render()", function () { m("a", {key: 2}), undefined, m("a", {key: 3}), - m("i"), + m("i") ])) var before = root.childNodes[0].childNodes[4] @@ -1308,7 +1308,7 @@ describe("m.render()", function () { m("a", {key: 4}), undefined, m("i"), - m("a", {key: 1}), + m("a", {key: 1}) ])) var after = root.childNodes[0].childNodes[3] @@ -1325,7 +1325,7 @@ describe("m.render()", function () { m("a", {key: 2}), m.trust("a"), m("a", {key: 3}), - m("i"), + m("i") ])) var before = root.childNodes[0].childNodes[4] @@ -1334,7 +1334,7 @@ describe("m.render()", function () { m("a", {key: 4}), m.trust("a"), m("i"), - m("a", {key: 1}), + m("a", {key: 1}) ])) var after = root.childNodes[0].childNodes[3] @@ -1360,7 +1360,7 @@ describe("m.render()", function () { m.render(root, m("div", {}, [ m("div", {}, "0"), m("div", {}, "1"), - m("div", {}, "2"), + m("div", {}, "2") ])) expect( @@ -1370,7 +1370,7 @@ describe("m.render()", function () { ).to.eql(["0", "1", "2"]) m.render(root, m("div", {}, [ - m("div", {}, "0"), + m("div", {}, "0") ])) expect( @@ -1385,7 +1385,7 @@ describe("m.render()", function () { m.render(root, m("span", {}, [ m("div", {}, "0"), m("div", {}, "1"), - m("div", {}, "2"), + m("div", {}, "2") ])) expect( @@ -1395,7 +1395,7 @@ describe("m.render()", function () { ).to.eql(["0", "1", "2"]) m.render(root, m("span", {}, [ - m("div", {}, "0"), + m("div", {}, "0") ])) expect( @@ -1420,9 +1420,9 @@ describe("m.render()", function () { view: function (ctrl) { return m("input", { value: ctrl.inputValue(), - onkeyup: m.withAttr("value", ctrl.inputValue), + onkeyup: m.withAttr("value", ctrl.inputValue) }) - }, + } }) mock.requestAnimationFrame.$resolve() @@ -1466,11 +1466,11 @@ describe("m.render()", function () { return m("form", {onsubmit: ctrl.submit}, [ m("input", { onkeyup: m.withAttr("value", ctrl.inputValue), - value: ctrl.inputValue(), + value: ctrl.inputValue() }), - m("button[type=submit]"), + m("button[type=submit]") ]) - }, + } }) var form = root.childNodes[0] @@ -1511,7 +1511,7 @@ describe("m.render()", function () { view: function (ctrl) { return m("select", { size: ctrl.values.length, - multiple: "multiple", + multiple: "multiple" }, [ ctrl.values.map(function (v) { var opts = {value: v} @@ -1519,9 +1519,9 @@ describe("m.render()", function () { opts.selected = "selected" } return m("option", opts, v) - }), + }) ]) - }, + } }) mock.requestAnimationFrame.$resolve() diff --git a/test/mithril.request.js b/test/mithril.request.js index e2409959..fd8ab1f4 100644 --- a/test/mithril.request.js +++ b/test/mithril.request.js @@ -21,12 +21,12 @@ describe("m.request()", function () { it("sets the correct properties on `GET`", function () { var prop = request({ method: "GET", - url: "test", + url: "test" }) expect(prop()).to.contain.keys({ method: "GET", - url: "test", + url: "test" }) }) @@ -49,12 +49,12 @@ describe("m.request()", function () { var prop = request({ method: "POST", url: "http://domain.com:80", - data: {}, + data: {} }) expect(prop()).to.contain.keys({ method: "POST", - url: "http://domain.com:80", + url: "http://domain.com:80" }) }) @@ -62,7 +62,7 @@ describe("m.request()", function () { expect(request({ method: "POST", url: "http://domain.com:80/:test1", - data: {test1: "foo"}, + data: {test1: "foo"} })().url).to.equal("http://domain.com:80/foo") }) @@ -72,7 +72,7 @@ describe("m.request()", function () { var prop = m.request({ method: "GET", url: "test", - deserialize: function () { throw new Error("error occurred") }, + deserialize: function () { throw new Error("error occurred") } }).then(null, error) resolve() @@ -86,7 +86,7 @@ describe("m.request()", function () { var prop = m.request({ method: "GET", url: "test", - deserialize: function () { throw new Error("error occurred") }, + deserialize: function () { throw new Error("error occurred") } }).catch(error) resolve() @@ -99,7 +99,7 @@ describe("m.request()", function () { var data = m.prop() var prop = m.request({ method: "GET", - url: "test", + url: "test" }) .then(function () { return "foo" }) .finally(data) @@ -142,7 +142,7 @@ describe("m.request()", function () { var prop = m.request({ method: "GET", url: "test", - deserialize: function () { throw new Error("error occurred") }, + deserialize: function () { throw new Error("error occurred") } }) .catch(error) .finally(function () { error("finally") }) @@ -158,7 +158,7 @@ describe("m.request()", function () { var prop = m.request({ method: "GET", url: "test", - deserialize: function () { throw new TypeError("error occurred") }, + deserialize: function () { throw new TypeError("error occurred") } }).then(null, error) try { @@ -178,7 +178,7 @@ describe("m.request()", function () { m.request({ method: "POST", url: "test", - data: {foo: 1}, + data: {foo: 1} }).then(null, error) var xhr = mock.XMLHttpRequest.$instances.pop() @@ -194,7 +194,7 @@ describe("m.request()", function () { m.request({ method: "POST", - url: "test", + url: "test" }).then(null, error) var xhr = mock.XMLHttpRequest.$instances.pop() @@ -207,7 +207,7 @@ describe("m.request()", function () { var prop = m.request({ method: "POST", url: "test", - initialValue: "foo", + initialValue: "foo" }) var initialValue = prop() @@ -220,7 +220,7 @@ describe("m.request()", function () { var prop = m.request({ method: "POST", url: "test", - initialValue: "foo", + initialValue: "foo" }).then(function (value) { return value }) var initialValue = prop() @@ -233,7 +233,7 @@ describe("m.request()", function () { var prop = m.request({ method: "POST", url: "test", - initialValue: "foo", + initialValue: "foo" }).then(function () { return "bar" }) resolve() @@ -290,7 +290,7 @@ describe("m.request()", function () { url: "/test", dataType: "jsonp", data: data, - callbackKey: callbackKey, + callbackKey: callbackKey }) } diff --git a/test/mithril.route.buildQueryString.js b/test/mithril.route.buildQueryString.js index f8c2e159..bd53ad5e 100644 --- a/test/mithril.route.buildQueryString.js +++ b/test/mithril.route.buildQueryString.js @@ -15,11 +15,11 @@ describe("m.route.buildQueryString()", function () { foo: "bar", hello: ["world", "mars", "mars"], world: { - test: 3, + test: 3 }, bam: "", yup: null, - removed: undefined, + removed: undefined }) ).to.equal("foo=bar&hello=world&hello=mars&world%5Btest%5D=3&bam=&yup") }) diff --git a/test/mithril.route.js b/test/mithril.route.js index f130c279..b252267d 100644 --- a/test/mithril.route.js +++ b/test/mithril.route.js @@ -13,7 +13,7 @@ describe("m.route()", function () { var types = { search: "?", hash: "#", - pathname: "/", + pathname: "/" } return function (type) { @@ -32,7 +32,7 @@ describe("m.route()", function () { function pure(view) { return { controller: noop, - view: view, + view: view } } @@ -74,7 +74,7 @@ describe("m.route()", function () { mode("search") route(root, "/test1", { - "/test1": pure(function () { return "foo" }), + "/test1": pure(function () { return "foo" }) }) expect(mock.location.search).to.equal("?/test1") @@ -88,12 +88,12 @@ describe("m.route()", function () { route(root, "/", { "/": { controller: function () { route1 = m.route() }, - view: noop, + view: noop }, "/test13": { controller: function () { route2 = m.route() }, - view: noop, - }, + view: noop + } }) m.route("/test13") @@ -113,7 +113,7 @@ describe("m.route()", function () { }, view: function () { return m("div") - }, + } } route(root, "/a", { @@ -121,8 +121,8 @@ describe("m.route()", function () { "/b": { controller: spy, - view: noop, - }, + view: noop + } }) route("/b") @@ -142,7 +142,7 @@ describe("m.route()", function () { }, view: function () { return m("div") - }, + } } var sub = pure(function () { return subsub }) @@ -152,8 +152,8 @@ describe("m.route()", function () { "/b": { controller: spy, - view: noop, - }, + view: noop + } }) route("/b") @@ -173,7 +173,7 @@ describe("m.route()", function () { }, view: function () { return m("div") - }, + } } route(root, "/a", { @@ -181,8 +181,8 @@ describe("m.route()", function () { "/b": { controller: spy, - view: noop, - }, + view: noop + } }) route("/b") @@ -202,7 +202,7 @@ describe("m.route()", function () { }, view: function () { return m("div") - }, + } } var sub = pure(function () { return subsub }) @@ -212,8 +212,8 @@ describe("m.route()", function () { "/b": { controller: spy, - view: noop, - }, + view: noop + } }) route("/b") @@ -229,26 +229,26 @@ describe("m.route()", function () { var sub1 = { controller: ctrl1, - view: function () { return m("div") }, + view: function () { return m("div") } } var sub2 = { controller: ctrl2, - view: function () { return m("div") }, + view: function () { return m("div") } } route(root, "/a", { "/a": pure(function () { return m(".page-a", [ - m("h1"), m.component(sub1, {x: 11}), + m("h1"), m.component(sub1, {x: 11}) ]) }), "/b": pure(function () { return m(".page-b", [ - m("h2"), m.component(sub2, {y: 22}), + m("h2"), m.component(sub2, {y: 22}) ]) - }), + }) }) route("/b") @@ -264,7 +264,7 @@ describe("m.route()", function () { var Component = pure(function () { return m(".comp") }) route(root, "/foo", { - "/foo": pure(function () { return [Component] }), + "/foo": pure(function () { return [Component] }) }) expect(root.childNodes[0].nodeName).to.equal("DIV") @@ -279,7 +279,7 @@ describe("m.route()", function () { view: function (ctrl) { return m("div", ctrl.name) - }, + } } route(root, "/", { @@ -287,7 +287,7 @@ describe("m.route()", function () { return m("div", [ m("a[href=/]", {config: m.route}, "foo"), m("a[href=/bar]", {config: m.route}, "bar"), - m.component(MyComponent, {name: "Jane"}), + m.component(MyComponent, {name: "Jane"}) ]) }), @@ -295,9 +295,9 @@ describe("m.route()", function () { return m("div", [ m("a[href=/]", {config: m.route}, "foo"), m("a[href=/bar]", {config: m.route}, "bar"), - m.component(MyComponent, {name: "Bob"}), + m.component(MyComponent, {name: "Bob"}) ]) - }), + }) }) route("/bar") @@ -313,9 +313,9 @@ describe("m.route()", function () { "/test2": pure(function () { return [ "foo", - m("a", {href: "/test2", config: m.route}, "Test2"), + m("a", {href: "/test2", config: m.route}, "Test2") ] - }), + }) }) expect(mock.location.pathname).to.equal("/test2") @@ -327,7 +327,7 @@ describe("m.route()", function () { mode("hash") route(root, "/test3", { - "/test3": pure(function () { return "foo" }), + "/test3": pure(function () { return "foo" }) }) expect(mock.location.hash).to.equal("#/test3") @@ -338,7 +338,7 @@ describe("m.route()", function () { mode("search") route(root, "/test4/foo", { - "/test4/:test": pure(function () { return m.route.param("test") }), + "/test4/:test": pure(function () { return m.route.param("test") }) }) expect(mock.location.search).to.equal("?/test4/foo") @@ -357,7 +357,7 @@ describe("m.route()", function () { m.route(root, "/test5/foo", { "/": component, - "/test5/:test": component, + "/test5/:test": component }) var paramValueBefore = m.route.param("test") @@ -381,7 +381,7 @@ describe("m.route()", function () { m.route(root, "/test6/foo", { "/": component, - "/test6/:a1": component, + "/test6/:a1": component }) var paramValueBefore = m.route.param("a1") @@ -406,7 +406,7 @@ describe("m.route()", function () { m.route(root, "/test7/foo", { "/": component, - "/test7/:a1": component, + "/test7/:a1": component }) var routeValueBefore = m.route() @@ -428,7 +428,7 @@ describe("m.route()", function () { route(root, "/test8/foo/SEP/bar/baz", { "/test8/:test/SEP/:path...": pure(function () { return m.route.param("test") + "_" + m.route.param("path") - }), + }) }) expect(mock.location.search).to.equal("?/test8/foo/SEP/bar/baz") @@ -441,7 +441,7 @@ describe("m.route()", function () { route(root, "/test9/foo/bar/SEP/baz", { "/test9/:test.../SEP/:path": pure(function () { return m.route.param("test") + "_" + m.route.param("path") - }), + }) }) expect(mock.location.search).to.equal("?/test9/foo/bar/SEP/baz") @@ -454,7 +454,7 @@ describe("m.route()", function () { route(root, "/test10/foo%20bar", { "/test10/:test": pure(function () { return m.route.param("test") - }), + }) }) expect(root.childNodes[0].nodeValue).to.equal("foo bar") @@ -465,7 +465,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(function () { return "foo" }), - "/test11": pure(function () { return "bar" }), + "/test11": pure(function () { return "bar" }) }) route("/test11/") @@ -479,7 +479,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(noop), - "/test12": pure(noop), + "/test12": pure(noop) }) route("/test12?a=foo&b=bar") @@ -496,7 +496,7 @@ describe("m.route()", function () { "/": pure(function () { return "bar" }), "/test13/:test": pure(function () { return m.route.param("test") - }), + }) }) route("/test13/foo?test=bar") @@ -510,7 +510,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(function () { return "bar" }), - "/test14": pure(function () { return "foo" }), + "/test14": pure(function () { return "foo" }) }) route("/test14?test&test2=") @@ -525,7 +525,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(noop), - "/test12": pure(noop), + "/test12": pure(noop) }) route("/test12", {a: "foo", b: "bar"}) @@ -540,7 +540,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(noop), - "/test12": pure(noop), + "/test12": pure(noop) }) route("/test12", {a: "foo", b: "bar"}) @@ -562,10 +562,10 @@ describe("m.route()", function () { return m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - }, + } }) }), - "/test14": pure(noop), + "/test14": pure(noop) }) route("/test14") @@ -585,11 +585,11 @@ describe("m.route()", function () { m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - }, - }), + } + }) ] }), - "/test15": pure(function () { return [m("div")] }), + "/test15": pure(function () { return [m("div")] }) }) route("/test15") @@ -607,10 +607,10 @@ describe("m.route()", function () { return m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - }, + } }) }), - "/test16": pure(function () { return m("a") }), + "/test16": pure(function () { return m("a") }) }) route("/test16") @@ -629,11 +629,11 @@ describe("m.route()", function () { m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - }, - }), + } + }) ] }), - "/test17": pure(function () { return m("a") }), + "/test17": pure(function () { return m("a") }) }) route("/test17") @@ -651,10 +651,10 @@ describe("m.route()", function () { return m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - }, + } }) }), - "/test18": pure(function () { return [m("a")] }), + "/test18": pure(function () { return [m("a")] }) }) route("/test18") @@ -674,8 +674,8 @@ describe("m.route()", function () { key: 1, config: function (el, init, ctx) { ctx.onunload = onunload - }, - }), + } + }) ] }), "/test20": pure(function () { @@ -684,10 +684,10 @@ describe("m.route()", function () { key: 2, config: function (el, init, ctx) { ctx.onunload = onunload - }, - }), + } + }) ] - }), + }) }) route("/test20") @@ -707,8 +707,8 @@ describe("m.route()", function () { key: 1, config: function (el, init, ctx) { ctx.onunload = onunload - }, - }), + } + }) ] }), "/test21": pure(function () { @@ -716,10 +716,10 @@ describe("m.route()", function () { m("div", { config: function (el, init, ctx) { ctx.onunload = onunload - }, - }), + } + }) ] - }), + }) }) route("/test21") @@ -732,7 +732,7 @@ describe("m.route()", function () { route(root, "/foo", { "/foo": pure(function () { return m("div", "foo") }), - "/bar": pure(function () { return m("div", "bar") }), + "/bar": pure(function () { return m("div", "bar") }) }) var foo = root.childNodes[0].childNodes[0].nodeValue @@ -757,7 +757,7 @@ describe("m.route()", function () { }), "/bar1": pure(function () { return m("main", m("a", {config: config}, "foo")) - }), + }) }) route("/bar1") @@ -774,8 +774,8 @@ describe("m.route()", function () { controller: function () { value = m.route.param("arg") }, view: function () { return "" - }, - }, + } + } }) expect(value).to.equal("foo+bar") }) @@ -785,7 +785,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(function () { return "foo" }), - "/test22": pure(function () { return "bar" }), + "/test22": pure(function () { return "bar" }) }) m.route("/test22/") @@ -799,7 +799,7 @@ describe("m.route()", function () { route(root, "/", { "/": pure(function () { return "foo" }), - "/test23": pure(function () { return "bar" }), + "/test23": pure(function () { return "bar" }) }) route(new String("/test23/")) // eslint-disable-line no-new-wrappers @@ -817,8 +817,8 @@ describe("m.route()", function () { controller: function () { value = m.route.param("arg") }, view: function () { return "" - }, - }, + } + } }) expect(value).to.equal("foo+bar") }) @@ -832,8 +832,8 @@ describe("m.route()", function () { controller: function () { value = m.route.param("arg") }, view: function () { return "" - }, - }, + } + } }) expect(value).to.equal("foo+bar") @@ -845,10 +845,10 @@ describe("m.route()", function () { route(root, "/a", { "/a": { controller: function () { m.route("/b") }, - view: function () { return "a" }, + view: function () { return "a" } }, - "/b": pure(function () { return "b" }), + "/b": pure(function () { return "b" }) }) expect(root.childNodes[0].nodeValue).to.equal("b") @@ -862,9 +862,9 @@ describe("m.route()", function () { controller: function () { m.route("/b?foo=1", {foo: 2}) }, - view: function () { return "a" }, + view: function () { return "a" } }, - "/b": pure(function () { return "b" }), + "/b": pure(function () { return "b" }) }) expect(mock.location.search).to.equal("?/b?foo=2") @@ -876,7 +876,7 @@ describe("m.route()", function () { route(root, "/a", { "/a": pure(function () { return "a" }), - "/b": pure(function () { return "b" }), + "/b": pure(function () { return "b" }) }) route("/b") @@ -890,7 +890,7 @@ describe("m.route()", function () { route(root, "/a", { "/a": pure(function () { return "a" }), - "/b": pure(function () { return "b" }), + "/b": pure(function () { return "b" }) }) route("/a") @@ -908,13 +908,13 @@ describe("m.route()", function () { return m("a", { config: function (el, init) { if (!init) initCount++ - }, + } }) }) route(root, "/a", { "/a": a, - "/b": pure(a.view), + "/b": pure(a.view) }) route("/b") @@ -931,13 +931,13 @@ describe("m.route()", function () { config: function (el, init, ctx) { ctx.retain = false if (!init) initCount++ - }, + } }) }) route(root, "/a", { "/a": a, - "/b": pure(a.view), + "/b": pure(a.view) }) route("/b") @@ -954,13 +954,13 @@ describe("m.route()", function () { config: function (el, init, ctx) { ctx.retain = true if (!init) initCount++ - }, + } }) }) route(root, "/a", { "/a": a, - "/b": pure(a.view), + "/b": pure(a.view) }) route("/b") @@ -984,7 +984,7 @@ describe("m.route()", function () { }), "/b": pure(function () { return m("section", m("a", {config: config})) - }), + }) }) route("/b") @@ -1006,7 +1006,7 @@ describe("m.route()", function () { }), "/b": pure(function () { return m("section", m("a", {config: config})) - }), + }) }) route("/b") @@ -1028,7 +1028,7 @@ describe("m.route()", function () { }), "/b": pure(function () { return m("section", m("a", {config: config})) - }), + }) }) route("/b") @@ -1042,7 +1042,7 @@ describe("m.route()", function () { function diff(view) { return { controller: function () { m.redraw.strategy("diff") }, - view: view, + view: view } } @@ -1055,13 +1055,13 @@ describe("m.route()", function () { return m("a", { config: function (el, init) { if (!init) initCount++ - }, + } }) }) route(root, "/a", { "/a": a, - "/b": diff(a.view), + "/b": diff(a.view) }) route("/b") @@ -1078,13 +1078,13 @@ describe("m.route()", function () { config: function (el, init, ctx) { ctx.retain = true if (!init) initCount++ - }, + } }) }) route(root, "/a", { "/a": a, - "/b": diff(a.view), + "/b": diff(a.view) }) route("/b") @@ -1101,13 +1101,13 @@ describe("m.route()", function () { config: function (el, init, ctx) { ctx.retain = false if (!init) initCount++ - }, + } }) }) route(root, "/a", { "/a": a, - "/b": diff(a.view), + "/b": diff(a.view) }) route("/b") @@ -1131,7 +1131,7 @@ describe("m.route()", function () { }), "/b": diff(function () { return m("section", m("a", {config: config})) - }), + }) }) route("/b") @@ -1154,7 +1154,7 @@ describe("m.route()", function () { }), "/b": diff(function () { return m("section", m("a", {config: config})) - }), + }) }) route("/b") @@ -1177,7 +1177,7 @@ describe("m.route()", function () { }), "/b": diff(function () { return m("section", m("a", {config: config})) - }), + }) }) m.route("/b") @@ -1204,12 +1204,12 @@ describe("m.route()", function () { controller: function () { m.redraw.strategy("diff") }, view: function () { return m("section", m("a", {config: config})) - }, + } } route(root, "/a", { "/a": pure(function () { return m("div", a) }), - "/b": pure(function () { return m("div", b) }), + "/b": pure(function () { return m("div", b) }) }) route("/b") @@ -1226,10 +1226,10 @@ describe("m.route()", function () { return m("div", { config: function (el) { el.childNodes[0].modified = true - }, + } }, m("div")) }), - "/b": pure(function () { return m("div", m("div")) }), + "/b": pure(function () { return m("div", m("div")) }) }) route("/b") diff --git a/test/mithril.route.parseQueryString.js b/test/mithril.route.parseQueryString.js index 1999ae39..3acc68ba 100644 --- a/test/mithril.route.parseQueryString.js +++ b/test/mithril.route.parseQueryString.js @@ -18,7 +18,7 @@ describe("m.route.parseQueryString()", function () { foo: "bar", hello: ["world", "mars"], bam: "", - yup: null, + yup: null }) }) @@ -28,7 +28,7 @@ describe("m.route.parseQueryString()", function () { expect(args).to.eql({ foo: "bar", - "hello[]": ["world", "mars", "pluto"], + "hello[]": ["world", "mars", "pluto"] }) }) }) diff --git a/test/mithril.startComputation.js b/test/mithril.startComputation.js index dffe557c..cfa58063 100644 --- a/test/mithril.startComputation.js +++ b/test/mithril.startComputation.js @@ -12,7 +12,7 @@ describe("m.startComputation(), m.endComputation()", function () { var root = mock.document.createElement("div") var controller = m.mount(root, { controller: function () {}, - view: function (ctrl) { return ctrl.value }, + view: function (ctrl) { return ctrl.value } }) mock.requestAnimationFrame.$resolve() diff --git a/test/mithril.trust.js b/test/mithril.trust.js index a96075c5..41881b31 100644 --- a/test/mithril.trust.js +++ b/test/mithril.trust.js @@ -36,7 +36,7 @@ describe("m.trust()", function () { var root = document.createElement("div") m.render(root, [ m.trust("

1

123

2

"), - m("i", "foo"), + m("i", "foo") ]) expect(root.childNodes[3].tagName).to.equal("I") }) @@ -49,7 +49,7 @@ describe("m.trust()", function () { m.render(root, [ m.trust("12"), - m("td", "foo"), + m("td", "foo") ]) expect(root.childNodes[2].tagName).to.equal("td") diff --git a/test/svg.html b/test/svg.html index 6ecd34f6..322d1045 100644 --- a/test/svg.html +++ b/test/svg.html @@ -57,20 +57,20 @@ m.render(document.getElementById("test"), [ height: 100, width: 100, transform: "translate(30) rotate(45 50 50)", - style: {stroke: "#000", fill: "#0086b2"}, + style: {stroke: "#000", fill: "#0086b2"} }), m("a[href='http://google.com'][title='SVG link'][target=_new]", { - style: {textDecoration: "underline"}, + style: {textDecoration: "underline"} }, [ - m("text[x=0][y=20]", "SVG Link"), - ]), + m("text[x=0][y=20]", "SVG Link") + ]) ]), m("svg[height=201px][width=201px]", [ m("image[href='http://placekitten.com/201/201']", { height: "200px", width: "200px", - title: "Cat picture", - }), + title: "Cat picture" + }) ]), m("svg[title='Line drawings']", { "enable-background": "new 0 0 340 333", @@ -78,7 +78,7 @@ m.render(document.getElementById("test"), [ viewBox: "0 0 340 333", width: "340px", x: "0px", - y: "0px", + y: "0px" }, [ m("path.path", { d: [ @@ -94,13 +94,13 @@ m.render(document.getElementById("test"), [ "s 11 -61 -11 -80", "s -79 -7 -70 -41", "C 46.039,146.545,53.039,128.545,66.039,133.545", - "z", + "z" ].join(" "), fill: "#FFFFFF", stroke: "#000000", "stroke-miterlimit": 10, - "stroke-width": 4, - }), + "stroke-width": 4 + }) ]), m("svg[height=270px][width=270px][viewBox='0 0 270 270']", [ m("g[transform='translate(150,150)'][title=Clock]", [ @@ -109,7 +109,7 @@ m.render(document.getElementById("test"), [ r: 108, fill: "none", "stroke-width": 4, - stroke: "gray", + stroke: "gray" }), m("circle", { r: 97, @@ -117,7 +117,7 @@ m.render(document.getElementById("test"), [ "stroke-width": 11, stroke: "black", "stroke-dasharray": "4,46.789082", - transform: "rotate(-1.5)", + transform: "rotate(-1.5)" }), m("circle", { r: 100, @@ -125,8 +125,8 @@ m.render(document.getElementById("test"), [ "stroke-width": 5, stroke: "black", "stroke-dasharray": "2,8.471976", - transform: "rotate(-.873)", - }), + transform: "rotate(-.873)" + }) ]), m("g[transform='rotate(180)']", [ m("g#hour", [ @@ -135,15 +135,15 @@ m.render(document.getElementById("test"), [ y2: 75, "stroke-linecap": "round", stroke: "blue", - opacity: 0.5, + opacity: 0.5 }), m("animateTransform[attributeName=transform]", { type: "rotate", repeatCount: "indefinite", dur: "12h", - by: 360, + by: 360 }), - m("circle[r=7]"), + m("circle[r=7]") ]), m("g#minute", [ m("line", { @@ -151,15 +151,15 @@ m.render(document.getElementById("test"), [ y2: 93, "stroke-linecap": "round", stroke: "green", - opacity: 0.9, + opacity: 0.9 }), m("animateTransform[attributeName=transform]", { type: "rotate", repeatCount: "indefinite", dur: "60min", - by: 360, + by: 360 }), - m("circle[r=6][fill=red]"), + m("circle[r=6][fill=red]") ]), m("g#second", [ m("line", { @@ -167,17 +167,17 @@ m.render(document.getElementById("test"), [ y1: -20, y2: 102, "stroke-linecap": "round", - stroke: "red", + stroke: "red" }), m("animateTransform[attributeName=transform]", { type: "rotate", repeatCount: "indefinite", dur: "60s", - by: 360, + by: 360 }), - m("circle[r=4][fill=blue]"), - ]), - ]), + m("circle[r=4][fill=blue]") + ]) + ]) ]), m("script", "(" + function () { "use strict" @@ -195,7 +195,7 @@ m.render(document.getElementById("test"), [ rotate("hour", 30 * (hours + minutes / 60 + seconds / 3600)) rotate("minute", 6 * (minutes + seconds / 60)) rotate("second", 6 * seconds) - }.toString() + ")()"), + }.toString() + ")()") ]), m("svg[height=200px][width=200px]", [ m("foreignObject", { @@ -203,12 +203,12 @@ m.render(document.getElementById("test"), [ y: 0, width: "100px", height: "100px", - transform: "translate(0,0)", + transform: "translate(0,0)" }, m("div", {xmlns: "http://www.w3.org/1999/xhtml"}, [ m.trust("this is a piece of html rendered as " + "" + - "SVG foreignObject"), - ])), - ]), + "SVG foreignObject") + ])) + ]) ]) From 42723cbeb613b45ea3db7db837cfe2f3722878aa Mon Sep 17 00:00:00 2001 From: impinball Date: Thu, 26 Nov 2015 07:44:19 -0500 Subject: [PATCH 23/63] Fully isolate m.prop(), make m.prop().then return current value Note that this does *not* memoize `then`, another deviation from spec, but it's unlikely this will actually cause very many bugs. It's also a breaking change. --- mithril.js | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/mithril.js b/mithril.js index 0d265c55..2b832a7c 100644 --- a/mithril.js +++ b/mithril.js @@ -1198,24 +1198,37 @@ void (function (global, factory) { // eslint-disable-line isFunction(object.then) } + function simpleResolve(p, callback) { + if (p.then) { + return p.then(callback) + } else { + return callback() + } + } + function propify(promise) { var prop = m.prop() promise.then(prop) - prop.then = promise.then.bind(promise) - prop.catch = promise.then.bind(promise, undefined) + prop.then = function (fufill, reject) { + return promise.then(function () { + return prop() + }).then(fufill, reject) + } + + prop.catch = function (reject) { + return promise.then(function () { + return prop() + }, reject) + } prop.finally = function (callback) { - function _callback() { - return m.deferred().resolve(callback()).promise - } - return promise.then(function (value) { - return _callback().then(function () { + return simpleResolve(callback(), function () { return value }) }, function (reason) { - return _callback().then(function () { + return simpleResolve(callback(), function () { throw reason }) }) From 90701a4cbbe3191be77a4311fd84497f90f43f80 Mon Sep 17 00:00:00 2001 From: impinball Date: Thu, 26 Nov 2015 07:49:15 -0500 Subject: [PATCH 24/63] Only call `then` once in `prop.then`. --- mithril.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mithril.js b/mithril.js index 2b832a7c..13fb9e5a 100644 --- a/mithril.js +++ b/mithril.js @@ -1212,8 +1212,8 @@ void (function (global, factory) { // eslint-disable-line prop.then = function (fufill, reject) { return promise.then(function () { - return prop() - }).then(fufill, reject) + return fufill(prop()) + }, reject) } prop.catch = function (reject) { From c92c92d9dfdb5f66b591fdd5482deaed0ff7e69d Mon Sep 17 00:00:00 2001 From: Julien Bisconti Date: Mon, 30 Nov 2015 21:06:58 +0100 Subject: [PATCH 25/63] fix missing paren in code --- docs/mithril.render.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mithril.render.md b/docs/mithril.render.md index 39b0a808..f571e429 100644 --- a/docs/mithril.render.md +++ b/docs/mithril.render.md @@ -29,7 +29,7 @@ m.render(document.body, [ m("ul.nav", [ m("li", links.map(function(link) { return m("a", {href: link.url, config: m.route}, link.title) - }) + })) ]) ]); ``` From bd0ce5c06bd2488b73fc3dfd744a19cd6430a272 Mon Sep 17 00:00:00 2001 From: Julien Bisconti Date: Tue, 1 Dec 2015 18:04:11 +0100 Subject: [PATCH 26/63] Overriding extract option in m.request fixes: #859 --- mithril.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mithril.js b/mithril.js index 9a70070c..cec9a331 100644 --- a/mithril.js +++ b/mithril.js @@ -2087,7 +2087,7 @@ void (function (global, factory) { // eslint-disable-line if (!options.dataType || options.dataType.toLowerCase() !== "jsonp") { serialize = options.serialize || JSON.stringify deserialize = options.deserialize || JSON.parse - extract = function (xhr) { + extract = options.extract || function (xhr) { if (xhr.responseText.length === 0 && deserialize === JSON.parse) { return null From b121ba28241c3624e24be104977ae4b31c4edb76 Mon Sep 17 00:00:00 2001 From: Leo Horie Date: Wed, 2 Dec 2015 22:06:05 -0500 Subject: [PATCH 27/63] point to mithril-objectify --- docs/optimizing-performance.md | 69 ++++------------------------------ 1 file changed, 8 insertions(+), 61 deletions(-) diff --git a/docs/optimizing-performance.md b/docs/optimizing-performance.md index d4ed8b44..b880350e 100644 --- a/docs/optimizing-performance.md +++ b/docs/optimizing-performance.md @@ -10,13 +10,13 @@ For example, if you are building a table with thousands of rows and finding that ## Compiling templates -You can optionally pre-compile templates that use `m()` by running the [`template-compiler.sjs`](tools/template-compiler.sjs) macro with [Sweet.js](https://github.com/mozilla/sweet.js). This step isn't required in order to use Mithril, but it's an easy way to squeeze a little bit more performance out of an application, without the need for code changes. +You can optionally pre-compile templates that use `m()` by using [mithril-objectify](https://github.com/tivac/mithril-objectify/). This step isn't required in order to use Mithril, but it's an easy way to squeeze a little bit more performance out of an application, without the need for code changes. Compiling a template transforms the nested function calls of a template into a raw virtual DOM tree (which is merely a collection of native Javascript objects that is ready to be rendered via [`m.render`](mithril.render.md)). This means that compiled templates don't need to parse the string in `m("div#foo")` and they don't incur the cost of the function call. It's worth mentioning that Mithril has built-in mechanisms elsewhere that take care of real bottlenecks like browser repaint management and DOM updating. This optional compilation tool is merely "icing on the cake" that speeds up the Javascript run-time of templates (which is already fast, even without compilation - see the [performance section on the homepage](http://lhorie.github.io/mithril/index.html#performance)). -The macro takes regular Mithril templates like the one below: +The tool takes regular Mithril templates like the one below: ```javascript var view = function() { @@ -36,71 +36,18 @@ Note that compiled templates are meant to be generated by an automated build pro --- -### Installing NodeJS and SweetJS for one-off compilations +### Installing -SweetJS requires a [NodeJS](http://nodejs.org) environment. To install it, go to its website and use the installer provided. +Mithril-objectify requires a [NodeJS](http://nodejs.org) environment. To install it, go to its website and use the installer provided. -To install SweetJS, NodeJS provides a command-line package manager tool. In a command line, type: +To install mithril-objectify, NodeJS provides a command-line package manager tool. In a command line, type: ``` -npm install -g sweet.js +npm install -g mithril-objectify ``` -To compile a file, type: +Then, to compile a file, type: ``` -sjs -r -m /template-compiler.sjs -o .js .js +mithril-objectify ./input-filename.js ./output-filename.js ``` - ---- - -### Automating Compilation - -If you want to automate compilation, you can use [GruntJS](http://gruntjs.com), a task automation tool. If you're not familiar with GruntJS, you can find a tutorial on their website. - -Assuming NodeJS is already installed, run the following command to install GruntJS: - -``` -npm install -g grunt-cli -``` - -Once installed, create two files in the root of your project, `package.json` and `Gruntfile.js` - -`package.json` - -```javascript -{ - "name": "project-name-goes-here", - "version": "0.0.0", //must follow this format - "devDependencies": { - "grunt-sweet.js": "*" - } -} -``` - -`Gruntfile.js` - -```javascript -module.exports = function(grunt) { - grunt.initConfig({ - sweetjs: { - modules: ["template-compiler.sjs"], - compile: {expand: true, cwd: ".", src: "**/*.js", dest: "destination-folder-goes-here/"} - } - }); - - grunt.loadNpmTasks('grunt-sweet.js'); - - grunt.registerTask('default', ['sweetjs']); -} -``` - -Make sure to replace the `project-name-goes-here` and `destination-folder-goes-here` placeholders with appropriate values. - -To run the automation task, run the following command from the root folder of your project: - -``` -grunt -``` - -More documentation on the grunt-sweet.js task and its options [can be found here](https://github.com/natefaubion/grunt-sweet.js) From 0fcba673400c9b9e0873ded902261e2fe21bc46c Mon Sep 17 00:00:00 2001 From: Leo Horie Date: Wed, 2 Dec 2015 22:12:00 -0500 Subject: [PATCH 28/63] add installation link to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 13e795a3..6ed92eea 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ m.mount(document.getElementById("example"), app); ### Learn more +- [Installation](http://mithril.js.org/installation.html) - [Tutorial](http://mithril.js.org/getting-started.html) - [Differences from Other Frameworks](http://mithril.js.org/comparison.html) - [Benchmarks](http://mithril.js.org/benchmarks.html) From a3af03a600dbf859170e419a61b527f21c2b083b Mon Sep 17 00:00:00 2001 From: kaspertidemann Date: Thu, 10 Dec 2015 15:51:17 +0100 Subject: [PATCH 29/63] Fixes wording. --- docs/installation.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index b19f7ad3..b471b560 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -6,7 +6,7 @@ Mithril is available from a variety of sources: ### Direct download -You can [download a zip of the latest version version here](mithril.min.zip). +You can [download a zip of the latest version here](mithril.min.zip). Links to older versions can be found in the [change log](change-log.html). @@ -133,4 +133,3 @@ To use the bleeding edge version from npm, use the following command: ``` npm install git://github.com/lhorie/mithril.js#next --save ``` - From e846335f167eb75f604a39d7b3f5a3c38d544378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Einar=20Nor=C3=B0fj=C3=B6r=C3=B0?= Date: Fri, 4 Dec 2015 12:53:35 +0000 Subject: [PATCH 30/63] fix subcomponent unloading --- mithril.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/mithril.js b/mithril.js index cec9a331..2e553790 100644 --- a/mithril.js +++ b/mithril.js @@ -729,15 +729,19 @@ void (function (global, factory) { // eslint-disable-line var unloaders = [] function updateLists(views, controllers, view, controller) { - if (controller.onunload != null) { - unloaders.push({ - controller: controller, - handler: controller.onunload - }) - } - views.push(view) - controllers.push(controller) + var idx = controllers.push(controller) - 1 + unloaders[idx] = { + controller: controller, + handler: function () { + controllers.splice(controllers.indexOf(controller), 1) + views.splice(views.indexOf(view), 1) + var unload = controller && controller.onunload + if (type.call(unload) === "[object Function]") { + controller.onunload() + } + } + } } var forcing = false @@ -1300,6 +1304,7 @@ void (function (global, factory) { // eslint-disable-line } forEach(unloaders, function (unloader) { + if (unloader.controller == null) return unloader.handler.call(unloader.controller, ev) unloader.controller.onunload = null }) From 5ef5addb8261c43f72e1b0891e3ab2be470ca781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Einar=20Nor=C3=B0fj=C3=B6r=C3=B0?= Date: Thu, 10 Dec 2015 19:01:52 +0000 Subject: [PATCH 31/63] fix linting errors --- docs/layout/tools/template-converter.js | 2 +- mithril.js | 12 ++++++++---- test-deps/mock.js | 10 ++++++---- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/layout/tools/template-converter.js b/docs/layout/tools/template-converter.js index 55217ba3..ccd4faff 100644 --- a/docs/layout/tools/template-converter.js +++ b/docs/layout/tools/template-converter.js @@ -1,5 +1,5 @@ /* global m: false */ -// TODO: ensure this targets the current API. +// NTBD: ensure this targets the current API. window.templateConverter = (function () { "use strict" diff --git a/mithril.js b/mithril.js index cec9a331..d710445b 100644 --- a/mithril.js +++ b/mithril.js @@ -44,8 +44,10 @@ void (function (global, factory) { // eslint-disable-line } function forOwn(obj, f) { - for (var prop in obj) if (hasOwn.call(obj, prop)) { - if (f(obj[prop], prop)) break + for (var prop in obj) { + if (hasOwn.call(obj, prop)) { + if (f(obj[prop], prop)) break + } } } @@ -960,8 +962,10 @@ void (function (global, factory) { // eslint-disable-line } }) - for (var rule in cachedAttr) if (hasOwn.call(cachedAttr, rule)) { - if (!hasOwn.call(dataAttr, rule)) node.style[rule] = "" + for (var rule in cachedAttr) { + if (hasOwn.call(cachedAttr, rule)) { + if (!hasOwn.call(dataAttr, rule)) node.style[rule] = "" + } } } else if (namespace != null) { // handle SVG diff --git a/test-deps/mock.js b/test-deps/mock.js index 239af53c..698f86bc 100644 --- a/test-deps/mock.js +++ b/test-deps/mock.js @@ -33,8 +33,10 @@ Object.keys = Object.keys || function (obj) { var keys = [] - for (var i in obj) if ({}.hasOwnProperty.call(obj, i)) { - keys.push(i) + for (var i in obj) { + if ({}.hasOwnProperty.call(obj, i)) { + keys.push(i) + } } return keys } @@ -53,7 +55,7 @@ this.mock = (function (global) { } var document = window.document = { - // TODO: add document.createRange().createContextualFragment() + // NTBD: add document.createRange().createContextualFragment() childNodes: [], @@ -78,7 +80,7 @@ this.mock = (function (global) { }, insertAdjacentHTML: function (position, html) { - // TODO: accept markup + // NTBD: accept markup if (position === "beforebegin") { this.parentNode.insertBefore( document.createTextNode(html), From cb29a21ec308bf892dd01bd2e2c39711fa61150d Mon Sep 17 00:00:00 2001 From: impinball Date: Thu, 10 Dec 2015 18:52:51 -0500 Subject: [PATCH 32/63] Fix #873, regenerate minified variants. Drive-by fix: uppercase tag name in failing m.trust test (doesn't make it pass, though). --- mithril.js | 17 ++++++++--------- mithril.min.js | 6 +++--- mithril.min.js.map | 2 +- test/mithril.request.js | 36 ++++++++++++++++++++++++++++++++++++ test/mithril.trust.js | 2 +- 5 files changed, 49 insertions(+), 14 deletions(-) diff --git a/mithril.js b/mithril.js index b80f2a0d..967de22c 100644 --- a/mithril.js +++ b/mithril.js @@ -2115,7 +2115,7 @@ void (function (global, factory) { // eslint-disable-line options.onload = options.onerror = function (ev) { ev = ev || event var doSuccess = ev.type === "load" - var unwrap, response + var unwrap if (doSuccess) { unwrap = options.unwrapSuccess @@ -2124,7 +2124,7 @@ void (function (global, factory) { // eslint-disable-line } try { - response = (unwrap || identity)( + var response = (unwrap || identity)( deserialize(extract(ev.target, options)), ev.target) if (doSuccess) { if (isArray(response) && options.type) { @@ -2134,16 +2134,15 @@ void (function (global, factory) { // eslint-disable-line } else if (options.type) { response = new options.type(response) } + deferred.resolve(response) + } else { + deferred.reject(response) } } catch (e) { - m.deferred.onerror(e) - response = e - doSuccess = false + deferred.reject(e) + } finally { + if (options.background !== true) m.endComputation() } - - deferred[doSuccess ? "resolve" : "reject"](response) - - if (options.background !== true) m.endComputation() } ajax(options) diff --git a/mithril.min.js b/mithril.min.js index 9dbccf83..5dabdb0f 100644 --- a/mithril.min.js +++ b/mithril.min.js @@ -1,8 +1,8 @@ /* Mithril v0.2.1 -http://github.com/lhorie/mithril.js -(c) Leo Horie +http://mithril.js.org +(c) 2014-2015 Leo Horie License: MIT */ -!function(a,b){"use strict";var c=b("undefined"!=typeof window?window:{});"object"==typeof module&&null!=module&&module.exports?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):a.m=c}(this,function(a,b){"use strict";function c(a){return"function"==typeof a}function d(a){return"[object Object]"===Ka.call(a)}function e(a){return"[object String]"===Ka.call(a)}function f(){}function g(a,b){for(var c=0;cd;d++)if(a[d]!==b[d])return!1;return!0}function y(a,b,c){return a.tag!==b.tag?!0:x(c,Object.keys(b.attrs))?a.attrs.id!==b.attrs.id?!0:a.attrs.key!==b.attrs.key?!0:"all"===n.redraw.strategy()?!(b.configContext&&b.configContext.retain===!0):"diff"===n.redraw.strategy()?b.configContext&&b.configContext.retain===!1:void 0:!0}function z(a,b,d){y(a,b,d)&&(b.nodes.length&&Z(b.nodes),b.configContext&&c(b.configContext.onunload)&&b.configContext.onunload(),b.controllers&&g(b.controllers,function(a){a.unload&&a.onunload({preventDefault:f})}))}function A(a,b){return a.attrs.xmlns?a.attrs.xmlns:"svg"===a.tag?"http://www.w3.org/2000/svg":"math"===a.tag?"http://www.w3.org/1998/Math/MathML":b}function B(a,b,c){c.length&&(a.views=b,a.controllers=c,g(c,function(a){if(a.onunload&&a.onunload.$old&&(a.onunload=a.onunload.$old),Ta&&a.onunload){var b=a.onunload;a.onunload=f,a.onunload.$old=b}}))}function C(a,b,d,e,f){var g=b.attrs.config;if(c(g)){var h=f.configContext=f.configContext||{};a.push(function(){return g.call(b,d,!e,h,f)})}}function D(a,c,d,e,f,g,h,i){var j=a.nodes[0];return e&&Y(j,c.tag,c.attrs,a.attrs,f),a.children=U(j,c.tag,b,b,c.children,a.children,!1,0,c.attrs.contenteditable?j:d,f,h),a.nodes.intact=!0,i.length&&(a.views=g,a.controllers=i),j}function E(a,b,c){var d;a.$trusted?d=_(b,c,a):(d=[Fa.createTextNode(a)],Pa.test(b.nodeName)||s(b,d[0],c));var e;return e="string"==typeof a||"number"==typeof a||"boolean"==typeof a?new a.constructor(a):a,e.nodes=d,e}function F(a,b,c,d,e,f){var g=b.nodes;return d&&d===Fa.activeElement||(a.$trusted?(Z(g,b),g=_(c,e,a)):"textarea"===f?c.value=a:d?d.innerHTML=a:((1===g[0].nodeType||g.length>1)&&(Z(b.nodes,b),g=[Fa.createTextNode(a)]),q(c,g[0],e,a))),b=new a.constructor(a),b.nodes=g,b}function G(a,b,c,d,e,f,g){return 0===a.nodes.length?E(b,d,c):a.valueOf()!==b.valueOf()||e?F(b,a,d,f,c,g):(a.nodes.intact=!0,a)}function H(a){if(!a.$trusted)return Ma(a)?a.length:1;var b=a.match(/<[^\/]|\>\s*[^<]/g);return null!=b?b.length:void 0}function I(a,c,d,e,f,g,h,i,j){a=r(a);var k=[],l=c.length===a.length,m=0,n={},p=!1;o(c,function(a,b){p=!0,n[c[b].attrs.key]={action:Qa,index:b}}),w(a),p&&(c=u(a,c,n,d));for(var q=0,s=0,t=a.length;t>s;s++){var x=U(d,f,c,e,a[s],c[q],g,e+m||m,h,i,j);x!==b&&(l=l&&x.nodes.intact,m+=H(x),c[q++]=x)}return l||v(a,c,k),c}function J(a,b,c,d,e){if(null!=b){if(Ka.call(b)===Ka.call(a))return b;if(e&&e.nodes){var f=c-d,g=f+(Ma(a)?a:b.nodes).length;Z(e.nodes.slice(f,g),e.slice(f,g))}else b.nodes&&Z(b.nodes,b)}return b=new a.constructor,b.tag&&(b={}),b.nodes=[],b}function K(a,c){return c===b?a.attrs.is?Fa.createElement(a.tag,a.attrs.is):Fa.createElement(a.tag):a.attrs.is?Fa.createElementNS(c,a.tag,a.attrs.is):Fa.createElementNS(c,a.tag)}function L(a,b,c,d){return d?Y(b,a.tag,a.attrs,{},c):a.attrs}function M(a,c,d,e,f,g){return null!=a.children&&0!==a.children.length?U(c,a.tag,b,b,a.children,d.children,!0,0,a.attrs.contenteditable?c:e,f,g):a.children}function N(a,b,c,d,e,f,g){var h={tag:a.tag,attrs:b,children:c,nodes:[d]};return B(h,f,g),h.children&&!h.children.nodes&&(h.children.nodes=[]),"select"===a.tag&&"value"in a.attrs&&Y(d,a.tag,{value:a.attrs.value},{},e),h}function O(a,b,c,d){var e="diff"===n.redraw.strategy()&&a?a.indexOf(b):-1;return e>-1?c[e]:"function"==typeof d?new d:{}}function P(a,b,c,d){null!=d.onunload&&Va.push({controller:d,handler:d.onunload}),a.push(c),b.push(d)}function Q(a,b,c,d,e,f){var g=O(c.views,b,d,a.controller),h=+(a&&a.attrs&&a.attrs.key);return a=0===Ta||Wa||d&&d.indexOf(g)>-1?a.view(g):{tag:"placeholder"},"retain"===a.subtree?c:(h===h&&((a.attrs=a.attrs||{}).key=h),P(f,e,b,g),a)}function R(a,b,c,d){for(var e=b&&b.controllers;null!=a.view;)a=Q(a,a.view.$original||a.view,b,e,d,c);return a}function S(a,b,c,d,e,f,g,h,i,j,k,l){var m;if(a){m=K(b,c);var n=L(b,m,c,d),o=M(b,m,e,f,c,g);e=N(b,n,o,m,c,h,i)}else m=D(e,b,f,d,c,h,g,i);return(a||k&&null!=m)&&s(j,m,l),C(g,b,m,a,e),e}function T(a,b,c,d,f,g,h,i){var j=[],k=[];if(a=R(a,b,j,k),!a.tag&&k.length)throw new Error("Component template must return a virtual element, not an array, string, etc.");a.attrs=a.attrs||{},b.attrs=b.attrs||{};var l=Object.keys(a.attrs),m=l.length>+("key"in a.attrs);return z(a,b,l),e(a.tag)?S(0===b.nodes.length,a,A(a,h),m,b,c,i,j,k,d,g,f):void 0}function U(a,b,e,f,g,h,i,j,k,l,m){return g=p(g),"retain"===g.subtree?h:(h=J(g,h,j,f,e),Ma(g)?I(g,h,a,j,b,i,k,l,m):null!=g&&d(g)?T(g,h,k,a,j,i,l,m):c(g)?h:G(h,g,j,a,i,k,b))}function V(a,b){return a.action-b.action||a.index-b.index}function W(a){return"list"!==a&&"style"!==a&&"form"!==a&&"type"!==a&&"width"!==a&&"height"!==a}function X(a,b,e,f,g,i){if("config"!==a&&"key"!==a)if(c(b)&&"on"===a.slice(0,2))f[a]=aa(b,f);else if("style"===a&&null!=b&&d(b)){h(b,function(a,b){(null==e||e[b]!==a)&&(f.style[b]=a)});for(var j in e)La.call(e,j)&&(La.call(b,j)||(f.style[j]=""))}else null!=g?"href"===a?f.setAttributeNS("http://www.w3.org/1999/xlink","href",b):f.setAttribute("className"===a?"class":a,b):a in f&&W(a)?("input"!==i||f[a]!==b)&&(f[a]=b):f.setAttribute(a,b)}function Y(a,b,c,d,e){return h(c,function(c,f){var g=d[f];if(f in d&&g===c)"value"===f&&"input"===b&&a.value!=c&&(a.value=c);else{d[f]=c;try{X(f,c,g,a,e,b)}catch(h){if(h.message.indexOf("Invalid argument")<0)throw h}}}),d}function Z(a,b){for(var c=a.length-1;c>=0;c--)if(a[c]&&a[c].parentNode){try{a[c].parentNode.removeChild(a[c])}catch(d){}b=[].concat(b),b[c]&&$(b[c])}a.length&&(a.length=0)}function $(a){a.configContext&&c(a.configContext.onunload)&&(a.configContext.onunload(),a.configContext.onunload=null),a.controllers&&g(a.controllers,function(a){c(a.onunload)&&a.onunload({preventDefault:f})}),a.children&&(Ma(a.children)?g(a.children,$):a.children.tag&&$(a.children))}function _(a,b,c){var d=a.childNodes[b];if(d){var e=1!==d.nodeType,f=Fa.createElement("span");e?(a.insertBefore(f,d||null),f.insertAdjacentHTML("beforebegin",c),a.removeChild(f)):d.insertAdjacentHTML("beforebegin",c)}else Xa(a,c);for(var g=[];a.childNodes[b]!==d;)g.push(a.childNodes[b]),b++;return g}function aa(a,b){return function(c){c=c||event,n.redraw.strategy("diff"),n.startComputation();try{return a.call(b,c)}finally{ia()}}}function ba(a){var b=Za.indexOf(a);return 0>b?Za.push(a)-1:b}function ca(a){function b(){return arguments.length&&(a=arguments[0]),a}return b.toJSON=function(){return a},b}function da(a,b){function c(){return e.apply(this,b)||this}function d(c){for(var d=[c].concat(b),e=1;e0&&Ia(gb),gb=Ha(ha,fb)}function ha(){db&&(db(),db=null),g(ab,function(a,b){var c=bb[b];if(cb[b]){var d=[cb[b]];n.render(a,c.view?c.view(cb[b],d):"")}}),eb&&(eb(),eb=null),gb=null,hb=new Date,n.redraw.strategy("diff")}function ia(){"none"===n.redraw.strategy()?(Ta--,n.redraw.strategy("diff")):n.endComputation()}function ja(b){a[b]=function(){var a=Ga[n.route.mode];"pathname"===n.route.mode&&(a+=Ga.search),lb!==na(a)&&nb(a)},db=qa,a[b]()}function ka(){return("pathname"===n.route.mode?"":Ga.pathname)+mb[n.route.mode]}function la(b){if(a.history.pushState){db=qa;var c=b?"replaceState":"pushState";eb=function(){a.history[c](null,Fa.title,mb[n.route.mode]+lb)},nb(mb[n.route.mode]+lb)}else Ga[n.route.mode]=lb,nb(mb[n.route.mode]+lb)}function ma(a,b,c){arguments.length<3&&"object"!=typeof b&&(c=b,b=null);var d=lb;lb=a;var e,f,g=b||{},i=lb.indexOf("?");if(i>=0){var j=sa(lb.slice(i+1));h(g,function(a,b){j[b]=g[b]}),e=ra(j),f=lb.slice(0,i)}else e=ra(b),f=lb;if(e){var k=-1===f.indexOf("?")?"?":"&";lb=f+k+e}return la(c||d===a)}function na(a){return a.slice(mb[n.route.mode].length)}function oa(a,b,c){var d=c.indexOf("?");d>=0?(kb=sa(c.substr(d+1,c.length)),c=c.substr(0,d)):kb={};var e=Object.keys(b),f=e.indexOf(c);if(f>=0)return n.mount(a,b[e[f]]),!0;for(var h in b)if(La.call(b,h)){if(h===c)return n.mount(a,b[h]),!0;var i=new RegExp("^"+h.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(i.test(c))return c.replace(i,function(){var c=h.match(/:[^\/]+/g)||[],d=[].slice.call(arguments,1,-2);g(c,function(a,b){a=a.replace(/:|\./g,""),kb[a]=decodeURIComponent(d[b])}),n.mount(a,b[h])}),!0}}function pa(a){if(a=a||event,!a.ctrlKey&&!a.metaKey&&2!==a.which){a.preventDefault?a.preventDefault():a.returnValue=!1;var b,c=a.currentTarget||a.srcElement;for(b="pathname"===n.route.mode&&c.search?sa(c.search.slice(1)):{};c&&"A"!==c.nodeName.toUpperCase();)c=c.parentNode;n.route(c[n.route.mode].slice(mb[n.route.mode].length),b)}}function qa(){"hash"!==n.route.mode&&Ga.hash?Ga.hash=Ga.hash:a.scrollTo(0,0)}function ra(a,c){var e={},f=[];return h(a,function(a,h){var i=c?c+"["+h+"]":h;if(null===a)f.push(encodeURIComponent(i));else if(d(a))f.push(ra(a,i));else if(Ma(a)){var j=[];e[i]=e[i]||{},g(a,function(a){e[i][a]||(e[i][a]=!0,j.push(encodeURIComponent(i)+"="+encodeURIComponent(a)))}),f.push(j.join("&"))}else a!==b&&f.push(encodeURIComponent(i)+"="+encodeURIComponent(a))}),f.join("&")}function sa(a){if(""===a||null==a)return{};"?"===a.charAt(0)&&(a=a.slice(1));var b=a.split("&"),c={};return g(b,function(a){var b=a.split("="),d=decodeURIComponent(b[0]),e=2===b.length?decodeURIComponent(b[1]):null;null!=c[d]?(Ma(c[d])||(c[d]=[c[d]]),c[d].push(e)):c[d]=e}),c}function ta(a){var c=ba(a);Z(a.childNodes,$a[c]),$a[c]=b}function ua(a,b){function e(a){j=a||sb,g(l,function(a){j===rb?a.resolve(k):a.reject(k)})}function f(a,b,e,f){if((null!=k&&d(k)||c(k))&&c(a))try{var g=0;a.call(k,function(a){g++||(k=a,b())},function(a){g++||(k=a,e())})}catch(h){n.deferred.onerror(h),k=h,e()}else f()}function h(){var d;try{d=k&&k.then}catch(g){return n.deferred.onerror(g),k=g,j=qb,h()}f(d,function(){j=pb,h()},function(){j=qb,h()},function(){try{j===pb&&c(a)?k=a(k):j===qb&&c(b)&&(k=b(k),j=pb)}catch(g){return n.deferred.onerror(g),k=g,e()}k===i?(k=TypeError(),e()):f(d,function(){e(rb)},e,function(){e(j===pb&&rb)})})}var i=this,j=0,k=0,l=[];i.promise={},i.resolve=function(a){return j||(k=a,j=pb,h()),this},i.reject=function(a){return j||(k=a,j=qb,h()),this},i.promise.then=function(a,b){var c=new ua(a,b);return j===rb?c.resolve(k):j===sb?c.reject(k):l.push(c),c.promise}}function va(a,b){var c=n.prop(b);return a.then(c),c.then=function(c,d){return va(a.then(c,d),b)},c["catch"]=c.then.bind(null,null),c["finally"]=function(a){function d(){return n.deferred().resolve(a()).promise}return c.then(function(a){return va(d().then(function(){return a}),b)},function(a){return va(d().then(function(){throw new Error(a)}),b)})},c}function wa(a){return a instanceof EvalError||a instanceof RangeError||a instanceof ReferenceError||a instanceof SyntaxError||a instanceof TypeError||a instanceof URIError}function xa(a){return a}function ya(){return"mithril_callback_"+(new Date).getTime()+"_"+Math.round(1e16*Math.random()).toString(36)}function za(c){var d=ya(),e=Fa.createElement("script");a[d]=function(f){e.parentNode.removeChild(e),c.onload({type:"load",target:{responseText:f}}),a[d]=b},e.onerror=function(){return e.parentNode.removeChild(e),c.onerror({type:"error",target:{status:500,responseText:'{"error": "Error making jsonp request"}'}}),a[d]=b,!1},e.onload=function(){return!1},e.src=c.url+(c.url.indexOf("?")>0?"&":"?")+(c.callbackKey?c.callbackKey:"callback")+"="+d+"&"+ra(c.data||{}),Fa.body.appendChild(e)}function Aa(b){var d=new a.XMLHttpRequest;if(d.open(b.method,b.url,!0,b.user,b.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?b.onload({type:"load",target:d}):b.onerror({type:"error",target:d}))},b.serialize===JSON.stringify&&b.data&&"GET"!==b.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),b.deserialize===JSON.parse&&d.setRequestHeader("Accept","application/json, text/*"),c(b.config)){var f=b.config(d,b);null!=f&&(d=f)}var g;if(g="GET"!==b.method&&b.data?b.data:"",g&&!e(g)&&g.constructor!==a.FormData)throw new Error("Request data should be either be a string or FormData. Check the `serialize` option in `m.request`");return d.send(g),d}function Ba(a){return a.dataType&&"jsonp"===a.dataType.toLowerCase()?za(a):Aa(a)}function Ca(a,b,c){if("GET"===a.method&&"jsonp"!==a.dataType){var d=a.url.indexOf("?")<0?"?":"&",e=ra(b);a.url+=e?d+e:""}else a.data=c(b);return a}function Da(a,b){var c=a.match(/:[a-z]\w+/gi);return c&&b&&g(c,function(c){var d=c.slice(1);a=a.replace(c,b[d]),delete b[d]}),a}function Ea(a){return a.responseText}var Fa,Ga,Ha,Ia,Ja="v0.2.1",Ka={}.toString,La={}.hasOwnProperty,Ma=Array.isArray||function(a){return"[object Array]"===Ka.call(a)},Na=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,Oa=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,Pa=/^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/;i(a),n.deps=function(b){return i(a=b||a),a},n.version=function(){return Ja};var Qa=1,Ra=2,Sa=3,Ta=0;n.startComputation=function(){Ta++},n.endComputation=function(){Ta>1?Ta--:(Ta=0,n.redraw())};var Ua,Va=[],Wa=!1,Xa=function(){try{return Fa.createRange().createContextualFragment("x"),function(a,b){a.appendChild(Fa.createRange().createContextualFragment(b))}}catch(a){return function(a,b){a.insertAdjacentHTML("beforeend",b)}}}(),Ya={appendChild:function(a){Ua===b&&(Ua=Fa.createElement("html")),Fa.documentElement&&Fa.documentElement!==a?Fa.replaceChild(a,Fa.documentElement):Fa.appendChild(a),this.childNodes=Fa.childNodes},insertBefore:function(a){this.appendChild(a)},childNodes:[]},Za=[],$a={};n.render=function(a,c,d){if(!a)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var e,f=[],h=ba(a),i=a===Fa;e=i||a===Fa.documentElement?Ya:a,i&&"html"!==c.tag&&(c={tag:"html",attrs:{},children:c}),$a[h]===b&&Z(e.childNodes),d===!0&&ta(a),$a[h]=U(e,null,b,b,c,$a[h],!1,0,null,b,f),g(f,function(a){a()})},n.trust=function(a){return a=new String(a),a.$trusted=!0,a},n.prop=function(a){return(null!=a&&d(a)||c(a))&&c(a.then)?va(a):ca(a)};var _a,ab=[],bb=[],cb=[],db=null,eb=null,fb=16;n.component=function(a){for(var b=[],c=1;cd&&(d=ab.length);var e=!1,f={preventDefault:function(){e=!0,db=eb=null}};return g(Va,function(a){a.handler.call(a.controller,f),a.controller.onunload=null}),e?g(Va,function(a){a.controller.onunload=a.handler}):Va=[],cb[d]&&c(cb[d].onunload)&&cb[d].onunload(f),ea(b,a,d,e)};var gb=0,hb=0,ib=Ha===a.requestAnimationFrame?ga:function(){+new Date-hb>fb&&ga()},jb=!1;n.redraw=function(a){if(!jb){jb=!0,a&&(Wa=!0);try{gb&&!a?ib():(ha(),gb=Ha(function(){gb=0},fb))}finally{jb=Wa=!1}}},n.redraw.strategy=n.prop(),n.withAttr=function(a,b,c){return function(d){d=d||event;var e,f=d.currentTarget||this,g=c||this;e=a in f?f[a]:f.getAttribute(a),b.call(g,e)}};var kb,lb,mb={pathname:"",hash:"#",search:"?"},nb=f,ob=!1;n.route=function(a,b,c,d){if(0===arguments.length)return lb;if(3===arguments.length&&e(b))nb=function(d){var e=lb=na(d);if(!oa(a,c,e)){if(ob)throw new Error("Ensure the default route matches one of the routes defined in m.route");ob=!0,n.route(b,!0),ob=!1}},ja("hash"===n.route.mode?"onhashchange":"onpopstate");else if(a.addEventListener||a.attachEvent)a.href=ka()+d.attrs.href,a.addEventListener?(a.removeEventListener("click",pa),a.addEventListener("click",pa)):(a.detachEvent("onclick",pa),a.attachEvent("onclick",pa));else if(e(a))return ma.apply(this,arguments)},n.route.param=function(a){if(!kb)throw new Error("You must call m.route(element, defaultRoute, routes) before calling m.route.param()");return a?kb[a]:kb},n.route.mode="search",n.route.buildQueryString=ra,n.route.parseQueryString=sa;var pb=1,qb=2,rb=3,sb=4;return n.deferred=function(){var a=new ua;return a.promise=va(a.promise),a},n.deferred.onerror=function(a){if(wa(a))throw Ta=0,a},n.sync=function(a){function b(a,b){return function(g){return e[a]=g,b||(f="reject"),0===--d&&(c.promise(e),c[f](e)),g}}var c=n.deferred(),d=a.length,e=new Array(d),f="resolve";return a.length>0?g(a,function(a,c){a.then(b(c,!0),b(c,!1))}):c.resolve([]),c.promise},n.request=function(a){a.background!==!0&&n.startComputation();var b=new ua,c=xa,d=xa,e=Ea;return a.dataType&&"jsonp"===a.dataType.toLowerCase()||(c=a.serialize||JSON.stringify,d=a.deserialize||JSON.parse,e=function(a){return 0===a.responseText.length&&d===JSON.parse?null:a.responseText}),a.serialize=c,a.deserialize=d,a.method=(a.method||"GET").toUpperCase(),a.url=Da(a.url,a.data),a=Ca(a,a.data,c),a.onload=a.onerror=function(c){c=c||event;var f,h,i="load"===c.type;f=i?a.unwrapSuccess:a.unwrapError;try{h=(f||xa)(d(e(c.target,a)),c.target),i&&(Ma(h)&&a.type?g(h,function(b,c){h[c]=new a.type(b)}):a.type&&(h=new a.type(h)))}catch(j){n.deferred.onerror(j),h=j,i=!1}b[i?"resolve":"reject"](h),a.background!==!0&&n.endComputation()},Ba(a),b.promise=va(b.promise,a.initialValue),b.promise},n}); +void function(a,b){"use strict";var c=b("undefined"!=typeof window?window:{});"object"==typeof module&&null!=module&&module.exports?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):a.m=c}(this,function(a,b){"use strict";function c(a){return"function"==typeof a}function d(a){return"[object Object]"===Ka.call(a)}function e(a){return"[object String]"===Ka.call(a)}function f(){}function g(a,b){for(var c=0;cd;d++)if(a[d]!==b[d])return!1;return!0}function y(a,b,c){return a.tag!==b.tag?!0:x(c,Object.keys(b.attrs))?a.attrs.id!==b.attrs.id?!0:a.attrs.key!==b.attrs.key?!0:"all"===n.redraw.strategy()?!(b.configContext&&b.configContext.retain===!0):"diff"===n.redraw.strategy()?b.configContext&&b.configContext.retain===!1:void 0:!0}function z(a,b,d){y(a,b,d)&&(b.nodes.length&&Z(b.nodes),b.configContext&&c(b.configContext.onunload)&&b.configContext.onunload(),b.controllers&&g(b.controllers,function(a){a.unload&&a.onunload({preventDefault:f})}))}function A(a,b){return a.attrs.xmlns?a.attrs.xmlns:"svg"===a.tag?"http://www.w3.org/2000/svg":"math"===a.tag?"http://www.w3.org/1998/Math/MathML":b}function B(a,b,c){c.length&&(a.views=b,a.controllers=c,g(c,function(a){if(a.onunload&&a.onunload.$old&&(a.onunload=a.onunload.$old),Ta&&a.onunload){var b=a.onunload;a.onunload=f,a.onunload.$old=b}}))}function C(a,b,d,e,f){var g=b.attrs.config;if(c(g)){var h=f.configContext=f.configContext||{};a.push(function(){return g.call(b,d,!e,h,f)})}}function D(a,c,d,e,f,g,h,i){var j=a.nodes[0];return e&&Y(j,c.tag,c.attrs,a.attrs,f),a.children=U(j,c.tag,b,b,c.children,a.children,!1,0,c.attrs.contenteditable?j:d,f,h),a.nodes.intact=!0,i.length&&(a.views=g,a.controllers=i),j}function E(a,b,c){var d;a.$trusted?d=_(b,c,a):(d=[Fa.createTextNode(a)],Pa.test(b.nodeName)||s(b,d[0],c));var e;return e="string"==typeof a||"number"==typeof a||"boolean"==typeof a?new a.constructor(a):a,e.nodes=d,e}function F(a,b,c,d,e,f){var g=b.nodes;return d&&d===Fa.activeElement||(a.$trusted?(Z(g,b),g=_(c,e,a)):"textarea"===f?c.value=a:d?d.innerHTML=a:((1===g[0].nodeType||g.length>1||g[0].nodeValue.trim&&!g[0].nodeValue.trim())&&(Z(b.nodes,b),g=[Fa.createTextNode(a)]),q(c,g[0],e,a))),b=new a.constructor(a),b.nodes=g,b}function G(a,b,c,d,e,f,g){return 0===a.nodes.length?E(b,d,c):a.valueOf()!==b.valueOf()||e?F(b,a,d,f,c,g):(a.nodes.intact=!0,a)}function H(a){if(!a.$trusted)return Ma(a)?a.length:1;var b=a.match(/<[^\/]|\>\s*[^<]/g);return null!=b?b.length:void 0}function I(a,c,d,e,f,g,h,i,j){a=r(a);var k=[],l=c.length===a.length,m=0,n={},p=!1;o(c,function(a,b){p=!0,n[c[b].attrs.key]={action:Qa,index:b}}),w(a),p&&(c=u(a,c,n,d));for(var q=0,s=0,t=a.length;t>s;s++){var x=U(d,f,c,e,a[s],c[q],g,e+m||m,h,i,j);x!==b&&(l=l&&x.nodes.intact,m+=H(x),c[q++]=x)}return l||v(a,c,k),c}function J(a,b,c,d,e){if(null!=b){if(Ka.call(b)===Ka.call(a))return b;if(e&&e.nodes){var f=c-d,g=f+(Ma(a)?a:b.nodes).length;Z(e.nodes.slice(f,g),e.slice(f,g))}else b.nodes&&Z(b.nodes,b)}return b=new a.constructor,b.tag&&(b={}),b.nodes=[],b}function K(a,c){return c===b?a.attrs.is?Fa.createElement(a.tag,a.attrs.is):Fa.createElement(a.tag):a.attrs.is?Fa.createElementNS(c,a.tag,a.attrs.is):Fa.createElementNS(c,a.tag)}function L(a,b,c,d){return d?Y(b,a.tag,a.attrs,{},c):a.attrs}function M(a,c,d,e,f,g){return null!=a.children&&0!==a.children.length?U(c,a.tag,b,b,a.children,d.children,!0,0,a.attrs.contenteditable?c:e,f,g):a.children}function N(a,b,c,d,e,f,g){var h={tag:a.tag,attrs:b,children:c,nodes:[d]};return B(h,f,g),h.children&&!h.children.nodes&&(h.children.nodes=[]),"select"===a.tag&&"value"in a.attrs&&Y(d,a.tag,{value:a.attrs.value},{},e),h}function O(a,b,c,d){var e="diff"===n.redraw.strategy()&&a?a.indexOf(b):-1;return e>-1?c[e]:"function"==typeof d?new d:{}}function P(a,b,c,d){a.push(c);var e=b.push(d)-1;Va[e]={controller:d,handler:function(){b.splice(b.indexOf(d),1),a.splice(a.indexOf(c),1);var e=d&&d.onunload;"[object Function]"===Ka.call(e)&&d.onunload()}}}function Q(a,b,c,d,e,f){var g=O(c.views,b,d,a.controller),h=+(a&&a.attrs&&a.attrs.key);return a=0===Ta||Wa||d&&d.indexOf(g)>-1?a.view(g):{tag:"placeholder"},"retain"===a.subtree?c:(h===h&&((a.attrs=a.attrs||{}).key=h),P(f,e,b,g),a)}function R(a,b,c,d){for(var e=b&&b.controllers;null!=a.view;)a=Q(a,a.view.$original||a.view,b,e,d,c);return a}function S(a,b,c,d,e,f,g,h,i,j,k,l){var m;if(a){m=K(b,c);var n=L(b,m,c,d),o=M(b,m,e,f,c,g);e=N(b,n,o,m,c,h,i)}else m=D(e,b,f,d,c,h,g,i);return(a||k&&null!=m)&&s(j,m,l),C(g,b,m,a,e),e}function T(a,b,c,d,f,g,h,i){var j=[],k=[];if(a=R(a,b,j,k),!a.tag&&k.length)throw new Error("Component template must return a virtual element, not an array, string, etc.");a.attrs=a.attrs||{},b.attrs=b.attrs||{};var l=Object.keys(a.attrs),m=l.length>+("key"in a.attrs);return z(a,b,l),e(a.tag)?S(0===b.nodes.length,a,A(a,h),m,b,c,i,j,k,d,g,f):void 0}function U(a,b,e,f,g,h,i,j,k,l,m){return g=p(g),"retain"===g.subtree?h:(h=J(g,h,j,f,e),Ma(g)?I(g,h,a,j,b,i,k,l,m):null!=g&&d(g)?T(g,h,k,a,j,i,l,m):c(g)?h:G(h,g,j,a,i,k,b))}function V(a,b){return a.action-b.action||a.index-b.index}function W(a){return"list"!==a&&"style"!==a&&"form"!==a&&"type"!==a&&"width"!==a&&"height"!==a}function X(a,b,e,f,g,i){if("config"!==a&&"key"!==a)if(c(b)&&"on"===a.slice(0,2))f[a]=aa(b,f);else if("style"===a&&null!=b&&d(b)){h(b,function(a,b){(null==e||e[b]!==a)&&(f.style[b]=a)});for(var j in e)La.call(e,j)&&(La.call(b,j)||(f.style[j]=""))}else null!=g?"href"===a?f.setAttributeNS("http://www.w3.org/1999/xlink","href",b):f.setAttribute("className"===a?"class":a,b):a in f&&W(a)?("input"!==i||f[a]!==b)&&(f[a]=b):f.setAttribute(a,b)}function Y(a,b,c,d,e){return h(c,function(c,f){var g=d[f];if(f in d&&g===c)"value"===f&&"input"===b&&a.value!=c&&(a.value=c);else{d[f]=c;try{X(f,c,g,a,e,b)}catch(h){if(h.message.indexOf("Invalid argument")<0)throw h}}}),d}function Z(a,b){for(var c=a.length-1;c>=0;c--)if(a[c]&&a[c].parentNode){try{a[c].parentNode.removeChild(a[c])}catch(d){}b=[].concat(b),b[c]&&$(b[c])}a.length&&(a.length=0)}function $(a){a.configContext&&c(a.configContext.onunload)&&(a.configContext.onunload(),a.configContext.onunload=null),a.controllers&&g(a.controllers,function(a){c(a.onunload)&&a.onunload({preventDefault:f})}),a.children&&(Ma(a.children)?g(a.children,$):a.children.tag&&$(a.children))}function _(a,b,c){var d=a.childNodes[b];if(d){var e=1!==d.nodeType,f=Fa.createElement("span");e?(a.insertBefore(f,d||null),f.insertAdjacentHTML("beforebegin",c),a.removeChild(f)):d.insertAdjacentHTML("beforebegin",c)}else Xa(a,c);for(var g=[];a.childNodes[b]!==d;)g.push(a.childNodes[b]),b++;return g}function aa(a,b){return function(c){c=c||event,n.redraw.strategy("diff"),n.startComputation();try{return a.call(b,c)}finally{ia()}}}function ba(a){var b=Za.indexOf(a);return 0>b?Za.push(a)-1:b}function ca(a){function b(){return arguments.length&&(a=arguments[0]),a}return b.toJSON=function(){return a},b}function da(a,b){function c(){return e.apply(this,b)||this}function d(c){for(var d=[c].concat(b),e=1;e0&&Ia(gb),gb=Ha(ha,fb)}function ha(){db&&(db(),db=null),g(ab,function(a,b){var c=bb[b];if(cb[b]){var d=[cb[b]];n.render(a,c.view?c.view(cb[b],d):"")}}),eb&&(eb(),eb=null),gb=null,hb=new Date,n.redraw.strategy("diff")}function ia(){"none"===n.redraw.strategy()?(Ta--,n.redraw.strategy("diff")):n.endComputation()}function ja(b){a[b]=function(){var a=Ga[n.route.mode];"pathname"===n.route.mode&&(a+=Ga.search),lb!==na(a)&&nb(a)},db=qa,a[b]()}function ka(){return("pathname"===n.route.mode?"":Ga.pathname)+mb[n.route.mode]}function la(b){if(a.history.pushState){db=qa;var c=b?"replaceState":"pushState";eb=function(){a.history[c](null,Fa.title,mb[n.route.mode]+lb)},nb(mb[n.route.mode]+lb)}else Ga[n.route.mode]=lb,nb(mb[n.route.mode]+lb)}function ma(a,b,c){arguments.length<3&&"object"!=typeof b&&(c=b,b=null);var d=lb;lb=a;var e,f,g=b||{},i=lb.indexOf("?");if(i>=0){var j=sa(lb.slice(i+1));h(g,function(a,b){j[b]=g[b]}),e=ra(j),f=lb.slice(0,i)}else e=ra(b),f=lb;if(e){var k=-1===f.indexOf("?")?"?":"&";lb=f+k+e}return la(c||d===a)}function na(a){return a.slice(mb[n.route.mode].length)}function oa(a,b,c){var d=c.indexOf("?");d>=0?(kb=sa(c.substr(d+1,c.length)),c=c.substr(0,d)):kb={};var e=Object.keys(b),f=e.indexOf(c);if(f>=0)return n.mount(a,b[e[f]]),!0;for(var h in b)if(La.call(b,h)){if(h===c)return n.mount(a,b[h]),!0;var i=new RegExp("^"+h.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(i.test(c))return c.replace(i,function(){var c=h.match(/:[^\/]+/g)||[],d=[].slice.call(arguments,1,-2);g(c,function(a,b){a=a.replace(/:|\./g,""),kb[a]=decodeURIComponent(d[b])}),n.mount(a,b[h])}),!0}}function pa(a){if(a=a||event,!a.ctrlKey&&!a.metaKey&&2!==a.which){a.preventDefault?a.preventDefault():a.returnValue=!1;var b,c=a.currentTarget||a.srcElement;for(b="pathname"===n.route.mode&&c.search?sa(c.search.slice(1)):{};c&&"A"!==c.nodeName.toUpperCase();)c=c.parentNode;n.route(c[n.route.mode].slice(mb[n.route.mode].length),b)}}function qa(){"hash"!==n.route.mode&&Ga.hash?Ga.hash=Ga.hash:a.scrollTo(0,0)}function ra(a,c){var e={},f=[];return h(a,function(a,h){var i=c?c+"["+h+"]":h;if(null===a)f.push(encodeURIComponent(i));else if(d(a))f.push(ra(a,i));else if(Ma(a)){var j=[];e[i]=e[i]||{},g(a,function(a){e[i][a]||(e[i][a]=!0,j.push(encodeURIComponent(i)+"="+encodeURIComponent(a)))}),f.push(j.join("&"))}else a!==b&&f.push(encodeURIComponent(i)+"="+encodeURIComponent(a))}),f.join("&")}function sa(a){if(""===a||null==a)return{};"?"===a.charAt(0)&&(a=a.slice(1));var b=a.split("&"),c={};return g(b,function(a){var b=a.split("="),d=decodeURIComponent(b[0]),e=2===b.length?decodeURIComponent(b[1]):null;null!=c[d]?(Ma(c[d])||(c[d]=[c[d]]),c[d].push(e)):c[d]=e}),c}function ta(a){var c=ba(a);Z(a.childNodes,$a[c]),$a[c]=b}function ua(a,b){function e(a){j=a||sb,g(l,function(a){j===rb?a.resolve(k):a.reject(k)})}function f(a,b,e,f){if((null!=k&&d(k)||c(k))&&c(a))try{var g=0;a.call(k,function(a){g++||(k=a,b())},function(a){g++||(k=a,e())})}catch(h){n.deferred.onerror(h),k=h,e()}else f()}function h(){var d;try{d=k&&k.then}catch(g){return n.deferred.onerror(g),k=g,j=qb,h()}j===qb&&n.deferred.onerror(k),f(d,function(){j=pb,h()},function(){j=qb,h()},function(){try{j===pb&&c(a)?k=a(k):j===qb&&c(b)&&(k=b(k),j=pb)}catch(g){return n.deferred.onerror(g),k=g,e()}k===i?(k=TypeError(),e()):f(d,function(){e(rb)},e,function(){e(j===pb&&rb)})})}var i=this,j=0,k=0,l=[];i.promise={},i.resolve=function(a){return j||(k=a,j=pb,h()),this},i.reject=function(a){return j||(k=a,j=qb,h()),this},i.promise.then=function(a,b){var c=new ua(a,b);return j===rb?c.resolve(k):j===sb?c.reject(k):l.push(c),c.promise}}function va(a,b){var c=n.prop(b);return a.then(c),c.then=function(c,d){return va(a.then(c,d),b)},c["catch"]=c.then.bind(null,null),c["finally"]=function(a){function d(){return n.deferred().resolve(a()).promise}return c.then(function(a){return va(d().then(function(){return a}),b)},function(a){return va(d().then(function(){throw new Error(a)}),b)})},c}function wa(a){return a instanceof EvalError||a instanceof RangeError||a instanceof ReferenceError||a instanceof SyntaxError||a instanceof TypeError||a instanceof URIError}function xa(a){return a}function ya(){return"mithril_callback_"+(new Date).getTime()+"_"+Math.round(1e16*Math.random()).toString(36)}function za(c){var d=ya(),e=Fa.createElement("script");a[d]=function(f){e.parentNode.removeChild(e),c.onload({type:"load",target:{responseText:f}}),a[d]=b},e.onerror=function(){return e.parentNode.removeChild(e),c.onerror({type:"error",target:{status:500,responseText:'{"error": "Error making jsonp request"}'}}),a[d]=b,!1},e.onload=function(){return!1},e.src=c.url+(c.url.indexOf("?")>0?"&":"?")+(c.callbackKey?c.callbackKey:"callback")+"="+d+"&"+ra(c.data||{}),Fa.body.appendChild(e)}function Aa(b){var d=new a.XMLHttpRequest;if(d.open(b.method,b.url,!0,b.user,b.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?b.onload({type:"load",target:d}):b.onerror({type:"error",target:d}))},b.serialize===JSON.stringify&&b.data&&"GET"!==b.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),b.deserialize===JSON.parse&&d.setRequestHeader("Accept","application/json, text/*"),c(b.config)){var f=b.config(d,b);null!=f&&(d=f)}var g;if(g="GET"!==b.method&&b.data?b.data:"",g&&!e(g)&&g.constructor!==a.FormData)throw new Error("Request data should be either be a string or FormData. Check the `serialize` option in `m.request`");return d.send(g),d}function Ba(a){return a.dataType&&"jsonp"===a.dataType.toLowerCase()?za(a):Aa(a)}function Ca(a,b,c){if("GET"===a.method&&"jsonp"!==a.dataType){var d=a.url.indexOf("?")<0?"?":"&",e=ra(b);a.url+=e?d+e:""}else a.data=c(b);return a}function Da(a,b){var c=a.match(/:[a-z]\w+/gi);return c&&b&&g(c,function(c){var d=c.slice(1);a=a.replace(c,b[d]),delete b[d]}),a}function Ea(a){return a.responseText}var Fa,Ga,Ha,Ia,Ja="v0.2.1",Ka={}.toString,La={}.hasOwnProperty,Ma=Array.isArray||function(a){return"[object Array]"===Ka.call(a)},Na=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,Oa=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,Pa=/^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/;i(a),n.deps=function(b){return i(a=b||a),a},n.version=function(){return Ja};var Qa=1,Ra=2,Sa=3,Ta=0;n.startComputation=function(){Ta++},n.endComputation=function(){Ta>1?Ta--:(Ta=0,n.redraw())};var Ua,Va=[],Wa=!1,Xa=function(){try{return Fa.createRange().createContextualFragment("x"),function(a,b){a.appendChild(Fa.createRange().createContextualFragment(b))}}catch(a){return function(a,b){a.insertAdjacentHTML("beforeend",b)}}}(),Ya={appendChild:function(a){Ua===b&&(Ua=Fa.createElement("html")),Fa.documentElement&&Fa.documentElement!==a?Fa.replaceChild(a,Fa.documentElement):Fa.appendChild(a),this.childNodes=Fa.childNodes},insertBefore:function(a){this.appendChild(a)},childNodes:[]},Za=[],$a={};n.render=function(a,c,d){if(!a)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var e,f=[],h=ba(a),i=a===Fa;e=i||a===Fa.documentElement?Ya:a,i&&"html"!==c.tag&&(c={tag:"html",attrs:{},children:c}),$a[h]===b&&Z(e.childNodes),d===!0&&ta(a),$a[h]=U(e,null,b,b,c,$a[h],!1,0,null,b,f),g(f,function(a){a()})},n.trust=function(a){return a=new String(a),a.$trusted=!0,a},n.prop=function(a){return(null!=a&&d(a)||c(a))&&c(a.then)?va(a):ca(a)};var _a,ab=[],bb=[],cb=[],db=null,eb=null,fb=16;n.component=function(a){for(var b=[],c=1;cd&&(d=ab.length);var e=!1,f={preventDefault:function(){e=!0,db=eb=null}};return g(Va,function(a){null!=a.controller&&(a.handler.call(a.controller,f),a.controller.onunload=null)}),e?g(Va,function(a){a.controller.onunload=a.handler}):Va=[],cb[d]&&c(cb[d].onunload)&&cb[d].onunload(f),ea(b,a,d,e)};var gb=0,hb=0,ib=Ha===a.requestAnimationFrame?ga:function(){+new Date-hb>fb&&ga()},jb=!1;n.redraw=function(a){if(!jb){jb=!0,a&&(Wa=!0);try{gb&&!a?ib():(ha(),gb=Ha(function(){gb=0},fb))}finally{jb=Wa=!1}}},n.redraw.strategy=n.prop(),n.withAttr=function(a,b,c){return function(d){d=d||event;var e,f=d.currentTarget||this,g=c||this;e=a in f?f[a]:f.getAttribute(a),b.call(g,e)}};var kb,lb,mb={pathname:"",hash:"#",search:"?"},nb=f,ob=!1;n.route=function(a,b,c,d){if(0===arguments.length)return lb;if(3===arguments.length&&e(b))nb=function(d){var e=lb=na(d);if(!oa(a,c,e)){if(ob)throw new Error("Ensure the default route matches one of the routes defined in m.route");ob=!0,n.route(b,!0),ob=!1}},ja("hash"===n.route.mode?"onhashchange":"onpopstate");else if(a.addEventListener||a.attachEvent)a.href=ka()+d.attrs.href,a.addEventListener?(a.removeEventListener("click",pa),a.addEventListener("click",pa)):(a.detachEvent("onclick",pa),a.attachEvent("onclick",pa));else if(e(a))return ma.apply(this,arguments)},n.route.param=function(a){if(!kb)throw new Error("You must call m.route(element, defaultRoute, routes) before calling m.route.param()");return a?kb[a]:kb},n.route.mode="search",n.route.buildQueryString=ra,n.route.parseQueryString=sa;var pb=1,qb=2,rb=3,sb=4;return n.deferred=function(){var a=new ua;return a.promise=va(a.promise),a},n.deferred.onerror=function(a){if(wa(a))throw Ta=0,a},n.sync=function(a){function b(a,b){return function(g){return e[a]=g,b||(f="reject"),0===--d&&(c.promise(e),c[f](e)),g}}var c=n.deferred(),d=a.length,e=new Array(d),f="resolve";return a.length>0?g(a,function(a,c){a.then(b(c,!0),b(c,!1))}):c.resolve([]),c.promise},n.request=function(a){a.background!==!0&&n.startComputation();var b=new ua,c=xa,d=xa,e=Ea;return a.dataType&&"jsonp"===a.dataType.toLowerCase()||(c=a.serialize||JSON.stringify,d=a.deserialize||JSON.parse,e=a.extract||function(a){return 0===a.responseText.length&&d===JSON.parse?null:a.responseText}),a.serialize=c,a.deserialize=d,a.method=(a.method||"GET").toUpperCase(),a.url=Da(a.url,a.data),a=Ca(a,a.data,c),a.onload=a.onerror=function(c){c=c||event;var f,h="load"===c.type;f=h?a.unwrapSuccess:a.unwrapError;try{var i=(f||xa)(d(e(c.target,a)),c.target);h?(Ma(i)&&a.type?g(i,function(b,c){i[c]=new a.type(b)}):a.type&&(i=new a.type(i)),b.resolve(i)):b.reject(i)}catch(j){b.reject(j)}finally{a.background!==!0&&n.endComputation()}},Ba(a),b.promise=va(b.promise,a.initialValue),b.promise},n}); //# sourceMappingURL=mithril.min.js.map \ No newline at end of file diff --git a/mithril.min.js.map b/mithril.min.js.map index 100cda44..a5db9814 100644 --- a/mithril.min.js.map +++ b/mithril.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["mithril.js"],"names":["global","factory","m","window","module","exports","define","amd","this","undefined","isFunction","object","isObject","type","call","isString","noop","forEach","list","f","i","length","forOwn","obj","prop","hasOwn","initialize","$document","document","$location","location","$cancelAnimationFrame","cancelAnimationFrame","clearTimeout","$requestAnimationFrame","requestAnimationFrame","setTimeout","checkForAttrs","pairs","parseSelector","tag","cell","match","classes","parser","exec","attrs","id","push","pair","attrParser","getChildrenFromList","hasAttrs","args","children","slice","isArray","assignAttrs","classAttr","value","attr","join","arguments","parameterize","Error","forKeys","key","dataToString","data","toString","e","injectTextNode","parent","first","index","insertNode","nodeValue","flatten","concat","apply","node","insertBefore","childNodes","handleKeysDiffer","existing","cached","action","MOVE","from","element","nodes","createElement","INSERTION","actions","changes","sort","sortChanges","newCached","Array","change","DELETION","clear","splice","dummy","changeElement","maybeChanged","diffKeys","parentElement","keysDiffer","cachedCell","diffArray","_","parentNode","indexOf","buildArrayKeys","guid","arraySortCompare","a","b","len","elemIsDifferentEnough","dataAttrKeys","Object","keys","redraw","strategy","configContext","retain","maybeRecreateObject","onunload","controllers","controller","unload","preventDefault","getObjectNamespace","namespace","xmlns","unloadCachedControllers","views","$old","pendingRequests","scheduleConfigsToBeCalled","configs","isNew","config","context","buildUpdatedNode","editable","hasKeys","setAttributes","build","contenteditable","intact","handleNonexistentNodes","$trusted","injectHTML","createTextNode","voidElements","test","nodeName","constructor","reattachNodes","parentTag","activeElement","innerHTML","nodeType","handleTextNode","shouldReattach","valueOf","getSubArrayCount","item","buildArray","subArrayCount","shouldMaintainIdentities","cacheCount","makeCache","parentIndex","parentCache","offset","end","constructNode","is","createElementNS","constructAttrs","constructChildren","reconstructCached","getController","view","cachedControllers","updateLists","unloaders","handler","checkView","forcing","subtree","markViews","$original","initObjectNode","buildObject","shouldSetAttrDirectly","trySetAttribute","dataAttr","cachedAttr","autoredraw","rule","style","setAttributeNS","setAttribute","dataAttrs","cachedAttrs","message","removeChild","nextSibling","isElement","placeholder","insertAdjacentHTML","insertAdjacentBeforeEnd","callback","event","startComputation","endFirstComputation","getCellCacheKey","nodeCache","gettersetter","store","toJSON","component","Ctrl","originalCtrl","ctrl","rest","originalView","prototype","output","initComponent","root","isPrevented","isNullComponent","roots","topComponent","components","removeRootElement","reset","actuallyPerformRedraw","lastRedrawId","FRAME_BUDGET","computePreRedrawHook","render","computePostRedrawHook","lastRedrawCallTime","Date","endComputation","runHistoryListener","listener","path","route","mode","search","currentRoute","normalizeRoute","redirect","setScroll","getRouteBase","pathname","modes","computeAndLaunchRedirect","shouldReplaceHistoryEntry","history","pushState","method","title","routeTo","params","oldRoute","queryString","currentPath","queryIndex","paramsObj","parseQueryString","buildQueryString","delimiter","routeByValue","router","queryStart","routeParams","substr","mount","matcher","RegExp","replace","values","decodeURIComponent","routeUnobtrusive","ctrlKey","metaKey","which","returnValue","currentTarget","srcElement","toUpperCase","hash","scrollTo","prefix","duplicates","str","encodeURIComponent","charAt","split","string","cacheKey","cellCache","Deferred","onSuccess","onFailure","finish","state","REJECTED","next","deferred","RESOLVED","resolve","promiseValue","reject","thennable","then","success","fail","notThennable","count","onerror","fire","REJECTING","RESOLVING","self","TypeError","promise","propify","initialValue","bind","_callback","reason","isNativeError","EvalError","RangeError","ReferenceError","SyntaxError","URIError","identity","generateCallbackKey","getTime","Math","round","random","getJsonp","options","callbackKey","script","resp","onload","target","responseText","status","src","url","body","appendChild","runXhr","xhr","XMLHttpRequest","open","user","password","onreadystatechange","readyState","serialize","JSON","stringify","setRequestHeader","deserialize","parse","maybeXhr","FormData","send","ajax","dataType","toLowerCase","bindData","xhrOptions","querystring","parameterizeUrl","tokens","token","defaultExtract","jsonp","VERSION","hasOwnProperty","deps","mock","version","html","createRange","createContextualFragment","documentNode","documentElement","replaceChild","forceRecreation","isDocumentRoot","trust","String","ev","unloader","performRedraw","redrawing","force","withAttr","withAttrCallback","callbackThis","targetProp","_this","getAttribute","isDefaultRoute","arg1","arg2","vdom","source","addEventListener","attachEvent","href","removeEventListener","detachEvent","param","sync","synchronizer","pos","resolved","results","outstanding","arg","request","background","extract","unwrap","response","doSuccess","unwrapSuccess","unwrapError","res"],"mappings":"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","file":"mithril.min.js"} \ No newline at end of file +{"version":3,"sources":["mithril.js"],"names":["global","factory","m","window","module","exports","define","amd","this","undefined","isFunction","object","isObject","type","call","isString","noop","forEach","list","f","i","length","forOwn","obj","prop","hasOwn","initialize","$document","document","$location","location","$cancelAnimationFrame","cancelAnimationFrame","clearTimeout","$requestAnimationFrame","requestAnimationFrame","setTimeout","checkForAttrs","pairs","parseSelector","tag","cell","match","classes","parser","exec","attrs","id","push","pair","attrParser","getChildrenFromList","hasAttrs","args","children","slice","isArray","assignAttrs","classAttr","value","attr","join","arguments","parameterize","Error","forKeys","key","dataToString","data","toString","e","injectTextNode","parent","first","index","insertNode","nodeValue","flatten","concat","apply","node","insertBefore","childNodes","handleKeysDiffer","existing","cached","action","MOVE","from","element","nodes","createElement","INSERTION","actions","changes","sort","sortChanges","newCached","Array","change","DELETION","clear","splice","dummy","changeElement","maybeChanged","diffKeys","parentElement","keysDiffer","cachedCell","diffArray","_","parentNode","indexOf","buildArrayKeys","guid","arraySortCompare","a","b","len","elemIsDifferentEnough","dataAttrKeys","Object","keys","redraw","strategy","configContext","retain","maybeRecreateObject","onunload","controllers","controller","unload","preventDefault","getObjectNamespace","namespace","xmlns","unloadCachedControllers","views","$old","pendingRequests","scheduleConfigsToBeCalled","configs","isNew","config","context","buildUpdatedNode","editable","hasKeys","setAttributes","build","contenteditable","intact","handleNonexistentNodes","$trusted","injectHTML","createTextNode","voidElements","test","nodeName","constructor","reattachNodes","parentTag","activeElement","innerHTML","nodeType","trim","handleTextNode","shouldReattach","valueOf","getSubArrayCount","item","buildArray","subArrayCount","shouldMaintainIdentities","cacheCount","makeCache","parentIndex","parentCache","offset","end","constructNode","is","createElementNS","constructAttrs","constructChildren","reconstructCached","getController","view","cachedControllers","updateLists","idx","unloaders","handler","checkView","forcing","subtree","markViews","$original","initObjectNode","buildObject","shouldSetAttrDirectly","trySetAttribute","dataAttr","cachedAttr","autoredraw","rule","style","setAttributeNS","setAttribute","dataAttrs","cachedAttrs","message","removeChild","nextSibling","isElement","placeholder","insertAdjacentHTML","insertAdjacentBeforeEnd","callback","event","startComputation","endFirstComputation","getCellCacheKey","nodeCache","gettersetter","store","toJSON","component","Ctrl","originalCtrl","ctrl","rest","originalView","prototype","output","initComponent","root","isPrevented","isNullComponent","roots","topComponent","components","removeRootElement","reset","actuallyPerformRedraw","lastRedrawId","FRAME_BUDGET","computePreRedrawHook","render","computePostRedrawHook","lastRedrawCallTime","Date","endComputation","runHistoryListener","listener","path","route","mode","search","currentRoute","normalizeRoute","redirect","setScroll","getRouteBase","pathname","modes","computeAndLaunchRedirect","shouldReplaceHistoryEntry","history","pushState","method","title","routeTo","params","oldRoute","queryString","currentPath","queryIndex","paramsObj","parseQueryString","buildQueryString","delimiter","routeByValue","router","queryStart","routeParams","substr","mount","matcher","RegExp","replace","values","decodeURIComponent","routeUnobtrusive","ctrlKey","metaKey","which","returnValue","currentTarget","srcElement","toUpperCase","hash","scrollTo","prefix","duplicates","str","encodeURIComponent","charAt","split","string","cacheKey","cellCache","Deferred","onSuccess","onFailure","finish","state","REJECTED","next","deferred","RESOLVED","resolve","promiseValue","reject","thennable","then","success","fail","notThennable","count","onerror","fire","REJECTING","RESOLVING","self","TypeError","promise","propify","initialValue","bind","_callback","reason","isNativeError","EvalError","RangeError","ReferenceError","SyntaxError","URIError","identity","generateCallbackKey","getTime","Math","round","random","getJsonp","options","callbackKey","script","resp","onload","target","responseText","status","src","url","body","appendChild","runXhr","xhr","XMLHttpRequest","open","user","password","onreadystatechange","readyState","serialize","JSON","stringify","setRequestHeader","deserialize","parse","maybeXhr","FormData","send","ajax","dataType","toLowerCase","bindData","xhrOptions","querystring","parameterizeUrl","tokens","token","defaultExtract","jsonp","VERSION","hasOwnProperty","deps","mock","version","html","createRange","createContextualFragment","documentNode","documentElement","replaceChild","forceRecreation","isDocumentRoot","trust","String","ev","unloader","performRedraw","redrawing","force","withAttr","withAttrCallback","callbackThis","targetProp","_this","getAttribute","isDefaultRoute","arg1","arg2","vdom","source","addEventListener","attachEvent","href","removeEventListener","detachEvent","param","sync","synchronizer","pos","resolved","results","outstanding","arg","request","background","extract","unwrap","doSuccess","unwrapSuccess","unwrapError","response","res"],"mappings":"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","file":"mithril.min.js"} \ No newline at end of file diff --git a/test/mithril.request.js b/test/mithril.request.js index fd8ab1f4..d432ab43 100644 --- a/test/mithril.request.js +++ b/test/mithril.request.js @@ -345,4 +345,40 @@ describe("m.request()", function () { expect(req()).to.eql({foo: "bar1"}) }) }) + + it("ends the computation when a SyntaxError is thrown from `options.extract`", function () { // eslint-disable-line max-len + var root = mock.document.createElement("div") + var viewSpy = sinon.spy(function () { return m("div") }) + var resolved = sinon.spy() + var rejected = sinon.spy() + + m.mount(root, { + controller: function () { + m.request({ + url: "/test", + extract: function () { + throw new SyntaxError() + } + }).then(resolved, rejected) + }, + + view: viewSpy + }) + + // For good measure + mock.requestAnimationFrame.$resolve() + + expect(function () { + resolve() + }).to.throw() + + expect(resolved).to.not.have.been.called + expect(rejected).to.not.have.been.called + + // The controller should throw, but the view should still render. + expect(viewSpy).to.have.been.called + + // For good measure + mock.requestAnimationFrame.$resolve() + }) }) diff --git a/test/mithril.trust.js b/test/mithril.trust.js index 41881b31..d16bf11b 100644 --- a/test/mithril.trust.js +++ b/test/mithril.trust.js @@ -52,7 +52,7 @@ describe("m.trust()", function () { m("td", "foo") ]) - expect(root.childNodes[2].tagName).to.equal("td") + expect(root.childNodes[2].tagName).to.equal("TD") }) }) }) From 71c880d78d5a7d76b535aace376925acc7bea48f Mon Sep 17 00:00:00 2001 From: Einar Date: Fri, 11 Dec 2015 22:03:49 +0000 Subject: [PATCH 33/63] fix hasty error --- mithril.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mithril.js b/mithril.js index 967de22c..2c9de619 100644 --- a/mithril.js +++ b/mithril.js @@ -735,12 +735,12 @@ void (function (global, factory) { // eslint-disable-line var idx = controllers.push(controller) - 1 unloaders[idx] = { controller: controller, - handler: function () { + handler: function (ev) { controllers.splice(controllers.indexOf(controller), 1) views.splice(views.indexOf(view), 1) var unload = controller && controller.onunload if (type.call(unload) === "[object Function]") { - controller.onunload() + controller.onunload(ev) } } } From 9428fe729ccffcc4e710483de75dc494ae38ef16 Mon Sep 17 00:00:00 2001 From: impinball Date: Tue, 15 Dec 2015 06:38:10 -0500 Subject: [PATCH 34/63] s/fufill/resolve/ --- mithril.js | 4 ++-- mithril.min.js | 2 +- mithril.min.js.map | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mithril.js b/mithril.js index 85e70006..b3eee4c9 100644 --- a/mithril.js +++ b/mithril.js @@ -1218,9 +1218,9 @@ void (function (global, factory) { // eslint-disable-line var prop = m.prop() promise.then(prop) - prop.then = function (fufill, reject) { + prop.then = function (resolve, reject) { return promise.then(function () { - return fufill(prop()) + return resolve(prop()) }, reject) } diff --git a/mithril.min.js b/mithril.min.js index b63bc274..ee01a4f4 100644 --- a/mithril.min.js +++ b/mithril.min.js @@ -4,5 +4,5 @@ http://mithril.js.org (c) 2014-2015 Leo Horie License: MIT */ -void function(a,b){"use strict";var c=b("undefined"!=typeof window?window:{});"object"==typeof module&&null!=module&&module.exports?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):a.m=c}(this,function(a,b){"use strict";function c(a){return"function"==typeof a}function d(a){return"[object Object]"===Ma.call(a)}function e(a){return"[object String]"===Ma.call(a)}function f(){}function g(a,b){for(var c=0;cd;d++)if(a[d]!==b[d])return!1;return!0}function y(a,b,c){return a.tag!==b.tag?!0:x(c,Object.keys(b.attrs))?a.attrs.id!==b.attrs.id?!0:a.attrs.key!==b.attrs.key?!0:"all"===n.redraw.strategy()?!(b.configContext&&b.configContext.retain===!0):"diff"===n.redraw.strategy()?b.configContext&&b.configContext.retain===!1:void 0:!0}function z(a,b,d){y(a,b,d)&&(b.nodes.length&&Z(b.nodes),b.configContext&&c(b.configContext.onunload)&&b.configContext.onunload(),b.controllers&&g(b.controllers,function(a){a.unload&&a.onunload({preventDefault:f})}))}function A(a,b){return a.attrs.xmlns?a.attrs.xmlns:"svg"===a.tag?"http://www.w3.org/2000/svg":"math"===a.tag?"http://www.w3.org/1998/Math/MathML":b}function B(a,b,c){c.length&&(a.views=b,a.controllers=c,g(c,function(a){if(a.onunload&&a.onunload.$old&&(a.onunload=a.onunload.$old),Va&&a.onunload){var b=a.onunload;a.onunload=f,a.onunload.$old=b}}))}function C(a,b,d,e,f){var g=b.attrs.config;if(c(g)){var h=f.configContext=f.configContext||{};a.push(function(){return g.call(b,d,!e,h,f)})}}function D(a,c,d,e,f,g,h,i){var j=a.nodes[0];return e&&Y(j,c.tag,c.attrs,a.attrs,f),a.children=U(j,c.tag,b,b,c.children,a.children,!1,0,c.attrs.contenteditable?j:d,f,h),a.nodes.intact=!0,i.length&&(a.views=g,a.controllers=i),j}function E(a,b,c){var d;a.$trusted?d=_(b,c,a):(d=[Ha.createTextNode(a)],Ra.test(b.nodeName)||s(b,d[0],c));var e;return e="string"==typeof a||"number"==typeof a||"boolean"==typeof a?new a.constructor(a):a,e.nodes=d,e}function F(a,b,c,d,e,f){var g=b.nodes;return d&&d===Ha.activeElement||(a.$trusted?(Z(g,b),g=_(c,e,a)):"textarea"===f?c.value=a:d?d.innerHTML=a:((1===g[0].nodeType||g.length>1||g[0].nodeValue.trim&&!g[0].nodeValue.trim())&&(Z(b.nodes,b),g=[Ha.createTextNode(a)]),q(c,g[0],e,a))),b=new a.constructor(a),b.nodes=g,b}function G(a,b,c,d,e,f,g){return 0===a.nodes.length?E(b,d,c):a.valueOf()!==b.valueOf()||e?F(b,a,d,f,c,g):(a.nodes.intact=!0,a)}function H(a){if(!a.$trusted)return Oa(a)?a.length:1;var b=a.match(/<[^\/]|\>\s*[^<]/g);return null!=b?b.length:void 0}function I(a,c,d,e,f,g,h,i,j){a=r(a);var k=[],l=c.length===a.length,m=0,n={},p=!1;o(c,function(a,b){p=!0,n[c[b].attrs.key]={action:Sa,index:b}}),w(a),p&&(c=u(a,c,n,d));for(var q=0,s=0,t=a.length;t>s;s++){var x=U(d,f,c,e,a[s],c[q],g,e+m||m,h,i,j);x!==b&&(l=l&&x.nodes.intact,m+=H(x),c[q++]=x)}return l||v(a,c,k),c}function J(a,b,c,d,e){if(null!=b){if(Ma.call(b)===Ma.call(a))return b;if(e&&e.nodes){var f=c-d,g=f+(Oa(a)?a:b.nodes).length;Z(e.nodes.slice(f,g),e.slice(f,g))}else b.nodes&&Z(b.nodes,b)}return b=new a.constructor,b.tag&&(b={}),b.nodes=[],b}function K(a,c){return c===b?a.attrs.is?Ha.createElement(a.tag,a.attrs.is):Ha.createElement(a.tag):a.attrs.is?Ha.createElementNS(c,a.tag,a.attrs.is):Ha.createElementNS(c,a.tag)}function L(a,b,c,d){return d?Y(b,a.tag,a.attrs,{},c):a.attrs}function M(a,c,d,e,f,g){return null!=a.children&&0!==a.children.length?U(c,a.tag,b,b,a.children,d.children,!0,0,a.attrs.contenteditable?c:e,f,g):a.children}function N(a,b,c,d,e,f,g){var h={tag:a.tag,attrs:b,children:c,nodes:[d]};return B(h,f,g),h.children&&!h.children.nodes&&(h.children.nodes=[]),"select"===a.tag&&"value"in a.attrs&&Y(d,a.tag,{value:a.attrs.value},{},e),h}function O(a,b,c,d){var e="diff"===n.redraw.strategy()&&a?a.indexOf(b):-1;return e>-1?c[e]:"function"==typeof d?new d:{}}function P(a,b,c,d){a.push(c);var e=b.push(d)-1;Xa[e]={controller:d,handler:function(){b.splice(b.indexOf(d),1),a.splice(a.indexOf(c),1);var e=d&&d.onunload;"[object Function]"===Ma.call(e)&&d.onunload()}}}function Q(a,b,c,d,e,f){var g=O(c.views,b,d,a.controller),h=+(a&&a.attrs&&a.attrs.key);return a=0===Va||Ya||d&&d.indexOf(g)>-1?a.view(g):{tag:"placeholder"},"retain"===a.subtree?c:(h===h&&((a.attrs=a.attrs||{}).key=h),P(f,e,b,g),a)}function R(a,b,c,d){for(var e=b&&b.controllers;null!=a.view;)a=Q(a,a.view.$original||a.view,b,e,d,c);return a}function S(a,b,c,d,e,f,g,h,i,j,k,l){var m;if(a){m=K(b,c);var n=L(b,m,c,d),o=M(b,m,e,f,c,g);e=N(b,n,o,m,c,h,i)}else m=D(e,b,f,d,c,h,g,i);return(a||k&&null!=m)&&s(j,m,l),C(g,b,m,a,e),e}function T(a,b,c,d,f,g,h,i){var j=[],k=[];if(a=R(a,b,j,k),!a.tag&&k.length)throw new Error("Component template must return a virtual element, not an array, string, etc.");a.attrs=a.attrs||{},b.attrs=b.attrs||{};var l=Object.keys(a.attrs),m=l.length>+("key"in a.attrs);return z(a,b,l),e(a.tag)?S(0===b.nodes.length,a,A(a,h),m,b,c,i,j,k,d,g,f):void 0}function U(a,b,e,f,g,h,i,j,k,l,m){return g=p(g),"retain"===g.subtree?h:(h=J(g,h,j,f,e),Oa(g)?I(g,h,a,j,b,i,k,l,m):null!=g&&d(g)?T(g,h,k,a,j,i,l,m):c(g)?h:G(h,g,j,a,i,k,b))}function V(a,b){return a.action-b.action||a.index-b.index}function W(a){return"list"!==a&&"style"!==a&&"form"!==a&&"type"!==a&&"width"!==a&&"height"!==a}function X(a,b,e,f,g,i){if("config"!==a&&"key"!==a)if(c(b)&&"on"===a.slice(0,2))f[a]=aa(b,f);else if("style"===a&&null!=b&&d(b)){h(b,function(a,b){(null==e||e[b]!==a)&&(f.style[b]=a)});for(var j in e)Na.call(e,j)&&(Na.call(b,j)||(f.style[j]=""))}else null!=g?"href"===a?f.setAttributeNS("http://www.w3.org/1999/xlink","href",b):f.setAttribute("className"===a?"class":a,b):a in f&&W(a)?("input"!==i||f[a]!==b)&&(f[a]=b):f.setAttribute(a,b)}function Y(a,b,c,d,e){return h(c,function(c,f){var g=d[f];if(f in d&&g===c)"value"===f&&"input"===b&&a.value!=c&&(a.value=c);else{d[f]=c;try{X(f,c,g,a,e,b)}catch(h){if(h.message.indexOf("Invalid argument")<0)throw h}}}),d}function Z(a,b){for(var c=a.length-1;c>=0;c--)if(a[c]&&a[c].parentNode){try{a[c].parentNode.removeChild(a[c])}catch(d){}b=[].concat(b),b[c]&&$(b[c])}a.length&&(a.length=0)}function $(a){a.configContext&&c(a.configContext.onunload)&&(a.configContext.onunload(),a.configContext.onunload=null),a.controllers&&g(a.controllers,function(a){c(a.onunload)&&a.onunload({preventDefault:f})}),a.children&&(Oa(a.children)?g(a.children,$):a.children.tag&&$(a.children))}function _(a,b,c){var d=a.childNodes[b];if(d){var e=1!==d.nodeType,f=Ha.createElement("span");e?(a.insertBefore(f,d||null),f.insertAdjacentHTML("beforebegin",c),a.removeChild(f)):d.insertAdjacentHTML("beforebegin",c)}else Za(a,c);for(var g=[];a.childNodes[b]!==d;)g.push(a.childNodes[b]),b++;return g}function aa(a,b){return function(c){c=c||event,n.redraw.strategy("diff"),n.startComputation();try{return a.call(b,c)}finally{la()}}}function ba(a){var b=_a.indexOf(a);return 0>b?_a.push(a)-1:b}function ca(a){function b(){return arguments.length&&(a=arguments[0]),a}return b.toJSON=function(){return a},b}function da(a){return null!=a&&(d(a)||c(a))&&c(a.then)}function ea(a,b){return a.then?a.then(b):b()}function fa(a){var b=n.prop();return a.then(b),b.then=function(c,d){return a.then(function(){return c(b())},d)},b["catch"]=function(c){return a.then(function(){return b()},c)},b["finally"]=function(b){return a.then(function(a){return ea(b(),function(){return a})},function(a){return ea(b(),function(){throw a})})},b}function ga(a,b){function c(){return e.apply(this,b)||this}function d(c){for(var d=[c].concat(b),e=1;e0&&Ka(ib),ib=Ja(ka,hb)}function ka(){fb&&(fb(),fb=null),g(cb,function(a,b){var c=db[b];if(eb[b]){var d=[eb[b]];n.render(a,c.view?c.view(eb[b],d):"")}}),gb&&(gb(),gb=null),ib=null,jb=new Date,n.redraw.strategy("diff")}function la(){"none"===n.redraw.strategy()?(Va--,n.redraw.strategy("diff")):n.endComputation()}function ma(b){a[b]=function(){var a=Ia[n.route.mode];"pathname"===n.route.mode&&(a+=Ia.search),nb!==qa(a)&&pb(a)},fb=ta,a[b]()}function na(){return("pathname"===n.route.mode?"":Ia.pathname)+ob[n.route.mode]}function oa(b){if(a.history.pushState){fb=ta;var c=b?"replaceState":"pushState";gb=function(){a.history[c](null,Ha.title,ob[n.route.mode]+nb)},pb(ob[n.route.mode]+nb)}else Ia[n.route.mode]=nb,pb(ob[n.route.mode]+nb)}function pa(a,b,c){arguments.length<3&&"object"!=typeof b&&(c=b,b=null);var d=nb;nb=a;var e,f,g=b||{},i=nb.indexOf("?");if(i>=0){var j=va(nb.slice(i+1));h(g,function(a,b){j[b]=g[b]}),e=ua(j),f=nb.slice(0,i)}else e=ua(b),f=nb;if(e){var k=-1===f.indexOf("?")?"?":"&";nb=f+k+e}return oa(c||d===a)}function qa(a){return a.slice(ob[n.route.mode].length)}function ra(a,b,c){var d=c.indexOf("?");d>=0?(mb=va(c.substr(d+1,c.length)),c=c.substr(0,d)):mb={};var e=Object.keys(b),f=e.indexOf(c);if(f>=0)return n.mount(a,b[e[f]]),!0;for(var h in b)if(Na.call(b,h)){if(h===c)return n.mount(a,b[h]),!0;var i=new RegExp("^"+h.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(i.test(c))return c.replace(i,function(){var c=h.match(/:[^\/]+/g)||[],d=[].slice.call(arguments,1,-2);g(c,function(a,b){a=a.replace(/:|\./g,""),mb[a]=decodeURIComponent(d[b])}),n.mount(a,b[h])}),!0}}function sa(a){if(a=a||event,!a.ctrlKey&&!a.metaKey&&2!==a.which){a.preventDefault?a.preventDefault():a.returnValue=!1;var b,c=a.currentTarget||a.srcElement;for(b="pathname"===n.route.mode&&c.search?va(c.search.slice(1)):{};c&&"A"!==c.nodeName.toUpperCase();)c=c.parentNode;n.route(c[n.route.mode].slice(ob[n.route.mode].length),b)}}function ta(){"hash"!==n.route.mode&&Ia.hash?Ia.hash=Ia.hash:a.scrollTo(0,0)}function ua(a,c){var e={},f=[];return h(a,function(a,h){var i=c?c+"["+h+"]":h;if(null===a)f.push(encodeURIComponent(i));else if(d(a))f.push(ua(a,i));else if(Oa(a)){var j=[];e[i]=e[i]||{},g(a,function(a){e[i][a]||(e[i][a]=!0,j.push(encodeURIComponent(i)+"="+encodeURIComponent(a)))}),f.push(j.join("&"))}else a!==b&&f.push(encodeURIComponent(i)+"="+encodeURIComponent(a))}),f.join("&")}function va(a){if(""===a||null==a)return{};"?"===a.charAt(0)&&(a=a.slice(1));var b=a.split("&"),c={};return g(b,function(a){var b=a.split("="),d=decodeURIComponent(b[0]),e=2===b.length?decodeURIComponent(b[1]):null;null!=c[d]?(Oa(c[d])||(c[d]=[c[d]]),c[d].push(e)):c[d]=e}),c}function wa(a){var c=ba(a);Z(a.childNodes,ab[c]),ab[c]=b}function xa(a,d){function e(a,b,c){return da(a)?a.then(function(a){e(a,b,c)},function(a){e(a,c,c)}):b(r=a)}function h(a){a.resolve(r)}function i(a){a.reject(r)}function j(a){t.push(a)}function k(a){return u!==i&&a(r),a}function l(a){u=a,g(t,a),m=q=null}function m(a,b){e(a,function(){l(b===tb?h:i)},function(){l(i)})}function o(a,b){var c=0;try{return a.then(function(a){c++||q(rb,a,b)},function(a){c++||q(sb,a,b)})}catch(d){return n.deferred.onerror(d),q(sb,d,b)}}function p(b,e,f){try{e===rb&&c(a)?b=a(b):e===sb&&c(d)&&(b=d(b),e=rb)}catch(g){return n.deferred.onerror(g),m(g,ub)}return b===f?m(TypeError(),ub):m(b,e===rb?tb:ub)}function q(a,b,c){var d;try{d=da(b)}catch(e){return n.deferred.onerror(e),q(sb,e,c)}return a===sb&&n.deferred.onerror(b),d?o(b,c):p(b,a,c)}var r,s=this,t=[],u=j;s.resolve=function(a){return u===j&&q(rb,a,s),this},s.reject=function(a){return u===j&&q(sb,a,s),this},s.promise=function(a){return arguments.length&&e(a,f,f),u!==i?r:b},s.promise.then=function(a,b){var c=new xa(a,b);return u(c),k(c.promise)},s.promise["catch"]=function(a){return s.promise.then(null,a)},s.promise["finally"]=function(a){function b(){var b=(new xa).resolve(a()).promise;return u!==i&&b(r),b}return s.promise.then(function(){return b().then(function(){return r})},function(){b().then(function(){throw r})})}}function ya(a){return a instanceof EvalError||a instanceof RangeError||a instanceof ReferenceError||a instanceof SyntaxError||a instanceof TypeError||a instanceof URIError}function za(a){return a}function Aa(){return"mithril_callback_"+(new Date).getTime()+"_"+Math.round(1e16*Math.random()).toString(36)}function Ba(c){var d=Aa(),e=Ha.createElement("script");a[d]=function(f){e.parentNode.removeChild(e),c.onload({type:"load",target:{responseText:f}}),a[d]=b},e.onerror=function(){return e.parentNode.removeChild(e),c.onerror({type:"error",target:{status:500,responseText:'{"error": "Error making jsonp request"}'}}),a[d]=b,!1},e.onload=function(){return!1},e.src=c.url+(c.url.indexOf("?")>0?"&":"?")+(c.callbackKey?c.callbackKey:"callback")+"="+d+"&"+ua(c.data||{}),Ha.body.appendChild(e)}function Ca(b){var d=new a.XMLHttpRequest;if(d.open(b.method,b.url,!0,b.user,b.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?b.onload({type:"load",target:d}):b.onerror({type:"error",target:d}))},b.serialize===JSON.stringify&&b.data&&"GET"!==b.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),b.deserialize===JSON.parse&&d.setRequestHeader("Accept","application/json, text/*"),c(b.config)){var f=b.config(d,b);null!=f&&(d=f)}var g;if(g="GET"!==b.method&&b.data?b.data:"",g&&!e(g)&&g.constructor!==a.FormData)throw new Error("Request data should be either be a string or FormData. Check the `serialize` option in `m.request`");return d.send(g),d}function Da(a){return a.dataType&&"jsonp"===a.dataType.toLowerCase()?Ba(a):Ca(a)}function Ea(a,b,c){if("GET"===a.method&&"jsonp"!==a.dataType){var d=a.url.indexOf("?")<0?"?":"&",e=ua(b);a.url+=e?d+e:""}else a.data=c(b);return a}function Fa(a,b){var c=a.match(/:[a-z]\w+/gi);return c&&b&&g(c,function(c){var d=c.slice(1);a=a.replace(c,b[d]),delete b[d]}),a}function Ga(a){return a.responseText}var Ha,Ia,Ja,Ka,La="v0.2.1",Ma={}.toString,Na={}.hasOwnProperty,Oa=Array.isArray||function(a){return"[object Array]"===Ma.call(a)},Pa=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,Qa=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,Ra=/^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/;i(a),n.deps=function(b){return i(a=b||a),a},n.version=function(){return La};var Sa=1,Ta=2,Ua=3,Va=0;n.startComputation=function(){Va++},n.endComputation=function(){Va>1?Va--:(Va=0,n.redraw())};var Wa,Xa=[],Ya=!1,Za=function(){try{return Ha.createRange().createContextualFragment("x"),function(a,b){a.appendChild(Ha.createRange().createContextualFragment(b))}}catch(a){return function(a,b){a.insertAdjacentHTML("beforeend",b)}}}(),$a={appendChild:function(a){Wa===b&&(Wa=Ha.createElement("html")),Ha.documentElement&&Ha.documentElement!==a?Ha.replaceChild(a,Ha.documentElement):Ha.appendChild(a),this.childNodes=Ha.childNodes},insertBefore:function(a){this.appendChild(a)},childNodes:[]},_a=[],ab={};n.render=function(a,c,d){if(!a)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var e,f=[],h=ba(a),i=a===Ha;e=i||a===Ha.documentElement?$a:a,i&&"html"!==c.tag&&(c={tag:"html",attrs:{},children:c}),ab[h]===b&&Z(e.childNodes),d===!0&&wa(a),ab[h]=U(e,null,b,b,c,ab[h],!1,0,null,b,f),g(f,function(a){a()})},n.trust=function(a){return a=new String(a),a.$trusted=!0,a},n.prop=function(a){return da(a)?fa(a):ca(a)};var bb,cb=[],db=[],eb=[],fb=null,gb=null,hb=16;n.component=function(a){for(var b=[],c=1;cd&&(d=cb.length);var e=!1,f={preventDefault:function(){e=!0,fb=gb=null}};return g(Xa,function(a){null!=a.controller&&(a.handler.call(a.controller,f),a.controller.onunload=null)}),e?g(Xa,function(a){a.controller.onunload=a.handler}):Xa=[],eb[d]&&c(eb[d].onunload)&&eb[d].onunload(f),ha(b,a,d,e)};var ib=0,jb=0,kb=Ja===a.requestAnimationFrame?ja:function(){+new Date-jb>hb&&ja()},lb=!1;n.redraw=function(a){if(!lb){lb=!0,a&&(Ya=!0);try{ib&&!a?kb():(ka(),ib=Ja(function(){ib=0},hb))}finally{lb=Ya=!1}}},n.redraw.strategy=n.prop(),n.withAttr=function(a,b,c){return function(d){d=d||event;var e,f=d.currentTarget||this,g=c||this;e=a in f?f[a]:f.getAttribute(a),b.call(g,e)}};var mb,nb,ob={pathname:"",hash:"#",search:"?"},pb=f,qb=!1;n.route=function(a,b,c,d){if(0===arguments.length)return nb;if(3===arguments.length&&e(b))pb=function(d){var e=nb=qa(d);if(!ra(a,c,e)){if(qb)throw new Error("Ensure the default route matches one of the routes defined in m.route");qb=!0,n.route(b,!0),qb=!1}},ma("hash"===n.route.mode?"onhashchange":"onpopstate");else if(a.addEventListener||a.attachEvent)a.href=na()+d.attrs.href,a.addEventListener?(a.removeEventListener("click",sa),a.addEventListener("click",sa)):(a.detachEvent("onclick",sa),a.attachEvent("onclick",sa));else if(e(a))return pa.apply(this,arguments)},n.route.param=function(a){if(!mb)throw new Error("You must call m.route(element, defaultRoute, routes) before calling m.route.param()");return a?mb[a]:mb},n.route.mode="search",n.route.buildQueryString=ua,n.route.parseQueryString=va;var rb=1,sb=2,tb=3,ub=4;return n.deferred=function(){return new xa},n.deferred.prototype=xa.prototype,n.deferred.prototype.constructor=n.deferred,n.deferred.onerror=function(a){if(ya(a))throw Va=0,a},n.sync=function(a){function b(a,b){return function(g){return e[a]=g,b||(f="reject"),0===--d&&(c.promise(e),c[f](e)),g}}var c=new xa,d=a.length,e=new Array(d),f="resolve";return a.length>0?g(a,function(a,c){a.then(b(c,!0),b(c,!1))}):c.resolve([]),c.promise},n.request=function(a){a.background!==!0&&n.startComputation();var b=new xa,c=za,d=za,e=Ga;return a.dataType&&"jsonp"===a.dataType.toLowerCase()||(c=a.serialize||JSON.stringify,d=a.deserialize||JSON.parse,e=a.extract||function(a){return 0===a.responseText.length&&d===JSON.parse?null:a.responseText}),a.serialize=c,a.deserialize=d,a.method=(a.method||"GET").toUpperCase(),a.url=Fa(a.url,a.data),a=Ea(a,a.data,c),a.onload=a.onerror=function(c){c=c||event;var f,h="load"===c.type;f=h?a.unwrapSuccess:a.unwrapError;try{var i=(f||za)(d(e(c.target,a)),c.target);h?(Oa(i)&&a.type?g(i,function(b,c){i[c]=new a.type(b)}):a.type&&(i=new a.type(i)),b.resolve(i)):b.reject(i)}catch(j){b.reject(j)}finally{a.background!==!0&&n.endComputation()}},Da(a),b.promise(a.initialValue),b.promise},n}); +void function(a,b){"use strict";var c=b("undefined"!=typeof window?window:{});"object"==typeof module&&null!=module&&module.exports?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):a.m=c}(this,function(a,b){"use strict";function c(a){return"function"==typeof a}function d(a){return"[object Object]"===Ma.call(a)}function e(a){return"[object String]"===Ma.call(a)}function f(){}function g(a,b){for(var c=0;cd;d++)if(a[d]!==b[d])return!1;return!0}function y(a,b,c){return a.tag!==b.tag?!0:x(c,Object.keys(b.attrs))?a.attrs.id!==b.attrs.id?!0:a.attrs.key!==b.attrs.key?!0:"all"===n.redraw.strategy()?!(b.configContext&&b.configContext.retain===!0):"diff"===n.redraw.strategy()?b.configContext&&b.configContext.retain===!1:void 0:!0}function z(a,b,d){y(a,b,d)&&(b.nodes.length&&Z(b.nodes),b.configContext&&c(b.configContext.onunload)&&b.configContext.onunload(),b.controllers&&g(b.controllers,function(a){a.unload&&a.onunload({preventDefault:f})}))}function A(a,b){return a.attrs.xmlns?a.attrs.xmlns:"svg"===a.tag?"http://www.w3.org/2000/svg":"math"===a.tag?"http://www.w3.org/1998/Math/MathML":b}function B(a,b,c){c.length&&(a.views=b,a.controllers=c,g(c,function(a){if(a.onunload&&a.onunload.$old&&(a.onunload=a.onunload.$old),Va&&a.onunload){var b=a.onunload;a.onunload=f,a.onunload.$old=b}}))}function C(a,b,d,e,f){var g=b.attrs.config;if(c(g)){var h=f.configContext=f.configContext||{};a.push(function(){return g.call(b,d,!e,h,f)})}}function D(a,c,d,e,f,g,h,i){var j=a.nodes[0];return e&&Y(j,c.tag,c.attrs,a.attrs,f),a.children=U(j,c.tag,b,b,c.children,a.children,!1,0,c.attrs.contenteditable?j:d,f,h),a.nodes.intact=!0,i.length&&(a.views=g,a.controllers=i),j}function E(a,b,c){var d;a.$trusted?d=_(b,c,a):(d=[Ha.createTextNode(a)],Ra.test(b.nodeName)||s(b,d[0],c));var e;return e="string"==typeof a||"number"==typeof a||"boolean"==typeof a?new a.constructor(a):a,e.nodes=d,e}function F(a,b,c,d,e,f){var g=b.nodes;return d&&d===Ha.activeElement||(a.$trusted?(Z(g,b),g=_(c,e,a)):"textarea"===f?c.value=a:d?d.innerHTML=a:((1===g[0].nodeType||g.length>1||g[0].nodeValue.trim&&!g[0].nodeValue.trim())&&(Z(b.nodes,b),g=[Ha.createTextNode(a)]),q(c,g[0],e,a))),b=new a.constructor(a),b.nodes=g,b}function G(a,b,c,d,e,f,g){return 0===a.nodes.length?E(b,d,c):a.valueOf()!==b.valueOf()||e?F(b,a,d,f,c,g):(a.nodes.intact=!0,a)}function H(a){if(!a.$trusted)return Oa(a)?a.length:1;var b=a.match(/<[^\/]|\>\s*[^<]/g);return null!=b?b.length:void 0}function I(a,c,d,e,f,g,h,i,j){a=r(a);var k=[],l=c.length===a.length,m=0,n={},p=!1;o(c,function(a,b){p=!0,n[c[b].attrs.key]={action:Sa,index:b}}),w(a),p&&(c=u(a,c,n,d));for(var q=0,s=0,t=a.length;t>s;s++){var x=U(d,f,c,e,a[s],c[q],g,e+m||m,h,i,j);x!==b&&(l=l&&x.nodes.intact,m+=H(x),c[q++]=x)}return l||v(a,c,k),c}function J(a,b,c,d,e){if(null!=b){if(Ma.call(b)===Ma.call(a))return b;if(e&&e.nodes){var f=c-d,g=f+(Oa(a)?a:b.nodes).length;Z(e.nodes.slice(f,g),e.slice(f,g))}else b.nodes&&Z(b.nodes,b)}return b=new a.constructor,b.tag&&(b={}),b.nodes=[],b}function K(a,c){return c===b?a.attrs.is?Ha.createElement(a.tag,a.attrs.is):Ha.createElement(a.tag):a.attrs.is?Ha.createElementNS(c,a.tag,a.attrs.is):Ha.createElementNS(c,a.tag)}function L(a,b,c,d){return d?Y(b,a.tag,a.attrs,{},c):a.attrs}function M(a,c,d,e,f,g){return null!=a.children&&0!==a.children.length?U(c,a.tag,b,b,a.children,d.children,!0,0,a.attrs.contenteditable?c:e,f,g):a.children}function N(a,b,c,d,e,f,g){var h={tag:a.tag,attrs:b,children:c,nodes:[d]};return B(h,f,g),h.children&&!h.children.nodes&&(h.children.nodes=[]),"select"===a.tag&&"value"in a.attrs&&Y(d,a.tag,{value:a.attrs.value},{},e),h}function O(a,b,c,d){var e="diff"===n.redraw.strategy()&&a?a.indexOf(b):-1;return e>-1?c[e]:"function"==typeof d?new d:{}}function P(a,b,c,d){a.push(c);var e=b.push(d)-1;Xa[e]={controller:d,handler:function(e){b.splice(b.indexOf(d),1),a.splice(a.indexOf(c),1);var f=d&&d.onunload;"[object Function]"===Ma.call(f)&&d.onunload(e)}}}function Q(a,b,c,d,e,f){var g=O(c.views,b,d,a.controller),h=+(a&&a.attrs&&a.attrs.key);return a=0===Va||Ya||d&&d.indexOf(g)>-1?a.view(g):{tag:"placeholder"},"retain"===a.subtree?c:(h===h&&((a.attrs=a.attrs||{}).key=h),P(f,e,b,g),a)}function R(a,b,c,d){for(var e=b&&b.controllers;null!=a.view;)a=Q(a,a.view.$original||a.view,b,e,d,c);return a}function S(a,b,c,d,e,f,g,h,i,j,k,l){var m;if(a){m=K(b,c);var n=L(b,m,c,d),o=M(b,m,e,f,c,g);e=N(b,n,o,m,c,h,i)}else m=D(e,b,f,d,c,h,g,i);return(a||k&&null!=m)&&s(j,m,l),C(g,b,m,a,e),e}function T(a,b,c,d,f,g,h,i){var j=[],k=[];if(a=R(a,b,j,k),!a.tag&&k.length)throw new Error("Component template must return a virtual element, not an array, string, etc.");a.attrs=a.attrs||{},b.attrs=b.attrs||{};var l=Object.keys(a.attrs),m=l.length>+("key"in a.attrs);return z(a,b,l),e(a.tag)?S(0===b.nodes.length,a,A(a,h),m,b,c,i,j,k,d,g,f):void 0}function U(a,b,e,f,g,h,i,j,k,l,m){return g=p(g),"retain"===g.subtree?h:(h=J(g,h,j,f,e),Oa(g)?I(g,h,a,j,b,i,k,l,m):null!=g&&d(g)?T(g,h,k,a,j,i,l,m):c(g)?h:G(h,g,j,a,i,k,b))}function V(a,b){return a.action-b.action||a.index-b.index}function W(a){return"list"!==a&&"style"!==a&&"form"!==a&&"type"!==a&&"width"!==a&&"height"!==a}function X(a,b,e,f,g,i){if("config"!==a&&"key"!==a)if(c(b)&&"on"===a.slice(0,2))f[a]=aa(b,f);else if("style"===a&&null!=b&&d(b)){h(b,function(a,b){(null==e||e[b]!==a)&&(f.style[b]=a)});for(var j in e)Na.call(e,j)&&(Na.call(b,j)||(f.style[j]=""))}else null!=g?"href"===a?f.setAttributeNS("http://www.w3.org/1999/xlink","href",b):f.setAttribute("className"===a?"class":a,b):a in f&&W(a)?("input"!==i||f[a]!==b)&&(f[a]=b):f.setAttribute(a,b)}function Y(a,b,c,d,e){return h(c,function(c,f){var g=d[f];if(f in d&&g===c)"value"===f&&"input"===b&&a.value!=c&&(a.value=c);else{d[f]=c;try{X(f,c,g,a,e,b)}catch(h){if(h.message.indexOf("Invalid argument")<0)throw h}}}),d}function Z(a,b){for(var c=a.length-1;c>=0;c--)if(a[c]&&a[c].parentNode){try{a[c].parentNode.removeChild(a[c])}catch(d){}b=[].concat(b),b[c]&&$(b[c])}a.length&&(a.length=0)}function $(a){a.configContext&&c(a.configContext.onunload)&&(a.configContext.onunload(),a.configContext.onunload=null),a.controllers&&g(a.controllers,function(a){c(a.onunload)&&a.onunload({preventDefault:f})}),a.children&&(Oa(a.children)?g(a.children,$):a.children.tag&&$(a.children))}function _(a,b,c){var d=a.childNodes[b];if(d){var e=1!==d.nodeType,f=Ha.createElement("span");e?(a.insertBefore(f,d||null),f.insertAdjacentHTML("beforebegin",c),a.removeChild(f)):d.insertAdjacentHTML("beforebegin",c)}else Za(a,c);for(var g=[];a.childNodes[b]!==d;)g.push(a.childNodes[b]),b++;return g}function aa(a,b){return function(c){c=c||event,n.redraw.strategy("diff"),n.startComputation();try{return a.call(b,c)}finally{la()}}}function ba(a){var b=_a.indexOf(a);return 0>b?_a.push(a)-1:b}function ca(a){function b(){return arguments.length&&(a=arguments[0]),a}return b.toJSON=function(){return a},b}function da(a){return null!=a&&(d(a)||c(a))&&c(a.then)}function ea(a,b){return a.then?a.then(b):b()}function fa(a){var b=n.prop();return a.then(b),b.then=function(c,d){return a.then(function(){return c(b())},d)},b["catch"]=function(c){return a.then(function(){return b()},c)},b["finally"]=function(b){return a.then(function(a){return ea(b(),function(){return a})},function(a){return ea(b(),function(){throw a})})},b}function ga(a,b){function c(){return e.apply(this,b)||this}function d(c){for(var d=[c].concat(b),e=1;e0&&Ka(ib),ib=Ja(ka,hb)}function ka(){fb&&(fb(),fb=null),g(cb,function(a,b){var c=db[b];if(eb[b]){var d=[eb[b]];n.render(a,c.view?c.view(eb[b],d):"")}}),gb&&(gb(),gb=null),ib=null,jb=new Date,n.redraw.strategy("diff")}function la(){"none"===n.redraw.strategy()?(Va--,n.redraw.strategy("diff")):n.endComputation()}function ma(b){a[b]=function(){var a=Ia[n.route.mode];"pathname"===n.route.mode&&(a+=Ia.search),nb!==qa(a)&&pb(a)},fb=ta,a[b]()}function na(){return("pathname"===n.route.mode?"":Ia.pathname)+ob[n.route.mode]}function oa(b){if(a.history.pushState){fb=ta;var c=b?"replaceState":"pushState";gb=function(){a.history[c](null,Ha.title,ob[n.route.mode]+nb)},pb(ob[n.route.mode]+nb)}else Ia[n.route.mode]=nb,pb(ob[n.route.mode]+nb)}function pa(a,b,c){arguments.length<3&&"object"!=typeof b&&(c=b,b=null);var d=nb;nb=a;var e,f,g=b||{},i=nb.indexOf("?");if(i>=0){var j=va(nb.slice(i+1));h(g,function(a,b){j[b]=g[b]}),e=ua(j),f=nb.slice(0,i)}else e=ua(b),f=nb;if(e){var k=-1===f.indexOf("?")?"?":"&";nb=f+k+e}return oa(c||d===a)}function qa(a){return a.slice(ob[n.route.mode].length)}function ra(a,b,c){var d=c.indexOf("?");d>=0?(mb=va(c.substr(d+1,c.length)),c=c.substr(0,d)):mb={};var e=Object.keys(b),f=e.indexOf(c);if(f>=0)return n.mount(a,b[e[f]]),!0;for(var h in b)if(Na.call(b,h)){if(h===c)return n.mount(a,b[h]),!0;var i=new RegExp("^"+h.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(i.test(c))return c.replace(i,function(){var c=h.match(/:[^\/]+/g)||[],d=[].slice.call(arguments,1,-2);g(c,function(a,b){a=a.replace(/:|\./g,""),mb[a]=decodeURIComponent(d[b])}),n.mount(a,b[h])}),!0}}function sa(a){if(a=a||event,!a.ctrlKey&&!a.metaKey&&2!==a.which){a.preventDefault?a.preventDefault():a.returnValue=!1;var b,c=a.currentTarget||a.srcElement;for(b="pathname"===n.route.mode&&c.search?va(c.search.slice(1)):{};c&&"A"!==c.nodeName.toUpperCase();)c=c.parentNode;n.route(c[n.route.mode].slice(ob[n.route.mode].length),b)}}function ta(){"hash"!==n.route.mode&&Ia.hash?Ia.hash=Ia.hash:a.scrollTo(0,0)}function ua(a,c){var e={},f=[];return h(a,function(a,h){var i=c?c+"["+h+"]":h;if(null===a)f.push(encodeURIComponent(i));else if(d(a))f.push(ua(a,i));else if(Oa(a)){var j=[];e[i]=e[i]||{},g(a,function(a){e[i][a]||(e[i][a]=!0,j.push(encodeURIComponent(i)+"="+encodeURIComponent(a)))}),f.push(j.join("&"))}else a!==b&&f.push(encodeURIComponent(i)+"="+encodeURIComponent(a))}),f.join("&")}function va(a){if(""===a||null==a)return{};"?"===a.charAt(0)&&(a=a.slice(1));var b=a.split("&"),c={};return g(b,function(a){var b=a.split("="),d=decodeURIComponent(b[0]),e=2===b.length?decodeURIComponent(b[1]):null;null!=c[d]?(Oa(c[d])||(c[d]=[c[d]]),c[d].push(e)):c[d]=e}),c}function wa(a){var c=ba(a);Z(a.childNodes,ab[c]),ab[c]=b}function xa(a,d){function e(a,b,c){return da(a)?a.then(function(a){e(a,b,c)},function(a){e(a,c,c)}):b(r=a)}function h(a){a.resolve(r)}function i(a){a.reject(r)}function j(a){t.push(a)}function k(a){return u!==i&&a(r),a}function l(a){u=a,g(t,a),m=q=null}function m(a,b){e(a,function(){l(b===tb?h:i)},function(){l(i)})}function o(a,b){var c=0;try{return a.then(function(a){c++||q(rb,a,b)},function(a){c++||q(sb,a,b)})}catch(d){return n.deferred.onerror(d),q(sb,d,b)}}function p(b,e,f){try{e===rb&&c(a)?b=a(b):e===sb&&c(d)&&(b=d(b),e=rb)}catch(g){return n.deferred.onerror(g),m(g,ub)}return b===f?m(TypeError(),ub):m(b,e===rb?tb:ub)}function q(a,b,c){var d;try{d=da(b)}catch(e){return n.deferred.onerror(e),q(sb,e,c)}return a===sb&&n.deferred.onerror(b),d?o(b,c):p(b,a,c)}var r,s=this,t=[],u=j;s.resolve=function(a){return u===j&&q(rb,a,s),this},s.reject=function(a){return u===j&&q(sb,a,s),this},s.promise=function(a){return arguments.length&&e(a,f,f),u!==i?r:b},s.promise.then=function(a,b){var c=new xa(a,b);return u(c),k(c.promise)},s.promise["catch"]=function(a){return s.promise.then(null,a)},s.promise["finally"]=function(a){function b(){var b=(new xa).resolve(a()).promise;return u!==i&&b(r),b}return s.promise.then(function(){return b().then(function(){return r})},function(){b().then(function(){throw r})})}}function ya(a){return a instanceof EvalError||a instanceof RangeError||a instanceof ReferenceError||a instanceof SyntaxError||a instanceof TypeError||a instanceof URIError}function za(a){return a}function Aa(){return"mithril_callback_"+(new Date).getTime()+"_"+Math.round(1e16*Math.random()).toString(36)}function Ba(c){var d=Aa(),e=Ha.createElement("script");a[d]=function(f){e.parentNode.removeChild(e),c.onload({type:"load",target:{responseText:f}}),a[d]=b},e.onerror=function(){return e.parentNode.removeChild(e),c.onerror({type:"error",target:{status:500,responseText:'{"error": "Error making jsonp request"}'}}),a[d]=b,!1},e.onload=function(){return!1},e.src=c.url+(c.url.indexOf("?")>0?"&":"?")+(c.callbackKey?c.callbackKey:"callback")+"="+d+"&"+ua(c.data||{}),Ha.body.appendChild(e)}function Ca(b){var d=new a.XMLHttpRequest;if(d.open(b.method,b.url,!0,b.user,b.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?b.onload({type:"load",target:d}):b.onerror({type:"error",target:d}))},b.serialize===JSON.stringify&&b.data&&"GET"!==b.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),b.deserialize===JSON.parse&&d.setRequestHeader("Accept","application/json, text/*"),c(b.config)){var f=b.config(d,b);null!=f&&(d=f)}var g;if(g="GET"!==b.method&&b.data?b.data:"",g&&!e(g)&&g.constructor!==a.FormData)throw new Error("Request data should be either be a string or FormData. Check the `serialize` option in `m.request`");return d.send(g),d}function Da(a){return a.dataType&&"jsonp"===a.dataType.toLowerCase()?Ba(a):Ca(a)}function Ea(a,b,c){if("GET"===a.method&&"jsonp"!==a.dataType){var d=a.url.indexOf("?")<0?"?":"&",e=ua(b);a.url+=e?d+e:""}else a.data=c(b);return a}function Fa(a,b){var c=a.match(/:[a-z]\w+/gi);return c&&b&&g(c,function(c){var d=c.slice(1);a=a.replace(c,b[d]),delete b[d]}),a}function Ga(a){return a.responseText}var Ha,Ia,Ja,Ka,La="v0.2.1",Ma={}.toString,Na={}.hasOwnProperty,Oa=Array.isArray||function(a){return"[object Array]"===Ma.call(a)},Pa=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,Qa=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,Ra=/^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/;i(a),n.deps=function(b){return i(a=b||a),a},n.version=function(){return La};var Sa=1,Ta=2,Ua=3,Va=0;n.startComputation=function(){Va++},n.endComputation=function(){Va>1?Va--:(Va=0,n.redraw())};var Wa,Xa=[],Ya=!1,Za=function(){try{return Ha.createRange().createContextualFragment("x"),function(a,b){a.appendChild(Ha.createRange().createContextualFragment(b))}}catch(a){return function(a,b){a.insertAdjacentHTML("beforeend",b)}}}(),$a={appendChild:function(a){Wa===b&&(Wa=Ha.createElement("html")),Ha.documentElement&&Ha.documentElement!==a?Ha.replaceChild(a,Ha.documentElement):Ha.appendChild(a),this.childNodes=Ha.childNodes},insertBefore:function(a){this.appendChild(a)},childNodes:[]},_a=[],ab={};n.render=function(a,c,d){if(!a)throw new Error("Ensure the DOM element being passed to m.route/m.mount/m.render is not undefined.");var e,f=[],h=ba(a),i=a===Ha;e=i||a===Ha.documentElement?$a:a,i&&"html"!==c.tag&&(c={tag:"html",attrs:{},children:c}),ab[h]===b&&Z(e.childNodes),d===!0&&wa(a),ab[h]=U(e,null,b,b,c,ab[h],!1,0,null,b,f),g(f,function(a){a()})},n.trust=function(a){return a=new String(a),a.$trusted=!0,a},n.prop=function(a){return da(a)?fa(a):ca(a)};var bb,cb=[],db=[],eb=[],fb=null,gb=null,hb=16;n.component=function(a){for(var b=[],c=1;cd&&(d=cb.length);var e=!1,f={preventDefault:function(){e=!0,fb=gb=null}};return g(Xa,function(a){null!=a.controller&&(a.handler.call(a.controller,f),a.controller.onunload=null)}),e?g(Xa,function(a){a.controller.onunload=a.handler}):Xa=[],eb[d]&&c(eb[d].onunload)&&eb[d].onunload(f),ha(b,a,d,e)};var ib=0,jb=0,kb=Ja===a.requestAnimationFrame?ja:function(){+new Date-jb>hb&&ja()},lb=!1;n.redraw=function(a){if(!lb){lb=!0,a&&(Ya=!0);try{ib&&!a?kb():(ka(),ib=Ja(function(){ib=0},hb))}finally{lb=Ya=!1}}},n.redraw.strategy=n.prop(),n.withAttr=function(a,b,c){return function(d){d=d||event;var e,f=d.currentTarget||this,g=c||this;e=a in f?f[a]:f.getAttribute(a),b.call(g,e)}};var mb,nb,ob={pathname:"",hash:"#",search:"?"},pb=f,qb=!1;n.route=function(a,b,c,d){if(0===arguments.length)return nb;if(3===arguments.length&&e(b))pb=function(d){var e=nb=qa(d);if(!ra(a,c,e)){if(qb)throw new Error("Ensure the default route matches one of the routes defined in m.route");qb=!0,n.route(b,!0),qb=!1}},ma("hash"===n.route.mode?"onhashchange":"onpopstate");else if(a.addEventListener||a.attachEvent)a.href=na()+d.attrs.href,a.addEventListener?(a.removeEventListener("click",sa),a.addEventListener("click",sa)):(a.detachEvent("onclick",sa),a.attachEvent("onclick",sa));else if(e(a))return pa.apply(this,arguments)},n.route.param=function(a){if(!mb)throw new Error("You must call m.route(element, defaultRoute, routes) before calling m.route.param()");return a?mb[a]:mb},n.route.mode="search",n.route.buildQueryString=ua,n.route.parseQueryString=va;var rb=1,sb=2,tb=3,ub=4;return n.deferred=function(){return new xa},n.deferred.prototype=xa.prototype,n.deferred.prototype.constructor=n.deferred,n.deferred.onerror=function(a){if(ya(a))throw Va=0,a},n.sync=function(a){function b(a,b){return function(g){return e[a]=g,b||(f="reject"),0===--d&&(c.promise(e),c[f](e)),g}}var c=new xa,d=a.length,e=new Array(d),f="resolve";return a.length>0?g(a,function(a,c){a.then(b(c,!0),b(c,!1))}):c.resolve([]),c.promise},n.request=function(a){a.background!==!0&&n.startComputation();var b=new xa,c=za,d=za,e=Ga;return a.dataType&&"jsonp"===a.dataType.toLowerCase()||(c=a.serialize||JSON.stringify,d=a.deserialize||JSON.parse,e=a.extract||function(a){return 0===a.responseText.length&&d===JSON.parse?null:a.responseText}),a.serialize=c,a.deserialize=d,a.method=(a.method||"GET").toUpperCase(),a.url=Fa(a.url,a.data),a=Ea(a,a.data,c),a.onload=a.onerror=function(c){c=c||event;var f,h="load"===c.type;f=h?a.unwrapSuccess:a.unwrapError;try{var i=(f||za)(d(e(c.target,a)),c.target);h?(Oa(i)&&a.type?g(i,function(b,c){i[c]=new a.type(b)}):a.type&&(i=new a.type(i)),b.resolve(i)):b.reject(i)}catch(j){b.reject(j)}finally{a.background!==!0&&n.endComputation()}},Da(a),b.promise(a.initialValue),b.promise},n}); //# sourceMappingURL=mithril.min.js.map \ No newline at end of file diff --git a/mithril.min.js.map b/mithril.min.js.map index 9367fbcd..a248e339 100644 --- a/mithril.min.js.map +++ b/mithril.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["mithril.js"],"names":["global","factory","m","window","module","exports","define","amd","this","undefined","isFunction","object","isObject","type","call","isString","noop","forEach","list","f","i","length","forOwn","obj","prop","hasOwn","initialize","$document","document","$location","location","$cancelAnimationFrame","cancelAnimationFrame","clearTimeout","$requestAnimationFrame","requestAnimationFrame","setTimeout","checkForAttrs","pairs","parseSelector","tag","cell","match","classes","parser","exec","attrs","id","push","pair","attrParser","getChildrenFromList","hasAttrs","args","children","slice","isArray","assignAttrs","classAttr","value","attr","join","arguments","parameterize","Error","forKeys","key","dataToString","data","toString","e","injectTextNode","parent","first","index","insertNode","nodeValue","flatten","concat","apply","node","insertBefore","childNodes","handleKeysDiffer","existing","cached","action","MOVE","from","element","nodes","createElement","INSERTION","actions","changes","sort","sortChanges","newCached","Array","change","DELETION","clear","splice","dummy","changeElement","maybeChanged","diffKeys","parentElement","keysDiffer","cachedCell","diffArray","_","parentNode","indexOf","buildArrayKeys","guid","arraySortCompare","a","b","len","elemIsDifferentEnough","dataAttrKeys","Object","keys","redraw","strategy","configContext","retain","maybeRecreateObject","onunload","controllers","controller","unload","preventDefault","getObjectNamespace","namespace","xmlns","unloadCachedControllers","views","$old","pendingRequests","scheduleConfigsToBeCalled","configs","isNew","config","context","buildUpdatedNode","editable","hasKeys","setAttributes","build","contenteditable","intact","handleNonexistentNodes","$trusted","injectHTML","createTextNode","voidElements","test","nodeName","constructor","reattachNodes","parentTag","activeElement","innerHTML","nodeType","trim","handleTextNode","shouldReattach","valueOf","getSubArrayCount","item","buildArray","subArrayCount","shouldMaintainIdentities","cacheCount","makeCache","parentIndex","parentCache","offset","end","constructNode","is","createElementNS","constructAttrs","constructChildren","reconstructCached","getController","view","cachedControllers","updateLists","idx","unloaders","handler","checkView","forcing","subtree","markViews","$original","initObjectNode","buildObject","shouldSetAttrDirectly","trySetAttribute","dataAttr","cachedAttr","autoredraw","rule","style","setAttributeNS","setAttribute","dataAttrs","cachedAttrs","message","removeChild","nextSibling","isElement","placeholder","insertAdjacentHTML","insertAdjacentBeforeEnd","callback","event","startComputation","endFirstComputation","getCellCacheKey","nodeCache","gettersetter","store","toJSON","isPromise","then","simpleResolve","p","propify","promise","fufill","reject","reason","component","Ctrl","originalCtrl","ctrl","rest","originalView","prototype","output","initComponent","root","isPrevented","isNullComponent","roots","topComponent","components","removeRootElement","reset","actuallyPerformRedraw","lastRedrawId","FRAME_BUDGET","computePreRedrawHook","render","computePostRedrawHook","lastRedrawCallTime","Date","endComputation","runHistoryListener","listener","path","route","mode","search","currentRoute","normalizeRoute","redirect","setScroll","getRouteBase","pathname","modes","computeAndLaunchRedirect","shouldReplaceHistoryEntry","history","pushState","method","title","routeTo","params","oldRoute","queryString","currentPath","queryIndex","paramsObj","parseQueryString","buildQueryString","delimiter","routeByValue","router","queryStart","routeParams","substr","mount","matcher","RegExp","replace","values","decodeURIComponent","routeUnobtrusive","ctrlKey","metaKey","which","returnValue","currentTarget","srcElement","toUpperCase","hash","scrollTo","prefix","duplicates","str","encodeURIComponent","charAt","split","string","cacheKey","cellCache","Deferred","onSuccess","onFailure","coerce","next","error","promiseValue","resolve","deferred","init","func","run","finish","fire","state","RESOLVED","doThen","count","RESOLVING","REJECTING","onerror","notThennable","REJECTED","TypeError","thenable","self","_callback","isNativeError","EvalError","RangeError","ReferenceError","SyntaxError","URIError","identity","generateCallbackKey","getTime","Math","round","random","getJsonp","options","callbackKey","script","resp","onload","target","responseText","status","src","url","body","appendChild","runXhr","xhr","XMLHttpRequest","open","user","password","onreadystatechange","readyState","serialize","JSON","stringify","setRequestHeader","deserialize","parse","maybeXhr","FormData","send","ajax","dataType","toLowerCase","bindData","xhrOptions","querystring","parameterizeUrl","tokens","token","defaultExtract","jsonp","VERSION","hasOwnProperty","deps","mock","version","html","createRange","createContextualFragment","documentNode","documentElement","replaceChild","forceRecreation","isDocumentRoot","trust","String","ev","unloader","performRedraw","redrawing","force","withAttr","withAttrCallback","callbackThis","targetProp","_this","getAttribute","isDefaultRoute","arg1","arg2","vdom","source","addEventListener","attachEvent","href","removeEventListener","detachEvent","param","sync","synchronizer","pos","resolved","results","outstanding","arg","request","background","extract","unwrap","doSuccess","unwrapSuccess","unwrapError","response","res","initialValue"],"mappings":"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","file":"mithril.min.js"} \ No newline at end of file +{"version":3,"sources":["mithril.js"],"names":["global","factory","m","window","module","exports","define","amd","this","undefined","isFunction","object","isObject","type","call","isString","noop","forEach","list","f","i","length","forOwn","obj","prop","hasOwn","initialize","$document","document","$location","location","$cancelAnimationFrame","cancelAnimationFrame","clearTimeout","$requestAnimationFrame","requestAnimationFrame","setTimeout","checkForAttrs","pairs","parseSelector","tag","cell","match","classes","parser","exec","attrs","id","push","pair","attrParser","getChildrenFromList","hasAttrs","args","children","slice","isArray","assignAttrs","classAttr","value","attr","join","arguments","parameterize","Error","forKeys","key","dataToString","data","toString","e","injectTextNode","parent","first","index","insertNode","nodeValue","flatten","concat","apply","node","insertBefore","childNodes","handleKeysDiffer","existing","cached","action","MOVE","from","element","nodes","createElement","INSERTION","actions","changes","sort","sortChanges","newCached","Array","change","DELETION","clear","splice","dummy","changeElement","maybeChanged","diffKeys","parentElement","keysDiffer","cachedCell","diffArray","_","parentNode","indexOf","buildArrayKeys","guid","arraySortCompare","a","b","len","elemIsDifferentEnough","dataAttrKeys","Object","keys","redraw","strategy","configContext","retain","maybeRecreateObject","onunload","controllers","controller","unload","preventDefault","getObjectNamespace","namespace","xmlns","unloadCachedControllers","views","$old","pendingRequests","scheduleConfigsToBeCalled","configs","isNew","config","context","buildUpdatedNode","editable","hasKeys","setAttributes","build","contenteditable","intact","handleNonexistentNodes","$trusted","injectHTML","createTextNode","voidElements","test","nodeName","constructor","reattachNodes","parentTag","activeElement","innerHTML","nodeType","trim","handleTextNode","shouldReattach","valueOf","getSubArrayCount","item","buildArray","subArrayCount","shouldMaintainIdentities","cacheCount","makeCache","parentIndex","parentCache","offset","end","constructNode","is","createElementNS","constructAttrs","constructChildren","reconstructCached","getController","view","cachedControllers","updateLists","idx","unloaders","handler","ev","checkView","forcing","subtree","markViews","$original","initObjectNode","buildObject","shouldSetAttrDirectly","trySetAttribute","dataAttr","cachedAttr","autoredraw","rule","style","setAttributeNS","setAttribute","dataAttrs","cachedAttrs","message","removeChild","nextSibling","isElement","placeholder","insertAdjacentHTML","insertAdjacentBeforeEnd","callback","event","startComputation","endFirstComputation","getCellCacheKey","nodeCache","gettersetter","store","toJSON","isPromise","then","simpleResolve","p","propify","promise","resolve","reject","reason","component","Ctrl","originalCtrl","ctrl","rest","originalView","prototype","output","initComponent","root","isPrevented","isNullComponent","roots","topComponent","components","removeRootElement","reset","actuallyPerformRedraw","lastRedrawId","FRAME_BUDGET","computePreRedrawHook","render","computePostRedrawHook","lastRedrawCallTime","Date","endComputation","runHistoryListener","listener","path","route","mode","search","currentRoute","normalizeRoute","redirect","setScroll","getRouteBase","pathname","modes","computeAndLaunchRedirect","shouldReplaceHistoryEntry","history","pushState","method","title","routeTo","params","oldRoute","queryString","currentPath","queryIndex","paramsObj","parseQueryString","buildQueryString","delimiter","routeByValue","router","queryStart","routeParams","substr","mount","matcher","RegExp","replace","values","decodeURIComponent","routeUnobtrusive","ctrlKey","metaKey","which","returnValue","currentTarget","srcElement","toUpperCase","hash","scrollTo","prefix","duplicates","str","encodeURIComponent","charAt","split","string","cacheKey","cellCache","Deferred","onSuccess","onFailure","coerce","next","error","promiseValue","deferred","init","func","run","finish","fire","state","RESOLVED","doThen","count","RESOLVING","REJECTING","onerror","notThennable","REJECTED","TypeError","thenable","self","_callback","isNativeError","EvalError","RangeError","ReferenceError","SyntaxError","URIError","identity","generateCallbackKey","getTime","Math","round","random","getJsonp","options","callbackKey","script","resp","onload","target","responseText","status","src","url","body","appendChild","runXhr","xhr","XMLHttpRequest","open","user","password","onreadystatechange","readyState","serialize","JSON","stringify","setRequestHeader","deserialize","parse","maybeXhr","FormData","send","ajax","dataType","toLowerCase","bindData","xhrOptions","querystring","parameterizeUrl","tokens","token","defaultExtract","jsonp","VERSION","hasOwnProperty","deps","mock","version","html","createRange","createContextualFragment","documentNode","documentElement","replaceChild","forceRecreation","isDocumentRoot","trust","String","unloader","performRedraw","redrawing","force","withAttr","withAttrCallback","callbackThis","targetProp","_this","getAttribute","isDefaultRoute","arg1","arg2","vdom","source","addEventListener","attachEvent","href","removeEventListener","detachEvent","param","sync","synchronizer","pos","resolved","results","outstanding","arg","request","background","extract","unwrap","doSuccess","unwrapSuccess","unwrapError","response","res","initialValue"],"mappings":"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","file":"mithril.min.js"} \ No newline at end of file From a7b2294c1162cb97fa60eb33921eb13006d06225 Mon Sep 17 00:00:00 2001 From: impinball Date: Tue, 15 Dec 2015 07:07:50 -0500 Subject: [PATCH 35/63] OO-ize DOM builder, improve performance (part 1), add benchmarking suite --- .eslintignore | 2 +- bench/README.md | 4 + bench/app/.gitignore | 6 + bench/app/index.html | 26 + bench/app/js/app.js | 13 + bench/app/js/controllers/todo.js | 111 ++ bench/app/js/models/storage.js | 14 + bench/app/js/models/todo.js | 12 + bench/app/js/views/footer-view.js | 40 + bench/app/js/views/main-view.js | 119 ++ bench/app/package.json | 7 + bench/app/readme.md | 18 + bench/index.html | 81 ++ bench/resources/benchmark-runner.js | 268 +++++ bench/resources/manager.js | 237 ++++ bench/resources/tests.js | 51 + mithril.js | 1678 ++++++++++++++------------- package.json | 3 +- test/index.html | 5 +- test/mithril.js | 15 + test/mithril.render.js | 44 +- test/mithril.trust.js | 12 +- 22 files changed, 1953 insertions(+), 813 deletions(-) create mode 100644 bench/README.md create mode 100644 bench/app/.gitignore create mode 100644 bench/app/index.html create mode 100644 bench/app/js/app.js create mode 100644 bench/app/js/controllers/todo.js create mode 100644 bench/app/js/models/storage.js create mode 100644 bench/app/js/models/todo.js create mode 100644 bench/app/js/views/footer-view.js create mode 100644 bench/app/js/views/main-view.js create mode 100644 bench/app/package.json create mode 100644 bench/app/readme.md create mode 100644 bench/index.html create mode 100644 bench/resources/benchmark-runner.js create mode 100644 bench/resources/manager.js create mode 100644 bench/resources/tests.js diff --git a/.eslintignore b/.eslintignore index a6ff032f..0b24c5c3 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,5 +1,5 @@ # Most of these are build artifacts. -node_modules +**/node_modules **/*.min.js archive deploy diff --git a/bench/README.md b/bench/README.md new file mode 100644 index 00000000..16fcc8b9 --- /dev/null +++ b/bench/README.md @@ -0,0 +1,4 @@ +This suite is taken with modifications from the Mithril example in +[Merri/nom](https://github.com/Merri/nom/tree/gh-pages/todomvc/benchmark/mithril-new). + +(For example, it uses Mithril itself to help simplify the business logic.) diff --git a/bench/app/.gitignore b/bench/app/.gitignore new file mode 100644 index 00000000..11c90f9c --- /dev/null +++ b/bench/app/.gitignore @@ -0,0 +1,6 @@ +node_modules/todomvc-app-css/* +!node_modules/todomvc-app-css/index.css + +node_modules/todomvc-common/* +!node_modules/todomvc-common/base.js +!node_modules/todomvc-common/base.css diff --git a/bench/app/index.html b/bench/app/index.html new file mode 100644 index 00000000..e42cfacf --- /dev/null +++ b/bench/app/index.html @@ -0,0 +1,26 @@ + + + + + Mithril • TodoMVC + + + + +
+ + + + + + + + + + + diff --git a/bench/app/js/app.js b/bench/app/js/app.js new file mode 100644 index 00000000..d4a8e6fb --- /dev/null +++ b/bench/app/js/app.js @@ -0,0 +1,13 @@ +/* global m */ +(function (app) { + "use strict" + + app.ENTER_KEY = 13 + app.ESC_KEY = 27 + + m.route.mode = "hash" + m.route(document.getElementById("todoapp"), "/", { + "/": app, + "/:filter": app + }) +})(this.app || (this.app = {})) diff --git a/bench/app/js/controllers/todo.js b/bench/app/js/controllers/todo.js new file mode 100644 index 00000000..27577689 --- /dev/null +++ b/bench/app/js/controllers/todo.js @@ -0,0 +1,111 @@ +/* global m */ +(function (app) { + "use strict" + + app.controller = function () { + /* eslint-disable no-warning-comments */ + // Todo collection, update with props + /* eslint-enable no-warning-comments */ + this.list = app.storage.get().map(function (item) { + return new app.Todo(item) + }) + + // Temp title placeholder + this.title = m.prop("") + + /* eslint-disable no-warning-comments */ + // Todo list filter + /* eslint-enable no-warning-comments */ + this.filter = m.prop(m.route.param("filter") || "") + + this.add = function () { + var title = this.title().trim() + if (title) { + this.list.push(new app.Todo({title: title})) + app.storage.put(this.list) + } + this.title("") + } + + this.isVisible = function (todo) { + switch (this.filter()) { + case "active": return !todo.completed() + case "completed": return todo.completed() + default: return true + } + } + + this.complete = function (todo) { + if (todo.completed()) { + todo.completed(false) + } else { + todo.completed(true) + } + app.storage.put(this.list) + } + + this.edit = function (todo) { + todo.previousTitle = todo.title() + todo.editing(true) + } + + this.doneEditing = function (todo, index) { + todo.editing(false) + todo.title(todo.title().trim()) + if (!todo.title()) { + this.list.splice(index, 1) + } + app.storage.put(this.list) + } + + this.cancelEditing = function (todo) { + todo.title(todo.previousTitle) + todo.editing(false) + } + + this.clearTitle = function () { + this.title("") + } + + this.remove = function (key) { + this.list.splice(key, 1) + app.storage.put(this.list) + } + + this.clearCompleted = function () { + for (var i = this.list.length - 1; i >= 0; i--) { + if (this.list[i].completed()) { + this.list.splice(i, 1) + } + } + app.storage.put(this.list) + } + + this.amountCompleted = function () { + var amount = 0 + for (var i = 0; i < this.list.length; i++) { + if (this.list[i].completed()) { + amount++ + } + } + return amount + } + + this.allCompleted = function () { + for (var i = 0; i < this.list.length; i++) { + if (!this.list[i].completed()) { + return false + } + } + return true + } + + this.completeAll = function () { + var allCompleted = this.allCompleted() + for (var i = 0; i < this.list.length; i++) { + this.list[i].completed(!allCompleted) + } + app.storage.put(this.list) + } + } +})(this.app || (this.app = {})) diff --git a/bench/app/js/models/storage.js b/bench/app/js/models/storage.js new file mode 100644 index 00000000..0e867e9a --- /dev/null +++ b/bench/app/js/models/storage.js @@ -0,0 +1,14 @@ +(function (app) { + "use strict" + + var STORAGE_ID = "todos-mithril" + + app.storage = { + get: function () { + return JSON.parse(localStorage.getItem(STORAGE_ID) || "[]") + }, + put: function (todos) { + localStorage.setItem(STORAGE_ID, JSON.stringify(todos)) + } + } +})(this.app || (this.app = {})) diff --git a/bench/app/js/models/todo.js b/bench/app/js/models/todo.js new file mode 100644 index 00000000..77af9ba2 --- /dev/null +++ b/bench/app/js/models/todo.js @@ -0,0 +1,12 @@ +/* global m */ + +(function (app) { + "use strict" + + // Todo Model + app.Todo = function (data) { + this.title = m.prop(data.title) + this.completed = m.prop(data.completed || false) + this.editing = m.prop(data.editing || false) + } +})(this.app || (this.app = {})) diff --git a/bench/app/js/views/footer-view.js b/bench/app/js/views/footer-view.js new file mode 100644 index 00000000..25f07f1c --- /dev/null +++ b/bench/app/js/views/footer-view.js @@ -0,0 +1,40 @@ +/* global m */ +(function (app) { + "use strict" + + var filter = { + view: function (_, ctrl, expected, name, href) { + return m("li", [ + m("a", { + href: href, + config: m.route, + class: ctrl.filter() === expected ? "selected" : "" + }, name) + ]) + } + } + + app.footer = { + view: function (_, ctrl) { + var amountCompleted = ctrl.amountCompleted() + var amountActive = ctrl.list.length - amountCompleted + + return m("footer#footer", [ + m("span#todo-count", [ + m("strong", amountActive), " item" + + (amountActive !== 1 ? "s" : "") + " left" + ]), + m("ul#filters", [ + m(filter, ctrl, "", "All", "/"), + m(filter, ctrl, "active", "Active", "/active"), + m(filter, ctrl, "completed", "Completed", "/completed") + ]), + ctrl.amountCompleted() ? m("button#clear-completed", { + onclick: function () { + ctrl.clearCompleted() + } + }, "Clear completed") : null + ]) + } + } +})(this.app || (this.app = {})) diff --git a/bench/app/js/views/main-view.js b/bench/app/js/views/main-view.js new file mode 100644 index 00000000..9dfd2667 --- /dev/null +++ b/bench/app/js/views/main-view.js @@ -0,0 +1,119 @@ +/* global m */ +(function (app) { + "use strict" + + // View utility + app.watchInput = function (onenter, onescape) { + return function (e) { + if (e.keyCode === app.ENTER_KEY) { + onenter() + } else if (e.keyCode === app.ESC_KEY) { + onescape() + } + } + } + + var header = { + controller: function () { + this.focused = false + }, + + view: function (ctrl, parentCtrl) { + return m("header#header", [ + m("h1", "todos"), + m('input#new-todo[placeholder="What needs to be done?"]', { + onkeyup: app.watchInput( + function () { + parentCtrl.add() + }, + function () { + parentCtrl.clearTitle() + }), + value: parentCtrl.title(), + oninput: m.withAttr("value", parentCtrl.title), + config: function (element) { + if (!ctrl.focused) { + element.focus() + ctrl.focused = true + } + } + }) + ]) + } + } + + var todo = { + view: function (_, parentCtrl, task, index) { + return m("li", { + class: (task.completed() ? "completed" : "") + + (task.editing() ? " editing" : "") + }, [ + m(".view", [ + m("input.toggle[type=checkbox]", { + onclick: m.withAttr("checked", function () { + parentCtrl.complete(task) + }), + checked: task.completed() + }), + m("label", { + ondblclick: function () { + parentCtrl.edit(task) + } + }, task.title()), + m("button.destroy", { + onclick: function () { + parentCtrl.remove(index) + } + }) + ]), + m("input.edit", { + value: task.title(), + onkeyup: app.watchInput( + function () { + parentCtrl.doneEditing(task, index) + }, + function () { + parentCtrl.cancelEditing(task) + }), + oninput: m.withAttr("value", task.title), + config: function (element) { + if (task.editing()) { + element.focus() + element.selectionStart = + element.value.length + } + }, + onblur: function () { + parentCtrl.doneEditing(task, index) + } + }) + ]) + } + } + + app.view = function (ctrl) { + return m("div", [ + m(header, ctrl), + m("section#main", { + style: { + display: ctrl.list.length ? "" : "none" + } + }, [ + m("input#toggle-all[type=checkbox]", { + onclick: ctrl.completeAll.bind(ctrl), + checked: ctrl.allCompleted() + }), + m("ul#todo-list", [ + ctrl.list + .filter(function () { + return ctrl.isVisible() + }) + .map(function (task, index) { + return m(todo, ctrl, task, index) + }) + ]) + ]), + ctrl.list.length === 0 ? "" : m(app.footer, ctrl) + ]) + } +})(this.app || (this.app = {})) diff --git a/bench/app/package.json b/bench/app/package.json new file mode 100644 index 00000000..3b1e70fd --- /dev/null +++ b/bench/app/package.json @@ -0,0 +1,7 @@ +{ + "private": true, + "dependencies": { + "todomvc-common": "^1.0.1", + "todomvc-app-css": "^1.0.1" + } +} diff --git a/bench/app/readme.md b/bench/app/readme.md new file mode 100644 index 00000000..76a71d43 --- /dev/null +++ b/bench/app/readme.md @@ -0,0 +1,18 @@ +# Mithril TodoMVC Example + +> [Mithril](http://lhorie.github.io/mithril/) is a client-side MVC framework - a tool to organize code in a way that is easy to think about and to maintain. + +> _[Mithril - lhorie.github.io/mithril/](http://lhorie.github.io/mithril/)_ + +## Learning Mithril + +The [Mithril website](http://lhorie.github.io/mithril/getting-started.html) is a great resource for getting started. + +Here are some links you may find helpful: + +* [Official Documentation](http://lhorie.github.io/mithril/mithril.html) + +_If you have other helpful links to share, or find any of the links above no longer work, please [let us know](https://github.com/tastejs/todomvc/issues)._ + +## Credit +This TodoMVC application was created by [taylorhakes](https://github.com/taylorhakes). \ No newline at end of file diff --git a/bench/index.html b/bench/index.html new file mode 100644 index 00000000..6f399b3d --- /dev/null +++ b/bench/index.html @@ -0,0 +1,81 @@ + +TodoMVC Benchmark + + + + + + +
+
+
+
+ diff --git a/bench/resources/benchmark-runner.js b/bench/resources/benchmark-runner.js new file mode 100644 index 00000000..e3d2e908 --- /dev/null +++ b/bench/resources/benchmark-runner.js @@ -0,0 +1,268 @@ +(function (global) { // eslint-disable-line max-statements + "use strict" + var m = global.m + + window.onhashchange = function () { + location.reload() + } + + global.BenchmarkTestStep = BenchmarkTestStep + function BenchmarkTestStep(name, run) { + this.name = name + this.run = run + } + + global.BenchmarkRunner = BenchmarkRunner + function BenchmarkRunner(suites, client) { + this._suites = suites + this._prepareReturnValue = null + this._measuredValues = {} + this._client = client + } + + BenchmarkRunner.prototype.waitForElement = function (selector) { + var deferred = m.deferred() + var contentDocument = this._frame.contentDocument + + function resolveIfReady() { + var element = contentDocument.querySelector(selector) + if (element) { + return deferred.resolve(element) + } + setTimeout(resolveIfReady, 50) + } + + resolveIfReady() + return deferred.promise + } + + BenchmarkRunner.prototype._removeFrame = function () { + if (this._frame) { + this._frame.parentNode.removeChild(this._frame) + this._frame = null + } + } + + BenchmarkRunner.prototype._appendFrame = function () { + var frame = document.createElement("iframe") + frame.style.width = "800px" + frame.style.height = "600px" + document.body.appendChild(frame) + this._frame = frame + return frame + } + + BenchmarkRunner.prototype._waitAndWarmUp = function () { + var startTime = Date.now() + + function Fibonacci(n) { + if (Date.now() - startTime > 100) return + else if (n <= 0) return 0 + else if (n === 1) return 1 + else return Fibonacci(n - 2) + Fibonacci(n - 1) + } + + var deferred = m.deferred() + setTimeout(function () { + Fibonacci(100) + deferred.resolve() + }, 200) + return deferred.promise + } + + var now = window.performance && window.performance.now ? + function () { return window.performance.now() } : + function () { return +new Date() } + + function logResults(document, expected, suite, test, callback) { + var count = document.querySelectorAll(".view").length + if (count !== expected) { + console.error([ // eslint-disable-line no-console + suite.name, + test.name, + "expected", + expected, + "got", + count + ]) + callback(NaN, NaN) + } + } + + // This function must be as simple as possible, so it doesn't interfere + // with reading the times + BenchmarkRunner.prototype._runTest = function ( + suite, + test, + prepareReturnValue, + callback + ) { + var testFunction = test.run + + var window = this._frame.contentWindow + var document = this._frame.contentDocument + var expected = this._client.numberOfItemsToAdd + + var startTime = now() + testFunction(prepareReturnValue, window, document) + var endTime = now() + var syncTime = endTime - startTime + + startTime = now() + setTimeout(function () { + setTimeout(function () { + var endTime = now() + + // if the DOM count is wrong after a test, don't report its + // results. + if (/Adding|Completing/.test(test.name)) { + logResults(document, expected, suite, test, callback) + } + + if (/Deleting/.test(test.name)) { + logResults(document, 0, suite, test, callback) + } + + callback(syncTime, endTime - startTime) + }, 0) + }, 0) + } + + function BenchmarkState(suites) { + this._suites = suites + this._suiteIndex = -1 + this._testIndex = 0 + this.next() + } + + BenchmarkState.prototype.currentSuite = function () { + return this._suites[this._suiteIndex] + } + + BenchmarkState.prototype.currentTest = function () { + var suite = this.currentSuite() + return suite ? suite.tests[this._testIndex] : null + } + + BenchmarkState.prototype.next = function () { + this._testIndex++ + + var suite = this._suites[this._suiteIndex] + if (suite && this._testIndex < suite.tests.length) { + return this + } + + this._testIndex = 0 + + var i = this._suiteIndex + var suites = this._suites + + do { + i++ + } while (i < suites.length && suites[i].disabled) + + this._suiteIndex = i + + return this + } + + BenchmarkState.prototype.isFirstTest = function () { + return !this._testIndex + } + + BenchmarkState.prototype.prepareCurrentSuite = function (runner, frame) { + var suite = this.currentSuite() + var deferred = m.deferred() + frame.onload = function () { + suite.prepare(runner, frame.contentWindow, frame.contentDocument) + .then(function (result) { + deferred.resolve(result) + }, function (err) { + deferred.reject(err) + }) + } + frame.src = suite.url + return deferred.promise + } + + BenchmarkRunner.prototype.step = function (state) { + if (!state) { + state = new BenchmarkState(this._suites) + } + + var suite = state.currentSuite() + if (!suite) { + this._finalize() + var deferred = m.deferred() + deferred.resolve() + return deferred.promise + } + + if (state.isFirstTest()) { + this._masuredValuesForCurrentSuite = {} + var self = this + return state.prepareCurrentSuite(this, this._appendFrame()) + .then(function (prepareReturnValue) { + self._prepareReturnValue = prepareReturnValue + return self._runTestAndRecordResults(state) + }) + } + + return this._runTestAndRecordResults(state) + } + + BenchmarkRunner.prototype._runTestAndRecordResults = function (state) { + var deferred = m.deferred() + var suite = state.currentSuite() + var test = state.currentTest() + + if (this._client && this._client.willRunTest) { + this._client.willRunTest(suite, test) + } + + var self = this + setTimeout(function () { + self._runTest(suite, test, self._prepareReturnValue, + function (syncTime, asyncTime) { + var suiteResults + if (self._measuredValues[suite.name]) { + suiteResults = self._measuredValues[suite.name] + } else { + suiteResults = {tests: {}, total: 0} + } + + self._measuredValues[suite.name] = suiteResults + + suiteResults.tests[test.name] = { + Sync: syncTime, + Async: asyncTime + } + + suiteResults.total += syncTime + asyncTime + + if (self._client && self._client.willRunTest) { + self._client.didRunTest(suite, test) + } + + state.next() + if (state.currentSuite() !== suite) { + self._removeFrame() + } + + deferred.resolve(state) + }) + }, 0) + return deferred.promise + } + + BenchmarkRunner.prototype._finalize = function () { + this._removeFrame() + + if (this._client && this._client.didRunSuites) { + this._client.didRunSuites(this._measuredValues) + } + + // FIXME: This should be done when we start running tests. + this._measuredValues = {} + } +})(this) diff --git a/bench/resources/manager.js b/bench/resources/manager.js new file mode 100644 index 00000000..2b422792 --- /dev/null +++ b/bench/resources/manager.js @@ -0,0 +1,237 @@ +/* global m */ +/* eslint no-console: 0 */ + +(function (global) { // eslint-disable-line max-statements + "use strict" + + var numberOfItemsToAdd = (~~location.hash.slice(1)) || 250 + var runs = [] + var timesRan = 0 + var runButton + + function forOwn(object, f) { + for (var key in object) if ({}.hasOwnProperty.call(object, key)) { + f(object[key], key) + } + } + + var append = Function.call.bind(function append() { + /* eslint-disable no-invalid-this */ + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i] + if (Array.isArray(arg)) append.apply(this, arg) + else this.appendChild(arg) + } + return this + /* eslint-enable no-invalid-this */ + }) + + function n(type, attrs) { + var el = document.createElement(type) + if (!attrs) return el + forOwn(attrs, function (value, attr) { + if (attr === "style") { + forOwn(value, function (k, v) { el.style[k] = v }) + } else { + el[attr] = value + } + }) + return el + } + + function createButton(text, onclick) { + return n("button", {textContent: text, onclick: onclick}) + } + + function createTest(suite, test) { + return append(n("li"), + append(test.anchor = n("a", {id: suite.name + "-" + test.name}), + document.createTextNode(suite.name + "/" + test.name))) + } + + function createSuiteCheckbox(suite) { + return n("input", { + id: suite.name, + type: "checkbox", + checked: true, + onchange: function () { + suite.disabled = !this.checked + } + }) + } + + function createSuiteLabel(suite) { + return append(n("label", {htmlFor: suite.name}), + document.createTextNode(suite.name + " " + suite.version)) + } + + function createSuite(suite) { + return append(n("li"), + createSuiteCheckbox(suite), + createSuiteLabel(suite), + append(n("ol"), suite.tests.map(createTest.bind(null, suite)))) + } + + function createUIForSuites(suites, onstep, onrun) { + return append(n("nav"), + createButton("Step Tests", onstep), + runButton = createButton("Run All", onrun), + append(n("ol"), suites.map(createSuite))) + } + + function generateResults(measured, timesToRun) { + var result = "" + var total = 0 // FIXME: Compute the total properly. + + forOwn(measured, function (suiteResults, suite) { + forOwn(suiteResults.tests, function (testResults, test) { + forOwn(testResults, function (subtestResults, subtest) { + result += suite + " : " + test + " : " + subtest + ": " + + subtestResults + " ms\n" + }) + }) + result += suite + " : " + suiteResults.total + " ms\n" + total += suiteResults.total + }) + return result + "Run " + (runs.length + 1) + "/" + timesToRun + + " - Total : " + total + " ms\n" + } + + function reportFastest() { + var results = {} + runs.forEach(function (runData) { + forOwn(runData, function (data, key) { + results[key] = Math.min( + results[key] || Infinity, + data.total + ) + }) + }) + return results + } + + global.google.load("visualization", "1", {packages: ["corechart"]}) + function drawChart(results) { + var V = global.google.visualization + + var raw = [] + forOwn(results, function (result, key) { + raw.push([key, Math.round(result), colorify(key)]) + }) + raw.sort(function (a, b) { return a[1] - b[1] }) + raw.unshift(["Project", "Time", {role: "style"}]) + + var runWord = "run" + (runs.length > 1 ? "s" : "") + var title = "Best time in milliseconds over " + runs.length + " " + + runWord + " (lower is better)" + + var view = new V.DataView(V.arrayToDataTable(raw)) + view.setColumns([0, 1, { + calc: "stringify", + sourceColumn: 1, + type: "string", + role: "annotation" + }, 2]) + + document.getElementById("analysis").style.display = "block" + + new V.BarChart(document.getElementById("barchart-values")).draw(view, { + title: "TodoMVC Benchmark", + width: 600, + height: 400, + legend: {position: "none"}, + backgroundColor: "transparent", + hAxis: {title: title}, + min: 0, + max: 1500 + }) + } + + function colorPart(n, pre) { + return Math.max( + 0, + ((n.toLowerCase().charCodeAt(pre % n.length) - 97) / 26 * 255) | 0 + ) + } + + function colorify(n) { + return "rgb(" + + colorPart(n, 3) + ", " + + colorPart(n, 4) + ", " + + colorPart(n, 5) + ")" + } + + function shuffle(ary) { + for (var i = 0; i < ary.length; i++) { + var j = Math.floor(Math.random() * (i + 1)) + var tmp = ary[i] + ary[i] = ary[j] + ary[j] = tmp + } + } + + window.addEventListener("load", function () { + var match = window.location.search.match(/[\?&]r=(\d+)/) + var timesToRun = match ? +(match[1]) : 1 + + var Suites = global.Suites.map(function (suite) { + suite = suite(numberOfItemsToAdd) + suite.disabled = false + return suite + }) + + var runner = new global.BenchmarkRunner(Suites, { + numberOfItemsToAdd: numberOfItemsToAdd, + + willRunTest: function (suite, test) { + if (test.anchor.classList) { + test.anchor.classList.add("running") + } + }, + + didRunTest: function (suite, test) { + if (test.anchor.classList) { + test.anchor.classList.remove("running") + test.anchor.classList.add("ran") + } + }, + + didRunSuites: function (measured) { + var results = generateResults(measured, timesToRun) + if (results) { + console.log(results) + + runs.push(measured) + timesRan++ + if (timesRan >= timesToRun) { + timesRan = 0 + drawChart(reportFastest()) + shuffle(Suites) + } else { + setTimeout(function () { + runButton.click() + }, 0) + } + } + } + }) + + var currentState = m.prop() + function callNextStep(state) { + runner.step(state).then(currentState).then(function (newState) { + if (newState) callNextStep(newState) + }) + } + + // Don't call step while step is already executing. + document.body.appendChild(createUIForSuites(Suites, + function () { + runner.step(currentState()).then(currentState) + }, + function () { + document.getElementById("analysis").style.display = "none" + localStorage.clear() + callNextStep(currentState()) + })) + }) +})(this) diff --git a/bench/resources/tests.js b/bench/resources/tests.js new file mode 100644 index 00000000..872fcfa4 --- /dev/null +++ b/bench/resources/tests.js @@ -0,0 +1,51 @@ +(function (global) { + "use strict" + + var BenchmarkTestStep = global.BenchmarkTestStep + var Suites = global.Suites = [] + + Suites.push(function (numberOfItemsToAdd) { + return { + name: "Mithril (TodoMVC 1.3)", + url: "app/index.html", + version: "next (dev version)", + prepare: function (runner) { + return runner.waitForElement("#new-todo") + .then(function (element) { + element.focus() + return element + }) + }, + tests: [ + new BenchmarkTestStep("Adding" + numberOfItemsToAdd + "Items", + function (newTodo) { + for (var i = 0; i < numberOfItemsToAdd; i++) { + var inputEvent = document.createEvent("Event") + inputEvent.initEvent("input", true, true) + newTodo.value = "Mithril ------- Something to do " + i + newTodo.dispatchEvent(inputEvent) + + var keydownEvent = document.createEvent("Event") + keydownEvent.initEvent("keyup", true, true) + keydownEvent.keyCode = 13 // VK_ENTER + newTodo.dispatchEvent(keydownEvent) + } + }), + new BenchmarkTestStep("CompletingAllItems", + function (newTodo, contentWindow, document) { + var checkboxes = document.getElementsByClassName("toggle") + for (var i = 0; i < checkboxes.length; i++) { + checkboxes[i].click() + } + }), + new BenchmarkTestStep("DeletingAllItems", + function (newTodo, contentWindow, document) { + var buttons = document.getElementsByClassName("destroy") + for (var i = buttons.length - 1; i > -1; i--) { + buttons[i].click() + } + }) + ] + } + }) +})(this) diff --git a/mithril.js b/mithril.js index 2c9de619..bb4e567d 100644 --- a/mithril.js +++ b/mithril.js @@ -1,4 +1,4 @@ -void (function (global, factory) { // eslint-disable-line +;(function (global, factory) { // eslint-disable-line "use strict" /* eslint-disable no-undef */ var m = factory(typeof window !== "undefined" ? window : {}) @@ -37,22 +37,20 @@ void (function (global, factory) { // eslint-disable-line function noop() {} - function forEach(list, f) { - for (var i = 0; i < list.length && !f(list[i], i++);) { - // empty + function forEach(list, f, inst) { + for (var i = 0; i < list.length; i++) { + f.call(inst, list[i], i) } } - function forOwn(obj, f) { + function forOwn(obj, f, inst) { for (var prop in obj) { if (hasOwn.call(obj, prop)) { - if (f(obj[prop], prop)) break + if (f.call(inst, obj[prop], prop)) break } } } - var parser = /(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g - var attrParser = /\[(.+?)(?:=("|'|)(.*?)\2)?\]/ var voidElements = /^(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|KEYGEN|LINK|META|PARAM|SOURCE|TRACK|WBR)$/ // eslint-disable-line max-len // caching commonly used variables @@ -87,23 +85,23 @@ void (function (global, factory) { // eslint-disable-line */ function checkForAttrs(pairs) { - return pairs != null && - isObject(pairs) && + return pairs != null && isObject(pairs) && !("tag" in pairs || "view" in pairs || "subtree" in pairs) } function parseSelector(tag, cell) { var classes = [] + var parser = /(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g var match while ((match = parser.exec(tag)) != null) { - if (match[1] === "" && match[2]) { + if (match[1] === "" && match[2] != null) { cell.tag = match[2] } else if (match[1] === "#") { cell.attrs.id = match[2] } else if (match[1] === ".") { classes.push(match[2]) } else if (match[3][0] === "[") { - var pair = attrParser.exec(match[3]) + var pair = /\[(.+?)(?:=("|'|)(.*?)\2)?\]/.exec(match[3]) cell.attrs[pair[1]] = pair[3] || (pair[2] ? "" : true) } } @@ -111,34 +109,64 @@ void (function (global, factory) { // eslint-disable-line return classes } - function getChildrenFromList(hasAttrs, args) { - var children = hasAttrs ? args.slice(1) : args - if (children.length === 1 && isArray(children[0])) { - return children[0] - } else { - return children - } - } - - function assignAttrs(cell, attrs, classAttr, classes) { - forOwn(attrs, function (value, attr) { - if (attr === classAttr && - attrs[attr] != null && - attrs[attr] !== "") { - classes.push(attrs[attr]) - - // create key in correct iteration order - cell.attrs[attr] = "" - } else { - cell.attrs[attr] = attrs[attr] + function assignAttrs(target, attrs, classAttr, classes) { + var hasClass = false + if (hasOwn.call(attrs, classAttr)) { + var value = attrs[classAttr] + if (value != null && value !== "") { + hasClass = true + classes.push(value) } + } + + forOwn(attrs, function (value, attr) { + target[attr] = attr === classAttr && hasClass ? "" : value }) if (classes.length) { - cell.attrs[classAttr] = classes.join(" ") + target[classAttr] = classes.join(" ") } } + function parameterize(component) { + var args = [] + for (var i = 1; i < arguments.length; i++) { + args.push(arguments[i]) + } + + var originalCtrl = component.controller || noop + + function Ctrl() { + return originalCtrl.apply(this, args) || this + } + + if (originalCtrl !== noop) { + Ctrl.prototype = originalCtrl.prototype + } + + var originalView = component.view || noop + + function view(ctrl) { + var rest = [ctrl].concat(args) + for (var i = 1; i < arguments.length; i++) { + rest.push(arguments[i]) + } + + return originalView.apply(component, rest) + } + + view.$original = originalView + var output = {controller: Ctrl, view: view} + + if (args[0] && args[0].key != null) { + output.attrs = {key: args[0].key} + } + + return output + } + + m.component = parameterize + /** * @param {Tag} The DOM node tag * @param {Object=[]} optional key-value pairs to be mapped to DOM attrs @@ -146,34 +174,60 @@ void (function (global, factory) { // eslint-disable-line * or splat (optional) */ function m(tag, pairs) { - for (var args = [], i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i] - } - - if (isObject(tag)) return parameterize(tag, args) - var hasAttrs = checkForAttrs(pairs) - var attrs = hasAttrs ? pairs : {} - var classAttr = "class" in attrs ? "class" : "className" - var cell = {tag: "div", attrs: {}} + // The arguments are passed directly like this to delay array + // allocation. + if (isObject(tag)) return parameterize.apply(null, arguments) if (!isString(tag)) { - throw new Error("selector in m(selector, attrs, children) should " + - "be a string") + throw new TypeError("selector in m(selector, attrs, children) " + + "should be a string") } - var classes = parseSelector(tag, cell) - cell.children = getChildrenFromList(hasAttrs, args) + // Degenerate case frequently trips people up. Check for it here so that + // people know it doesn't work. + if (!tag) { + throw new TypeError("selector cannot be an empty string") + } - assignAttrs(cell, attrs, classAttr, classes) + var hasAttrs = checkForAttrs(pairs) + + var args = [] + for (var i = hasAttrs ? 2 : 1; i < arguments.length; i++) { + args.push(arguments[i]) + } + + var children + + if (args.length === 1 && isArray(args[0])) { + children = args[0] + } else { + children = args + } + + var cell = { + tag: "div", + attrs: {}, + children: children + } + + assignAttrs( + cell.attrs, + hasAttrs ? pairs : {}, + hasAttrs && "class" in pairs ? "class" : "className", + parseSelector(tag, cell) + ) return cell } - function forKeys(list, f) { - forEach(list, function (attrs, i) { + function forKeys(list, f, inst) { + for (var i = 0; i < list.length; i++) { + var attrs = list[i] attrs = attrs && attrs.attrs - return attrs && attrs.key != null && f(attrs, i) - }) + if (attrs && attrs.key != null && f.call(inst, attrs, i)) { + break + } + } } // This function was causing deopts in Chrome. @@ -191,17 +245,6 @@ void (function (global, factory) { // eslint-disable-line return "" } - // This function was causing deopts in Chrome. - function injectTextNode(parent, first, index, data) { - try { - insertNode(parent, first, index) - first.nodeValue = data - } catch (e) { - // IE erroneously throws error when appending an empty text node - // after a null - } - } - function flatten(list) { // recursively flatten array for (var i = 0; i < list.length; i++) { @@ -220,111 +263,129 @@ void (function (global, factory) { // eslint-disable-line parent.insertBefore(node, parent.childNodes[index] || null) } + // the below recursively manages creation/diffing/removal of DOM elements + // based on comparison between `data` and `cached` + // + // the diff algorithm can be summarized as this: + // 1) compare `data` and `cached` + // 2) if they are different, copy `data` to `cached` and update the DOM + // based on what the difference is + // 3) recursively apply this algorithm for every array and for the + // children of every virtual element + // + // the `cached` data structure is essentially the same as the previous + // redraw's `data` data structure, with a few additions: + // - `cached` always has a property called `nodes`, which is a list of + // DOM elements that correspond to the data represented by the + // respective virtual element + // - in order to support attaching `nodes` as a property of `cached`, + // `cached` is *always* a non-primitive object, i.e. if the data was + // a string, then cached is a String instance. If data was `null` or + // `undefined`, cached is `new String("")` + // - `cached also has a `configContext` property, which is the state + // storage object exposed by config(element, isInitialized, context) + // - when `cached` is an Object, it represents a virtual element; when + // it's an Array, it represents a list of elements; when it's a + // String, Number or Boolean, it represents a text node + // + // `parentElement` is a DOM element used for W3C DOM API calls + // `parentTag` is only used for handling a corner case for textarea + // values + // `parentCache` is used to remove nodes in some multi-node cases + // `parentIndex` and `index` are used to figure out the offset of nodes. + // They're artifacts from before arrays started being flattened and are + // likely refactorable + // `data` and `cached` are, respectively, the new and old nodes being + // diffed + // `shouldReattach` is a flag indicating whether a parent node was + // recreated (if so, and if this node is reused, then this node must + // reattach itself to the new parent) + // `editable` is a flag that indicates whether an ancestor is + // contenteditable + // `namespace` indicates the closest HTML namespace as it cascades down + // from an ancestor + // `configs` is a list of config functions to run after the topmost + // `build` call finishes running + // + // there's logic that relies on the assumption that null and undefined + // data are equivalent to empty strings + // - this prevents lifecycle surprises from procedural helpers that mix + // implicit and explicit return statements (e.g. + // function foo() {if (cond) return m("div")} + // - it simplifies diffing code + + function Builder( + parentElement, + parentTag, + parentCache, + parentIndex, + data, + cached, + shouldReattach, + index, + editable, + namespace, + configs + ) { + this.parentElement = parentElement + this.parentTag = parentTag + this.parentCache = parentCache + this.parentIndex = parentIndex + this.data = data + this.cached = cached + this.shouldReattach = shouldReattach + this.index = index + this.editable = editable + this.namespace = namespace + this.configs = configs + } + + Builder.prototype.build = function () { + this.data = dataToString(this.data) + if (this.data.subtree === "retain") return this.cached + this.makeCache() + + if (isArray(this.data)) { + return this.buildArray() + } else if (this.data != null && isObject(this.data)) { + return this.buildObject() + } else if (isFunction(this.data)) { + return this.cached + } else { + return this.handleTextNode() + } + } + + Builder.prototype.makeCache = function () { + if (this.cached != null) { + if (type.call(this.cached) === type.call(this.data)) { + return + } + + if (this.parentCache && this.parentCache.nodes) { + var offset = this.index - this.parentIndex + var end = offset + + (isArray(this.data) ? this.data : this.cached.nodes).length + + clear( + this.parentCache.nodes.slice(offset, end), + this.parentCache.slice(offset, end)) + } else if (this.cached.nodes) { + clear(this.cached.nodes, this.cached) + } + } + + this.cached = new this.data.constructor() + // if constructor creates a virtual dom element, use a blank object as + // the base cached node instead of copying the virtual el (#277) + if (this.cached.tag) this.cached = {} + this.cached.nodes = [] + } + var DELETION = 1 var INSERTION = 2 var MOVE = 3 - function handleKeysDiffer(data, existing, cached, parent) { - forKeys(data, function (key, i) { - key = key.key - if (existing[key]) { - existing[key] = { - action: MOVE, - index: i, - from: existing[key].index, - element: cached.nodes[existing[key].index] || - $document.createElement("div") - } - } else { - existing[key] = {action: INSERTION, index: i} - } - }) - - var actions = [] - - forOwn(existing, function (value) { - actions.push(value) - }) - - var changes = actions.sort(sortChanges) - var newCached = new Array(cached.length) - newCached.nodes = cached.nodes.slice() - - forEach(changes, function (change) { - var index = change.index - - switch (change.action) { - case DELETION: - clear(cached[index].nodes, cached[index]) - newCached.splice(index, 1) - break - - case INSERTION: - var dummy = $document.createElement("div") - dummy.key = data[index].attrs.key - insertNode(parent, dummy, index) - newCached.splice(index, 0, { - attrs: {key: data[index].attrs.key}, - nodes: [dummy] - }) - newCached.nodes[index] = dummy - break - - case MOVE: - var changeElement = change.element - var maybeChanged = parent.childNodes[index] - if (maybeChanged !== changeElement && changeElement !== null) { - parent.insertBefore(changeElement, maybeChanged || null) - } - newCached[index] = cached[change.from] - newCached.nodes[index] = changeElement - } - }) - - return newCached - } - - function diffKeys(data, cached, existing, parentElement) { - var keysDiffer = data.length !== cached.length - - if (!keysDiffer) { - forKeys(data, function (attrs, i) { - var cachedCell = cached[i] - return keysDiffer = cachedCell && - cachedCell.attrs && - cachedCell.attrs.key !== attrs.key - }) - } - - if (keysDiffer) { - return handleKeysDiffer(data, existing, cached, parentElement) - } else { - return cached - } - } - - // diffs the array itself - function diffArray(data, cached, nodes) { - // update the list of DOM nodes by collecting the nodes from each item - forEach(data, function (_, i) { - if (cached[i] != null) nodes.push.apply(nodes, cached[i].nodes) - }) - - // remove items from the end of the array if the new array is shorter - // than the old one. if errors ever happen here, the issue is most - // likely a bug in the construction of the `cached` data structure - // somewhere earlier in the program - forEach(cached.nodes, function (node, i) { - if (node.parentNode != null && nodes.indexOf(node) < 0) { - clear([node], [cached[i]]) - } - }) - - if (data.length < cached.length) cached.length = data.length - - cached.nodes = nodes - } - function buildArrayKeys(data) { var guid = 0 forKeys(data, function () { @@ -338,6 +399,317 @@ void (function (global, factory) { // eslint-disable-line }) } + Builder.prototype.buildArrayChild = function (child, cached, count) { + return new Builder( + this.parentElement, + this.parentTag, + this.cached, + this.index, + child, + cached, + this.shouldReattach, + this.index + count || count, + this.editable, + this.namespace, + this.configs + ).build() + } + + Builder.prototype.buildArray = function () { + this.data = flatten(this.data) + var nodes = [] + var intact = this.cached.length === this.data.length + var subArrayCount = 0 + + // keys algorithm: + // sort elements without recreating them if keys are present + // + // 1) create a map of all existing keys, and mark all for deletion + // 2) add new keys to map and mark them for addition + // 3) if key exists in new list, change action from deletion to a move + // 4) for each key, handle its corresponding action as marked in + // previous steps + var existing = {} + var shouldMaintainIdentities = false + forKeys(this.cached, function (attrs, i) { + shouldMaintainIdentities = true + existing[attrs.key] = { + action: DELETION, + index: i + } + }) + + buildArrayKeys(this.data) + if (shouldMaintainIdentities) { + this.diffKeys(existing) + } + // end key algorithm + + // don't change: faster than forEach + var cacheCount = 0 + for (var i = 0, len = this.data.length; i < len; i++) { + // diff each item in the array + var item = this.buildArrayChild( + this.data[i], + this.cached[cacheCount], + subArrayCount + ) + + if (item !== undefined) { + intact = intact && item.nodes.intact + subArrayCount += getSubArrayCount(item) + this.cached[cacheCount++] = item + } + } + + if (!intact) this.diffArray(nodes) + + return this.cached + } + + Builder.prototype.diffKeys = function (existing) { + var keysDiffer = this.data.length !== this.cached.length + + if (!keysDiffer) { + forKeys(this.data, function (attrs, i) { + var cachedCell = this[i] // eslint-disable-line no-invalid-this + return keysDiffer = cachedCell && + cachedCell.attrs && + cachedCell.attrs.key !== attrs.key + }, this.cached) + } + + if (keysDiffer) { + this.handleKeysDiffer(existing) + } + } + + // Simple `this` helper + function thisPush(value) { + this.push(value) // eslint-disable-line no-invalid-this + } + + Builder.prototype.handleKeysDiffer = function (existing) { + forKeys(this.data, function (key, i) { + key = key.key + if (existing[key]) { + existing[key] = { + action: MOVE, + index: i, + from: existing[key].index, + element: this[existing[key].index] || // eslint-disable-line + $document.createElement("div") + } + } else { + existing[key] = { + action: INSERTION, + index: i + } + } + }, this.cached.nodes) + + var actions = [] + forOwn(existing, thisPush, actions) + + var changes = actions.sort(sortChanges) + var newCached = new Array(this.cached.length) + newCached.nodes = this.cached.nodes.slice() + + forEach(changes, function (change) { + /* eslint-disable no-invalid-this */ + var index = change.index + + switch (change.action) { + case DELETION: + clear(this.cached[index].nodes, this.cached[index]) + newCached.splice(index, 1) + break + + case INSERTION: + var dummy = $document.createElement("div") + dummy.key = this.data[index].attrs.key + insertNode(this.parentElement, dummy, index) + newCached.splice(index, 0, { + attrs: {key: this.data[index].attrs.key}, + nodes: [dummy] + }) + newCached.nodes[index] = dummy + break + + case MOVE: + var changeElement = change.element + var maybeChanged = this.parentElement.childNodes[index] + if (maybeChanged !== changeElement && changeElement !== null) { + this.parentElement.insertBefore( + changeElement, + maybeChanged || null + ) + } + newCached[index] = this.cached[change.from] + newCached.nodes[index] = changeElement + } + /* eslint-enable no-invalid-this */ + }, this) + + this.cached = newCached + } + + // diffs the array itself + Builder.prototype.diffArray = function (nodes) { + // update the list of DOM nodes by collecting the nodes from each item + for (var i = 0; i < this.data.length; i++) { + var cached = this.cached[i] + if (cached != null) { + nodes.push.apply(nodes, cached.nodes) + } + } + + // remove items from the end of the array if the new array is shorter + // than the old one. if errors ever happen here, the issue is most + // likely a bug in the construction of the `cached` data structure + // somewhere earlier in the program + forEach(this.cached.nodes, function (node, i) { + /* eslint-disable no-invalid-this */ + if (node.parentNode != null && nodes.indexOf(node) < 0) { + clear([node], [this[i]]) + } + /* eslint-enable no-invalid-this */ + }, this.cached) + + if (this.data.length < this.cached.length) { + this.cached.length = this.data.length + } + + this.cached.nodes = nodes + } + + Builder.prototype.initAttrs = function () { + var dataAttrs = this.data.attrs = this.data.attrs || {} + this.cached.attrs = this.cached.attrs || {} + + var dataAttrKeys = Object.keys(this.data.attrs) + this.maybeRecreateObject(dataAttrKeys) + + return dataAttrKeys.length > +("key" in dataAttrs) + } + + Builder.prototype.buildObject = function () { + var views = [] + var controllers = [] + + this.markViews(views, controllers) + + if (!this.data.tag && controllers.length) { + throw new Error("Component template must return a virtual " + + "element, not an array, string, etc.") + } + + var hasKeys = this.initAttrs() + + if (isString(this.data.tag)) { + return new ObjectBuilder( + this, + hasKeys, + views, + controllers + ).build() + } + } + + Builder.prototype.markViews = function (views, controllers) { + var cached = this.cached && this.cached.controllers + while (this.data.view != null) { + this.checkView(cached, controllers, views) + } + } + + var forcing = false + var pendingRequests = 0 + + Builder.prototype.checkView = function (cached, controllers, views) { + var view = this.data.view.$original || this.data.view + var controller = getController( + this.cached.views, + view, + cached, + this.data.controller + ) + + // Faster to coerce to number and check for NaN + var key = +(this.data && this.data.attrs && this.data.attrs.key) + + if (pendingRequests === 0 || forcing || + cached && cached.indexOf(controller) > -1) { + this.data = this.data.view(controller) + } else { + this.data = {tag: "placeholder"} + } + + if (this.data.subtree === "retain") return this.cached + if (key === key) { // eslint-disable-line no-self-compare + (this.data.attrs = this.data.attrs || {}).key = key + } + updateLists(views, controllers, view, controller) + } + + var unloaders = [] + + function updateLists(views, controllers, view, controller) { + views.push(view) + var idx = controllers.push(controller) - 1 + unloaders[idx] = { + views: views, + view: view, + controller: controller, + controllers: controllers, + handler: function (ev) { + var i = this.controllers.indexOf(this.controller) + this.controllers.splice(i, 1) + i = this.views.indexOf(this.view) + this.views.splice(i, 1) + var unload = this.controller && this.controller.onunload + if (type.call(unload) === "[object Function]") { + this.controller.onunload(ev) + } + } + } + } + + function getController(views, view, cached, controller) { + var index = m.redraw.strategy() === "diff" && views ? + views.indexOf(view) : + -1 + + if (index > -1) { + return cached[index] + } else if (typeof controller === "function") { + return new controller() + } else { + return {} + } + } + + function unloadSingleController(controller) { + if (controller.unload) { + controller.onunload({preventDefault: noop}) + } + } + + Builder.prototype.maybeRecreateObject = function (dataAttrKeys) { + // if an element is different enough from the one in cache, recreate it + if (this.elemIsDifferentEnough(dataAttrKeys)) { + if (this.cached.nodes.length) clear(this.cached.nodes) + if (this.cached.configContext && + isFunction(this.cached.configContext.onunload)) { + this.cached.configContext.onunload() + } + + if (this.cached.controllers) { + forEach(this.cached.controllers, unloadSingleController) + } + } + } + // shallow array compare, sorts function arraySortCompare(a, b) { a.sort() @@ -350,7 +722,9 @@ void (function (global, factory) { // eslint-disable-line return true } - function elemIsDifferentEnough(data, cached, dataAttrKeys) { + Builder.prototype.elemIsDifferentEnough = function (dataAttrKeys) { + var data = this.data + var cached = this.cached if (data.tag !== cached.tag) return true if (!arraySortCompare(dataAttrKeys, Object.keys(cached.attrs))) { return true @@ -360,70 +734,174 @@ void (function (global, factory) { // eslint-disable-line if (data.attrs.key !== cached.attrs.key) return true if (m.redraw.strategy() === "all") { - return !(cached.configContext && - cached.configContext.retain === true) + return !cached.configContext || cached.configContext.retain !== true } else if (m.redraw.strategy() === "diff") { - return cached.configContext && - cached.configContext.retain === false + return cached.configContext && cached.configContext.retain === false + } else { + return false } } - function maybeRecreateObject(data, cached, dataAttrKeys) { - // if an element is different enough from the one in cache, recreate it - if (elemIsDifferentEnough(data, cached, dataAttrKeys)) { - if (cached.nodes.length) clear(cached.nodes) - if (cached.configContext && - isFunction(cached.configContext.onunload)) { - cached.configContext.onunload() - } + function getObjectNamespace(builder) { + var data = builder.data - if (cached.controllers) { - forEach(cached.controllers, function (controller) { - if (controller.unload) { - controller.onunload({preventDefault: noop}) - } - }) - } - } - } - - function getObjectNamespace(data, namespace) { return data.attrs.xmlns ? data.attrs.xmlns : data.tag === "svg" ? "http://www.w3.org/2000/svg" : data.tag === "math" ? "http://www.w3.org/1998/Math/MathML" : - namespace + builder.namespace } - var pendingRequests = 0 - m.startComputation = function () { pendingRequests++ } - m.endComputation = function () { - if (pendingRequests > 1) { - pendingRequests-- + function ObjectBuilder(builder, hasKeys, views, controllers) { + this.builder = builder + this.hasKeys = hasKeys + this.views = views + this.controllers = controllers + this.namespace = getObjectNamespace(builder) + } + + ObjectBuilder.prototype.buildNewNode = function () { + var node = this.createNode() + this.builder.cached = this.reconstruct( + node, + this.createAttrs(node), + this.buildChildren(node) + ) + return node + } + + ObjectBuilder.prototype.build = function () { + var builder = this.builder + var isNew = builder.cached.nodes.length === 0 + var node = isNew ? this.buildNewNode() : this.buildUpdatedNode() + if (isNew || builder.shouldReattach && node != null) { + insertNode(builder.parentElement, node, builder.index) + } + builder.scheduleConfigs(node, isNew) + return builder.cached + } + + ObjectBuilder.prototype.createNode = function () { + var data = this.builder.data + if (this.namespace === undefined) { + if (data.attrs.is) { + return $document.createElement(data.tag, data.attrs.is) + } else { + return $document.createElement(data.tag) + } + } else if (data.attrs.is) { + return $document.createElementNS(this.namespace, data.tag, + data.attrs.is) } else { - pendingRequests = 0 - m.redraw() + return $document.createElementNS(this.namespace, data.tag) } } - function unloadCachedControllers(cached, views, controllers) { - if (controllers.length) { - cached.views = views - cached.controllers = controllers - forEach(controllers, function (controller) { - if (controller.onunload && controller.onunload.$old) { - controller.onunload = controller.onunload.$old - } - - if (pendingRequests && controller.onunload) { - var onunload = controller.onunload - controller.onunload = noop - controller.onunload.$old = onunload - } - }) + ObjectBuilder.prototype.createAttrs = function (node) { + var data = this.builder.data + if (this.hasKeys) { + return setAttributes(node, data.tag, data.attrs, {}, this.namespace) + } else { + return data.attrs } } - function scheduleConfigsToBeCalled(configs, data, node, isNew, cached) { + ObjectBuilder.prototype.makeChild = function (node, shouldReattach) { + var builder = this.builder + return new Builder( + node, + builder.data.tag, + undefined, + undefined, + builder.data.children, + builder.cached.children, + shouldReattach, + 0, + builder.data.attrs.contenteditable ? node : builder.editable, + this.namespace, + builder.configs + ).build() + } + + ObjectBuilder.prototype.buildChildren = function (node) { + var data = this.builder.data + if (data.children != null && data.children.length !== 0) { + return this.makeChild(node, true) + } else { + return data.children + } + } + + ObjectBuilder.prototype.reconstruct = function (node, attrs, children) { + var data = this.builder.data + var cached = { + tag: data.tag, + attrs: attrs, + children: children, + nodes: [node] + } + + this.unloadCachedControllers(cached) + + if (cached.children && !cached.children.nodes) { + cached.children.nodes = [] + } + + // edge case: setting value on