diff --git a/.eslintrc b/.eslintrc index fd3b87fd..14612a91 100644 --- a/.eslintrc +++ b/.eslintrc @@ -64,7 +64,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 new file mode 100644 index 00000000..4054409d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,838 @@ +# 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. 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 + +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 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. + - 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 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 it shouldn't be considered absolute &endash; consistency with the surrounding code is higher priority than following this guide. + +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`). And please document the hack as best as you can and why you used it. If it's a hack that's already been explained elsewhere, like Bluebird's, a link to that is sufficient. + +### 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 + +Please keep line length down to a maximum of 80 characters. + +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 + +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. 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, please keep it reasonable. + +### Line endings + +Use Windows-style line endings (i.e. CRLF). + +### 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, ternaries, etc. + +- `var foo = value === 1 ? true : false` is better written as `var foo = value === 1`. +- `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`. +- As an exception, use an extra set of parentheses when assigning in conditions. + +### Equality testing + +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 + +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 + +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 +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 +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 +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 + } +} + +// 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 +// 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 +} +``` + +### 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. + +```js +// Good +// This is a comment. + +// Bad +//This is a comment. +``` + +### Grammar and spelling + +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 + +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]) +} + +// Also bad +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, 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, Googling " strip trailing whitespace blank lines" should help you. + +Also, make sure to include a trailing line break. Several editors add this by default, and many of them offer no easy way to prevent it. + +### 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 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 +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]) + } +} + +// Also bad +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. + +## 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 + +var a = 1 + 2 + 3 + 4 + 5 + + 6 + 7 + 8 + 9 + 10 + +// Bad +var a = 1+2 +var a=1+2 +a=3 + +var a = 1 + 2 + 3 + 4 + 5 + + 6 + 7 + 8 + 9 + 10 +``` + +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 +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 +-1 +~1 + +// Bad +! a +- 1 +~ 1 +``` + +## 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} +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"} +``` + +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. 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. + +```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 generally 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 +} + +// Also good +function forEach(list, func) { + for (var index = 0; index < list.length; index++) { + func(list[index], index) + } + return list +} + +// Bad +function iterateArray(listOfEntries, callback) { + for (var index = 0; index < listOfEntries.length; index++) { + callback(listOfEntries[index], index) + } + return listOfEntries +} + +// Also bad +function e(l, c) { + for (var x = 0; x < l.length; x++) { + c(l[x], x) + } + return l +} +``` + +### 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 + +// Also bad +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 } + +// Also bad +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++) { + doSomething(i) + test = foo === 1 +} + +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() +``` + +## `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. + +```js +// Good +for (var i = 0; i < list.length && cond(list[i]); i++) { + // do nothing +} + +// Even better +for (var i = 0; i < list.length; i++) { + if (!cond(list[i])) break +} + +// 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. 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) diff --git a/docs/installation.md b/docs/installation.md index 206caa37..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](http://lhorie.github.io/mithril/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 ``` - 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

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/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) - }) + })) ]) ]); ``` 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) diff --git a/mithril.js b/mithril.js index 13fb9e5a..fbac0109 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 + } } } @@ -729,15 +731,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 @@ -960,8 +966,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 @@ -1343,6 +1351,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 }) @@ -2132,7 +2141,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 @@ -2151,7 +2160,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 @@ -2160,7 +2169,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) { @@ -2170,15 +2179,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) { - 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 fe7f1f47..b63bc274 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]"===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}); +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}); //# sourceMappingURL=mithril.min.js.map \ No newline at end of file diff --git a/mithril.min.js.map b/mithril.min.js.map index 11d8303a..9367fbcd 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","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":"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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","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 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), diff --git a/test/input-cursor.html b/test/input-cursor.html index 8ee57964..f291b302 100644 --- a/test/input-cursor.html +++ b/test/input-cursor.html @@ -26,7 +26,7 @@ function test(sel) { m.module(document.getElementById("test"), { controller: function() { - this.title = m.prop("hello world"); + this.title = m.prop("hello world") }, view: function (ctrl) { @@ -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", [ @@ -64,10 +64,10 @@ m.module(document.getElementById("test"), { m("div[contenteditable]", { style: {border: "1px solid #888"}, onkeyup: m.withAttr("innerHTML", ctrl.title) - }, m.trust(ctrl.title())), + }, m.trust(ctrl.title())) ]) ]) - ]); + ]) } -}); +}) diff --git a/test/mithril.mount.js b/test/mithril.mount.js index f76de2eb..fa68d11f 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 34faa178..ec6ba1ce 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") @@ -1318,7 +1317,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.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.route.js b/test/mithril.route.js index 7317d268..b252267d 100644 --- a/test/mithril.route.js +++ b/test/mithril.route.js @@ -102,7 +102,7 @@ describe("m.route()", function () { expect(route2).to.equal("/test13") }) - // FIXME: this causes others to fail + // 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() @@ -130,7 +130,7 @@ describe("m.route()", function () { expect(spy).to.not.have.been.called }) - // FIXME: this causes others to fail + // 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") @@ -161,7 +161,7 @@ describe("m.route()", function () { expect(spy).to.not.have.been.called }) - // FIXME: this causes others to fail + // 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") @@ -190,7 +190,7 @@ describe("m.route()", function () { expect(spy).to.not.have.been.called }) - // FIXME: this causes others to fail + // 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") diff --git a/test/mithril.trust.js b/test/mithril.trust.js index 748fa75e..d16bf11b 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")) @@ -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") }) }) })