function cancelEvent(event) {
event.preventDefault();
}
// Paste into input and textarea
for (let fieldid of ["input", "textarea"]) {
const field = document.getElementById(fieldid);
field.focus();
field.addEventListener("paste", cancelEvent);
doKey(field, false);
is(
field.value, "",
`Nothing should be pasted into <${field.tagName.toLowerCase()}> when paste event is canceled (shift key is not pressed)`
);
doKey(field, true);
is(
field.value, "",
`Nothing should be pasted into <${field.tagName.toLowerCase()}> when paste event is canceled (shift key is pressed)`
);
field.removeEventListener("paste", cancelEvent);
doKey(field, false);
is(field.value, expectedText, "paste into " + fieldid);
(function test_pasteWithFormatIntoEditableArea() {
selection.selectAllChildren(editable);
selection.collapseToStart();
editable.addEventListener("paste", cancelEvent);
doKey(editable, false);
is(
editable.innerHTML, "", "test_pasteWithFormatIntoEditableArea: Nothing should be pasted when paste event is canceled"
);
editable.removeEventListener("paste", cancelEvent);
doKey(editable, false);
is(
editable.innerHTML,
expectedHTML, "test_pasteWithFormatIntoEditableArea: Pasting with format should work as expected"
);
editable.innerHTML = innerHTMLBeforeTest;
}());
(function test_pasteWithoutFormatIntoEditableArea() {
selection.selectAllChildren(editable);
selection.collapseToEnd();
doKey(editable, true);
is(
editable.innerHTML,
expectedText, "test_pasteWithoutFormatIntoEditableArea: Pasting without format should work as expected",
);
editable.innerHTML = innerHTMLBeforeTest;
})();
(function test_pasteWithFormatIntoEditableAreaWhenHTMLEditorIsInReadonlyMode() {
getEditor().flags |= SpecialPowers.Ci.nsIEditor.eEditorReadonlyMask;
selection.selectAllChildren(editable);
selection.collapseToStart();
let beforeInputEvents = [];
function onBeforeInput(aEvent) {
beforeInputEvents.push(aEvent);
}
editable.addEventListener("beforeinput", onBeforeInput);
doKey(editable, false);
const description = "test_pasteWithFormatIntoEditableAreaWhenHTMLEditorIsInReadonlyMode";
is(
editable.innerHTML,
innerHTMLBeforeTest,
`${description}: Pasting with format should not work`
);
is(
beforeInputEvents.length,
0,
`${description}: Pasting with format should not cause "beforeinput", but fired "${
beforeInputEvents[0]?.inputType
}"`
);
editable.removeEventListener("beforeinput", onBeforeInput);
editable.innerHTML = innerHTMLBeforeTest;
getEditor().flags &= ~SpecialPowers.Ci.nsIEditor.eEditorReadonlyMask;
})();
(function test_pasteWithoutFormatIntoEditableAreaWhenHTMLEditorIsInReadonlyMode() {
getEditor().flags |= SpecialPowers.Ci.nsIEditor.eEditorReadonlyMask;
selection.selectAllChildren(editable);
selection.collapseToStart();
let beforeInputEvents = [];
function onBeforeInput(aEvent) {
beforeInputEvents.push(aEvent);
}
editable.addEventListener("beforeinput", onBeforeInput);
doKey(editable, false);
const description = "test_pasteWithoutFormatIntoEditableAreaWhenHTMLEditorIsInReadonlyMode";
is(
editable.innerHTML,
innerHTMLBeforeTest,
`${description}: Pasting with format should not work`
);
is(
beforeInputEvents.length,
0,
`${description}: Pasting with format should not cause "beforeinput", but fired "${
beforeInputEvents[0]?.inputType
}"`
);
editable.removeEventListener("beforeinput", onBeforeInput);
editable.innerHTML = innerHTMLBeforeTest;
getEditor().flags &= ~SpecialPowers.Ci.nsIEditor.eEditorReadonlyMask;
})();
let noneditable = document.getElementById("noneditable");
selection.selectAllChildren(noneditable);
selection.collapseToStart();
// Normal paste into non-editable area
let pastePromise = getPasteResult();
doKey(noneditable, false);
is(noneditable.innerHTML, "Text", "paste into non-editable");
let result = await pastePromise;
is(result.text, expectedText, "paste text into non-editable");
is(result.html,
htmlPrefix + expectedHTML + htmlPostfix, "paste html into non-editable");
// Unformatted paste into non-editable area
pastePromise = getPasteResult();
doKey(noneditable, true);
is(noneditable.innerHTML, "Text", "paste unformatted into non-editable");
result = await pastePromise;
is(result.text, expectedText, "paste unformatted text into non-editable");
// Formatted HTML text should not exist when pasting unformatted.
is(result.html, "", "paste unformatted html into non-editable");
});
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.