'use strict'; const joinGridValue = require('../lib/joinGridValue'); /** * @param {import('postcss-value-parser').ParsedValue} gridAutoFlow * @return {import('postcss-value-parser').ParsedValue | string} */ const normalizeGridAutoFlow = (gridAutoFlow) => { let newValue = { front: '', back: '' }; let shouldNormalize = false; gridAutoFlow.walk((node) => { if (node.value === 'dense') { shouldNormalize = true; newValue.back = node.value; } else if (['row', 'column'].includes(node.value.trim().toLowerCase())) { shouldNormalize = true; newValue.front = node.value; } else { shouldNormalize = false; } }); if (shouldNormalize) { return `${newValue.front.trim()} ${newValue.back.trim()}`; } return gridAutoFlow; }; /** * @param {import('postcss-value-parser').ParsedValue} gridGap * @return {import('postcss-value-parser').ParsedValue | string} */ const normalizeGridColumnRowGap = (gridGap) => { let newValue = { front: '', back: '' }; let shouldNormalize = false; gridGap.walk((node) => { // console.log(node); if (node.value === 'normal') { shouldNormalize = true; newValue.front = node.value; } else { newValue.back = `${newValue.back} ${node.value}`; } }); if (shouldNormalize) { return `${newValue.front.trim()} ${newValue.back.trim()}`; } return gridGap; }; /** * @param {import('postcss-value-parser').ParsedValue} grid * @return {string | string[]} */ const normalizeGridColumnRow = (grid) => { // cant do normalization here using node, so copy it as a string let gridValue = grid.toString().split('/'); // node -> string value, split -> " 2 / 3 span " -> [' 2','3 span '] if (gridValue.length > 1) { return joinGridValue( gridValue.map((gridLine) => { let normalizeValue = { front: '', back: '', }; gridLine = gridLine.trim(); // '3 span ' -> '3 span' gridLine.split(' ').forEach((node) => { // ['3','span'] if (node === 'span') { normalizeValue.front = node; // span _ } else { normalizeValue.back = `${normalizeValue.back} ${node}`; // _ 3 } }); return `${normalizeValue.front.trim()} ${normalizeValue.back.trim()}`; // span 3 }) // returns "2 / span 3" ); } // doing this separating if `/` is not present as while joining('/') , it will add `/` at the end return gridValue.map((gridLine) => { let normalizeValue = { front: '', back: '', }; gridLine = gridLine.trim(); gridLine.split(' ').forEach((node) => { if (node === 'span') { normalizeValue.front = node; } else { normalizeValue.back = `${normalizeValue.back} ${node}`; } }); return `${normalizeValue.front.trim()} ${normalizeValue.back.trim()}`; }); }; module.exports = { normalizeGridAutoFlow, normalizeGridColumnRowGap, normalizeGridColumnRow, };