:revolving_hearts: Filter & sort magical layouts

Related tags

Table/Grid isotope
Overview

Isotope

Filter & sort magical layouts

See isotope.metafizzy.co for complete docs and demos.

Install

Download

CDN

Link directly to Isotope files on unpkg.

<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
<!-- or -->
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.js"></script>

Package managers

npm: npm install isotope-layout --save

Bower: bower install isotope-layout --save

License

Commercial license

If you want to use Isotope to develop commercial sites, themes, projects, and applications, the Commercial license is the appropriate license. With this option, your source code is kept proprietary. Purchase an Isotope Commercial License at isotope.metafizzy.co

Open source license

If you are creating an open source application under a license compatible with the GNU GPL license v3, you may use Isotope under the terms of the GPLv3.

Read more about Isotope's license.

Initialize

With jQuery

$('.grid').isotope({
  // options...
  itemSelector: '.grid-item',
  masonry: {
    columnWidth: 200
  }
});

With vanilla JavaScript

// vanilla JS
var grid = document.querySelector('.grid');
var iso = new Isotope( grid, {
  // options...
  itemSelector: '.grid-item',
  masonry: {
    columnWidth: 200
  }
});

With HTML

Add a data-isotope attribute to your element. Options can be set in JSON in the value.

<div class="grid"
  data-isotope='{ "itemSelector": ".grid-item", "masonry": { "columnWidth": 200 } }'>
  <div class="grid-item"></div>
  <div class="grid-item"></div>
  ...
</div>

By Metafizzy 🌈 🐻 , 2010–2020

Comments
  • Isotope filter/sort from paginated data - lazy load vs infinite scroll

    Isotope filter/sort from paginated data - lazy load vs infinite scroll

    @desandro There's a message in this Stack Overflow question linking to a now 404 page related to you saying that lazy loading was a better approach than infinite scrolling for cleaner integration with Isotope.

    Question: Does this still hold true for Isotope v2?

    Also, if I might make a feature request: How about a v2 tutorial of Isotope with infinite scroll / lazy load (whichever you suggest, or perhaps both) that includes filtering and sorting?

    opened by igregson 73
  • Add Packery as a layout mode

    Add Packery as a layout mode

    opened by desandro 33
  • isotope v2 incompatible with requirejs 2

    isotope v2 incompatible with requirejs 2

    According to the Require.js Changelog module definitions are now delayed until they're actually required.

    In practice this means the module defined at isotope/js/isotope cannot be accessed via the suggested method of require(['path/to/isotope.min', 'isotope/js/isotope', ...) and attempting to do a require('isotope/js/isotope') after having included the isotope build file will still fail due to it not being defined.

    I don't have a solution in mind just yet that will continue to enable the behavior existent, just reporting the issue to see if anyone else is having it (and it's not something wrong with my project).

    opened by dcousineau 25
  • Layout problem when resizing window on a responsive design.

    Layout problem when resizing window on a responsive design.

    I'm using isotope at http://www.gablabelle.com but I can't figure out what's wrong after reviewing my script file or maybe it's a bug?

    When resizing the window the layout is not good. But if I make a relayout using the top right button, the layout gets in order. What's wrong?

    Please take a look at this video: http://www.visualise.ca/files/videos/isotope02.mov

    jQuery

    $(window).smartresize(function(){       
            var $windowSize = $(window).width();
            if ($windowSize > 1199) {
                $container.imagesLoaded( function(){
                    $container.isotope({
                        animationEngine: "best-available",
                        itemSelector : "article.post",
                        masonry: {
                            columnWidth: 300,
                            gutterWidth: 30
                        },
                        onLayout: function(){
                            setTimeout(function(){
                                html_height = $container.height();
                                $("#sidebar").height(html_height - 30);
                            }, 500);
                        }       
                    });
                });
            } else if ($windowSize < 1200 && $windowSize > 979) {
                $container.imagesLoaded( function(){
                    $container.isotope({
                        animationEngine: "best-available",
                        itemSelector : "article.post",
                        masonry: {
                            columnWidth: 240,
                            gutterWidth: 20
                        },
                        onLayout: function(){
                            setTimeout(function(){
                                html_height = $container.height();
                                $("#sidebar").height(html_height - 20);
                            }, 500);
                        }       
                    });
                });
            } else if ($windowSize < 768) {
                $container.imagesLoaded( function(){
                    $container.isotope({
                        animationEngine: "best-available",
                        itemSelector : "article.post",
                        resizable: false,
                        masonry: {
                            columnWidth: $windowSize / 2,
                            gutterWidth: 1
                        },
                        onLayout: function(){
                            setTimeout(function(){
                                html_height = $container.height();
                                $("#sidebar").height(html_height - 30);
                            }, 500);
                        }   
                    });
                });
            } else {
                $container.imagesLoaded( function(){
                    $container.isotope({
                        animationEngine: "best-available",
                        itemSelector : "article.post",
                        masonry: {
                            columnWidth: 186,
                            gutterWidth: 20
                        },
                        onLayout: function(){
                            setTimeout(function(){
                                html_height = $container.height();
                                $("#sidebar").height(html_height - 20);
                            }, 500);
                        }   
                    });
                });
            };  
        }).smartresize();
    

    CSS

    @media (max-width: 767px) {
        article.post {
            margin: 0 0 1px;
        }
        article.small img,
        article.articles img,
        article.long img,
        article.tall img ,
        article.big img {
            width: 100%;
            border-left: solid 1px #161616;
            border-right: solid 1px #161616;
        }
        article.small,
        article.articles,
        article.long,
        article.tall,
        article.big {
            width: 50%;
        }
    }
    @media (min-width: 768px) and (max-width: 979px) {
        article.post {
            margin: 0 0 20px 20px;
        }
        article.small,
        article.small img,
        article.articles,
        article.articles img {
            width: 166px;
            height: 166px;
        }
        article.long,
        article.long img {
            width: 352px;
            height: 166px;
        }
        article.tall,
        article.tall img {
            width: 166px;
            height: 352px;
        }
        article.big,
        article.big img {
            width: 352px;
            height: 352px;
        }
    }
    @media (min-width: 980px) and (max-width: 1199px) {
        article.post {
            margin: 0 0 20px 20px;
        }
        article.small,
        article.small img,
        article.articles,
        article.articles img {
            width: 220px;
            height: 220px;
        }
        article.long,
        article.long img {
            width: 460px;
            height: 220px;
        }
        article.tall,
        article.tall img {
            width: 220px;
            height: 460px;
        }
        article.big,
        article.big img {
            width: 460px;
            height: 460px;
        }
    }
    @media (min-width: 1200px) {
        article.post {
            margin: 0 0 30px 30px;
        }
        article.small,
        article.small img,
        article.articles,
        article.articles img {
            width: 270px;
            height: 270px;
        }
        article.long,
        article.long img {
            width: 570px;
            height: 270px;
        }
        article.tall,
        article.tall img {
            width: 270px;
            height: 570px;
        }
        article.big,
        article.big img {
            width: 570px;
            height: 570px;
        }
    }
    /**** Start: Recommended Isotope styles ****/
    /**** Isotope Filtering ****/
    .isotope-item {
      z-index: 2;
    }
    .isotope-hidden.isotope-item {
      pointer-events: none;
      z-index: 1;
    }
    /**** Isotope CSS3 transitions ****/
    .isotope,
    .isotope .isotope-item {
      -webkit-transition-duration: 0.8s;
      -moz-transition-duration: 0.8s;
      -ms-transition-duration: 0.8s;
      -o-transition-duration: 0.8s;
      transition-duration: 0.8s;
    }
    .isotope {
      -webkit-transition-property: height, width;
      -moz-transition-property: height, width;
      -ms-transition-property: height, width;
      -o-transition-property: height, width;
      transition-property: height, width;
    }
    .isotope .isotope-item {
      -webkit-transition-property: -webkit-transform, opacity;
      -moz-transition-property: -moz-transform, opacity;
      -ms-transition-property: -ms-transform, opacity;
      -o-transition-property: top, left, opacity;
      transition-property: transform, opacity;
      -webkit-transition-delay: 0s, 0.8s, 0s;
      -moz-transition-delay: 0s, 0.8s, 0s;
      -ms-transition-delay: 0s, 0.8s, 0s;
      -o-transition-delay: 0s, 0.8s, 0s;
      transition-delay: 0s, 0.8s, 0s;
    }
    /**** disabling Isotope CSS3 transitions ****/
    .isotope.no-transition,
    .isotope.no-transition .isotope-item,
    .isotope .isotope-item.no-transition {
      -webkit-transition-duration: 0s;
      -moz-transition-duration: 0s;
      -ms-transition-duration: 0s;
      -o-transition-duration: 0s;
      transition-duration: 0s;
    }
    
    
    help wanted test case provided :) 
    opened by gablabelle 25
  • Bootstrap 3 and responsive fluid column in % percentage

    Bootstrap 3 and responsive fluid column in % percentage

    Hi, this is only my problem beacuse I do not know how to do, or is it a real problem of coexistence between "Bootstrap3" and your beautiful "Isotope"?

    http://jsfiddle.net/zjVkW/

    opened by serucc 24
  • Webpack problem

    Webpack problem

    This is similar to the other issue https://github.com/desandro/masonry/issues/679, I tried your solution but still didn't work.

    
    ERROR in /Users/jameslin/projects/nzpg/~/isotope-layout/js/isotope.js
    Module not found: Error: Cannot resolve module 'get-size/get-size' in /Users/jameslin/projects/nzpg/node_modules/isotope-layout/js
     @ /Users/jameslin/projects/nzpg/~/isotope-layout/js/isotope.js 17:4-31:8
    
    ERROR in /Users/jameslin/projects/nzpg/~/isotope-layout/js/isotope.js
    Module not found: Error: Cannot resolve module 'matches-selector/matches-selector' in /Users/jameslin/projects/nzpg/node_modules/isotope-layout/js
     @ /Users/jameslin/projects/nzpg/~/isotope-layout/js/isotope.js 17:4-31:8
    
    ERROR in /Users/jameslin/projects/nzpg/~/isotope-layout/js/isotope.js
    Module not found: Error: Cannot resolve module 'fizzy-ui-utils/utils' in /Users/jameslin/projects/nzpg/node_modules/isotope-layout/js
     @ /Users/jameslin/projects/nzpg/~/isotope-layout/js/isotope.js 17:4-31:8
    
    ERROR in /Users/jameslin/projects/nzpg/~/isotope-layout/js/isotope.js
    Module not found: Error: Cannot resolve module 'outlayer/outlayer' in /Users/jameslin/projects/nzpg/node_modules/isotope-layout/js
     @ /Users/jameslin/projects/nzpg/~/isotope-layout/js/isotope.js 17:4-31:8
    
    ERROR in /Users/jameslin/projects/nzpg/~/alt/lib/index.js
    Module not found: Error: Cannot resolve module 'flux' in /Users/jameslin/projects/nzpg/node_modules/alt/lib
     @ /Users/jameslin/projects/nzpg/~/alt/lib/index.js 23:12-27
    
    ERROR in /Users/jameslin/projects/nzpg/~/isotope-layout/js/layout-mode.js
    Module not found: Error: Cannot resolve module 'get-size/get-size' in /Users/jameslin/projects/nzpg/node_modules/isotope-layout/js
     @ /Users/jameslin/projects/nzpg/~/isotope-layout/js/layout-mode.js 11:4-15:15
    
    ERROR in /Users/jameslin/projects/nzpg/~/isotope-layout/js/layout-mode.js
    Module not found: Error: Cannot resolve module 'outlayer/outlayer' in /Users/jameslin/projects/nzpg/node_modules/isotope-layout/js
     @ /Users/jameslin/projects/nzpg/~/isotope-layout/js/layout-mode.js 11:4-15:15
    
    ERROR in /Users/jameslin/projects/nzpg/~/isotope-layout/js/item.js
    Module not found: Error: Cannot resolve module 'outlayer/outlayer' in /Users/jameslin/projects/nzpg/node_modules/isotope-layout/js
     @ /Users/jameslin/projects/nzpg/~/isotope-layout/js/item.js 10:4-13:15
    
    ERROR in /Users/jameslin/projects/nzpg/~/isotope-layout/js/layout-modes/masonry.js
    Module not found: Error: Cannot resolve module 'masonry/masonry' in /Users/jameslin/projects/nzpg/node_modules/isotope-layout/js/layout-modes
     @ /Users/jameslin/projects/nzpg/~/isotope-layout/js/layout-modes/masonry.js 12:4-16:15
    
    ERROR in /Users/jameslin/projects/nzpg/~/alt/lib/store/StoreMixin.js
    Module not found: Error: Cannot resolve module 'transmitter' in /Users/jameslin/projects/nzpg/node_modules/alt/lib/store
     @ /Users/jameslin/projects/nzpg/~/alt/lib/store/StoreMixin.js 11:19-41
    
    ERROR in /Users/jameslin/projects/nzpg/~/alt/lib/store/AltStore.js
    Module not found: Error: Cannot resolve module 'transmitter' in /Users/jameslin/projects/nzpg/node_modules/alt/lib/store
     @ /Users/jameslin/projects/nzpg/~/alt/lib/store/AltStore.js 19:19-41
    
    module loader 
    opened by variable 23
  • non-commercial licensing is unusable

    non-commercial licensing is unusable

    "For non-commercial, personal, or open source projects and applications, you may use Isotope under the terms of the GPL v3 License. You may use Isotope for free." You cannot release something under the GPL for non-commercial use only. That is an invalid additional restriction which the GPL forbids - the statement pretty much contradicts itself. (read the GPL carefully - it explicitely forbids additional restrictions such as this one)

    You were probably meant to write: "Alternatively, you may use Isotope under the terms of the GPLv3 License." However, this necessarily includes commercial use as well.

    opened by ghost 23
  • Isotope causes DOM leaks

    Isotope causes DOM leaks

    If I do something like this:

    for i in [0...100]
          $(".aux_views").append($('<div class="aux_view flash_view">Blah</div>'))
    $(".aux_view").remove()
    

    Then take a heap snapshot in Chrome's profiler, I'm left with very few detached DOM nodes floating around:

    https://www.evernote.com/shard/s254/sh/43d0f23f-1543-4886-958f-76104920e0e4/0d5082c1f01ad07b572a1c61b1dbb679

    If I do the equivalent in Isotope (assuming that .aux_views has been properly initialized of course):

    for i in [0...100]
          $(".aux_views").isotope("insert", $('<div class="aux_view flash_view">Blah</div>'))
    $(".aux_views").isotope("remove", $(".aux_view"))
    

    Nothing is cleaned up, ever, as there are prevObject references to every single thing that Isotope created bound up in some closure somewhere:

    https://www.evernote.com/shard/s254/sh/d927b234-744f-427f-b30c-6c38b31c2e3d/42f4f6a86e8d60bf8f2cc35a35f4ca07

    This would seem to be due to Isotope's reliance on jQuery's pushStack method with all its .not() and .filter() calls, though I'd be at a loss as to pick out which one's responsible.

    It's a fairly serious problem as the page's memory consumption will skyrocket rapidly if Isotope elements are inserted and removed on a regular basis.

    You can see the garbage collector kick in periodically, yet the orphaned nodes just continue to climb their way up to the sky:

    https://www.evernote.com/shard/s254/sh/9a4c3d92-42e0-4cba-a46d-7e445fa85859/c17e2c544cb3f5171c1d7d37676062e6

    opened by ghost 22
  • More intelligent sorting

    More intelligent sorting

    Sorting algorithm is limited to one set of data.

    In the Elements Complete demo, Sort by number then by category. Within each category, the items elements should be sorted by number. Ideally you should be able to rely on the previous sort order to 'carry over' on the next sort.

    feature request 
    opened by desandro 22
  • Cannot read property 'original-order' of undefined

    Cannot read property 'original-order' of undefined

    I have a select-box that has 4 different values. On selecting each value, the content of isotope container should change accordingly.

    $('.menu-select').change(function(){
    
        var selected=$('.menu-select-option:selected').html().toLowerCase();
    
            if(selected=='all')
                {
                    loadContent('mixed_home_latest.html');
                }
            if (selected=='latest')
                {
                                 loadContent('mixed_home_latest.html');
    
                }
                          });
    

    My isotope code is :

    /* Code to enable right-to-left isotope*/
    $.Isotope.prototype._positionAbs = function( x, y ) {
        return { right: x+20, top: y };
    };
    var $container = $('#main');
    $(document).ready(function(){
        function loadContent(filename){ 
    
            $container.load(filename, function(){
                $container.imagesLoaded(function(){
                    $container.isotope({
                      masonry: {
                        columnWidth: 10
                      },
                      itemSelector: '.item'
                    });
                });
            if($container.hasClass('isotope'))
            {
    
                $container.isotope('reLayout');
            }
                 });
              });
    

    The code runs fine when i select a value for the first time. Thereafter it gives the following error on each selection: Uncaught TypeError: Cannot read property 'original-order' of undefined jquery.isotope.min.js:11 b.Isotope._getSorter jquery.isotope.min.js:11 d jquery.isotope.min.js:11 b.Isotope._sort jquery.isotope.min.js:11 b.Isotope._init jquery.isotope.min.js:11 (anonymous function) jquery.isotope.min.js:11 v.extend.each jquery.min.js:2 v.fn.v.each jquery.min.js:2 b.fn.isotope jquery.isotope.min.js:11 (anonymous function) mixed_home.html:106 h jquery.isotope.min.js:11

    opened by soundswaste 20
  • Fluid & masonry layout breaking into 2 columns

    Fluid & masonry layout breaking into 2 columns

    I don' think something is working correctly but I can't pinpoint what exactly.

    Basically my layout had successfully been outputting 4 boxes per row (at 25% width) without a problem but over the last month or so (new jQuery version is out/browsers have been updated (i think)) it seems something has changed to produce the error where by the 4 column is now turning into a two column on browser resize and sometimes even on page load. See my video here: http://cl.ly/0s172D303X1M3H1v161z (click View in browser link). The jsFiddle is here: http://jsfiddle.net/TVXve/

    I find the problem is inconsistent across browsers, it works in some browsers but not others.

    bug 
    opened by baoagency 18
  • Vertical Only Positioning?

    Vertical Only Positioning?

    I posted this question on StackOverflow, which may be a more appropriate venue for it:

    https://stackoverflow.com/questions/75011976/isotopejs-with-vertical-only-positioning-updates-possible

    Isotope JS will probably work nicely to filter events in a calendar-style display, but the trouble is getting it to keep items in the appropriate column.

    The problem, when items for tues-thursday are filtered out:

    |monday|tuesday|wednesday|thursday|friday|saturday|
    ---------------------------------------------------
    | mon 1| fri 1 | sat 1 |
    
    

    My config:

    var iso = new Isotope( '.schedule tbody', {
      itemSelector: 'td',
      layoutMode: 'masonry',
      resize: true
    });
    

    And a Codepen example.

    Thinking maybe fitColumns is the tool, but the .arrange method doesn't seem to work in that layout mode:

    var iso = new Isotope(".schedule tbody", {
      layoutMode: 'fitColumns',
      itemSelector: '.grid-item'
    });
    
    ...
    
    iso.arrange({ filter: filterValue }); // nothing
    
    

    Another codepen.

    Any suggestions?

    opened by MikeiLL 0
  • Combine simple dropdown filter and multiselect dropdown filter with checkbox - first filter overwritten

    Combine simple dropdown filter and multiselect dropdown filter with checkbox - first filter overwritten

    Hi, I've been doing trial and error for isotope filtering and I'm running out of options that leads me writing here. I'm new to coding so please bear with me.

    I'm trying to create filters using isotope. I had the filter working for both list and multiselect with checkbox options separately. But I'm stuck with combining the two different filters.

    The list filter is triggered on click while the multiselect with checkbox filter is triggered on change. I tried using both events at once. Though I'm not sure what's the right way.

    Now, here's my problem. The first filter would work at first but after using the multiselect checkbox, the previous filters were overwritten. Therefore, they are not combined.

    I temporarily changed the list to select for the first filter because it's easier to setup than the list. But the logic should remain the same of what I'm trying to achieve.

    This is what I recreated https://codepen.io/kim5x5/pen/ZERgLJd if you could take a a look ang give some enlightenment I would really appreciate it.

    opened by kim5x5 0
  • How can we use layout without DOM?

    How can we use layout without DOM?

    For example, I just want to tell Isotope to make a layout, then apply the numbers to custom objects (f.e. Three.js, canvas 2D, pixi.js, etc).

    How do we use isotope layout without it automatically applying to DOM? Example:

    const meshes = [/* An array of Three.js meshes. */]
    
    const iso = new Isotope()
    // ...
    iso.layout();
    
    for (const mesh of meshes) {
      mesh.position.x = /*apply value from iso*/
      mesh.position.y = /*apply value from iso*/
    }
    
    renderer.render(scene, camera);
    

    I do also have custom elements (LUME) that render using WebGL. Is there a way to tell isotope how to map values to attributes of DOM elements it controls? Example:

    <lume-scene webgl id="scene">
      <lume-mesh has="box-geometry physical-material" class=".card"></lume-mesh>
      ...
    </lume-scene>
    
    <script>
      var iso = new Isotope(document.querySelector('#scene'), {
        itemSelector: '.card',
        // ...
    
        applyValue(el, {x, y, width, height}) { // hypothetical
          // ... apply value to `el` (<lume-mesh>) ...
        }
      });
    
      iso.layout();
    
      // or similar to three.js example
      for (const el of document.querySelector('lume-mesh')) {
        el.position.x = /*apply value from iso*/
        el.position.y = /*apply value from iso*/
      }
    </script>
    
    opened by trusktr 0
  • "window is not defined" when importing in next.js

    I am using isotope-layout on a next.js project (not sure if related) Whenever I refresh ht page that calls new Isotope I get this:

    index.js?46cb:594 Uncaught ReferenceError: window is not defined
        at Object.<anonymous> (file:///.../node_modules/isotope-layout/js/isotope.js:59:4)
    

    The strange thing is that when I comment out new Isotope and uncomment, it works because the hot reload of next.js only reloads part of the page.

    Any ideas why this is happening?

    opened by ilyador 4
  • Add vanilla JS examples to the docs for each Codepen example

    Add vanilla JS examples to the docs for each Codepen example

    Right now, the docs have several examples of how to implement Isotope (fantastic! This is incredibly helpful). Certainly not all, but the majority of these examples require jQuery. In 2022, most of what made jQuery useful is now baked into the browser as native JavaScript APIs (see You Might Not Need jQuery).

    It's incredibly useful to have vanilla JavaScript examples of Isotope. I have even converted one of the examples to vanilla JS and added a comment to the original Codepen.

    I would love to see Isotope have vanilla JS examples for each Codepen. In my searches, I would be especially grateful to have vanilla JS examples of the following:

    You may notice many of the Pens I've listed here include combination filters with #a11y friendly controls (like checkboxes, selects, radios, etc).

    Lastly, thank you for building and maintaining Isotope! It's a fantastic project that I have used many times over the years. :clap:

    (If you, dear reader, would like to see this too, leave a :+1:!)

    opened by adamjohnson 3
Releases(v3.0.5)
  • v3.0.5(Apr 6, 2018)

  • v3.0.4(Apr 21, 2017)

    • 🔔 Added horizontalOrder option for masonry layout mode, to maintain left-to-right order in Masonry layouts. For #1130
    • ⬆️ Updated fizzy-ui-utils to v2.0.5
    Source code(tar.gz)
    Source code(zip)
  • v3.0.2(Jan 26, 2017)

  • v3.0.1(Jun 8, 2016)

  • v3.0.0(May 5, 2016)

    • :wrench: Added stagger option to stagger item transitions. Fixed #1019
    • :package: Improved Webpack config
    • :scissors: Removed IE8 & 9 code
      • :scissors: removed IE8 dependencies: classie, eventie, get-style-property
    • :arrow_up: outlayer v2.
      • replaced EventEmitter with smaller ev-emitter
      • use [data-isotope] to init in HTML. .js-isotope & data-isotope-options still works
      • isOption changed to option. Maintain backwards compatibility with old isOption names:
        • isOriginLeft -> originLeft
        • isOriginTop -> originTop
        • isResizeBound -> resize
        • isInitLayout -> initLayout
    • :arrow_up: jquery-bridget v2. Changed jquery.bridget.js path to jquery-bridget.js
    • :arrow_up: get-size v2
    • :tropical_drink: switched out Grunt for Gulp for tasks
    Source code(tar.gz)
    Source code(zip)
  • v2.2.2(Mar 16, 2016)

  • v2.2.1(Mar 16, 2016)

  • v2.2.0(Mar 16, 2016)

  • v2.1.1(Mar 16, 2016)

  • v2.1.0(Mar 16, 2016)

  • v2.0.1(Mar 16, 2016)

  • v2.0.0(Mar 16, 2016)

    • Removed all jQuery. Isotope can now be used with vanilla JS
      • Switched out jQuery animation for CSS transitions
    • Build with dependencies: Outlayer v1, Masonry v3 etc
    • Moved layout modes into their own files/projects
    • Added unit tests
    • Build pkgd.js with Grunt
    • Removed Isotope CSS code
    Source code(tar.gz)
    Source code(zip)
  • v1.5.26(Mar 16, 2016)

Owner
Metafizzy
Delightful JS plugins
Metafizzy
Obsidian-dataview-table-filter-menu - Dynamically created filter menu for dataview tables in obsidian

Dataview table Filter Menu for Obsidian Dynamically created filter menu for data

shiro 17 Sep 24, 2022
:tada: A magical vue admin https://panjiachen.github.io/vue-element-admin

English | 简体中文 | 日本語 | Spanish SPONSORED BY 活动服务销售平台 客户消息直达工作群 Introduction vue-element-admin is a production-ready front-end solution for admin inter

花裤衩 80.1k Dec 31, 2022
A magical vite plugin that helps you to generate and manage documentation website.

vite-plugin-book A magical vite plugin that helps you to generate and manage documentation website. ⚠️ This project is still WIP. It's a MVP now. A bu

Mirone 89 Dec 20, 2022
A ✨light✨ and magical Svelte component for CSS media queries🐹

Svelte CSS media queries ?? Demo - Svelte REPL Lightweight, comfortable, like Svelte ?? how to install npm i svelte-media-queries What can I do? quer

Nikita Fedorov 9 Dec 26, 2022
A Twitter bot that feeds magical realism prompts into the Stable Diffusion AI image generator.

Illustrated Magical Realism Bot Follow the bot on Twitter Follow @ImagicalRealism to see the generated output. Technical details The Twitter API This

Jeff Posnick 6 Nov 17, 2022
A library optimized for concise and principled data graphics and layouts.

MetricsGraphics is a library built for visualizing and laying out time-series data. At around 15kB (gzipped), it provides a simple way to produce comm

Metrics Graphics 7.5k Dec 22, 2022
A library optimized for concise and principled data graphics and layouts.

MetricsGraphics is a library built for visualizing and laying out time-series data. At around 15kB (gzipped), it provides a simple way to produce comm

Metrics Graphics 7.5k Dec 22, 2022
A refined tool for exploring open-source projects on GitHub with a file tree, rich Markdown and image previews, multi-pane multi-tab layouts and first-class support for Ink syntax highlighting.

Ink codebase browser, "Kin" ?? The Ink codebase browser is a tool to explore open-source code on GitHub, especially my side projects written in the In

Linus Lee 20 Oct 30, 2022
An online tool to generate and visualize maps for irregular and/or gapped LED layouts, for use with FastLED, Pixelblaze and other libraries.

An online tool to generate and visualize maps for irregular and/or gapped LED layouts, for use with FastLED, Pixelblaze and other libraries.

Jason Coon 172 Dec 8, 2022
Lit + File Based Routing + Nested Layouts

Lit File Based Routing Lit router for nested layouts and file based routing. Similar to https://remix.run/ but at client side. Demo Package Archived i

Rody Davis 9 Jan 14, 2022
Freewall is a cross-browser and responsive jQuery plugin to help you create grid, image and masonry layouts for desktop, mobile, and tablet...

Freewall Freewall is a cross-browser and responsive jQuery plugin to help you create many types of grid layouts: flexible layouts, images layouts, nes

Minh Nguyen 1.9k Dec 27, 2022
Style definitions for nice terminal layouts 👄

blipgloss Style definitions for nice terminal layouts. Powered by lipgloss and bun:ffi. Install bun add blipgloss Usage Blipgloss takes an expressive,

Robert Soriano 51 Dec 31, 2022
Snippets4Dummies is an easy to use Visual Code Extension which is used for building beautiful layouts as fast as your crush rejects you!

Why Snippets4Dummies? Snippets4Dummies is an easy to use Visual Code Extension which is used for building beautiful layouts as fast as your crush reje

SCHWITZ 6 Oct 11, 2022
The perfect library for adding search, sort, filters and flexibility to tables, lists and various HTML elements. Built to be invisible and work on existing HTML.

List.js Perfect library for adding search, sort, filters and flexibility to tables, lists and various HTML elements. Built to be invisible and work on

Jonny Strömberg 10.9k Jan 1, 2023
Sort tsconfig.json compilerOptions

sort-compiler-options Sort tsconfig.json compilerOptions in the same order as the TSConfig Reference (Support v4.5.5 or less) Install npm i sort-compi

P-Chan 6 Oct 19, 2022
Group and sort Eleventy’s verbose output by directory (and show file size with benchmarks)

eleventy-plugin-directory-output Group and sort Eleventy’s verbose output by directory (and show file size with benchmarks). Sample output from eleven

Eleventy 16 Oct 27, 2022
Using Htmx, ASP.NET Core, and Marten (postgres document db) to sort list

Using Htmx, ASP.NET Core, and Marten (postgres document db) to sort list

Khalid Abuhakmeh 5 Feb 16, 2022
A small CLI to sort any specified json files alphabetically

This is a small CLI to sort any specified json files alphabetically. This was created to sort localization files, but maybe you will find another use case.

PLAYT.net 4 Mar 20, 2022
⛲ Sort import declarations into a pleasing and readable cascade.

⛲ eslint-plugin-cascading-imports This plugin allows to automatically enforce a visual "cascading" order for import declarations. Imports in each bloc

Florent 1 Jan 20, 2022
Sort imports by path - VS Code extension

Import sort by absolute path The sorting algorithm will group each item in the array and sort (alphabetically) its children that starts with the path

Richard Bidin 3 Feb 2, 2022