summaryrefslogtreecommitdiff
path: root/node_modules/autoprefixer/lib/hacks/grid-template-areas.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/autoprefixer/lib/hacks/grid-template-areas.js')
-rw-r--r--node_modules/autoprefixer/lib/hacks/grid-template-areas.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/node_modules/autoprefixer/lib/hacks/grid-template-areas.js b/node_modules/autoprefixer/lib/hacks/grid-template-areas.js
new file mode 100644
index 0000000..ffc9673
--- /dev/null
+++ b/node_modules/autoprefixer/lib/hacks/grid-template-areas.js
@@ -0,0 +1,84 @@
+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 {
+ /**
+ * Translate grid-template-areas to separate -ms- prefixed properties
+ */
+ 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
+
+ // remove already prefixed rows
+ // to prevent doubling prefixes
+ parent.walkDecls(/-ms-grid-rows/, i => i.remove())
+
+ // add empty tracks to rows
+ 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)`
+ })
+ })
+ }
+
+ // warnings
+ 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