126 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| let Declaration = require('../declaration')
 | |
| let Processor = require('../processor')
 | |
| let {
 | |
|   autoplaceGridItems,
 | |
|   getGridGap,
 | |
|   inheritGridGap,
 | |
|   prefixTrackProp,
 | |
|   prefixTrackValue
 | |
| } = require('./grid-utils')
 | |
| 
 | |
| class GridRowsColumns extends Declaration {
 | |
|   insert(decl, prefix, prefixes, result) {
 | |
|     if (prefix !== '-ms-') return super.insert(decl, prefix, prefixes)
 | |
| 
 | |
|     let { parent, prop, value } = decl
 | |
|     let isRowProp = prop.includes('rows')
 | |
|     let isColumnProp = prop.includes('columns')
 | |
| 
 | |
|     let hasGridTemplate = parent.some(
 | |
|       i => i.prop === 'grid-template' || i.prop === 'grid-template-areas'
 | |
|     )
 | |
| 
 | |
|     /**
 | |
|      * Not to prefix rows declaration if grid-template(-areas) is present
 | |
|      */
 | |
|     if (hasGridTemplate && isRowProp) {
 | |
|       return false
 | |
|     }
 | |
| 
 | |
|     let processor = new Processor({ options: {} })
 | |
|     let status = processor.gridStatus(parent, result)
 | |
|     let gap = getGridGap(decl)
 | |
|     gap = inheritGridGap(decl, gap) || gap
 | |
| 
 | |
|     let gapValue = isRowProp ? gap.row : gap.column
 | |
| 
 | |
|     if ((status === 'no-autoplace' || status === true) && !hasGridTemplate) {
 | |
|       gapValue = null
 | |
|     }
 | |
| 
 | |
|     let prefixValue = prefixTrackValue({
 | |
|       gap: gapValue,
 | |
|       value
 | |
|     })
 | |
| 
 | |
|     /**
 | |
|      * Insert prefixes
 | |
|      */
 | |
|     decl.cloneBefore({
 | |
|       prop: prefixTrackProp({ prefix, prop }),
 | |
|       value: prefixValue
 | |
|     })
 | |
| 
 | |
|     let autoflow = parent.nodes.find(i => i.prop === 'grid-auto-flow')
 | |
|     let autoflowValue = 'row'
 | |
| 
 | |
|     if (autoflow && !processor.disabled(autoflow, result)) {
 | |
|       autoflowValue = autoflow.value.trim()
 | |
|     }
 | |
|     if (status === 'autoplace') {
 | |
|       /**
 | |
|        * Show warning if grid-template-rows decl is not found
 | |
|        */
 | |
|       let rowDecl = parent.nodes.find(i => i.prop === 'grid-template-rows')
 | |
| 
 | |
|       if (!rowDecl && hasGridTemplate) {
 | |
|         return undefined
 | |
|       } else if (!rowDecl && !hasGridTemplate) {
 | |
|         decl.warn(
 | |
|           result,
 | |
|           'Autoplacement does not work without grid-template-rows property'
 | |
|         )
 | |
|         return undefined
 | |
|       }
 | |
| 
 | |
|       /**
 | |
|        * Show warning if grid-template-columns decl is not found
 | |
|        */
 | |
|       let columnDecl = parent.nodes.find(i => {
 | |
|         return i.prop === 'grid-template-columns'
 | |
|       })
 | |
|       if (!columnDecl && !hasGridTemplate) {
 | |
|         decl.warn(
 | |
|           result,
 | |
|           'Autoplacement does not work without grid-template-columns property'
 | |
|         )
 | |
|       }
 | |
| 
 | |
|       /**
 | |
|        * Autoplace grid items
 | |
|        */
 | |
|       if (isColumnProp && !hasGridTemplate) {
 | |
|         autoplaceGridItems(decl, result, gap, autoflowValue)
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return undefined
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Change IE property back
 | |
|    */
 | |
|   normalize(prop) {
 | |
|     return prop.replace(/^grid-(rows|columns)/, 'grid-template-$1')
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Change property name for IE
 | |
|    */
 | |
|   prefixed(prop, prefix) {
 | |
|     if (prefix === '-ms-') {
 | |
|       return prefixTrackProp({ prefix, prop })
 | |
|     }
 | |
|     return super.prefixed(prop, prefix)
 | |
|   }
 | |
| }
 | |
| 
 | |
| GridRowsColumns.names = [
 | |
|   'grid-template-rows',
 | |
|   'grid-template-columns',
 | |
|   'grid-rows',
 | |
|   'grid-columns'
 | |
| ]
 | |
| 
 | |
| module.exports = GridRowsColumns
 |