positionItems () {

    if(this.isPositioning){
      return;
    }

    this.isPositioning = true;

    let { cols, wSpace } = this.setup();
    let maxHeight = 0;
    let colWidth = this.colWidth();
    let items = this.items();

    wSpace = this.center ? Math.floor(wSpace / 2) : 0;

    this.initStyles();

    for (let i = 0; i < items.length; i++) {
      let col = this.nextCol(cols, i);
      let item = items[i];
      let topGutter = col.height ? this.gutter : 0;
      let left = col.index * colWidth + wSpace + "px";
      let top = col.height + topGutter + "px";

      if(this.useTransform){
        item.style.transform = `translate(${left}, ${top})`;
      }
      else{
        item.style.top = top;
        item.style.left = left;
      }

      col.height += item.getBoundingClientRect().height + topGutter;

      if(col.height > maxHeight){
        maxHeight = col.height;
      }
    }

    this.container.style.height = maxHeight + this.gutter + "px";
    this.isPositioning = false;
    this.emit(POSITIONING_COMPLETE_EVENT);
  }
Positions each item in the grid, based
on their corresponding column's height
and index then stretches the container to
the height of the grid.