diff --git a/app/assets/javascripts/updateContent.js b/app/assets/javascripts/updateContent.js index b607e77df..85cfa61e5 100644 --- a/app/assets/javascripts/updateContent.js +++ b/app/assets/javascripts/updateContent.js @@ -2,7 +2,6 @@ "use strict"; var queues = {}; - var dd = new global.diffDOM(); var defaultInterval = 2000; var interval = 0; @@ -11,10 +10,18 @@ 1000 )); - var getRenderer = $component => response => dd.apply( - $component.get(0), - dd.diff($component.get(0), $(response[$component.data('key')]).get(0)) - ); + var getRenderer = $component => { + var key = $component.data('key'); // use closure to retain key when component is replaced + return response => { + $component = $( + global.domdiff( + $component.parent().get(0), + [$component.get(0)], + [$(response[key]).get(0)] + )[0] + ); + }; + }; var getQueue = resource => ( queues[resource] = queues[resource] || [] diff --git a/gulpfile.js b/gulpfile.js index eb178018f..68964ea9d 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -146,7 +146,7 @@ const javascripts = () => { paths.npm + 'hogan.js/dist/hogan-3.0.2.js', paths.npm + 'jquery/dist/jquery.min.js', paths.npm + 'query-command-supported/dist/queryCommandSupported.min.js', - paths.npm + 'diff-dom/diffDOM.js', + paths.npm + 'domdiff/min.js', paths.npm + 'timeago/jquery.timeago.js', paths.npm + 'textarea-caret/index.js', paths.npm + 'cbor-js/cbor.js' diff --git a/package.json b/package.json index 8a935626a..93b86a45d 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@babel/preset-env": "7.4.2", "cbor-js": "0.1.0", "del": "5.1.0", - "diff-dom": "2.5.1", + "domdiff": "2.2.2", "govuk_frontend_toolkit": "8.1.0", "govuk-elements-sass": "3.1.2", "govuk-frontend": "2.13.0", diff --git a/tests/javascripts/updateContent.test.js b/tests/javascripts/updateContent.test.js index 2d5a36c66..48f77a60e 100644 --- a/tests/javascripts/updateContent.test.js +++ b/tests/javascripts/updateContent.test.js @@ -31,9 +31,11 @@ beforeAll(() => { $.ajax.mockImplementation(() => jqueryAJAXReturnObj); - // because we're running in node, diffDOM executes as a module - // in the normal browser environment it will attach to window so we replicate that here - window.diffDOM = require('../../node_modules/diff-dom/diffDOM.js'); + // because we're running in node, we can't execute the normal domdiff code like a browser because + // its variables (actually only one: domdiff) stay local to it + // in the normal browser environment it will attach to window so we replicate that here by using + // the CommonJS module version and assigning it to window + window.domdiff = require('domdiff/cjs').default; require('../../app/assets/javascripts/updateContent.js'); });