Releases: MithrilJS/mithril.js
v2.2.2
v2.2.1
v2.2.0
Release v2.2.0
- #2769
- #2752
- #2768
- #2578
- #2722
- #2316
- #2750
- #2711
- #2743
- #2670
- #2695
- #2641
- #2655
- #2537
- #2646
- #2633
- #2594
- #2603
- #2539
- #2536
- #2405
- #2744
- #2765
- #2760
- #2758
- #2751
- #2757
- #2748
- #2745
- #2620
- #2644
- #2649
- #1767
- #2718
- #2693
- #2741
- #2651
- #2721
- #2353
- #2206
- #2648
- #2672
- #2717
- #2348
- #2698
- #2696
- #2684
- #2680
- #2679
- #2673
- #2674
- #2657
- #2639
- #2487
- #2585
- #2630
- #2629
- #2628
- #2627
- #2608
- #2605
- #2593
- #2582
- #2576
- #2573
- #2567
- #2561
- #2553
- #2540
- #2538
- #2522
- #2513
Changelog
Minor Changes
m.censor: work around a bunder bug (@kfule)
The internal bundler sometimes mangles the words in RegExp literals incorrectly. Please see below.
Warn about reusing mutated attrs object - fixes #2719 (@StephanHoyer)
Send URLSearchParams as request body without extra configuration (@Coteh)
This PR fixes an oddity I noticed in the way m.request handles URLSearchParams object. It now handles it in the same sort of way XHR and Fetch do it.
Add params: to m.route.Link, fix docs (@dead-claudia)
Add params: to m.route.Link. Minor fix to docs to reflect reality with m.route.Link's disabled: attribute.
Allow Mithril to be loaded in non-browser environments without modification (@dead-claudia)
Recast the global reads to all be guarded with typeof, so that if they aren't defined, they're just null.
Add a m.Fragment = "[" utility for JSX users. (@dead-claudia)
The title says it all, and the diff's obvious. Resolves #2640 and probably others.
Patch Changes
Enable --minimize-semver-change for pr-release (@JAForbes)
Minimizes semver changes on release to the minimum required version bump to satisfy major/minor/patch semver ranges. Minimizes the semver change so that.
Clean up m.route.Link (@barneycarroll)
An attempt at better demonstrating m.route.Link with less text. Fixes #2767.
Runtime-deprecate ospec, change change-log to changelog, fix a few assorted bugs (@dead-claudia)
This PR is in two parts: 1. Revise the build system and some of the local dev setup. Fully split ospec from the repo, and add it as a dependency.
Add meta description to docs (@StephanHoyer)
rework of #2149. added a meta description parser and meta descriptions to all docs pages. because google. built the docs, inspected the output manually.
Fixed badges, consistent naming of Mithril.js (@tbreuss)
use consistent naming of Mithril.js. fix badges in README. Fixes issue #2749.
Catch malformed URI Components (@jdiderik)
Fix for error thrown when a value contains non-valid / malformed URI Component. Example: test=%c5%a1%e8ZM%80%82H. will throw "URI malformed".
Correctly handle invalid escapes in routes based on 0a5ead31c9fbd7b153c521c7f9d3df7bf826ce6c (@StephanHoyer)
fixes #2061. @dead-claudia I just redid your change but slightly different in order to handle a mix of wrong and right encodings properly.
Standardise vnode text representation (@barneycarroll)
This addresses the crucial feature of #2669: text is always represented as virtual text nodes, never as a vnode.text.
Issue 2624 no content 204 parse (@Evoke-PHP)
Added guard so that JSON.parse does not fail on IE11 with no content empty string being parsed. Fixes #2624.
[m.request] work around a bundler bug, fix #2647 (@pygy)
The bundler mangles identifier-like strings within RegExps, this works around the problem by not using such RegExps.
Reject request on XHR timeout (@kevinfiol)
Derived from PR #2581. Allows requests to properly reject on event of a timeout.
Remove extra isLifecycleMethod call from removeAttr (@ZeikJT)
Removing an extra isLifecycleMethod in the removeAttr method, it isn't needed since it's already checked on the previous line.
Fix #2601 (@dead-claudia)
Fix issue where ending a stream in the middle of a stream callback would result in erroneous parent stream state for the rest of that emit. Fixes #2601.
Add streams to releases again, include minified bundle, drop internal stuff from npm (@dead-claudia)
Add stream/stream.js to releases again. Add stream/stream.min.js now that the process is remotely sane now.
Make errors and their messages more accurate and helpful (@dead-claudia)
I updated error messages to be much more helpful.
Fix assertion descriptions (@soulofmischief)
I moved the return statement to the end of define() so that it returns even if the comparison fails.
Fix branch target (@dead-claudia)
https://github.com/MithrilJS/mithril.js/runs/6199543939?check_suite_focus=true.
Automate mithril's release workflow (@JAForbes)
Automated releases, pre-releases, (code) rollbacks and recovery, npm publishing, change log management just by using normal github flow.
rework jsx docs (@StephanHoyer)
Add Simple Application Flems Supporting v2.0.4 and up (@tbreuss)
Added Flems for Simple Application supporting v2.0.4 of Mithril.js. Fixes Issue #2710.
Make example work with webpack v5.69.1 (@StephanHoyer)
fixes #2634.
2604: correct and move text about statements in view method (@kevinfiol)
Addresses #2604.
Fix lint errors (@StephanHoyer)
WIP: Update modularisation details in Installation docs (@orbitbot)
added link to flems.io as an easier way to just try out the framework. -. Documentation has grown a bit stale.
Added power support for the travis.yml file with ppc64le (@sreekanth370)
Added power support for the travis.yml file with ppc64le. This is part of the Ubuntu distribution for ppc64le.
Updated babel/webpack docs to work with latest versions (@pereriksson)
As a developer I tried setting up Mithril with Babel and Webpack but failed because of a variety of errors.
[docs] route redirection using the history API (@pygy)
This is an attempt at fixing #1759, but there may be more to be added. Feedback welcome. ping @dontwork.
Bump path-parse from 1.0.6 to 1.0.7 (@dependabot[bot])
Bumps path-parse from 1.0.6 to 1.0.7. Commits. See full diff in compare view.
Bump glob-parent from 5.1.0 to 5.1.2 (@dependabot[bot])
Bumps glob-parent from 5.1.0 to 5.1.2. Release notes. Sourced from glob-parent's releases. v5.1.2. Bug Fixes.
Bump ajv from 6.10.2 to 6.12.6 (@dependabot[bot])
Bumps ajv from 6.10.2 to 6.12.6. Release notes. Sourced from ajv's releases. v6.12.6. Fix performance issue of "url" format.
Update standalone usage (@ghost)
Avoid double encoding of function signatures - fixes #2720 (@StephanHoyer)
Show previous versions (@mike-ward)
Add Dropdown that shows links to archived versions of the documentation.
docs: improve m.request return value description (@GAumala)
In the m.request return value description, add a line informing that error status codes cause the promise to reject.
A note on JSX events (@pereriksson)
Naming JSX events according to their documentation produces unexpected results with incorrectly named events when using JSX with Mithril.
Document route resolution cancellation, fixes #1759 (@barneycarroll)
Also...
v1.1.7
Ordinarily, I would not have released this, but it includes a backport of a security fix from v2.0.3. If you're stuck on v1.x, you should really update to this ASAP.
Bug fixes
- core: Workaround for Internet Explorer bug when running in an iframe
- Fix prototype pollution vulnerability in
m.parseQueryString(#2523 @isiahmeadows @Hunter-Dolan)
v2.0.4
- Fix double-rendering of trusted content within
contenteditableelements (#2516 @isiahmeadows) - Fix error on
m.trustupdating (#2516 @isiahmeadows)
v2.0.3
- Ensure vnodes are removed correctly in the face of
onbeforeremoveresolving after new nodes are added (#2492 @isiahmeadows) - Fix prototype pollution vulnerability in
m.parseQueryString(#2494 @isiahmeadows)
v2.0.2 was skipped as it had a critical flaw and was immediately unpublished.
v2.0.1
This is really what v2.0.0 was supposed to be, but the npm upload got botched the first time around.
Breaking changes
- API: Component vnode
childrenare not normalized into vnodes on ingestion; normalization only happens if and when they are ingested by the view (#2155 (thanks to @magikstm for related optimization #2064)) - API:
m.redraw()is always asynchronous (#1592) - API:
m.mount()will only render its own root when called, it will not trigger aredraw()(#1592) - API: Assigning to
vnode.state(as invnode.state = ...) is no longer supported. Instead, an error is thrown ifvnode.statechanges upon the invocation of a lifecycle hook. - API:
m.requestwill no longer reject the Promise on server errors (eg. status >= 400) if the caller supplies anextractcallback. This gives applications more control over handling server responses. - hyperscript: when attributes have a
nullorundefinedvalue, they are treated as if they were absent. #1773 (#2174) - API:
m.requesterrors no longer copy response fields to the error, but instead assign the parsed JSON response toerror.responseand the HTTP status codeerror.code. - hyperscript: when an attribute is defined on both the first and second argument (as a CSS selector and an
attrsfield, respectively), the latter takes precedence, except forclassattributes that are still added together. #2172 (#2174) - cast className using toString (#2309)
- render: call attrs' hooks last, with express exception of
onbeforeupdateto allow attrs to block components from even diffing (#2297) - API:
m.withAttrremoved. (#2317) - request:
datahas now been split toparamsandbodyanduseBodyhas been removed in favor of just usingbody. (#2361) - 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
/asset/:path.../view. This was previously only available inm.routeroute definitions, but it's now usable in both that and where paths are accepted. (#2361) - route, request: Interpolated arguments are not appended to the query string. This means
m.request({url: "/api/user/:id/get", params: {id: user.id}})would result in a request likeGET /api/user/1/get, not one likeGET /api/user/1/get?id=1. If you really need it in both places, pass the same value via two separate parameters with the non-query-string parameter renamed, like inm.request({url: "/api/user/:urlID/get", params: {id: user.id, urlID: user.id}}). (#2361) - route, request:
m.route.set,m.request, andm.jsonpall use the same path template syntax now, and vary only in how they receive their parameters. Furthermore, declared routes inm.routeshares the same syntax and semantics, but acts in reverse as if via pattern matching. (#2361) - request:
options.responseTypenow defaults to"json"ifextractis absent, anddeserializereceives the parsed response, not the raw string. If you want the old behavior, useresponseType: "text". (#2335) - request: set
Content-Type: application/json; charset=utf-8for all XHR methods by default, provided they have a body that's!= null(#2361, #2421)- This can cause CORS issues when issuing
GETwith bodies, but you can address them through configuring CORS appropriately. - Previously, it was only set for all non-
GETmethods and only whenuseBody: truewas passed (the default), and it was always set for them. Now it's automatically omitted when no body is present, so the hole is slightly broadened.
- This can cause CORS issues when issuing
- route: query parameters in hash strings are no longer supported (#2448 @isiahmeadows)
- It's technically invalid in hashes, so I'd rather push people to keep in line with spec.
- render: validate all elements are either keyed or unkeyed, and treat
null/undefined/booleans as strictly unkeyed (#2452 @isiahmeadows)- Gives a nice little perf boost with keyed fragments.
- Minor, but imperceptible impact (within the margin of error) with unkeyed fragments.
- Also makes the model a lot more consistent - all values are either keyed or unkeyed.
- vnodes: normalize boolean children to
null/undefinedat the vnode level, always stringify non-object children that aren't holes (#2452 @isiahmeadows)- Previously,
truewas equivalent to"true"andfalsewas equivalent to"". - Previously, numeric children weren't coerced. Now, they are.
- Unlikely to break most components, but it could break some users.
- This increases consistency with how booleans are handled with children, so it should be more intuitive.
- Previously,
- route:
keyparameter for routes now only works globally for components (#2458 @isiahmeadows)- Previously, it worked for route resolvers, too.
- This lets you ensure global layouts used in
renderstill render by diff.
- redraw:
mithril/redrawnow just exposes them.redrawcallback (#2458 @isiahmeadows)- The
.schedule,.unschedule, and.renderproperties of the formerredrawServiceare all removed. - If you want to know how to work around it, look at the call to
mountin Mithril's source form.route. That should help you in finding ways around the removed feature. (It doesn't take that much more code.)
- The
- api:
m.versionhas been removed. If you really need the version for whatever reason, just read theversionfield ofmithril/package.jsondirectly. (#2466 @isiahmeadows) - route:
m.route.prefix(...)is nowm.route.prefix = .... (#2469 @isiahmeadows)- This is a fully fledged property, so you can not only write to it, but you can also read from it.
- This aligns better with user intuition.
- route:
m.route.linkfunction removed in favor ofm.route.Linkcomponent. (#2469 @isiahmeadows)- An optional
optionsobject is accepted as an attribute. This was initially targeting the oldm.route.linkfunction and was transferred to this. (#1930) - The new component handles many more edge cases around user interaction, including accessibility.
- Link navigation can be disabled and cancelled.
- Link targets can be trivially changed.
- An optional
News
- Mithril now only officially supports IE11, Firefox ESR, and the last two versions of Chrome/FF/Edge/Safari. (#2296)
- API: Introduction of
m.redraw.sync()(#1592) - API: Event handlers may also be objects with
handleEventmethods (#1949, #2222). - API:
m.requestbetter error message on JSON parse error - (#2195, @codeclown) - API:
m.requestsupportstimeoutas attr - (#1966) - API:
m.requestsupportsresponseTypeas attr - (#2193) - Mocks: add limited support for the DOMParser API (#2097)
- API: add support for raw SVG in
m.trust()string (#2097) - render/core: remove the DOM nodes recycling pool (#2122)
- render/core: revamp the core diff engine, and introduce a longest-increasing-subsequence-based logic to minimize DOM operations when re-ordering keyed nodes.
- docs: Emphasize Closure Components for stateful components, use them for all stateful component examples.
- API: ES module bundles are now available for
mithrilandmithril/stream(#2194 @porsager).- All of the
m.*properties frommithrilare re-exported as named exports in addition to being attached tom. m()itself frommithrilis exported as the default export.mithril/stream's primary export is exported as the de...
- All of the
(Unpublished)
When publishing, the npm upload got interrupted and it didn't publish properly. So I unpublished it. Don't try installing this version - it won't work!
v2.0.0-rc.9
This is a hotfix release for critical issues discovered in v2.0.0-rc.8.
- It did not previously censor magic attributes, causing lifecycle hooks to be double-called. #2471
- I named the
m.route.Linkselector argumentcomponent:when it should've been calledselector:. #2475 (This is the only breaking change.) - Routing prevention via
ev.preventDefault()was critically broken, and button values and modifier state was incorrectly tested for. #2476
I also included various docs fixes in this release to clear up some confusion.
v2.0.0-rc
Breaking changes
- API: Component vnode
childrenare not normalized into vnodes on ingestion; normalization only happens if and when they are ingested by the view (#2155 (thanks to @magikstm for related optimization #2064)) - API:
m.redraw()is always asynchronous (#1592) - API:
m.mount()will only render its own root when called, it will not trigger aredraw()(#1592) - API: Assigning to
vnode.state(as invnode.state = ...) is no longer supported. Instead, an error is thrown ifvnode.statechanges upon the invocation of a lifecycle hook. - API:
m.requestwill no longer reject the Promise on server errors (eg. status >= 400) if the caller supplies anextractcallback. This gives applications more control over handling server responses. - hyperscript: when attributes have a
nullorundefinedvalue, they are treated as if they were absent. #1773 (#2174) - API:
m.requesterrors no longer copy response fields to the error, but instead assign the parsed JSON response toerror.responseand the HTTP status codeerror.code. - hyperscript: when an attribute is defined on both the first and second argument (as a CSS selector and an
attrsfield, respectively), the latter takes precedence, except forclassattributes that are still added together. #2172 (#2174) - render: Align custom elements to work like normal elements, minus all the HTML-specific magic. (#2221)
- cast className using toString (#2309)
- render: call attrs' hooks first, with express exception of
onbeforeupdateto allow attrs to block components from even diffing (#2297) - API:
m.withAttrremoved. (#2317) - request:
datahas now been split toparamsandbodyanduseBodyhas been removed in favor of just usingbody. (#2361) - 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
/asset/:path.../view. This was previously only available inm.routeroute definitions, but it's now usable in both that and where paths are accepted. (#2361) - route, request: Interpolated arguments are not appended to the query string. This means
m.request({url: "/api/user/:id/get", params: {id: user.id}})would result in a request likeGET /api/user/1/get, not one likeGET /api/user/1/get?id=1. If you really need it in both places, pass the same value via two separate parameters with the non-query-string parameter renamed, like inm.request({url: "/api/user/:urlID/get", params: {id: user.id, urlID: user.id}}). (#2361) - route, request:
m.route.set,m.request, andm.jsonpall use the same path template syntax now, and vary only in how they receive their parameters. Furthermore, declared routes inm.routeshares the same syntax and semantics, but acts in reverse as if via pattern matching. (#2361) - request:
options.responseTypenow defaults to"json"ifextractis absent, anddeserializereceives the parsed response, not the raw string. If you want the old behavior, useresponseType: "text". (#2335) - request: set
Content-Type: application/json; charset=utf-8for all XHR methods by default, provided they have a body that's!= null(#2361, #2421)- This can cause CORS issues when issuing
GETwith bodies, but you can address them through configuring CORS appropriately. - Previously, it was only set for all non-
GETmethods and only whenuseBody: truewas passed (the default), and it was always set for them. Now it's automatically omitted when no body is present, so the hole is slightly broadened.
- This can cause CORS issues when issuing
- route: query parameters in hash strings are no longer supported (#2448 @isiahmeadows)
- It's technically invalid in hashes, so I'd rather push people to keep in line with spec.
- render: validate all elements are either keyed or unkeyed, and treat
null/undefined/booleans as strictly unkeyed (#2452 @isiahmeadows)- Gives a nice little perf boost with keyed fragments.
- Minor, but imperceptible impact (within the margin of error) with unkeyed fragments.
- Also makes the model a lot more consistent - all values are either keyed or unkeyed.
- vnodes: normalize boolean children to
null/undefinedat the vnode level, always stringify non-object children that aren't holes (#2452 @isiahmeadows)- Previously,
truewas equivalent to"true"andfalsewas equivalent to"". - Previously, numeric children weren't coerced. Now, they are.
- Unlikely to break most components, but it could break some users.
- This increases consistency with how booleans are handled with children, so it should be more intuitive.
- Previously,
- route:
keyparameter for routes now only works globally for components (#2458 @isiahmeadows)- Previously, it worked for route resolvers, too.
- This lets you ensure global layouts used in
renderstill render by diff.
- redraw:
mithril/redrawnow just exposes them.redrawcallback (#2458 @isiahmeadows)- The
.schedule,.unschedule, and.renderproperties of the formerredrawServiceare all removed. - If you want to know how to work around it, look at the call to
mountin Mithril's source form.route. That should help you in finding ways around the removed feature. (It doesn't take that much more code.)
- The
- api:
m.versionhas been removed. If you really need the version for whatever reason, just read theversionfield ofmithril/package.jsondirectly. (#2466 @isiahmeadows) - route:
m.route.prefix(...)is nowm.route.prefix = .... (#2469 @isiahmeadows)- This is a fully fledged property, so you can not only write to it, but you can also read from it.
- This aligns better with user intuition.
- route:
m.route.linkfunction removed in favor ofm.route.Linkcomponent. (#2469 @isiahmeadows)- An optional
optionsobject is accepted as an attribute. This was initially targeting the oldm.route.linkfunction and was transferred to this. (#1930) - The new component handles many more edge cases around user interaction, including accessibility.
- Link navigation can be disabled and cancelled.
- Link targets can be trivially changed.
- An optional
- API: Full DOM no longer required to execute
require("mithril"). You just need to set the necessary globals to something, even ifnullorundefined, so they can be properly used. (#2469 @isiahmeadows)- This enables isomorphic use of
m.route.Linkandm.route.prefix. - This enables isomorphic use of
m.request, provided thebackground: trueoption is set and that anXMLHttpRequestpolyfill is included as necessary. - Note that methods requiring DOM operations will still throw errors, such as
m.render(...),m.redraw(), andm.route(...).
- This enables isomorphic use of
News
v2.0.0-rc.8
🚨🚨🚨 This is the final release candidate. There will be no more breaking changes added between now and when v2.0.0 stable is released. What you see here is precisely what to expect from v2.0.0 beyond small bug fixes. 🚨🚨🚨
Few new bug fixes, but a few major breaking changes since v2.0.0-rc.7.
require("mithril/redraw")now returns them.redrawfunction directly. There is no longer anyredrawServiceexposed in any way. #2458m.versionno longer exists. In general, rely on feature detection, not version detection. #2466- The
m.route.linkmethod has been replaced with them.route.Linkcomponent, with a capital L. #2469 - The
m.route.prefixmethod has been made a property instead. #2469
And a couple new features:
- You can use
m.route.SKIPto skip a route fromonmatch. #2469 - It's now safe to
require("mithril")in environments that lack a full DOM implementation. You just need a few of the globals defined, even if just tonullorundefined, to ensure proper instantiation. #2469
Breaking changes
- API: Component vnode
childrenare not normalized into vnodes on ingestion; normalization only happens if and when they are ingested by the view (#2155 (thanks to @magikstm for related optimization #2064)) - API:
m.redraw()is always asynchronous (#1592) - API:
m.mount()will only render its own root when called, it will not trigger aredraw()(#1592) - API: Assigning to
vnode.state(as invnode.state = ...) is no longer supported. Instead, an error is thrown ifvnode.statechanges upon the invocation of a lifecycle hook. - API:
m.requestwill no longer reject the Promise on server errors (eg. status >= 400) if the caller supplies anextractcallback. This gives applications more control over handling server responses. - hyperscript: when attributes have a
nullorundefinedvalue, they are treated as if they were absent. #1773 (#2174) - API:
m.requesterrors no longer copy response fields to the error, but instead assign the parsed JSON response toerror.responseand the HTTP status codeerror.code. - hyperscript: when an attribute is defined on both the first and second argument (as a CSS selector and an
attrsfield, respectively), the latter takes precedence, except forclassattributes that are still added together. #2172 (#2174) - render: Align custom elements to work like normal elements, minus all the HTML-specific magic. (#2221)
- cast className using toString (#2309)
- render: call attrs' hooks first, with express exception of
onbeforeupdateto allow attrs to block components from even diffing (#2297) - API:
m.withAttrremoved. (#2317) - request:
datahas now been split toparamsandbodyanduseBodyhas been removed in favor of just usingbody. (#2361) - 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
/asset/:path.../view. This was previously only available inm.routeroute definitions, but it's now usable in both that and where paths are accepted. (#2361) - route, request: Interpolated arguments are not appended to the query string. This means
m.request({url: "/api/user/:id/get", params: {id: user.id}})would result in a request likeGET /api/user/1/get, not one likeGET /api/user/1/get?id=1. If you really need it in both places, pass the same value via two separate parameters with the non-query-string parameter renamed, like inm.request({url: "/api/user/:urlID/get", params: {id: user.id, urlID: user.id}}). (#2361) - route, request:
m.route.set,m.request, andm.jsonpall use the same path template syntax now, and vary only in how they receive their parameters. Furthermore, declared routes inm.routeshares the same syntax and semantics, but acts in reverse as if via pattern matching. (#2361) - request:
options.responseTypenow defaults to"json"ifextractis absent, anddeserializereceives the parsed response, not the raw string. If you want the old behavior, useresponseType: "text". (#2335) - request: set
Content-Type: application/json; charset=utf-8for all XHR methods by default, provided they have a body that's!= null(#2361, #2421)- This can cause CORS issues when issuing
GETwith bodies, but you can address them through configuring CORS appropriately. - Previously, it was only set for all non-
GETmethods and only whenuseBody: truewas passed (the default), and it was always set for them. Now it's automatically omitted when no body is present, so the hole is slightly broadened.
- This can cause CORS issues when issuing
- route: query parameters in hash strings are no longer supported (#2448 @isiahmeadows)
- It's technically invalid in hashes, so I'd rather push people to keep in line with spec.
- render: validate all elements are either keyed or unkeyed, and treat
null/undefined/booleans as strictly unkeyed (#2452 @isiahmeadows)- Gives a nice little perf boost with keyed fragments.
- Minor, but imperceptible impact (within the margin of error) with unkeyed fragments.
- Also makes the model a lot more consistent - all values are either keyed or unkeyed.
- vnodes: normalize boolean children to
null/undefinedat the vnode level, always stringify non-object children that aren't holes (#2452 @isiahmeadows)- Previously,
truewas equivalent to"true"andfalsewas equivalent to"". - Previously, numeric children weren't coerced. Now, they are.
- Unlikely to break most components, but it could break some users.
- This increases consistency with how booleans are handled with children, so it should be more intuitive.
- Previously,
- route:
keyparameter for routes now only works globally for components (#2458 @isiahmeadows)- Previously, it worked for route resolvers, too.
- This lets you ensure global layouts used in
renderstill render by diff.
- redraw:
mithril/redrawnow just exposes them.redrawcallback (#2458 @isiahmeadows)- The
.schedule,.unschedule, and.renderproperties of the formerredrawServiceare all removed. - If you want to know how to work around it, look at the call to
mountin Mithril's source form.route. That should help you in finding ways around the removed feature. (It doesn't take that much more code.)
- The
- api:
m.versionhas been removed. If you really need the version for whatever reason, just read theversionfield ofmithril/package.jsondirectly. (#2466 @isiahmeadows) - route:
m.route.prefix(...)is nowm.route.prefix = .... (#2469 @isiahmeadows)- This is a fully fledged property, so you can not only write to it, but you can also read from it.
- This aligns better with user intuition.
- route:
m.route.linkfunction removed in favor ofm.route.Linkcomponent. (#2469 @isiahmeadows)- An optional
optionsobject is accepted as an attribute. This was initially targeting the oldm.route.linkfunction and was transferred to this. (#1930) - The new component handles many more edge cases around user interaction, including accessibility.
- Link navigation can be disabled and cancelled.
- Link targets can be trivially changed.
- An optional
- API: Full DOM no longer required to execute
require("mithril"). You just need to set the necessary globals to something, even ifnullorundefined, so they can be properly used. (#2469 @isiahmeadows)- This enables isomorphic use of
m.route.Linkandm.route.prefix. - This enables isomorphic use of
m.request, provided thebackground: trueoption is set and that anXMLHttpRequestpolyfill is included as necessary. - Note that methods req...
- This enables isomorphic use of