UNPKG

mithril

Version:

A framework for building brilliant applications

247 lines (241 loc) 26.3 kB
<html> <head> <meta charset="UTF-8" /> <title> Change log - Mithril.js</title> <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" /> <link href="style.css" rel="stylesheet" /> <link rel="icon" type="image/png" sizes="32x32" href="favicon.png" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> </head> <body> <header> <section> <a class="hamburger" href="javascript:;"></a> <h1><img src="logo.svg"> Mithril <small>2.0.1</small></h1> <nav> <a href="index.html">Guide</a> <a href="api.html">API</a> <a href="https://gitter.im/MithrilJS/mithril.js">Chat</a> <a href="https://github.com/MithrilJS/mithril.js">GitHub</a> </nav> </section> </header> <main> <section> <h1 id="change-log"><a href="#change-log">Change log</a></h1> <ul> <li>Getting Started<ul> <li><a href="index.html">Introduction</a></li> <li><a href="installation.html">Installation</a></li> <li><a href="simple-application.html">Tutorial</a></li> <li><a href="learning-mithril.html">Learning Resources</a></li> <li><a href="support.html">Getting Help</a></li> </ul> </li> <li>Resources<ul> <li><a href="jsx.html">JSX</a></li> <li><a href="es6.html">ES6+ on legacy browsers</a></li> <li><a href="animation.html">Animation</a></li> <li><a href="testing.html">Testing</a></li> <li><a href="examples.html">Examples</a></li> <li><a href="integrating-libs.html">3rd Party Integration</a></li> <li><a href="paths.html">Path Handling</a></li> </ul> </li> <li>Key concepts<ul> <li><a href="vnodes.html">Vnodes</a></li> <li><a href="components.html">Components</a></li> <li><a href="lifecycle-methods.html">Lifecycle methods</a></li> <li><a href="keys.html">Keys</a></li> <li><a href="autoredraw.html">Autoredraw system</a></li> </ul> </li> <li>Social<ul> <li><a href="https://github.com/MithrilJS/mithril.js/wiki/JOBS">Mithril Jobs</a></li> <li><a href="contributing.html">How to contribute</a></li> <li><a href="credits.html">Credits</a></li> <li><a href="code-of-conduct.html">Code of Conduct</a></li> </ul> </li> <li>Misc<ul> <li><a href="framework-comparison.html">Framework comparison</a></li> <li><strong><a href="change-log.html">Change log/Migration</a></strong><ul> <li><a href="#v201">v2.0.1</a></li> <li><a href="#v200">v2.0.0</a></li> <li><a href="migration-v1x.html">Migrating from v1.x</a></li> <li><a href="migration-v02x.html">Migrating from v0.2.x</a></li> <li><a href="https://mithril.js.org/archive/v1.1.6/change-log.html">v1.x changelog</a></li> <li><a href="https://mithril.js.org/archive/v1.1.6/index.html">v1.x docs</a></li> <li><a href="https://mithril.js.org/archive/v0.2.5/index.html">v0.2 docs</a></li> <li><a href="https://github.com/MithrilJS/mithril.js/blob/master/ospec/change-log.md"><code>ospec</code> change log</a></li> <li><a href="https://github.com/MithrilJS/mithril.js/blob/master/stream/change-log.md"><code>mithril/stream</code> change log</a></li> </ul> </li> <li><a href="https://mithril.js.org/archive/v1.1.6/">v1 Documentation</a></li> <li><a href="https://mithril.js.org/archive/v0.2.5/">v0.2 Documentation</a></li> </ul> </li> </ul> <hr> <!-- ### Upcoming... - Ensure vnodes are removed correctly in the face of `onbeforeremove` resolving after new nodes are added ([#2492](https://github.com/MithrilJS/mithril.js/pull/2492) [@isiahmeadows](https://github.com/isiahmeadows)) --> <h3 id="v201"><a href="#v201">v2.0.1</a></h3> <p>Same as v2.0.0, but with a publish that didn&#39;t have a botched upload.</p> <h3 id="v200"><a href="#v200">v2.0.0</a></h3> <h4 id="breaking-changes"><a href="#breaking-changes">Breaking changes</a></h4> <ul> <li>API: Component vnode <code>children</code> are not normalized into vnodes on ingestion; normalization only happens if and when they are ingested by the view (<a href="https://github.com/MithrilJS/mithril.js/pull/2155/">#2155</a> (thanks to <a href="https://github.com/magikstm">@magikstm</a> for related optimization <a href="https://github.com/MithrilJS/mithril.js/pull/2064">#2064</a>))</li> <li>API: <code>m.redraw()</code> is always asynchronous (<a href="https://github.com/MithrilJS/mithril.js/pull/1592">#1592</a>)</li> <li>API: <code>m.mount()</code> will only render its own root when called, it will not trigger a <code>redraw()</code> (<a href="https://github.com/MithrilJS/mithril.js/pull/1592">#1592</a>)</li> <li>API: Assigning to <code>vnode.state</code> (as in <code>vnode.state = ...</code>) is no longer supported. Instead, an error is thrown if <code>vnode.state</code> changes upon the invocation of a lifecycle hook.</li> <li>API: <code>m.request</code> will no longer reject the Promise on server errors (eg. status &gt;= 400) if the caller supplies an <code>extract</code> callback. This gives applications more control over handling server responses.</li> <li>hyperscript: when attributes have a <code>null</code> or <code>undefined</code> value, they are treated as if they were absent. <a href="https://github.com/MithrilJS/mithril.js/issues/1773">#1773</a> (<a href="https://github.com/MithrilJS/mithril.js/pull/2174">#2174</a>)</li> <li>API: <code>m.request</code> errors no longer copy response fields to the error, but instead assign the parsed JSON response to <code>error.response</code> and the HTTP status code <code>error.code</code>.</li> <li>hyperscript: when an attribute is defined on both the first and second argument (as a CSS selector and an <code>attrs</code> field, respectively), the latter takes precedence, except for <code>class</code> attributes that are still added together. <a href="https://github.com/MithrilJS/mithril.js/issues/2172">#2172</a> (<a href="https://github.com/MithrilJS/mithril.js/pull/2174">#2174</a>)</li> <li>cast className using toString (<a href="https://github.com/MithrilJS/mithril.js/pull/2309">#2309</a>)</li> <li>render: call attrs&#39; hooks last, with express exception of <code>onbeforeupdate</code> to allow attrs to block components from even diffing (<a href="https://github.com/MithrilJS/mithril.js/pull/2297">#2297</a>)</li> <li>API: <code>m.withAttr</code> removed. (<a href="https://github.com/MithrilJS/mithril.js/pull/2317">#2317</a>)</li> <li>request: <code>data</code> has now been split to <code>params</code> and <code>body</code> and <code>useBody</code> has been removed in favor of just using <code>body</code>. (<a href="https://github.com/MithrilJS/mithril.js/pull/2361">#2361</a>)</li> <li>route, request: Interpolated arguments are URL-escaped (and for declared routes, URL-unescaped) automatically. If you want to use a raw route parameter, use a variadic parameter like in <code>/asset/:path.../view</code>. This was previously only available in <code>m.route</code> route definitions, but it&#39;s now usable in both that and where paths are accepted. (<a href="https://github.com/MithrilJS/mithril.js/pull/2361">#2361</a>)</li> <li>route, request: Interpolated arguments are <em>not</em> appended to the query string. This means <code>m.request({url: &quot;/api/user/:id/get&quot;, params: {id: user.id}})</code> would result in a request like <code>GET /api/user/1/get</code>, not one like <code>GET /api/user/1/get?id=1</code>. If you really need it in both places, pass the same value via two separate parameters with the non-query-string parameter renamed, like in <code>m.request({url: &quot;/api/user/:urlID/get&quot;, params: {id: user.id, urlID: user.id}})</code>. (<a href="https://github.com/MithrilJS/mithril.js/pull/2361">#2361</a>)</li> <li>route, request: <code>m.route.set</code>, <code>m.request</code>, and <code>m.jsonp</code> all use the same path template syntax now, and vary only in how they receive their parameters. Furthermore, declared routes in <code>m.route</code> shares the same syntax and semantics, but acts in reverse as if via pattern matching. (<a href="https://github.com/MithrilJS/mithril.js/pull/2361">#2361</a>)</li> <li>request: <code>options.responseType</code> now defaults to <code>&quot;json&quot;</code> if <code>extract</code> is absent, and <code>deserialize</code> receives the parsed response, not the raw string. If you want the old behavior, <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType">use <code>responseType: &quot;text&quot;</code></a> (<a href="https://github.com/MithrilJS/mithril.js/pull/2335">#2335</a>)</li> <li>request: set <code>Content-Type: application/json; charset=utf-8</code> for all XHR methods by default, provided they have a body that&#39;s <code>!= null</code> (<a href="https://github.com/MithrilJS/mithril.js/pull/2361">#2361</a>, <a href="https://github.com/MithrilJS/mithril.js/pull/2421">#2421</a>)<ul> <li>This can cause CORS issues when issuing <code>GET</code> with bodies, but you can address them through configuring CORS appropriately.</li> <li>Previously, it was only set for all non-<code>GET</code> methods and only when <code>useBody: true</code> was passed (the default), and it was always set for them. Now it&#39;s automatically omitted when no body is present, so the hole is slightly broadened.</li> </ul> </li> <li>route: query parameters in hash strings are no longer supported (<a href="https://github.com/MithrilJS/mithril.js/pull/2448">#2448</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)<ul> <li>It&#39;s technically invalid in hashes, so I&#39;d rather push people to keep in line with spec.</li> </ul> </li> <li>render: validate all elements are either keyed or unkeyed, and treat <code>null</code>/<code>undefined</code>/booleans as strictly unkeyed (<a href="https://github.com/MithrilJS/mithril.js/pull/2452">#2452</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)<ul> <li>Gives a nice little perf boost with keyed fragments.</li> <li>Minor, but imperceptible impact (within the margin of error) with unkeyed fragments.</li> <li>Also makes the model a lot more consistent - all values are either keyed or unkeyed.</li> </ul> </li> <li>vnodes: normalize boolean children to <code>null</code>/<code>undefined</code> at the vnode level, always stringify non-object children that aren&#39;t holes (<a href="https://github.com/MithrilJS/mithril.js/pull/2452">#2452</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)<ul> <li>Previously, <code>true</code> was equivalent to <code>&quot;true&quot;</code> and <code>false</code> was equivalent to <code>&quot;&quot;</code>.</li> <li>Previously, numeric children weren&#39;t coerced. Now, they are.</li> <li>Unlikely to break most components, but it <em>could</em> break some users.</li> <li>This increases consistency with how booleans are handled with children, so it should be more intuitive.</li> </ul> </li> <li>route: <code>key</code> parameter for routes now only works globally for components (<a href="https://github.com/MithrilJS/mithril.js/pull/2458">#2458</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)<ul> <li>Previously, it worked for route resolvers, too.</li> <li>This lets you ensure global layouts used in <code>render</code> still render by diff.</li> </ul> </li> <li>redraw: <code>mithril/redraw</code> now just exposes the <code>m.redraw</code> callback (<a href="https://github.com/MithrilJS/mithril.js/pull/2458">#2458</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)<ul> <li>The <code>.schedule</code>, <code>.unschedule</code>, and <code>.render</code> properties of the former <code>redrawService</code> are all removed.</li> <li>If you want to know how to work around it, look at the call to <code>mount</code> in Mithril&#39;s source for <code>m.route</code>. That should help you in finding ways around the removed feature. (It doesn&#39;t take that much more code.)</li> </ul> </li> <li>api: <code>m.version</code> has been removed. If you really need the version for whatever reason, just read the <code>version</code> field of <code>mithril/package.json</code> directly. (<a href="https://github.com/MithrilJS/mithril.js/pull/2466">#2466</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>route: <code>m.route.prefix(...)</code> is now <code>m.route.prefix = ...</code>. (<a href="https://github.com/MithrilJS/mithril.js/pull/2469">#2469</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)<ul> <li>This is a fully fledged property, so you can not only write to it, but you can also read from it.</li> <li>This aligns better with user intuition.</li> </ul> </li> <li>route: <code>m.route.link</code> function removed in favor of <code>m.route.Link</code> component. (<a href="https://github.com/MithrilJS/mithril.js/pull/2469">#2469</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)<ul> <li>An optional <code>options</code> object is accepted as an attribute. This was initially targeting the old <code>m.route.link</code> function and was transferred to this. (<a href="https://github.com/MithrilJS/mithril.js/pull/1930">#1930</a>)</li> <li>The new component handles many more edge cases around user interaction, including accessibility.</li> <li>Link navigation can be disabled and cancelled.</li> <li>Link targets can be trivially changed.</li> </ul> </li> </ul> <h4 id="news"><a href="#news">News</a></h4> <ul> <li>Mithril now only officially supports IE11, Firefox ESR, and the last two versions of Chrome/FF/Edge/Safari. (<a href="https://github.com/MithrilJS/mithril.js/pull/2296">#2296</a>)</li> <li>API: Introduction of <code>m.redraw.sync()</code> (<a href="https://github.com/MithrilJS/mithril.js/pull/1592">#1592</a>)</li> <li>API: Event handlers may also be objects with <code>handleEvent</code> methods (<a href="https://github.com/MithrilJS/mithril.js/pull/1949">#1949</a>, <a href="https://github.com/MithrilJS/mithril.js/pull/2222">#2222</a>).</li> <li>API: <code>m.request</code> better error message on JSON parse error - (<a href="https://github.com/MithrilJS/mithril.js/pull/2195">#2195</a>, <a href="https://github.com/codeclown">@codeclown</a>)</li> <li>API: <code>m.request</code> supports <code>timeout</code> as attr - (<a href="https://github.com/MithrilJS/mithril.js/pull/1966">#1966</a>)</li> <li>API: <code>m.request</code> supports <code>responseType</code> as attr - (<a href="https://github.com/MithrilJS/mithril.js/pull/2193">#2193</a>)</li> <li>Mocks: add limited support for the DOMParser API (<a href="https://github.com/MithrilJS/mithril.js/pull/2097">#2097</a>)</li> <li>API: add support for raw SVG in <code>m.trust()</code> string (<a href="https://github.com/MithrilJS/mithril.js/pull/2097">#2097</a>)</li> <li>render/core: remove the DOM nodes recycling pool (<a href="https://github.com/MithrilJS/mithril.js/pull/2122">#2122</a>)</li> <li>render/core: revamp the core diff engine, and introduce a longest-increasing-subsequence-based logic to minimize DOM operations when re-ordering keyed nodes.</li> <li>docs: Emphasize Closure Components for stateful components, use them for all stateful component examples.</li> <li>API: ES module bundles are now available for <code>mithril</code> and <code>mithril/stream</code> (<a href="https://github.com/MithrilJS/mithril.js/pull/2194">#2194</a> <a href="https://github.com/porsager">@porsager</a>).<ul> <li>All of the <code>m.*</code> properties from <code>mithril</code> are re-exported as named exports in addition to being attached to <code>m</code>.</li> <li><code>m()</code> itself from <code>mithril</code> is exported as the default export.</li> <li><code>mithril/stream</code>&#39;s primary export is exported as the default export.</li> </ul> </li> <li>fragments: allow same attrs/children overloading logic as hyperscript (<a href="https://github.com/MithrilJS/mithril.js/pull/2328">#2328</a>)</li> <li>route: Declared routes may check against path names with query strings. (<a href="https://github.com/MithrilJS/mithril.js/pull/2361">#2361</a>)</li> <li>route: Declared routes in <code>m.route</code> now support <code>-</code> and <code>.</code> as delimiters for path segments. This means you can have a route like <code>&quot;/edit/:file.:ext&quot;</code>. (<a href="https://github.com/MithrilJS/mithril.js/pull/2361">#2361</a>)<ul> <li>Previously, this was possible to do in <code>m.route.set</code>, <code>m.request</code>, and <code>m.jsonp</code>, but it was wholly untested for and also undocumented.</li> </ul> </li> <li>API: <code>m.buildPathname</code> and <code>m.parsePathname</code> added. (<a href="https://github.com/MithrilJS/mithril.js/pull/2361">#2361</a>)</li> <li>route: Use <code>m.mount(root, null)</code> to unsubscribe and clean up after a <code>m.route(root, ...)</code> call. (<a href="https://github.com/MithrilJS/mithril.js/pull/2453">#2453</a>)</li> <li>render: new <code>redraw</code> parameter exposed any time a child event handler is used (<a href="https://github.com/MithrilJS/mithril.js/pull/2458">#2458</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>route: <code>m.route.SKIP</code> can be returned from route resolvers to skip to the next route (<a href="https://github.com/MithrilJS/mithril.js/pull/2469">#2469</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>API: Full DOM no longer required to execute <code>require(&quot;mithril&quot;)</code>. You just need to set the necessary globals to <em>something</em>, even if <code>null</code> or <code>undefined</code>, so they can be properly used. (<a href="https://github.com/MithrilJS/mithril.js/pull/2469">#2469</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)<ul> <li>This enables isomorphic use of <code>m.route.Link</code> and <code>m.route.prefix</code>.</li> <li>This enables isomorphic use of <code>m.request</code>, provided the <code>background: true</code> option is set and that an <code>XMLHttpRequest</code> polyfill is included as necessary.</li> <li>Note that methods requiring DOM operations will still throw errors, such as <code>m.render(...)</code>, <code>m.redraw()</code>, and <code>m.route(...)</code>.</li> </ul> </li> <li>render: Align custom elements to work like normal elements, minus all the HTML-specific magic. (<a href="https://github.com/MithrilJS/mithril.js/pull/2221">#2221</a>)</li> </ul> <h4 id="bug-fixes"><a href="#bug-fixes">Bug fixes</a></h4> <ul> <li>API: <code>m.route.set()</code> causes all mount points to be redrawn (<a href="https://github.com/MithrilJS/mithril.js/pull/1592">#1592</a>)</li> <li>render/attrs: Using style objects in hyperscript calls will now properly diff style properties from one render to another as opposed to re-writing all element style properties every render.</li> <li>render/attrs All vnodes attributes are properly removed when absent or set to <code>null</code> or <code>undefined</code> <a href="https://github.com/MithrilJS/mithril.js/issues/1804">#1804</a> <a href="https://github.com/MithrilJS/mithril.js/issues/2082">#2082</a> (<a href="https://github.com/MithrilJS/mithril.js/pull/1865">#1865</a>, <a href="https://github.com/MithrilJS/mithril.js/pull/2130">#2130</a>)</li> <li>render/core: Render state correctly on select change event <a href="https://github.com/MithrilJS/mithril.js/issues/1916">#1916</a> (<a href="https://github.com/MithrilJS/mithril.js/pull/1918">#1918</a> <a href="https://github.com/robinchew">@robinchew</a>, <a href="https://github.com/MithrilJS/mithril.js/pull/2052">#2052</a>)</li> <li>render/core: fix various updateNodes/removeNodes issues when the pool and fragments are involved <a href="https://github.com/MithrilJS/mithril.js/issues/1990">#1990</a>, <a href="https://github.com/MithrilJS/mithril.js/issues/1991">#1991</a>, <a href="https://github.com/MithrilJS/mithril.js/issues/2003">#2003</a>, <a href="https://github.com/MithrilJS/mithril.js/pull/2021">#2021</a></li> <li>render/core: fix crashes when the keyed vnodes with the same <code>key</code> had different <code>tag</code> values <a href="https://github.com/MithrilJS/mithril.js/issues/2128">#2128</a> <a href="https://github.com/JacksonJN">@JacksonJN</a> (<a href="https://github.com/MithrilJS/mithril.js/pull/2130">#2130</a>)</li> <li>render/core: fix cached nodes behavior in some keyed diff scenarios <a href="https://github.com/MithrilJS/mithril.js/issues/2132">#2132</a> (<a href="https://github.com/MithrilJS/mithril.js/pull/2130">#2130</a>)</li> <li>render/events: <code>addEventListener</code> and <code>removeEventListener</code> are always used to manage event subscriptions, preventing external interference.</li> <li>render/events: Event listeners allocate less memory, swap at low cost, and are properly diffed now when rendered via <code>m.mount()</code>/<code>m.redraw()</code>.</li> <li>render/events: <code>Object.prototype</code> properties can no longer interfere with event listener calls.</li> <li>render/events: Event handlers, when set to literally <code>undefined</code> (or any non-function), are now correctly removed.</li> <li>render/hooks: fixed an ommission that caused <code>oninit</code> to be called unnecessarily in some cases <a href="https://github.com/MithrilJS/mithril.js/issues/1992">#1992</a></li> <li>docs: tweaks: (<a href="https://github.com/MithrilJS/mithril.js/pull/2104">#2104</a> <a href="https://github.com/mikeyb">@mikeyb</a>, <a href="https://github.com/MithrilJS/mithril.js/pull/2205">#2205</a>, <a href="https://github.com/cavemansspa">@cavemansspa</a>, <a href="https://github.com/MithrilJS/mithril.js/pull/2250">#2250</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>, <a href="https://github.com/MithrilJS/mithril.js/pull/2265">#2265</a>, <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>render/core: avoid touching <code>Object.prototype.__proto__</code> setter with <code>key: &quot;__proto__&quot;</code> in certain situations (<a href="https://github.com/MithrilJS/mithril.js/pull/2251">#2251</a>)</li> <li>render/core: Vnodes stored in the dom node supplied to <code>m.render()</code> are now normalized <a href="https://github.com/MithrilJS/mithril.js/pull/2266">#2266</a></li> <li>render/core: CSS vars can now be specified in <code>{style}</code> attributes (<a href="https://github.com/MithrilJS/mithril.js/pull/2192">#2192</a> <a href="https://github.com/barneycarroll">@barneycarroll</a>), (<a href="https://github.com/MithrilJS/mithril.js/pull/2311">#2311</a> <a href="https://github.com/porsager">@porsager</a>), (<a href="https://github.com/MithrilJS/mithril.js/pull/2312">#2312</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>request: don&#39;t modify params, call <code>extract</code>/<code>serialize</code>/<code>deserialize</code> with correct <code>this</code> value (<a href="https://github.com/MithrilJS/mithril.js/pull/2288">#2288</a>)</li> <li>render: simplify component removal (<a href="https://github.com/MithrilJS/mithril.js/pull/2214">#2214</a>)</li> <li>render: remove some redundancy within the component initialization code (<a href="https://github.com/MithrilJS/mithril.js/pull/2213">#2213</a>)</li> <li>API: <code>mithril</code> loads <code>mithril/index.js</code>, not the bundle, so users of <code>mithril/hyperscript</code>, <code>mithril/render</code>, and similar see the same Mithril instance as those just using <code>mithril</code> itself.<ul> <li><code>https://unpkg.com/mithril</code> is configured to receive the <em>minified</em> bundle, not the development bundle.</li> <li>The raw bundle itself remains accessible at <code>mithril.js</code>, and is <em>not</em> browser-wrapped.</li> <li>Note: this <em>will</em> increase overhead with bundlers like Webpack, Rollup, and Browserify.</li> </ul> </li> <li>request: autoredraw support fixed for <code>async</code>/<code>await</code> in Chrome (<a href="https://github.com/MithrilJS/mithril.js/pull/2428">#2428</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>render: fix when attrs change with <code>onbeforeupdate</code> returning false, then remaining the same on next redraw (<a href="https://github.com/MithrilJS/mithril.js/pull/2447">#2447</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>render: fix internal error when <code>onbeforeupdate</code> returns false and then true with new child tree (<a href="https://github.com/MithrilJS/mithril.js/pull/2447">#2447</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>route: arbitrary prefixes are properly supported now, including odd prefixes like <code>?#</code> and invalid prefixes like <code>#foo#bar</code> (<a href="https://github.com/MithrilJS/mithril.js/pull/2448">#2448</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>request: correct IE workaround for response type non-support (<a href="https://github.com/MithrilJS/mithril.js/pull/2449">#2449</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>render: correct <code>contenteditable</code> check to also check for <code>contentEditable</code> property name (<a href="https://github.com/MithrilJS/mithril.js/pull/2450">#2450</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>docs: clarify valid key usage (<a href="https://github.com/MithrilJS/mithril.js/pull/2452">#2452</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>route: don&#39;t pollute globals (<a href="https://github.com/MithrilJS/mithril.js/pull/2453">#2453</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> <li>request: track xhr replacements correctly (<a href="https://github.com/MithrilJS/mithril.js/pull/2455">#2455</a> <a href="https://github.com/isiahmeadows">@isiahmeadows</a>)</li> </ul> <hr /> <small>License: MIT. &copy; Leo Horie.</small> </section> </main> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/prism.min.js" defer></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/components/prism-jsx.min.js" defer></script> <script src="https://unpkg.com/mithril@2.0.1/mithril.js" async></script> <script> document.querySelector(".hamburger").onclick = function() { document.body.className = document.body.className === "navigating" ? "" : "navigating" document.querySelector("h1 + ul").onclick = function() { document.body.className = '' } } </script> </body> </html>