You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					149 lines
				
				4.4 KiB
			
		
		
			
		
	
	
					149 lines
				
				4.4 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _defaults(subClass, superClass); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Declaration = require('../declaration');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _require = require('./grid-utils'),
							 | 
						||
| 
								 | 
							
								    prefixTrackProp = _require.prefixTrackProp,
							 | 
						||
| 
								 | 
							
								    prefixTrackValue = _require.prefixTrackValue,
							 | 
						||
| 
								 | 
							
								    autoplaceGridItems = _require.autoplaceGridItems,
							 | 
						||
| 
								 | 
							
								    getGridGap = _require.getGridGap,
							 | 
						||
| 
								 | 
							
								    inheritGridGap = _require.inheritGridGap;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var Processor = require('../processor');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var GridRowsColumns =
							 | 
						||
| 
								 | 
							
								/*#__PURE__*/
							 | 
						||
| 
								 | 
							
								function (_Declaration) {
							 | 
						||
| 
								 | 
							
								  _inheritsLoose(GridRowsColumns, _Declaration);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function GridRowsColumns() {
							 | 
						||
| 
								 | 
							
								    return _Declaration.apply(this, arguments) || this;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var _proto = GridRowsColumns.prototype;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Change property name for IE
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  _proto.prefixed = function prefixed(prop, prefix) {
							 | 
						||
| 
								 | 
							
								    if (prefix === '-ms-') {
							 | 
						||
| 
								 | 
							
								      return prefixTrackProp({
							 | 
						||
| 
								 | 
							
								        prop: prop,
							 | 
						||
| 
								 | 
							
								        prefix: prefix
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return _Declaration.prototype.prefixed.call(this, prop, prefix);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Change IE property back
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.normalize = function normalize(prop) {
							 | 
						||
| 
								 | 
							
								    return prop.replace(/^grid-(rows|columns)/, 'grid-template-$1');
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _proto.insert = function insert(decl, prefix, prefixes, result) {
							 | 
						||
| 
								 | 
							
								    if (prefix !== '-ms-') return _Declaration.prototype.insert.call(this, decl, prefix, prefixes);
							 | 
						||
| 
								 | 
							
								    var parent = decl.parent,
							 | 
						||
| 
								 | 
							
								        prop = decl.prop,
							 | 
						||
| 
								 | 
							
								        value = decl.value;
							 | 
						||
| 
								 | 
							
								    var isRowProp = prop.includes('rows');
							 | 
						||
| 
								 | 
							
								    var isColumnProp = prop.includes('columns');
							 | 
						||
| 
								 | 
							
								    var hasGridTemplate = parent.some(function (i) {
							 | 
						||
| 
								 | 
							
								      return 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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var processor = new Processor({});
							 | 
						||
| 
								 | 
							
								    var status = processor.gridStatus(parent, result);
							 | 
						||
| 
								 | 
							
								    var gap = getGridGap(decl);
							 | 
						||
| 
								 | 
							
								    gap = inheritGridGap(decl, gap) || gap;
							 | 
						||
| 
								 | 
							
								    var gapValue = isRowProp ? gap.row : gap.column;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if ((status === 'no-autoplace' || status === true) && !hasGridTemplate) {
							 | 
						||
| 
								 | 
							
								      gapValue = null;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var prefixValue = prefixTrackValue({
							 | 
						||
| 
								 | 
							
								      value: value,
							 | 
						||
| 
								 | 
							
								      gap: gapValue
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Insert prefixes
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    decl.cloneBefore({
							 | 
						||
| 
								 | 
							
								      prop: prefixTrackProp({
							 | 
						||
| 
								 | 
							
								        prop: prop,
							 | 
						||
| 
								 | 
							
								        prefix: prefix
							 | 
						||
| 
								 | 
							
								      }),
							 | 
						||
| 
								 | 
							
								      value: prefixValue
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    var autoflow = parent.nodes.find(function (i) {
							 | 
						||
| 
								 | 
							
								      return i.prop === 'grid-auto-flow';
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    var 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
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      var rowDecl = parent.nodes.find(function (i) {
							 | 
						||
| 
								 | 
							
								        return 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
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var columnDecl = parent.nodes.find(function (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;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return GridRowsColumns;
							 | 
						||
| 
								 | 
							
								}(Declaration);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_defineProperty(GridRowsColumns, "names", ['grid-template-rows', 'grid-template-columns', 'grid-rows', 'grid-columns']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = GridRowsColumns;
							 |