Commit graph

20 commits

Author SHA1 Message Date
Barney Carroll
0f9274f873 Fix lint errors 2022-02-12 12:19:35 +01:00
Barney Carroll
31d2ed4be8 Tests use hyperscript instead of manually constructing nodes 2022-02-12 12:19:35 +01:00
Isiah Meadows
9f0dc2ab46
Runtime-deprecate ospec, change change-log to changelog, fix a few assorted bugs (#2578) 2020-09-29 13:27:07 -07:00
Isiah Meadows
b98ab29efd
Make errors and their messages more accurate and helpful (#2536)
Also, I normalized them to all be sentences for consistency, and I moved
the reentrancy check from `m.mount` to `m.render` to be a little more
helpful. The router change during mounting is inconsequential and only
to avoid the new modified error, and the change to the update loop is to
send the original error if an error occurred while initializing the
default route. (This is all around more useful anyways.)

And while I was at it, I fixed an obscure bug with sync redraws.
2019-09-30 16:08:04 -04:00
Isiah Meadows
582bda56dc
Partially recast the router API to be a lot more intuitive. (#2469)
* Recast the router API to be a lot more intuitive.

Fixes #2387
Fixes #2072
Fixes quite a few issues reported on Gitter.

For `m.route.Link`:

- More intuitive
- More accessible
- More ergonomic
- It can be disabled
- It can be cancelled
- It can be changed
- Oh, and you can use it isomorphically.

For `m.route.prefix`

- You can *read* it.
- You can write to it, of course.
- It's literally just setting a property.

For the router itself (and the rest of Mithril):

- You can now `require("mithril")` and all its submodules without a DOM
  at all. There is a catch: you can't instantiate any routes, you can't
  mount anything, and you can't invoke `m.render` in any capacity. You
  can only use `m.route.Link`, `m.route.prefix`, hyperscript stuff, and
  `mithril/stream`, and you can use `m.request` with `background: true`
  if you use a global XHR polyfill. (You can't use `m.request` without
  `background: true` except with a DOM to redraw with.) The goal here is
  to try to get out of the way for simple testing and to defer the
  inevitable `TypeError`s for the relevant DOM methods to runtime.

  The factory requires no arguments, and in terms of globals, you can
  just figure out based on what errors are thrown what globals to
  define. Their values don't matter - they just need to be set to
  *something*, even if it's just `null` or `undefined`, before Mithril
  executes.

Had to make quite a few other changes throughout the docs and tests to
update them accordingly. Oh, and that massive router overhaul enabled me
to do all this.

Also, slip in a few drive-by fixes to the mocks so they're a little
easier to work with and can accept more URLs. This was required for a
few of the tests.

* Update changelog + numbers, add forgotten bundle option

* Add PR numbers to changelog [skip ci]

* Allow continuing to the next match by returning `false`.

* Update numbers again
2019-07-12 15:29:37 -04:00
Isiah Meadows
1f4b2cf49a
Deservicify core (#2458)
* De-servicify router (mostly)

Still uses the redraw service, but it no longer has an intermediate
service of its own.

Also, did a *lot* of test deduplication in this. About 30-40% of the
router service tests were already tested on the main router API instance
itself.

Bundle size decreased from 9560 to 9548 bytes min+gzip.

* Merge `m.mount` + `m.redraw`, update router

Simplifies the router and redraw mechanism, and makes it much easier to
keep predictable.

Bundle size down to 9433 bytes min+gzip, docs updated accordingly.

* Make `mithril/render` just return the `m.render` function directly.

* Deservicify `m.render`, revise `m.route`

- You now have to use `mithril/render/render` directly if you want an
  implicit redraw function. (This will likely be going away in v3.)
- Revise `m.route` to only `key` components

* Add `redraw` to `m.render`, deservicify requests

* Test error logging

* Update docs + changelog [skip ci]
2019-07-07 18:28:43 -04:00
spacejack
ea0ce7f762 Store normalized vnodes in the dom element. Add render tests. (#2266)
* Store normalized vnodes in the dom element. Add render tests.

* Add entry to change-log
2018-10-28 17:17:24 -04:00
Pierre-Yves Gérardy
1fb64c91e3 Take the namespace of the root node into account, fix other ns oversight #1872 2017-06-14 01:59:45 +02:00
Pierre-Yves Gerardy
40429c8377 Pass namespace when creating new elements while updating a keyed list, fix #1820 2017-05-30 14:17:46 +02:00
Isiah Meadows
1cc5fa5ba7 "use strict" and other linty fixes 2017-03-03 18:24:38 -05:00
Pierre-Yves Gerardy
a8e5189f0b Tests: factory => closure components 2017-02-19 02:14:15 +01:00
Pierre-Yves Gérardy
3f3af74dde Support classes and factories as components (#1339)
* Support classes and factories as components

* Tests for class and factory component support
2017-02-14 22:48:02 -05:00
Pierre-Yves Gérardy
75b20e86e8 test: Re-enable the test suite (#1616) 2017-02-11 14:04:27 -08:00
Leo
632677e00c fix update lifecycle in children of recycled 2017-02-10 10:09:18 -05:00
Leo
0d9a51fe37 fix lifecycle in unkeyed child of recycled keyed 2017-02-09 09:54:48 -05:00
Leo
dc42b60687 #1609 fix lifecycle hooks in children of recycled keyed vnode 2017-02-09 08:31:08 -05:00
Leo Horie
3c6e257a19 #1311 don't repeatedly throw the same error if oninit async-redraws and view throws 2016-11-02 14:56:17 -04:00
Pierre-Yves Gerardy
b8673f2ff5 Validate the DOM node passed to render 2016-09-09 15:20:26 +02:00
Pat Cavit
4b340ecd75 Clean up test for #1222 a bit (#1223)
Since @lhorie asked nicely.
2016-08-05 14:49:16 -07:00
Pat Cavit
c92e24b7e1 render clears non-mithril dom nodes 2016-08-05 14:15:25 -07:00