From 3983d1fdaf013f3ee07f747fa44d5f8299000d55 Mon Sep 17 00:00:00 2001 From: Bachir Soussi Chiadmi Date: Sat, 30 Dec 2017 17:48:05 +0100 Subject: [PATCH] release candidate --- user/themes/ouidade/bower.json | 7 +- .../.bower.json | 15 +- .../README.md | 12 +- .../bower.json | 2 - .../matches-selector.js | 53 + .../bower_components/doc-ready/.bower.json | 44 - .../bower_components/doc-ready/README.md | 23 - .../bower_components/doc-ready/bower.json | 35 - .../bower_components/doc-ready/doc-ready.js | 80 - .../bower_components/ev-emitter/.bower.json | 15 +- .../bower_components/ev-emitter/README.md | 10 +- .../bower_components/ev-emitter/bower.json | 3 +- .../bower_components/ev-emitter/ev-emitter.js | 21 +- .../bower_components/ev-emitter/package.json | 27 - .../bower_components/eventEmitter/.bower.json | 34 - .../eventEmitter/EventEmitter.js | 474 - .../eventEmitter/EventEmitter.min.js | 7 - .../bower_components/eventEmitter/README.md | 85 - .../bower_components/eventEmitter/UNLICENSE | 24 - .../bower_components/eventEmitter/bower.json | 24 - .../eventEmitter/component.json | 9 - .../bower_components/eventie/.bower.json | 35 - .../bower_components/eventie/README.md | 33 - .../bower_components/eventie/bower.json | 26 - .../bower_components/eventie/eventie.js | 82 - .../bower_components/eventie/package.json | 23 - .../bower_components/fastclick/.bower.json | 2 +- .../fizzy-ui-utils/.bower.json | 18 +- .../bower_components/fizzy-ui-utils/README.md | 17 +- .../fizzy-ui-utils/bower.json | 9 +- .../bower_components/fizzy-ui-utils/utils.js | 154 +- .../bower_components/foundation/.bower.json | 7 +- .../foundation/scss/foundation/_settings.scss | 2 +- .../bower_components/get-size/.bower.json | 20 +- .../bower_components/get-size/README.md | 6 +- .../bower_components/get-size/bower.json | 7 +- .../bower_components/get-size/get-size.js | 159 +- .../bower_components/get-size/index.html | 85 - .../get-style-property/.bower.json | 36 - .../get-style-property/README.md | 27 - .../get-style-property/bower.json | 27 - .../get-style-property/component.json | 8 - .../get-style-property/get-style-property.js | 55 - .../get-style-property/package.json | 23 - .../bower_components/imagesloaded/.bower.json | 18 +- .../bower_components/imagesloaded/README.md | 37 +- .../bower_components/imagesloaded/bower.json | 3 +- .../bower_components/imagesloaded/gulpfile.js | 46 +- .../imagesloaded/imagesloaded.js | 4 +- .../imagesloaded/imagesloaded.pkgd.js | 22 +- .../imagesloaded/imagesloaded.pkgd.min.js | 4 +- .../bower_components/isotope/.bower.json | 54 + .../bower_components/isotope/README.md | 85 + .../bower_components/isotope/bower.json | 44 + .../isotope/dist/isotope.pkgd.js | 3558 +++++++ .../isotope/dist/isotope.pkgd.min.js | 12 + .../bower_components/isotope/gulpfile.js | 137 + .../bower_components/isotope/js/isotope.js | 621 ++ .../bower_components/isotope/js/item.js | 77 + .../isotope/js/layout-mode.js | 157 + .../isotope/js/layout-modes/fit-rows.js | 68 + .../isotope/js/layout-modes/masonry.js | 74 + .../isotope/js/layout-modes/vertical.js | 54 + .../jquery-placeholder/.bower.json | 2 +- .../jquery.cookie/.bower.json | 2 +- .../bower_components/jquery/.bower.json | 29 +- .../bower_components/jquery/AUTHORS.txt | 301 + .../jquery/{MIT-LICENSE.txt => LICENSE.txt} | 19 +- .../ouidade/bower_components/jquery/README.md | 67 + .../bower_components/jquery/bower.json | 18 +- .../bower_components/jquery/dist/core.js | 476 + .../bower_components/jquery/dist/jquery.js | 6681 ++++++++------ .../jquery/dist/jquery.min.js | 9 +- .../jquery/dist/jquery.min.map | 2 +- .../jquery/dist/jquery.slim.js | 8160 +++++++++++++++++ .../jquery/dist/jquery.slim.min.js | 4 + .../jquery/dist/jquery.slim.min.map | 1 + .../jquery/external/sizzle/LICENSE.txt | 36 + .../{src => external}/sizzle/dist/sizzle.js | 691 +- .../jquery/external/sizzle/dist/sizzle.min.js | 3 + .../external/sizzle/dist/sizzle.min.map | 1 + .../jquery/src/.eslintrc.json | 5 + .../bower_components/jquery/src/ajax.js | 283 +- .../bower_components/jquery/src/ajax/jsonp.js | 41 +- .../bower_components/jquery/src/ajax/load.js | 47 +- .../jquery/src/ajax/parseJSON.js | 13 - .../jquery/src/ajax/parseXML.js | 14 +- .../jquery/src/ajax/script.js | 37 +- .../jquery/src/ajax/var/location.js | 5 + .../jquery/src/ajax/var/nonce.js | 6 +- .../jquery/src/ajax/var/rquery.js | 8 +- .../bower_components/jquery/src/ajax/xhr.js | 119 +- .../bower_components/jquery/src/attributes.js | 6 +- .../jquery/src/attributes/attr.js | 120 +- .../jquery/src/attributes/classes.js | 162 +- .../jquery/src/attributes/prop.js | 113 +- .../jquery/src/attributes/support.js | 24 +- .../jquery/src/attributes/val.js | 103 +- .../bower_components/jquery/src/callbacks.js | 229 +- .../bower_components/jquery/src/core.js | 242 +- .../jquery/src/core/DOMEval.js | 16 + .../jquery/src/core/access.js | 32 +- .../bower_components/jquery/src/core/init.js | 61 +- .../jquery/src/core/nodeName.js | 13 + .../jquery/src/core/parseHTML.js | 52 +- .../jquery/src/core/ready-no-deferred.js | 96 + .../bower_components/jquery/src/core/ready.js | 91 +- .../jquery/src/core/readyException.js | 13 + .../jquery/src/core/stripAndCollapse.js | 14 + .../jquery/src/core/support.js | 20 + .../jquery/src/core/var/rsingleTag.js | 8 +- .../bower_components/jquery/src/css.js | 308 +- .../jquery/src/css/addGetHookIf.js | 10 +- .../jquery/src/css/adjustCSS.js | 71 + .../bower_components/jquery/src/css/curCSS.js | 36 +- .../jquery/src/css/defaultDisplay.js | 70 - .../jquery/src/css/hiddenVisibleSelectors.js | 16 +- .../jquery/src/css/showHide.js | 105 + .../jquery/src/css/support.js | 145 +- .../jquery/src/css/var/cssExpand.js | 6 +- .../jquery/src/css/var/getStyles.js | 17 +- .../jquery/src/css/var/isHidden.js | 13 - .../jquery/src/css/var/isHiddenWithinTree.js | 34 + .../jquery/src/css/var/rmargin.js | 8 +- .../jquery/src/css/var/rnumnonpx.js | 6 +- .../jquery/src/css/{ => var}/swap.js | 12 +- .../bower_components/jquery/src/data.js | 131 +- .../bower_components/jquery/src/data/Data.js | 190 +- .../data/{accepts.js => var/acceptData.js} | 13 +- .../data/var/{data_priv.js => dataPriv.js} | 6 +- .../data/var/{data_user.js => dataUser.js} | 6 +- .../bower_components/jquery/src/deferred.js | 384 +- .../jquery/src/deferred/exceptionHook.js | 21 + .../bower_components/jquery/src/deprecated.js | 45 +- .../bower_components/jquery/src/dimensions.js | 26 +- .../bower_components/jquery/src/effects.js | 467 +- .../jquery/src/effects/Tween.js | 27 +- .../jquery/src/effects/animatedSelector.js | 12 +- .../bower_components/jquery/src/event.js | 714 +- .../bower_components/jquery/src/event/ajax.js | 17 +- .../jquery/src/event/alias.js | 36 +- .../jquery/src/event/focusin.js | 55 + .../jquery/src/event/support.js | 8 +- .../jquery/src/event/trigger.js | 185 + .../jquery/src/exports/amd.js | 8 +- .../jquery/src/exports/global.js | 14 +- .../bower_components/jquery/src/intro.js | 44 - .../bower_components/jquery/src/jquery.js | 8 +- .../jquery/src/manipulation.js | 532 +- .../jquery/src/manipulation/_evalUrl.js | 13 +- .../jquery/src/manipulation/buildFragment.js | 104 + .../jquery/src/manipulation/getAll.js | 32 + .../jquery/src/manipulation/setGlobalEval.js | 22 + .../jquery/src/manipulation/support.js | 19 +- .../src/manipulation/var/rcheckableType.js | 8 +- .../src/manipulation/var/rscriptType.js | 5 + .../jquery/src/manipulation/var/rtagName.js | 5 + .../jquery/src/manipulation/wrapMap.js | 29 + .../bower_components/jquery/src/offset.js | 128 +- .../bower_components/jquery/src/outro.js | 1 - .../bower_components/jquery/src/queue.js | 49 +- .../jquery/src/queue/delay.js | 14 +- .../jquery/src/selector-native.js | 205 +- .../jquery/src/selector-sizzle.js | 15 +- .../bower_components/jquery/src/selector.js | 4 +- .../bower_components/jquery/src/serialize.js | 85 +- .../jquery/src/sizzle/dist/sizzle.min.js | 3 - .../jquery/src/sizzle/dist/sizzle.min.map | 1 - .../bower_components/jquery/src/traversing.js | 124 +- .../jquery/src/traversing/findFilter.js | 70 +- .../jquery/src/traversing/var/dir.js | 22 + .../src/traversing/var/rneedsContext.js | 6 +- .../jquery/src/traversing/var/siblings.js | 17 + .../jquery/src/var/ObjectFunctionString.js | 7 + .../bower_components/jquery/src/var/arr.js | 6 +- .../jquery/src/var/class2type.js | 6 +- .../bower_components/jquery/src/var/concat.js | 6 +- .../jquery/src/var/document.js | 5 + .../jquery/src/var/documentElement.js | 7 + .../jquery/src/var/fnToString.js | 7 + .../jquery/src/var/getProto.js | 5 + .../bower_components/jquery/src/var/hasOwn.js | 6 +- .../jquery/src/var/indexOf.js | 6 +- .../bower_components/jquery/src/var/pnum.js | 8 +- .../bower_components/jquery/src/var/push.js | 6 +- .../jquery/src/var/rcssNum.js | 9 + .../jquery/src/var/rnothtmlwhite.js | 8 + .../jquery/src/var/rnotwhite.js | 3 - .../bower_components/jquery/src/var/slice.js | 6 +- .../jquery/src/var/strundefined.js | 3 - .../jquery/src/var/support.js | 6 +- .../jquery/src/var/toString.js | 6 +- .../bower_components/jquery/src/wrap.js | 50 +- .../bower_components/masonry/.bower.json | 36 +- .../masonry/{README.mdown => README.md} | 20 +- .../bower_components/masonry/bower.json | 22 +- .../bower_components/masonry/changelog.md | 83 - .../masonry/dist/masonry.pkgd.js | 2182 ++--- .../masonry/dist/masonry.pkgd.min.js | 4 +- .../bower_components/masonry/masonry.js | 124 +- .../masonry/sandbox/add-items.html | 110 - .../masonry/sandbox/basic.html | 62 - .../masonry/sandbox/bottom-up.html | 119 - .../masonry/sandbox/browserify/index.html | 42 - .../masonry/sandbox/browserify/main.js | 19 - .../masonry/sandbox/element-sizing.html | 69 - .../masonry/sandbox/fit-width.html | 68 - .../masonry/sandbox/fluid.html | 89 - .../masonry/sandbox/jquery.html | 64 - .../masonry/sandbox/require-js/index.html | 41 - .../masonry/sandbox/require-js/main.js | 69 - .../masonry/sandbox/right-to-left.html | 120 - .../masonry/sandbox/sandbox.css | 33 - .../masonry/sandbox/stamps.html | 124 - .../matches-selector/matches-selector.js | 107 - .../bower_components/modernizr/.bower.json | 2 +- .../bower_components/outlayer/.bower.json | 30 +- .../bower_components/outlayer/README.md | 22 +- .../bower_components/outlayer/bower.json | 19 +- .../ouidade/bower_components/outlayer/item.js | 248 +- .../bower_components/outlayer/outlayer.js | 385 +- user/themes/ouidade/css/styles.css | 361 +- user/themes/ouidade/js/dist/script.min.js | 3 +- user/themes/ouidade/js/script.js | 70 +- user/themes/ouidade/scss/styles.scss | 290 +- .../ouidade/templates/categories.html.twig | 36 +- user/themes/ouidade/templates/home.html.twig | 4 +- .../ouidade/templates/partials/base.html.twig | 2 +- .../templates/partials/header.html.twig | 2 +- .../templates/partials/projet-block.html.twig | 16 +- .../templates/partials/tagslist.html.twig | 4 +- .../themes/ouidade/templates/projet.html.twig | 18 +- 232 files changed, 24427 insertions(+), 11080 deletions(-) rename user/themes/ouidade/bower_components/{matches-selector => desandro-matches-selector}/.bower.json (68%) rename user/themes/ouidade/bower_components/{matches-selector => desandro-matches-selector}/README.md (77%) rename user/themes/ouidade/bower_components/{matches-selector => desandro-matches-selector}/bower.json (92%) create mode 100644 user/themes/ouidade/bower_components/desandro-matches-selector/matches-selector.js delete mode 100644 user/themes/ouidade/bower_components/doc-ready/.bower.json delete mode 100644 user/themes/ouidade/bower_components/doc-ready/README.md delete mode 100644 user/themes/ouidade/bower_components/doc-ready/bower.json delete mode 100644 user/themes/ouidade/bower_components/doc-ready/doc-ready.js delete mode 100644 user/themes/ouidade/bower_components/ev-emitter/package.json delete mode 100644 user/themes/ouidade/bower_components/eventEmitter/.bower.json delete mode 100644 user/themes/ouidade/bower_components/eventEmitter/EventEmitter.js delete mode 100644 user/themes/ouidade/bower_components/eventEmitter/EventEmitter.min.js delete mode 100644 user/themes/ouidade/bower_components/eventEmitter/README.md delete mode 100644 user/themes/ouidade/bower_components/eventEmitter/UNLICENSE delete mode 100644 user/themes/ouidade/bower_components/eventEmitter/bower.json delete mode 100644 user/themes/ouidade/bower_components/eventEmitter/component.json delete mode 100644 user/themes/ouidade/bower_components/eventie/.bower.json delete mode 100644 user/themes/ouidade/bower_components/eventie/README.md delete mode 100644 user/themes/ouidade/bower_components/eventie/bower.json delete mode 100644 user/themes/ouidade/bower_components/eventie/eventie.js delete mode 100644 user/themes/ouidade/bower_components/eventie/package.json delete mode 100644 user/themes/ouidade/bower_components/get-size/index.html delete mode 100644 user/themes/ouidade/bower_components/get-style-property/.bower.json delete mode 100644 user/themes/ouidade/bower_components/get-style-property/README.md delete mode 100644 user/themes/ouidade/bower_components/get-style-property/bower.json delete mode 100644 user/themes/ouidade/bower_components/get-style-property/component.json delete mode 100644 user/themes/ouidade/bower_components/get-style-property/get-style-property.js delete mode 100644 user/themes/ouidade/bower_components/get-style-property/package.json create mode 100644 user/themes/ouidade/bower_components/isotope/.bower.json create mode 100644 user/themes/ouidade/bower_components/isotope/README.md create mode 100644 user/themes/ouidade/bower_components/isotope/bower.json create mode 100644 user/themes/ouidade/bower_components/isotope/dist/isotope.pkgd.js create mode 100644 user/themes/ouidade/bower_components/isotope/dist/isotope.pkgd.min.js create mode 100644 user/themes/ouidade/bower_components/isotope/gulpfile.js create mode 100644 user/themes/ouidade/bower_components/isotope/js/isotope.js create mode 100644 user/themes/ouidade/bower_components/isotope/js/item.js create mode 100644 user/themes/ouidade/bower_components/isotope/js/layout-mode.js create mode 100644 user/themes/ouidade/bower_components/isotope/js/layout-modes/fit-rows.js create mode 100644 user/themes/ouidade/bower_components/isotope/js/layout-modes/masonry.js create mode 100644 user/themes/ouidade/bower_components/isotope/js/layout-modes/vertical.js create mode 100644 user/themes/ouidade/bower_components/jquery/AUTHORS.txt rename user/themes/ouidade/bower_components/jquery/{MIT-LICENSE.txt => LICENSE.txt} (63%) create mode 100644 user/themes/ouidade/bower_components/jquery/README.md create mode 100644 user/themes/ouidade/bower_components/jquery/dist/core.js create mode 100644 user/themes/ouidade/bower_components/jquery/dist/jquery.slim.js create mode 100644 user/themes/ouidade/bower_components/jquery/dist/jquery.slim.min.js create mode 100644 user/themes/ouidade/bower_components/jquery/dist/jquery.slim.min.map create mode 100644 user/themes/ouidade/bower_components/jquery/external/sizzle/LICENSE.txt rename user/themes/ouidade/bower_components/jquery/{src => external}/sizzle/dist/sizzle.js (75%) create mode 100644 user/themes/ouidade/bower_components/jquery/external/sizzle/dist/sizzle.min.js create mode 100644 user/themes/ouidade/bower_components/jquery/external/sizzle/dist/sizzle.min.map create mode 100644 user/themes/ouidade/bower_components/jquery/src/.eslintrc.json delete mode 100644 user/themes/ouidade/bower_components/jquery/src/ajax/parseJSON.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/ajax/var/location.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/core/DOMEval.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/core/nodeName.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/core/ready-no-deferred.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/core/readyException.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/core/stripAndCollapse.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/core/support.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/css/adjustCSS.js delete mode 100644 user/themes/ouidade/bower_components/jquery/src/css/defaultDisplay.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/css/showHide.js delete mode 100644 user/themes/ouidade/bower_components/jquery/src/css/var/isHidden.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/css/var/isHiddenWithinTree.js rename user/themes/ouidade/bower_components/jquery/src/css/{ => var}/swap.js (77%) rename user/themes/ouidade/bower_components/jquery/src/data/{accepts.js => var/acceptData.js} (65%) rename user/themes/ouidade/bower_components/jquery/src/data/var/{data_priv.js => dataPriv.js} (63%) rename user/themes/ouidade/bower_components/jquery/src/data/var/{data_user.js => dataUser.js} (63%) create mode 100644 user/themes/ouidade/bower_components/jquery/src/deferred/exceptionHook.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/event/focusin.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/event/trigger.js delete mode 100644 user/themes/ouidade/bower_components/jquery/src/intro.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/manipulation/buildFragment.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/manipulation/getAll.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/manipulation/setGlobalEval.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/manipulation/var/rscriptType.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/manipulation/var/rtagName.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/manipulation/wrapMap.js delete mode 100644 user/themes/ouidade/bower_components/jquery/src/outro.js delete mode 100644 user/themes/ouidade/bower_components/jquery/src/sizzle/dist/sizzle.min.js delete mode 100644 user/themes/ouidade/bower_components/jquery/src/sizzle/dist/sizzle.min.map create mode 100644 user/themes/ouidade/bower_components/jquery/src/traversing/var/dir.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/traversing/var/siblings.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/var/ObjectFunctionString.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/var/document.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/var/documentElement.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/var/fnToString.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/var/getProto.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/var/rcssNum.js create mode 100644 user/themes/ouidade/bower_components/jquery/src/var/rnothtmlwhite.js delete mode 100644 user/themes/ouidade/bower_components/jquery/src/var/rnotwhite.js delete mode 100644 user/themes/ouidade/bower_components/jquery/src/var/strundefined.js rename user/themes/ouidade/bower_components/masonry/{README.mdown => README.md} (71%) delete mode 100644 user/themes/ouidade/bower_components/masonry/changelog.md delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/add-items.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/basic.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/bottom-up.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/browserify/index.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/browserify/main.js delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/element-sizing.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/fit-width.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/fluid.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/jquery.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/require-js/index.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/require-js/main.js delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/right-to-left.html delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/sandbox.css delete mode 100644 user/themes/ouidade/bower_components/masonry/sandbox/stamps.html delete mode 100644 user/themes/ouidade/bower_components/matches-selector/matches-selector.js diff --git a/user/themes/ouidade/bower.json b/user/themes/ouidade/bower.json index c4756ba..b707fc0 100644 --- a/user/themes/ouidade/bower.json +++ b/user/themes/ouidade/bower.json @@ -16,10 +16,11 @@ "tests" ], "dependencies": { - "foundation": "~5.5.3", - "imagesloaded": "^4.1.0" + "foundation": "latest", + "imagesloaded": "latest", + "masonry": "latest", + "isotope": "latest" }, "devDependencies": { - "masonry": "~3.3.2" } } diff --git a/user/themes/ouidade/bower_components/matches-selector/.bower.json b/user/themes/ouidade/bower_components/desandro-matches-selector/.bower.json similarity index 68% rename from user/themes/ouidade/bower_components/matches-selector/.bower.json rename to user/themes/ouidade/bower_components/desandro-matches-selector/.bower.json index 98be800..f41e187 100644 --- a/user/themes/ouidade/bower_components/matches-selector/.bower.json +++ b/user/themes/ouidade/bower_components/desandro-matches-selector/.bower.json @@ -1,6 +1,5 @@ { "name": "matches-selector", - "version": "1.0.3", "description": "matches/matchesSelector helper", "main": "matches-selector.js", "devDependencies": { @@ -28,16 +27,16 @@ "test", "tests", "tests.*", - "component.json", "package.json" ], - "_release": "1.0.3", + "version": "2.0.2", + "_release": "2.0.2", "_resolution": { "type": "version", - "tag": "v1.0.3", - "commit": "95e78d3f36e19066e89b0ed767ca36bd2f0b0cfb" + "tag": "v2.0.2", + "commit": "1e7d535ee374ff0823f7232ca1fe2b4ac8e56ae9" }, - "_source": "git://github.com/desandro/matches-selector.git", - "_target": "~1.0.2", - "_originalSource": "matches-selector" + "_source": "https://github.com/desandro/matches-selector.git", + "_target": "^2.0.0", + "_originalSource": "desandro-matches-selector" } \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/matches-selector/README.md b/user/themes/ouidade/bower_components/desandro-matches-selector/README.md similarity index 77% rename from user/themes/ouidade/bower_components/matches-selector/README.md rename to user/themes/ouidade/bower_components/desandro-matches-selector/README.md index e25e830..09fd5f3 100644 --- a/user/themes/ouidade/bower_components/matches-selector/README.md +++ b/user/themes/ouidade/bower_components/desandro-matches-selector/README.md @@ -1,13 +1,11 @@ # matchesSelector helper -[`matches`/`matchesSelector`](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) is pretty hot :fire:, but has [vendor-prefix baggage](http://caniuse.com/#feat=matchesselector) :handbag: :pouch:. This helper function takes care of that, without augmenting `Element.prototype`. +[`matches`/`matchesSelector`](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) is pretty hot :fire:, but has [vendor-prefix baggage](http://caniuse.com/#feat=matchesselector) :handbag: :pouch:. This helper function takes care of that, without polyfilling or augmenting `Element.prototype`. ``` js matchesSelector( elem, selector ); - +// for example matchesSelector( myElem, 'div.my-hawt-selector' ); - -// this DOES NOT polyfill myElem.matchesSelector ``` ## Install @@ -18,7 +16,11 @@ Install with [Bower](http://bower.io): `bower install matches-selector` [Install with npm](https://www.npmjs.org/package/desandro-matches-selector): `npm install desandro-matches-selector` -Install with [Component](https://github.com/component/component): `component install desandro/matches-selector` +## Browser support + +IE10+, all modern browsers + +Use [matchesSelector v1](https://github.com/desandro/matches-selector/releases/tag/v1.0.3) for IE8 and IE9 support. ## MIT license diff --git a/user/themes/ouidade/bower_components/matches-selector/bower.json b/user/themes/ouidade/bower_components/desandro-matches-selector/bower.json similarity index 92% rename from user/themes/ouidade/bower_components/matches-selector/bower.json rename to user/themes/ouidade/bower_components/desandro-matches-selector/bower.json index 397f30b..e502c87 100644 --- a/user/themes/ouidade/bower_components/matches-selector/bower.json +++ b/user/themes/ouidade/bower_components/desandro-matches-selector/bower.json @@ -1,6 +1,5 @@ { "name": "matches-selector", - "version": "1.0.3", "description": "matches/matchesSelector helper", "main": "matches-selector.js", "devDependencies": { @@ -28,7 +27,6 @@ "test", "tests", "tests.*", - "component.json", "package.json" ] } diff --git a/user/themes/ouidade/bower_components/desandro-matches-selector/matches-selector.js b/user/themes/ouidade/bower_components/desandro-matches-selector/matches-selector.js new file mode 100644 index 0000000..a1aa80b --- /dev/null +++ b/user/themes/ouidade/bower_components/desandro-matches-selector/matches-selector.js @@ -0,0 +1,53 @@ +/** + * matchesSelector v2.0.2 + * matchesSelector( element, '.selector' ) + * MIT license + */ + +/*jshint browser: true, strict: true, undef: true, unused: true */ + +( function( window, factory ) { + /*global define: false, module: false */ + 'use strict'; + // universal module definition + if ( typeof define == 'function' && define.amd ) { + // AMD + define( factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.matchesSelector = factory(); + } + +}( window, function factory() { + 'use strict'; + + var matchesMethod = ( function() { + var ElemProto = window.Element.prototype; + // check for the standard method name first + if ( ElemProto.matches ) { + return 'matches'; + } + // check un-prefixed + if ( ElemProto.matchesSelector ) { + return 'matchesSelector'; + } + // check vendor prefixes + var prefixes = [ 'webkit', 'moz', 'ms', 'o' ]; + + for ( var i=0; i < prefixes.length; i++ ) { + var prefix = prefixes[i]; + var method = prefix + 'MatchesSelector'; + if ( ElemProto[ method ] ) { + return method; + } + } + })(); + + return function matchesSelector( elem, selector ) { + return elem[ matchesMethod ]( selector ); + }; + +})); diff --git a/user/themes/ouidade/bower_components/doc-ready/.bower.json b/user/themes/ouidade/bower_components/doc-ready/.bower.json deleted file mode 100644 index d4d75ec..0000000 --- a/user/themes/ouidade/bower_components/doc-ready/.bower.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "doc-ready", - "version": "1.0.4", - "description": "Let's get this party started... on document ready", - "main": "doc-ready.js", - "dependencies": { - "eventie": "^1" - }, - "homepage": "https://github.com/desandro/doc-ready", - "authors": [ - "David DeSandro" - ], - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "DOM", - "document", - "ready" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests", - "examples", - "package.json", - "component.json", - "index.html" - ], - "_release": "1.0.4", - "_resolution": { - "type": "version", - "tag": "v1.0.4", - "commit": "cec8e49744a1e18b14a711eea77e201bb70de544" - }, - "_source": "git://github.com/desandro/doc-ready.git", - "_target": "~1.0.4", - "_originalSource": "doc-ready" -} \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/doc-ready/README.md b/user/themes/ouidade/bower_components/doc-ready/README.md deleted file mode 100644 index 6f382f5..0000000 --- a/user/themes/ouidade/bower_components/doc-ready/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# docReady - -Cross browser document ready helper. Supported by IE8+ and good browsers. - -```js -docReady( function() { - console.log("DOM is ready. Let's party"); -}); -``` - -Props to [dperini/ContentLoaded](https://github.com/dperini/ContentLoaded) for original code - -## Install - -Install with [Bower](http://bower.io) `bower install doc-ready` - -Install with npm `npm install doc-ready` - -Install with [Component](http://github.com/component/component) `component install desandro/doc-ready` - -## MIT License - -docReady is released under the [MIT license](http://desandro.mit-license.org). diff --git a/user/themes/ouidade/bower_components/doc-ready/bower.json b/user/themes/ouidade/bower_components/doc-ready/bower.json deleted file mode 100644 index 726600b..0000000 --- a/user/themes/ouidade/bower_components/doc-ready/bower.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "doc-ready", - "version": "1.0.4", - "description": "Let's get this party started... on document ready", - "main": "doc-ready.js", - "dependencies": { - "eventie": "^1" - }, - "homepage": "https://github.com/desandro/doc-ready", - "authors": [ - "David DeSandro" - ], - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "DOM", - "document", - "ready" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests", - "examples", - "package.json", - "component.json", - "index.html" - ] -} diff --git a/user/themes/ouidade/bower_components/doc-ready/doc-ready.js b/user/themes/ouidade/bower_components/doc-ready/doc-ready.js deleted file mode 100644 index bc5e40e..0000000 --- a/user/themes/ouidade/bower_components/doc-ready/doc-ready.js +++ /dev/null @@ -1,80 +0,0 @@ -/*! - * docReady v1.0.4 - * Cross browser DOMContentLoaded event emitter - * MIT license - */ - -/*jshint browser: true, strict: true, undef: true, unused: true*/ -/*global define: false, require: false, module: false */ - -( function( window ) { - -'use strict'; - -var document = window.document; -// collection of functions to be triggered on ready -var queue = []; - -function docReady( fn ) { - // throw out non-functions - if ( typeof fn !== 'function' ) { - return; - } - - if ( docReady.isReady ) { - // ready now, hit it - fn(); - } else { - // queue function when ready - queue.push( fn ); - } -} - -docReady.isReady = false; - -// triggered on various doc ready events -function onReady( event ) { - // bail if already triggered or IE8 document is not ready just yet - var isIE8NotReady = event.type === 'readystatechange' && document.readyState !== 'complete'; - if ( docReady.isReady || isIE8NotReady ) { - return; - } - - trigger(); -} - -function trigger() { - docReady.isReady = true; - // process queue - for ( var i=0, len = queue.length; i < len; i++ ) { - var fn = queue[i]; - fn(); - } -} - -function defineDocReady( eventie ) { - // trigger ready if page is ready - if ( document.readyState === 'complete' ) { - trigger(); - } else { - // listen for events - eventie.bind( document, 'DOMContentLoaded', onReady ); - eventie.bind( document, 'readystatechange', onReady ); - eventie.bind( window, 'load', onReady ); - } - - return docReady; -} - -// transport -if ( typeof define === 'function' && define.amd ) { - // AMD - define( [ 'eventie/eventie' ], defineDocReady ); -} else if ( typeof exports === 'object' ) { - module.exports = defineDocReady( require('eventie') ); -} else { - // browser global - window.docReady = defineDocReady( window.eventie ); -} - -})( window ); diff --git a/user/themes/ouidade/bower_components/ev-emitter/.bower.json b/user/themes/ouidade/bower_components/ev-emitter/.bower.json index 2f11798..da297e3 100644 --- a/user/themes/ouidade/bower_components/ev-emitter/.bower.json +++ b/user/themes/ouidade/bower_components/ev-emitter/.bower.json @@ -23,16 +23,17 @@ "bower_components", "test", "tests", - "sandbox" + "sandbox", + "package.json" ], - "version": "1.0.2", - "_release": "1.0.2", + "version": "1.1.1", + "_release": "1.1.1", "_resolution": { "type": "version", - "tag": "v1.0.2", - "commit": "0f5ad20bda45710afe9744ed779395e25a530a87" + "tag": "v1.1.1", + "commit": "911c394516b3aec85b0e63df121de88f8c773fc6" }, - "_source": "git://github.com/metafizzy/ev-emitter.git", - "_target": "~1.0.0", + "_source": "https://github.com/metafizzy/ev-emitter.git", + "_target": "^1.0.0", "_originalSource": "ev-emitter" } \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/ev-emitter/README.md b/user/themes/ouidade/bower_components/ev-emitter/README.md index 06c642d..9c4f49b 100644 --- a/user/themes/ouidade/bower_components/ev-emitter/README.md +++ b/user/themes/ouidade/bower_components/ev-emitter/README.md @@ -17,7 +17,7 @@ MyClass.prototype = Object.create( EvEmitter.prototype ); _.extend( MyClass.prototype, EvEmitter.prototype ); // single instance -var emitter = new EventEmitter(); +var emitter = new EvEmitter(); ``` ### on @@ -58,6 +58,14 @@ emitter.emitEvent( eventName, args ) + `eventName` - _String_ - name of the event + `args` - _Array_ - arguments passed to listeners +### allOff + +Removes all event listeners. + +``` js +emitter.allOff() +``` + ## Code example ``` js diff --git a/user/themes/ouidade/bower_components/ev-emitter/bower.json b/user/themes/ouidade/bower_components/ev-emitter/bower.json index cabd111..b2b7ce9 100644 --- a/user/themes/ouidade/bower_components/ev-emitter/bower.json +++ b/user/themes/ouidade/bower_components/ev-emitter/bower.json @@ -23,6 +23,7 @@ "bower_components", "test", "tests", - "sandbox" + "sandbox", + "package.json" ] } diff --git a/user/themes/ouidade/bower_components/ev-emitter/ev-emitter.js b/user/themes/ouidade/bower_components/ev-emitter/ev-emitter.js index 10328f5..3cfa026 100644 --- a/user/themes/ouidade/bower_components/ev-emitter/ev-emitter.js +++ b/user/themes/ouidade/bower_components/ev-emitter/ev-emitter.js @@ -1,5 +1,5 @@ /** - * EvEmitter v1.0.2 + * EvEmitter v1.1.0 * Lil' event emitter * MIT License */ @@ -8,7 +8,7 @@ ( function( global, factory ) { // universal module definition - /* jshint strict: false */ /* globals define, module */ + /* jshint strict: false */ /* globals define, module, window */ if ( typeof define == 'function' && define.amd ) { // AMD - RequireJS define( factory ); @@ -20,7 +20,7 @@ global.EvEmitter = factory(); } -}( this, function() { +}( typeof window != 'undefined' ? window : this, function() { "use strict"; @@ -79,13 +79,14 @@ proto.emitEvent = function( eventName, args ) { if ( !listeners || !listeners.length ) { return; } - var i = 0; - var listener = listeners[i]; + // copy over to avoid interference if .off() in listener + listeners = listeners.slice(0); args = args || []; // once stuff var onceListeners = this._onceEvents && this._onceEvents[ eventName ]; - while ( listener ) { + for ( var i=0; i < listeners.length; i++ ) { + var listener = listeners[i] var isOnce = onceListeners && onceListeners[ listener ]; if ( isOnce ) { // remove listener @@ -96,14 +97,16 @@ proto.emitEvent = function( eventName, args ) { } // trigger listener listener.apply( this, args ); - // get next listener - i += isOnce ? 0 : 1; - listener = listeners[i]; } return this; }; +proto.allOff = function() { + delete this._events; + delete this._onceEvents; +}; + return EvEmitter; })); diff --git a/user/themes/ouidade/bower_components/ev-emitter/package.json b/user/themes/ouidade/bower_components/ev-emitter/package.json deleted file mode 100644 index eac8535..0000000 --- a/user/themes/ouidade/bower_components/ev-emitter/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "ev-emitter", - "version": "1.0.2", - "description": "lil' event emitter", - "main": "ev-emitter.js", - "scripts": { - "test": "mocha test/test" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/metafizzy/ev-emitter.git" - }, - "keywords": [ - "event", - "emitter", - "pubsub" - ], - "author": "David DeSandro", - "license": "MIT", - "bugs": { - "url": "https://github.com/metafizzy/ev-emitter/issues" - }, - "homepage": "https://github.com/metafizzy/ev-emitter#readme", - "directories": { - "test": "test" - } -} diff --git a/user/themes/ouidade/bower_components/eventEmitter/.bower.json b/user/themes/ouidade/bower_components/eventEmitter/.bower.json deleted file mode 100644 index 46dc12a..0000000 --- a/user/themes/ouidade/bower_components/eventEmitter/.bower.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "eventEmitter", - "description": "Event based JavaScript for the browser", - "version": "4.3.0", - "main": [ - "./EventEmitter.js" - ], - "author": { - "name": "Oliver Caldwell", - "web": "http://oli.me.uk/" - }, - "license": "Unlicense", - "keywords": [ - "events", - "structure" - ], - "ignore": [ - "docs", - "tests", - "tools", - ".gitignore", - "package.json" - ], - "homepage": "https://github.com/Olical/EventEmitter", - "_release": "4.3.0", - "_resolution": { - "type": "version", - "tag": "v4.3.0", - "commit": "34545d1b761fca48d7e4d9c71efc868a8d101419" - }, - "_source": "git://github.com/Olical/EventEmitter.git", - "_target": ">=4.2 <5", - "_originalSource": "eventEmitter" -} \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/eventEmitter/EventEmitter.js b/user/themes/ouidade/bower_components/eventEmitter/EventEmitter.js deleted file mode 100644 index 5211bae..0000000 --- a/user/themes/ouidade/bower_components/eventEmitter/EventEmitter.js +++ /dev/null @@ -1,474 +0,0 @@ -/*! - * EventEmitter v4.2.11 - git.io/ee - * Unlicense - http://unlicense.org/ - * Oliver Caldwell - http://oli.me.uk/ - * @preserve - */ - -;(function () { - 'use strict'; - - /** - * Class for managing events. - * Can be extended to provide event functionality in other classes. - * - * @class EventEmitter Manages event registering and emitting. - */ - function EventEmitter() {} - - // Shortcuts to improve speed and size - var proto = EventEmitter.prototype; - var exports = this; - var originalGlobalValue = exports.EventEmitter; - - /** - * Finds the index of the listener for the event in its storage array. - * - * @param {Function[]} listeners Array of listeners to search through. - * @param {Function} listener Method to look for. - * @return {Number} Index of the specified listener, -1 if not found - * @api private - */ - function indexOfListener(listeners, listener) { - var i = listeners.length; - while (i--) { - if (listeners[i].listener === listener) { - return i; - } - } - - return -1; - } - - /** - * Alias a method while keeping the context correct, to allow for overwriting of target method. - * - * @param {String} name The name of the target method. - * @return {Function} The aliased method - * @api private - */ - function alias(name) { - return function aliasClosure() { - return this[name].apply(this, arguments); - }; - } - - /** - * Returns the listener array for the specified event. - * Will initialise the event object and listener arrays if required. - * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them. - * Each property in the object response is an array of listener functions. - * - * @param {String|RegExp} evt Name of the event to return the listeners from. - * @return {Function[]|Object} All listener functions for the event. - */ - proto.getListeners = function getListeners(evt) { - var events = this._getEvents(); - var response; - var key; - - // Return a concatenated array of all matching events if - // the selector is a regular expression. - if (evt instanceof RegExp) { - response = {}; - for (key in events) { - if (events.hasOwnProperty(key) && evt.test(key)) { - response[key] = events[key]; - } - } - } - else { - response = events[evt] || (events[evt] = []); - } - - return response; - }; - - /** - * Takes a list of listener objects and flattens it into a list of listener functions. - * - * @param {Object[]} listeners Raw listener objects. - * @return {Function[]} Just the listener functions. - */ - proto.flattenListeners = function flattenListeners(listeners) { - var flatListeners = []; - var i; - - for (i = 0; i < listeners.length; i += 1) { - flatListeners.push(listeners[i].listener); - } - - return flatListeners; - }; - - /** - * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful. - * - * @param {String|RegExp} evt Name of the event to return the listeners from. - * @return {Object} All listener functions for an event in an object. - */ - proto.getListenersAsObject = function getListenersAsObject(evt) { - var listeners = this.getListeners(evt); - var response; - - if (listeners instanceof Array) { - response = {}; - response[evt] = listeners; - } - - return response || listeners; - }; - - /** - * Adds a listener function to the specified event. - * The listener will not be added if it is a duplicate. - * If the listener returns true then it will be removed after it is called. - * If you pass a regular expression as the event name then the listener will be added to all events that match it. - * - * @param {String|RegExp} evt Name of the event to attach the listener to. - * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.addListener = function addListener(evt, listener) { - var listeners = this.getListenersAsObject(evt); - var listenerIsWrapped = typeof listener === 'object'; - var key; - - for (key in listeners) { - if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) { - listeners[key].push(listenerIsWrapped ? listener : { - listener: listener, - once: false - }); - } - } - - return this; - }; - - /** - * Alias of addListener - */ - proto.on = alias('addListener'); - - /** - * Semi-alias of addListener. It will add a listener that will be - * automatically removed after its first execution. - * - * @param {String|RegExp} evt Name of the event to attach the listener to. - * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.addOnceListener = function addOnceListener(evt, listener) { - return this.addListener(evt, { - listener: listener, - once: true - }); - }; - - /** - * Alias of addOnceListener. - */ - proto.once = alias('addOnceListener'); - - /** - * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad. - * You need to tell it what event names should be matched by a regex. - * - * @param {String} evt Name of the event to create. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.defineEvent = function defineEvent(evt) { - this.getListeners(evt); - return this; - }; - - /** - * Uses defineEvent to define multiple events. - * - * @param {String[]} evts An array of event names to define. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.defineEvents = function defineEvents(evts) { - for (var i = 0; i < evts.length; i += 1) { - this.defineEvent(evts[i]); - } - return this; - }; - - /** - * Removes a listener function from the specified event. - * When passed a regular expression as the event name, it will remove the listener from all events that match it. - * - * @param {String|RegExp} evt Name of the event to remove the listener from. - * @param {Function} listener Method to remove from the event. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.removeListener = function removeListener(evt, listener) { - var listeners = this.getListenersAsObject(evt); - var index; - var key; - - for (key in listeners) { - if (listeners.hasOwnProperty(key)) { - index = indexOfListener(listeners[key], listener); - - if (index !== -1) { - listeners[key].splice(index, 1); - } - } - } - - return this; - }; - - /** - * Alias of removeListener - */ - proto.off = alias('removeListener'); - - /** - * Adds listeners in bulk using the manipulateListeners method. - * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added. - * You can also pass it a regular expression to add the array of listeners to all events that match it. - * Yeah, this function does quite a bit. That's probably a bad thing. - * - * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once. - * @param {Function[]} [listeners] An optional array of listener functions to add. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.addListeners = function addListeners(evt, listeners) { - // Pass through to manipulateListeners - return this.manipulateListeners(false, evt, listeners); - }; - - /** - * Removes listeners in bulk using the manipulateListeners method. - * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. - * You can also pass it an event name and an array of listeners to be removed. - * You can also pass it a regular expression to remove the listeners from all events that match it. - * - * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once. - * @param {Function[]} [listeners] An optional array of listener functions to remove. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.removeListeners = function removeListeners(evt, listeners) { - // Pass through to manipulateListeners - return this.manipulateListeners(true, evt, listeners); - }; - - /** - * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level. - * The first argument will determine if the listeners are removed (true) or added (false). - * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. - * You can also pass it an event name and an array of listeners to be added/removed. - * You can also pass it a regular expression to manipulate the listeners of all events that match it. - * - * @param {Boolean} remove True if you want to remove listeners, false if you want to add. - * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once. - * @param {Function[]} [listeners] An optional array of listener functions to add/remove. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) { - var i; - var value; - var single = remove ? this.removeListener : this.addListener; - var multiple = remove ? this.removeListeners : this.addListeners; - - // If evt is an object then pass each of its properties to this method - if (typeof evt === 'object' && !(evt instanceof RegExp)) { - for (i in evt) { - if (evt.hasOwnProperty(i) && (value = evt[i])) { - // Pass the single listener straight through to the singular method - if (typeof value === 'function') { - single.call(this, i, value); - } - else { - // Otherwise pass back to the multiple function - multiple.call(this, i, value); - } - } - } - } - else { - // So evt must be a string - // And listeners must be an array of listeners - // Loop over it and pass each one to the multiple method - i = listeners.length; - while (i--) { - single.call(this, evt, listeners[i]); - } - } - - return this; - }; - - /** - * Removes all listeners from a specified event. - * If you do not specify an event then all listeners will be removed. - * That means every event will be emptied. - * You can also pass a regex to remove all events that match it. - * - * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.removeEvent = function removeEvent(evt) { - var type = typeof evt; - var events = this._getEvents(); - var key; - - // Remove different things depending on the state of evt - if (type === 'string') { - // Remove all listeners for the specified event - delete events[evt]; - } - else if (evt instanceof RegExp) { - // Remove all events matching the regex. - for (key in events) { - if (events.hasOwnProperty(key) && evt.test(key)) { - delete events[key]; - } - } - } - else { - // Remove all listeners in all events - delete this._events; - } - - return this; - }; - - /** - * Alias of removeEvent. - * - * Added to mirror the node API. - */ - proto.removeAllListeners = alias('removeEvent'); - - /** - * Emits an event of your choice. - * When emitted, every listener attached to that event will be executed. - * If you pass the optional argument array then those arguments will be passed to every listener upon execution. - * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately. - * So they will not arrive within the array on the other side, they will be separate. - * You can also pass a regular expression to emit to all events that match it. - * - * @param {String|RegExp} evt Name of the event to emit and execute listeners for. - * @param {Array} [args] Optional array of arguments to be passed to each listener. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.emitEvent = function emitEvent(evt, args) { - var listenersMap = this.getListenersAsObject(evt); - var listeners; - var listener; - var i; - var key; - var response; - - for (key in listenersMap) { - if (listenersMap.hasOwnProperty(key)) { - listeners = listenersMap[key].slice(0); - i = listeners.length; - - while (i--) { - // If the listener returns true then it shall be removed from the event - // The function is executed either with a basic call or an apply if there is an args array - listener = listeners[i]; - - if (listener.once === true) { - this.removeListener(evt, listener.listener); - } - - response = listener.listener.apply(this, args || []); - - if (response === this._getOnceReturnValue()) { - this.removeListener(evt, listener.listener); - } - } - } - } - - return this; - }; - - /** - * Alias of emitEvent - */ - proto.trigger = alias('emitEvent'); - - /** - * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on. - * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it. - * - * @param {String|RegExp} evt Name of the event to emit and execute listeners for. - * @param {...*} Optional additional arguments to be passed to each listener. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.emit = function emit(evt) { - var args = Array.prototype.slice.call(arguments, 1); - return this.emitEvent(evt, args); - }; - - /** - * Sets the current value to check against when executing listeners. If a - * listeners return value matches the one set here then it will be removed - * after execution. This value defaults to true. - * - * @param {*} value The new value to check for when executing listeners. - * @return {Object} Current instance of EventEmitter for chaining. - */ - proto.setOnceReturnValue = function setOnceReturnValue(value) { - this._onceReturnValue = value; - return this; - }; - - /** - * Fetches the current value to check against when executing listeners. If - * the listeners return value matches this one then it should be removed - * automatically. It will return true by default. - * - * @return {*|Boolean} The current value to check for or the default, true. - * @api private - */ - proto._getOnceReturnValue = function _getOnceReturnValue() { - if (this.hasOwnProperty('_onceReturnValue')) { - return this._onceReturnValue; - } - else { - return true; - } - }; - - /** - * Fetches the events object and creates one if required. - * - * @return {Object} The events storage object. - * @api private - */ - proto._getEvents = function _getEvents() { - return this._events || (this._events = {}); - }; - - /** - * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version. - * - * @return {Function} Non conflicting EventEmitter class. - */ - EventEmitter.noConflict = function noConflict() { - exports.EventEmitter = originalGlobalValue; - return EventEmitter; - }; - - // Expose the class either via AMD, CommonJS or the global object - if (typeof define === 'function' && define.amd) { - define(function () { - return EventEmitter; - }); - } - else if (typeof module === 'object' && module.exports){ - module.exports = EventEmitter; - } - else { - exports.EventEmitter = EventEmitter; - } -}.call(this)); diff --git a/user/themes/ouidade/bower_components/eventEmitter/EventEmitter.min.js b/user/themes/ouidade/bower_components/eventEmitter/EventEmitter.min.js deleted file mode 100644 index f85b5e3..0000000 --- a/user/themes/ouidade/bower_components/eventEmitter/EventEmitter.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * EventEmitter v4.2.11 - git.io/ee - * Unlicense - http://unlicense.org/ - * Oliver Caldwell - http://oli.me.uk/ - * @preserve - */ -(function(){"use strict";function t(){}function i(t,n){for(var e=t.length;e--;)if(t[e].listener===n)return e;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var e=t.prototype,r=this,s=r.EventEmitter;e.getListeners=function(n){var r,e,t=this._getEvents();if(n instanceof RegExp){r={};for(e in t)t.hasOwnProperty(e)&&n.test(e)&&(r[e]=t[e])}else r=t[n]||(t[n]=[]);return r},e.flattenListeners=function(t){var e,n=[];for(e=0;eThis is free and unencumbered software released into the public domain. -> ->Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. - -I gave people the chance to object in issue #84, which also explains my reasoning. - -[guide]: https://github.com/Wolfy87/EventEmitter/blob/master/docs/guide.md -[api]: https://github.com/Olical/EventEmitter/blob/master/docs/api.md -[simple]: http://jsfiddle.net/Wolfy87/qXQu9/ -[regexp dom caster]: http://jsfiddle.net/Wolfy87/JqRvS/ -[npm]: https://npmjs.org/ -[bower]: http://bower.io/ -[component]: http://github.com/component/component -[mocha]: http://visionmedia.github.io/mocha/ -[chai]: http://chaijs.com/ -[issues]: https://github.com/Olical/EventEmitter/issues -[example]: https://github.com/Olical/EventEmitter/pull/46 -[nathggns]: https://github.com/nathggns -[http-server]: https://www.npmjs.org/package/http-server -[node.js]: http://nodejs.org/ -[gitter]: https://gitter.im/Olical/EventEmitter?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge -[unlicense]: http://unlicense.org/ diff --git a/user/themes/ouidade/bower_components/eventEmitter/UNLICENSE b/user/themes/ouidade/bower_components/eventEmitter/UNLICENSE deleted file mode 100644 index 68a49da..0000000 --- a/user/themes/ouidade/bower_components/eventEmitter/UNLICENSE +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -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 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. - -For more information, please refer to diff --git a/user/themes/ouidade/bower_components/eventEmitter/bower.json b/user/themes/ouidade/bower_components/eventEmitter/bower.json deleted file mode 100644 index 39b9803..0000000 --- a/user/themes/ouidade/bower_components/eventEmitter/bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "eventEmitter", - "description": "Event based JavaScript for the browser", - "version": "4.3.0", - "main": [ - "./EventEmitter.js" - ], - "author": { - "name": "Oliver Caldwell", - "web": "http://oli.me.uk/" - }, - "license": "Unlicense", - "keywords": [ - "events", - "structure" - ], - "ignore": [ - "docs", - "tests", - "tools", - ".gitignore", - "package.json" - ] -} diff --git a/user/themes/ouidade/bower_components/eventEmitter/component.json b/user/themes/ouidade/bower_components/eventEmitter/component.json deleted file mode 100644 index 34e0670..0000000 --- a/user/themes/ouidade/bower_components/eventEmitter/component.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "eventEmitter", - "repo": "Olical/EventEmitter", - "description": "Event based JavaScript for the browser.", - "version": "4.3.0", - "scripts": ["EventEmitter.js"], - "main": "EventEmitter.js", - "license": "Unlicense" -} diff --git a/user/themes/ouidade/bower_components/eventie/.bower.json b/user/themes/ouidade/bower_components/eventie/.bower.json deleted file mode 100644 index 6b5b662..0000000 --- a/user/themes/ouidade/bower_components/eventie/.bower.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "eventie", - "version": "1.0.6", - "main": "eventie.js", - "description": "event binding helper", - "ignore": [ - "component.json", - "test.html", - "**/.*", - "node_modules", - "bower_components" - ], - "homepage": "https://github.com/desandro/eventie", - "authors": [ - "David DeSandro" - ], - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "event" - ], - "license": "MIT", - "_release": "1.0.6", - "_resolution": { - "type": "version", - "tag": "v1.0.6", - "commit": "14d2ca3df97da64c820829a8310f9198fbafbcfa" - }, - "_source": "git://github.com/desandro/eventie.git", - "_target": "~1.0.3", - "_originalSource": "eventie" -} \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/eventie/README.md b/user/themes/ouidade/bower_components/eventie/README.md deleted file mode 100644 index 4d40713..0000000 --- a/user/themes/ouidade/bower_components/eventie/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# eventie - event binding helper - -Makes dealing with events in IE8 bearable. Supported by IE8+ and good browsers. - -``` js -var elem = document.querySelector('#my-elem'); -function onElemClick( event ) { - console.log( event.type + ' just happened on #' + event.target.id ); - // -> click just happened on #my-elem -} - -eventie.bind( elem, 'click', onElemClick ); - -eventie.unbind( elem, 'click', onElemClick ); -``` - -## Install - -Download [eventie.js](eventie.js) - -Install with [Bower :bird:](http://bower.io) `bower install eventie` - -Install with npm :truck: `npm install eventie` - -Install with [Component :nut_and_bolt:](https://github.com/component/component) `component install desandro/eventie` - -## IE 8 - -eventie add support for `event.target` and [`.handleEvent` method](https://developer.mozilla.org/en-US/docs/DOM/EventListener#handleEvent\(\)) for Internet Explorer 8. - -## MIT license - -eventie is released under the [MIT license](http://desandro.mit-license.org). diff --git a/user/themes/ouidade/bower_components/eventie/bower.json b/user/themes/ouidade/bower_components/eventie/bower.json deleted file mode 100644 index 96092a6..0000000 --- a/user/themes/ouidade/bower_components/eventie/bower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "eventie", - "version": "1.0.6", - "main": "eventie.js", - "description": "event binding helper", - "ignore": [ - "component.json", - "test.html", - "**/.*", - "node_modules", - "bower_components" - ], - "homepage": "https://github.com/desandro/eventie", - "authors": [ - "David DeSandro" - ], - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "event" - ], - "license": "MIT" -} diff --git a/user/themes/ouidade/bower_components/eventie/eventie.js b/user/themes/ouidade/bower_components/eventie/eventie.js deleted file mode 100644 index 2bf9929..0000000 --- a/user/themes/ouidade/bower_components/eventie/eventie.js +++ /dev/null @@ -1,82 +0,0 @@ -/*! - * eventie v1.0.6 - * event binding helper - * eventie.bind( elem, 'click', myFn ) - * eventie.unbind( elem, 'click', myFn ) - * MIT license - */ - -/*jshint browser: true, undef: true, unused: true */ -/*global define: false, module: false */ - -( function( window ) { - -'use strict'; - -var docElem = document.documentElement; - -var bind = function() {}; - -function getIEEvent( obj ) { - var event = window.event; - // add event.target - event.target = event.target || event.srcElement || obj; - return event; -} - -if ( docElem.addEventListener ) { - bind = function( obj, type, fn ) { - obj.addEventListener( type, fn, false ); - }; -} else if ( docElem.attachEvent ) { - bind = function( obj, type, fn ) { - obj[ type + fn ] = fn.handleEvent ? - function() { - var event = getIEEvent( obj ); - fn.handleEvent.call( fn, event ); - } : - function() { - var event = getIEEvent( obj ); - fn.call( obj, event ); - }; - obj.attachEvent( "on" + type, obj[ type + fn ] ); - }; -} - -var unbind = function() {}; - -if ( docElem.removeEventListener ) { - unbind = function( obj, type, fn ) { - obj.removeEventListener( type, fn, false ); - }; -} else if ( docElem.detachEvent ) { - unbind = function( obj, type, fn ) { - obj.detachEvent( "on" + type, obj[ type + fn ] ); - try { - delete obj[ type + fn ]; - } catch ( err ) { - // can't delete window object properties - obj[ type + fn ] = undefined; - } - }; -} - -var eventie = { - bind: bind, - unbind: unbind -}; - -// ----- module definition ----- // - -if ( typeof define === 'function' && define.amd ) { - // AMD - define( eventie ); -} else if ( typeof exports === 'object' ) { - // CommonJS - module.exports = eventie; -} else { - // browser global - window.eventie = eventie; -} - -})( window ); diff --git a/user/themes/ouidade/bower_components/eventie/package.json b/user/themes/ouidade/bower_components/eventie/package.json deleted file mode 100644 index 5ce5740..0000000 --- a/user/themes/ouidade/bower_components/eventie/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "eventie", - "version": "1.0.6", - "description": "Event binding helper", - "main": "eventie.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git://github.com/desandro/eventie.git" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/desandro/eventie/issues" - }, - "homepage": "https://github.com/desandro/eventie", - "keywords": [ - "DOM", - "event" - ], - "author": "David DeSandro" -} diff --git a/user/themes/ouidade/bower_components/fastclick/.bower.json b/user/themes/ouidade/bower_components/fastclick/.bower.json index db37d8c..da79753 100644 --- a/user/themes/ouidade/bower_components/fastclick/.bower.json +++ b/user/themes/ouidade/bower_components/fastclick/.bower.json @@ -17,7 +17,7 @@ "tag": "v1.0.6", "commit": "2ac7258407619398005ca720596f0d36ce66a6c8" }, - "_source": "git://github.com/ftlabs/fastclick.git", + "_source": "https://github.com/ftlabs/fastclick.git", "_target": ">=0.6.11", "_originalSource": "fastclick" } \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/fizzy-ui-utils/.bower.json b/user/themes/ouidade/bower_components/fizzy-ui-utils/.bower.json index 1f625f1..90adc7b 100644 --- a/user/themes/ouidade/bower_components/fizzy-ui-utils/.bower.json +++ b/user/themes/ouidade/bower_components/fizzy-ui-utils/.bower.json @@ -1,14 +1,12 @@ { "name": "fizzy-ui-utils", - "version": "1.0.1", "authors": [ "David DeSandro" ], "description": "UI utilities", "main": "utils.js", "dependencies": { - "doc-ready": "~1.0.4", - "matches-selector": "~1.0.2" + "desandro-matches-selector": "^2.0.0" }, "moduleType": [ "amd", @@ -28,14 +26,18 @@ "tests", "package.json" ], + "devDependencies": { + "qunit": "~1.20.0" + }, "homepage": "https://github.com/metafizzy/fizzy-ui-utils", - "_release": "1.0.1", + "version": "2.0.5", + "_release": "2.0.5", "_resolution": { "type": "version", - "tag": "v1.0.1", - "commit": "823b543b583f4831d25aadf94c26fc6018e62172" + "tag": "v2.0.5", + "commit": "96fd89e0575e6af7b4634138139ee1a80d975b38" }, - "_source": "git://github.com/metafizzy/fizzy-ui-utils.git", - "_target": "~1.0.1", + "_source": "https://github.com/metafizzy/fizzy-ui-utils.git", + "_target": "^2.0.4", "_originalSource": "fizzy-ui-utils" } \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/fizzy-ui-utils/README.md b/user/themes/ouidade/bower_components/fizzy-ui-utils/README.md index e880394..ae461c4 100644 --- a/user/themes/ouidade/bower_components/fizzy-ui-utils/README.md +++ b/user/themes/ouidade/bower_components/fizzy-ui-utils/README.md @@ -24,24 +24,12 @@ utils.extend( a, b ) utils.modulo( num, div ) // num [modulo] div -utils.isArray( obj ) -// check if object is Array - utils.makeArray( obj ) // make array from object -utils.indexOf( ary, obj ) -// get index of object in array - utils.removeFrom( ary, obj ) // remove object from array -utils.isElement( obj ) -// check if object is an element - -utils.setText( elem, text ) -// set text of an element - utils.getParent( elem, selector ) // get parent element of an element, given a selector string @@ -57,6 +45,9 @@ utils.filterFindElements( elems, selector ) utils.debounceMethod( Class, methodName, threhold ) // debounce a class method +utils.docReady( callback ) +// trigger callback on document ready + utils.toDashed( str ) // 'camelCaseString' -> 'camel-case-string' @@ -68,6 +59,6 @@ utils.htmlInit( Class, namespace ) --- -MIT license. Have at it. +[MIT license](http://desandro.mit-license.org/). Have at it. By [Metafizzy](http://metafizzy.co) diff --git a/user/themes/ouidade/bower_components/fizzy-ui-utils/bower.json b/user/themes/ouidade/bower_components/fizzy-ui-utils/bower.json index b7caf63..92682e0 100644 --- a/user/themes/ouidade/bower_components/fizzy-ui-utils/bower.json +++ b/user/themes/ouidade/bower_components/fizzy-ui-utils/bower.json @@ -1,14 +1,12 @@ { "name": "fizzy-ui-utils", - "version": "1.0.1", "authors": [ "David DeSandro" ], "description": "UI utilities", "main": "utils.js", "dependencies": { - "doc-ready": "~1.0.4", - "matches-selector": "~1.0.2" + "desandro-matches-selector": "^2.0.0" }, "moduleType": [ "amd", @@ -27,5 +25,8 @@ "test", "tests", "package.json" - ] + ], + "devDependencies": { + "qunit": "~1.20.0" + } } diff --git a/user/themes/ouidade/bower_components/fizzy-ui-utils/utils.js b/user/themes/ouidade/bower_components/fizzy-ui-utils/utils.js index ebac882..eac5f63 100644 --- a/user/themes/ouidade/bower_components/fizzy-ui-utils/utils.js +++ b/user/themes/ouidade/bower_components/fizzy-ui-utils/utils.js @@ -1,40 +1,36 @@ /** - * Fizzy UI utils v1.0.1 + * Fizzy UI utils v2.0.5 * MIT license */ /*jshint browser: true, undef: true, unused: true, strict: true */ ( function( window, factory ) { - /*global define: false, module: false, require: false */ - 'use strict'; // universal module definition + /*jshint strict: false */ /*globals define, module, require */ if ( typeof define == 'function' && define.amd ) { // AMD define( [ - 'doc-ready/doc-ready', - 'matches-selector/matches-selector' - ], function( docReady, matchesSelector ) { - return factory( window, docReady, matchesSelector ); + 'desandro-matches-selector/matches-selector' + ], function( matchesSelector ) { + return factory( window, matchesSelector ); }); - } else if ( typeof exports == 'object' ) { + } else if ( typeof module == 'object' && module.exports ) { // CommonJS module.exports = factory( window, - require('doc-ready'), require('desandro-matches-selector') ); } else { // browser global window.fizzyUIUtils = factory( window, - window.docReady, window.matchesSelector ); } -}( window, function factory( window, docReady, matchesSelector ) { +}( window, function factory( window, matchesSelector ) { 'use strict'; @@ -56,24 +52,18 @@ utils.modulo = function( num, div ) { return ( ( num % div ) + div ) % div; }; -// ----- isArray ----- // - -var objToString = Object.prototype.toString; -utils.isArray = function( obj ) { - return objToString.call( obj ) == '[object Array]'; -}; - // ----- makeArray ----- // // turn element or nodeList into an array utils.makeArray = function( obj ) { var ary = []; - if ( utils.isArray( obj ) ) { + if ( Array.isArray( obj ) ) { // use object if already an array ary = obj; - } else if ( obj && typeof obj.length == 'number' ) { + } else if ( obj && typeof obj == 'object' && + typeof obj.length == 'number' ) { // convert nodeList to array - for ( var i=0, len = obj.length; i < len; i++ ) { + for ( var i=0; i < obj.length; i++ ) { ary.push( obj[i] ); } } else { @@ -83,57 +73,19 @@ utils.makeArray = function( obj ) { return ary; }; -// ----- indexOf ----- // - -// index of helper cause IE8 -utils.indexOf = Array.prototype.indexOf ? function( ary, obj ) { - return ary.indexOf( obj ); - } : function( ary, obj ) { - for ( var i=0, len = ary.length; i < len; i++ ) { - if ( ary[i] === obj ) { - return i; - } - } - return -1; - }; - // ----- removeFrom ----- // utils.removeFrom = function( ary, obj ) { - var index = utils.indexOf( ary, obj ); + var index = ary.indexOf( obj ); if ( index != -1 ) { ary.splice( index, 1 ); } }; -// ----- isElement ----- // - -// http://stackoverflow.com/a/384380/182183 -utils.isElement = ( typeof HTMLElement == 'function' || typeof HTMLElement == 'object' ) ? - function isElementDOM2( obj ) { - return obj instanceof HTMLElement; - } : - function isElementQuirky( obj ) { - return obj && typeof obj == 'object' && - obj.nodeType == 1 && typeof obj.nodeName == 'string'; - }; - -// ----- setText ----- // - -utils.setText = ( function() { - var setTextProperty; - function setText( elem, text ) { - // only check setTextProperty once - setTextProperty = setTextProperty || ( document.documentElement.textContent !== undefined ? 'textContent' : 'innerText' ); - elem[ setTextProperty ] = text; - } - return setText; -})(); - // ----- getParent ----- // utils.getParent = function( elem, selector ) { - while ( elem != document.body ) { + while ( elem.parentNode && elem != document.body ) { elem = elem.parentNode; if ( matchesSelector( elem, selector ) ) { return elem; @@ -168,28 +120,28 @@ utils.filterFindElements = function( elems, selector ) { elems = utils.makeArray( elems ); var ffElems = []; - for ( var i=0, len = elems.length; i < len; i++ ) { - var elem = elems[i]; + elems.forEach( function( elem ) { // check that elem is an actual element - if ( !utils.isElement( elem ) ) { - continue; + if ( !( elem instanceof HTMLElement ) ) { + return; + } + // add elem if no selector + if ( !selector ) { + ffElems.push( elem ); + return; } // filter & find items if we have a selector - if ( selector ) { - // filter siblings - if ( matchesSelector( elem, selector ) ) { - ffElems.push( elem ); - } - // find children - var childElems = elem.querySelectorAll( selector ); - // concat childElems to filterFound array - for ( var j=0, jLen = childElems.length; j < jLen; j++ ) { - ffElems.push( childElems[j] ); - } - } else { + // filter + if ( matchesSelector( elem, selector ) ) { ffElems.push( elem ); } - } + // find children + var childElems = elem.querySelectorAll( selector ); + // concat childElems to filterFound array + for ( var i=0; i < childElems.length; i++ ) { + ffElems.push( childElems[i] ); + } + }); return ffElems; }; @@ -216,6 +168,18 @@ utils.debounceMethod = function( _class, methodName, threshold ) { }; }; +// ----- docReady ----- // + +utils.docReady = function( callback ) { + var readyState = document.readyState; + if ( readyState == 'complete' || readyState == 'interactive' ) { + // do async to allow for other scripts to run. metafizzy/flickity#441 + setTimeout( callback ); + } else { + document.addEventListener( 'DOMContentLoaded', callback ); + } +}; + // ----- htmlInit ----- // // http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/ @@ -227,39 +191,43 @@ utils.toDashed = function( str ) { var console = window.console; /** - * allow user to initialize classes via .js-namespace class + * allow user to initialize classes via [data-namespace] or .js-namespace class * htmlInit( Widget, 'widgetName' ) - * options are parsed from data-namespace-option attribute + * options are parsed from data-namespace-options */ utils.htmlInit = function( WidgetClass, namespace ) { - docReady( function() { + utils.docReady( function() { var dashedNamespace = utils.toDashed( namespace ); - var elems = document.querySelectorAll( '.js-' + dashedNamespace ); - var dataAttr = 'data-' + dashedNamespace + '-options'; + var dataAttr = 'data-' + dashedNamespace; + var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' ); + var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace ); + var elems = utils.makeArray( dataAttrElems ) + .concat( utils.makeArray( jsDashElems ) ); + var dataOptionsAttr = dataAttr + '-options'; + var jQuery = window.jQuery; - for ( var i=0, len = elems.length; i < len; i++ ) { - var elem = elems[i]; - var attr = elem.getAttribute( dataAttr ); + elems.forEach( function( elem ) { + var attr = elem.getAttribute( dataAttr ) || + elem.getAttribute( dataOptionsAttr ); var options; try { options = attr && JSON.parse( attr ); } catch ( error ) { // log error, do not initialize if ( console ) { - console.error( 'Error parsing ' + dataAttr + ' on ' + - elem.nodeName.toLowerCase() + ( elem.id ? '#' + elem.id : '' ) + ': ' + - error ); + console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className + + ': ' + error ); } - continue; + return; } // initialize var instance = new WidgetClass( elem, options ); - // make available via $().data('layoutname') - var jQuery = window.jQuery; + // make available via $().data('namespace') if ( jQuery ) { jQuery.data( elem, namespace, instance ); } - } + }); + }); }; diff --git a/user/themes/ouidade/bower_components/foundation/.bower.json b/user/themes/ouidade/bower_components/foundation/.bower.json index f15210d..4cbbd3f 100644 --- a/user/themes/ouidade/bower_components/foundation/.bower.json +++ b/user/themes/ouidade/bower_components/foundation/.bower.json @@ -25,8 +25,7 @@ "tag": "5.5.3", "commit": "b879716aa268e1f88fe43de98db2db4487af00ca" }, - "_source": "git://github.com/zurb/bower-foundation.git", - "_target": "~5.5.3", - "_originalSource": "foundation", - "_direct": true + "_source": "https://github.com/zurb/bower-foundation.git", + "_target": "*", + "_originalSource": "foundation" } \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/foundation/scss/foundation/_settings.scss b/user/themes/ouidade/bower_components/foundation/scss/foundation/_settings.scss index 57e84ec..574142f 100644 --- a/user/themes/ouidade/bower_components/foundation/scss/foundation/_settings.scss +++ b/user/themes/ouidade/bower_components/foundation/scss/foundation/_settings.scss @@ -77,7 +77,7 @@ $include-html-global-classes: $include-html-classes; // - - - - - - - - - - - - - - - - - - - - - - - - - // $include-html-grid-classes: $include-html-classes; -$include-xl-html-grid-classes: true; +// $include-xl-html-grid-classes: false; // $row-width: rem-calc(1000); // $total-columns: 12; diff --git a/user/themes/ouidade/bower_components/get-size/.bower.json b/user/themes/ouidade/bower_components/get-size/.bower.json index 4064d0b..cc252f6 100644 --- a/user/themes/ouidade/bower_components/get-size/.bower.json +++ b/user/themes/ouidade/bower_components/get-size/.bower.json @@ -1,11 +1,9 @@ { "name": "get-size", - "version": "1.2.2", + "version": "2.0.2", "main": "get-size.js", "description": "measures element size", - "dependencies": { - "get-style-property": "1.x" - }, + "dependencies": {}, "devDependencies": { "qunit": "~1.10" }, @@ -13,11 +11,11 @@ "test/", "**/.*", "package.json", - "component.json", "node_modules", "bower_components", "test", - "tests" + "tests", + "sandbox.html" ], "homepage": "https://github.com/desandro/get-size", "authors": [ @@ -35,13 +33,13 @@ "height" ], "license": "MIT", - "_release": "1.2.2", + "_release": "2.0.2", "_resolution": { "type": "version", - "tag": "v1.2.2", - "commit": "059bbf3aa78997e4ca761e6d742b2e9efe674e08" + "tag": "v2.0.2", + "commit": "53ad18840e260d5eb89fd579362596dad5852c77" }, - "_source": "git://github.com/desandro/get-size.git", - "_target": "~1.2.2", + "_source": "https://github.com/desandro/get-size.git", + "_target": "^2.0.2", "_originalSource": "get-size" } \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/get-size/README.md b/user/themes/ouidade/bower_components/get-size/README.md index 4b4e822..f3573a8 100644 --- a/user/themes/ouidade/bower_components/get-size/README.md +++ b/user/themes/ouidade/bower_components/get-size/README.md @@ -12,7 +12,7 @@ var size = getSize('#selector') Returns an object with: `width`, `height`, `innerWidth/Height`, `outerWidth/Height`, `paddingLeft/Top/Right/Bottom`, `marginLeft/Top/Right/Bottom`, `borderLeft/Top/Right/BottomWidth` and `isBorderBox`. -Tested in IE8, IE9 and good browsers. +Browser support: IE10+, Android 4.0+, iOS 5+, and modern browsers ## Install @@ -32,10 +32,6 @@ Install with npm: `npm install get-size` } ``` -## Fractional values in IE8 - -For percentage or `em`-based sizes, IE8 does not support fractional values. getSize will round to the nearest value. - ## MIT License getSize is released under the [MIT License](http://desandro.mit-license.org/). diff --git a/user/themes/ouidade/bower_components/get-size/bower.json b/user/themes/ouidade/bower_components/get-size/bower.json index 96563a7..bb7a6e6 100644 --- a/user/themes/ouidade/bower_components/get-size/bower.json +++ b/user/themes/ouidade/bower_components/get-size/bower.json @@ -1,10 +1,9 @@ { "name": "get-size", - "version": "1.2.2", + "version": "2.0.2", "main": "get-size.js", "description": "measures element size", "dependencies": { - "get-style-property": "1.x" }, "devDependencies": { "qunit": "~1.10" @@ -13,11 +12,11 @@ "test/", "**/.*", "package.json", - "component.json", "node_modules", "bower_components", "test", - "tests" + "tests", + "sandbox.html" ], "homepage": "https://github.com/desandro/get-size", "authors": [ diff --git a/user/themes/ouidade/bower_components/get-size/get-size.js b/user/themes/ouidade/bower_components/get-size/get-size.js index e0df175..fda33b6 100644 --- a/user/themes/ouidade/bower_components/get-size/get-size.js +++ b/user/themes/ouidade/bower_components/get-size/get-size.js @@ -1,14 +1,29 @@ /*! - * getSize v1.2.2 + * getSize v2.0.2 * measure size of elements * MIT license */ /*jshint browser: true, strict: true, undef: true, unused: true */ -/*global define: false, exports: false, require: false, module: false, console: false */ +/*global define: false, module: false, console: false */ -( function( window, undefined ) { +( function( window, factory ) { + 'use strict'; + if ( typeof define == 'function' && define.amd ) { + // AMD + define( function() { + return factory(); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.getSize = factory(); + } + +})( window, function factory() { 'use strict'; // -------------------------- helpers -------------------------- // @@ -17,13 +32,13 @@ function getStyleSize( value ) { var num = parseFloat( value ); // not a percent like '100%', and a number - var isValid = value.indexOf('%') === -1 && !isNaN( num ); + var isValid = value.indexOf('%') == -1 && !isNaN( num ); return isValid && num; } function noop() {} -var logError = typeof console === 'undefined' ? noop : +var logError = typeof console == 'undefined' ? noop : function( message ) { console.error( message ); }; @@ -45,6 +60,8 @@ var measurements = [ 'borderBottomWidth' ]; +var measurementsLength = measurements.length; + function getZeroSize() { var size = { width: 0, @@ -54,27 +71,39 @@ function getZeroSize() { outerWidth: 0, outerHeight: 0 }; - for ( var i=0, len = measurements.length; i < len; i++ ) { + for ( var i=0; i < measurementsLength; i++ ) { var measurement = measurements[i]; size[ measurement ] = 0; } return size; } +// -------------------------- getStyle -------------------------- // - -function defineGetSize( getStyleProperty ) { +/** + * getStyle, get style of element, check for Firefox bug + * https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + */ +function getStyle( elem ) { + var style = getComputedStyle( elem ); + if ( !style ) { + logError( 'Style returned ' + style + + '. Are you running this code in a hidden iframe on Firefox? ' + + 'See http://bit.ly/getsizebug1' ); + } + return style; +} // -------------------------- setup -------------------------- // var isSetup = false; -var getStyle, boxSizingProp, isBoxSizeOuter; +var isBoxSizeOuter; /** - * setup vars and functions - * do it on initial getSize(), rather than on script load - * For Firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + * setup + * check isBoxSizerOuter + * do on first getSize() rather than on page load for Firefox bug */ function setup() { // setup once @@ -83,50 +112,25 @@ function setup() { } isSetup = true; - var getComputedStyle = window.getComputedStyle; - getStyle = ( function() { - var getStyleFn = getComputedStyle ? - function( elem ) { - return getComputedStyle( elem, null ); - } : - function( elem ) { - return elem.currentStyle; - }; - - return function getStyle( elem ) { - var style = getStyleFn( elem ); - if ( !style ) { - logError( 'Style returned ' + style + - '. Are you running this code in a hidden iframe on Firefox? ' + - 'See http://bit.ly/getsizebug1' ); - } - return style; - }; - })(); - // -------------------------- box sizing -------------------------- // - boxSizingProp = getStyleProperty('boxSizing'); - /** * WebKit measures the outer-width on style.width on border-box elems - * IE & Firefox measures the inner-width + * IE & Firefox<29 measures the inner-width */ - if ( boxSizingProp ) { - var div = document.createElement('div'); - div.style.width = '200px'; - div.style.padding = '1px 2px 3px 4px'; - div.style.borderStyle = 'solid'; - div.style.borderWidth = '1px 2px 3px 4px'; - div.style[ boxSizingProp ] = 'border-box'; + var div = document.createElement('div'); + div.style.width = '200px'; + div.style.padding = '1px 2px 3px 4px'; + div.style.borderStyle = 'solid'; + div.style.borderWidth = '1px 2px 3px 4px'; + div.style.boxSizing = 'border-box'; - var body = document.body || document.documentElement; - body.appendChild( div ); - var style = getStyle( div ); + var body = document.body || document.documentElement; + body.appendChild( div ); + var style = getStyle( div ); - isBoxSizeOuter = getStyleSize( style.width ) === 200; - body.removeChild( div ); - } + getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200; + body.removeChild( div ); } @@ -136,19 +140,19 @@ function getSize( elem ) { setup(); // use querySeletor if elem is string - if ( typeof elem === 'string' ) { + if ( typeof elem == 'string' ) { elem = document.querySelector( elem ); } // do not proceed on non-objects - if ( !elem || typeof elem !== 'object' || !elem.nodeType ) { + if ( !elem || typeof elem != 'object' || !elem.nodeType ) { return; } var style = getStyle( elem ); // if hidden, everything is 0 - if ( style.display === 'none' ) { + if ( style.display == 'none' ) { return getZeroSize(); } @@ -156,14 +160,12 @@ function getSize( elem ) { size.width = elem.offsetWidth; size.height = elem.offsetHeight; - var isBorderBox = size.isBorderBox = !!( boxSizingProp && - style[ boxSizingProp ] && style[ boxSizingProp ] === 'border-box' ); + var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box'; // get all measurements - for ( var i=0, len = measurements.length; i < len; i++ ) { + for ( var i=0; i < measurementsLength; i++ ) { var measurement = measurements[i]; var value = style[ measurement ]; - value = mungeNonPixel( elem, value ); var num = parseFloat( value ); // any 'auto', 'medium' value will be 0 size[ measurement ] = !isNaN( num ) ? num : 0; @@ -202,49 +204,6 @@ function getSize( elem ) { return size; } -// IE8 returns percent values, not pixels -// taken from jQuery's curCSS -function mungeNonPixel( elem, value ) { - // IE8 and has percent value - if ( window.getComputedStyle || value.indexOf('%') === -1 ) { - return value; - } - var style = elem.style; - // Remember the original values - var left = style.left; - var rs = elem.runtimeStyle; - var rsLeft = rs && rs.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - rs.left = elem.currentStyle.left; - } - style.left = value; - value = style.pixelLeft; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - rs.left = rsLeft; - } - - return value; -} - return getSize; -} - -// transport -if ( typeof define === 'function' && define.amd ) { - // AMD for RequireJS - define( [ 'get-style-property/get-style-property' ], defineGetSize ); -} else if ( typeof exports === 'object' ) { - // CommonJS for Component - module.exports = defineGetSize( require('desandro-get-style-property') ); -} else { - // browser global - window.getSize = defineGetSize( window.getStyleProperty ); -} - -})( window ); +}); diff --git a/user/themes/ouidade/bower_components/get-size/index.html b/user/themes/ouidade/bower_components/get-size/index.html deleted file mode 100644 index 19811d0..0000000 --- a/user/themes/ouidade/bower_components/get-size/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - getSize - - - - - - -

getSize

- -
-
box1
-
- -
-
box2
-
- -
-
box3
-
- -
-
box4
-
- -
-
box5
-
- -
-
box6
-
- - - - - diff --git a/user/themes/ouidade/bower_components/get-style-property/.bower.json b/user/themes/ouidade/bower_components/get-style-property/.bower.json deleted file mode 100644 index 973f196..0000000 --- a/user/themes/ouidade/bower_components/get-style-property/.bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "get-style-property", - "main": "get-style-property.js", - "version": "1.0.4", - "homepage": "https://github.com/desandro/get-style-property", - "authors": [ - "David DeSandro " - ], - "description": "quick & dirty CSS property testing", - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "CSS", - "DOM" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "_release": "1.0.4", - "_resolution": { - "type": "version", - "tag": "v1.0.4", - "commit": "34fc5e4a0f252964ed2790138b8d7d30d04b55c1" - }, - "_source": "git://github.com/desandro/get-style-property.git", - "_target": "1.x", - "_originalSource": "get-style-property" -} \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/get-style-property/README.md b/user/themes/ouidade/bower_components/get-style-property/README.md deleted file mode 100644 index 74bf75f..0000000 --- a/user/themes/ouidade/bower_components/get-style-property/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# getStyleProperty - quick & dirty CSS property testing - -[Original by @kangax](https://github.com/kangax/cft/blob/gh-pages/getStyleProperty.js) :heart_eyes: :zap: :star2:. See [perfectionkills.com/feature-testing-css-properties/](http://perfectionkills.com/feature-testing-css-properties/) - -``` js -var transformProp = getStyleProperty('transform'); -// returns WebkitTransform on Chrome / Safari -// or transform on Firefox, or MozTransform on old firefox - -// then you can use it when setting CSS -element.style[ transformProp ] = 'translate( 12px, 34px )'; - -// or simply check if its supported -var supportsTranforms = !!transformProp; -``` - -## Install - -[Bower](http://bower.io) :bird:: `bower install get-style-property` - -npm: `npm install desandro-get-style-property` - -[Component](http://github.com/component/component): `component install desandro/get-style-property` - -## MIT License - -getStyleProperty is released under the [MIT License](http://desandro.mit-license.org/). diff --git a/user/themes/ouidade/bower_components/get-style-property/bower.json b/user/themes/ouidade/bower_components/get-style-property/bower.json deleted file mode 100644 index 9801272..0000000 --- a/user/themes/ouidade/bower_components/get-style-property/bower.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "get-style-property", - "main": "get-style-property.js", - "version": "1.0.4", - "homepage": "https://github.com/desandro/get-style-property", - "authors": [ - "David DeSandro " - ], - "description": "quick & dirty CSS property testing", - "moduleType": [ - "amd", - "globals", - "node" - ], - "keywords": [ - "CSS", - "DOM" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/user/themes/ouidade/bower_components/get-style-property/component.json b/user/themes/ouidade/bower_components/get-style-property/component.json deleted file mode 100644 index e4ca369..0000000 --- a/user/themes/ouidade/bower_components/get-style-property/component.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "get-style-property", - "repo": "desandro/get-style-property", - "description": "Quick and dirty CSS property testing", - "version": "1.0.4", - "scripts": ["get-style-property.js"], - "main": "get-style-property.js" -} diff --git a/user/themes/ouidade/bower_components/get-style-property/get-style-property.js b/user/themes/ouidade/bower_components/get-style-property/get-style-property.js deleted file mode 100644 index b48064a..0000000 --- a/user/themes/ouidade/bower_components/get-style-property/get-style-property.js +++ /dev/null @@ -1,55 +0,0 @@ -/*! - * getStyleProperty v1.0.4 - * original by kangax - * http://perfectionkills.com/feature-testing-css-properties/ - * MIT license - */ - -/*jshint browser: true, strict: true, undef: true */ -/*global define: false, exports: false, module: false */ - -( function( window ) { - -'use strict'; - -var prefixes = 'Webkit Moz ms Ms O'.split(' '); -var docElemStyle = document.documentElement.style; - -function getStyleProperty( propName ) { - if ( !propName ) { - return; - } - - // test standard property first - if ( typeof docElemStyle[ propName ] === 'string' ) { - return propName; - } - - // capitalize - propName = propName.charAt(0).toUpperCase() + propName.slice(1); - - // test vendor specific properties - var prefixed; - for ( var i=0, len = prefixes.length; i < len; i++ ) { - prefixed = prefixes[i] + propName; - if ( typeof docElemStyle[ prefixed ] === 'string' ) { - return prefixed; - } - } -} - -// transport -if ( typeof define === 'function' && define.amd ) { - // AMD - define( function() { - return getStyleProperty; - }); -} else if ( typeof exports === 'object' ) { - // CommonJS for Component - module.exports = getStyleProperty; -} else { - // browser global - window.getStyleProperty = getStyleProperty; -} - -})( window ); diff --git a/user/themes/ouidade/bower_components/get-style-property/package.json b/user/themes/ouidade/bower_components/get-style-property/package.json deleted file mode 100644 index c32819f..0000000 --- a/user/themes/ouidade/bower_components/get-style-property/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "desandro-get-style-property", - "version": "1.0.4", - "description": "Quick and dirty CSS property testing", - "main": "get-style-property.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/desandro/get-style-property.git" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/desandro/get-style-property/issues" - }, - "homepage": "https://github.com/desandro/get-style-property", - "keywords": [ - "CSS", - "DOM" - ], - "author": "David DeSandro" -} diff --git a/user/themes/ouidade/bower_components/imagesloaded/.bower.json b/user/themes/ouidade/bower_components/imagesloaded/.bower.json index 94d5c54..c0847cc 100644 --- a/user/themes/ouidade/bower_components/imagesloaded/.bower.json +++ b/user/themes/ouidade/bower_components/imagesloaded/.bower.json @@ -3,7 +3,7 @@ "description": "JavaScript is all like _You images done yet or what?_", "main": "imagesloaded.js", "dependencies": { - "ev-emitter": "~1.0.0" + "ev-emitter": "^1.0.0" }, "devDependencies": { "jquery": ">=1.9 <4.0", @@ -13,6 +13,7 @@ "**/.*", "test", "package.json", + "composer.json", "node_modules", "bower_components", "tests", @@ -32,15 +33,14 @@ "images" ], "license": "MIT", - "version": "4.1.0", - "_release": "4.1.0", + "version": "4.1.3", + "_release": "4.1.3", "_resolution": { "type": "version", - "tag": "v4.1.0", - "commit": "0938c71e226f81d33c2205e39694f4b988596f7f" + "tag": "v4.1.3", + "commit": "31b7f6bde34bb9714351f99c14d0839cd84221a4" }, - "_source": "git://github.com/desandro/imagesloaded.git", - "_target": "^4.1.0", - "_originalSource": "imagesloaded", - "_direct": true + "_source": "https://github.com/desandro/imagesloaded.git", + "_target": "*", + "_originalSource": "imagesloaded" } \ No newline at end of file diff --git a/user/themes/ouidade/bower_components/imagesloaded/README.md b/user/themes/ouidade/bower_components/imagesloaded/README.md index b4bf90e..67b799d 100644 --- a/user/themes/ouidade/bower_components/imagesloaded/README.md +++ b/user/themes/ouidade/bower_components/imagesloaded/README.md @@ -10,15 +10,15 @@ Detect when images have been loaded. ### Download -+ [imagesloaded.pkgd.min.js](http://imagesloaded.desandro.com/imagesloaded.pkgd.min.js) minified -+ [imagesloaded.pkgd.js](http://imagesloaded.desandro.com/imagesloaded.pkgd.js) un-minified ++ [imagesloaded.pkgd.min.js](https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.min.js) minified ++ [imagesloaded.pkgd.js](https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.js) un-minified ### CDN ``` html - + - + ``` ### Package managers @@ -219,7 +219,7 @@ _Image_ - The `img` element ### LoadingImage.isLoaded -_Boolean_ - `true` when the image has succesfully loaded +_Boolean_ - `true` when the image has successfully loaded ### imagesLoaded.images @@ -266,34 +266,17 @@ $('#container').imagesLoaded( function() {...}); ## Webpack -Install imagesLoaded and [imports-loader](https://github.com/webpack/imports-loader) with npm. +Install imagesLoaded with npm. ``` bash -npm install imagesloaded imports-loader +npm install imagesloaded ``` -In your config file, `webpack.config.js`, use the imports loader to disable `define` and set window for `imagesloaded`. - -``` js -module.exports = { - module: { - loaders: [ - { - test: /imagesloaded|ev\-emitter/, - loader: 'imports?define=>false&this=>window' - } - ] - } -}; -``` - -(This hack is required because of an issue with how Webpack loads dependencies. [+1 this issue on GitHub](https://github.com/webpack/webpack/issues/883) to help get this issue addressed.) - You can then `require('imagesloaded')`. ``` js // main.js -var imagesLoaded = require('imagesLoaded'); +var imagesLoaded = require('imagesloaded'); imagesLoaded( '#container', function() { // images have loaded @@ -304,8 +287,8 @@ Use `.makeJQueryPlugin` to make `.imagesLoaded()` jQuery plugin. ``` js // main.js -var imagesLoaded = require('imagesLoaded'); -var jQuery = require('jquery'); +var imagesLoaded = require('imagesloaded'); +var $ = require('jquery'); // provide jQuery argument imagesLoaded.makeJQueryPlugin( $ ); diff --git a/user/themes/ouidade/bower_components/imagesloaded/bower.json b/user/themes/ouidade/bower_components/imagesloaded/bower.json index 3b78c4c..ec04ab1 100644 --- a/user/themes/ouidade/bower_components/imagesloaded/bower.json +++ b/user/themes/ouidade/bower_components/imagesloaded/bower.json @@ -3,7 +3,7 @@ "description": "JavaScript is all like _You images done yet or what?_", "main": "imagesloaded.js", "dependencies": { - "ev-emitter": "~1.0.0" + "ev-emitter": "^1.0.0" }, "devDependencies": { "jquery": ">=1.9 <4.0", @@ -13,6 +13,7 @@ "**/.*", "test", "package.json", + "composer.json", "node_modules", "bower_components", "tests", diff --git a/user/themes/ouidade/bower_components/imagesloaded/gulpfile.js b/user/themes/ouidade/bower_components/imagesloaded/gulpfile.js index f3f8152..66f775f 100644 --- a/user/themes/ouidade/bower_components/imagesloaded/gulpfile.js +++ b/user/themes/ouidade/bower_components/imagesloaded/gulpfile.js @@ -43,47 +43,8 @@ gulp.task( 'hint', [ 'hint-js', 'hint-test', 'hint-task', 'jsonlint' ]); // https://www.npmjs.com/package/gulp-requirejs-optimize/ var gutil = require('gulp-util'); -var through = require('through2'); -var requirejs = require('requirejs'); var chalk = require('chalk'); - -function rjsOptimize( options ) { - options = options || {}; - - requirejs.define('node/print', [], function() { - return function(msg) { - if( msg.substring(0, 5) === 'Error' ) { - gutil.log( chalk.red( msg ) ); - } else { - gutil.log( msg ); - } - }; - }); - - var stream = through.obj(function (file, enc, cb) { - if ( file.isNull() ) { - return cb( null, file ); - } - - options.logLevel = 2; - - options.out = function( text ) { - var outFile = new gutil.File({ - path: file.relative, - contents: new Buffer( text ) - }); - cb( null, outFile ); - }; - - gutil.log('RequireJS optimizing'); - requirejs.optimize( options, null, function( err ) { - var gulpError = new gutil.PluginError( 'requirejsOptimize', err.message ); - stream.emit( 'error', gulpError ); - }); - }); - - return stream; -} +var rjsOptimize = require('gulp-requirejs-optimize'); // regex for banner comment var reBannerComment = new RegExp('^\\s*(?:\\/\\*[\\s\\S]*?\\*\\/)\\s*'); @@ -157,11 +118,6 @@ gulp.task( 'version', function() { gulp.src( [ 'bower.json', 'package.json' ] ) .pipe( replace( /"version": "\d+\.\d+\.\d+"/, '"version": "' + version + '"' ) ) .pipe( gulp.dest('.') ); - // replace CDN links in README - var minorVersion = version.match( /^\d+\.\d+/ )[0]; - gulp.src('README.md') - .pipe( replace( /imagesloaded@\d+\.\d+/g, 'imagesloaded@' + minorVersion )) - .pipe( gulp.dest('.') ); }); // ----- default ----- // diff --git a/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.js b/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.js index c507d24..fb47f76 100644 --- a/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.js +++ b/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.js @@ -1,5 +1,5 @@ /*! - * imagesLoaded v4.1.0 + * imagesLoaded v4.1.3 * JavaScript is all like "You images are done yet or what?" * MIT License */ @@ -30,7 +30,7 @@ ); } -})( window, +})( typeof window !== 'undefined' ? window : this, // -------------------------- factory -------------------------- // diff --git a/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.pkgd.js b/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.pkgd.js index ef23971..802330a 100644 --- a/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.pkgd.js +++ b/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.pkgd.js @@ -1,11 +1,11 @@ /*! - * imagesLoaded PACKAGED v4.1.0 + * imagesLoaded PACKAGED v4.1.3 * JavaScript is all like "You images are done yet or what?" * MIT License */ /** - * EvEmitter v1.0.1 + * EvEmitter v1.1.0 * Lil' event emitter * MIT License */ @@ -14,7 +14,7 @@ ( function( global, factory ) { // universal module definition - /* jshint strict: false */ /* globals define, module */ + /* jshint strict: false */ /* globals define, module, window */ if ( typeof define == 'function' && define.amd ) { // AMD - RequireJS define( 'ev-emitter/ev-emitter',factory ); @@ -26,7 +26,7 @@ global.EvEmitter = factory(); } -}( this, function() { +}( typeof window != 'undefined' ? window : this, function() { @@ -59,8 +59,8 @@ proto.once = function( eventName, listener ) { // set once flag // set onceEvents hash var onceEvents = this._onceEvents = this._onceEvents || {}; - // set onceListeners array - var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || []; + // set onceListeners object + var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {}; // set flag onceListeners[ listener ] = true; @@ -110,12 +110,18 @@ proto.emitEvent = function( eventName, args ) { return this; }; +proto.allOff = +proto.removeAllListeners = function() { + delete this._events; + delete this._onceEvents; +}; + return EvEmitter; })); /*! - * imagesLoaded v4.1.0 + * imagesLoaded v4.1.3 * JavaScript is all like "You images are done yet or what?" * MIT License */ @@ -146,7 +152,7 @@ return EvEmitter; ); } -})( window, +})( typeof window !== 'undefined' ? window : this, // -------------------------- factory -------------------------- // diff --git a/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.pkgd.min.js b/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.pkgd.min.js index c3e71fa..0854d63 100644 --- a/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.pkgd.min.js +++ b/user/themes/ouidade/bower_components/imagesloaded/imagesloaded.pkgd.min.js @@ -1,7 +1,7 @@ /*! - * imagesLoaded PACKAGED v4.1.0 + * imagesLoaded PACKAGED v4.1.3 * JavaScript is all like "You images are done yet or what?" * MIT License */ -!function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}(this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||[];return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var r=this._onceEvents&&this._onceEvents[t];o;){var s=r&&r[o];s&&(this.off(t,o),delete r[o]),o.apply(this,e),n+=s?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}(window,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){var e=[];if(Array.isArray(t))e=t;else if("number"==typeof t.length)for(var i=0;i + + +``` + +### Package managers + +npm: `npm install isotope-layout --save` + +Bower: `bower install isotope --save` + +## License + +### Commercial license + +If you want to use Isotope to develop commercial sites, themes, projects, and applications, the Commercial license is the appropriate license. With this option, your source code is kept proprietary. Purchase an Isotope Commercial License at [isotope.metafizzy.co](http://isotope.metafizzy.co/#commercial-license) + +### Open source license + +If you are creating an open source application under a license compatible with the [GNU GPL license v3](https://www.gnu.org/licenses/gpl-3.0.html), you may use Isotope under the terms of the GPLv3. + +[Read more about Isotope's license](http://isotope.metafizzy.co/license.html). + +## Initialize + +With jQuery + +``` js +$('.grid').isotope({ + // options... + itemSelector: '.grid-item', + masonry: { + columnWidth: 200 + } +}); +``` + +With vanilla JavaScript + +``` js +// vanilla JS +var grid = document.querySelector('.grid'); +var iso = new Isotope( grid, { + // options... + itemSelector: '.grid-item', + masonry: { + columnWidth: 200 + } +}); +``` + +With HTML + +Add a `data-isotope` attribute to your element. Options can be set in JSON in the value. + +``` html +
+
+
+ ... +
+``` + +* * * + +By [Metafizzy](http://metafizzy.co), 2010–2017 diff --git a/user/themes/ouidade/bower_components/isotope/bower.json b/user/themes/ouidade/bower_components/isotope/bower.json new file mode 100644 index 0000000..5bbaa92 --- /dev/null +++ b/user/themes/ouidade/bower_components/isotope/bower.json @@ -0,0 +1,44 @@ +{ + "name": "isotope", + "description": "Filter and sort magical layouts", + "main": "js/isotope.js", + "dependencies": { + "desandro-matches-selector": "^2.0.0", + "fizzy-ui-utils": "^2.0.4", + "get-size": "^2.0.0", + "masonry": "^4.1.0", + "outlayer": "^2.1.0" + }, + "devDependencies": { + "jquery": "2 < 4", + "jquery-bridget": "^2", + "qunit": "^1.15" + }, + "ignore": [ + "test/", + "sandbox/", + "**/.*", + "package.json", + "notes.md", + "node_modules", + "bower_components", + "test", + "tests" + ], + "homepage": "http://isotope.metafizzy.co", + "authors": [ + "David DeSandro" + ], + "moduleType": [ + "amd", + "globals", + "node" + ], + "keywords": [ + "filter", + "sort", + "masonry", + "jquery-plugin" + ], + "license": "GPL-3.0" +} diff --git a/user/themes/ouidade/bower_components/isotope/dist/isotope.pkgd.js b/user/themes/ouidade/bower_components/isotope/dist/isotope.pkgd.js new file mode 100644 index 0000000..54ad1c7 --- /dev/null +++ b/user/themes/ouidade/bower_components/isotope/dist/isotope.pkgd.js @@ -0,0 +1,3558 @@ +/*! + * Isotope PACKAGED v3.0.4 + * + * Licensed GPLv3 for open source use + * or Isotope Commercial License for commercial use + * + * http://isotope.metafizzy.co + * Copyright 2017 Metafizzy + */ + +/** + * Bridget makes jQuery widgets + * v2.0.1 + * MIT license + */ + +/* jshint browser: true, strict: true, undef: true, unused: true */ + +( function( window, factory ) { + // universal module definition + /*jshint strict: false */ /* globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) { + return factory( window, jQuery ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('jquery') + ); + } else { + // browser global + window.jQueryBridget = factory( + window, + window.jQuery + ); + } + +}( window, function factory( window, jQuery ) { +'use strict'; + +// ----- utils ----- // + +var arraySlice = Array.prototype.slice; + +// helper function for logging errors +// $.error breaks jQuery chaining +var console = window.console; +var logError = typeof console == 'undefined' ? function() {} : + function( message ) { + console.error( message ); + }; + +// ----- jQueryBridget ----- // + +function jQueryBridget( namespace, PluginClass, $ ) { + $ = $ || jQuery || window.jQuery; + if ( !$ ) { + return; + } + + // add option method -> $().plugin('option', {...}) + if ( !PluginClass.prototype.option ) { + // option setter + PluginClass.prototype.option = function( opts ) { + // bail out if not an object + if ( !$.isPlainObject( opts ) ){ + return; + } + this.options = $.extend( true, this.options, opts ); + }; + } + + // make jQuery plugin + $.fn[ namespace ] = function( arg0 /*, arg1 */ ) { + if ( typeof arg0 == 'string' ) { + // method call $().plugin( 'methodName', { options } ) + // shift arguments by 1 + var args = arraySlice.call( arguments, 1 ); + return methodCall( this, arg0, args ); + } + // just $().plugin({ options }) + plainCall( this, arg0 ); + return this; + }; + + // $().plugin('methodName') + function methodCall( $elems, methodName, args ) { + var returnValue; + var pluginMethodStr = '$().' + namespace + '("' + methodName + '")'; + + $elems.each( function( i, elem ) { + // get instance + var instance = $.data( elem, namespace ); + if ( !instance ) { + logError( namespace + ' not initialized. Cannot call methods, i.e. ' + + pluginMethodStr ); + return; + } + + var method = instance[ methodName ]; + if ( !method || methodName.charAt(0) == '_' ) { + logError( pluginMethodStr + ' is not a valid method' ); + return; + } + + // apply method, get return value + var value = method.apply( instance, args ); + // set return value if value is returned, use only first value + returnValue = returnValue === undefined ? value : returnValue; + }); + + return returnValue !== undefined ? returnValue : $elems; + } + + function plainCall( $elems, options ) { + $elems.each( function( i, elem ) { + var instance = $.data( elem, namespace ); + if ( instance ) { + // set options & init + instance.option( options ); + instance._init(); + } else { + // initialize new instance + instance = new PluginClass( elem, options ); + $.data( elem, namespace, instance ); + } + }); + } + + updateJQuery( $ ); + +} + +// ----- updateJQuery ----- // + +// set $.bridget for v1 backwards compatibility +function updateJQuery( $ ) { + if ( !$ || ( $ && $.bridget ) ) { + return; + } + $.bridget = jQueryBridget; +} + +updateJQuery( jQuery || window.jQuery ); + +// ----- ----- // + +return jQueryBridget; + +})); + +/** + * EvEmitter v1.0.3 + * Lil' event emitter + * MIT License + */ + +/* jshint unused: true, undef: true, strict: true */ + +( function( global, factory ) { + // universal module definition + /* jshint strict: false */ /* globals define, module, window */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'ev-emitter/ev-emitter',factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory(); + } else { + // Browser globals + global.EvEmitter = factory(); + } + +}( typeof window != 'undefined' ? window : this, function() { + + + +function EvEmitter() {} + +var proto = EvEmitter.prototype; + +proto.on = function( eventName, listener ) { + if ( !eventName || !listener ) { + return; + } + // set events hash + var events = this._events = this._events || {}; + // set listeners array + var listeners = events[ eventName ] = events[ eventName ] || []; + // only add once + if ( listeners.indexOf( listener ) == -1 ) { + listeners.push( listener ); + } + + return this; +}; + +proto.once = function( eventName, listener ) { + if ( !eventName || !listener ) { + return; + } + // add event + this.on( eventName, listener ); + // set once flag + // set onceEvents hash + var onceEvents = this._onceEvents = this._onceEvents || {}; + // set onceListeners object + var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {}; + // set flag + onceListeners[ listener ] = true; + + return this; +}; + +proto.off = function( eventName, listener ) { + var listeners = this._events && this._events[ eventName ]; + if ( !listeners || !listeners.length ) { + return; + } + var index = listeners.indexOf( listener ); + if ( index != -1 ) { + listeners.splice( index, 1 ); + } + + return this; +}; + +proto.emitEvent = function( eventName, args ) { + var listeners = this._events && this._events[ eventName ]; + if ( !listeners || !listeners.length ) { + return; + } + var i = 0; + var listener = listeners[i]; + args = args || []; + // once stuff + var onceListeners = this._onceEvents && this._onceEvents[ eventName ]; + + while ( listener ) { + var isOnce = onceListeners && onceListeners[ listener ]; + if ( isOnce ) { + // remove listener + // remove before trigger to prevent recursion + this.off( eventName, listener ); + // unset once flag + delete onceListeners[ listener ]; + } + // trigger listener + listener.apply( this, args ); + // get next listener + i += isOnce ? 0 : 1; + listener = listeners[i]; + } + + return this; +}; + +return EvEmitter; + +})); + +/*! + * getSize v2.0.2 + * measure size of elements + * MIT license + */ + +/*jshint browser: true, strict: true, undef: true, unused: true */ +/*global define: false, module: false, console: false */ + +( function( window, factory ) { + 'use strict'; + + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'get-size/get-size',[],function() { + return factory(); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.getSize = factory(); + } + +})( window, function factory() { +'use strict'; + +// -------------------------- helpers -------------------------- // + +// get a number from a string, not a percentage +function getStyleSize( value ) { + var num = parseFloat( value ); + // not a percent like '100%', and a number + var isValid = value.indexOf('%') == -1 && !isNaN( num ); + return isValid && num; +} + +function noop() {} + +var logError = typeof console == 'undefined' ? noop : + function( message ) { + console.error( message ); + }; + +// -------------------------- measurements -------------------------- // + +var measurements = [ + 'paddingLeft', + 'paddingRight', + 'paddingTop', + 'paddingBottom', + 'marginLeft', + 'marginRight', + 'marginTop', + 'marginBottom', + 'borderLeftWidth', + 'borderRightWidth', + 'borderTopWidth', + 'borderBottomWidth' +]; + +var measurementsLength = measurements.length; + +function getZeroSize() { + var size = { + width: 0, + height: 0, + innerWidth: 0, + innerHeight: 0, + outerWidth: 0, + outerHeight: 0 + }; + for ( var i=0; i < measurementsLength; i++ ) { + var measurement = measurements[i]; + size[ measurement ] = 0; + } + return size; +} + +// -------------------------- getStyle -------------------------- // + +/** + * getStyle, get style of element, check for Firefox bug + * https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + */ +function getStyle( elem ) { + var style = getComputedStyle( elem ); + if ( !style ) { + logError( 'Style returned ' + style + + '. Are you running this code in a hidden iframe on Firefox? ' + + 'See http://bit.ly/getsizebug1' ); + } + return style; +} + +// -------------------------- setup -------------------------- // + +var isSetup = false; + +var isBoxSizeOuter; + +/** + * setup + * check isBoxSizerOuter + * do on first getSize() rather than on page load for Firefox bug + */ +function setup() { + // setup once + if ( isSetup ) { + return; + } + isSetup = true; + + // -------------------------- box sizing -------------------------- // + + /** + * WebKit measures the outer-width on style.width on border-box elems + * IE & Firefox<29 measures the inner-width + */ + var div = document.createElement('div'); + div.style.width = '200px'; + div.style.padding = '1px 2px 3px 4px'; + div.style.borderStyle = 'solid'; + div.style.borderWidth = '1px 2px 3px 4px'; + div.style.boxSizing = 'border-box'; + + var body = document.body || document.documentElement; + body.appendChild( div ); + var style = getStyle( div ); + + getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200; + body.removeChild( div ); + +} + +// -------------------------- getSize -------------------------- // + +function getSize( elem ) { + setup(); + + // use querySeletor if elem is string + if ( typeof elem == 'string' ) { + elem = document.querySelector( elem ); + } + + // do not proceed on non-objects + if ( !elem || typeof elem != 'object' || !elem.nodeType ) { + return; + } + + var style = getStyle( elem ); + + // if hidden, everything is 0 + if ( style.display == 'none' ) { + return getZeroSize(); + } + + var size = {}; + size.width = elem.offsetWidth; + size.height = elem.offsetHeight; + + var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box'; + + // get all measurements + for ( var i=0; i < measurementsLength; i++ ) { + var measurement = measurements[i]; + var value = style[ measurement ]; + var num = parseFloat( value ); + // any 'auto', 'medium' value will be 0 + size[ measurement ] = !isNaN( num ) ? num : 0; + } + + var paddingWidth = size.paddingLeft + size.paddingRight; + var paddingHeight = size.paddingTop + size.paddingBottom; + var marginWidth = size.marginLeft + size.marginRight; + var marginHeight = size.marginTop + size.marginBottom; + var borderWidth = size.borderLeftWidth + size.borderRightWidth; + var borderHeight = size.borderTopWidth + size.borderBottomWidth; + + var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter; + + // overwrite width and height if we can get it from style + var styleWidth = getStyleSize( style.width ); + if ( styleWidth !== false ) { + size.width = styleWidth + + // add padding and border unless it's already including it + ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth ); + } + + var styleHeight = getStyleSize( style.height ); + if ( styleHeight !== false ) { + size.height = styleHeight + + // add padding and border unless it's already including it + ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight ); + } + + size.innerWidth = size.width - ( paddingWidth + borderWidth ); + size.innerHeight = size.height - ( paddingHeight + borderHeight ); + + size.outerWidth = size.width + marginWidth; + size.outerHeight = size.height + marginHeight; + + return size; +} + +return getSize; + +}); + +/** + * matchesSelector v2.0.2 + * matchesSelector( element, '.selector' ) + * MIT license + */ + +/*jshint browser: true, strict: true, undef: true, unused: true */ + +( function( window, factory ) { + /*global define: false, module: false */ + 'use strict'; + // universal module definition + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'desandro-matches-selector/matches-selector',factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.matchesSelector = factory(); + } + +}( window, function factory() { + 'use strict'; + + var matchesMethod = ( function() { + var ElemProto = window.Element.prototype; + // check for the standard method name first + if ( ElemProto.matches ) { + return 'matches'; + } + // check un-prefixed + if ( ElemProto.matchesSelector ) { + return 'matchesSelector'; + } + // check vendor prefixes + var prefixes = [ 'webkit', 'moz', 'ms', 'o' ]; + + for ( var i=0; i < prefixes.length; i++ ) { + var prefix = prefixes[i]; + var method = prefix + 'MatchesSelector'; + if ( ElemProto[ method ] ) { + return method; + } + } + })(); + + return function matchesSelector( elem, selector ) { + return elem[ matchesMethod ]( selector ); + }; + +})); + +/** + * Fizzy UI utils v2.0.5 + * MIT license + */ + +/*jshint browser: true, undef: true, unused: true, strict: true */ + +( function( window, factory ) { + // universal module definition + /*jshint strict: false */ /*globals define, module, require */ + + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'fizzy-ui-utils/utils',[ + 'desandro-matches-selector/matches-selector' + ], function( matchesSelector ) { + return factory( window, matchesSelector ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('desandro-matches-selector') + ); + } else { + // browser global + window.fizzyUIUtils = factory( + window, + window.matchesSelector + ); + } + +}( window, function factory( window, matchesSelector ) { + + + +var utils = {}; + +// ----- extend ----- // + +// extends objects +utils.extend = function( a, b ) { + for ( var prop in b ) { + a[ prop ] = b[ prop ]; + } + return a; +}; + +// ----- modulo ----- // + +utils.modulo = function( num, div ) { + return ( ( num % div ) + div ) % div; +}; + +// ----- makeArray ----- // + +// turn element or nodeList into an array +utils.makeArray = function( obj ) { + var ary = []; + if ( Array.isArray( obj ) ) { + // use object if already an array + ary = obj; + } else if ( obj && typeof obj == 'object' && + typeof obj.length == 'number' ) { + // convert nodeList to array + for ( var i=0; i < obj.length; i++ ) { + ary.push( obj[i] ); + } + } else { + // array of single index + ary.push( obj ); + } + return ary; +}; + +// ----- removeFrom ----- // + +utils.removeFrom = function( ary, obj ) { + var index = ary.indexOf( obj ); + if ( index != -1 ) { + ary.splice( index, 1 ); + } +}; + +// ----- getParent ----- // + +utils.getParent = function( elem, selector ) { + while ( elem.parentNode && elem != document.body ) { + elem = elem.parentNode; + if ( matchesSelector( elem, selector ) ) { + return elem; + } + } +}; + +// ----- getQueryElement ----- // + +// use element as selector string +utils.getQueryElement = function( elem ) { + if ( typeof elem == 'string' ) { + return document.querySelector( elem ); + } + return elem; +}; + +// ----- handleEvent ----- // + +// enable .ontype to trigger from .addEventListener( elem, 'type' ) +utils.handleEvent = function( event ) { + var method = 'on' + event.type; + if ( this[ method ] ) { + this[ method ]( event ); + } +}; + +// ----- filterFindElements ----- // + +utils.filterFindElements = function( elems, selector ) { + // make array of elems + elems = utils.makeArray( elems ); + var ffElems = []; + + elems.forEach( function( elem ) { + // check that elem is an actual element + if ( !( elem instanceof HTMLElement ) ) { + return; + } + // add elem if no selector + if ( !selector ) { + ffElems.push( elem ); + return; + } + // filter & find items if we have a selector + // filter + if ( matchesSelector( elem, selector ) ) { + ffElems.push( elem ); + } + // find children + var childElems = elem.querySelectorAll( selector ); + // concat childElems to filterFound array + for ( var i=0; i < childElems.length; i++ ) { + ffElems.push( childElems[i] ); + } + }); + + return ffElems; +}; + +// ----- debounceMethod ----- // + +utils.debounceMethod = function( _class, methodName, threshold ) { + // original method + var method = _class.prototype[ methodName ]; + var timeoutName = methodName + 'Timeout'; + + _class.prototype[ methodName ] = function() { + var timeout = this[ timeoutName ]; + if ( timeout ) { + clearTimeout( timeout ); + } + var args = arguments; + + var _this = this; + this[ timeoutName ] = setTimeout( function() { + method.apply( _this, args ); + delete _this[ timeoutName ]; + }, threshold || 100 ); + }; +}; + +// ----- docReady ----- // + +utils.docReady = function( callback ) { + var readyState = document.readyState; + if ( readyState == 'complete' || readyState == 'interactive' ) { + // do async to allow for other scripts to run. metafizzy/flickity#441 + setTimeout( callback ); + } else { + document.addEventListener( 'DOMContentLoaded', callback ); + } +}; + +// ----- htmlInit ----- // + +// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/ +utils.toDashed = function( str ) { + return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) { + return $1 + '-' + $2; + }).toLowerCase(); +}; + +var console = window.console; +/** + * allow user to initialize classes via [data-namespace] or .js-namespace class + * htmlInit( Widget, 'widgetName' ) + * options are parsed from data-namespace-options + */ +utils.htmlInit = function( WidgetClass, namespace ) { + utils.docReady( function() { + var dashedNamespace = utils.toDashed( namespace ); + var dataAttr = 'data-' + dashedNamespace; + var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' ); + var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace ); + var elems = utils.makeArray( dataAttrElems ) + .concat( utils.makeArray( jsDashElems ) ); + var dataOptionsAttr = dataAttr + '-options'; + var jQuery = window.jQuery; + + elems.forEach( function( elem ) { + var attr = elem.getAttribute( dataAttr ) || + elem.getAttribute( dataOptionsAttr ); + var options; + try { + options = attr && JSON.parse( attr ); + } catch ( error ) { + // log error, do not initialize + if ( console ) { + console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className + + ': ' + error ); + } + return; + } + // initialize + var instance = new WidgetClass( elem, options ); + // make available via $().data('namespace') + if ( jQuery ) { + jQuery.data( elem, namespace, instance ); + } + }); + + }); +}; + +// ----- ----- // + +return utils; + +})); + +/** + * Outlayer Item + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /* globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'outlayer/item',[ + 'ev-emitter/ev-emitter', + 'get-size/get-size' + ], + factory + ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory( + require('ev-emitter'), + require('get-size') + ); + } else { + // browser global + window.Outlayer = {}; + window.Outlayer.Item = factory( + window.EvEmitter, + window.getSize + ); + } + +}( window, function factory( EvEmitter, getSize ) { +'use strict'; + +// ----- helpers ----- // + +function isEmptyObj( obj ) { + for ( var prop in obj ) { + return false; + } + prop = null; + return true; +} + +// -------------------------- CSS3 support -------------------------- // + + +var docElemStyle = document.documentElement.style; + +var transitionProperty = typeof docElemStyle.transition == 'string' ? + 'transition' : 'WebkitTransition'; +var transformProperty = typeof docElemStyle.transform == 'string' ? + 'transform' : 'WebkitTransform'; + +var transitionEndEvent = { + WebkitTransition: 'webkitTransitionEnd', + transition: 'transitionend' +}[ transitionProperty ]; + +// cache all vendor properties that could have vendor prefix +var vendorProperties = { + transform: transformProperty, + transition: transitionProperty, + transitionDuration: transitionProperty + 'Duration', + transitionProperty: transitionProperty + 'Property', + transitionDelay: transitionProperty + 'Delay' +}; + +// -------------------------- Item -------------------------- // + +function Item( element, layout ) { + if ( !element ) { + return; + } + + this.element = element; + // parent layout class, i.e. Masonry, Isotope, or Packery + this.layout = layout; + this.position = { + x: 0, + y: 0 + }; + + this._create(); +} + +// inherit EvEmitter +var proto = Item.prototype = Object.create( EvEmitter.prototype ); +proto.constructor = Item; + +proto._create = function() { + // transition objects + this._transn = { + ingProperties: {}, + clean: {}, + onEnd: {} + }; + + this.css({ + position: 'absolute' + }); +}; + +// trigger specified handler for event type +proto.handleEvent = function( event ) { + var method = 'on' + event.type; + if ( this[ method ] ) { + this[ method ]( event ); + } +}; + +proto.getSize = function() { + this.size = getSize( this.element ); +}; + +/** + * apply CSS styles to element + * @param {Object} style + */ +proto.css = function( style ) { + var elemStyle = this.element.style; + + for ( var prop in style ) { + // use vendor property if available + var supportedProp = vendorProperties[ prop ] || prop; + elemStyle[ supportedProp ] = style[ prop ]; + } +}; + + // measure position, and sets it +proto.getPosition = function() { + var style = getComputedStyle( this.element ); + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + var xValue = style[ isOriginLeft ? 'left' : 'right' ]; + var yValue = style[ isOriginTop ? 'top' : 'bottom' ]; + // convert percent to pixels + var layoutSize = this.layout.size; + var x = xValue.indexOf('%') != -1 ? + ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 ); + var y = yValue.indexOf('%') != -1 ? + ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 ); + + // clean up 'auto' or other non-integer values + x = isNaN( x ) ? 0 : x; + y = isNaN( y ) ? 0 : y; + // remove padding from measurement + x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight; + y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom; + + this.position.x = x; + this.position.y = y; +}; + +// set settled position, apply padding +proto.layoutPosition = function() { + var layoutSize = this.layout.size; + var style = {}; + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + + // x + var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight'; + var xProperty = isOriginLeft ? 'left' : 'right'; + var xResetProperty = isOriginLeft ? 'right' : 'left'; + + var x = this.position.x + layoutSize[ xPadding ]; + // set in percentage or pixels + style[ xProperty ] = this.getXValue( x ); + // reset other property + style[ xResetProperty ] = ''; + + // y + var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom'; + var yProperty = isOriginTop ? 'top' : 'bottom'; + var yResetProperty = isOriginTop ? 'bottom' : 'top'; + + var y = this.position.y + layoutSize[ yPadding ]; + // set in percentage or pixels + style[ yProperty ] = this.getYValue( y ); + // reset other property + style[ yResetProperty ] = ''; + + this.css( style ); + this.emitEvent( 'layout', [ this ] ); +}; + +proto.getXValue = function( x ) { + var isHorizontal = this.layout._getOption('horizontal'); + return this.layout.options.percentPosition && !isHorizontal ? + ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px'; +}; + +proto.getYValue = function( y ) { + var isHorizontal = this.layout._getOption('horizontal'); + return this.layout.options.percentPosition && isHorizontal ? + ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px'; +}; + +proto._transitionTo = function( x, y ) { + this.getPosition(); + // get current x & y from top/left + var curX = this.position.x; + var curY = this.position.y; + + var compareX = parseInt( x, 10 ); + var compareY = parseInt( y, 10 ); + var didNotMove = compareX === this.position.x && compareY === this.position.y; + + // save end position + this.setPosition( x, y ); + + // if did not move and not transitioning, just go to layout + if ( didNotMove && !this.isTransitioning ) { + this.layoutPosition(); + return; + } + + var transX = x - curX; + var transY = y - curY; + var transitionStyle = {}; + transitionStyle.transform = this.getTranslate( transX, transY ); + + this.transition({ + to: transitionStyle, + onTransitionEnd: { + transform: this.layoutPosition + }, + isCleaning: true + }); +}; + +proto.getTranslate = function( x, y ) { + // flip cooridinates if origin on right or bottom + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + x = isOriginLeft ? x : -x; + y = isOriginTop ? y : -y; + return 'translate3d(' + x + 'px, ' + y + 'px, 0)'; +}; + +// non transition + transform support +proto.goTo = function( x, y ) { + this.setPosition( x, y ); + this.layoutPosition(); +}; + +proto.moveTo = proto._transitionTo; + +proto.setPosition = function( x, y ) { + this.position.x = parseInt( x, 10 ); + this.position.y = parseInt( y, 10 ); +}; + +// ----- transition ----- // + +/** + * @param {Object} style - CSS + * @param {Function} onTransitionEnd + */ + +// non transition, just trigger callback +proto._nonTransition = function( args ) { + this.css( args.to ); + if ( args.isCleaning ) { + this._removeStyles( args.to ); + } + for ( var prop in args.onTransitionEnd ) { + args.onTransitionEnd[ prop ].call( this ); + } +}; + +/** + * proper transition + * @param {Object} args - arguments + * @param {Object} to - style to transition to + * @param {Object} from - style to start transition from + * @param {Boolean} isCleaning - removes transition styles after transition + * @param {Function} onTransitionEnd - callback + */ +proto.transition = function( args ) { + // redirect to nonTransition if no transition duration + if ( !parseFloat( this.layout.options.transitionDuration ) ) { + this._nonTransition( args ); + return; + } + + var _transition = this._transn; + // keep track of onTransitionEnd callback by css property + for ( var prop in args.onTransitionEnd ) { + _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ]; + } + // keep track of properties that are transitioning + for ( prop in args.to ) { + _transition.ingProperties[ prop ] = true; + // keep track of properties to clean up when transition is done + if ( args.isCleaning ) { + _transition.clean[ prop ] = true; + } + } + + // set from styles + if ( args.from ) { + this.css( args.from ); + // force redraw. http://blog.alexmaccaw.com/css-transitions + var h = this.element.offsetHeight; + // hack for JSHint to hush about unused var + h = null; + } + // enable transition + this.enableTransition( args.to ); + // set styles that are transitioning + this.css( args.to ); + + this.isTransitioning = true; + +}; + +// dash before all cap letters, including first for +// WebkitTransform => -webkit-transform +function toDashedAll( str ) { + return str.replace( /([A-Z])/g, function( $1 ) { + return '-' + $1.toLowerCase(); + }); +} + +var transitionProps = 'opacity,' + toDashedAll( transformProperty ); + +proto.enableTransition = function(/* style */) { + // HACK changing transitionProperty during a transition + // will cause transition to jump + if ( this.isTransitioning ) { + return; + } + + // make `transition: foo, bar, baz` from style object + // HACK un-comment this when enableTransition can work + // while a transition is happening + // var transitionValues = []; + // for ( var prop in style ) { + // // dash-ify camelCased properties like WebkitTransition + // prop = vendorProperties[ prop ] || prop; + // transitionValues.push( toDashedAll( prop ) ); + // } + // munge number to millisecond, to match stagger + var duration = this.layout.options.transitionDuration; + duration = typeof duration == 'number' ? duration + 'ms' : duration; + // enable transition styles + this.css({ + transitionProperty: transitionProps, + transitionDuration: duration, + transitionDelay: this.staggerDelay || 0 + }); + // listen for transition end event + this.element.addEventListener( transitionEndEvent, this, false ); +}; + +// ----- events ----- // + +proto.onwebkitTransitionEnd = function( event ) { + this.ontransitionend( event ); +}; + +proto.onotransitionend = function( event ) { + this.ontransitionend( event ); +}; + +// properties that I munge to make my life easier +var dashedVendorProperties = { + '-webkit-transform': 'transform' +}; + +proto.ontransitionend = function( event ) { + // disregard bubbled events from children + if ( event.target !== this.element ) { + return; + } + var _transition = this._transn; + // get property name of transitioned property, convert to prefix-free + var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName; + + // remove property that has completed transitioning + delete _transition.ingProperties[ propertyName ]; + // check if any properties are still transitioning + if ( isEmptyObj( _transition.ingProperties ) ) { + // all properties have completed transitioning + this.disableTransition(); + } + // clean style + if ( propertyName in _transition.clean ) { + // clean up style + this.element.style[ event.propertyName ] = ''; + delete _transition.clean[ propertyName ]; + } + // trigger onTransitionEnd callback + if ( propertyName in _transition.onEnd ) { + var onTransitionEnd = _transition.onEnd[ propertyName ]; + onTransitionEnd.call( this ); + delete _transition.onEnd[ propertyName ]; + } + + this.emitEvent( 'transitionEnd', [ this ] ); +}; + +proto.disableTransition = function() { + this.removeTransitionStyles(); + this.element.removeEventListener( transitionEndEvent, this, false ); + this.isTransitioning = false; +}; + +/** + * removes style property from element + * @param {Object} style +**/ +proto._removeStyles = function( style ) { + // clean up transition styles + var cleanStyle = {}; + for ( var prop in style ) { + cleanStyle[ prop ] = ''; + } + this.css( cleanStyle ); +}; + +var cleanTransitionStyle = { + transitionProperty: '', + transitionDuration: '', + transitionDelay: '' +}; + +proto.removeTransitionStyles = function() { + // remove transition + this.css( cleanTransitionStyle ); +}; + +// ----- stagger ----- // + +proto.stagger = function( delay ) { + delay = isNaN( delay ) ? 0 : delay; + this.staggerDelay = delay + 'ms'; +}; + +// ----- show/hide/remove ----- // + +// remove element from DOM +proto.removeElem = function() { + this.element.parentNode.removeChild( this.element ); + // remove display: none + this.css({ display: '' }); + this.emitEvent( 'remove', [ this ] ); +}; + +proto.remove = function() { + // just remove element if no transition support or no transition + if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) { + this.removeElem(); + return; + } + + // start transition + this.once( 'transitionEnd', function() { + this.removeElem(); + }); + this.hide(); +}; + +proto.reveal = function() { + delete this.isHidden; + // remove display: none + this.css({ display: '' }); + + var options = this.layout.options; + + var onTransitionEnd = {}; + var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle'); + onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd; + + this.transition({ + from: options.hiddenStyle, + to: options.visibleStyle, + isCleaning: true, + onTransitionEnd: onTransitionEnd + }); +}; + +proto.onRevealTransitionEnd = function() { + // check if still visible + // during transition, item may have been hidden + if ( !this.isHidden ) { + this.emitEvent('reveal'); + } +}; + +/** + * get style property use for hide/reveal transition end + * @param {String} styleProperty - hiddenStyle/visibleStyle + * @returns {String} + */ +proto.getHideRevealTransitionEndProperty = function( styleProperty ) { + var optionStyle = this.layout.options[ styleProperty ]; + // use opacity + if ( optionStyle.opacity ) { + return 'opacity'; + } + // get first property + for ( var prop in optionStyle ) { + return prop; + } +}; + +proto.hide = function() { + // set flag + this.isHidden = true; + // remove display: none + this.css({ display: '' }); + + var options = this.layout.options; + + var onTransitionEnd = {}; + var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle'); + onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd; + + this.transition({ + from: options.visibleStyle, + to: options.hiddenStyle, + // keep hidden stuff hidden + isCleaning: true, + onTransitionEnd: onTransitionEnd + }); +}; + +proto.onHideTransitionEnd = function() { + // check if still hidden + // during transition, item may have been un-hidden + if ( this.isHidden ) { + this.css({ display: 'none' }); + this.emitEvent('hide'); + } +}; + +proto.destroy = function() { + this.css({ + position: '', + left: '', + right: '', + top: '', + bottom: '', + transition: '', + transform: '' + }); +}; + +return Item; + +})); + +/*! + * Outlayer v2.1.0 + * the brains and guts of a layout library + * MIT license + */ + +( function( window, factory ) { + 'use strict'; + // universal module definition + /* jshint strict: false */ /* globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'outlayer/outlayer',[ + 'ev-emitter/ev-emitter', + 'get-size/get-size', + 'fizzy-ui-utils/utils', + './item' + ], + function( EvEmitter, getSize, utils, Item ) { + return factory( window, EvEmitter, getSize, utils, Item); + } + ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory( + window, + require('ev-emitter'), + require('get-size'), + require('fizzy-ui-utils'), + require('./item') + ); + } else { + // browser global + window.Outlayer = factory( + window, + window.EvEmitter, + window.getSize, + window.fizzyUIUtils, + window.Outlayer.Item + ); + } + +}( window, function factory( window, EvEmitter, getSize, utils, Item ) { +'use strict'; + +// ----- vars ----- // + +var console = window.console; +var jQuery = window.jQuery; +var noop = function() {}; + +// -------------------------- Outlayer -------------------------- // + +// globally unique identifiers +var GUID = 0; +// internal store of all Outlayer intances +var instances = {}; + + +/** + * @param {Element, String} element + * @param {Object} options + * @constructor + */ +function Outlayer( element, options ) { + var queryElement = utils.getQueryElement( element ); + if ( !queryElement ) { + if ( console ) { + console.error( 'Bad element for ' + this.constructor.namespace + + ': ' + ( queryElement || element ) ); + } + return; + } + this.element = queryElement; + // add jQuery + if ( jQuery ) { + this.$element = jQuery( this.element ); + } + + // options + this.options = utils.extend( {}, this.constructor.defaults ); + this.option( options ); + + // add id for Outlayer.getFromElement + var id = ++GUID; + this.element.outlayerGUID = id; // expando + instances[ id ] = this; // associate via id + + // kick it off + this._create(); + + var isInitLayout = this._getOption('initLayout'); + if ( isInitLayout ) { + this.layout(); + } +} + +// settings are for internal use only +Outlayer.namespace = 'outlayer'; +Outlayer.Item = Item; + +// default options +Outlayer.defaults = { + containerStyle: { + position: 'relative' + }, + initLayout: true, + originLeft: true, + originTop: true, + resize: true, + resizeContainer: true, + // item options + transitionDuration: '0.4s', + hiddenStyle: { + opacity: 0, + transform: 'scale(0.001)' + }, + visibleStyle: { + opacity: 1, + transform: 'scale(1)' + } +}; + +var proto = Outlayer.prototype; +// inherit EvEmitter +utils.extend( proto, EvEmitter.prototype ); + +/** + * set options + * @param {Object} opts + */ +proto.option = function( opts ) { + utils.extend( this.options, opts ); +}; + +/** + * get backwards compatible option value, check old name + */ +proto._getOption = function( option ) { + var oldOption = this.constructor.compatOptions[ option ]; + return oldOption && this.options[ oldOption ] !== undefined ? + this.options[ oldOption ] : this.options[ option ]; +}; + +Outlayer.compatOptions = { + // currentName: oldName + initLayout: 'isInitLayout', + horizontal: 'isHorizontal', + layoutInstant: 'isLayoutInstant', + originLeft: 'isOriginLeft', + originTop: 'isOriginTop', + resize: 'isResizeBound', + resizeContainer: 'isResizingContainer' +}; + +proto._create = function() { + // get items from children + this.reloadItems(); + // elements that affect layout, but are not laid out + this.stamps = []; + this.stamp( this.options.stamp ); + // set container style + utils.extend( this.element.style, this.options.containerStyle ); + + // bind resize method + var canBindResize = this._getOption('resize'); + if ( canBindResize ) { + this.bindResize(); + } +}; + +// goes through all children again and gets bricks in proper order +proto.reloadItems = function() { + // collection of item elements + this.items = this._itemize( this.element.children ); +}; + + +/** + * turn elements into Outlayer.Items to be used in layout + * @param {Array or NodeList or HTMLElement} elems + * @returns {Array} items - collection of new Outlayer Items + */ +proto._itemize = function( elems ) { + + var itemElems = this._filterFindItemElements( elems ); + var Item = this.constructor.Item; + + // create new Outlayer Items for collection + var items = []; + for ( var i=0; i < itemElems.length; i++ ) { + var elem = itemElems[i]; + var item = new Item( elem, this ); + items.push( item ); + } + + return items; +}; + +/** + * get item elements to be used in layout + * @param {Array or NodeList or HTMLElement} elems + * @returns {Array} items - item elements + */ +proto._filterFindItemElements = function( elems ) { + return utils.filterFindElements( elems, this.options.itemSelector ); +}; + +/** + * getter method for getting item elements + * @returns {Array} elems - collection of item elements + */ +proto.getItemElements = function() { + return this.items.map( function( item ) { + return item.element; + }); +}; + +// ----- init & layout ----- // + +/** + * lays out all items + */ +proto.layout = function() { + this._resetLayout(); + this._manageStamps(); + + // don't animate first layout + var layoutInstant = this._getOption('layoutInstant'); + var isInstant = layoutInstant !== undefined ? + layoutInstant : !this._isLayoutInited; + this.layoutItems( this.items, isInstant ); + + // flag for initalized + this._isLayoutInited = true; +}; + +// _init is alias for layout +proto._init = proto.layout; + +/** + * logic before any new layout + */ +proto._resetLayout = function() { + this.getSize(); +}; + + +proto.getSize = function() { + this.size = getSize( this.element ); +}; + +/** + * get measurement from option, for columnWidth, rowHeight, gutter + * if option is String -> get element from selector string, & get size of element + * if option is Element -> get size of element + * else use option as a number + * + * @param {String} measurement + * @param {String} size - width or height + * @private + */ +proto._getMeasurement = function( measurement, size ) { + var option = this.options[ measurement ]; + var elem; + if ( !option ) { + // default to 0 + this[ measurement ] = 0; + } else { + // use option as an element + if ( typeof option == 'string' ) { + elem = this.element.querySelector( option ); + } else if ( option instanceof HTMLElement ) { + elem = option; + } + // use size of element, if element + this[ measurement ] = elem ? getSize( elem )[ size ] : option; + } +}; + +/** + * layout a collection of item elements + * @api public + */ +proto.layoutItems = function( items, isInstant ) { + items = this._getItemsForLayout( items ); + + this._layoutItems( items, isInstant ); + + this._postLayout(); +}; + +/** + * get the items to be laid out + * you may want to skip over some items + * @param {Array} items + * @returns {Array} items + */ +proto._getItemsForLayout = function( items ) { + return items.filter( function( item ) { + return !item.isIgnored; + }); +}; + +/** + * layout items + * @param {Array} items + * @param {Boolean} isInstant + */ +proto._layoutItems = function( items, isInstant ) { + this._emitCompleteOnItems( 'layout', items ); + + if ( !items || !items.length ) { + // no items, emit event with empty array + return; + } + + var queue = []; + + items.forEach( function( item ) { + // get x/y object from method + var position = this._getItemLayoutPosition( item ); + // enqueue + position.item = item; + position.isInstant = isInstant || item.isLayoutInstant; + queue.push( position ); + }, this ); + + this._processLayoutQueue( queue ); +}; + +/** + * get item layout position + * @param {Outlayer.Item} item + * @returns {Object} x and y position + */ +proto._getItemLayoutPosition = function( /* item */ ) { + return { + x: 0, + y: 0 + }; +}; + +/** + * iterate over array and position each item + * Reason being - separating this logic prevents 'layout invalidation' + * thx @paul_irish + * @param {Array} queue + */ +proto._processLayoutQueue = function( queue ) { + this.updateStagger(); + queue.forEach( function( obj, i ) { + this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i ); + }, this ); +}; + +// set stagger from option in milliseconds number +proto.updateStagger = function() { + var stagger = this.options.stagger; + if ( stagger === null || stagger === undefined ) { + this.stagger = 0; + return; + } + this.stagger = getMilliseconds( stagger ); + return this.stagger; +}; + +/** + * Sets position of item in DOM + * @param {Outlayer.Item} item + * @param {Number} x - horizontal position + * @param {Number} y - vertical position + * @param {Boolean} isInstant - disables transitions + */ +proto._positionItem = function( item, x, y, isInstant, i ) { + if ( isInstant ) { + // if not transition, just set CSS + item.goTo( x, y ); + } else { + item.stagger( i * this.stagger ); + item.moveTo( x, y ); + } +}; + +/** + * Any logic you want to do after each layout, + * i.e. size the container + */ +proto._postLayout = function() { + this.resizeContainer(); +}; + +proto.resizeContainer = function() { + var isResizingContainer = this._getOption('resizeContainer'); + if ( !isResizingContainer ) { + return; + } + var size = this._getContainerSize(); + if ( size ) { + this._setContainerMeasure( size.width, true ); + this._setContainerMeasure( size.height, false ); + } +}; + +/** + * Sets width or height of container if returned + * @returns {Object} size + * @param {Number} width + * @param {Number} height + */ +proto._getContainerSize = noop; + +/** + * @param {Number} measure - size of width or height + * @param {Boolean} isWidth + */ +proto._setContainerMeasure = function( measure, isWidth ) { + if ( measure === undefined ) { + return; + } + + var elemSize = this.size; + // add padding and border width if border box + if ( elemSize.isBorderBox ) { + measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight + + elemSize.borderLeftWidth + elemSize.borderRightWidth : + elemSize.paddingBottom + elemSize.paddingTop + + elemSize.borderTopWidth + elemSize.borderBottomWidth; + } + + measure = Math.max( measure, 0 ); + this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px'; +}; + +/** + * emit eventComplete on a collection of items events + * @param {String} eventName + * @param {Array} items - Outlayer.Items + */ +proto._emitCompleteOnItems = function( eventName, items ) { + var _this = this; + function onComplete() { + _this.dispatchEvent( eventName + 'Complete', null, [ items ] ); + } + + var count = items.length; + if ( !items || !count ) { + onComplete(); + return; + } + + var doneCount = 0; + function tick() { + doneCount++; + if ( doneCount == count ) { + onComplete(); + } + } + + // bind callback + items.forEach( function( item ) { + item.once( eventName, tick ); + }); +}; + +/** + * emits events via EvEmitter and jQuery events + * @param {String} type - name of event + * @param {Event} event - original event + * @param {Array} args - extra arguments + */ +proto.dispatchEvent = function( type, event, args ) { + // add original event to arguments + var emitArgs = event ? [ event ].concat( args ) : args; + this.emitEvent( type, emitArgs ); + + if ( jQuery ) { + // set this.$element + this.$element = this.$element || jQuery( this.element ); + if ( event ) { + // create jQuery event + var $event = jQuery.Event( event ); + $event.type = type; + this.$element.trigger( $event, args ); + } else { + // just trigger with type if no event available + this.$element.trigger( type, args ); + } + } +}; + +// -------------------------- ignore & stamps -------------------------- // + + +/** + * keep item in collection, but do not lay it out + * ignored items do not get skipped in layout + * @param {Element} elem + */ +proto.ignore = function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + item.isIgnored = true; + } +}; + +/** + * return item to layout collection + * @param {Element} elem + */ +proto.unignore = function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + delete item.isIgnored; + } +}; + +/** + * adds elements to stamps + * @param {NodeList, Array, Element, or String} elems + */ +proto.stamp = function( elems ) { + elems = this._find( elems ); + if ( !elems ) { + return; + } + + this.stamps = this.stamps.concat( elems ); + // ignore + elems.forEach( this.ignore, this ); +}; + +/** + * removes elements to stamps + * @param {NodeList, Array, or Element} elems + */ +proto.unstamp = function( elems ) { + elems = this._find( elems ); + if ( !elems ){ + return; + } + + elems.forEach( function( elem ) { + // filter out removed stamp elements + utils.removeFrom( this.stamps, elem ); + this.unignore( elem ); + }, this ); +}; + +/** + * finds child elements + * @param {NodeList, Array, Element, or String} elems + * @returns {Array} elems + */ +proto._find = function( elems ) { + if ( !elems ) { + return; + } + // if string, use argument as selector string + if ( typeof elems == 'string' ) { + elems = this.element.querySelectorAll( elems ); + } + elems = utils.makeArray( elems ); + return elems; +}; + +proto._manageStamps = function() { + if ( !this.stamps || !this.stamps.length ) { + return; + } + + this._getBoundingRect(); + + this.stamps.forEach( this._manageStamp, this ); +}; + +// update boundingLeft / Top +proto._getBoundingRect = function() { + // get bounding rect for container element + var boundingRect = this.element.getBoundingClientRect(); + var size = this.size; + this._boundingRect = { + left: boundingRect.left + size.paddingLeft + size.borderLeftWidth, + top: boundingRect.top + size.paddingTop + size.borderTopWidth, + right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ), + bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth ) + }; +}; + +/** + * @param {Element} stamp +**/ +proto._manageStamp = noop; + +/** + * get x/y position of element relative to container element + * @param {Element} elem + * @returns {Object} offset - has left, top, right, bottom + */ +proto._getElementOffset = function( elem ) { + var boundingRect = elem.getBoundingClientRect(); + var thisRect = this._boundingRect; + var size = getSize( elem ); + var offset = { + left: boundingRect.left - thisRect.left - size.marginLeft, + top: boundingRect.top - thisRect.top - size.marginTop, + right: thisRect.right - boundingRect.right - size.marginRight, + bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom + }; + return offset; +}; + +// -------------------------- resize -------------------------- // + +// enable event handlers for listeners +// i.e. resize -> onresize +proto.handleEvent = utils.handleEvent; + +/** + * Bind layout to window resizing + */ +proto.bindResize = function() { + window.addEventListener( 'resize', this ); + this.isResizeBound = true; +}; + +/** + * Unbind layout to window resizing + */ +proto.unbindResize = function() { + window.removeEventListener( 'resize', this ); + this.isResizeBound = false; +}; + +proto.onresize = function() { + this.resize(); +}; + +utils.debounceMethod( Outlayer, 'onresize', 100 ); + +proto.resize = function() { + // don't trigger if size did not change + // or if resize was unbound. See #9 + if ( !this.isResizeBound || !this.needsResizeLayout() ) { + return; + } + + this.layout(); +}; + +/** + * check if layout is needed post layout + * @returns Boolean + */ +proto.needsResizeLayout = function() { + var size = getSize( this.element ); + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var hasSizes = this.size && size; + return hasSizes && size.innerWidth !== this.size.innerWidth; +}; + +// -------------------------- methods -------------------------- // + +/** + * add items to Outlayer instance + * @param {Array or NodeList or Element} elems + * @returns {Array} items - Outlayer.Items +**/ +proto.addItems = function( elems ) { + var items = this._itemize( elems ); + // add items to collection + if ( items.length ) { + this.items = this.items.concat( items ); + } + return items; +}; + +/** + * Layout newly-appended item elements + * @param {Array or NodeList or Element} elems + */ +proto.appended = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // layout and reveal just the new items + this.layoutItems( items, true ); + this.reveal( items ); +}; + +/** + * Layout prepended elements + * @param {Array or NodeList or Element} elems + */ +proto.prepended = function( elems ) { + var items = this._itemize( elems ); + if ( !items.length ) { + return; + } + // add items to beginning of collection + var previousItems = this.items.slice(0); + this.items = items.concat( previousItems ); + // start new layout + this._resetLayout(); + this._manageStamps(); + // layout new stuff without transition + this.layoutItems( items, true ); + this.reveal( items ); + // layout previous items + this.layoutItems( previousItems ); +}; + +/** + * reveal a collection of items + * @param {Array of Outlayer.Items} items + */ +proto.reveal = function( items ) { + this._emitCompleteOnItems( 'reveal', items ); + if ( !items || !items.length ) { + return; + } + var stagger = this.updateStagger(); + items.forEach( function( item, i ) { + item.stagger( i * stagger ); + item.reveal(); + }); +}; + +/** + * hide a collection of items + * @param {Array of Outlayer.Items} items + */ +proto.hide = function( items ) { + this._emitCompleteOnItems( 'hide', items ); + if ( !items || !items.length ) { + return; + } + var stagger = this.updateStagger(); + items.forEach( function( item, i ) { + item.stagger( i * stagger ); + item.hide(); + }); +}; + +/** + * reveal item elements + * @param {Array}, {Element}, {NodeList} items + */ +proto.revealItemElements = function( elems ) { + var items = this.getItems( elems ); + this.reveal( items ); +}; + +/** + * hide item elements + * @param {Array}, {Element}, {NodeList} items + */ +proto.hideItemElements = function( elems ) { + var items = this.getItems( elems ); + this.hide( items ); +}; + +/** + * get Outlayer.Item, given an Element + * @param {Element} elem + * @param {Function} callback + * @returns {Outlayer.Item} item + */ +proto.getItem = function( elem ) { + // loop through items to get the one that matches + for ( var i=0; i < this.items.length; i++ ) { + var item = this.items[i]; + if ( item.element == elem ) { + // return item + return item; + } + } +}; + +/** + * get collection of Outlayer.Items, given Elements + * @param {Array} elems + * @returns {Array} items - Outlayer.Items + */ +proto.getItems = function( elems ) { + elems = utils.makeArray( elems ); + var items = []; + elems.forEach( function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + items.push( item ); + } + }, this ); + + return items; +}; + +/** + * remove element(s) from instance and DOM + * @param {Array or NodeList or Element} elems + */ +proto.remove = function( elems ) { + var removeItems = this.getItems( elems ); + + this._emitCompleteOnItems( 'remove', removeItems ); + + // bail if no items to remove + if ( !removeItems || !removeItems.length ) { + return; + } + + removeItems.forEach( function( item ) { + item.remove(); + // remove item from collection + utils.removeFrom( this.items, item ); + }, this ); +}; + +// ----- destroy ----- // + +// remove and disable Outlayer instance +proto.destroy = function() { + // clean up dynamic styles + var style = this.element.style; + style.height = ''; + style.position = ''; + style.width = ''; + // destroy items + this.items.forEach( function( item ) { + item.destroy(); + }); + + this.unbindResize(); + + var id = this.element.outlayerGUID; + delete instances[ id ]; // remove reference to instance by id + delete this.element.outlayerGUID; + // remove data for jQuery + if ( jQuery ) { + jQuery.removeData( this.element, this.constructor.namespace ); + } + +}; + +// -------------------------- data -------------------------- // + +/** + * get Outlayer instance from element + * @param {Element} elem + * @returns {Outlayer} + */ +Outlayer.data = function( elem ) { + elem = utils.getQueryElement( elem ); + var id = elem && elem.outlayerGUID; + return id && instances[ id ]; +}; + + +// -------------------------- create Outlayer class -------------------------- // + +/** + * create a layout class + * @param {String} namespace + */ +Outlayer.create = function( namespace, options ) { + // sub-class Outlayer + var Layout = subclass( Outlayer ); + // apply new options and compatOptions + Layout.defaults = utils.extend( {}, Outlayer.defaults ); + utils.extend( Layout.defaults, options ); + Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions ); + + Layout.namespace = namespace; + + Layout.data = Outlayer.data; + + // sub-class Item + Layout.Item = subclass( Item ); + + // -------------------------- declarative -------------------------- // + + utils.htmlInit( Layout, namespace ); + + // -------------------------- jQuery bridge -------------------------- // + + // make into jQuery plugin + if ( jQuery && jQuery.bridget ) { + jQuery.bridget( namespace, Layout ); + } + + return Layout; +}; + +function subclass( Parent ) { + function SubClass() { + Parent.apply( this, arguments ); + } + + SubClass.prototype = Object.create( Parent.prototype ); + SubClass.prototype.constructor = SubClass; + + return SubClass; +} + +// ----- helpers ----- // + +// how many milliseconds are in each unit +var msUnits = { + ms: 1, + s: 1000 +}; + +// munge time-like parameter into millisecond number +// '0.4s' -> 40 +function getMilliseconds( time ) { + if ( typeof time == 'number' ) { + return time; + } + var matches = time.match( /(^\d*\.?\d*)(\w*)/ ); + var num = matches && matches[1]; + var unit = matches && matches[2]; + if ( !num.length ) { + return 0; + } + num = parseFloat( num ); + var mult = msUnits[ unit ] || 1; + return num * mult; +} + +// ----- fin ----- // + +// back in global +Outlayer.Item = Item; + +return Outlayer; + +})); + +/** + * Isotope Item +**/ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/item',[ + 'outlayer/outlayer' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('outlayer') + ); + } else { + // browser global + window.Isotope = window.Isotope || {}; + window.Isotope.Item = factory( + window.Outlayer + ); + } + +}( window, function factory( Outlayer ) { +'use strict'; + +// -------------------------- Item -------------------------- // + +// sub-class Outlayer Item +function Item() { + Outlayer.Item.apply( this, arguments ); +} + +var proto = Item.prototype = Object.create( Outlayer.Item.prototype ); + +var _create = proto._create; +proto._create = function() { + // assign id, used for original-order sorting + this.id = this.layout.itemGUID++; + _create.call( this ); + this.sortData = {}; +}; + +proto.updateSortData = function() { + if ( this.isIgnored ) { + return; + } + // default sorters + this.sortData.id = this.id; + // for backward compatibility + this.sortData['original-order'] = this.id; + this.sortData.random = Math.random(); + // go thru getSortData obj and apply the sorters + var getSortData = this.layout.options.getSortData; + var sorters = this.layout._sorters; + for ( var key in getSortData ) { + var sorter = sorters[ key ]; + this.sortData[ key ] = sorter( this.element, this ); + } +}; + +var _destroy = proto.destroy; +proto.destroy = function() { + // call super + _destroy.apply( this, arguments ); + // reset display, #741 + this.css({ + display: '' + }); +}; + +return Item; + +})); + +/** + * Isotope LayoutMode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/layout-mode',[ + 'get-size/get-size', + 'outlayer/outlayer' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('get-size'), + require('outlayer') + ); + } else { + // browser global + window.Isotope = window.Isotope || {}; + window.Isotope.LayoutMode = factory( + window.getSize, + window.Outlayer + ); + } + +}( window, function factory( getSize, Outlayer ) { + 'use strict'; + + // layout mode class + function LayoutMode( isotope ) { + this.isotope = isotope; + // link properties + if ( isotope ) { + this.options = isotope.options[ this.namespace ]; + this.element = isotope.element; + this.items = isotope.filteredItems; + this.size = isotope.size; + } + } + + var proto = LayoutMode.prototype; + + /** + * some methods should just defer to default Outlayer method + * and reference the Isotope instance as `this` + **/ + var facadeMethods = [ + '_resetLayout', + '_getItemLayoutPosition', + '_manageStamp', + '_getContainerSize', + '_getElementOffset', + 'needsResizeLayout', + '_getOption' + ]; + + facadeMethods.forEach( function( methodName ) { + proto[ methodName ] = function() { + return Outlayer.prototype[ methodName ].apply( this.isotope, arguments ); + }; + }); + + // ----- ----- // + + // for horizontal layout modes, check vertical size + proto.needsVerticalResizeLayout = function() { + // don't trigger if size did not change + var size = getSize( this.isotope.element ); + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var hasSizes = this.isotope.size && size; + return hasSizes && size.innerHeight != this.isotope.size.innerHeight; + }; + + // ----- measurements ----- // + + proto._getMeasurement = function() { + this.isotope._getMeasurement.apply( this, arguments ); + }; + + proto.getColumnWidth = function() { + this.getSegmentSize( 'column', 'Width' ); + }; + + proto.getRowHeight = function() { + this.getSegmentSize( 'row', 'Height' ); + }; + + /** + * get columnWidth or rowHeight + * segment: 'column' or 'row' + * size 'Width' or 'Height' + **/ + proto.getSegmentSize = function( segment, size ) { + var segmentName = segment + size; + var outerSize = 'outer' + size; + // columnWidth / outerWidth // rowHeight / outerHeight + this._getMeasurement( segmentName, outerSize ); + // got rowHeight or columnWidth, we can chill + if ( this[ segmentName ] ) { + return; + } + // fall back to item of first element + var firstItemSize = this.getFirstItemSize(); + this[ segmentName ] = firstItemSize && firstItemSize[ outerSize ] || + // or size of container + this.isotope.size[ 'inner' + size ]; + }; + + proto.getFirstItemSize = function() { + var firstItem = this.isotope.filteredItems[0]; + return firstItem && firstItem.element && getSize( firstItem.element ); + }; + + // ----- methods that should reference isotope ----- // + + proto.layout = function() { + this.isotope.layout.apply( this.isotope, arguments ); + }; + + proto.getSize = function() { + this.isotope.getSize(); + this.size = this.isotope.size; + }; + + // -------------------------- create -------------------------- // + + LayoutMode.modes = {}; + + LayoutMode.create = function( namespace, options ) { + + function Mode() { + LayoutMode.apply( this, arguments ); + } + + Mode.prototype = Object.create( proto ); + Mode.prototype.constructor = Mode; + + // default options + if ( options ) { + Mode.options = options; + } + + Mode.prototype.namespace = namespace; + // register in Isotope + LayoutMode.modes[ namespace ] = Mode; + + return Mode; + }; + + return LayoutMode; + +})); + +/*! + * Masonry v4.2.0 + * Cascading grid layout library + * http://masonry.desandro.com + * MIT License + * by David DeSandro + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'masonry/masonry',[ + 'outlayer/outlayer', + 'get-size/get-size' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('outlayer'), + require('get-size') + ); + } else { + // browser global + window.Masonry = factory( + window.Outlayer, + window.getSize + ); + } + +}( window, function factory( Outlayer, getSize ) { + + + +// -------------------------- masonryDefinition -------------------------- // + + // create an Outlayer layout class + var Masonry = Outlayer.create('masonry'); + // isFitWidth -> fitWidth + Masonry.compatOptions.fitWidth = 'isFitWidth'; + + var proto = Masonry.prototype; + + proto._resetLayout = function() { + this.getSize(); + this._getMeasurement( 'columnWidth', 'outerWidth' ); + this._getMeasurement( 'gutter', 'outerWidth' ); + this.measureColumns(); + + // reset column Y + this.colYs = []; + for ( var i=0; i < this.cols; i++ ) { + this.colYs.push( 0 ); + } + + this.maxY = 0; + this.horizontalColIndex = 0; + }; + + proto.measureColumns = function() { + this.getContainerWidth(); + // if columnWidth is 0, default to outerWidth of first item + if ( !this.columnWidth ) { + var firstItem = this.items[0]; + var firstItemElem = firstItem && firstItem.element; + // columnWidth fall back to item of first element + this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth || + // if first elem has no width, default to size of container + this.containerWidth; + } + + var columnWidth = this.columnWidth += this.gutter; + + // calculate columns + var containerWidth = this.containerWidth + this.gutter; + var cols = containerWidth / columnWidth; + // fix rounding errors, typically with gutters + var excess = columnWidth - containerWidth % columnWidth; + // if overshoot is less than a pixel, round up, otherwise floor it + var mathMethod = excess && excess < 1 ? 'round' : 'floor'; + cols = Math[ mathMethod ]( cols ); + this.cols = Math.max( cols, 1 ); + }; + + proto.getContainerWidth = function() { + // container is parent if fit width + var isFitWidth = this._getOption('fitWidth'); + var container = isFitWidth ? this.element.parentNode : this.element; + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var size = getSize( container ); + this.containerWidth = size && size.innerWidth; + }; + + proto._getItemLayoutPosition = function( item ) { + item.getSize(); + // how many columns does this brick span + var remainder = item.size.outerWidth % this.columnWidth; + var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil'; + // round if off by 1 pixel, otherwise use ceil + var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth ); + colSpan = Math.min( colSpan, this.cols ); + // use horizontal or top column position + var colPosMethod = this.options.horizontalOrder ? + '_getHorizontalColPosition' : '_getTopColPosition'; + var colPosition = this[ colPosMethod ]( colSpan, item ); + // position the brick + var position = { + x: this.columnWidth * colPosition.col, + y: colPosition.y + }; + // apply setHeight to necessary columns + var setHeight = colPosition.y + item.size.outerHeight; + var setMax = colSpan + colPosition.col; + for ( var i = colPosition.col; i < setMax; i++ ) { + this.colYs[i] = setHeight; + } + + return position; + }; + + proto._getTopColPosition = function( colSpan ) { + var colGroup = this._getTopColGroup( colSpan ); + // get the minimum Y value from the columns + var minimumY = Math.min.apply( Math, colGroup ); + + return { + col: colGroup.indexOf( minimumY ), + y: minimumY, + }; + }; + + /** + * @param {Number} colSpan - number of columns the element spans + * @returns {Array} colGroup + */ + proto._getTopColGroup = function( colSpan ) { + if ( colSpan < 2 ) { + // if brick spans only one column, use all the column Ys + return this.colYs; + } + + var colGroup = []; + // how many different places could this brick fit horizontally + var groupCount = this.cols + 1 - colSpan; + // for each group potential horizontal position + for ( var i = 0; i < groupCount; i++ ) { + colGroup[i] = this._getColGroupY( i, colSpan ); + } + return colGroup; + }; + + proto._getColGroupY = function( col, colSpan ) { + if ( colSpan < 2 ) { + return this.colYs[ col ]; + } + // make an array of colY values for that one group + var groupColYs = this.colYs.slice( col, col + colSpan ); + // and get the max value of the array + return Math.max.apply( Math, groupColYs ); + }; + + // get column position based on horizontal index. #873 + proto._getHorizontalColPosition = function( colSpan, item ) { + var col = this.horizontalColIndex % this.cols; + var isOver = colSpan > 1 && col + colSpan > this.cols; + // shift to next row if item can't fit on current row + col = isOver ? 0 : col; + // don't let zero-size items take up space + var hasSize = item.size.outerWidth && item.size.outerHeight; + this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex; + + return { + col: col, + y: this._getColGroupY( col, colSpan ), + }; + }; + + proto._manageStamp = function( stamp ) { + var stampSize = getSize( stamp ); + var offset = this._getElementOffset( stamp ); + // get the columns that this stamp affects + var isOriginLeft = this._getOption('originLeft'); + var firstX = isOriginLeft ? offset.left : offset.right; + var lastX = firstX + stampSize.outerWidth; + var firstCol = Math.floor( firstX / this.columnWidth ); + firstCol = Math.max( 0, firstCol ); + var lastCol = Math.floor( lastX / this.columnWidth ); + // lastCol should not go over if multiple of columnWidth #425 + lastCol -= lastX % this.columnWidth ? 0 : 1; + lastCol = Math.min( this.cols - 1, lastCol ); + // set colYs to bottom of the stamp + + var isOriginTop = this._getOption('originTop'); + var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) + + stampSize.outerHeight; + for ( var i = firstCol; i <= lastCol; i++ ) { + this.colYs[i] = Math.max( stampMaxY, this.colYs[i] ); + } + }; + + proto._getContainerSize = function() { + this.maxY = Math.max.apply( Math, this.colYs ); + var size = { + height: this.maxY + }; + + if ( this._getOption('fitWidth') ) { + size.width = this._getContainerFitWidth(); + } + + return size; + }; + + proto._getContainerFitWidth = function() { + var unusedCols = 0; + // count unused columns + var i = this.cols; + while ( --i ) { + if ( this.colYs[i] !== 0 ) { + break; + } + unusedCols++; + } + // fit container to columns that have been used + return ( this.cols - unusedCols ) * this.columnWidth - this.gutter; + }; + + proto.needsResizeLayout = function() { + var previousWidth = this.containerWidth; + this.getContainerWidth(); + return previousWidth != this.containerWidth; + }; + + return Masonry; + +})); + +/*! + * Masonry layout mode + * sub-classes Masonry + * http://masonry.desandro.com + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/layout-modes/masonry',[ + '../layout-mode', + 'masonry/masonry' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('../layout-mode'), + require('masonry-layout') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode, + window.Masonry + ); + } + +}( window, function factory( LayoutMode, Masonry ) { +'use strict'; + +// -------------------------- masonryDefinition -------------------------- // + + // create an Outlayer layout class + var MasonryMode = LayoutMode.create('masonry'); + + var proto = MasonryMode.prototype; + + var keepModeMethods = { + _getElementOffset: true, + layout: true, + _getMeasurement: true + }; + + // inherit Masonry prototype + for ( var method in Masonry.prototype ) { + // do not inherit mode methods + if ( !keepModeMethods[ method ] ) { + proto[ method ] = Masonry.prototype[ method ]; + } + } + + var measureColumns = proto.measureColumns; + proto.measureColumns = function() { + // set items, used if measuring first item + this.items = this.isotope.filteredItems; + measureColumns.call( this ); + }; + + // point to mode options for fitWidth + var _getOption = proto._getOption; + proto._getOption = function( option ) { + if ( option == 'fitWidth' ) { + return this.options.isFitWidth !== undefined ? + this.options.isFitWidth : this.options.fitWidth; + } + return _getOption.apply( this.isotope, arguments ); + }; + + return MasonryMode; + +})); + +/** + * fitRows layout mode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/layout-modes/fit-rows',[ + '../layout-mode' + ], + factory ); + } else if ( typeof exports == 'object' ) { + // CommonJS + module.exports = factory( + require('../layout-mode') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode + ); + } + +}( window, function factory( LayoutMode ) { +'use strict'; + +var FitRows = LayoutMode.create('fitRows'); + +var proto = FitRows.prototype; + +proto._resetLayout = function() { + this.x = 0; + this.y = 0; + this.maxY = 0; + this._getMeasurement( 'gutter', 'outerWidth' ); +}; + +proto._getItemLayoutPosition = function( item ) { + item.getSize(); + + var itemWidth = item.size.outerWidth + this.gutter; + // if this element cannot fit in the current row + var containerWidth = this.isotope.size.innerWidth + this.gutter; + if ( this.x !== 0 && itemWidth + this.x > containerWidth ) { + this.x = 0; + this.y = this.maxY; + } + + var position = { + x: this.x, + y: this.y + }; + + this.maxY = Math.max( this.maxY, this.y + item.size.outerHeight ); + this.x += itemWidth; + + return position; +}; + +proto._getContainerSize = function() { + return { height: this.maxY }; +}; + +return FitRows; + +})); + +/** + * vertical layout mode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/layout-modes/vertical',[ + '../layout-mode' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('../layout-mode') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode + ); + } + +}( window, function factory( LayoutMode ) { +'use strict'; + +var Vertical = LayoutMode.create( 'vertical', { + horizontalAlignment: 0 +}); + +var proto = Vertical.prototype; + +proto._resetLayout = function() { + this.y = 0; +}; + +proto._getItemLayoutPosition = function( item ) { + item.getSize(); + var x = ( this.isotope.size.innerWidth - item.size.outerWidth ) * + this.options.horizontalAlignment; + var y = this.y; + this.y += item.size.outerHeight; + return { x: x, y: y }; +}; + +proto._getContainerSize = function() { + return { height: this.y }; +}; + +return Vertical; + +})); + +/*! + * Isotope v3.0.4 + * + * Licensed GPLv3 for open source use + * or Isotope Commercial License for commercial use + * + * http://isotope.metafizzy.co + * Copyright 2017 Metafizzy + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( [ + 'outlayer/outlayer', + 'get-size/get-size', + 'desandro-matches-selector/matches-selector', + 'fizzy-ui-utils/utils', + 'isotope/js/item', + 'isotope/js/layout-mode', + // include default layout modes + 'isotope/js/layout-modes/masonry', + 'isotope/js/layout-modes/fit-rows', + 'isotope/js/layout-modes/vertical' + ], + function( Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ) { + return factory( window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('outlayer'), + require('get-size'), + require('desandro-matches-selector'), + require('fizzy-ui-utils'), + require('isotope/js/item'), + require('isotope/js/layout-mode'), + // include default layout modes + require('isotope/js/layout-modes/masonry'), + require('isotope/js/layout-modes/fit-rows'), + require('isotope/js/layout-modes/vertical') + ); + } else { + // browser global + window.Isotope = factory( + window, + window.Outlayer, + window.getSize, + window.matchesSelector, + window.fizzyUIUtils, + window.Isotope.Item, + window.Isotope.LayoutMode + ); + } + +}( window, function factory( window, Outlayer, getSize, matchesSelector, utils, + Item, LayoutMode ) { + + + +// -------------------------- vars -------------------------- // + +var jQuery = window.jQuery; + +// -------------------------- helpers -------------------------- // + +var trim = String.prototype.trim ? + function( str ) { + return str.trim(); + } : + function( str ) { + return str.replace( /^\s+|\s+$/g, '' ); + }; + +// -------------------------- isotopeDefinition -------------------------- // + + // create an Outlayer layout class + var Isotope = Outlayer.create( 'isotope', { + layoutMode: 'masonry', + isJQueryFiltering: true, + sortAscending: true + }); + + Isotope.Item = Item; + Isotope.LayoutMode = LayoutMode; + + var proto = Isotope.prototype; + + proto._create = function() { + this.itemGUID = 0; + // functions that sort items + this._sorters = {}; + this._getSorters(); + // call super + Outlayer.prototype._create.call( this ); + + // create layout modes + this.modes = {}; + // start filteredItems with all items + this.filteredItems = this.items; + // keep of track of sortBys + this.sortHistory = [ 'original-order' ]; + // create from registered layout modes + for ( var name in LayoutMode.modes ) { + this._initLayoutMode( name ); + } + }; + + proto.reloadItems = function() { + // reset item ID counter + this.itemGUID = 0; + // call super + Outlayer.prototype.reloadItems.call( this ); + }; + + proto._itemize = function() { + var items = Outlayer.prototype._itemize.apply( this, arguments ); + // assign ID for original-order + for ( var i=0; i < items.length; i++ ) { + var item = items[i]; + item.id = this.itemGUID++; + } + this._updateItemsSortData( items ); + return items; + }; + + + // -------------------------- layout -------------------------- // + + proto._initLayoutMode = function( name ) { + var Mode = LayoutMode.modes[ name ]; + // set mode options + // HACK extend initial options, back-fill in default options + var initialOpts = this.options[ name ] || {}; + this.options[ name ] = Mode.options ? + utils.extend( Mode.options, initialOpts ) : initialOpts; + // init layout mode instance + this.modes[ name ] = new Mode( this ); + }; + + + proto.layout = function() { + // if first time doing layout, do all magic + if ( !this._isLayoutInited && this._getOption('initLayout') ) { + this.arrange(); + return; + } + this._layout(); + }; + + // private method to be used in layout() & magic() + proto._layout = function() { + // don't animate first layout + var isInstant = this._getIsInstant(); + // layout flow + this._resetLayout(); + this._manageStamps(); + this.layoutItems( this.filteredItems, isInstant ); + + // flag for initalized + this._isLayoutInited = true; + }; + + // filter + sort + layout + proto.arrange = function( opts ) { + // set any options pass + this.option( opts ); + this._getIsInstant(); + // filter, sort, and layout + + // filter + var filtered = this._filter( this.items ); + this.filteredItems = filtered.matches; + + this._bindArrangeComplete(); + + if ( this._isInstant ) { + this._noTransition( this._hideReveal, [ filtered ] ); + } else { + this._hideReveal( filtered ); + } + + this._sort(); + this._layout(); + }; + // alias to _init for main plugin method + proto._init = proto.arrange; + + proto._hideReveal = function( filtered ) { + this.reveal( filtered.needReveal ); + this.hide( filtered.needHide ); + }; + + // HACK + // Don't animate/transition first layout + // Or don't animate/transition other layouts + proto._getIsInstant = function() { + var isLayoutInstant = this._getOption('layoutInstant'); + var isInstant = isLayoutInstant !== undefined ? isLayoutInstant : + !this._isLayoutInited; + this._isInstant = isInstant; + return isInstant; + }; + + // listen for layoutComplete, hideComplete and revealComplete + // to trigger arrangeComplete + proto._bindArrangeComplete = function() { + // listen for 3 events to trigger arrangeComplete + var isLayoutComplete, isHideComplete, isRevealComplete; + var _this = this; + function arrangeParallelCallback() { + if ( isLayoutComplete && isHideComplete && isRevealComplete ) { + _this.dispatchEvent( 'arrangeComplete', null, [ _this.filteredItems ] ); + } + } + this.once( 'layoutComplete', function() { + isLayoutComplete = true; + arrangeParallelCallback(); + }); + this.once( 'hideComplete', function() { + isHideComplete = true; + arrangeParallelCallback(); + }); + this.once( 'revealComplete', function() { + isRevealComplete = true; + arrangeParallelCallback(); + }); + }; + + // -------------------------- filter -------------------------- // + + proto._filter = function( items ) { + var filter = this.options.filter; + filter = filter || '*'; + var matches = []; + var hiddenMatched = []; + var visibleUnmatched = []; + + var test = this._getFilterTest( filter ); + + // test each item + for ( var i=0; i < items.length; i++ ) { + var item = items[i]; + if ( item.isIgnored ) { + continue; + } + // add item to either matched or unmatched group + var isMatched = test( item ); + // item.isFilterMatched = isMatched; + // add to matches if its a match + if ( isMatched ) { + matches.push( item ); + } + // add to additional group if item needs to be hidden or revealed + if ( isMatched && item.isHidden ) { + hiddenMatched.push( item ); + } else if ( !isMatched && !item.isHidden ) { + visibleUnmatched.push( item ); + } + } + + // return collections of items to be manipulated + return { + matches: matches, + needReveal: hiddenMatched, + needHide: visibleUnmatched + }; + }; + + // get a jQuery, function, or a matchesSelector test given the filter + proto._getFilterTest = function( filter ) { + if ( jQuery && this.options.isJQueryFiltering ) { + // use jQuery + return function( item ) { + return jQuery( item.element ).is( filter ); + }; + } + if ( typeof filter == 'function' ) { + // use filter as function + return function( item ) { + return filter( item.element ); + }; + } + // default, use filter as selector string + return function( item ) { + return matchesSelector( item.element, filter ); + }; + }; + + // -------------------------- sorting -------------------------- // + + /** + * @params {Array} elems + * @public + */ + proto.updateSortData = function( elems ) { + // get items + var items; + if ( elems ) { + elems = utils.makeArray( elems ); + items = this.getItems( elems ); + } else { + // update all items if no elems provided + items = this.items; + } + + this._getSorters(); + this._updateItemsSortData( items ); + }; + + proto._getSorters = function() { + var getSortData = this.options.getSortData; + for ( var key in getSortData ) { + var sorter = getSortData[ key ]; + this._sorters[ key ] = mungeSorter( sorter ); + } + }; + + /** + * @params {Array} items - of Isotope.Items + * @private + */ + proto._updateItemsSortData = function( items ) { + // do not update if no items + var len = items && items.length; + + for ( var i=0; len && i < len; i++ ) { + var item = items[i]; + item.updateSortData(); + } + }; + + // ----- munge sorter ----- // + + // encapsulate this, as we just need mungeSorter + // other functions in here are just for munging + var mungeSorter = ( function() { + // add a magic layer to sorters for convienent shorthands + // `.foo-bar` will use the text of .foo-bar querySelector + // `[foo-bar]` will use attribute + // you can also add parser + // `.foo-bar parseInt` will parse that as a number + function mungeSorter( sorter ) { + // if not a string, return function or whatever it is + if ( typeof sorter != 'string' ) { + return sorter; + } + // parse the sorter string + var args = trim( sorter ).split(' '); + var query = args[0]; + // check if query looks like [an-attribute] + var attrMatch = query.match( /^\[(.+)\]$/ ); + var attr = attrMatch && attrMatch[1]; + var getValue = getValueGetter( attr, query ); + // use second argument as a parser + var parser = Isotope.sortDataParsers[ args[1] ]; + // parse the value, if there was a parser + sorter = parser ? function( elem ) { + return elem && parser( getValue( elem ) ); + } : + // otherwise just return value + function( elem ) { + return elem && getValue( elem ); + }; + + return sorter; + } + + // get an attribute getter, or get text of the querySelector + function getValueGetter( attr, query ) { + // if query looks like [foo-bar], get attribute + if ( attr ) { + return function getAttribute( elem ) { + return elem.getAttribute( attr ); + }; + } + + // otherwise, assume its a querySelector, and get its text + return function getChildText( elem ) { + var child = elem.querySelector( query ); + return child && child.textContent; + }; + } + + return mungeSorter; + })(); + + // parsers used in getSortData shortcut strings + Isotope.sortDataParsers = { + 'parseInt': function( val ) { + return parseInt( val, 10 ); + }, + 'parseFloat': function( val ) { + return parseFloat( val ); + } + }; + + // ----- sort method ----- // + + // sort filteredItem order + proto._sort = function() { + if ( !this.options.sortBy ) { + return; + } + // keep track of sortBy History + var sortBys = utils.makeArray( this.options.sortBy ); + if ( !this._getIsSameSortBy( sortBys ) ) { + // concat all sortBy and sortHistory, add to front, oldest goes in last + this.sortHistory = sortBys.concat( this.sortHistory ); + } + // sort magic + var itemSorter = getItemSorter( this.sortHistory, this.options.sortAscending ); + this.filteredItems.sort( itemSorter ); + }; + + // check if sortBys is same as start of sortHistory + proto._getIsSameSortBy = function( sortBys ) { + for ( var i=0; i < sortBys.length; i++ ) { + if ( sortBys[i] != this.sortHistory[i] ) { + return false; + } + } + return true; + }; + + // returns a function used for sorting + function getItemSorter( sortBys, sortAsc ) { + return function sorter( itemA, itemB ) { + // cycle through all sortKeys + for ( var i = 0; i < sortBys.length; i++ ) { + var sortBy = sortBys[i]; + var a = itemA.sortData[ sortBy ]; + var b = itemB.sortData[ sortBy ]; + if ( a > b || a < b ) { + // if sortAsc is an object, use the value given the sortBy key + var isAscending = sortAsc[ sortBy ] !== undefined ? sortAsc[ sortBy ] : sortAsc; + var direction = isAscending ? 1 : -1; + return ( a > b ? 1 : -1 ) * direction; + } + } + return 0; + }; + } + + // -------------------------- methods -------------------------- // + + // get layout mode + proto._mode = function() { + var layoutMode = this.options.layoutMode; + var mode = this.modes[ layoutMode ]; + if ( !mode ) { + // TODO console.error + throw new Error( 'No layout mode: ' + layoutMode ); + } + // HACK sync mode's options + // any options set after init for layout mode need to be synced + mode.options = this.options[ layoutMode ]; + return mode; + }; + + proto._resetLayout = function() { + // trigger original reset layout + Outlayer.prototype._resetLayout.call( this ); + this._mode()._resetLayout(); + }; + + proto._getItemLayoutPosition = function( item ) { + return this._mode()._getItemLayoutPosition( item ); + }; + + proto._manageStamp = function( stamp ) { + this._mode()._manageStamp( stamp ); + }; + + proto._getContainerSize = function() { + return this._mode()._getContainerSize(); + }; + + proto.needsResizeLayout = function() { + return this._mode().needsResizeLayout(); + }; + + // -------------------------- adding & removing -------------------------- // + + // HEADS UP overwrites default Outlayer appended + proto.appended = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // filter, layout, reveal new items + var filteredItems = this._filterRevealAdded( items ); + // add to filteredItems + this.filteredItems = this.filteredItems.concat( filteredItems ); + }; + + // HEADS UP overwrites default Outlayer prepended + proto.prepended = function( elems ) { + var items = this._itemize( elems ); + if ( !items.length ) { + return; + } + // start new layout + this._resetLayout(); + this._manageStamps(); + // filter, layout, reveal new items + var filteredItems = this._filterRevealAdded( items ); + // layout previous items + this.layoutItems( this.filteredItems ); + // add to items and filteredItems + this.filteredItems = filteredItems.concat( this.filteredItems ); + this.items = items.concat( this.items ); + }; + + proto._filterRevealAdded = function( items ) { + var filtered = this._filter( items ); + this.hide( filtered.needHide ); + // reveal all new items + this.reveal( filtered.matches ); + // layout new items, no transition + this.layoutItems( filtered.matches, true ); + return filtered.matches; + }; + + /** + * Filter, sort, and layout newly-appended item elements + * @param {Array or NodeList or Element} elems + */ + proto.insert = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // append item elements + var i, item; + var len = items.length; + for ( i=0; i < len; i++ ) { + item = items[i]; + this.element.appendChild( item.element ); + } + // filter new stuff + var filteredInsertItems = this._filter( items ).matches; + // set flag + for ( i=0; i < len; i++ ) { + items[i].isLayoutInstant = true; + } + this.arrange(); + // reset flag + for ( i=0; i < len; i++ ) { + delete items[i].isLayoutInstant; + } + this.reveal( filteredInsertItems ); + }; + + var _remove = proto.remove; + proto.remove = function( elems ) { + elems = utils.makeArray( elems ); + var removeItems = this.getItems( elems ); + // do regular thing + _remove.call( this, elems ); + // bail if no items to remove + var len = removeItems && removeItems.length; + // remove elems from filteredItems + for ( var i=0; len && i < len; i++ ) { + var item = removeItems[i]; + // remove item from collection + utils.removeFrom( this.filteredItems, item ); + } + }; + + proto.shuffle = function() { + // update random sortData + for ( var i=0; i < this.items.length; i++ ) { + var item = this.items[i]; + item.sortData.random = Math.random(); + } + this.options.sortBy = 'random'; + this._sort(); + this._layout(); + }; + + /** + * trigger fn without transition + * kind of hacky to have this in the first place + * @param {Function} fn + * @param {Array} args + * @returns ret + * @private + */ + proto._noTransition = function( fn, args ) { + // save transitionDuration before disabling + var transitionDuration = this.options.transitionDuration; + // disable transition + this.options.transitionDuration = 0; + // do it + var returnValue = fn.apply( this, args ); + // re-enable transition for reveal + this.options.transitionDuration = transitionDuration; + return returnValue; + }; + + // ----- helper methods ----- // + + /** + * getter method for getting filtered item elements + * @returns {Array} elems - collection of item elements + */ + proto.getFilteredItemElements = function() { + return this.filteredItems.map( function( item ) { + return item.element; + }); + }; + + // ----- ----- // + + return Isotope; + +})); + diff --git a/user/themes/ouidade/bower_components/isotope/dist/isotope.pkgd.min.js b/user/themes/ouidade/bower_components/isotope/dist/isotope.pkgd.min.js new file mode 100644 index 0000000..be520af --- /dev/null +++ b/user/themes/ouidade/bower_components/isotope/dist/isotope.pkgd.min.js @@ -0,0 +1,12 @@ +/*! + * Isotope PACKAGED v3.0.4 + * + * Licensed GPLv3 for open source use + * or Isotope Commercial License for commercial use + * + * http://isotope.metafizzy.co + * Copyright 2017 Metafizzy + */ + +!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,s,a){function u(t,e,o){var n,s="$()."+i+'("'+e+'")';return t.each(function(t,u){var h=a.data(u,i);if(!h)return void r(i+" not initialized. Cannot call methods, i.e. "+s);var d=h[e];if(!d||"_"==e.charAt(0))return void r(s+" is not a valid method");var l=d.apply(h,o);n=void 0===n?l:n}),void 0!==n?n:t}function h(t,e){t.each(function(t,o){var n=a.data(o,i);n?(n.option(e),n._init()):(n=new s(o,e),a.data(o,i,n))})}a=a||e||t.jQuery,a&&(s.prototype.option||(s.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=n.call(arguments,1);return u(this,t,e)}return h(this,t),this},o(a))}function o(t){!t||t&&t.bridget||(t.bridget=i)}var n=Array.prototype.slice,s=t.console,r="undefined"==typeof s?function(){}:function(t){s.error(t)};return o(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},o=i[t]=i[t]||[];return o.indexOf(e)==-1&&o.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},o=i[t]=i[t]||{};return o[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var o=i.indexOf(e);return o!=-1&&i.splice(o,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var o=0,n=i[o];e=e||[];for(var s=this._onceEvents&&this._onceEvents[t];n;){var r=s&&s[n];r&&(this.off(t,n),delete s[n]),n.apply(this,e),o+=r?0:1,n=i[o]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("get-size/get-size",[],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=t.indexOf("%")==-1&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;e