enmi12/glossaire/_posts/custom-layout-modes/2011-05-22-category-rows.html
author ymh <ymh.work@gmail.com>
Mon, 08 Sep 2025 19:44:41 +0200
changeset 23 417f20492bf7
parent 0 d970ebf37754
permissions -rwxr-xr-x
Update Docker configuration and plugin versions - Upgrade MariaDB from 10.6 to 11 with auto-upgrade support - Add WordPress debug environment variable to FPM container - Update PHP-FPM Dockerfile base image - Update Include Mastodon Feed plugin with bug fixes and improvements - Update Portfolio plugin (v2.58) with latest translations and demo data enhancements - Remove old README.md from Mastodon Feed plugin 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
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: Category rows
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>This demo uses a <a href="../docs/extending-isotope.html">custom layout mode</a>, <code>categoryRows</code> that arranges elements into rows based on their category. The layout mode logic relies on sorting to define rows.</p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
</section>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
<section id="options" class="clearfix">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
  {% include filter-buttons.html %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
  <h3>Etc</h3>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
  <ul id="etc" class="clearfix">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    <li id="toggle-sizes"><a href="#toggle-sizes">Toggle variable sizes</a></li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    <li id="insert"><a href="#insert">Insert new elements</a></li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
  </ul>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
</section> <!-- #options -->
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
<div id="container" class="clearfix">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
  {% for elem_number in site.random_order | limit:60 %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    {% assign element = site.elements[elem_number] %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    {% include element-partial.html %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
  {% endfor %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
<script src="../{{ site.jquery_js }}"></script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
<script src="../{{ site.isotope_js }}"></script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
<script src="../js/fake-element.js"></script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
<script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  // categoryRows custom layout mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  $.extend( $.Isotope.prototype, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
  
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    _categoryRowsReset : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
      this.categoryRows = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        x : 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        y : 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        height : 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        currentCategory : null
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
      };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
  
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    _categoryRowsLayout : function( $elems ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
      var instance = this,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
          containerWidth = this.element.width(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
          sortBy = this.options.sortBy,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
          props = this.categoryRows;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
      
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
      $elems.each( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
        var $this = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
            atomW = $this.outerWidth(true),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
            atomH = $this.outerHeight(true),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
            category = $.data( this, 'isotope-sort-data' )[ sortBy ],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
            x, y;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
      
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        if ( category !== props.currentCategory ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
          // new category, new row
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
          props.x = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
          props.height += props.currentCategory ? instance.options.categoryRows.gutter : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
          props.y = props.height;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
          props.currentCategory = category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        } else if ( props.x !== 0 && atomW + props.x > containerWidth ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
          // if this element cannot fit in the current row
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
          props.x = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
          props.y = props.height;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
        } 
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
      
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        // position the atom
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        instance._pushPosition( $this, props.x, props.y );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
  
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        props.height = Math.max( props.y + atomH, props.height );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        props.x += atomW;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
  
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
      });
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
    _categoryRowsGetContainerSize : function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
      return { height : this.categoryRows.height };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
  
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    _categoryRowsResizeChanged : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
      return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
  
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
  });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
  
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
  $(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    var $container = $('#container');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    {% include random-sizes.js %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    $container.isotope({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
      itemSelector : '.element',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
      layoutMode : 'categoryRows',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
      categoryRows : {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        gutter : 20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
      },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
      getSortData : {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
        category : function( $elem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
          return $elem.attr('data-category');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
      },
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
      sortBy: 'category'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    {% include option-set-buttons.js %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
    {% include add-buttons.js %}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    // toggle variable sizes of all elements
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    $('#toggle-sizes').find('a').click(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
      $container
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
        .toggleClass('variable-sizes')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
        .isotope('reLayout');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
      return false;
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
</script>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
  
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126