Commit graph

40 commits

Author SHA1 Message Date
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
39fa2b32c2
Fix #1881 + related ospec bug (#2492)
* Fix #1881 + related ospec bug

* Test duplicate resolves, update changelog
2019-07-26 18:19:40 -04:00
Isiah Meadows
234b1c9302 Update migration, fix various minor issues
- Lot of people couldn't migrate to v1 and plan to reevaluate when v2 is
  released.
- It's "npm" not "NPM". It doesn't stand for anything, and it never
  has - it was initially chosen simply because it was easy to type.
  It has a lot of unofficial backronyms with "Node Package Manager"
  being one of the most common ones, but it's never officially stood
  for anything as an acronym *or* initialism.
- Fixed a few errors in the change log, like non-breaking changes being
  included in the "Breaking Changes" section and an inaccuracy in the
  summary of a particular change.
- Fixed RawGit URLs to point to GitHack, which is a lighter proxy that
  offloads caching to Cloudflare instead of also implementing it itself.
  (It also just uses nginx for all the important server logic, so it
  scales better.)
- Add a few more v0.2 references as appropriate
2019-07-24 05:01:20 -04:00
Isiah Meadows
4cbcaf2936
Fix link + docs (#2476)
* Fix a copy/paste fail

Also, fix some incorrect tests.

* Clarify how routes are diffed, improve key + route resolver docs

- Add some missing links to route resolvers and single-child keyed
  fragments, clarify usage around them.
- Drive-by: remove a redundant sentence that itself was missing a
  period.

* Actually test for propagation and preventDefault

Previously, the mocks were both junk and inaccurate. No wonder my tests
were silently failing - they were wrong and not obviously wrong.
2019-07-16 16:03:24 -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
90bcff0fa7
Deduplicate m.route and m.redraw logic (#2453)
- Remove appropriate route change subcriptions when a root is removed
  via `m.mount(root, null)`.
- Don't pollute `onpopstate` and friends - use standard event listeners
  instead.
- Simplify and streamline subscriptions, in preparation of adding a
  `remove` parameter to `m.mount`.
- Change the redraw internals to redraw immediately, with ability to
  cancel via returning a sentinel.
- Change `"bleeding-edge"` for `m.version` in `next` to instead just be
  the latest `m.version`. (If you're using `next`, you should know what
  you're in for.)
- Update tests to be aware of these changes. (Some were failing for
  subtle reasons.)
- Drive-by: remove some uses of `string.charAt(n)` and use `string[n]`
  instead.
2019-07-05 18:52:06 -04:00
Isiah Meadows
4a641092dc
Officially drop IE9-10 support, pull out our hacks (#2296)
- I also fixed a bunch of related comments
- I had to polyfill `requestAnimationFrame` for Node
- Drive-by: run `eslint . --fix`
- Drive-by: update transpiling info in CONTRIBUTING.md
- Drive-by: we aren't the only ones going semicolon-free
2018-11-27 18:04:15 -05:00
Rasmus Porsager
7c299ab48c Allow css vars with uppercase characters (#2311)
* Allow css vars with uppercase characters

* Remove charAt

* Extract dash lowercase lambda

* Extract match uppercase regex

* Set key and value correctly in updateStyle

* Fix domMock style to work like the browser
2018-11-26 09:40:08 -05:00
Barney Carroll
4c5968a526 Fix #2192 (#2308)
* Fix #2192

* Fix mock style property definitions

* Re-instate camelCased style property key declaration support

* Fix removeProperty, eslint fix

* Stringify style keys: fix perf tests

* Fix weird uncaught mixed whitespace

* Fix weird uncaught mixed whitespace
2018-11-26 05:49:16 -05:00
Isiah Meadows
4d579c50b6
Revert "Fix #1771 and probably others (#2286)" (#2299)
4f68984f2f
2018-11-14 19:26:23 -05:00
Isiah Meadows
4f68984f2f
Fix #1771 and probably others (#2286)
This is *super* subtle, and IMHO Chrome did exactly the wrong thing
here.
2018-11-14 15:35:00 -05:00
Isiah Meadows
c703b03253
Unbreak accidental back-compat break with event optimization (#2222)
This was supposed to be purely additive. See here for more details:

https://github.com/MithrilJS/mithril.js/pull/1949#issuecomment-417824513
2018-09-18 10:14:21 -04:00
Pierre-Yves Gérardy
6283aa4a7d [render/render] Test for removing styles and assorted domMock changes 2018-06-01 21:27:02 +02:00
Pierre-Yves Gérardy
b39f4f683d [domMock] Better accuracy for namespaced elements 2018-06-01 21:27:02 +02:00
Pierre-Yves Gérardy
e3b240032a [domMock] don't call public methods from DOM API methods (it messes up spying) 2018-05-29 23:50:29 +02:00
Pierre-Yves Gérardy
9136585fe4 [DOM Mock] Fix insertBefore when the reference node follows the moving child in a nodeList 2018-04-23 13:52:03 +02:00
Pierre-Yves Gérardy
fdd34f9726 [mocks] Add some support for parsing SVG using the DOMParser API and innerHTML 2018-03-06 01:12:32 +01:00
Pierre-Yves Gérardy
12d3540d47 domMock: implement event propagation 2017-12-03 01:16:22 +01:00
Isiah Meadows
348bed0a7e Allow xlink:href to get removed, fix option.value in mock 2017-10-01 19:34:12 -04:00
Isiah Meadows
dbbdb0664a Reduce memory allocation/usage across multiple event handlers
- `handleEvent` is a very useful tool.
- Always use `addEventListener`/`removeEventListener`, since it's
  required for this optimization.
- Change log updated.
- Drive-by: make DOM mock work with both event listener types.
- Drive-by: eliminate possibility of `Object.prototype` interference.
2017-08-25 05:19:30 -04:00
Pierre-Yves Gérardy
894152440b Add tests for #1870 2017-06-12 18:26:45 +02:00
Pierre-Yves Gerardy
195263d226 [test-utils/domMock] restore Attr.nodeValue for backwards compatibility 2017-05-29 13:59:31 +02:00
Pierre-Yves Gerardy
58bc414635 tests for validating #1595 and #1804 2017-05-28 21:03:27 +02:00
Pierre-Yves Gerardy
e031fe49a1 [test-utils/domMock] improve attributes handling 2017-05-28 18:26:09 +02:00
Isiah Meadows
1cc5fa5ba7 "use strict" and other linty fixes 2017-03-03 18:24:38 -05:00
Leo Horie
ff7ce37476 allow dom level 1 events to be removed #1385 2016-11-04 12:33:36 -04:00
Leo Horie
40251c6c16 #1342 update m.route.link target if href changes 2016-10-04 12:19:55 -04:00
Leo Horie
d0a4993681 clean up 2016-10-03 10:56:44 -04:00
Leo Horie
b8ef290acd improved bundler, handle width/height atts 2016-09-23 10:31:33 -04:00
Pierre-Yves Gerardy
55a5d0a69f Remove an unused variable 2016-08-11 21:21:17 +02:00
Pierre-Yves Gerardy
bffe87e053 Fix the domMock cssText implementation 2016-08-11 17:53:01 +02:00
Pierre-Yves Gerardy
5fd2e99831 Fix the domMock and domMock tests for cssText support 2016-08-05 12:43:31 +02:00
impinball
b4fb21475c Add editorconfig, resolve differences
This includes newlines, tabs, among other things.
2016-06-18 03:22:12 -04:00
Leo Horie
693c87f5f1 fix svg class updates 2016-06-07 20:20:30 -04:00
Leo Horie
e7420e72e1 more tests 2016-05-24 23:16:43 -04:00
Pat Cavit
41b24b998a m.route tests should run against all prefixes
Also tests `router.link` now. Had to add a `preventDefault` function to
domMock events that doesn't do anything, that may need a more-complete
implementation someday?
2016-05-19 10:59:41 -07:00
Pat Cavit
960812308c Move public APIs into their own folder
And start writing actual tests for them
2016-05-19 10:59:41 -07:00
Leo Horie
d5371533a7 fix attribute syncing for input, select, textarea
optimize events
2016-05-10 01:55:48 -04:00
Leo Horie
b17bd250b7 support all events 2016-05-06 10:11:31 -04:00
Leo Horie
559369016d initial commit (work in progress) 2016-04-20 20:02:37 -04:00