UNPKG

css-grid-template-parser

Version:

A simple CSS Grid template parser

57 lines 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var primitives_1 = require("./primitives"); var sep = /['"]\s*['"]?/g; var ws = /\s+/g; var cleanTpl = function (t) { return t.trim().slice(1, -1); }; var cleanLine = function (l) { return l.replace(ws, ' ').trim(); }; var getTpl = function (t) { return cleanTpl(t).split(sep); }; var getRow = function (l) { return cleanLine(l).split(' '); }; var reduceLines = function (acc, line, r) { if (line.trim() !== '') { getRow(line).forEach(function (area, c) { if (area !== '.') { if (typeof acc[area] === 'undefined') { acc[area] = { column: primitives_1.track(c + 1, c + 2), row: primitives_1.track(r + 1, r + 2), }; } else { var _a = acc[area], column = _a.column, row = _a.row; column.start = Math.min(column.start, c + 1); column.end = Math.max(column.end, c + 2); column.span = column.end - column.start; row.start = Math.min(row.start, r + 1); row.end = Math.max(row.end, r + 2); row.span = row.end - row.start; } } }); } return acc; }; /** * grid * @param tpl string * @example * grid(` * ". ." * ". ." * `); * @returns * `{ * width: 2, * height: 2, * areas: {}, * }` */ function grid(tpl) { var lines = getTpl(tpl); var width = getRow(lines[0]).length; var height = lines.length; var areas = lines.reduce(reduceLines, {}); return { width: width, height: height, areas: areas }; } exports.default = grid; //# sourceMappingURL=grid.js.map