enmi12/glossaire/_posts/custom-layout-modes/2011-10-18-spine-align.html
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
permissions -rwxr-xr-x
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
---
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
title: Spine align
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
layout: default
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
category: custom-layout-modes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
---
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
<section id="copy">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
  <p><a href="../docs/extending-isotope.html">Custom layout mode</a> that aligns items to the center, placing them either left or right of the spine. <code>gutterWidth</code> option available.</p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
{% highlight javascript %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
$container.isotope({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
  layoutMode: 'spineAlign',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
  spineAlign: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    gutterWidth: 20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
  },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
  // options...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
{% endhighlight %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
  <p>To use this layout mode, grab the <code>$.Isotope.prototype</code> methods from the script at the bottom of this page's source.</p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
</section>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
<section id="options" class="clearfix">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
  {% include filter-buttons.html %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
  {% include sort-buttons.html %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
  <h3>Etc</h3>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
  <ul id="etc" class="clearfix">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    <li id="toggle-sizes"><a href="#toggle-sizes">Toggle variable sizes</a></li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    <li id="insert"><a href="#insert">Insert new elements</a></li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    <li id="append"><a href='#append'>Append new elements</a></li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    <li id="shuffle"><a href='#shuffle'>Shuffle</a></li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  </ul>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
</section> <!-- #options -->
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
<div id="container" class="clickable variable-sizes clearfix">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
  {% for elem_number in site.best_of_order %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    {% assign element = site.elements[elem_number] %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    {% include element-partial.html %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
  {% endfor %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
</div> <!-- #container -->
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
<script src="../{{ site.jquery_js }}"></script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
<script src="../{{ site.isotope_js }}"></script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
<script src="../js/fake-element.js"></script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
<script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
  // custom layout mode spineAlign
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
  $.Isotope.prototype._spineAlignReset = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    this.spineAlign = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
      colA: 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
      colB: 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
  $.Isotope.prototype._spineAlignLayout = function( $elems ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    var instance = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        props = this.spineAlign,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        gutterWidth = Math.round( this.options.spineAlign && this.options.spineAlign.gutterWidth ) || 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        centerX = Math.round(this.element.width() / 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    $elems.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
      var $this = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
          isColA = props.colB > props.colA,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
          x = isColA ?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
            centerX - ( $this.outerWidth(true) + gutterWidth / 2 ) : // left side
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
            centerX + gutterWidth / 2, // right side
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
          y = isColA ? props.colA : props.colB;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
      instance._pushPosition( $this, x, y );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
      props[( isColA ? 'colA' : 'colB' )] += $this.outerHeight(true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
  $.Isotope.prototype._spineAlignGetContainerSize = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    var size = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    size.height = this.spineAlign[( this.spineAlign.colB > this.spineAlign.colA ? 'colB' : 'colA' )];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    return size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
  $.Isotope.prototype._spineAlignResizeChanged = function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
  };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
  $(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    var $container = $('#container');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    {% include random-sizes.js %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
    
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    $container.isotope({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
      itemSelector : '.element',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
      layoutMode: 'spineAlign',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
      spineAlign: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
        gutterWidth: 20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
      },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
      getSortData : {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        symbol : function( $elem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
          return $elem.attr('data-symbol');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        category : function( $elem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
          return $elem.attr('data-category');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
        number : function( $elem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
          return parseInt( $elem.find('.number').text(), 10 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
        },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        weight : function( $elem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
          return parseFloat( $elem.find('.weight').text().replace( /[\(\)]/g, '') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
        },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
        name : function ( $elem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
          return $elem.find('.name').text();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
    });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
      
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    {% include option-set-buttons.js %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
    {% include add-buttons.js %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    {% include change-sizes.js %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    var $sortBy = $('#sort-by');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    $('#shuffle a').click(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
      $container.isotope('shuffle');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
      $sortBy.find('.selected').removeClass('selected');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
      $sortBy.find('[data-option-value="random"]').addClass('selected');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
      return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
    });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
  });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
</script>