148 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, '__esModule', {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.printElementAsLeaf = exports.printElement = exports.printComment = exports.printText = exports.printChildren = exports.printProps = 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;
							 |