| <!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", |
| "main", "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> |