| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| <script> |
| description("This tests enabling of execCommand commands based on whether the selection is a caret or range or in editable content."); |
| |
| var nonEditableParagraph = document.createElement("p"); |
| nonEditableParagraph.appendChild(document.createTextNode("x")); |
| document.body.appendChild(nonEditableParagraph); |
| |
| var editableParagraph = document.createElement("p"); |
| editableParagraph.appendChild(document.createTextNode("x")); |
| editableParagraph.setAttribute("contentEditable", "true"); |
| document.body.appendChild(editableParagraph); |
| |
| var editablePlainTextParagraph = document.createElement("p"); |
| editablePlainTextParagraph.appendChild(document.createTextNode("x")); |
| editablePlainTextParagraph.setAttribute("contentEditable", "plaintext-only"); |
| document.body.appendChild(editablePlainTextParagraph); |
| |
| function enabled(command, element, selectionStart, selectionEnd) |
| { |
| var selection = document.getSelection(); |
| selection.removeAllRanges(); |
| if (element) { |
| var range = document.createRange(); |
| range.setStart(element.firstChild, selectionStart); |
| range.setEnd(element.firstChild, selectionEnd); |
| selection.addRange(range); |
| } |
| var result = document.queryCommandEnabled(command) |
| selection.removeAllRanges(); |
| return result; |
| } |
| |
| function whenEnabled(command) |
| { |
| var enabledWithNoSelection = enabled(command); |
| var enabledWithCaret = enabled(command, editableParagraph, 0, 0); |
| var enabledWithEditableRange = enabled(command, editableParagraph, 0, 1); |
| var enabledWithPlainTextCaret = enabled(command, editablePlainTextParagraph, 0, 0); |
| var enabledWithPlainTextEditableRange = enabled(command, editablePlainTextParagraph, 0, 1); |
| var enabledWithPoint = enabled(command, nonEditableParagraph, 0, 0); |
| var enabledWithNonEditableRange = enabled(command, nonEditableParagraph, 0, 1); |
| |
| var summaryInteger = enabledWithNoSelection |
| | (enabledWithCaret << 1) |
| | (enabledWithEditableRange << 2) |
| | (enabledWithPlainTextCaret << 3) |
| | (enabledWithPlainTextEditableRange << 4) |
| | (enabledWithPoint << 5) |
| | (enabledWithNonEditableRange << 6); |
| |
| if (summaryInteger === 0x7F) |
| return "always"; |
| |
| if (summaryInteger === 0x54) |
| return "range"; |
| |
| if (summaryInteger === 0x1E) |
| return "editable"; |
| if (summaryInteger === 0x0A) |
| return "caret"; |
| if (summaryInteger === 0x14) |
| return "editable range"; |
| |
| if (summaryInteger === 0x06) |
| return "richly editable"; |
| if (summaryInteger === 0x02) |
| return "richly editable caret"; |
| if (summaryInteger === 0x04) |
| return "richly editable range"; |
| |
| if (summaryInteger === 0x5E) |
| return "visible"; |
| |
| return summaryInteger; |
| } |
| |
| shouldBe("whenEnabled('FindString')", "'always'"); |
| shouldBe("whenEnabled('Print')", "'always'"); |
| shouldBe("whenEnabled('SelectAll')", "'always'"); |
| |
| shouldBe("whenEnabled('Transpose')", "'caret'"); |
| |
| shouldBe("whenEnabled('Copy')", "'range'"); |
| |
| shouldBe("whenEnabled('Cut')", "'editable range'"); |
| shouldBe("whenEnabled('RemoveFormat')", "'editable range'"); |
| |
| shouldBe("whenEnabled('Delete')", "'editable'"); |
| shouldBe("whenEnabled('FontName')", "'editable'"); |
| shouldBe("whenEnabled('FontSize')", "'editable'"); |
| shouldBe("whenEnabled('FontSizeDelta')", "'editable'"); |
| shouldBe("whenEnabled('ForwardDelete')", "'editable'"); |
| shouldBe("whenEnabled('InsertHTML')", "'editable'"); |
| shouldBe("whenEnabled('InsertParagraph')", "'editable'"); |
| shouldBe("whenEnabled('InsertText')", "'editable'"); |
| |
| shouldBe("whenEnabled('BackColor')", "'richly editable'"); |
| shouldBe("whenEnabled('Bold')", "'richly editable'"); |
| shouldBe("whenEnabled('CreateLink')", "'richly editable'"); |
| shouldBe("whenEnabled('ForeColor')", "'richly editable'"); |
| shouldBe("whenEnabled('FormatBlock')", "'richly editable'"); |
| shouldBe("whenEnabled('HiliteColor')", "'richly editable'"); |
| shouldBe("whenEnabled('Indent')", "'richly editable'"); |
| shouldBe("whenEnabled('InsertHorizontalRule')", "'richly editable'"); |
| shouldBe("whenEnabled('InsertImage')", "'richly editable'"); |
| shouldBe("whenEnabled('InsertNewlineInQuotedContent')", "'richly editable'"); |
| shouldBe("whenEnabled('InsertOrderedList')", "'richly editable'"); |
| shouldBe("whenEnabled('InsertUnorderedList')", "'richly editable'"); |
| shouldBe("whenEnabled('Italic')", "'richly editable'"); |
| shouldBe("whenEnabled('JustifyCenter')", "'richly editable'"); |
| shouldBe("whenEnabled('JustifyFull')", "'richly editable'"); |
| shouldBe("whenEnabled('JustifyLeft')", "'richly editable'"); |
| shouldBe("whenEnabled('JustifyNone')", "'richly editable'"); |
| shouldBe("whenEnabled('JustifyRight')", "'richly editable'"); |
| shouldBe("whenEnabled('Outdent')", "'richly editable'"); |
| shouldBe("whenEnabled('Strikethrough')", "'richly editable'"); |
| shouldBe("whenEnabled('Subscript')", "'richly editable'"); |
| shouldBe("whenEnabled('Superscript')", "'richly editable'"); |
| shouldBe("whenEnabled('Underline')", "'richly editable'"); |
| |
| shouldBe("whenEnabled('Paste')", "'editable'"); |
| shouldBe("whenEnabled('PasteAndMatchStyle')", "'editable'"); |
| |
| shouldBe("whenEnabled('Unlink')", "'richly editable range'"); |
| |
| shouldBe("whenEnabled('Unselect')", "'visible'"); |
| |
| document.body.removeChild(nonEditableParagraph); |
| document.body.removeChild(editableParagraph); |
| document.body.removeChild(editablePlainTextParagraph); |
| |
| var successfullyParsed = true; |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |