|
| 1 | +// basic implementation of a preserve-me attr |
| 2 | +const preserveMeCallbacks = { |
| 3 | + beforeNodeRemoved(node) { |
| 4 | + if (node.dataset?.preserveMe) return false; |
| 5 | + }, |
| 6 | + beforeNodeMorphed(oldNode, newContent) { |
| 7 | + if (oldNode.dataset?.preserveMe) return false; |
| 8 | + }, |
| 9 | +}; |
| 10 | + |
1 | 11 | describe("lifecycle hooks", function () { |
2 | 12 | beforeEach(function () { |
3 | 13 | clearWorkArea(); |
@@ -121,14 +131,40 @@ describe("lifecycle hooks", function () { |
121 | 131 | initial.outerHTML.should.equal("<ul><li>A</li><li>B</li></ul>"); |
122 | 132 | }); |
123 | 133 |
|
124 | | - it("returning false to beforeNodeRemoved prevents removing the node with removed elemnt next to relocated id element", function () { |
125 | | - let initial = make(`<div><div><a id="a">A</a></div><div><b id="b">B</b><input type="checkbox" data-preserve-me="true" id="preserve-me"></div></div>`); |
126 | | - Idiomorph.morph(initial, `<div><div><a id="a">A</a><b id="b">B</b></div></div>`, { |
127 | | - callbacks: { |
128 | | - beforeNodeRemoved: (node) => false, |
129 | | - }, |
| 134 | + it.only("returning false to beforeNodeRemoved prevents removing the node with removed elemnt next to relocated id element", function () { |
| 135 | + getWorkArea().innerHTML = ` |
| 136 | + <div> |
| 137 | + <div> |
| 138 | + <a id="a">A</a> |
| 139 | + </div> |
| 140 | + <div> |
| 141 | + <b id="b">B</b> |
| 142 | + <input type="checkbox" data-preserve-me="true" id="preserve-me"> |
| 143 | + </div> |
| 144 | + </div> |
| 145 | + `; |
| 146 | + Idiomorph.morph(getWorkArea(), ` |
| 147 | + <div> |
| 148 | + <div> |
| 149 | + <a id="a">A</a> |
| 150 | + <b id="b">B</b> |
| 151 | + </div> |
| 152 | + </div> |
| 153 | + `, { |
| 154 | + morphStyle: "innerHTML", |
| 155 | + callbacks: preserveMeCallbacks, |
130 | 156 | }); |
131 | | - initial.outerHTML.should.equal(`<div><div><a id="a">A</a><b id="b">B</b></div><div><input type="checkbox" data-preserve-me="true" id="preserve-me"></div></div>`); |
| 157 | + getWorkArea().innerHTML.should.equal(` |
| 158 | + <div> |
| 159 | + <div> |
| 160 | + <a id="a">A</a> |
| 161 | + <b id="b">B</b> |
| 162 | + </div> |
| 163 | + <div> |
| 164 | + <input type="checkbox" data-preserve-me="true" id="preserve-me"> |
| 165 | + </div> |
| 166 | + </div> |
| 167 | + `); |
132 | 168 | }); |
133 | 169 |
|
134 | 170 | it("returning false to beforeNodeRemoved prevents removing the node with different tag types", function () { |
@@ -325,15 +361,7 @@ describe("lifecycle hooks", function () { |
325 | 361 |
|
326 | 362 | Idiomorph.morph(getWorkArea(), finalSrc, { |
327 | 363 | morphStyle: "innerHTML", |
328 | | - callbacks: { |
329 | | - // basic implementation of a preserve-me attr |
330 | | - beforeNodePantried(node) { |
331 | | - if (node.parentNode?.dataset?.preserveMe) return false; |
332 | | - }, |
333 | | - beforeNodeMorphed(oldNode, newContent) { |
334 | | - if (oldNode.dataset?.preserveMe) return false; |
335 | | - }, |
336 | | - }, |
| 364 | + callbacks: preserveMeCallbacks, |
337 | 365 | }); |
338 | 366 |
|
339 | 367 | getWorkArea().innerHTML.should.equal(` |
|
0 commit comments