<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width" />

  <title>add/remove cells</title>

  <link rel="stylesheet" href="../css/flickity.css" />
  <link rel="stylesheet" href="sandbox.css" />

  <style>
    .cell {
      position: relative;
    }

    .remove-button {
      font-size: 20px;
      position: absolute;
      right: 10px;
      top: 10px;
    }
  </style>

</head>
<body>

  <h1>add/remove cells</h1>

  <div id="demo1" class="demo">
    <div class="container variable-width js-flickity">
      <div class="cell n1 w3"><b>1</b><button class="remove-button">&times;</button></div>
      <div class="cell n2"><b>2</b><button class="remove-button">&times;</button></div>
      <div class="cell n3 w3"><b>3</b><button class="remove-button">&times;</button></div>
      <div class="cell n4"><b>4</b><button class="remove-button">&times;</button></div>
      <div class="cell n5 w2"><b>5</b><button class="remove-button">&times;</button></div>
      <div class="cell n6 w2"><b>6</b><button class="remove-button">&times;</button></div>
    </div>
    <p>
      <button class="prepend-button">Prepend</button>
      <button class="insert-button">Insert</button>
      <button class="append-button">Append</button>
    </p>
  </div>

  <h2>freeScroll</h2>

  <div id="demo2" class="demo">
    <div class="container variable-width js-flickity"
      data-flickity-options='{ "freeScroll": true }'>
      <div class="cell n6"><b>1</b><button class="remove-button">&times;</button></div>
      <div class="cell n5 w2"><b>2</b><button class="remove-button">&times;</button></div>
      <div class="cell n4"><b>3</b><button class="remove-button">&times;</button></div>
      <div class="cell n3 w3"><b>4</b><button class="remove-button">&times;</button></div>
      <div class="cell n2"><b>5</b><button class="remove-button">&times;</button></div>
    </div>
    <p>
      <button class="prepend-button">Prepend</button>
      <button class="insert-button">Insert</button>
      <button class="append-button">Append</button>
    </p>
  </div>

  <h2>wrapAround</h2>

  <div id="demo3" class="demo">
    <div class="container variable-width js-flickity"
      data-flickity-options='{ "wrapAround": true }'>
      <div class="cell n6"><b>1</b><button class="remove-button">&times;</button></div>
      <div class="cell n5 w2"><b>2</b><button class="remove-button">&times;</button></div>
      <div class="cell n4"><b>3</b><button class="remove-button">&times;</button></div>
      <div class="cell n3 w3"><b>4</b><button class="remove-button">&times;</button></div>
      <div class="cell n2"><b>5</b><button class="remove-button">&times;</button></div>
      <div class="cell n6 w2"><b>6</b><button class="remove-button">&times;</button></div>
    </div>
    <p>
      <button class="prepend-button">Prepend</button>
      <button class="insert-button">Insert</button>
      <button class="append-button">Append</button>
    </p>
  </div>

  <h2>wrapAround, freeScroll</h2>

  <div id="demo4" class="demo">
    <div class="container variable-width js-flickity"
      data-flickity-options='{ "wrapAround": true, "freeScroll": true }'>
      <div class="cell n6"><b>1</b><button class="remove-button">&times;</button></div>
      <div class="cell n5 w2"><b>2</b><button class="remove-button">&times;</button></div>
      <div class="cell n4"><b>3</b><button class="remove-button">&times;</button></div>
      <div class="cell n3 w3"><b>4</b><button class="remove-button">&times;</button></div>
      <div class="cell n2"><b>5</b><button class="remove-button">&times;</button></div>
      <div class="cell n6 w2"><b>6</b><button class="remove-button">&times;</button></div>
    </div>
    <p>
      <button class="prepend-button">Prepend</button>
      <button class="insert-button">Insert</button>
      <button class="append-button">Append</button>
    </p>
  </div>

  <h2>contain</h2>

  <div id="demo5" class="demo">
    <div class="container variable-width js-flickity"
      data-flickity-options='{ "contain": true }'>
      <div class="cell n1 w3"><b>1</b><button class="remove-button">&times;</button></div>
      <div class="cell n2"><b>2</b><button class="remove-button">&times;</button></div>
      <div class="cell n3 w3"><b>3</b><button class="remove-button">&times;</button></div>
      <div class="cell n4"><b>4</b><button class="remove-button">&times;</button></div>
      <div class="cell n5 w2"><b>5</b><button class="remove-button">&times;</button></div>
      <div class="cell n6 w2"><b>6</b><button class="remove-button">&times;</button></div>
    </div>
    <p>
      <button class="prepend-button">Prepend</button>
      <button class="insert-button">Insert</button>
      <button class="append-button">Append</button>
    </p>
  </div>


  <h2>reposition</h2>

  <div id="reposition">
    <div class="container variable-width">
      <div class="cell w2"><b>1</b></div>
      <div class="cell"><b>2</b></div>
      <div class="cell w3"><b>3</b></div>
      <div class="cell"><b>4</b></div>
      <div class="cell"><b>5</b></div>
      <div class="cell w2"><b>6</b></div>
      <div class="cell"><b>7</b></div>
      <div class="cell w2"><b>8</b></div>
      <div class="cell"><b>9</b></div>
    </div>
  </div>

  <h2>prepend with single #492</h2>
  <div id="prepend-single">
    <div class="container variable-width">
      <div class="cell n1"><b>1</b><button class="remove-button">&times;</button></div>
    </div>
    <p>
      <button class="prepend-button">Prepend</button>
    </p>
  </div>

<script src="../bower_components/get-size/get-size.js"></script>
<script src="../bower_components/desandro-matches-selector/matches-selector.js"></script>
<script src="../bower_components/ev-emitter/ev-emitter.js"></script>
<script src="../bower_components/unipointer/unipointer.js"></script>
<script src="../bower_components/unidragger/unidragger.js"></script>
<script src="../bower_components/fizzy-ui-utils/utils.js"></script>

<script src="../js/cell.js"></script>
<script src="../js/slide.js"></script>
<script src="../js/animate.js"></script>
<script src="../js/flickity.js"></script>
<script src="../js/drag.js"></script>
<script src="../js/prev-next-button.js"></script>
<script src="../js/page-dots.js"></script>
<script src="../js/player.js"></script>
<script src="../js/add-remove-cell.js"></script>

<script>

var cellCount = 6;

function randInt( num ) {
  return Math.floor( Math.random() * num );
}

function getRandom( ary ) {
  var index = Math.floor( Math.random() * ary.length );
  return ary[ index ];
}

var widthClasses = [ '', 'w2', 'w3' ];
var nClasses = 'n1 n2 n3 n4 n5 n6'.split(' ');

function makeCell() {
  var cell = document.createElement('div');
  cell.className = 'cell ' + getRandom( widthClasses ) + ' ' + getRandom( nClasses );
  var b = document.createElement('b');
  b.textContent = ++cellCount;
  cell.appendChild( b );
  var removeButton = document.createElement('button');
  removeButton.className = 'remove-button';
  removeButton.textContent = '×';
  cell.appendChild( removeButton );
  return cell;
}

function getParent( elem, selector ) {
  while ( elem != document.body ) {
    elem = elem.parentNode;
    if ( matchesSelector( elem, selector ) ) {
      return elem;
    }
  }
}

function onContainerClick( event ) {
  if ( event.target.className != 'remove-button' ) {
    return;
  }

  //
  var cellElement = getParent( event.target, '.cell' );
  var container = getParent( event.target, '.container' );
  var flkty = Flickity.data( container );
  flkty.remove( cellElement );
}

function getParentFlickity( elem ) {
  var demo = getParent( elem, '.demo' );
  return Flickity.data( demo.querySelector('.container') );
}

function onPrependClick( event ) {
  var flkty = getParentFlickity( event.target );
  flkty.prepend([ makeCell(), makeCell(), makeCell() ]);
}

function onInsertClick( event ) {
  var flkty = getParentFlickity( event.target );
  flkty.insert([ makeCell(), makeCell(), makeCell() ], 3 );
}

function onAppendClick( event ) {
  var flkty = getParentFlickity( event.target );
  flkty.append([ makeCell(), makeCell(), makeCell() ]);
}

// init
var demos = document.querySelectorAll('.demo');
for ( var i=0; i < demos.length; i++ ) {
  var demo = demos[i];
  demo.querySelector('.container').addEventListener( 'click', onContainerClick );
  demo.querySelector('.prepend-button').addEventListener( 'click', onPrependClick );
  demo.querySelector('.insert-button').addEventListener( 'click', onInsertClick );
  demo.querySelector('.append-button').addEventListener( 'click', onAppendClick );
}

// ----- reposition ----- //

(function() {
  var flkty = new Flickity('#reposition .container');
  flkty.on( 'staticClick', function( event, pointer, cellElem ) {
    cellElem.classList.toggle('w3');
    flkty.reposition();
  });

  window.mapTargets = function() {
    return flkty.slides.map( function( slide ) {
      return ~~slide.target;
    });
  }
})();

// ----- prepend single, #492 ----- //

( function() {
  var demo = document.querySelector('#prepend-single');
  var flkty = new Flickity( demo.querySelector('.container') );
  demo.querySelector('.prepend-button').onclick = function() {
    flkty.prepend( makeCell() );
  };
})();

</script>

</body>
</html>