* Preserve original quotes when rewriting CSS url() paths - important for inline SVG files which often have spaces
* Found an example in the wild with the 'charset=' part left off. This is supported by https://css-tricks.com/lodge/svg/09-svg-data-uris/ ... not sure why we aren't just testing for the 'data:' prefix here?
* Not sure why this is now coming back with a double quote after recent changes here; it's supposed to preserve the single quote from style.css??
* Add a `slimDOM` option to strip out unnecessary parts of the DOM in terms of replay
- <script> tags in the <head> take up unnecessary storage space and are often injected semi randomly to become a source of unnecessary variation between recordings of the same thing
- comment tags can be stripped out without affecting display
- future: this option could also turn on more aggressive stripping, e.g. elements that are hidden by CSS (assuming we can handle them becoming visible after mutation events)
* Mark nodes ignored due to slimDOM option, so that they can also be ignored by the mutation observer in rrweb
* Introducing the `ignored` attribute violates the `serializedNodeWithId` type
* slimDOM: Strip out whitespace nodes from <head> element as they have no effect but take up space
- these would otherwise have to be merged after <script> elements are removed; for statcounter usecase, removing
<script> elements is no good if there is still a trace of their presence due to the white space (and hence a variant <head> node is still produced)
- I explored a more radical stripping of all white space nodes, but there is a problem if parent node is <pre> or otherwise rendered with `white-space: pre` and similar.
detecting applied styles with getComputedStyle would be very expensive (I haven't measured it though)
* Export IGNORED_NODE as a constant instead of relying on the hard-to-grok `-2`
* Remove <link rel=preload as=script> which are similarly as useless as <script> tags
* Make slimDOM configurable with the expecations that `slimDOMOptions: true` will only enable non-destructive options (so not all options may be turned on)
* Expand slimDOM to add options to remove more elements from the <head> that should not be necessary in the replayer context
- was making this change for <wix-image> on Wix websites, but discovered after that this has already been done in e4593ff76d
- have tested document.createElement('wix-image') and document.createElement('foo_bar'), but can't find a canonical source for what is allowed in tag names.
- this restriction was originally introduced in #150 to prevent document.createElement('alt=""') i.e. a very malformed tag name
* added src set as a parsed attribute
* added tests
* changed to /a
* added multiple attribute handling
* added better comment
* made snapshot ignore invalid input as if it is invalid input in the original DOM, it should stay invalid in the recreated DOM
* added extra absolute test case
* code style
* addressed comments
* reuse serialized nodes ids
With this patch, each DOM node keeps its id during its existence. This
allows to apply RRWeb events to previous snapshots if needed.
`resetId` has been removed because it loses its meaning: calling it
would not reset the existing nodes ids anymore, only the new ones.
Since we don't reset the id anymore, we may exhaust the available ids
quicker, but Number.MAX_SAFE_INTEGER (2 ** 53 - 1) is pretty large, so I
doubt this'll cause any problem.
* improv TS typing
The `nAsINode` variable was not very elegant. Simplify this by removing
the cast, and make the INode interface compatible with Node.
* update typings
Also move the addHoverClass implementation into the rebuild stage.
So if there is still some corner case we have not handled, it will
only affect the replayer part of rrweb.