css-grid-template-parser
Version:
A simple CSS Grid template parser
57 lines • 1.79 kB
JavaScript
;
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