UNPKG

ember-legacy-class-transform

Version:
130 lines (115 loc) 13.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.domChanges = domChanges; exports.treeConstruction = treeConstruction; function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults);for (var i = 0; i < keys.length; i++) { var key = keys[i];var value = Object.getOwnPropertyDescriptor(defaults, key);if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } }return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); }return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } // Patch: Adjacent text node merging fix // Browsers: IE, Edge, Firefox w/o inspector open // Reason: These browsers will merge adjacent text nodes. For exmaple given // <div>Hello</div> with div.insertAdjacentHTML(' world') browsers // with proper behavior will populate div.childNodes with two items. // These browsers will populate it with one merged node instead. // Fix: Add these nodes to a wrapper element, then iterate the childNodes // of that wrapper and move the nodes to their target location. Note // that potential SVG bugs will have been handled before this fix. // Note that this fix must only apply to the previous text node, as // the base implementation of `insertHTMLBefore` already handles // following text nodes correctly. function domChanges(document, DOMChangesClass) { if (!document) return DOMChangesClass; if (!shouldApplyFix(document)) { return DOMChangesClass; } return function (_DOMChangesClass) { _inherits(DOMChangesWithTextNodeMergingFix, _DOMChangesClass); function DOMChangesWithTextNodeMergingFix(document) { _classCallCheck(this, DOMChangesWithTextNodeMergingFix); var _this = _possibleConstructorReturn(this, _DOMChangesClass.call(this, document)); _this.uselessComment = document.createComment(''); return _this; } DOMChangesWithTextNodeMergingFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, nextSibling, html) { if (html === null) { return _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); } var didSetUselessComment = false; var nextPrevious = nextSibling ? nextSibling.previousSibling : parent.lastChild; if (nextPrevious && nextPrevious instanceof Text) { didSetUselessComment = true; parent.insertBefore(this.uselessComment, nextSibling); } var bounds = _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); if (didSetUselessComment) { parent.removeChild(this.uselessComment); } return bounds; }; return DOMChangesWithTextNodeMergingFix; }(DOMChangesClass); } function treeConstruction(document, TreeConstructionClass) { if (!document) return TreeConstructionClass; if (!shouldApplyFix(document)) { return TreeConstructionClass; } return function (_TreeConstructionClas) { _inherits(TreeConstructionWithTextNodeMergingFix, _TreeConstructionClas); function TreeConstructionWithTextNodeMergingFix(document) { _classCallCheck(this, TreeConstructionWithTextNodeMergingFix); var _this2 = _possibleConstructorReturn(this, _TreeConstructionClas.call(this, document)); _this2.uselessComment = _this2.createComment(''); return _this2; } TreeConstructionWithTextNodeMergingFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, reference, html) { if (html === null) { return _TreeConstructionClas.prototype.insertHTMLBefore.call(this, parent, reference, html); } var didSetUselessComment = false; var nextPrevious = reference ? reference.previousSibling : parent.lastChild; if (nextPrevious && nextPrevious instanceof Text) { didSetUselessComment = true; parent.insertBefore(this.uselessComment, reference); } var bounds = _TreeConstructionClas.prototype.insertHTMLBefore.call(this, parent, reference, html); if (didSetUselessComment) { parent.removeChild(this.uselessComment); } return bounds; }; return TreeConstructionWithTextNodeMergingFix; }(TreeConstructionClass); } function shouldApplyFix(document) { var mergingTextDiv = document.createElement('div'); mergingTextDiv.innerHTML = 'first'; mergingTextDiv.insertAdjacentHTML('beforeend', 'second'); if (mergingTextDiv.childNodes.length === 2) { // It worked as expected, no fix required return false; } return true; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21wYXQvdGV4dC1ub2RlLW1lcmdpbmctZml4LmpzIl0sIm5hbWVzIjpbImRvbUNoYW5nZXMiLCJkb2N1bWVudCIsIkRPTUNoYW5nZXNDbGFzcyIsInNob3VsZEFwcGx5Rml4IiwidXNlbGVzc0NvbW1lbnQiLCJjcmVhdGVDb21tZW50IiwiaW5zZXJ0SFRNTEJlZm9yZSIsInBhcmVudCIsIm5leHRTaWJsaW5nIiwiaHRtbCIsImRpZFNldFVzZWxlc3NDb21tZW50IiwibmV4dFByZXZpb3VzIiwicHJldmlvdXNTaWJsaW5nIiwibGFzdENoaWxkIiwiVGV4dCIsImluc2VydEJlZm9yZSIsImJvdW5kcyIsInJlbW92ZUNoaWxkIiwidHJlZUNvbnN0cnVjdGlvbiIsIlRyZWVDb25zdHJ1Y3Rpb25DbGFzcyIsInJlZmVyZW5jZSIsIm1lcmdpbmdUZXh0RGl2IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsImluc2VydEFkamFjZW50SFRNTCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiI7Ozs7O1FBWU8sQUFBUztRQTRCVCxBQUFTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF4Q2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUNBO0FBQU8sb0JBQUEsQUFBb0IsVUFBcEIsQUFBOEIsaUJBQWlCLEFBQ2xEO1FBQUksQ0FBSixBQUFLLFVBQVUsT0FBQSxBQUFPLEFBQ3RCO1FBQUksQ0FBQyxlQUFMLEFBQUssQUFBZSxXQUFXLEFBQzNCO2VBQUEsQUFBTyxBQUNWO0FBQ0Q7dUNBQUE7b0RBQ0k7O2tEQUFBLEFBQVksVUFBVTtrQ0FBQTs7eURBQ2xCLDRCQURrQixBQUNsQixBQUFNLEFBQ047O2tCQUFBLEFBQUssaUJBQWlCLFNBQUEsQUFBUyxjQUZiLEFBRWxCLEFBQXNCLEFBQXVCO21CQUNoRDtBQUpMOzttREFBQSxBQUtJLDZDQUxKLEFBS3FCLFFBTHJCLEFBSzZCLGFBTDdCLEFBSzBDLE1BQU0sQUFDeEM7Z0JBQUksU0FBSixBQUFhLE1BQU0sQUFDZjt1QkFBTywyQkFBQSxBQUFNLDRCQUFOLEFBQXVCLFFBQXZCLEFBQStCLGFBQXRDLEFBQU8sQUFBNEMsQUFDdEQ7QUFDRDtnQkFBSSx1QkFBSixBQUEyQixBQUMzQjtnQkFBSSxlQUFlLGNBQWMsWUFBZCxBQUEwQixrQkFBa0IsT0FBL0QsQUFBc0UsQUFDdEU7Z0JBQUksZ0JBQWdCLHdCQUFwQixBQUE0QyxNQUFNLEFBQzlDO3VDQUFBLEFBQXVCLEFBQ3ZCO3VCQUFBLEFBQU8sYUFBYSxLQUFwQixBQUF5QixnQkFBekIsQUFBeUMsQUFDNUM7QUFDRDtnQkFBSSxTQUFTLDJCQUFBLEFBQU0sNEJBQU4sQUFBdUIsUUFBdkIsQUFBK0IsYUFBNUMsQUFBYSxBQUE0QyxBQUN6RDtnQkFBQSxBQUFJLHNCQUFzQixBQUN0Qjt1QkFBQSxBQUFPLFlBQVksS0FBbkIsQUFBd0IsQUFDM0I7QUFDRDttQkFBQSxBQUFPLEFBQ1Y7QUFwQkw7O2VBQUE7TUFBQSxBQUFzRCxBQXNCekQ7QUFDRDtBQUFPLDBCQUFBLEFBQTBCLFVBQTFCLEFBQW9DLHVCQUF1QixBQUM5RDtRQUFJLENBQUosQUFBSyxVQUFVLE9BQUEsQUFBTyxBQUN0QjtRQUFJLENBQUMsZUFBTCxBQUFLLEFBQWUsV0FBVyxBQUMzQjtlQUFBLEFBQU8sQUFDVjtBQUNEOzRDQUFBOzBEQUNJOzt3REFBQSxBQUFZLFVBQVU7a0NBQUE7OzBEQUNsQixpQ0FEa0IsQUFDbEIsQUFBTSxBQUNOOzttQkFBQSxBQUFLLGlCQUFpQixPQUFBLEFBQUssY0FGVCxBQUVsQixBQUFzQixBQUFtQjttQkFDNUM7QUFKTDs7eURBQUEsQUFLSSw2Q0FMSixBQUtxQixRQUxyQixBQUs2QixXQUw3QixBQUt3QyxNQUFNLEFBQ3RDO2dCQUFJLFNBQUosQUFBYSxNQUFNLEFBQ2Y7dUJBQU8sZ0NBQUEsQUFBTSw0QkFBTixBQUF1QixRQUF2QixBQUErQixXQUF0QyxBQUFPLEFBQTBDLEFBQ3BEO0FBQ0Q7Z0JBQUksdUJBQUosQUFBMkIsQUFDM0I7Z0JBQUksZUFBZSxZQUFZLFVBQVosQUFBc0Isa0JBQWtCLE9BQTNELEFBQWtFLEFBQ2xFO2dCQUFJLGdCQUFnQix3QkFBcEIsQUFBNEMsTUFBTSxBQUM5Qzt1Q0FBQSxBQUF1QixBQUN2Qjt1QkFBQSxBQUFPLGFBQWEsS0FBcEIsQUFBeUIsZ0JBQXpCLEFBQXlDLEFBQzVDO0FBQ0Q7Z0JBQUksU0FBUyxnQ0FBQSxBQUFNLDRCQUFOLEFBQXVCLFFBQXZCLEFBQStCLFdBQTVDLEFBQWEsQUFBMEMsQUFDdkQ7Z0JBQUEsQUFBSSxzQkFBc0IsQUFDdEI7dUJBQUEsQUFBTyxZQUFZLEtBQW5CLEFBQXdCLEFBQzNCO0FBQ0Q7bUJBQUEsQUFBTyxBQUNWO0FBcEJMOztlQUFBO01BQUEsQUFBNEQsQUFzQi9EOztBQUNELFNBQUEsQUFBUyxlQUFULEFBQXdCLFVBQVUsQUFDOUI7UUFBSSxpQkFBaUIsU0FBQSxBQUFTLGNBQTlCLEFBQXFCLEFBQXVCLEFBQzVDO21CQUFBLEFBQWUsWUFBZixBQUEyQixBQUMzQjttQkFBQSxBQUFlLG1CQUFmLEFBQWtDLGFBQWxDLEFBQStDLEFBQy9DO1FBQUksZUFBQSxBQUFlLFdBQWYsQUFBMEIsV0FBOUIsQUFBeUMsR0FBRyxBQUN4QztBQUNBO2VBQUEsQUFBTyxBQUNWO0FBQ0Q7V0FBQSxBQUFPLEFBQ1YiLCJmaWxlIjoibGliL2NvbXBhdC90ZXh0LW5vZGUtbWVyZ2luZy1maXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQYXRjaDogICAgQWRqYWNlbnQgdGV4dCBub2RlIG1lcmdpbmcgZml4XG4vLyBCcm93c2VyczogSUUsIEVkZ2UsIEZpcmVmb3ggdy9vIGluc3BlY3RvciBvcGVuXG4vLyBSZWFzb246ICAgVGhlc2UgYnJvd3NlcnMgd2lsbCBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzLiBGb3IgZXhtYXBsZSBnaXZlblxuLy8gICAgICAgICAgIDxkaXY+SGVsbG88L2Rpdj4gd2l0aCBkaXYuaW5zZXJ0QWRqYWNlbnRIVE1MKCcgd29ybGQnKSBicm93c2Vyc1xuLy8gICAgICAgICAgIHdpdGggcHJvcGVyIGJlaGF2aW9yIHdpbGwgcG9wdWxhdGUgZGl2LmNoaWxkTm9kZXMgd2l0aCB0d28gaXRlbXMuXG4vLyAgICAgICAgICAgVGhlc2UgYnJvd3NlcnMgd2lsbCBwb3B1bGF0ZSBpdCB3aXRoIG9uZSBtZXJnZWQgbm9kZSBpbnN0ZWFkLlxuLy8gRml4OiAgICAgIEFkZCB0aGVzZSBub2RlcyB0byBhIHdyYXBwZXIgZWxlbWVudCwgdGhlbiBpdGVyYXRlIHRoZSBjaGlsZE5vZGVzXG4vLyAgICAgICAgICAgb2YgdGhhdCB3cmFwcGVyIGFuZCBtb3ZlIHRoZSBub2RlcyB0byB0aGVpciB0YXJnZXQgbG9jYXRpb24uIE5vdGVcbi8vICAgICAgICAgICB0aGF0IHBvdGVudGlhbCBTVkcgYnVncyB3aWxsIGhhdmUgYmVlbiBoYW5kbGVkIGJlZm9yZSB0aGlzIGZpeC5cbi8vICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBmaXggbXVzdCBvbmx5IGFwcGx5IHRvIHRoZSBwcmV2aW91cyB0ZXh0IG5vZGUsIGFzXG4vLyAgICAgICAgICAgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGluc2VydEhUTUxCZWZvcmVgIGFscmVhZHkgaGFuZGxlc1xuLy8gICAgICAgICAgIGZvbGxvd2luZyB0ZXh0IG5vZGVzIGNvcnJlY3RseS5cbmV4cG9ydCBmdW5jdGlvbiBkb21DaGFuZ2VzKGRvY3VtZW50LCBET01DaGFuZ2VzQ2xhc3MpIHtcbiAgICBpZiAoIWRvY3VtZW50KSByZXR1cm4gRE9NQ2hhbmdlc0NsYXNzO1xuICAgIGlmICghc2hvdWxkQXBwbHlGaXgoZG9jdW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBET01DaGFuZ2VzQ2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBjbGFzcyBET01DaGFuZ2VzV2l0aFRleHROb2RlTWVyZ2luZ0ZpeCBleHRlbmRzIERPTUNoYW5nZXNDbGFzcyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50KSB7XG4gICAgICAgICAgICBzdXBlcihkb2N1bWVudCk7XG4gICAgICAgICAgICB0aGlzLnVzZWxlc3NDb21tZW50ID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQsIG5leHRTaWJsaW5nLCBodG1sKSB7XG4gICAgICAgICAgICBpZiAoaHRtbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgbmV4dFNpYmxpbmcsIGh0bWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGRpZFNldFVzZWxlc3NDb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgbmV4dFByZXZpb3VzID0gbmV4dFNpYmxpbmcgPyBuZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmcgOiBwYXJlbnQubGFzdENoaWxkO1xuICAgICAgICAgICAgaWYgKG5leHRQcmV2aW91cyAmJiBuZXh0UHJldmlvdXMgaW5zdGFuY2VvZiBUZXh0KSB7XG4gICAgICAgICAgICAgICAgZGlkU2V0VXNlbGVzc0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGhpcy51c2VsZXNzQ29tbWVudCwgbmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGJvdW5kcyA9IHN1cGVyLmluc2VydEhUTUxCZWZvcmUocGFyZW50LCBuZXh0U2libGluZywgaHRtbCk7XG4gICAgICAgICAgICBpZiAoZGlkU2V0VXNlbGVzc0NvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy51c2VsZXNzQ29tbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm91bmRzO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmVlQ29uc3RydWN0aW9uKGRvY3VtZW50LCBUcmVlQ29uc3RydWN0aW9uQ2xhc3MpIHtcbiAgICBpZiAoIWRvY3VtZW50KSByZXR1cm4gVHJlZUNvbnN0cnVjdGlvbkNsYXNzO1xuICAgIGlmICghc2hvdWxkQXBwbHlGaXgoZG9jdW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBUcmVlQ29uc3RydWN0aW9uQ2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBjbGFzcyBUcmVlQ29uc3RydWN0aW9uV2l0aFRleHROb2RlTWVyZ2luZ0ZpeCBleHRlbmRzIFRyZWVDb25zdHJ1Y3Rpb25DbGFzcyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50KSB7XG4gICAgICAgICAgICBzdXBlcihkb2N1bWVudCk7XG4gICAgICAgICAgICB0aGlzLnVzZWxlc3NDb21tZW50ID0gdGhpcy5jcmVhdGVDb21tZW50KCcnKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgcmVmZXJlbmNlLCBodG1sKSB7XG4gICAgICAgICAgICBpZiAoaHRtbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgcmVmZXJlbmNlLCBodG1sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkaWRTZXRVc2VsZXNzQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IG5leHRQcmV2aW91cyA9IHJlZmVyZW5jZSA/IHJlZmVyZW5jZS5wcmV2aW91c1NpYmxpbmcgOiBwYXJlbnQubGFzdENoaWxkO1xuICAgICAgICAgICAgaWYgKG5leHRQcmV2aW91cyAmJiBuZXh0UHJldmlvdXMgaW5zdGFuY2VvZiBUZXh0KSB7XG4gICAgICAgICAgICAgICAgZGlkU2V0VXNlbGVzc0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGhpcy51c2VsZXNzQ29tbWVudCwgcmVmZXJlbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBib3VuZHMgPSBzdXBlci5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgcmVmZXJlbmNlLCBodG1sKTtcbiAgICAgICAgICAgIGlmIChkaWRTZXRVc2VsZXNzQ29tbWVudCkge1xuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLnVzZWxlc3NDb21tZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBib3VuZHM7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gc2hvdWxkQXBwbHlGaXgoZG9jdW1lbnQpIHtcbiAgICBsZXQgbWVyZ2luZ1RleHREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBtZXJnaW5nVGV4dERpdi5pbm5lckhUTUwgPSAnZmlyc3QnO1xuICAgIG1lcmdpbmdUZXh0RGl2Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgJ3NlY29uZCcpO1xuICAgIGlmIChtZXJnaW5nVGV4dERpdi5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBJdCB3b3JrZWQgYXMgZXhwZWN0ZWQsIG5vIGZpeCByZXF1aXJlZFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufSJdfQ==