Add Draftail init fallback for StreamField/InlinePanel templated fields. Fix #4295

This commit is contained in:
Thibaud Colas 2018-02-22 23:26:13 +02:00 committed by Matt Westcott
parent f6bcfbf31e
commit c62c58c492
2 changed files with 15 additions and 1 deletions

View file

@ -50,7 +50,9 @@ export const wrapWagtailIcon = type => {
const initEditor = (selector, options, currentScript) => {
// document.currentScript is not available in IE11. Use a fallback instead.
const context = currentScript ? currentScript.parentNode : document.body;
const field = context.querySelector(selector);
// If the field is not in the current context, look for it in the whole body.
// Fallback for sequence.js jQuery eval-ed scripts running in document.head.
const field = context.querySelector(selector) || document.body.querySelector(selector);
const editorWrapper = document.createElement('div');
editorWrapper.className = 'Draftail-Editor__wrapper';

View file

@ -88,6 +88,18 @@ describe('Draftail', () => {
expect(document.querySelector('[name="last"]').draftailEditor).toBeDefined();
});
it('uses fallback document.body when currentScript context is wrong', () => {
window.draftail = draftail;
document.body.innerHTML = `
<input id="description" value="null" />
<div>
<script>window.draftail.initEditor('#description', {}, document.currentScript);</script>
</div>
`;
expect(document.querySelector('#description').draftailEditor).toBeDefined();
});
});
});