UNPKG

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