* Fix serialization and mutation of <textarea> elements taking account the duality that the value can be set in either the child node, or in the value _parameter_ (not attribute)
* Backwards compatibility: Bug fix and regression test for #112
- this is to fix up 'historical' recordings, as duplicate textarea content should no longer be being created at record time
- new test shows what the snapshot generated by previous versions of rrweb used to look like, hence 'bad'
- original 0efe23f04a fix either didn't work or no longer works due to childNodes being appended subsequent to this part of the code
- during review, we also verified that the `_cssText` case should still be handled okay, as there's currently no scenario where csstext is present with css child nodes of a <style>
* Masking: Fix that textarea values were being missed by the masking system if the value was recorded as a child node
- I didn't notice that form.html was used in other tests, so lucky that I noticed that those tests also should have the 'pre value' masked out
* Simplify by always storing the textarea value in the `.value` attribute (from it's DOM property) and not as a childNode. It should still be rebuilt as a childNode rather than a property
---------
Authored-by: eoghanmurray <eoghan@getthere.ie>
* feat: Ignore `autoplay` attribute on video/auto elements
This element leads to weird issues when replaying, so it's better to strip this out.
* add changeset
* fix check
fix typo
* Apply formatting changes
---------
Co-authored-by: mydea <mydea@users.noreply.github.com>
* fix: Exclude `modulepreload` as well
We were only excluding `<link rel="preload" as="script" />` but we should include `rel="modulepreload"` as well
* Apply formatting changes
* Upgrade puppeteer to 17.1.3 in rrweb-snapshot
* Apply formatting changes
* Add ?
* Make tests less flakey
* Make attribute-setting more explicit
* Make test less flakey
* Make test less flakey
* Upgrade puppeteer for rrdom
* Use wait for request animation frame instead of timeout
* Force append to happen in second event
* Wait till iframe was loaded (now 100ms)
* Round the currentTime to 1 decimal place
* inline stylesheets when loaded
* set empty link elements to loaded by default
* Clean up stylesheet manager
* Remove attribute mutation code
* Update packages/rrweb/test/record.test.ts
* Update packages/rrweb/test/record.test.ts
* Update packages/rrweb/test/record.test.ts
* Update packages/rrweb/scripts/repl.js
* Update packages/rrweb/test/record.test.ts
* Update packages/rrweb/src/record/index.ts
* Add todo
* Move require out of time sensitive assert
* Add waitForRAF, its more reliable than waitForTimeout
* Remove flaky tests
* Add recording stylesheets in iframes
* Remove variability from flaky test
* Make test more robust
* Fix naming
* Add test cases for inlineImages
* Add test cases for inlineImages
* Record iframe mutations cross page
* Test: should record images inside iframe with blob url after iframe was reloaded
* Handle negative ids in rrdom correctly
When iframes get inserted they create untracked elements, both on the dom and rrdom side.
Because they are untracked they generate negative numbers when fetching the id from mirror.
This creates a problem when comparing and fetching ids across mirrors.
This commit tries to get away from using negative ids as much as possible in rrdom's comparisons
* Update packages/rrdom/src/diff.ts
Co-authored-by: Yun Feng <yun.feng@anu.edu.au>
* Start unserialized nodes at -2
This way we don't accidentally think of them as mirror misses
* Set unserialized id starting number at -2
* Remove duplication
Co-authored-by: Yun Feng <yun.feng@anu.edu.au>
* Implemented image restore from rr_dataURL
* Implement saving images in the snapshot
* Fixed image saving, added a test
* Rename data-src to data-rrweb-src
* Updated the guide
* Rename recordImages to inlineImages and try catch
* Hygiene: clean up the xhtml namespace attribute; this is an artefact of the `serializeToString` method which we are using (I think) to be consistent with whitespace and to clean up invalid attributes. I'm removing as was confused as am adding tests related to doctypes
* Record when a document is in `compatMode` and trigger this mode on the iframe upon replay
https://developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
the included DOCTYPE was picked up from https://stackoverflow.com/questions/18976213/ - there may be better ways of triggering compatMode
* Don't write an extra DOCTYPE if there's one already present in the snapshot. Rely instead on whatever doctype is there to trigger the BackCompat mode
* Modify to write the correct doctype if we can sniff xhtml - don't have any evidence that this will make a difference
* Dev convenience: Ignore files generated by editors
* Typo fix
* Was getting a 2000ms timeout on the 'before' hook I believe
* Change certain tests to go directly to their localhost page instead of loading the html content programmatically in order to avoid triggering an incorrect BackCompat mode (incorrect in that the html content has a correct doctype)
* Add test based on motivating site that had images lined up in a square which were all different sizes; very old style percentage width/height attributes were doing the right thing in quirksmode, which is what we are testing for here
* Fixup rrweb test html to include a valid doctype and avoid BackCompat to ensure we're not accidentally testing against quirks modes. I didn't find an elegant way of avoiding the `BackCompat` when adding a minimal iframe, so some BackCompat has slipped in here, I don't think there's much harm