| <!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| #editor { |
| direction: rtl; |
| border: 1px blue dashed; |
| } |
| </style> |
| </head> |
| |
| <body> |
| <div id="editor" contenteditable oninput=handleInputEvent(event) onbeforeinput=handleBeforeInputEvent(event)> |
| <div id="content">Hello world</div> |
| </div> |
| <input type="text" id="textfield" value="hi" dir="rtl" oninput=handleInputEvent(event) onbeforeinput=handleBeforeInputEvent(event)></input> |
| <div id="output"></div> |
| <script> |
| let write = s => output.innerHTML += `${s}<br>`; |
| (function() |
| { |
| window.shouldPreventDefault = true; |
| if (!window.eventSender || !window.internals || !window.testRunner) { |
| write("To test manually, try to change the text direction to ltr. This should be prevented."); |
| return; |
| } |
| |
| internals.settings.setInputEventsEnabled(true); |
| testRunner.dumpAsText(); |
| editor.focus(); |
| write("*** TESTING RICH TEXT ***"); |
| write(`Initial text direction: "${getComputedStyle(content).direction}"`); |
| |
| internals.setBaseWritingDirection("Ltr"); |
| write(`Text direction after setting to LTR while preventing default: "${getComputedStyle(content).direction}"`); |
| |
| window.shouldPreventDefault = false; |
| |
| internals.setBaseWritingDirection("Ltr"); |
| write(`Text direction after setting to LTR without preventing default: "${getComputedStyle(content).direction}"`); |
| |
| window.shouldPreventDefault = true; |
| textfield.focus(); |
| write("*** TESTING PLAIN TEXT ***"); |
| write(`Initial text direction: "${textfield.getAttribute("dir")}"`); |
| |
| internals.setBaseWritingDirection("Ltr"); |
| write(`Text direction after setting to LTR while preventing default: "${textfield.getAttribute("dir")}"`); |
| |
| window.shouldPreventDefault = false; |
| |
| internals.setBaseWritingDirection("Ltr"); |
| write(`Text direction after setting to LTR without preventing default: "${textfield.getAttribute("dir")}"`); |
| })(); |
| |
| function handleInputEvent(event) |
| { |
| write(`Fired input event of inputType '${event.inputType}' with data: '${event.data}'`); |
| } |
| |
| function handleBeforeInputEvent(event) |
| { |
| write(`Fired onbeforeinput event of inputType '${event.inputType}' with data: '${event.data}'`); |
| if (window.shouldPreventDefault) |
| event.preventDefault(); |
| } |
| </script> |
| </body> |
| </html> |