| <!DOCTYPE html> | |
| <html> | |
| <body> | |
| <div id="test" contenteditable></div> | |
| <dl> | |
| <dt>Removed</dt> | |
| <dd id="removed"></dd> | |
| <dt>Preserved</dt> | |
| <dd id="preserved"></dd> | |
| <dt>Exceptions</dt> | |
| <dd id="exceptions"></dd> | |
| </dl> | |
| <script type="text/javascript"> | |
| if (window.testRunner) | |
| testRunner.dumpAsText(); | |
| var elements = [ "noscript", "a", "abbr", "acronym", "address", "applet", "area", "article", "aside", "audio", | |
| "b", "base", "basefont", "bdo", "bgsound", "big", "blockquote", "body", "br", "button", | |
| "canvas", ["table", "caption"], "center", "cite", "code", ["table", "col"], ["table", "colgroup"], "command", | |
| "datagrid", "datalist", "dcell", "dcol", "dd", "del", "details", "dfn", "dir", "div", "dl", "drow", "dt", | |
| "em", "embed", "fieldset", "figcaption", "figure", "font", "footer", "form", "frame", "frameset", | |
| "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", | |
| "i", "iframe", "image", "img", "input", "ins", "isindex", "kbd", "keygen", "label", "layer", "legend", ["ul", "li"], "link", "listing", | |
| "map", "mark", "marquee", "menu", "meta", "meter", "nav", "nobr", "noembed", "noframes", "nolayer", "noscript", | |
| "object", "ol", "optgroup", "option", "p", "param", "plaintext", "pre", "progress", "q", "rp", "rt", "ruby", | |
| "s", "samp", "script", "section", "select", "small", "source", "span", "strike", "strong", "style", "sub", "summary", "sup", | |
| "table", ["table", "tbody"], ["table", "td"], "textarea", ["table", "tfoot"], ["table", "th"], ["table", "thead"], | |
| "title", ["table", "tr"], "track", "tt", "u", "ul", "var", "video", "wbr", "xmp" ]; | |
| function addResult(container, name, annotation, description) | |
| { | |
| if (container.innerHTML.length && !annotation) | |
| container.innerHTML += ', '; | |
| container.innerHTML += name; | |
| if (annotation) | |
| container.appendChild(document.createTextNode(" (" + annotation + ")")); | |
| if (description) | |
| container.appendChild(document.createTextNode(description)); | |
| if (annotation || description) | |
| container.appendChild(document.createElement('br')); | |
| } | |
| function contains(node, descendant) | |
| { | |
| while (descendant && descendant != node && descendant.parentNode) | |
| descendant = descendant.parentNode; | |
| return descendant == node; | |
| } | |
| var test = document.getElementById('test'); | |
| for (var i = 0; i < elements.length; i++) { | |
| var elementName; | |
| var instance = null; | |
| var container = null; | |
| if (typeof elements[i] == 'string') { | |
| elementName = elements[i]; | |
| instance = document.createElement(elementName) | |
| container = instance; | |
| } else { | |
| var elementList = elements[i]; | |
| for (var j = 0; j < elementList.length; j++) { | |
| var node = document.createElement(elementList[j]); | |
| if (!container) | |
| container = node; | |
| if (instance) | |
| instance.appendChild(node); | |
| instance = node; | |
| } | |
| elementName = elementList[elementList.length - 1]; | |
| } | |
| var dummy_text = document.createTextNode('hello=1;'); | |
| if (instance === undefined) { | |
| addResult(document.getElementById('exceptions'), elementName, test.innerHTML); | |
| continue; | |
| } | |
| test.innerHTML = ""; | |
| try { | |
| instance.appendChild(dummy_text); // this may fail for non-container elements. | |
| } catch (error) { } | |
| test.appendChild(container); | |
| test.appendChild(document.createTextNode(' webkit=2;')); | |
| var ec = '' | |
| if (window.getSelection) { | |
| window.getSelection().selectAllChildren(test); | |
| } else { | |
| var range = document.body.createTextRange(); | |
| range.moveToElementText(test.firstChild); | |
| try { range.select(); } | |
| catch (error) { ec += ' failed to select'; } | |
| } | |
| document.execCommand('removeFormat', false, null); | |
| if (ec) { | |
| addResult(document.getElementById('exceptions'), elementName, test.innerHTML, ec); | |
| continue; | |
| } | |
| if (!test.firstChild || test.firstChild.nodeType == 3 /*TextNode*/) | |
| addResult(document.getElementById('removed'), elementName) | |
| else if (contains(test, instance) && (instance.innerHTML == "" || instance.innerHTML == "hello=1;" || elementName == "keygen")) | |
| addResult(document.getElementById('preserved'), elementName); | |
| else | |
| addResult(document.getElementById('exceptions'), elementName, test.innerHTML); | |
| } | |
| document.body.removeChild(test); | |
| </script> | |
| </body> | |
| </html> |