You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
3.6 KiB
153 lines
3.6 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.printText = |
|
exports.printProps = |
|
exports.printElementAsLeaf = |
|
exports.printElement = |
|
exports.printComment = |
|
exports.printChildren = |
|
void 0; |
|
|
|
var _escapeHTML = _interopRequireDefault(require('./escapeHTML')); |
|
|
|
function _interopRequireDefault(obj) { |
|
return obj && obj.__esModule ? obj : {default: obj}; |
|
} |
|
|
|
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
// Return empty string if keys is empty. |
|
const printProps = (keys, props, config, indentation, depth, refs, printer) => { |
|
const indentationNext = indentation + config.indent; |
|
const colors = config.colors; |
|
return keys |
|
.map(key => { |
|
const value = props[key]; |
|
let printed = printer(value, config, indentationNext, depth, refs); |
|
|
|
if (typeof value !== 'string') { |
|
if (printed.indexOf('\n') !== -1) { |
|
printed = |
|
config.spacingOuter + |
|
indentationNext + |
|
printed + |
|
config.spacingOuter + |
|
indentation; |
|
} |
|
|
|
printed = '{' + printed + '}'; |
|
} |
|
|
|
return ( |
|
config.spacingInner + |
|
indentation + |
|
colors.prop.open + |
|
key + |
|
colors.prop.close + |
|
'=' + |
|
colors.value.open + |
|
printed + |
|
colors.value.close |
|
); |
|
}) |
|
.join(''); |
|
}; // Return empty string if children is empty. |
|
|
|
exports.printProps = printProps; |
|
|
|
const printChildren = (children, config, indentation, depth, refs, printer) => |
|
children |
|
.map( |
|
child => |
|
config.spacingOuter + |
|
indentation + |
|
(typeof child === 'string' |
|
? printText(child, config) |
|
: printer(child, config, indentation, depth, refs)) |
|
) |
|
.join(''); |
|
|
|
exports.printChildren = printChildren; |
|
|
|
const printText = (text, config) => { |
|
const contentColor = config.colors.content; |
|
return ( |
|
contentColor.open + (0, _escapeHTML.default)(text) + contentColor.close |
|
); |
|
}; |
|
|
|
exports.printText = printText; |
|
|
|
const printComment = (comment, config) => { |
|
const commentColor = config.colors.comment; |
|
return ( |
|
commentColor.open + |
|
'<!--' + |
|
(0, _escapeHTML.default)(comment) + |
|
'-->' + |
|
commentColor.close |
|
); |
|
}; // Separate the functions to format props, children, and element, |
|
// so a plugin could override a particular function, if needed. |
|
// Too bad, so sad: the traditional (but unnecessary) space |
|
// in a self-closing tagColor requires a second test of printedProps. |
|
|
|
exports.printComment = printComment; |
|
|
|
const printElement = ( |
|
type, |
|
printedProps, |
|
printedChildren, |
|
config, |
|
indentation |
|
) => { |
|
const tagColor = config.colors.tag; |
|
return ( |
|
tagColor.open + |
|
'<' + |
|
type + |
|
(printedProps && |
|
tagColor.close + |
|
printedProps + |
|
config.spacingOuter + |
|
indentation + |
|
tagColor.open) + |
|
(printedChildren |
|
? '>' + |
|
tagColor.close + |
|
printedChildren + |
|
config.spacingOuter + |
|
indentation + |
|
tagColor.open + |
|
'</' + |
|
type |
|
: (printedProps && !config.min ? '' : ' ') + '/') + |
|
'>' + |
|
tagColor.close |
|
); |
|
}; |
|
|
|
exports.printElement = printElement; |
|
|
|
const printElementAsLeaf = (type, config) => { |
|
const tagColor = config.colors.tag; |
|
return ( |
|
tagColor.open + |
|
'<' + |
|
type + |
|
tagColor.close + |
|
' …' + |
|
tagColor.open + |
|
' />' + |
|
tagColor.close |
|
); |
|
}; |
|
|
|
exports.printElementAsLeaf = printElementAsLeaf;
|
|
|