src/cm/media/js/lib/yui/yui_3.10.3/build/widget-htmlparser/widget-htmlparser.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('widget-htmlparser', 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
 * Adds HTML Parser support to the base Widget class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
 * @module widget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
 * @submodule widget-htmlparser
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
 * @for Widget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
var Widget = Y.Widget,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    Node = Y.Node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    Lang = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    SRC_NODE = "srcNode",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
    CONTENT_BOX = "contentBox";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
 * Object hash, defining how attribute values are to be parsed from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
 * markup contained in the widget's content box. e.g.:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
 * <pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
 *   {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
 *       // Set single Node references using selector syntax
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
 *       // (selector is run through node.one)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
 *       titleNode: "span.yui-title",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
 *       // Set NodeList references using selector syntax
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
 *       // (array indicates selector is to be run through node.all)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
 *       listNodes: ["li.yui-item"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
 *       // Set other attribute types, using a parse function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
 *       // Context is set to the widget instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
 *       label: function(contentBox) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
 *           return contentBox.one("span.title").get("innerHTML");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
 *       }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
 *   }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
 * </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
 * @property HTML_PARSER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
 * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
Widget.HTML_PARSER = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
 * The build configuration for the Widget class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
 * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
 * Defines the static fields which need to be aggregated,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
 * when this class is used as the main class passed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
 * the <a href="Base.html#method_build">Base.build</a> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
 * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
 * @property _buildCfg
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
 * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
 * @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
 * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
Widget._buildCfg = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    aggregates : ["HTML_PARSER"]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
 * The DOM node to parse for configuration values, passed to the Widget's HTML_PARSER definition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
 * @attribute srcNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
 * @type String | Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
 * @writeOnce
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
Widget.ATTRS[SRC_NODE] = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    value: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    setter: Node.one,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    getter: "_getSrcNode",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    writeOnce: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
Y.mix(Widget.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
     * @method _getSrcNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
     * @return {Node} The Node to apply HTML_PARSER to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
    _getSrcNode : function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        return val || this.get(CONTENT_BOX);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
     * @method _applyParsedConfig
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
     * @return {Object} The merged configuration literal
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    _applyParsedConfig : function(node, cfg, parsedCfg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
        return (parsedCfg) ? Y.mix(cfg, parsedCfg, false) : cfg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
     * Utility method used to apply the <code>HTML_PARSER</code> configuration for the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
     * instance, to retrieve config data values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
     * @method _applyParser
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
     * @param config {Object} User configuration object (will be populated with values from Node)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    _applyParser : function(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
        var widget = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
            srcNode = this._getNodeToParse(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
            schema = widget._getHtmlParser(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
            parsedConfig,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
            val;
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 (schema && srcNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
            Y.Object.each(schema, function(v, k, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
                val = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
                if (Lang.isFunction(v)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
                    val = v.call(widget, srcNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
                    if (Lang.isArray(v)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
                        val = srcNode.all(v[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
                        if (val.isEmpty()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
                            val = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
                        val = srcNode.one(v);
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
                if (val !== null && val !== undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
                    parsedConfig = parsedConfig || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
                    parsedConfig[k] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
        config = widget._applyParsedConfig(srcNode, config, parsedConfig);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
     * Determines whether we have a node reference which we should try and parse.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
     * The current implementation does not parse nodes generated from CONTENT_TEMPLATE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
     * only explicitly set srcNode, or contentBox attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
     * @method _getNodeToParse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
     * @return {Node} The node reference to apply HTML_PARSER to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    _getNodeToParse : function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        var srcNode = this.get("srcNode");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        return (!this._cbFromTemplate) ? srcNode : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
     * Gets the HTML_PARSER definition for this instance, by merging HTML_PARSER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
     * definitions across the class hierarchy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
     * @method _getHtmlParser
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
     * @return {Object} HTML_PARSER definition for this instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    _getHtmlParser : function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
        // Removed caching for kweight. This is a private method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        // and only called once so don't need to cache HTML_PARSER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
        var classes = this._getClasses(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
            parser = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
            i, p;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
        for (i = classes.length - 1; i >= 0; i--) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
            p = classes[i].HTML_PARSER;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
            if (p) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
                Y.mix(parser, p, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
        return parser;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
}, '3.10.3', {"requires": ["widget-base"]});