~canonical-sysadmins/wordpress/4.6

« back to all changes in this revision

Viewing changes to wp-includes/js/wp-emoji.js

  • Committer: Haw Loeung (hloeung)
  • Date: 2015-05-08 02:12:58 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: haw.loeung@canonical.com-20150508021258-d0zgf68ks1s3uexw
Merge WP4.2.2 from upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
                var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
5
5
 
6
6
                /**
7
 
                 * Flag to determine if the browser and the OS support emoji.
8
 
                 *
9
 
                 * @since 4.2.0
10
 
                 *
11
 
                 * @var Boolean
12
 
                 */
13
 
                supportsEmoji = false,
14
 
 
15
 
                /**
16
 
                 * Flag to determine if the browser and the OS support flag (two character) emoji.
17
 
                 *
18
 
                 * @since 4.2.0
19
 
                 *
20
 
                 * @var Boolean
21
 
                 */
22
 
                supportsFlagEmoji = false,
23
 
 
24
 
                /**
25
7
                 * Flag to determine if we should replace emoji characters with images.
26
8
                 *
27
9
                 * @since 4.2.0
30
12
                 */
31
13
                replaceEmoji = false,
32
14
 
33
 
                isIE8 = window.navigator.userAgent.indexOf( 'IE 8' ) !== -1,
34
 
 
35
15
                // Private
36
16
                twemoji, timer,
 
17
                loaded = false,
37
18
                count = 0;
38
19
 
39
20
                /**
42
23
                 * @since 4.2.0
43
24
                 */
44
25
                function load() {
 
26
                        if ( loaded ) {
 
27
                                return;
 
28
                        }
 
29
 
45
30
                        if ( typeof window.twemoji === 'undefined' ) {
46
31
                                // Break if waiting for longer than 30 sec.
47
32
                                if ( count > 600 ) {
57
42
                        }
58
43
 
59
44
                        twemoji = window.twemoji;
 
45
                        loaded = true;
60
46
 
61
47
                        if ( MutationObserver ) {
62
48
                                new MutationObserver( function( mutationRecords ) {
63
49
                                        var i = mutationRecords.length,
64
 
                                                ii, node;
 
50
                                                addedNodes, removedNodes, ii, node;
65
51
 
66
52
                                        while ( i-- ) {
67
 
                                                ii = mutationRecords[ i ].addedNodes.length;
 
53
                                                addedNodes = mutationRecords[ i ].addedNodes;
 
54
                                                removedNodes = mutationRecords[ i ].removedNodes;
 
55
                                                ii = addedNodes.length;
 
56
 
 
57
                                                if (
 
58
                                                        ii === 1 && removedNodes.length === 1 &&
 
59
                                                        addedNodes[0].nodeType === 3 &&
 
60
                                                        removedNodes[0].nodeName === 'IMG' &&
 
61
                                                        addedNodes[0].data === removedNodes[0].alt
 
62
                                                ) {
 
63
                                                        return;
 
64
                                                }
68
65
 
69
66
                                                while ( ii-- ) {
70
 
                                                        node = mutationRecords[ i ].addedNodes[ ii ];
 
67
                                                        node = addedNodes[ ii ];
71
68
 
72
69
                                                        if ( node.nodeType === 3 ) {
73
70
                                                                node = node.parentNode;
74
71
                                                        }
75
72
 
 
73
                                                        if ( ! node || ( node.className && node.className.indexOf( 'wp-exclude-emoji' ) !== -1 ) ) {
 
74
                                                                continue;
 
75
                                                        }
 
76
 
76
77
                                                        if ( node && node.nodeType === 1 ) {
77
78
                                                                parse( node );
78
79
                                                        }
96
97
                 * @param {Object} args Additional options for Twemoji.
97
98
                 */
98
99
                function parse( object, args ) {
99
 
                        if ( ! replaceEmoji ) {
 
100
                        if ( ! replaceEmoji || ! twemoji ) {
100
101
                                return object;
101
102
                        }
102
103
 
121
122
                                                        return false;
122
123
                                        }
123
124
 
124
 
                                        if ( ! supportsFlagEmoji && supportsEmoji &&
 
125
                                        if ( ! settings.supports.flag && settings.supports.simple &&
125
126
                                                ! /^1f1(?:e[6-9a-f]|f[0-9a-f])-1f1(?:e[6-9a-f]|f[0-9a-f])$/.test( icon ) ) {
126
127
 
127
128
                                                return false;
132
133
                        } );
133
134
                }
134
135
 
135
 
                // Load when the readyState changes to 'interactive', not 'complete'.
136
 
                function onLoad() {
137
 
                        if ( ( ! isIE8 && 'interactive' === document.readyState ) || ( isIE8 && 'complete' === document.readyState ) ) {
138
 
                                load();
139
 
                        }
140
 
                }
141
 
 
142
136
                /**
143
137
                 * Initialize our emoji support, and set up listeners.
144
138
                 */
145
139
                if ( settings ) {
146
 
                        supportsEmoji = window._wpemojiSettings.supports.simple;
147
 
                        supportsFlagEmoji = window._wpemojiSettings.supports.flag;
148
 
                        replaceEmoji = ! supportsEmoji || ! supportsFlagEmoji;
 
140
                        replaceEmoji = ! settings.supports.simple || ! settings.supports.flag;
149
141
 
150
 
                        if ( ( ! isIE8 && 'loading' === document.readyState ) || ( isIE8 && 'complete' !== document.readyState ) ) {
151
 
                                if ( document.addEventListener ) {
152
 
                                        document.addEventListener( 'readystatechange', onLoad, false );
153
 
                                } else if ( document.attachEvent ) {
154
 
                                        document.attachEvent( 'onreadystatechange', onLoad );
155
 
                                }
 
142
                        if ( settings.DOMReady ) {
 
143
                                load();
156
144
                        } else {
157
 
                                load();
 
145
                                settings.readyCallback = load;
158
146
                        }
159
147
                }
160
148