SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(() => {
function isTextEditor(aElement) {
return aElement.tagName.toLowerCase() == "input" ||
aElement.tagName.toLowerCase() == "textarea";
}
function getEditor(aElement) {
if (isTextEditor(aElement)) {
return SpecialPowers.wrap(aElement).editor;
}
return SpecialPowers.wrap(window).docShell.editingSession?.getEditorForWindow(window);
}
function setValue(aElement, aValue) {
if (isTextEditor(aElement)) {
aElement.value = aValue;
return;
}
aElement.innerHTML = aValue;
}
function getValue(aElement) {
if (isTextEditor(aElement)) {
return aElement.value;
}
return aElement.innerHTML.replace(/<br>/g, "");
}
for (const selector of ["input", "textarea", "div[contenteditable]"]) {
const editableElement = document.querySelector(selector);
editableElement.focus();
const editor = getEditor(editableElement);
setValue(editableElement, "");
is(
editor.canUndo,
false,
`Editor for ${selector} shouldn't have undo transaction at start`
);
is(
editor.canRedo,
false,
`Editor for ${selector} shouldn't have redo transaction at start`
);
synthesizeKey("b");
is(
getValue(editableElement), "b",
`Editor for ${selector} should've handled inserting "b"`
);
is(
editor.canUndo,
true,
`Editor for ${selector} should have undo transaction after inserting "b"`
);
is(
editor.canRedo,
false,
`Editor for ${selector} shouldn't have redo transaction after inserting "b"`
);
synthesizeKey("KEY_ArrowLeft");
synthesizeKey("a");
is(
getValue(editableElement), "ab",
`Editor for ${selector} should've handled inserting "a" before "b"`
);
is(
editor.canUndo,
true,
`Editor for ${selector} should have undo transaction after inserting text again`
);
is(
editor.canRedo,
false,
`Editor for ${selector} should have redo transaction after inserting text again`
);
editor.undoAll();
is(
getValue(editableElement), "",
`Editor for ${selector} should've undone everything`
);
is(
editor.canUndo,
false,
`Editor for ${selector} shouldn't have undo transactions after undoAll() called`
);
is(
editor.canRedo,
true,
`Editor for ${selector} should have redo transaction after undoAll() called`
);
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.