src/cm/media/js/lib/yui/yui3-3.15.0/build/widget-htmlparser/widget-htmlparser.js
author gibus
Mon, 10 Mar 2014 15:19:48 +0100
changeset 602 e16a97fb364a
permissions -rw-r--r--
Use YUI 3.15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('widget-htmlparser', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * Adds HTML Parser support to the base Widget class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * @module widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @submodule widget-htmlparser
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 * @for Widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
var Widget = Y.Widget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
    Node = Y.Node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
    Lang = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
    SRC_NODE = "srcNode",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
    CONTENT_BOX = "contentBox";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
 * Object hash, defining how attribute values are to be parsed from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
 * markup contained in the widget's content box. e.g.:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
 * <pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
 *   {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
 *       // Set single Node references using selector syntax
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
 *       // (selector is run through node.one)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
 *       titleNode: "span.yui-title",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
 *       // Set NodeList references using selector syntax
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
 *       // (array indicates selector is to be run through node.all)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
 *       listNodes: ["li.yui-item"],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
 *       // Set other attribute types, using a parse function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
 *       // Context is set to the widget instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
 *       label: function(contentBox) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
 *           return contentBox.one("span.title").get("innerHTML");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
 *       }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
 *   }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
 * </pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
 * @property HTML_PARSER
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
 * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
Widget.HTML_PARSER = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
 * The build configuration for the Widget class.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
 * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
 * Defines the static fields which need to be aggregated,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
 * when this class is used as the main class passed to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
 * the <a href="Base.html#method_build">Base.build</a> method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
 * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
 * @property _buildCfg
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
 * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
 * @final
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
Widget._buildCfg = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
    aggregates : ["HTML_PARSER"]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
 * The DOM node to parse for configuration values, passed to the Widget's HTML_PARSER definition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
 * @attribute srcNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
 * @type String | Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
 * @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
Widget.ATTRS[SRC_NODE] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
    value: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
    setter: Node.one,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
    getter: "_getSrcNode",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
    writeOnce: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
Y.mix(Widget.prototype, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
     * @method _getSrcNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
     * @return {Node} The Node to apply HTML_PARSER to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    _getSrcNode : function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
        return val || this.get(CONTENT_BOX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
     * Implement the BaseCore _preAddAttrs method hook, to add
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
     * the srcNode and related attributes, so that HTML_PARSER
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
     * (which relies on `this.get("srcNode")`) can merge in it's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
     * results before the rest of the attributes are added.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
     * @method _preAddAttrs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
     * @param attrs {Object} The full hash of statically defined ATTRS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
     * attributes being added for this instance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
     * @param userVals {Object} The hash of user values passed to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
     * the constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
     * @param lazy {boolean} Whether or not to add the attributes lazily
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
    _preAddAttrs : function(attrs, userVals, lazy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
        var preAttrs = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
            id : attrs.id,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
            boundingBox : attrs.boundingBox,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
            contentBox : attrs.contentBox,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
            srcNode : attrs.srcNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        this.addAttrs(preAttrs, userVals, lazy);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
        delete attrs.boundingBox;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
        delete attrs.contentBox;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
        delete attrs.srcNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
        delete attrs.id;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
        if (this._applyParser) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
            this._applyParser(userVals);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
     * @method _applyParsedConfig
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
     * @return {Object} The merged configuration literal
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
    _applyParsedConfig : function(node, cfg, parsedCfg) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
        return (parsedCfg) ? Y.mix(cfg, parsedCfg, false) : cfg;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
     * Utility method used to apply the <code>HTML_PARSER</code> configuration for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
     * instance, to retrieve config data values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
     * @method _applyParser
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
     * @param config {Object} User configuration object (will be populated with values from Node)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
    _applyParser : function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
        var widget = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
            srcNode = this._getNodeToParse(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
            schema = widget._getHtmlParser(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
            parsedConfig,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
            val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
        if (schema && srcNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
            Y.Object.each(schema, function(v, k, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
                val = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
                if (Lang.isFunction(v)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
                    val = v.call(widget, srcNode);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
                    if (Lang.isArray(v)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
                        val = srcNode.all(v[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
                        if (val.isEmpty()) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
                            val = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
                        val = srcNode.one(v);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
                if (val !== null && val !== undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
                    parsedConfig = parsedConfig || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
                    parsedConfig[k] = val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
        config = widget._applyParsedConfig(srcNode, config, parsedConfig);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
     * Determines whether we have a node reference which we should try and parse.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
     * The current implementation does not parse nodes generated from CONTENT_TEMPLATE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
     * only explicitly set srcNode, or contentBox attributes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
     * @method _getNodeToParse
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
     * @return {Node} The node reference to apply HTML_PARSER to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
    _getNodeToParse : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
        var srcNode = this.get("srcNode");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
        return (!this._cbFromTemplate) ? srcNode : null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
     * Gets the HTML_PARSER definition for this instance, by merging HTML_PARSER
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
     * definitions across the class hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
     * @method _getHtmlParser
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
     * @return {Object} HTML_PARSER definition for this instance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
    _getHtmlParser : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
        // Removed caching for kweight. This is a private method
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
        // and only called once so don't need to cache HTML_PARSER
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
        var classes = this._getClasses(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
            parser = {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
            i, p;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
        for (i = classes.length - 1; i >= 0; i--) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
            p = classes[i].HTML_PARSER;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
            if (p) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
                Y.mix(parser, p, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
        return parser;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
}, '@VERSION@', {"requires": ["widget-base"]});