+[`matches`/`matchesSelector`](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) is pretty hot :fire:, but has [vendor-prefix baggage](http://caniuse.com/#feat=matchesselector) :handbag: :pouch:. This helper function takes care of that, without polyfilling or augmenting `Element.prototype`.
+EvEmitter adds publish/subscribe pattern to a browser class. It's a smaller version of [Olical/EventEmitter](https://github.com/Olical/EventEmitter). That EventEmitter is full featured, widely used, and great. This EvEmitter has just the base event functionality to power the event API in libraries like [Isotope](http://isotope.metafizzy.co), [Flickity](http://flickity.metafizzy.co), [Masonry](http://masonry.desandro.com), and [imagesLoaded](http://imagesloaded.desandro.com).
+All bug reports and problem issues require a [**reduced test case**](https://css-tricks.com/reduced-test-cases/). Create one by forking any one of the [CodePen demos](https://codepen.io/desandro/pens/tags/?grid_type=list&selected_tag=flickity-docs&sort_order=asc) from [the docs](https://flickity.metafizzy.co).
++ A reduced test case clearly demonstrates the bug or issue.
++ It contains the bare minimum HTML, CSS, and JavaScript required to demonstrate the bug.
++ A link to your production site is **not** a reduced test case.
+
+Providing a reduced test case is the best way to get your issue addressed. They help you point out the problem. They help me verify and debug the problem. They help others understand the problem. Without a reduced test case, your issue may be closed.
+
+## Pull requests
+
+Contributions are welcome!
+
++ **For typos and one-line fixes,** send those right in.
++ **For larger features,** open an issue before starting any significant work. Let's discuss to see how your feature fits within Flickity's vision.
++ **Follow the code style.** Spaces in brackets, semicolons, trailing commas.
++ **Do not edit `dist/` files.** Make your edits to source files in `js/` and `css/`.
++ **Do not run `gulp` to update `dist/` files.** I'll take care of this when I create a new release.
+
+Your code will be used as part of a commercial product if merged. By submitting a Pull Request, you are giving your consent for your code to be integrated into Flickity as part of a commercial product.
+<!-- Thanks for submitting an issue! All bug reports and problem issues require a **reduced test case**. Create one by forking any one of the CodePen examples from the docs. See guidelines link above. -->
+If you want to use Flickity 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 a Flickity Commercial License at [flickity.metafizzy.co](https://flickity.metafizzy.co/#commercial-license)
+
+### Open source license
+
+If you are creating an open source application under a license compatible with the [GNU GPL license v3](https://www.gnu.org/licenses/gpl-3.0.html), you may use Flickity under the terms of the GPLv3.
+
+[Read more about Flickity's license](https://flickity.metafizzy.co/license.html).
+
+## Usage
+
+Flickity works with a container element and a set of child cell elements
+
+``` html
+<div class="carousel">
+ <div class="carousel-cell">...</div>
+ <div class="carousel-cell">...</div>
+ <div class="carousel-cell">...</div>
+ ...
+</div>
+```
+
+### Options
+
+``` js
+var flky = new Flickity( '.gallery', {
+ // options, defaults listed
+
+ accessibility: true,
+ // enable keyboard navigation, pressing left & right keys
+
+ adaptiveHeight: false,
+ // set carousel height to the selected slide
+
+ autoPlay: false,
+ // advances to the next cell
+ // if true, default is 3 seconds
+ // or set time between advances in milliseconds
+ // i.e. `autoPlay: 1000` will advance every 1 second
+
+ cellAlign: 'center',
+ // alignment of cells, 'center', 'left', or 'right'
+ // or a decimal 0-1, 0 is beginning (left) of container, 1 is end (right)
+
+ cellSelector: undefined,
+ // specify selector for cell elements
+
+ contain: false,
+ // will contain cells to container
+ // so no excess scroll at beginning or end
+ // has no effect if wrapAround is enabled
+
+ draggable: '>1',
+ // enables dragging & flicking
+ // if at least 2 cells
+
+ dragThreshold: 3,
+ // number of pixels a user must scroll horizontally to start dragging
+ // increase to allow more room for vertical scroll for touch devices
+
+ freeScroll: false,
+ // enables content to be freely scrolled and flicked
+ // without aligning cells
+
+ friction: 0.2,
+ // smaller number = easier to flick farther
+
+ groupCells: false,
+ // group cells together in slides
+
+ initialIndex: 0,
+ // zero-based index of the initial selected cell
+
+ lazyLoad: true,
+ // enable lazy-loading images
+ // set img data-flickity-lazyload="src.jpg"
+ // set to number to load images adjacent cells
+
+ percentPosition: true,
+ // sets positioning in percent values, rather than pixels
+ // Enable if items have percent widths
+ // Disable if items have pixel widths, like images
+
+ prevNextButtons: true,
+ // creates and enables buttons to click to previous & next cells
+
+ pageDots: true,
+ // create and enable page dots
+
+ resize: true,
+ // listens to window resize events to adjust size & positions
+
+ rightToLeft: false,
+ // enables right-to-left layout
+
+ setGallerySize: true,
+ // sets the height of gallery
+ // disable if gallery already has height set with CSS
+
+ watchCSS: false,
+ // watches the content of :after of the element
+ // activates if #element:after { content: 'flickity' }
+
+ wrapAround: false
+ // at end of cells, wraps-around to first for infinite scrolling
+Get the size of elements. Used in [Masonry](https://masonry.desandro.com), [Isotope](https://isotope.metafizzy.co), & [Flickity](https://flickity.metafizzy.co).
+Browser support: IE10+, Android 4.0+, iOS 5+, and modern browsers
+
+## Install
+
+Install with npm: `npm install get-size`
+
+Install with [Bower](https://bower.io): `bower install get-size`
+
+## Firefox hidden iframe bug
+
+[Firefox has an old bug](https://bugzilla.mozilla.org/show_bug.cgi?id=548397) that occurs within iframes that are hidden with `display: none`. To resolve this, you can use alternate CSS to hide the iframe off-screen, with out `display: none`.
+
+``` css
+.hide-iframe {
+ visibility: hidden;
+ position: absolute;
+ left: -999em;
+}
+```
+
+## MIT License
+
+getSize is released under the [MIT License](https://desandro.mit-license.org/).