src/cm/media/js/lib/yui/yui_3.10.3/build/dom-base/dom-base-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('dom-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
* @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
* @module dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
var documentElement = Y.config.doc.documentElement,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
    Y_DOM = Y.DOM,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
    TAG_NAME = 'tagName',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
    OWNER_DOCUMENT = 'ownerDocument',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
    EMPTY_STRING = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    addFeature = Y.Features.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    testFeature = Y.Features.test;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
Y.mix(Y_DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
     * Returns the text content of the HTMLElement. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
     * @method getText         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
     * @param {HTMLElement} element The html element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
     * @return {String} The text content of the element (includes text of any descending elements).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    getText: (documentElement.textContent !== undefined) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
        function(element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
            var ret = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
            if (element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
                ret = element.textContent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
            return ret || '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
        } : function(element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
            var ret = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
            if (element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
                ret = element.innerText || element.nodeValue; // might be a textNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
            return ret || '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
     * Sets the text content of the HTMLElement. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
     * @method setText         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
     * @param {HTMLElement} element The html element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
     * @param {String} content The content to add. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    setText: (documentElement.textContent !== undefined) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
        function(element, content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
            if (element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
                element.textContent = content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
        } : function(element, content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
            if ('innerText' in element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
                element.innerText = content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
            } else if ('nodeValue' in element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
                element.nodeValue = content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    CUSTOM_ATTRIBUTES: (!documentElement.hasAttribute) ? { // IE < 8
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
        'for': 'htmlFor',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
        'class': 'className'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    } : { // w3c
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
        'htmlFor': 'for',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
        'className': 'class'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
     * Provides a normalized attribute interface. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
     * @method setAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
     * @param {HTMLElement} el The target element for the attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
     * @param {String} attr The attribute to set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
     * @param {String} val The value of the attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    setAttribute: function(el, attr, val, ieAttr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
        if (el && attr && el.setAttribute) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
            attr = Y_DOM.CUSTOM_ATTRIBUTES[attr] || attr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
            el.setAttribute(attr, val, ieAttr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
        else { Y.log('bad input to setAttribute', 'warn', 'dom'); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
     * Provides a normalized attribute interface. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
     * @method getAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
     * @param {HTMLElement} el The target element for the attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
     * @param {String} attr The attribute to get.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
     * @return {String} The current value of the attribute. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
    getAttribute: function(el, attr, ieAttr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
        ieAttr = (ieAttr !== undefined) ? ieAttr : 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
        var ret = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
        if (el && attr && el.getAttribute) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
            attr = Y_DOM.CUSTOM_ATTRIBUTES[attr] || attr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
            ret = el.getAttribute(attr, ieAttr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
            if (ret === null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
                ret = ''; // per DOM spec
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
        else { Y.log('bad input to getAttribute', 'warn', 'dom'); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    VALUE_SETTERS: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
    VALUE_GETTERS: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
    getValue: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
        var ret = '', // TODO: return null?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
            getter;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
        if (node && node[TAG_NAME]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
            getter = Y_DOM.VALUE_GETTERS[node[TAG_NAME].toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
            if (getter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
                ret = getter(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
                ret = node.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
        // workaround for IE8 JSON stringify bug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
        // which converts empty string values to null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
        if (ret === EMPTY_STRING) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
            ret = EMPTY_STRING; // for real
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
        return (typeof ret === 'string') ? ret : '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
    setValue: function(node, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
        var setter;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        if (node && node[TAG_NAME]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
            setter = Y_DOM.VALUE_SETTERS[node[TAG_NAME].toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
            if (setter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
                setter(node, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
                node.value = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
    creators: {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
addFeature('value-set', 'select', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        var node = Y.config.doc.createElement('select');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        node.innerHTML = '<option>1</option><option>2</option>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
        node.value = '2';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
        return (node.value && node.value === '2');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
if (!testFeature('value-set', 'select')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    Y_DOM.VALUE_SETTERS.select = function(node, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
        for (var i = 0, options = node.getElementsByTagName('option'), option;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
                option = options[i++];) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
            if (Y_DOM.getValue(option) === val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
                option.selected = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
                //Y_DOM.setAttribute(option, 'selected', 'selected');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
Y.mix(Y_DOM.VALUE_GETTERS, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
    button: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
        return (node.attributes && node.attributes.value) ? node.attributes.value.value : '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
Y.mix(Y_DOM.VALUE_SETTERS, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    // IE: node.value changes the button text, which should be handled via innerHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
    button: function(node, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
        var attr = node.attributes.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
        if (!attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
            attr = node[OWNER_DOCUMENT].createAttribute('value');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
            node.setAttributeNode(attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
        attr.value = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
Y.mix(Y_DOM.VALUE_GETTERS, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
    option: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
        var attrs = node.attributes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
        return (attrs.value && attrs.value.specified) ? node.value : node.text;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
    select: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
        var val = node.value,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
            options = node.options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        if (options && options.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
            // TODO: implement multipe select
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
            if (node.multiple) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
                Y.log('multiple select normalization not implemented', 'warn', 'DOM');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
            } else if (node.selectedIndex > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
                val = Y_DOM.getValue(options[node.selectedIndex]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
var addClass, hasClass, removeClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
Y.mix(Y.DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
     * Determines whether a DOM element has the given className.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
     * @method hasClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
     * @param {String} className the class name to search for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
     * @return {Boolean} Whether or not the element has the given class. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
    hasClass: function(node, className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
        var re = Y.DOM._getRegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
        return re.test(node.className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
     * Adds a class name to a given DOM element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
     * @method addClass         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
     * @param {String} className the class name to add to the class attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    addClass: function(node, className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
        if (!Y.DOM.hasClass(node, className)) { // skip if already present 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
            node.className = Y.Lang.trim([node.className, className].join(' '));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
     * Removes a class name from a given element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
     * @method removeClass         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
     * @param {String} className the class name to remove from the class attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    removeClass: function(node, className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
        if (className && hasClass(node, className)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
            node.className = Y.Lang.trim(node.className.replace(Y.DOM._getRegExp('(?:^|\\s+)' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
                            className + '(?:\\s+|$)'), ' '));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
            if ( hasClass(node, className) ) { // in case of multiple adjacent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
                removeClass(node, className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
        }                 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
     * Replace a class with another class for a given element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
     * If no oldClassName is present, the newClassName is simply added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
     * @method replaceClass  
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
     * @param {HTMLElement} element The DOM element 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
     * @param {String} oldClassName the class name to be replaced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
     * @param {String} newClassName the class name that will be replacing the old class name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
    replaceClass: function(node, oldC, newC) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
        //Y.log('replaceClass replacing ' + oldC + ' with ' + newC, 'info', 'Node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        removeClass(node, oldC); // remove first in case oldC === newC
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
        addClass(node, newC);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
     * If the className exists on the node it is removed, if it doesn't exist it is added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
     * @method toggleClass  
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
     * @param {HTMLElement} element The DOM element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
     * @param {String} className the class name to be toggled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
     * @param {Boolean} addClass optional boolean to indicate whether class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
     * should be added or removed regardless of current state
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
    toggleClass: function(node, className, force) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        var add = (force !== undefined) ? force :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
                !(hasClass(node, className));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
        if (add) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
            addClass(node, className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
            removeClass(node, className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
hasClass = Y.DOM.hasClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
removeClass = Y.DOM.removeClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
addClass = Y.DOM.addClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
var re_tag = /<([a-z]+)/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
    Y_DOM = Y.DOM,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
    addFeature = Y.Features.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
    testFeature = Y.Features.test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
    creators = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    createFromDIV = function(html, tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
        var div = Y.config.doc.createElement('div'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
            ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
        div.innerHTML = html;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
        if (!div.firstChild || div.firstChild.tagName !== tag.toUpperCase()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
            ret = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
    re_tbody = /(?:\/(?:thead|tfoot|tbody|caption|col|colgroup)>)+\s*<tbody/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    TABLE_OPEN = '<table>',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
    TABLE_CLOSE = '</table>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
Y.mix(Y.DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
    _fragClones: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
    _create: function(html, doc, tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
        tag = tag || 'div';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
        var frag = Y_DOM._fragClones[tag];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
        if (frag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
            frag = frag.cloneNode(false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
            frag = Y_DOM._fragClones[tag] = doc.createElement(tag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
        frag.innerHTML = html;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
        return frag;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
    _children: function(node, tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
            var i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
            children = node.children,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
            childNodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
            hasComments,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
            child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
        if (children && children.tags) { // use tags filter when possible
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
            if (tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
                children = node.children.tags(tag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
            } else { // IE leaks comments into children
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
                hasComments = children.tags('!').length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        if (!children || (!children.tags && tag) || hasComments) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
            childNodes = children || node.childNodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
            children = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
            while ((child = childNodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
                if (child.nodeType === 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
                    if (!tag || tag === child.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
                        children.push(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
        return children || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
     * Creates a new dom node using the provided markup string. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
     * @method create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
     * @param {String} html The markup used to create the element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
     * @param {HTMLDocument} doc An optional document context 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
     * @return {HTMLElement|DocumentFragment} returns a single HTMLElement 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
     * when creating one node, and a documentFragment when creating
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
     * multiple nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
    create: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
        if (typeof html === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
            html = Y.Lang.trim(html); // match IE which trims whitespace from innerHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
        doc = doc || Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
        var m = re_tag.exec(html),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
            create = Y_DOM._create,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
            custom = creators,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
            ret = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
            creator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
            tag, nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
        if (html != undefined) { // not undefined or null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
            if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
                creator = custom[m[1].toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
                if (typeof creator === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
                    create = creator; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
                    tag = creator;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
            nodes = create(html, doc, tag).childNodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
            if (nodes.length === 1) { // return single node, breaking parentNode ref from "fragment"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
                ret = nodes[0].parentNode.removeChild(nodes[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
            } else if (nodes[0] && nodes[0].className === 'yui3-big-dummy') { // using dummy node to preserve some attributes (e.g. OPTION not selected)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
                if (nodes.length === 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
                    ret = nodes[0].nextSibling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
                    nodes[0].parentNode.removeChild(nodes[0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
                    ret = Y_DOM._nl2frag(nodes, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
            } else { // return multiple nodes as a fragment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
                 ret = Y_DOM._nl2frag(nodes, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
    _nl2frag: function(nodes, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
        var ret = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
            i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
        if (nodes && (nodes.push || nodes.item) && nodes[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
            doc = doc || nodes[0].ownerDocument; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
            ret = doc.createDocumentFragment();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
            if (nodes.item) { // convert live list to static array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
                nodes = Y.Array(nodes, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
            for (i = 0, len = nodes.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
                ret.appendChild(nodes[i]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
        } // else inline with log for minification
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
     * Inserts content in a node at the given location 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
     * @method addHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
     * @param {HTMLElement} node The node to insert into
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
     * @param {HTMLElement | Array | HTMLCollection} content The content to be inserted 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
     * @param {HTMLElement} where Where to insert the content
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
     * If no "where" is given, content is appended to the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
     * Possible values for "where"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
     * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
     * <dt>HTMLElement</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
     * <dd>The element to insert before</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
     * <dt>"replace"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
     * <dd>Replaces the existing HTML</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
     * <dt>"before"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
     * <dd>Inserts before the existing HTML</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
     * <dt>"before"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
     * <dd>Inserts content before the node</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
     * <dt>"after"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
     * <dd>Inserts content after the node</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
     * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
    addHTML: function(node, content, where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        var nodeParent = node.parentNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
            i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
            item,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
            ret = content,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
            newNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
        if (content != undefined) { // not null or undefined (maybe 0)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
            if (content.nodeType) { // DOM node, just add it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
                newNode = content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
            } else if (typeof content == 'string' || typeof content == 'number') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
                ret = newNode = Y_DOM.create(content);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
            } else if (content[0] && content[0].nodeType) { // array or collection 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
                newNode = Y.config.doc.createDocumentFragment();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
                while ((item = content[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
                    newNode.appendChild(item); // append to fragment for insertion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
        if (where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
            if (newNode && where.parentNode) { // insert regardless of relationship to node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
                where.parentNode.insertBefore(newNode, where);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
                switch (where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
                    case 'replace':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
                        while (node.firstChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
                            node.removeChild(node.firstChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
                        if (newNode) { // allow empty content to clear node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
                            node.appendChild(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
                    case 'before':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
                        if (newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
                            nodeParent.insertBefore(newNode, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
                    case 'after':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
                        if (newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
                            if (node.nextSibling) { // IE errors if refNode is null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
                                nodeParent.insertBefore(newNode, node.nextSibling);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
                                nodeParent.appendChild(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
                    default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
                        if (newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
                            node.appendChild(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
        } else if (newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
            node.appendChild(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
    wrap: function(node, html) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
        var parent = (html && html.nodeType) ? html : Y.DOM.create(html),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
            nodes = parent.getElementsByTagName('*');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
        if (nodes.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
            parent = nodes[nodes.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
        if (node.parentNode) { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
            node.parentNode.replaceChild(parent, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
        parent.appendChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
    unwrap: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
        var parent = node.parentNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
            lastChild = parent.lastChild,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
            next = node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
            grandparent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
        if (parent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
            grandparent = parent.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
            if (grandparent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
                node = parent.firstChild;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
                while (node !== lastChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
                    next = node.nextSibling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
                    grandparent.insertBefore(node, parent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
                    node = next;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
                grandparent.replaceChild(lastChild, parent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
                parent.removeChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
addFeature('innerhtml', 'table', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
        var node = Y.config.doc.createElement('table');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
            node.innerHTML = '<tbody></tbody>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
        } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
        return (node.firstChild && node.firstChild.nodeName === 'TBODY');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
addFeature('innerhtml-div', 'tr', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
        return createFromDIV('<tr></tr>', 'tr');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
addFeature('innerhtml-div', 'script', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
        return createFromDIV('<script></script>', 'script');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
if (!testFeature('innerhtml', 'table')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
    // TODO: thead/tfoot with nested tbody
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
        // IE adds TBODY when creating TABLE elements (which may share this impl)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
    creators.tbody = function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
        var frag = Y_DOM.create(TABLE_OPEN + html + TABLE_CLOSE, doc),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
            tb = Y.DOM._children(frag, 'tbody')[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
        if (frag.children.length > 1 && tb && !re_tbody.test(html)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
            tb.parentNode.removeChild(tb); // strip extraneous tbody
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
        return frag;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
if (!testFeature('innerhtml-div', 'script')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
    creators.script = function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
        var frag = doc.createElement('div');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
        frag.innerHTML = '-' + html;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
        frag.removeChild(frag.firstChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
        return frag;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
    creators.link = creators.style = creators.script;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
if (!testFeature('innerhtml-div', 'tr')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
    Y.mix(creators, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
        option: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
            return Y_DOM.create('<select><option class="yui3-big-dummy" selected></option>' + html + '</select>', doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
        tr: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
            return Y_DOM.create('<tbody>' + html + '</tbody>', doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
        td: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
            return Y_DOM.create('<tr>' + html + '</tr>', doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
        }, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
        col: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
            return Y_DOM.create('<colgroup>' + html + '</colgroup>', doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
        }, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
        tbody: 'table'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
    Y.mix(creators, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
        legend: 'fieldset',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
        th: creators.td,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
        thead: creators.tbody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
        tfoot: creators.tbody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
        caption: creators.tbody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
        colgroup: creators.tbody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
        optgroup: creators.option
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
Y_DOM.creators = creators;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
Y.mix(Y.DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
     * Sets the width of the element to the given size, regardless
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
     * of box model, border, padding, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
     * @method setWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
     * @param {String|Number} size The pixel height to size to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
    setWidth: function(node, size) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
        Y.DOM._setSize(node, 'width', size);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
     * Sets the height of the element to the given size, regardless
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
     * of box model, border, padding, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
     * @method setHeight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
     * @param {String|Number} size The pixel height to size to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
    setHeight: function(node, size) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
        Y.DOM._setSize(node, 'height', size);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
    _setSize: function(node, prop, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
        val = (val > 0) ? val : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
        var size = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
        node.style[prop] = val + 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
        size = (prop === 'height') ? node.offsetHeight : node.offsetWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
        if (size > val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
            val = val - (size - val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
            if (val < 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
                val = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
            node.style[prop] = val + 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
}, '3.10.3', {"requires": ["dom-core"]});