[d24f17c] | 1 | import _extends from "@babel/runtime/helpers/extends";
|
---|
| 2 | import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
---|
| 3 |
|
---|
| 4 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
---|
| 5 |
|
---|
| 6 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
---|
| 7 |
|
---|
| 8 | import React from 'react'; // Get all possible permutations of all power sets
|
---|
| 9 | //
|
---|
| 10 | // Super simple, non-algorithmic solution since the
|
---|
| 11 | // number of class names will not be greater than 4
|
---|
| 12 |
|
---|
| 13 | function powerSetPermutations(arr) {
|
---|
| 14 | var arrLength = arr.length;
|
---|
| 15 | if (arrLength === 0 || arrLength === 1) return arr;
|
---|
| 16 |
|
---|
| 17 | if (arrLength === 2) {
|
---|
| 18 | // prettier-ignore
|
---|
| 19 | return [arr[0], arr[1], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0])];
|
---|
| 20 | }
|
---|
| 21 |
|
---|
| 22 | if (arrLength === 3) {
|
---|
| 23 | return [arr[0], arr[1], arr[2], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2]), "".concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0])];
|
---|
| 24 | }
|
---|
| 25 |
|
---|
| 26 | if (arrLength >= 4) {
|
---|
| 27 | // Currently does not support more than 4 extra
|
---|
| 28 | // class names (after `.token` has been removed)
|
---|
| 29 | return [arr[0], arr[1], arr[2], arr[3], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[3]), "".concat(arr[3], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[1], ".").concat(arr[0])];
|
---|
| 30 | }
|
---|
| 31 | }
|
---|
| 32 |
|
---|
| 33 | var classNameCombinations = {};
|
---|
| 34 |
|
---|
| 35 | function getClassNameCombinations(classNames) {
|
---|
| 36 | if (classNames.length === 0 || classNames.length === 1) return classNames;
|
---|
| 37 | var key = classNames.join('.');
|
---|
| 38 |
|
---|
| 39 | if (!classNameCombinations[key]) {
|
---|
| 40 | classNameCombinations[key] = powerSetPermutations(classNames);
|
---|
| 41 | }
|
---|
| 42 |
|
---|
| 43 | return classNameCombinations[key];
|
---|
| 44 | }
|
---|
| 45 |
|
---|
| 46 | export function createStyleObject(classNames) {
|
---|
| 47 | var elementStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
---|
| 48 | var stylesheet = arguments.length > 2 ? arguments[2] : undefined;
|
---|
| 49 | var nonTokenClassNames = classNames.filter(function (className) {
|
---|
| 50 | return className !== 'token';
|
---|
| 51 | });
|
---|
| 52 | var classNamesCombinations = getClassNameCombinations(nonTokenClassNames);
|
---|
| 53 | return classNamesCombinations.reduce(function (styleObject, className) {
|
---|
| 54 | return _objectSpread(_objectSpread({}, styleObject), stylesheet[className]);
|
---|
| 55 | }, elementStyle);
|
---|
| 56 | }
|
---|
| 57 | export function createClassNameString(classNames) {
|
---|
| 58 | return classNames.join(' ');
|
---|
| 59 | }
|
---|
| 60 | export function createChildren(stylesheet, useInlineStyles) {
|
---|
| 61 | var childrenCount = 0;
|
---|
| 62 | return function (children) {
|
---|
| 63 | childrenCount += 1;
|
---|
| 64 | return children.map(function (child, i) {
|
---|
| 65 | return createElement({
|
---|
| 66 | node: child,
|
---|
| 67 | stylesheet: stylesheet,
|
---|
| 68 | useInlineStyles: useInlineStyles,
|
---|
| 69 | key: "code-segment-".concat(childrenCount, "-").concat(i)
|
---|
| 70 | });
|
---|
| 71 | });
|
---|
| 72 | };
|
---|
| 73 | }
|
---|
| 74 | export default function createElement(_ref) {
|
---|
| 75 | var node = _ref.node,
|
---|
| 76 | stylesheet = _ref.stylesheet,
|
---|
| 77 | _ref$style = _ref.style,
|
---|
| 78 | style = _ref$style === void 0 ? {} : _ref$style,
|
---|
| 79 | useInlineStyles = _ref.useInlineStyles,
|
---|
| 80 | key = _ref.key;
|
---|
| 81 | var properties = node.properties,
|
---|
| 82 | type = node.type,
|
---|
| 83 | TagName = node.tagName,
|
---|
| 84 | value = node.value;
|
---|
| 85 |
|
---|
| 86 | if (type === 'text') {
|
---|
| 87 | return value;
|
---|
| 88 | } else if (TagName) {
|
---|
| 89 | var childrenCreator = createChildren(stylesheet, useInlineStyles);
|
---|
| 90 | var props;
|
---|
| 91 |
|
---|
| 92 | if (!useInlineStyles) {
|
---|
| 93 | props = _objectSpread(_objectSpread({}, properties), {}, {
|
---|
| 94 | className: createClassNameString(properties.className)
|
---|
| 95 | });
|
---|
| 96 | } else {
|
---|
| 97 | var allStylesheetSelectors = Object.keys(stylesheet).reduce(function (classes, selector) {
|
---|
| 98 | selector.split('.').forEach(function (className) {
|
---|
| 99 | if (!classes.includes(className)) classes.push(className);
|
---|
| 100 | });
|
---|
| 101 | return classes;
|
---|
| 102 | }, []); // For compatibility with older versions of react-syntax-highlighter
|
---|
| 103 |
|
---|
| 104 | var startingClassName = properties.className && properties.className.includes('token') ? ['token'] : [];
|
---|
| 105 | var className = properties.className && startingClassName.concat(properties.className.filter(function (className) {
|
---|
| 106 | return !allStylesheetSelectors.includes(className);
|
---|
| 107 | }));
|
---|
| 108 | props = _objectSpread(_objectSpread({}, properties), {}, {
|
---|
| 109 | className: createClassNameString(className) || undefined,
|
---|
| 110 | style: createStyleObject(properties.className, Object.assign({}, properties.style, style), stylesheet)
|
---|
| 111 | });
|
---|
| 112 | }
|
---|
| 113 |
|
---|
| 114 | var children = childrenCreator(node.children);
|
---|
| 115 | return /*#__PURE__*/React.createElement(TagName, _extends({
|
---|
| 116 | key: key
|
---|
| 117 | }, props), children);
|
---|
| 118 | }
|
---|
| 119 | } |
---|