76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('dom-create', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar re_tag = /<([a-z]+)/i,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y_DOM = Y.DOM,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass addFeature = Y.Features.add,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass testFeature = Y.Features.test,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass creators = {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass createFromDIV = function(html, tag) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var div = Y.config.doc.createElement('div'),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass div.innerHTML = html;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!div.firstChild || div.firstChild.tagName !== tag.toUpperCase()) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return ret;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass re_tbody = /(?:\/(?:thead|tfoot|tbody|caption|col|colgroup)>)+\s*<tbody/,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TABLE_OPEN = '<table>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TABLE_CLOSE = '</table>';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.mix(Y.DOM, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _fragClones: {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _create: function(html, doc, tag) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tag = tag || 'div';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var frag = Y_DOM._fragClones[tag];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (frag) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass frag = frag.cloneNode(false);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass frag = Y_DOM._fragClones[tag] = doc.createElement(tag);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass frag.innerHTML = html;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return frag;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates a new dom node using the provided markup string.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method create
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} html The markup used to create the element
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {HTMLDocument} doc An optional document context
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {HTMLElement|DocumentFragment} returns a single HTMLElement
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * when creating one node, and a documentFragment when creating
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * multiple nodes.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass create: function(html, doc) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (typeof html === 'string') {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass html = Y.Lang.trim(html); // match IE which trims whitespace from innerHTML
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass doc = doc || Y.config.doc;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var m = re_tag.exec(html),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass create = Y_DOM._create,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass custom = creators,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass creator,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tag, nodes;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (html != undefined) { // not undefined or null
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (m && m[1]) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass creator = custom[m[1].toLowerCase()];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (typeof creator === 'function') {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass create = creator;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tag = creator;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nodes = create(html, doc, tag).childNodes;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (nodes.length === 1) { // return single node, breaking parentNode ref from "fragment"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = nodes[0].parentNode.removeChild(nodes[0]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else if (nodes[0] && nodes[0].className === 'yui3-big-dummy') { // using dummy node to preserve some attributes (e.g. OPTION not selected)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (nodes.length === 2) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = nodes[0].nextSibling;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nodes[0].parentNode.removeChild(nodes[0]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = Y_DOM._nl2frag(nodes, doc);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else { // return multiple nodes as a fragment
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = Y_DOM._nl2frag(nodes, doc);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return ret;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _nl2frag: function(nodes, doc) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var ret = null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i, len;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (nodes && (nodes.push || nodes.item) && nodes[0]) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass doc = doc || nodes[0].ownerDocument;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = doc.createDocumentFragment();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (nodes.item) { // convert live list to static array
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nodes = Y.Array(nodes, 0, true);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for (i = 0, len = nodes.length; i < len; i++) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret.appendChild(nodes[i]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } // else inline with log for minification
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else { Y.log('unable to convert ' + nodes + ' to fragment', 'warn', 'dom'); }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return ret;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Inserts content in a node at the given location
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method addHTML
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {HTMLElement} node The node to insert into
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {HTMLElement | Array | HTMLCollection} content The content to be inserted
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {HTMLElement} where Where to insert the content
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * If no "where" is given, content is appended to the node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Possible values for "where"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>HTMLElement</dt>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dd>The element to insert before</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>"replace"</dt>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dd>Replaces the existing HTML</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>"before"</dt>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dd>Inserts before the existing HTML</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>"before"</dt>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dd>Inserts content before the node</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>"after"</dt>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dd>Inserts content after the node</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass addHTML: function(node, content, where) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var nodeParent = node.parentNode,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i = 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass item,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = content,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass newNode;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (content != undefined) { // not null or undefined (maybe 0)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (content.nodeType) { // DOM node, just add it
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass newNode = content;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else if (typeof content == 'string' || typeof content == 'number') {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret = newNode = Y_DOM.create(content);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else if (content[0] && content[0].nodeType) { // array or collection
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass newNode = Y.config.doc.createDocumentFragment();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass while ((item = content[i++])) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass newNode.appendChild(item); // append to fragment for insertion
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (where) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (where.nodeType) { // insert regardless of relationship to node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass where.parentNode.insertBefore(newNode, where);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass switch (where) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'replace':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass while (node.firstChild) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.removeChild(node.firstChild);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (newNode) { // allow empty content to clear node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.appendChild(newNode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass break;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'before':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nodeParent.insertBefore(newNode, node);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass break;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass case 'after':
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (node.nextSibling) { // IE errors if refNode is null
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nodeParent.insertBefore(newNode, node.nextSibling);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nodeParent.appendChild(newNode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass break;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass default:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.appendChild(newNode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else if (newNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.appendChild(newNode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return ret;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassaddFeature('innerhtml', 'table', {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass test: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var node = Y.config.doc.createElement('table');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass try {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.innerHTML = '<tbody></tbody>';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } catch(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return (node.firstChild && node.firstChild.nodeName === 'TBODY');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassaddFeature('innerhtml-div', 'tr', {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass test: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return createFromDIV('<tr></tr>', 'tr');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassaddFeature('innerhtml-div', 'script', {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass test: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return createFromDIV('<script></script>', 'script');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassif (!testFeature('innerhtml', 'table')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // TODO: thead/tfoot with nested tbody
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // IE adds TBODY when creating TABLE elements (which may share this impl)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass creators.tbody = function(html, doc) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var frag = Y_DOM.create(TABLE_OPEN + html + TABLE_CLOSE, doc),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tb = frag.children.tags('tbody')[0];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (frag.children.length > 1 && tb && !re_tbody.test(html)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tb.parentNode.removeChild(tb); // strip extraneous tbody
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return frag;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassif (!testFeature('innerhtml-div', 'script')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass creators.script = function(html, doc) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var frag = doc.createElement('div');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass frag.innerHTML = '-' + html;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass frag.removeChild(frag.firstChild);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return frag;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass creators.link = creators.style = creators.script;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassif (!testFeature('innerhtml-div', 'tr')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.mix(creators, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass option: function(html, doc) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Y_DOM.create('<select><option class="yui3-big-dummy" selected></option>' + html + '</select>', doc);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tr: function(html, doc) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Y_DOM.create('<tbody>' + html + '</tbody>', doc);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass td: function(html, doc) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Y_DOM.create('<tr>' + html + '</tr>', doc);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass col: function(html, doc) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Y_DOM.create('<colgroup>' + html + '</colgroup>', doc);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tbody: 'table'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.mix(creators, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass legend: 'fieldset',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass th: creators.td,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass thead: creators.tbody,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tfoot: creators.tbody,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass caption: creators.tbody,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass colgroup: creators.tbody,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass optgroup: creators.option
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY_DOM.creators = creators;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{requires:['dom-core']});