From 41650e34b61a0084f799955ab8f9fdcb3daa23cc Mon Sep 17 00:00:00 2001 From: greg5green Date: Sat, 20 Jun 2015 23:12:04 -0400 Subject: [PATCH] Remove dist folder from develop, it only needs to be on master --- dist/LICENSE | 22 - dist/README.md | 158 -- dist/assets/ajax-loader.gif | Bin 3208 -> 0 bytes dist/assets/owl.carousel.css | 179 -- dist/assets/owl.carousel.min.css | 1 - dist/assets/owl.theme.default.css | 51 - dist/assets/owl.theme.default.min.css | 1 - dist/assets/owl.theme.green.css | 51 - dist/assets/owl.theme.green.min.css | 1 - dist/assets/owl.video.play.png | Bin 4976 -> 0 bytes dist/owl.carousel.js | 3148 ------------------------- dist/owl.carousel.min.js | 2 - 12 files changed, 3614 deletions(-) delete mode 100644 dist/LICENSE delete mode 100644 dist/README.md delete mode 100644 dist/assets/ajax-loader.gif delete mode 100644 dist/assets/owl.carousel.css delete mode 100644 dist/assets/owl.carousel.min.css delete mode 100644 dist/assets/owl.theme.default.css delete mode 100644 dist/assets/owl.theme.default.min.css delete mode 100644 dist/assets/owl.theme.green.css delete mode 100644 dist/assets/owl.theme.green.min.css delete mode 100644 dist/assets/owl.video.play.png delete mode 100644 dist/owl.carousel.js delete mode 100644 dist/owl.carousel.min.js diff --git a/dist/LICENSE b/dist/LICENSE deleted file mode 100644 index 7162d578..00000000 --- a/dist/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2014 Owl - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/dist/README.md b/dist/README.md deleted file mode 100644 index a02d37a6..00000000 --- a/dist/README.md +++ /dev/null @@ -1,158 +0,0 @@ -[![Stories in Ready](https://badge.waffle.io/smashingboxes/OwlCarousel2.png?label=ready&title=Ready)](http://waffle.io/smashingboxes/OwlCarousel2) -[![Build Status](https://travis-ci.org/smashingboxes/OwlCarousel2.svg)](https://travis-ci.org/smashingboxes/OwlCarousel2) - -## Announcement. - -Big announcement comming about maintainance of this project. Stay tuned! - -## Owl Carousel 2 Beta - -Touch enabled [jQuery](http://jquery.com/) plugin that lets you createbeautiful responsive carousel slider. **To get started, check out http://owlcarousel.owlgraphic.com.** - -Please consider that the project is still in beta. The current status of the milestones can be found [here](https://github.com/OwlFonk/OwlCarousel2/milestones). If you want to use the [latest development](https://github.com/OwlFonk/OwlCarousel2/archive/develop.zip) see [building](#building). - -## Quick start - -Download the [latest release](http://owlcarousel.owlgraphic.com/download/owl.carousel.zip) and put the required stylesheet at the [top](https://developer.yahoo.com/performance/rules.html#css_top) of your markup: - -```html - -``` - -Put the script at the [bottom](https://developer.yahoo.com/performance/rules.html#js_bottom) of your markup right after jQuery: - -```html - - -``` - -Wrap your items (`div`, `a`, `img`, `span`, `li` etc.) with a container element (`div`, `ul` etc.). Only the class `owl-carousel` is mandatory to apply proper styles: - -```html - -``` - -Call the [plugin](http://learn.jquery.com/plugins/) function and your carousel is ready. - -```javascript -$(document).ready(function(){ - $('.owl-carousel').owlCarousel(); -}); -``` - -## Documentation - -The documentation, included in this repo in the root directory, is built with [Assemble](http://assemble.io/) and publicly available at http://owlcarousel.owlgraphic.com. The documentation may also be run locally. - -## Building - -This package comes with [Grunt](http://gruntjs.com/) and [Bower](http://bower.io/). The following tasks are available: - - * `default` compiles the CSS and JS into `/dist` and builds the doc. - * `dist` compiles the CSS and JS into `/dist` only. - * `watch` watches source files and builds them automatically whenever you save. - * `test` runs [JSHint](http://www.jshint.com/) and [QUnit](http://qunitjs.com/) tests headlessly in [PhantomJS](http://phantomjs.org/). - -To define which plugins are build into the distribution just edit `/_config.json` to fit your needs. - -## Contributing - -The [issue tracker](https://github.com/OwlFonk/OwlCarousel2/issues) is the preferred channel for bug reports, features requests and submitting pull requests. - -**Please do not use the issue tracker for personal support requests. Stack Overflow ([`owl-carousel`](http://stackoverflow.com/questions/tagged/owl-carousel)) is a better place to get help.** - -### Bug reports - -A bug is a **demonstrable problem** that is caused by the code in the repository. Good bug reports are extremely helpful, so thanks! - -Guidelines for bug reports: - - 1. Use the GitHub issue search — check if the issue has already been reported. - - 2. Check if the issue has been fixed — try to reproduce it using the latest `develop` branch in the repository. - - 3. Isolate the problem — ideally create a reduced test case and a live example. This [JSFiddle](http://jsfiddle.net/eqbL6vLb/) and this [JS Bin](http://jsbin.com/xuxozu/1) are helpful templates you can fork or clone. - -Example: - -> Short and descriptive example bug report title -> -> A summary of the issue and the browser/OS environment in which it occurs. If suitable, include the steps required to reproduce the bug. -> -> 1. This is the first step -> 2. This is the second step -> 3. Further steps, etc. -> -> `` - a link to the reduced test case -> -> Any other information you want to share that is relevant to the issue being reported. This might include the lines of code that you have identified as causing the bug, and potential solutions (and your opinions on their merits). - -### Feature requests - -Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Please provide as much detail and context as possible. - -### Pull requests - -Good pull requests are a fantastic help. They should remain focused in scope and avoid containing unrelated commits. - -**Please ask first** before embarking on any significant pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project. - -Adhering to the following process is the best way to get your work included in the project: - - 1. [Fork](http://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: - - ```bash - git clone https://github.com//OwlCarousel2.git - cd OwlCarousel2 - git remote add upstream https://github.com/OwlFonk/OwlCarousel2.git - ``` - - 2. If you cloned a while ago, get the latest changes from upstream: - - ```bash - git checkout develop - git pull [--rebase] upstream develop - ``` - - 3. Create a new topic branch (off the main project `develop` branch) to contain your feature, change, or fix: - - ```bash - git checkout -b - ``` - - 4. Build the distribution before committing to ensure your changes follow the coding standards and all build files are up to date. - - ```bash - grunt dist - ``` - - 5. Commit your changes in logical chunks. Please adhere to these [guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. - - 6. Locally merge (or rebase) the upstream development branch into your topic branch: - - ```bash - git pull [--rebase] upstream develop - ``` - - 7. Push your topic branch up to your fork: - - ```bash - git push origin - ``` - - 8. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description against the `develop` branch. - -**By submitting a patch, you agree to allow the project owner to -license your work under the terms of the [MIT License](LICENSE).** - -## License - -The code and the documentation are released under the [MIT License](LICENSE). diff --git a/dist/assets/ajax-loader.gif b/dist/assets/ajax-loader.gif deleted file mode 100644 index d3962f969930b0a5cb13fa079f273167082abf68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3208 zcmc(idr(tX9>*`aH#d)ab@kq01A!Wph)@ebf$~%#K!AWe1Ox$*7!^bXc?bl7@CXUW zGlXYANgy#q6cHbw)$)*nC=6B+wW|xX6~%WMySCd|7u?yIomu|anVspLKhK;wXFlKG z_xqhWTyIZ%hZrWn1m*$YGo|>APn3!m9Z|~{pdHwqJ{QUgP%#2E< zs;#XB{@=>=iK6;!*Y*$Hl1UMrZjvv1yYhs^1bsaFqw2-#}7t+&*K$wzaal zc}SILBCP7W%{Cyca55cabMzW53Embazk6}kyKY^Xpak7>>vytKut)9p=N z#&zsV7gJc3Udctrlfs?7ax8Q4!J^AGlifw@TjK&++1OPA#R?{iM9z?gPGZUr^>h+2N3;46vTw6huczv}pXz08=cw>qDfNw$Oz+Go19x-k^21vVi$xlDAc0uY;bRyaRwCcOlo9NPWrdB6jf0wHNsY1rtD0+?pT|y^-_z9)nn9f zm3GauBd)}{U(S{mi6oj^Ux!~%;0*)zH`0s0k(E${CvR>o!ipxHAD;$hfQF&ICqFy` zI<7Nb+P|9(ckU>e!)~g{_Vbcck&*y?(~DQtCbGU|E0=V@qWjzEs=3kq1|A_RnrfI6 z%|VhFd9d4xhpo%;>FbG`%`R29?j^rBmDaD3g0x7X9d2xyIH|>+vq1paiikK3vH5zM(mk5if-X z(noP}urxYrczrn_p4>Gvlfi2$OTLJ`Y<#{sE?Ubfn|OWrH|?p%z3{SKxHbKtK@1l`MBOIrBGRk}R*Pk)KwzjAbWU!);wJFpXFv zk$v##{JhsQ_Dlr~#$b#YCJuQdO@(_|2+~4V~^_RfQjjqK?Lu7Y%!QkaB@i z$|AtMD4e6RVI`X*y;mz!^Pzl?O|)*b1qcrj85{>v9@RX3TKTPevFTHvIKNlUQ{hui z#ShNmqB?PylOuSj?uH3Yt>m5x7%VaTfay zd*dsR760|i@Ut4~``Emi_-BF2W1<4gb~+Wij@pEO@TTSK>7Q;UK--q_cOa5dQEH{c zRzZE;mz4JlrJa?*XMDDK7mJW!m2}kjpo5vOtO|!~YDrG33ndPKZjtL8 zKoP6dh=?HI@i>RBF1QKPGC5>Y4?3E%t?{9GY@0a#jYpCv4kmCCb=6|ArV9svX$jPo5;+FW*4D~m$Z zg2Y8~2zDcPwjQMKK|w-6>5u5k+3%hYrW=jH>xUHqQw__*^wACE;pg}Bj#;f)vI^h+pEM9Vl1T-w zRtwn&IazcDglIH{sgXF`fx=x30vMacS8EWWd%qzBf&)>jU5FYjPC^hZyx@UhFgMiv zE@E&W#;A{q;k)BAIC0p41K#}sd*S|+_YA23-ea%6=4r&L)Kbc2Y{oV4Nd|(($|^agAFFX^LCJu?zIEcTN60Mdn9}=cnj~zx6dEo zg6|n`Xg^1N=yUr@*$d<~+mY$xr`?wf!n6O$1Z4DEk^ZM5SivT5T1C`#$zvzF@q9&0 zZ|wnQ2u4IQIo|O`hxoj;l0Cdi878u)6lBK8s_p9!E2`;r^;K#~UTB4*)QSkhM;!ff z8B|h72PajO4P5Rf6&ZTOcEz9VAlU&F@EWkFLUc!GJ_y9 z&#s)>sXztCy;q2a_016j>I&ZnUgvfwxu_k5F!C8MjIP1*Up9BjEbUZ+b6Q3=0Tx!p zKJ2HFQd3DuR(8xVTR7j_DZ0=o1tI#c^`K<>D-=?PP!gpXYZNW&sy)SwdUPxX6*#Dr4cJLKQjOTtR}_= zHnbM~`(~u4JyVXaSI`>1U_*ysTcUSxmQ4u|=8X~O?dwm?_} z=;QD{#+OMr+sl?1>}3L0)eEkz1=Ap_(E$8#!5%QOpRa$A8d($mC$1W;|NFH(9QLP3 zFhLXkAEO*B&@g=>2?tY_L&#zgXA!WoNI9gU5(Lc_JNTi{n3erGNR~4bJs$h5ysfbkkTi1Yy4e`VI2mh_>^1it{< z%mz4;Pbkjo9Es=$`_o}HpMSRn^{;q;>3aRUEh_)2D^D{<{`a!}uVw!G6^%Q;yZ?}u zHu#73IDZ<~Ni}$Vsl%0A;2lG!!z>8L*~z#POx} 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 diff --git a/dist/owl.carousel.js b/dist/owl.carousel.js deleted file mode 100644 index 2fc8408d..00000000 --- a/dist/owl.carousel.js +++ /dev/null @@ -1,3148 +0,0 @@ -/** - * Owl carousel - * @version 2.0.0 - * @author Bartosz Wojciechowski - * @license The MIT License (MIT) - * @todo Lazy Load Icon - * @todo prevent animationend bubling - * @todo itemsScaleUp - * @todo Test Zepto - * @todo stagePadding calculate wrong active classes - */ -;(function($, window, document, undefined) { - - /** - * Creates a carousel. - * @class The Owl Carousel. - * @public - * @param {HTMLElement|jQuery} element - The element to create the carousel for. - * @param {Object} [options] - The options - */ - function Owl(element, options) { - - /** - * Current settings for the carousel. - * @public - */ - this.settings = null; - - /** - * Current options set by the caller including defaults. - * @public - */ - this.options = $.extend({}, Owl.Defaults, options); - - /** - * Plugin element. - * @public - */ - this.$element = $(element); - - /** - * Proxied event handlers. - * @protected - */ - this._handlers = {}; - - /** - * References to the running plugins of this carousel. - * @protected - */ - this._plugins = {}; - - /** - * Currently suppressed events to prevent them from beeing retriggered. - * @protected - */ - this._supress = {}; - - /** - * Absolute current position. - * @protected - */ - this._current = null; - - /** - * Animation speed in milliseconds. - * @protected - */ - this._speed = null; - - /** - * Coordinates of all items in pixel. - * @todo The name of this member is missleading. - * @protected - */ - this._coordinates = []; - - /** - * Current breakpoint. - * @todo Real media queries would be nice. - * @protected - */ - this._breakpoint = null; - - /** - * Current width of the plugin element. - */ - this._width = null; - - /** - * All real items. - * @protected - */ - this._items = []; - - /** - * All cloned items. - * @protected - */ - this._clones = []; - - /** - * Merge values of all items. - * @todo Maybe this could be part of a plugin. - * @protected - */ - this._mergers = []; - - /** - * Widths of all items. - */ - this._widths = []; - - /** - * Invalidated parts within the update process. - * @protected - */ - this._invalidated = {}; - - /** - * Ordered list of workers for the update process. - * @protected - */ - this._pipe = []; - - /** - * Current state information for the drag operation. - * @todo #261 - * @protected - */ - this._drag = { - time: null, - target: null, - pointer: null, - stage: { - start: null, - current: null - }, - direction: null - }; - - /** - * Current state information and their tags. - * @type {Object} - * @protected - */ - this._states = { - current: {}, - tags: { - 'initializing': [ 'busy' ], - 'animating': [ 'busy' ], - 'dragging': [ 'interacting' ] - } - }; - - $.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) { - this._handlers[handler] = $.proxy(this[handler], this); - }, this)); - - $.each(Owl.Plugins, $.proxy(function(key, plugin) { - this._plugins[key.charAt(0).toLowerCase() + key.slice(1)] - = new plugin(this); - }, this)); - - $.each(Owl.Workers, $.proxy(function(priority, worker) { - this._pipe.push({ - 'filter': worker.filter, - 'run': $.proxy(worker.run, this) - }); - }, this)); - - this.setup(); - this.initialize(); - } - - /** - * Default options for the carousel. - * @public - */ - Owl.Defaults = { - items: 3, - loop: false, - center: false, - rewind: false, - - mouseDrag: true, - touchDrag: true, - pullDrag: true, - freeDrag: false, - - margin: 0, - stagePadding: 0, - - merge: false, - mergeFit: true, - autoWidth: false, - - startPosition: 0, - rtl: false, - - smartSpeed: 250, - fluidSpeed: false, - dragEndSpeed: false, - - responsive: {}, - responsiveRefreshRate: 200, - responsiveBaseElement: window, - - fallbackEasing: 'swing', - - info: false, - - nestedItemSelector: false, - itemElement: 'div', - stageElement: 'div', - - refreshClass: 'owl-refresh', - loadedClass: 'owl-loaded', - loadingClass: 'owl-loading', - rtlClass: 'owl-rtl', - responsiveClass: 'owl-responsive', - dragClass: 'owl-drag', - itemClass: 'owl-item', - stageClass: 'owl-stage', - stageOuterClass: 'owl-stage-outer', - grabClass: 'owl-grab' - }; - - /** - * Enumeration for width. - * @public - * @readonly - * @enum {String} - */ - Owl.Width = { - Default: 'default', - Inner: 'inner', - Outer: 'outer' - }; - - /** - * Enumeration for types. - * @public - * @readonly - * @enum {String} - */ - Owl.Type = { - Event: 'event', - State: 'state' - }; - - /** - * Contains all registered plugins. - * @public - */ - Owl.Plugins = {}; - - /** - * List of workers involved in the update process. - */ - Owl.Workers = [ { - filter: [ 'width', 'settings' ], - run: function() { - this._width = this.$element.width(); - } - }, { - filter: [ 'width', 'items', 'settings' ], - run: function(cache) { - cache.current = this._items && this._items[this.relative(this._current)]; - } - }, { - filter: [ 'items', 'settings' ], - run: function() { - this.$stage.children('.cloned').remove(); - } - }, { - filter: [ 'width', 'items', 'settings' ], - run: function(cache) { - var margin = this.settings.margin || '', - grid = !this.settings.autoWidth, - rtl = this.settings.rtl, - css = { - 'width': 'auto', - 'margin-left': rtl ? margin : '', - 'margin-right': rtl ? '' : margin - }; - - !grid && this.$stage.children().css(css); - - cache.css = css; - } - }, { - filter: [ 'width', 'items', 'settings' ], - run: function(cache) { - var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin, - merge = null, - iterator = this._items.length, - grid = !this.settings.autoWidth, - widths = []; - - cache.items = { - merge: false, - width: width - }; - - while (iterator--) { - merge = this._mergers[iterator]; - merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge; - - cache.items.merge = merge > 1 || cache.items.merge; - - widths[iterator] = !grid ? this._items[iterator].width() : width * merge; - } - - this._widths = widths; - } - }, { - filter: [ 'items', 'settings' ], - run: function() { - var clones = [], - items = this._items, - settings = this.settings, - view = Math.max(settings.items * 2, 4), - size = Math.ceil(items.length / 2) * 2, - repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0, - append = '', - prepend = ''; - - repeat /= 2; - - while (repeat--) { - clones.push(this.normalize(clones.length / 2, true)); - append = append + items[clones[clones.length - 1]][0].outerHTML; - clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true)); - prepend = items[clones[clones.length - 1]][0].outerHTML + prepend; - } - - this._clones = clones; - - $(append).addClass('cloned').appendTo(this.$stage); - $(prepend).addClass('cloned').prependTo(this.$stage); - } - }, { - filter: [ 'width', 'items', 'settings' ], - run: function() { - var rtl = this.settings.rtl ? 1 : -1, - size = this._clones.length + this._items.length, - iterator = -1, - previous = 0, - current = 0, - coordinates = []; - - while (++iterator < size) { - previous = coordinates[iterator - 1] || 0; - current = this._widths[this.relative(iterator)] + this.settings.margin; - coordinates.push(previous + current * rtl); - } - - this._coordinates = coordinates; - } - }, { - filter: [ 'width', 'items', 'settings' ], - run: function() { - var padding = this.settings.stagePadding, - coordinates = this._coordinates, - css = { - 'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2, - 'padding-left': padding || '', - 'padding-right': padding || '' - }; - - this.$stage.css(css); - } - }, { - filter: [ 'width', 'items', 'settings' ], - run: function(cache) { - var iterator = this._coordinates.length, - grid = !this.settings.autoWidth, - items = this.$stage.children(); - - if (grid && cache.items.merge) { - while (iterator--) { - cache.css.width = this._widths[this.relative(iterator)]; - items.eq(iterator).css(cache.css); - } - } else if (grid) { - cache.css.width = cache.items.width; - items.css(cache.css); - } - } - }, { - filter: [ 'items' ], - run: function() { - this._coordinates.length < 1 && this.$stage.removeAttr('style'); - } - }, { - filter: [ 'width', 'items', 'settings' ], - run: function(cache) { - cache.current = cache.current ? this.$stage.children().index(cache.current) : 0; - cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current)); - this.reset(cache.current); - } - }, { - filter: [ 'position' ], - run: function() { - this.animate(this.coordinates(this._current)); - } - }, { - filter: [ 'width', 'position', 'items', 'settings' ], - run: function() { - var rtl = this.settings.rtl ? 1 : -1, - padding = this.settings.stagePadding * 2, - begin = this.coordinates(this.current()) + padding, - end = begin + this.width() * rtl, - inner, outer, matches = [], i, n; - - for (i = 0, n = this._coordinates.length; i < n; i++) { - inner = this._coordinates[i - 1] || 0; - outer = Math.abs(this._coordinates[i]) + padding * rtl; - - if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end))) - || (this.op(outer, '<', begin) && this.op(outer, '>', end))) { - matches.push(i); - } - } - - this.$stage.children('.active').removeClass('active'); - this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active'); - - if (this.settings.center) { - this.$stage.children('.center').removeClass('center'); - this.$stage.children().eq(this.current()).addClass('center'); - } - } - } ]; - - /** - * Initializes the carousel. - * @protected - */ - Owl.prototype.initialize = function() { - this.enter('initializing'); - this.trigger('initialize'); - - this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl); - - if (this.settings.autoWidth && !this.is('pre-loading')) { - var imgs, nestedSelector, width; - imgs = this.$element.find('img'); - nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined; - width = this.$element.children(nestedSelector).width(); - - if (imgs.length && width <= 0) { - this.preloadAutoWidthImages(imgs); - } - } - - this.$element.addClass(this.options.loadingClass); - - // create stage - this.$stage = $('<' + this.settings.stageElement + ' class="' + this.settings.stageClass + '"/>') - .wrap('
'); - - // append stage - this.$element.append(this.$stage.parent()); - - // append content - this.replace(this.$element.children().not(this.$stage.parent())); - - // check visibility - if (this.$element.is(':visible')) { - // update view - this.refresh(); - } else { - // invalidate width - this.invalidate('width'); - } - - this.$element - .removeClass(this.options.loadingClass) - .addClass(this.options.loadedClass); - - // register event handlers - this.registerEventHandlers(); - - this.leave('initializing'); - this.trigger('initialized'); - }; - - /** - * Setups the current settings. - * @todo Remove responsive classes. Why should adaptive designs be brought into IE8? - * @todo Support for media queries by using `matchMedia` would be nice. - * @public - */ - Owl.prototype.setup = function() { - var viewport = this.viewport(), - overwrites = this.options.responsive, - match = -1, - settings = null; - - if (!overwrites) { - settings = $.extend({}, this.options); - } else { - $.each(overwrites, function(breakpoint) { - if (breakpoint <= viewport && breakpoint > match) { - match = Number(breakpoint); - } - }); - - settings = $.extend({}, this.options, overwrites[match]); - delete settings.responsive; - - // responsive class - if (settings.responsiveClass) { - this.$element.attr('class', - this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match) - ); - } - } - - if (this.settings === null || this._breakpoint !== match) { - this.trigger('change', { property: { name: 'settings', value: settings } }); - this._breakpoint = match; - this.settings = settings; - this.invalidate('settings'); - this.trigger('changed', { property: { name: 'settings', value: this.settings } }); - } - }; - - /** - * Updates option logic if necessery. - * @protected - */ - Owl.prototype.optionsLogic = function() { - if (this.settings.autoWidth) { - this.settings.stagePadding = false; - this.settings.merge = false; - } - }; - - /** - * Prepares an item before add. - * @todo Rename event parameter `content` to `item`. - * @protected - * @returns {jQuery|HTMLElement} - The item container. - */ - Owl.prototype.prepare = function(item) { - var event = this.trigger('prepare', { content: item }); - - if (!event.data) { - event.data = $('<' + this.settings.itemElement + '/>') - .addClass(this.options.itemClass).append(item) - } - - this.trigger('prepared', { content: event.data }); - - return event.data; - }; - - /** - * Updates the view. - * @public - */ - Owl.prototype.update = function() { - var i = 0, - n = this._pipe.length, - filter = $.proxy(function(p) { return this[p] }, this._invalidated), - cache = {}; - - while (i < n) { - if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) { - this._pipe[i].run(cache); - } - i++; - } - - this._invalidated = {}; - - !this.is('valid') && this.enter('valid'); - }; - - /** - * Gets the width of the view. - * @public - * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return. - * @returns {Number} - The width of the view in pixel. - */ - Owl.prototype.width = function(dimension) { - dimension = dimension || Owl.Width.Default; - switch (dimension) { - case Owl.Width.Inner: - case Owl.Width.Outer: - return this._width; - default: - return this._width - this.settings.stagePadding * 2 + this.settings.margin; - } - }; - - /** - * Refreshes the carousel primarily for adaptive purposes. - * @public - */ - Owl.prototype.refresh = function() { - this.enter('refreshing'); - this.trigger('refresh'); - - this.setup(); - - this.optionsLogic(); - - this.$element.addClass(this.options.refreshClass); - - this.update(); - - this.$element.removeClass(this.options.refreshClass); - - this.leave('refreshing'); - this.trigger('refreshed'); - }; - - /** - * Checks window `resize` event. - * @protected - */ - Owl.prototype.onThrottledResize = function() { - window.clearTimeout(this.resizeTimer); - this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate); - }; - - /** - * Checks window `resize` event. - * @protected - */ - Owl.prototype.onResize = function() { - if (!this._items.length) { - return false; - } - - if (this._width === this.$element.width()) { - return false; - } - - if (!this.$element.is(':visible')) { - return false; - } - - this.enter('resizing'); - - if (this.trigger('resize').isDefaultPrevented()) { - this.leave('resizing'); - return false; - } - - this.invalidate('width'); - - this.refresh(); - - this.leave('resizing'); - this.trigger('resized'); - }; - - /** - * Registers event handlers. - * @todo Check `msPointerEnabled` - * @todo #261 - * @protected - */ - Owl.prototype.registerEventHandlers = function() { - if ($.support.transition) { - this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this)); - } - - if (this.settings.responsive !== false) { - this.on(window, 'resize', this._handlers.onThrottledResize); - } - - if (this.settings.mouseDrag) { - this.$element.addClass(this.options.dragClass); - this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this)); - this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false }); - } - - if (this.settings.touchDrag){ - this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this)); - this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this)); - } - }; - - /** - * Handles `touchstart` and `mousedown` events. - * @todo Horizontal swipe threshold as option - * @todo #261 - * @protected - * @param {Event} event - The event arguments. - */ - Owl.prototype.onDragStart = function(event) { - var stage = null; - - if (event.which === 3) { - return; - } - - if ($.support.transform) { - stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(','); - stage = { - x: stage[stage.length === 16 ? 12 : 4], - y: stage[stage.length === 16 ? 13 : 5] - }; - } else { - stage = this.$stage.position(); - stage = { - x: this.settings.rtl ? - stage.left + this.$stage.width() - this.width() + this.settings.margin : - stage.left, - y: stage.top - }; - } - - if (this.is('animating')) { - $.support.transform ? this.animate(stage.x) : this.$stage.stop() - this.invalidate('position'); - } - - this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown'); - - this.speed(0); - - this._drag.time = new Date().getTime(); - this._drag.target = $(event.target); - this._drag.stage.start = stage; - this._drag.stage.current = stage; - this._drag.pointer = this.pointer(event); - - $(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this)); - - $(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) { - var delta = this.difference(this._drag.pointer, this.pointer(event)); - - $(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this)); - - if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) { - return; - } - - event.preventDefault(); - - this.enter('dragging'); - this.trigger('drag'); - }, this)); - }; - - /** - * Handles the `touchmove` and `mousemove` events. - * @todo #261 - * @protected - * @param {Event} event - The event arguments. - */ - Owl.prototype.onDragMove = function(event) { - var minimum = null, - maximum = null, - pull = null, - delta = this.difference(this._drag.pointer, this.pointer(event)), - stage = this.difference(this._drag.stage.start, delta); - - if (!this.is('dragging')) { - return; - } - - event.preventDefault(); - - if (this.settings.loop) { - minimum = this.coordinates(this.minimum()); - maximum = this.coordinates(this.maximum() + 1) - minimum; - stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum; - } else { - minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()); - maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()); - pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0; - stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull); - } - - this._drag.stage.current = stage; - - this.animate(stage.x); - }; - - /** - * Handles the `touchend` and `mouseup` events. - * @todo #261 - * @todo Threshold for click event - * @protected - * @param {Event} event - The event arguments. - */ - Owl.prototype.onDragEnd = function(event) { - var delta = this.difference(this._drag.pointer, this.pointer(event)), - stage = this._drag.stage.current, - direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right'; - - $(document).off('.owl.core'); - - this.$element.removeClass(this.options.grabClass); - - if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) { - this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed); - this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction)); - this.invalidate('position'); - this.update(); - - this._drag.direction = direction; - - if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) { - this._drag.target.one('click.owl.core', function() { return false; }); - } - } - - if (!this.is('dragging')) { - return; - } - - this.leave('dragging'); - this.trigger('dragged'); - }; - - /** - * Gets absolute position of the closest item for a coordinate. - * @todo Setting `freeDrag` makes `closest` not reusable. See #165. - * @protected - * @param {Number} coordinate - The coordinate in pixel. - * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`. - * @return {Number} - The absolute position of the closest item. - */ - Owl.prototype.closest = function(coordinate, direction) { - var position = -1, - pull = 30, - width = this.width(), - coordinates = this.coordinates(); - - if (!this.settings.freeDrag) { - // check closest item - $.each(coordinates, $.proxy(function(index, value) { - if (coordinate > value - pull && coordinate < value + pull) { - position = index; - } else if (this.op(coordinate, '<', value) - && this.op(coordinate, '>', coordinates[index + 1] || value - width)) { - position = direction === 'left' ? index + 1 : index; - } - return position === -1; - }, this)); - } - - if (!this.settings.loop) { - // non loop boundries - if (this.op(coordinate, '>', coordinates[this.minimum()])) { - position = coordinate = this.minimum(); - } else if (this.op(coordinate, '<', coordinates[this.maximum()])) { - position = coordinate = this.maximum(); - } - } - - return position; - }; - - /** - * Animates the stage. - * @todo #270 - * @public - * @param {Number} coordinate - The coordinate in pixels. - */ - Owl.prototype.animate = function(coordinate) { - var animate = this.speed() > 0; - - this.is('animating') && this.onTransitionEnd(); - - if (animate) { - this.enter('animating'); - this.trigger('translate'); - } - - if ($.support.transform3d && $.support.transition) { - this.$stage.css({ - transform: 'translate3d(' + coordinate + 'px,0px,0px)', - transition: (this.speed() / 1000) + 's' - }); - } else if (animate) { - this.$stage.animate({ - left: coordinate + 'px' - }, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this)); - } else { - this.$stage.css({ - left: coordinate + 'px' - }); - } - }; - - /** - * Checks whether the carousel is in a specific state or not. - * @param {String} state - The state to check. - * @returns {Boolean} - The flag which indicates if the carousel is busy. - */ - Owl.prototype.is = function(state) { - return this._states.current[state] && this._states.current[state] > 0; - }; - - /** - * Sets the absolute position of the current item. - * @public - * @param {Number} [position] - The new absolute position or nothing to leave it unchanged. - * @returns {Number} - The absolute position of the current item. - */ - Owl.prototype.current = function(position) { - if (position === undefined) { - return this._current; - } - - if (this._items.length === 0) { - return undefined; - } - - position = this.normalize(position); - - if (this._current !== position) { - var event = this.trigger('change', { property: { name: 'position', value: position } }); - - if (event.data !== undefined) { - position = this.normalize(event.data); - } - - this._current = position; - - this.invalidate('position'); - - this.trigger('changed', { property: { name: 'position', value: this._current } }); - } - - return this._current; - }; - - /** - * Invalidates the given part of the update routine. - * @param {String} [part] - The part to invalidate. - * @returns {Array.} - The invalidated parts. - */ - Owl.prototype.invalidate = function(part) { - if ($.type(part) === 'string') { - this._invalidated[part] = true; - this.is('valid') && this.leave('valid'); - } - return $.map(this._invalidated, function(v, i) { return i }); - }; - - /** - * Resets the absolute position of the current item. - * @public - * @param {Number} position - The absolute position of the new item. - */ - Owl.prototype.reset = function(position) { - position = this.normalize(position); - - if (position === undefined) { - return; - } - - this._speed = 0; - this._current = position; - - this.suppress([ 'translate', 'translated' ]); - - this.animate(this.coordinates(position)); - - this.release([ 'translate', 'translated' ]); - }; - - /** - * Normalizes an absolute or a relative position of an item. - * @public - * @param {Number} position - The absolute or relative position to normalize. - * @param {Boolean} [relative=false] - Whether the given position is relative or not. - * @returns {Number} - The normalized position. - */ - Owl.prototype.normalize = function(position, relative) { - var n = this._items.length, - m = relative ? 0 : this._clones.length; - - if (!$.isNumeric(position) || n < 1) { - position = undefined; - } else if (position < 0 || position >= n + m) { - position = ((position - m / 2) % n + n) % n + m / 2; - } - - return position; - }; - - /** - * Converts an absolute position of an item into a relative one. - * @public - * @param {Number} position - The absolute position to convert. - * @returns {Number} - The converted position. - */ - Owl.prototype.relative = function(position) { - position -= this._clones.length / 2; - return this.normalize(position, true); - }; - - /** - * Gets the maximum position for the current item. - * @public - * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. - * @returns {Number} - */ - Owl.prototype.maximum = function(relative) { - var settings = this.settings, - maximum = this._coordinates.length, - boundary = Math.abs(this._coordinates[maximum - 1]) - this._width, - i = -1, j; - - if (settings.loop) { - maximum = this._clones.length / 2 + this._items.length - 1; - } else if (settings.autoWidth || settings.merge) { - // binary search - while (maximum - i > 1) { - Math.abs(this._coordinates[j = maximum + i >> 1]) < boundary - ? i = j : maximum = j; - } - } else if (settings.center) { - maximum = this._items.length - 1; - } else { - maximum = this._items.length - settings.items; - } - - if (relative) { - maximum -= this._clones.length / 2; - } - - return Math.max(maximum, 0); - }; - - /** - * Gets the minimum position for the current item. - * @public - * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. - * @returns {Number} - */ - Owl.prototype.minimum = function(relative) { - return relative ? 0 : this._clones.length / 2; - }; - - /** - * Gets an item at the specified relative position. - * @public - * @param {Number} [position] - The relative position of the item. - * @return {jQuery|Array.} - The item at the given position or all items if no position was given. - */ - Owl.prototype.items = function(position) { - if (position === undefined) { - return this._items.slice(); - } - - position = this.normalize(position, true); - return this._items[position]; - }; - - /** - * Gets an item at the specified relative position. - * @public - * @param {Number} [position] - The relative position of the item. - * @return {jQuery|Array.} - The item at the given position or all items if no position was given. - */ - Owl.prototype.mergers = function(position) { - if (position === undefined) { - return this._mergers.slice(); - } - - position = this.normalize(position, true); - return this._mergers[position]; - }; - - /** - * Gets the absolute positions of clones for an item. - * @public - * @param {Number} [position] - The relative position of the item. - * @returns {Array.} - The absolute positions of clones for the item or all if no position was given. - */ - Owl.prototype.clones = function(position) { - var odd = this._clones.length / 2, - even = odd + this._items.length, - map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 }; - - if (position === undefined) { - return $.map(this._clones, function(v, i) { return map(i) }); - } - - return $.map(this._clones, function(v, i) { return v === position ? map(i) : null }); - }; - - /** - * Sets the current animation speed. - * @public - * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged. - * @returns {Number} - The current animation speed in milliseconds. - */ - Owl.prototype.speed = function(speed) { - if (speed !== undefined) { - this._speed = speed; - } - - return this._speed; - }; - - /** - * Gets the coordinate of an item. - * @todo The name of this method is missleanding. - * @public - * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`. - * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates. - */ - Owl.prototype.coordinates = function(position) { - var coordinate = null; - - if (position === undefined) { - return $.map(this._coordinates, $.proxy(function(coordinate, index) { - return this.coordinates(index); - }, this)); - } - - if (this.settings.center) { - coordinate = this._coordinates[position]; - coordinate += (this.width() - coordinate + (this._coordinates[position - 1] || 0)) / 2 * (this.settings.rtl ? -1 : 1); - } else { - coordinate = this._coordinates[position - 1] || 0; - } - - return coordinate; - }; - - /** - * Calculates the speed for a translation. - * @protected - * @param {Number} from - The absolute position of the start item. - * @param {Number} to - The absolute position of the target item. - * @param {Number} [factor=undefined] - The time factor in milliseconds. - * @returns {Number} - The time in milliseconds for the translation. - */ - Owl.prototype.duration = function(from, to, factor) { - return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed)); - }; - - /** - * Slides to the specified item. - * @public - * @param {Number} position - The position of the item. - * @param {Number} [speed] - The time in milliseconds for the transition. - */ - Owl.prototype.to = function(position, speed) { - var current = this.current(), - revert = null, - distance = position - this.relative(current), - direction = (distance > 0) - (distance < 0), - items = this._items.length, - minimum = this.minimum(), - maximum = this.maximum(); - - if (this.settings.loop) { - if (!this.settings.rewind && Math.abs(distance) > items / 2) { - distance += direction * -1 * items; - } - - position = current + distance; - revert = ((position - minimum) % items + items) % items + minimum; - - if (revert !== position && revert - distance <= maximum && revert - distance > 0) { - current = revert - distance; - position = revert; - this.reset(current); - } - } else if (this.settings.rewind) { - maximum += 1; - position = (position % maximum + maximum) % maximum; - } else { - position = Math.max(minimum, Math.min(maximum, position)); - } - - this.speed(this.duration(current, position, speed)); - this.current(position); - - if (this.$element.is(':visible')) { - this.update(); - } - }; - - /** - * Slides to the next item. - * @public - * @param {Number} [speed] - The time in milliseconds for the transition. - */ - Owl.prototype.next = function(speed) { - speed = speed || false; - this.to(this.relative(this.current()) + 1, speed); - }; - - /** - * Slides to the previous item. - * @public - * @param {Number} [speed] - The time in milliseconds for the transition. - */ - Owl.prototype.prev = function(speed) { - speed = speed || false; - this.to(this.relative(this.current()) - 1, speed); - }; - - /** - * Handles the end of an animation. - * @protected - * @param {Event} event - The event arguments. - */ - Owl.prototype.onTransitionEnd = function(event) { - - // if css2 animation then event object is undefined - if (event !== undefined) { - event.stopPropagation(); - - // Catch only owl-stage transitionEnd event - if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) { - return false; - } - } - - this.leave('animating'); - this.trigger('translated'); - }; - - /** - * Gets viewport width. - * @protected - * @return {Number} - The width in pixel. - */ - Owl.prototype.viewport = function() { - var width; - if (this.options.responsiveBaseElement !== window) { - width = $(this.options.responsiveBaseElement).width(); - } else if (window.innerWidth) { - width = window.innerWidth; - } else if (document.documentElement && document.documentElement.clientWidth) { - width = document.documentElement.clientWidth; - } else { - throw 'Can not detect viewport width.'; - } - return width; - }; - - /** - * Replaces the current content. - * @public - * @param {HTMLElement|jQuery|String} content - The new content. - */ - Owl.prototype.replace = function(content) { - this.$stage.empty(); - this._items = []; - - if (content) { - content = (content instanceof jQuery) ? content : $(content); - } - - if (this.settings.nestedItemSelector) { - content = content.find('.' + this.settings.nestedItemSelector); - } - - content.filter(function() { - return this.nodeType === 1; - }).each($.proxy(function(index, item) { - item = this.prepare(item); - this.$stage.append(item); - this._items.push(item); - this._mergers.push(item.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); - }, this)); - - this.reset($.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0); - - this.invalidate('items'); - }; - - /** - * Adds an item. - * @todo Use `item` instead of `content` for the event arguments. - * @public - * @param {HTMLElement|jQuery|String} content - The item content to add. - * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end. - */ - Owl.prototype.add = function(content, position) { - var current = this.relative(this._current); - - position = position === undefined ? this._items.length : this.normalize(position, true); - content = content instanceof jQuery ? content : $(content); - - this.trigger('add', { content: content, position: position }); - - content = this.prepare(content); - - if (this._items.length === 0 || position === this._items.length) { - this._items.length === 0 && this.$stage.append(content); - this._items.length !== 0 && this._items[position - 1].after(content); - this._items.push(content); - this._mergers.push(content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); - } else { - this._items[position].before(content); - this._items.splice(position, 0, content); - this._mergers.splice(position, 0, content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); - } - - this._items[current] && this.reset(this._items[current].index()); - - this.invalidate('items'); - - this.trigger('added', { content: content, position: position }); - }; - - /** - * Removes an item by its position. - * @todo Use `item` instead of `content` for the event arguments. - * @public - * @param {Number} position - The relative position of the item to remove. - */ - Owl.prototype.remove = function(position) { - position = this.normalize(position, true); - - if (position === undefined) { - return; - } - - this.trigger('remove', { content: this._items[position], position: position }); - - this._items[position].remove(); - this._items.splice(position, 1); - this._mergers.splice(position, 1); - - this.invalidate('items'); - - this.trigger('removed', { content: null, position: position }); - }; - - /** - * Preloads images with auto width. - * @todo Replace by a more generic approach - * @protected - */ - Owl.prototype.preloadAutoWidthImages = function(images) { - images.each($.proxy(function(i, element) { - this.enter('pre-loading'); - element = $(element); - $(new Image()).one('load', $.proxy(function(e) { - element.attr('src', e.target.src); - element.css('opacity', 1); - this.leave('pre-loading'); - !this.is('pre-loading') && !this.is('initializing') && this.refresh(); - }, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina')); - }, this)); - }; - - /** - * Destroys the carousel. - * @public - */ - Owl.prototype.destroy = function() { - - this.$element.off('.owl.core'); - this.$stage.off('.owl.core'); - $(document).off('.owl.core'); - - if (this.settings.responsive !== false) { - window.clearTimeout(this.resizeTimer); - this.off(window, 'resize', this._handlers.onThrottledResize); - } - - for (var i in this._plugins) { - this._plugins[i].destroy(); - } - - this.$stage.children('.cloned').remove(); - - this.$stage.unwrap(); - this.$stage.children().contents().unwrap(); - this.$stage.children().unwrap(); - - this.$element - .removeClass(this.options.refreshClass) - .removeClass(this.options.loadingClass) - .removeClass(this.options.loadedClass) - .removeClass(this.options.rtlClass) - .removeClass(this.options.dragClass) - .removeClass(this.options.grabClass) - .attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), '')) - .removeData('owl.carousel'); - }; - - /** - * Operators to calculate right-to-left and left-to-right. - * @protected - * @param {Number} [a] - The left side operand. - * @param {String} [o] - The operator. - * @param {Number} [b] - The right side operand. - */ - Owl.prototype.op = function(a, o, b) { - var rtl = this.settings.rtl; - switch (o) { - case '<': - return rtl ? a > b : a < b; - case '>': - return rtl ? a < b : a > b; - case '>=': - return rtl ? a <= b : a >= b; - case '<=': - return rtl ? a >= b : a <= b; - default: - break; - } - }; - - /** - * Attaches to an internal event. - * @protected - * @param {HTMLElement} element - The event source. - * @param {String} event - The event name. - * @param {Function} listener - The event handler to attach. - * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not. - */ - Owl.prototype.on = function(element, event, listener, capture) { - if (element.addEventListener) { - element.addEventListener(event, listener, capture); - } else if (element.attachEvent) { - element.attachEvent('on' + event, listener); - } - }; - - /** - * Detaches from an internal event. - * @protected - * @param {HTMLElement} element - The event source. - * @param {String} event - The event name. - * @param {Function} listener - The attached event handler to detach. - * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not. - */ - Owl.prototype.off = function(element, event, listener, capture) { - if (element.removeEventListener) { - element.removeEventListener(event, listener, capture); - } else if (element.detachEvent) { - element.detachEvent('on' + event, listener); - } - }; - - /** - * Triggers a public event. - * @todo Remove `status`, `relatedTarget` should be used instead. - * @protected - * @param {String} name - The event name. - * @param {*} [data=null] - The event data. - * @param {String} [namespace=carousel] - The event namespace. - * @param {String} [state] - The state which is associated with the event. - * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not. - * @returns {Event} - The event arguments. - */ - Owl.prototype.trigger = function(name, data, namespace, state, enter) { - var status = { - item: { count: this._items.length, index: this.current() } - }, handler = $.camelCase( - $.grep([ 'on', name, namespace ], function(v) { return v }) - .join('-').toLowerCase() - ), event = $.Event( - [ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(), - $.extend({ relatedTarget: this }, status, data) - ); - - if (!this._supress[name]) { - $.each(this._plugins, function(name, plugin) { - if (plugin.onTrigger) { - plugin.onTrigger(event); - } - }); - - this.register({ type: Owl.Type.Event, name: name }); - this.$element.trigger(event); - - if (this.settings && typeof this.settings[handler] === 'function') { - this.settings[handler].call(this, event); - } - } - - return event; - }; - - /** - * Enters a state. - * @param name - The state name. - */ - Owl.prototype.enter = function(name) { - $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) { - if (this._states.current[name] === undefined) { - this._states.current[name] = 0; - } - - this._states.current[name]++; - }, this)); - }; - - /** - * Leaves a state. - * @param name - The state name. - */ - Owl.prototype.leave = function(name) { - $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) { - this._states.current[name]--; - }, this)); - }; - - /** - * Registers an event or state. - * @public - * @param {Object} object - The event or state to register. - */ - Owl.prototype.register = function(object) { - if (object.type === Owl.Type.Event) { - if (!$.event.special[object.name]) { - $.event.special[object.name] = {}; - } - - if (!$.event.special[object.name].owl) { - var _default = $.event.special[object.name]._default; - $.event.special[object.name]._default = function(e) { - if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) { - return _default.apply(this, arguments); - } - return e.namespace && e.namespace.indexOf('owl') > -1; - }; - $.event.special[object.name].owl = true; - } - } else if (object.type === Owl.Type.State) { - if (!this._states.tags[object.name]) { - this._states.tags[object.name] = object.tags; - } else { - this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags); - } - - this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) { - return $.inArray(tag, this._states.tags[object.name]) === i; - }, this)); - } - }; - - /** - * Suppresses events. - * @protected - * @param {Array.} events - The events to suppress. - */ - Owl.prototype.suppress = function(events) { - $.each(events, $.proxy(function(index, event) { - this._supress[event] = true; - }, this)); - }; - - /** - * Releases suppressed events. - * @protected - * @param {Array.} events - The events to release. - */ - Owl.prototype.release = function(events) { - $.each(events, $.proxy(function(index, event) { - delete this._supress[event]; - }, this)); - }; - - /** - * Gets unified pointer coordinates from event. - * @todo #261 - * @protected - * @param {Event} - The `mousedown` or `touchstart` event. - * @returns {Object} - Contains `x` and `y` coordinates of current pointer position. - */ - Owl.prototype.pointer = function(event) { - var result = { x: null, y: null }; - - event = event.originalEvent || event || window.event; - - event = event.touches && event.touches.length ? - event.touches[0] : event.changedTouches && event.changedTouches.length ? - event.changedTouches[0] : event; - - if (event.pageX) { - result.x = event.pageX; - result.y = event.pageY; - } else { - result.x = event.clientX; - result.y = event.clientY; - } - - return result; - }; - - /** - * Gets the difference of two vectors. - * @todo #261 - * @protected - * @param {Object} - The first vector. - * @param {Object} - The second vector. - * @returns {Object} - The difference. - */ - Owl.prototype.difference = function(first, second) { - return { - x: first.x - second.x, - y: first.y - second.y - }; - }; - - /** - * The jQuery Plugin for the Owl Carousel - * @todo Navigation plugin `next` and `prev` - * @public - */ - $.fn.owlCarousel = function(option) { - var args = Array.prototype.slice.call(arguments, 1); - - return this.each(function() { - var $this = $(this), - data = $this.data('owl.carousel'); - - if (!data) { - data = new Owl(this, typeof option == 'object' && option); - $this.data('owl.carousel', data); - - $.each([ - 'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove' - ], function(i, event) { - data.register({ type: Owl.Type.Event, name: event }); - data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) { - if (e.namespace && e.relatedTarget !== this) { - this.suppress([ event ]); - data[event].apply(this, [].slice.call(arguments, 1)); - this.release([ event ]); - } - }, data)); - }); - } - - if (typeof option == 'string' && option.charAt(0) !== '_') { - data[option].apply(data, args); - } - }); - }; - - /** - * The constructor for the jQuery Plugin - * @public - */ - $.fn.owlCarousel.Constructor = Owl; - -})(window.Zepto || window.jQuery, window, document); - -/** - * AutoRefresh Plugin - * @version 2.0.0 - * @author Artus Kolanowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - - /** - * Creates the auto refresh plugin. - * @class The Auto Refresh Plugin - * @param {Owl} carousel - The Owl Carousel - */ - var AutoRefresh = function(carousel) { - /** - * Reference to the core. - * @protected - * @type {Owl} - */ - this._core = carousel; - - /** - * Refresh interval. - * @protected - * @type {number} - */ - this._interval = null; - - /** - * Whether the element is currently visible or not. - * @protected - * @type {Boolean} - */ - this._visible = null; - - /** - * All event handlers. - * @protected - * @type {Object} - */ - this._handlers = { - 'initialized.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.autoRefresh) { - this.watch(); - } - }, this) - }; - - // set default options - this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options); - - // register event handlers - this._core.$element.on(this._handlers); - }; - - /** - * Default options. - * @public - */ - AutoRefresh.Defaults = { - autoRefresh: true, - autoRefreshInterval: 500 - }; - - /** - * Watches the element. - */ - AutoRefresh.prototype.watch = function() { - if (this._interval) { - return; - } - - this._visible = this._core.$element.is(':visible'); - this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval); - }; - - /** - * Refreshes the element. - */ - AutoRefresh.prototype.refresh = function() { - if (this._core.$element.is(':visible') === this._visible) { - return; - } - - this._visible = !this._visible; - - this._core.$element.toggleClass('owl-hidden', !this._visible); - - this._visible && (this._core.invalidate('width') && this._core.refresh()); - }; - - /** - * Destroys the plugin. - */ - AutoRefresh.prototype.destroy = function() { - var handler, property; - - window.clearInterval(this._interval); - - for (handler in this._handlers) { - this._core.$element.off(handler, this._handlers[handler]); - } - for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); - } - }; - - $.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh; - -})(window.Zepto || window.jQuery, window, document); - -/** - * Lazy Plugin - * @version 2.0.0 - * @author Bartosz Wojciechowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - - /** - * Creates the lazy plugin. - * @class The Lazy Plugin - * @param {Owl} carousel - The Owl Carousel - */ - var Lazy = function(carousel) { - - /** - * Reference to the core. - * @protected - * @type {Owl} - */ - this._core = carousel; - - /** - * Already loaded items. - * @protected - * @type {Array.} - */ - this._loaded = []; - - /** - * Event handlers. - * @protected - * @type {Object} - */ - this._handlers = { - 'initialized.owl.carousel change.owl.carousel': $.proxy(function(e) { - if (!e.namespace) { - return; - } - - if (!this._core.settings || !this._core.settings.lazyLoad) { - return; - } - - if ((e.property && e.property.name == 'position') || e.type == 'initialized') { - var settings = this._core.settings, - n = (settings.center && Math.ceil(settings.items / 2) || settings.items), - i = ((settings.center && n * -1) || 0), - position = ((e.property && e.property.value) || this._core.current()) + i, - clones = this._core.clones().length, - load = $.proxy(function(i, v) { this.load(v) }, this); - - while (i++ < n) { - this.load(clones / 2 + this._core.relative(position)); - clones && $.each(this._core.clones(this._core.relative(position)), load); - position++; - } - } - }, this) - }; - - // set the default options - this._core.options = $.extend({}, Lazy.Defaults, this._core.options); - - // register event handler - this._core.$element.on(this._handlers); - } - - /** - * Default options. - * @public - */ - Lazy.Defaults = { - lazyLoad: false - } - - /** - * Loads all resources of an item at the specified position. - * @param {Number} position - The absolute position of the item. - * @protected - */ - Lazy.prototype.load = function(position) { - var $item = this._core.$stage.children().eq(position), - $elements = $item && $item.find('.owl-lazy'); - - if (!$elements || $.inArray($item.get(0), this._loaded) > -1) { - return; - } - - $elements.each($.proxy(function(index, element) { - var $element = $(element), image, - url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src'); - - this._core.trigger('load', { element: $element, url: url }, 'lazy'); - - if ($element.is('img')) { - $element.one('load.owl.lazy', $.proxy(function() { - $element.css('opacity', 1); - this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); - }, this)).attr('src', url); - } else { - image = new Image(); - image.onload = $.proxy(function() { - $element.css({ - 'background-image': 'url(' + url + ')', - 'opacity': '1' - }); - this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); - }, this); - image.src = url; - } - }, this)); - - this._loaded.push($item.get(0)); - } - - /** - * Destroys the plugin. - * @public - */ - Lazy.prototype.destroy = function() { - var handler, property; - - for (handler in this.handlers) { - this._core.$element.off(handler, this.handlers[handler]); - } - for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); - } - }; - - $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy; - -})(window.Zepto || window.jQuery, window, document); - -/** - * AutoHeight Plugin - * @version 2.0.0 - * @author Bartosz Wojciechowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - - /** - * Creates the auto height plugin. - * @class The Auto Height Plugin - * @param {Owl} carousel - The Owl Carousel - */ - var AutoHeight = function(carousel) { - /** - * Reference to the core. - * @protected - * @type {Owl} - */ - this._core = carousel; - - /** - * All event handlers. - * @protected - * @type {Object} - */ - this._handlers = { - 'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.autoHeight) { - this.update(); - } - }, this), - 'changed.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){ - this.update(); - } - }, this), - 'loaded.owl.lazy': $.proxy(function(e) { - if (e.namespace && this._core.settings.autoHeight - && e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) { - this.update(); - } - }, this) - }; - - // set default options - this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options); - - // register event handlers - this._core.$element.on(this._handlers); - }; - - /** - * Default options. - * @public - */ - AutoHeight.Defaults = { - autoHeight: false, - autoHeightClass: 'owl-height' - }; - - /** - * Updates the view. - */ - AutoHeight.prototype.update = function() { - var start = this._core._current, - end = start + this._core.settings.items, - visible = this._core.$stage.children().toArray().slice(start, end); - heights = [], - maxheight = 0; - - $.each(visible, function(index, item) { - heights.push($(item).height()); - }); - - maxheight = Math.max.apply(null, heights); - - this._core.$stage.parent() - .height(maxheight) - .addClass(this._core.settings.autoHeightClass); - }; - - AutoHeight.prototype.destroy = function() { - var handler, property; - - for (handler in this._handlers) { - this._core.$element.off(handler, this._handlers[handler]); - } - for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); - } - }; - - $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight; - -})(window.Zepto || window.jQuery, window, document); - -/** - * Video Plugin - * @version 2.0.0 - * @author Bartosz Wojciechowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - - /** - * Creates the video plugin. - * @class The Video Plugin - * @param {Owl} carousel - The Owl Carousel - */ - var Video = function(carousel) { - /** - * Reference to the core. - * @protected - * @type {Owl} - */ - this._core = carousel; - - /** - * Cache all video URLs. - * @protected - * @type {Object} - */ - this._videos = {}; - - /** - * Current playing item. - * @protected - * @type {jQuery} - */ - this._playing = null; - - /** - * All event handlers. - * @todo The cloned content removale is too late - * @protected - * @type {Object} - */ - this._handlers = { - 'initialized.owl.carousel': $.proxy(function(e) { - if (e.namespace) { - this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] }); - } - }, this), - 'resize.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.video && this.isInFullScreen()) { - e.preventDefault(); - } - }, this), - 'refreshed.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.is('resizing')) { - this._core.$stage.find('.cloned .owl-video-frame').remove(); - } - }, this), - 'changed.owl.carousel': $.proxy(function(e) { - if (e.namespace && e.property.name === 'position' && this._playing) { - this.stop(); - } - }, this), - 'prepared.owl.carousel': $.proxy(function(e) { - if (!e.namespace) { - return; - } - - var $element = $(e.content).find('.owl-video'); - - if ($element.length) { - $element.css('display', 'none'); - this.fetch($element, $(e.content)); - } - }, this) - }; - - // set default options - this._core.options = $.extend({}, Video.Defaults, this._core.options); - - // register event handlers - this._core.$element.on(this._handlers); - - this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) { - this.play(e); - }, this)); - }; - - /** - * Default options. - * @public - */ - Video.Defaults = { - video: false, - videoHeight: false, - videoWidth: false - }; - - /** - * Gets the video ID and the type (YouTube/Vimeo only). - * @protected - * @param {jQuery} target - The target containing the video data. - * @param {jQuery} item - The item containing the video. - */ - Video.prototype.fetch = function(target, item) { - var type = target.attr('data-vimeo-id') ? 'vimeo' : 'youtube', - id = target.attr('data-vimeo-id') || target.attr('data-youtube-id'), - width = target.attr('data-width') || this._core.settings.videoWidth, - height = target.attr('data-height') || this._core.settings.videoHeight, - url = target.attr('href'); - - if (url) { - id = url.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/); - - if (id[3].indexOf('youtu') > -1) { - type = 'youtube'; - } else if (id[3].indexOf('vimeo') > -1) { - type = 'vimeo'; - } else { - throw new Error('Video URL not supported.'); - } - id = id[6]; - } else { - throw new Error('Missing video URL.'); - } - - this._videos[url] = { - type: type, - id: id, - width: width, - height: height - }; - - item.attr('data-video', url); - - this.thumbnail(target, this._videos[url]); - }; - - /** - * Creates video thumbnail. - * @protected - * @param {jQuery} target - The target containing the video data. - * @param {Object} info - The video info object. - * @see `fetch` - */ - Video.prototype.thumbnail = function(target, video) { - var tnLink, - icon, - path, - dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '', - customTn = target.find('img'), - srcType = 'src', - lazyClass = '', - settings = this._core.settings, - create = function(path) { - icon = '
'; - - if (settings.lazyLoad) { - tnLink = '
'; - } else { - tnLink = '
'; - } - target.after(tnLink); - target.after(icon); - }; - - // wrap video content into owl-video-wrapper div - target.wrap('
'); - - if (this._core.settings.lazyLoad) { - srcType = 'data-src'; - lazyClass = 'owl-lazy'; - } - - // custom thumbnail - if (customTn.length) { - create(customTn.attr(srcType)); - customTn.remove(); - return false; - } - - if (video.type === 'youtube') { - path = "http://img.youtube.com/vi/" + video.id + "/hqdefault.jpg"; - create(path); - } else if (video.type === 'vimeo') { - $.ajax({ - type: 'GET', - url: 'http://vimeo.com/api/v2/video/' + video.id + '.json', - jsonp: 'callback', - dataType: 'jsonp', - success: function(data) { - path = data[0].thumbnail_large; - create(path); - } - }); - } - }; - - /** - * Stops the current video. - * @public - */ - Video.prototype.stop = function() { - this._core.trigger('stop', null, 'video'); - this._playing.find('.owl-video-frame').remove(); - this._playing.removeClass('owl-video-playing'); - this._playing = null; - this._core.leave('playing'); - this._core.trigger('stopped', null, 'video'); - }; - - /** - * Starts the current video. - * @public - * @param {Event} event - The event arguments. - */ - Video.prototype.play = function(event) { - var target = $(event.target), - item = target.closest('.' + this._core.settings.itemClass), - video = this._videos[item.attr('data-video')], - width = video.width || '100%', - height = video.height || this._core.$stage.height(), - html; - - if (this._playing) { - return; - } - - this._core.enter('playing'); - this._core.trigger('play', null, 'video'); - - item = this._core.items(this._core.relative(item.index())); - - this._core.reset(item.index()); - - if (video.type === 'youtube') { - html = ''; - } else if (video.type === 'vimeo') { - html = ''; - } - - $('
' + html + '
').insertAfter(item.find('.owl-video')); - - this._playing = item.addClass('owl-video-playing'); - }; - - /** - * Checks whether an video is currently in full screen mode or not. - * @todo Bad style because looks like a readonly method but changes members. - * @protected - * @returns {Boolean} - */ - Video.prototype.isInFullScreen = function() { - var element = document.fullscreenElement || document.mozFullScreenElement || - document.webkitFullscreenElement; - - return element && $(element).parent().hasClass('owl-video-frame'); - }; - - /** - * Destroys the plugin. - */ - Video.prototype.destroy = function() { - var handler, property; - - this._core.$element.off('click.owl.video'); - - for (handler in this._handlers) { - this._core.$element.off(handler, this._handlers[handler]); - } - for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); - } - }; - - $.fn.owlCarousel.Constructor.Plugins.Video = Video; - -})(window.Zepto || window.jQuery, window, document); - -/** - * Animate Plugin - * @version 2.0.0 - * @author Bartosz Wojciechowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - - /** - * Creates the animate plugin. - * @class The Navigation Plugin - * @param {Owl} scope - The Owl Carousel - */ - var Animate = function(scope) { - this.core = scope; - this.core.options = $.extend({}, Animate.Defaults, this.core.options); - this.swapping = true; - this.previous = undefined; - this.next = undefined; - - this.handlers = { - 'change.owl.carousel': $.proxy(function(e) { - if (e.namespace && e.property.name == 'position') { - this.previous = this.core.current(); - this.next = e.property.value; - } - }, this), - 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) { - if (e.namespace) { - this.swapping = e.type == 'translated'; - } - }, this), - 'translate.owl.carousel': $.proxy(function(e) { - if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) { - this.swap(); - } - }, this) - }; - - this.core.$element.on(this.handlers); - }; - - /** - * Default options. - * @public - */ - Animate.Defaults = { - animateOut: false, - animateIn: false - }; - - /** - * Toggles the animation classes whenever an translations starts. - * @protected - * @returns {Boolean|undefined} - */ - Animate.prototype.swap = function() { - - if (this.core.settings.items !== 1) { - return; - } - - if (!$.support.animation || !$.support.transition) { - return; - } - - this.core.speed(0); - - var left, - clear = $.proxy(this.clear, this), - previous = this.core.$stage.children().eq(this.previous), - next = this.core.$stage.children().eq(this.next), - incoming = this.core.settings.animateIn, - outgoing = this.core.settings.animateOut; - - if (this.core.current() === this.previous) { - return; - } - - if (outgoing) { - left = this.core.coordinates(this.previous) - this.core.coordinates(this.next); - previous.one($.support.animation.end, clear) - .css( { 'left': left + 'px' } ) - .addClass('animated owl-animated-out') - .addClass(outgoing); - } - - if (incoming) { - next.one($.support.animation.end, clear) - .addClass('animated owl-animated-in') - .addClass(incoming); - } - }; - - Animate.prototype.clear = function(e) { - $(e.target).css( { 'left': '' } ) - .removeClass('animated owl-animated-out owl-animated-in') - .removeClass(this.core.settings.animateIn) - .removeClass(this.core.settings.animateOut); - this.core.onTransitionEnd(); - }; - - /** - * Destroys the plugin. - * @public - */ - Animate.prototype.destroy = function() { - var handler, property; - - for (handler in this.handlers) { - this.core.$element.off(handler, this.handlers[handler]); - } - for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); - } - }; - - $.fn.owlCarousel.Constructor.Plugins.Animate = Animate; - -})(window.Zepto || window.jQuery, window, document); - -/** - * Autoplay Plugin - * @version 2.0.0 - * @author Bartosz Wojciechowski - * @author Artus Kolanowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - - /** - * Creates the autoplay plugin. - * @class The Autoplay Plugin - * @param {Owl} scope - The Owl Carousel - */ - var Autoplay = function(carousel) { - /** - * Reference to the core. - * @protected - * @type {Owl} - */ - this._core = carousel; - - /** - * The autoplay interval. - * @type {Number} - */ - this._interval = null; - - /** - * Indicates whenever the autoplay is paused. - * @type {Boolean} - */ - this._paused = false; - - /** - * All event handlers. - * @protected - * @type {Object} - */ - this._handlers = { - 'changed.owl.carousel': $.proxy(function(e) { - if (e.namespace && e.property.name === 'settings') { - if (this._core.settings.autoplay) { - this.play(); - } else { - this.stop(); - } - } - }, this), - 'initialized.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.autoplay) { - this.play(); - } - }, this), - 'play.owl.autoplay': $.proxy(function(e, t, s) { - if (e.namespace) { - this.play(t, s); - } - }, this), - 'stop.owl.autoplay': $.proxy(function(e) { - if (e.namespace) { - this.stop(); - } - }, this), - 'mouseover.owl.autoplay': $.proxy(function() { - if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { - this.pause(); - } - }, this), - 'mouseleave.owl.autoplay': $.proxy(function() { - if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { - this.play(); - } - }, this) - }; - - // register event handlers - this._core.$element.on(this._handlers); - - // set default options - this._core.options = $.extend({}, Autoplay.Defaults, this._core.options); - }; - - /** - * Default options. - * @public - */ - Autoplay.Defaults = { - autoplay: false, - autoplayTimeout: 5000, - autoplayHoverPause: false, - autoplaySpeed: false - }; - - /** - * Starts the autoplay. - * @public - * @param {Number} [timeout] - The interval before the next animation starts. - * @param {Number} [speed] - The animation speed for the animations. - */ - Autoplay.prototype.play = function(timeout, speed) { - this._paused = false; - - if (this._core.is('rotating')) { - return; - } - - this._core.enter('rotating'); - - this._interval = window.setInterval($.proxy(function() { - if (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) { - return; - } - this._core.next(speed || this._core.settings.autoplaySpeed); - }, this), timeout || this._core.settings.autoplayTimeout); - }; - - /** - * Stops the autoplay. - * @public - */ - Autoplay.prototype.stop = function() { - if (!this._core.is('rotating')) { - return; - } - - window.clearInterval(this._interval); - this._core.leave('rotating'); - }; - - /** - * Stops the autoplay. - * @public - */ - Autoplay.prototype.pause = function() { - if (!this._core.is('rotating')) { - return; - } - - this._paused = true; - }; - - /** - * Destroys the plugin. - */ - Autoplay.prototype.destroy = function() { - var handler, property; - - this.stop(); - - for (handler in this._handlers) { - this._core.$element.off(handler, this._handlers[handler]); - } - for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); - } - }; - - $.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay; - -})(window.Zepto || window.jQuery, window, document); - -/** - * Navigation Plugin - * @version 2.0.0 - * @author Artus Kolanowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - 'use strict'; - - /** - * Creates the navigation plugin. - * @class The Navigation Plugin - * @param {Owl} carousel - The Owl Carousel. - */ - var Navigation = function(carousel) { - /** - * Reference to the core. - * @protected - * @type {Owl} - */ - this._core = carousel; - - /** - * Indicates whether the plugin is initialized or not. - * @protected - * @type {Boolean} - */ - this._initialized = false; - - /** - * The current paging indexes. - * @protected - * @type {Array} - */ - this._pages = []; - - /** - * All DOM elements of the user interface. - * @protected - * @type {Object} - */ - this._controls = {}; - - /** - * Markup for an indicator. - * @protected - * @type {Array.} - */ - this._templates = []; - - /** - * The carousel element. - * @type {jQuery} - */ - this.$element = this._core.$element; - - /** - * Overridden methods of the carousel. - * @protected - * @type {Object} - */ - this._overrides = { - next: this._core.next, - prev: this._core.prev, - to: this._core.to - }; - - /** - * All event handlers. - * @protected - * @type {Object} - */ - this._handlers = { - 'prepared.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.dotsData) { - this._templates.push('
' + - $(e.content).find('[data-dot]').andSelf('[data-dot]').attr('data-dot') + '
'); - } - }, this), - 'added.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.dotsData) { - this._templates.splice(e.position, 0, this._templates.pop()); - } - }, this), - 'remove.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.dotsData) { - this._templates.splice(e.position, 1); - } - }, this), - 'changed.owl.carousel': $.proxy(function(e) { - if (e.namespace && e.property.name == 'position') { - this.draw(); - } - }, this), - 'initialized.owl.carousel': $.proxy(function(e) { - if (e.namespace && !this._initialized) { - this._core.trigger('initialize', null, 'navigation'); - this.initialize(); - this.update(); - this.draw(); - this._initialized = true; - this._core.trigger('initialized', null, 'navigation'); - } - }, this), - 'refreshed.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._initialized) { - this._core.trigger('refresh', null, 'navigation'); - this.update(); - this.draw(); - this._core.trigger('refreshed', null, 'navigation'); - } - }, this) - }; - - // set default options - this._core.options = $.extend({}, Navigation.Defaults, this._core.options); - - // register event handlers - this.$element.on(this._handlers); - }; - - /** - * Default options. - * @public - * @todo Rename `slideBy` to `navBy` - */ - Navigation.Defaults = { - nav: false, - navText: [ 'prev', 'next' ], - navSpeed: false, - navElement: 'div', - navContainer: false, - navContainerClass: 'owl-nav', - navClass: [ 'owl-prev', 'owl-next' ], - slideBy: 1, - dotClass: 'owl-dot', - dotsClass: 'owl-dots', - dots: true, - dotsEach: false, - dotsData: false, - dotsSpeed: false, - dotsContainer: false - }; - - /** - * Initializes the layout of the plugin and extends the carousel. - * @protected - */ - Navigation.prototype.initialize = function() { - var override, - settings = this._core.settings; - - // create DOM structure for relative navigation - this._controls.$relative = (settings.navContainer ? $(settings.navContainer) - : $('
').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled'); - - this._controls.$previous = $('<' + settings.navElement + '>') - .addClass(settings.navClass[0]) - .html(settings.navText[0]) - .prependTo(this._controls.$relative) - .on('click', $.proxy(function(e) { - this.prev(settings.navSpeed); - }, this)); - this._controls.$next = $('<' + settings.navElement + '>') - .addClass(settings.navClass[1]) - .html(settings.navText[1]) - .appendTo(this._controls.$relative) - .on('click', $.proxy(function(e) { - this.next(settings.navSpeed); - }, this)); - - // create DOM structure for absolute navigation - if (!settings.dotsData) { - this._templates = [ $('
') - .addClass(settings.dotClass) - .append($('')) - .prop('outerHTML') ]; - } - - this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer) - : $('
').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled'); - - this._controls.$absolute.on('click', 'div', $.proxy(function(e) { - var index = $(e.target).parent().is(this._controls.$absolute) - ? $(e.target).index() : $(e.target).parent().index(); - - e.preventDefault(); - - this.to(index, settings.dotsSpeed); - }, this)); - - // override public methods of the carousel - for (override in this._overrides) { - this._core[override] = $.proxy(this[override], this); - } - }; - - /** - * Destroys the plugin. - * @protected - */ - Navigation.prototype.destroy = function() { - var handler, control, property, override; - - for (handler in this._handlers) { - this.$element.off(handler, this._handlers[handler]); - } - for (control in this._controls) { - this._controls[control].remove(); - } - for (override in this.overides) { - this._core[override] = this._overrides[override]; - } - for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); - } - }; - - /** - * Updates the internal state. - * @protected - */ - Navigation.prototype.update = function() { - var i, j, k, - lower = this._core.clones().length / 2, - upper = lower + this._core.items().length, - maximum = this._core.maximum(true), - settings = this._core.settings, - size = settings.center || settings.autoWidth || settings.dotsData - ? 1 : settings.dotsEach || settings.items; - - if (settings.slideBy !== 'page') { - settings.slideBy = Math.min(settings.slideBy, settings.items); - } - - if (settings.dots || settings.slideBy == 'page') { - this._pages = []; - - for (i = lower, j = 0, k = 0; i < upper; i++) { - if (j >= size || j === 0) { - this._pages.push({ - start: Math.min(maximum, i - lower), - end: i - lower + size - 1 - }); - if (Math.min(maximum, i - lower) === maximum) { - break; - } - j = 0, ++k; - } - j += this._core.mergers(this._core.relative(i)); - } - } - }; - - /** - * Draws the user interface. - * @todo The option `dotsData` wont work. - * @protected - */ - Navigation.prototype.draw = function() { - var difference, - settings = this._core.settings, - disabled = this._core.items().length <= settings.items, - index = this._core.relative(this._core.current()), - loop = settings.loop || settings.rewind; - - this._controls.$relative.toggleClass('disabled', !settings.nav || disabled); - - if (settings.nav) { - this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true)); - this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true)); - } - - this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled); - - if (settings.dots) { - difference = this._pages.length - this._controls.$absolute.children().length; - - if (settings.dotsData && difference !== 0) { - this._controls.$absolute.html(this._templates.join('')); - } else if (difference > 0) { - this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0])); - } else if (difference < 0) { - this._controls.$absolute.children().slice(difference).remove(); - } - - this._controls.$absolute.find('.active').removeClass('active'); - this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active'); - } - }; - - /** - * Extends event data. - * @protected - * @param {Event} event - The event object which gets thrown. - */ - Navigation.prototype.onTrigger = function(event) { - var settings = this._core.settings; - - event.page = { - index: $.inArray(this.current(), this._pages), - count: this._pages.length, - size: settings && (settings.center || settings.autoWidth || settings.dotsData - ? 1 : settings.dotsEach || settings.items) - }; - }; - - /** - * Gets the current page position of the carousel. - * @protected - * @returns {Number} - */ - Navigation.prototype.current = function() { - var current = this._core.relative(this._core.current()); - return $.grep(this._pages, $.proxy(function(page, index) { - return page.start <= current && page.end >= current; - }, this)).pop(); - }; - - /** - * Gets the current succesor/predecessor position. - * @protected - * @returns {Number} - */ - Navigation.prototype.getPosition = function(successor) { - var position, length, - settings = this._core.settings; - - if (settings.slideBy == 'page') { - position = $.inArray(this.current(), this._pages); - length = this._pages.length; - successor ? ++position : --position; - position = this._pages[((position % length) + length) % length].start; - } else { - position = this._core.relative(this._core.current()); - length = this._core.items().length; - successor ? position += settings.slideBy : position -= settings.slideBy; - } - - return position; - }; - - /** - * Slides to the next item or page. - * @public - * @param {Number} [speed=false] - The time in milliseconds for the transition. - */ - Navigation.prototype.next = function(speed) { - $.proxy(this._overrides.to, this._core)(this.getPosition(true), speed); - }; - - /** - * Slides to the previous item or page. - * @public - * @param {Number} [speed=false] - The time in milliseconds for the transition. - */ - Navigation.prototype.prev = function(speed) { - $.proxy(this._overrides.to, this._core)(this.getPosition(false), speed); - }; - - /** - * Slides to the specified item or page. - * @public - * @param {Number} position - The position of the item or page. - * @param {Number} [speed] - The time in milliseconds for the transition. - * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not. - */ - Navigation.prototype.to = function(position, speed, standard) { - var length; - - if (!standard) { - length = this._pages.length; - $.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed); - } else { - $.proxy(this._overrides.to, this._core)(position, speed); - } - }; - - $.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation; - -})(window.Zepto || window.jQuery, window, document); - -/** - * Hash Plugin - * @version 2.0.0 - * @author Artus Kolanowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - 'use strict'; - - /** - * Creates the hash plugin. - * @class The Hash Plugin - * @param {Owl} carousel - The Owl Carousel - */ - var Hash = function(carousel) { - /** - * Reference to the core. - * @protected - * @type {Owl} - */ - this._core = carousel; - - /** - * Hash index for the items. - * @protected - * @type {Object} - */ - this._hashes = {}; - - /** - * The carousel element. - * @type {jQuery} - */ - this.$element = this._core.$element; - - /** - * All event handlers. - * @protected - * @type {Object} - */ - this._handlers = { - 'initialized.owl.carousel': $.proxy(function(e) { - if (e.namespace && this._core.settings.startPosition === 'URLHash') { - $(window).trigger('hashchange.owl.navigation'); - } - }, this), - 'prepared.owl.carousel': $.proxy(function(e) { - if (e.namespace) { - var hash = $(e.content).find('[data-hash]').andSelf('[data-hash]').attr('data-hash'); - - if (!hash) { - return; - } - - this._hashes[hash] = e.content; - } - }, this), - 'changed.owl.carousel': $.proxy(function(e) { - if (e.namespace && e.property.name === 'position') { - var current = this._core.items(this._core.relative(this._core.current())), - hash = $.map(this._hashes, function(item, hash) { - return item === current ? hash : null; - }).join(); - - if (!hash || window.location.hash.slice(1) === hash) { - return; - } - - window.location.hash = hash; - } - }, this) - }; - - // set default options - this._core.options = $.extend({}, Hash.Defaults, this._core.options); - - // register the event handlers - this.$element.on(this._handlers); - - // register event listener for hash navigation - $(window).on('hashchange.owl.navigation', $.proxy(function(e) { - var hash = window.location.hash.substring(1), - items = this._core.$stage.children(), - position = this._hashes[hash] && items.index(this._hashes[hash]); - - if (position === undefined || position === this._core.current()) { - return; - } - - this._core.to(this._core.relative(position), false, true); - }, this)); - }; - - /** - * Default options. - * @public - */ - Hash.Defaults = { - URLhashListener: false - }; - - /** - * Destroys the plugin. - * @public - */ - Hash.prototype.destroy = function() { - var handler, property; - - $(window).off('hashchange.owl.navigation'); - - for (handler in this._handlers) { - this._core.$element.off(handler, this._handlers[handler]); - } - for (property in Object.getOwnPropertyNames(this)) { - typeof this[property] != 'function' && (this[property] = null); - } - }; - - $.fn.owlCarousel.Constructor.Plugins.Hash = Hash; - -})(window.Zepto || window.jQuery, window, document); - -/** - * Support Plugin - * - * @version 2.0.0 - * @author Vivid Planet Software GmbH - * @author Artus Kolanowski - * @license The MIT License (MIT) - */ -;(function($, window, document, undefined) { - - var style = $('').get(0).style, - prefixes = 'Webkit Moz O ms'.split(' '), - events = { - transition: { - end: { - WebkitTransition: 'webkitTransitionEnd', - MozTransition: 'transitionend', - OTransition: 'oTransitionEnd', - transition: 'transitionend' - } - }, - animation: { - end: { - WebkitAnimation: 'webkitAnimationEnd', - MozAnimation: 'animationend', - OAnimation: 'oAnimationEnd', - animation: 'animationend' - } - } - }, - tests = { - csstransforms: function() { - return !!test('transform'); - }, - csstransforms3d: function() { - return !!test('perspective'); - }, - csstransitions: function() { - return !!test('transition'); - }, - cssanimations: function() { - return !!test('animation'); - } - }; - - function test(property, prefixed) { - var result = false, - upper = property.charAt(0).toUpperCase() + property.slice(1); - - $.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) { - if (style[property] !== undefined) { - result = prefixed ? property : true; - return false; - } - }); - - return result; - } - - function prefixed(property) { - return test(property, true); - } - - if (tests.csstransitions()) { - /* jshint -W053 */ - $.support.transition = new String(prefixed('transition')) - $.support.transition.end = events.transition.end[ $.support.transition ]; - } - - if (tests.cssanimations()) { - /* jshint -W053 */ - $.support.animation = new String(prefixed('animation')) - $.support.animation.end = events.animation.end[ $.support.animation ]; - } - - if (tests.csstransforms()) { - /* jshint -W053 */ - $.support.transform = new String(prefixed('transform')); - $.support.transform3d = tests.csstransforms3d(); - } - -})(window.Zepto || window.jQuery, window, document); diff --git a/dist/owl.carousel.min.js b/dist/owl.carousel.min.js deleted file mode 100644 index cd327896..00000000 --- a/dist/owl.carousel.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g--;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++cc;c++)a=this._coordinates[c-1]||0,b=Math.abs(this._coordinates[c])+f*e,(this.op(a,"<=",g)&&this.op(a,">",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var b,c,e;b=this.$element.find("img"),c=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,e=this.$element.children(c).width(),b.length&&0>=e&&this.preloadAutoWidthImages(b)}this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('
'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){b>=a&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),(null===this.settings||this._breakpoint!==d)&&(this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}}))},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};c>b;)(this._invalidated.all||a.grep(this._pipe[b].filter,d).length>0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return this._items.length?this._width===this.$element.width()?!1:this.$element.is(":visible")?(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized"))):!1:!1},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),this.settings.responsive!==!1&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var d=-1,e=30,f=this.width(),g=this.coordinates();return this.settings.freeDrag||a.each(g,a.proxy(function(a,h){return b>h-e&&h+e>b?d=a:this.op(b,"<",h)&&this.op(b,">",g[a+1]||h-f)&&(d="left"===c?a+1:a),-1===d},this)),this.settings.loop||(this.op(b,">",g[this.minimum()])?d=b=this.minimum():this.op(b,"<",g[this.maximum()])&&(d=b=this.maximum())),d},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){a=this.normalize(a),a!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(b,c){var e=this._items.length,f=c?0:this._clones.length;return!a.isNumeric(b)||1>e?b=d:(0>b||b>=e+f)&&(b=((b-f/2)%e+e)%e+f/2),b},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c=this.settings,d=this._coordinates.length,e=Math.abs(this._coordinates[d-1])-this._width,f=-1;if(c.loop)d=this._clones.length/2+this._items.length-1;else if(c.autoWidth||c.merge)for(;d-f>1;)Math.abs(this._coordinates[b=d+f>>1])0)-(0>e),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=-1*f*g),a=c+e,d=((a-h)%g+g)%g+h,d!==a&&i>=d-e&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.$element.is(":visible")&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){return a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0))?!1:(this.leave("animating"),void this.trigger("translated"))},e.prototype.viewport=function(){var d;if(this.options.responsiveBaseElement!==b)d=a(this.options.responsiveBaseElement).width();else if(b.innerWidth)d=b.innerWidth;else{if(!c.documentElement||!c.documentElement.clientWidth)throw"Can not detect viewport width.";d=c.documentElement.clientWidth}return d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").andSelf("[data-merge]").attr("data-merge")||1)},this)),this.reset(a.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").andSelf("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").andSelf("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){a=this.normalize(a,!0),a!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),this.settings.responsive!==!1&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:c>a;case">":return d?c>a:a>c;case">=":return d?c>=a:a>=c;case"<=":return d?a>=c:c>=a}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&-1!==a.namespace.indexOf("owl")?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type))for(var c=this._core.settings,d=c.center&&Math.ceil(c.items/2)||c.items,e=c.center&&-1*d||0,f=(b.property&&b.property.value||this._core.current())+e,g=this._core.clones().length,h=a.proxy(function(a,b){this.load(b)},this);e++-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":"url("+g+")",opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"==a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.$stage.children().toArray().slice(b,c);heights=[],maxheight=0,a.each(d,function(b,c){heights.push(a(c).height())}),maxheight=Math.max.apply(null,heights),this._core.$stage.parent().height(maxheight).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=a.attr("data-vimeo-id")?"vimeo":"youtube",d=a.attr("data-vimeo-id")||a.attr("data-youtube-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else{if(!(d[3].indexOf("vimeo")>-1))throw new Error("Video URL not supported.");c="vimeo"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?'style="width:'+c.width+"px;height:"+c.height+'px;"':"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(a){e='
',d=k.lazyLoad?'
':'
',b.after(d),b.after(e)};return b.wrap('
"),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length?(l(h.attr(i)),h.remove(),!1):void("youtube"===c.type?(f="http://img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type&&a.ajax({type:"GET",url:"http://vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}))},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),"youtube"===f.type?c='':"vimeo"===f.type&&(c=''),a('
'+c+"
").insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._paused=!1,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name&&(this._core.settings.autoplay?this.play():this.stop())},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){ -this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype.play=function(d,e){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._interval=b.setInterval(a.proxy(function(){this._paused||this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(e||this._core.settings.autoplaySpeed)},this),d||this._core.settings.autoplayTimeout))},e.prototype.stop=function(){this._core.is("rotating")&&(b.clearInterval(this._interval),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('
'+a(b.content).find("[data-dot]").andSelf("[data-dot]").attr("data-dot")+"
")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("
").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a("
").addClass(c.dotClass).append(a("")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("
").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;e>a;a++){if(b>=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):0>b&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;d?a.proxy(this._overrides.to,this._core)(b,c):(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c))},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").andSelf("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){return g[b]!==d?(e=c?b:!0,!1):void 0}),e}function f(a){return e(a,!0)}var g=a("").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document); \ No newline at end of file