ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
130 lines (115 loc) • 13.9 kB
JavaScript
;
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==