Commit graph

161 commits

Author SHA1 Message Date
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
Isiah Meadows
88b17c1c60
Avoid triggering Object.prototype.__proto__ with keys (#2251)
This way, the diff algorithm works with untrusted keys.
2018-10-15 15:09:55 -04:00
Isiah Meadows
62eb081a13 Simplify element removal to save a few bytes
It's also a minor peephole optimization, but I saw bigger size wins, so
I'm citing that.
2018-09-22 12:02:58 -04:00
Isiah Meadows
1ecc30a064 Fix custom elements attribute application, improve key checking
- Fix custom elements attribute application to acknowledge that not all
  custom elements operate purely based on attributes. (Plus, those
  blasted things are verbose as heck when you're working with them in
  raw form. It's also not that uncommon for functionality to be exposed
  via property and *not* attribute.)
- Don't memoize the normalized value when we 1. only use it once in each
  branch, and 2. only use it for a few special cases.
- Centralize the "has property key" code, so it's easier to tune and
  read. I also inlined a couple functions while I was at it since they
  were small and only used once.
- Actually test for how attributes are applied to raw DOM elements vs
  when we choose to use keys. When I first developed the patch, it
  silently worked, when I should've been breaking things.
2018-09-20 15:08:49 -04:00
Isiah Meadows
ad5118165c
Fix redundancy (#2213)
* Remove redundant empty fragment return

* Rebuild bundles

* Update changelog
2018-09-19 01:23:33 -04: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
Sebastian Sandqvist
571b60830b [render/render] Prevent activeElement.focus on SVGs, fix #1983 2018-06-11 22:04:34 +02:00
Pierre-Yves Gérardy
3f5cabc5c5 Chore: Normalize the way we use eslint-disable 2018-06-01 21:27:02 +02:00
Pierre-Yves Gérardy
cfa128a5cd [render/render] make updateAttrs smarter about null values 2018-06-01 21:27:02 +02:00
Pierre-Yves Gérardy
4921083898 [render/render] Fix xlink:href handling 2018-06-01 21:27:02 +02:00
Pierre-Yves Gerardy
5b51b682ee Improve attrs removal, fix #1804 2018-06-01 21:27:02 +02:00
Pierre-Yves Gerardy
dc15acd791 Improve attrs setting performance
before:

> mutate styles/properties x 7,999 ops/sec ±10.87% (46 runs sampled)

after:

> mutate styles/properties x 16,104 ops/sec ±4.36% (66 runs sampled)
2018-06-01 21:27:02 +02:00
Pierre-Yves Gerardy
4197cf0ae1 Enable the tests for #1804 2018-06-01 21:27:02 +02:00
Pierre-Yves Gérardy
285cb5382f [render] cleanup and comments 2018-05-29 23:50:29 +02:00
Pierre-Yves Gérardy
144ce68192 [render/render] get rid of vnode.skip 2018-05-29 23:50:29 +02:00
Pierre-Yves Gérardy
2cfc68359d [render/render] Introduce longest increasing subsequence-based node moves in keyed diff, fix #1791, fix #2026 2018-05-29 23:50:29 +02:00
Pierre-Yves Gérardy
44e165a357 [render/render] Misc comment fixes 2018-04-23 13:52:03 +02:00
Pierre-Yves Gérardy
f7a95d8c12 Cleanup, comments, and optimize getKeyMap 2018-04-23 13:52:03 +02:00
Pierre-Yves Gérardy
801bde219e [render/render] move keyed cached nodes when needed, fix diff semantics for cached nodes, fix #2132 2018-04-23 13:52:03 +02:00
Pierre-Yves Gérardy
9490950c30 [render/render] Simplify updateNodes, fix #2128 2018-04-23 13:52:03 +02:00
Pierre-Yves Gérardy
c6693aa361 Disentangle keyed and unkeyed diff 2018-04-23 13:52:03 +02:00
Pierre-Yves Gérardy
203df39c30 Remove the DOM nodes recycling pool (fix #1653, fix #2023) 2018-04-16 09:45:45 +02:00
Pierre-Yves Gérardy
d21ba5ee6a Document the reason for the possibleParents map 2018-03-06 02:13:15 +01:00
Pierre-Yves Gérardy
ad46a21a7d [render] add support for SVG in m.trust() strings 2018-03-06 01:12:32 +01:00
Fabiano Taioli
83884bdc90 element value is not cleared when value valor change to undefined 2018-02-09 00:47:59 +01:00
Pierre-Yves Gérardy
1782fa8b63 render: fix perf regression introduced by #1918 2017-12-08 21:37:08 +01:00
Pierre-Yves Gérardy
9f09ac069c Address #2021 review comments 2017-12-04 14:38:39 +01:00
Pierre-Yves Gérardy
3f37d3d7c0 #2021 change log and docs 2017-12-04 14:38:39 +01:00
Pierre-Yves Gérardy
02aab654f0 render: remove check that may hide bugs 2017-12-04 14:38:39 +01:00
Pierre-Yves Gérardy
9c835f4eac render/updateNodes: call toFragment on the new vnodes, solves issues with actual fragments (fix #1991 partim 2) 2017-12-04 14:38:39 +01:00
Pierre-Yves Gérardy
39ff8d7217 render: make removeNode aware that it is removing children from an object that's brought back from the pool 2017-12-04 14:38:39 +01:00
Pierre-Yves Gérardy
98c053e12b render/updateNodes: revamp unkeyed list detection, don't skip null nodes in unkeyed lists when old and vnodes don't have the same length
Fix #2003 partim 2
2017-12-04 14:38:39 +01:00
Pierre-Yves Gérardy
e839c9e80a render/updateNodes: Don't fetch the next sibling from the pool 2017-12-04 14:38:39 +01:00
Pierre-Yves Gérardy
eaa9f589af render/updateNodes: recycling, clarify terminology, fix logic
fix #2003 partim 1
fix #1991 partim 1
2017-12-04 14:38:39 +01:00
Pierre-Yves Gérardy
8950760e85 render: extract pool addtition logic, don't run onremove on nodes that move from pool to pool (fix #1990) 2017-12-04 14:38:39 +01:00
robinchew
db2a12dec9 Trying to fix #1916 (#1918)
* Trying to fix #1916

* Remove test for rendering select options. Add back after resolving issue #1978.

* Add #1916 fix to change log.

* Revert "Remove test for rendering select options. Add back after resolving issue #1978."

This reverts commit d4c1be7c2319adf744f78ca787485f52be869208.

* Comment on why failing test for #1916 is commented out.
2017-10-31 20:37:51 +01:00
valtron
622e009811 recycling => shouldRecycle, Fix #1992 (#1993)
* Fix #1992

* doc in changelog

* add test for #1992
2017-10-16 08:38:44 +02:00
Mateusz Jaworski
8b56c70911 fix: Allow for changing focus in lifecycle hooks (#1988) 2017-10-13 22:31:03 -07:00
Isiah Meadows
ae27c0ff18 Merge pull request #1977 from isiahmeadows/remove-legacy-state
Remove support for `vnode.state = ...`
2017-10-04 18:00:16 -04:00
Isiah Meadows
19d2ba316c Remove support for vnode.state = ...
- Remove docs for it
- Remove tests for it
- Add runtime check for unexpected reassignment, since we can't freeze
  the property (we internally have to be able to modify it)
2017-10-02 19:57:48 -04: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
a1a7038e55 Rework event diffing for better optimizability
Re-ordered the type checks so that I can avoid polymorphic property
lookups in event updates. (It improved the common case of no change by
a little over ~40%.)
2017-09-01 17:06:19 -04:00
Isiah Meadows
5209071011 Merge next into optimize-events 2017-08-31 05:43:39 -04:00
Jackson Nowotny
5303e70fde fixing merge conflicts 2017-08-29 10:30:45 -05:00
Jackson Nowotny
aaa448ac4e adding comment specifying bug 2017-08-29 10:28:00 -05:00
Jackson Nowotny
849e862413 Fixing IE bug causing active element to be null causing render function to throw error 2017-08-29 10:27:58 -05:00
Isiah Meadows
2c92d84058 Add support for object event handlers (using handleEvent)
- `handleEvent` is checked on dispatch, like in the DOM.
- Had to reorder attribute key checking so `undefined` events still got
  removed.
- Drive-by: Optimize the initial attribute key checking a little.
- Drive-by: Fix changelog v2.0.0 link in TOC.
2017-08-25 06:06:46 -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
spacejack
ae0b791530 Eleminate now-redundant if block. Add change-log notes. 2017-08-15 15:53:23 -04:00
spacejack
1e56f7763e More accurate style object diffs 2017-08-13 18:32:32 -04:00