src/cm/media/js/lib/yui/yui_3.10.3/build/highlight-base/highlight-base.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
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('highlight-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
Provides methods for highlighting strings within other strings by wrapping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
them in HTML.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
@module highlight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@submodule highlight-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
@main
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
@since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
Provides methods for highlighting strings within other strings by wrapping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
them in HTML.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
The highlight methods first escape any special HTML characters in the input
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
strings and then highlight the appropriate substrings by wrapping them in a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
`<b class="yui3-highlight"></b>` element. The `<b>` element is used rather than
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
`<strong>` in accordance with HTML5's definition of `<b>` as being purely
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
presentational, which is exactly what highlighting is.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
@class Highlight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
var YArray    = Y.Array,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    Escape    = Y.Escape,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    WordBreak = Y.Text.WordBreak,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    isArray = Y.Lang.isArray,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    EMPTY_OBJECT = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    // Regex string that captures zero or one unclosed HTML entities. Used in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    // the static regex template properties below. The entity matching is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    // intentionally loose here, since there's a world of complexity involved in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    // doing strict matching for this use case.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    UNCLOSED_ENTITY = '(&[^;\\s]*)?',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
Highlight = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    // -- Protected Static Properties ------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    Regular expression template for highlighting a match that occurs anywhere
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    in a string. The placeholder `%needles` will be replaced with a list of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    needles to match, joined by `|` characters.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    This regex should have two capturing subpatterns:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
      1. Zero or one unclosed HTML entity (e.g. "&amp" without a ";" at the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
         end).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
      2. The `%needles` placeholder.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    The first subpattern match is used to emulate a negative lookbehind
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    assertion in order to prevent highlighting inside HTML entities.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    @property _REGEX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    _REGEX: UNCLOSED_ENTITY + '(%needles)',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    Regex replacer function or string for normal matches.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    @property _REPLACER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    @type Function|String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    _REPLACER: function (match, p1, p2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
         // Mimicking a negative lookbehind assertion to prevent matches inside
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
         // HTML entities. Hat tip to Steven Levithan for the technique:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
         // http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
         return p1 && !(/\s/).test(p2) ? match :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
                    Highlight._TEMPLATE.replace(/\{s\}/g, p2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
     },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
    Regular expression template for highlighting start-of-string matches
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    (i.e., only matches that occur at the beginning of a string). The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
    placeholder `%needles` will be replaced with a list of needles to match,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
    joined by `|` characters.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    See `_REGEX` for a description of the capturing subpatterns this regex
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    string should contain.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    @property _START_REGEX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
    _START_REGEX: '^' + UNCLOSED_ENTITY + '(%needles)',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
    Highlight template which will be used as a replacement for matched
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    substrings. The placeholder `{s}` will be replaced with the matched
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    substring.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
    @property _TEMPLATE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
    @default '<b class="yui3-highlight">{s}</b>'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    _TEMPLATE: '<b class="' + Y.ClassNameManager.getClassName('highlight') + '">{s}</b>',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
    // -- Public Static Methods ------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    Highlights all occurrences in the _haystack_ string of the items in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
    _needles_ array, regardless of where they occur. The returned string will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    have all HTML characters escaped except for the highlighting markup.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    @method all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
    @param {String} haystack String to apply highlighting to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    @param {String|String[]} needles String or array of strings that should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        highlighted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
    @param {Object} [options] Options object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
    @param {Boolean} [options.caseSensitive=false] If `true`, matching will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
        be case-sensitive.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    @param {Boolean} [options.startsWith=false] If `true`, matches must be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
        anchored to the beginning of the string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    @return {String} Escaped and highlighted copy of _haystack_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    all: function (haystack, needles, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
        var validNeedles = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
            esc, i, len, needle, regex, replacer;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        if (!options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
            options = EMPTY_OBJECT;
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
        // TODO: document options.replacer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
        esc      = options.escapeHTML !== false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
        regex    = options.startsWith ? Highlight._START_REGEX : Highlight._REGEX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
        replacer = options.replacer || Highlight._REPLACER;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
        needles  = isArray(needles) ? needles : [needles];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        // Escape HTML characters and special regular expression characters in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        // the needles so they can be used in a regex and matched against the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        // escaped haystack.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
        for (i = 0, len = needles.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
            needle = needles[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
            if (needle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
                validNeedles.push(Escape.regex(esc ? Escape.html(needle) : needle));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
        // Escape HTML characters in the haystack to prevent HTML injection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
        if (esc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
            haystack = Escape.html(haystack);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
        // No point continuing if there are no needles.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
        if (!validNeedles.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
            return haystack;
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
        return haystack.replace(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
            new RegExp(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
                regex.replace('%needles', validNeedles.join('|')),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
                options.caseSensitive ? 'g' : 'gi'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
            ),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
            replacer
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
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
    Same as `all()`, but case-sensitive by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
    @method allCase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    @param {String} haystack String to apply highlighting to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
    @param {String|String[]} needles String or array of strings that should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
      highlighted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
    @param {Object} [options] Options object. See `all()` for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
    @return {String} Escaped and highlighted copy of _haystack_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
    allCase: function (haystack, needles, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
        return Highlight.all(haystack, needles,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
                Y.merge(options || EMPTY_OBJECT, {caseSensitive: true}));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
    },
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
    Highlights _needles_ that occur at the start of _haystack_. The returned
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
    string will have all HTML characters escaped except for the highlighting
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
    markup.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
    @method start
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
    @param {String} haystack String to apply highlighting to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    @param {String|String[]} needles String or array of strings that should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
      highlighted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    @param {Object} [options] Options object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
    @param {Boolean} [options.caseSensitive=false] If `true`, matching will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
        be case-sensitive.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
    @return {String} Escaped and highlighted copy of _haystack_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
    start: function (haystack, needles, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
        return Highlight.all(haystack, needles,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
                Y.merge(options || EMPTY_OBJECT, {startsWith: true}));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
    Same as `start()`, but case-sensitive by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
    @method startCase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
    @param {String} haystack String to apply highlighting to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
    @param {String|String[]} needles String or array of strings that should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
      highlighted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
    @return {String} Escaped and highlighted copy of _haystack_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
    startCase: function (haystack, needles) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
        // No options passthru for now, since it would be redundant. If start()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
        // ever supports more options than caseSensitive, then we'll start
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
        // passing the options through.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
        return Highlight.start(haystack, needles, {caseSensitive: true});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
    Highlights complete words in the _haystack_ string that are also in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
    _needles_ array. The returned string will have all HTML characters escaped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    except for the highlighting markup.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    @method words
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    @param {String} haystack String to apply highlighting to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    @param {String|String[]} needles String or array of strings containing words
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
      that should be highlighted. If a string is passed, it will be split
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
      into words; if an array is passed, it is assumed to have already been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
      split.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
    @param {Object} [options] Options object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
    @param {Boolean} [options.caseSensitive=false] If `true`, matching will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        be case-sensitive.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
    @return {String} Escaped and highlighted copy of _haystack_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
    words: function (haystack, needles, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
        var caseSensitive,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
            mapper,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
            template = Highlight._TEMPLATE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
            words;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
        if (!options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
            options = EMPTY_OBJECT;
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
        caseSensitive = !!options.caseSensitive;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
        // Convert needles to a hash for faster lookups.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
        needles = YArray.hash(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
            isArray(needles) ? needles : WordBreak.getUniqueWords(needles, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
                ignoreCase: !caseSensitive
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
            })
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
        );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        // The default word mapping function can be overridden with a custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
        // one. This is used to implement accent-folded highlighting in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        // highlight-accentfold module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
        mapper = options.mapper || function (word, needles) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
            if (needles.hasOwnProperty(caseSensitive ? word : word.toLowerCase())) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
                return template.replace(/\{s\}/g, Escape.html(word));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
            return Escape.html(word);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
        // Split the haystack into an array of words, including punctuation and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
        // whitespace so we can rebuild the string later.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
        words = WordBreak.getWords(haystack, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
            includePunctuation: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
            includeWhitespace : true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
        return YArray.map(words, function (word) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
            return mapper(word, needles);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
        }).join('');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    Same as `words()`, but case-sensitive by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    @method wordsCase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
    @param {String} haystack String to apply highlighting to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
    @param {String|String[]} needles String or array of strings containing words
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
      that should be highlighted. If a string is passed, it will be split
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
      into words; if an array is passed, it is assumed to have already been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
      split.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
    @return {String} Escaped and highlighted copy of _haystack_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
    wordsCase: function (haystack, needles) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
        // No options passthru for now, since it would be redundant. If words()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
        // ever supports more options than caseSensitive, then we'll start
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
        // passing the options through.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
        return Highlight.words(haystack, needles, {caseSensitive: true});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
Y.Highlight = Highlight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
}, '3.10.3', {"requires": ["array-extras", "classnamemanager", "escape", "text-wordbreak"]});