UNPKG

ember-legacy-class-transform

Version:
112 lines (98 loc) 14.8 kB
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); } import { ConcreteBounds } from '../bounds'; import { moveNodesBefore } from '../dom/helper'; var innerHTMLWrapper = { colgroup: { depth: 2, before: '<table><colgroup>', after: '</colgroup></table>' }, table: { depth: 1, before: '<table>', after: '</table>' }, tbody: { depth: 2, before: '<table><tbody>', after: '</tbody></table>' }, tfoot: { depth: 2, before: '<table><tfoot>', after: '</tfoot></table>' }, thead: { depth: 2, before: '<table><thead>', after: '</thead></table>' }, tr: { depth: 3, before: '<table><tbody><tr>', after: '</tr></tbody></table>' } }; // Patch: innerHTML Fix // Browsers: IE9 // Reason: IE9 don't allow us to set innerHTML on col, colgroup, frameset, // html, style, table, tbody, tfoot, thead, title, tr. // Fix: Wrap the innerHTML we are about to set in its parents, apply the // wrapped innerHTML on a div, then move the unwrapped nodes into the // target position. export function domChanges(document, DOMChangesClass) { if (!document) return DOMChangesClass; if (!shouldApplyFix(document)) { return DOMChangesClass; } var div = document.createElement('div'); return function (_DOMChangesClass) { _inherits(DOMChangesWithInnerHTMLFix, _DOMChangesClass); function DOMChangesWithInnerHTMLFix() { _classCallCheck(this, DOMChangesWithInnerHTMLFix); return _possibleConstructorReturn(this, _DOMChangesClass.apply(this, arguments)); } DOMChangesWithInnerHTMLFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, nextSibling, html) { if (html === null || html === '') { return _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); } var parentTag = parent.tagName.toLowerCase(); var wrapper = innerHTMLWrapper[parentTag]; if (wrapper === undefined) { return _DOMChangesClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html); } return fixInnerHTML(parent, wrapper, div, html, nextSibling); }; return DOMChangesWithInnerHTMLFix; }(DOMChangesClass); } export function treeConstruction(document, DOMTreeConstructionClass) { if (!document) return DOMTreeConstructionClass; if (!shouldApplyFix(document)) { return DOMTreeConstructionClass; } var div = document.createElement('div'); return function (_DOMTreeConstructionC) { _inherits(DOMTreeConstructionWithInnerHTMLFix, _DOMTreeConstructionC); function DOMTreeConstructionWithInnerHTMLFix() { _classCallCheck(this, DOMTreeConstructionWithInnerHTMLFix); return _possibleConstructorReturn(this, _DOMTreeConstructionC.apply(this, arguments)); } DOMTreeConstructionWithInnerHTMLFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, referenceNode, html) { if (html === null || html === '') { return _DOMTreeConstructionC.prototype.insertHTMLBefore.call(this, parent, referenceNode, html); } var parentTag = parent.tagName.toLowerCase(); var wrapper = innerHTMLWrapper[parentTag]; if (wrapper === undefined) { return _DOMTreeConstructionC.prototype.insertHTMLBefore.call(this, parent, referenceNode, html); } return fixInnerHTML(parent, wrapper, div, html, referenceNode); }; return DOMTreeConstructionWithInnerHTMLFix; }(DOMTreeConstructionClass); } function fixInnerHTML(parent, wrapper, div, html, reference) { var wrappedHtml = wrapper.before + html + wrapper.after; div.innerHTML = wrappedHtml; var parentNode = div; for (var i = 0; i < wrapper.depth; i++) { parentNode = parentNode.childNodes[0]; } var _moveNodesBefore = moveNodesBefore(parentNode, parent, reference), first = _moveNodesBefore[0], last = _moveNodesBefore[1]; return new ConcreteBounds(parent, first, last); } function shouldApplyFix(document) { var table = document.createElement('table'); try { table.innerHTML = '<tbody></tbody>'; } catch (e) {} finally { if (table.childNodes.length !== 0) { // It worked as expected, no fix required return false; } } return true; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21wYXQvaW5uZXItaHRtbC1maXguanMiXSwibmFtZXMiOlsiQ29uY3JldGVCb3VuZHMiLCJtb3ZlTm9kZXNCZWZvcmUiLCJpbm5lckhUTUxXcmFwcGVyIiwiY29sZ3JvdXAiLCJkZXB0aCIsImJlZm9yZSIsImFmdGVyIiwidGFibGUiLCJ0Ym9keSIsInRmb290IiwidGhlYWQiLCJ0ciIsImRvbUNoYW5nZXMiLCJkb2N1bWVudCIsIkRPTUNoYW5nZXNDbGFzcyIsInNob3VsZEFwcGx5Rml4IiwiZGl2IiwiY3JlYXRlRWxlbWVudCIsImluc2VydEhUTUxCZWZvcmUiLCJwYXJlbnQiLCJuZXh0U2libGluZyIsImh0bWwiLCJwYXJlbnRUYWciLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJ3cmFwcGVyIiwidW5kZWZpbmVkIiwiZml4SW5uZXJIVE1MIiwidHJlZUNvbnN0cnVjdGlvbiIsIkRPTVRyZWVDb25zdHJ1Y3Rpb25DbGFzcyIsInJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2UiLCJ3cmFwcGVkSHRtbCIsImlubmVySFRNTCIsInBhcmVudE5vZGUiLCJpIiwiY2hpbGROb2RlcyIsImZpcnN0IiwibGFzdCIsImUiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsU0FBU0EsY0FBVCxRQUErQixXQUEvQjtBQUNBLFNBQVNDLGVBQVQsUUFBZ0MsZUFBaEM7QUFDQSxJQUFJQyxtQkFBbUI7QUFDbkJDLGNBQVUsRUFBRUMsT0FBTyxDQUFULEVBQVlDLFFBQVEsbUJBQXBCLEVBQXlDQyxPQUFPLHFCQUFoRCxFQURTO0FBRW5CQyxXQUFPLEVBQUVILE9BQU8sQ0FBVCxFQUFZQyxRQUFRLFNBQXBCLEVBQStCQyxPQUFPLFVBQXRDLEVBRlk7QUFHbkJFLFdBQU8sRUFBRUosT0FBTyxDQUFULEVBQVlDLFFBQVEsZ0JBQXBCLEVBQXNDQyxPQUFPLGtCQUE3QyxFQUhZO0FBSW5CRyxXQUFPLEVBQUVMLE9BQU8sQ0FBVCxFQUFZQyxRQUFRLGdCQUFw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QVFuQixLQUFsRDtBQUNBVSxRQUFJaUIsU0FBSixHQUFnQkQsV0FBaEI7QUFDQSxRQUFJRSxhQUFhbEIsR0FBakI7QUFDQSxTQUFLLElBQUltQixJQUFJLENBQWIsRUFBZ0JBLElBQUlWLFFBQVFyQixLQUE1QixFQUFtQytCLEdBQW5DLEVBQXdDO0FBQ3BDRCxxQkFBYUEsV0FBV0UsVUFBWCxDQUFzQixDQUF0QixDQUFiO0FBQ0g7O0FBTndELDJCQU9yQ25DLGdCQUFnQmlDLFVBQWhCLEVBQTRCZixNQUE1QixFQUFvQ1ksU0FBcEMsQ0FQcUM7QUFBQSxRQU9wRE0sS0FQb0Q7QUFBQSxRQU83Q0MsSUFQNkM7O0FBUXpELFdBQU8sSUFBSXRDLGNBQUosQ0FBbUJtQixNQUFuQixFQUEyQmtCLEtBQTNCLEVBQWtDQyxJQUFsQyxDQUFQO0FBQ0g7QUFDRCxTQUFTdkIsY0FBVCxDQUF3QkYsUUFBeEIsRUFBa0M7QUFDOUIsUUFBSU4sUUFBUU0sU0FBU0ksYUFBVCxDQUF1QixPQUF2QixDQUFaO0FBQ0EsUUFBSTtBQUNBVixjQUFNMEIsU0FBTixHQUFrQixpQkFBbEI7QUFDSCxLQUZELENBRUUsT0FBT00sQ0FBUCxFQUFVLENBQUUsQ0FGZCxTQUV1QjtBQUNuQixZQUFJaEMsTUFBTTZCLFVBQU4sQ0FBaUJJLE1BQWpCLEtBQTRCLENBQWhDLEVBQW1DO0FBQy9CO0FBQ0EsbUJBQU8sS0FBUDtBQUNIO0FBQ0o7QUFDRCxXQUFPLElBQVA7QUFDSCIsImZpbGUiOiJsaWIvY29tcGF0L2lubmVyLWh0bWwtZml4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uY3JldGVCb3VuZHMgfSBmcm9tICcuLi9ib3VuZHMnO1xuaW1wb3J0IHsgbW92ZU5vZGVzQmVmb3JlIH0gZnJvbSAnLi4vZG9tL2hlbHBlcic7XG5sZXQgaW5uZXJIVE1MV3JhcHBlciA9IHtcbiAgICBjb2xncm91cDogeyBkZXB0aDogMiwgYmVmb3JlOiAnPHRhYmxlPjxjb2xncm91cD4nLCBhZnRlcjogJzwvY29sZ3JvdXA+PC90YWJsZT4nIH0sXG4gICAgdGFibGU6IHsgZGVwdGg6IDEsIGJlZm9yZTogJzx0YWJsZT4nLCBhZnRlcjogJzwvdGFibGU+JyB9LFxuICAgIHRib2R5OiB7IGRlcHRoOiAyLCBiZWZvcmU6ICc8dGFibGU+PHRib2R5PicsIGFmdGVyOiAnPC90Ym9keT48L3RhYmxlPicgfSxcbiAgICB0Zm9vdDogeyBkZXB0aDogMiwgYmVmb3JlOiAnPHRhYmxlPjx0Zm9vdD4nLCBhZnRlcjogJzwvdGZvb3Q+PC90YWJsZT4nIH0sXG4gICAgdGhlYWQ6IHsgZGVwdGg6IDIsIGJlZm9yZTogJzx0YWJsZT48dGhlYWQ+JywgYWZ0ZXI6ICc8L3RoZWFkPjwvdGFibGU+JyB9LFxuICAgIHRyOiB7IGRlcHRoOiAzLCBiZWZvcmU6ICc8dGFibGU+PHRib2R5Pjx0cj4nLCBhZnRlcjogJzwvdHI+PC90Ym9keT48L3RhYmxlPicgfVxufTtcbi8vIFBhdGNoOiAgICBpbm5lckhUTUwgRml4XG4vLyBCcm93c2VyczogSUU5XG4vLyBSZWFzb246ICAgSUU5IGRvbid0IGFsbG93IHVzIHRvIHNldCBpbm5lckhUTUwgb24gY29sLCBjb2xncm91cCwgZnJhbWVzZXQsXG4vLyAgICAgICAgICAgaHRtbCwgc3R5bGUsIHRhYmxlLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0aXRsZSwgdHIuXG4vLyBGaXg6ICAgICAgV3JhcCB0aGUgaW5uZXJIVE1MIHdlIGFyZSBhYm91dCB0byBzZXQgaW4gaXRzIHBhcmVudHMsIGFwcGx5IHRoZVxuLy8gICAgICAgICAgIHdyYXBwZWQgaW5uZXJIVE1MIG9uIGEgZGl2LCB0aGVuIG1vdmUgdGhlIHVud3JhcHBlZCBub2RlcyBpbnRvIHRoZVxuLy8gICAgICAgICAgIHRhcmdldCBwb3NpdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBkb21DaGFuZ2VzKGRvY3VtZW50LCBET01DaGFuZ2VzQ2xhc3MpIHtcbiAgICBpZiAoIWRvY3VtZW50KSByZXR1cm4gRE9NQ2hhbmdlc0NsYXNzO1xuICAgIGlmICghc2hvdWxkQXBwbHlGaXgoZG9jdW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBET01DaGFuZ2VzQ2xhc3M7XG4gICAgfVxuICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICByZXR1cm4gY2xhc3MgRE9NQ2hhbmdlc1dpdGhJbm5lckhUTUxGaXggZXh0ZW5kcyBET01DaGFuZ2VzQ2xhc3Mge1xuICAgICAgICBpbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgbmV4dFNpYmxpbmcsIGh0bWwpIHtcbiAgICAgICAgICAgIGlmIChodG1sID09PSBudWxsIHx8IGh0bWwgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmluc2VydEhUTUxCZWZvcmUocGFyZW50LCBuZXh0U2libGluZywgaHRtbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGFyZW50VGFnID0gcGFyZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGxldCB3cmFwcGVyID0gaW5uZXJIVE1MV3JhcHBlcltwYXJlbnRUYWddO1xuICAgICAgICAgICAgaWYgKHdyYXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5pbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgbmV4dFNpYmxpbmcsIGh0bWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpeElubmVySFRNTChwYXJlbnQsIHdyYXBwZXIsIGRpdiwgaHRtbCwgbmV4dFNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmVlQ29uc3RydWN0aW9uKGRvY3VtZW50LCBET01UcmVlQ29uc3RydWN0aW9uQ2xhc3MpIHtcbiAgICBpZiAoIWRvY3VtZW50KSByZXR1cm4gRE9NVHJlZUNvbnN0cnVjdGlvbkNsYXNzO1xuICAgIGlmICghc2hvdWxkQXBwbHlGaXgoZG9jdW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBET01UcmVlQ29uc3RydWN0aW9uQ2xhc3M7XG4gICAgfVxuICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICByZXR1cm4gY2xhc3MgRE9NVHJlZUNvbnN0cnVjdGlvbldpdGhJbm5lckhUTUxGaXggZXh0ZW5kcyBET01UcmVlQ29uc3RydWN0aW9uQ2xhc3Mge1xuICAgICAgICBpbnNlcnRIVE1MQmVmb3JlKHBhcmVudCwgcmVmZXJlbmNlTm9kZSwgaHRtbCkge1xuICAgICAgICAgICAgaWYgKGh0bWwgPT09IG51bGwgfHwgaHRtbCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQsIHJlZmVyZW5jZU5vZGUsIGh0bWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHBhcmVudFRhZyA9IHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBsZXQgd3JhcHBlciA9IGlubmVySFRNTFdyYXBwZXJbcGFyZW50VGFnXTtcbiAgICAgICAgICAgIGlmICh3cmFwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuaW5zZXJ0SFRNTEJlZm9yZShwYXJlbnQsIHJlZmVyZW5jZU5vZGUsIGh0bWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpeElubmVySFRNTChwYXJlbnQsIHdyYXBwZXIsIGRpdiwgaHRtbCwgcmVmZXJlbmNlTm9kZSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gZml4SW5uZXJIVE1MKHBhcmVudCwgd3JhcHBlciwgZGl2LCBodG1sLCByZWZlcmVuY2UpIHtcbiAgICBsZXQgd3JhcHBlZEh0bWwgPSB3cmFwcGVyLmJlZm9yZSArIGh0bWwgKyB3cmFwcGVyLmFmdGVyO1xuICAgIGRpdi5pbm5lckhUTUwgPSB3cmFwcGVkSHRtbDtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IGRpdjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdyYXBwZXIuZGVwdGg7IGkrKykge1xuICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgIH1cbiAgICBsZXQgW2ZpcnN0LCBsYXN0XSA9IG1vdmVOb2Rlc0JlZm9yZShwYXJlbnROb2RlLCBwYXJlbnQsIHJlZmVyZW5jZSk7XG4gICAgcmV0dXJuIG5ldyBDb25jcmV0ZUJvdW5kcyhwYXJlbnQsIGZpcnN0LCBsYXN0KTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFwcGx5Rml4KGRvY3VtZW50KSB7XG4gICAgbGV0IHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcbiAgICB0cnkge1xuICAgICAgICB0YWJsZS5pbm5lckhUTUwgPSAnPHRib2R5PjwvdGJvZHk+JztcbiAgICB9IGNhdGNoIChlKSB7fSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRhYmxlLmNoaWxkTm9kZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBJdCB3b3JrZWQgYXMgZXhwZWN0ZWQsIG5vIGZpeCByZXF1aXJlZFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufSJdfQ==