UNPKG

@atlaskit/editor-confluence-transformer

Version:
107 lines (106 loc) 2.79 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _collapseWhitespace = _interopRequireDefault(require("./collapse-whitespace")); var _utils = require("./utils"); var _encodeCxhtml = require("./encode-cxhtml"); function _default(xhtml) { var nsHtml = "<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:ac=\"".concat(_encodeCxhtml.AC_XMLNS, "\" xmlns:ri=\"").concat(_encodeCxhtml.RI_XMLNS, "\" xmlns:fab=\"").concat(_encodeCxhtml.FAB_XMLNS, "\"><body>").concat(xhtml, "</body></html>"); // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any var parser = new window.DOMParser(); var tree = parser.parseFromString(nsHtml, 'application/xhtml+xml'); // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion (0, _collapseWhitespace.default)(tree.documentElement, isBlock, isPre); return tree; } function isBlock(node) { // these blocks are mainly used to collapse whitespace between the blocks // (preventing spurious text nodes of ' ') switch ((0, _utils.getNodeName)(node)) { case 'ADDRESS': case 'ARTICLE': case 'ASIDE': case 'AUDIO': case 'BLOCKQUOTE': case 'BODY': case 'CANVAS': case 'CENTER': case 'DD': case 'DIR': case 'DIV': case 'DL': case 'DT': case 'FIELDSET': case 'FIGCAPTION': case 'FIGURE': case 'FOOTER': case 'FORM': case 'FRAMESET': case 'H1': case 'H2': case 'H3': case 'H4': case 'H5': case 'H6': case 'HEADER': case 'HGROUP': case 'HR': case 'HTML': case 'ISINDEX': case 'LI': case 'MAIN': case 'MENU': case 'NAV': case 'NOFRAMES': case 'NOSCRIPT': case 'OL': case 'OUTPUT': case 'P': case 'PRE': case 'SECTION': case 'TABLE': case 'TBODY': case 'TD': case 'TFOOT': case 'TH': case 'THEAD': case 'TR': case 'UL': case 'AC:IMAGE': case 'AC:LINK': case 'AC:MACRO': case 'AC:STRUCTURED-MACRO': case 'AC:PLAIN-TEXT-BODY': case 'AC:RICH-TEXT-BODY': case 'AC:PARAMETER': case 'AC:TASK-LIST': case 'AC:TASK': case 'AC:TASK-BODY': case 'AC:TASK-ID': case 'AC:TASK-STATUS': case 'AC:LAYOUT': case 'AC:LAYOUT-SECTION': case 'AC:LAYOUT-CELL': case 'RI:USER': case 'RI:PAGE': case 'RI:URL': case 'RI:ATTACHMENT': case 'FAB:MEDIA-GROUP': case 'FAB:MEDIA-SINGLE': return true; } return false; } function isPre(node) { switch ((0, _utils.getNodeName)(node)) { case 'PRE': case 'AC:PLAIN-TEXT-BODY': return true; } return false; }