Trying out isotope

Trying the isotope plugin with jquery modular approach

by amitavroy

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
<div class="container">
  <div class="row">
    <div class="col-sm-12">
      <h1>Isotope module</h1></div>
  </div>

  <div class="row">
    <div class="col-sm-12">
      <div class="grid">
        <div class="grid-item">Item 1</div>
        <div class="grid-item">Item 2</div>
        <div class="grid-item">Item 3</div>
        <div class="grid-item">Item 4</div>
        <div class="grid-item">Item 5</div>
        <div class="grid-item">Item 6</div>
      </div>
    </div>
  </div>
</div>

CSS

.grid-item {
  width: 20%;
  min-height: 90px;
  border: 1px solid red;
  margin-bottom: 5px;
  margin-right: 5px;
}

.grid-item--width2 {
  width: 50%;
}
.grid-item--width3 {
  width: 70%;
  border: 1px solid blue;
}

JavaScript

var isotopeFeature = (function() {
	var settings = {};

  var init = function(options) {
  	settings.gridItem = _.has(options, 'gridItem') ? options.gridItem : '.grid-item';
    
    settings.double = _.has(options, 'double') ? options.double : 'double';
    
    randomWidth2();
    setupIsotope();
  }

  var setupIsotope = function() {
    var elem = document.querySelector('.grid');
    var iso = new Isotope(elem, {
      itemSelector: settings.gridItem,
      layoutMode: 'fitRows'
    });
  }

  var randomWidth2 = function() {
    $(settings.gridItem).each(function() {
      if (randomBoolean()) {
        $(this).addClass(settings.double);
      }
    });
  }

  var randomBoolean = function() {
    items = Array(5, 1, 2, 3, 5, 1, 2, 3, 4, 5, 1, 2, 5);
    var item = items[Math.floor(Math.random() * items.length)];
    if (item % 5 == 0) {
      return true;
    }
    return false;
  }

  return {
    init: init
  }
})();

$(document).ready(function() {
  isotopeFeature.init({
  	gridItem: '.grid-item',
    double: 'grid-item--width2'
  });
});