// Framework grid generation
//
// Used only by Bootstrap to generate the correct number of grid classes given
// any value of `@grid-columns`.

.make-grid-columns() {
	// Common styles for all sizes of grid columns, widths 1-12
	.col(@index) {
		// initial
		@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
		.col((@index + 1), @item);
	}
	.col(@index, @list) when (@index =< @grid-columns) {
		// general; "=<" isn't a typo
		@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
		.col((@index + 1), ~"@{list}, @{item}");
	}
	.col(@index, @list) when (@index > @grid-columns) {
		// terminal
		@{list} {
			position: relative;
			// Prevent columns from collapsing when empty
			min-height: 1px;
			// Inner gutter via padding
			padding-left: (@grid-gutter-width / 2);
			padding-right: (@grid-gutter-width / 2);
		}
	}
	.col(1); // kickstart it
}

.float-grid-columns(@class) {
	.col(@index) {
		// initial
		@item: ~".col-@{class}-@{index}";
		.col((@index + 1), @item);
	}
	.col(@index, @list) when (@index =< @grid-columns) {
		// general
		@item: ~".col-@{class}-@{index}";
		.col((@index + 1), ~"@{list}, @{item}");
	}
	.col(@index, @list) when (@index > @grid-columns) {
		// terminal
		@{list} {
			float: left;
		}
	}
	.col(1); // kickstart it
}

.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
	.col-@{class}-@{index} {
		width: percentage((@index / @grid-columns));
	}
}
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
	.col-@{class}-push-@{index} {
		left: percentage((@index / @grid-columns));
	}
}
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
	.col-@{class}-push-0 {
		left: auto;
	}
}
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
	.col-@{class}-pull-@{index} {
		right: percentage((@index / @grid-columns));
	}
}
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
	.col-@{class}-pull-0 {
		right: auto;
	}
}
.calc-grid-column(@index, @class, @type) when (@type = offset) {
	.col-@{class}-offset-@{index} {
		margin-left: percentage((@index / @grid-columns));
	}
}

// Basic looping in LESS
.loop-grid-columns(@index, @class, @type) when (@index >= 0) {
	.calc-grid-column(@index, @class, @type);
	// next iteration
	.loop-grid-columns((@index - 1), @class, @type);
}

// Create grid for specific class
.make-grid(@class) {
	.float-grid-columns(@class);
	.loop-grid-columns(@grid-columns, @class, width);
	.loop-grid-columns(@grid-columns, @class, pull);
	.loop-grid-columns(@grid-columns, @class, push);
	.loop-grid-columns(@grid-columns, @class, offset);
}
