diff --git a/e2e/automated.test.js b/e2e/automated.test.js index 92c65a8564..4645f5cfae 100644 --- a/e2e/automated.test.js +++ b/e2e/automated.test.js @@ -69,4 +69,19 @@ describe('End to End tests', () => { }); }); }); + + describe('expanded blob', () => { + it('should resolve after appending new blobs', async () => { + const url = + 'https://github.com/OctoLinker/OctoLinker/pull/451/files#diff-b9cfc7f2cdf78a7f4b91a753d10865a2'; + const selector = '[data-line-number="45"] + td .octolinker-link'; + const expandSelector = '[data-right-range="44-55"]'; + + await page.goto(url); + + await page.click(expandSelector); + + await page.waitForSelector(selector); + }); + }); }); diff --git a/packages/core/octo-linker.js b/packages/core/octo-linker.js index 0d7b27e515..54939bdf45 100644 --- a/packages/core/octo-linker.js +++ b/packages/core/octo-linker.js @@ -65,6 +65,16 @@ async function run(self) { clickHandler(matches); } +function observeExpand(self) { + const observer = new MutationObserver(() => { + run(self); + }); + + for (const el of document.querySelectorAll('.diff-table tbody')) { + observer.observe(el, { childList: true }); + } +} + export default class OctoLinkerCore { constructor(options) { initialize(this, options); @@ -72,5 +82,6 @@ export default class OctoLinkerCore { init() { injection(run.bind(null, this)); + observeExpand(this); } }