| let Declaration = require('../declaration') |
| let { |
| getGridGap, |
| inheritGridGap, |
| parseGridAreas, |
| prefixTrackProp, |
| prefixTrackValue, |
| warnGridGap, |
| warnMissedAreas |
| } = require('./grid-utils') |
|
|
| function getGridRows(tpl) { |
| return tpl |
| .trim() |
| .slice(1, -1) |
| .split(/["']\s*["']?/g) |
| } |
|
|
| class GridTemplateAreas extends Declaration { |
| |
| |
| |
| insert(decl, prefix, prefixes, result) { |
| if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes) |
|
|
| let hasColumns = false |
| let hasRows = false |
| let parent = decl.parent |
| let gap = getGridGap(decl) |
| gap = inheritGridGap(decl, gap) || gap |
|
|
| |
| |
| parent.walkDecls(/-ms-grid-rows/, i => i.remove()) |
|
|
| |
| parent.walkDecls(/grid-template-(rows|columns)/, trackDecl => { |
| if (trackDecl.prop === 'grid-template-rows') { |
| hasRows = true |
| let { prop, value } = trackDecl |
| trackDecl.cloneBefore({ |
| prop: prefixTrackProp({ prefix, prop }), |
| value: prefixTrackValue({ gap: gap.row, value }) |
| }) |
| } else { |
| hasColumns = true |
| } |
| }) |
|
|
| let gridRows = getGridRows(decl.value) |
|
|
| if (hasColumns && !hasRows && gap.row && gridRows.length > 1) { |
| decl.cloneBefore({ |
| prop: '-ms-grid-rows', |
| raws: {}, |
| value: prefixTrackValue({ |
| gap: gap.row, |
| value: `repeat(${gridRows.length}, auto)` |
| }) |
| }) |
| } |
|
|
| |
| warnGridGap({ |
| decl, |
| gap, |
| hasColumns, |
| result |
| }) |
|
|
| let areas = parseGridAreas({ |
| gap, |
| rows: gridRows |
| }) |
|
|
| warnMissedAreas(areas, decl, result) |
|
|
| return decl |
| } |
| } |
|
|
| GridTemplateAreas.names = ['grid-template-areas'] |
|
|
| module.exports = GridTemplateAreas |
|
|