UNPKG

1.35 kBJavaScriptView Raw
1/**
2 * Copyright (c) 2013-present, Facebook, Inc.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 */
8
9'use strict';
10
11var adler32 = require('./adler32');
12
13var TAG_END = /\/?>/;
14var COMMENT_START = /^<\!\-\-/;
15
16var ReactMarkupChecksum = {
17 CHECKSUM_ATTR_NAME: 'data-react-checksum',
18
19 /**
20 * @param {string} markup Markup string
21 * @return {string} Markup string with checksum attribute attached
22 */
23 addChecksumToMarkup: function (markup) {
24 var checksum = adler32(markup);
25
26 // Add checksum (handle both parent tags, comments and self-closing tags)
27 if (COMMENT_START.test(markup)) {
28 return markup;
29 } else {
30 return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&');
31 }
32 },
33
34 /**
35 * @param {string} markup to use
36 * @param {DOMElement} element root React element
37 * @returns {boolean} whether or not the markup is the same
38 */
39 canReuseMarkup: function (markup, element) {
40 var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
41 existingChecksum = existingChecksum && parseInt(existingChecksum, 10);
42 var markupChecksum = adler32(markup);
43 return markupChecksum === existingChecksum;
44 }
45};
46
47module.exports = ReactMarkupChecksum;
\No newline at end of file