Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
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.
209 lines
5.8 KiB
209 lines
5.8 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _postcssValueParser = _interopRequireWildcard(require("postcss-value-parser"));
|
|
|
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
|
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
|
|
const directionKeywords = ['top', 'right', 'bottom', 'left', 'center'];
|
|
const center = '50%';
|
|
const horizontal = {
|
|
right: '100%',
|
|
left: '0'
|
|
};
|
|
const verticalValue = {
|
|
bottom: '100%',
|
|
top: '0'
|
|
};
|
|
|
|
function isCommaNode(node) {
|
|
return node.type === 'div' && node.value === ',';
|
|
}
|
|
|
|
function isVariableFunctionNode(node) {
|
|
if (node.type !== 'function') {
|
|
return false;
|
|
}
|
|
|
|
return ['var', 'env'].includes(node.value.toLowerCase());
|
|
}
|
|
|
|
function isMathFunctionNode(node) {
|
|
if (node.type !== 'function') {
|
|
return false;
|
|
}
|
|
|
|
return ['calc', 'min', 'max', 'clamp'].includes(node.value.toLowerCase());
|
|
}
|
|
|
|
function isNumberNode(node) {
|
|
if (node.type !== 'word') {
|
|
return false;
|
|
}
|
|
|
|
const value = parseFloat(node.value);
|
|
return !isNaN(value);
|
|
}
|
|
|
|
function isDimensionNode(node) {
|
|
if (node.type !== 'word') {
|
|
return false;
|
|
}
|
|
|
|
const parsed = (0, _postcssValueParser.unit)(node.value);
|
|
|
|
if (!parsed) {
|
|
return false;
|
|
}
|
|
|
|
return parsed.unit !== '';
|
|
}
|
|
|
|
function transform(value) {
|
|
const parsed = (0, _postcssValueParser.default)(value);
|
|
const ranges = [];
|
|
let rangeIndex = 0;
|
|
let shouldContinue = true;
|
|
parsed.nodes.forEach((node, index) => {
|
|
// After comma (`,`) follows next background
|
|
if (isCommaNode(node)) {
|
|
rangeIndex += 1;
|
|
shouldContinue = true;
|
|
return;
|
|
}
|
|
|
|
if (!shouldContinue) {
|
|
return;
|
|
} // After separator (`/`) follows `background-size` values
|
|
// Avoid them
|
|
|
|
|
|
if (node.type === 'div' && node.value === '/') {
|
|
shouldContinue = false;
|
|
return;
|
|
}
|
|
|
|
if (!ranges[rangeIndex]) {
|
|
ranges[rangeIndex] = {
|
|
start: null,
|
|
end: null
|
|
};
|
|
} // Do not try to be processed `var and `env` function inside background
|
|
|
|
|
|
if (isVariableFunctionNode(node)) {
|
|
shouldContinue = false;
|
|
ranges[rangeIndex].start = null;
|
|
ranges[rangeIndex].end = null;
|
|
return;
|
|
}
|
|
|
|
const isPositionKeyword = node.type === 'word' && directionKeywords.includes(node.value.toLowerCase()) || isDimensionNode(node) || isNumberNode(node) || isMathFunctionNode(node);
|
|
|
|
if (ranges[rangeIndex].start === null && isPositionKeyword) {
|
|
ranges[rangeIndex].start = index;
|
|
ranges[rangeIndex].end = index;
|
|
return;
|
|
}
|
|
|
|
if (ranges[rangeIndex].start !== null) {
|
|
if (node.type === 'space') {
|
|
return;
|
|
} else if (isPositionKeyword) {
|
|
ranges[rangeIndex].end = index;
|
|
return;
|
|
}
|
|
|
|
return;
|
|
}
|
|
});
|
|
ranges.forEach(range => {
|
|
if (range.start === null) {
|
|
return;
|
|
}
|
|
|
|
const nodes = parsed.nodes.slice(range.start, range.end + 1);
|
|
|
|
if (nodes.length > 3) {
|
|
return;
|
|
}
|
|
|
|
const firstNode = nodes[0].value.toLowerCase();
|
|
const secondNode = nodes[2] && nodes[2].value ? nodes[2].value.toLowerCase() : null;
|
|
|
|
if (nodes.length === 1 || secondNode === 'center') {
|
|
if (secondNode) {
|
|
nodes[2].value = nodes[1].value = '';
|
|
}
|
|
|
|
const map = Object.assign({}, horizontal, {
|
|
center
|
|
});
|
|
|
|
if (Object.prototype.hasOwnProperty.call(map, firstNode)) {
|
|
nodes[0].value = map[firstNode];
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (firstNode === 'center' && directionKeywords.includes(secondNode)) {
|
|
nodes[0].value = nodes[1].value = '';
|
|
|
|
if (Object.prototype.hasOwnProperty.call(horizontal, secondNode)) {
|
|
nodes[2].value = horizontal[secondNode];
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (Object.prototype.hasOwnProperty.call(horizontal, firstNode) && Object.prototype.hasOwnProperty.call(verticalValue, secondNode)) {
|
|
nodes[0].value = horizontal[firstNode];
|
|
nodes[2].value = verticalValue[secondNode];
|
|
return;
|
|
} else if (Object.prototype.hasOwnProperty.call(verticalValue, firstNode) && Object.prototype.hasOwnProperty.call(horizontal, secondNode)) {
|
|
nodes[0].value = horizontal[secondNode];
|
|
nodes[2].value = verticalValue[firstNode];
|
|
return;
|
|
}
|
|
});
|
|
return parsed.toString();
|
|
}
|
|
|
|
function pluginCreator() {
|
|
return {
|
|
postcssPlugin: 'postcss-normalize-positions',
|
|
|
|
OnceExit(css) {
|
|
const cache = {};
|
|
css.walkDecls(/^(background(-position)?|(-\w+-)?perspective-origin)$/i, decl => {
|
|
const value = decl.value;
|
|
|
|
if (!value) {
|
|
return;
|
|
}
|
|
|
|
if (cache[value]) {
|
|
decl.value = cache[value];
|
|
return;
|
|
}
|
|
|
|
const result = transform(value);
|
|
decl.value = result;
|
|
cache[value] = result;
|
|
});
|
|
}
|
|
|
|
};
|
|
}
|
|
|
|
pluginCreator.postcss = true;
|
|
var _default = pluginCreator;
|
|
exports.default = _default;
|
|
module.exports = exports.default; |