@atlaskit/editor-confluence-transformer
Version:
Editor Confluence Transformer
107 lines (106 loc) • 2.79 kB
JavaScript
;
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;
}