mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-31 17:38:48 +00:00
react app
This commit is contained in:
87
react-app/node_modules/react/lib/setInnerHTML.js
generated
vendored
Normal file
87
react-app/node_modules/react/lib/setInnerHTML.js
generated
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* Copyright 2013-2015, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @providesModule setInnerHTML
|
||||
*/
|
||||
|
||||
/* globals MSApp */
|
||||
|
||||
'use strict';
|
||||
|
||||
var ExecutionEnvironment = require("./ExecutionEnvironment");
|
||||
|
||||
var WHITESPACE_TEST = /^[ \r\n\t\f]/;
|
||||
var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/;
|
||||
|
||||
/**
|
||||
* Set the innerHTML property of a node, ensuring that whitespace is preserved
|
||||
* even in IE8.
|
||||
*
|
||||
* @param {DOMElement} node
|
||||
* @param {string} html
|
||||
* @internal
|
||||
*/
|
||||
var setInnerHTML = function(node, html) {
|
||||
node.innerHTML = html;
|
||||
};
|
||||
|
||||
// Win8 apps: Allow all html to be inserted
|
||||
if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
|
||||
setInnerHTML = function(node, html) {
|
||||
MSApp.execUnsafeLocalFunction(function() {
|
||||
node.innerHTML = html;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
if (ExecutionEnvironment.canUseDOM) {
|
||||
// IE8: When updating a just created node with innerHTML only leading
|
||||
// whitespace is removed. When updating an existing node with innerHTML
|
||||
// whitespace in root TextNodes is also collapsed.
|
||||
// @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
|
||||
|
||||
// Feature detection; only IE8 is known to behave improperly like this.
|
||||
var testElement = document.createElement('div');
|
||||
testElement.innerHTML = ' ';
|
||||
if (testElement.innerHTML === '') {
|
||||
setInnerHTML = function(node, html) {
|
||||
// Magic theory: IE8 supposedly differentiates between added and updated
|
||||
// nodes when processing innerHTML, innerHTML on updated nodes suffers
|
||||
// from worse whitespace behavior. Re-adding a node like this triggers
|
||||
// the initial and more favorable whitespace behavior.
|
||||
// TODO: What to do on a detached node?
|
||||
if (node.parentNode) {
|
||||
node.parentNode.replaceChild(node, node);
|
||||
}
|
||||
|
||||
// We also implement a workaround for non-visible tags disappearing into
|
||||
// thin air on IE8, this only happens if there is no visible text
|
||||
// in-front of the non-visible tags. Piggyback on the whitespace fix
|
||||
// and simply check if any non-visible tags appear in the source.
|
||||
if (WHITESPACE_TEST.test(html) ||
|
||||
html[0] === '<' && NONVISIBLE_TEST.test(html)) {
|
||||
// Recover leading whitespace by temporarily prepending any character.
|
||||
// \uFEFF has the potential advantage of being zero-width/invisible.
|
||||
node.innerHTML = '\uFEFF' + html;
|
||||
|
||||
// deleteData leaves an empty `TextNode` which offsets the index of all
|
||||
// children. Definitely want to avoid this.
|
||||
var textNode = node.firstChild;
|
||||
if (textNode.data.length === 1) {
|
||||
node.removeChild(textNode);
|
||||
} else {
|
||||
textNode.deleteData(0, 1);
|
||||
}
|
||||
} else {
|
||||
node.innerHTML = html;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = setInnerHTML;
|
Reference in New Issue
Block a user