From d9969e139434961348f22c8baecad471da9ced14 Mon Sep 17 00:00:00 2001 From: Alena Date: Tue, 16 Sep 2025 01:40:08 +0300 Subject: [PATCH] first commit --- .vscode/settings.json | 3 + README.md | 0 fonts.css | 30 + fonts/Lato-Black.eot | Bin 0 -> 50900 bytes fonts/Lato-Black.woff | Bin 0 -> 36176 bytes fonts/Lato-Black.woff2 | Bin 0 -> 50900 bytes fonts/Lato-Bold.eot | Bin 0 -> 51318 bytes fonts/Lato-Bold.woff | Bin 0 -> 36792 bytes fonts/Lato-Bold.woff2 | Bin 0 -> 51318 bytes fonts/Lato-Regular.eot | Bin 0 -> 55242 bytes fonts/Lato-Regular.woff | Bin 0 -> 37588 bytes fonts/Lato-Regular.woff2 | Bin 0 -> 55242 bytes images/1/Profile.svg | 4 + images/1/decor/Vector.svg | 3 + images/1/decor/circles.svg | 12 + images/1/decor/dots.svg | 65 + images/1/decor/shapes (1).svg | 8 + images/1/decor/shapes (2).svg | 7 + images/1/decor/shapes.svg | 8 + images/1/illustration.svg | 153 + images/1/logo.svg | 10 + images/1/shapes.svg | 96 + images/1/small.svg | 4 + images/2/Group 2.svg | 93 + images/2/Line.svg | 3 + images/2/com.jpg | Bin 0 -> 133666 bytes images/2/decor/Group (1).svg | 4 + images/2/decor/Group.svg | 74 + images/2/decor/shapes (1).svg | 7 + images/2/decor/shapes.svg | 7 + images/2/illustration.svg | 215 + images/2/image.jpg | Bin 0 -> 116554 bytes images/2/list/1.jpg | Bin 0 -> 22623 bytes images/2/list/2.jpg | Bin 0 -> 48604 bytes images/2/list/3.jpg | Bin 0 -> 47526 bytes images/2/list/4.jpg | Bin 0 -> 29760 bytes images/2/list/5.jpg | Bin 0 -> 50649 bytes images/2/logo/logo-1.svg | 14 + images/2/logo/logo-2.svg | 14 + images/2/logo/logo.svg | 14 + images/3/Line (Stroke).svg | 3 + images/3/background.svg | 35 + images/3/braces.svg | 4 + images/3/decor/Vector.svg | 3 + images/3/decor/circles (1).svg | 11 + images/3/decor/circles.svg | 12 + images/3/decor/dots (1).svg | 81 + images/3/decor/dots.svg | 81 + images/3/decor/shapes (1).svg | 7 + images/3/decor/shapes (2).svg | 8 + images/3/decor/shapes.svg | 8 + images/3/icons/logo-1.svg | 14 + images/3/icons/logo-10.svg | 14 + images/3/icons/logo-11.svg | 14 + images/3/icons/logo-2.svg | 14 + images/3/icons/logo-3.svg | 14 + images/3/icons/logo-4.svg | 14 + images/3/icons/logo-5.svg | 14 + images/3/icons/logo-6.svg | 14 + images/3/icons/logo-7.svg | 14 + images/3/icons/logo-8.svg | 14 + images/3/icons/logo-9.svg | 14 + images/3/icons/logo.svg | 14 + images/3/image.jpg | Bin 0 -> 7613 bytes images/3/people/Group 2.jpg | Bin 0 -> 65494 bytes images/3/people/Group 3.jpg | Bin 0 -> 84812 bytes images/3/people/Group 4.jpg | Bin 0 -> 80564 bytes images/3/people/Group 5.jpg | Bin 0 -> 78012 bytes images/4/icons/Calendar.svg | 3 + images/4/icons/Clock.svg | 4 + images/4/icons/Files.svg | 5 + images/4/icons/Play.svg | 4 + images/4/icons/check.svg | 3 + images/4/icons/mic.svg | 12 + images/4/illustration.svg | 107 + images/4/illustration2.svg | 77 + images/4/messege/Facebook.svg | 3 + images/4/messege/Instagram.svg | 5 + images/4/messege/Twitter.svg | 3 + images/4/messege/YouTube.svg | 3 + images/4/messege/in.svg | 5 + images/4/messege/telegram.svg | 3 + images/4/outline.svg | 4 + images/4/row/1.jpg | Bin 0 -> 67130 bytes images/4/row/2.jpg | Bin 0 -> 40397 bytes images/4/row/3.jpg | Bin 0 -> 57727 bytes images/Chat(1).svg | 4 + images/Line (Stroke).svg | 3 + images/Right.svg | 3 + images/footer/Heart.svg | 3 + images/footer/Line (Stroke).svg | 3 + images/footer/Mail.svg | 3 + images/footer/iPhone (1).svg | 3 + images/footer/logo.svg | 10 + images/iPhone(1).svg | 3 + images/outline.svg | 4 + index.html | 2049 +++ js/main.js | 0 js/mixitup.min.js | 18 + main.js | 0 mixitup-3.3.1/.gitignore | 7 + mixitup-3.3.1/.jscsrc | 95 + mixitup-3.3.1/.jshintrc | 24 + mixitup-3.3.1/.travis.yml | 5 + mixitup-3.3.1/CHANGELOG.md | 94 + mixitup-3.3.1/README.md | 208 + mixitup-3.3.1/composer.json | 19 + .../demos/attribute-selectors/index.html | 50 + .../demos/attribute-selectors/style.css | 190 + mixitup-3.3.1/demos/basic-ie-8/index.html | 46 + mixitup-3.3.1/demos/basic-ie-8/style.css | 122 + mixitup-3.3.1/demos/basic/index.html | 46 + mixitup-3.3.1/demos/basic/style.css | 190 + .../checkboxes-with-reset-checkbox/index.html | 108 + .../checkboxes-with-reset-checkbox/style.css | 200 + mixitup-3.3.1/demos/checkboxes/index.html | 86 + mixitup-3.3.1/demos/checkboxes/style.css | 200 + .../demos/dataset-empty-container/index.html | 226 + .../demos/dataset-empty-container/style.css | 199 + .../dataset-pre-rendered-targets/index.html | 256 + .../dataset-pre-rendered-targets/style.css | 201 + .../demos/filtering-by-range/index.html | 156 + .../demos/filtering-by-range/style.css | 280 + .../demos/filtering-by-text-input/index.html | 107 + .../demos/filtering-by-text-input/style.css | 202 + .../demos/filtering-by-url/index.html | 116 + .../demos/filtering-by-url/style.css | 170 + mixitup-3.3.1/demos/grid-columns/index.html | 51 + mixitup-3.3.1/demos/grid-columns/style.css | 214 + .../grid-flex-box-matching-heights/index.html | 66 + .../grid-flex-box-matching-heights/style.css | 148 + mixitup-3.3.1/demos/grid-flex-box/index.html | 27 + mixitup-3.3.1/demos/grid-flex-box/style.css | 84 + mixitup-3.3.1/demos/grid-floats/index.html | 23 + mixitup-3.3.1/demos/grid-floats/style.css | 73 + .../demos/grid-inline-block/index.html | 27 + .../demos/grid-inline-block/style.css | 87 + mixitup-3.3.1/demos/index.html | 81 + .../insertion-non-target-elements/index.html | 42 + .../insertion-non-target-elements/style.css | 174 + .../demos/loading-animation/index.html | 71 + .../demos/loading-animation/style.css | 198 + mixitup-3.3.1/demos/mixitup.min.js | 18 + mixitup-3.3.1/demos/mock-api.js | 94 + .../index.html | 53 + .../style.css | 184 + .../index.html | 74 + .../style.css | 186 + mixitup-3.3.1/demos/radio-buttons/index.html | 93 + mixitup-3.3.1/demos/radio-buttons/style.css | 200 + .../demos/removal-by-reference/index.html | 62 + .../demos/removal-by-reference/style.css | 196 + mixitup-3.3.1/demos/reset.css | 72 + .../demos/select-dropdowns/index.html | 67 + .../demos/select-dropdowns/style.css | 111 + .../demos/sorting-by-attribute/index.html | 44 + .../demos/sorting-by-attribute/style.css | 157 + .../demos/sorting-by-default/index.html | 40 + .../demos/sorting-by-default/style.css | 145 + .../sorting-by-multiple-attributes/index.html | 45 + .../sorting-by-multiple-attributes/style.css | 165 + .../toggle-filtering-and-logic/index.html | 46 + .../toggle-filtering-and-logic/style.css | 186 + .../toggle-filtering-or-logic/index.html | 42 + .../demos/toggle-filtering-or-logic/style.css | 170 + mixitup-3.3.1/dist/mixitup.js | 10682 ++++++++++++++++ mixitup-3.3.1/dist/mixitup.min.js | 18 + .../docs/mixitup-3-migration-guide.md | 105 + mixitup-3.3.1/docs/mixitup.Config.md | 1858 +++ mixitup-3.3.1/docs/mixitup.Events.md | 104 + mixitup-3.3.1/docs/mixitup.Mixer.md | 1011 ++ mixitup-3.3.1/docs/mixitup.State.md | 248 + mixitup-3.3.1/docs/mixitup.md | 47 + mixitup-3.3.1/gulpfile.js | 90 + mixitup-3.3.1/package.json | 41 + mixitup-3.3.1/src/banner.js | 15 + mixitup-3.3.1/src/base-static.js | 68 + mixitup-3.3.1/src/base.js | 76 + mixitup-3.3.1/src/collection.js | 86 + mixitup-3.3.1/src/command-change-layout.js | 28 + mixitup-3.3.1/src/command-dataset.js | 28 + mixitup-3.3.1/src/command-filter.js | 30 + mixitup-3.3.1/src/command-insert.js | 31 + mixitup-3.3.1/src/command-multimix.js | 32 + mixitup-3.3.1/src/command-remove.js | 29 + mixitup-3.3.1/src/command-sort.js | 32 + mixitup-3.3.1/src/config-animation.js | 491 + mixitup-3.3.1/src/config-behavior.js | 73 + mixitup-3.3.1/src/config-callbacks.js | 184 + mixitup-3.3.1/src/config-class-names.js | 300 + mixitup-3.3.1/src/config-controls.js | 220 + mixitup-3.3.1/src/config-data.js | 118 + mixitup-3.3.1/src/config-debug.js | 106 + mixitup-3.3.1/src/config-layout.js | 144 + mixitup-3.3.1/src/config-load.js | 127 + mixitup-3.3.1/src/config-render.js | 100 + mixitup-3.3.1/src/config-selectors.js | 93 + mixitup-3.3.1/src/config-templates.js | 24 + mixitup-3.3.1/src/config.js | 77 + mixitup-3.3.1/src/control-definition.js | 42 + mixitup-3.3.1/src/control.js | 514 + mixitup-3.3.1/src/events.js | 166 + mixitup-3.3.1/src/facade.js | 51 + mixitup-3.3.1/src/factory.js | 187 + mixitup-3.3.1/src/features.js | 156 + mixitup-3.3.1/src/h.js | 1013 ++ mixitup-3.3.1/src/i-move-data.js | 32 + mixitup-3.3.1/src/messages.js | 122 + mixitup-3.3.1/src/mixer-dom.js | 30 + mixitup-3.3.1/src/mixer.js | 4363 +++++++ mixitup-3.3.1/src/module-definitions.js | 11 + mixitup-3.3.1/src/operation.js | 77 + mixitup-3.3.1/src/polyfills.js | 237 + mixitup-3.3.1/src/queue-item.js | 30 + mixitup-3.3.1/src/state.js | 233 + mixitup-3.3.1/src/style-data.js | 43 + mixitup-3.3.1/src/target-dom.js | 26 + mixitup-3.3.1/src/target.js | 730 ++ mixitup-3.3.1/src/transform-data.js | 27 + mixitup-3.3.1/src/transform-defaults.js | 57 + mixitup-3.3.1/src/ui-class-names.js | 28 + mixitup-3.3.1/src/user-instruction.js | 28 + mixitup-3.3.1/src/wrapper.hbs | 105 + mixitup-3.3.1/tests/functional/index.html | 101 + mixitup-3.3.1/tests/functional/main.js | 191 + mixitup-3.3.1/tests/functional/styles.css | 136 + mixitup-3.3.1/tests/mock/dataset.json | 38 + mixitup-3.3.1/tests/mock/dom.js | 118 + mixitup-3.3.1/tests/mock/extension.js | 37 + mixitup-3.3.1/tests/unit/callbacks.js | 175 + mixitup-3.3.1/tests/unit/controls-filter.js | 201 + mixitup-3.3.1/tests/unit/controls-live.js | 156 + mixitup-3.3.1/tests/unit/controls-multimix.js | 49 + mixitup-3.3.1/tests/unit/controls-sort.js | 76 + mixitup-3.3.1/tests/unit/controls-toggle.js | 304 + mixitup-3.3.1/tests/unit/extension.js | 19 + mixitup-3.3.1/tests/unit/factory.js | 294 + mixitup-3.3.1/tests/unit/h.js | 44 + mixitup-3.3.1/tests/unit/main.js | 20 + .../tests/unit/mixer-change-layout.js | 54 + mixitup-3.3.1/tests/unit/mixer-dataset.js | 301 + mixitup-3.3.1/tests/unit/mixer-filter.js | 268 + mixitup-3.3.1/tests/unit/mixer-get-config.js | 62 + mixitup-3.3.1/tests/unit/mixer-get-state.js | 92 + mixitup-3.3.1/tests/unit/mixer-insert.js | 395 + mixitup-3.3.1/tests/unit/mixer-multimix.js | 17 + mixitup-3.3.1/tests/unit/mixer-remove.js | 111 + mixitup-3.3.1/tests/unit/mixer-sort.js | 257 + .../tests/unit/mixer-toggle-on-off.js | 82 + mixitup-3.3.1/tests/unit/queue.js | 71 + reset.css | 18 + style.css | 1438 +++ 252 files changed, 41184 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 fonts.css create mode 100644 fonts/Lato-Black.eot create mode 100644 fonts/Lato-Black.woff create mode 100644 fonts/Lato-Black.woff2 create mode 100644 fonts/Lato-Bold.eot create mode 100644 fonts/Lato-Bold.woff create mode 100644 fonts/Lato-Bold.woff2 create mode 100644 fonts/Lato-Regular.eot create mode 100644 fonts/Lato-Regular.woff create mode 100644 fonts/Lato-Regular.woff2 create mode 100644 images/1/Profile.svg create mode 100644 images/1/decor/Vector.svg create mode 100644 images/1/decor/circles.svg create mode 100644 images/1/decor/dots.svg create mode 100644 images/1/decor/shapes (1).svg create mode 100644 images/1/decor/shapes (2).svg create mode 100644 images/1/decor/shapes.svg create mode 100644 images/1/illustration.svg create mode 100644 images/1/logo.svg create mode 100644 images/1/shapes.svg create mode 100644 images/1/small.svg create mode 100644 images/2/Group 2.svg create mode 100644 images/2/Line.svg create mode 100644 images/2/com.jpg create mode 100644 images/2/decor/Group (1).svg create mode 100644 images/2/decor/Group.svg create mode 100644 images/2/decor/shapes (1).svg create mode 100644 images/2/decor/shapes.svg create mode 100644 images/2/illustration.svg create mode 100644 images/2/image.jpg create mode 100644 images/2/list/1.jpg create mode 100644 images/2/list/2.jpg create mode 100644 images/2/list/3.jpg create mode 100644 images/2/list/4.jpg create mode 100644 images/2/list/5.jpg create mode 100644 images/2/logo/logo-1.svg create mode 100644 images/2/logo/logo-2.svg create mode 100644 images/2/logo/logo.svg create mode 100644 images/3/Line (Stroke).svg create mode 100644 images/3/background.svg create mode 100644 images/3/braces.svg create mode 100644 images/3/decor/Vector.svg create mode 100644 images/3/decor/circles (1).svg create mode 100644 images/3/decor/circles.svg create mode 100644 images/3/decor/dots (1).svg create mode 100644 images/3/decor/dots.svg create mode 100644 images/3/decor/shapes (1).svg create mode 100644 images/3/decor/shapes (2).svg create mode 100644 images/3/decor/shapes.svg create mode 100644 images/3/icons/logo-1.svg create mode 100644 images/3/icons/logo-10.svg create mode 100644 images/3/icons/logo-11.svg create mode 100644 images/3/icons/logo-2.svg create mode 100644 images/3/icons/logo-3.svg create mode 100644 images/3/icons/logo-4.svg create mode 100644 images/3/icons/logo-5.svg create mode 100644 images/3/icons/logo-6.svg create mode 100644 images/3/icons/logo-7.svg create mode 100644 images/3/icons/logo-8.svg create mode 100644 images/3/icons/logo-9.svg create mode 100644 images/3/icons/logo.svg create mode 100644 images/3/image.jpg create mode 100644 images/3/people/Group 2.jpg create mode 100644 images/3/people/Group 3.jpg create mode 100644 images/3/people/Group 4.jpg create mode 100644 images/3/people/Group 5.jpg create mode 100644 images/4/icons/Calendar.svg create mode 100644 images/4/icons/Clock.svg create mode 100644 images/4/icons/Files.svg create mode 100644 images/4/icons/Play.svg create mode 100644 images/4/icons/check.svg create mode 100644 images/4/icons/mic.svg create mode 100644 images/4/illustration.svg create mode 100644 images/4/illustration2.svg create mode 100644 images/4/messege/Facebook.svg create mode 100644 images/4/messege/Instagram.svg create mode 100644 images/4/messege/Twitter.svg create mode 100644 images/4/messege/YouTube.svg create mode 100644 images/4/messege/in.svg create mode 100644 images/4/messege/telegram.svg create mode 100644 images/4/outline.svg create mode 100644 images/4/row/1.jpg create mode 100644 images/4/row/2.jpg create mode 100644 images/4/row/3.jpg create mode 100644 images/Chat(1).svg create mode 100644 images/Line (Stroke).svg create mode 100644 images/Right.svg create mode 100644 images/footer/Heart.svg create mode 100644 images/footer/Line (Stroke).svg create mode 100644 images/footer/Mail.svg create mode 100644 images/footer/iPhone (1).svg create mode 100644 images/footer/logo.svg create mode 100644 images/iPhone(1).svg create mode 100644 images/outline.svg create mode 100644 index.html create mode 100644 js/main.js create mode 100644 js/mixitup.min.js create mode 100644 main.js create mode 100644 mixitup-3.3.1/.gitignore create mode 100644 mixitup-3.3.1/.jscsrc create mode 100644 mixitup-3.3.1/.jshintrc create mode 100644 mixitup-3.3.1/.travis.yml create mode 100644 mixitup-3.3.1/CHANGELOG.md create mode 100644 mixitup-3.3.1/README.md create mode 100644 mixitup-3.3.1/composer.json create mode 100644 mixitup-3.3.1/demos/attribute-selectors/index.html create mode 100644 mixitup-3.3.1/demos/attribute-selectors/style.css create mode 100644 mixitup-3.3.1/demos/basic-ie-8/index.html create mode 100644 mixitup-3.3.1/demos/basic-ie-8/style.css create mode 100644 mixitup-3.3.1/demos/basic/index.html create mode 100644 mixitup-3.3.1/demos/basic/style.css create mode 100644 mixitup-3.3.1/demos/checkboxes-with-reset-checkbox/index.html create mode 100644 mixitup-3.3.1/demos/checkboxes-with-reset-checkbox/style.css create mode 100644 mixitup-3.3.1/demos/checkboxes/index.html create mode 100644 mixitup-3.3.1/demos/checkboxes/style.css create mode 100644 mixitup-3.3.1/demos/dataset-empty-container/index.html create mode 100644 mixitup-3.3.1/demos/dataset-empty-container/style.css create mode 100644 mixitup-3.3.1/demos/dataset-pre-rendered-targets/index.html create mode 100644 mixitup-3.3.1/demos/dataset-pre-rendered-targets/style.css create mode 100644 mixitup-3.3.1/demos/filtering-by-range/index.html create mode 100644 mixitup-3.3.1/demos/filtering-by-range/style.css create mode 100644 mixitup-3.3.1/demos/filtering-by-text-input/index.html create mode 100644 mixitup-3.3.1/demos/filtering-by-text-input/style.css create mode 100644 mixitup-3.3.1/demos/filtering-by-url/index.html create mode 100644 mixitup-3.3.1/demos/filtering-by-url/style.css create mode 100644 mixitup-3.3.1/demos/grid-columns/index.html create mode 100644 mixitup-3.3.1/demos/grid-columns/style.css create mode 100644 mixitup-3.3.1/demos/grid-flex-box-matching-heights/index.html create mode 100644 mixitup-3.3.1/demos/grid-flex-box-matching-heights/style.css create mode 100644 mixitup-3.3.1/demos/grid-flex-box/index.html create mode 100644 mixitup-3.3.1/demos/grid-flex-box/style.css create mode 100644 mixitup-3.3.1/demos/grid-floats/index.html create mode 100644 mixitup-3.3.1/demos/grid-floats/style.css create mode 100644 mixitup-3.3.1/demos/grid-inline-block/index.html create mode 100644 mixitup-3.3.1/demos/grid-inline-block/style.css create mode 100644 mixitup-3.3.1/demos/index.html create mode 100644 mixitup-3.3.1/demos/insertion-non-target-elements/index.html create mode 100644 mixitup-3.3.1/demos/insertion-non-target-elements/style.css create mode 100644 mixitup-3.3.1/demos/loading-animation/index.html create mode 100644 mixitup-3.3.1/demos/loading-animation/style.css create mode 100644 mixitup-3.3.1/demos/mixitup.min.js create mode 100644 mixitup-3.3.1/demos/mock-api.js create mode 100644 mixitup-3.3.1/demos/multiple-instances-global-control-scoping/index.html create mode 100644 mixitup-3.3.1/demos/multiple-instances-global-control-scoping/style.css create mode 100644 mixitup-3.3.1/demos/multiple-instances-local-control-scoping/index.html create mode 100644 mixitup-3.3.1/demos/multiple-instances-local-control-scoping/style.css create mode 100644 mixitup-3.3.1/demos/radio-buttons/index.html create mode 100644 mixitup-3.3.1/demos/radio-buttons/style.css create mode 100644 mixitup-3.3.1/demos/removal-by-reference/index.html create mode 100644 mixitup-3.3.1/demos/removal-by-reference/style.css create mode 100644 mixitup-3.3.1/demos/reset.css create mode 100644 mixitup-3.3.1/demos/select-dropdowns/index.html create mode 100644 mixitup-3.3.1/demos/select-dropdowns/style.css create mode 100644 mixitup-3.3.1/demos/sorting-by-attribute/index.html create mode 100644 mixitup-3.3.1/demos/sorting-by-attribute/style.css create mode 100644 mixitup-3.3.1/demos/sorting-by-default/index.html create mode 100644 mixitup-3.3.1/demos/sorting-by-default/style.css create mode 100644 mixitup-3.3.1/demos/sorting-by-multiple-attributes/index.html create mode 100644 mixitup-3.3.1/demos/sorting-by-multiple-attributes/style.css create mode 100644 mixitup-3.3.1/demos/toggle-filtering-and-logic/index.html create mode 100644 mixitup-3.3.1/demos/toggle-filtering-and-logic/style.css create mode 100644 mixitup-3.3.1/demos/toggle-filtering-or-logic/index.html create mode 100644 mixitup-3.3.1/demos/toggle-filtering-or-logic/style.css create mode 100644 mixitup-3.3.1/dist/mixitup.js create mode 100644 mixitup-3.3.1/dist/mixitup.min.js create mode 100644 mixitup-3.3.1/docs/mixitup-3-migration-guide.md create mode 100644 mixitup-3.3.1/docs/mixitup.Config.md create mode 100644 mixitup-3.3.1/docs/mixitup.Events.md create mode 100644 mixitup-3.3.1/docs/mixitup.Mixer.md create mode 100644 mixitup-3.3.1/docs/mixitup.State.md create mode 100644 mixitup-3.3.1/docs/mixitup.md create mode 100644 mixitup-3.3.1/gulpfile.js create mode 100644 mixitup-3.3.1/package.json create mode 100644 mixitup-3.3.1/src/banner.js create mode 100644 mixitup-3.3.1/src/base-static.js create mode 100644 mixitup-3.3.1/src/base.js create mode 100644 mixitup-3.3.1/src/collection.js create mode 100644 mixitup-3.3.1/src/command-change-layout.js create mode 100644 mixitup-3.3.1/src/command-dataset.js create mode 100644 mixitup-3.3.1/src/command-filter.js create mode 100644 mixitup-3.3.1/src/command-insert.js create mode 100644 mixitup-3.3.1/src/command-multimix.js create mode 100644 mixitup-3.3.1/src/command-remove.js create mode 100644 mixitup-3.3.1/src/command-sort.js create mode 100644 mixitup-3.3.1/src/config-animation.js create mode 100644 mixitup-3.3.1/src/config-behavior.js create mode 100644 mixitup-3.3.1/src/config-callbacks.js create mode 100644 mixitup-3.3.1/src/config-class-names.js create mode 100644 mixitup-3.3.1/src/config-controls.js create mode 100644 mixitup-3.3.1/src/config-data.js create mode 100644 mixitup-3.3.1/src/config-debug.js create mode 100644 mixitup-3.3.1/src/config-layout.js create mode 100644 mixitup-3.3.1/src/config-load.js create mode 100644 mixitup-3.3.1/src/config-render.js create mode 100644 mixitup-3.3.1/src/config-selectors.js create mode 100644 mixitup-3.3.1/src/config-templates.js create mode 100644 mixitup-3.3.1/src/config.js create mode 100644 mixitup-3.3.1/src/control-definition.js create mode 100644 mixitup-3.3.1/src/control.js create mode 100644 mixitup-3.3.1/src/events.js create mode 100644 mixitup-3.3.1/src/facade.js create mode 100644 mixitup-3.3.1/src/factory.js create mode 100644 mixitup-3.3.1/src/features.js create mode 100644 mixitup-3.3.1/src/h.js create mode 100644 mixitup-3.3.1/src/i-move-data.js create mode 100644 mixitup-3.3.1/src/messages.js create mode 100644 mixitup-3.3.1/src/mixer-dom.js create mode 100644 mixitup-3.3.1/src/mixer.js create mode 100644 mixitup-3.3.1/src/module-definitions.js create mode 100644 mixitup-3.3.1/src/operation.js create mode 100644 mixitup-3.3.1/src/polyfills.js create mode 100644 mixitup-3.3.1/src/queue-item.js create mode 100644 mixitup-3.3.1/src/state.js create mode 100644 mixitup-3.3.1/src/style-data.js create mode 100644 mixitup-3.3.1/src/target-dom.js create mode 100644 mixitup-3.3.1/src/target.js create mode 100644 mixitup-3.3.1/src/transform-data.js create mode 100644 mixitup-3.3.1/src/transform-defaults.js create mode 100644 mixitup-3.3.1/src/ui-class-names.js create mode 100644 mixitup-3.3.1/src/user-instruction.js create mode 100644 mixitup-3.3.1/src/wrapper.hbs create mode 100644 mixitup-3.3.1/tests/functional/index.html create mode 100644 mixitup-3.3.1/tests/functional/main.js create mode 100644 mixitup-3.3.1/tests/functional/styles.css create mode 100644 mixitup-3.3.1/tests/mock/dataset.json create mode 100644 mixitup-3.3.1/tests/mock/dom.js create mode 100644 mixitup-3.3.1/tests/mock/extension.js create mode 100644 mixitup-3.3.1/tests/unit/callbacks.js create mode 100644 mixitup-3.3.1/tests/unit/controls-filter.js create mode 100644 mixitup-3.3.1/tests/unit/controls-live.js create mode 100644 mixitup-3.3.1/tests/unit/controls-multimix.js create mode 100644 mixitup-3.3.1/tests/unit/controls-sort.js create mode 100644 mixitup-3.3.1/tests/unit/controls-toggle.js create mode 100644 mixitup-3.3.1/tests/unit/extension.js create mode 100644 mixitup-3.3.1/tests/unit/factory.js create mode 100644 mixitup-3.3.1/tests/unit/h.js create mode 100644 mixitup-3.3.1/tests/unit/main.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-change-layout.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-dataset.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-filter.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-get-config.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-get-state.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-insert.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-multimix.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-remove.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-sort.js create mode 100644 mixitup-3.3.1/tests/unit/mixer-toggle-on-off.js create mode 100644 mixitup-3.3.1/tests/unit/queue.js create mode 100644 reset.css create mode 100644 style.css diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6f3a291 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/fonts.css b/fonts.css new file mode 100644 index 0000000..9a33d58 --- /dev/null +++ b/fonts.css @@ -0,0 +1,30 @@ +@font-face { + font-family: Lato; + font-weight: 900; + font-style: normal; + src: local("Lato"), + url("../fonts/Lato-Black.woff2") format('woff2'), + url("../fonts/Lato-Black.woff") format('woff'), + url("../fonts/Lato-Black.eot") format('eot'); + font-display: swap; +} +@font-face { + font-family: Lato; + font-weight: 700; + font-style: normal; + src: local("Lato"), + url("../fonts/Lato-Bold.woff2") format('woff2'), + url("../fonts/Lato-Bold.woff") format('woff'), + url("../fonts/Lato-Bold.eot") format('eot'); + font-display: swap; +} +@font-face { + font-family: Lato; + font-weight: 400; + font-style: normal; + src: local("Lato"), + url("../fonts/Lato-Regular.woff2") format('woff2'), + url("../fonts/Lato-Regular.woff") format('woff'), + url("../fonts/Lato-Regular.eot") format('eot'); + font-display: swap; +} \ No newline at end of file diff --git a/fonts/Lato-Black.eot b/fonts/Lato-Black.eot new file mode 100644 index 0000000000000000000000000000000000000000..1a165a71272acb659d06aec81b4139d06ee9eb89 GIT binary patch literal 50900 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%0D1^MOqg4^ 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 literal 0 HcmV?d00001 diff --git a/fonts/Lato-Black.woff b/fonts/Lato-Black.woff new file mode 100644 index 0000000000000000000000000000000000000000..7f98af69d221722b234916eb323b2017d765cf75 GIT binary patch literal 36176 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

=#@}=S7UT(qO^tkt`OGJAU@yFt1VZ) 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 literal 0 HcmV?d00001 diff --git a/fonts/Lato-Black.woff2 b/fonts/Lato-Black.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d3dc672d5735e994ae1efe4fb6cc949d9880f0cf GIT binary patch literal 50900 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%0D1^MOqg4^ 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 literal 0 HcmV?d00001 diff --git a/fonts/Lato-Bold.eot b/fonts/Lato-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..99165386a696a8449cf97c353f1d5dfeed32e32f GIT binary patch literal 51318 zcmbq)1yEeu5-n~)gIgF}0t|ygAUMH-yW8L}xCIFA5L^NTcXtU62^uW82iG7$gXB-{ zd-sy$-Kzhqeo-|{@4Zj&b-Gut-e+pY7dH7Z3=A!$q6&+MDa05o39)l#0kN|21LTaH zAuOU08&d#?6~xB*44?saat1rvJynF*SUOn%AogH8Cy0xq2^fu*R@Ktk2K>u4Xte5J zM<+{&9smE!)nbldBWLJhaU*A_6IB;5K*q%e0N@3%v+;vC`8m0uZ`iq@+x)c<;>Zth zb8}-cHF7pWqZNbLdpKH}TR8Ir{&@>vFkysV0%BumM*7Y7vH-#Dc0%pd@0F8;!6 z>SF(2%mAS4e|Q35_`k7?5%AkK0H8d?8JZ6O!$aD2*|^wDpf6Bx|If+)|H=2?g!nzh z{{vLg#m45ZurmA%E8u5M{qGthTT2^{hgJWxKm+`f}-u3t)WgG!Okv@cK^(Aumhd!ji7}1doc$G5bD{+$o64`6X@UqfmWWe&BGWM(9Xry z_$Ld^e{seQG=O1(yxc5>_DTRN^9w4{V>J>w6}3_dayZxCQunLdKlmWT6ox7 zK!xa^9l3u3wuC%D`;wzc?b~~2hhyY^_O{0pc7Pk{@#s?3+M!P{RJTxH}F5C{$~Xb&<;w(hbwrYcWDD< zWf_=CX*l=#QsVFOA&7$D$_2ZJ3b^Wf=7Yfp)cVKZV*_eG7$BgrqmhX<7y4Du$02X#9YU4`}j_ z0b*kVK2!~e4a%oq=Afki#o_>(|6*|hABqda#s#$eWsVzY^^3&=d?;=Z8!zyItspi& z;KQAPKy1JVih@8O;6p)zK9W|4ZXdA#T5f30m>LDK!XM?>{9K+U9;q7dKQy zT^ymJZ1T%}KPZFckwUj<^%oHSAJ(CROLi|7b6f<<3#?55meqp{v&N>Hqe97Ke>bI zo5&y402Mcp|D_vL;Y1vNBRN#&L?nLk#0M1nGmOyV9#GL$y`yPdL0l zwLjtT0oDEu4peW|{&#Pv?rQzvfSnzvY61D>FwD*lZA@TCTj`(>%S#rPh zM0ThM8~y1HD!~7W2iiaX2oF2-4E!$;`G7{h(U6@3ss|5s$j$)*n*0w9p(l8#8vO?D z=NbMFa2%XK@V|lM-~vMB;Sc>~=imlf{^^qkX!)m4Uf_R^6u;FSI|m=o@_&6o&+_13 zX$U>W+x-z1PIe&Vk8L?QfRI17<>UlH{_R#cp|bX;L#U$t3lbh^%W<{*rAxANLS^g^ z5_0kZUH$+AJ=(kc0S0=!clkFkT$})u_@BdyuVSbdr!~Cq_3wsxS4Wv za80pe^g(&`vcicRcVTF$rL)pWzfS9jE!Inf=P>S#khIxyS}X@9kwt4hyiyf?UZWB$ zUJhHHebxCA@x;tdldgDxo^qX$i-Uffgp&u^7c~DZ9jhO)Pj@AR_4k@eM3rsY=rCH} z8OXT-tmDN7dy3Y>@zxA6+;Al8Km%S#6H~;5ZbsZnQSljaL>Qf?tg($dvO3)A2RJ

&~_F|`NVUr8(> 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

xxi>mBDnYSDvIZdjep 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π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

xxi>mBDnYSDvIZdjep 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 blK&6DVE+pa{B8vJ-i#y?d~aSCNfh`GFNW13 literal 0 HcmV?d00001 diff --git a/fonts/Lato-Regular.woff b/fonts/Lato-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..50c92e4dc7b234db9e0a32703b77949c90017539 GIT binary patch literal 37588 zcmZ5`V{m58^Y$Ivwv&x*+qP}nwrwXHZtRV1+qSc@|9O5@@0WL`u9@ntzGiw()j8GE zeca{6!~j5mpO&-;K>nG4=plb(i~ltLe-jf^k^Ql2`_be62W#@48gUU(F#sU+_D81r z55Qs|)Zz;A$^byvAOHaK005x68ITvMi7TrL{pkMVmHyxyJscE5UYVW=002h(k#&Ax zu-5M7XKZWe004mg@PJ(a0FbcL?h$ZfHy6U6wM2ewXnsHk{)|~{=3s6M06_fs36cN+ zfFC(&ISH5>I{$D(4}WZ6{|96Mrn!x$82|v60|3~g006hQvJ|wf7N&+KKL<_uv0?iU zA4UI&Eq;_gy2&4z=m(?-EfA#^wk{q&e%SmV{KqFA0X^Lr8++p)JD8t+fPc;lOobpc zb7^bn@goD>{_qI@127zDi=CmZDFEP8_v70%0Dx4iy_&+{VDJ2Mrr>}d-p~FZ2IeE> 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 literal 0 HcmV?d00001 diff --git a/fonts/Lato-Regular.woff2 b/fonts/Lato-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e29b688aa7d34089cbeb36e17f052c7710709b8d GIT binary patch literal 55242 zcmbrl1yqz>7dA`?3W$Jo$$)e?%#cGPjYu~F4luyb-Q6K24U*C=2uP=NqlAQXN|#7| z(wt-pMTRYkr!Z7LRRN)R5 zu-_lUq*I64*~6`^`2PPm5VM0p9T1Dfp$-T?s*W&#tfK`0zzYDg^MN?|IDUQrb0K#6 zYoWCrAHdn!nav350L7#ev$k=ygPWK-@B#k$2w*g1LOcRuXG44g0SsIL4z38`P%9&V zoTE9^-VGq`28S8B!3_b?d9xc3uz|z-a2=V8aIl8Y8BRe@;EIH-2ITa{w|SA|PR9BxY@C3A1vr$HWA&1B~E? z4gdp~3ET=3_|uoFs|^eQ0vN%J|6@OgI@rNo06OeX*xA{+0PH`%Za?ZG0&iq(W#M}J zz+VRj{zid+oIQPN?E-LT1M%_#*f_Yk0AMf&2LQy&!2|I8-H{>`{$D5vgnvVku`;#> zAky&{WFtqL|H1|Uo&G}=0OS7`*O&mmZ36(xTRR|90${w&{0nw2c0K0KiP=b1cs=x-_it>urjnZf?JsY zz+Bt_sGS|u6%zpnks&TFfIH$R9I>|x0Oo>#1bkv;?SSwCuyJ(o1R&Ut`I9K@KzTJe zxu0WynII0Jm9>>6)Xp5?)DGt0XlM1$90wR^Zv#be;_t;A96*F;3#jGo2q)0i(Hc>I z1{SwtTtF*FOM{<8H2K9DH_*u1;-?D!6O|MxH_JJ1Gd2eYz(8Q(hK1pR05FBQ983I;-dN-o^q{C123Xk+1Me`|9B4H04h zy&d2Jn!4JUBIM|w9l3u3hFjl4JtV1!aR-iC;a1859)`emLIXpc~!zjx!}0@}lzenH5^4g3$O|5?EUv_cT^ z_6c6ZDJ>9;{AU3K;ldLB`ye+v(BdaC|6arm0>W$^p|>gK1_KdfLFn!+RBjGLmJp5Y zC*A*fjuQyI%?&pfQ1o_+8~F6r-~o!=8oWU9TLS`=_{ZR32TI-=AfVK(0R~Fn8XQ2G zTZ0oQduwn3pWPbVz}qt5;Q>Cso#6$_-x?60!aoKtJ5ce~00EV54KPso*5ClD+!~xf z)mwuLsCH{`1J!R09-zjp!3)&9H6TE(e+&paQ2W*Z0S)Y+hUPHDo#B@vfPjGph|%Af z3E}vA?eDb#LFCBZ5Dqtl+Zj6E7B++n_*Y}LH?+39r4NJ~k$31XgoN+_Zz~4E3pBXJ z1_2uWV}RJ%fwxryVn^`lmpKIKf3Y}#Ccjvmz}w;iv2y|8zszw1&3>_XfVagBV&?_k zvK7P*0p6Yr1Y!r?QWOLN0dETu1OfwXZha!e(e@XM6L?E^5C~Cwzszw1Z;1{9@c@1 zbqE4;|0l@~a0{bfB9EwZM=LlxyD0nZ(x0{dm&O}eJO2_UM8*H6)F4E?|CCfjoBJhQ z+z1hMv_pup;VG=jtIVD|7|Ld}gJ z*5CKkTi6I~u(mTYMo8IjdI#bG0Zkm?78Wo|>)(q6!~+IeSew8Np%#cX`HLft|HkB2 zgg`uq%pg0%qp~%KYh*3n=raPi~;h|MbZNl=&Y%d4UoRw`>6;lv4ipuz(SAsqn|P z2+dUZV_Sr9D*Uf)5fZBKr$bJl!oQIq^wiSP!U1lBc!BymOJEQ;P~rDB21aPB+MjTE zfogxkfdJM17aWA%s{MO!gzjqn;Q$N5^bhgpB<` zLQV+K@eeSFtG(kNU=Y`P$NvR}3k-Dp_s)pBzU!Y3I1#G&8wn9Ne%Id~{q61WKfTxC zuU`rvUL7(2Ya7E6uT3zR3(OGH2j#jQ3CTe?0RPC)qCh+2`a} z3hh`Ieihfq$$V-%aT*egX|PL%eMq#Zc=OGupuJWxW#k1iVRBn(z*=XG>4H}_X_K9? zVAyeAWX}>`A@(NLrbw6N2brN6exn3@SpL9@w?gkS&iu-|XVL8oQyt>ly$)L~qV9r> zbYw0iyDXPaAHG}O?B4F6XQbXuTIIDBF#3wsCP2#Jj(?}djuL?1dcd6CndC5ZSM_K{ z=nV~;R-K8ejK;~cDy!iF=ewx~Z12kEfgb_t2X9Z$wA(XZCNky7*=Wa+oGb<#T76b) zDQ3r-SlX7@)*Y3xioeLdIv9TUM%8sDTtX1trtZ^I-*{1r$S?gVJFj-4&yu?~)wDmb zJ}K!LW!smvG0=m!ZB&r<_4b{g6XGtI4Wo&-%4AV}oCeS%n;Sh`ubR!k&%gv+p>ZxT z1&&NuJS0oG@2?X@g=Y8lqdhP%=epq#TX7VQ{=qh!;B;2a{z@QD633+5N#3@XG-y9| zY{6Ns=QTGIc5Grs-4ey())lIZEat;)<`YRlXke8o^NeH-?p5=4w8_h$wg#(D~J0 z|2Z9bc44EjJgA7}bG7~>QbnJ*Q!4^TLlMFUW@5_2OX;HS2jgNJY$MJzIg*!!DDR+> z=nD6#DWA&JrwkOa;4a+XQ>h4&r+S^wMeGw+l%{Rk+N9{QRrrBxqPbr4$KKsUzC;PR zMx9n9Uyc2K&sBL2`aG{*8#=QhFs|!yHbsC%6Rr}0%3e2QQhhFfU4pqDtm3MfX2W;R zvP@0+N~{A9gx<8`eX3hX^vv78KoO1g1~0igv2Sgde!cx|E7t2|9NQ(51nb%Q$895x zLoXz5UXf?v8E+Qr;EgbWVp*1KeNsx$4LxWCHxi%oqxLu;(U6A?GcE?X*$cB{r_3oJ#!JBuHlU`=~dz}~> zwrOm7lsWBm8C1Ok+aajywbnh4LzBur_Iyap*TBD{z{Wk?EOIZ7ZWf7`7UK%e)ER~R zRb9qk05-5cqn7YYbNji% zUGB6Zh|8xBKQd|;_+OT+n97Tjgpr#&xOW)Z>m?92jZy0evHCaggbZ}@FH;op4WtT- zaVS)E)RV))kmXD^rXOF1pXYH}w$DDRHg8j?OD8;^Nx`qDa@Q`% zZ7q2<=4Ko5l-|KK7@6|>A5ye zKkoRNN1Vy_!u;K|(89^bKQN=Mca|6`f^8h{ZDDGD5}mZ?wY1_O>{Q(2pv5arSI@!fV#^@+mn;#!15ODb8@3tdC!1hEo= zn}BGCy{QpcGWW-=ysMHZx(+oRlBhH1PYoPbvsJZT3AiS2^SUIWrsuexJ1(=MXc1p{ z-<4G-t51E(n$9Dt_hY-eP9mmKxBhD(6F->&NT3r(8a`Pt8cD$)C(3SDS2B^A=FL%) zphgjPsyU0E75-}ETkh7l{PE&4&PX24t9dH2k4bWjws>3nQ3wvq$rVFrA>mzmP(`pj zQabyDMN7(#!4i^J?QpkUU_rS zYZI?gF}7C|MRqIOpiK^~UUi#|{OnGHo9=SgdOnMZ&plN$-Z{o#hd8R?9^eNRKe~FEciQk<}!;~ z5*o|mH=jxS=%B5#eMe?*{7kIk-@PZr|^hz2XC?D!(F>1*4JR@@8 zT7kI+cX2tAD-deJ=LA#yWvDsa9y>(}$0*cg#c7W_q7FTAex7D3y zCvDMT#=^C6DE$IO@6>Pwc=;nRy_*tko~A;b-V4QgB!0K@vTBj1xL8SlHnvbYe?^6< zi4R2IK#7Rx5xXLM=^tb#6{5rAE6LwdpxH);M#)D*@=d7cO;czU_f&&gn`fXFiLPx#ki39@J)o$JDSC3W8AUH4`xN- zZ96RHw#oovO8A*!x3F`aG}W0x`9jt{BijqpnM=Gw$Y7+ua=nGMHEXBsa~h_St0~t$ z!V!xXT~8JL1Rd}b>-bwIsw;}J%D)H54dH4nx0y06w zR+(tk9G2@72G+D#tupk#VMmgj6mcYR6} z7(_-dLld6PG@(XHpW@_0R4j{ef@ggfwi&*3kyK036U>7inlDrxeXZS$7p3GL8Awdvip@_VfC;6;R)0uldinJvv=QMveRFYe4w$C3qMEAn2SGPZPqRcrW1#hn;7m4LS zDR1^3KDB$c(b%>tN&KN=j??IvFYpBmmygn>pK<3%d!NseA8B3{+R}`H&9^;EkGH^L z-|<9DImOJ33!R-tC?y*S%apiDP->;-dyekf*!b}bKl)TUcidFT`lh{gr>ODMZz-J1 zsPuI22)%3ZoZ3wqV)-x=$cvk-s}^o7i8N-(YC)tQBhl-Y)afVGM%FTUQC4ca3Up+E z12g>}IPRBb2EGE&Hr5am)t()xnQ4QzDh2qJJe877|?hu0UKEgWdGl8_~*mg0L~Cf+4)fHpH{;7%eS8L6bi-ce_?fWg)e4^7we=7yu214yQxPnI2sLaNPgno z{iQf#YFej$7%hiA8JXJs9AAUKuI?U^d=tsEE2Oj8s^y&q8XIv)GMBerkPC@;$%Z(9 z3w7$=c#CLtg_^c6ej!VO2UQMae{bW>W>G_TYgQHSUUMW}FE5sR`vPmDY-D=q^pT)H zOa22b7R>JrO)<16F$3!fP_IKOho@>|1C%}3b(DdupTmbe+w7oN4+5^kq7^397`ST2`b`gZaiO+>JVQAEnxJv8^1KtzNPAGOUZy@O*qVO1KZNIyb-X(ad9>E67K0xtbu8 z2tl*5oi7S#-%+J)-YGy1=QR7V^!QCSid4+ej$!(@A^x^?HW`6^@`rKs$=KeKS>HxG zLcW3tqlZz@B4~+yDQPbHbU z$j45~U3qXfC;$Df!>bk&d;ZTMF;%&WuyU39kCay=*j!J0?SNJNF{q{u3@V%?FAwce z**>qZxH@sbD(F8bK6y_Xf~2Ca^iJWsk~yqUHCoFD=`_AtyGq|Bxke$odi=YTwR-F# z9ek44?PWTFKzC4M5G18lH-1}Z$77VAtGvYa&dy-)8sO07tz#4N;zF7uUoOdnfwutu zU2UDx6d;CEhCERRjIoUDb!vj+s|PvuR38%6IaObKJ5RVVN=oVyO^J}lF1ymilAtWb zm}xd3t$(Q2m`;{|`6WH(m6}cmDg@PVgHcs5szOLGXA+KDncEjr zj3KMcahA$~`-?6*m5yJvOgbAXv*=_$jyfrrZlt^?6lBtP_1rSHw|8-fZ93z^jKaF@ zp`~0uQWCE6Q{9KUO#0)D($a&RV3hj`ifK#ITj)c_iQVy0B#vVnZ2LnyRpANQCqK?l zHi?R|?AT>Jgkz77B1U8>c?y9hC*fF^8J91kMV*2`vaZL5Cf_&ecUQNk2b+tc>$tkG zL&+5JU-LN*zZ8=*8D7@RR~F1mRoI=xI+=JHes#~okHVTP#y^jtq$+El?oNT^gts)e z4lj(N`SC_bgjJSW6}dPq=-_}B=Vc_du4BJ$z;&Sf29Em&7T#!BOKmN|$JYJIiotW$ zVAjLz!$KL2w`MP5c3fmJ8~M(vxazx1DZIKGzkUedzGlqQ4yVl$z6Xe0&GZOoVQ!7V zZdY=?;lJqoK997UPJ(%nf=`m3{aD`cJoSz~{T=@qDV*ZSE+v>r2CXY5ibse_eP*!`SIon2TMhd#qt|v^Y-e{4{7ezH}9N|GVQ% zb7h`+!Rv~_$4x}f>jv9r=F7>s?r7xVdA=vhFn;Hw=ZqO#`V^LFX1MmKsrV`~zig{==Iuki>Lv6Thz?W1SQpQ!ghdJr%bUcpFle$klznBP(J8^2QCf zk9Ubc4C#rdAoRp{JOJN}K;A~})lHEq%Z zV`Iy{NFLItBK;6w!t8m)_#@<)EU;6BXhZM{h5Bldu5(goC27~z<&AA6&`yRt(Z}!# zdblrD4(>2PF;l(U_E31{Mjm?FC-uacbj#TfrTY3jr*kbf?(*4dFQTJ%CVLja(9>|! zxCW*cHCLh3gOaAr_K+{^rO`9;<@k*c=|nf;@L4gCecS@fm(icict{4 zfVPKwIa4oYTQJf`o+!E%Hde5L-xZ4mr|3tXpz$|ttfgQ#+Rr)?AMFaxt@4S zbGC0GB_DW`AkEs0MVaTbpW)`qQ}J1nbW}a^(h}s2)8Ec5UsI>YKB4gM3Eb={%j=TU zQFdz~%R*V%ILG?(VuaLhTczgBF-~dGeMK*)AhSAeUlg85a{w;G46zM`_MRV8y3n{| z3dvPDp+7Fj1#RA@H=(pgFbr|`_U4T5)1Q2B{dU6n8yUZtliNYIqA>Qkt(Kz0|t4jE7-+Q9_ zc^4%8yrWtW)$60EADs7uU3zV&%#gM$sm5whWk=lIHd_MB#!m# ziP~lq@|p(KQ@sIUX)Gnw_(AgQ@Jmvwj-4apBBY7o3GcL=8$3RL)N-7HNzC0@(BXHk z53FI8uw09w5e1?LTV}O#bL!HADNZYCY~R~1`+F65v6$OMuU98)yIoDDnI7(YAK8hB znvQ#OKO#!lxh|X-P6=*k=2n4ElyYLOISK?4;D6-v9Edn+h1w6e^EojWe&CN1c^t8% zz|PukGExR5wA9JXr+HV+9=Gu5l&Hcr9WNU?SEwSs#90(gBg?H>n5el=2?{F zm4PyTvUBilMgXr0rB?VuIau0pM#*0zlLd7q$H48uA&$qO3-b<5d8&rfK&!;5??ca? z_ta}nhc`BmQMnJ?f(~-a4#OvI_s_cL8JTU!MAR)eNpTOtFet8rn=N3t-$2yg=mQm( zx3KoZ!}LwJLg7me^Jiv{zZRa@-5DUoq8opahDj(?r@~LRUGaE(vD3@uVWLSnlv{hE z3`M4!%00q^V;kbaARRoUk}6&?5n}2e@Ag)8m?13a_*Fh6)7GM%SnK?ey^%Bhw5YpbV(VzbU_jY`3>qzP;D@|(7$q|sfy>*zhf!e^?lrhhSi;~37eA+6>XUcm93bV5N>I&*3h3*%wChNYDf z=%sTlMxOUu^&e12@7g8p#rOJF(O_H3>LIHWtW8UPRPR3(==u=A^Tm7IzsXp^i1JZe z8od1sc#csj&?M|ml5t+^lGVyb|6C(VBCO+T{#hK8tG%3B-tmc9sLFA(QzbJq>(M^F znGqW=(TR&(vD&4*{%kq@i_*S*QlDzp8By%EUGMcqE*!y#Xw1iw8moneFEguDByDHu z@XGu@_ll3{&YC3`2HhzRl9U#8Jv=O&5`QKiot51+vkkUuQNDcd@S0Y|A?VWpZkZOp zdDrXDACCk4V40FV&rOfHHd=6c7E}|P)oNb^_$EoCJ1tdRt_kIlghWbLL^q2{nT1sU zC?P_hrdwj^?W#bTmtIN8(ATC(|A1wwf_1;>+lr%ZdI5zuDFx+$3+N1opuE=CqQ;6JE zun&4a6UnLCJxTL;bw-_(j9H%n;#n2#+r&ZvK-T3}GVR2YLPKS*j;*Y@ z%3k2@&E9E<65TtI#J*5!^!dUXMsA7wu@FxYGbLuBc62e2T-`2~JP=ib-ZX^UwctIz zf@hj~)g%z}mqx-~QGI=mRRj#%ujQM=(Kkd{5)NVkWLui+wr1%^y*T>u z%YhIV?q@6EB|}eG`85T4qMDzLOb8^NB}H>*zNCr8G{)2;Reci#Vs_d8Dt(MTOJ%O~ ziRr7vm1@odV$k7O`@7OHQ$lTn?G?_qONYfGDl9hYJ+I#1G%SY*4Og#Q(uZ*jVQI-~ z&g4x?NvIDdPI?^jhvZ=EuTH)Ry-zngZlqVd@`!>&B{;n{8Et_T9|qmE#Hb0$i@~!0 zLNFFSrafQJgeo~k+isJZIuoB0KHgx4eMairx06q_tmI!2Jeria&bZvM7Az}u2i%nO zT5DF0P6+NnH!&4$sU8sgu9DdYHDi8b2!zaf=#v}}@<>UcpmmpmhnlHZn-(qD$^|KN zT=@C=b2d1GipWQpu<6q~UQa!XV@h1?>IxNeMbXlOrZm4#W6Lkr!zYjw_y$Cr>V<>V zQ8;Mg==aKL8`9-Sa2UN>b_&nW@~Ey=Uf;{WD$_E{Af5(M&jLKF0%5=oCTlu6&vUz#Ansz8k*3R^XKRv<%y zx?DCFz8IacPcJjpsZl!JFE7xM6_7$K?bmj26;ueTFDznnU=^)FvvSV}`|JGz+`q-QAZV$?snSa;M;A?enZ%Vvi@X=T}Y_oF+@mO=>e>v)5sX zkd~J{0e#ISLCG?GiDZJO()XEuWG<|?>jTK7?MI5qrUweyEy4z3xOX{2)NHd?NpI@j zwp?u@q3klf7D#oLwxb3o^oDhn;TxuJn%39XV)Ck7|v z^4GF)Fg*cNt0x9SelW{yET4C}$Y1@-^2WA?Wd~BQyh5B8uK{RNz`yCWcR^bksnzi)X*1QbRr9DV}22zt9(W&(j+NgwiQ9d z8%and@a6TZ>PnfvP$dA9mz7xw2kn^CS`uWyAYU;U)-`ICEg|Ff%wQrbf3^-gAubf`Uh>1_SFqIIJ8 z*gg<*v~Een=?ttM`1o+9WzsGp-i%fFQr6k7TFd2^6DWgG9Fu#P zp7HW3^nFR66?S3{`oL5QnkM%bvCE6KkyLeyl9ji12^Xjev9GhsS#$`K2;f<=s1if($&$#W+|aY$SjTUXHng_exNl2eC&ij^t8mlpG#+A<=JV#eeG^(T z{?G@19OK`3_rXNXGaMe-I8v;j>8oMt=EWo|GW&eZ;z1@9;*9&qHvTd~D^Jb2rw z6p%=r$zY;wyeKpL{$A`Yot=4QHdb`yYPMficmfw0>DpGSO6A>)*cDL9vw-^??i!Fd zhUNBbN2IW;^u4+tU>zcC^&?STXOR(x&sjvWl|PKQ^J_%eWaxIK&J({kjJ8a33ZNX` zM@xQDFH6Ng`auTk!^FGz+U*!?oO~cfwk1@J!n1bZq9gGXm#XXQYbqnjIb-IJV%R_K zhbc{FSLOs|n8t({m$y=WLsLKDq#$h`2Qid4enRgfaJf`HwG>bHBJvH=h%J4^M%YzW z?zfO}w9M7xH^*c7Jy*x?${(7xy51XO?Jvbe4a%*1w$31WI4QXo+gr=cjugdQ692w~ZQDX7e=63_$nUbq@ z*TelQTE{}ZWrfLco4fFKRWQDPp2SxItUv|9Z`UeHCv|ca85$&YZ84}Qm3F6Z+~E(# z*kMORr9#!$PS0OBL5(;!;~wbjucnx0JROceBmz;*@SQDNumMi@*m1Z)A)^CJDum(U{tT8qB=_LxE=4o{jINUYrz|@?=^%~+^20}20u=p73wGm zy9&RKxwi#@%FMbp@4FRR>pxMTm3^pophVG^*eHm1?s`|j025{8d*?o0=o~?WpvkhG ztGhVe(?ew?Du~di<{%ZA9b+7&@PK07%x=0As=X!?VR?>pniRpT!yL4KQ4R3*H#N!Y z@1SE$*j~icPFSfOwPE50BsU2>S}sGIMZa;&m7NTqHJ`1*P)QX2am~Xy_L)}L7KL+x z>M7eQcuFm=h z<{1~SjvP1`?Rf1e-Yl0FXLze^N7nE!(xF+Q$Xb~c5VVF!V34OqO1lQJ_uo|Pc7F^X zxf6tiI(-rW*81tGMRs=V_-W<&pTj}5wBw<&k9CT)+a781wWLI`&y>Zaq?4{gp9 zeDbqZIzkz#lnx?7$eD5{8yE{((?#~E&}x)N2e}V*Pt`Td08r=|O&IzS6vS;E@Z#JC zg#XI5xWT%r7tLK!=g}VS`{{1-yG!JezMl677jcFwDihZ_h5JXRs~CyN1l?b~=w*E3 zoRE+_Cvie*57PW{AZLR83BL|q!n1p7iL*Ou3W+F-*7;14{;9HLwbGNBL{sj|4G)5z zLeOq8jIl`PW48%_*7l13y)UPPtHSc)Jk}2+a=feg%Q z8Pi8iRq>>)I3&@qbyZzUl^hB8B=ZJ&mb|KZ*+K|KGLi7Q&IO9Y(CW9x#n$O9iucmf zJ*+v&SHFX8u^C(zMfh;#y1_AeGF4?gLZ5LfSMhKhOM={Ad`>zJ1piR;@MstFXs!|+ zV<5Z>B6_&ylnkwfFxSMOjh^5?l(8z3@iyTA1TaTSX{^UuPnK1+4kujd+fFdFEErAz zSC+9aTMYI`#i;9eogXJs=@739ABeE+e7k>-e!{R|X7f?b3C|ZVQaF`o2_{HNu{Zxs z@vFvkPa#SB(S z+Y9<)kGYgn`1r>b3+b4@i>qafNU;6MCqCUcrR;%Kq>@@Cv*zG!=_NiJA`AH@e3xO@ zyd)noEfhnPW%+QeQ;XS8@9$jb(ZDlkO1Z>nw7dk6(=nXTAOm%@BFvL05i0L1yx1++ z+=ze*vn52R9QDggGOGpUU+Bc6BpV2bPP@1iit?VL;T>W4MiBz$=Ol^iRd!4sQ3N)%a>bQK>Ldz{I&SW}I%Sek$%9W_hY_M^6iv^+5Dr2H)ZGRyp1SmWirM219p0Z*|CZ`#It}jZCULTr7=f=%jE|gerX_&sw=MoYrbM6Vr9J`zR!2ZbkY*B#y)-4 zB-}nP`M{8&k)^~0a9m}|p}SWSuRV~y=(p32;(akG|5533CC}z<%=!i2sA= z9`vBdnN`s>i?U+{xzbR`opU%pa4~k-W7S#i1BbK1SiIBBP)_m`rrswY0*{ZA#No*4S}g6)Lr7ufi*_op-p$ zNlJzR{lz%1Mg>VD$zQn^cJ>b8z3PCwKRNye5xyxbG9VQ9T+GWM<$|zrk z9Y!79pmJELwyi8U#~F^d3%L4Ip2sj2kaJ(k2L@p+mD!7yfA`M36FcmrDF61l9}{!J zsf9wc_)O}J<;c8eM6~bv2f-!}gA=!laiR(qIf@EW{$id_Q)7xj^3vb#DXU8u^kDW} z7hWe^FP(GdK5s@=0)0<((4d8ShP=a8XH<+ysL<9~di0=Fn(~1!=p&c3(V{2xqHwTf~u`Rkc;&q}e_dvB~ExHak&YiWSI?*fL(tD|q2;@o&HsY@U(Zt1AaQ z0E@hl#3C-$j(*^(f=2)4v#k0(YX0`4{FeKdn8c_>jKZ)?S@EcbSK7`6D6XXjFSnKT z)o8T7HF)8$$rlR5a%sDCUl=9k>2Oqd;ZUX@s+oi`C_4g^?#y7lk{_7f+86719(0cG zyamW{rfpnIDayI7w58X6tL!nV-L(2jbe=?SIx7(BM|T+QL0^J3_VxRNGxS&Zx|BLC z9Hg3BSiIk4o{XFN;f7K8X()K? zKx^yTob^57r&eZu1?4haZ9=q0&8M`3K{tSb_XG!)mt>D(v&X02vskP0?3xxNA7l~* zJ9c4+Y#d)ga0qzkkh@cU(BA`O{a8nJQ-TENEOf5G6wTQ-qp|i6)cjoIM%+{J_ebCp zH_AqZkq0HH31*Kx12M-q)Y7)%9POh@wbpxECUnFaJg2^Re0M_{U%$2;Re>WPbTo=nz3i;5m`Cw&^-l2d4UGX&|H_O<_5@6|f`%*RD9G@}lld@$C5 z-O3{}DtzWR!kS)1AE}CAkwQtASeylnF#)z@dCc2kzBOvWyy6nJ{1h;3c6e+M)2ND! z>`GBoQK)oX&nno0!Y>u?lvJ^ANoy&R_lZsNbHik1PoNoP+zdH3s)o**SWq7C1gGOd zw$d~9F5^*ggW}Y|pe#LAYAy3KJd)Sw6xYaNhoM0K5k0am!`_8fF^~73(Vm>n4j;W! z=Zf@YEMLdcss3{Bao23k3b5!3<3X6}ai2e2SHD6acDX9YzO_vH?NG9&+*iAPVuB0AXf8Sw>;Zuimgw!rkOQ;a4`oN4e#eM^MS)l?qe$^MHv z-qg@9VqUJR@y2CZ){TTSov$E!<;Auvn=NzUF@Z0mZTy!!f{lBYW_cEaKe<*oe4!>K zby#wOB}mjH>UUPb+G!iuF0h|&w~^xwAteL`A^vSk@VS++*!`gd3a;xhtlnu=QvM8k zQL0Q~4v0PvUX5g_(i}0ESvbA*OM0JUxsUvFs?_hL0)&%aZ~7)rb&^!?>P+l0nmi=t zd=XADCBmOIVl$C7{mf^#qktO!5k|!`;>-ixFj`K%$z(f{LSwal4I1#a{oRDey7Sc) zI+}5w85}0LpOrBRtmmSyj;jmYE5CA+6A%}!_?KoDQmPq_HkQ><2W@B5ma7&V#>mja zWvn$q&(@!pd=~!57f?hZdc?ArinrlnP4qcsLoCUgAU0N>uDTR`F`)@co~IEfY!%_} zvCha^C}nv)Ku#r8&~935v(ZlcLG31R-eyTIE6^Hwh{+zRuG4qiC25@&^!C8imAY^< z%V$5pFT?{ZRQ!a4uyLK_6@8ZoUF>5hTQ^vX;cy-;^``vd$0lm+hT_P}qp-R2MoNtI z{UY^Yj&yQ{;|F6t13?ZrNQ#W#9s0c@6pXBe?E9NfTr1fClBNY9#+U8FQkLt_8G54n znLj#Y^m|zPl=g=~3H1_cAb1w$NB8Z7bx^w@&s)t-O7Gcw!V}G|GNtN`Trd3y-=Zzd zid#gs?QxLNz|ezYiOifxx+<>u?2p^K2O4YlxVF~Dg^0U9Fz-blPrFb&#!58#wAmy0sdO)JT+bjS zEpPf;Xt>by0nCF@*$1hi}86S;ZZTJ+_XE*N~;3eoY&aDAO(N6%OOPW5z@ zyEl8I)tG<9+v$hhz*qctsGOcX=drriai$U!FI?h}l%I}ZO{HRRXPGNnHtdeRq4JnC zUB$d>?Qx`8DTv&KL}7dJwTa0o6}l3zZiQ+-f;;y4{Po0cxXWTVHf4=W@uKXVY8)sYII5I8}a`GA3)&0#~GCuF-_=OkjY1MfuuEO;iR@` zKO~d4wL_5#qvE}xC<2u41kriXKmzsl{7+slwddUCK8AaN-?e?Z*y|F=X|$vQ zgyop^h{3R$7VMqc{@)xdh!B`7$l_Y2j&Lc??zKa{|SSN7xL+pmS$F z+3xUv;}!j`pkL_JOsuj*^`5Uv7i+TdOF`TGxt*K5pz{~)Ea|qSfW$rf*3}8qMzt+# zqw|JTvECSiMy&1_$Tg3TWz?JoQK>No>;$2o(>I7{z0YFQ}89Lo_BYydRat;Y#5;?BhCRZmAu~_c^kYPDeL33(IXz`8T$nIdovSD^)Vaa z`o9v;Z6W$az8Uir(yzf)#0dq`C}tag6(TxSq^U2BAWB zzO1c6mxBFTqLU0=_ubGQcHvXC&k!Pl6AY>Ad9T@0qhec{8C;3>$|Vv?wkqGmWMefT zyRA_Pu)WJuN(H|Tm;|3E^bAy+8)ZQ{+5e+71j;Y5j23LIPSC~W-o4BmowZCJ zU4yHPT$n)DZd+LJEO}NDd4ja`Wuxehu0HyyJ>6c`+0#V}xx<4$A!#vF#;Ll@>j1wRazuKh&`MTA?Qk8J^!EKX{d!-!`6%^?S*F;pyDM zV-iq*4;NlDl>)4ROPm2E#fVLF zwE{1&7B94~(S{uf>;$fhl`AaM@3i#W5;HH-K4#k>4KNDS;WRB%iY82#E9dTrtxGV& z)w2s5E-Yw2&L;)twl8_`CPug|o#yyP&*-WRPe0|`wo7u?_5X1bTH=rlr;8%%&rwn5 z{LE^}Bk7Rm*s5YORpFi4&`S9RXZG{o<2eyN@&T^Xv~ExUYZU*;No{;lGR)5=Io|KQ zQ^Siv7GN$mjY$9R>#*(bfW4tugD{u>CXfUehKeyFk2`x&yOS@t>mhESA8YelHC`R694VAbIK|bkOo0!wJIk10yYhA8okTV~Pf0&w-yDIM|R;M1;K4 z4z_!`Y$22e&n?SW^8>;}P)WR_6iHb7Idm8TX>oO|y*u>XV!16SRa*N`3Juc55-y)W z0^r15S^$!81=6P!%)6>hj~}?Mt?%0uoO6nJnWfjzel93(4mhSHkN>&evjtGsf#o~H zVcGK1GdrA!Q}nV5=UCQ(r?1O&QSZqWHm8|c)&gm*D59p_Y+d3Ifix~rl(eoDL30h) zp|0S=CC^y}%9XeZsOtz(DgT~?--6K;kd?W*Mmd+RlS1NKLf%Yuq#r0Eg2|EvJd*`s z9bUEk9b7Q5a$aE;#qqe{m3b{;!nD7Ic(dQe*!ciU4KC-1k(>8&c2SC=YNRE<^x_Y_ zb1A&vzI@RA*M_7z^=(Ot*zAwc>sCj04d6d7$ywp2mg8{XDtJH&cjLM0ZWk{X#a<(u zTkeg-D>T1yPJHD#?eej)hg;@lZu(+GsmO^1ZIs$7#Y^xKkO>RU#7iaE_NJ#D@i%fgPEKC&|7@YiH_DtY_64Z)Kw z3I9||`wu}gYR_B{LitV2c!bxR@Ez>FaR8<#LV&<|`HySVtPE0BA{7~WyHAaIrQw3P z@7vgS=_0qyPXAV#g%$xFfE~$`SeWaEWtL{3zyz@_&<`p?yFyc#t@D(laTv_?)TdQ&61uPMoz2M-4A45ye@q)vKiS~e%wJ~^k~ zkg%uRoqT-SpX$69nXvWZVEAcz+*uyxZbQYwE2)0P>SQ;y?t-Zl3ji5hudwvQ=P)_8 z+;+uS^zq9K0GmLvdv|O*yPCi!axIRWd1{92 z^kb)|`c<$kKx1VhfZhNgQgUPzUfNIWnS)PHr4!kJ1_HOZ4hvEC`?=&t@kn_98X&e^ zI(Fp8a>l*P@Ig>+*ym23|K<&V8B`^w1E)7}X$Iz>?ejOJMIo|Zc#V$Q9!{48KGnMq zzu3HgCScvSII5?#Fg(9NP9ESPVAue|o7ApQ&7^o}T86UOA^WZy$*hSd?bT(Vx)?ufaHwXofNk-ndCbT$n_ytt_bDzIeus zbZ6=<0wHSZoqoTt)6D3N!PnW0&Q6Av9lb3tNKzKm^!IPH{{0P)rKQS22`d$&j9|o4Df6 zCc$N9qbBuR=TWyW*K358%LLw3juSn&)&{mj~4f*nhpy0Q195w0DdG z28T8Y8L-cd5{Z1Tj0+9t<5R_A3GAjZ>w0BsT$n_q>9NLZa_>gFQq0x{*K%k+mWmXP z3vlf#P0+Fe$Y^wP=r`$|z4hXFGN7J7zWQ`B!!DHZk}Kc!5waGa@pd`GS5fF!6&MOB zbl~i9l&3Z=Vq$&}n6mbZYt9pH0Sz_ZK@8f3iinFly(<(GgG@xiY z0n(POU)w~LDa|ZuSP5Ko=j^Y?V_&%*R+>umK~Y+hGDh8{LYEt$R!LhhTxAGORnu_@ z)|+OWEKF_%WhdN_b`5}P9aainkm6$1f#5*E#?<~!Z^fJ{oSxum#cP@*`oj#t^tk#2 zkZJo8VB3Zu@ON*A5lw}GPTOLtR1vHC$5c+Z+o4ter9X{7!OzTQ5^&EAw&zc0vvX55 z-;+rh8B7QDI|c6c3>+@?qZ7c&qM*o{7h~CdDs=#A1wsc*dh$8r-XnruIfMn0#<5g_ z>uScn5nlCNz9-}ykGGC`O8A=!G?7Hv22fM8rl*W0b{T@hI$JtStxfHrF4RP*G0}MO z^;QY_uc7wErBt8WbW1nOzmU&zw8#AH%eXkg2!0XI;{^xy5oOdXO;FO?8D853ilvl$ z{(&+vB*HA0D1sxd;)TToeqmS?#v(D-99^TFRH|`cF8FlPj&n=+`y4aI!$-z7W{b={ zg6E(8^gZ(sPAz4Dcr>QzHMoA9XwI0Op3f;&`nCfRt9U88Y^kgm{tuGPJVCVred*lA z?yLU<2>A=$0ODu03Qf~V#aqy!D|w+TY=^FHQcOt0oKHgSb2DVx}N z2I{NR51?5StZuT_C_&!32uD~Svm#mAsTi*v#_Xas08tel1WAD zMJEa4`?_dv+#-xT;%mL|?SzIlE!J8c?CIIuj7db2j1Zd$R;JF+oFS#hYnTk;0Kd-h zapoa3goTTYGN&gyi8d|77zr%k*3uOp_t9b>D--Za>z^?*oZ*gP3J`~Hv*J6aau`Ce z<#_BQJ1)ogA|D=y8kd!{)0S+yq-3-)nkyYBFRISu?|}CS=RwLiqo>p#2S>Z4l#^r; z!-p|HaPr@tbV_kqN)&s|@Ul&cr+LJPN^UvH*NQ^ zXpDU(;Fnlf9w*9ICU$7fR?9Fr-RCJc(GID2I&ZK>O|Rm9N7RSwagXT-+Z|ttrj~g$ zqd=a&Yp+zcXSi<&)n4GtQdzCWN)sv%E5Pl_+!viNwpm!*<>n*|V^~eL5}MIJbCaet z8W6e(-TJw7nfJ$YLiz$akDL*ON-89Wyk}5-k-U2k2SaDgef;R&H_Bo#H;xc0NgdMI z!x+=C^nsv=x*Vn-%GxGi7%x3S5TN3&gBYBPxt|X!V|0crDmW2-E=OP;-)9&-arGRV zDXlD0&-55-Bhy#qT2~k)FlZ$@u%#11>u#3jAvwGrS7+?yqHYHlLDu=$ZudS zh+_w2-sOMK)scE>KSb^pMJWJe*uyt93TE_76u>8G-&n!smA8s{yCWZBH^I8x*MAS9 zhAMxv<@jmembg)8g%zBw(o2`ToU%21X+=Fo99|Pj2oKVU`u(O z*13q7oO%vAuKPd{4!xtMnNk}^&(7>TtZ?%?jt$QoF_i&5bVdysI!gddxlPjMnX7wF zpK#U?T6X$=xi*_*H~;g%p}kz8@#^7(gG~A5K)fyUB1^{ki9zwbl+qI#wd6M23iv-6 zHP+D)$Jg@9zFh;oHO4gDXFzPTgaK5sCDKgjx)m&?%_`Dg3jLX8d9;wIA=J44j@+;K zrmV=n_zKPVmep=hFt5cp5PWqFL}^|OUrKFZ;F6DepM(mcwD_-p2Lv9O{9p)RqM;T4 zQv&9cl!Ie!ByC@KDOL3^y531$@=$}v#(xNXwO#{3B>_8*SVupUtRI>l7L@{I7UwCS z4UkmshL$(zw4f!M*75p#?xl|qN9p1Y!DBpZtIpRWN-^gbuU1fLi!4L+E?`NQZjmdm z^fa^WNYD7mDP8Gmvk1KT_%SxXwbU0T4@GR{)p4!P5}ZVcy5A75uefVtS!t3Z#Kbv1 zhDqNms+yc7UYUk+`L}Xtr&9cn3$DO_i_C{?pq$Plvq^k?#+3N81lw>-J!<1Q59eAubFV*d<8BhL#n*owm8G*?P_aL;^no+`N-SV{^BZ zI20lNt6WR0zjP!fOa|DAF?)?6i%v&zn?O40Tco-UJoSH}_eSQjZC8@Cr+zq~q%!{@ zqEhkbdH*zjSP)>Q=OIw0_qt)m#U^ishw#G$YkjhAzM=TcmqF#P*O5Tkja*1c4j2De zTibv_V0h&y@~f0`UUaQ(S-HGZWwyZX-~+5b1(B#gsNWyXC+CIRT`BH=EW?vAGoG&B z=6~s*&QfRT4AhuScR&~G5GqffIh_MR_OSSoxE-`d?@~5|Qk`C5^f?jW<&=+?G08d{ zX!PGq+MK(-v{ZFC+aFrVLU+R5(sMZu%q{f%B4`49lqWD&7%aNlv1h%~*1XwuLVw9S5SfPMsRS-YH)BsVIGV&x& zxa`E!pmsWtFrQdzgwFpHrY%nrJCOSRPgsNRx=6-8y$7KHZku8m<;=mgMPP@6 zEC#sYI>o&K&+u@kP0FN}`*~kLKruEx%j)g?Ys#?Sj9(ionY;6%-KR>G#SrJwc;EMF zq!~);&a-*?M#;)|F*NCkMl&U8Be}C6Kvi%nXT=H!6@td%)ZJJ<_#e=Ca4jr=QJJu` zLB*lfpTkvGZhZ{I%Z{6X3fN7&M(s9gTVgXaD{2{a<=bRjp<$kbNpAXO^@=;x=AonD zUB1t!h^E^6AQJbsb8cy{%Q?GhF(3PE72vpZO>fQS!cMd+HAJsmd3*D$sh@Niafrq7 z?Y+GKz&!vX|9L`0K0I3FlXo;mqa-q^_ws|GC0Qweei>F-^9&~|x=NP)P`0IWC z3Yt0Blh8^6r62}JAYr)kw~|1sH=}eJs{o9h^57m6DE;}p<77+8jEaKOVR0LLXN>E! ziE^EK0hFauVo2i{oHU%1OlK}`-5kj?iRBXHo*#x4H%uDDfS^4oZUv80of0rah=&9(#UNlXR!dEl|h}HxO5=lCr!=8nf6!aFPUaKU80_k8PT%3 z;-5`On&8Z)Oigz-kCJUd*Rgh?|!=79I=C zdzPU5!lZsA#c=a=}(eO+vY@F2%)O*tDP?~WYQ9eshC*DEd zm><77DEbtzDiHao{rauv(qy9oPSV*UdtJ0;-a@9wL7M^qfiZ8w=$-MszsPTHCti3H6`wEOO^3dx|;bZ}kl0(C2X45S=@BnrrE$9{KFt;Pun#3|{DffsU5O4Hys6hOO%~r3Ojg8fvqs zU#C$=VJd zDWHb#tZ+1}*-B6{wXAXItH6sq=0%17`?f34;GA?e!-zFPbbKX2zPm%+WgdIp9)>r* zE3F!b10TczX2GKY2a;QCmBo|h;lUHv<~Th@*r(xCg^vZ9NKU38RA7ul1q_&XJ1Rwf z*Li`le1PdB=$eNXEje*qoY9M&qC~LsJ~_~bw62#y8bFAp1t>;U$zYf74xr03bdaXA zTxr^k8`vnyE*DoOD1+21&xcLijegt0_#C%RIhvdlWBxu2!zK-s!*D09T++B*(LvgSeSiTC1dGXPRJ&ail>V3w z%Det`N)=$9D8xUKI)Sy9eD{{io8Q^>8@;JhKgS+p(pkhUR_V5TfxGOAcIEcOzAx|l z-SD4lTcPcQMm1Y6=~SkHK?Lb&P%xWss`+j2YuIK5KIeU9JJ}D4D67Tx6G&>5YsF}> zv8sWlKSgIA`oJ`wpGz>%BzqLLjoNf{(#;y(CM*U3+q&xt2qmw+IC1fv2F!wX=Sr$7 zrHe@Fxs_!Z({)cxb&rHXpQp64HV|&Bdd)ggy3Yv0y4}d`zucJJNR_(7CuiBo z00~pg_D~9@pyKfl3sEPmAQCBLk)dXdxFKOkN+69ae;(*ru?Ie|O6&2o$@75=G*yD2 zD{Q--@ON`JQ#u9aBC|unkn=vXL?^s*i#g4a+!Z3jxD;`Bh1B9btq;}y1MqckXCaMG?DGG0h!8o8Ahe7_< zBHigd8>a|!xRW=TFu5Ch23wJMpv1GaMB{Q(f`Xt+^yuWCwUJ(|)=KG@E5DN%{2|(! zGCtJjT0D0XkX$H$jiV zCqyx1efCz{X_=BVc_}_!xV$OheN(kYNZh&rg)WJ$`VgHd(0DR+E;|*K2reivyakoJ znEHeXu?|v?n}YAxH1Z8>XzXB(PwKtdym><&5kd-eH+SUzAlj=Q`3R){%{gzXN!1EP z-6YJ%>XEU7JGi37$GMFrV;@FfRJdk*L{{2Ut$199{4J)m-yiw(A@R@x#Oc?9?!*qOU9^OIBFXrcjc|@Ve&z0w~1UjPbe>WQ>(PCY1I@}Q9Ib7)RD|DeWZ3~ zO^GYl>;%@(#c1J2}pH_UB#bV-kVlGW*PCXx4*?D z<(X}hvsQ%?&_cj@`7!oF2w-RwF5+Fvqmv zo2Giqx3N&bT$5CRQEDe_z=DZSj?e8#*^{^zhbuL4Nz<=F_v}X*7fP z(M%PEY0bQtqcS-geR*~4l^aaPc=?{(Gm~!(|Mv3i()^PkA|>}>B#skC*2H%U|DfE_ zTTDNXXS}rSF=K=v%hV$HYW;&;6_balnbLO;F*gBF1udrpRidsmkZg-#46=KXOrGWt zCZ$8?%EUvMtvUge0HFHbh#cvmAJjpceP8Bo8#A&wxL&bEHs&*V;mCypb&gqK9d0jX zqZgF}Jc{Xc|G^W=!k-S`zB(~tEnz8|8fF0xu&3=##!f{RWah;SkQDPa2izB^puH^h$@qwMm#L zLdzLkU*Bg%S>b=C%&DF%S@HL%!7_JDx(cRCa$I2Y5AC=hpNE&@%7|Z|p5WTcR%bIV zbH~X-F;^n=;jAt&0&cP+$%KdE7~_1K7vLa+!djn>+V4AHg~WzEv0&g9L(*memsEyl z!qS!aKkl|k0F>%0D3wUEvk0{W`Z`LAac0xEEh5;)@b4=FYHY>fy=Uqr>kCpw58-kf z#*o&%Si4>qD$)5bv1wBHX(0`*?-dhPR^P!;fW=A^XriApeCw@HVFqXPReab-6tXCZ zhe0F;0md%4*Myu`KSc;NPGIzkdhZ#)z&ASMqw~HkVUW^}d5D3j$z2l;ckBvYGl!JX zdC`Xk9Ur%z%AsIA>Kbl!FImgP0&Lu?bwNQkYL;Ol47yGwrt!KP(X_0+cCe$Hasm`a zbLUtE6`7FFP~oq-59gP^LiT+f!mxw6>}AL%&-)qg=GL#ADW;<3N0hM3L+c6a?HKf^ z2!szWgTc%OxBQ)#Sju}=>RHAiAcNm(Xcc#dgvm(P9obR@3ff<|xOZo@wgz_aXCA zOmoNw?6=r}9*pHgXYB{xyD`wkJSHp&2ugU82nA0YvAlk2n`1A> z>LBe3u~4fH&$j0xFH+tmxMU5PU8$mLn{p&BzDGU<($29fW}8Z|eiq$~l|JKzsYEcLWFE@^+`1qHfWDI0QS&qQyri@bGQlcZtWok0|z}ystFmEFQ7j2 zfpv!+*F%&KVr3IuhAUWMmwOg7DNji{lQd0dw+Ozq#@;5Mqf7dbr+q0B`jGEcd~K0j zVr=Ki_=vIm?ThuTD?aEFg!Ao2u8g7FbB(bgG~(}lfdf4O(q-J*MJL`s2CmK6fmR3qt9*z0D{JAh_s?C zgJX=0$_XXM6mSm93GB)1_<{YV1^k-r3v%ZMp~|fV3@oDU}M-F?T z-Hdtn<2_x=%Xd2iKf`kAEh20OS&(>v4F(L_?HE&zGDP_esT(_YDO$}-61a28Q_1K% zcJJV7y(K0%eoHrt$xdn{2gqRT`lcv@n{C;8&5YUJCG7$UikV9vhrgTB#sjnOr!5lL zH$w!X(lg)Rr-dbDPnJG0rMo9OHLeyg)?-mbWsEKb43RO|B?+T#1Vj zjvy#PdM#9gdX(8{klmCkd!2q=YE}=Ts1SlTBE^XrJqDmm88}QSEV`5lCgMbEA*!HT z;V2sN&*RstHM`Hflr{ioE_D|gdbcTG-+&*$+TJ#qAt&D@2r}v$iu-aEcW{AXAY$p5 z>nFJE8iyqq`D5if%bywU+~o=Upd6ZJWIzZo!oJF{sg@wiy&gveJqNg^?@J^pCoMK- zyYo1jY%3rPzRgP26Sku9Dkq{Jv4EV7%a^_8adl(i5TwyRf+@z17~K)5x*}6L!R9{a|%}iZ$>+ZU&PPxQpZRVUmOER5+dPx z5(V7EBRQAau)ncA1#HHy=D*W5{e25t>P=TsKC zEEl!zC=m83yM31|#^V@9mVDGg>BFCQ)^mXPlfMQYHtH1VHo6|t_M|OfWZHKofP^sY zp@9Vf17T% zIa)`qm;=Fq(0=sWBWtiBX8Kob#9{oOOsNwk_l9039O< zYg=&hXlP2?#<}X=#pGB#K@UV&G0Y+`O!tcIf+QTJ24Q!SOCnSqt%QSK;d)|a4s71N z_T1$Uc(%U)UQE=MpQ<1?C$w78#9#%DpdX~A<&7-19~hFTxFR8yYI<|kL4`OK761== z|FYb;ktK1_w}P9LzWVQ>?84T>{!=;WRYK^Gry=Pbx+cm?z!20RPyyqh?@|$TO+BFxsGjZz|Q;(vTu?I6PPpd{ zMUOyHZGkqMJ;wa3;NNxjI1U(zVZ>e-;s<@{LR1x*YZOSB@_tiYub4_QzY{pRL zY-MfMyOLxJT!C|%T29*4ff+?QtwK2$CI9S>#a*Gt|C0by7|yR^aHMlA0&!He=Rr1*wg_}tdsVpyqfkMC`# z8%Ctl4DUze+}42Bq<)HlKN?pieFaa$*i^O9N-~nY2wA=w=}WnhD0t9HasWV2XTqYk z80xXl8oVQ&771MSY*FGpXHjMjJ;%*2?0|MC@z6?H76;8bJGB}Du`+3e@9+p`3AD?0 zf4jSb8IN!_KwoDS^46C;uDm75<#4&MeQ8qALiFG7q$F1l2a}Im*=;J42|SeZk$P6X z!`Q;G$ZVodd=L`{`8i3p{1uxgi&ZoZ4YxB6DNk(_m779Z38V0s!I6HIhE% zg`!x3^A59w8c=f9@^Vz#s5o4Px(}lC=!{ov!$o@V=K9$gn|GIsi5l4Qxfs@&O(yG;u5jWVTbH|8333PWJjmZMWxHe#9$`KCMs<-=W4+Zs8WK8p-h4qG47aIb28ZCrU&l2gx+(N< z?ZaHB*EZ34t=vE@-qy&g^w5?{j zoEmJL2hWhNGs2ZXfM;^BoED%dAqDA`=OctOKaLFeO8p~xXzP(A4!VY^>21ODASz0; zuN_`_ztFL1*E7q}N-g%xezFU2r8Qm4wgv?1$}Mtek1E}@knHB@_a`Mbt=Q>n7uP}H zM=OC@9=W`nr^=m{8`rdGdrglu83KXzy$dB091d>IykTkIewCdglOQ|)tH0y)a6BHn_x$#sht-E!3bH%te9GW;>f09BG1#hTAsEhg31kk z3Wlpx*+9F9w^2fAlkVE6Me#hx;@00ObZ_zHmP~mwq?}Xrjz&@lf&@OF{-y7=49eg* z8Tzqd29BRM8jmplwn6Gy-0=IO+06@fndM(GKpw#^Dw3L^=O?Zx;GlFPJUhgmV2N91 zy9%aK3I)^tWU5S?uVRdonDcYK(SRsuUFURFgAl|(%7^Mjx8azZHR(a*dxRSWWldR| zM?%6zZm!s%<8N4O7)>!ZbFouiuO7k+drp}4FpL1BvA`JK5C$ zEyZWxd1h!K2(hQ&%-o8-whDUw_vHGo^4^MFwOhD{+=oOYlIQa!6D;5xh|liF*A0Kn zIx*ZocJf$v6A6Q3Ayp;lP`05F-)ojNpQ&2Sz(mV6G|v+%QsT}A9$k72QsI*NBZX-n zU6qOpyF=Vq=xM!!Rk^?uI+XOVdnyEhYA0!Z0Q1ZHwLtx5Qb}U|qWje*C!2s z8NR1qPB%T8Ey!gT9qhT&0aD;&C$s^X=kDmjs0u_jzV|&K>HAnIua7A_uwN(U(V5Jm zEyjcgjt2b9eGf$R!+cN0Xl+Hl6_R}Q0aNYXxcfPU;c3@i@WuNZ40vNfYRpkI^StrF zZFNYg1`C~&;1_X#8}Z9}Zp2Qu0yF428^{Q2J4EuhETmO_a-lzQnKEvc!L9#~3PYI} z!o&sXw`647m^RHN0hzIk0#%lLYekvC=jx=@aOOh}R~Rfrj((LZezRMenXgJReUiWq zPxX$ZUmaOOFQVB%QcZ_O(<#0dx|%%UU-MeUxV`uHSD3mRPnYhBIpgSw)c(+4^HtY%^qq`RlM??|w#YL0} z%DkR}yurgDfdh@ir#NdYf`I1gA3R3?>*-%%0aj`=t5d)^_sg=0qs*jH_%|7HMptUD zl0&od{Qi``&uF)B=)xZMI;)}-7*-5>JfI`7ix{3haXt%2_%9`m&G}J)vY`5>YWL9# zzDZA&*SsMR+JGK5c-q-grtLM17v>otRjc^^V{Z5h`xLQUdBxdGY&rW^ey(hqz9cG6 zn-OHT_5YziJy)3p>IPLr<|Is-61K?*8jbT-Fw`;UvT&11j7n#r5A02lOCeCO@rN9Z zHccpr?Gy9z5~s0t5CMGGH$l8-fIk?o1VjR$=C3M z{g9JE1>o@~q~~HFnl73G!W~T)aq?3G3fpHYQun%vIQUT+oHeo{9Q$`ZN~99@W)=Lt z+pYTFc@^KX@`bpGUpcv(I;*QhmBvE#1Rj#)nejg;gJH(OLKwHXF2{xcb(-i(*t? z2*lPw!dl7vJu%#&6bu#9o`s(S1LuL->8}VttuGEo~ciI|PVp9Z>OZ3~41= z7#_&7gr6UxHg5<#j@aLji1U3>$Yv-zx7m^Xh=Y;C%n~cUeq0sj|L@#S%)@*@jjnLf zW!v5z%OoSc#YtF>@m#z94OIpj_$N~yS)X;}TZ;K2psBjIp5@T0R!3Mu1}3uO5 zU=YlZzqa)EL3KF<`~nTaIsX}~mtD_L&B;yY5}KHS3PB2&XSg{PCHZ(Lb0cPGhs~7;V9%wn@xBgm_)b>V#g1HCiC^+i*H71_ z(lGei=Ri*Cx@>i@cKQ1mGLiP3x8CJ;hBmPprS_06?`JS< z#2jy8S_ACQmCW^<)ODZk4SQ6!J1%cbUrb)q>ITl!Tm>rtYpx9nmpOj zQjqRWUwdHtw`?u*|E?xv^au~V7L8A ziG?+1@Ekt47Ij#ypoQn|sPBHbZXvOM*Obp`2CnP*#SV)>Cox&BS zgf>LNGvuB#6iW`F(LUhv2r4#Y@bk#>4{}M=6yw|ukE0R&t<*v;Ezujp2Rjo6No~PLcYlx?o)61>(YRVPT>RA2#-q&A3xm@EAurosb zJaz{BTYqru2FJVXhA{(2X5qleliJonqC*X~*RS3Bv#1}dOb@3LB>PdtBtU^s_%`6R z9F3d+OZbdMRX@-*ARbeORZDa}WhFr)E0=eKk@35=UtSjrE8m@(4#NgnDpM6TjPQJp zS4w{$4>?AUuF7z28$p+9xu!xmG%R-q8F-@45zq(vfbE|4_Iq<32x8TISL!58DOb)g&-diWakO6*=B@&YF&f1V_(>Hk+qYfYenPwIqR=IgK}IRPXR(0N{bCMNipn1qFln*$Kc`oF@* z*>mKZghSOi+!=%$rFg-kby{FPy;W;}x+wQ+p@TGc1-odPJj&JS2ur$yt~xEzL4%_v zw$|Lr@`UU{k6H3%zL&+-haB~q69Hgi=-b-!A+&0`}CnHpFN@LJ4 zqH_;bQS}XH0bTa<1E*;rJQRa47~(lR^@y1vDf3hAd8mS@7YBr;UVh;0B~RKh{Mw!s z1Pv0sLEr=TyqO&E3X;rmEQ=5s0%L4h&2#8wt&GdIRwHAt5a<4FgSQqVn@nBBvO@|? z%jFtvZ&8Cy)D1f6rZVw}q6!G7u470hYWH;@*UOPIq*@@niomsEQbx$k+M)j@c^OKW zwm1tKe(G~=S=-2*FrC`K&CUKfK)`-Xt&7EkUgNz1PIj|SI#n)jL*BnVov70@Tl;zBgf3{s@a+r+IxJ-bw^(A{7{Wjc^ zSMBo8%LT#JRkFU1;rh45v;6UrRkt-Tk7z=&z)AFE{|{r8X*&zv5;-^m@sxr6VTaUm zaJ#4PLhRhC@z|e6PABBcm`ikDQiZoSx3XWB?mck9F%*^MYpqJsjUV|G+()!tpj}D_ zURJsz;5kOhYPBduel@>7H>r_8Ki2SjpfL{U)IoPVb4aD0$-IJ1ZW5UeKfg5yI65(} z|71kv@Ul{$ti<8brLyQ>btfaUx?Ds^*|dNmY5U$Go*CzstHTE!zcnH~D^W#+UH?Ox z8?ZR)7rW=ERdC`U@dw&dc44cq$uTJ<_QzrZWfRLpf5mxJ) zq2XOv2q#`B200~m#33syq|N%p_DciZICzG>_G4LM8E26`O74ynsLFlmgVogA_%0wc zP$)b*J`Ne@j5P*Uq+OOt$N-&`@arOFwL7oS1ZH;f0b5=|O9-`H+PXPx%${kjI}A-p z=r!d>=NAg-(s;a=S=<7@u*-W#Fu^D1tFI+5L;T(;ui2ljO&l$!kE{r+sm9R0k>2YC&r2NGUFF##>&W-%VW}sh zjVPwcUx+=I&S#myaG1(elaksSTd5Z{xAq**zr6p*HuYarF7(TBc#?(WcpH zCqn1$oopV2!z6PGr1Q_{cU^oO#I&STJ)^=MZ2_esPKIIFbZd4;C}THI^{7l3 z7I!k$c23kqn;28{`J$dcKR0377^2sY`H{7rfx3E8RlFEn$y0y)`g_$O!n60(S-l&P zEpF(CG_ki;N2azIi5RJ5Kpx2ttN-!f(h;jz+@{m=Jy#|gPdR1K0Xl9lV_kWdxEn0_ zq&=txcmwQDZaI_bafkSCYpZYWHRB@bnVz&JH1j797WTLnSy3$5SS*r*&qn+G)8~uO za$OL!42$Ko5f^uIF!Gkh5OgWzRxp?w)J7*~P3E27A7{g7!v05w(1%TC zk6jwBrCg3Dt1KyBgy?bu>Hi2=DJCKzrV7CGV9&xP*VNQ?D+e7DOiV0|kXfUlI~xBQ zA$3Q%yRzh^EsmIZ>(FLW{=J8fy<7w4LdU3E1KG2*O$=-IEh0y9BM-#2qV*YUqgo*q zn}{=})ubr>l*!N8cuo}^r>fXn!ki^RiP}9NC3T?nt@TH$F$E6zTv!- zRoFz%PfU7Vy^TISii{UzG5wJhP`vXIuTNBQ@A(Th{T6@uhJjn!xLrNHVQYmH3(<4B z!W&cOm$=X3{#xLv8W8fmRo36kCRlc589s4sMygRmd#@$i!hGMdN}1|UX2fbm1K9zX z`5Ck^KL3kGHm%BUU!GaPNIbG8RZuzfS%AreTSB(a z0r97kC4j;n?{ce_JbfFF#99%q4V55-g`=J}Vt;!Fpr6o-F(3w6FVzd*k#2=IB{@3D zfAM39>d=XvL2iuu7~pTmM5?Lk%}r2iz_Zu5N~rb%V6(&!N!~GV-h1$ml~<_9r7HyL zb~dR4wr4w%OFC$$%0f<@>XNTV011&M{-~wyGp!R0k?P>w(J^wf!>8i@{&dc=j-*c* zUKb97SV_yFGtt1|LpEsuV?dn0fxp>+H_lw;LQBl)ovGwUJ0LK>Z8T=Z8Co2uuL-HoM#DE1?- z`%(ZmWh81a8#P6uOd3v1pJKe}N$(I;kbcY>_yuO2X)vRq}Y^%$rL=UuAe&!4aMm!pQJ+dv%1NVi)DKi_XXt30^GDz8U zf{669v8@^jI=Y+~+wucdPH(4oO{{`vFnnWDS~Rfap%S3*;EPEbAEMQb%?j9Z(A|j@ zYRyM3MJ5Z9-+EVeu^H_p+~tthq4TT6thkqi508t#h$1Lj`gN?vidd&|OB+wDSQi7c^RznaoF{=+a6TI9ZFCn-M+x*#?W=T z@JHkIq%p1XmD>;4OidC(g5f_~B0-ts)dN{%%@N9X?x5iS#vzJTp_gn5tD+0{76Rql z5ny@h#dGD>ckW?4uR*vI_(7={f2n@yzj2pLB4{aH`B7}4xbH^3jch4At0s9MdnfQT$}&_8~;lg5jTwJ23H zPf>ztbpee-<~g}T(|H(sxY}vUd5^fL?*BM5Pa(Z_e1hUsIbq5fxe;>GAm3*ffxILvyL`4Mmc|dJxm$9C4cfxGwAD554-fz?!4WJ3uBAl7|e+_n2;(H>Pv#{+BEN zXcXirI?wm(H!5FvPExyMo=Dt6VIa5Ty80Yg{?y?-$DVm*VP^G_1AYtD&Y*Y7)W}(Y zC}m&*YiUe|keVMHk@?cs3>7($>T6KvT3fipF@H*G8FBi%Lq|j2U~YG{9i-f#Ar*|5 zSnjbfjHcpp4os#gxeP0nWL5urUp18zG*07<+5IPdz`a0eCRbD0^xe-pgDewYf;buj z#;g5_Axt@$oZXK;O0g0{pXR+8RfyW(vdN_rqr7nSEcedOp`HJ4BqooIVB zPzeu*T&Q~-oPBO)g3b=Jk*OQsr{x@(YXGBhS!Pu(G{tiyDAxSR1`BEGO6;DEbp+-% z0-Yr&*UMS&!zg6UjlyXP~E-ljRp`t&p;E_gN1>-1_y82IQ z0ti?YfqS-whH9-ed>6iyR=9OBqDe~cB4XwV{?Jl{&IbpNPu?Ea*a$N9$8V$ zP?^i_={IF39*W<*P+VPUmK0FYxe4{yfS%vL%8Ey$43s3&$dUSGweXj&5xcMr36)5F zV%qU$pfL9ke#wp8W|2AB3 zA>>qC6CH9b%%JMH5BmmU_K^xYe*vxksAoAc>D7%YGz;;xB1kEO1W{Ge|@6Wws0-Zrv|75A{du}I{UQXv6;nW#Mx zpl?Q4ZY|nL(g?mHS!F|kxDD}xR=OJ#XOm$>hqZ4~@2{Z09$Ba#$k9i4-0vo9r+J;~ zU+BxPjQvvon4M00Vn@KCj60ISSbs#@+E%HcCk{G66RHXVwx7fel~ieV?K*mw8ZX2; z5gem#O=R049-xXO@c{UCx%hzYfJvzPe6NInReBxBT*@FRaNo#sP>xNP9=7tdDCnQ~ z6lAjY#x#4N7ZZ@qqggzvNEi{jo)FSGs_h~X#bsf-;jPM*YEND+Te~>B5&}!|Y$B52 zu}$BL4yUNne@93gYJ}835Z2?EbH!lG7ZTMf?m=+;)Lc-r7Et7C<_(jyMCg;krev_d zwrxFhB9Gl6E3?MnIu0B5m4GLeEagl@p`-Jp@5dFJoZ0w&q27qX)O`w`G@g`%NiXMB zctO4cf$@`8z#*k%vxzR=mB`cpZiG~|bzuwHWIR&m7uOM56^nbY8o5z+mrd-7nT`Eo zJKkw+#1>FOWGqMD94Y0c+LfE=+A26dyRE8(m8 zE|{~|_a22HDO|#-yC0jR!N}**iT5~Zh?}-UiO@T+YQ1jwC$}S@*DVm&9kkEKE~&;6 zgqxG+Up7?{);qri$AzI`Tr)9 z4ojeZ^-VXW6lQ3s9Q29zyY}eU{KJm+DdO zWq1Ea%TJyX>!n_DwXe-e4!)ce#pnmBi!9XCLlETfc^j|KK{TdNfBxy%U7!w==zoUz zL64Dvc6C0k7rk%k+BRb@nOy&;6mo4mT8(y4=-|)U2Hg9}gzaA%ZL-D(tl+5MdaWt2 zdOzkD7IA0ST-owdhZA_JpE)21njoZhKLqtZ4_Xe;-3aIV8q0-uHTNuQdd9a;6+pqj zS%>dSO>!~1qkJ~oS1oUacgt>com(ty3HeV`5mhe-1qa&3y*X(G=QrWc){>Z=akV-P z_Q2LojJ}}x-2*VC`fA}YdBJ6{V1aJiCTXl?dlX(L;UEL!NLFbx<;n}=-Am??YoI0C zwf!x#rl%Ox;m#M%!MQE(nOEC&^d(1&Lc~p%3Y39J&`TMc2_pa)|3w+{0UWiLakOs3 znbs*~<{B7r1*(h)8hHQW&sWkT`=mHK>C4&%p_?nZs@k;GBuRfZIJ2)sMKUQ_uc>XP z8}bN3&(!NRZSUJ!Oi+_)8&5%VvcKE)yp%=e3JY92#(>cE_>$O(jr5FCbkFmL!^7ev zw;=yliM@Y)i^MB}%7=vQoW-1AZA{NsAB#G=Y)iZ;O@PH70$3+(vadCEk9S=XXDd(D$Pw?Ao6&+}S<=XDY#x_axXi<6+mp&Tl@r2gIyZhu4? z(Lx2`v++T#lG5CthpIym+^K!1EwO@Ep=0=*~xBg_5-F&oY;J;aJI-TauYD1 z7R^hwADqrEV547CO2RhT;~6SnMnCXhHGuu$mDy^(p+iV`z+iDg0}6coX*E(Y_$ zPOP)S@nA^X#HRVw4ItegjrWFEZ|^Ah=az7&oleYNa=bXA zNlDfT1b8LbNVf@46d$Cn&qxqKC}>8dq8f1Ch-$nySgF4If_vEc&;k)aU`E<^Hc5AGnWM!m zQ?4>@7_#GbM(D0bOy}9Z&q(NMnHbgsjU6D@I*ivkC+OW#}kj=C`! zC>x$;%NFgKCeP&)1ksN(IbM9NDS$=vL=Ij=_V(r_slSTw@rvi3^>R}|*2OMG9u}{M zoAHsyH>>RyL%<9;%g|uPL6C^57Al53Z2Cn{W3%q_X;3pd z5iKbL4Ejn%A?#A$9u)dcoPI`SABtAPoWvU99ohhV+?cXT_sKm7$xs6#RF8L=MTR(v z;1`!0y8%s}MV!vBrza2v3S5!P1b>yE0sXf>n!Ub*sRVWj1p{}fl^`MdYnYoWtt;EtaYklQ z9iRbqS^EUyOjr+!&KJc@217ttsc*5821#&8Ap3NA7L!^F7?)v0oU}5JlEjeQY0a%s z3zaPV3V3PTse@Nkjsu*gKK>YF3vOzqAc+g8szW6JwI9aR)t*HKRjjnoNq^}~B~E|5 z_Gr+pYwQ2l4)^?TeGrzvK~ne4%RalBs%%kzJ4{Z~>5 z1KfnecttvW5uiG+2MR1sP$T9zEQhd6tz{E~B;AvQnIB8c%StfV<65rI-=bfkD=0k6 zg&&6Ptc1+8K>2^GLO!=tXKwcRyZT?-dE&#Hj*@YlOd(q?p@)*#`= zoaLfW0!Rj=%zagC;u}IhOGXqXq~9NSI7d@BH)>Egk#wOIUHS;8)LB<_A>xQdr1YFG z1%pclu(MPT=VT!;9yOr(V39(@l6ZVT?3KmyN{xk*-gGpt@`oJvqOeB*+yYFlwsS>i z0nIRopBe{kbIGT22Eia}o3jQ7>x!V237Bh`-vg6N~np zXT%=h9`&%7*{A+|C+chr97Vi`=8p%oH;3y*hn!Hp5ms}jV0$tI=SJ~Kp$lNwP#^6X zk0Yu^zhzddo;>L%Z-g&3{H#?F&-dV!J2q0V#dvz!&UG01XWTtA2U3&^tPIH9J2U|K z;jD5oy3^3&y}xCR{$0X?&u>9y5YWk76*RdHRY`K&aF|b8n4J-j6Ax=^GS&SJkZsbT zdvc~)RN;~vJK}xqclS4~Xs$4_4~aoD240U?-uup88Y#d-=zFjkz(bie*Ay zCoE$vwxQjBB9yBr9b8LIEoh)riN^Il@FYB9V1joEJtPnfpNKrA`U$ujRXeEBSG4Aj zL|tqe;n{GllM!T;;dHm-bJXCW){98Ne}947U-vWG0;mC`0Lb8fL46w?R+I681Feizh5y(oVzV3IIpa*lmG__V6)s2#`W-A$Y*YRPm0amJ45f&ll=T zky01rhpwo_^MULaZ`(j-wr$^&O7q_^LHu`Xe1{qce9s8bM=^_2WKe-8T}^DtX&^5b z@_E&SFxBZQh6EX`;m|cMY6ycrczW&7&h8~+e zbI%}!uUu_UouG|H0#kArhI|z0n=xiFprYpY)#h$l;I?)A0F1#NttEPOem9Vo9AB{c zQtsNdd#?5qX_M;+uKk+eA@nT^GKp1d$Z`eWq!HbGI5I}YN|q(r&!tXxbpaQ+iNpuI zyAaZ~O=;L;+&(J(3>%wEs0w>i+L}Oj$pnb;_W-JRHKWD{=tz$!vaAq`mI{s{vtDm< zafgdkJj~P@Eqmn`M3g2Yo$RoX@*IR5JU(7L=R4>7)GvJs*OwiqZI@Yx^kMtmTeFH^ z89e{kGSCuBNw?JiMp4>_$l%i5)b^IeOCb|iHMu-xsT-MJpeUk2D}vjh$FmmX9V<1z zKuZ<$56y9Z*A-}osz^Ph$s)(Bi3xYCPk$C#tm{!$($5ttmzf)$ABvROnT@U^MscN-X_5v?{DpZ((;2O8$ab|9d?BdDuGU z3&?<*Cx^nfe`tnkh{5kq*_e-M{8fxnIo|&7btWQpjZCJD{00K<4cPToqLB!SdAlFx~%z^=>>{k45|M9`ig(O4jEHiS( z{b3*Vh5eqocOc>yxJ1Uw%Mfve>#Fc*Tl5XNnT*adFp*~G_9QnycD+*8mRT`>Z(8H! z>n3R*S0o$p#T3=7=XBKXg21!2|)Wq1FY_WeAUY(isrEk4!Gog)vF!(B^a{ay%>^NRxz zU4=;(m2=}3y+@QemFp!p-?*9`Q84v>wD3oK{vkscUSc^EZDGRDn>fq2%)>)3_5ra4 z8%?TxnOFQYAWj(p7-nGD>T>Q0L!JZlzM3VG{P0rLW;8bLNH}6F$d+)<=&?-Gk;K@X z=Dz;Y!!_fZmXTPn(P?@*;@YL^chW|i&$eVJ)~2f)dYnSTS+%@Fs)Ap?wq4Pcy*6!; zm5;0?FCzXBrB|&aD1U=5?i)qs>(|6IzJXEuK))*&KklQI>+9aLr z38Oie0`83mziE$9OB#oOu-UcaO$=<;SX1aWXz@#}(J8;E`E%p+q1T%CmbM+FmU>*K zS0;ZQyMN&vn%Q*3;FD5zT&6X^xDN`7Q{3sEKU2dNF#{0g!JjmFC0VrOyx3z<(@*tN zc@#(2c>VvvmV)ijwTS^(Iwb3)A@0Kj2E3(e8}yY9F0L2#l)vL+YkS)N86tP2dyU^a zIlxHLbCh^k^G|YZ>d-sIO!H-xG#*ydoBPWNyVKQ6yen&wrPKIyHV5aa?=0~iPqC8J zS#{SQ9^;UlLCwruQ!+1P=Uva4OqV8Qd7R+7V#zyKF?{a-yKaybjOc=cWkG@Z?E3aU z{h$*`m~aT~9@I<{`T3Fwsp_86UT3)2?G3*fD_oRlWYb`nV$-WO(j1!Vx2)s}5skBt zCI1zt>u%Vbp}mp@^>B zyCYnC?YED?A?UoNAHnihYC-%8X9iY|;KbiSc(jRxUl!c?Qb*KK zQHdN|6_>gTI9~d)NmXLZd9C13#*|20R2Oa2fu3TD`1n>Q2JaAw_5v9%DdR)gh_2;9 zj!-5!stz_)o>pdfC{#&0U}x#ro#@yHhw+l-!Q{$u!{jtxTO7rv0Txof>$M|BHw;X( zG6P(z?e?n$q=oUnXaMBSX+!xny8v0lO5biT+Yjc2VcXO6;>EqYg8&g#blV)_j|lm_ zo!)Jkt0$e7_FIvb+#Ccxk!#tOXwGHu$l5j0=@(lLJ10VLEs~KVGShyGQKrBX^Ve0F z(#TX(w!AaxS;ov$aErNvW7$!=crfdzxr{NBLL3@Lx^ysFJP`~%#6^zCd0=#*Gd02$ zgOz*EM^Lv?cCs?Qb88tyhW)JE%y*bvgA;5`_%-)4_(rj6EYEAznMDq?C)xs1TWV~3 z3VUdg)X5tCCirUN>4|Na{1tH&&FXmqhf3#UBQk2FkpO!edYpR@NPnW%XJUwu9?3&; zQe(}{nnnH*fnXmy93bcRIY-VJ*~rSb!;4fMIJ3t^*ApLo882oGB&yW(BL7zZ55sj` ztqO~VwQ0ho6tC28W(qY4$R8<3qvrF+hUF`k56kIk z<){LBb(J{$UdcNge5n%CdIzPTD-&!tvI`k^lF-~Xvu^?%>mQNGEwPNHkQ8Fs<-N?*cojXPVddFtD&PD%(C{ z&%i@#10$1jfEMZ@U_7W%X0CgF_xv}7=CWjDhfXmLFaLM?@&36@`CJUZU?Y@&F-r4~ zVi#A}y z3`SpGRc`qs6xPS#zB(j6-*4>(M?|_x=wC92p236TQLz*xA_kCZZvPfvs?a!Rz#^Eg zHpl`|DrHUda|2bU{w1z87dCgK%rTh6R+F|tJAl@>J;bel{7L}x-PXWANKRwa-5XFX zf7nQjEo|*g$OXRCYUUjagBQ?T9VBd%*jaV{c0S)rO85$2zrd(L$WW)4hYaO}2_^$r z0u;eMxh17y1D)^ZtWp3NC>gk?!^Lr4*MdrX(>lFf_ky?hw#p5`#g{w zf>|Y49nZNH8DTA-DR{9_RtQmFSiB;lD3!b82pRMkMfC`w+n`R_9{8!l+`gJHxY@@7-w)g&|yfR;-{Oeacsi z%b6p&*AlnjNGD}qhn5c^G%m0!f|T&EE1LbC9Aq1E)jT#g2?{+)&G6@x^mnOTxkb36 zljxdipHm+tYxwLodCbZ5G#%UU7Z!4VEhr3$Co<2Fuhpf?0`y58H*bE&> zBS$xB2i&G4gCC_zI36mIC!(J~X5xS(u3+U>R4f7B{e_He#Iakj3lK=jSCgu!=*WoN z36AxFlLgH9GYU1nCqt|Y{!p2@yB=K7(XWz7}y)i?(MYjbf{ zZD8dPp}>ZW*G4I9z%3d~jQ-%ZsmoXLk<+j36e)9mzfp^yy*!5`wrIm)YLwl*PB^IE zl%2WqNa%&@zYHM#pb5{g(o-klZm&;uU9eZR{v@fD1fgG+93Ih%y4*OUpMQ@A!mMp- zW!AB8R3~-BFhI<{h+r5c{(+=jzHjAm`>{!ZqU~dWA3781&ju{;sjnD-u1Z|%r~bL5 zI{%3^$!C4xj25Pd5c=UI5>cObWr~5$G!LVNRo9rt8TO#Rxbg+#Js+rp&%I|?`d{bN zrAM3M1s6VVULr}N60Pugrj>()_Eq$VJ%<7@wYX~Q_&u1E3g6RChuZCt!W zWeq=>;yx6lk6brmpZkAOjXXh^>Xngsx;}s_%J0{yiPspm7Dg%fJ*Sn*_7Uck5}k0N z=7Q5jtCK<|oE>~i080;Ri|^)>aWMF)UGQk%yVY@2!2CF<{Qk&ntVBvMjV@A5TCgF9 zqE>E@Is50QfBtdEe7%7U!{(LKr26g=#&diOZ`$GcA zg@;iwGLBp(@P7HZnpT_cDG6s8Nq4w!MeUou5oJgfdYF~Zqb7DabT@Loy6kOF)SOXv zsnj^-hTw@5bOjrdx|QL0b~qM;vQ*!abJh4G7D7P#SpPdF1_Xv2Ka4`k=Y(GPFFvR}d^NtCli_l(U%= zg~>b75jU7ABd1kOcU%My{e-HI73^>@^4)S(t>z(EKSDb<6rW_yYJZ=21-HT0i@UY>iw?Cs@c5EsoK^cq{{)rkiHOQi^>Z7WbP2BB0);ma zzSWM}&lj@Ya$Nnxy*A1%pQ5iP-iKhr@BG&h%G0g_s#+URvC{gX*Q&TO2SFPJ9eK(Y z5j&u%LWkF$YWZgA57lbabk)KL>Arf&of^f8iQ*G=iHx4rErRJOdbK;y^&mjk6=eZu zYJ0K?6fBfY4FyxBw=CWA<3O~no~#Qx@@SsdzPSkn2|c+KfMGWq!4~RM+&VDp-HvA_ z-|vvzdV>?OKRVB7eNX2r<^tTt9vmin+krVq?%_HhP3PvYG6b`3|7^!fH;WOGJnt^P zKP?-(qD>rFX*R_Nmbx0JFn9~U(LI2XF%BJ-Gh!XK8}e zS24!R$2-Ze@LL#kTOOI#u)D;12}^$N?k!seyyo63cpim`@4}LWYuBZ>?(kWFuE&PU zlhEWR$-rBt@Wz7*Uj9Tlg)1hQk;kJIT=Xl%s>`a7HL1Qy8L9vHY(|Ia+`Pf_gNFtb zNbm$C%X%RnDt4n_=)`GYzqm;Hw{0u~#EOy+Kj$BWp?&L1(`+R@FS<#9E*9Ai;%$v72{4Mt8%Pf zX&3qDMc?6=;pPj*6^O2Ck|yWJzpf3Be4_{yAgMI6gl6NRa`D2V#tD**dl%Ux7Bg0+ zFU&>hvYt{?m3~J|xBO|rd0J;A6nlAKudIaCduhB>uAbok4JiIsmL+V4?>OCgPfYh0 zKcuQEqAz_i(FvPGu5P74u>fW!3M1ZaN1i?0jxKSzCTUC1D8_oYH>ZQt z@>l;i&%Jci{BV1i|9u&lpvolt1}E@e)2C)rbYPw0>25!GTz~pkSbqN84&>UmBZ48~ zjMmGISmDf!YwH_}Dp-d=3hQMrwGdP?kX|trFQJ`0&;uIk_v2Aa#*Zq+1i?K*dulKB?*o3GgbJ*tPTy@==%OC6c5De(ri>>Zi$FC} zF0J7EXhmy?PgD-q<4;nv7{$KIdZF29LQA*Tit3R`Z2If(V7f$RnFNvtp-iG0gU=LQ z6XUITgIUVy<3VQquCl9KPE=(RC850{c9;U^D-9Z^2U*`4 zRl#R*vO(IwqjV?=|EJiJGFE?_D=c02wQI-cvJ=^kkQBSALv7L?E=m_l7*lOSW*Mgp zV%$ulOE~d-;JAfIG7&Cb{XaV)XvTy&@4q5LWXhIDGry0W!yW?p+&a&CT43QA%Dlys zjCTzLxHT3tCnAm{!)3 zfz74#r*~9Z`V_Ho&BTLsKC{$0g?oFceKj8`@U7m1R@8ECszsX`Xdc-=FDra`od z6?(wfaM|RsQ#4^SOt)jFEIl*i*8$7l>1WA>Go+ zx_{dJkg8d?-L=u2{ziL>35#FP>Jc1D-X@^Os>9qGgg${3*XM{Bgu3SNz=!JVCsFx) z-?yByRS_xFCRR0>Pj)rYJa66SK195-`+%_?DTe4QsA=!qY0eR9E3qUA2p%O+@ZVG} zsC6rKEl9Zl16tht0i`fqs3@SB1Fh#@QSmG?I~1v8EbMPP(rQp1jIsNaBkiY~cGlQm zsJ<(jI`nu=<=_)~_N?orSq?`)UeBGrvaSkL*R!9e){m}^Mv9_fEUj?RQ{( z@WsRYK5u<6qpuFQ??D}@o(L;iehN&MfC|m~&fD+$yYLj$A!9Cs(x{KCm1es8YS0M= z)W__*`hkSNHGx6xA;~kCal86K1XfvgfprjvCHru?OrB|vNDD!-*Qq{2DWohC z%1Y^s0@TF&=}sLd^{@~V+7HNHfjwC)`7x`u$DVnc+`qkXKyr$<{+)3gvR{8>AtDJC z&RM1>luv@yTLR1qfLMs+XF`?L=al-gx8$|@Z!74tcO99Mmd~052=&ZAxwPg)j`*S`e4n4c+$-ORFY55Ka^b1_w%fZx>IYBmmuj>v2$ z{56HZ05=`(Egp>?<}2T{^jc#RufaMGG>Gh+0rk-xLoN9YVLjarzSfhm~Xgb*HF?J!FZ9&R}uJ zPef;DW7$YZ<$TzE9FTx?12N*FgQdTpCjLw@HF0q|q(K}itw$7omfJ*l4rh`8{tr#| zLt`}b8SGH;F>x4N82u(IaJ*T0`Ue5RQ_{WljyA-AQ3)AAPEJUJS8y0BWsC}{OAujaIsR77VY4xV zEma--=baxJc+&cd1}HignpLYSgaPA5 zS;T6GOx_7AJOiZ+!V@0G&+bJ-64ZGgc^cy>yfqMRVK#zS{aGLdj1`yARUeIjdHXC( zVtif7?6xy4=?k_h>->6nIgC*HQ={9^k@GC!xDf5=A_qrZNf#@g}Cf$lPQtrHOTv5-OVM#1-i4JT4gP=`gl42 zCyMu2$1f1(V3^eIG3XdbR)NP58>`6r3E^Q*0^|(?1TtP%^XB9dbGHR>@31b`8#c3| zv10qCaU`2#GWoQ)6rXNK9k1pegjg4zi`xJeyf690)sw9Y@gU(mQo6SyX6}-;Hxx)a zLBQsM!)P=PmGMPLB!nj(TF(ji7{dU=!fu%F9Al_U&!zzY(K*+@CJ3FD$zQ65`%K3R zPSDK?YxJIith1v1cZOU!erIfz+Y{*SPA5wgk$cX^80EQsfUgfrZ-yC(z|vPacbBs_ z!a|y6l+H(LlDI=gI*VX~1?tMb1Afz&f!AQLv%T*j!S(qx_b^#vz8_5VTim@%iP?^2@|b;vB$l z=IUlUsRBOV%>AkjU}q`<3pB|!MvzPrxE`C%cYma2n0g@bao?ls8nEBQZmz)owEV+u zhKsL9^+kLPm=V!OKS-)YV5a!=-M}Q+k=BHb}^y^!$@aUtmK4|kry_z{b| z!&9GkC{sVc0?+O6w$!3asx5QrX*Uw$$W_nHU4%72ZMYL^CWu5od%@X)x*9p6(w-vB zeUIfuCI&KQ*|5fr-EyU?e6h{DeP?VbSJjl6nmH7ncyLI#;SyS_mUJ$H)|@KJf$t2Wa>)oLO2L;UdCMg^`(k;wXzy`a7yn^4W4R1W9Ixo46( z6ZGOCQ0m|Rn(~RW*nqqnFd_W^W_Lb=B8*O#f^$k_yiv*mdCNsOY+d5(^hg$K>Dtr& z)G@8E$78~Tv3DdO#8#JrE9&dk{M3kRb|N5Bav2`!YNWs$?Qxs#ASa@XlN^jC_#T9K zkA#`4D+iDc!+*cv(E45i+E3;ZJNvC4H8(}Qv7=$DInJFZq#^mRx-yvfZGixCi9~ts zIgSMm)DGyXmRK6eEJYm72oG2aad~9XV|=YD)G7KBD$ntspp4G`Ij6$yZgHkv86JG! zcVm(5!mQNCAdQ*Go?myX6q54&7M)%w95%6Rl9toLe<;dG2ytexAZN=_<{b%|0O_(V zvB<;u(u zS2(A1Eju{deY&Kka{=YpGIFf!*T?6R6lcl9Rp4QPrlqY&amzRNNneD}Occe-NbK_Z z+-j*S7i+jqXF%TLn)0sv?u$NYY`^>eCTCurS4{`%>2NNaQ@YyLmMKE%-cavwNljV_hP%oW zatV$bMA9cmiB)M3mppadyNSS=o)zbG06{7E58NH-aasIY$28~R{#6B3b|FUy^ILdvM$M zbhMQp;-~sthkmKbZpm<3#Q~(=1Mg!_#IEF|AcfTXY=3TeUh}d^NP_A!SC=i|vnznh zcQlW8FciJ;N=P@e1a@?O3$h$88XfoMe$lLg7C*U}+OxfW$ zW^Joa*?E6+t4SRyhl5J_raVz(2}^}udu^w|UzV7B-oRsvsYr|Tv&kH0%~yLC(08}> zO$-JRHo0_H=+fiqT7X^_H z4O2|QM`GSaz5RSvrB)v11*5R!aGBwNul=m{v0ynSY&RC>fLtJ$Wk*ns4Bk-o@Mbi|nU=xf)T_d^ijSmu44CF(xwA!FpO4 z#+ymG-_e?2f>ZKRU=7fhou{cWhopp+uA!%Xyk8BK{siz3ax zS^3x5eX<)C4nse|*PN?3v#vsnf5KCKsjTZNsa{vQ`m}C+%<4$(lC2cRYf~^7tbgS% znNMC!ukrW|uow(pa$zWn6G-`Gg+`fDCO<#1dTOcD0uw#hYEKa|{mdkq-Q*KDe?lF2 z_jm8Hc;Zl((Rdk>5iT$>Q6VdnDd7#tjd-}pmqYl+!E_9W6=PyhAFWc@ zbcyIzPc>5K*&5tQti6hO=aw@Iqe1rq^rHchX1P9NX6ig_o_Mv@E%Z%%<~gugtsnC^ zNPv>2x9}s)2;bs?L_uNHeoZMP4{RYK$}nG|Qn5nFL*#pi$y(`#ut95UZ(6l<6$GGr zj`Re2eGimUxs$3oHL?6zGJMPY9YrsHWR`eB2dbW<+LGsQ|!GHX&0olm$8jSgxtj#&% zN+PiphFTmvE&KI!sp6z)ZZe$Nc+0!DjO!nJMO!gl&K%EW zYkp#yeY@T!*Yjn6{&8jyxKr~5?EU5w@Z{!3LDV0X;ojeWF$D0^c2ER?I6-W6YYQe~ z0tv4SbnHgk1wP3cwPZ*~NE6Z^TWblT&Q6(4{}@mcN7{e)LCQL+Rk3W)0~5kpUml_0Clr{uuB@l_B?u+iBptzS_B#?!5@_60 z0&X9uDuW};Ff5#Qo=A~~%ilu0O9IbJ$loEScK>brMR>MN&$RLrJXxnIyJMtE??wZNMiqsRSctjXaHL%axJc;QVF5b_i}rEF%8B|T!+DTV8Mjp zyyIlGEy%5HrDP)LwuPr!VbVxovR;1nyaXo!1fiPtF9Ac}%Cu`2G8OGf zlOn!9oC4tsm`8D}*dszqeBfyYqIBO{?-L(_z=GVPWjI>I{|^XAJwugFLah5zUqXU+ zoP)mFlb$%5Sdm@-*fH*%rd>{DB-D3ZJ>iBbU#Bq^&q7NB@)&Zo2{qgyb?evG^Peaw z>XfS9T{xAu=^XQFXm0P4+}rb7Xtj2J3=Q%ZGjJjw(KUgozF5&|ls^#;Y=b01m=6wy z?GqL-Sp?c58R1bom(&;npwr9j0AwK3S_Tc+UPt|RdY5td24<85t;EjUr7kHv=hJ+z z3TJ-ITRL|b2?;)q;v44NfdL=TR z>8V~DAIQ;j2LGU03AtqBEyF}_Y4MaKI+DU4mclj1)gpDs*8>C$M{R3VwOZ<*SJUCd zm9$UNAm4%u5=rWviejs1e!i7Mv`2N`!=f00^V%>;a*IH(hd z%+*}E;0Mz2TWaXmmi?c%iix)O>S)}T}~aNjSAiQe&IqZ)fc#xVSB&I|%* z@hb0ns38hNa*iYGR0^(Swe(#mO{NP~FU-whS6^tf>g8~jYh-YBFW9z%`j@VXhV{_E1b_Fn(b(IyR; z?Ym9DQ4~3vZzyMGtk|O5=QcT~F~^W&b4|?= zg|7^KW0EGhhPfgMQEr<^Ia19LHr8^?Rf=*JV$b(~cz%0c&-)Mf{P6w*K5toK^GTVf zUG0emr73%`LMs;d-0(Y8{*<&%CohiiyQ}Ei#^)IR{P#xI$QCWMxWld_u$kT0e<&XO zgJukN=d;N!=$aEkWwV2wtX!nbjuS?$%guuKHOvx_oJp+URfThyR6EST#~;*d<3(sd ztlYEGeMoXdE>T5pmCGo!GCy+)e9OzC*jv(KglcShMCuOX4{UQZl@VcnmD&3R{rwI~ z&2Yy&;Lk@(zM+cxcfs)^{C+)-_f&!duZTc?DpY>W$mqTSEvl76!#A%>p>Cio*=_;b zq5B2hF+Ab%JMM(0vxCq;&Tg2+eW(q|In9k{KPHGUF$3lRPVlaQtwY0gZ<1R+BTfoE zT6p`?ZKn(8)G74LeB=oqcgXBgn)>=v!-O=oUVJqLthKUQ*=a~0nj}TaHtXm&nVbeq zaf({l%aAW|(`NtZ#sr=cPk&V79cEgg%B+q~eY#Giiy#TU>XwoxF1NVwx1pjS5~=V3 z~bJU=OJzu_6-HnCPIYuux!wM6q z*9V&?7ob4NxLUEQC#!pjz2_@B-C3Y@JZvWdY^stG$!}<{S1s=L7}VP9CtZxp59wzW zPP*Y(3wa9x1?Q+#lqN^5LNP*H-$^?ua6|%4k<~H z+E{bC7S`cOcd{&QPDvkK@wa}e*ws|#%@F=c#9N+*ibBM*~j`1u~!Z=dZqS%uVgkK~k1<-S_rHhzqaY|Z!LSF4Lt5ccT zZ{%iu$f|olN~QSnj)D)vXm4SZXs@T&5Sl`nP;n7thBUVCqx-u(c{Nj^IEe+pJljKK zxMx)bhmTl#5yjVzJ(S!E*ffZ=%9#BYA%X0xRizKact@qrDbb3`a$G+cA#d6VAaH{I zLOZHXDZP(LiVogR;o4z!1NsTE0skJ*H~9KQs68ix;yC_N3VO5ZCYBLp>F@2=XjY@F z%9{{Q!m=$!6--X3Ax?~Ze;fj1hq_`g+|{l4JE;0Sg)GP-1?X~ z(&#>pl}*aNlD2Gfa=t#Mpq>W^*p+&=aR_YnlANwN7ZI_y=#J2TS&Y7ZyD-28!4Jn<=PbaE`uE?CC_1UJL-<48OmNcXikV zLt%UK?pv9{(Aqu(mSh0Z&|6N+W7cJ$=B1x2>ZwM9IsW~;zuID}@H7lhnLPi>vTRK$-}xd4 zjFBV#jt83V{18^`8f98`wykj1y*EN;r}iG|Msgpiz_YpAw{dK*+VYNH>C6UbQfkET zphd`UTReQ};TBr~_{gjE-{^En`eNSga*&Gd7~Hl@o68_EFiy|fcW1=pT@)2F9DSHh z(GvYKkGC=XQD;f|mjK*(X+7bY2)A{ zWU&lpwzQt^RUs~{QMkJze_!v-O$QjkkY%5ntV|azrp@S?ub6~@3ljMO0(^X;kpGhZ Z4?rOQ3l4DC0{pH=g%SL&UlmOh{0|1R)gu4^ literal 0 HcmV?d00001 diff --git a/images/1/Profile.svg b/images/1/Profile.svg new file mode 100644 index 0000000..9c8a2af --- /dev/null +++ b/images/1/Profile.svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/1/decor/Vector.svg b/images/1/decor/Vector.svg new file mode 100644 index 0000000..2bb6935 --- /dev/null +++ b/images/1/decor/Vector.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/1/decor/circles.svg b/images/1/decor/circles.svg new file mode 100644 index 0000000..73c1268 --- /dev/null +++ b/images/1/decor/circles.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/1/decor/dots.svg b/images/1/decor/dots.svg new file mode 100644 index 0000000..b4e46f6 --- /dev/null +++ b/images/1/decor/dots.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/1/decor/shapes (1).svg b/images/1/decor/shapes (1).svg new file mode 100644 index 0000000..1510690 --- /dev/null +++ b/images/1/decor/shapes (1).svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/1/decor/shapes (2).svg b/images/1/decor/shapes (2).svg new file mode 100644 index 0000000..4073d43 --- /dev/null +++ b/images/1/decor/shapes (2).svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/1/decor/shapes.svg b/images/1/decor/shapes.svg new file mode 100644 index 0000000..bc99b00 --- /dev/null +++ b/images/1/decor/shapes.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/1/illustration.svg b/images/1/illustration.svg new file mode 100644 index 0000000..a203259 --- /dev/null +++ b/images/1/illustration.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/1/logo.svg b/images/1/logo.svg new file mode 100644 index 0000000..6dfab27 --- /dev/null +++ b/images/1/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/images/1/shapes.svg b/images/1/shapes.svg new file mode 100644 index 0000000..5913c51 --- /dev/null +++ b/images/1/shapes.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/1/small.svg b/images/1/small.svg new file mode 100644 index 0000000..252ae23 --- /dev/null +++ b/images/1/small.svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/2/Group 2.svg b/images/2/Group 2.svg new file mode 100644 index 0000000..41a7d09 --- /dev/null +++ b/images/2/Group 2.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/2/Line.svg b/images/2/Line.svg new file mode 100644 index 0000000..d74cc00 --- /dev/null +++ b/images/2/Line.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/2/com.jpg b/images/2/com.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34be700a780b9cf6a4d9bf13f973e0c675142094 GIT binary patch literal 133666 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%0AqoqW=IS9RkOCKbN4WcAV-OV_veFjffc0RT(n z*wmI3O7}>%1ga2b^>%G-*Ym7;IU@tr7eFPmVzxY2(wLIyaRafVvT&I%Yl0#b$)@D? zmaZ7EjynS#{m_t=0_QU`6Gq91`I-$r;c|SPn$jH^Pb5R(|H44taJIbhASHL1-%b?l z9o9HOBVpQ$g^=t7*>M=K8%uzW{*Pq$#);kh_r0>hEQADf8eioW)SzBGNrTz9%H2^YkYPC|-Vla3+xDHD>Pxs-jHp(Fc@wwSEw&M2Lk`Dwj9 zs%aZfy>vJkon!{>1VvRtz7{dreC&pWnV2VXLnFly)NpKvIel#eMuv5GY{a4*u`n2- z*s%V7oz7ykF0C){s;Fj-v|N$Pgj}w|EF!hB*)kxG3%KomBG@eV7n~_nwkK@_uLqM_ zD8yOH?y_x|R(Qy!?cou0*k@j+MV45h=15WjOm8_Jx(3hiWDpkrL250lql@2Y-v&85RyM zS13dCJJP@9X3L=QS^cUj94*6BljJ%gvHm2$$}@N~?nPDpc`mf9oT!G90xH;{5A-KX zN9t*A>03pJbe4viQ8_+o>kK)ut384(_IaF2YmQzD~cY`%pOw~r_9W5EQJ}8hvMzWt`hDDN2;Qg_7Srn1@ViB>*wO+ zS5`7>z-|6+?N_^&oGmP@QJRe+VObY>uQ}dCHP4dLKaca0sxzAnD)M7~E{t_UHfXLy?Rxlfcrj)lmN75R<+h*(!K zD`lYd+Wi8OHL*elpZ++-y;vp5#!D0`xBav|6q z>g|+^gN(>`X73w#rE)v^CZN|7pSHGsQ>)){&EYt&O~f;DjMjsuAB?w?c4*8G=Lc^# zB1)?f6o7S5^;M%@&@I3|GSR%k^=m}s8nuaN%O&y?@;&VE!9piAI9Bf&cbWk3*J|5G zA&+rjRIah5;FeVImE7i*d(i*fWAxR2>@K4QZ~(h38tnjNT?9C610y&l+%sIKzLC@1 z!)#{{V%mNJ>NmHZtq`v*2*s~dbgw3O;2MsjgFjlgMUr=EY%1DN6c+}B^{Q1nf=i9d zc9oO2>8eh{f@=B1Jf;!Z#tf4cYp_epSZI5WjtNB-& z3lUH}M6k7slxhN9AJG#o=>Z;y{bLP=5u*;(OUtfLVFnj+VxWL4hXmeJPq+Yi$r+#> z^5*GF&q#+0`ybv)8F8^ibuOT^evna+YHPJe;#r@}OvP z$1(VqnC4f&u=qgr0rOc8=mH)|ul#0HO$$zor4v`AHK;EU{sHGCOGvDCML5Pq=JUmX z6OKs)=zX}r<)3Tlr}nhG$(iMQ(zCiJoWX$~6ePfC^@Y2PXXno1W*g;lVc!xvpej6N zI@{!3s;&S-=<1rbczdC!%-hfymubB*SHxW3?T^wfo~IZ0YLRnTDe4**f70gMh*+n= zj`a*4Wh8N#2jwUnu}roj^Gtf}rjG`FPAT*H|A)BxSF8V?;{()(uUw+XQHy)-f5#`5 zvf>GJro!U-4zZ*kv(b_x^xI$J^Ej(X__1LlSmqYM`=$($QdaIUmjqA#x)I>W8=7FX zkvdlE(1b64gdjDH;krafSCi#$v9kJW={sLabLgLskF*7@2So)8LA8ZEGH<->=QR~8 zsXUxRE$rgrHGZCCKl%qA^r_*zHPc-r@;>p9F$?0o~B;_9`j-ES8Iazoy9 zAUjcsNHUt+e?EPFz{FjPnyRWTyj;n!emLzibK;9~M8&WUxBC z(2)NkPfUQNz?l(lKV~ITlcZBZ}Y{79-3$Xb4QKn*bK~670YSDsAhl0$6uuf z*dmkpL?kg?^FCRxEHo$6hGr;1^ps3Y2P?u_5zytpd>+#aW5deZFt@EY@^lv)X(Fl zDo5tQAF8^u**8Mdm$fYTNzdau?2KWELhQZOq>?g;h1?$O=j5SVyQ#t?GEh&{daEn9S;j|#2~>Ax%cJ=PiWmKMYs+vBhiRT_jHP& z#Un5I{7`JDJlB=Nwlfh<^uV0@!15e&MG9=u?jmTt-YFSKO<^{@VmCn> zvQ`$PU3-i1Cf_T9%PRn&ClccJ*k4CjM{B=`y{`0eE51GylEH@!pGCEe4Ov$X+xY1P zKWqB)M>34()(_Z@!C|e%#kgSHA~UT7TiT1xlDwFcbrKaARIrrFgw1|bdmJC%P$7oW zi_RnvwpTy%XFZA-FHBTX(7Ae|dw-_%Jjy3ubV@DEJhrRl?Q^fJB%%(EiyXO1a?$dR zetsVHLBTLi^jSmlgyO#L06(9zlr`^+NSS20P@!!7XoMNML~RF$3Pxj-B3$-E$zQLyAYLxty=WwaCIali zy`ZQA=pWArrPfe&nh0oHoZJ&e zdfmv`xk|!A5Dk=MakVK`WnMbWgf83f#jkkY5cMKbd>&snnSDWAi#&Ruo#ES{v@?B~ zbtUJpDoW`+6&5TJ6|L^B5Oj@u)B}b=w^p4;1rhAaQ?pH8*+2n4$tR0lBHrz5ebi)_ zi?ud+|8~FJr_~7pbAlB;cL2`O3&;}AfAp|ae|9dQK1NO5;o(wimdzVa&RpBR?AF!R zQou81V=8JYRmKshM)HUo)I3K!Wvf+*Ds?ve{De=NGowM9K-u3ai(UNYz<#OxwDiTzQxXW7{3dJUtB@CszkRR^&0_P(ayRf#>o#75E{{1l>o2x>K?84prsh*E|77|) zwHSvdz0+?MAv`W>5?Jx{YS-ER#E7S6sYPb{;_X4f$4kRtlhrHjrFQ5X-)5DPjoj=)-te1MXz#i8 z$|sq`7sQ&!h$krByh|3DlQLl1*D!9dFjG^1Sv#+k_S`o6_2G(2vPgLvvW}k`EVN;< zo`&RCd^ag3`;b^*v$42g#9^l0hYk7n+XDrt$X-ip|3VB`+;@5;U`?|ZRQ9r+P>?Sa#Dcb3g)a<4>l2wydqgtM&oVA80cXXKY5PIjS10(DzFY~ zW&yO6iIQAh#E2kiIAV7v z4`Q)$r5Xb86hlIB=g+x_FGXa%5C{> zJ?V*+l>pROJ?xWKlBV>InRx~U58q1?)N3I0PG!b+qyjHKGiz2ZW;WV9V5Hu3%)Mg* z8-{ZbzbtDZBC3WHCkCQ70%u$IiK;ZzA^_PxC}?(i@KUw0ERRASk|2s9&;2!yE`us> zn#voM+mbNTDmi#Xh3%x=`R4;fcof@ArtFKB2+tQzO{U9ft9gk9Q==fu6V^)NsPU_ixvMH0y#Y8~kz+&C|Ae z`l(bD3WVE~`|Uo(q;ZO>NyNaj*GAaJ+m-5v-uS$IE68K45KKgu3S!klQYq9KZUSAm zu<^zkmB8it>|Hz6T zCx!8sUH>JIU4QkdQKtB&pekUp=b2^VYe<${Ktkb{#9Q<`*`azIv2A`;FSQL?F(qBu zpA9kki~QCsV4$l8NYKsBs@E^$mCMcOUtXbcURXY6i|iwxK`YTmoKZtLoD6(jNwmqQ zke6i=7%&YH{$SufrP7fjLn9CA6-vu~=b7F=&IC{V=y80j8M~c)+cQHmEvkaYB}Y%3zg4mZ z%%!)B1p=Hw*4lln+8xpnwD+Xo$ChE9^90sEYMPY_8!LwLHf z_uM8O4Z&eI;c$wUdw9!2OjSubrtONdWMHMQePQhO#UD%LSnApjNGtYYqDY8nM2h{J z`Jw35osRJyjeN_9(R5Yj$tc?l6l{W2J07ZjK|mXT>A9&l8-aK35*!|4sGU|+>~lVQ zL$$>$xI?f7V#9K2Z#9rX&!RIM5}1LyZCr~bhVf8C#3JVJz*>voNjxkE`7)X>6#G1^ z?1R|^OCNPTmg137PdyrWL(VlAR7QS`PGd$(4}%2ED*3~ot{Q^|6|76r&ReVZ&_jvo zTZZo?cx8}SZULU{2e1~} zK*X8ekGtlx<64$0>~+inU=qBG>;<*h==qdgXOtY79sP@f+u2yGqGS&7qMagO*pmm- zV6@xwl?($a3W^hH9vHVH6YXJgMx|It6X}sZX`SE>n)w*aUti=1p77w6dxiAvvK=H| z*r82_7dyN%0u;w>i%~?`e;b@$>a}ZU**VH&DnBlb=?dEO`ncXRO|VK|4%~+uiom#| ziu7O7R6f6NB&@m~Ch)$jB9X;;`?ti9{>P)S2q;PIsGZh)B@{h@hX0f-ZwAd@_G54SKkT)lmb5lxfV@XMv-zGveL--C zbEHX^9!=@#42S-2b=9WzNCX9JMWvu%(tcGgzmx28$;8*WFuh$z){Dzv7Y2ixSz@q zwE@8Lz;wBF7JB7YXkK6Wh)f7(SCkTr1Jn>@&${%>*Y$P&V4PzpTYXhWonr3MeOW|2 ze7WC~ClGX%mA!y98k(T|c1is{9%LQ5FGPILPhxnCzOFdl#qk(!cYuknH87%#$75NE zYD?}95~3%dUye`RLdc4ZJ4_Pt-<1do_UaFfQye&XB8%@n*WxI(X=AM{-D$ z{+eyg*^z0Ny+UZ6NCaj-;Q#fu&!liqKD2*=iY!x&DGoiWI~?(NM6)Mlp8xmc3RsY* zf-*6b;J#N!qC;oV!)avFafYqNq^4(s&)#ie;OVcTGHsFddSJ98%1RU1FwS+}u}LSb zO`@$;Y@vk&Ci>u4Ic{3d?A#HJ{a%1>ab6-GPcYJ2-s#Rxy~H*dc5ES{)F&`$VKl5Uj($6&2TY8|c#z>FgH22LwM!I+lQ#uu!yPUF&j^Uc{9Ju1cHjkpxz+kJd=z zr?YLG_fzaf-(r6c3lo!{3wXN-16H7Fdka2)w?iJ7eL``lWFKn}+1-qMSL!Uep!#bgkKiQ~;Mie2<-#_s+lRwTe(vGY-AIC^Lq48j-i+@xLBofQ z{}wHF014|J(QuJ;*SkK-uqivS-8K$JICTw8+W%nPe~G`N)f4_mm3#j$$1{2!P-35j zN+oU8fP86k>k#b@Lj?4O6XG-YAF#*1e{?(6OS=t#rl<%366fpSyKgt9Z2ZeV9>>_! z7^qKNCMzF2ZKZbx+_a;QFW0}l-pa&e-;CE$v4O9Hk2wDG<*2>?wFr6d$eeesj_);Y zY^FMJjOeQ`1jdMb1nCz{8Fly{&-k74=-rQ%FMf-@XUk2a5ty?^CeoMOfzs~?f%zJK z;#xTMv?slNZAQtY*fSseIav|mS}EUBUF|eZcyz+=J~D4_cN@P|{9i=b=<{+H`1#x-7^0i=;oQc^qNnS^{b&EkRM&J1qkeXqX;C$ z+L?k)IWRb-eZE0*mzfOOuv#zfbK?Qvvkmso)5mkx+=|Jeodj02NjMWt0KOeF8K-ag|OlcF=PQo*RzB9NEIWy+W})ZG7k{dvnVro0_P$N z>`@mFGr*Jq6n2kangh4w=!U`+*J`=t$A|(fn~L(w(zZ!L-szn#UpYLT_9KL*8?R}p zK+{lTo&;2wCw#dd6K#J@Heh-?EI{Q|(r&E!jkLlPi*{t7PU@qY_k zk-N)dm}*gr-Po(c-T2e(ojB>0?7PltLB3Z384@3%CfGLgPpdZ#EQ)mp4p~AZADTQ`mjl)0DDz zTi;-PFVd_mlHb6PCKF=%$bPk=dlo;3oX?5z*)sEp&7-Rf>vM&&03x3w$^?{tZ?^;= zU&lzm-lSg1*ac%fmvKu8Wigtgx@P}2{cH0%w|leQlDhnC;95b}Lb0d^ASexeT>RM!VUiL{{upTQuW{l3gULj*rhq1>~GHMX}L z<*nhLEE%2)pmA~>s*FS4h*uAjPY`1?)OzZ;4s*yut3NNZFbqynq^7CZ9CKe@yURXo zEYJ=Kdhkf4bDq?%e7-oj1O`x~6+>)BaymmzgOyYr!WOxr`AG#EAMCoF!o%bc#oCVS z9bM9*<||-lFX*0kH6Uc#Eh0c~m2vcCM+3`gP5lOP87xe{w8ZP1kz(k!G*5(9<}~Ko z3m-DW5Nfgyjwgh}bk zIcNO_fA;E`(CSGMwMG#S{e8g^Khs8`0cY?VM>pMAZn*+F?2Oa&3CW~4L+jGtPtciJ*IG zpy$(`jHiY)q0#; z-Rg1Lfi(J%#9kg7Nd0K&(#V}oG?IJ|oB})y;0Ji|si}vSiBIAMWEg6^<+Zs1$Dm#R zE=mHzd*=wb3d(P9@?e>>{3gfFZr|wQ!Q;aJVCIXkwKu1fao+ah#Tsurmi-2^eAJGXWlkOQ& zTeM|kA-+nRnX&xb*G+44#u~md0KBfi@2mJS;5LXIAV~yVBfpIQQ2iUxw6(Re+x-a- zmQ^68SKECBUXTwle@tInoiXbv&aPlUx0#vg>O8ieyvGLe+B8SfE!Pb|$;o3? zi?oB8iNSmFV64CTA#b)$jl`Rn6790yddwon&)+>KIl07A6<==(OpzlxV=VCtC@7Fn z2IM!tjIoT{q75#Li8?*2={%-YCKB=HjmD%Nnt6=dc1B6l09C$SOQfOf9fHj;JI7I0 zjL#tE-SPz$HUz-fqE-LQIi7Uaf@&t5H z=9lDc=yP7LPt&Z164S=plBttN6O!t65*WZi?NGD2{-J z4{54%O5;8xpV6m#Ycn#_2yFHJHncY`*3tEMuzB8T-e~1Yj!0uO81Udciu+K{wpTPN zCL&yjM<8m?wL3TRMz_?i(_}xEXqUtOk4Z;YJDQNykdc(CB2GPH{(^sDKIU~!mLqsP zlXC3?sQJMcp06ewXTY+*H^cCA_HA^}Q+uwQ3T5cAh+HAjTpd^aLX>r$ObOL#C%%R7A)g`H)g7O3wHHhFwHN;A0EL*TdX7dd=DsS9z zOA&ju>kMHp&KB=NiXh>j9sH1eJDsYXU6AlnoE);Af2WlKcKV_K+cuA8$vla^?m0*T zfD@Y6NS*-WK=fWLzg>~)=;A1=whv08gdNV>-k|aOR8oqlOXHcA&u(YwddwYTgAR4 z$IYZ|b-1zIWl*g|wp72QzL!#ZR+T8$D>xBYig~LHHM@H@7LR)>HK%Fa>#YMoWh_Kv z?%AAAlG3e-5Z7<>LMGLlG0SmfSvQU?m}(`j$$X(rf4uCI)x{J%2w@DK~ zmWy78kgYYjhe<}(*iJjRXMF&e;?1vUCDkpVXCh)Sq_1H+UQK*e8Qq9_>1}*_`R_?E z({%DCnt2Xc<;|LdKJs+vp&jkO5G~B9Y+_jHD&uk7D5*<3*beSRQZYVWMtpg5@{B-0o-$%MwXqQxKU_ z#hgrp5*O?37aC}WuV_#Tq7!%eU1cNgxxl%uV~P%h>Tx#O*TWcz_zs>~W)LBU<94Kw z4a(jH9?;F9qS|RMa00YOpV>JVQ3!18Fx>cQF0tmt>b=MC8Q56bB;@vfl z0K(-y1m>^}cG}NTbD}_12mX&d7c(k=eJq<}{(TeiSL0!Pw9*B!&V(-=EQVt7Gy6S1 zfe$^yCqcu2v4TAp70^qv1MTSGNgN0OWH{r*0IWYfLyWDl?F*buB>mOIWDg!y5|b9z z60VR|BIV@_%u`QNoh`CbL1jLTW}fS*is~n9QWa(@#j3I_n~2AaCVaZ(-*Pt#A3XuS zBvAc=JYB%Z3mR?ko&|M;2yifSa03bYh0@Jpio*dB8k0 z8yVg~7y}X?X`fbXxTkYCt^Z%usQ;Qi{V(pofgF~qsLCY}j-V9vw)_M4v%3IY`9~6U zAM80aejc|KZnJWFVMMWsTG0i+310ly+MQyzjCb37U=W4I){eJr zjpg<%F<XZ7c9ugV>!fG7h=X<&b=p~~iLp71f&3(? z^lzsh0my~)hr2K_>34M(WRj`rDJDCqxwVL!xfNc`I!|I3jzTx0ku+I3Ne#hJ=h4qS zlSr+M2$BaK9Q712l9s>9>;`qqoV@nzL=s+guN59^QE}Kq3v>A$!2!+1RQ&uER zmXim$+t@N#A6eg!gBuekWCK9pvoE}kvLkPI9(3qbJT98Kjl4K^R-ags2G{@W2qjp% z?{JhL$EAoYSA_3zOU&wrehgSYx7 zu92^KXvfL&!7oSs?s~M*^RlxV@<7-lMXL&CrKEn&>MA@V(DQXT9IPp zjf%k|;l=)%W&IpNpclUX6Z3Uq>RVxom4jC&+QIE=$|(D)CUin}84RDDb|6f#qqI?C zqMlhMuw?cyQTYr-`&F!%?_i#vlGihi#%*d&PFJG+tRly7GmXrx5LlV>F|XdV!skK7y* zSdpXr!L~<&C!4I~{dI7jtEAOu8dCRda$$DDX|0%@CJSFP6S%kyZSDnbl1tzJ`Q!fR zL-wPRr@~!a$X7UFz%o#aif$HW))RH8)CPmiKcB@}VfB{!oNI6=@)4_qO=r$)@j0Lz zo57WEWmNw@ zHJYqWJabBGAt{d;iNuaWZs!Wkhi25SmcCd|mnf?fZxlvHCz@){NX)+<8$NW%yZ3>A zrfn-m;#)=dS+qO*r#dgLg+UZee#4qH6yeTlh>zL!GwCflEhaUnRMfdVmQ@;nC2;_G{K*bZohg20_nWS9(G${rz1=2JoLi-EaY(?b^g%^l3j*G z6S!>RHhvva9C#13q?7MTbGCWc-FwSZo4?2zPI&Qk< zMh1B->~2AMX#nU&)FW&2aFjND z%%3uZ13JM}V3MEit~jCIqc3fynz)^;JIz#Yx$AxJktdDN_t>w5B*5}o8ScgK)Jf!# zC+}q2Hp8yXK@CvHkhvz8#kcr1^@>i}S3YX8Yo{i!tc0M+z``Zyt za1Tvx_Odb3x8{NjX+W30_4-2@c_QiVj_CBm@W6SM0wRi&A%@8Hg#ChkW>0HjZOe_; z8~581X_j7`Tq4ecwD){21IXmJ`2L1xxCFmY|8vtR!*luRPC?)4LZ^Yvx1Ajv; z^baQ>OC`qA3`XP|q+A@}oPR@XvD--XR;?xEGmn5?$=CC|@yqGvg>VG4fGuCydxWwC zbdIDhk3}yITF=K5Xldf_DLbnTuTmsU8iB>W*Ly;eYVBqu%knWvVGzgzSJVE{hVHgp zieTRY3__ZH{@9(O1sul(r81L;_O5*9t*c8V(5CZWmNPp|06ISzyPWhT+m}OED&UDN zt|CtYyiHX@bxKQaz_pdTkGTK5eU9;Gv=!C$(4P(~Sc3@m+7hAL>6JUqkjgD+Cr* z#CbA_F|7;El;J44JU!WvV6<;7rC0Z)=4c&*;$rXjE{jVg7a5lacrz)0KaE$%z8ez# z!}}ToPSRf;@2UGBUaA?vD~N1*w!CG*zRw#09Cp;8b;J~>p?4hByMK4vy9s_fQtGr0 zm?uv;Y)sp;9q{VuxMAem+uwQo#sK*7%{ch*pC-rA=;Pw?S|El(S@_AA;Jg1QsHP6S z*9c#D`_Tj#Pd)d4Pu8B-d$F1RPqnUMB216`pAfkk>+i7*eI1aAZd1!8!)QC^PNVQ) z+M!Ut!ZCA4Tk-t+q2QyywK*&&{u?R(5eB_~&~ecloALnnXBq`AO7h-<-X7s5+ZP-vAJ-21s*R{8A4;P0 z?DFXfokYiN9zg)kcG>uB&0XU2!Mqe>^`8GgrL!0dccNhzl&=2897@i z9wQefNGu=h1YuGz0oU(-c4kM^i=4LBkqFcgOysRUIFCw<^|GjqIO;}?nXr1+GZRg3 z-n3|5Q|x#VeIM9X5L0IVyrn#7Iwo?~!9c zeVudKIdkXTERf}tMP4V}Gn|r`-B;PR%Cq`VHj^iFE4X+;l36bf>8C&J0d}wd+6et2 zeUxR}%UHKH7!Lh~B2zi6Or$gg)6akc1C$T=bei%(F93n`earn1SxHqp1$l3NDnNb} zq^f`d;}i|5QRR)y>Fp?I$m2bCK|byDgZ}4AI2Vhme{%KhbUR(7`Sd74THn8XdHO8R4!>1&FWhD@%JBl2w44_} z%O<+wGL&|7vArIBNFjXCeP++~kev<)g9H{Ok?ehI1@hA}Y*MF^g65l01Iw(hhB^*O zKDcJD`yJc+UKbS1Gnsm9^KT7dU<{YlqXr?D~SKmt@Vkk9gCd`N@BO zt$!gC6fDY}=vyB83)Yi*@kAM`*Vp^n!1zrv!hc~6bL*7{&5TQN3)j6>Q(l>rObNSR zO&l6^t#GJd%MG$o^MOGjR4T2h1KAc92@@Dk_1KT>;LBH=SngW6;l}6BHxcTmxn~J> zrrg-nhdz${>j$1MmXj!IfCG$&GAFGVNlKNjw!QO`1ND_@!vu=8y z&HrF9mGH3q@ZL+XafkF+t-0#_uNrg?L_J8FKlx$wL3Jo&NBFz0%!>#3b>waT)?DHZ zS)rAun~A-t^rxChQ$}zS-}7b<9w(1D!f(fx9ChPR94XH`A&7 zpMd!Og?F(#^tSh-BjlZbUReF2tSB1XKz2$qC2Nw4eXF7knuzexyyH13+v-qX z^h#6oieJkv6z(`dp?0yJ1*1DR`EP!Mhyx$bv{z-94IYSaF{t1E;rFYz%w7UL$9doN z#{$pcKcU2LDzOe?hNxH2Comnc)P|)O6#*rbqi6kSnKqc4t6K34?fHh?^~Kg|f+<Jsh(OSpZD!>{>}6+jif9 z@Rkm9GN-d+PxDpNstzR$keO_>@aNP2sGtUkDFkhM4$B5nFu;!m* z_HFc9!s34Ehi1y&&f8V6n3*iNfd+p$`fT<6Y*CTFKW1$mmHox@A~P(d^-j-o251{Q z67XoZvD>!yx!PF$@Vq}*>DVEsHXklHb#?K5*1kLz{ifC0n&W1X#*GUKYZ}*jY!4q< zk~e{Oe6m$EeKVINv=WhO>f|*OGBq^;#EYX}QaS;%y6ha5aowjv41G>FzBXc<2K@IDWmHHl4E!cdW`V{X1z_2q-^W*p;O z+5eZSb-`aUjzzBAnar+)vWqx)1eDF#o6FC`q;(kwAtvQS+rR$Cep6FWoX&l@;}k2) zv@;GwriR;IlxoeT>xs*L{qy`77Zq-~wa9l?A(@SEpjLWhW$rMRX@Hd1ykq z99!A$yiPp=>0!C_Vh!))x`VqKE3Wq^C?&t9rheokeY;=*@rpFew@ewOJbkT#V4zoG zoE}{r*Pi)nel_~_;H00M`j_5R@P`7-qE#MWG0_&!5a0wu$x6!)&ST49Gx}YUsgJq7 zwCW`)>#$SxW%YdD*!@MgX}R#<)f=2q>yJ*xZ@JFVLbj0xwifIEUBplS#W<}_ciy3# zafu$^z>0O`UjHnR&y;3%|2H!aA1H0?uALA%=kA~TwjB9usnh!3Tt+K?4XAWtg008| zbFAyR-w*8_cSze6cK!8h>R0#gC!UyEl-IEP?2E5HT({xi+7q3p*Pb~+>O16fuSRt9 H@6P`R*Vf10 literal 0 HcmV?d00001 diff --git a/images/2/decor/Group (1).svg b/images/2/decor/Group (1).svg new file mode 100644 index 0000000..9f3edf7 --- /dev/null +++ b/images/2/decor/Group (1).svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/2/decor/Group.svg b/images/2/decor/Group.svg new file mode 100644 index 0000000..10a7ae4 --- /dev/null +++ b/images/2/decor/Group.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/2/decor/shapes (1).svg b/images/2/decor/shapes (1).svg new file mode 100644 index 0000000..c410701 --- /dev/null +++ b/images/2/decor/shapes (1).svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/2/decor/shapes.svg b/images/2/decor/shapes.svg new file mode 100644 index 0000000..6ac18d6 --- /dev/null +++ b/images/2/decor/shapes.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/2/illustration.svg b/images/2/illustration.svg new file mode 100644 index 0000000..6622743 --- /dev/null +++ b/images/2/illustration.svg @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/2/image.jpg b/images/2/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4479b5618fea16f495b7cf7afd15ac6906eb0b1d GIT binary patch literal 116554 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�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

yfpHb1epTh<&aHGmtUi|3!OUAt-h)^MZs z=5kX=V0ERUrKP2!^4&Anwtl0T+=TMywcExdEdYI%+?!+nKsV+QDtRKO)*cUM|b6__DruEvjTmM#*p1e0C z{0^)%Di!fP?N25&Z{Jk&bNEAUfQwqwRXNwHSLIMK_R!I{G6?MF8oYn>UUmH>(xq#{ z!cLb|dAt7nYZ`)Ii;MO?>OY8Hl`E8!K})MW3+>aXq`up5NaVjC>HmH%{rh5wIjyML z>wO%sFQtFm{&MNM*Rww!*1kWe9%w8kWXg0K&p8{bFn{iv*@xlC; z@hnagZPPD?@**y}G6=0yWPS)FQssbnwTs2Gscgw7Mf;A&Qzc!;+^lmQ_C+r%8MO&q zo#rUM_sWV%$%1mZKJUZPLWOKcAPe2xKBhAOAMz&ZavAr5hz5zrG|RHE>%4ohkYNi^ z+ek=+-c=)`ZA@d}gP;#lV)z|0|M(s+-EO_TGA3V^j4@z*r*{7EZTK+AsQgmQmQ|FM zWEZ#RGbHf-&D8ZK8cHpSjP*6r661>)CLM!4m6ud&0xSDqwIW7m;dLFM?wksXH-PT)vF3EpuAikYI$)BH9BRIR7!q`TXgVYvLP^`LDNzflnYYhJX9+g35k1f zC!#J|stPxiN5gU?#WvWOdz_0+tPLQ5s7JUfby6`a3p+@^ORO`HeCE|3sFC-2#B!D>K-g0zcm6qiu-r6)$>4AKngcnS! zZRh&~1=0hS_m3aNzC>3n<}>mRq)w?s0cli=IY=OmLXj`0vgAY`$}sN;mBqQbDaZ9C z&pyrCJ^=5XQbo=Bc(bwU1fWZ-)e~TZ4j&-zY;fCY+=LY2c|f>1${T5*lp4gOO?XBV zOxTpokXJ{AA&Mdn$zR1E?R;?Ko^S4|L8do}$`h|DeJ?88#(Ve#)F&!l)Ux0xp(#(i zi6mvN#*1Kc!fGXR+~8hQ$~t31HR5nEMIsp|g~wU(T)apM+W|`TjjDOJ$x6#;J$BH@o*{jmrp1qo@j zGUN%?EYOcLY(dH6!wqHcn{Z-f(A-1|PK4teqlqZZOR&~|P+Cj8FjFzPobLjMxU7yA zhC#)xtEk!b-{^RY;kp}qie@dTfR5MVclIp;>OGm;Yz>jdk!m-_c0t>fSRK&*mrzQx z5x$h~=S?_CVj(L}=gsb4vz9y|VRO{CI(HFECXGo2ZF0S|(( zm4Iw^C z)|T>-yu76l;hbb9G}XsnDDAHeWY-zCVav#mD@YZUi2=BcURkQ#_kW zVd>PPyxcm$5f^-v8cq2V=sa4=6VN<~Xmb~(W(FP8Jhm0GXJY~Hf(?w^gxkMh8s$o+ z8^@G2jd`@h3FqW1{Fw80FDq$9^}#F4!Un+*aD^!6*|tz5e2qE7{PFP^N&{Mxr~!;9 zz%{Tk1oN!vaRUnXhq>8HAEL#O`Gyw|x#<+Jcb3o6?*4`cv(PqG+ZfX4^Z{w4TlF|k zWu8o~^$`Sq#dn^^MLP)2-3Y$(Dvg9RPV{8)pMc8VGMl>r?Wq?MV}jB2@nvbljiOiI zp-DbCas1a`xE$Uouyj3?bKyXrpkj1-sB&rYU4lOL9C(25<1O1lG+bLLWqA)59d?mC zaj~6Oe7NibK&O%4nxzF{*yo{EZoD;*12n-XX~JgAI>L$GGUS#n-2{RnVLj{*Nq=`u z3GeJIs-proL@UEuSAf~br(hs*0oI41Y>ZSux7fai^0<9X=ndvJuYqnBQhQDC&sbkh z87^)g+s5sNzw~eyT9M<%K6yeku>$8FEFR33!Irfpu_^H$ z7LfiM;!yPi`p`_i-~i;)I7E^&H-3vQH7+I-Eu+Wh%IHYp_U<`og+-3C+#25kBOV@K zcB`?KZyP>mh|yoNuNkR;Gw%N+Z8AoVIRC-B3KVs)`ZTqS_E30-@xDDyhz7nx6(rHUBpaMxg(|>%5EyjW?~XD z7&9S8c2g90#8gNnNp@v7_S(sw8Zl-j*=NRPd@(cquKQVQJ?mKSv3}3G-*voyyni`z zh-1Fj^}Vjo=RD8Pd6J>vHS@3d5_VzIVi95+-tZ{LkgsL`WExS{4a~-A+lHXnCI_}E zycuYs<)f2Diq(Ys8@|8VF7-|S{;FVTnUw7o%|alE1^^*Bgklo;uDED5m>{nlx8Btk z+!ER>Wr0r<-S&3K#3EIa5<~q8qS=TrUl%pmDh@waFW$D3s07)Zg}Sx* zdgxRH2TdX?Z6{skBI45&`Sxt|CI@a_Q?6*r?AHVFyN4ydxs{s~xyRL?TQRp{ zJEL-XLTEI&g{o{EVE9+QT_Ir~FuX&>7DaNG+ZY=O2iJ~5H&Bw`5=v@DZQ)~q0gKu$ zF7=j7i@kgjJl5R?#;Kwpci@%%(|m^Kdw&g8J#C8zO)bE#u2K?Q5pANZIWnW%s*3V! zrhXIU7GguK(*f(J9C9^2|I++T*Gz~t{z6Nb`1N>;f-}bU}cQ4 zwc-={2W(X6LKSmG1kIYGpss?Gi73^NRLAC;Li9Y=8A4F^Q%-*iQlfWP`GDoYwM%%n zW>ndDG*aeB{q`fAxt7jk%sLZ>%GL8@)yZ|mIRjt8`+MR_W@T1D$qvTp~uAALJLzWwTsvq5N?Pz)a&+)eC|TxREAG@vGA|kOz3R$K!+wq^3U> z@Mf*-hWgFiaUfnDy&En}3b)jrse)@LVcfzE`&Sk{LN4GLt&~`xGjXgNHKb?TAmyNx z5{Sa0#-MxyT!9r+GecyeUX)8tAzY=EcFq7mUUHfw`8f?CM=;H9^V9>M0kuI)G50+4 zKEhDJsi+_-GIZ$|;5n8xFw^|bE;M-BQkK>%#y3V=t^|Z&8>Xr$Lbo~9gG{l^+kA%- zf+|$@0-AH_;U7nkLsyEmuW;~OU5L_JFL#lNQNousj>vE+$@P-%9-f}Z3-Wn>LGC}v zAF9z5)M!4vBoP;yVt5Qn=X9Q_fXqi3Qh)jOu{*^O2}&+0iF~m^Hw*{fW|*v|5X8i6 zB{%{saHQ0XuQ{?8td;tesul+s%{XPOq5f}J5uvycr>+*s0h1}E1a;21aI*|IlbHz! zTi+-j)_5vGY|YqTO_b}>J{M0%k%@copW4*aIF|<)a)@T)x;3lvJtGR`X*Q#s;uhu3 ztFcK3cGc-+?zb{_b#qxY%p_TDT>FBt>p}Ty`I`yHZ6|bR8Ba3yT<$ z2WKORFgK{;C2>S;1DD*268Fm*pG6fBc5&Ww$L5;gs*q^ohy<6`GPj+7nFf>>VeQC` z98&5`ZR>gwM9*xi%ML2 zCbR2jxa9|2@s;v&xyP@_Sd{(BB%>sA&^Nh}Jzj5ox^ zB-Q${5M)`dd0&+b*ulZx;GVjM-**>gT<1u$~-fTt9 z!O*pvbCy?8qlNNdPe_|=m2agX4DO-Vt_)9@%Bih`&a0(`Qes_EWN@hhAK;GSAv3bj zaO&s8%d26Y4nMz+*n7)ZeJqyCA~jEd>DU?(cC~mr4bpLGIajZa&mR3*#ih38?(R0} zq+^C>!g)ZlqAt-U!{8In>mwrxYHSnf*NF4Z1p^}{u}CNJ%KMR|a} z-%98TcC6O}umB|xZUNZ>nPb<^0sFVYX3PdOD39rd%|M)BKw*)R>UX~88d3&Y;vllOfkWd18+9hKQe4e=x8{!j$Y5JQRX{eVWI{@M zLpTd*2QlHdmKj@(bKH36OQBN*gmciD=LYZc{6{o6cM@^iJ~77zYSC;BlNq5YC-mF9 zKV~mv+gJE?7!M7sPKPe6t%i#%U}6aRYaaL{c57xEZ5!br)BzraH1L0s8D${+X|h7q zi3~LuXRt+M&8?BuL25*89Qqjj7z!VKD}6dwFO{{#I8j+aGsBLX)D`<(DX%KY9LF_$ zo)XGW0pA-kKZ@B&i6FJYB=F%cMWL7E5l?Gx^)?+su^0lK7#aYc{^* zL$!hwR2f0B2p`-)Kl+sB1(ucKiR=ag{BhhI8ejd_o2nS$hAFz(C%Y=s`EMOQxFDqu zJL7NN0DAlR6+uH7X}t-GEwUsN%>S(_? z0N*~Tw)5t%gsKFjnk`F)Iem+Zx`phnZr%EQ#}kj2*rK5TL~hBPz@%?0(l(QNz(Xf5P%rsSBNh;3NYitSR?|JHb?C~u{IJ+(Q!b#h!$=G4wZUOWp#~) z;&t|hiSVnIs-mn=Fceno(%%07pZ^QA{f}>A_c~qCgo$Xb!Yul}oVw+``@=D*q?L@I$>UHs0z6og2VqqyZ&H%}{{qd&E#-f{# zMCNaz|B{w>;=p)j`%HVgq&Z$M(Sai#-*ew_b7HZ@U3Ov*p^Sab@$6*q>4HF4-83XS zDUFxvN4kP{YSfLrZj#da?3Fs}NS-DeaU=cs+w*2V#_9e8Z|c7Q@2FLm`O-DB@AmFV zp;N)Cb;NQ4cXbT2_??u?{Fji`KM|bEBVXzM&S6SXOK(Qbds5zbx_Vr^%f9&D>QC7n z4`tqNvu3Xs$s$q%3g~W=)uDBD8QDI*8KxN-eic{mA96aPauK#!{P9W0h^`GC|3r#J z8vT)bIRg(^ssO%-7N6dtUhO{RmiP- z@vHn#^I@ef@enI3opoD8(l+e3)>ini1BQOS1GZ@f_GoiNoRC`3$SXelliu^y%goI2 z@paLor=sIO~Rs&&)d-u&F% zudlzpoRUzHqbKXEL&!qll-$~T#*KTU^og&Me%;S>Ke>{kk@iAA8a;PMKf7yDr}mr2 z#SQ1Z6SanSDL$q6Zd5t~n~Q$Gew(%8`VjM9Rw@4$LLq+e#bm?{nvZ~5`FyRp2)^FpYQVAx^ zIT?p=rmxRc-Lu@`hD#^CHJbQhw@vs%F@ocK>rnI1s&$PvFjB9p@d9fH0HpSneQ+(@3 zq^9FOk0{$beaWXPm0o%(OM+gvGBsJtFZ1ZavduVUSp49L_`r>#<%sS0;FcTC)l{-c zv6*XGpRvI3^qblq+|It9g+B)O8e92RQ?tzbRoQnkTvE=*25g3jV^_PxANtmtaZ+no z2zdy1jB6VA0w3GxQfW#w>YiCT+h>B=Fs1b6u3FU-+mcD-MWouAXPjl2v(V>W)v3>K z4A^zgM8U!43Im#MIj|AxMSB95KyNlpH;Y?zGdHf$t#k9JrJU%Q`BL|CSJD$(&8jUK z+y{ksFQE6aoYRhYOelVX9pqS_Y>3&oWnXj45&u zrp1+-6r!)uqU4-c3`v~rsYS8sc76P1Wq*>>RvMHy1f~B$Y1yP9o_d~O^=hJCJ;CnS z>9cpW{$%e^OWqgV^&7TC>tq7tTKuXPXLj+CWUzhrVzGhlpCKt0z4r1hxJZItG3;31 zk9qp}KljAxH+=Gfg(?0J&HKL}jQ=2H{?p4w^aqV@!`i_S-mHiB{5&>DIQvvLUU+b; zKKJK=hSB=2L<_;MYyHBoC@X#_LA2o>!RY!t4R)C=5!{_)`}MU(l~FH7%`iF{16y5;G zVj*bc75Tx;F=$~sQIDIPtI6R)%B-XVMy$64!WHR?C)T{8ijau#aKTW-?0E0Bg9kBW zP>nlWnr>0ji>LwyDIQZUv#U%dZgpn;(xrObd%@x39wQM_S3m+Vn(!Q=?Hv{-MP?gdp*)0r} zCxQZF$~JuUS19cp5;3VJV%l39cI_SId_}xeuw{BP{z_UME8TyY!MssLMO)c^U$BMr z*Kqv972K+LLg-`uMXrXPP__ojqR9|!o?vO>mJVF6!-6-+^}yU#s1J!hIv%Q54R5B1 z^VPs7QZ!h9&F_7ZL5{ao(#W}_p=aGDm8)*6jMWKsI?%vDIwgrFhLTX&S+4l(Q6_e) zZ5wUlB94x28AM2zCtZ2Ry^N8WH9;pt&}RA#sVJU&qs=I~;&Ix>kd@N|=Zw3rESsJg zcF#IbAMVdwDrS_h#CvEWNEP8=t~}_FL!SZ9@i^`j2KE*3MTdb%CEpjREudODa8Bd- zs62vVG~c?I;8@GWkda!@u|qxnX(h3U)?72Lc`fbjgPEOa&W;1$NR5n&m#Z~&`i%HT zp#lW3Ycb>GiL6)8StWD>4^M=IU#=;wr=(tgA|USr_pI=n+vSQobNi^9so(DGBWxxN!y;!MaD8|8$iGzNxT+wbwr9wYQ%}*f6T?JY28)z8>;}Q z#&6i&$CH>%wY%3Y`3qGc9QPA53@8-+(J4sfa;{HPBu;FSv>mBl)ohN`CrDNaDEdFR z>T9lbFQNjuKSK?#InfALLE0?^cgeMF5HEd z9DxRfGC1Wu22>f{VOwQ=!`{wc00U?o3VejOy@lK$9N|TfZ&_XpdW@aq1~Qr%l6+0z zNY1wp%lDUYpCGCTp3ts>fj!bOZZBLKYO<#oHW7D0hAf<#hnwQ9>j|?h&n*MCqtS+w zTEAhU_QIPNgkRK*1jQgsz|5wsALKkNc#xS6!1W@E+s>?NnUnP$0m8>T5*N-iob?z* zsbX`tS5sQsn{w4TwIskcai%Wu=JTYm`ioLWwCGU`&t9{#VfK<55AluI z@Nb5$+|1_A)InEr6Ga4%wHM?qeydma^)!18brg`AE%=9XXY=CGw}}#vD{Z?QyOXa$ zR125epSk%$t+YaZDl_F^M0h}?-@;q958UM=P~9knK6py-v{rEq2@SD#-3LQIdr@T_ zC2@QiRIHw5B-1d#nRsA;AC*6;W}XdJ?hWT@9Fw-)nx!*)rO(DaNup()_kBVI;TT9m zH3yd3SV1mv7a!Zb6a{zh;oCeHwgdY$>jJ^y$@Nh0L<-KAXdb(mRqQF){tWz z7xxY2`=ig&HXpw!gdq=kjbc)VmpVo83(X`M%ZsexFy>$~QkxdfPa08FzsseVg{9mQ;!QmSeV zQ06HMazfziZugip7q`zEJ>lElA34$H>6~@#{pFFx`Gwv*29Emkb7wd8YkCu^TswNn zFqMvK>#%L3Kc%1&>y@Vw5+%S0CrY{1wYs^OzXiggTC)S-u2sXj`0IwrbF3RxDGN%S z>iA1%?`Z{RQJ?(ZtDt{2h5z{@8;;HjDpKyZ_P2@Ez4&zlpp-D~>gE;xphbhX!j>VU zHrwU%V&+cS^)L23yqvRW$Nykf66x!#WOiITz||wPzCN)12Q7*35zH=;nHK6kT&G=s z@iGkd)$b5>=J28MAi9K4kxb29%))WDcmmil3YN#&B&ne89G#%;V;j3OjiWL}b#0?F zb$d*dF}2HQpZ1SE7pyc9kZ&>Mc|u}W+R5PTL`?0o?**QMMZ3Ye>`J;y95Ev5*~#@4 z@2flucMlCt+jb&eIsJw?w6Fa7&ky$R1F?VeivkddINtk*$n8IhV9~6B5LKC$40$E( zgpf#w;1jioNmGluu0Rr@H+N0N7)oDM(R`~v1A3KMC7Ny0=QJ^IV? z63n}2G<-iK_Im%}AJ4R(iw0j%dvIXNcU=ceK`kdjsHy||uO60a|Mk!RONHJ)OL%gb z=opC})+%bpImB6dd@77p(>c@D?$qP-B>nu4yD>89gXRh|y8IQvV>N995X9=P7+*XC z+94^erSMaQaH6G*U5?U2?=$owI|Bv3#>lFkm);?h`NZbYSBDoQb%i749!TZHlJKdz z!u>q^`$Y#o9A9nKb%*3N`dpy!z#(Fi*P3Rb2l_*|D9TmUb($y1I1Y$ z=Ng^ty(Y(KzG3^vo`c45Ih}nqh;ht=}ZxS{h7EovA6YnywxVHDCNbH2K><8@K zz&b~-s*(XpF3P<~m`z#u{vX@x@2&6uLInK(#v+K}I2s&LUl33*NsrGnMRq*>Rxxye zt&lQgxikvzEFe@#2T6*@L0;yarJt4w2M<@crbU+cY&^Ersv@`wt5LX#y!z8rK{>ML zp0wxbKwf3F=I}2fsv{ElJTj>GyVtBmF}J>MHPWX`1PW0oS-H^xk@v9(Ybe&1sNb*w zgWV6`&ej3IK(Vi8MSm{9B9QbLI$5m+DkqUP%4*@_!i)`}b!%`v0qEEB?ZFg~m(jAMGZ}V^0B@4Z?Nhb=TS4 z*v?SB=7)lQ-CvtP5N~H8MZP_rm{J?+;PEL@)?iCgMGjY{<@~F`d;T7;cnc^8PO$DO zL-lf69lLpY==k!fT%u^)NGHdxtV63!dge=?B(jp{*3P>7>wLgZLye`cCX9NTeZVYi029l zN-AdSW($V)qnLqwc@|{coD{|K?iyo5%LQe%()sH_<9G%I|i79zhabO{y@d`AiBryT{;Q zbSKRd%TEy$e7AMX!ARgGrIyDeL2B&>S}8fX?qQ^^T>+paVBvWTiWx~lXWrVpR8f5kl1EZ!3>Exld3MNCvP7bcp9X1d=tH_nsS*7gPB zJkyycX~R{Ie|$WZ>}_tM&}weyke_C^958Xe0+1zTTt{}>uJPt9F;E=cGKnZv!T%Zj zPzJ;euD||kuVnXNGO3R-(X42H&3j+aDDMGROh%y-PN~R z69qc?KUvvtl6SlT5nMvj=HD9lpMil*gh*^i}IAW7rmS`$X#k5?_Hhl8sn2N8f;n$Lq=)!ybu8q z=R)7Y@MWhItP+IH>qEjtv?UtG*GDgqy3sSYRyRhuY)X&X$M<;u(C5HAykbM3e2P-w zaf1U7y=%wkUYxpzX|_nCR6jPH$4(Y6CgVR}!Hs5$bU5AHnW@@eP3$hfEg9@T?&`F& zukho_nM}RQ{Xc{usz*s(_H%t;*w)lltpG!%UMHRD7h(|;oWK1FiX^@8&$^OSh<-Lz z#iQTIxeBNMn)BG1>?Qg$Y=Wigs)c5ft|VMJ%%3LwyB}sS%-fFf3+Yap~nxYA-EVet{D?EH+n$01B!2N z?&Y6`l9-0K81P~Qims*(#j(70bcKjDuH@Rt7|CgQB^w>Q{Nk;6)%fIGXCda}O?lM# zbk9E$WDk8jq#nIR@oIk@8yJYdVl z@A=z~S&PTE*&2)dv?y#LiB5R#=Y%yEd$n0OX0s^?H*)vXaKhpZ=JG6P3FPs!Pn~_t{W-o|Ft(1;X1AS zb!iWuzm~q5Te5KOH_SHXZ=Wvk7C5Bm`Ph$3VU9P!zuGq=rMoTtxOu$SP>L8i&gZSv z@COd2v0n7XTP~O)P?)YX_d<%q`^uV0muRt%NjRvyfFWI=2hW9VS{664Zb(*uixua7v* zvPb?rEqfFuI4rnN8qLQ5_7Xg6tePwo;KMaM;|Et(KrB?ONZ@X~zSLH-*D2W!PbSS+ge81`-xU2Eu`@DM`f6Dq7iwcWbs#8EbtO zCTR&Si|^2;BV{2&rew6=rc@UDy=py zPybCf?JtXgm|K3`c+t^vqIQZgI@wcV!18S7&S}=V2{Gkn3X^uLUUk>JATUt-zLs3- z<@5*IFu`6yDpCQz2H5OxoLDBJW#KUf-^{Fv3&Dv^nbj+CG0FVU{3-aOq1Hf?g28$X zTSU^X{ozNmXRm+mu8sCee}7Knrs%ZY-z>V}R@|yopkr!p%+&&0D>bwRDA{crmE=lU zwCxbZ`JyDXU}6Lj_sgWt*}3zV-C<2aY&w|2@4rnSMSMiG(j=g19v`Bv?I!p`y^pbK zO1&iiIeJwizzCD-rQ1qf-3WSuWTC1}2_FL_fSoPa%^yE-?RhD^FK1XNU-bS@_7+Ei zDn821-$dO&9snSutxybP1(u>3qRbA1+(r^hn{0^$SvT+U`Fl7t-meE7BWBB~2cZ;I z{spc)6*#A&t|p{){BYPm{5i?=QoM=u0r3U~tlolv8~{F7$HA}kA^A~dz5z+35uUeELyyAj)p7xR<25Qq=zA^FySJ(CG)QUnyt{& zqf%dwjCi+XULAO&>9{3Tq-h#xu+LGyq5t4`RLj*vLDC3Rj9*xO3CxD zHjIB2Ur(?Unhl!Jpg+8B6Exqz_XWOL)*N#cxicy{iHfCGjyHCupvvLNC?A|yBip>z zg^7yKLbQIZJxXHwl{3gfJt&gp;IXI=cjwsNKGA~Fu={gptcmcZU0c0D{JZhLrl-Ws zU-)nGDr9)R7JvWdF1hf7qBiQ!cF(1S+T#yTf0$R9GrxyZNlo49U{;-Sz{9HQv?tkF zUXptz1|9B(F$6Uh2{>hNcFBK>o@G-c%f)&IHH*Jv9^?=GWO?BW$uX|!WC4_ z;5@4Pee1D(iFB!xp0{oJcU5oX#5H{s(Yy)Mq*{L;-04uB*+M_%;hue5>*tWIUe>95 z)TVS?McUw*g*>2xFdzi8aw6TTFcp3g))rB>X9ahNmkutl_Xj8Q)cV22Njrqf+vTz7 zuxiXfiC;N+nk$p|SXdV{zW+4uA?`q%KrkZi&{`NmudDb21hLQM%O^6pinXqtWl+(z zaS8KlhU?CsH-BelUKbX)S{$&fVmonAdhbS_b}Zz=8(*T05B(%+iauKffpX)^n{xkG zWsmxfb?8Hz4va^4IxdRv3kd|ly?RsOh)`Yd9Mm~9c;hQ5b&cuLD!`5cu=m?1C)$AJ z?gGLMK{mpx2!tQ!GNQA2) z+%&x=4`f>FgesFXG1{e)RL}&{d^~*E%j6Ib=}*jI%B}hh8-H-&31H&DPcd&^9Vd$? zH4DYLeaq=ZREu-JwD;}4e-rr!usqPGCNSjd&51*#H>g`CvK*HtL|nD)3}$UNKC@{x z@O20+6;**~yPXFGl2O%$X=GS7X$yaVx0-rT7~bfKE|U!dIXrkm;OXXy}hc_&SKv(r}+E-$DiT?r6-s zZ+o^@ajl_dbe7Tj3y1^2{{V=elNg|bpj;L_qWKk-i25TCH2==q#C?Ktnm2e}d@~C0 zwMH5eY`TfNzvCmDsbv6aw6gRzyG85X5&uUqLFQ*|*xhGYy5|E6Z;4Lf=xAnUvf&c? z+YqyTR^!=Mpm~y?t>9YlF!cRwp|rg|!Wvk`?&GiH934y`ZYQ?T&5|!VAn7`m;X6N> zQ4ETey8Pw0zRKTrb zpu8ybNM0-_fF`aJhfbGTet+hyP z%%&7<14ELaW%2rR)l=!*dnsG?wp6ZHjm>g7Eq zG-iMt8r52icNm3(8<43@)_!Zq-GvgjS?`S8U}|qf@*S?5cYTSoEWL>*-sSqVt7&sE zvzxftN60hOzYMr`x3`(oE;Hg7TRwX)0TVX)(fC-F5h%{q4O^fIwF~#2ZgzX{DKbX-b2IZ3^F-vuYBJ;k^*N zsXaOx!qp^da#`gk2Cuuiey-9AMD~mGia!;J_-F2)`?q%c{GASvBEQLr1(KEOrMCSbX^kgduCD1f_z*+8|ZX-;K`M8qT1yK!s zT#Gk)uh;k8OIvb_#S3w*fxD`2fpu_LQ8fv_B1&dkm2R4bq-!Sd6(moUW zny7<+#7v**dvz~ccmE-$Q~kFsbyV%m?3SP~a+YVit~5`0#2WrMm>KEU&KtHM>FFe`Yb-vsQRIgI&|9+{Md&#{d{ zqqe?Kyq!CG)3v8EL!IB8Mn8tWUb3Poe@O}5oFrxa@l?p}Ry~WNTX`WrC#fnU{+`?W z!TRV8RFB8dygNmv8p~C;jT|rFABL8=+utXC{&Kg9e|DyYs)B#;0B~zQjT=vG-Z*w2 zHC3O#aCJkZ^O>SJmZ8ks%yoIEU+(T}yx3`E)T4A(0kS;!=9@Y{l79U9re(YY}7v4jF#4^`j_aTrznLSUB$yK(gUYl1a6 z?IZWN@3Sj#t>1}HIi1J*`e5zVlcv73~a@?0HY1()pEo;1KNpRiqTgJt^ zg)N}IfL&Xc?CvF-@ASvF;{KJ()bfD-T(D8hP|Zfj!hlgjxW99~I+T=u-k-kQTCyG7 zFcVomO&GG0wO7Mnqb1%Zmd%h0ia|$PisT+z-dl?~aKWd={FVn&vB>p4Qv6n)rLAgE zOI^P2NB6t0zVBu|Uo$_M0u*!Bj^}FKFOOLSacTWOe#6*^Pl8{XWtnQI&})Vw`R~#k z+B(|oI$b^w>Y3Or3cJBfj7&)XS6>-_x@Vf1Az!&$kVAaAfpdv| zGR9g_J^E_ULlYQs@EDkwmk2;MqsuFL7aNi;diz{{eAVuG;}L|;4r#}2G7r-tZf?%9 zjRzIwEaq#q>HU1c8xDrC6@{jpP)aRM-E}ST-G@^#LLXE}ssqfYb(AFD%JO3C@OM8d zO#G!MmV{6Cm7{XfjPbu=F1u>R9@N%ezGL^REliem(-?HuTcNPlEbq1ymWPb};Nn2D zvc3;G>1=P682d+#f=bBvmbz-GL)*UNZJL(pUmmdRbKu9{aV1kE&iht(e4#4)TM)b* zCs@~Cyw8iNF%7u1uY3_UWA(Ok1xI1{*}UeXiK`s_`# zuD;f)z|<34yiV`kx9wCaY{ymDwy%(Vvuj{s(X>Svx!iuMeT!LE)JWO0Z+@>0p1-Uv zx&L!oa>seaJ93+6X4b_I_r-{GTVKTDv^x6hDk>^EzHL~EiE)qSAAuoK!$*Z7BIHMq zZ8K6O^US-hMJsLFYOdI~`hj1INji(Xz9rN>#UDc%ddxq}ufxqhXm*KvW&P_W@+&-x z=9g4Z4!OKAi>w*8=%m^DF3h!cMhN8vj~--wB&LSf_WXvW#U?|j&6#d4tvy)WnwZNR zv3+V}GgJ7k{oY);`f0TA`|*lG%t(C_?(WK`6_Op89G)GU9};d}nji%pJipY7)95vR zTMYJZ4!miZ#h8sa%-}mfDcAD_an+G z&HSJ4y2nbyPGwTm4g@{awzHIJlsgH$sUYbb6BD&fM7qD_9d|!AM#-t-K+jV;<;Q_% zLrP_8J8$Wpjq{NdAN5`1_nYU*dbH{s9r#%&YZw99JG?t!{fEcJX2!Ne4;0>_KVOeJnUKHGYH$} zX~LNSkY>(Hx*xFI9-o=>&fnL=m&vb@d5i@Iu;P`FHdg&QPSzdEE06Hw?FC0J*a}~r zx%J`#6s!GV;X@BI!f6WKf|D9Medc*`(XQ_t$p204VxTeCWc1#(YnW4wk=%P6()-lY zr&E0%XhLb-?xGEwrR;VS_CJ(9buX*T&V@%=zHdk(ojG30)uJXW&27fpv}9BRZ90$? zee)j#Y+JqA$aJ7F^%h-shmfHpo?7|*w1g~oy!A{C!tiFj8ngb~N)Y~Y^{eyt#-Fce zmGciYf7vz)hd)0SGS(hCzVU@o%f-CiXYKYCIle-Ox$aL<_@a>PuI;=xB;qv{vnq_t z7<)(0On8G95ZRNir$$Y}IusoFZya>(f`&)-^`7slBsbABMJxnRJyxszW7Z9wVX+z){JWW!l zu-Q#%My=0_KJWdI-mYGmVVpRYW-h&M$f|fSuZNL2+?}O1$LZw_2#V_s{HsfD1q9Nr zB$*RXYX=B+P-hT}Dl+9d-gb`fOGl+H&506_=&hutTIeA`pZP&*W&o$$Qg6&{DcY%L zKXx=-`i=8K1f~-M;r1RVc46Ni1f8}Q$UwlP3Qa)nvg*@xZaRy6GlY?XQ9vRHCkK%0 zCy|;r1X=a_@lV;-{k5S?s;sp|t65Sl$~V0M7x3imyUN4s4W6=WeDu{AKNdZS)hl}s zbV%?3dd+eE#1fAuY~s!}3bi2(EZ2|~I^KYz`|zI8`j-UCZPlpe&Ul6-2t6UlapqFJ zYd9yUQadwQj_=rvtq_V8Ic1SLZExCpAu7<`H|5*q<>>$!KB?0)>Bb$k=KyeRJS)`D z466=N+XzL1S|!o89kp!-DOPAaXkxe(VmAXev({)04hG15>Ej79AMdP`>J>ZCkCr54V!dJ0r-c*8&>O6HsB;BV-J%>`K{7 z!i8@De+~m9q$cmo_TwqM8&J|q!cI=ouEjKkA5gI}f#pnb(+w!9t2PT9PWOz^zNmJF ziGg%%TV~I&j}>tx+7Ze?ZhE-aQ;=P|n^|NSH-hLT1hA-Ld^kko%JA|q`>|_t{8u8EaX~EE`Hc;w3Rzd~2^N-FrzA_85ZsXl^ zmOaPZ2x+f<_Fb;2QxzP%F*x_D0@sd9vH*=MnWY^&Q{FaMkMiUPkrHSUSNY*Z zc%w#7eNasKjFuz@UO1P9jjYU^k?+zPOZ;xVH^%wcDfL6X6(uD{=CBn2wsDH85^bxM z0is|DuupJJ_1cuythP87{B}h9Y}MM~$wAac!g=I7cKA=o=aI0V1h3yr17nB;bh;a7 zkE?c!I(J4|)2mU<7k)pQw$gCJd*rm)QAFtSo|8v3z~#s?jkaPebDO_BGHFZMF$K>hMB z>tuwyaKQCtkgpKVnMXi^fiHlSj5%G>n_H-`I=Dhwb9@_{8EvV{{E^AO{5^6b=1JVf zUDQwXx{xvykt4n*xlCnkUs#=m+NS~D^=sGA!JV?g6CB=|=r6&H89p&g_yQp3S_^I!KNbUY^DDmvl8&*1@ZaSm@iQA7 zcGo+tCA=Nh#+4DVHN|cf)i-8;X4=rY`D+wZGgx|~&?M!ZB-T?Xot3sfT=7f&*(DfU z{0WnI22;zzUi%W%j8*vg7Bw-~EPwssPiDKC1-Eaqa$H;DV~MiU(>Yo65C;?U`dOZx z?6lJ@;P*3&KjE4C={DgI%i>hPd|~|P)jg5Am5<5f^C&MB*Zie89Wz9nP-EEN6eUe# z?&sdPjRom-@?mr|pqP9Z(d)rzwJCebOVxT(s8o9{LC_l-M=|8 z={M{w#^%pwQ8N7fjZL>8d$M{%8ao$R(in7K$?4af>2>Cx8mU2#$Z#XgWr|xUYDGU zUMyYsHf*jmCoEysWR5bTUfPc%8W93&1`>LZ(i4p+)}y1`E>GAQFfcyY>S-%6iXi7% zYA+HEl-=~&9zjr{&V`N|UvMZMTFrc_E1S(^ea$XfMqtMNC zxxD9)5zm{GT2Vl1YJw834%tJo+-cSyX9RJNd|eeJZ}{krlH!{EA%*?WT>I4JJte{M z!Lc2C@iWbv(22F^&WVn(@2a=S1Nei@U$#8AJ6md0q>H+o=lD=gL!qdbCmd!zKJDb+ zPL;e`rP{pm(<3wZT1kAZzV0Bkx_||D`V{Cq2Mp3C&2|;<{;L>kCOvn{IoLE}!JUiS z5!=YS(dh%6T05LeG_$VcJv}jN$XiZuw!O=@W!{_@mA^d?u9<$ee(B-TMwOt%#;#(! zN?fz$zK7NCW`>GbKDTAPU7sXn-*ehxsWSD&M9bOE@jf%Y;bPyzcP?egWo>Np!PVB5 z^9Vz@>psr%P3dGDR!iGkq2hAy{dX_WVY|(ZCQ-A9A*%59cLsF95~zY(2gj*S92X(^ z6W{^r0h{&%UAsD%f?Cwf6soI$ANWA6S>j(O`Tbpm(+2PUl!B?>u>2vdFB^BfUcXM# z1{U;@`XK!M4yo7s=z7 z(yx*9ofhhx8rF01IGfjf6%JPz$9e*m9Q^e3O+Kx;Z4@$|KWa+&rRbu+ZDGGCZg`>Q z*JXE@*&z;=$*ic1dy<4ZciQg8tz2)=(R$Y=VFL5^ zCrKg^{v&GXP1Pka1g#hN3+_p5X3bwX>S}6yHCccBRs4m>i~Hj>4;;I&X@!@zQ7nnF z0rEQ8Q$D+Sp}AUhgq%Rij*^zgBw!vU%e~%S`n98%u^thzcj8=^u7CW z({{NncCSPOwF4z~!)E?&Bd{0sCgk1BFXPGbA#~|*4DRaDKc(Jx_Ptiwr~UK0wdN0y zAG_Of)9CYnCFO8}IKhWUJJYG}b=;M=dNr3H%6?Zmgt_s@-SgQyl$#HA zH77+s{kBCUX6LEokfyi>I&wl`XlUI{X;tkb39cJMhKz+D-uH4Zzw52q-I)x zUVth3Gzyi|raDhkn^!f4CkHL=|DxXD1u0(59~dIOT}xzlyxnp8GW&CrwCtTbBC>OF zwT3TU>EAFDSxzIFKF`lhXE=vN5YVderCT~*K7DD%Nn2@kyCFVzs{i40?;SE800D8$ zwlR3j9G07&$!Z*YNuO#`R5ZB*!exxef|WBVEpi%xn9b!P{YNYxmoKh*A;>CGs6DXK z|Ht(RqPKN`6Y2Y<|3K>2YesZwmo1`nkx1wr;S@KrrBbT8qAKR4F&HZpRj!c7%+3OZ z>S~^X*PZM6DlX97wd44tHJi4p>9?|uU+Y|VU>Fg^<^fnX&B6e8|&I9Y)qaC0ko(d(v*i;^uK{MgQ56YG}X5c*^i&VW-DX4#xAcLmfmb>_p7NHy`qXJvP59aP2Fo7qNyYVwfbXgdswweGUK(ddELN<_Qdr76m)4Gw zW-;&Z?y@q@t30L$F!oaHTSAKwKaXr1D5pZ_XxmbKD3o0+KeyVCj zNc;p?2uN=# zARVN)KrAm{K!S9sQ4wjjC3dZ`(iP)n0RU~$N2%pQ}^fbs|p+oRNX4|h)BlavG!i6Q_ zF`f5;i2GFOf|6lV|146`gM<~Rc`8JG?I7><56V|#tcVMXGa4^dmL5|VFSbCOPeJHX z4iyt74W$f&7OWO#+~osZ=zZpyL#E^e0ld1jyg>rk0|w|?^AJI}1d4#(yQj%-X1FO! zT|nHt*ZpKdr0zMmdRCQsKa84aO6on^kR_|IPf4T>SuQybC+OW5;0bWr$SLN~!we z2y=h3OvMS;^sh^L13M31HDP(#u02v`RqQ6r=#=COeA@IhOT+|M4j$_`PU!S^Y-I|I zQRywUX$YF#wbW@Xi`}fU_3$xSr@&1}X-_xI&JAweiBqJ2qX8}p>!F`-|_ ziN!jhzgsDlp6)m;c=kkyS)tpd+R~-uL6gkQ;1JcI_bG^JoJ(HE!9KT7?Ue^aR+$7x zvFOW$91LF@KFfiOl`>oKHC)vb(9^LT*wuT6T=_34wd2IzFklYhrghwGc`QdOHtIWVk@4&q88LnOqr#m@@YCeX=D-N^E^YmYHDOl)#M+kI_ftY-h~ zpZSbu%CY`y$=82;C>bH~4=>;S=vQHupjvT{v8$=$kX(D0ifNrl*o;v*LrtvZCse>0 z`#>F`U-4Ff5y`>J*j?=Ix(z6VdgkiKA3`u*mmrsOC~-Am~G<0a<7@>l5h)6@8T?+_c?J(s|XGZwGO z2g1i+myczr7jGzwyxgxm9$MVO?Kjf3k&gF2VtKf;3xG6?u?%ea%&f>o_#3#jU1c(f zyCu)VI!6xZtq{n=E(@~`Mm@dCm^?Fo?&~XIWvbY7pHHf{>t3|Xfc5Od0o~K-@P$sO>YSH4AjIMi;2DLhzg&tlBkP`;D_D^l>l{rDh3noVyZY%vvq8GTNu^pN z?thuIXao8W!53&V<`wc>-!;4=U4+knDs+ZjrmXjr2b%>tLsO*MM)K}X9K8ux8BX4J zG9gZ$Lx_gV9bqp0vHes`M2$zcrXSv;B~y9Un2l)h)P2&e)2>?FFY}%zM3pMM#BtF} z=TOOn+{@NKpWX#J%eYFHG=oB35u7SD#;7tea;&H48cI~_v|rTSP?-^am^s1`C2D1{ zY>_C+1J_E-wpICv)xd*E44w;bohn%#`Aw}8Iudyy)J-9O6yBFG)R->o$tA%(VH&x( z0O?-#ok%NuG=X}B2qyQl*iF*3MhA_+<1KscwMhm;fkHQ|L%_B4TY}$bDd=?XNrFjJpd?2TIEt4rQyFKLonmGmZzC=>TwK^R^{M*nzlUJ~TQ#kJ zuZ9ZbD8#;^PTq*6i0Y^3OwtvIvvIl{l(i^8cX!>pP2{Zb=RWl@x>E`~c%9M`ktHWK zSlwJ9WVtw0<3_Px6&pm*5;Z!FC$=gvFuH;);lEBpgDAUx zzeP29LFXYUyHU0w)q~zGZXy#x7aD2fO}&wKDBESuO?t#KB~&{n(Ks4-1-5K*f7}&a zwZ2K1qlQRuP}Pi)qUE8Eg0$c>WhwjBHKb;of&2?hJV+ z%Y91dWxqyPbk!^kPpWUaMLkj1)myaPqv)SvF-;VQDki16cxq;vuA^$e&I*TDTHIiC zL4+(2YFWC3!;*5hDa?!$zzUk4YqZ;c5&TDw0QdpG2d578D(1*X-zAy8e>iph1yJ2| z@b6T{IujOhc-Elk!LmxzMgK|9=Kev4$YFP-qBF| zI^bBqtflH#O+VX1?CaW(?gA?0Qzg%p46eKrxW`mkEZY?y=oA-~WY{+d6Wbl|mkAuv zO2WzFCJ9lxD%2tOIB(A)9o)MHnM9VT28|l)810; z+HAp5-HlZgxotScZq%n`-2Ehzlm4Y>Kh6aLpN@}4dWcF=qpbtX64|15#cg| zI~Hrt7x~>;itt)oYvjhz!ot4ON0_rDmMg4rqPrUNd4=td4=^8JemitMdHnDu1Lw0Saauig`Jz;)G{xnoF*_mf7Z?FK`{|R=(YMt zoS+K3{LnCX1(&bj*RG{&SqkxLdr%?91%sY`8w1C=JGbYG%8=n?ug5=*BZ=9X$5zUj z$NK^e0ZUM=X_aKNBwL$L-&|5LRjp^LPjQbvx)?O)^p|NYF}sxUT%~0%@$pD)_-xZ| zqeFNwy#;FRzGdZY?X3=2!eC8>4urB06Fla!?K0zJ9cA$=s$_x&?#hv-G-Kk{5jTBH z-L+)5WfO!$(Q8YB=!-|FVv(<8U?P?{bTm1Vw;;dqX*ofy6~daQ64vplm{P}ogQpc%Z(x7HuTKgqKVNY5@dcyG*+Pz&N9cjAOc zo(zKgN#z%y%@pLz8?{8t_|cx{;L}VeoK2?781ibyr%Y4gOR>)Y4RHe)aPA|OXry(eIsUJG6M^Zl1$NwrLuQc&t${X=;j|mA#@FJ|dm$ky9`+l+jZV3h+}b zwb2L{%z+@#1nw<>hRq@d-9%1Qhd{vVG?xyBJg~{<>evB$!D+hS!SVbcVrui)w!Fi* zR-Tt~_cgz7{Gug%t3s`3uhU{~r7n>%#7THqlBpZKv4d*g-`gK2<+9gdy~8z5AlWP9 zzD+f;o#MPdwByk%(j^QCvtq9eB8A-KfrrW!Ji))xmfhsO2vaz^(9tWX2Y@lJWh2{! zxkVYA-~{Ol^$!Ojd}L)oB-;^NY+bTM3;PpMX2D#VU`@$pSyF!b_SVsnZ0Su@WSp}mygt=(`m#i$HFO_xoT)GHos+16<1 zUTCJ|6n~h2N5Xz>RI|MlKG`xN3j}71RF1xb?~|?LU!QHMfJZvC>Y3IuWLn}T6Mr$k zpfd%l!7vvh2#*xw#e1q?9wau-cCNbZM696)OY1|uZr)${toMi`mgo9%c$irxlF*78 z8PdrZupR!9;%}Y|r-|rjkOJI?=R_foE-0ySv52A8ygHnf-n7Xp|8PPln64mX#E7X_ z>jz|ArS^ZB7C+XZhVM%p^JD>^^4KZhFa?GdK&HQvJ10WFZF79pcO5W9R?L|nb&`Qi z^s;LX=fJK`7;M;6rJNb^)#KR70$0yc_}i_A_pAKc$%r_gphPVW!{RJm9v*boOKL6wWgt-nAxTdsL0*l>M!bR5W-OnXITZl3`1 zij>BbTpRXs(hrRsZQQj04c{}3o{T4N*yO&}B>R0{5ar_~Ks{5OD$yP4-O4gy_q1(= zx6oPPfAGdqZsD@|a+U)>QUNf6e6s4|nW?AQSrr1~%L5MD9?#Y`a*7V(A5i!J;pygVE=^Nz$KM*Od>y1X{)suhy-Dgt z+8N(yp7saCOiz9G1fq3 zrAFSPB}^ihdvXcmU z?tDAnK{iz7t~5%uS$$wkSH5j&vIM%xKn3DN)HwC?;7%S5aLU^|XFQ`FLP44x>$3Xt zhN(7>Y0Br`7m8t_*=`mUKQxUl-R|zG{y10}pS1kbf7~bNw&2C7y6BiE^^)djH)*<) z4S^WHmzarB!hnYDr8b5K(Xira_{31VF3V7p0af9_uO>;ooDA;TfU%bWjY3Y=&awFk z?+`sV{EGUJPr6cGEjA%;Sj(OJ!#-?&9XWyn^!hzw-Yd55F- zi;b>+mEb`~v;|Jy#rZtOJ(%I;Ig(xPSVAZ}d-~+Lt1oV^=_}`c(yY+@vtG46cK5fj zYQPSV!F=j}&(`<_%SlN3e0 zbz%wAWaIOr(Cr?nr`LfMTfTx$Sa9P9d6{O!8kc-v&pyxwAQt8OlV_6W#4*_gpAVcy zAuX?Dz_F80NonsJ!Ig8uO#MxUq@U?gmAra}rS{uyl7od8>MhG9#JSFOc?4l)Bun+z zk-~I2Kp)U0A`BlR_oD}{H&HLOFE>0j%rld;j@+peTl{|m4NZ=OJvlcw8P$6#C zhS5%;x^>zcd1;cH?FO{~F~9p{*p1E7(B=T}aE^N38;Zoar@|aQac0r1w?|5566z&; z>zlJTCcQR|aM8bN7{R&kqj#4Lb^v8;%mLe8{Fv1e>{pWt6L?$=xMyAnXEXDW^H%?O zFy4S47e>D60jW@7gsfh?NgQqV_@B8@zo7K5bEz6Lqcm}Ganx)3%Blu1AbXj(M7SV8 z0Q_jCfJWVN_K>#Fyzmis%!6G0R2bzJ+>n@FWapu!pC5?z_?C`mbl6p%IC9*NP@x9&PIo-3XS(gl0?`!b7}f4`}02Gb%n{!2d}}RKb2WD za6A}UfhzQ~l=`P1W@VBZM`zF1wyy;e72nZWPwD*F`pa}slGC`}{Q28%GtS8yVOs8< z$sI}5j(-7CBz{q-7UF2{ICTW;bWq*A3wy*RiIox5X2!kHC^!@NZ=IVNq#;$feA`)i|4s@Kr zmUtKi)>9RttL5(Q<&6LsD?bg759iqn9H`LS1nMgfaqHj*wEE(c&I5=*^1I(+#+2h^ zPQat6bgNt?LS~hgd9J*Su)Isv^nMj$u_YTpZfvAnxEi>C8{B0T*#nb{;22-kg^!0+kn!X*JsKCIk>3}U^W z{bdSK`8a6nC`J_qiUw%84m4*<$HVu4AcLhzv8We#*5grJI}qlHU1LM-D4@~6ZjO1& z?uU0h@CCVXJbpHMQV}9b4!tIlJ;3|PS~+14>+*poig((!obj@9I)f^Hs|uvhH0t+3ge}F&wlNAm!8r$` z&cYq&k)*WO21?>7-aeX2Kfk(MP^Bt#9#$MX_$50IVyU1&E6%uV{tKxUEd zv}TH}Cp5Yk@D9sh4qvujjvz@EeooGB3vl64@UVfX_H1NpLFIZ&SNZ%bUSc9p&LXGV z^8RpZ)nXXeX@DRVw${sg&YK~M@S|Z=Ai`C^d}gJn7%{;uqn-dV3FM<-B0!Qjvx3W= zvGRc>E)4Od8h_b|8eLu@lCRJh>aL0!VLdZ%vzj!+=LUPEMQt! zQ9O)asA{&jfL?1t?V&b?ofe}TP;tTS%#(07qIY}v>CRfkKX-_>6TEXuv{F1y_E~+s za8iEmo5%*wVMBry~NOSO9#gJvm({1%d>;)bdG zH5dc7=r#)Sf*KhI>LngGcZb%%r1S1Xn9X+(^8%*z4=k>JoSMwt)Ef4VLR?0Lo&55@eu6vjy$0;xvr`LTFQ_d0JDAc8KUs2I!MytiKwsMGSy zKWmO=eg@12(n%?d$vRFKr1r|7@Q;z+v<{l4CYaVvF2hQ=kqXZvNf8hlpRiGeuiBG3 zLgHYe@Odr`nMk1)G8_8p$`GkfCc#<~r|6qq!DpDroieQjwJfx%VJ#(Abi%mkp47m8 zAk5y=GPMP3m!AVR%v1bNa4xyFPH6=8sT5&@Ensq>HVY} zo*#AE3L!yGT;R*t-gPO3$cPVP3SY}+8?8At+Kvn%Sje(=QM;us=30Lhs|q0;C7*h^Bvy@{91mju0CF=8|8F+If9#U~|MrzP{sl%poc_Lh<;=UMp>ZdF+A=8t1zaEh zobGQvvGnU;o2;;Yf-*a&5d9R`DOV%<1Dw}XJT7NO$JQ*O{TlSqmCR2b?f^^tYr-W* zs7KD6(z!xR^0yMj_{FTvkERh-Nwe#6%?kUDLh#1~U8yCE0uhudc^hh8VcGD|U4>TGdBSC65I(A~|ET!q8<)dKcQa9A6@s_$Lc6uX6Z(35mL5J|XiC7*(HpqA2G)$3yU!gi(G#yt@Eo_#yf?P&Ai z8a8$h{+ya3Ci%cH>X%1|4<}wGb|hv;pHc-n=8Mg1G7OZsF_~>(3H2+QOsTI4%iW&s0$C=IXJp7oo&M|jor1<(=kx(Te4G{fNqQr% zWI_IwBs+0zs`RnS!Brp()^zC?v$fQXzGxzh16~jVOa(2M;gO$=vlF#~=L0sAb8=(1 zl#$nox_p?u*QlJ&yq-D=GkcR6v*AfQe^kTE!vm&U8cP{(H^G!bh9uBfQylh}>E$61 z{>TZ7MRh)*j4|S0?Tc>UN}4buCakWu(d&1M-2fw*GrB>2ZMncvEst{4%8$E_qcs-2 zcB=;LC5vj4Cum`{95jUvHhz`9>rE}UPX`4#9gx}WWGSVxA>6jdg)zoOPG7Tz=jx<= zmh$bQXodkx=bCIEMEPnY8uWZ9HZz@1#_Z-?U{0Wl3RkTWrYOgR<75_-xBvZuHaUI{ z3^2>!QiZ2j!-V>ZqwXSnj~YPb!>%9)gk?sNJao0u3WPQ#wkivp{^YD-C(WKJ!G0AoeH0W31mOnsnB3E=@ed3RjFRj{@3yg#Ej&FFu&lrOzYZp}SKzjnRr zBA|PV6^%F}qs$ycfxQ;nvg#o+$O9o;Oj50n(J<2308X_Dm8z;%?>R_yBuZuVZX z3Fj0ZAv%X*DNGTqeJy5FUuxM;x9Bff%xJc?R|e2}!}C}@eoSPYNMxbSodkZBJU&Pt za%h}b)HdAtL}oZa%N=Xu=nvI|y&Au01!M6QVfQ`#Yz=$P7bQSNU!7Vq-PZs2o<1m; z&%dZD?f>5QRfS6jPVg&D)SI+9acb`c)hoT2wr@E!1yApE{SetvXXut>6Rw^y9$o)l4-e1&j71Hc0^#Y5h|gIg^*24%`FE|&YHXxOW_hVm zU%8w@G>U7bEG%42_>G*XWr97h+E}W&9*s&M2(f~L9$7xF(sP0kFj~W z%fM=)G_E8c?q@6U>g{}eI>(|Bx^7)x!`07X?(@ae^0ooAPK~ZCsczU0wu;VI-_$qD zf0eHeO%5!yD!*7kd&l^lnG1FsLOE;mDGs_;0JvS)&ij@beVX*Z#YglR&5XnHqJv{p za656;3>gUZ22z8?y!&4&S;k!me4sw>!aXp)E(p`Qn@_@NK|dKzK0 zOS8PRj!qQEzh!UCG*0BinY0%KKx<2Nx_=V@ln@$2_Z{!jWLhguJQSy8h&Lc!FjiZ? zKC!Xr^USN=@o~9rjM|ml!v%bBbKP|%cb3}{F)5Danvflr z@jdNW>go&lncGLn7(Qy&v!uC3>9-cepF_5(S;HhUkAP`Hsg>!%z7A(cXhnN&WN389 z=J;y673cV>ZFyQ@v0IMNfE>(xcui$k>02#%R%l8kSogm5;lQIAX{!DK!j3Euy)_du zAHv-G#Eq)J1zJt;=i4%vknF+Q9G&;736xHuz%{<5ES&d2)P))!34)w@v01n(<``nm zWkwefgp;u%L$hqNlA=!;y$8a^#Xu{D|HlgY{ifi#X))H8 z2}kJxS!9!u7E1JBOjud5b+A^)(A)EU{OD0l@c!ZN{jCjVG6LZ4+r62o*_Pf1zU?(0 zr6F}~=8V`ZN-72s-PMcpMOdCu`UOF=7Q0IPTUY$^+`}{x zM2O2qeZf$HYVOegvGw>O$iJv%-lScnESG@ieRz1>kUQqoTT?-k+HZ%80>b4J2z@G( zPR^|HFQ|c#<6N!A4*7Q+)dT)DX@(~F5oS?*d5@r4 z?l`*iN%F2E-eIj8xA&(%0|8*kXSit7utq>#49VKri5Ktv=>%JlE9hX@ckZ z&HS?5^D%MYPn~JR%|c*~({8$d=t)P>fc>{f0T%qWkmrKRH(bk) zuZL<1og3Ul`;){?Ha~vf{B9}pg;$35JjQq>tA~MnWp{&(#XgL#a0a;y+X}~jq^y^k=dz@B5z34 z`b2MZB3QAg#3HHs>Bo=Ry8|-g68n?pPjJD9M?ZJ|GAVN(nSU7!IO;VpZRFk?ZJnK6 z;puRHp|5o+dG=*@|LI5MWgxY=t||fEa&1n8ZHvWMJ;vTx(%>bHUvX)nd1A5Aw9zyf z{gfPdHhH?@ElKc5oS60b6DoHknsr`Khece*dLW z(0DsL^>L6~e%A7yUb@%ECbB&f6Sqd&f%On52N>}>jzGFEAByAw!-G+RM)x4eq(CAz zCEq;pD`;m*<2oy6Hk4&9n*O%QSqnF)lxekS@v*+8i>;t=P(*+n6uLF_wa-zI(wUv7 zaPXPyxKH)d$B+4jxgF3EVpobECzf}_X;uA1ayMH~4878FL6^JlYHPX_hL2Y2r1v!ak~dSx zycn`3Wx*ymIwV|Pj`TeYDfW39cnRyns*8t~(E0c&Ppp1Yp!JBW?XH}J6kahKg1Wb8 zljBJ^DA;1qp*BvasSJ+Gz;TJhg z_`v9eRjIwox1}v!;#uqHshXVwzr?Y<(Yu2D7mc}9aGy9%=OYGfvBf#^pcG{XA$ZLo z2f@`NyUtn8?O0UlkJ-4C&3H1}Fa_*?TU}$T$gn_Bm1rXivdH6+=?Tz5^eZP?i|n3y z@%T)ql#ZQwep`ymg_6`{tNCDPsszuv$UaQYa1FtABniJUd1v5xV1JAVJ1D#quhPr; z+%~$?I}yxrBTi#CAs9A-NS?QAMbtOBkiw#LFH=mShV_e2v&;JXS(bJROD~Q1gJ#Nw zd5MX9Sl;1ccT6Nr0GRXi6QnK3e2^Zm!W+U-LihDTw-dCGgJoF-`4=nNr(WO0{yXNm zEH_G=^NkjuzLK_npJ`@6hO!q-dg|x!Cul-Vk|8#fjaMENtsh;p)j$R`X5&u5fzE~@{cg7{845BISR&i5q|#O+O7ipI@g z-FhF8bF>Q98TI3Z@|Wk9xB66Q*A+t@@SktgD%2JKX?k8O*Q6)h(ey7<>qnZZe$bJsqS`uTidu_q(xWPOYNfZrUewP1RudMP{RD7%wT18OjA&l3 z*)QVGQ)F)a!+|h_pS4taLQ&Dak&68FYtk-+Pt7=zh&WFb>9mw^_%Y$5eqtDqiQ99g zD*;MY$6a8`^Np_GB)M>J3@vIYuk8zTX+{7%1sciMfu{9kCI4kItG5`dDoB|x#QQIy z^O%KgAtfXAo^XfJz-Ea#{bVBQMGF&Mst}M*vF|pD1`}IYtF8?Oc&dY4Mv;J&& za#am%%WaC<^!GmfE^A@|;(0_&sn$RzBAXyxkIJYh00IzJHVfr|#$L1tyX8Yyq!48< zuJY_X%ap>1COOXV_ibrExuCz+RoXT8<3iT_nm%Rg@)H@nShD~(L*ToIH_p!;SfWct zO6_Km+wXH^*uiC15oN^&N<|7BDke_@5?I{+)S{DPf5zkr^?9LRwiORIf9I3T#>1%P0wUbU3{h~ zX;HHPm2=dp@o=b4Z^&${{+ylNf4j`&{{MVl{r`vC1EyYNz}d`-mhS*+6^r806{3q! z_UU3G>~xb)a1_LnkfB^88@m3m)o=dkqc<<+UwHKN`lA~q;?r~{4ofAz_08MhO*jrRs z;#;fTTdP$av+KgXVo6RS*G|RJE7Yj!*=0OzdYb-?HnrxNv+9-8V!NZ8sEt0RLoN!# zt~Zf-7o5(aaogw^I+rqWq-DaX&K0)t9+R)jM6JM^0Nx~a8z(9TC^K38Q-9&H(A;1( zRxGL0RafX**#7##*dn}7^ryd6{bIY zeECNTeN%^d;g-Yxg8v=<;WrR`*0#xr9&FH;ok)?{*(MEMowV{e>4^P0?qWR*u0L~&=BK<|7aa!GbeuO_abVf_8?>rw2IdSQ#N0&BaW@+LpFs2 zns2n_d+Jk%pWn-i_j&e2U2W~m#JMT99`Gkd0{EX?UPhX|&Bf?;$Mdgrg|c0T$e*=~ zrZhw%3bp&DwkuO65>rT16Hr6B8~sb0yr3W;Hmd9`8J@3=3zJpO7QPgpXO7mu6T<*6CuA;*d;zZjtr+pA(5IP3gSzJh1{}giw zDrEl4q<9d4%m(Eu?9PXW!FnWqol$(nIaJ9A8?fd&@=8jnxh%{&*c+m z-XyoeP9a3D#_ECrFU4_u`&yxDU7C$Oy*Hhoavq?ywSvC)` zLWMn?X6N?pFn%5Y1Q#nY;Bw?j>S!~(>DN?v_b^|%S2VQ(7>-2GQO}z=NEk%?feH>3 zTdKOSh03R@^Q;Ti#+w%X?gzLkg|l{UhpK6{R34H#W;fVDYlQ4@m!wWmh)L2r$M`+A zn=1?P^k9k6>5u*V50V`ijt1DHxJM}j2|2^2+a#|rYo(v=gGA&NVvI)L14|gQj|2Z>-K6uFVmJhhMQj8h)!EH99aB-g3?|;7UWLCmqP)Ohd|D=?T+VaU<(-p8qd+n|yp>PR;Ef?_jTVf(ujgpHi^U7V zv_?KoEpVx8_I%8HmB;0*pTNKC^yl#xnlNkY;#4ppqzPPGf2G9Iah>1dioF~0&mAS} zqUOGbMKdND+tc!)Ip-+eu|W53vN3I%+GxUP8>H)AAJOHYOO28fK2k1T;{ORW3{9B) z%Tv9>+<%9-#A$SqLuYl$-p(8FG5XOs4C~lujn|cUlc^}0dZaj%J${by zu&%pUBE}aAxow&+A|T%FFE8=4WlUHR@*u)|4tG8)V2;+M^_7H^ePyjpjWl!GlXa|%OgdvMCV={T7vVdB~YZh)=l$dJ{t5bD5be92KOODi1s3B|=m-D4@9 z3;~7`H9ZC=4o`kSyF}rp(U64O68CAvR2XziKZ7!Bq!_{hS7_~LF$&QY*J(hM__Dpc z)>*{{UZdE-4|I(qh=`L^fzCh$Z@U?oH26bwALPjrJVx9~hoj>g-dn4w}^u z&mq_4i!eU<@Q6>j-$m29O`sPREUzz{*>9VXA;q6Q&K<|q*!HL)(tzjzKs^S*3=T zKl?w`<$kJ!ck=AC0S*-{U+**(8UVH8ugovwQ#^UGJZH`gVX6x6WLc(!m`5ScQ#@y1 zZ`5o~!1hwcR6M}E6MsU>VsgFZ<}eYCCv*cad4H7d0dDyATVG@q$Y5@?PPd7)LUVO!#{@3%m%<(sRb*3G(iv@d{UN=#;05w-tRIMtmF(zP zRpcw~e9qwVGT2R@H(dalB5kO+*OxLTHcw_vH%(XJ8Kis;$B;l52;@q`CRLUZzk-sj zk|eBDA)iL+AJR~*N&{XAxvCpkA$a)V|FGiy?@@bSejAy@)YdKbh|PRmKRf97ly%MS zc*Riv*MpZw_mR^;_5#eeh{i?~49ZcW#h5y^jDiCgJd_u4*Z6;g`^169nV8+B0`(7S zv!Y*3?8$Bije0r(C{9KvMdDB1JKxM`Zr{V)iOExOuYhcf72ja zPQ()b9A1}Xl77J?#4LzpPv~0Y8>34u3eIee^iANX;jqQNSyd-lF9QTGEdEI$TpkP=tE?XE8kgs6|l>j&akfNS1F zc;@)M!Cxl5AvrL4-?sUxThOVj7Z7@b6SWKJOmacnGZW=u$9Z^>Ez`g`BUs{-nK8rF zPmRmv{m~?-=6ATvNk)s?uy1l9R9>;z6dSIYWo{j|d?kA-8&lWBP9d~|*&d7h-XpD= zp10cWtbLEFVL26XQ%Q@W!CSFK?(7$!ZFd1nZtX^0xUNg${H1)W z=j)_F4YL^vA%-#!duHDN_8cI*gl|stoo`>b!E2)AvV>{9_PW=@x}Hs!=IO)yMHDac zS7z#;BZ-LWks-PBZvqosJq0XW*gJ2_5&7H`Y&Mw0WHB7kKJQ;2`-J*kZ83%BJ^B;iq?c}cVpw1SU_77kxIopPHO$#0C1jmY8 zR<#*}R=U2VB~S?@mACDxa^A3!aVJ-~$9hT*w6uRyD9%$d4fuJ>pTuc`jY_R`sp=}F z8H-#}K7{j>CMUke;nFrbOFKs??_lA1#l_KlFO}tvoO1VV^kZgKdGD2nWu@&nkq5Ph zgiib0-a%9>9^{L^9M!y}5R~P1+uSUv$>~l?NLIG4jXID#JKAzu4rF(98~F<V=Y`|@$OIJP*nM%p);&oI!|f3Tp$xcl*!x`*Xb=2)$_lmDViR?Mp8 zKJ8v{J8=0%59GFaN7vmPkWd>n6Frrc6oK}3Y<4p=OD?`45eZ@g^gg;`LpTk(-w+%DcVD-@DfCPNG|@NAKA z)i#N?1WCtoqjqMFu%!clLEL5o_5hvS4l_Y#{F|bWb<#a<=7ny(M(D*t z9^RTCdaAaS2`$08jiqj=6FV4Y#2Fe3FGPgN{m|HU}mO54Ceq5O&-}VdB%5uT`WBFB|O*@A8 zn`D-|C)`nAuusdYqA09k=REIr>BJiQ6?X!n#hCmb#l|NcL%FO@`pF}@~lvpg|M=KWq zfm=TBodn*Nml|~=6q88#CiUP7@)nmnfp;P2CKV#a|&)TQhAfgz`emt!ZKjT>=oi*mE9xg6Lf_r!5 zTstlR8DS9yv<$4hs|d4-%y)pEpJl13?%G5vj10SpTwzGv8szx8c$IO1lK0Fg;H~_| z&!iCFTodJ9rIw3+J>$%5qwqwX&fWpCqe^~H(XUsFB^1~hsIr%(xK{FE-?ibzl;LaV zeSOlwZ=>24o5C|Xbo-0-L7GtZ(zYfc4P6`ko5>hnU-XmV=1pgX$B>yTdA(9vHSSRF zWz_3gZn_9nUxZ^CF2Ay5I)u#wB_U1xKjHPHvVuL)S6@@0w8zo`{RSY>a21n8%`Zfs0?gaOvM zdhx@VNl`?p)Xyq9K1c73v#S5vmfu35;pL^|_r?Vijkfwwh@NDZ+Qct9hO&c6 zz<_*-5_EXffn-VI{eYvs$yfs!leuCwVXRUQXYW!Dv?HhcDpXp%ZeM)b4!#29i?F9X zeqI~>G0REn+n{es{X*Ecsg$c_<-A+iFh`Rap#18jZtQ`}DRZE@`#nFxpmW=ONw*#b8vT9f~`0WJq3q_JCxK7lA?iWy>wwhtg-ER zBD{Cnv=GQ;Kb&m-p=S^l{P7 z(6sHh@WvAZbj?B=w>RQxsd?jQTU(AR=!=(q{2)4Yr*N983@c)O*UXKj1BUhqVK5aO ztC0hhmggiFYf7nC9KJ2Ex6H4sDI3{9-B_X7YTgIS5HkcX5ffCdXItJ4i%Dn_%LL-tI-&(@;lhjQ7Gf{Eg1+1d(&N zBZ3m3+DUV8NbvDyRZuu5WKutM4F#-bgR`x=7qI6@b$#iaIt#2UDYPE9ayf)VO~T=X z(zm0kUR9F`Xy*q;8)c(3sP*E^w38w82p}V!McRn`nNK+whNHfp zyV}4}?aUAJ?wX2!G1%QMCXb*T;Tq9+xr-TKb>DuCqnVilV4O$rAE$}jQ8@qjV#m!n z3@vub$V%S5FrlTnP{^{-Bx1o(#VXy`tl%K0SOq0Ttr%h^I4WA%kcmi>Ao}G6&AN3r zL%%?wq0suq@^IY&gIPG6r`yNFD#0p9OEc9JT!>5H6`>ePl zNuWG+(m_2XGiV2#?u%LNUF3@o#Z_b+;xcD8^*$X#WWK!luMKT~b3FYnV}$nh-)BP} z$M&lx`<73*2A$Ew2&5nEU`PtZaG)o*`Y)3$>g@W;{+L%`IiP=UIow7Hc;KS{2%*l2 z*#DPcmVX!Mn{B3r-KwF9djO9NAjEn}g=Q4NfsogsSq2A~J>ztydQ^4L!-ZeK2V4Bt zC$u9QTl^c(LCK3bHvs}k-0kzlPj;?yEw>4ayc_a_r&Fg|`9MIvCL?(5=Dy*#8x@<< z7Jz6vYh`kx(ZVmQP*9%p(v@|?Z0S^$ zi~ks(tCH_w@SZ)kTtW)c+h|2GiJ;%58g+)c0EI1akR=)gaYCt}mo zOay5w5(ZK9e_Tz9<6GYx{OXc%Xxe`e@T`8up&fp4>_r`S^$N+o)&S^FdjF}!$sKx7c)>9@^9ND&O7}6UB-uVeo35_`lObB>p0Ac` zU1;)_*{?!x?tyx1X9}Q}O`#H8z39w027~cro{}Q7M zs$FaxY5@a;Sv$2Y4%p_MW-=QuEuN$hv&;5k_GE=!#~we6mUkC8?$A3)r9YbAPH$d4 zq6t7cB4DxJUM<%}rfA$km4@ZuapE^B4JFY^!JX9=g~#)(=S%3GnS=D0A)b8BJzT<@ zSPQc(BI0gVbwVKiHubtd4+el3)F|%Fg^9>i&QGN?k;9$(n5{>)44H4O3i}AtU>4lEjc@EE!9tg+|u07Q;C+5-^cO2kK^+sjX_{j>(>gY=%#Ln)kxqlp`L%Fcj3V~He zToN!2xpxRZp7<(a2E=RrG3_iwy>dlqGtY$hpWn3-1WdaVSKGMi0^h`iC4z;PqNF_I z6#z*|DHjE}RJwK`(F!njl6Z13P3iKst>z)%{zCcl$CZw)-a~-wPw@VjVL-WO^xC~r zlL}<;WA}B66j0=ZhVcZ{Xd240=#Lb5;8-HSX<~%oO!@R)&}oeJTGuaO!n*t++&fE* zl<2GOYhrrM?lUWccMcbg|1g;6E5K}l|)wslW2Gs0(A+ zlobTt$$Ak{A^N32JEP16T=bK7F-KS}KDhDilnY#ntE#lX4ahU_uq97n>#d!BHOh_7 zHCYvbrmYaaQkT4gmJp70U-DOjqC{vj&4(tKctBXuHH{kq*S%x*oQnZ5Qkh{@PL7`y zoK=;8GYaTPqacAxwsmR@iB7+tinazVO&^nDXUaXZ7Tbh8YOBtPm(!u4&r|byBRvfY zICv1~;to8&<$3%+J;<<9YUAeu4FumxPtW$gkis7*@_qr3tQ67{JzG4I`A0zTJEBdT zW$|$X8dsC12%7%QQvJ!d6EC@HlLi##yre2(9gp5=tO55bgViSc27@;bsfYvKrjB5c zA0zc$Sd~$Eq!LZ?aUk?+zpJtcrVQS(tx$^K8vOX`HVwng`JRU=e(6a!Cf=b0FV;~8 z#}>;eHbtU(!6o=z56k>0;UdCSU7F zHI#sFQ1Nq+sFQLk3BgHa#F;+t>DtinM$PiQYjWMI|FzNj=MK!o&b7^@ovJa+@72aP zhOG%XvK_xU)=r*OMoj&p@Di|J+pZ)rug?*Q^FE(^b55HCoK2ojlYyCWXp(z zx?C?#L8uKr{dvx3f0=Eko5tT`*-KB7dFE}%ktD+3!{qOcywqibU-V#ycAY*8Q*R{5 zr+bFx+wAD}>I%|pCyvQWDb8aB7c5)uWbE0Djzvs|Iq$_P`EI@u6!@uB_6agg+aR>pEoN=4*d21EB#^n%LSgh5A zZk{l!7aX;NSEysHF&;a{^BXF`)#9p|O#LJgll&<@I_bz!H{4 z^w^HhcPdybV3Z28r4((VzY zlXRnkpB@^C%ng8X87L|>-aV2yV``mKle)Qp<))L?Ef2H<)`iMX^FHTG z>Gf4tqH#2M8Wb;Yc1F;|oeY@~;vok{wb+dS#dW%UXqxwdCCbU8 zJf}2}m%EMUb=%4A$ zhB@l9g(Sss%Imf(Dnk<=uP_gs&6f(4T6d9}ckAq=DjsY$LuvUc|1k#&PneGTf8rj2 zJx|&c5>iR#GBp zZP{y4)9VqTYt6dN;Lflx#RG4WZuZW%y;UY=_n-HaEURmi`Cq>X91QLrBoEZbhmM_p z7}FM?$8g=<#l`^P>sR?ru%{yz9F?DoYb#&GIWm&v+P;OBOfrPIRXRsqho!z9wjj^X zsX1pjOSJQ}NyMT^yR(UW4|C?8n832TE;^h{C@aKehIFX(ZUj-D|YewIk)b{ zk6IPU5`CsPDVdJQOOR0_hh>4*7Tv=rRJjzPQAoL<$CC#_c^x`tBuR&WCOK`E*Rzm6 ziTOzSaosgQJWJeq=Das863H)%o$wd!$3FW8JQz*?foO+nbS3NE^>$idJs!A0wEBLt zL}`Usx!NdVV3SbWUgQi8r@EWKSSgyF!5w7fDJu4_HI&b6BquUaR9Ni6?l7RO>K9c=`=`Jvgi2={lcB5VBqoU!YP#rM$5Gnj}~y| z*!&Oxe7=N$KhH(6;rSU~(bbqz(_fBrJ(8cZybDkT2tgb)qj4kR75b`9fFR2jDKKAa zAc3M)v8x!^FUMB~4x;1pBqGxCb{&Zh!U^3I4BPQ;Bu{O;G?oj4 z&OVl!Fnr;@1(=ZlNvrig{I+BCQaDUm>3S<2mvGnAG~iy&VwJsu^p#}v{xXQZ=PyM2 z1v@nGDjKw?Wgi2;cwE9*Y641%vm{uBzFaJ;ry5J@4D2Wu6M2X1P@7W!QK~W$d|>4SkV3BH6H4du{@Dsr7MI<$C|pe2s$hE zS9fCa(bGB7*&i`^FE3gx8O$Yfbk5!bNLo(*#g~gQX9v3R2M|{q_JHAY0fP{ebT9(D ziaiw&P3-wfbgT;eLwp~3^ydHTA~vqdYyfG ztyfIci^rT>h~JxnDTtKC7&&m^-zjM1|51C|6@c0^^$F)9CEnlhHE}Z4$CBDfr=XW7 ze|b%Cnl)hk_wOh(ZZe&^oYnPaPVgtd+p2GlxQ9X2X+!DofL)U`%HYrc=)E$#ZbwuT zC)_em)-@IHRJbf99PR

(tkvvnG3Yc;ZVe%rk10IJ*ut4om!zVTFs3p2q&EamLg> zP+#xwd{hY4&tu+XWam5ofU!kh3l%7%ktl}E;**<#vl;)YJtxBlv9UJ5?|upcpN@GS z@{ih!n<>9?bs$oCfVdzEv$Y3MTD^Xv)=<2~GjZ`9?*Pv~tfPx`!%Xtq>f@FyeXU}& z(deV))W_{hxl;Fn8S$}i_}feP3OZUuwC!x{6jlLyjvJ+QP1lt21EOUWonw-ck3;$k#fV^BJCHZ zt1}Tt**Oc&XF4Im*>RQ?9IA22Y_t$mf-YxP7reZ11LY{zmLRP z-Qy@Fza^?3u)vRP1|V_)_(fXh`Rq-vp1#S!f;aH1qfT`xyAdEI2J2tRy%Ucat<-og zB|qg9i#ZqR_1jL$>=^sB1npi&EyGr-aYxpw(QKWvl-(H-c`P5mt9M%b28j=)TlCPw zE1n}IEqrrX^%eS$8q_p&p1jLjPuJ{qc0t+o*oN>~LoS(=R%neL!Q!sS(&~^(EFbQ^ zL4b`C<$Cm#;~9;b8W$qsKC3Y4F2H?aNR6~x2ilDB6ijGWh@3Ke z3vlZ>0@&jmNB6CsTSe{8K^@+?5<))^ihVSk&@CHJcIida^TowIR__3+Z#}45Ip4-V z7&J9>E15TdRB2U`5=folDLukFB{zItK@|0-Ab5Y-$?KMioyPhT(*F04DX4cB@GmN^ zi<<*y8@Y=RbKv!b`EXv5v$M`4EYtS01gp*$YeDy3$b_KI+Ca~}#s}sC^lgi_;W3*w z;(+POr-LNHxhTbXXaBuW_67T-%Y?1bXnb>IAVOznhP;gH0WrYKPt}3hBmz5Aq!=@? zB5{iGwEHe2sPpfgzL(>JscbA_&&jT}`%C`R4CJ!}Tez7C!Vv-QJkzYBjJ?)O+=G>A zN&K+uv9DJM1<_9{2_?!-Q&x~X&mYv5vBS5TYqItN5eL?AXXY11_2G?3561T;gZWLN zp(aV9@W5O$*ZLS#N;dX%@?fSkJhJwKZRq`z=y8pGSKscI8##ew5ICaBPwgqHNbzSA z(zGUhXB$?J;qD-CwP@r48(|I3c$Qy{^o&CjdwG0`wSV9*=57|wtX4svwB0|7bYzhg z!WB8fDj30voBmzMwND=e&;L1a9*(XJ67~Sc1C7OcA{*-WOnfG1JCW@IFd1tc7k%Zn~PC#aZvuwA@xi}h+TBU zQ2wk*q!{}!ucBspS$)IJubE~qhQW!CPVjfTsZK%NJQUD<%E`T?Y6j@XrKC8AE)^MB$hNY%kp-!{xA$weqR$wSCber(;b z&dJ$yN}r{Ss13HJr&OkTpK*DhUh>%EuCtrNkp1IcHFJri^dnR|5SguDW3Zj0Lp0f3 znkSq+FQDC;BttAdSL#T)Ej3rcHb-264ol2S8R99jdcqLEV+5Zp zvwt__E%R{94|e^TeK-J(5>G!&P8l1qKlbUQIFZz|+p_957g7&*XYca;Uq!II5^Fol z`&RV>Y~_9@JjzJabE2ix)wheGh~D4Yi~?}q?$!~{4`e-4 zlgZos>6n9QF%Fxb?QpCuC`a$D2VgxsVaqy@C6dly%N^R7)NhuTI5C%fr>KFgapI2V zLAl!(Vz_)5!G?JSz@p|HGmdMyDvdStd!&1+Zh$aVNz`mJat`{iHl}k0`7!F^(Z%g! znRd_DZ0xXIB<_9&ejq7(b>GQ**md1tVpD&-W6_j8F-rjEYTG{@D3J)m*0MtX)(`lM z!++#%9-5&lF=JG0JMwAxLUkYQ7gf59TFgYhajLmxM2#@#a9GjKNYC@G3cESxMP0Jm z%QpBn)?4z-V<6*5{?V$b>_9_aoXXXLoJH&RW9{yu?vPu>u^}sne0SNJr8oIbW48JE z1(LwH8e>adW4OUH2A!E}nuRDuzq0S^n&>4|1thCQ$dnharaESj?k5ZSkT}~oSIF)4 z?p@=;q&TSR+{=d^=cSg?-}(rmC#K62FN!FXN2|(pz%pf{7fL-ByJ(q`1B{A9Ro-DR z^!|GXL4jqy0?4%iF{58Eh_=j`kqE;g+2$Z%{ja~PG%&3!G&iLX7*4QFlD|d~&3apn zy6tJJ?!oRr&WIX%rzHT6!&XhHHyB{36K)KAy;$WS;zS}ufj@Wp5s=JN#@4SlD?n_$^9?a zG%+jkTI2|yO{)$!faJ>SUoL#VCQpHs%I6f0SO2{zcr^_&{k2JQ%=@cncGQO`P-P~C zE#_F>RsA5j8{(Dz?gxoEQxR`4L>GCo@vrmq)pD=BJ z*cfS^Ez#N==%#g}H&X>WkhqbQfwvg_ju}v66})Ify-3Z#hYC6$51^>%Jm+oUHA`dP zxknC8Mho>Msyjg0RNI{|z4%JRePE0~YtW3vq;f+HL#`-vR(}+ISZm+QMWOAbbWs)x z*th$w_EHleR@>041?JDIfq-4<3`ZL}jm{=~*PdgfRXbRP&r^`SH_fHBj3TfcaW!Y2 z*n}z3U{oHutb#b8-cA;b2wE~_6Bh;c5*M&lUCA0wl=-r2>ZJh_=v+dse;JGB8FstB zG$XWeBiExL(9HL7VS{NWhp0me#I5?{Jf!R;6`f?4qtIj@W@7!mTr@Qg+@Ih9-tOCu z=pRy9NVq%8iy_)Y2L)F`#2r#chXNQ*PT8Vs1`#HM+lKj;#gcggV&|JfGp`cX{mWL9 zss4|UZ1*=kN0^HAF{*gp91`UEV^o(wy++`iVAypFXRU<$Rr30e%}2a*-lbc zc4f&JiR(-#Vxa-KGv{}P4#OvDiNZ{XBMKp8vPI;yOOwtnw#|;qfq)J4q7Iz<6^-H= zpULGacjXEJn4BV!*w9}Hid9)xr>jfwTZ~4(r4}3Jzu`uC_4Vn=t&+nIjWHRUdtpbJ z#}|E&9Hqg@+~%~+&L)qF=(0@n#GmQ|*qW6G;PZ}of0b5tfWMitwn~I5*b!v9K2~#) zb!8X7xk~Q6S`90_>~ldW$|N0zj;+W~i6l-~;hHk#;ub6{s&om!ei(B$#>3~`cM)2S zuQ-C|pCO>MxaA@-_mIH?`0DiZt`2N&wiBo=VuER(T`$l|1wEABB6)nmXNV6blAlA( zsb=T};iA|`vr^;dN)@Fp_fKyu-$;nI=E;YHV!AI3X+l2c+`nH;y4xDVp^h@l5RVbn zQ~+D%ndq)-Nv3~}kSr7GQ4WpXQXt`~3XBw^DHo3Sf{I}%%ly@d(X{2ei{<0n5p}ao zc0&Zq|Gun6=apz%UEBoXJx(iS$ZTr+xQr~0x9g?*Z)&;6f=%spd3#Xx%%-wq&j;K` z2ZT~{9fo*M8y^!ke8i!R{P7O=LuSY1Cw>j@5 zdsnRRQp`^C-(8g+Sw6t{6O*Z4Bza*NbK=g;`%7x3gu#%&-&DU>MdT4-QAgCGTAZ;kG^@vtK;BwYe83=U5M4r7A^9HW#sO~Nt zyqn_K3-)S~@>o#3vFcX~q~rhKJHg9*pAg!9j2wW?XPN&cMVe;3-lM;>_>BJ(4v}FA z`f+8Jh5Pzx>^s6==6UroqIMl=4QsItffwp|+!rz=c;kqJWQm32-d5Nv zFavd*Ly)MM9}bd#wt$$2OzfOknx@)31SrkZX(WHL`{*>jiCqep5UU3 z7;|{tcqBXzC77)KVB*;u6zbY!mE@Y}cD~;oltemzXXS*WCd<5B_^tHsKWQ5-`d5dx zKGyTfy?>L?>qgu4FtkXt;iz>xqh%6M%r6iB-hUpxkxK?PC(?>^#ju~6{eQDy%VCW5 ZV8S>M=jUorK8{X<(LDT*?OA?*{~rYK&@=!5 literal 0 HcmV?d00001 diff --git a/images/2/list/1.jpg b/images/2/list/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fea1f03efe29a65f5a3c5fb41697c2417d859cf GIT binary patch literal 22623 zcmbrldpwi>|37|7r6^u1IV5|PN+sze=dHs_DzVN&>{ZH=kR-?Ls=TBqOF|A=B~)TX zEXP$2BQY6P#IR{*W*as;Ui)43dcQy4+xPp=?|1usb?bK9ZCzci=k z;LX$22T*`2TZBn=+Reg&$3&<*V#mjxUOlBhYig>iG7fC%sycsjVC5qpul~YsR#vO~ z=asw*+pWFk$g7m}!bJJ@^wFqAIU2XxuKciZ+PqZf;IfxTi;SAbH+Dpr9Oy1NG8l2O zW4ie0(cJ!rIdKJAPqxbSNHaTpBj*&0m8h3b<{ydpp~cv+HU=Pkk*Gj4?LN3eKpg90y#rF+NquMKwA}w zt_DhWe_J(%Pm~>Y(Iv7lPiKhyd1_!aW+GJ$1WbW5C4p)na~zNRK%Cks0--jds#f;V z0gviDjL&dC{X7A{xv7DjR<^3#Q8JW&_=p4{j!VkGpQgiv&bw@ z4X|gQYrTPJl&MormTJHcTB8Q&#-w3PpRXEN?>r(ym98?3`hQp-EyB5miGHZp!6hd_vzN^cW^8QP@2)g-tJ_=2hn~blQ7fDvB zfwU}PqACfpg@4J$!(=@1Iibx73x6H)SPgs=z|Yt7gYfXrscDo7=f_e5^Gz~Y1YTY@ zty>Xe-MTzb!x@lZyD;TMWiqD1Qn{C?-o@xvC)h})Qj5xyq{AD};Lx){gb`UEL9QNxQ) z8{{oKTb+ikJ}}WfvD$o@ZJul2*_%PP{nO9p9lzQYn?EYeiJ#K7%1_LHJhb6#eX(cX z;S#~I#$&Y>#>ei(98EaCFHT9%r%e>t9m{>jSzyy}%vqlRzl&SfH!?P?+GQ{{$KDZ- z>bkDCy4%!Bfg&m0 zcJ;4obU&eFSO^#B{0QNO@5D^4gIYn!u1#uSMzHc&KL^5c;|sg;ex zA4MfVvSF+$)5~xyu90}fT0V>DsvhKUzvSJY2e{NK@D$drC7ttPfb|+V>{&HHr8Hkh z>@qP4mCHchBPeJ;$7YrQ(v?AvrjtkvAyioHep?On#)wP(^+~^X(DFdP2zvOxCHS`M z#y5$L62NKf~B&1qJc_;G*!Q&4c<minz6Dfn@z1>^;xMnUa> z!3MhE%v96k>T8NiLgWi~9 z@iy(-Uf(20n!^ZQetvxz+h@MM{o=?#D=&!!m3C7N7$QEXf%3X9pl*cBUuf}xIH3ks zoZi!G0qMu`9fl(o@A;$#pmqM6mY9FabTt2go_BI%(FMV?(2&dlW+CNXs?1g+EOEh+ z5tKeO5A2U_FwbPj6!^TJJBq+kCgIk-tq1JVb~hA?n~VkQbVUuxVmWx%-1u7|=X+i5P0YD;5TzS&IB}x1}O~ zA&iO>$xy2@Q4JiosQVg6S##i|CZdR?S`1^LLLY2xi}Hk;LRZ2db=UKtltTJXlm#Fp z&MlPf>~ATDra*d|Ui-c6VwbWR%mXV67_GE{Yc2o|p|Bm?t-7J`REi*;Bus?xr^)?q zq##4~e>g3k+z<)X;BPBAjV330Z9k1hz#;6pdi>pNKF%SqnpZXvH-KGpWmnmn)B~xV zVlMY1?d?j6HWxcqfoHUxnBuDe;H`o-U71`uWTOVIg+p3-GcdUQoBRPHfgHRCSO`!Z zeLxkAwg~vOFktk2stxo-JA_F=!puk&+UV6(xInH4qnhROZvmn)5G^VVyZiia&nFAW z#88Iv0x*c9U_?(AfIV^!%7fUp43NWExcGw@#Ss==v-aoBKCQ=+d2ob3-};{qg(2?y zKfu=%hS;jGBuprJbeHZEon@x84z^Q@V5J)Qkwtq=xz<4zgI2M8vDNL1?-C~^K zDe2?Tp=34ihdZ(;`bm^$BV;0d5x4NwSno-Vcg#Od1)to5mSk7jJ6`|u?)@MKoR4Qu zP~TKS#YIJy9!>8>5yBhN+F{6RWH}ZNlmzrwHU5q%*RKiN!^h3lz&b0GDwj`zvbtV^deETjC}ldf z2rkU!Y9Mx#?AmkHe$p;8y21%;JtNFi#Y*8-1?~ zHL#}FR(X{&!$zBeVtJzKA8T-?1}?|Bi2o_aM-XuG0B7SMCPxjBj{kk?iQWq}a26r6 zrz`-!6|+dHZQA1y#e9lp4F1MnI5Up1Yy8Lvc#GjJFX+36984Uqt21OL2O&aG_YrKk zVDDed)EPqvGo?8V^~?0aL(S@5c?VAW1$z5RiXw`1_*9UFDtc{XEG`Wn;6FTg&b?*dIyGIB{R`HfQv1k>o6!9`-ZspyXOT?Kr+S%Hx2O z`EcEeh8WML#YU$BP1a^48Z=VMXOr+f;X#Gpljk|yfVz&heTba<=h@3A;&=KDMD+Fc z_A)}M`}+E;l)+hauRN6Tqq9+-4sr=Lw`v+B9cVfp^P=gXWpIz*d2C6kig|-_2{G@r zcXPUEC!=wx^qFszSCqf^a-uFNZs8N@6&l(k{uCyp+bj8EOy#RVzerO)YqZZRG?G)A z;ie=Nb1M@C$i>*eE~>E7eC||5Mu8nU@3rL0m4{WC8!0vO))&7#xZyM7q`UI`ZiU_9 zd9TLw{jQs+fvXVW%i*~@fWsQQOdKx7^Ota-D8h$HzdR~$mx-PQQVqc655?(%vpj*V ztaHXwIMbzRXDL~~NTv8?*1c#H3XLYol*JDp81kgxu|q$SznCS?6r8npQUiKY^J$m( zG@4Ki-1KZM44!aCO4iQRM;)1g3a_u8Uc-dp1SYCbUHPu%FXq$%o89Lr^w4#8VR+^B z-kir*&>#vKW~>v7=x_0~-?y<^{fm|qPKoVj;O$S8LGLs^L?!yXr}GO_7jQKD8AUQ1 z+A}3sGXJzRcxZ=cA7O-W2VCmpKjN%8OuhN{yQ=!P!jdL&(QT&#(J%Zx;73bva!#55 z@^zk!ODnlH8tto1QtX9^VQOgMtI2+@-1b~4{unj)eADsw1al#?;qLt1P?cz(OCE>P zFPp-AJH7Bj)l!Ot<2tMA<8cQydg~38dqvFzVY40}Weq_EBSUAT5iCnJaGMP6=qio- zYgr}nX%r28cIV?DqHOLKO;TMfZBvUVXk28P#K$p}&oCh2BT~!huY&(n4`a4UB3j;oN^KNI=N@ z+0^zhj4~~XDObRW?(soHk;QbQct5ArfScF^8v6vcP*$sfvRJr)^k^e<$j?-+MZc8^KtP03v^W5ByA_hk>Uv7ZX-=;>mLIX-^d{n1^HfC{KVyn_mIT=_ zJbWHiBp!2Y{Ew*3UfYK zP^0n3a$`-WZ?7eCzMHw4vapM8xld!?Ufd{&c~?4-N)jy{AvIgClxn%Y?}2u3QAYKP zrS(C(3#5cSUGFR{-5z5aX7dm4bhr(DHmS^d758dO*rx=3vz@Z6{;<$mUkzwKTJ+UV z5bJ!jZXhj?Uqe1oG$=)7MTIp+P4E<`8`G1TqNNG>m!?@J{YorU6FHpo*kj zZ-4$VbmWREc}l^Q8B7J`;$gyh_V87&YnGi`a~Pe_UgZUY%(ENkF9Qx=F=%~q^(BVh zhJK*EP#ZWz@ZQuxJX;G%lXsulwP?^;4WLC&w9YGv;&BAM#+El!X)QZH*T?L zwH-?&Aea+W$B{clp(7yKMwggLvSIt92#?f&FGf6tIxvipnMb)5DgR_6iBxbcW`bQ?(G9Ae6$8pQGY;BW$Vn8M~*Q4-*?y_$WRWlXJeRW`_`5!qn-bS&8V zYLfhRimXe-kfwO_DS1-)OxZ?2Li*khxfv#a10n>JBj8EVk}NgwSud&%ZmDS6;IEb{ zdxRjf*h&#kA>_x=#wd~a1;}XUK$&nuMgP@M;eRz$5_p$iEyLNmj8Tp{yw!XDHx8}P zQvwea2C!o(0$RUp*E0FWZ&kXPDw?9Na@LKA7`6fz2Hcr?nl3@izsD zmq0Nu46$`w9_P14N*cnMv1Z@2mwv}O%^E|Pjw)OxnR+fNvN)PY_9>YV`xTS@S$1t( zp!T6j%P$V2xeN11l$q}{$Z^$E(qcgq;m&|lo!0TM%2fsOK52ME-*RFRSArs()?jck zt|>2Gu|##G*tO^SYa(R>b^SHLyl_t3qPF$t>vg0Ni49EXujm!iK~91SK68=>I;$Rq znt?aLcfI%4AwNEkbCX6EfBUeVSb5Qeqda6?N4TWBu*2oNiy~xsvlwcl`Jk^>^f8m@ z9ddIv3|Uq3W5Ru_6P4|87PQdH;?*=WIVQj72RFn&#Wqt3S2Gl+2(t;gVR?8ioCtHl z8aV4-%yIbDgzNN$D&yMK!0F6iX_azi&}FVd4^wC0ho;f#JP6##*ViHR{TMG~hT*D5g zsx&^KruGR*5%<}sm!Enq=w@vS=cuL7aztalP9Uj*Z|*L9w;aEo*yv#K52^OTRX)ap zVsh)o`4?Pi@0)7sH*4Ae?Qci3bCvZ2d~$|D(n~8wZg1SAy3EjF;Swdw1G54s!hasn zmjA`S`g|lODeRt#6PZu_x~ITl+I5m>>5=D>o) zZOBbxyjTDgvVZhrpw;P)a!enejo$}#nQ0<5r8#)vMeoU~Gb7T?O24?>B~b^}z(>jj z(enI~aYVnw4DrU?h2`3GV{D&|uC)EUXQAp6KN#;p6{8c4<+S%c^9*jbT=_xW7}kHME50NS#R0DrL zwmt4#9m#9jRGNOV)-|<1l+OpPJC%t|koo5~r!_`4qs0@+D!2na5>BJ};zNBS%4Wov zJ~ygK0i}s{H|%?~SI!9GcCd5|EGMD;ss#O{m6oT+NpBkcVft(vnqI?uDXurg^BPLE z8sJDXTIa&7tiFb?zF3F9FI^~1L1{vt{cJ@n=>y*JYAFRbY~_br5{oG7lZFTy2JPrG zKOOK-sT6;vDWlxYT29mniv0rp2gPz97Y!;*s21xg?hYa_W;*7asorSUgIHf_?HSb$65@c+lr=|0KYPrdt1ZO zZ@}~L3^rd1Cjn=DFkGnhPgXTA)9|})35&<`fOUc2>d~kMXu-h0LfBt=Pqe=kU6Cm% z26{@77^t9P^pE;Rp*2R z<<_y0j*)hNVpo-ONH+IvsAOKP!nGOHkGkASlpe&J`Sv$Zm2rN73^mYaPA@_|ZQ+=C zYV@dq5UL}7CzMGl%HpdwU)CmR3QNxvl-15UeRU*BPq#YCNtB=;654G6g-ZDYUM!>s3NWjWU*>9e=^3v<3ge`wRU68IWNPXv`v)mC4;DK9*%N(EZ%GYXPNVD zbDIGCNqFALfe>*~Qt?wM1n+f+L!IQ_2yMmbKoggbWs1e$-kX5R_>N~0*8C@c$*rgF zXEdEHJL+QIGcvyh1}v|s&$cMx_tS!{JEhD&HeTMRm+-ds$OuwXaV$}K=J|t|x~pE= z1GS=p;1y$pa)jiLG9=k;-ZB)BE2bc>54zS*dE^B|dsG8iF~( z-)f+9Rxz(8xU}ErDK+k_2+{0}ZQObRVW{*CA8FtFsS}sKw`%$|s_b6o?S&54YKEr^ zxiPkqyqwqE%1tr3Sd#bD*5kY(p31u>bPG2))7`gF|I@e4TZK#w zRc3?IBY*isRmqB}W)H@@(~r|)!kujbqf`Mn(Z8~t_5X`(hxv^@Vr!M7W)n@`MpG;p z1i9DpF#~oenc+E%1bq%Ae}>G2fb_pzcBJ+{FWV2DJ`6p-DppR5oyYX1P)8{Np*Q=m z4O+s?M$j;Blk}S!FnB$o+-=ZaNi;~{B$Sj?P`h_XvyLgy8kr3v+wS6daUb1+k9EJR z=zb8{PtJ5LsFis75ZjPzMHv=J{)FM&nk2iWDnHD(jF6)#S2;R1?Q5RTWM2&QYYi&t zlBG%RNp+sb?I`=IbRDvu7w7p^`RD9n|B(Uoh~p{E`Nc2%o^*QTE?mP;e{}Bezn`fl zFJ7%A5?JK6uf&3=SZY+t8d6HDG|{o89J%W2In+1X(7#BL=dvjoZ)3(M;!c#HCPUt! zMiUX4F!1?Cba5dAIih%bw(1f4!3bj6h0)Qidlg5O8kDJUHE>4rhBSgUS4^rHD&oKJ zA1z=#W@mr*v#sbI@V>|I35rF0gb~8+>j)*JuQG7h)pRpu#)-!biu5Fhx8rSEC4{>u zLkgGN1lOv%Fg39EmRS5&b?*Z#q_Yf$PCLJ*yeV5*&7BUJrNfYZ z@7cafFx)NVa-e^#b;q5hP^YvIg^ZTK&(iKI_0fd23md8RS0dGHNsoki&}>5^6T;S8 zT1AehGd*$!d`gQtJbkt3@+4`vqOlFMMsVcQvcq#jf6M1uTo~E*?$ST30oNC{3bphb z9;Cha?RXH;aAC1fg<*cKpEF>do4{uE!#br>et2#~$B~m+RZIW%+F+Ko2u~!;?0~h* z8~;^Cp3Hrsb#%*rT$6v*_U6`KLjB!EUiAW*c$o$p^~dw?`Is3tf}w;So`5u=lBxzP z#>)xFD8(MB5$E?+gZ5bQXQ0`Z_`9m-QpXWn^E?kbSTO5F?GA;u#LY)Q&#zS`wRsj+ z)_m`G3jy`%#bR^;Y~pXycp9|y3Cv5E~9!Kge} z<)KTv=f*AYPk2~Ai{g}$B~idzZ76gvJXzR0=I+z(`@H{`tVnB3bNWO z^mNQps&fpR)mwG3yK)ZX1L+l^)760WSmF^i0M~RC+NvnTGa?lIL7~&gSaK1u7!{y8 z8aW+8LN3&Inif~7fqy`s?j0&8Y#}ZhO6Q3TiqCF|p!b`%R5K@(BDxtU`Z{^i|+l~Us2xF&{B7&4Z}FkLp@ICFW8_KajOf{!bhx@@|owMzOEfS=8Q^@ zq;&Hj73$_BI=fpTCt;y&l)N|1*i|2+L1;MlZ8kjs{b%JaS!f{g71yGahuML@8)u`c zid!Y}=)y|RDAwb<{MLQF%94P5+;*zGvlBJskQ|kd^+58%sPsddw!W`?Y^r;$qO9hD zU#2886qn6-s!V9I_jCDVPw2L5XzrNPww)K-4X+BjQ<>X)sDu;MH*m>64x`G)Bcf=Z z@+^e9HNq7mgv1K&>+*tD7QzfOfJ%%Ae*cDndLv$W?q0Uz4GaCW&N<=Ll_7N-)qrPd zRk)6obz$a3d4CBhL}f;Ne%Vm-=kXx+kMsAV?xY6%K=vPwUcR4{+w@{kCqo;Z)hu{C zP{Vyj=HRQ=wRwfpj9_MXNL>2L7p5+*0<_rP`g{0c0=gSoJ$Tw})SF8&LC(Jj>s9o( z4t(e_<4@vV$Q_5BbDZvUlC0d!PIiwJ^n;C%vE1v-3Al$5Uxh`nTOv;qwuo5|;q;uP z--!NFg(!ayY#ElIMyM&<9AK|{uTQtlW*kjsATn;pNPb*HwD-G3lc#8Lm|2ZQ4QEuCj2K`UuaC#9f7{&_D4b*0*83;FdkD zGKxA@#Zji!hbk7z#!9%OUA^7V2I01z+DNZkMBz&{pijF>RMO07e+fdHsb8kSBg*0- znjqfvZwpY$oXvr&q4jy zDE>toy#q#*VCMMW?=*gQm*!6v`A}-CWs~bQTWilC`uvl&e%PL;HR6cR6Q_IRc`8#s zb2s*0oTYI5R`pFOzC?^ToQFjT8xG|J8Sni zZ;4Up#-vKR!w<@?=_I`SdhTRzAGf5mgk2xh0{MQfwf`LFF=G9^1D)$%{-b>B=h{;( z7Lbj*AeS4p0L>=txYacWwit#lP4K2pq-C?WGBE#7d@NECXv*8h3bKE#SB zLgP-8ilXar_AfE4BlS{TQG`RPeb-ez{*A|rPG&iKtSHDD%Fr}F>Qx#Yxb7W(l04wW zJU%{T~rBbK!-BpOv|3Aj;yD?Q=*gB zL#vf;DX4)ay+(|_Chc@k3;~&CGi^j+!SFZ{Lsx&z-5YGZm0HMNND7_kzW zKArcu&Rc3?bgd*ix<*;j5BlyzJqyp}Xf~YMG@Z14KI{gU)g~*h^+VTqbqcF$C@Bgi zr*h5>rLj=w1GGi~Flw!YyhiW&udde6BMWflXi@VMaKyJcCM=CUSWmbe7^^LHr?6d8 zF)n6zLUQUUH{G70=F4pZ9&Vo~YBp5^i$f&qX@`VQrC}1 z4_JSocYJI_=~`gax(Ql}&MQ)%vS` zcOIv>l!SdXU53FY_N#$+JBwr2Rg73C$d?!6hAFow3k%AHp7BbnVc(;QhQ1RNrFpNW zVy|B}rF^TZ=v9zOQ7Nt+S82J@?;cn@+}~zaQ-B*xVqTf5n4H9W4UrR-_8G$Yu8qdG zG*`DrC8tbT5V2K~7z!CAqsYf9NUypS*T{RVha;112zQ9(0Tr<<_dT3OXuZ@%w0*y@ z`OZkmQLrNF7Uv_h#p#0gt*4A!R^FqJlR*T;i2$#4T3Z^erAOMrnQLE__4d^i6*FBz z$g+B^&u>h%Sdz#OKVUte+%7Ujx>OYdePXVHbN1e5)sC(KK2C4D2x*=)zP(?>O;I^| z=79%uF%#V315U?=;69FdXnJi0td9L-v7a$hJhm0OS1h${!kcwpolfHl((W<>_MYhc z80OlOP2TC+KKP@A%ehMClJ?4&O{T?~cSYzi-mQ+yn7-(cpgd9UUrJJ{ipP=W30UhP zEgocvSdLsTJ=Xj+YD#e6D_?mA)$smO$UDLv#P?ov54xaY>5J)M$`Vmp@uJA~7$cI{ za~nxT!f0M<@JJfC#4q!t(_^o)T5BCd%!VH%1WbykrVF8hRyfv|$L6s;S@m;UVo2Gc zb?;(+ycJ?b3adoq56nuvM)&XoWZ}e7PIYU(`$m^S(&6y?lZfuWm%R)w@S|H*PF=+wxegmkb)RKGJweX(o{xus^ z2ORhf>1&?om|XZCw%!S1gJW*cGNAoGvoCkpT!PJONkQskM+4_~37kRN31G)afwDydG6>#+wjAbleOPGoQTko~h!S?O>oP z@C%jeM955R#EVnPZ8=nLt-JHn=ZOb?CSyl*22e+YlDZcftzBxMVw3d@F?3J3A9SI( zclgVL`jueITmJZK2!kho_a$Bzng!k%Mw>W=4(qO>ZYti&`ZBv3-mDlO=axDjvbYG# z!pwgyrrl$%giO4nj_s$UeHzpgtt2KZLs=_sBdNmz-KfY0s$!pf_Hg$K%{6y5@`{XT ze!50YjHaLO7r89b+w7a+<9WU~*0+Bocx_GaV{pIO`p;#P8Y6jzr`S?B0j(!CC9kTR zo|tv&=q)M0o)02_wXEBO(_+J2jnj)mKatgynZ-NJ9wQ@*n z@W;=-di5=_UQpywm(H)qY*Aqox7F_3+mL0UH?oORHf5TC4#%aEqjFZEz@tyy?VxCGW(oKfj< z%iZBAu)Aq(&M+%~54{tmklzYpn@!|kt4^L}NX0cWvx2fztSO0qKP|S_pfP4q%N#if z(bd}B&8~F9!CAW!pY5Nb*|46$ev5f3v;Mj#^UaXo&W7*S(vFjl)xfZxuNAW}6Z>VU zs|+H-=I~a`X3)c|P64y#*0aJ4$9^fyrvEd-fcnn}L+pP?7(C$-hCy4X9u5=wn_sj& z68Qw=Leu@JxECDmf8+x2w_NZPnGU9Q@Rk@2{}SzymN7Uy=Ee37y>i2WN37 z8O}i?jN20&5!mFu$L)g?^LC!SsoC?W;v<@O7yW&e^;FKlZzKsseV3G_6pswo{>zny z<8doKJ;I@exBuA^YZ;6yDJ9cG8!_J>oMNkTkd8lGEgqXPjgV%VYTyQ}e|_Qbe2u(` zqGSt_lHezI+)0}HiuXa>J&FJK*A&snvUgP$HHPgI{uY9A6IyS>b zJ%vl9e>?Jk6IRsr;Q`o!Zl)}Z^Lc*ZJ{CfT+I5G~PN%>Q#+;ff8$F@E2IpSaNO&a& z;wn(Y+VCc)L>uAWWVrISP!eiS!J;-(QR>BXDOBOHD@JH0f!C@RWk2qC8npQJ^0i*r zN9R)cA5GaTQ~bKxi>F>`Ck9=GDrU%SPgQzJ1rx>fU4erG5_)(i7_b=0L8~6tn@7RY zQCX8Hh-Ldvu+lOQ^=?9mQaycv5j$5w>0@1>=R?{8AX8Crb+QI8_{XXOvm#&o5nZQ!KdbmdIdCs~AOmU2_#yKv(+C zv8;V;r$kZZVK8|8r2_TFFK9f}0MP{7B_iU0H7H4}19tC%iSvoV5ZB)zy7Dy3vU4st ziAT{%tX*3FPEY)@cF>M7S7k>G@arR8t?8XCZh?6uY0G&`=VF; zQ)?;Y-3)6(d{SDaj^_ULI3rGw$9Xl|uec`f>nmXlhGkv}ljAj&TdDME5v>!wT@*Sw z)20UGvou(DnGy7n?RdekyANh@5#?V31d^*#BHSal`MOFjtDdcjw?G6!G?Ay|7HSnk z7EsUG^qhBDOI4R=d{vZUt@38eB*|mzGvP-UdFPWT|XtZWT||>WB<$TFnbP zIu7_0sGLZ_dNs)PgNxAzrRZ1To4hk}L|0gFR2wEXI(y*k<%EJ*r@fy2KkYCIec5F9 z5@jflag2q(JA+F(HnLWW-gF+{$M%kq%{XliAzp_frd?+O;nuvImguw(xjM?f2_Yl| zX*Hz!NFNMh{!kI1wI|u%E^44X4x9yAXG}Q;P%uPCEUUH5pYaj7eR>&{{86XLFfYoF zm~fp9F73wf@NsxV&Wj^qwS+S#tYvvhx*yqd47YQsVd9re#ZLQxjIVti zeSYmh)r|ZKViw1H<`FrQu4Pt8*_|)JgD<~rmuwXh6KzmQeXhxyXWYDMu}_rI!hJUi zqHd>2N*o)iZ;pEtZeK!Eb~!s+PP{kQxKVPQwpB3iQiJ75!F1(gAJE#8_z85I;Mjcp zS!Jjx+XM-Yfq4mNTN2LVDW~;;LL5 zb6e>UF@_T*$rd%7pQ4CIRUu%|`I)*>gn5IcWt(Bq!;@|GIe{{a_*lcBmXLY_)?@^8 z*Ch_OBlh*ixxR{8;VDYs-$ilpt7{xMx8d%qcJ~YmnJ)g`tbfKXQgaWyyTaR;G4-tNm*BLUx46;Iu$DqEZ9=uH!jsq_|9kyG}u5CmgZ(Udc# zVU)&?pTpd%Fe4X8)ArR?cgDHqw`0Q!f~q~0IPSo0YM~a{>{I0@RxvE5`|DwYt(aJF zdRmsZ6W5Sy-{f`DHbI&XPqH*r6$R5L--W0iPZ0Kr49FkRX5(Q};s|AeKSVK#YU{8y z%$`geu?qcE?RlGIKSvETnwin#H#konC!A(8A`YQ-S(XmssY3*XOJ6_I*Ri5b+$(>F zH%EUAv29zg28v}`T^1>29V?mXY%dE5zXl9Zo{SBt_h=FqQP0)`>Z+c7i(Rj%dDpPIm5mjx5zAuFjx6Mh8|a*p#FLK#Pys(}k*r-fU)m;MN-Pqu8YFHSr6hP0+^^fC4* zj-LB!4ZoaXU0wNgkTVsjFNLLheVt}&qbrMcIx4Jhmvzh)7CW_stMXj(*wG`n9#X9H zHQb?+6~|RX)cF-9)B8LEvcj!j6FP*5woA%_G@2(dmCc~oGQmgGB z^X(jVISi7iS~jB%3m=Rke5vP+zVK|&2a}F?jQ55euFKpG29A-QKe(W9VyzM}8-M6( z#VhxJxNNN>4DifjWBRKkd-FC;JG02C5s@cb1fe;xv*Is)ZbBW2dsS5$U;bJR%oXPp zb79FlGpF5+YADYrV0ImP`C2V8DFiDysQFl=K`xg%S3s%tgNU{esFR*if@R9jv&a#PC?y>TqnwiZdL|0 zGhL8tM|9VBs0t(VXdiWLuLO=2!K`z~(vY1}9H%;j$~sZL2K9e@Qijb$6V;4c!-}i6d4GyrQeFmyK7Ye3O<2*|a@X|k zPFKt83s4NiuF&U1-OGk|-y^jfqY{TgJU`+s4%+MD9$dCg$PG@#R!zn#nm&j!!c{j5 zBJ(&V$O|u~`oc1uyv25&JDz5+28~%|hS$G@6iv3SnJgK55L?;94|t7_kjBp*anCz@ zOOK{x)uYlu%ENJ(2m9dbW4DW)&6q-}zhVJ?n)=#tuZZ*UFA*H?O&dncpduy#?XA+h z4zkfr;BZS1Z3tcHs?0#bk^L>%Ndb!v)*qyG`A}zlw?Awamj{`xMP$^#tm8V%9C0u1 zq~)xHyswrYNg`$X#*BfHe_Ofyz14w>P*p&s0{0_|tt_TBTDq`c44i7)|5mCQ;vlAc zh37t3?sbmg(DSqyGf1n@aj!UhTgNymn@t|-L&f8hiudU7owF3o`AL|DiEhC!Q~N);U-#?NJf5}qfeIzL z2;{>|4jz5~*E|POejTEj0~0bUa1haT-7p$HnbmyVc$e-VPD`e|P&T1?L8GE$%YPKs zrr)=MbyaxcXPJhUoHm_8BzXfPaqdN}FTM}Bn!+cb;PD-F=x(X!iOs}ec;?G%j5zO0 zCb3-aUYv92B6<*NVf`j=*mOBTw;Gxwfb2G^uRXYLD@mRg7J0xPfSvtU8k6bmhP){jtm+>FA1W5=gLo}KaG!!d@(R?VV3K! zOp*~visM3Q?9Z%QfxIGYu#<%B{u)2~=tKj1nc11foo(AD-jaig9WlN9*$MouC|X09 zG%n6adf>%HiGx|WP%%VJ+=0;d8;=CI-nO@EcgMbnN>peyt|TL*nb$Qm*PP?5iO#bO zLz>6G58pC!wo?cx-5kOHLEE<3VW?wWOC6i9N__k^YfM2G~X{h1QwbQPGN9Z%TLAUAyGkyN*shqmVbN4Qb^`jPyndyn(vSgVb zMHUvi9IXZu0=Nq;t@XX(E^(VwT{C$?Z$Dl^`gHz zlZ$-~jUbw4eZfdD_Bd5ymew)29W#b7lGg3Ld8O3g!+HC4u~hsjQE#j&VHlNQY<6wx z&}>RNQ8F2;dY=|;sCgOb8pm^>ZEr4f%J8-b%FDCfDp~IH(<{GkobR`x#@BbxxCFPu z{T-1Awe%_Ri|9^aBE7>my*9<^h{!{|btRQ37Gr;RC^&4|y@COq)%>Qb_Yx`?ivId( zwAO3hqboxekI$tZmFAvf1@&=}CnpCc`4LZ*cV?asJN4hSW8Ek-`*jxTVwm=jpIx*; z9*lUK`7p=nXuB4k0hS}0WJp_S+NTVpVKrmNVt6LHvS5g0z&)%gZh%$^BX3u*XS z)7yPz*M~K{A(mpn-D{;AYn`*tNbj^6+;rRIH+>~=?dP<}y7YH~vN~GV8_NDr*d((1 z0a2E*L7twRqPhV+3xeuOVJ#%pP_m>Y8?#Qnc}zj^6wz)u#R{n-l9xj&539%q6FvUQ zVZ<#nGtuIQANqJZi8}SB;3vlym{ZqSC+K3mOYEEbEPv3pl2)Xh7c;BXKxKIA!4;o3 zdt06D<64#04Ynv7#-YluAUcAIy<3^|N3W9R#|C4NU2=#*9HrVV#PW z80T^U*{=Jt&^=`r1-9VJfr&PxXh(Ci#3l{F_acVsGELEMfZNfOcfCo zJ6xI=G*au22&I2SefJJ262#x-l*AZp?|vY!*E0Vsw>tf}Z#uZnksMiCjd*laZhv_m z_C_=mON~Qkp1%f5<1onzTJ?1RnFBUNM^AK2T9-}=)>K#3&^}uO>rK9-gUv3XQ8gTAJxn{xpRdwIDB^f*A#^AoA)P-nm4RTe|Y?4 z(#GDCn1EK-GB?+p5$ChGv$Rjpik@J8gio;fiSqZt$&#Jm@G9XbQ3br4rXLf2r73T| zRRc?$gfR@6c!aDwYHHb}^lbjIsl49sOVnd5k=N@I@ZK;bypgEH8voow+{n87fctvd zJUO~Q3HlzmGtcX!?=7!F$1R_V{p6Nw29telxj5&m^hunnTZ&uzX8WZo^!2z^TK4el z8v#6ui-pHGuwO~Hi;oQ1e;)u}8_UtbArgL3b_Ibp4p!adSEm1=-Yd2_{@KgfGFQ0yDjGvgYqu;Ye}fp2vQ zp{40aXtU5lrZ27FBdmq&L>({l7s9Jgrj1RRaVt?*j0B zlmZ`DkPoT>Z1D zV0-RLuIShXb487_zbRo8;Oqct$&!FfgU{{m&bEhZ>4K7q#mN2s6gu|Z`?uL6dKJ3g z=OT*C-_SgQhTaQSf0n|`rrvO5k)DL87m#HrSsv3Hop>cIB`4oK;7=>|OFa%LL zfwbU9IHNS5N!okYpM*?@u12lkj|p|ir(v6*9A7fnM#dpsvp!axUliaOwkXnX$LLDL2-E0dc0tJxKPTa>lCXIX{{RcP`5txjG8?@^?AREVL8)Q#8=0U> z@6(q|z0B8dg%*Ffn*W5y7RgJlRG+*SS&I*It5YgxcgQ(LLsuehVuYD_!K7CV+)BvP z$CP}hbcdUp<%^Nd)x9?THHg)U6Cy+9&8t4hNAScCeBi9Bdx|+_(DU}QaDNL)a_pb? zu8n>hMsf|}SohRGH(GC7?dg5{nyIj6zq43=`vA3;d$| zse`&bSjAcrEZDsOsWMZrk$ilvNba8v!KxS7%~PF)3-Uh`bhn8*pGpd@KE@1j=k!9T z{`@J!G%RtPYAkGyRn>gR;!%{Vu&?Ccw`Av@pny_kiBA&(fR;*o6<^fAtsD{KA3Q=s z0UxCwC+b;Opl>5206lJRAxGgxkR@Mhk4?XFDcxGO5=+pipWGTsb2mgM)b$L$hP%L} zO{fE}y1{ZrLai3`mI=8s`-2oZ74pDxj1cW2G9wRDCeZ&+71tTi)ZOmGP(eZJLP0Q9 zMD1mXI6wlyfmD%EE1<0C3ls!-k-a&f_XU-a0u`!4f^89y5!sulAVF3rE6NHXNC=P; zAc2IO9PU4<_TKx6FA2#xIsfN*e&hLVjZk4Ak3tzxB6@pBW3$%Vbq9ELFX7w4v=`C% zZv><^&A=kRqjs;2L1#Mf@CHlw4l{6TamexY$)F)`?fm{mYq$PJPS|Kg{i^w10rYS( zXLI<&DW#=AtXd$L0UIfii>15{4lqlds;RBX)eT%+vl@i7T(`{0hk(-ue97QM?nX_| z#SsVXW$0@yIqT6-`b2u~nYHJb7Bgra)Dg_US@}G92IU1Bk7GT%B)_}oUA$_8Zll68 zs@M;r?E%%IaL4)j&aVZ+;Eb3EB$iUk6d^{k_;~obx&#Kw#-smU_m>TYv4wdG*hnO- zPyQDfG+YU4)kL1+mqA5RJWdRSDEJ4b_{RPT;G2=fPA7{;#eizsgt{WlUqIOcyWwt` zyEJWg@)UT1XXwaDf~;sCG6sJ04V37|-p$a0oxl>Rh$Al@hkGxRSj1h}DGzMb(gtct znLOo!9qjQ(nn`=GH1awD`mkdIr2rn;zRa$;q|C=iANenAIfg&qPxTuuqm8}q)8;l2 z)v9)Lv*E+7z1-U5(nacH>}!PfJ}b{^HIPdWe9Iz&jRM2CUvW#jvj2O`9<~MT(!TN( zk*kvoR)!;xw&o!M*iRpwXs&jiSR3RTCj&L5=;H>eghvg++Ue*I3tc)XRWUAUSdNoiWXmLyn^J9!0 zpirE) z$oy|VSv^N+pmhzC$onFH2M?GgxIOl=eKMb+%5|`TJ1grBwO|igY!Mp)#*75EU(K3l zWu2{z?d8bq97sC*cFSOg)wU`yk zNNLc2mh<|)i29oVkpbRpbW6KJnr774cmJ^g;*Pu?uw=EB07 z`V5}Yb>o)k>UvqNxxXHH0bRfzn~QoXmwGhdDBc;)e(!#)of~(tQi*)ucs{Kz`4km; z?P&Riyll3Nj8l!8<_~``Mj!GABHp5g_rHZlZEns?y%MRb--4=OGRZV{#Mhqt2$XQx zpjn;X8vd-k=q2Piw>l$oEq`6rP~UV~9lw5WfC@hdY2xN3l!eUNZV@{0nu;m=$ntf? zJ1C!yoXZN_yEe#S*Bf zj#^S2dGu&NZe~Snq?2{&B8RS~{RztBZ-x>HJ6Asp^yWba>0}nJZ9-u<|KTLTPycQu zmg+L_(_hF2s6uK5@7>x(u%tq-b>(rn8^Ko0lQ$g6v!l<8G!~@-X0)7iOAV+ zjhv-x1t7`I5Vx)Ij{gvk9{kymzKp8|!+x~@hieS(fNvIjw0_xD#8$7m*5w`GEw24- zuC8Xtzr26VmJQZNZRR3+>l0`gC((08fm&eN&35Ah3d}SGq^qlrXhy{jx}TlIak^I$ zj5xH_y_!(>VuFC-`3!o;f)9E7L+|uMs?4*u;db$}6Wcx`e>GLQR=Bw|+%aw*FJbtb z)aPbDaur4c@@g&Z>|;j-)sX zo930>D^_=-^;0|TE@m|P^DetD`?FgTPnpxKT|So&#u#u3MSsM^aXG|CdYe-De>7ZO zYq&ua>yLD`X(5>E&FlhSh_CozGJ$%8Oi_8ccb8{V_#{pvFhJhJ>nV5rmlxuifi!DE z*CDEjduaOmd4gvuJA>uexK_r;Y(Ln3d;Xqz_~TZ;yU?%qPY;Onl$ zU3**=tBTW@Tkpv#nk<4X^IA*U_hKtX?YWF$zLK()t^D%#-3fFu=wxa?a7FL+w^Nvb zuuR6Z>kq9t;Tm`|q%|#4oFq;nXunKtpA!dgn;nMmSh-~CiL-T`YMbQ_cUQn8hM6g) zJ=;A=s=tlcmE1J+WDkoG++FRH6UChWTT&EpkBjFjz=c@+HqUlvPI;(xEnr z+tHV~FQL2}%JM%O5zkvjwV(ywZLT^@^nGK3Hbs}3Qn!eu26yw_g-0%uU-LSuD*W{{ ztNe@g9O}zWPHX8+9oW<6y^qc@*Xl7E9%=4(K3y|f(B;vK!Fh+@4*yL5)a9>R8CbH)H z$uI6Tn_(|T$C`Vg`GjV_kA|8O$CDkv2>^dzK^bkJY#jRVGHXqDg%7n*9~qN3l&?Sp6y2c zFF7I|P!8kC46%=_r>J!axfH)2e03R9r&9sd%VOn*XDw>OC9t73(v)=#C!pAfzU5lf z#k&cjFEwZ>Pc?s!7Anp~S#`88B zcs0kLdMJYHzzHmN8K~#ZkE#`L70KaOf}H=-8KC_ASVt1B<+c zTfWXe1=7fxHgPJ9JqI+H1Q|x0b_c|;mU-&=RKv4j+JqNE4bojVW&1e~+lqXXvOn{T z7PiYBZzT(VE)FGUjfdm(^nVcSE%Y^n&j>1)0J|#a3QsEbclNToQ5Za?76{({`Sx0O8@5 z;^D%LXQix^v2n}t!&c*+Sx#V$rjo8$>5vN)V+Za7&2%n0C0VP35K~DP9>j!9I&yR~ z-@D=uS6u5@{Sd)C3;1Ix=k8Z1tR5`$15ao&UI{2t3?qw#7~`Px5=?ngP21 zW*y}fngu$vuB6cv$!LRR97)T#lnYEcI_K0+0wz>5^ zv;_iVG;SV=i&x6q5}6T&kj1I0Zt?!0?L7G^&!F-)Es99319W)3Pu3nxH_5m8Xp+EQ zz6$g!ojzH>2T*7QWT=2)q3R=REJD!3@xVU08@l~UsX?F4=RT&+d?Ob z8P)0&M?7HLZo@^RZnT`I>$W%bTRTSZveVYjO_^asLicEj+E|5Gu6L=MXQa7ZhTF^D zs2i4iJV$Q?1kOB9UNiXW}RL$061#-|Rdo z;uu5T8J9vh$30S(-nN6zy-TpfyUIP1v_B&BIYZ!L&WLFRK@>p-TZ7-f$q5!eNU!&< zN2{{}%x`Lh1DaWVz{`K9KYb<;HhB^qP@+xv42?VmvOADkV|RzqZOlahSLl>ytkw5r zFUl~^FSC_XCxE{~Vfq`$OAr$gZjW9%UOvFvKnWAm0eQHrNCLjOi`4BAF0Ccua)R6U zvtx^k^yU^+ zsplP696-Ze66NTab`i`84@S+2V#pb($-m66?stj{8-mAqpJLMIqm;@juJHRk!6YCz z0G<*{l(mIwkp@!-)MM$C07hFqpKtTFHT>Vz{B0!ubZ|x(4CNc;C3nYepjZW@0zSuL z2N}@K&rpGx-7tkVz!o~nr%M0J|I66Qh}Us4{s35pwFq!ru`K+%^!PdU>8)T1cc0WE z3l?<=xjK0lzbb~Aiz1Jud0~{j{4WwQa%aH>K5{=^k7ii->mFj|3XGjhoB8WO*(lp_ z;zZh%iDxE`8%JV@3@UlGje`bN2sxf%uOB3s@id_p%Z-#sI_PkK(M|IcN^8V|KW4wyDF zu2;HZ*V8d8a}0!$9FrMseq|zk;h}QJlG_$4B_Kuw;Ok3XuQJaOF+`ReeuYPEMwx%1 z;VfT^;>Zk;$0uW<=*m=WkT=7STe)J>P&kTa`~kE-pv0=j(kbwN&4Et3O?;kcN1Xnk zlQLK?%~{y&bn|?em_}kQ0@Qv5l~rTXe)R8Oq3@6ZpJ+!Vt@Oxg=WQNR%L?)}d%Pl| z3Aes;NRjY|z%>KvRxUP6=bSQ7ydjoo=+}0~`zm~bP>gLwvrO`o_p1m5*+@M=Y4%%8 zu8xr`zQJbWSHzKUp(H?3Iu=*}nK%X^GVm)oQs8AK4gAxQJrCw-2@nG`BYMzY?ilc> z+>j_MJEcs7qK~Xy26hFB1a19_L@rVM4Ji;ho{9obAKd;h6J*zI+RU8&o9uL_Hv!lw zg3?F+coQ3<@a1M&{4>2AlVM9THVeDYNKy-ZWPX&q+vgw;wJ4lNxQH}j6r2_xb~#wL zum*TI$y}6VnH*zI^K|u`A!55!SgO1Yf(W_* literal 0 HcmV?d00001 diff --git a/images/2/list/2.jpg b/images/2/list/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f2f51822aea146fa403e1b845a9db501e7800ac GIT binary patch literal 48604 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%0Ae98x?x%j>i^w3uQfNeuVQBro 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 f{TBj|kJ>oGX(B|Wmt<5_R7$oYWK*Le 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 MiH=x&|5x|_1DoYo_W%F@ literal 0 HcmV?d00001 diff --git a/images/2/list/4.jpg b/images/2/list/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4eb48f93d9f596519f6e45fc5e54f0f81b997a2 GIT binary patch literal 29760 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 literal 0 HcmV?d00001 diff --git a/images/2/list/5.jpg b/images/2/list/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ee20c07b50e65bd0322380477d4721b1c32e6d0 GIT binary patch literal 50649 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 literal 0 HcmV?d00001 diff --git a/images/2/logo/logo-1.svg b/images/2/logo/logo-1.svg new file mode 100644 index 0000000..0d43cb5 --- /dev/null +++ b/images/2/logo/logo-1.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/2/logo/logo-2.svg b/images/2/logo/logo-2.svg new file mode 100644 index 0000000..7456244 --- /dev/null +++ b/images/2/logo/logo-2.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/2/logo/logo.svg b/images/2/logo/logo.svg new file mode 100644 index 0000000..c12a7e9 --- /dev/null +++ b/images/2/logo/logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/Line (Stroke).svg b/images/3/Line (Stroke).svg new file mode 100644 index 0000000..c02f264 --- /dev/null +++ b/images/3/Line (Stroke).svg @@ -0,0 +1,3 @@ + + + diff --git a/images/3/background.svg b/images/3/background.svg new file mode 100644 index 0000000..b8286bc --- /dev/null +++ b/images/3/background.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/3/braces.svg b/images/3/braces.svg new file mode 100644 index 0000000..5254624 --- /dev/null +++ b/images/3/braces.svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/3/decor/Vector.svg b/images/3/decor/Vector.svg new file mode 100644 index 0000000..04eb20b --- /dev/null +++ b/images/3/decor/Vector.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/3/decor/circles (1).svg b/images/3/decor/circles (1).svg new file mode 100644 index 0000000..5f01a8a --- /dev/null +++ b/images/3/decor/circles (1).svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/images/3/decor/circles.svg b/images/3/decor/circles.svg new file mode 100644 index 0000000..9ef68ae --- /dev/null +++ b/images/3/decor/circles.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/3/decor/dots (1).svg b/images/3/decor/dots (1).svg new file mode 100644 index 0000000..4a0be27 --- /dev/null +++ b/images/3/decor/dots (1).svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/3/decor/dots.svg b/images/3/decor/dots.svg new file mode 100644 index 0000000..2bf7587 --- /dev/null +++ b/images/3/decor/dots.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/3/decor/shapes (1).svg b/images/3/decor/shapes (1).svg new file mode 100644 index 0000000..732e40c --- /dev/null +++ b/images/3/decor/shapes (1).svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/images/3/decor/shapes (2).svg b/images/3/decor/shapes (2).svg new file mode 100644 index 0000000..5507442 --- /dev/null +++ b/images/3/decor/shapes (2).svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/3/decor/shapes.svg b/images/3/decor/shapes.svg new file mode 100644 index 0000000..443ec86 --- /dev/null +++ b/images/3/decor/shapes.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/3/icons/logo-1.svg b/images/3/icons/logo-1.svg new file mode 100644 index 0000000..33e6a7a --- /dev/null +++ b/images/3/icons/logo-1.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-10.svg b/images/3/icons/logo-10.svg new file mode 100644 index 0000000..278f82b --- /dev/null +++ b/images/3/icons/logo-10.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-11.svg b/images/3/icons/logo-11.svg new file mode 100644 index 0000000..aa57df9 --- /dev/null +++ b/images/3/icons/logo-11.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-2.svg b/images/3/icons/logo-2.svg new file mode 100644 index 0000000..6399ee0 --- /dev/null +++ b/images/3/icons/logo-2.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-3.svg b/images/3/icons/logo-3.svg new file mode 100644 index 0000000..d976fb5 --- /dev/null +++ b/images/3/icons/logo-3.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-4.svg b/images/3/icons/logo-4.svg new file mode 100644 index 0000000..69da558 --- /dev/null +++ b/images/3/icons/logo-4.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-5.svg b/images/3/icons/logo-5.svg new file mode 100644 index 0000000..5f28fa4 --- /dev/null +++ b/images/3/icons/logo-5.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-6.svg b/images/3/icons/logo-6.svg new file mode 100644 index 0000000..46aece1 --- /dev/null +++ b/images/3/icons/logo-6.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-7.svg b/images/3/icons/logo-7.svg new file mode 100644 index 0000000..3ada192 --- /dev/null +++ b/images/3/icons/logo-7.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-8.svg b/images/3/icons/logo-8.svg new file mode 100644 index 0000000..f42090c --- /dev/null +++ b/images/3/icons/logo-8.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo-9.svg b/images/3/icons/logo-9.svg new file mode 100644 index 0000000..f4a0c93 --- /dev/null +++ b/images/3/icons/logo-9.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/icons/logo.svg b/images/3/icons/logo.svg new file mode 100644 index 0000000..c9860a7 --- /dev/null +++ b/images/3/icons/logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/3/image.jpg b/images/3/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08d7da2bf0b398c1d0ea785242abdd8c251a51e7 GIT binary patch literal 7613 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 literal 0 HcmV?d00001 diff --git a/images/3/people/Group 2.jpg b/images/3/people/Group 2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..105379f6cce6bddba7ee3ad37436a0e9e58c6ab9 GIT binary patch literal 65494 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 literal 0 HcmV?d00001 diff --git a/images/3/people/Group 3.jpg b/images/3/people/Group 3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..389f84ccf85cf014b8ca120b3548abc566e05b4f GIT binary patch literal 84812 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 z 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ǔ=enz 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

sGt|*)k(#&sxXTCr5s9wa)Mf6x$V?hUGaO%k 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 S8xGJX0DXqmeff$0P5v){8_FdB literal 0 HcmV?d00001 diff --git a/images/3/people/Group 5.jpg b/images/3/people/Group 5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c818ff72c0046ca0f55a04cc447c4deebc7f46a4 GIT binary patch literal 78012 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 A)c^nh literal 0 HcmV?d00001 diff --git a/images/4/icons/Calendar.svg b/images/4/icons/Calendar.svg new file mode 100644 index 0000000..7c922cd --- /dev/null +++ b/images/4/icons/Calendar.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/4/icons/Clock.svg b/images/4/icons/Clock.svg new file mode 100644 index 0000000..656dcd8 --- /dev/null +++ b/images/4/icons/Clock.svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/4/icons/Files.svg b/images/4/icons/Files.svg new file mode 100644 index 0000000..50bf43b --- /dev/null +++ b/images/4/icons/Files.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/4/icons/Play.svg b/images/4/icons/Play.svg new file mode 100644 index 0000000..bb5c776 --- /dev/null +++ b/images/4/icons/Play.svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/4/icons/check.svg b/images/4/icons/check.svg new file mode 100644 index 0000000..5f227ac --- /dev/null +++ b/images/4/icons/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/4/icons/mic.svg b/images/4/icons/mic.svg new file mode 100644 index 0000000..75f289d --- /dev/null +++ b/images/4/icons/mic.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/images/4/illustration.svg b/images/4/illustration.svg new file mode 100644 index 0000000..d9daa05 --- /dev/null +++ b/images/4/illustration.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/4/illustration2.svg b/images/4/illustration2.svg new file mode 100644 index 0000000..3a4fbaa --- /dev/null +++ b/images/4/illustration2.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/4/messege/Facebook.svg b/images/4/messege/Facebook.svg new file mode 100644 index 0000000..7e35797 --- /dev/null +++ b/images/4/messege/Facebook.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/4/messege/Instagram.svg b/images/4/messege/Instagram.svg new file mode 100644 index 0000000..51c5b98 --- /dev/null +++ b/images/4/messege/Instagram.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/4/messege/Twitter.svg b/images/4/messege/Twitter.svg new file mode 100644 index 0000000..b1d8084 --- /dev/null +++ b/images/4/messege/Twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/4/messege/YouTube.svg b/images/4/messege/YouTube.svg new file mode 100644 index 0000000..f1098e0 --- /dev/null +++ b/images/4/messege/YouTube.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/4/messege/in.svg b/images/4/messege/in.svg new file mode 100644 index 0000000..e6799e7 --- /dev/null +++ b/images/4/messege/in.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/images/4/messege/telegram.svg b/images/4/messege/telegram.svg new file mode 100644 index 0000000..9d32463 --- /dev/null +++ b/images/4/messege/telegram.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/4/outline.svg b/images/4/outline.svg new file mode 100644 index 0000000..354a30d --- /dev/null +++ b/images/4/outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/4/row/1.jpg b/images/4/row/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..724cdef34498b9dd0ae14f226150a0d9c16b1000 GIT binary patch literal 67130 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 literal 0 HcmV?d00001 diff --git a/images/4/row/2.jpg b/images/4/row/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fd26c43a9c90fd36a0883eda07389542850d5b3 GIT binary patch literal 40397 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 + + + diff --git a/images/Line (Stroke).svg b/images/Line (Stroke).svg new file mode 100644 index 0000000..6e09492 --- /dev/null +++ b/images/Line (Stroke).svg @@ -0,0 +1,3 @@ + + + diff --git a/images/Right.svg b/images/Right.svg new file mode 100644 index 0000000..6c0e642 --- /dev/null +++ b/images/Right.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/footer/Heart.svg b/images/footer/Heart.svg new file mode 100644 index 0000000..8e6fc0b --- /dev/null +++ b/images/footer/Heart.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/footer/Line (Stroke).svg b/images/footer/Line (Stroke).svg new file mode 100644 index 0000000..3962049 --- /dev/null +++ b/images/footer/Line (Stroke).svg @@ -0,0 +1,3 @@ + + + diff --git a/images/footer/Mail.svg b/images/footer/Mail.svg new file mode 100644 index 0000000..b11cc77 --- /dev/null +++ b/images/footer/Mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/footer/iPhone (1).svg b/images/footer/iPhone (1).svg new file mode 100644 index 0000000..89a37b6 --- /dev/null +++ b/images/footer/iPhone (1).svg @@ -0,0 +1,3 @@ + + + diff --git a/images/footer/logo.svg b/images/footer/logo.svg new file mode 100644 index 0000000..1b30413 --- /dev/null +++ b/images/footer/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/images/iPhone(1).svg b/images/iPhone(1).svg new file mode 100644 index 0000000..0f15c9c --- /dev/null +++ b/images/iPhone(1).svg @@ -0,0 +1,3 @@ + + + diff --git a/images/outline.svg b/images/outline.svg new file mode 100644 index 0000000..354a30d --- /dev/null +++ b/images/outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..c00e2de --- /dev/null +++ b/index.html @@ -0,0 +1,2049 @@ + + + + + + Createx + + + + + + + + +

+ +
+ +
+
+
+ + +
+ Get consultation +
+ Log in + / + Register +
+
+
+
+
+
+
+
+
+
+ +

+ Enjoy studying with Createx Online Courses +

+ +
+ +
+
    +
  • + 1200 + Students graduated +
  • + +
  • + 84 + Completed courses +
  • + +
  • + 16 + Qualified tutors +
  • + +
  • + 5 + Years of experience +
  • +
+
+
+
+
+ +
+ +
+
+
+
+
+
+

About us

+

Createx Online School

+
+
+

+ Createx Online School is a leader in online studying. + We have lots of courses and programs from the main market + experts. +

+

+ We provide relevant approaches to online learning, + internships and employment in the largest companies in the + country. Our educational programs help you get a new + specialty from scratch. During your studies, we will help + you find a job. Check the courses and online events that + we organise. +

+
+ +
+ +
+ +
+
+ +
+
    +
  • + 1200students graduated +
  • +
  • 84completed courses
  • +
  • 16qualified tutors
  • +
  • + 5years of experience +
  • +
+
+
+
+
+ +
+ +
+ +
+
+
+
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+ certificate +
+
+
+
+ +
+
+
+
+

Best tutors are all here

+

Meet our team

+ +
+
+ +
+
+
+
+ +
+ +
+
+
Dianne Russell
+
Founder and CEO
+
+
+
+ +
+
+
+
+ +
+ +
+
+
Jerome Bell
+
+ Founder and Program Director +
+
+
+
+ +
+
+
+
+ +
+ +
+
+
Kristin Watson
+
+ Marketer, Curator of Marketing Course +
+
+
+
+ +
+
+
+
+ +
+ +
+
+
Marvin McKinney
+
+ PM, Curator of Management Course +
+
+
+
+ +
+
+
+
+ +
+ +
+
+
Marvin McKinney
+
+ PM, Curator of Management Course +
+
+
+
+
+
+
+
+ +
+
+
+
+

TESTIMONIALS

+

What our students say

+
+
+
+ +
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Justo, amet lectus quam viverra mus lobortis fermentum + amet, eu. Pulvinar eu sed purus facilisi. Vitae id + turpis tempus ornare turpis quis non. Congue tortor in + euismod vulputate etiam eros. Pulvinar neque pharetra + arcu diam maecenas diam integer in. +
+
+
+ +
+
+
Eleanor Pena
+
+ Position, Course +
+
+
+
+
+ +
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Justo, amet lectus quam viverra mus lobortis fermentum + amet, eu. Pulvinar eu sed purus facilisi. Vitae id + turpis tempus ornare turpis quis non. Congue tortor in + euismod vulputate etiam eros. Pulvinar neque pharetra + arcu diam maecenas diam integer in. +
+
+
+ +
+
+
Eleanor Pena
+
+ Position, Course +
+
+
+
+
+ +
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Justo, amet lectus quam viverra mus lobortis fermentum + amet, eu. Pulvinar eu sed purus facilisi. Vitae id + turpis tempus ornare turpis quis non. Congue tortor in + euismod vulputate etiam eros. Pulvinar neque pharetra + arcu diam maecenas diam integer in. +
+
+
+ +
+
+
Eleanor Pena
+
+ Position, Course +
+
+
+
+
+ +
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Justo, amet lectus quam viverra mus lobortis fermentum + amet, eu. Pulvinar eu sed purus facilisi. Vitae id + turpis tempus ornare turpis quis non. Congue tortor in + euismod vulputate etiam eros. Pulvinar neque pharetra + arcu diam maecenas diam integer in. +
+
+
+ +
+
+
Eleanor Pena
+
+ Position, Course +
+
+
+
+
+ +
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Justo, amet lectus quam viverra mus lobortis fermentum + amet, eu. Pulvinar eu sed purus facilisi. Vitae id + turpis tempus ornare turpis quis non. Congue tortor in + euismod vulputate etiam eros. Pulvinar neque pharetra + arcu diam maecenas diam integer in. +
+
+
+ +
+
+
Eleanor Pena
+
+ Position, Course +
+
+
+
+
+
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+
+

best jobs for you

+

Our students work here

+
+ +
+
+
+ +
+
+
+
+
+

Course program

+

What will you learn

+
+ +
+
+ +
+
+
+
+ +
+ +
+ +
+
+
+
+
+

Contact info

+

Get in touch

+
+
    +
  • + + + + +
    +
    Talk to us:
    + hello@createx.com +
    +
  • +
  • + + + +
    +
    Call us:
    + (405) 555-0128 +
    +
  • +
  • + + + + +
    +
    Address:
    +
    + 2464 Royal Ln. Mesa, New Jersey 45463, USA +
    +
    +
  • +
+
+

Follow us:

+ +
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+

Any questions?

+

Drop us a line

+
+
+
+ + +
+
+ + +
+ +
+ + Send message +
+
+
+
+
+
+
+ + +
+ + + + + + + + + + diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000..e69de29 diff --git a/js/mixitup.min.js b/js/mixitup.min.js new file mode 100644 index 0000000..8562101 --- /dev/null +++ b/js/mixitup.min.js @@ -0,0 +1,18 @@ +/**! + * MixItUp v3.3.1 + * A high-performance, dependency-free library for animated filtering, sorting and more + * Build 94e0fbf6-cd0b-4987-b3c0-14b59b67b8a0 + * + * @copyright Copyright 2014-2018 KunkaLabs Limited. + * @author KunkaLabs Limited. + * @link https://www.kunkalabs.com/mixitup/ + * + * @license Commercial use requires a commercial license. + * https://www.kunkalabs.com/mixitup/licenses/ + * + * Non-commercial use permitted under same terms as CC BY-NC 3.0 license. + * http://creativecommons.org/licenses/by-nc/3.0/ + */ +!function(t){"use strict";var e=null,n=null;!function(){var e=["webkit","moz","o","ms"],n=t.document.createElement("div"),a=-1;for(a=0;a-1}}(t.Element.prototype),Object.keys||(Object.keys=function(){var t=Object.prototype.hasOwnProperty,e=!1,n=[],a=-1;return e=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=n.length,function(i){var o=[],r="",s=-1;if("object"!=typeof i&&("function"!=typeof i||null===i))throw new TypeError("Object.keys called on non-object");for(r in i)t.call(i,r)&&o.push(r);if(e)for(s=0;s>>0,0===i)return-1;if(e=0,arguments.length>1&&(e=Number(arguments[1]),e!==e?e=0:0!==e&&e!==1/0&&e!==-(1/0)&&(e=(e>0||-1)*Math.floor(Math.abs(e)))),e>=i)return-1;for(n=e>=0?e:Math.max(i-Math.abs(e),0);n0)||s);g++)r.id?d=r.id:(d="MixItUp"+n.randomHex(),r.id=d),e.instances[d]instanceof e.Mixer?(l=e.instances[d],(!i||i&&i.debug&&i.debug.showWarnings!==!1)&&console.warn(e.messages.warningFactoryPreexistingInstance())):(l=new e.Mixer,l.attach(r,u,d,i),e.instances[d]=l),c=new e.Facade(l),i&&i.debug&&i.debug.enable?h.push(l):h.push(c);return f=s?new e.Collection(h):h[0]},e.use=function(t){e.Base.prototype.callActions.call(e,"beforeUse",arguments),"function"==typeof t&&"mixitup-extension"===t.TYPE?"undefined"==typeof e.extensions[t.NAME]&&(t(e),e.extensions[t.NAME]=t):t.fn&&t.fn.jquery&&(e.libraries.$=t),e.Base.prototype.callActions.call(e,"afterUse",arguments)},e.instances={},e.extensions={},e.libraries={},n={hasClass:function(t,e){return!!t.className.match(new RegExp("(\\s|^)"+e+"(\\s|$)"))},addClass:function(t,e){this.hasClass(t,e)||(t.className+=t.className?" "+e:e)},removeClass:function(t,e){if(this.hasClass(t,e)){var n=new RegExp("(\\s|^)"+e+"(\\s|$)");t.className=t.className.replace(n," ").trim()}},extend:function(t,e,n,a){var i=[],o="",r=-1;n=n||!1,a=a||!1;try{if(Array.isArray(e))for(r=0;ru&&(u=f,l=c)}throw u>1&&(s=e.messages.errorConfigInvalidPropertySuggestion({probableMatch:l})),r=e.messages.errorConfigInvalidProperty({erroneous:o,suggestion:s}),new TypeError(r)}throw t},template:function(t){for(var e=/\${([\w]*)}/g,n={},a=null;a=e.exec(t);)n[a[1]]=new RegExp("\\${"+a[1]+"}","g");return function(e){var a="",i=t;e=e||{};for(a in n)i=i.replace(n[a],"undefined"!=typeof e[a]?e[a]:"");return i}},on:function(e,n,a,i){e&&(e.addEventListener?e.addEventListener(n,a,i):e.attachEvent&&(e["e"+n+a]=a,e[n+a]=function(){e["e"+n+a](t.event)},e.attachEvent("on"+n,e[n+a])))},off:function(t,e,n){t&&(t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent&&(t.detachEvent("on"+e,t[e+n]),t[e+n]=null))},getCustomEvent:function(e,n,a){var i=null;return a=a||t.document,"function"==typeof t.CustomEvent?i=new t.CustomEvent(e,{detail:n,bubbles:!0,cancelable:!0}):"function"==typeof a.createEvent?(i=a.createEvent("CustomEvent"),i.initCustomEvent(e,!0,!0,n)):(i=a.createEventObject(),i.type=e,i.returnValue=!1,i.cancelBubble=!1,i.detail=n),i},getOriginalEvent:function(t){return t.touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t},index:function(t,e){for(var n=0;null!==(t=t.previousElementSibling);)e&&!t.matches(e)||++n;return n},camelCase:function(t){return t.toLowerCase().replace(/([_-][a-z])/g,function(t){return t.toUpperCase().replace(/[_-]/,"")})},pascalCase:function(t){return(t=this.camelCase(t)).charAt(0).toUpperCase()+t.slice(1)},dashCase:function(t){return t.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()},isElement:function(e,n){return n=n||t.document,!!(t.HTMLElement&&e instanceof t.HTMLElement)||(!!(n.defaultView&&n.defaultView.HTMLElement&&e instanceof n.defaultView.HTMLElement)||null!==e&&1===e.nodeType&&"string"==typeof e.nodeName)},createElement:function(e,n){var a=null,i=null;for(n=n||t.document,a=n.createDocumentFragment(),i=n.createElement("div"),i.innerHTML=e.trim();i.firstChild;)a.appendChild(i.firstChild);return a},removeWhitespace:function(t){for(var e;t&&"#text"===t.nodeName;)e=t,t=t.previousSibling,e.parentElement&&e.parentElement.removeChild(e)},isEqualArray:function(t,e){var n=t.length;if(n!==e.length)return!1;for(;n--;)if(t[n]!==e[n])return!1;return!0},deepEquals:function(t,e){var n;if("object"==typeof t&&t&&"object"==typeof e&&e){if(Object.keys(t).length!==Object.keys(e).length)return!1;for(n in t)if(!e.hasOwnProperty(n)||!this.deepEquals(t[n],e[n]))return!1}else if(t!==e)return!1;return!0},arrayShuffle:function(t){for(var e=t.slice(),n=e.length,a=n,i=-1,o=[];a--;)i=~~(Math.random()*n),o=e[a],e[a]=e[i],e[i]=o;return e},arrayFromList:function(t){var e,n;try{return Array.prototype.slice.call(t)}catch(a){for(e=[],n=0;n "+n),o&&e.removeAttribute("id")),i},clean:function(t){var e=[],n=-1;for(n=0;ni)return!0}return!0},Deferred:function(){this.promise=null,this.resolve=null,this.reject=null,this.id=n.randomHex()},isEmptyObject:function(t){var e="";if("function"==typeof Object.keys)return 0===Object.keys(t).length;for(e in t)if(t.hasOwnProperty(e))return!1;return!0},getClassname:function(t,e,n){var a="";return a+=t.block,a.length&&(a+=t.delineatorElement),a+=t["element"+this.pascalCase(e)],n?(a.length&&(a+=t.delineatorModifier),a+=n):a},getProperty:function(t,e){var n=e.split("."),a=null,i="",o=0;if(!e)return t;for(a=function(t){return t?t[i]:null};o-1,e.callFilters("afterIsBound",n,arguments)},addBinding:function(t){var e=this;this.callActions("beforeAddBinding",arguments),e.isBound()||e.bound.push(t),this.callActions("afterAddBinding",arguments)},removeBinding:function(t){var n=this,a=-1;this.callActions("beforeRemoveBinding",arguments),(a=n.bound.indexOf(t))>-1&&n.bound.splice(a,1),n.bound.length<1&&(n.unbindClick(),a=e.controls.indexOf(n),e.controls.splice(a,1),"active"===n.status&&n.renderStatus(n.el,"inactive")),this.callActions("afterRemoveBinding",arguments)},bindClick:function(){var t=this;this.callActions("beforeBindClick",arguments),t.handler=function(e){t.handleClick(e)},n.on(t.el,"click",t.handler),this.callActions("afterBindClick",arguments)},unbindClick:function(){var t=this;this.callActions("beforeUnbindClick",arguments),n.off(t.el,"click",t.handler),t.handler=null,this.callActions("afterUnbindClick",arguments)},handleClick:function(t){var a=this,i=null,o=null,r=!1,s=void 0,l={},c=null,u=[],f=-1;if(this.callActions("beforeHandleClick",arguments),this.pending=0,o=a.bound[0],i=a.selector?n.closestParent(t.target,o.config.selectors.control+a.selector,!0,o.dom.document):a.el,!i)return void a.callActions("afterHandleClick",arguments);switch(a.type){case"filter":l.filter=a.filter||i.getAttribute("data-filter");break;case"sort":l.sort=a.sort||i.getAttribute("data-sort");break;case"multimix":l.filter=a.filter||i.getAttribute("data-filter"),l.sort=a.sort||i.getAttribute("data-sort");break;case"toggle":l.filter=a.filter||i.getAttribute("data-toggle"),r="live"===a.status?n.hasClass(i,a.classNames.active):"active"===a.status}for(f=0;f0||("live"===a.status?a.updateLive(t,n):(i.sort=a.sort,i.filter=a.filter,a.callFilters("actionsUpdate",i,arguments),a.parseStatusChange(a.el,t,i,n)),a.callActions("afterUpdate",arguments))},updateLive:function(t,n){var a=this,i=null,o=null,r=null,s=-1;if(a.callActions("beforeUpdateLive",arguments),a.el){for(i=a.el.querySelectorAll(a.selector),s=0;r=i[s];s++){switch(o=new e.CommandMultimix,a.type){case"filter":o.filter=r.getAttribute("data-filter");break;case"sort":o.sort=r.getAttribute("data-sort");break;case"multimix":o.filter=r.getAttribute("data-filter"),o.sort=r.getAttribute("data-sort");break;case"toggle":o.filter=r.getAttribute("data-toggle")}o=a.callFilters("actionsUpdateLive",o,arguments),a.parseStatusChange(r,t,o,n)}a.callActions("afterUpdateLive",arguments)}},parseStatusChange:function(t,e,n,a){var i=this,o="",r="",s=-1;switch(i.callActions("beforeParseStatusChange",arguments),i.type){case"filter":e.filter===n.filter?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"multimix":e.sort===n.sort&&e.filter===n.filter?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"sort":e.sort.match(/:asc/g)&&(o=e.sort.replace(/:asc/g,"")),e.sort===n.sort||o===n.sort?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"toggle":for(a.length<1&&i.renderStatus(t,"inactive"),e.filter===n.filter&&i.renderStatus(t,"active"),s=0;s-1)throw new Error(e.messages.errorInsertPreexistingElement());c.style.display="none",s.appendChild(c),s.appendChild(i.dom.document.createTextNode(" ")),n.isElement(c,i.dom.document)&&c.matches(i.config.selectors.target)&&(l=new e.Target,l.init(c,i),l.isInDom=!0,i.targets.splice(r,0,l),r++)}i.dom.parent.insertBefore(s,o)}a.startOrder=i.origOrder=i.targets,i.callActions("afterInsertTargets",arguments)},getNextSibling:function(t,e,n){var a=this,i=null;return t=Math.max(t,0),e&&"before"===n?i=e:e&&"after"===n?i=e.nextElementSibling||null:a.targets.length>0&&"undefined"!=typeof t?i=t0&&(a.config.layout.siblingAfter?i=a.config.layout.siblingAfter:a.config.layout.siblingBefore?i=a.config.layout.siblingBefore.nextElementSibling:a.dom.parent.children[0]),a.callFilters("elementGetNextSibling",i,arguments)},filterOperation:function(t){var e=this,n=!1,a=-1,i="",o=null,r=-1;for(e.callActions("beforeFilterOperation",arguments),i=t.newFilter.action,r=0;o=t.newOrder[r];r++)n=t.newFilter.collection?t.newFilter.collection.indexOf(o.dom.el)>-1:""!==t.newFilter.selector&&o.dom.el.matches(t.newFilter.selector),e.evaluateHideShow(n,o,i,t);if(t.toRemove.length)for(r=0;o=t.show[r];r++)t.toRemove.indexOf(o)>-1&&(t.show.splice(r,1),(a=t.toShow.indexOf(o))>-1&&t.toShow.splice(a,1),t.toHide.push(o),t.hide.push(o),r--);t.matching=t.show.slice(),0===t.show.length&&""!==t.newFilter.selector&&0!==e.targets.length&&(t.hasFailed=!0),e.callActions("afterFilterOperation",arguments)},evaluateHideShow:function(t,e,n,a){var i=this,o=!1,r=Array.prototype.slice.call(arguments,1);o=i.callFilters("testResultEvaluateHideShow",t,r),i.callActions("beforeEvaluateHideShow",arguments),o===!0&&"show"===n||o===!1&&"hide"===n?(a.show.push(e),!e.isShown&&a.toShow.push(e)):(a.hide.push(e),e.isShown&&a.toHide.push(e)),i.callActions("afterEvaluateHideShow",arguments)},sortOperation:function(t){var a=this,i=[],o=null,r=null,s=-1;if(a.callActions("beforeSortOperation",arguments),t.startOrder=a.targets,t.newSort.collection){for(i=[],s=0;r=t.newSort.collection[s];s++){if(a.dom.targets.indexOf(r)<0)throw new Error(e.messages.errorSortNonExistentElement());o=new e.Target,o.init(r,a),o.isInDom=!0,i.push(o)}t.newOrder=i}else"random"===t.newSort.order?t.newOrder=n.arrayShuffle(t.startOrder):""===t.newSort.attribute?(t.newOrder=a.origOrder.slice(),"desc"===t.newSort.order&&t.newOrder.reverse()):(t.newOrder=t.startOrder.slice(),t.newOrder.sort(function(e,n){return a.compare(e,n,t.newSort)}));n.isEqualArray(t.newOrder,t.startOrder)&&(t.willSort=!1),a.callActions("afterSortOperation",arguments)},compare:function(t,e,n){var a=this,i=n.order,o=a.getAttributeValue(t,n.attribute),r=a.getAttributeValue(e,n.attribute);return isNaN(1*o)||isNaN(1*r)?(o=o.toLowerCase(),r=r.toLowerCase()):(o=1*o,r=1*r),or?"asc"===i?1:-1:o===r&&n.next?a.compare(t,e,n.next):0},getAttributeValue:function(t,n){var a=this,i="";return i=t.dom.el.getAttribute("data-"+n),null===i&&a.config.debug.showWarnings&&console.warn(e.messages.warningInconsistentSortingAttributes({attribute:"data-"+n})),a.callFilters("valueGetAttributeValue",i||0,arguments)},printSort:function(e,a){var i=this,o=e?a.newOrder:a.startOrder,r=e?a.startOrder:a.newOrder,s=o.length?o[o.length-1].dom.el.nextElementSibling:null,l=t.document.createDocumentFragment(),c=null,u=null,f=null,h=-1;for(i.callActions("beforePrintSort",arguments),h=0;u=o[h];h++)f=u.dom.el,"absolute"!==f.style.position&&(n.removeWhitespace(f.previousSibling),f.parentElement.removeChild(f));for(c=s?s.previousSibling:i.dom.parent.lastChild,c&&"#text"===c.nodeName&&n.removeWhitespace(c),h=0;u=r[h];h++)f=u.dom.el,n.isElement(l.lastChild)&&l.appendChild(t.document.createTextNode(" ")),l.appendChild(f);i.dom.parent.firstChild&&i.dom.parent.firstChild!==s&&l.insertBefore(t.document.createTextNode(" "),l.childNodes[0]),s?(l.appendChild(t.document.createTextNode(" ")),i.dom.parent.insertBefore(l,s)):i.dom.parent.appendChild(l),i.callActions("afterPrintSort",arguments)},parseSortString:function(t,a){var i=this,o=t.split(" "),r=a,s=[],l=-1;for(l=0;l-1&&(c=n.substring(l),u=s.exec(c),f=u[1]),t){case"fade":a.opacity=f?parseFloat(f):0;break;case"stagger":r.staggerDuration=f?parseFloat(f):100;break;default:if(o&&r.config.animation.reverseOut&&"scale"!==t?a[t].value=(f?parseFloat(f):e.transformDefaults[t].value)*-1:a[t].value=f?parseFloat(f):e.transformDefaults[t].value,f){for(m=0;d=h[m];m++)if(f.indexOf(d)>-1){a[t].unit=d;break}}else a[t].unit=e.transformDefaults[t].unit;i.push(t+"("+a[t].value+a[t].unit+")")}r.callActions("afterParseEffect",arguments)},buildState:function(t){var n=this,a=new e.State,i=null,o=-1;for(n.callActions("beforeBuildState",arguments),o=0;i=n.targets[o];o++)(!t.toRemove.length||t.toRemove.indexOf(i)<0)&&a.targets.push(i.dom.el);for(o=0;i=t.matching[o];o++)a.matching.push(i.dom.el);for(o=0;i=t.show[o];o++)a.show.push(i.dom.el);for(o=0;i=t.hide[o];o++)(!t.toRemove.length||t.toRemove.indexOf(i)<0)&&a.hide.push(i.dom.el);return a.id=n.id,a.container=n.dom.container,a.activeFilter=t.newFilter,a.activeSort=t.newSort,a.activeDataset=t.newDataset,a.activeContainerClassName=t.newContainerClassName,a.hasFailed=t.hasFailed,a.totalTargets=n.targets.length,a.totalShow=t.show.length,a.totalHide=t.hide.length,a.totalMatching=t.matching.length,a.triggerElement=t.triggerElement,n.callFilters("stateBuildState",a,arguments)},goMix:function(a,i){var o=this,r=null;return o.callActions("beforeGoMix",arguments),o.config.animation.duration&&o.config.animation.effects&&n.isVisible(o.dom.container)||(a=!1),i.toShow.length||i.toHide.length||i.willSort||i.willChangeLayout||(a=!1),i.startState.show.length||i.show.length||(a=!1),e.events.fire("mixStart",o.dom.container,{state:i.startState,futureState:i.newState,instance:o},o.dom.document),"function"==typeof o.config.callbacks.onMixStart&&o.config.callbacks.onMixStart.call(o.dom.container,i.startState,i.newState,o),n.removeClass(o.dom.container,n.getClassname(o.config.classNames,"container",o.config.classNames.modifierFailed)),r=o.userDeferred?o.userDeferred:o.userDeferred=n.defer(e.libraries),o.isBusy=!0,a&&e.features.has.transitions?(t.pageYOffset!==i.docState.scrollTop&&t.scrollTo(i.docState.scrollLeft,i.docState.scrollTop),o.config.animation.applyPerspective&&(o.dom.parent.style[e.features.perspectiveProp]=o.config.animation.perspectiveDistance,o.dom.parent.style[e.features.perspectiveOriginProp]=o.config.animation.perspectiveOrigin),o.config.animation.animateResizeContainer&&i.startHeight!==i.newHeight&&i.viewportDeltaY!==i.startHeight-i.newHeight&&(o.dom.parent.style.height=i.startHeight+"px"),o.config.animation.animateResizeContainer&&i.startWidth!==i.newWidth&&i.viewportDeltaX!==i.startWidth-i.newWidth&&(o.dom.parent.style.width=i.startWidth+"px"),i.startHeight===i.newHeight&&(o.dom.parent.style.height=i.startHeight+"px"),i.startWidth===i.newWidth&&(o.dom.parent.style.width=i.startWidth+"px"),i.startHeight===i.newHeight&&i.startWidth===i.newWidth&&(o.dom.parent.style.overflow="hidden"),requestAnimationFrame(function(){o.moveTargets(i)}),o.callFilters("promiseGoMix",r.promise,arguments)):(o.config.debug.fauxAsync?setTimeout(function(){o.cleanUp(i)},o.config.animation.duration):o.cleanUp(i),o.callFilters("promiseGoMix",r.promise,arguments))},getStartMixData:function(n){var a=this,i=t.getComputedStyle(a.dom.parent),o=a.dom.parent.getBoundingClientRect(),r=null,s={},l=-1,c=i[e.features.boxSizingProp];for(a.incPadding="border-box"===c,a.callActions("beforeGetStartMixData",arguments),l=0;r=n.show[l];l++)s=r.getPosData(),n.showPosData[l]={startPosData:s};for(l=0;r=n.toHide[l];l++)s=r.getPosData(),n.toHidePosData[l]={startPosData:s};n.startX=o.left,n.startY=o.top,n.startHeight=a.incPadding?o.height:o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderTop)-parseFloat(i.borderBottom),n.startWidth=a.incPadding?o.width:o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderLeft)-parseFloat(i.borderRight),a.callActions("afterGetStartMixData",arguments)},setInter:function(t){var e=this,a=null,i=-1;for(e.callActions("beforeSetInter",arguments),e.config.animation.clampHeight&&(e.dom.parent.style.height=t.startHeight+"px",e.dom.parent.style.overflow="hidden"),e.config.animation.clampWidth&&(e.dom.parent.style.width=t.startWidth+"px",e.dom.parent.style.overflow="hidden"),i=0;a=t.toShow[i];i++)a.show();t.willChangeLayout&&(n.removeClass(e.dom.container,t.startContainerClassName),n.addClass(e.dom.container,t.newContainerClassName)),e.callActions("afterSetInter",arguments)},getInterMixData:function(t){var e=this,n=null,a=-1;for(e.callActions("beforeGetInterMixData",arguments),a=0;n=t.show[a];a++)t.showPosData[a].interPosData=n.getPosData();for(a=0;n=t.toHide[a];a++)t.toHidePosData[a].interPosData=n.getPosData();e.callActions("afterGetInterMixData",arguments)},setFinal:function(t){var e=this,n=null,a=-1;for(e.callActions("beforeSetFinal",arguments),t.willSort&&e.printSort(!1,t),a=0;n=t.toHide[a];a++)n.hide();e.callActions("afterSetFinal",arguments)},getFinalMixData:function(e){var a=this,i=null,o=null,r=null,s=-1;for(a.callActions("beforeGetFinalMixData",arguments),s=0;r=e.show[s];s++)e.showPosData[s].finalPosData=r.getPosData();for(s=0;r=e.toHide[s];s++)e.toHidePosData[s].finalPosData=r.getPosData();for((a.config.animation.clampHeight||a.config.animation.clampWidth)&&(a.dom.parent.style.height=a.dom.parent.style.width=a.dom.parent.style.overflow=""),a.incPadding||(i=t.getComputedStyle(a.dom.parent)),o=a.dom.parent.getBoundingClientRect(),e.newX=o.left,e.newY=o.top,e.newHeight=a.incPadding?o.height:o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderTop)-parseFloat(i.borderBottom),e.newWidth=a.incPadding?o.width:o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderLeft)-parseFloat(i.borderRight),e.viewportDeltaX=e.docState.viewportWidth-this.dom.document.documentElement.clientWidth,e.viewportDeltaY=e.docState.viewportHeight-this.dom.document.documentElement.clientHeight,e.willSort&&a.printSort(!0,e),s=0;r=e.toShow[s];s++)r.hide();for(s=0;r=e.toHide[s];s++)r.show();e.willChangeLayout&&(n.removeClass(a.dom.container,e.newContainerClassName),n.addClass(a.dom.container,a.config.layout.containerClassName)),a.callActions("afterGetFinalMixData",arguments)},getTweenData:function(t){var n=this,a=null,i=null,o=Object.getOwnPropertyNames(n.effectsIn),r="",s=null,l=-1,c=-1,u=-1,f=-1;for(n.callActions("beforeGetTweenData",arguments),u=0;a=t.show[u];u++)for(i=t.showPosData[u],i.posIn=new e.StyleData,i.posOut=new e.StyleData,i.tweenData=new e.StyleData,a.isShown?(i.posIn.x=i.startPosData.x-i.interPosData.x,i.posIn.y=i.startPosData.y-i.interPosData.y):i.posIn.x=i.posIn.y=0,i.posOut.x=i.finalPosData.x-i.interPosData.x,i.posOut.y=i.finalPosData.y-i.interPosData.y,i.posIn.opacity=a.isShown?1:n.effectsIn.opacity,i.posOut.opacity=1,i.tweenData.opacity=i.posOut.opacity-i.posIn.opacity,a.isShown||n.config.animation.nudge||(i.posIn.x=i.posOut.x,i.posIn.y=i.posOut.y),i.tweenData.x=i.posOut.x-i.posIn.x,i.tweenData.y=i.posOut.y-i.posIn.y,n.config.animation.animateResizeTargets&&(i.posIn.width=i.startPosData.width,i.posIn.height=i.startPosData.height,l=(i.startPosData.width||i.finalPosData.width)-i.interPosData.width,i.posIn.marginRight=i.startPosData.marginRight-l,c=(i.startPosData.height||i.finalPosData.height)-i.interPosData.height,i.posIn.marginBottom=i.startPosData.marginBottom-c,i.posOut.width=i.finalPosData.width,i.posOut.height=i.finalPosData.height,l=(i.finalPosData.width||i.startPosData.width)-i.interPosData.width,i.posOut.marginRight=i.finalPosData.marginRight-l,c=(i.finalPosData.height||i.startPosData.height)-i.interPosData.height,i.posOut.marginBottom=i.finalPosData.marginBottom-c,i.tweenData.width=i.posOut.width-i.posIn.width,i.tweenData.height=i.posOut.height-i.posIn.height,i.tweenData.marginRight=i.posOut.marginRight-i.posIn.marginRight,i.tweenData.marginBottom=i.posOut.marginBottom-i.posIn.marginBottom),f=0;r=o[f];f++)s=n.effectsIn[r],s instanceof e.TransformData&&s.value&&(i.posIn[r].value=s.value,i.posOut[r].value=0,i.tweenData[r].value=i.posOut[r].value-i.posIn[r].value,i.posIn[r].unit=i.posOut[r].unit=i.tweenData[r].unit=s.unit);for(u=0;a=t.toHide[u];u++)for(i=t.toHidePosData[u],i.posIn=new e.StyleData,i.posOut=new e.StyleData,i.tweenData=new e.StyleData,i.posIn.x=a.isShown?i.startPosData.x-i.interPosData.x:0,i.posIn.y=a.isShown?i.startPosData.y-i.interPosData.y:0,i.posOut.x=n.config.animation.nudge?0:i.posIn.x,i.posOut.y=n.config.animation.nudge?0:i.posIn.y,i.tweenData.x=i.posOut.x-i.posIn.x,i.tweenData.y=i.posOut.y-i.posIn.y,n.config.animation.animateResizeTargets&&(i.posIn.width=i.startPosData.width,i.posIn.height=i.startPosData.height,l=i.startPosData.width-i.interPosData.width,i.posIn.marginRight=i.startPosData.marginRight-l,c=i.startPosData.height-i.interPosData.height,i.posIn.marginBottom=i.startPosData.marginBottom-c),i.posIn.opacity=1,i.posOut.opacity=n.effectsOut.opacity,i.tweenData.opacity=i.posOut.opacity-i.posIn.opacity,f=0;r=o[f];f++)s=n.effectsOut[r],s instanceof e.TransformData&&s.value&&(i.posIn[r].value=0,i.posOut[r].value=s.value,i.tweenData[r].value=i.posOut[r].value-i.posIn[r].value,i.posIn[r].unit=i.posOut[r].unit=i.tweenData[r].unit=s.unit);n.callActions("afterGetTweenData",arguments)},moveTargets:function(t){var a=this,i=null,o=null,r=null,s="",l=!1,c=-1,u=-1,f=a.checkProgress.bind(a);for(a.callActions("beforeMoveTargets",arguments),u=0;i=t.show[u];u++)o=new e.IMoveData,r=t.showPosData[u],s=i.isShown?"none":"show",l=a.willTransition(s,t.hasEffect,r.posIn,r.posOut),l&&c++,i.show(),o.posIn=r.posIn,o.posOut=r.posOut,o.statusChange=s,o.staggerIndex=c,o.operation=t,o.callback=l?f:null,i.move(o);for(u=0;i=t.toHide[u];u++)r=t.toHidePosData[u],o=new e.IMoveData,s="hide",l=a.willTransition(s,r.posIn,r.posOut),o.posIn=r.posIn,o.posOut=r.posOut,o.statusChange=s,o.staggerIndex=u,o.operation=t,o.callback=l?f:null,i.move(o);a.config.animation.animateResizeContainer&&(a.dom.parent.style[e.features.transitionProp]="height "+a.config.animation.duration+"ms ease, width "+a.config.animation.duration+"ms ease ",requestAnimationFrame(function(){t.startHeight!==t.newHeight&&t.viewportDeltaY!==t.startHeight-t.newHeight&&(a.dom.parent.style.height=t.newHeight+"px"),t.startWidth!==t.newWidth&&t.viewportDeltaX!==t.startWidth-t.newWidth&&(a.dom.parent.style.width=t.newWidth+"px")})),t.willChangeLayout&&(n.removeClass(a.dom.container,a.config.layout.ContainerClassName),n.addClass(a.dom.container,t.newContainerClassName)),a.callActions("afterMoveTargets",arguments)},hasEffect:function(){var t=this,e=["scale","translateX","translateY","translateZ","rotateX","rotateY","rotateZ"],n="",a=null,i=!1,o=-1,r=-1;if(1!==t.effectsIn.opacity)return t.callFilters("resultHasEffect",!0,arguments);for(r=0;n=e[r];r++)if(a=t.effectsIn[n],o="undefined"!==a.value?a.value:a,0!==o){i=!0;break}return t.callFilters("resultHasEffect",i,arguments)},willTransition:function(t,e,a,i){var o=this,r=!1;return r=!!n.isVisible(o.dom.container)&&(!!("none"!==t&&e||a.x!==i.x||a.y!==i.y)||!!o.config.animation.animateResizeTargets&&(a.width!==i.width||a.height!==i.height||a.marginRight!==i.marginRight||a.marginTop!==i.marginTop)),o.callFilters("resultWillTransition",r,arguments)},checkProgress:function(t){var e=this;e.targetsDone++,e.targetsBound===e.targetsDone&&e.cleanUp(t)},cleanUp:function(t){var a=this,i=null,o=null,r=null,s=null,l=-1;for(a.callActions("beforeCleanUp",arguments),a.targetsMoved=a.targetsImmovable=a.targetsBound=a.targetsDone=0,l=0;i=t.show[l];l++)i.cleanUp(),i.show();for(l=0;i=t.toHide[l];l++)i.cleanUp(),i.hide();if(t.willSort&&a.printSort(!1,t),a.dom.parent.style[e.features.transitionProp]=a.dom.parent.style.height=a.dom.parent.style.width=a.dom.parent.style.overflow=a.dom.parent.style[e.features.perspectiveProp]=a.dom.parent.style[e.features.perspectiveOriginProp]="",t.willChangeLayout&&(n.removeClass(a.dom.container,t.startContainerClassName),n.addClass(a.dom.container,t.newContainerClassName)),t.toRemove.length){for(l=0;i=a.targets[l];l++)t.toRemove.indexOf(i)>-1&&((o=i.dom.el.previousSibling)&&"#text"===o.nodeName&&(r=i.dom.el.nextSibling)&&"#text"===r.nodeName&&n.removeWhitespace(o),t.willSort||a.dom.parent.removeChild(i.dom.el),a.targets.splice(l,1),i.isInDom=!1,l--);a.origOrder=a.targets}t.willSort&&(a.targets=t.newOrder),a.state=t.newState,a.lastOperation=t,a.dom.targets=a.state.targets,e.events.fire("mixEnd",a.dom.container,{state:a.state,instance:a},a.dom.document),"function"==typeof a.config.callbacks.onMixEnd&&a.config.callbacks.onMixEnd.call(a.dom.container,a.state,a),t.hasFailed&&(e.events.fire("mixFail",a.dom.container,{state:a.state,instance:a},a.dom.document),"function"==typeof a.config.callbacks.onMixFail&&a.config.callbacks.onMixFail.call(a.dom.container,a.state,a),n.addClass(a.dom.container,n.getClassname(a.config.classNames,"container",a.config.classNames.modifierFailed))),"function"==typeof a.userCallback&&a.userCallback.call(a.dom.container,a.state,a),"function"==typeof a.userDeferred.resolve&&a.userDeferred.resolve(a.state),a.userCallback=null,a.userDeferred=null,a.lastClicked=null,a.isToggling=!1,a.isBusy=!1,a.queue.length&&(a.callActions("beforeReadQueueCleanUp",arguments),s=a.queue.shift(),a.userDeferred=s.deferred,a.isToggling=s.isToggling,a.lastClicked=s.triggerElement,s.instruction.command instanceof e.CommandMultimix?a.multimix.apply(a,s.args):a.dataset.apply(a,s.args)),a.callActions("afterCleanUp",arguments)},parseMultimixArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandMultimix,r=0;r-1?i.command.position=o:"string"==typeof o?i.command.collection=n.arrayFromList(n.createElement(o).childNodes):"object"==typeof o&&n.isElement(o,a.dom.document)?i.command.collection.length?i.command.sibling=o:i.command.collection=[o]:"object"==typeof o&&o.length?i.command.collection.length?i.command.sibling=o[0]:i.command.collection=o:"object"==typeof o&&o.childNodes&&o.childNodes.length?i.command.collection.length?i.command.sibling=o.childNodes[0]:i.command.collection=n.arrayFromList(o.childNodes):"object"==typeof o?n.extend(i.command,o):"boolean"==typeof o?i.animate=o:"function"==typeof o&&(i.callback=o));if(i.command.index&&i.command.sibling)throw new Error(e.messages.errorInsertInvalidArguments());return!i.command.collection.length&&a.config.debug.showWarnings&&console.warn(e.messages.warningInsertNoElements()),i=a.callFilters("instructionParseInsertArgs",i,arguments),n.freeze(i),i},parseRemoveArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=null,s=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandRemove,s=0;s-1&&i.command.targets.push(o);return!i.command.targets.length&&a.config.debug.showWarnings&&console.warn(e.messages.warningRemoveNoElements()),n.freeze(i),i},parseDatasetArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandDataset,r=0;r-1&&t.toggleArray.splice(a,1),i=t.getToggleSelector(),t.multimix({filter:i},e.animate,e.callback)},sort:function(){var t=this,e=t.parseSortArgs(arguments);return t.multimix({sort:e.command},e.animate,e.callback)},changeLayout:function(){var t=this,e=t.parseChangeLayoutArgs(arguments);return t.multimix({changeLayout:e.command},e.animate,e.callback)},dataset:function(){var t=this,n=t.parseDatasetArgs(arguments),a=null,i=null,o=!1;return t.callActions("beforeDataset",arguments),t.isBusy?(i=new e.QueueItem,i.args=arguments,i.instruction=n,t.queueMix(i)):(n.callback&&(t.userCallback=n.callback),o=n.animate^t.config.animation.enable?n.animate:t.config.animation.enable,a=t.getDataOperation(n.command.dataset),t.goMix(o,a))},multimix:function(){var t=this,n=null,a=!1,i=null,o=t.parseMultimixArgs(arguments);return t.callActions("beforeMultimix",arguments),t.isBusy?(i=new e.QueueItem,i.args=arguments,i.instruction=o,i.triggerElement=t.lastClicked,i.isToggling=t.isToggling,t.queueMix(i)):(n=t.getOperation(o.command),t.config.controls.enable&&(o.command.filter&&!t.isToggling&&(t.toggleArray.length=0,t.buildToggleArray(n.command)),t.queue.length<1&&t.updateControls(n.command)),o.callback&&(t.userCallback=o.callback),a=o.animate^t.config.animation.enable?o.animate:t.config.animation.enable,t.callFilters("operationMultimix",n,arguments),t.goMix(a,n))},getOperation:function(t){var a=this,i=t.sort,o=t.filter,r=t.changeLayout,s=t.remove,l=t.insert,c=new e.Operation;return c=a.callFilters("operationUnmappedGetOperation",c,arguments),c.id=n.randomHex(),c.command=t,c.startState=a.state,c.triggerElement=a.lastClicked,a.isBusy?(a.config.debug.showWarnings&&console.warn(e.messages.warningGetOperationInstanceBusy()),null):(l&&a.insertTargets(l,c),s&&(c.toRemove=s.targets),c.startSort=c.newSort=c.startState.activeSort,c.startOrder=c.newOrder=a.targets,i&&(c.startSort=c.startState.activeSort,c.newSort=i,c.willSort=a.willSort(i,c.startState.activeSort),c.willSort&&a.sortOperation(c)),c.startFilter=c.startState.activeFilter,o?c.newFilter=o:c.newFilter=n.extend(new e.CommandFilter,c.startFilter),"all"===c.newFilter.selector?c.newFilter.selector=a.config.selectors.target:"none"===c.newFilter.selector&&(c.newFilter.selector=""),a.filterOperation(c),c.startContainerClassName=c.startState.activeContainerClassName,r?(c.newContainerClassName=r.containerClassName,c.newContainerClassName!==c.startContainerClassName&&(c.willChangeLayout=!0)):c.newContainerClassName=c.startContainerClassName,a.config.animation.enable&&(a.getStartMixData(c),a.setInter(c),c.docState=n.getDocumentState(a.dom.document),a.getInterMixData(c),a.setFinal(c),a.getFinalMixData(c),a.parseEffects(),c.hasEffect=a.hasEffect(),a.getTweenData(c)),c.willSort&&(a.targets=c.newOrder),c.newState=a.buildState(c),a.callFilters("operationMappedGetOperation",c,arguments))},tween:function(t,e){var n=null,a=null,i=-1,o=-1;for(e=Math.min(e,1),e=Math.max(e,0),o=0;n=t.show[o];o++)a=t.showPosData[o],n.applyTween(a,e);for(o=0;n=t.hide[o];o++)n.isShown&&n.hide(),(i=t.toHide.indexOf(n))>-1&&(a=t.toHidePosData[i],n.isShown||n.show(),n.applyTween(a,e))},insert:function(){var t=this,e=t.parseInsertArgs(arguments);return t.multimix({insert:e.command},e.animate,e.callback)},insertBefore:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(e.command.collection,"before",e.command.sibling,e.animate,e.callback)},insertAfter:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(e.command.collection,"after",e.command.sibling,e.animate,e.callback)},prepend:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(0,e.command.collection,e.animate,e.callback)},append:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(t.state.totalTargets,e.command.collection,e.animate,e.callback)},remove:function(){var t=this,e=t.parseRemoveArgs(arguments);return t.multimix({remove:e.command},e.animate,e.callback)},getConfig:function(t){var e=this,a=null;return a=t?n.getProperty(e.config,t):e.config,e.callFilters("valueGetConfig",a,arguments)},configure:function(t){var e=this;e.callActions("beforeConfigure",arguments),n.extend(e.config,t,!0,!0),e.callActions("afterConfigure",arguments)},getState:function(){var t=this,a=null;return a=new e.State,n.extend(a,t.state),n.freeze(a),t.callFilters("stateGetState",a,arguments)},forceRefresh:function(){var t=this;t.indexTargets()},forceRender:function(){var t=this,e=null,n=null,a="";for(a in t.cache)e=t.cache[a],n=e.render(e.data),n!==e.dom.el&&(e.isInDom&&(e.unbindEvents(),t.dom.parent.replaceChild(n,e.dom.el)),e.isShown||(n.style.display="none"),e.dom.el=n,e.isInDom&&e.bindEvents());t.state=t.buildState(t.lastOperation)},destroy:function(t){var n=this,a=null,i=null,o=0;for(n.callActions("beforeDestroy",arguments),o=0;a=n.controls[o];o++)a.removeBinding(n);for(o=0;i=n.targets[o];o++)t&&i.show(),i.unbindEvents();n.dom.container.id.match(/^MixItUp/)&&n.dom.container.removeAttribute("id"),delete e.instances[n.id],n.callActions("afterDestroy",arguments)}}),e.IMoveData=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.posIn=null,this.posOut=null,this.operation=null,this.callback=null,this.statusChange="",this.duration=-1,this.staggerIndex=-1,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.IMoveData),e.IMoveData.prototype=Object.create(e.Base.prototype),e.IMoveData.prototype.constructor=e.IMoveData,e.TargetDom=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.el=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.TargetDom),e.TargetDom.prototype=Object.create(e.Base.prototype),e.TargetDom.prototype.constructor=e.TargetDom,e.Target=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.sortString="",this.mixer=null,this.callback=null,this.isShown=!1,this.isBound=!1,this.isExcluded=!1,this.isInDom=!1,this.handler=null,this.operation=null,this.data=null,this.dom=new e.TargetDom,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.Target),e.Target.prototype=Object.create(e.Base.prototype),n.extend(e.Target.prototype,{constructor:e.Target,init:function(t,n,a){var i=this,o="";if(i.callActions("beforeInit",arguments),i.mixer=n,t||(t=i.render(a)),i.cacheDom(t),i.bindEvents(),"none"!==i.dom.el.style.display&&(i.isShown=!0),a&&n.config.data.uidKey){if("undefined"==typeof(o=a[n.config.data.uidKey])||o.toString().length<1)throw new TypeError(e.messages.errorDatasetInvalidUidKey({uidKey:n.config.data.uidKey}));i.id=o,i.data=a,n.cache[o]=i}i.callActions("afterInit",arguments)},render:function(t){var a=this,i=null,o=null,r=null,s="";if(a.callActions("beforeRender",arguments),i=a.callFilters("renderRender",a.mixer.config.render.target,arguments),"function"!=typeof i)throw new TypeError(e.messages.errorDatasetRendererNotSet());return s=i(t),s&&"object"==typeof s&&n.isElement(s)?o=s:"string"==typeof s&&(r=document.createElement("div"),r.innerHTML=s,o=r.firstElementChild),a.callFilters("elRender",o,arguments)},cacheDom:function(t){var e=this;e.callActions("beforeCacheDom",arguments),e.dom.el=t,e.callActions("afterCacheDom",arguments)},getSortString:function(t){var e=this,n=e.dom.el.getAttribute("data-"+t)||"";e.callActions("beforeGetSortString",arguments),n=isNaN(1*n)?n.toLowerCase():1*n,e.sortString=n,e.callActions("afterGetSortString",arguments)},show:function(){var t=this;t.callActions("beforeShow",arguments),t.isShown||(t.dom.el.style.display="",t.isShown=!0),t.callActions("afterShow",arguments)},hide:function(){var t=this;t.callActions("beforeHide",arguments),t.isShown&&(t.dom.el.style.display="none",t.isShown=!1),t.callActions("afterHide",arguments)},move:function(t){var e=this;e.callActions("beforeMove",arguments),e.isExcluded||e.mixer.targetsMoved++,e.applyStylesIn(t),requestAnimationFrame(function(){e.applyStylesOut(t)}),e.callActions("afterMove",arguments)},applyTween:function(t,n){var a=this,i="",o=null,r=t.posIn,s=[],l=new e.StyleData,c=-1;for(a.callActions("beforeApplyTween",arguments),l.x=r.x,l.y=r.y,0===n?a.hide():a.isShown||a.show(),c=0;i=e.features.TWEENABLE[c];c++)if(o=t.tweenData[i],"x"===i){if(!o)continue;l.x=r.x+o*n}else if("y"===i){if(!o)continue;l.y=r.y+o*n}else if(o instanceof e.TransformData){if(!o.value)continue;l[i].value=r[i].value+o.value*n,l[i].unit=o.unit,s.push(i+"("+l[i].value+o.unit+")")}else{if(!o)continue;l[i]=r[i]+o*n,a.dom.el.style[i]=l[i]}(l.x||l.y)&&s.unshift("translate("+l.x+"px, "+l.y+"px)"),s.length&&(a.dom.el.style[e.features.transformProp]=s.join(" ")),a.callActions("afterApplyTween",arguments)},applyStylesIn:function(t){var n=this,a=t.posIn,i=1!==n.mixer.effectsIn.opacity,o=[];n.callActions("beforeApplyStylesIn",arguments),o.push("translate("+a.x+"px, "+a.y+"px)"),n.mixer.config.animation.animateResizeTargets&&("show"!==t.statusChange&&(n.dom.el.style.width=a.width+"px",n.dom.el.style.height=a.height+"px"),n.dom.el.style.marginRight=a.marginRight+"px",n.dom.el.style.marginBottom=a.marginBottom+"px"),i&&(n.dom.el.style.opacity=a.opacity),"show"===t.statusChange&&(o=o.concat(n.mixer.transformIn)),n.dom.el.style[e.features.transformProp]=o.join(" "),n.callActions("afterApplyStylesIn",arguments)},applyStylesOut:function(t){var n=this,a=[],i=[],o=n.mixer.config.animation.animateResizeTargets,r="undefined"!=typeof n.mixer.effectsIn.opacity;if(n.callActions("beforeApplyStylesOut",arguments),a.push(n.writeTransitionRule(e.features.transformRule,t.staggerIndex)),"none"!==t.statusChange&&a.push(n.writeTransitionRule("opacity",t.staggerIndex,t.duration)),o&&(a.push(n.writeTransitionRule("width",t.staggerIndex,t.duration)),a.push(n.writeTransitionRule("height",t.staggerIndex,t.duration)),a.push(n.writeTransitionRule("margin",t.staggerIndex,t.duration))),!t.callback)return n.mixer.targetsImmovable++,void(n.mixer.targetsMoved===n.mixer.targetsImmovable&&n.mixer.cleanUp(t.operation));switch(n.operation=t.operation,n.callback=t.callback,!n.isExcluded&&n.mixer.targetsBound++,n.isBound=!0,n.applyTransition(a),o&&t.posOut.width>0&&t.posOut.height>0&&(n.dom.el.style.width=t.posOut.width+"px",n.dom.el.style.height=t.posOut.height+"px",n.dom.el.style.marginRight=t.posOut.marginRight+"px",n.dom.el.style.marginBottom=t.posOut.marginBottom+"px"),n.mixer.config.animation.nudge||"hide"!==t.statusChange||i.push("translate("+t.posOut.x+"px, "+t.posOut.y+"px)"),t.statusChange){case"hide":r&&(n.dom.el.style.opacity=n.mixer.effectsOut.opacity),i=i.concat(n.mixer.transformOut);break;case"show":r&&(n.dom.el.style.opacity=1)}(n.mixer.config.animation.nudge||!n.mixer.config.animation.nudge&&"hide"!==t.statusChange)&&i.push("translate("+t.posOut.x+"px, "+t.posOut.y+"px)"),n.dom.el.style[e.features.transformProp]=i.join(" "),n.callActions("afterApplyStylesOut",arguments)},writeTransitionRule:function(t,e,n){var a=this,i=a.getDelay(e),o="";return o=t+" "+(n>0?n:a.mixer.config.animation.duration)+"ms "+i+"ms "+("opacity"===t?"linear":a.mixer.config.animation.easing),a.callFilters("ruleWriteTransitionRule",o,arguments)},getDelay:function(t){var e=this,n=-1;return"function"==typeof e.mixer.config.animation.staggerSequence&&(t=e.mixer.config.animation.staggerSequence.call(e,t,e.state)),n=e.mixer.staggerDuration?t*e.mixer.staggerDuration:0,e.callFilters("delayGetDelay",n,arguments)},applyTransition:function(t){var n=this,a=t.join(", ");n.callActions("beforeApplyTransition",arguments),n.dom.el.style[e.features.transitionProp]=a,n.callActions("afterApplyTransition",arguments)},handleTransitionEnd:function(t){var e=this,n=t.propertyName,a=e.mixer.config.animation.animateResizeTargets;e.callActions("beforeHandleTransitionEnd",arguments),e.isBound&&t.target.matches(e.mixer.config.selectors.target)&&(n.indexOf("transform")>-1||n.indexOf("opacity")>-1||a&&n.indexOf("height")>-1||a&&n.indexOf("width")>-1||a&&n.indexOf("margin")>-1)&&(e.callback.call(e,e.operation),e.isBound=!1,e.callback=null,e.operation=null),e.callActions("afterHandleTransitionEnd",arguments)},eventBus:function(t){var e=this;switch(e.callActions("beforeEventBus",arguments),t.type){case"webkitTransitionEnd":case"transitionend":e.handleTransitionEnd(t)}e.callActions("afterEventBus",arguments)},unbindEvents:function(){var t=this;t.callActions("beforeUnbindEvents",arguments),n.off(t.dom.el,"webkitTransitionEnd",t.handler),n.off(t.dom.el,"transitionend",t.handler),t.callActions("afterUnbindEvents",arguments)},bindEvents:function(){var t=this,a="";t.callActions("beforeBindEvents",arguments),a="webkit"===e.features.transitionPrefix?"webkitTransitionEnd":"transitionend",t.handler=function(e){return t.eventBus(e)},n.on(t.dom.el,a,t.handler),t.callActions("afterBindEvents",arguments)},getPosData:function(n){var a=this,i={},o=null,r=new e.StyleData;return a.callActions("beforeGetPosData",arguments),r.x=a.dom.el.offsetLeft,r.y=a.dom.el.offsetTop,(a.mixer.config.animation.animateResizeTargets||n)&&(o=a.dom.el.getBoundingClientRect(),r.top=o.top,r.right=o.right,r.bottom=o.bottom,r.left=o.left,r.width=o.width,r.height=o.height),a.mixer.config.animation.animateResizeTargets&&(i=t.getComputedStyle(a.dom.el),r.marginBottom=parseFloat(i.marginBottom),r.marginRight=parseFloat(i.marginRight)),a.callFilters("posDataGetPosData",r,arguments)},cleanUp:function(){var t=this;t.callActions("beforeCleanUp",arguments),t.dom.el.style[e.features.transformProp]="",t.dom.el.style[e.features.transitionProp]="",t.dom.el.style.opacity="",t.mixer.config.animation.animateResizeTargets&&(t.dom.el.style.width="",t.dom.el.style.height="",t.dom.el.style.marginRight="",t.dom.el.style.marginBottom=""),t.callActions("afterCleanUp",arguments)}}),e.Collection=function(t){var e=null,a=-1;for(this.callActions("beforeConstruct"),a=0;e=t[a];a++)this[a]=e;this.length=t.length,this.callActions("afterConstruct"),n.freeze(this)},e.BaseStatic.call(e.Collection),e.Collection.prototype=Object.create(e.Base.prototype),n.extend(e.Collection.prototype,{constructor:e.Collection,mixitup:function(t){var a=this,i=null,o=Array.prototype.slice.call(arguments),r=[],s=-1;for(this.callActions("beforeMixitup"),o.shift(),s=0;i=a[s];s++)r.push(i[t].apply(i,o));return a.callFilters("promiseMixitup",n.all(r,e.libraries),arguments)}}),e.Operation=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.args=[],this.command=null,this.showPosData=[],this.toHidePosData=[],this.startState=null,this.newState=null,this.docState=null,this.willSort=!1,this.willChangeLayout=!1,this.hasEffect=!1,this.hasFailed=!1,this.triggerElement=null,this.show=[],this.hide=[],this.matching=[],this.toShow=[],this.toHide=[],this.toMove=[],this.toRemove=[],this.startOrder=[],this.newOrder=[],this.startSort=null,this.newSort=null,this.startFilter=null,this.newFilter=null,this.startDataset=null,this.newDataset=null,this.viewportDeltaX=0,this.viewportDeltaY=0,this.startX=0,this.startY=0,this.startHeight=0,this.startWidth=0,this.newX=0,this.newY=0,this.newHeight=0,this.newWidth=0,this.startContainerClassName="",this.startDisplay="",this.newContainerClassName="",this.newDisplay="",this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.Operation),e.Operation.prototype=Object.create(e.Base.prototype),e.Operation.prototype.constructor=e.Operation,e.State=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.activeFilter=null,this.activeSort=null,this.activeContainerClassName="",this.container=null,this.targets=[],this.hide=[],this.show=[],this.matching=[],this.totalTargets=-1,this.totalShow=-1,this.totalHide=-1,this.totalMatching=-1,this.hasFailed=!1,this.triggerElement=null,this.activeDataset=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.State),e.State.prototype=Object.create(e.Base.prototype),e.State.prototype.constructor=e.State,e.UserInstruction=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.command={},this.animate=!1,this.callback=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.UserInstruction),e.UserInstruction.prototype=Object.create(e.Base.prototype),e.UserInstruction.prototype.constructor=e.UserInstruction,e.Messages=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.ERROR_FACTORY_INVALID_CONTAINER="[MixItUp] An invalid selector or element reference was passed to the mixitup factory function",this.ERROR_FACTORY_CONTAINER_NOT_FOUND="[MixItUp] The provided selector yielded no container element",this.ERROR_CONFIG_INVALID_ANIMATION_EFFECTS="[MixItUp] Invalid value for `animation.effects`",this.ERROR_CONFIG_INVALID_CONTROLS_SCOPE="[MixItUp] Invalid value for `controls.scope`",this.ERROR_CONFIG_INVALID_PROPERTY='[MixitUp] Invalid configuration object property "${erroneous}"${suggestion}',this.ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION='. Did you mean "${probableMatch}"?',this.ERROR_CONFIG_DATA_UID_KEY_NOT_SET="[MixItUp] To use the dataset API, a UID key must be specified using `data.uidKey`",this.ERROR_DATASET_INVALID_UID_KEY='[MixItUp] The specified UID key "${uidKey}" is not present on one or more dataset items',this.ERROR_DATASET_DUPLICATE_UID='[MixItUp] The UID "${uid}" was found on two or more dataset items. UIDs must be unique.',this.ERROR_INSERT_INVALID_ARGUMENTS="[MixItUp] Please provider either an index or a sibling and position to insert, not both",this.ERROR_INSERT_PREEXISTING_ELEMENT="[MixItUp] An element to be inserted already exists in the container",this.ERROR_FILTER_INVALID_ARGUMENTS="[MixItUp] Please provide either a selector or collection `.filter()`, not both",this.ERROR_DATASET_NOT_SET="[MixItUp] To use the dataset API with pre-rendered targets, a starting dataset must be set using `load.dataset`",this.ERROR_DATASET_PRERENDERED_MISMATCH="[MixItUp] `load.dataset` does not match pre-rendered targets",this.ERROR_DATASET_RENDERER_NOT_SET="[MixItUp] To insert an element via the dataset API, a target renderer function must be provided to `render.target`",this.ERROR_SORT_NON_EXISTENT_ELEMENT="[MixItUp] An element to be sorted does not already exist in the container",this.WARNING_FACTORY_PREEXISTING_INSTANCE="[MixItUp] WARNING: This element already has an active MixItUp instance. The provided configuration object will be ignored. If you wish to perform additional methods on this instance, please create a reference.",this.WARNING_INSERT_NO_ELEMENTS="[MixItUp] WARNING: No valid elements were passed to `.insert()`",this.WARNING_REMOVE_NO_ELEMENTS="[MixItUp] WARNING: No valid elements were passed to `.remove()`",this.WARNING_MULTIMIX_INSTANCE_QUEUE_FULL="[MixItUp] WARNING: An operation was requested but the MixItUp instance was busy. The operation was rejected because the queue is full or queuing is disabled.",this.WARNING_GET_OPERATION_INSTANCE_BUSY="[MixItUp] WARNING: Operations can be be created while the MixItUp instance is busy.",this.WARNING_NO_PROMISE_IMPLEMENTATION="[MixItUp] WARNING: No Promise implementations could be found. If you wish to use promises with MixItUp please install an ES6 Promise polyfill.",this.WARNING_INCONSISTENT_SORTING_ATTRIBUTES='[MixItUp] WARNING: The requested sorting data attribute "${attribute}" was not present on one or more target elements which may product unexpected sort output',this.callActions("afterConstruct"),this.compileTemplates(),n.seal(this)},e.BaseStatic.call(e.Messages),e.Messages.prototype=Object.create(e.Base.prototype),e.Messages.prototype.constructor=e.Messages,e.Messages.prototype.compileTemplates=function(){var t="",e="";for(t in this)"string"==typeof(e=this[t])&&(this[n.camelCase(t)]=n.template(e))},e.messages=new e.Messages,e.Facade=function(t){e.Base.call(this),this.callActions("beforeConstruct",arguments),this.configure=t.configure.bind(t),this.show=t.show.bind(t),this.hide=t.hide.bind(t),this.filter=t.filter.bind(t),this.toggleOn=t.toggleOn.bind(t),this.toggleOff=t.toggleOff.bind(t),this.sort=t.sort.bind(t),this.changeLayout=t.changeLayout.bind(t),this.multimix=t.multimix.bind(t),this.dataset=t.dataset.bind(t),this.tween=t.tween.bind(t),this.insert=t.insert.bind(t),this.insertBefore=t.insertBefore.bind(t),this.insertAfter=t.insertAfter.bind(t),this.prepend=t.prepend.bind(t),this.append=t.append.bind(t),this.remove=t.remove.bind(t),this.destroy=t.destroy.bind(t),this.forceRefresh=t.forceRefresh.bind(t),this.forceRender=t.forceRender.bind(t),this.isMixing=t.isMixing.bind(t),this.getOperation=t.getOperation.bind(t),this.getConfig=t.getConfig.bind(t),this.getState=t.getState.bind(t),this.callActions("afterConstruct",arguments),n.freeze(this),n.seal(this)},e.BaseStatic.call(e.Facade),e.Facade.prototype=Object.create(e.Base.prototype),e.Facade.prototype.constructor=e.Facade,"object"==typeof exports&&"object"==typeof module?module.exports=e:"function"==typeof define&&define.amd?define(function(){return e}):"undefined"!=typeof t.mixitup&&"function"==typeof t.mixitup||(t.mixitup=e),e.BaseStatic.call(e.constructor),e.NAME="mixitup",e.CORE_VERSION="3.3.1"}(window); \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..e69de29 diff --git a/mixitup-3.3.1/.gitignore b/mixitup-3.3.1/.gitignore new file mode 100644 index 0000000..5e63733 --- /dev/null +++ b/mixitup-3.3.1/.gitignore @@ -0,0 +1,7 @@ +node_modules +components +.tmp +.DS_Store +.log +npm-debug.* +coverage/ \ No newline at end of file diff --git a/mixitup-3.3.1/.jscsrc b/mixitup-3.3.1/.jscsrc new file mode 100644 index 0000000..2d5d2e4 --- /dev/null +++ b/mixitup-3.3.1/.jscsrc @@ -0,0 +1,95 @@ +{ + "requireCurlyBraces": [ + "else", + "for", + "while", + "do", + "try", + "catch" + ], + "requireSpaceAfterKeywords": [ + "if", + "else", + "for", + "while", + "do", + "case", + "return", + "try", + "typeof" + ], + "safeContextKeyword": ["self"], + "maximumLineLength": { + "value": 140, + "allowComments": true, + "allowRegex": true + }, + "requireSpaceBeforeBlockStatements": true, + "requireParenthesesAroundIIFE": true, + "requireSpaceAfterLineComment": { + "allExcept": ["#", "="] + }, + "requireSpacesInConditionalExpression": true, + "disallowSpacesInNamedFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInFunctionDeclaration": { + "beforeOpeningRoundBrace": true + }, + "disallowFunctionDeclarations": false, + "requireSpaceBetweenArguments": true, + "requireMultipleVarDecl": false, + "requireBlocksOnNewline": true, + "requireSemicolons": true, + "disallowEmptyBlocks": true, + "disallowSpacesInsideArrayBrackets": true, + "disallowSpacesInsideParentheses": true, + "requireCommaBeforeLineBreak": true, + "requireLineBreakAfterVariableAssignment": true, + "requirePaddingNewlinesBeforeKeywords": [ + "do", + "for", + "if", + "switch", + "try", + "void", + "while", + "return" + ], + "requirePaddingNewLinesInObjects": true, + "disallowSpaceAfterPrefixUnaryOperators": true, + "disallowSpaceBeforePostfixUnaryOperators": true, + "disallowSpaceBeforeBinaryOperators": [ + "," + ], + "requireSpacesInForStatement": true, + "requireSpaceBeforeBinaryOperators": true, + "requireSpaceAfterBinaryOperators": true, + "disallowKeywords": [ + "with" + ], + "validateIndentation": 4, + "disallowMixedSpacesAndTabs": true, + "disallowTrailingWhitespace": true, + "disallowTrailingComma": true, + "disallowKeywordsOnNewLine": [ + "else" + ], + "requireCapitalizedConstructors": true, + "disallowNewlineBeforeBlockStatements": true, + "disallowMultipleLineStrings": true, + "disallowMultipleLineBreaks": true, + "requireSpaceBeforeObjectValues": true, + "validateQuoteMarks": "'", + "jsDoc": { + "checkAnnotations": true, + "requireParamTypes": true, + "checkParamNames": true, + "checkParamExistence": true, + // "checkRedundantParams": true, + "checkReturnTypes": true, + "requireNewlineAfterDescription": true, + // "requireParamDescription": true, + "requireDescriptionCompleteSentence": true + } +} \ No newline at end of file diff --git a/mixitup-3.3.1/.jshintrc b/mixitup-3.3.1/.jshintrc new file mode 100644 index 0000000..425b4e1 --- /dev/null +++ b/mixitup-3.3.1/.jshintrc @@ -0,0 +1,24 @@ +{ + "esnext": true, + "-W030": true, + "-W053": true, + "-W084": true, + "-W055": true, + "-W069": true, + "-W097": true, + "-W087": true, + "undef": true, + "unused": true, + "laxbreak": true, + "node": true, + "browser": true, + "predef": [ + "window", + "Promise", + "define", + "console", + "describe", + "after", + "it" + ] +} \ No newline at end of file diff --git a/mixitup-3.3.1/.travis.yml b/mixitup-3.3.1/.travis.yml new file mode 100644 index 0000000..23c6a7b --- /dev/null +++ b/mixitup-3.3.1/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "node" +after_success: + - npm run coveralls \ No newline at end of file diff --git a/mixitup-3.3.1/CHANGELOG.md b/mixitup-3.3.1/CHANGELOG.md new file mode 100644 index 0000000..455a745 --- /dev/null +++ b/mixitup-3.3.1/CHANGELOG.md @@ -0,0 +1,94 @@ +Change Log +========== + +## 3.3.1 +- Insures dataset uses polyfilled `Array.from` for old IE support. +- Fixes support for sorting via element collection. This was not correctly implemented before although documented. +- Fixes the "filter-by-url" demo to ensure that only leading `'.'` characters are stripped off rather than any character. + +## 3.3.0 +- Introduces new internal filter hook `testResultEvaluateHideShown` allowing plugins to manipulate the result of every filter test upon a target. Provides an convenient entry point for non-selector based filtering such as range slider inputs. +- Adds range slider demo. + +## 3.2.2 +- Fixes issue where multiple toggle controls are not automatically activated when a compound selector is specified to `load.filter`. +- Fixes issue where calling `.toggleOff()` and passing a non-existent selector will deactivate all other active toggles. +- Fixes issue where padding whitespace around a DOM string when calling `.insert()` caused an exception. +- Adds additional demos for non-standard UI. + +## 3.2.1 +- Additional edge-case work relating to Dataset API fix in v3.2.0. +- Addition of `.forceRender()` mixer API method. +- Removes `.multiMix()` legacy API alias method. + +## 3.2.0 +- Removes support for legacy `$().mixItUp()` jQuery API +- Fixes issue with Dataset API causing DOM exception when dealing with certain combinations of simultaneous insertion and sorting. + +## 3.1.12 +- Fixes issue where `state.targets` does not reflect the updated sort order after a sort operation. +- Addition of `behavior.liveSort` configuration option. + +## 3.1.11 + +- Various geometry improvements related to scroll bar issues on desktop Windows and (non-inertial scroll) desktop Mac systems. +- Addition of `animation.clampWidth` configuration option. + +## 3.1.10 + +- Fixes an issue where the `activeContainerClass` did not persist between non-layout-change operations (e.g. sort, filter). + +## 3.1.9 + +- Fixes an issue relating to `animation.clampHeight` where the height was not correctly applied causing scroll jumping in certain situations. + +## 3.1.8 + +- Adds ability to bind live controls where multiple parents exist. Required for Pagination 3.2.0. + +## 3.1.7 + +- Fixed duplicate hook `beforeCacheDom` in `Target#cacheDom`. Now renamed to `afterCacheDom`. + +## 3.1.6 + +- Added composer.json + +## 3.1.5 + +- Fixed several issues relating to the Dataset API and multimix-like operations (i.e. simultaneous insertion/removal/sorting/dirty-checking) + +## 3.1.4 + +- Added ability to extend static factory methods (such as `mixitup.use`) with hooks. +- Added ability to return a single DOM element from `render.target` instead of an HTML string +- Moved target rendering functionality into `Target` class, so that targets can render themselves +- Force disable controls if dataset API is in use (if `data.uidKey` is set) + +## 3.1.3 + +- Exposed `.toggleOn()` and `.toggleOff()` API methods publicly via the mixer facade, as were accidently missed out previously. + +## 3.1.2 + +- Improved `compareVersions` util function to handle semver notation correctly (e.g. `'^'`, `'~'`, `'-beta'`, etc). +- Fixed issue with "Filtering by URL" demo that added a `#mix` segment to the URL for filter "all" + +## 3.1.1 + +- Fixed issue where `transitionend` event handlers were not rebound to re-rendered targets during dirtyCheck updates. +- Fixed issue where dataset operation objects where created on push to queue, resulting in corrupted target data. + +## 3.1.0 + +- Added `selectors.controls` configuration option to allow for further specificity of control querying +in addition to the mandatory data attributes. +- Fixed package.json issues. + +## 3.0.1 + +- Fixed issue where `layout.containerClassName` is not reflected in state object after instantiation. + +## 3.0.0 + +- Release \ No newline at end of file diff --git a/mixitup-3.3.1/README.md b/mixitup-3.3.1/README.md new file mode 100644 index 0000000..a9cdb09 --- /dev/null +++ b/mixitup-3.3.1/README.md @@ -0,0 +1,208 @@ +# MixItUp 3 + +[![Build Status](https://travis-ci.org/patrickkunka/mixitup.svg?branch=v3)](https://travis-ci.org/patrickkunka/mixitup) +[![Coverage Status](https://coveralls.io/repos/github/patrickkunka/mixitup/badge.svg?branch=v3)](https://coveralls.io/github/patrickkunka/mixitup?branch=v3) +[![jsDelivr Hits](https://data.jsdelivr.com/v1/package/gh/patrickkunka/mixitup/badge?style=rounded)](https://www.jsdelivr.com/package/gh/patrickkunka/mixitup) + +MixItUp is a high-performance, dependency-free library for animated DOM manipulation, giving you the power to filter, sort, add and remove DOM elements with beautiful animations. + +MixItUp plays nice with your existing HTML and CSS, making it a great choice for responsive layouts and compatible with inline-flow, percentages, media queries, flexbox and more. + +For a live sandbox, full documentation, tutorials and more, please visit [kunkalabs.com/mixitup](https://www.kunkalabs.com/mixitup/). + +Migrating from MixItUp 2? Check out the [MixItUp 3 Migration Guide](./docs/mixitup-3-migration-guide.md). + +#### Licensing + +MixItUp is open source and free to use for non-commercial, educational and non-profit use. For use in commercial projects, **a commercial license is required**. For licensing information and FAQs please see the [MixItUp Licenses](https://www.kunkalabs.com/mixitup/licenses/) page. + +#### Documentation + +- [Factory Function](./docs/mixitup.md) +- [Configuration Object](./docs/mixitup.Config.md) +- [Mixer API Methods](./docs/mixitup.Mixer.md) +- [State Object](./docs/mixitup.State.md) +- [Mixer Events](./docs/mixitup.Events.md) + +#### Browser Support + +MixItUp 3 has been tested for compatibility with the following browsers. + +- Chrome 16+ +- Firefox 16+ +- Safari 6.2+ +- Yandex 14+ +- Edge 13+ +- IE 10+ (with animations), IE 8-9 (no animations) + +## Getting Started + +#### Contents + +- [Building the Container](#building-the-container) +- [Building Controls](#building-controls) +- [Styling the Container](#styling-the-container) +- [Loading MixItUp](#loading-mixitup) +- [Creating a Mixer](#creating-a-mixer) +- [Configuration](#configuration) + +Most commonly, MixItUp is applied to a **"container"** of **"target"** elements, which could be a portfolio of projects, a list of blog posts, a selection of products, or any kind of UI where filtering and/or sorting would be advantageous. + +To get started, follow these simple steps: + +### Building the Container + +By default, MixItUp will query the container for targets matching the selector `'.mix'`. + +```html +
+
+
+
+
+
+``` + +Targets can be filtered using any valid selector e.g. `'.category-a'`, and are sorted via optional custom data attributes e.g. `'data-order'`. + +Further reading: [Marking-up MixItUp Containers](https://www.kunkalabs.com/tutorials/marking-up-mixitup-containers/) + +### Building Controls + +One way that filtering and sorting happens is when controls are clicked. You may use any clickable element as a control, but ` + + + +``` + +Further reading: [Filtering with MixItUp](https://www.kunkalabs.com/tutorials/filtering-with-mixitup/) + +#### Sort Controls + +Sort controls are queried based on the presence of a `data-sort` attribute, whose value takes the form of a "sort string" made up of the name of the attribute to sort by, followed by an optional colon-separated sorting order e.g. `'order'`, `'order:asc'`, `'order:desc'`. + +```html + + + +``` + +The values `'default'` and `'random'` are also valid, with `'default'` referring to the original order of target elements in the DOM at the time of mixer instantiation. + +Further reading: [Sorting with MixItUp](https://www.kunkalabs.com/tutorials/sorting-with-mixitup/) + +### Styling the Container + +While MixItUp can be added on top of any existing CSS layout, we strongly recommend inline-block or flexbox-based styling over floats and legacy grid frameworks when dealing with grid-based designs for a number of reasons. + +Further reading: [MixItUp Grid Layouts](https://www.kunkalabs.com/tutorials/mixitup-grid-layouts/) + +### Loading MixItUp + +Firstly, load the MixItUp JavaScript library using the preferred method for your project. + +#### Script Tag + +The most simple way to load MixItUp in your project is to include it via a ` + + +``` + +With this technique, the MixItUp factory function will be made available via the global variable `mixitup`. + +#### Module Import + +If you are building a modular JavaScript project with Webpack, Browserify, or RequireJS, MixItUp can be installed using your package manager of choice (e.g. npm, jspm, yarn) and then imported into any of your project's modules. + +`npm install mixitup --save` + +```js +// ES2015 + +import mixitup from 'mixitup'; +``` + +```js +// CommonJS + +var mixitup = require('mixitup'); +``` + +```js +// AMD + +require(['mixitup'], function(mixitup) { + +}); +``` + +### Creating a Mixer + +With the `mixitup()` factory function available, you may now instantiate a "mixer" on your container to enable MixItUp functionality. + +Call the factory function passing a selector string or a reference to your container element as the first parameter, and a the newly instantiated mixer will be returned. + +###### Example: Instantiating a mixer with a selector string + +```js +var mixer = mixitup('.container'); +``` + +###### Example: Instantiating a mixer with an element reference + +```js +var mixer = mixitup(containerEl); +``` + +Your mixer is now ready for you to interact with, either via its controls (see above), or its API (see [Mixer API Methods](./docs/mixitup.Mixer.md)). Click a control or call an API method to check that everything is working correctly. + +### Configuration + +If you wish to customize the functionality of your mixer, an optional "configuration object" can be passed as the second parameter to the `mixitup` function. If no configuration object is passed, the default settings will be used. + +Further reading: [Configuration Object](/docs/mixitup.Config.md) + +###### Example: Passing a configuration object + +```js +var mixer = mixitup(containerEl, { + selectors: { + target: '.blog-item' + }, + animation: { + duration: 300 + } +}); +``` + +#### Using the API + +If you wish to interact with your mixer via its API, the mixer reference returned by the factory function can be used to call API methods. + +###### Example: Calling an API method + +```js +var mixer = mixitup(containerEl); + +mixer.filter('.category-a'); +``` + +Further reading: [Mixer API Methods](./docs/mixitup.Mixer.md) + +#### Building a modern JavaScript application? + +You may wish to use MixItUp 3's new "dataset" API. Dataset is designed for use in API-driven JavaScript applications, and can be used instead of DOM-based methods such as `.filter()`, `.sort()`, `.insert()`, etc. When used, insertion, removal, sorting and pagination can be achieved purely via changes to your data model, without the uglyness of having to interact with or query the DOM directly. + +Further reading: [Using the Dataset API](https://www.kunkalabs.com/tutorials/using-the-dataset-api/) diff --git a/mixitup-3.3.1/composer.json b/mixitup-3.3.1/composer.json new file mode 100644 index 0000000..2115a8e --- /dev/null +++ b/mixitup-3.3.1/composer.json @@ -0,0 +1,19 @@ +{ + "name": "patrickkunka/mixitup", + "type": "library", + "homepage": "https://www.kunkalabs.com/mixitup/", + "license": [ + "proprietary" + ], + "authors": [ + { + "name": "KunkaLabs Limited", + "homepage": "https://www.kunkalabs.com/" + } + ], + "support": { + "docs": "https://www.kunkalabs.com/mixitup/docs/get-started/" + }, + "description": "A high-performance, dependency-free library for animated filtering, sorting and more", + "keywords": ["javascript", "animate", "filtering", "sorting"] +} \ No newline at end of file diff --git a/mixitup-3.3.1/demos/attribute-selectors/index.html b/mixitup-3.3.1/demos/attribute-selectors/index.html new file mode 100644 index 0000000..f5d73a0 --- /dev/null +++ b/mixitup-3.3.1/demos/attribute-selectors/index.html @@ -0,0 +1,50 @@ + + + + + + + + + MixItUp Demo - Querying via Attribute Selectors + + +
+ + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/attribute-selectors/style.css b/mixitup-3.3.1/demos/attribute-selectors/style.css new file mode 100644 index 0000000..075005c --- /dev/null +++ b/mixitup-3.3.1/demos/attribute-selectors/style.css @@ -0,0 +1,190 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter] + .control[data-sort] { + margin-left: .75rem; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Grid Items +---------------------------------------------------------------------- */ + +.item, +.gap { + display: inline-block; + vertical-align: top; +} + +.item { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.item:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.item.green { + color: #91e6c7; +} + +.item.pink { + color: #d595aa; +} + +.item.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.item, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .item, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .item, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .item, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/basic-ie-8/index.html b/mixitup-3.3.1/demos/basic-ie-8/index.html new file mode 100644 index 0000000..1c56ca8 --- /dev/null +++ b/mixitup-3.3.1/demos/basic-ie-8/index.html @@ -0,0 +1,46 @@ + + + + + + + + + MixItUp Demo - Basic (IE8 Compatible Layout) + + +
+ + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/basic-ie-8/style.css b/mixitup-3.3.1/demos/basic-ie-8/style.css new file mode 100644 index 0000000..e421567 --- /dev/null +++ b/mixitup-3.3.1/demos/basic-ie-8/style.css @@ -0,0 +1,122 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 16px; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + vertical-align: top; + padding: 10px; + font-size: 15px; + height: 35px; + min-width: 25px; + background: #444; + cursor: pointer; + color: white; + font-weight: 800; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.control[data-filter="all"] { + background: #fff; +} + +.control[data-filter=".green"] { + background: #91e6c7; +} + +.control[data-filter=".blue"] { + background: #5ecdde; +} + +.control[data-filter=".pink"] { + background: #d595aa; +} + +.control[data-filter="none"] { + background: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 16px; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: 8px solid transparent; + border-radius: 2px; + margin-bottom: 1.25%; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + border-top-color: #91e6c7; +} + +.mix.pink { + border-top-color: #d595aa; +} + +.mix.blue { + border-top-color: #5ecdde; +} + +.mix, +.gap { + width: 24%; +} \ No newline at end of file diff --git a/mixitup-3.3.1/demos/basic/index.html b/mixitup-3.3.1/demos/basic/index.html new file mode 100644 index 0000000..7a93271 --- /dev/null +++ b/mixitup-3.3.1/demos/basic/index.html @@ -0,0 +1,46 @@ + + + + + + + + + MixItUp Demo - Basic + + +
+ + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/basic/style.css b/mixitup-3.3.1/demos/basic/style.css new file mode 100644 index 0000000..eb08e2a --- /dev/null +++ b/mixitup-3.3.1/demos/basic/style.css @@ -0,0 +1,190 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter] + .control[data-sort] { + margin-left: .75rem; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/checkboxes-with-reset-checkbox/index.html b/mixitup-3.3.1/demos/checkboxes-with-reset-checkbox/index.html new file mode 100644 index 0000000..08db519 --- /dev/null +++ b/mixitup-3.3.1/demos/checkboxes-with-reset-checkbox/index.html @@ -0,0 +1,108 @@ + + + + + + + + + MixItUp Demo - Checkboxes with Reset Checkbox + + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/checkboxes-with-reset-checkbox/style.css b/mixitup-3.3.1/demos/checkboxes-with-reset-checkbox/style.css new file mode 100644 index 0000000..0883fda --- /dev/null +++ b/mixitup-3.3.1/demos/checkboxes-with-reset-checkbox/style.css @@ -0,0 +1,200 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.checkbox-group { + display: inline-block; + padding: .5rem; + background: #2a2a2a; + margin-right: .75rem; + vertical-align: top; +} + +.checkbox { + text-align: justify; +} + +.checkbox:after { + content: ''; + display: inline-block; + width: 100%; +} + +.checkbox-input, +.checkbox-label { + display: inline-block; +} + +.checkbox-label { + color: white; + font-family: 'helvetica-neue', arial, sans-serif; + font-size: .9rem; + margin-right: .5rem; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/checkboxes/index.html b/mixitup-3.3.1/demos/checkboxes/index.html new file mode 100644 index 0000000..52f799b --- /dev/null +++ b/mixitup-3.3.1/demos/checkboxes/index.html @@ -0,0 +1,86 @@ + + + + + + + + + MixItUp Demo - Checkboxes + + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/checkboxes/style.css b/mixitup-3.3.1/demos/checkboxes/style.css new file mode 100644 index 0000000..0883fda --- /dev/null +++ b/mixitup-3.3.1/demos/checkboxes/style.css @@ -0,0 +1,200 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.checkbox-group { + display: inline-block; + padding: .5rem; + background: #2a2a2a; + margin-right: .75rem; + vertical-align: top; +} + +.checkbox { + text-align: justify; +} + +.checkbox:after { + content: ''; + display: inline-block; + width: 100%; +} + +.checkbox-input, +.checkbox-label { + display: inline-block; +} + +.checkbox-label { + color: white; + font-family: 'helvetica-neue', arial, sans-serif; + font-size: .9rem; + margin-right: .5rem; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/dataset-empty-container/index.html b/mixitup-3.3.1/demos/dataset-empty-container/index.html new file mode 100644 index 0000000..c9aaa4f --- /dev/null +++ b/mixitup-3.3.1/demos/dataset-empty-container/index.html @@ -0,0 +1,226 @@ + + + + + + + + + MixItUp Demo - Dataset with an Empty Container + + +
+ + + + + + + + +
+ +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/dataset-empty-container/style.css b/mixitup-3.3.1/demos/dataset-empty-container/style.css new file mode 100644 index 0000000..67d44fa --- /dev/null +++ b/mixitup-3.3.1/demos/dataset-empty-container/style.css @@ -0,0 +1,199 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:not(.control-active):hover { + background: #3f3f3f; +} + +.control-filter:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control-sort:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control-sort[data-order="desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.control-active { + background: #393939; +} + +.control-filter.control-active:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control-filter + .control-sort { + margin-left: .75rem; +} + +.control-filter[data-color="green"] { + color: #91e6c7; +} + +.control-filter[data-color="blue"] { + color: #5ecdde; +} + +.control-filter[data-color="pink"] { + color: #d595aa; +} + +.control-filter[data-color="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.item, +.gap { + display: inline-block; + vertical-align: top; +} + +.item { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.item:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.item.green { + color: #91e6c7; +} + +.item.pink { + color: #d595aa; +} + +.item.blue { + color: #5ecdde; +} + +.item .published-date { + position: absolute; + top: 0; + left: 0; + padding: 1rem; + font-size: 1rem; + color: #333; + font-family: 'helvetica-neue', arial, sans-serif; + font-weight: 700; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.item, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .item, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .item, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .item, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} \ No newline at end of file diff --git a/mixitup-3.3.1/demos/dataset-pre-rendered-targets/index.html b/mixitup-3.3.1/demos/dataset-pre-rendered-targets/index.html new file mode 100644 index 0000000..9097f4d --- /dev/null +++ b/mixitup-3.3.1/demos/dataset-pre-rendered-targets/index.html @@ -0,0 +1,256 @@ + + + + + + + + + MixItUp Demo - Dataset with Pre-rendered Targets + + +
+ + + + + + + + +
+ +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/dataset-pre-rendered-targets/style.css b/mixitup-3.3.1/demos/dataset-pre-rendered-targets/style.css new file mode 100644 index 0000000..b88f764 --- /dev/null +++ b/mixitup-3.3.1/demos/dataset-pre-rendered-targets/style.css @@ -0,0 +1,201 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:not(.control-active):hover { + background: #3f3f3f; +} + +.control-filter:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control-sort:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control-sort[data-order="desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.control-active { + background: #393939; +} + +.control-filter.control-active:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control-filter + .control-sort { + margin-left: .75rem; +} + +.control-filter[data-color="green"] { + color: #91e6c7; +} + +.control-filter[data-color="blue"] { + color: #5ecdde; +} + +.control-filter[data-color="pink"] { + color: #d595aa; +} + +.control-filter[data-color="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.item, +.gap { + display: inline-block; + vertical-align: top; +} + +.item { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.item:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.item.green { + color: #91e6c7; +} + +.item.pink { + color: #d595aa; +} + +.item.blue { + color: #5ecdde; +} + +.item .published-date { + position: absolute; + top: 0; + left: 0; + padding: 1rem; + font-size: 1rem; + color: #333; + font-family: 'helvetica-neue', arial, sans-serif; + font-weight: 700; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.item, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .item, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .item, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .item, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/filtering-by-range/index.html b/mixitup-3.3.1/demos/filtering-by-range/index.html new file mode 100644 index 0000000..9cd4732 --- /dev/null +++ b/mixitup-3.3.1/demos/filtering-by-range/index.html @@ -0,0 +1,156 @@ + + + + + + + + + MixItUp Demo - Filtering by Range + + + + +
+ + + + + + + + + + + + +
+ + + +
+ +
+ + + +
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/filtering-by-range/style.css b/mixitup-3.3.1/demos/filtering-by-range/style.css new file mode 100644 index 0000000..88f7cde --- /dev/null +++ b/mixitup-3.3.1/demos/filtering-by-range/style.css @@ -0,0 +1,280 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter] + .control[data-sort] { + margin-left: .75rem; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +.range-slider { + margin: 0 1rem; + display: inline-block; + vertical-align: middle; + position: relative; +} + +.range-slider:last-child { + margin-left: 0; +} + +.range-slider::before, +.range-slider::after, +.range-slider-label { + font-family: 'helvetica-neue', arial, sans-serif; +} + +.range-slider::before, +.range-slider::after { + font-size: .7rem; + color: #aaa; + content: '0'; + position: absolute; + bottom: 0; + left: 0; + padding: 0 .2rem; +} + +.range-slider::after { + content: '10'; + left: auto; + right: 0; +} + +.range-slider-label { + display: block; + font-size: .8rem; + color: #ccc; + margin-bottom: .05rem; + font-weight: 700; +} + +.range-slider:last-child .range-slider-label { + text-align: right; +} + +.range-slider-input { + position: relative; + background: transparent; + -webkit-appearance: none; + margin-bottom: .75rem; + z-index: 1; +} + +.range-slider-input::-webkit-slider-runnable-track { + width: 300px; + height: 5px; + background: #888; + border: none; + border-radius: 3px; + transition: background 150ms; +} + +.range-slider-input::-webkit-slider-thumb { + -webkit-appearance: none; + border: none; + height: 16px; + width: 16px; + border-radius: 50%; + background: #5ecdde; + margin-top: -6px; +} + +.range-slider-input:focus { + outline: none; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; + font-family: 'helvetica-neue', arial, sans-serif; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +.mix[data-size]:after { + position: absolute; + content: attr(data-size); + font-size: 1rem; + font-weight: bold; + color: #aaa; + padding: 1rem; + width: 100%; + top: 0; + left: 0; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/filtering-by-text-input/index.html b/mixitup-3.3.1/demos/filtering-by-text-input/index.html new file mode 100644 index 0000000..7931bb2 --- /dev/null +++ b/mixitup-3.3.1/demos/filtering-by-text-input/index.html @@ -0,0 +1,107 @@ + + + + + + + + + MixItUp Demo - Filtering by Text Input + + +
+ + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/filtering-by-text-input/style.css b/mixitup-3.3.1/demos/filtering-by-text-input/style.css new file mode 100644 index 0000000..17ca3c0 --- /dev/null +++ b/mixitup-3.3.1/demos/filtering-by-text-input/style.css @@ -0,0 +1,202 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter] + .control[data-sort] { + margin-left: .75rem; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +.input { + display: inline-block; + font-size: 1rem; + padding: .75rem; + margin-left: .75rem; + border-radius: 2px; + border: 0 none; + background: white; + font-family: 'helvetica neue', arial, sans-serif; + vertical-align: top; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/filtering-by-url/index.html b/mixitup-3.3.1/demos/filtering-by-url/index.html new file mode 100644 index 0000000..e94fcff --- /dev/null +++ b/mixitup-3.3.1/demos/filtering-by-url/index.html @@ -0,0 +1,116 @@ + + + + + + + + + MixItUp Demo - Filtering by URL + + +
+ + + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/filtering-by-url/style.css b/mixitup-3.3.1/demos/filtering-by-url/style.css new file mode 100644 index 0000000..0cefdd8 --- /dev/null +++ b/mixitup-3.3.1/demos/filtering-by-url/style.css @@ -0,0 +1,170 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/grid-columns/index.html b/mixitup-3.3.1/demos/grid-columns/index.html new file mode 100644 index 0000000..803fa1c --- /dev/null +++ b/mixitup-3.3.1/demos/grid-columns/index.html @@ -0,0 +1,51 @@ + + + + + + + + + MixItUp Demo - Columns Grid + + +
+ + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/grid-columns/style.css b/mixitup-3.3.1/demos/grid-columns/style.css new file mode 100644 index 0000000..2e7ac54 --- /dev/null +++ b/mixitup-3.3.1/demos/grid-columns/style.css @@ -0,0 +1,214 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + vertical-align: top; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control.text { + width: auto; + height: auto; + padding: 0 1rem; + font-size: .9rem; + height: 2.7rem; + font-weight: 800; + color: white; + margin-left: .75rem; +} + +.control.text:after { + display: none; +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter] + .control[data-sort] { + margin-left: .75rem; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + + -webkit-column-count: 1; + -moz-column-count: 1; + column-count: 1; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix { + display: inline-block; + vertical-align: top; + width: 100%; + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; + + backface-visibility: hidden; /* prevents flicker in chrome */ + will-change: transform, opacity; /* prevents flicker in safari */ +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +.mix.pink:before { + padding-top: 75%; +} + +.mix.blue:before { + padding-top: 100%; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +@media screen and (min-width: 401px) { + .container { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .container { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .container { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .container { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } +} \ No newline at end of file diff --git a/mixitup-3.3.1/demos/grid-flex-box-matching-heights/index.html b/mixitup-3.3.1/demos/grid-flex-box-matching-heights/index.html new file mode 100644 index 0000000..0cb3c68 --- /dev/null +++ b/mixitup-3.3.1/demos/grid-flex-box-matching-heights/index.html @@ -0,0 +1,66 @@ + + + + + + + + + MixItUp Demo - Flex-box Grid with Matching Heights + + +
+ +
+ +
+
+

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore. Quis autem vel eum iure reprehenderit qui in ea voluptate velit similique sunt in culpa qui officia deserunt mollitia animi.

+
+ +
+

Similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum.

+
+ +
+

At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias.

+

+ +
+

Similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum.

+
+ +
+

At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias.

+

+ +
+

Similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum.

+
+ +
+

Magni dolores eos qui ratione voluptatem sequi nesciun.

+
+ +
+

Similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum.

+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/grid-flex-box-matching-heights/style.css b/mixitup-3.3.1/demos/grid-flex-box-matching-heights/style.css new file mode 100644 index 0000000..8648ac9 --- /dev/null +++ b/mixitup-3.3.1/demos/grid-flex-box-matching-heights/style.css @@ -0,0 +1,148 @@ +html, +body { + height: 100%; + background: #f2f2f2; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: antialiased; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + padding: .5rem; + background: #444; + cursor: pointer; + font-size: .9rem; + font-weight: 800; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.mixitup-control-active { + background: #393939; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: flex-start; + justify-content: space-between; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-flex; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; + color: transparent; + font-family: 'helvetica-neue', arial, sans-serif; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +.mix p { + padding: 1rem; + display: inline-block; + font-size: calc(1vw + .5rem); + color: #333; + line-height: 1.4; + font-weight: 300; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/grid-flex-box/index.html b/mixitup-3.3.1/demos/grid-flex-box/index.html new file mode 100644 index 0000000..3a70bb5 --- /dev/null +++ b/mixitup-3.3.1/demos/grid-flex-box/index.html @@ -0,0 +1,27 @@ + + + + + + + + + MixItUp Demo - Flex-box Grid + + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/grid-flex-box/style.css b/mixitup-3.3.1/demos/grid-flex-box/style.css new file mode 100644 index 0000000..e54b960 --- /dev/null +++ b/mixitup-3.3.1/demos/grid-flex-box/style.css @@ -0,0 +1,84 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: flex-start; + justify-content: space-between; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/grid-floats/index.html b/mixitup-3.3.1/demos/grid-floats/index.html new file mode 100644 index 0000000..8c39645 --- /dev/null +++ b/mixitup-3.3.1/demos/grid-floats/index.html @@ -0,0 +1,23 @@ + + + + + + + + + MixItUp Demo - Float-based Grid + + +
+
+
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/grid-floats/style.css b/mixitup-3.3.1/demos/grid-floats/style.css new file mode 100644 index 0000000..1bf98af --- /dev/null +++ b/mixitup-3.3.1/demos/grid-floats/style.css @@ -0,0 +1,73 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem .5rem; + overflow: hidden; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix { + float: left; + margin: 0 .5rem 1rem; + background: #fff; + border-radius: 2px; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix { + width: calc(50% - 1rem); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix { + width: calc(100%/3 - 1rem); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - 1rem); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - 1rem); + } +} + + diff --git a/mixitup-3.3.1/demos/grid-inline-block/index.html b/mixitup-3.3.1/demos/grid-inline-block/index.html new file mode 100644 index 0000000..9ce42b4 --- /dev/null +++ b/mixitup-3.3.1/demos/grid-inline-block/index.html @@ -0,0 +1,27 @@ + + + + + + + + + MixItUp Demo - Inline-block Grid + + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/grid-inline-block/style.css b/mixitup-3.3.1/demos/grid-inline-block/style.css new file mode 100644 index 0000000..59cfb74 --- /dev/null +++ b/mixitup-3.3.1/demos/grid-inline-block/style.css @@ -0,0 +1,87 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/index.html b/mixitup-3.3.1/demos/index.html new file mode 100644 index 0000000..44ad133 --- /dev/null +++ b/mixitup-3.3.1/demos/index.html @@ -0,0 +1,81 @@ + + + + MixItUp Demos + + +

MixItUp Demos

+ +

The following collection of demos have been designed to demonstrate MixItUp's core functionality. They are maintained as part of the MixItUp Github repository, and can be viewed at demos.kunkalabs.com/mixitup/.

+ +

Each demo is intended to be as simple and instructive as possible and therefore intentionally avoids "magic" such as SASS, ES6, modules, or external dependencies that may require compilation in order to be usable in the browser. As such, you may run and edit these demos using any basic static file webserver, online or offline.

+ +

We add new demos to this collection regularly, but please contact us if there's a particular piece of functionality you would like to see which is missing from this list, or if you come across an issue with an existing demo.

+ +

Basic Functionality

+ + + +

Filtering

+ + + +

Non-standard UI

+ + + +

Sorting

+ + + +

Insertion

+ + + +

Removal

+ + + +

Dataset

+ + + +

Grids

+ + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/insertion-non-target-elements/index.html b/mixitup-3.3.1/demos/insertion-non-target-elements/index.html new file mode 100644 index 0000000..b536b91 --- /dev/null +++ b/mixitup-3.3.1/demos/insertion-non-target-elements/index.html @@ -0,0 +1,42 @@ + + + + + + + + + MixItUp Demo - Insertion with Non-target Elements + + +
+ + +
+ +
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/insertion-non-target-elements/style.css b/mixitup-3.3.1/demos/insertion-non-target-elements/style.css new file mode 100644 index 0000000..eb24de7 --- /dev/null +++ b/mixitup-3.3.1/demos/insertion-non-target-elements/style.css @@ -0,0 +1,174 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Grid Elements +---------------------------------------------------------------------- */ + +.item, +.gap { + display: inline-block; + vertical-align: top; +} + +.item { + background: #fff; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.item:before { + content: ''; + display: inline-block; + vertical-align: middle; + padding-top: 100%; +} + +.button { + background: #ddd; + font-size: 4rem; + font-weight: bold; + text-align: center; + cursor: pointer; + transition: box-shadow 100ms; +} + +.button:hover { + box-shadow: inset 0 0 20px rgba(0,0,0, .1); +} + +.button:after { + display: inline-block; + content: '+'; + font-size: 4rem; + color: #bbb; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.item, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .item, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .item, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .item, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/loading-animation/index.html b/mixitup-3.3.1/demos/loading-animation/index.html new file mode 100644 index 0000000..8a90228 --- /dev/null +++ b/mixitup-3.3.1/demos/loading-animation/index.html @@ -0,0 +1,71 @@ + + + + + + + + + MixItUp Demo - Basic + + +
+ + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/loading-animation/style.css b/mixitup-3.3.1/demos/loading-animation/style.css new file mode 100644 index 0000000..dd9c77f --- /dev/null +++ b/mixitup-3.3.1/demos/loading-animation/style.css @@ -0,0 +1,198 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter] + .control[data-sort] { + margin-left: .75rem; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +.mix { + visibility: hidden; +} + +.mixitup-ready .mix { + visibility: visible; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/mixitup.min.js b/mixitup-3.3.1/demos/mixitup.min.js new file mode 100644 index 0000000..8562101 --- /dev/null +++ b/mixitup-3.3.1/demos/mixitup.min.js @@ -0,0 +1,18 @@ +/**! + * MixItUp v3.3.1 + * A high-performance, dependency-free library for animated filtering, sorting and more + * Build 94e0fbf6-cd0b-4987-b3c0-14b59b67b8a0 + * + * @copyright Copyright 2014-2018 KunkaLabs Limited. + * @author KunkaLabs Limited. + * @link https://www.kunkalabs.com/mixitup/ + * + * @license Commercial use requires a commercial license. + * https://www.kunkalabs.com/mixitup/licenses/ + * + * Non-commercial use permitted under same terms as CC BY-NC 3.0 license. + * http://creativecommons.org/licenses/by-nc/3.0/ + */ +!function(t){"use strict";var e=null,n=null;!function(){var e=["webkit","moz","o","ms"],n=t.document.createElement("div"),a=-1;for(a=0;a-1}}(t.Element.prototype),Object.keys||(Object.keys=function(){var t=Object.prototype.hasOwnProperty,e=!1,n=[],a=-1;return e=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=n.length,function(i){var o=[],r="",s=-1;if("object"!=typeof i&&("function"!=typeof i||null===i))throw new TypeError("Object.keys called on non-object");for(r in i)t.call(i,r)&&o.push(r);if(e)for(s=0;s>>0,0===i)return-1;if(e=0,arguments.length>1&&(e=Number(arguments[1]),e!==e?e=0:0!==e&&e!==1/0&&e!==-(1/0)&&(e=(e>0||-1)*Math.floor(Math.abs(e)))),e>=i)return-1;for(n=e>=0?e:Math.max(i-Math.abs(e),0);n0)||s);g++)r.id?d=r.id:(d="MixItUp"+n.randomHex(),r.id=d),e.instances[d]instanceof e.Mixer?(l=e.instances[d],(!i||i&&i.debug&&i.debug.showWarnings!==!1)&&console.warn(e.messages.warningFactoryPreexistingInstance())):(l=new e.Mixer,l.attach(r,u,d,i),e.instances[d]=l),c=new e.Facade(l),i&&i.debug&&i.debug.enable?h.push(l):h.push(c);return f=s?new e.Collection(h):h[0]},e.use=function(t){e.Base.prototype.callActions.call(e,"beforeUse",arguments),"function"==typeof t&&"mixitup-extension"===t.TYPE?"undefined"==typeof e.extensions[t.NAME]&&(t(e),e.extensions[t.NAME]=t):t.fn&&t.fn.jquery&&(e.libraries.$=t),e.Base.prototype.callActions.call(e,"afterUse",arguments)},e.instances={},e.extensions={},e.libraries={},n={hasClass:function(t,e){return!!t.className.match(new RegExp("(\\s|^)"+e+"(\\s|$)"))},addClass:function(t,e){this.hasClass(t,e)||(t.className+=t.className?" "+e:e)},removeClass:function(t,e){if(this.hasClass(t,e)){var n=new RegExp("(\\s|^)"+e+"(\\s|$)");t.className=t.className.replace(n," ").trim()}},extend:function(t,e,n,a){var i=[],o="",r=-1;n=n||!1,a=a||!1;try{if(Array.isArray(e))for(r=0;ru&&(u=f,l=c)}throw u>1&&(s=e.messages.errorConfigInvalidPropertySuggestion({probableMatch:l})),r=e.messages.errorConfigInvalidProperty({erroneous:o,suggestion:s}),new TypeError(r)}throw t},template:function(t){for(var e=/\${([\w]*)}/g,n={},a=null;a=e.exec(t);)n[a[1]]=new RegExp("\\${"+a[1]+"}","g");return function(e){var a="",i=t;e=e||{};for(a in n)i=i.replace(n[a],"undefined"!=typeof e[a]?e[a]:"");return i}},on:function(e,n,a,i){e&&(e.addEventListener?e.addEventListener(n,a,i):e.attachEvent&&(e["e"+n+a]=a,e[n+a]=function(){e["e"+n+a](t.event)},e.attachEvent("on"+n,e[n+a])))},off:function(t,e,n){t&&(t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent&&(t.detachEvent("on"+e,t[e+n]),t[e+n]=null))},getCustomEvent:function(e,n,a){var i=null;return a=a||t.document,"function"==typeof t.CustomEvent?i=new t.CustomEvent(e,{detail:n,bubbles:!0,cancelable:!0}):"function"==typeof a.createEvent?(i=a.createEvent("CustomEvent"),i.initCustomEvent(e,!0,!0,n)):(i=a.createEventObject(),i.type=e,i.returnValue=!1,i.cancelBubble=!1,i.detail=n),i},getOriginalEvent:function(t){return t.touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t},index:function(t,e){for(var n=0;null!==(t=t.previousElementSibling);)e&&!t.matches(e)||++n;return n},camelCase:function(t){return t.toLowerCase().replace(/([_-][a-z])/g,function(t){return t.toUpperCase().replace(/[_-]/,"")})},pascalCase:function(t){return(t=this.camelCase(t)).charAt(0).toUpperCase()+t.slice(1)},dashCase:function(t){return t.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()},isElement:function(e,n){return n=n||t.document,!!(t.HTMLElement&&e instanceof t.HTMLElement)||(!!(n.defaultView&&n.defaultView.HTMLElement&&e instanceof n.defaultView.HTMLElement)||null!==e&&1===e.nodeType&&"string"==typeof e.nodeName)},createElement:function(e,n){var a=null,i=null;for(n=n||t.document,a=n.createDocumentFragment(),i=n.createElement("div"),i.innerHTML=e.trim();i.firstChild;)a.appendChild(i.firstChild);return a},removeWhitespace:function(t){for(var e;t&&"#text"===t.nodeName;)e=t,t=t.previousSibling,e.parentElement&&e.parentElement.removeChild(e)},isEqualArray:function(t,e){var n=t.length;if(n!==e.length)return!1;for(;n--;)if(t[n]!==e[n])return!1;return!0},deepEquals:function(t,e){var n;if("object"==typeof t&&t&&"object"==typeof e&&e){if(Object.keys(t).length!==Object.keys(e).length)return!1;for(n in t)if(!e.hasOwnProperty(n)||!this.deepEquals(t[n],e[n]))return!1}else if(t!==e)return!1;return!0},arrayShuffle:function(t){for(var e=t.slice(),n=e.length,a=n,i=-1,o=[];a--;)i=~~(Math.random()*n),o=e[a],e[a]=e[i],e[i]=o;return e},arrayFromList:function(t){var e,n;try{return Array.prototype.slice.call(t)}catch(a){for(e=[],n=0;n "+n),o&&e.removeAttribute("id")),i},clean:function(t){var e=[],n=-1;for(n=0;ni)return!0}return!0},Deferred:function(){this.promise=null,this.resolve=null,this.reject=null,this.id=n.randomHex()},isEmptyObject:function(t){var e="";if("function"==typeof Object.keys)return 0===Object.keys(t).length;for(e in t)if(t.hasOwnProperty(e))return!1;return!0},getClassname:function(t,e,n){var a="";return a+=t.block,a.length&&(a+=t.delineatorElement),a+=t["element"+this.pascalCase(e)],n?(a.length&&(a+=t.delineatorModifier),a+=n):a},getProperty:function(t,e){var n=e.split("."),a=null,i="",o=0;if(!e)return t;for(a=function(t){return t?t[i]:null};o-1,e.callFilters("afterIsBound",n,arguments)},addBinding:function(t){var e=this;this.callActions("beforeAddBinding",arguments),e.isBound()||e.bound.push(t),this.callActions("afterAddBinding",arguments)},removeBinding:function(t){var n=this,a=-1;this.callActions("beforeRemoveBinding",arguments),(a=n.bound.indexOf(t))>-1&&n.bound.splice(a,1),n.bound.length<1&&(n.unbindClick(),a=e.controls.indexOf(n),e.controls.splice(a,1),"active"===n.status&&n.renderStatus(n.el,"inactive")),this.callActions("afterRemoveBinding",arguments)},bindClick:function(){var t=this;this.callActions("beforeBindClick",arguments),t.handler=function(e){t.handleClick(e)},n.on(t.el,"click",t.handler),this.callActions("afterBindClick",arguments)},unbindClick:function(){var t=this;this.callActions("beforeUnbindClick",arguments),n.off(t.el,"click",t.handler),t.handler=null,this.callActions("afterUnbindClick",arguments)},handleClick:function(t){var a=this,i=null,o=null,r=!1,s=void 0,l={},c=null,u=[],f=-1;if(this.callActions("beforeHandleClick",arguments),this.pending=0,o=a.bound[0],i=a.selector?n.closestParent(t.target,o.config.selectors.control+a.selector,!0,o.dom.document):a.el,!i)return void a.callActions("afterHandleClick",arguments);switch(a.type){case"filter":l.filter=a.filter||i.getAttribute("data-filter");break;case"sort":l.sort=a.sort||i.getAttribute("data-sort");break;case"multimix":l.filter=a.filter||i.getAttribute("data-filter"),l.sort=a.sort||i.getAttribute("data-sort");break;case"toggle":l.filter=a.filter||i.getAttribute("data-toggle"),r="live"===a.status?n.hasClass(i,a.classNames.active):"active"===a.status}for(f=0;f0||("live"===a.status?a.updateLive(t,n):(i.sort=a.sort,i.filter=a.filter,a.callFilters("actionsUpdate",i,arguments),a.parseStatusChange(a.el,t,i,n)),a.callActions("afterUpdate",arguments))},updateLive:function(t,n){var a=this,i=null,o=null,r=null,s=-1;if(a.callActions("beforeUpdateLive",arguments),a.el){for(i=a.el.querySelectorAll(a.selector),s=0;r=i[s];s++){switch(o=new e.CommandMultimix,a.type){case"filter":o.filter=r.getAttribute("data-filter");break;case"sort":o.sort=r.getAttribute("data-sort");break;case"multimix":o.filter=r.getAttribute("data-filter"),o.sort=r.getAttribute("data-sort");break;case"toggle":o.filter=r.getAttribute("data-toggle")}o=a.callFilters("actionsUpdateLive",o,arguments),a.parseStatusChange(r,t,o,n)}a.callActions("afterUpdateLive",arguments)}},parseStatusChange:function(t,e,n,a){var i=this,o="",r="",s=-1;switch(i.callActions("beforeParseStatusChange",arguments),i.type){case"filter":e.filter===n.filter?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"multimix":e.sort===n.sort&&e.filter===n.filter?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"sort":e.sort.match(/:asc/g)&&(o=e.sort.replace(/:asc/g,"")),e.sort===n.sort||o===n.sort?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"toggle":for(a.length<1&&i.renderStatus(t,"inactive"),e.filter===n.filter&&i.renderStatus(t,"active"),s=0;s-1)throw new Error(e.messages.errorInsertPreexistingElement());c.style.display="none",s.appendChild(c),s.appendChild(i.dom.document.createTextNode(" ")),n.isElement(c,i.dom.document)&&c.matches(i.config.selectors.target)&&(l=new e.Target,l.init(c,i),l.isInDom=!0,i.targets.splice(r,0,l),r++)}i.dom.parent.insertBefore(s,o)}a.startOrder=i.origOrder=i.targets,i.callActions("afterInsertTargets",arguments)},getNextSibling:function(t,e,n){var a=this,i=null;return t=Math.max(t,0),e&&"before"===n?i=e:e&&"after"===n?i=e.nextElementSibling||null:a.targets.length>0&&"undefined"!=typeof t?i=t0&&(a.config.layout.siblingAfter?i=a.config.layout.siblingAfter:a.config.layout.siblingBefore?i=a.config.layout.siblingBefore.nextElementSibling:a.dom.parent.children[0]),a.callFilters("elementGetNextSibling",i,arguments)},filterOperation:function(t){var e=this,n=!1,a=-1,i="",o=null,r=-1;for(e.callActions("beforeFilterOperation",arguments),i=t.newFilter.action,r=0;o=t.newOrder[r];r++)n=t.newFilter.collection?t.newFilter.collection.indexOf(o.dom.el)>-1:""!==t.newFilter.selector&&o.dom.el.matches(t.newFilter.selector),e.evaluateHideShow(n,o,i,t);if(t.toRemove.length)for(r=0;o=t.show[r];r++)t.toRemove.indexOf(o)>-1&&(t.show.splice(r,1),(a=t.toShow.indexOf(o))>-1&&t.toShow.splice(a,1),t.toHide.push(o),t.hide.push(o),r--);t.matching=t.show.slice(),0===t.show.length&&""!==t.newFilter.selector&&0!==e.targets.length&&(t.hasFailed=!0),e.callActions("afterFilterOperation",arguments)},evaluateHideShow:function(t,e,n,a){var i=this,o=!1,r=Array.prototype.slice.call(arguments,1);o=i.callFilters("testResultEvaluateHideShow",t,r),i.callActions("beforeEvaluateHideShow",arguments),o===!0&&"show"===n||o===!1&&"hide"===n?(a.show.push(e),!e.isShown&&a.toShow.push(e)):(a.hide.push(e),e.isShown&&a.toHide.push(e)),i.callActions("afterEvaluateHideShow",arguments)},sortOperation:function(t){var a=this,i=[],o=null,r=null,s=-1;if(a.callActions("beforeSortOperation",arguments),t.startOrder=a.targets,t.newSort.collection){for(i=[],s=0;r=t.newSort.collection[s];s++){if(a.dom.targets.indexOf(r)<0)throw new Error(e.messages.errorSortNonExistentElement());o=new e.Target,o.init(r,a),o.isInDom=!0,i.push(o)}t.newOrder=i}else"random"===t.newSort.order?t.newOrder=n.arrayShuffle(t.startOrder):""===t.newSort.attribute?(t.newOrder=a.origOrder.slice(),"desc"===t.newSort.order&&t.newOrder.reverse()):(t.newOrder=t.startOrder.slice(),t.newOrder.sort(function(e,n){return a.compare(e,n,t.newSort)}));n.isEqualArray(t.newOrder,t.startOrder)&&(t.willSort=!1),a.callActions("afterSortOperation",arguments)},compare:function(t,e,n){var a=this,i=n.order,o=a.getAttributeValue(t,n.attribute),r=a.getAttributeValue(e,n.attribute);return isNaN(1*o)||isNaN(1*r)?(o=o.toLowerCase(),r=r.toLowerCase()):(o=1*o,r=1*r),or?"asc"===i?1:-1:o===r&&n.next?a.compare(t,e,n.next):0},getAttributeValue:function(t,n){var a=this,i="";return i=t.dom.el.getAttribute("data-"+n),null===i&&a.config.debug.showWarnings&&console.warn(e.messages.warningInconsistentSortingAttributes({attribute:"data-"+n})),a.callFilters("valueGetAttributeValue",i||0,arguments)},printSort:function(e,a){var i=this,o=e?a.newOrder:a.startOrder,r=e?a.startOrder:a.newOrder,s=o.length?o[o.length-1].dom.el.nextElementSibling:null,l=t.document.createDocumentFragment(),c=null,u=null,f=null,h=-1;for(i.callActions("beforePrintSort",arguments),h=0;u=o[h];h++)f=u.dom.el,"absolute"!==f.style.position&&(n.removeWhitespace(f.previousSibling),f.parentElement.removeChild(f));for(c=s?s.previousSibling:i.dom.parent.lastChild,c&&"#text"===c.nodeName&&n.removeWhitespace(c),h=0;u=r[h];h++)f=u.dom.el,n.isElement(l.lastChild)&&l.appendChild(t.document.createTextNode(" ")),l.appendChild(f);i.dom.parent.firstChild&&i.dom.parent.firstChild!==s&&l.insertBefore(t.document.createTextNode(" "),l.childNodes[0]),s?(l.appendChild(t.document.createTextNode(" ")),i.dom.parent.insertBefore(l,s)):i.dom.parent.appendChild(l),i.callActions("afterPrintSort",arguments)},parseSortString:function(t,a){var i=this,o=t.split(" "),r=a,s=[],l=-1;for(l=0;l-1&&(c=n.substring(l),u=s.exec(c),f=u[1]),t){case"fade":a.opacity=f?parseFloat(f):0;break;case"stagger":r.staggerDuration=f?parseFloat(f):100;break;default:if(o&&r.config.animation.reverseOut&&"scale"!==t?a[t].value=(f?parseFloat(f):e.transformDefaults[t].value)*-1:a[t].value=f?parseFloat(f):e.transformDefaults[t].value,f){for(m=0;d=h[m];m++)if(f.indexOf(d)>-1){a[t].unit=d;break}}else a[t].unit=e.transformDefaults[t].unit;i.push(t+"("+a[t].value+a[t].unit+")")}r.callActions("afterParseEffect",arguments)},buildState:function(t){var n=this,a=new e.State,i=null,o=-1;for(n.callActions("beforeBuildState",arguments),o=0;i=n.targets[o];o++)(!t.toRemove.length||t.toRemove.indexOf(i)<0)&&a.targets.push(i.dom.el);for(o=0;i=t.matching[o];o++)a.matching.push(i.dom.el);for(o=0;i=t.show[o];o++)a.show.push(i.dom.el);for(o=0;i=t.hide[o];o++)(!t.toRemove.length||t.toRemove.indexOf(i)<0)&&a.hide.push(i.dom.el);return a.id=n.id,a.container=n.dom.container,a.activeFilter=t.newFilter,a.activeSort=t.newSort,a.activeDataset=t.newDataset,a.activeContainerClassName=t.newContainerClassName,a.hasFailed=t.hasFailed,a.totalTargets=n.targets.length,a.totalShow=t.show.length,a.totalHide=t.hide.length,a.totalMatching=t.matching.length,a.triggerElement=t.triggerElement,n.callFilters("stateBuildState",a,arguments)},goMix:function(a,i){var o=this,r=null;return o.callActions("beforeGoMix",arguments),o.config.animation.duration&&o.config.animation.effects&&n.isVisible(o.dom.container)||(a=!1),i.toShow.length||i.toHide.length||i.willSort||i.willChangeLayout||(a=!1),i.startState.show.length||i.show.length||(a=!1),e.events.fire("mixStart",o.dom.container,{state:i.startState,futureState:i.newState,instance:o},o.dom.document),"function"==typeof o.config.callbacks.onMixStart&&o.config.callbacks.onMixStart.call(o.dom.container,i.startState,i.newState,o),n.removeClass(o.dom.container,n.getClassname(o.config.classNames,"container",o.config.classNames.modifierFailed)),r=o.userDeferred?o.userDeferred:o.userDeferred=n.defer(e.libraries),o.isBusy=!0,a&&e.features.has.transitions?(t.pageYOffset!==i.docState.scrollTop&&t.scrollTo(i.docState.scrollLeft,i.docState.scrollTop),o.config.animation.applyPerspective&&(o.dom.parent.style[e.features.perspectiveProp]=o.config.animation.perspectiveDistance,o.dom.parent.style[e.features.perspectiveOriginProp]=o.config.animation.perspectiveOrigin),o.config.animation.animateResizeContainer&&i.startHeight!==i.newHeight&&i.viewportDeltaY!==i.startHeight-i.newHeight&&(o.dom.parent.style.height=i.startHeight+"px"),o.config.animation.animateResizeContainer&&i.startWidth!==i.newWidth&&i.viewportDeltaX!==i.startWidth-i.newWidth&&(o.dom.parent.style.width=i.startWidth+"px"),i.startHeight===i.newHeight&&(o.dom.parent.style.height=i.startHeight+"px"),i.startWidth===i.newWidth&&(o.dom.parent.style.width=i.startWidth+"px"),i.startHeight===i.newHeight&&i.startWidth===i.newWidth&&(o.dom.parent.style.overflow="hidden"),requestAnimationFrame(function(){o.moveTargets(i)}),o.callFilters("promiseGoMix",r.promise,arguments)):(o.config.debug.fauxAsync?setTimeout(function(){o.cleanUp(i)},o.config.animation.duration):o.cleanUp(i),o.callFilters("promiseGoMix",r.promise,arguments))},getStartMixData:function(n){var a=this,i=t.getComputedStyle(a.dom.parent),o=a.dom.parent.getBoundingClientRect(),r=null,s={},l=-1,c=i[e.features.boxSizingProp];for(a.incPadding="border-box"===c,a.callActions("beforeGetStartMixData",arguments),l=0;r=n.show[l];l++)s=r.getPosData(),n.showPosData[l]={startPosData:s};for(l=0;r=n.toHide[l];l++)s=r.getPosData(),n.toHidePosData[l]={startPosData:s};n.startX=o.left,n.startY=o.top,n.startHeight=a.incPadding?o.height:o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderTop)-parseFloat(i.borderBottom),n.startWidth=a.incPadding?o.width:o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderLeft)-parseFloat(i.borderRight),a.callActions("afterGetStartMixData",arguments)},setInter:function(t){var e=this,a=null,i=-1;for(e.callActions("beforeSetInter",arguments),e.config.animation.clampHeight&&(e.dom.parent.style.height=t.startHeight+"px",e.dom.parent.style.overflow="hidden"),e.config.animation.clampWidth&&(e.dom.parent.style.width=t.startWidth+"px",e.dom.parent.style.overflow="hidden"),i=0;a=t.toShow[i];i++)a.show();t.willChangeLayout&&(n.removeClass(e.dom.container,t.startContainerClassName),n.addClass(e.dom.container,t.newContainerClassName)),e.callActions("afterSetInter",arguments)},getInterMixData:function(t){var e=this,n=null,a=-1;for(e.callActions("beforeGetInterMixData",arguments),a=0;n=t.show[a];a++)t.showPosData[a].interPosData=n.getPosData();for(a=0;n=t.toHide[a];a++)t.toHidePosData[a].interPosData=n.getPosData();e.callActions("afterGetInterMixData",arguments)},setFinal:function(t){var e=this,n=null,a=-1;for(e.callActions("beforeSetFinal",arguments),t.willSort&&e.printSort(!1,t),a=0;n=t.toHide[a];a++)n.hide();e.callActions("afterSetFinal",arguments)},getFinalMixData:function(e){var a=this,i=null,o=null,r=null,s=-1;for(a.callActions("beforeGetFinalMixData",arguments),s=0;r=e.show[s];s++)e.showPosData[s].finalPosData=r.getPosData();for(s=0;r=e.toHide[s];s++)e.toHidePosData[s].finalPosData=r.getPosData();for((a.config.animation.clampHeight||a.config.animation.clampWidth)&&(a.dom.parent.style.height=a.dom.parent.style.width=a.dom.parent.style.overflow=""),a.incPadding||(i=t.getComputedStyle(a.dom.parent)),o=a.dom.parent.getBoundingClientRect(),e.newX=o.left,e.newY=o.top,e.newHeight=a.incPadding?o.height:o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderTop)-parseFloat(i.borderBottom),e.newWidth=a.incPadding?o.width:o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderLeft)-parseFloat(i.borderRight),e.viewportDeltaX=e.docState.viewportWidth-this.dom.document.documentElement.clientWidth,e.viewportDeltaY=e.docState.viewportHeight-this.dom.document.documentElement.clientHeight,e.willSort&&a.printSort(!0,e),s=0;r=e.toShow[s];s++)r.hide();for(s=0;r=e.toHide[s];s++)r.show();e.willChangeLayout&&(n.removeClass(a.dom.container,e.newContainerClassName),n.addClass(a.dom.container,a.config.layout.containerClassName)),a.callActions("afterGetFinalMixData",arguments)},getTweenData:function(t){var n=this,a=null,i=null,o=Object.getOwnPropertyNames(n.effectsIn),r="",s=null,l=-1,c=-1,u=-1,f=-1;for(n.callActions("beforeGetTweenData",arguments),u=0;a=t.show[u];u++)for(i=t.showPosData[u],i.posIn=new e.StyleData,i.posOut=new e.StyleData,i.tweenData=new e.StyleData,a.isShown?(i.posIn.x=i.startPosData.x-i.interPosData.x,i.posIn.y=i.startPosData.y-i.interPosData.y):i.posIn.x=i.posIn.y=0,i.posOut.x=i.finalPosData.x-i.interPosData.x,i.posOut.y=i.finalPosData.y-i.interPosData.y,i.posIn.opacity=a.isShown?1:n.effectsIn.opacity,i.posOut.opacity=1,i.tweenData.opacity=i.posOut.opacity-i.posIn.opacity,a.isShown||n.config.animation.nudge||(i.posIn.x=i.posOut.x,i.posIn.y=i.posOut.y),i.tweenData.x=i.posOut.x-i.posIn.x,i.tweenData.y=i.posOut.y-i.posIn.y,n.config.animation.animateResizeTargets&&(i.posIn.width=i.startPosData.width,i.posIn.height=i.startPosData.height,l=(i.startPosData.width||i.finalPosData.width)-i.interPosData.width,i.posIn.marginRight=i.startPosData.marginRight-l,c=(i.startPosData.height||i.finalPosData.height)-i.interPosData.height,i.posIn.marginBottom=i.startPosData.marginBottom-c,i.posOut.width=i.finalPosData.width,i.posOut.height=i.finalPosData.height,l=(i.finalPosData.width||i.startPosData.width)-i.interPosData.width,i.posOut.marginRight=i.finalPosData.marginRight-l,c=(i.finalPosData.height||i.startPosData.height)-i.interPosData.height,i.posOut.marginBottom=i.finalPosData.marginBottom-c,i.tweenData.width=i.posOut.width-i.posIn.width,i.tweenData.height=i.posOut.height-i.posIn.height,i.tweenData.marginRight=i.posOut.marginRight-i.posIn.marginRight,i.tweenData.marginBottom=i.posOut.marginBottom-i.posIn.marginBottom),f=0;r=o[f];f++)s=n.effectsIn[r],s instanceof e.TransformData&&s.value&&(i.posIn[r].value=s.value,i.posOut[r].value=0,i.tweenData[r].value=i.posOut[r].value-i.posIn[r].value,i.posIn[r].unit=i.posOut[r].unit=i.tweenData[r].unit=s.unit);for(u=0;a=t.toHide[u];u++)for(i=t.toHidePosData[u],i.posIn=new e.StyleData,i.posOut=new e.StyleData,i.tweenData=new e.StyleData,i.posIn.x=a.isShown?i.startPosData.x-i.interPosData.x:0,i.posIn.y=a.isShown?i.startPosData.y-i.interPosData.y:0,i.posOut.x=n.config.animation.nudge?0:i.posIn.x,i.posOut.y=n.config.animation.nudge?0:i.posIn.y,i.tweenData.x=i.posOut.x-i.posIn.x,i.tweenData.y=i.posOut.y-i.posIn.y,n.config.animation.animateResizeTargets&&(i.posIn.width=i.startPosData.width,i.posIn.height=i.startPosData.height,l=i.startPosData.width-i.interPosData.width,i.posIn.marginRight=i.startPosData.marginRight-l,c=i.startPosData.height-i.interPosData.height,i.posIn.marginBottom=i.startPosData.marginBottom-c),i.posIn.opacity=1,i.posOut.opacity=n.effectsOut.opacity,i.tweenData.opacity=i.posOut.opacity-i.posIn.opacity,f=0;r=o[f];f++)s=n.effectsOut[r],s instanceof e.TransformData&&s.value&&(i.posIn[r].value=0,i.posOut[r].value=s.value,i.tweenData[r].value=i.posOut[r].value-i.posIn[r].value,i.posIn[r].unit=i.posOut[r].unit=i.tweenData[r].unit=s.unit);n.callActions("afterGetTweenData",arguments)},moveTargets:function(t){var a=this,i=null,o=null,r=null,s="",l=!1,c=-1,u=-1,f=a.checkProgress.bind(a);for(a.callActions("beforeMoveTargets",arguments),u=0;i=t.show[u];u++)o=new e.IMoveData,r=t.showPosData[u],s=i.isShown?"none":"show",l=a.willTransition(s,t.hasEffect,r.posIn,r.posOut),l&&c++,i.show(),o.posIn=r.posIn,o.posOut=r.posOut,o.statusChange=s,o.staggerIndex=c,o.operation=t,o.callback=l?f:null,i.move(o);for(u=0;i=t.toHide[u];u++)r=t.toHidePosData[u],o=new e.IMoveData,s="hide",l=a.willTransition(s,r.posIn,r.posOut),o.posIn=r.posIn,o.posOut=r.posOut,o.statusChange=s,o.staggerIndex=u,o.operation=t,o.callback=l?f:null,i.move(o);a.config.animation.animateResizeContainer&&(a.dom.parent.style[e.features.transitionProp]="height "+a.config.animation.duration+"ms ease, width "+a.config.animation.duration+"ms ease ",requestAnimationFrame(function(){t.startHeight!==t.newHeight&&t.viewportDeltaY!==t.startHeight-t.newHeight&&(a.dom.parent.style.height=t.newHeight+"px"),t.startWidth!==t.newWidth&&t.viewportDeltaX!==t.startWidth-t.newWidth&&(a.dom.parent.style.width=t.newWidth+"px")})),t.willChangeLayout&&(n.removeClass(a.dom.container,a.config.layout.ContainerClassName),n.addClass(a.dom.container,t.newContainerClassName)),a.callActions("afterMoveTargets",arguments)},hasEffect:function(){var t=this,e=["scale","translateX","translateY","translateZ","rotateX","rotateY","rotateZ"],n="",a=null,i=!1,o=-1,r=-1;if(1!==t.effectsIn.opacity)return t.callFilters("resultHasEffect",!0,arguments);for(r=0;n=e[r];r++)if(a=t.effectsIn[n],o="undefined"!==a.value?a.value:a,0!==o){i=!0;break}return t.callFilters("resultHasEffect",i,arguments)},willTransition:function(t,e,a,i){var o=this,r=!1;return r=!!n.isVisible(o.dom.container)&&(!!("none"!==t&&e||a.x!==i.x||a.y!==i.y)||!!o.config.animation.animateResizeTargets&&(a.width!==i.width||a.height!==i.height||a.marginRight!==i.marginRight||a.marginTop!==i.marginTop)),o.callFilters("resultWillTransition",r,arguments)},checkProgress:function(t){var e=this;e.targetsDone++,e.targetsBound===e.targetsDone&&e.cleanUp(t)},cleanUp:function(t){var a=this,i=null,o=null,r=null,s=null,l=-1;for(a.callActions("beforeCleanUp",arguments),a.targetsMoved=a.targetsImmovable=a.targetsBound=a.targetsDone=0,l=0;i=t.show[l];l++)i.cleanUp(),i.show();for(l=0;i=t.toHide[l];l++)i.cleanUp(),i.hide();if(t.willSort&&a.printSort(!1,t),a.dom.parent.style[e.features.transitionProp]=a.dom.parent.style.height=a.dom.parent.style.width=a.dom.parent.style.overflow=a.dom.parent.style[e.features.perspectiveProp]=a.dom.parent.style[e.features.perspectiveOriginProp]="",t.willChangeLayout&&(n.removeClass(a.dom.container,t.startContainerClassName),n.addClass(a.dom.container,t.newContainerClassName)),t.toRemove.length){for(l=0;i=a.targets[l];l++)t.toRemove.indexOf(i)>-1&&((o=i.dom.el.previousSibling)&&"#text"===o.nodeName&&(r=i.dom.el.nextSibling)&&"#text"===r.nodeName&&n.removeWhitespace(o),t.willSort||a.dom.parent.removeChild(i.dom.el),a.targets.splice(l,1),i.isInDom=!1,l--);a.origOrder=a.targets}t.willSort&&(a.targets=t.newOrder),a.state=t.newState,a.lastOperation=t,a.dom.targets=a.state.targets,e.events.fire("mixEnd",a.dom.container,{state:a.state,instance:a},a.dom.document),"function"==typeof a.config.callbacks.onMixEnd&&a.config.callbacks.onMixEnd.call(a.dom.container,a.state,a),t.hasFailed&&(e.events.fire("mixFail",a.dom.container,{state:a.state,instance:a},a.dom.document),"function"==typeof a.config.callbacks.onMixFail&&a.config.callbacks.onMixFail.call(a.dom.container,a.state,a),n.addClass(a.dom.container,n.getClassname(a.config.classNames,"container",a.config.classNames.modifierFailed))),"function"==typeof a.userCallback&&a.userCallback.call(a.dom.container,a.state,a),"function"==typeof a.userDeferred.resolve&&a.userDeferred.resolve(a.state),a.userCallback=null,a.userDeferred=null,a.lastClicked=null,a.isToggling=!1,a.isBusy=!1,a.queue.length&&(a.callActions("beforeReadQueueCleanUp",arguments),s=a.queue.shift(),a.userDeferred=s.deferred,a.isToggling=s.isToggling,a.lastClicked=s.triggerElement,s.instruction.command instanceof e.CommandMultimix?a.multimix.apply(a,s.args):a.dataset.apply(a,s.args)),a.callActions("afterCleanUp",arguments)},parseMultimixArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandMultimix,r=0;r-1?i.command.position=o:"string"==typeof o?i.command.collection=n.arrayFromList(n.createElement(o).childNodes):"object"==typeof o&&n.isElement(o,a.dom.document)?i.command.collection.length?i.command.sibling=o:i.command.collection=[o]:"object"==typeof o&&o.length?i.command.collection.length?i.command.sibling=o[0]:i.command.collection=o:"object"==typeof o&&o.childNodes&&o.childNodes.length?i.command.collection.length?i.command.sibling=o.childNodes[0]:i.command.collection=n.arrayFromList(o.childNodes):"object"==typeof o?n.extend(i.command,o):"boolean"==typeof o?i.animate=o:"function"==typeof o&&(i.callback=o));if(i.command.index&&i.command.sibling)throw new Error(e.messages.errorInsertInvalidArguments());return!i.command.collection.length&&a.config.debug.showWarnings&&console.warn(e.messages.warningInsertNoElements()),i=a.callFilters("instructionParseInsertArgs",i,arguments),n.freeze(i),i},parseRemoveArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=null,s=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandRemove,s=0;s-1&&i.command.targets.push(o);return!i.command.targets.length&&a.config.debug.showWarnings&&console.warn(e.messages.warningRemoveNoElements()),n.freeze(i),i},parseDatasetArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandDataset,r=0;r-1&&t.toggleArray.splice(a,1),i=t.getToggleSelector(),t.multimix({filter:i},e.animate,e.callback)},sort:function(){var t=this,e=t.parseSortArgs(arguments);return t.multimix({sort:e.command},e.animate,e.callback)},changeLayout:function(){var t=this,e=t.parseChangeLayoutArgs(arguments);return t.multimix({changeLayout:e.command},e.animate,e.callback)},dataset:function(){var t=this,n=t.parseDatasetArgs(arguments),a=null,i=null,o=!1;return t.callActions("beforeDataset",arguments),t.isBusy?(i=new e.QueueItem,i.args=arguments,i.instruction=n,t.queueMix(i)):(n.callback&&(t.userCallback=n.callback),o=n.animate^t.config.animation.enable?n.animate:t.config.animation.enable,a=t.getDataOperation(n.command.dataset),t.goMix(o,a))},multimix:function(){var t=this,n=null,a=!1,i=null,o=t.parseMultimixArgs(arguments);return t.callActions("beforeMultimix",arguments),t.isBusy?(i=new e.QueueItem,i.args=arguments,i.instruction=o,i.triggerElement=t.lastClicked,i.isToggling=t.isToggling,t.queueMix(i)):(n=t.getOperation(o.command),t.config.controls.enable&&(o.command.filter&&!t.isToggling&&(t.toggleArray.length=0,t.buildToggleArray(n.command)),t.queue.length<1&&t.updateControls(n.command)),o.callback&&(t.userCallback=o.callback),a=o.animate^t.config.animation.enable?o.animate:t.config.animation.enable,t.callFilters("operationMultimix",n,arguments),t.goMix(a,n))},getOperation:function(t){var a=this,i=t.sort,o=t.filter,r=t.changeLayout,s=t.remove,l=t.insert,c=new e.Operation;return c=a.callFilters("operationUnmappedGetOperation",c,arguments),c.id=n.randomHex(),c.command=t,c.startState=a.state,c.triggerElement=a.lastClicked,a.isBusy?(a.config.debug.showWarnings&&console.warn(e.messages.warningGetOperationInstanceBusy()),null):(l&&a.insertTargets(l,c),s&&(c.toRemove=s.targets),c.startSort=c.newSort=c.startState.activeSort,c.startOrder=c.newOrder=a.targets,i&&(c.startSort=c.startState.activeSort,c.newSort=i,c.willSort=a.willSort(i,c.startState.activeSort),c.willSort&&a.sortOperation(c)),c.startFilter=c.startState.activeFilter,o?c.newFilter=o:c.newFilter=n.extend(new e.CommandFilter,c.startFilter),"all"===c.newFilter.selector?c.newFilter.selector=a.config.selectors.target:"none"===c.newFilter.selector&&(c.newFilter.selector=""),a.filterOperation(c),c.startContainerClassName=c.startState.activeContainerClassName,r?(c.newContainerClassName=r.containerClassName,c.newContainerClassName!==c.startContainerClassName&&(c.willChangeLayout=!0)):c.newContainerClassName=c.startContainerClassName,a.config.animation.enable&&(a.getStartMixData(c),a.setInter(c),c.docState=n.getDocumentState(a.dom.document),a.getInterMixData(c),a.setFinal(c),a.getFinalMixData(c),a.parseEffects(),c.hasEffect=a.hasEffect(),a.getTweenData(c)),c.willSort&&(a.targets=c.newOrder),c.newState=a.buildState(c),a.callFilters("operationMappedGetOperation",c,arguments))},tween:function(t,e){var n=null,a=null,i=-1,o=-1;for(e=Math.min(e,1),e=Math.max(e,0),o=0;n=t.show[o];o++)a=t.showPosData[o],n.applyTween(a,e);for(o=0;n=t.hide[o];o++)n.isShown&&n.hide(),(i=t.toHide.indexOf(n))>-1&&(a=t.toHidePosData[i],n.isShown||n.show(),n.applyTween(a,e))},insert:function(){var t=this,e=t.parseInsertArgs(arguments);return t.multimix({insert:e.command},e.animate,e.callback)},insertBefore:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(e.command.collection,"before",e.command.sibling,e.animate,e.callback)},insertAfter:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(e.command.collection,"after",e.command.sibling,e.animate,e.callback)},prepend:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(0,e.command.collection,e.animate,e.callback)},append:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(t.state.totalTargets,e.command.collection,e.animate,e.callback)},remove:function(){var t=this,e=t.parseRemoveArgs(arguments);return t.multimix({remove:e.command},e.animate,e.callback)},getConfig:function(t){var e=this,a=null;return a=t?n.getProperty(e.config,t):e.config,e.callFilters("valueGetConfig",a,arguments)},configure:function(t){var e=this;e.callActions("beforeConfigure",arguments),n.extend(e.config,t,!0,!0),e.callActions("afterConfigure",arguments)},getState:function(){var t=this,a=null;return a=new e.State,n.extend(a,t.state),n.freeze(a),t.callFilters("stateGetState",a,arguments)},forceRefresh:function(){var t=this;t.indexTargets()},forceRender:function(){var t=this,e=null,n=null,a="";for(a in t.cache)e=t.cache[a],n=e.render(e.data),n!==e.dom.el&&(e.isInDom&&(e.unbindEvents(),t.dom.parent.replaceChild(n,e.dom.el)),e.isShown||(n.style.display="none"),e.dom.el=n,e.isInDom&&e.bindEvents());t.state=t.buildState(t.lastOperation)},destroy:function(t){var n=this,a=null,i=null,o=0;for(n.callActions("beforeDestroy",arguments),o=0;a=n.controls[o];o++)a.removeBinding(n);for(o=0;i=n.targets[o];o++)t&&i.show(),i.unbindEvents();n.dom.container.id.match(/^MixItUp/)&&n.dom.container.removeAttribute("id"),delete e.instances[n.id],n.callActions("afterDestroy",arguments)}}),e.IMoveData=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.posIn=null,this.posOut=null,this.operation=null,this.callback=null,this.statusChange="",this.duration=-1,this.staggerIndex=-1,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.IMoveData),e.IMoveData.prototype=Object.create(e.Base.prototype),e.IMoveData.prototype.constructor=e.IMoveData,e.TargetDom=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.el=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.TargetDom),e.TargetDom.prototype=Object.create(e.Base.prototype),e.TargetDom.prototype.constructor=e.TargetDom,e.Target=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.sortString="",this.mixer=null,this.callback=null,this.isShown=!1,this.isBound=!1,this.isExcluded=!1,this.isInDom=!1,this.handler=null,this.operation=null,this.data=null,this.dom=new e.TargetDom,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.Target),e.Target.prototype=Object.create(e.Base.prototype),n.extend(e.Target.prototype,{constructor:e.Target,init:function(t,n,a){var i=this,o="";if(i.callActions("beforeInit",arguments),i.mixer=n,t||(t=i.render(a)),i.cacheDom(t),i.bindEvents(),"none"!==i.dom.el.style.display&&(i.isShown=!0),a&&n.config.data.uidKey){if("undefined"==typeof(o=a[n.config.data.uidKey])||o.toString().length<1)throw new TypeError(e.messages.errorDatasetInvalidUidKey({uidKey:n.config.data.uidKey}));i.id=o,i.data=a,n.cache[o]=i}i.callActions("afterInit",arguments)},render:function(t){var a=this,i=null,o=null,r=null,s="";if(a.callActions("beforeRender",arguments),i=a.callFilters("renderRender",a.mixer.config.render.target,arguments),"function"!=typeof i)throw new TypeError(e.messages.errorDatasetRendererNotSet());return s=i(t),s&&"object"==typeof s&&n.isElement(s)?o=s:"string"==typeof s&&(r=document.createElement("div"),r.innerHTML=s,o=r.firstElementChild),a.callFilters("elRender",o,arguments)},cacheDom:function(t){var e=this;e.callActions("beforeCacheDom",arguments),e.dom.el=t,e.callActions("afterCacheDom",arguments)},getSortString:function(t){var e=this,n=e.dom.el.getAttribute("data-"+t)||"";e.callActions("beforeGetSortString",arguments),n=isNaN(1*n)?n.toLowerCase():1*n,e.sortString=n,e.callActions("afterGetSortString",arguments)},show:function(){var t=this;t.callActions("beforeShow",arguments),t.isShown||(t.dom.el.style.display="",t.isShown=!0),t.callActions("afterShow",arguments)},hide:function(){var t=this;t.callActions("beforeHide",arguments),t.isShown&&(t.dom.el.style.display="none",t.isShown=!1),t.callActions("afterHide",arguments)},move:function(t){var e=this;e.callActions("beforeMove",arguments),e.isExcluded||e.mixer.targetsMoved++,e.applyStylesIn(t),requestAnimationFrame(function(){e.applyStylesOut(t)}),e.callActions("afterMove",arguments)},applyTween:function(t,n){var a=this,i="",o=null,r=t.posIn,s=[],l=new e.StyleData,c=-1;for(a.callActions("beforeApplyTween",arguments),l.x=r.x,l.y=r.y,0===n?a.hide():a.isShown||a.show(),c=0;i=e.features.TWEENABLE[c];c++)if(o=t.tweenData[i],"x"===i){if(!o)continue;l.x=r.x+o*n}else if("y"===i){if(!o)continue;l.y=r.y+o*n}else if(o instanceof e.TransformData){if(!o.value)continue;l[i].value=r[i].value+o.value*n,l[i].unit=o.unit,s.push(i+"("+l[i].value+o.unit+")")}else{if(!o)continue;l[i]=r[i]+o*n,a.dom.el.style[i]=l[i]}(l.x||l.y)&&s.unshift("translate("+l.x+"px, "+l.y+"px)"),s.length&&(a.dom.el.style[e.features.transformProp]=s.join(" ")),a.callActions("afterApplyTween",arguments)},applyStylesIn:function(t){var n=this,a=t.posIn,i=1!==n.mixer.effectsIn.opacity,o=[];n.callActions("beforeApplyStylesIn",arguments),o.push("translate("+a.x+"px, "+a.y+"px)"),n.mixer.config.animation.animateResizeTargets&&("show"!==t.statusChange&&(n.dom.el.style.width=a.width+"px",n.dom.el.style.height=a.height+"px"),n.dom.el.style.marginRight=a.marginRight+"px",n.dom.el.style.marginBottom=a.marginBottom+"px"),i&&(n.dom.el.style.opacity=a.opacity),"show"===t.statusChange&&(o=o.concat(n.mixer.transformIn)),n.dom.el.style[e.features.transformProp]=o.join(" "),n.callActions("afterApplyStylesIn",arguments)},applyStylesOut:function(t){var n=this,a=[],i=[],o=n.mixer.config.animation.animateResizeTargets,r="undefined"!=typeof n.mixer.effectsIn.opacity;if(n.callActions("beforeApplyStylesOut",arguments),a.push(n.writeTransitionRule(e.features.transformRule,t.staggerIndex)),"none"!==t.statusChange&&a.push(n.writeTransitionRule("opacity",t.staggerIndex,t.duration)),o&&(a.push(n.writeTransitionRule("width",t.staggerIndex,t.duration)),a.push(n.writeTransitionRule("height",t.staggerIndex,t.duration)),a.push(n.writeTransitionRule("margin",t.staggerIndex,t.duration))),!t.callback)return n.mixer.targetsImmovable++,void(n.mixer.targetsMoved===n.mixer.targetsImmovable&&n.mixer.cleanUp(t.operation));switch(n.operation=t.operation,n.callback=t.callback,!n.isExcluded&&n.mixer.targetsBound++,n.isBound=!0,n.applyTransition(a),o&&t.posOut.width>0&&t.posOut.height>0&&(n.dom.el.style.width=t.posOut.width+"px",n.dom.el.style.height=t.posOut.height+"px",n.dom.el.style.marginRight=t.posOut.marginRight+"px",n.dom.el.style.marginBottom=t.posOut.marginBottom+"px"),n.mixer.config.animation.nudge||"hide"!==t.statusChange||i.push("translate("+t.posOut.x+"px, "+t.posOut.y+"px)"),t.statusChange){case"hide":r&&(n.dom.el.style.opacity=n.mixer.effectsOut.opacity),i=i.concat(n.mixer.transformOut);break;case"show":r&&(n.dom.el.style.opacity=1)}(n.mixer.config.animation.nudge||!n.mixer.config.animation.nudge&&"hide"!==t.statusChange)&&i.push("translate("+t.posOut.x+"px, "+t.posOut.y+"px)"),n.dom.el.style[e.features.transformProp]=i.join(" "),n.callActions("afterApplyStylesOut",arguments)},writeTransitionRule:function(t,e,n){var a=this,i=a.getDelay(e),o="";return o=t+" "+(n>0?n:a.mixer.config.animation.duration)+"ms "+i+"ms "+("opacity"===t?"linear":a.mixer.config.animation.easing),a.callFilters("ruleWriteTransitionRule",o,arguments)},getDelay:function(t){var e=this,n=-1;return"function"==typeof e.mixer.config.animation.staggerSequence&&(t=e.mixer.config.animation.staggerSequence.call(e,t,e.state)),n=e.mixer.staggerDuration?t*e.mixer.staggerDuration:0,e.callFilters("delayGetDelay",n,arguments)},applyTransition:function(t){var n=this,a=t.join(", ");n.callActions("beforeApplyTransition",arguments),n.dom.el.style[e.features.transitionProp]=a,n.callActions("afterApplyTransition",arguments)},handleTransitionEnd:function(t){var e=this,n=t.propertyName,a=e.mixer.config.animation.animateResizeTargets;e.callActions("beforeHandleTransitionEnd",arguments),e.isBound&&t.target.matches(e.mixer.config.selectors.target)&&(n.indexOf("transform")>-1||n.indexOf("opacity")>-1||a&&n.indexOf("height")>-1||a&&n.indexOf("width")>-1||a&&n.indexOf("margin")>-1)&&(e.callback.call(e,e.operation),e.isBound=!1,e.callback=null,e.operation=null),e.callActions("afterHandleTransitionEnd",arguments)},eventBus:function(t){var e=this;switch(e.callActions("beforeEventBus",arguments),t.type){case"webkitTransitionEnd":case"transitionend":e.handleTransitionEnd(t)}e.callActions("afterEventBus",arguments)},unbindEvents:function(){var t=this;t.callActions("beforeUnbindEvents",arguments),n.off(t.dom.el,"webkitTransitionEnd",t.handler),n.off(t.dom.el,"transitionend",t.handler),t.callActions("afterUnbindEvents",arguments)},bindEvents:function(){var t=this,a="";t.callActions("beforeBindEvents",arguments),a="webkit"===e.features.transitionPrefix?"webkitTransitionEnd":"transitionend",t.handler=function(e){return t.eventBus(e)},n.on(t.dom.el,a,t.handler),t.callActions("afterBindEvents",arguments)},getPosData:function(n){var a=this,i={},o=null,r=new e.StyleData;return a.callActions("beforeGetPosData",arguments),r.x=a.dom.el.offsetLeft,r.y=a.dom.el.offsetTop,(a.mixer.config.animation.animateResizeTargets||n)&&(o=a.dom.el.getBoundingClientRect(),r.top=o.top,r.right=o.right,r.bottom=o.bottom,r.left=o.left,r.width=o.width,r.height=o.height),a.mixer.config.animation.animateResizeTargets&&(i=t.getComputedStyle(a.dom.el),r.marginBottom=parseFloat(i.marginBottom),r.marginRight=parseFloat(i.marginRight)),a.callFilters("posDataGetPosData",r,arguments)},cleanUp:function(){var t=this;t.callActions("beforeCleanUp",arguments),t.dom.el.style[e.features.transformProp]="",t.dom.el.style[e.features.transitionProp]="",t.dom.el.style.opacity="",t.mixer.config.animation.animateResizeTargets&&(t.dom.el.style.width="",t.dom.el.style.height="",t.dom.el.style.marginRight="",t.dom.el.style.marginBottom=""),t.callActions("afterCleanUp",arguments)}}),e.Collection=function(t){var e=null,a=-1;for(this.callActions("beforeConstruct"),a=0;e=t[a];a++)this[a]=e;this.length=t.length,this.callActions("afterConstruct"),n.freeze(this)},e.BaseStatic.call(e.Collection),e.Collection.prototype=Object.create(e.Base.prototype),n.extend(e.Collection.prototype,{constructor:e.Collection,mixitup:function(t){var a=this,i=null,o=Array.prototype.slice.call(arguments),r=[],s=-1;for(this.callActions("beforeMixitup"),o.shift(),s=0;i=a[s];s++)r.push(i[t].apply(i,o));return a.callFilters("promiseMixitup",n.all(r,e.libraries),arguments)}}),e.Operation=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.args=[],this.command=null,this.showPosData=[],this.toHidePosData=[],this.startState=null,this.newState=null,this.docState=null,this.willSort=!1,this.willChangeLayout=!1,this.hasEffect=!1,this.hasFailed=!1,this.triggerElement=null,this.show=[],this.hide=[],this.matching=[],this.toShow=[],this.toHide=[],this.toMove=[],this.toRemove=[],this.startOrder=[],this.newOrder=[],this.startSort=null,this.newSort=null,this.startFilter=null,this.newFilter=null,this.startDataset=null,this.newDataset=null,this.viewportDeltaX=0,this.viewportDeltaY=0,this.startX=0,this.startY=0,this.startHeight=0,this.startWidth=0,this.newX=0,this.newY=0,this.newHeight=0,this.newWidth=0,this.startContainerClassName="",this.startDisplay="",this.newContainerClassName="",this.newDisplay="",this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.Operation),e.Operation.prototype=Object.create(e.Base.prototype),e.Operation.prototype.constructor=e.Operation,e.State=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.activeFilter=null,this.activeSort=null,this.activeContainerClassName="",this.container=null,this.targets=[],this.hide=[],this.show=[],this.matching=[],this.totalTargets=-1,this.totalShow=-1,this.totalHide=-1,this.totalMatching=-1,this.hasFailed=!1,this.triggerElement=null,this.activeDataset=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.State),e.State.prototype=Object.create(e.Base.prototype),e.State.prototype.constructor=e.State,e.UserInstruction=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.command={},this.animate=!1,this.callback=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.UserInstruction),e.UserInstruction.prototype=Object.create(e.Base.prototype),e.UserInstruction.prototype.constructor=e.UserInstruction,e.Messages=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.ERROR_FACTORY_INVALID_CONTAINER="[MixItUp] An invalid selector or element reference was passed to the mixitup factory function",this.ERROR_FACTORY_CONTAINER_NOT_FOUND="[MixItUp] The provided selector yielded no container element",this.ERROR_CONFIG_INVALID_ANIMATION_EFFECTS="[MixItUp] Invalid value for `animation.effects`",this.ERROR_CONFIG_INVALID_CONTROLS_SCOPE="[MixItUp] Invalid value for `controls.scope`",this.ERROR_CONFIG_INVALID_PROPERTY='[MixitUp] Invalid configuration object property "${erroneous}"${suggestion}',this.ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION='. Did you mean "${probableMatch}"?',this.ERROR_CONFIG_DATA_UID_KEY_NOT_SET="[MixItUp] To use the dataset API, a UID key must be specified using `data.uidKey`",this.ERROR_DATASET_INVALID_UID_KEY='[MixItUp] The specified UID key "${uidKey}" is not present on one or more dataset items',this.ERROR_DATASET_DUPLICATE_UID='[MixItUp] The UID "${uid}" was found on two or more dataset items. UIDs must be unique.',this.ERROR_INSERT_INVALID_ARGUMENTS="[MixItUp] Please provider either an index or a sibling and position to insert, not both",this.ERROR_INSERT_PREEXISTING_ELEMENT="[MixItUp] An element to be inserted already exists in the container",this.ERROR_FILTER_INVALID_ARGUMENTS="[MixItUp] Please provide either a selector or collection `.filter()`, not both",this.ERROR_DATASET_NOT_SET="[MixItUp] To use the dataset API with pre-rendered targets, a starting dataset must be set using `load.dataset`",this.ERROR_DATASET_PRERENDERED_MISMATCH="[MixItUp] `load.dataset` does not match pre-rendered targets",this.ERROR_DATASET_RENDERER_NOT_SET="[MixItUp] To insert an element via the dataset API, a target renderer function must be provided to `render.target`",this.ERROR_SORT_NON_EXISTENT_ELEMENT="[MixItUp] An element to be sorted does not already exist in the container",this.WARNING_FACTORY_PREEXISTING_INSTANCE="[MixItUp] WARNING: This element already has an active MixItUp instance. The provided configuration object will be ignored. If you wish to perform additional methods on this instance, please create a reference.",this.WARNING_INSERT_NO_ELEMENTS="[MixItUp] WARNING: No valid elements were passed to `.insert()`",this.WARNING_REMOVE_NO_ELEMENTS="[MixItUp] WARNING: No valid elements were passed to `.remove()`",this.WARNING_MULTIMIX_INSTANCE_QUEUE_FULL="[MixItUp] WARNING: An operation was requested but the MixItUp instance was busy. The operation was rejected because the queue is full or queuing is disabled.",this.WARNING_GET_OPERATION_INSTANCE_BUSY="[MixItUp] WARNING: Operations can be be created while the MixItUp instance is busy.",this.WARNING_NO_PROMISE_IMPLEMENTATION="[MixItUp] WARNING: No Promise implementations could be found. If you wish to use promises with MixItUp please install an ES6 Promise polyfill.",this.WARNING_INCONSISTENT_SORTING_ATTRIBUTES='[MixItUp] WARNING: The requested sorting data attribute "${attribute}" was not present on one or more target elements which may product unexpected sort output',this.callActions("afterConstruct"),this.compileTemplates(),n.seal(this)},e.BaseStatic.call(e.Messages),e.Messages.prototype=Object.create(e.Base.prototype),e.Messages.prototype.constructor=e.Messages,e.Messages.prototype.compileTemplates=function(){var t="",e="";for(t in this)"string"==typeof(e=this[t])&&(this[n.camelCase(t)]=n.template(e))},e.messages=new e.Messages,e.Facade=function(t){e.Base.call(this),this.callActions("beforeConstruct",arguments),this.configure=t.configure.bind(t),this.show=t.show.bind(t),this.hide=t.hide.bind(t),this.filter=t.filter.bind(t),this.toggleOn=t.toggleOn.bind(t),this.toggleOff=t.toggleOff.bind(t),this.sort=t.sort.bind(t),this.changeLayout=t.changeLayout.bind(t),this.multimix=t.multimix.bind(t),this.dataset=t.dataset.bind(t),this.tween=t.tween.bind(t),this.insert=t.insert.bind(t),this.insertBefore=t.insertBefore.bind(t),this.insertAfter=t.insertAfter.bind(t),this.prepend=t.prepend.bind(t),this.append=t.append.bind(t),this.remove=t.remove.bind(t),this.destroy=t.destroy.bind(t),this.forceRefresh=t.forceRefresh.bind(t),this.forceRender=t.forceRender.bind(t),this.isMixing=t.isMixing.bind(t),this.getOperation=t.getOperation.bind(t),this.getConfig=t.getConfig.bind(t),this.getState=t.getState.bind(t),this.callActions("afterConstruct",arguments),n.freeze(this),n.seal(this)},e.BaseStatic.call(e.Facade),e.Facade.prototype=Object.create(e.Base.prototype),e.Facade.prototype.constructor=e.Facade,"object"==typeof exports&&"object"==typeof module?module.exports=e:"function"==typeof define&&define.amd?define(function(){return e}):"undefined"!=typeof t.mixitup&&"function"==typeof t.mixitup||(t.mixitup=e),e.BaseStatic.call(e.constructor),e.NAME="mixitup",e.CORE_VERSION="3.3.1"}(window); \ No newline at end of file diff --git a/mixitup-3.3.1/demos/mock-api.js b/mixitup-3.3.1/demos/mock-api.js new file mode 100644 index 0000000..4036b92 --- /dev/null +++ b/mixitup-3.3.1/demos/mock-api.js @@ -0,0 +1,94 @@ +(function(window) { + var Api = function(dataset) { + var _db = []; + + Object.defineProperties(this, { + db: { + get: function() { + return _db.slice(); + }, + set: function(value) { + if (!Array.isArray(value)) { + throw new TypeError('[mock-api] Dataset must be an array'); + } + + if (!value.length) { + throw new TypeError('[mock-api] Dataset must contain one or more elements'); + } + + _db = value; + } + } + }); + + this.init(dataset); + }; + + Api.prototype = { + constructor: Api, + + init: function(dataset) { + this.db = dataset; + }, + + get: function(query) { + var self = this; + + return Promise.resolve() + .then(function() { + var output; + + query = Object.assign(new Api.Query(), query); + + Object.freeze(query); + + output = self.filter(self.db, query); + + output = self.sort(output, query); + + return output; + }); + }, + + filter: function(input, query) { + return input.filter(function(item) { + var key; + var value; + + for (key in query) { + if (key.match(/^\$/g)) continue; + + value = query[key]; + + if (value === 'all') return true; + + if (item[key] !== value) return false; + } + + return true; + }); + }, + + sort: function(input, query) { + return input.sort(function(a, b) { + var valueA = a[query.$sort_by]; + var valueB = b[query.$sort_by]; + + if (valueA > valueB) { + return query.$order === 'asc' ? 1 : -1; + } else if (valueA < valueB) { + return query.$order === 'asc' ? -1 : 1; + } else { + return 0; + } + }); + } + }; + + Api.Query = function() { + this.$sort_by = 'id'; + this.$order = 'asc'; + }; + + window.Api = Api; +})(window); \ No newline at end of file diff --git a/mixitup-3.3.1/demos/multiple-instances-global-control-scoping/index.html b/mixitup-3.3.1/demos/multiple-instances-global-control-scoping/index.html new file mode 100644 index 0000000..0dab0e5 --- /dev/null +++ b/mixitup-3.3.1/demos/multiple-instances-global-control-scoping/index.html @@ -0,0 +1,53 @@ + + + + + + + + + MixItUp Demo - Multiple Mixers with Global Control Scoping + + +
+ + + + + + + + +
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/multiple-instances-global-control-scoping/style.css b/mixitup-3.3.1/demos/multiple-instances-global-control-scoping/style.css new file mode 100644 index 0000000..5194a0d --- /dev/null +++ b/mixitup-3.3.1/demos/multiple-instances-global-control-scoping/style.css @@ -0,0 +1,184 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + font-size: 0.1px; + margin-bottom: 1rem; + padding: 1rem; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.targets:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} \ No newline at end of file diff --git a/mixitup-3.3.1/demos/multiple-instances-local-control-scoping/index.html b/mixitup-3.3.1/demos/multiple-instances-local-control-scoping/index.html new file mode 100644 index 0000000..0adbb64 --- /dev/null +++ b/mixitup-3.3.1/demos/multiple-instances-local-control-scoping/index.html @@ -0,0 +1,74 @@ + + + + + + + + + MixItUp Demo - Multiple Mixers with Local Control Scoping + + +
+
+ + + + + + + + +
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+ + + + + + + + +
+ +
+
+
+
+ +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/multiple-instances-local-control-scoping/style.css b/mixitup-3.3.1/demos/multiple-instances-local-control-scoping/style.css new file mode 100644 index 0000000..42805b1 --- /dev/null +++ b/mixitup-3.3.1/demos/multiple-instances-local-control-scoping/style.css @@ -0,0 +1,186 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + font-size: 0.1px; + margin-bottom: 1rem; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; +} + +.targets { + text-align: justify; + font-size: 0.1px; +} + +.targets:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} \ No newline at end of file diff --git a/mixitup-3.3.1/demos/radio-buttons/index.html b/mixitup-3.3.1/demos/radio-buttons/index.html new file mode 100644 index 0000000..b55395a --- /dev/null +++ b/mixitup-3.3.1/demos/radio-buttons/index.html @@ -0,0 +1,93 @@ + + + + + + + + + MixItUp Demo - Radio Buttons + + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/radio-buttons/style.css b/mixitup-3.3.1/demos/radio-buttons/style.css new file mode 100644 index 0000000..9b6994a --- /dev/null +++ b/mixitup-3.3.1/demos/radio-buttons/style.css @@ -0,0 +1,200 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.radio-group { + display: inline-block; + padding: .5rem; + background: #2a2a2a; + margin-right: .75rem; + vertical-align: top; +} + +.radio { + text-align: justify; +} + +.radio:after { + content: ''; + display: inline-block; + width: 100%; +} + +.radio-input, +.radio-label { + display: inline-block; +} + +.radio-label { + color: white; + font-family: 'helvetica-neue', arial, sans-serif; + font-size: .9rem; + margin-right: .5rem; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/removal-by-reference/index.html b/mixitup-3.3.1/demos/removal-by-reference/index.html new file mode 100644 index 0000000..0d5d9c6 --- /dev/null +++ b/mixitup-3.3.1/demos/removal-by-reference/index.html @@ -0,0 +1,62 @@ + + + + + + + + + MixItUp Demo - Removal by Reference + + +
+ + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/removal-by-reference/style.css b/mixitup-3.3.1/demos/removal-by-reference/style.css new file mode 100644 index 0000000..6be3c51 --- /dev/null +++ b/mixitup-3.3.1/demos/removal-by-reference/style.css @@ -0,0 +1,196 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter] + .control[data-sort] { + margin-left: .75rem; +} + +.control[data-filter=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"] { + color: #d595aa; +} + +.control[data-filter="none"] { + color: #2f2f2f; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; + cursor: pointer; + transition: opacity 150ms; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +.mix:hover { + opacity: 0.5; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/reset.css b/mixitup-3.3.1/demos/reset.css new file mode 100644 index 0000000..cd114cc --- /dev/null +++ b/mixitup-3.3.1/demos/reset.css @@ -0,0 +1,72 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} + +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +body { + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: antialiased; +} + +blockquote, q { + quotes: none; +} + +a { + text-decoration: none; +} + +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +button { + background: transparent; + border-radius: 0; + border: 0; + padding: 0; + + -webkit-appearance: none; + -webkit-border-radius: 0; + + user-select: none; +} + +button:focus { + outline: 0 none; +} + +button::-moz-focus-inner { + padding: 0; + border: 0; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/mixitup-3.3.1/demos/select-dropdowns/index.html b/mixitup-3.3.1/demos/select-dropdowns/index.html new file mode 100644 index 0000000..c165c0c --- /dev/null +++ b/mixitup-3.3.1/demos/select-dropdowns/index.html @@ -0,0 +1,67 @@ + + + + + + + + + MixItUp Demo - Select Dropdowns + + +
+ + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + diff --git a/mixitup-3.3.1/demos/select-dropdowns/style.css b/mixitup-3.3.1/demos/select-dropdowns/style.css new file mode 100644 index 0000000..c8ae360 --- /dev/null +++ b/mixitup-3.3.1/demos/select-dropdowns/style.css @@ -0,0 +1,111 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.controls > select { + margin-right: .75rem; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} \ No newline at end of file diff --git a/mixitup-3.3.1/demos/sorting-by-attribute/index.html b/mixitup-3.3.1/demos/sorting-by-attribute/index.html new file mode 100644 index 0000000..7a776be --- /dev/null +++ b/mixitup-3.3.1/demos/sorting-by-attribute/index.html @@ -0,0 +1,44 @@ + + + + + + + + + MixItUp Demo - Sorting by Attribute + + +
+ + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/sorting-by-attribute/style.css b/mixitup-3.3.1/demos/sorting-by-attribute/style.css new file mode 100644 index 0000000..927e310 --- /dev/null +++ b/mixitup-3.3.1/demos/sorting-by-attribute/style.css @@ -0,0 +1,157 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; + font-family: 'helvetica-neue', arial, sans-serif; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix[data-published-date]:after { + position: absolute; + content: attr(data-published-date); + font-size: 1rem; + font-weight: bold; + color: #aaa; + padding: 1rem; + width: 100%; + top: 0; + left: 0; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/sorting-by-default/index.html b/mixitup-3.3.1/demos/sorting-by-default/index.html new file mode 100644 index 0000000..245873c --- /dev/null +++ b/mixitup-3.3.1/demos/sorting-by-default/index.html @@ -0,0 +1,40 @@ + + + + + + + + + MixItUp Demo - Sorting by Default + + +
+ + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/sorting-by-default/style.css b/mixitup-3.3.1/demos/sorting-by-default/style.css new file mode 100644 index 0000000..fc9fe00 --- /dev/null +++ b/mixitup-3.3.1/demos/sorting-by-default/style.css @@ -0,0 +1,145 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; + font-family: 'helvetica-neue', arial, sans-serif; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/sorting-by-multiple-attributes/index.html b/mixitup-3.3.1/demos/sorting-by-multiple-attributes/index.html new file mode 100644 index 0000000..f61d1d5 --- /dev/null +++ b/mixitup-3.3.1/demos/sorting-by-multiple-attributes/index.html @@ -0,0 +1,45 @@ + + + + + + + + + MixItUp Demo - Sorting by Multiple Attributes + + +
+ + +
+ +
+

Oscar

+

Charlie

+

Lima

+

Alpha

+

Mike

+

Zulu

+

Tango

+

Sierra

+

Bravo

+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/sorting-by-multiple-attributes/style.css b/mixitup-3.3.1/demos/sorting-by-multiple-attributes/style.css new file mode 100644 index 0000000..7bc430d --- /dev/null +++ b/mixitup-3.3.1/demos/sorting-by-multiple-attributes/style.css @@ -0,0 +1,165 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-sort]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + border-top: 2px solid; + border-left: 2px solid; + top: calc(50% - 6px); + left: calc(50% - 6px); + transform: translateY(1px) rotate(45deg); +} + +.control[data-sort*=":desc"]:after { + transform: translateY(-4px) rotate(-135deg); +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-filter]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; + font-family: 'helvetica-neue', arial, sans-serif; + font-size: 1rem; + font-weight: bold; + color: #aaa; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix[data-published-date]:after { + position: absolute; + content: attr(data-published-date); + padding: 1rem; + width: 100%; + top: 0; + left: 0; +} + +.mix h4 { + position: absolute; + padding: 1rem; + bottom: 0; + left: 0; + color: #333; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/toggle-filtering-and-logic/index.html b/mixitup-3.3.1/demos/toggle-filtering-and-logic/index.html new file mode 100644 index 0000000..3a34f2a --- /dev/null +++ b/mixitup-3.3.1/demos/toggle-filtering-and-logic/index.html @@ -0,0 +1,46 @@ + + + + + + + + + MixItUp Demo - Toggle Filtering AND Logic + + +
+ + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/toggle-filtering-and-logic/style.css b/mixitup-3.3.1/demos/toggle-filtering-and-logic/style.css new file mode 100644 index 0000000..ad8b6f8 --- /dev/null +++ b/mixitup-3.3.1/demos/toggle-filtering-and-logic/style.css @@ -0,0 +1,186 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after, +.control[data-toggle]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-toggle]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter=".green"], +.control[data-toggle=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"], +.control[data-toggle=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"], +.control[data-toggle=".pink"] { + color: #d595aa; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; + border-top: .5rem solid transparent; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +.mix.pink.green:before { + width: 100%; + border-top-color: #91e6c7; +} + +.mix.green.blue:before { + width: 100%; + border-top-color: #91e6c7; +} + +.mix.blue.pink:before { + width: 100%; + border-top-color: #d595aa; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/demos/toggle-filtering-or-logic/index.html b/mixitup-3.3.1/demos/toggle-filtering-or-logic/index.html new file mode 100644 index 0000000..2d3dc31 --- /dev/null +++ b/mixitup-3.3.1/demos/toggle-filtering-or-logic/index.html @@ -0,0 +1,42 @@ + + + + + + + + + MixItUp Demo - Toggle Filtering OR Logic + + +
+ + + + +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/demos/toggle-filtering-or-logic/style.css b/mixitup-3.3.1/demos/toggle-filtering-or-logic/style.css new file mode 100644 index 0000000..43d9388 --- /dev/null +++ b/mixitup-3.3.1/demos/toggle-filtering-or-logic/style.css @@ -0,0 +1,170 @@ +html, +body { + height: 100%; + background: #f2f2f2; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +/* Controls +---------------------------------------------------------------------- */ + +.controls { + padding: 1rem; + background: #333; + font-size: 0.1px; +} + +.control { + position: relative; + display: inline-block; + width: 2.7rem; + height: 2.7rem; + background: #444; + cursor: pointer; + font-size: 0.1px; + color: white; + transition: background 150ms; +} + +.control:hover { + background: #3f3f3f; +} + +.control[data-filter]:after, +.control[data-toggle]:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + top: calc(50% - 6px); + left: calc(50% - 6px); + border: 2px solid currentColor; + border-radius: 2px; + background: currentColor; + transition: background-color 150ms, border-color 150ms; +} + +.mixitup-control-active { + background: #393939; +} + +.mixitup-control-active[data-toggle]:after { + background: transparent; +} + +.control:first-of-type { + border-radius: 3px 0 0 3px; +} + +.control:last-of-type { + border-radius: 0 3px 3px 0; +} + +.control[data-filter=".green"], +.control[data-toggle=".green"] { + color: #91e6c7; +} + +.control[data-filter=".blue"], +.control[data-toggle=".blue"] { + color: #5ecdde; +} + +.control[data-filter=".pink"], +.control[data-toggle=".pink"] { + color: #d595aa; +} + +/* Container +---------------------------------------------------------------------- */ + +.container { + padding: 1rem; + text-align: justify; + font-size: 0.1px; +} + +.container:after { + content: ''; + display: inline-block; + width: 100%; +} + +/* Target Elements +---------------------------------------------------------------------- */ + +.mix, +.gap { + display: inline-block; + vertical-align: top; +} + +.mix { + background: #fff; + border-top: .5rem solid currentColor; + border-radius: 2px; + margin-bottom: 1rem; + position: relative; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 56.25%; +} + +.mix.green { + color: #91e6c7; +} + +.mix.pink { + color: #d595aa; +} + +.mix.blue { + color: #5ecdde; +} + +/* Grid Breakpoints +---------------------------------------------------------------------- */ + +/* 2 Columns */ + +.mix, +.gap { + width: calc(100%/2 - (((2 - 1) * 1rem) / 2)); +} + +/* 3 Columns */ + +@media screen and (min-width: 541px) { + .mix, + .gap { + width: calc(100%/3 - (((3 - 1) * 1rem) / 3)); + } +} + +/* 4 Columns */ + +@media screen and (min-width: 961px) { + .mix, + .gap { + width: calc(100%/4 - (((4 - 1) * 1rem) / 4)); + } +} + +/* 5 Columns */ + +@media screen and (min-width: 1281px) { + .mix, + .gap { + width: calc(100%/5 - (((5 - 1) * 1rem) / 5)); + } +} + + diff --git a/mixitup-3.3.1/dist/mixitup.js b/mixitup-3.3.1/dist/mixitup.js new file mode 100644 index 0000000..a9af1f7 --- /dev/null +++ b/mixitup-3.3.1/dist/mixitup.js @@ -0,0 +1,10682 @@ +/**! + * MixItUp v3.3.1 + * A high-performance, dependency-free library for animated filtering, sorting and more + * Build 94e0fbf6-cd0b-4987-b3c0-14b59b67b8a0 + * + * @copyright Copyright 2014-2018 KunkaLabs Limited. + * @author KunkaLabs Limited. + * @link https://www.kunkalabs.com/mixitup/ + * + * @license Commercial use requires a commercial license. + * https://www.kunkalabs.com/mixitup/licenses/ + * + * Non-commercial use permitted under same terms as CC BY-NC 3.0 license. + * http://creativecommons.org/licenses/by-nc/3.0/ + */ + +(function(window) { + 'use strict'; + + var mixitup = null, + h = null; + + (function() { + var VENDORS = ['webkit', 'moz', 'o', 'ms'], + canary = window.document.createElement('div'), + i = -1; + + // window.requestAnimationFrame + + for (i = 0; i < VENDORS.length && !window.requestAnimationFrame; i++) { + window.requestAnimationFrame = window[VENDORS[i] + 'RequestAnimationFrame']; + } + + // Element.nextElementSibling + + if (typeof canary.nextElementSibling === 'undefined') { + Object.defineProperty(window.Element.prototype, 'nextElementSibling', { + get: function() { + var el = this.nextSibling; + + while (el) { + if (el.nodeType === 1) { + return el; + } + + el = el.nextSibling; + } + + return null; + } + }); + } + + // Element.matches + + (function(ElementPrototype) { + ElementPrototype.matches = + ElementPrototype.matches || + ElementPrototype.machesSelector || + ElementPrototype.mozMatchesSelector || + ElementPrototype.msMatchesSelector || + ElementPrototype.oMatchesSelector || + ElementPrototype.webkitMatchesSelector || + function (selector) { + return Array.prototype.indexOf.call(this.parentElement.querySelectorAll(selector), this) > -1; + }; + })(window.Element.prototype); + + // Object.keys + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys + + if (!Object.keys) { + Object.keys = (function() { + var hasOwnProperty = Object.prototype.hasOwnProperty, + hasDontEnumBug = false, + dontEnums = [], + dontEnumsLength = -1; + + hasDontEnumBug = !({ + toString: null + }) + .propertyIsEnumerable('toString'); + + dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' + ]; + + dontEnumsLength = dontEnums.length; + + return function(obj) { + var result = [], + prop = '', + i = -1; + + if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { + throw new TypeError('Object.keys called on non-object'); + } + + for (prop in obj) { + if (hasOwnProperty.call(obj, prop)) { + result.push(prop); + } + } + + if (hasDontEnumBug) { + for (i = 0; i < dontEnumsLength; i++) { + if (hasOwnProperty.call(obj, dontEnums[i])) { + result.push(dontEnums[i]); + } + } + } + + return result; + }; + }()); + } + + // Array.isArray + // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray + + if (!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + } + + // Object.create + // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/create + + if (typeof Object.create !== 'function') { + Object.create = (function(undefined) { + var Temp = function() {}; + + return function (prototype, propertiesObject) { + if (prototype !== Object(prototype) && prototype !== null) { + throw TypeError('Argument must be an object, or null'); + } + + Temp.prototype = prototype || {}; + + var result = new Temp(); + + Temp.prototype = null; + + if (propertiesObject !== undefined) { + Object.defineProperties(result, propertiesObject); + } + + if (prototype === null) { + /* jshint ignore:start */ + result.__proto__ = null; + /* jshint ignore:end */ + } + + return result; + }; + })(); + } + + // String.prototyoe.trim + + if (!String.prototype.trim) { + String.prototype.trim = function() { + return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + }; + } + + // Array.prototype.indexOf + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf + + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement) { + var n, k, t, len; + + if (this === null) { + throw new TypeError(); + } + + t = Object(this); + + len = t.length >>> 0; + + if (len === 0) { + return -1; + } + + n = 0; + + if (arguments.length > 1) { + n = Number(arguments[1]); + + if (n !== n) { + n = 0; + } else if (n !== 0 && n !== Infinity && n !== -Infinity) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); + } + } + + if (n >= len) { + return -1; + } + + for (k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) { + if (k in t && t[k] === searchElement) { + return k; + } + } + + return -1; + }; + } + + // Function.prototype.bind + // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind + + if (!Function.prototype.bind) { + Function.prototype.bind = function(oThis) { + var aArgs, self, FNOP, fBound; + + if (typeof this !== 'function') { + throw new TypeError(); + } + + aArgs = Array.prototype.slice.call(arguments, 1); + + self = this; + + FNOP = function() {}; + + fBound = function() { + return self.apply(this instanceof FNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + if (this.prototype) { + FNOP.prototype = this.prototype; + } + + fBound.prototype = new FNOP(); + + return fBound; + }; + } + + // Element.prototype.dispatchEvent + + if (!window.Element.prototype.dispatchEvent) { + window.Element.prototype.dispatchEvent = function(event) { + try { + return this.fireEvent('on' + event.type, event); + } catch (err) {} + }; + } + })(); + + /** + * The `mixitup()` "factory" function creates and returns individual instances + * of MixItUp, known as "mixers", on which API methods can be called. + * + * When loading MixItUp via a script tag, the factory function is accessed + * via the global variable `mixitup`. When using a module loading + * system (e.g. ES2015, CommonJS, RequireJS), the factory function is + * exported into your module when you require the MixItUp library. + * + * @example + * mixitup(container [,config] [,foreignDoc]) + * + * @example Example 1: Creating a mixer instance with an element reference + * var containerEl = document.querySelector('.container'); + * + * var mixer = mixitup(containerEl); + * + * @example Example 2: Creating a mixer instance with a selector string + * var mixer = mixitup('.container'); + * + * @example Example 3: Passing a configuration object + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade scale(0.5)' + * } + * }); + * + * @example Example 4: Passing an iframe reference + * var mixer = mixitup(containerEl, config, foreignDocument); + * + * @global + * @namespace + * @public + * @kind function + * @since 3.0.0 + * @param {(Element|string)} container + * A DOM element or selector string representing the container(s) on which to instantiate MixItUp. + * @param {object} [config] + * An optional "configuration object" used to customize the behavior of the MixItUp instance. + * @param {object} [foreignDoc] + * An optional reference to a `document`, which can be used to control a MixItUp instance in an iframe. + * @return {mixitup.Mixer} + * A "mixer" object holding the MixItUp instance. + */ + + mixitup = function(container, config, foreignDoc) { + var el = null, + returnCollection = false, + instance = null, + facade = null, + doc = null, + output = null, + instances = [], + id = '', + elements = [], + i = -1; + + doc = foreignDoc || window.document; + + if (returnCollection = arguments[3]) { + // A non-documented 4th paramater enabling control of multiple instances + + returnCollection = typeof returnCollection === 'boolean'; + } + + if (typeof container === 'string') { + elements = doc.querySelectorAll(container); + } else if (container && typeof container === 'object' && h.isElement(container, doc)) { + elements = [container]; + } else if (container && typeof container === 'object' && container.length) { + // Although not documented, the container may also be an array-like list of + // elements such as a NodeList or jQuery collection, is returnCollection is true + + elements = container; + } else { + throw new Error(mixitup.messages.errorFactoryInvalidContainer()); + } + + if (elements.length < 1) { + throw new Error(mixitup.messages.errorFactoryContainerNotFound()); + } + + for (i = 0; el = elements[i]; i++) { + if (i > 0 && !returnCollection) break; + + if (!el.id) { + id = 'MixItUp' + h.randomHex(); + + el.id = id; + } else { + id = el.id; + } + + if (mixitup.instances[id] instanceof mixitup.Mixer) { + instance = mixitup.instances[id]; + + if (!config || (config && config.debug && config.debug.showWarnings !== false)) { + console.warn(mixitup.messages.warningFactoryPreexistingInstance()); + } + } else { + instance = new mixitup.Mixer(); + + instance.attach(el, doc, id, config); + + mixitup.instances[id] = instance; + } + + facade = new mixitup.Facade(instance); + + if (config && config.debug && config.debug.enable) { + instances.push(instance); + } else { + instances.push(facade); + } + } + + if (returnCollection) { + output = new mixitup.Collection(instances); + } else { + // Return the first instance regardless + + output = instances[0]; + } + + return output; + }; + + /** + * The `.use()` static method is used to extend the functionality of mixitup with compatible + * extensions and libraries in an environment with modular scoping e.g. ES2015, CommonJS, or RequireJS. + * + * You need only call the `.use()` function once per project, per extension, as module loaders + * will cache a single reference to MixItUp inclusive of all changes made. + * + * @example + * mixitup.use(extension) + * + * @example Example 1: Extending MixItUp with the Pagination Extension + * + * import mixitup from 'mixitup'; + * import mixitupPagination from 'mixitup-pagination'; + * + * mixitup.use(mixitupPagination); + * + * // All mixers created by the factory function in all modules will now + * // have pagination functionality + * + * var mixer = mixitup('.container'); + * + * @public + * @name use + * @memberof mixitup + * @kind function + * @static + * @since 3.0.0 + * @param {*} extension A reference to the extension or library to be used. + * @return {void} + */ + + mixitup.use = function(extension) { + mixitup.Base.prototype.callActions.call(mixitup, 'beforeUse', arguments); + + // Call the extension's factory function, passing + // the mixitup factory as a paramater + + if (typeof extension === 'function' && extension.TYPE === 'mixitup-extension') { + // Mixitup extension + + if (typeof mixitup.extensions[extension.NAME] === 'undefined') { + extension(mixitup); + + mixitup.extensions[extension.NAME] = extension; + } + } else if (extension.fn && extension.fn.jquery) { + // jQuery + + mixitup.libraries.$ = extension; + } + + mixitup.Base.prototype.callActions.call(mixitup, 'afterUse', arguments); + }; + + mixitup.instances = {}; + mixitup.extensions = {}; + mixitup.libraries = {}; + + /** + * @private + */ + + h = { + + /** + * @private + * @param {HTMLElement} el + * @param {string} cls + * @return {boolean} + */ + + hasClass: function(el, cls) { + return !!el.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')); + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} cls + * @return {void} + */ + + addClass: function(el, cls) { + if (!this.hasClass(el, cls)) el.className += el.className ? ' ' + cls : cls; + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} cls + * @return {void} + */ + + removeClass: function(el, cls) { + if (this.hasClass(el, cls)) { + var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)'); + + el.className = el.className.replace(reg, ' ').trim(); + } + }, + + /** + * Merges the properties of the source object onto the + * target object. Alters the target object. + * + * @private + * @param {object} destination + * @param {object} source + * @param {boolean} [deep=false] + * @param {boolean} [handleErrors=false] + * @return {void} + */ + + extend: function(destination, source, deep, handleErrors) { + var sourceKeys = [], + key = '', + i = -1; + + deep = deep || false; + handleErrors = handleErrors || false; + + try { + if (Array.isArray(source)) { + for (i = 0; i < source.length; i++) { + sourceKeys.push(i); + } + } else if (source) { + sourceKeys = Object.keys(source); + } + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + + if (!deep || typeof source[key] !== 'object' || this.isElement(source[key])) { + // All non-object properties, or all properties if shallow extend + + destination[key] = source[key]; + } else if (Array.isArray(source[key])) { + // Arrays + + if (!destination[key]) { + destination[key] = []; + } + + this.extend(destination[key], source[key], deep, handleErrors); + } else { + // Objects + + if (!destination[key]) { + destination[key] = {}; + } + + this.extend(destination[key], source[key], deep, handleErrors); + } + } + } catch(err) { + if (handleErrors) { + this.handleExtendError(err, destination); + } else { + throw err; + } + } + + return destination; + }, + + /** + * @private + * @param {Error} err + * @param {object} destination + * @return {void} + */ + + handleExtendError: function(err, destination) { + var re = /property "?(\w*)"?[,:] object/i, + matches = null, + erroneous = '', + message = '', + suggestion = '', + probableMatch = '', + key = '', + mostMatchingChars = -1, + i = -1; + + if (err instanceof TypeError && (matches = re.exec(err.message))) { + erroneous = matches[1]; + + for (key in destination) { + i = 0; + + while (i < erroneous.length && erroneous.charAt(i) === key.charAt(i)) { + i++; + } + + if (i > mostMatchingChars) { + mostMatchingChars = i; + probableMatch = key; + } + } + + if (mostMatchingChars > 1) { + suggestion = mixitup.messages.errorConfigInvalidPropertySuggestion({ + probableMatch: probableMatch + }); + } + + message = mixitup.messages.errorConfigInvalidProperty({ + erroneous: erroneous, + suggestion: suggestion + }); + + throw new TypeError(message); + } + + throw err; + }, + + /** + * @private + * @param {string} str + * @return {function} + */ + + template: function(str) { + var re = /\${([\w]*)}/g, + dynamics = {}, + matches = null; + + while ((matches = re.exec(str))) { + dynamics[matches[1]] = new RegExp('\\${' + matches[1] + '}', 'g'); + } + + return function(data) { + var key = '', + output = str; + + data = data || {}; + + for (key in dynamics) { + output = output.replace(dynamics[key], typeof data[key] !== 'undefined' ? data[key] : ''); + } + + return output; + }; + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} type + * @param {function} fn + * @param {boolean} useCapture + * @return {void} + */ + + on: function(el, type, fn, useCapture) { + if (!el) return; + + if (el.addEventListener) { + el.addEventListener(type, fn, useCapture); + } else if (el.attachEvent) { + el['e' + type + fn] = fn; + + el[type + fn] = function() { + el['e' + type + fn](window.event); + }; + + el.attachEvent('on' + type, el[type + fn]); + } + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} type + * @param {function} fn + * @return {void} + */ + + off: function(el, type, fn) { + if (!el) return; + + if (el.removeEventListener) { + el.removeEventListener(type, fn, false); + } else if (el.detachEvent) { + el.detachEvent('on' + type, el[type + fn]); + el[type + fn] = null; + } + }, + + /** + * @private + * @param {string} eventType + * @param {object} detail + * @param {Document} [doc] + * @return {CustomEvent} + */ + + getCustomEvent: function(eventType, detail, doc) { + var event = null; + + doc = doc || window.document; + + if (typeof window.CustomEvent === 'function') { + event = new window.CustomEvent(eventType, { + detail: detail, + bubbles: true, + cancelable: true + }); + } else if (typeof doc.createEvent === 'function') { + event = doc.createEvent('CustomEvent'); + event.initCustomEvent(eventType, true, true, detail); + } else { + event = doc.createEventObject(), + event.type = eventType; + + event.returnValue = false; + event.cancelBubble = false; + event.detail = detail; + } + + return event; + }, + + /** + * @private + * @param {Event} e + * @return {Event} + */ + + getOriginalEvent: function(e) { + if (e.touches && e.touches.length) { + return e.touches[0]; + } else if (e.changedTouches && e.changedTouches.length) { + return e.changedTouches[0]; + } else { + return e; + } + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} selector + * @return {Number} + */ + + index: function(el, selector) { + var i = 0; + + while ((el = el.previousElementSibling) !== null) { + if (!selector || el.matches(selector)) { + ++i; + } + } + + return i; + }, + + /** + * Converts a dash or snake-case string to camel case. + * + * @private + * @param {string} str + * @param {boolean} [isPascal] + * @return {string} + */ + + camelCase: function(str) { + return str.toLowerCase().replace(/([_-][a-z])/g, function($1) { + return $1.toUpperCase().replace(/[_-]/, ''); + }); + }, + + /** + * Converts a dash or snake-case string to pascal case. + * + * @private + * @param {string} str + * @param {boolean} [isPascal] + * @return {string} + */ + + pascalCase: function(str) { + return (str = this.camelCase(str)).charAt(0).toUpperCase() + str.slice(1); + }, + + /** + * Converts a camel or pascal-case string to dash case. + * + * @private + * @param {string} str + * @return {string} + */ + + dashCase: function(str) { + return str.replace(/([A-Z])/g, '-$1').replace(/^-/, '').toLowerCase(); + }, + + /** + * @private + * @param {HTMLElement} el + * @param {HTMLHtmlElement} [doc] + * @return {boolean} + */ + + isElement: function(el, doc) { + doc = doc || window.document; + + if ( + window.HTMLElement && + el instanceof window.HTMLElement + ) { + return true; + } else if ( + doc.defaultView && + doc.defaultView.HTMLElement && + el instanceof doc.defaultView.HTMLElement + ) { + return true; + } else { + return ( + el !== null && + el.nodeType === 1 && + typeof el.nodeName === 'string' + ); + } + }, + + /** + * @private + * @param {string} htmlString + * @param {HTMLHtmlElement} [doc] + * @return {DocumentFragment} + */ + + createElement: function(htmlString, doc) { + var frag = null, + temp = null; + + doc = doc || window.document; + + frag = doc.createDocumentFragment(); + temp = doc.createElement('div'); + + temp.innerHTML = htmlString.trim(); + + while (temp.firstChild) { + frag.appendChild(temp.firstChild); + } + + return frag; + }, + + /** + * @private + * @param {Node} node + * @return {void} + */ + + removeWhitespace: function(node) { + var deleting; + + while (node && node.nodeName === '#text') { + deleting = node; + + node = node.previousSibling; + + deleting.parentElement && deleting.parentElement.removeChild(deleting); + } + }, + + /** + * @private + * @param {Array<*>} a + * @param {Array<*>} b + * @return {boolean} + */ + + isEqualArray: function(a, b) { + var i = a.length; + + if (i !== b.length) return false; + + while (i--) { + if (a[i] !== b[i]) return false; + } + + return true; + }, + + /** + * @private + * @param {object} a + * @param {object} b + * @return {boolean} + */ + + deepEquals: function(a, b) { + var key; + + if (typeof a === 'object' && a && typeof b === 'object' && b) { + if (Object.keys(a).length !== Object.keys(b).length) return false; + + for (key in a) { + if (!b.hasOwnProperty(key) || !this.deepEquals(a[key], b[key])) return false; + } + } else if (a !== b) { + return false; + } + + return true; + }, + + /** + * @private + * @param {Array<*>} oldArray + * @return {Array<*>} + */ + + arrayShuffle: function(oldArray) { + var newArray = oldArray.slice(), + len = newArray.length, + i = len, + p = -1, + t = []; + + while (i--) { + p = ~~(Math.random() * len); + t = newArray[i]; + + newArray[i] = newArray[p]; + newArray[p] = t; + } + + return newArray; + }, + + /** + * @private + * @param {object} list + */ + + arrayFromList: function(list) { + var output, i; + + try { + return Array.prototype.slice.call(list); + } catch(err) { + output = []; + + for (i = 0; i < list.length; i++) { + output.push(list[i]); + } + + return output; + } + }, + + /** + * @private + * @param {function} func + * @param {Number} wait + * @param {boolean} immediate + * @return {function} + */ + + debounce: function(func, wait, immediate) { + var timeout; + + return function() { + var self = this, + args = arguments, + callNow = immediate && !timeout, + later = null; + + later = function() { + timeout = null; + + if (!immediate) { + func.apply(self, args); + } + }; + + clearTimeout(timeout); + + timeout = setTimeout(later, wait); + + if (callNow) func.apply(self, args); + }; + }, + + /** + * @private + * @param {HTMLElement} element + * @return {object} + */ + + position: function(element) { + var xPosition = 0, + yPosition = 0, + offsetParent = element; + + while (element) { + xPosition -= element.scrollLeft; + yPosition -= element.scrollTop; + + if (element === offsetParent) { + xPosition += element.offsetLeft; + yPosition += element.offsetTop; + + offsetParent = element.offsetParent; + } + + element = element.parentElement; + } + + return { + x: xPosition, + y: yPosition + }; + }, + + /** + * @private + * @param {object} node1 + * @param {object} node2 + * @return {Number} + */ + + getHypotenuse: function(node1, node2) { + var distanceX = node1.x - node2.x, + distanceY = node1.y - node2.y; + + distanceX = distanceX < 0 ? distanceX * -1 : distanceX, + distanceY = distanceY < 0 ? distanceY * -1 : distanceY; + + return Math.sqrt(Math.pow(distanceX, 2) + Math.pow(distanceY, 2)); + }, + + /** + * Calcuates the area of intersection between two rectangles and expresses it as + * a ratio in comparison to the area of the first rectangle. + * + * @private + * @param {Rect} box1 + * @param {Rect} box2 + * @return {number} + */ + + getIntersectionRatio: function(box1, box2) { + var controlArea = box1.width * box1.height, + intersectionX = -1, + intersectionY = -1, + intersectionArea = -1, + ratio = -1; + + intersectionX = + Math.max(0, Math.min(box1.left + box1.width, box2.left + box2.width) - Math.max(box1.left, box2.left)); + + intersectionY = + Math.max(0, Math.min(box1.top + box1.height, box2.top + box2.height) - Math.max(box1.top, box2.top)); + + intersectionArea = intersectionY * intersectionX; + + ratio = intersectionArea / controlArea; + + return ratio; + }, + + /** + * @private + * @param {object} el + * @param {string} selector + * @param {boolean} [includeSelf] + * @param {HTMLHtmlElement} [doc] + * @return {Element|null} + */ + + closestParent: function(el, selector, includeSelf, doc) { + var parent = el.parentNode; + + doc = doc || window.document; + + if (includeSelf && el.matches(selector)) { + return el; + } + + while (parent && parent != doc.body) { + if (parent.matches && parent.matches(selector)) { + return parent; + } else if (parent.parentNode) { + parent = parent.parentNode; + } else { + return null; + } + } + + return null; + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} selector + * @param {HTMLHtmlElement} [doc] + * @return {NodeList} + */ + + children: function(el, selector, doc) { + var children = [], + tempId = ''; + + doc = doc || window.doc; + + if (el) { + if (!el.id) { + tempId = 'Temp' + this.randomHexKey(); + + el.id = tempId; + } + + children = doc.querySelectorAll('#' + el.id + ' > ' + selector); + + if (tempId) { + el.removeAttribute('id'); + } + } + + return children; + }, + + /** + * Creates a clone of a provided array, with any empty strings removed. + * + * @private + * @param {Array<*>} originalArray + * @return {Array<*>} + */ + + clean: function(originalArray) { + var cleanArray = [], + i = -1; + + for (i = 0; i < originalArray.length; i++) { + if (originalArray[i] !== '') { + cleanArray.push(originalArray[i]); + } + } + + return cleanArray; + }, + + /** + * Abstracts an ES6 promise into a q-like deferred interface for storage and deferred resolution. + * + * @private + * @param {object} libraries + * @return {h.Deferred} + */ + + defer: function(libraries) { + var deferred = null, + promiseWrapper = null, + $ = null; + + promiseWrapper = new this.Deferred(); + + if (mixitup.features.has.promises) { + // ES6 native promise or polyfill + + promiseWrapper.promise = new Promise(function(resolve, reject) { + promiseWrapper.resolve = resolve; + promiseWrapper.reject = reject; + }); + } else if (($ = (window.jQuery || libraries.$)) && typeof $.Deferred === 'function') { + // jQuery + + deferred = $.Deferred(); + + promiseWrapper.promise = deferred.promise(); + promiseWrapper.resolve = deferred.resolve; + promiseWrapper.reject = deferred.reject; + } else if (window.console) { + // No implementation + + console.warn(mixitup.messages.warningNoPromiseImplementation()); + } + + return promiseWrapper; + }, + + /** + * @private + * @param {Array} tasks + * @param {object} libraries + * @return {Promise} + */ + + all: function(tasks, libraries) { + var $ = null; + + if (mixitup.features.has.promises) { + return Promise.all(tasks); + } else if (($ = (window.jQuery || libraries.$)) && typeof $.when === 'function') { + return $.when.apply($, tasks) + .done(function() { + // jQuery when returns spread arguments rather than an array or resolutions + + return arguments; + }); + } + + // No implementation + + if (window.console) { + console.warn(mixitup.messages.warningNoPromiseImplementation()); + } + + return []; + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} property + * @param {Array} vendors + * @return {string} + */ + + getPrefix: function(el, property, vendors) { + var i = -1, + prefix = ''; + + if (h.dashCase(property) in el.style) return ''; + + for (i = 0; prefix = vendors[i]; i++) { + if (prefix + property in el.style) { + return prefix.toLowerCase(); + } + } + + return 'unsupported'; + }, + + /** + * @private + * @return {string} + */ + + randomHex: function() { + return ('00000' + (Math.random() * 16777216 << 0).toString(16)).substr(-6).toUpperCase(); + }, + + /** + * @private + * @param {HTMLDocument} [doc] + * @return {object} + */ + + getDocumentState: function(doc) { + doc = typeof doc.body === 'object' ? doc : window.document; + + return { + scrollTop: window.pageYOffset, + scrollLeft: window.pageXOffset, + docHeight: doc.documentElement.scrollHeight, + docWidth: doc.documentElement.scrollWidth, + viewportHeight: doc.documentElement.clientHeight, + viewportWidth: doc.documentElement.clientWidth + }; + }, + + /** + * @private + * @param {object} obj + * @param {function} fn + * @return {function} + */ + + bind: function(obj, fn) { + return function() { + return fn.apply(obj, arguments); + }; + }, + + /** + * @private + * @param {HTMLElement} el + * @return {boolean} + */ + + isVisible: function(el) { + var styles = null; + + if (el.offsetParent) return true; + + styles = window.getComputedStyle(el); + + if ( + styles.position === 'fixed' && + styles.visibility !== 'hidden' && + styles.opacity !== '0' + ) { + // Fixed elements report no offsetParent, + // but may still be invisible + + return true; + } + + return false; + }, + + /** + * @private + * @param {object} obj + */ + + seal: function(obj) { + if (typeof Object.seal === 'function') { + Object.seal(obj); + } + }, + + /** + * @private + * @param {object} obj + */ + + freeze: function(obj) { + if (typeof Object.freeze === 'function') { + Object.freeze(obj); + } + }, + + /** + * @private + * @param {string} control + * @param {string} specimen + * @return {boolean} + */ + + compareVersions: function(control, specimen) { + var controlParts = control.split('.'), + specimenParts = specimen.split('.'), + controlPart = -1, + specimenPart = -1, + i = -1; + + for (i = 0; i < controlParts.length; i++) { + controlPart = parseInt(controlParts[i].replace(/[^\d.]/g, '')); + specimenPart = parseInt(specimenParts[i].replace(/[^\d.]/g, '') || 0); + + if (specimenPart < controlPart) { + return false; + } else if (specimenPart > controlPart) { + return true; + } + } + + return true; + }, + + /** + * @private + * @constructor + */ + + Deferred: function() { + this.promise = null; + this.resolve = null; + this.reject = null; + this.id = h.randomHex(); + }, + + /** + * @private + * @param {object} obj + * @return {boolean} + */ + + isEmptyObject: function(obj) { + var key = ''; + + if (typeof Object.keys === 'function') { + return Object.keys(obj).length === 0; + } + + for (key in obj) { + if (obj.hasOwnProperty(key)) { + return false; + } + } + + return true; + }, + + /** + * @param {mixitup.Config.ClassNames} classNames + * @param {string} elementName + * @param {string} [modifier] + * @return {string} + */ + + getClassname: function(classNames, elementName, modifier) { + var classname = ''; + + classname += classNames.block; + + if (classname.length) { + classname += classNames.delineatorElement; + } + + classname += classNames['element' + this.pascalCase(elementName)]; + + if (!modifier) return classname; + + if (classname.length) { + classname += classNames.delineatorModifier; + } + + classname += modifier; + + return classname; + }, + + /** + * Returns the value of a property on a given object via its string key. + * + * @param {object} obj + * @param {string} stringKey + * @return {*} value + */ + + getProperty: function(obj, stringKey) { + var parts = stringKey.split('.'), + returnCurrent = null, + current = '', + i = 0; + + if (!stringKey) { + return obj; + } + + returnCurrent = function(obj) { + if (!obj) { + return null; + } else { + return obj[current]; + } + }; + + while (i < parts.length) { + current = parts[i]; + + obj = returnCurrent(obj); + + i++; + } + + if (typeof obj !== 'undefined') { + return obj; + } else { + return null; + } + } + }; + + mixitup.h = h; + + /** + * The Base class adds instance methods to all other extensible MixItUp classes, + * enabling the calling of any registered hooks. + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.Base = function() {}; + + mixitup.Base.prototype = { + constructor: mixitup.Base, + + /** + * Calls any registered hooks for the provided action. + * + * @memberof mixitup.Base + * @private + * @instance + * @since 2.0.0 + * @param {string} actionName + * @param {Array<*>} args + * @return {void} + */ + + callActions: function(actionName, args) { + var self = this, + hooks = self.constructor.actions[actionName], + extensionName = ''; + + if (!hooks || h.isEmptyObject(hooks)) return; + + for (extensionName in hooks) { + hooks[extensionName].apply(self, args); + } + }, + + /** + * Calls any registered hooks for the provided filter. + * + * @memberof mixitup.Base + * @private + * @instance + * @since 2.0.0 + * @param {string} filterName + * @param {*} input + * @param {Array<*>} args + * @return {*} + */ + + callFilters: function(filterName, input, args) { + var self = this, + hooks = self.constructor.filters[filterName], + output = input, + extensionName = ''; + + if (!hooks || h.isEmptyObject(hooks)) return output; + + args = args || []; + + for (extensionName in hooks) { + args = h.arrayFromList(args); + + args.unshift(output); + + output = hooks[extensionName].apply(self, args); + } + + return output; + } + }; + + /** + * The BaseStatic class holds a set of static methods which are then added to all other + * extensible MixItUp classes as a means of integrating extensions via the addition of new + * methods and/or actions and hooks. + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.BaseStatic = function() { + this.actions = {}; + this.filters = {}; + + /** + * Performs a shallow extend on the class's prototype, adding one or more new members to + * the class in a single operation. + * + * @memberof mixitup.BaseStatic + * @public + * @static + * @since 2.1.0 + * @param {object} extension + * @return {void} + */ + + this.extend = function(extension) { + h.extend(this.prototype, extension); + }; + + /** + * Registers a function to be called on the action hook of the provided name. + * + * @memberof mixitup.BaseStatic + * @public + * @static + * @since 2.1.0 + * @param {string} hookName + * @param {string} extensionName + * @param {function} func + * @return {void} + */ + + this.registerAction = function(hookName, extensionName, func) { + (this.actions[hookName] = this.actions[hookName] || {})[extensionName] = func; + }; + + /** + * Registers a function to be called on the filter of the provided name. + * + * @memberof mixitup.BaseStatic + * @public + * @static + * @since 2.1.0 + * @param {string} hookName + * @param {string} extensionName + * @param {function} func + * @return {void} + */ + + this.registerFilter = function(hookName, extensionName, func) { + (this.filters[hookName] = this.filters[hookName] || {})[extensionName] = func; + }; + }; + + /** + * The `mixitup.Features` class performs all feature and CSS prefix detection + * neccessary for MixItUp to function correctly, as well as storing various + * string and array constants. All feature decection is on evaluation of the + * library and stored in a singleton instance for use by other internal classes. + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.Features = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.boxSizingPrefix = ''; + this.transformPrefix = ''; + this.transitionPrefix = ''; + + this.boxSizingPrefix = ''; + this.transformProp = ''; + this.transformRule = ''; + this.transitionProp = ''; + this.perspectiveProp = ''; + this.perspectiveOriginProp = ''; + + this.has = new mixitup.Has(); + + this.canary = null; + + this.BOX_SIZING_PROP = 'boxSizing'; + this.TRANSITION_PROP = 'transition'; + this.TRANSFORM_PROP = 'transform'; + this.PERSPECTIVE_PROP = 'perspective'; + this.PERSPECTIVE_ORIGIN_PROP = 'perspectiveOrigin'; + this.VENDORS = ['Webkit', 'moz', 'O', 'ms']; + + this.TWEENABLE = [ + 'opacity', + 'width', 'height', + 'marginRight', 'marginBottom', + 'x', 'y', + 'scale', + 'translateX', 'translateY', 'translateZ', + 'rotateX', 'rotateY', 'rotateZ' + ]; + + this.callActions('afterConstruct'); + }; + + mixitup.BaseStatic.call(mixitup.Features); + + mixitup.Features.prototype = Object.create(mixitup.Base.prototype); + + h.extend(mixitup.Features.prototype, + /** @lends mixitup.Features */ + { + constructor: mixitup.Features, + + /** + * @private + * @return {void} + */ + + init: function() { + var self = this; + + self.callActions('beforeInit', arguments); + + self.canary = document.createElement('div'); + + self.setPrefixes(); + self.runTests(); + + self.callActions('beforeInit', arguments); + }, + + /** + * @private + * @return {void} + */ + + runTests: function() { + var self = this; + + self.callActions('beforeRunTests', arguments); + + self.has.promises = typeof window.Promise === 'function'; + self.has.transitions = self.transitionPrefix !== 'unsupported'; + + self.callActions('afterRunTests', arguments); + + h.freeze(self.has); + }, + + /** + * @private + * @return {void} + */ + + setPrefixes: function() { + var self = this; + + self.callActions('beforeSetPrefixes', arguments); + + self.transitionPrefix = h.getPrefix(self.canary, 'Transition', self.VENDORS); + self.transformPrefix = h.getPrefix(self.canary, 'Transform', self.VENDORS); + self.boxSizingPrefix = h.getPrefix(self.canary, 'BoxSizing', self.VENDORS); + + self.boxSizingProp = self.boxSizingPrefix ? + self.boxSizingPrefix + h.pascalCase(self.BOX_SIZING_PROP) : self.BOX_SIZING_PROP; + + self.transitionProp = self.transitionPrefix ? + self.transitionPrefix + h.pascalCase(self.TRANSITION_PROP) : self.TRANSITION_PROP; + + self.transformProp = self.transformPrefix ? + self.transformPrefix + h.pascalCase(self.TRANSFORM_PROP) : self.TRANSFORM_PROP; + + self.transformRule = self.transformPrefix ? + '-' + self.transformPrefix + '-' + self.TRANSFORM_PROP : self.TRANSFORM_PROP; + + self.perspectiveProp = self.transformPrefix ? + self.transformPrefix + h.pascalCase(self.PERSPECTIVE_PROP) : self.PERSPECTIVE_PROP; + + self.perspectiveOriginProp = self.transformPrefix ? + self.transformPrefix + h.pascalCase(self.PERSPECTIVE_ORIGIN_PROP) : + self.PERSPECTIVE_ORIGIN_PROP; + + self.callActions('afterSetPrefixes', arguments); + } + }); + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.Has = function() { + this.transitions = false; + this.promises = false; + + h.seal(this); + }; + + // Assign a singleton instance to `mixitup.features` and initialise: + + mixitup.features = new mixitup.Features(); + + mixitup.features.init(); + + /** + * A group of properties defining the mixer's animation and effects settings. + * + * @constructor + * @memberof mixitup.Config + * @name animation + * @namespace + * @public + * @since 2.0.0 + */ + + mixitup.ConfigAnimation = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether or not animation should be enabled for the MixItUp instance. + * If `false`, all operations will occur instantly and syncronously, although callback + * functions and any returned promises will still be fulfilled. + * + * @example Example: Create a mixer with all animations disabled + * var mixer = mixitup(containerEl, { + * animation: { + * enable: false + * } + * }); + * + * @name enable + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.enable = true; + + /** + * A string of one or more space-seperated properties to which transitions will be + * applied for all filtering animations. + * + * Properties can be listed any order or combination, although they will be applied in a specific + * predefined order to produce consistent results. + * + * To learn more about available effects, experiment with our + * sandbox demo and try out the "Export config" button in the Animation options drop down. + * + * @example Example: Apply "fade" and "translateZ" effects to all animations + * // As targets are filtered in and out, they will fade between + * // opacity 1 and 0 and transform between translateZ(-100px) and + * // translateZ(0). + * + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade translateZ(-100px)' + * } + * }); + * + * @name effects + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default 'fade scale' + */ + + this.effects = 'fade scale'; + + /** + * A string of one or more space-seperated effects to be applied only to filter-in + * animations, overriding `config.animation.effects` if set. + * + * @example Example: Apply downwards vertical translate to targets being filtered in + * + * var mixer = mixitup(containerEl, { + * animation: { + * effectsIn: 'fade translateY(-100%)' + * } + * }); + * + * @name effectsIn + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default '' + */ + + this.effectsIn = ''; + + /** + * A string of one or more space-seperated effects to be applied only to filter-out + * animations, overriding `config.animation.effects` if set. + * + * @example Example: Apply upwards vertical translate to targets being filtered out + * + * var mixer = mixitup(containerEl, { + * animation: { + * effectsOut: 'fade translateY(-100%)' + * } + * }); + * + * @name effectsOut + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default '' + */ + + this.effectsOut = ''; + + /** + * An integer dictating the duration of all MixItUp animations in milliseconds, not + * including any additional delay apllied via the `'stagger'` effect. + * + * @example Example: Apply an animation duration of 200ms to all mixitup animations + * + * var mixer = mixitup(containerEl, { + * animation: { + * duration: 200 + * } + * }); + * + * @name duration + * @memberof mixitup.Config.animation + * @instance + * @type {number} + * @default 600 + */ + + this.duration = 600; + + /** + * A valid CSS3 transition-timing function or shorthand. For a full list of accepted + * values, visit easings.net. + * + * @example Example 1: Apply "ease-in-out" easing to all animations + * + * var mixer = mixitup(containerEl, { + * animation: { + * easing: 'ease-in-out' + * } + * }); + * + * @example Example 2: Apply a custom "cubic-bezier" easing function to all animations + * var mixer = mixitup(containerEl, { + * animation: { + * easing: 'cubic-bezier(0.645, 0.045, 0.355, 1)' + * } + * }); + * + * @name easing + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default 'ease' + */ + + this.easing = 'ease'; + + /** + * A boolean dictating whether or not to apply perspective to the MixItUp container + * during animations. By default, perspective is always applied and creates the + * illusion of three-dimensional space for effects such as `translateZ`, `rotateX`, + * and `rotateY`. + * + * You may wish to disable this and define your own perspective settings via CSS. + * + * @example Example: Prevent perspective from being applied to any 3D transforms + * var mixer = mixitup(containerEl, { + * animation: { + * applyPerspective: false + * } + * }); + * + * @name applyPerspective + * @memberof mixitup.Config.animation + * @instance + * @type {bolean} + * @default true + */ + + this.applyPerspective = true; + + /** + * The perspective distance value to be applied to the container during animations, + * affecting any 3D-transform-based effects. + * + * @example Example: Set a perspective distance of 2000px + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'rotateY(-25deg)', + * perspectiveDistance: '2000px' + * } + * }); + * + * @name perspectiveDistance + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default '3000px' + */ + + this.perspectiveDistance = '3000px'; + + /** + * The perspective-origin value to be applied to the container during animations, + * affecting any 3D-transform-based effects. + * + * @example Example: Set a perspective origin in the top-right of the container + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'transateZ(-200px)', + * perspectiveOrigin: '100% 0' + * } + * }); + * + * @name perspectiveOrigin + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default '50% 50%' + */ + + this.perspectiveOrigin = '50% 50%'; + + /** + * A boolean dictating whether or not to enable the queuing of operations. + * + * If `true` (default), and a control is clicked or an API call is made while another + * operation is progress, the operation will go into the queue and will be automatically exectuted + * when the previous operaitons is finished. + * + * If `false`, any requested operations will be ignored, and the `onMixBusy` callback and `mixBusy` + * event will be fired. If `debug.showWarnings` is enabled, a console warning will also occur. + * + * @example Example: Disable queuing + * var mixer = mixitup(containerEl, { + * animation: { + * queue: false + * } + * }); + * + * @name queue + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.queue = true; + + /** + * An integer dictacting the maximum number of operations allowed in the queue at + * any time, when queuing is enabled. + * + * @example Example: Allow a maximum of 5 operations in the queue at any time + * var mixer = mixitup(containerEl, { + * animation: { + * queueLimit: 5 + * } + * }); + * + * @name queueLimit + * @memberof mixitup.Config.animation + * @instance + * @type {number} + * @default 3 + */ + + this.queueLimit = 3; + + /** + * A boolean dictating whether or not to transition the height and width of the + * container as elements are filtered in and out. If disabled, the container height + * will change abruptly. + * + * It may be desirable to disable this on mobile devices as the CSS `height` and + * `width` properties do not receive GPU-acceleration and can therefore cause stuttering. + * + * @example Example 1: Disable the transitioning of the container height and/or width + * var mixer = mixitup(containerEl, { + * animation: { + * animateResizeContainer: false + * } + * }); + * + * @example Example 2: Disable the transitioning of the container height and/or width for mobile devices only + * var mixer = mixitup(containerEl, { + * animation: { + * animateResizeContainer: myFeatureTests.isMobile ? false : true + * } + * }); + * + * @name animateResizeContainer + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.animateResizeContainer = true; + + /** + * A boolean dictating whether or not to transition the height and width of target + * elements as they change throughout the course of an animation. + * + * This is often a must for flex-box grid layouts where the size of target elements may change + * depending on final their position in relation to their siblings, or for `.changeLayout()` + * operations where the size of targets change between layouts. + * + * NB: This feature requires additional calculations and manipulation to non-hardware-accelerated + * properties which may adversely affect performance on slower devices, and is therefore + * disabled by default. + * + * @example Example: Enable the transitioning of target widths and heights + * var mixer = mixitup(containerEl, { + * animation: { + * animateResizeTargets: true + * } + * }); + * + * @name animateResizeTargets + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default false + */ + + this.animateResizeTargets = false; + + /** + * A custom function used to manipulate the order in which the stagger delay is + * incremented when using the ‘stagger’ effect. + * + * When using the 'stagger' effect, the delay applied to each target element is incremented + * based on its index. You may create a custom function to manipulate the order in which the + * delay is incremented and create engaging non-linear stagger effects. + * + * The function receives the index of the target element as a parameter, and must + * return an integer which serves as the multiplier for the stagger delay. + * + * @example Example 1: Stagger target elements by column in a 3-column grid + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade stagger(100ms)', + * staggerSequence: function(i) { + * return i % 3; + * } + * } + * }); + * + * @example Example 2: Using an algorithm to produce a more complex sequence + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade stagger(100ms)', + * staggerSequence: function(i) { + * return (2*i) - (5*((i/3) - ((1/3) * (i%3)))); + * } + * } + * }); + * + * @name staggerSequence + * @memberof mixitup.Config.animation + * @instance + * @type {function} + * @default null + */ + + this.staggerSequence = null; + + /** + * A boolean dictating whether or not to reverse the direction of `translate` + * and `rotate` transforms for elements being filtered out. + * + * It can be used to create carousel-like animations where elements enter and exit + * from opposite directions. If enabled, the effect `translateX(-100%)` for elements + * being filtered in would become `translateX(100%)` for targets being filtered out. + * + * This functionality can also be achieved by providing seperate effects + * strings for `config.animation.effectsIn` and `config.animation.effectsOut`. + * + * @example Example: Reverse the desired direction on any translate/rotate effect for targets being filtered out + * // Elements being filtered in will be translated from '100%' to '0' while + * // elements being filtered out will be translated from 0 to '-100%' + * + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade translateX(100%)', + * reverseOut: true, + * nudge: false // Disable nudging to create a carousel-like effect + * } + * }); + * + * @name reverseOut + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default false + */ + + this.reverseOut = false; + + /** + * A boolean dictating whether or not to "nudge" the animation path of targets + * when they are being filtered in and out simulatenously. + * + * This has been the default behavior of MixItUp since version 1, but it + * may be desirable to disable this effect when filtering directly from + * one exclusive set of targets to a different exclusive set of targets, + * to create a carousel-like effect, or a generally more subtle animation. + * + * @example Example: Disable the "nudging" of targets being filtered in and out simulatenously + * + * var mixer = mixitup(containerEl, { + * animation: { + * nudge: false + * } + * }); + * + * @name nudge + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.nudge = true; + + /** + * A boolean dictating whether or not to clamp the height of the container while MixItUp's + * geometry tests are carried out before an operation. + * + * To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the + * height of the container might affect its vertical positioning in the viewport + * (e.g. a vertically-centered container), this should be turned off to ensure accurate + * test results and a smooth animation. + * + * @example Example: Disable container height-clamping + * + * var mixer = mixitup(containerEl, { + * animation: { + * clampHeight: false + * } + * }); + * + * @name clampHeight + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.clampHeight = true; + + /** + * A boolean dictating whether or not to clamp the width of the container while MixItUp's + * geometry tests are carried out before an operation. + * + * To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the + * width of the container might affect its horitzontal positioning in the viewport + * (e.g. a horizontall-centered container), this should be turned off to ensure accurate + * test results and a smooth animation. + * + * @example Example: Disable container width-clamping + * + * var mixer = mixitup(containerEl, { + * animation: { + * clampWidth: false + * } + * }); + * + * @name clampWidth + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.clampWidth = true; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigAnimation); + + mixitup.ConfigAnimation.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigAnimation.prototype.constructor = mixitup.ConfigAnimation; + + /** + * A group of properties relating to the behavior of the Mixer. + * + * @constructor + * @memberof mixitup.Config + * @name behavior + * @namespace + * @public + * @since 3.1.12 + */ + + mixitup.ConfigBehavior = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether to allow "live" sorting of the mixer. + * + * Because of the expensive nature of sorting, MixItUp makes use of several + * internal optimizations to skip redundant sorting operations, such as when + * the newly requested sort command is the same as the active one. The caveat + * to this optimization is that "live" edits to the value of a target's sorting + * attribute will be ignored when requesting a re-sort by the same attribute. + * + * By setting to `behavior.liveSort` to `true`, the mixer will always re-sort + * regardless of whether or not the sorting attribute and order have changed. + * + * @example Example: Enabling `liveSort` to allow for re-sorting + * + * var mixer = mixitup(containerEl, { + * behavior: { + * liveSort: true + * }, + * load: { + * sort: 'edited:desc' + * } + * }); + * + * var target = containerEl.children[3]; + * + * console.log(target.getAttribute('data-edited')); // '2015-04-24' + * + * target.setAttribute('data-edited', '2017-08-10'); // Update the target's edited date + * + * mixer.sort('edited:desc') + * .then(function(state) { + * // The target is now at the top of the list + * + * console.log(state.targets[0] === target); // true + * }); + * + * @name liveSort + * @memberof mixitup.Config.behavior + * @instance + * @type {boolean} + * @default false + */ + + this.liveSort = false; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigBehavior); + + mixitup.ConfigBehavior.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigBehavior.prototype.constructor = mixitup.ConfigBehavior; + + /** + * A group of optional callback functions to be invoked at various + * points within the lifecycle of a mixer operation. + * + * Each function is analogous to an event of the same name triggered from the + * container element, and is invoked immediately after it. + * + * All callback functions receive the current `state` object as their first + * argument, as well as other more specific arguments described below. + * + * @constructor + * @memberof mixitup.Config + * @name callbacks + * @namespace + * @public + * @since 2.0.0 + */ + + mixitup.ConfigCallbacks = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A callback function invoked immediately after any MixItUp operation is requested + * and before animations have begun. + * + * A second `futureState` argument is passed to the function which represents the final + * state of the mixer once the requested operation has completed. + * + * @example Example: Adding an `onMixStart` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixStart: function(state, futureState) { + * console.log('Starting operation...'); + * } + * } + * }); + * + * @name onMixStart + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixStart = null; + + /** + * A callback function invoked when a MixItUp operation is requested while another + * operation is in progress, and the animation queue is full, or queueing + * is disabled. + * + * @example Example: Adding an `onMixBusy` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixBusy: function(state) { + * console.log('Mixer busy'); + * } + * } + * }); + * + * @name onMixBusy + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixBusy = null; + + /** + * A callback function invoked after any MixItUp operation has completed, and the + * state has been updated. + * + * @example Example: Adding an `onMixEnd` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixEnd: function(state) { + * console.log('Operation complete'); + * } + * } + * }); + * + * @name onMixEnd + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixEnd = null; + + /** + * A callback function invoked whenever an operation "fails", i.e. no targets + * could be found matching the requested filter. + * + * @example Example: Adding an `onMixFail` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixFail: function(state) { + * console.log('No items could be found matching the requested filter'); + * } + * } + * }); + * + * @name onMixFail + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixFail = null; + + /** + * A callback function invoked whenever a MixItUp control is clicked, and before its + * respective operation is requested. + * + * The clicked element is assigned to the `this` keyword within the function. The original + * click event is passed to the function as the second argument, which can be useful if + * using `` tags as controls where the default behavior needs to be prevented. + * + * Returning `false` from the callback will prevent the control click from triggering + * an operation. + * + * @example Example 1: Adding an `onMixClick` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixClick: function(state, originalEvent) { + * console.log('The control "' + this.innerText + '" was clicked'); + * } + * } + * }); + * + * @example Example 2: Using `onMixClick` to manipulate the original click event + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixClick: function(state, originalEvent) { + * // Prevent original click event from bubbling up: + * originalEvent.stopPropagation(); + * + * // Prevent default behavior of clicked element: + * originalEvent.preventDefault(); + * } + * } + * }); + * + * @example Example 3: Using `onMixClick` to conditionally cancel operations + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixClick: function(state, originalEvent) { + * // Perform some conditional check: + * + * if (myApp.isLoading) { + * // By returning false, we can prevent the control click from triggering an operation. + * + * return false; + * } + * } + * } + * }); + * + * @name onMixClick + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixClick = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigCallbacks); + + mixitup.ConfigCallbacks.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigCallbacks.prototype.constructor = mixitup.ConfigCallbacks; + + /** + * A group of properties relating to clickable control elements. + * + * @constructor + * @memberof mixitup.Config + * @name controls + * @namespace + * @public + * @since 2.0.0 + */ + + mixitup.ConfigControls = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether or not controls should be enabled for the mixer instance. + * + * If `true` (default behavior), MixItUp will search the DOM for any clickable elements with + * `data-filter`, `data-sort` or `data-toggle` attributes, and bind them for click events. + * + * If `false`, no click handlers will be bound, and all functionality must therefore be performed + * via the mixer's API methods. + * + * If you do not intend to use the default controls, setting this property to `false` will + * marginally improve the startup time of your mixer instance, and will also prevent any other active + * mixer instances in the DOM which are bound to controls from controlling the instance. + * + * @example Example: Disabling controls + * var mixer = mixitup(containerEl, { + * controls: { + * enable: false + * } + * }); + * + * // With the default controls disabled, we can only control + * // the mixer via its API methods, e.g.: + * + * mixer.filter('.cat-1'); + * + * @name enable + * @memberof mixitup.Config.controls + * @instance + * @type {boolean} + * @default true + */ + + this.enable = true; + + /** + * A boolean dictating whether or not to use event delegation when binding click events + * to the default controls. + * + * If `false` (default behavior), each control button in the DOM will be found and + * individually bound when a mixer is instantiated, with their corresponding actions + * cached for performance. + * + * If `true`, a single click handler will be applied to the `window` (or container element - see + * `config.controls.scope`), and any click events triggered by elements with `data-filter`, + * `data-sort` or `data-toggle` attributes present will be handled as they propagate upwards. + * + * If you require a user interface where control buttons may be added, removed, or changed during the + * lifetime of a mixer, `controls.live` should be set to `true`. There is a marginal but unavoidable + * performance deficit when using live controls, as the value of each control button must be read + * from the DOM in real time once the click event has propagated. + * + * @example Example: Setting live controls + * var mixer = mixitup(containerEl, { + * controls: { + * live: true + * } + * }); + * + * // Control buttons can now be added, remove and changed without breaking + * // the mixer's UI + * + * @name live + * @memberof mixitup.Config.controls + * @instance + * @type {boolean} + * @default true + */ + + this.live = false; + + /** + * A string dictating the "scope" to use when binding or querying the default controls. The available + * values are `'global'` or `'local'`. + * + * When set to `'global'` (default behavior), MixItUp will query the entire document for control buttons + * to bind, or delegate click events from (see `config.controls.live`). + * + * When set to `'local'`, MixItUp will only query (or bind click events to) its own container element. + * This may be desireable if you require multiple active mixer instances within the same document, with + * controls that would otherwise intefere with each other if scoped globally. + * + * Conversely, if you wish to control multiple instances with a single UI, you would create one + * set of controls and keep the controls scope of each mixer set to `global`. + * + * @example Example: Setting 'local' scoped controls + * var mixerOne = mixitup(containerOne, { + * controls: { + * scope: 'local' + * } + * }); + * + * var mixerTwo = mixitup(containerTwo, { + * controls: { + * scope: 'local' + * } + * }); + * + * // Both mixers can now exist within the same document with + * // isolated controls placed within their container elements. + * + * @name scope + * @memberof mixitup.Config.controls + * @instance + * @type {string} + * @default 'global' + */ + + this.scope = 'global'; // enum: ['local' ,'global'] + + /** + * A string dictating the type of logic to apply when concatenating the filter selectors of + * active toggle buttons (i.e. any clickable element with a `data-toggle` attribute). + * + * If set to `'or'` (default behavior), selectors will be concatenated together as + * a comma-seperated list. For example: + * + * `'.cat-1, .cat-2'` (shows any elements matching `'.cat-1'` OR `'.cat-2'`) + * + * If set to `'and'`, selectors will be directly concatenated together. For example: + * + * `'.cat-1.cat-2'` (shows any elements which match both `'.cat-1'` AND `'.cat-2'`) + * + * @example Example: Setting "and" toggle logic + * var mixer = mixitup(containerEl, { + * controls: { + * toggleLogic: 'and' + * } + * }); + * + * @name toggleLogic + * @memberof mixitup.Config.controls + * @instance + * @type {string} + * @default 'or' + */ + + this.toggleLogic = 'or'; // enum: ['or', 'and'] + + /** + * A string dictating the filter behavior when all toggles are inactive. + * + * When set to `'all'` (default behavior), *all* targets will be shown by default + * when no toggles are active, or at the moment all active toggles are toggled off. + * + * When set to `'none'`, no targets will be shown by default when no toggles are + * active, or at the moment all active toggles are toggled off. + * + * @example Example 1: Setting the default toggle behavior to `'all'` + * var mixer = mixitup(containerEl, { + * controls: { + * toggleDefault: 'all' + * } + * }); + * + * mixer.toggleOn('.cat-2') + * .then(function() { + * // Deactivate all active toggles + * + * return mixer.toggleOff('.cat-2') + * }) + * .then(function(state) { + * console.log(state.activeFilter.selector); // 'all' + * console.log(state.totalShow); // 12 + * }); + * + * @example Example 2: Setting the default toggle behavior to `'none'` + * var mixer = mixitup(containerEl, { + * controls: { + * toggleDefault: 'none' + * } + * }); + * + * mixer.toggleOn('.cat-2') + * .then(function() { + * // Deactivate all active toggles + * + * return mixer.toggleOff('.cat-2') + * }) + * .then(function(state) { + * console.log(state.activeFilter.selector); // 'none' + * console.log(state.totalShow); // 0 + * }); + * + * @name toggleDefault + * @memberof mixitup.Config.controls + * @instance + * @type {string} + * @default 'all' + */ + + this.toggleDefault = 'all'; // enum: ['all', 'none'] + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigControls); + + mixitup.ConfigControls.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigControls.prototype.constructor = mixitup.ConfigControls; + + /** + * A group of properties defining the output and structure of class names programmatically + * added to controls and containers to reflect the state of the mixer. + * + * Most commonly, class names are added to controls by MixItUp to indicate that + * the control is active so that it can be styled accordingly - `'mixitup-control-active'` by default. + * + * Using a "BEM" like structure, each classname is broken into the three parts: + * a block namespace (`'mixitup'`), an element name (e.g. `'control'`), and an optional modifier + * name (e.g. `'active'`) reflecting the state of the element. + * + * By default, each part of the classname is concatenated together using single hyphens as + * delineators, but this can be easily customised to match the naming convention and style of + * your project. + * + * @constructor + * @memberof mixitup.Config + * @name classNames + * @namespace + * @public + * @since 3.0.0 + */ + + mixitup.ConfigClassNames = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * The "block" portion, or top-level namespace added to the start of any class names created by MixItUp. + * + * @example Example 1: changing the `config.classNames.block` value + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio' + * } + * }); + * + * // Active control output: "portfolio-control-active" + * + * @example Example 2: Removing `config.classNames.block` + * var mixer = mixitup(containerEl, { + * classNames: { + * block: '' + * } + * }); + * + * // Active control output: "control-active" + * + * @name block + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'mixitup' + */ + + this.block = 'mixitup'; + + /** + * The "element" portion of the class name added to container. + * + * @name elementContainer + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'container' + */ + + this.elementContainer = 'container'; + + /** + * The "element" portion of the class name added to filter controls. + * + * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but + * each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + * + * @example Example 1: changing the `config.classNames.elementFilter` value + * var mixer = mixitup(containerEl, { + * classNames: { + * elementFilter: 'filter' + * } + * }); + * + * // Active filter output: "mixitup-filter-active" + * + * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementFilter` values + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio', + * elementFilter: 'filter' + * } + * }); + * + * // Active filter output: "portfolio-filter-active" + * + * @name elementFilter + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'control' + */ + + this.elementFilter = 'control'; + + /** + * The "element" portion of the class name added to sort controls. + * + * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but + * each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + * + * @example Example 1: changing the `config.classNames.elementSort` value + * var mixer = mixitup(containerEl, { + * classNames: { + * elementSort: 'sort' + * } + * }); + * + * // Active sort output: "mixitup-sort-active" + * + * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementSort` values + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio', + * elementSort: 'sort' + * } + * }); + * + * // Active sort output: "portfolio-sort-active" + * + * @name elementSort + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'control' + */ + + this.elementSort = 'control'; + + /** + * The "element" portion of the class name added to multimix controls. + * + * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but + * each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + * + * @example Example 1: changing the `config.classNames.elementMultimix` value + * var mixer = mixitup(containerEl, { + * classNames: { + * elementMultimix: 'multimix' + * } + * }); + * + * // Active multimix output: "mixitup-multimix-active" + * + * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementMultimix` values + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio', + * elementSort: 'multimix' + * } + * }); + * + * // Active multimix output: "portfolio-multimix-active" + * + * @name elementMultimix + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'control' + */ + + this.elementMultimix = 'control'; + + /** + * The "element" portion of the class name added to toggle controls. + * + * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but + * each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + * + * @example Example 1: changing the `config.classNames.elementToggle` value + * var mixer = mixitup(containerEl, { + * classNames: { + * elementToggle: 'toggle' + * } + * }); + * + * // Active toggle output: "mixitup-toggle-active" + * + * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementToggle` values + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio', + * elementToggle: 'toggle' + * } + * }); + * + * // Active toggle output: "portfolio-toggle-active" + * + * @name elementToggle + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'control' + */ + + this.elementToggle = 'control'; + + /** + * The "modifier" portion of the class name added to active controls. + * @name modifierActive + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'active' + */ + + this.modifierActive = 'active'; + + /** + * The "modifier" portion of the class name added to disabled controls. + * + * @name modifierDisabled + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'disabled' + */ + + this.modifierDisabled = 'disabled'; + + /** + * The "modifier" portion of the class name added to the container when in a "failed" state. + * + * @name modifierFailed + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'failed' + */ + + this.modifierFailed = 'failed'; + + /** + * The delineator used between the "block" and "element" portions of any class name added by MixItUp. + * + * If the block portion is ommited by setting it to an empty string, no delineator will be added. + * + * @example Example: changing the delineator to match BEM convention + * var mixer = mixitup(containerEl, { + * classNames: { + * delineatorElement: '__' + * } + * }); + * + * // example active control output: "mixitup__control-active" + * + * @name delineatorElement + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default '-' + */ + + this.delineatorElement = '-'; + + /** + * The delineator used between the "element" and "modifier" portions of any class name added by MixItUp. + * + * If the element portion is ommited by setting it to an empty string, no delineator will be added. + * + * @example Example: changing both delineators to match BEM convention + * var mixer = mixitup(containerEl, { + * classNames: { + * delineatorElement: '__' + * delineatorModifier: '--' + * } + * }); + * + * // Active control output: "mixitup__control--active" + * + * @name delineatorModifier + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default '-' + */ + + this.delineatorModifier = '-'; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigClassNames); + + mixitup.ConfigClassNames.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigClassNames.prototype.constructor = mixitup.ConfigClassNames; + + /** + * A group of properties relating to MixItUp's dataset API. + * + * @constructor + * @memberof mixitup.Config + * @name data + * @namespace + * @public + * @since 3.0.0 + */ + + mixitup.ConfigData = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A string specifying the name of the key containing your data model's unique + * identifier (UID). To use the dataset API, a UID key must be specified and + * be present and unique on all objects in the dataset you provide to MixItUp. + * + * For example, if your dataset is made up of MongoDB documents, the UID + * key would be `'id'` or `'_id'`. + * + * @example Example: Setting the UID to `'id'` + * var mixer = mixitup(containerEl, { + * data: { + * uidKey: 'id' + * } + * }); + * + * @name uidKey + * @memberof mixitup.Config.data + * @instance + * @type {string} + * @default '' + */ + + this.uidKey = ''; + + /** + * A boolean dictating whether or not MixItUp should "dirty check" each object in + * your dataset for changes whenever `.dataset()` is called, and re-render any targets + * for which a change is found. + * + * Depending on the complexity of your data model, dirty checking can be expensive + * and is therefore disabled by default. + * + * NB: For changes to be detected, a new immutable instance of the edited model must be + * provided to mixitup, rather than manipulating properties on the existing instance. + * If your changes are a result of a DB write and read, you will most likely be calling + * `.dataset()` with a clean set of objects each time, so this will not be an issue. + * + * @example Example: Enabling dirty checking + * + * var myDataset = [ + * { + * id: 0, + * title: "Blog Post Title 0" + * ... + * }, + * { + * id: 1, + * title: "Blog Post Title 1" + * ... + * } + * ]; + * + * // Instantiate a mixer with a pre-loaded dataset, and a target renderer + * // function defined + * + * var mixer = mixitup(containerEl, { + * data: { + * uidKey: 'id', + * dirtyCheck: true + * }, + * load: { + * dataset: myDataset + * }, + * render: { + * target: function() { ... } + * } + * }); + * + * // For illustration, we will clone and edit the second object in the dataset. + * // NB: this would typically be done server-side in response to a DB update, + * and then re-queried via an API. + * + * myDataset[1] = Object.assign({}, myDataset[1]); + * + * myDataset[1].title = 'Blog Post Title 11'; + * + * mixer.dataset(myDataset) + * .then(function() { + * // the target with ID "1", will be re-rendered reflecting its new title + * }); + * + * @name dirtyCheck + * @memberof mixitup.Config.data + * @instance + * @type {boolean} + * @default false + */ + + this.dirtyCheck = false; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigData); + + mixitup.ConfigData.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigData.prototype.constructor = mixitup.ConfigData; + + /** + * A group of properties allowing the toggling of various debug features. + * + * @constructor + * @memberof mixitup.Config + * @name debug + * @namespace + * @public + * @since 3.0.0 + */ + + mixitup.ConfigDebug = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether or not the mixer instance returned by the + * `mixitup()` factory function should expose private properties and methods. + * + * By default, mixer instances only expose their public API, but enabling + * debug mode will give you access to various mixer internals which may aid + * in debugging, or the authoring of extensions. + * + * @example Example: Enabling debug mode + * + * var mixer = mixitup(containerEl, { + * debug: { + * enable: true + * } + * }); + * + * // Private properties and methods will now be visible on the mixer instance: + * + * console.log(mixer); + * + * @name enable + * @memberof mixitup.Config.debug + * @instance + * @type {boolean} + * @default false + */ + + this.enable = false; + + /** + * A boolean dictating whether or not warnings should be shown when various + * common gotchas occur. + * + * Warnings are intended to provide insights during development when something + * occurs that is not a fatal, but may indicate an issue with your integration, + * and are therefore turned on by default. However, you may wish to disable + * them in production. + * + * @example Example 1: Disabling warnings + * + * var mixer = mixitup(containerEl, { + * debug: { + * showWarnings: false + * } + * }); + * + * @example Example 2: Disabling warnings based on environment + * + * var showWarnings = myAppConfig.environment === 'development' ? true : false; + * + * var mixer = mixitup(containerEl, { + * debug: { + * showWarnings: showWarnings + * } + * }); + * + * @name showWarnings + * @memberof mixitup.Config.debug + * @instance + * @type {boolean} + * @default true + */ + + this.showWarnings = true; + + /** + * Used for server-side testing only. + * + * @private + * @name fauxAsync + * @memberof mixitup.Config.debug + * @instance + * @type {boolean} + * @default false + */ + + this.fauxAsync = false; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigDebug); + + mixitup.ConfigDebug.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigDebug.prototype.constructor = mixitup.ConfigDebug; + + /** + * A group of properties relating to the layout of the container. + * + * @constructor + * @memberof mixitup.Config + * @name layout + * @namespace + * @public + * @since 3.0.0 + */ + + mixitup.ConfigLayout = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether or not mixitup should query all descendants + * of the container for targets, or only immediate children. + * + * By default, mixitup will query all descendants matching the + * `selectors.target` selector when indexing targets upon instantiation. + * This allows for targets to be nested inside a sub-container which is + * useful when ring-fencing targets from locally scoped controls in your + * markup (see `controls.scope`). + * + * However, if you are building a more complex UI requiring the nesting + * of mixers within mixers, you will most likely want to limit targets to + * immediate children of the container by setting this property to `false`. + * + * @example Example: Restricting targets to immediate children + * + * var mixer = mixitup(containerEl, { + * layout: { + * allowNestedTargets: false + * } + * }); + * + * @name allowNestedTargets + * @memberof mixitup.Config.layout + * @instance + * @type {boolean} + * @default true + */ + + this.allowNestedTargets = true; + + /** + * A string specifying an optional class name to apply to the container when in + * its default state. + * + * By changing this class name or adding a class name to the container via the + * `.changeLayout()` API method, the CSS layout of the container can be changed, + * and MixItUp will attemp to gracefully animate the container and its targets + * between states. + * + * @example Example 1: Specifying a container class name + * + * var mixer = mixitup(containerEl, { + * layout: { + * containerClassName: 'grid' + * } + * }); + * + * @example Example 2: Changing the default class name with `.changeLayout()` + * + * var mixer = mixitup(containerEl, { + * layout: { + * containerClassName: 'grid' + * } + * }); + * + * mixer.changeLayout('list') + * .then(function(state) { + * console.log(state.activeContainerClass); // "list" + * }); + * + * @name containerClassName + * @memberof mixitup.Config.layout + * @instance + * @type {string} + * @default '' + */ + + this.containerClassName = ''; + + /** + * A reference to a non-target sibling element after which to insert targets + * when there are no targets in the container. + * + * @example Example: Setting a `siblingBefore` reference element + * + * var addButton = containerEl.querySelector('button'); + * + * var mixer = mixitup(containerEl, { + * layout: { + * siblingBefore: addButton + * } + * }); + * + * @name siblingBefore + * @memberof mixitup.Config.layout + * @instance + * @type {HTMLElement} + * @default null + */ + + this.siblingBefore = null; + + /** + * A reference to a non-target sibling element before which to insert targets + * when there are no targets in the container. + * + * @example Example: Setting an `siblingAfter` reference element + * + * var gap = containerEl.querySelector('.gap'); + * + * var mixer = mixitup(containerEl, { + * layout: { + * siblingAfter: gap + * } + * }); + * + * @name siblingAfter + * @memberof mixitup.Config.layout + * @instance + * @type {HTMLElement} + * @default null + */ + + this.siblingAfter = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigLayout); + + mixitup.ConfigLayout.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigLayout.prototype.constructor = mixitup.ConfigLayout; + + /** + * A group of properties defining the initial state of the mixer on load (instantiation). + * + * @constructor + * @memberof mixitup.Config + * @name load + * @namespace + * @public + * @since 2.0.0 + */ + + mixitup.ConfigLoad = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A string defining any filtering to be statically applied to the mixer on load. + * As per the `.filter()` API, this can be any valid selector string, or the + * values `'all'` or `'none'`. + * + * @example Example 1: Defining an initial filter selector to be applied on load + * + * // The mixer will show only those targets matching '.category-a' on load. + * + * var mixer = mixitup(containerEl, { + * load: { + * filter: '.category-a' + * } + * }); + * + * @example Example 2: Hiding all targets on load + * + * // The mixer will show hide all targets on load. + * + * var mixer = mixitup(containerEl, { + * load: { + * filter: 'none' + * } + * }); + * + * @name filter + * @memberof mixitup.Config.load + * @instance + * @type {string} + * @default 'all' + */ + + this.filter = 'all'; + + /** + * A string defining any sorting to be statically applied to the mixer on load. + * As per the `.sort()` API, this should be a valid "sort string" made up of + * an attribute to sort by (or `'default'`) followed by an optional sorting + * order, or the value `'random'`; + * + * @example Example: Defining sorting to be applied on load + * + * // The mixer will sort the container by the value of the `data-published-date` + * // attribute, in descending order. + * + * var mixer = mixitup(containerEl, { + * load: { + * sort: 'published-date:desc' + * } + * }); + * + * @name sort + * @memberof mixitup.Config.load + * @instance + * @type {string} + * @default 'default:asc' + */ + + this.sort = 'default:asc'; + + /** + * An array of objects representing the underlying data of any pre-rendered targets, + * when using the `.dataset()` API. + * + * NB: If targets are pre-rendered when the mixer is instantiated, this must be set. + * + * @example Example: Defining the initial underyling dataset + * + * var myDataset = [ + * { + * id: 0, + * title: "Blog Post Title 0", + * ... + * }, + * { + * id: 1, + * title: "Blog Post Title 1", + * ... + * } + * ]; + * + * var mixer = mixitup(containerEl, { + * data: { + * uidKey: 'id' + * }, + * load: { + * dataset: myDataset + * } + * }); + * + * @name dataset + * @memberof mixitup.Config.load + * @instance + * @type {Array.} + * @default null + */ + + this.dataset = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigLoad); + + mixitup.ConfigLoad.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigLoad.prototype.constructor = mixitup.ConfigLoad; + + /** + * A group of properties defining the selectors used to query elements within a mixitup container. + * + * @constructor + * @memberof mixitup.Config + * @name selectors + * @namespace + * @public + * @since 3.0.0 + */ + + mixitup.ConfigSelectors = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A selector string used to query and index target elements within the container. + * + * By default, the class selector `'.mix'` is used, but this can be changed to an + * attribute or element selector to match the style of your project. + * + * @example Example 1: Changing the target selector + * + * var mixer = mixitup(containerEl, { + * selectors: { + * target: '.portfolio-item' + * } + * }); + * + * @example Example 2: Using an attribute selector as a target selector + * + * // The mixer will search for any children with the attribute `data-ref="mix"` + * + * var mixer = mixitup(containerEl, { + * selectors: { + * target: '[data-ref="mix"]' + * } + * }); + * + * @name target + * @memberof mixitup.Config.selectors + * @instance + * @type {string} + * @default '.mix' + */ + + this.target = '.mix'; + + /** + * A optional selector string used to add further specificity to the querying of control elements, + * in addition to their mandatory data attribute (e.g. `data-filter`, `data-toggle`, `data-sort`). + * + * This can be used if other elements in your document must contain the above attributes + * (e.g. for use in third-party scripts), and would otherwise interfere with MixItUp. Adding + * an additional `control` selector of your choice allows MixItUp to restrict event handling + * to only those elements matching the defined selector. + * + * @name control + * @memberof mixitup.Config.selectors + * @instance + * @type {string} + * @default '' + * + * @example Example 1: Adding a `selectors.control` selector + * + * var mixer = mixitup(containerEl, { + * selectors: { + * control: '.mixitup-control' + * } + * }); + * + * // Will not be handled: + * // + * + * // Will be handled: + * // + */ + + this.control = ''; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigSelectors); + + mixitup.ConfigSelectors.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigSelectors.prototype.constructor = mixitup.ConfigSelectors; + + /** + * A group of optional render functions for creating and updating elements. + * + * All render functions receive a data object, and should return a valid HTML string. + * + * @constructor + * @memberof mixitup.Config + * @name render + * @namespace + * @public + * @since 3.0.0 + */ + + mixitup.ConfigRender = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A function returning an HTML string representing a target element, or a reference to a + * single DOM element. + * + * The function is invoked as part of the `.dataset()` API, whenever a new item is added + * to the dataset, or an item in the dataset changes (if `dataset.dirtyCheck` is enabled). + * + * The function receives the relevant dataset item as its first parameter. + * + * @example Example 1: Using string concatenation + * + * var mixer = mixitup(containerEl, { + * render: { + * target: function(item) { + * return ( + * '<div class="mix">' + + * '<h2>' + item.title + '</h2>' + + * '</div>' + * ); + * } + * } + * }); + * + * @example Example 2: Using an ES2015 template literal + * + * var mixer = mixitup(containerEl, { + * render: { + * target: function(item) { + * return ( + * `<div class="mix"> + * <h2>${item.title}</h2> + * </div>` + * ); + * } + * } + * }); + * + * @example Example 3: Using a Handlebars template + * + * var targetTemplate = Handlebars.compile('<div class="mix"><h2>{{title}}</h2></div>'); + * + * var mixer = mixitup(containerEl, { + * render: { + * target: targetTemplate + * } + * }); + * + * @example Example 4: Returning a DOM element + * + * var mixer = mixitup(containerEl, { + * render: { + * target: function(item) { + * // Create a single element using your framework's built-in renderer + * + * var el = ... + * + * return el; + * } + * } + * }); + * + * @name target + * @memberof mixitup.Config.render + * @instance + * @type {function} + * @default 'null' + */ + + this.target = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigRender); + + mixitup.ConfigRender.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigRender.prototype.constructor = mixitup.ConfigRender; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.ConfigTemplates = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ConfigTemplates); + + mixitup.ConfigTemplates.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ConfigTemplates.prototype.constructor = mixitup.ConfigTemplates; + + /** + * `mixitup.Config` is an interface used for customising the functionality of a + * mixer instance. It is organised into several semantically distinct sub-objects, + * each one pertaining to a particular aspect of MixItUp functionality. + * + * An object literal containing any or all of the available properies, + * known as the "configuration object", can be passed as the second parameter to + * the `mixitup` factory function when creating a mixer instance to customise its + * functionality as needed. + * + * If no configuration object is passed, the mixer instance will take on the default + * configuration values detailed below. + * + * @example Example 1: Creating and passing the configuration object + * // Create a configuration object with desired values + * + * var config = { + * animation: { + * enable: false + * }, + * selectors: { + * target: '.item' + * } + * }; + * + * // Pass the configuration object to the mixitup factory function + * + * var mixer = mixitup(containerEl, config); + * + * @example Example 2: Passing the configuration object inline + * // Typically, the configuration object is passed inline for brevity. + * + * var mixer = mixitup(containerEl, { + * controls: { + * live: true, + * toggleLogic: 'and' + * } + * }); + * + * + * @constructor + * @memberof mixitup + * @namespace + * @public + * @since 2.0.0 + */ + + mixitup.Config = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.animation = new mixitup.ConfigAnimation(); + this.behavior = new mixitup.ConfigBehavior(); + this.callbacks = new mixitup.ConfigCallbacks(); + this.controls = new mixitup.ConfigControls(); + this.classNames = new mixitup.ConfigClassNames(); + this.data = new mixitup.ConfigData(); + this.debug = new mixitup.ConfigDebug(); + this.layout = new mixitup.ConfigLayout(); + this.load = new mixitup.ConfigLoad(); + this.selectors = new mixitup.ConfigSelectors(); + this.render = new mixitup.ConfigRender(); + this.templates = new mixitup.ConfigTemplates(); + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.Config); + + mixitup.Config.prototype = Object.create(mixitup.Base.prototype); + + mixitup.Config.prototype.constructor = mixitup.Config; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.MixerDom = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.document = null; + this.body = null; + this.container = null; + this.parent = null; + this.targets = []; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.MixerDom); + + mixitup.MixerDom.prototype = Object.create(mixitup.Base.prototype); + + mixitup.MixerDom.prototype.constructor = mixitup.MixerDom; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.UiClassNames = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.base = ''; + this.active = ''; + this.disabled = ''; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.UiClassNames); + + mixitup.UiClassNames.prototype = Object.create(mixitup.Base.prototype); + + mixitup.UiClassNames.prototype.constructor = mixitup.UiClassNames; + + /** + * An object into which all arbitrary arguments sent to '.dataset()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.CommandDataset = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.dataset = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.CommandDataset); + + mixitup.CommandDataset.prototype = Object.create(mixitup.Base.prototype); + + mixitup.CommandDataset.prototype.constructor = mixitup.CommandDataset; + + /** + * An object into which all arbitrary arguments sent to '.multimix()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.CommandMultimix = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.filter = null; + this.sort = null; + this.insert = null; + this.remove = null; + this.changeLayout = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.CommandMultimix); + + mixitup.CommandMultimix.prototype = Object.create(mixitup.Base.prototype); + + mixitup.CommandMultimix.prototype.constructor = mixitup.CommandMultimix; + + /** + * An object into which all arbitrary arguments sent to '.filter()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.CommandFilter = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.selector = ''; + this.collection = null; + this.action = 'show'; // enum: ['show', 'hide'] + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.CommandFilter); + + mixitup.CommandFilter.prototype = Object.create(mixitup.Base.prototype); + + mixitup.CommandFilter.prototype.constructor = mixitup.CommandFilter; + + /** + * An object into which all arbitrary arguments sent to '.sort()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.CommandSort = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.sortString = ''; + this.attribute = ''; + this.order = 'asc'; + this.collection = null; + this.next = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.CommandSort); + + mixitup.CommandSort.prototype = Object.create(mixitup.Base.prototype); + + mixitup.CommandSort.prototype.constructor = mixitup.CommandSort; + + /** + * An object into which all arbitrary arguments sent to '.insert()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.CommandInsert = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.index = 0; + this.collection = []; + this.position = 'before'; // enum: ['before', 'after'] + this.sibling = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.CommandInsert); + + mixitup.CommandInsert.prototype = Object.create(mixitup.Base.prototype); + + mixitup.CommandInsert.prototype.constructor = mixitup.CommandInsert; + + /** + * An object into which all arbitrary arguments sent to '.remove()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.CommandRemove = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.targets = []; + this.collection = []; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.CommandRemove); + + mixitup.CommandRemove.prototype = Object.create(mixitup.Base.prototype); + + mixitup.CommandRemove.prototype.constructor = mixitup.CommandRemove; + + /** + * An object into which all arbitrary arguments sent to '.changeLayout()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.CommandChangeLayout = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.containerClassName = ''; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.CommandChangeLayout); + + mixitup.CommandChangeLayout.prototype = Object.create(mixitup.Base.prototype); + + mixitup.CommandChangeLayout.prototype.constructor = mixitup.CommandChangeLayout; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + * @param {string} type + * @param {string} selector + * @param {boolean} [live] + * @param {string} [parent] + * An optional string representing the name of the mixer.dom property containing a reference to a parent element. + */ + + mixitup.ControlDefinition = function(type, selector, live, parent) { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.type = type; + this.selector = selector; + this.live = live || false; + this.parent = parent || ''; + + this.callActions('afterConstruct'); + + h.freeze(this); + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.ControlDefinition); + + mixitup.ControlDefinition.prototype = Object.create(mixitup.Base.prototype); + + mixitup.ControlDefinition.prototype.constructor = mixitup.ControlDefinition; + + mixitup.controlDefinitions = []; + + mixitup.controlDefinitions.push(new mixitup.ControlDefinition('multimix', '[data-filter][data-sort]')); + mixitup.controlDefinitions.push(new mixitup.ControlDefinition('filter', '[data-filter]')); + mixitup.controlDefinitions.push(new mixitup.ControlDefinition('sort', '[data-sort]')); + mixitup.controlDefinitions.push(new mixitup.ControlDefinition('toggle', '[data-toggle]')); + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.Control = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.el = null; + this.selector = ''; + this.bound = []; + this.pending = -1; + this.type = ''; + this.status = 'inactive'; // enum: ['inactive', 'active', 'disabled', 'live'] + this.filter = ''; + this.sort = ''; + this.canDisable = false; + this.handler = null; + this.classNames = new mixitup.UiClassNames(); + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.Control); + + mixitup.Control.prototype = Object.create(mixitup.Base.prototype); + + h.extend(mixitup.Control.prototype, + /** @lends mixitup.Control */ + { + constructor: mixitup.Control, + + /** + * @private + * @param {HTMLElement} el + * @param {string} type + * @param {string} selector + */ + + init: function(el, type, selector) { + var self = this; + + this.callActions('beforeInit', arguments); + + self.el = el; + self.type = type; + self.selector = selector; + + if (self.selector) { + self.status = 'live'; + } else { + self.canDisable = typeof self.el.disable === 'boolean'; + + switch (self.type) { + case 'filter': + self.filter = self.el.getAttribute('data-filter'); + + break; + case 'toggle': + self.filter = self.el.getAttribute('data-toggle'); + + break; + case 'sort': + self.sort = self.el.getAttribute('data-sort'); + + break; + case 'multimix': + self.filter = self.el.getAttribute('data-filter'); + self.sort = self.el.getAttribute('data-sort'); + + break; + } + } + + self.bindClick(); + + mixitup.controls.push(self); + + this.callActions('afterInit', arguments); + }, + + /** + * @private + * @param {mixitup.Mixer} mixer + * @return {boolean} + */ + + isBound: function(mixer) { + var self = this, + isBound = false; + + this.callActions('beforeIsBound', arguments); + + isBound = self.bound.indexOf(mixer) > -1; + + return self.callFilters('afterIsBound', isBound, arguments); + }, + + /** + * @private + * @param {mixitup.Mixer} mixer + * @return {void} + */ + + addBinding: function(mixer) { + var self = this; + + this.callActions('beforeAddBinding', arguments); + + if (!self.isBound()) { + self.bound.push(mixer); + } + + this.callActions('afterAddBinding', arguments); + }, + + /** + * @private + * @param {mixitup.Mixer} mixer + * @return {void} + */ + + removeBinding: function(mixer) { + var self = this, + removeIndex = -1; + + this.callActions('beforeRemoveBinding', arguments); + + if ((removeIndex = self.bound.indexOf(mixer)) > -1) { + self.bound.splice(removeIndex, 1); + } + + if (self.bound.length < 1) { + // No bindings exist, unbind event click handlers + + self.unbindClick(); + + // Remove from `mixitup.controls` list + + removeIndex = mixitup.controls.indexOf(self); + + mixitup.controls.splice(removeIndex, 1); + + if (self.status === 'active') { + self.renderStatus(self.el, 'inactive'); + } + } + + this.callActions('afterRemoveBinding', arguments); + }, + + /** + * @private + * @return {void} + */ + + bindClick: function() { + var self = this; + + this.callActions('beforeBindClick', arguments); + + self.handler = function(e) { + self.handleClick(e); + }; + + h.on(self.el, 'click', self.handler); + + this.callActions('afterBindClick', arguments); + }, + + /** + * @private + * @return {void} + */ + + unbindClick: function() { + var self = this; + + this.callActions('beforeUnbindClick', arguments); + + h.off(self.el, 'click', self.handler); + + self.handler = null; + + this.callActions('afterUnbindClick', arguments); + }, + + /** + * @private + * @param {MouseEvent} e + * @return {void} + */ + + handleClick: function(e) { + var self = this, + button = null, + mixer = null, + isActive = false, + returnValue = void(0), + command = {}, + clone = null, + commands = [], + i = -1; + + this.callActions('beforeHandleClick', arguments); + + this.pending = 0; + + mixer = self.bound[0]; + + if (!self.selector) { + button = self.el; + } else { + button = h.closestParent(e.target, mixer.config.selectors.control + self.selector, true, mixer.dom.document); + } + + if (!button) { + self.callActions('afterHandleClick', arguments); + + return; + } + + switch (self.type) { + case 'filter': + command.filter = self.filter || button.getAttribute('data-filter'); + + break; + case 'sort': + command.sort = self.sort || button.getAttribute('data-sort'); + + break; + case 'multimix': + command.filter = self.filter || button.getAttribute('data-filter'); + command.sort = self.sort || button.getAttribute('data-sort'); + + break; + case 'toggle': + command.filter = self.filter || button.getAttribute('data-toggle'); + + if (self.status === 'live') { + isActive = h.hasClass(button, self.classNames.active); + } else { + isActive = self.status === 'active'; + } + + break; + } + + for (i = 0; i < self.bound.length; i++) { + // Create a clone of the command for each bound mixer instance + + clone = new mixitup.CommandMultimix(); + + h.extend(clone, command); + + commands.push(clone); + } + + commands = self.callFilters('commandsHandleClick', commands, arguments); + + self.pending = self.bound.length; + + for (i = 0; mixer = self.bound[i]; i++) { + command = commands[i]; + + if (!command) { + // An extension may set a command null to indicate that the click should not be handled + + continue; + } + + if (!mixer.lastClicked) { + mixer.lastClicked = button; + } + + mixitup.events.fire('mixClick', mixer.dom.container, { + state: mixer.state, + instance: mixer, + originalEvent: e, + control: mixer.lastClicked + }, mixer.dom.document); + + if (typeof mixer.config.callbacks.onMixClick === 'function') { + returnValue = mixer.config.callbacks.onMixClick.call(mixer.lastClicked, mixer.state, e, mixer); + + if (returnValue === false) { + // User has returned `false` from the callback, so do not handle click + + continue; + } + } + + if (self.type === 'toggle') { + isActive ? mixer.toggleOff(command.filter) : mixer.toggleOn(command.filter); + } else { + mixer.multimix(command); + } + } + + this.callActions('afterHandleClick', arguments); + }, + + /** + * @param {object} command + * @param {Array} toggleArray + * @return {void} + */ + + update: function(command, toggleArray) { + var self = this, + actions = new mixitup.CommandMultimix(); + + self.callActions('beforeUpdate', arguments); + + self.pending--; + + self.pending = Math.max(0, self.pending); + + if (self.pending > 0) return; + + if (self.status === 'live') { + // Live control (status unknown) + + self.updateLive(command, toggleArray); + } else { + // Static control + + actions.sort = self.sort; + actions.filter = self.filter; + + self.callFilters('actionsUpdate', actions, arguments); + + self.parseStatusChange(self.el, command, actions, toggleArray); + } + + self.callActions('afterUpdate', arguments); + }, + + /** + * @param {mixitup.CommandMultimix} command + * @param {Array} toggleArray + * @return {void} + */ + + updateLive: function(command, toggleArray) { + var self = this, + controlButtons = null, + actions = null, + button = null, + i = -1; + + self.callActions('beforeUpdateLive', arguments); + + if (!self.el) return; + + controlButtons = self.el.querySelectorAll(self.selector); + + for (i = 0; button = controlButtons[i]; i++) { + actions = new mixitup.CommandMultimix(); + + switch (self.type) { + case 'filter': + actions.filter = button.getAttribute('data-filter'); + + break; + case 'sort': + actions.sort = button.getAttribute('data-sort'); + + break; + case 'multimix': + actions.filter = button.getAttribute('data-filter'); + actions.sort = button.getAttribute('data-sort'); + + break; + case 'toggle': + actions.filter = button.getAttribute('data-toggle'); + + break; + } + + actions = self.callFilters('actionsUpdateLive', actions, arguments); + + self.parseStatusChange(button, command, actions, toggleArray); + } + + self.callActions('afterUpdateLive', arguments); + }, + + /** + * @param {HTMLElement} button + * @param {mixitup.CommandMultimix} command + * @param {mixitup.CommandMultimix} actions + * @param {Array} toggleArray + * @return {void} + */ + + parseStatusChange: function(button, command, actions, toggleArray) { + var self = this, + alias = '', + toggle = '', + i = -1; + + self.callActions('beforeParseStatusChange', arguments); + + switch (self.type) { + case 'filter': + if (command.filter === actions.filter) { + self.renderStatus(button, 'active'); + } else { + self.renderStatus(button, 'inactive'); + } + + break; + case 'multimix': + if (command.sort === actions.sort && command.filter === actions.filter) { + self.renderStatus(button, 'active'); + } else { + self.renderStatus(button, 'inactive'); + } + + break; + case 'sort': + if (command.sort.match(/:asc/g)) { + alias = command.sort.replace(/:asc/g, ''); + } + + if (command.sort === actions.sort || alias === actions.sort) { + self.renderStatus(button, 'active'); + } else { + self.renderStatus(button, 'inactive'); + } + + break; + case 'toggle': + if (toggleArray.length < 1) self.renderStatus(button, 'inactive'); + + if (command.filter === actions.filter) { + self.renderStatus(button, 'active'); + } + + for (i = 0; i < toggleArray.length; i++) { + toggle = toggleArray[i]; + + if (toggle === actions.filter) { + // Button matches one active toggle + + self.renderStatus(button, 'active'); + + break; + } + + self.renderStatus(button, 'inactive'); + } + + break; + } + + self.callActions('afterParseStatusChange', arguments); + }, + + /** + * @param {HTMLElement} button + * @param {string} status + * @return {void} + */ + + renderStatus: function(button, status) { + var self = this; + + self.callActions('beforeRenderStatus', arguments); + + switch (status) { + case 'active': + h.addClass(button, self.classNames.active); + h.removeClass(button, self.classNames.disabled); + + if (self.canDisable) self.el.disabled = false; + + break; + case 'inactive': + h.removeClass(button, self.classNames.active); + h.removeClass(button, self.classNames.disabled); + + if (self.canDisable) self.el.disabled = false; + + break; + case 'disabled': + if (self.canDisable) self.el.disabled = true; + + h.addClass(button, self.classNames.disabled); + h.removeClass(button, self.classNames.active); + + break; + } + + if (self.status !== 'live') { + // Update the control's status propery if not live + + self.status = status; + } + + self.callActions('afterRenderStatus', arguments); + } + }); + + mixitup.controls = []; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.StyleData = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.x = 0; + this.y = 0; + this.top = 0; + this.right = 0; + this.bottom = 0; + this.left = 0; + this.width = 0; + this.height = 0; + this.marginRight = 0; + this.marginBottom = 0; + this.opacity = 0; + this.scale = new mixitup.TransformData(); + this.translateX = new mixitup.TransformData(); + this.translateY = new mixitup.TransformData(); + this.translateZ = new mixitup.TransformData(); + this.rotateX = new mixitup.TransformData(); + this.rotateY = new mixitup.TransformData(); + this.rotateZ = new mixitup.TransformData(); + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.StyleData); + + mixitup.StyleData.prototype = Object.create(mixitup.Base.prototype); + + mixitup.StyleData.prototype.constructor = mixitup.StyleData; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.TransformData = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.value = 0; + this.unit = ''; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.TransformData); + + mixitup.TransformData.prototype = Object.create(mixitup.Base.prototype); + + mixitup.TransformData.prototype.constructor = mixitup.TransformData; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.TransformDefaults = function() { + mixitup.StyleData.apply(this); + + this.callActions('beforeConstruct'); + + this.scale.value = 0.01; + this.scale.unit = ''; + + this.translateX.value = 20; + this.translateX.unit = 'px'; + + this.translateY.value = 20; + this.translateY.unit = 'px'; + + this.translateZ.value = 20; + this.translateZ.unit = 'px'; + + this.rotateX.value = 90; + this.rotateX.unit = 'deg'; + + this.rotateY.value = 90; + this.rotateY.unit = 'deg'; + + this.rotateX.value = 90; + this.rotateX.unit = 'deg'; + + this.rotateZ.value = 180; + this.rotateZ.unit = 'deg'; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.TransformDefaults); + + mixitup.TransformDefaults.prototype = Object.create(mixitup.StyleData.prototype); + + mixitup.TransformDefaults.prototype.constructor = mixitup.TransformDefaults; + + /** + * @private + * @static + * @since 3.0.0 + * @type {mixitup.TransformDefaults} + */ + + mixitup.transformDefaults = new mixitup.TransformDefaults(); + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.EventDetail = function() { + this.state = null; + this.futureState = null; + this.instance = null; + this.originalEvent = null; + }; + + /** + * The `mixitup.Events` class contains all custom events dispatched by MixItUp at various + * points within the lifecycle of a mixer operation. + * + * Each event is analogous to the callback function of the same name defined in + * the `callbacks` configuration object, and is triggered immediately before it. + * + * Events are always triggered from the container element on which MixItUp is instantiated + * upon. + * + * As with any event, registered event handlers receive the event object as a parameter + * which includes a `detail` property containting references to the current `state`, + * the `mixer` instance, and other event-specific properties described below. + * + * @constructor + * @namespace + * @memberof mixitup + * @public + * @since 3.0.0 + */ + + mixitup.Events = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A custom event triggered immediately after any MixItUp operation is requested + * and before animations have begun. + * + * The `mixStart` event also exposes a `futureState` property via the + * `event.detail` object, which represents the final state of the mixer once + * the requested operation has completed. + * + * @name mixStart + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixStart = null; + + /** + * A custom event triggered when a MixItUp operation is requested while another + * operation is in progress, and the animation queue is full, or queueing + * is disabled. + * + * @name mixBusy + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixBusy = null; + + /** + * A custom event triggered after any MixItUp operation has completed, and the + * state has been updated. + * + * @name mixEnd + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixEnd = null; + + /** + * A custom event triggered whenever a filter operation "fails", i.e. no targets + * could be found matching the requested filter. + * + * @name mixFail + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixFail = null; + + /** + * A custom event triggered whenever a MixItUp control is clicked, and before its + * respective operation is requested. + * + * This event also exposes an `originalEvent` property via the `event.detail` + * object, which holds a reference to the original click event. + * + * @name mixClick + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixClick = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.Events); + + mixitup.Events.prototype = Object.create(mixitup.Base.prototype); + + mixitup.Events.prototype.constructor = mixitup.Events; + + /** + * @private + * @param {string} eventType + * @param {Element} el + * @param {object} detail + * @param {Document} [doc] + */ + + mixitup.Events.prototype.fire = function(eventType, el, detail, doc) { + var self = this, + event = null, + eventDetail = new mixitup.EventDetail(); + + self.callActions('beforeFire', arguments); + + if (typeof self[eventType] === 'undefined') { + throw new Error('Event type "' + eventType + '" not found.'); + } + + eventDetail.state = new mixitup.State(); + + h.extend(eventDetail.state, detail.state); + + if (detail.futureState) { + eventDetail.futureState = new mixitup.State(); + + h.extend(eventDetail.futureState, detail.futureState); + } + + eventDetail.instance = detail.instance; + + if (detail.originalEvent) { + eventDetail.originalEvent = detail.originalEvent; + } + + event = h.getCustomEvent(eventType, eventDetail, doc); + + self.callFilters('eventFire', event, arguments); + + el.dispatchEvent(event); + }; + + // Asign a singleton instance to `mixitup.events`: + + mixitup.events = new mixitup.Events(); + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.QueueItem = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.args = []; + this.instruction = null; + this.triggerElement = null; + this.deferred = null; + this.isToggling = false; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.QueueItem); + + mixitup.QueueItem.prototype = Object.create(mixitup.Base.prototype); + + mixitup.QueueItem.prototype.constructor = mixitup.QueueItem; + + /** + * The `mixitup.Mixer` class is used to hold discreet, user-configured + * instances of MixItUp on a provided container element. + * + * Mixer instances are returned whenever the `mixitup()` factory function is called, + * which expose a range of methods enabling API-based filtering, sorting, + * insertion, removal and more. + * + * @constructor + * @namespace + * @memberof mixitup + * @public + * @since 3.0.0 + */ + + mixitup.Mixer = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.config = new mixitup.Config(); + + this.id = ''; + + this.isBusy = false; + this.isToggling = false; + this.incPadding = true; + + this.controls = []; + this.targets = []; + this.origOrder = []; + this.cache = {}; + + this.toggleArray = []; + + this.targetsMoved = 0; + this.targetsImmovable = 0; + this.targetsBound = 0; + this.targetsDone = 0; + + this.staggerDuration = 0; + this.effectsIn = null; + this.effectsOut = null; + this.transformIn = []; + this.transformOut = []; + this.queue = []; + + this.state = null; + this.lastOperation = null; + this.lastClicked = null; + this.userCallback = null; + this.userDeferred = null; + + this.dom = new mixitup.MixerDom(); + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.Mixer); + + mixitup.Mixer.prototype = Object.create(mixitup.Base.prototype); + + h.extend(mixitup.Mixer.prototype, + /** @lends mixitup.Mixer */ + { + constructor: mixitup.Mixer, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {HTMLElement} container + * @param {HTMLElement} document + * @param {string} id + * @param {object} [config] + */ + + attach: function(container, document, id, config) { + var self = this, + target = null, + i = -1; + + self.callActions('beforeAttach', arguments); + + self.id = id; + + if (config) { + h.extend(self.config, config, true, true); + } + + self.sanitizeConfig(); + + self.cacheDom(container, document); + + if (self.config.layout.containerClassName) { + h.addClass(self.dom.container, self.config.layout.containerClassName); + } + + if (!mixitup.features.has.transitions) { + self.config.animation.enable = false; + } + + if (typeof window.console === 'undefined') { + self.config.debug.showWarnings = false; + } + + if (self.config.data.uidKey) { + // If the dataset API is in use, force disable controls + + self.config.controls.enable = false; + } + + self.indexTargets(); + + self.state = self.getInitialState(); + + for (i = 0; target = self.lastOperation.toHide[i]; i++) { + target.hide(); + } + + if (self.config.controls.enable) { + self.initControls(); + + self.buildToggleArray(null, self.state); + + self.updateControls({ + filter: self.state.activeFilter, + sort: self.state.activeSort + }); + } + + self.parseEffects(); + + self.callActions('afterAttach', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + sanitizeConfig: function() { + var self = this; + + self.callActions('beforeSanitizeConfig', arguments); + + // Sanitize enum/string config options + + self.config.controls.scope = self.config.controls.scope.toLowerCase().trim(); + self.config.controls.toggleLogic = self.config.controls.toggleLogic.toLowerCase().trim(); + self.config.controls.toggleDefault = self.config.controls.toggleDefault.toLowerCase().trim(); + + self.config.animation.effects = self.config.animation.effects.trim(); + + self.callActions('afterSanitizeConfig', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {mixitup.State} + */ + + getInitialState: function() { + var self = this, + state = new mixitup.State(), + operation = new mixitup.Operation(); + + self.callActions('beforeGetInitialState', arguments); + + // Map initial values into a mock state object in order to construct an operation + + state.activeContainerClassName = self.config.layout.containerClassName; + + if (self.config.load.dataset) { + // Dataset API + + if (!self.config.data.uidKey || typeof self.config.data.uidKey !== 'string') { + throw new TypeError(mixitup.messages.errorConfigDataUidKeyNotSet()); + } + + operation.startDataset = operation.newDataset = state.activeDataset = self.config.load.dataset.slice(); + operation.startContainerClassName = operation.newContainerClassName = state.activeContainerClassName; + operation.show = self.targets.slice(); + + state = self.callFilters('stateGetInitialState', state, arguments); + } else { + // DOM API + + state.activeFilter = self.parseFilterArgs([self.config.load.filter]).command; + state.activeSort = self.parseSortArgs([self.config.load.sort]).command; + state.totalTargets = self.targets.length; + + state = self.callFilters('stateGetInitialState', state, arguments); + + if ( + state.activeSort.collection || state.activeSort.attribute || + state.activeSort.order === 'random' || state.activeSort.order === 'desc' + ) { + // Sorting on load + + operation.newSort = state.activeSort; + + self.sortOperation(operation); + + self.printSort(false, operation); + + self.targets = operation.newOrder; + } else { + operation.startOrder = operation.newOrder = self.targets; + } + + operation.startFilter = operation.newFilter = state.activeFilter; + operation.startSort = operation.newSort = state.activeSort; + operation.startContainerClassName = operation.newContainerClassName = state.activeContainerClassName; + + if (operation.newFilter.selector === 'all') { + operation.newFilter.selector = self.config.selectors.target; + } else if (operation.newFilter.selector === 'none') { + operation.newFilter.selector = ''; + } + } + + operation = self.callFilters('operationGetInitialState', operation, [state]); + + self.lastOperation = operation; + + if (operation.newFilter) { + self.filterOperation(operation); + } + + state = self.buildState(operation); + + return state; + }, + + /** + * Caches references of DOM elements neccessary for the mixer's functionality. + * + * @private + * @instance + * @since 3.0.0 + * @param {HTMLElement} el + * @param {HTMLHtmlElement} document + * @return {void} + */ + + cacheDom: function(el, document) { + var self = this; + + self.callActions('beforeCacheDom', arguments); + + self.dom.document = document; + self.dom.body = self.dom.document.querySelector('body'); + self.dom.container = el; + self.dom.parent = el; + + self.callActions('afterCacheDom', arguments); + }, + + /** + * Indexes all child elements of the mixer matching the `selectors.target` + * selector, instantiating a mixitup.Target for each one. + * + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + indexTargets: function() { + var self = this, + target = null, + el = null, + dataset = null, + i = -1; + + self.callActions('beforeIndexTargets', arguments); + + self.dom.targets = self.config.layout.allowNestedTargets ? + self.dom.container.querySelectorAll(self.config.selectors.target) : + h.children(self.dom.container, self.config.selectors.target, self.dom.document); + + self.dom.targets = h.arrayFromList(self.dom.targets); + + self.targets = []; + + if ((dataset = self.config.load.dataset) && dataset.length !== self.dom.targets.length) { + throw new Error(mixitup.messages.errorDatasetPrerenderedMismatch()); + } + + if (self.dom.targets.length) { + for (i = 0; el = self.dom.targets[i]; i++) { + target = new mixitup.Target(); + + target.init(el, self, dataset ? dataset[i] : void(0)); + + target.isInDom = true; + + self.targets.push(target); + } + + self.dom.parent = self.dom.targets[0].parentElement === self.dom.container ? + self.dom.container : + self.dom.targets[0].parentElement; + } + + self.origOrder = self.targets; + + self.callActions('afterIndexTargets', arguments); + }, + + initControls: function() { + var self = this, + definition = '', + controlElements = null, + el = null, + parent = null, + delagators = null, + control = null, + i = -1, + j = -1; + + self.callActions('beforeInitControls', arguments); + + switch (self.config.controls.scope) { + case 'local': + parent = self.dom.container; + + break; + case 'global': + parent = self.dom.document; + + break; + default: + throw new Error(mixitup.messages.errorConfigInvalidControlsScope()); + } + + for (i = 0; definition = mixitup.controlDefinitions[i]; i++) { + if (self.config.controls.live || definition.live) { + if (definition.parent) { + delagators = self.dom[definition.parent]; + + if (!delagators || delagators.length < 0) continue; + + if (typeof delagators.length !== 'number') { + delagators = [delagators]; + } + } else { + delagators = [parent]; + } + + for (j = 0; (el = delagators[j]); j++) { + control = self.getControl(el, definition.type, definition.selector); + + self.controls.push(control); + } + } else { + controlElements = parent.querySelectorAll(self.config.selectors.control + definition.selector); + + for (j = 0; (el = controlElements[j]); j++) { + control = self.getControl(el, definition.type, ''); + + if (!control) continue; + + self.controls.push(control); + } + } + } + + self.callActions('afterInitControls', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {HTMLElement} el + * @param {string} type + * @param {string} selector + * @return {mixitup.Control|null} + */ + + getControl: function(el, type, selector) { + var self = this, + control = null, + i = -1; + + self.callActions('beforeGetControl', arguments); + + if (!selector) { + // Static controls only + + for (i = 0; control = mixitup.controls[i]; i++) { + if (control.el === el && control.isBound(self)) { + // Control already bound to this mixer (as another type). + + // NB: This prevents duplicate controls from being registered where a selector + // might collide, eg: "[data-filter]" and "[data-filter][data-sort]" + + return self.callFilters('controlGetControl', null, arguments); + } else if (control.el === el && control.type === type && control.selector === selector) { + // Another mixer is already using this control, add this mixer as a binding + + control.addBinding(self); + + return self.callFilters('controlGetControl', control, arguments); + } + } + } + + // Create new control + + control = new mixitup.Control(); + + control.init(el, type, selector); + + control.classNames.base = h.getClassname(self.config.classNames, type); + control.classNames.active = h.getClassname(self.config.classNames, type, self.config.classNames.modifierActive); + control.classNames.disabled = h.getClassname(self.config.classNames, type, self.config.classNames.modifierDisabled); + + // Add a reference to this mixer as a binding + + control.addBinding(self); + + return self.callFilters('controlGetControl', control, arguments); + }, + + /** + * Creates a compound selector by joining the `toggleArray` value as per the + * defined toggle logic. + * + * @private + * @instance + * @since 3.0.0 + * @return {string} + */ + + getToggleSelector: function() { + var self = this, + delineator = self.config.controls.toggleLogic === 'or' ? ', ' : '', + toggleSelector = ''; + + self.callActions('beforeGetToggleSelector', arguments); + + self.toggleArray = h.clean(self.toggleArray); + + toggleSelector = self.toggleArray.join(delineator); + + if (toggleSelector === '') { + toggleSelector = self.config.controls.toggleDefault; + } + + return self.callFilters('selectorGetToggleSelector', toggleSelector, arguments); + }, + + /** + * Breaks compound selector strings in an array of discreet selectors, + * as per the active `controls.toggleLogic` configuration option. Accepts + * either a dynamic command object, or a state object. + * + * @private + * @instance + * @since 2.0.0 + * @param {object} [command] + * @param {mixitup.State} [state] + * @return {void} + */ + + buildToggleArray: function(command, state) { + var self = this, + activeFilterSelector = ''; + + self.callActions('beforeBuildToggleArray', arguments); + + if (command && command.filter) { + activeFilterSelector = command.filter.selector.replace(/\s/g, ''); + } else if (state) { + activeFilterSelector = state.activeFilter.selector.replace(/\s/g, ''); + } else { + return; + } + + if (activeFilterSelector === self.config.selectors.target || activeFilterSelector === 'all') { + activeFilterSelector = ''; + } + + if (self.config.controls.toggleLogic === 'or') { + self.toggleArray = activeFilterSelector.split(','); + } else { + self.toggleArray = self.splitCompoundSelector(activeFilterSelector); + } + + self.toggleArray = h.clean(self.toggleArray); + + self.callActions('afterBuildToggleArray', arguments); + }, + + /** + * Takes a compound selector (e.g. `.cat-1.cat-2`, `[data-cat="1"][data-cat="2"]`) + * and breaks into its individual selectors. + * + * @private + * @instance + * @since 3.0.0 + * @param {string} compoundSelector + * @return {string[]} + */ + + splitCompoundSelector: function(compoundSelector) { + // Break at a `.` or `[`, capturing the delineator + + var partials = compoundSelector.split(/([\.\[])/g), + toggleArray = [], + selector = '', + i = -1; + + if (partials[0] === '') { + partials.shift(); + } + + for (i = 0; i < partials.length; i++) { + if (i % 2 === 0) { + selector = ''; + } + + selector += partials[i]; + + if (i % 2 !== 0) { + toggleArray.push(selector); + } + } + + return toggleArray; + }, + + /** + * Updates controls to their active/inactive state based on the command or + * current state of the mixer. + * + * @private + * @instance + * @since 2.0.0 + * @param {object} command + * @return {void} + */ + + updateControls: function(command) { + var self = this, + control = null, + output = new mixitup.CommandMultimix(), + i = -1; + + self.callActions('beforeUpdateControls', arguments); + + // Sanitise to defaults + + if (command.filter) { + output.filter = command.filter.selector; + } else { + output.filter = self.state.activeFilter.selector; + } + + if (command.sort) { + output.sort = self.buildSortString(command.sort); + } else { + output.sort = self.buildSortString(self.state.activeSort); + } + + if (output.filter === self.config.selectors.target) { + output.filter = 'all'; + } + + if (output.filter === '') { + output.filter = 'none'; + } + + h.freeze(output); + + for (i = 0; control = self.controls[i]; i++) { + control.update(output, self.toggleArray); + } + + self.callActions('afterUpdateControls', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.CommandSort} command + * @return {string} + */ + + buildSortString: function(command) { + var self = this; + var output = ''; + + output += command.sortString; + + if (command.next) { + output += ' ' + self.buildSortString(command.next); + } + + return output; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {object} command + * @param {Operation} operation + * @return {Promise.} + */ + + insertTargets: function(command, operation) { + var self = this, + nextSibling = null, + insertionIndex = -1, + frag = null, + target = null, + el = null, + i = -1; + + self.callActions('beforeInsertTargets', arguments); + + if (typeof command.index === 'undefined') command.index = 0; + + nextSibling = self.getNextSibling(command.index, command.sibling, command.position); + frag = self.dom.document.createDocumentFragment(); + + if (nextSibling) { + insertionIndex = h.index(nextSibling, self.config.selectors.target); + } else { + insertionIndex = self.targets.length; + } + + if (command.collection) { + for (i = 0; el = command.collection[i]; i++) { + if (self.dom.targets.indexOf(el) > -1) { + throw new Error(mixitup.messages.errorInsertPreexistingElement()); + } + + // Ensure elements are hidden when they are added to the DOM, so they can + // be animated in gracefully + + el.style.display = 'none'; + + frag.appendChild(el); + frag.appendChild(self.dom.document.createTextNode(' ')); + + if (!h.isElement(el, self.dom.document) || !el.matches(self.config.selectors.target)) continue; + + target = new mixitup.Target(); + + target.init(el, self); + + target.isInDom = true; + + self.targets.splice(insertionIndex, 0, target); + + insertionIndex++; + } + + self.dom.parent.insertBefore(frag, nextSibling); + } + + // Since targets have been added, the original order must be updated + + operation.startOrder = self.origOrder = self.targets; + + self.callActions('afterInsertTargets', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Number} [index] + * @param {Element} [sibling] + * @param {string} [position] + * @return {Element} + */ + + getNextSibling: function(index, sibling, position) { + var self = this, + element = null; + + index = Math.max(index, 0); + + if (sibling && position === 'before') { + // Explicit sibling + + element = sibling; + } else if (sibling && position === 'after') { + // Explicit sibling + + element = sibling.nextElementSibling || null; + } else if (self.targets.length > 0 && typeof index !== 'undefined') { + // Index and targets exist + + element = (index < self.targets.length || !self.targets.length) ? + self.targets[index].dom.el : + self.targets[self.targets.length - 1].dom.el.nextElementSibling; + } else if (self.targets.length === 0 && self.dom.parent.children.length > 0) { + // No targets but other siblings + + if (self.config.layout.siblingAfter) { + element = self.config.layout.siblingAfter; + } else if (self.config.layout.siblingBefore) { + element = self.config.layout.siblingBefore.nextElementSibling; + } else { + self.dom.parent.children[0]; + } + } else { + element === null; + } + + return self.callFilters('elementGetNextSibling', element, arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + filterOperation: function(operation) { + var self = this, + testResult = false, + index = -1, + action = '', + target = null, + i = -1; + + self.callActions('beforeFilterOperation', arguments); + + action = operation.newFilter.action; + + for (i = 0; target = operation.newOrder[i]; i++) { + if (operation.newFilter.collection) { + // show via collection + + testResult = operation.newFilter.collection.indexOf(target.dom.el) > -1; + } else { + // show via selector + + if (operation.newFilter.selector === '') { + testResult = false; + } else { + testResult = target.dom.el.matches(operation.newFilter.selector); + } + } + + self.evaluateHideShow(testResult, target, action, operation); + } + + if (operation.toRemove.length) { + for (i = 0; target = operation.show[i]; i++) { + if (operation.toRemove.indexOf(target) > -1) { + // If any shown targets should be removed, move them into the toHide array + + operation.show.splice(i, 1); + + if ((index = operation.toShow.indexOf(target)) > -1) { + operation.toShow.splice(index, 1); + } + + operation.toHide.push(target); + operation.hide.push(target); + + i--; + } + } + } + + operation.matching = operation.show.slice(); + + if (operation.show.length === 0 && operation.newFilter.selector !== '' && self.targets.length !== 0) { + operation.hasFailed = true; + } + + self.callActions('afterFilterOperation', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {boolean} testResult + * @param {Element} target + * @param {string} action + * @param {Operation} operation + * @return {void} + */ + + evaluateHideShow: function(testResult, target, action, operation) { + var self = this, + filteredTestResult = false, + args = Array.prototype.slice.call(arguments, 1); + + filteredTestResult = self.callFilters('testResultEvaluateHideShow', testResult, args); + + self.callActions('beforeEvaluateHideShow', arguments); + + if ( + filteredTestResult === true && action === 'show' || + filteredTestResult === false && action === 'hide' + ) { + operation.show.push(target); + + !target.isShown && operation.toShow.push(target); + } else { + operation.hide.push(target); + + target.isShown && operation.toHide.push(target); + } + + self.callActions('afterEvaluateHideShow', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + sortOperation: function(operation) { + var self = this, + newOrder = [], + target = null, + el = null, + i = -1; + + self.callActions('beforeSortOperation', arguments); + + operation.startOrder = self.targets; + + if (operation.newSort.collection) { + // Sort by collection + + newOrder = []; + + for (i = 0; (el = operation.newSort.collection[i]); i++) { + if (self.dom.targets.indexOf(el) < 0) { + throw new Error(mixitup.messages.errorSortNonExistentElement()); + } + + target = new mixitup.Target(); + + target.init(el, self); + + target.isInDom = true; + + newOrder.push(target); + } + + operation.newOrder = newOrder; + } else if (operation.newSort.order === 'random') { + // Sort random + + operation.newOrder = h.arrayShuffle(operation.startOrder); + } else if (operation.newSort.attribute === '') { + // Sort by default + + operation.newOrder = self.origOrder.slice(); + + if (operation.newSort.order === 'desc') { + operation.newOrder.reverse(); + } + } else { + // Sort by attribute + + operation.newOrder = operation.startOrder.slice(); + + operation.newOrder.sort(function(a, b) { + return self.compare(a, b, operation.newSort); + }); + } + + if (h.isEqualArray(operation.newOrder, operation.startOrder)) { + operation.willSort = false; + } + + self.callActions('afterSortOperation', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {mixitup.Target} a + * @param {mixitup.Target} b + * @param {mixitup.CommandSort} command + * @return {Number} + */ + + compare: function(a, b, command) { + var self = this, + order = command.order, + attrA = self.getAttributeValue(a, command.attribute), + attrB = self.getAttributeValue(b, command.attribute); + + if (isNaN(attrA * 1) || isNaN(attrB * 1)) { + attrA = attrA.toLowerCase(); + attrB = attrB.toLowerCase(); + } else { + attrA = attrA * 1; + attrB = attrB * 1; + } + + if (attrA < attrB) { + return order === 'asc' ? -1 : 1; + } + + if (attrA > attrB) { + return order === 'asc' ? 1 : -1; + } + + if (attrA === attrB && command.next) { + return self.compare(a, b, command.next); + } + + return 0; + }, + + /** + * Reads the values of any data attributes present the provided target element + * which match the current sort command. + * + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.Target} target + * @param {string} [attribute] + * @return {(String|Number)} + */ + + getAttributeValue: function(target, attribute) { + var self = this, + value = ''; + + value = target.dom.el.getAttribute('data-' + attribute); + + if (value === null) { + if (self.config.debug.showWarnings) { + // Encourage users to assign values to all targets to avoid erroneous sorting + // when types are mixed + + console.warn(mixitup.messages.warningInconsistentSortingAttributes({ + attribute: 'data-' + attribute + })); + } + } + + // If an attribute is not present, return 0 as a safety value + + return self.callFilters('valueGetAttributeValue', value || 0, arguments); + }, + + /** + * Inserts elements into the DOM in the appropriate + * order using a document fragment for minimal + * DOM thrashing + * + * @private + * @instance + * @since 2.0.0 + * @param {boolean} isResetting + * @param {Operation} operation + * @return {void} + */ + + printSort: function(isResetting, operation) { + var self = this, + startOrder = isResetting ? operation.newOrder : operation.startOrder, + newOrder = isResetting ? operation.startOrder : operation.newOrder, + nextSibling = startOrder.length ? startOrder[startOrder.length - 1].dom.el.nextElementSibling : null, + frag = window.document.createDocumentFragment(), + whitespace = null, + target = null, + el = null, + i = -1; + + self.callActions('beforePrintSort', arguments); + + // Empty the container + + for (i = 0; target = startOrder[i]; i++) { + el = target.dom.el; + + if (el.style.position === 'absolute') continue; + + h.removeWhitespace(el.previousSibling); + + el.parentElement.removeChild(el); + } + + whitespace = nextSibling ? nextSibling.previousSibling : self.dom.parent.lastChild; + + if (whitespace && whitespace.nodeName === '#text') { + h.removeWhitespace(whitespace); + } + + for (i = 0; target = newOrder[i]; i++) { + // Add targets into a document fragment + + el = target.dom.el; + + if (h.isElement(frag.lastChild)) { + frag.appendChild(window.document.createTextNode(' ')); + } + + frag.appendChild(el); + } + + // Insert the document fragment into the container + // before any other non-target elements + + if (self.dom.parent.firstChild && self.dom.parent.firstChild !== nextSibling) { + frag.insertBefore(window.document.createTextNode(' '), frag.childNodes[0]); + } + + if (nextSibling) { + frag.appendChild(window.document.createTextNode(' ')); + + self.dom.parent.insertBefore(frag, nextSibling); + } else { + self.dom.parent.appendChild(frag); + } + + self.callActions('afterPrintSort', arguments); + }, + + /** + * Parses user-defined sort strings (i.e. `default:asc`) into sort commands objects. + * + * @private + * @instance + * @since 3.0.0 + * @param {string} sortString + * @param {mixitup.CommandSort} command + * @return {mixitup.CommandSort} + */ + + parseSortString: function(sortString, command) { + var self = this, + rules = sortString.split(' '), + current = command, + rule = [], + i = -1; + + // command.sortString = sortString; + + for (i = 0; i < rules.length; i++) { + rule = rules[i].split(':'); + + current.sortString = rules[i]; + current.attribute = h.dashCase(rule[0]); + current.order = rule[1] || 'asc'; + + switch (current.attribute) { + case 'default': + // treat "default" as sorting by no attribute + + current.attribute = ''; + + break; + case 'random': + // treat "random" as an order not an attribute + + current.attribute = ''; + current.order = 'random'; + + break; + } + + if (!current.attribute || current.order === 'random') break; + + if (i < rules.length - 1) { + // Embed reference to the next command + + current.next = new mixitup.CommandSort(); + + h.freeze(current); + + current = current.next; + } + } + + return self.callFilters('commandsParseSort', command, arguments); + }, + + /** + * Parses all effects out of the user-defined `animation.effects` string into + * their respective properties and units. + * + * @private + * @instance + * @since 2.0.0 + * @return {void} + */ + + parseEffects: function() { + var self = this, + transformName = '', + effectsIn = self.config.animation.effectsIn || self.config.animation.effects, + effectsOut = self.config.animation.effectsOut || self.config.animation.effects; + + self.callActions('beforeParseEffects', arguments); + + self.effectsIn = new mixitup.StyleData(); + self.effectsOut = new mixitup.StyleData(); + self.transformIn = []; + self.transformOut = []; + + self.effectsIn.opacity = self.effectsOut.opacity = 1; + + self.parseEffect('fade', effectsIn, self.effectsIn, self.transformIn); + self.parseEffect('fade', effectsOut, self.effectsOut, self.transformOut, true); + + for (transformName in mixitup.transformDefaults) { + if (!(mixitup.transformDefaults[transformName] instanceof mixitup.TransformData)) { + continue; + } + + self.parseEffect(transformName, effectsIn, self.effectsIn, self.transformIn); + self.parseEffect(transformName, effectsOut, self.effectsOut, self.transformOut, true); + } + + self.parseEffect('stagger', effectsIn, self.effectsIn, self.transformIn); + self.parseEffect('stagger', effectsOut, self.effectsOut, self.transformOut, true); + + self.callActions('afterParseEffects', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {string} effectName + * @param {string} effectString + * @param {StyleData} effects + * @param {String[]} transform + * @param {boolean} [isOut] + */ + + parseEffect: function(effectName, effectString, effects, transform, isOut) { + var self = this, + re = /\(([^)]+)\)/, + propIndex = -1, + str = '', + match = [], + val = '', + units = ['%', 'px', 'em', 'rem', 'vh', 'vw', 'deg'], + unit = '', + i = -1; + + self.callActions('beforeParseEffect', arguments); + + if (typeof effectString !== 'string') { + throw new TypeError(mixitup.messages.errorConfigInvalidAnimationEffects()); + } + + if (effectString.indexOf(effectName) < 0) { + // The effect is not present in the effects string + + if (effectName === 'stagger') { + // Reset stagger to 0 + + self.staggerDuration = 0; + } + + return; + } + + // The effect is present + + propIndex = effectString.indexOf(effectName + '('); + + if (propIndex > -1) { + // The effect has a user defined value in parentheses + + // Extract from the first parenthesis to the end of string + + str = effectString.substring(propIndex); + + // Match any number of characters between "(" and ")" + + match = re.exec(str); + + val = match[1]; + } + + switch (effectName) { + case 'fade': + effects.opacity = val ? parseFloat(val) : 0; + + break; + case 'stagger': + self.staggerDuration = val ? parseFloat(val) : 100; + + // TODO: Currently stagger must be applied globally, but + // if seperate values are specified for in/out, this should + // be respected + + break; + default: + // All other effects are transforms following the same structure + + if (isOut && self.config.animation.reverseOut && effectName !== 'scale') { + effects[effectName].value = + (val ? parseFloat(val) : mixitup.transformDefaults[effectName].value) * -1; + } else { + effects[effectName].value = + (val ? parseFloat(val) : mixitup.transformDefaults[effectName].value); + } + + if (val) { + for (i = 0; unit = units[i]; i++) { + if (val.indexOf(unit) > -1) { + effects[effectName].unit = unit; + + break; + } + } + } else { + effects[effectName].unit = mixitup.transformDefaults[effectName].unit; + } + + transform.push( + effectName + + '(' + + effects[effectName].value + + effects[effectName].unit + + ')' + ); + } + + self.callActions('afterParseEffect', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {State} + */ + + buildState: function(operation) { + var self = this, + state = new mixitup.State(), + target = null, + i = -1; + + self.callActions('beforeBuildState', arguments); + + // Map target elements into state arrays. + // the real target objects should never be exposed + + for (i = 0; target = self.targets[i]; i++) { + if (!operation.toRemove.length || operation.toRemove.indexOf(target) < 0) { + state.targets.push(target.dom.el); + } + } + + for (i = 0; target = operation.matching[i]; i++) { + state.matching.push(target.dom.el); + } + + for (i = 0; target = operation.show[i]; i++) { + state.show.push(target.dom.el); + } + + for (i = 0; target = operation.hide[i]; i++) { + if (!operation.toRemove.length || operation.toRemove.indexOf(target) < 0) { + state.hide.push(target.dom.el); + } + } + + state.id = self.id; + state.container = self.dom.container; + state.activeFilter = operation.newFilter; + state.activeSort = operation.newSort; + state.activeDataset = operation.newDataset; + state.activeContainerClassName = operation.newContainerClassName; + state.hasFailed = operation.hasFailed; + state.totalTargets = self.targets.length; + state.totalShow = operation.show.length; + state.totalHide = operation.hide.length; + state.totalMatching = operation.matching.length; + state.triggerElement = operation.triggerElement; + + return self.callFilters('stateBuildState', state, arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {boolean} shouldAnimate + * @param {Operation} operation + * @return {void} + */ + + goMix: function(shouldAnimate, operation) { + var self = this, + deferred = null; + + self.callActions('beforeGoMix', arguments); + + // If the animation duration is set to 0ms, + // or no effects specified, + // or the container is hidden + // then abort animation + + if ( + !self.config.animation.duration || !self.config.animation.effects || !h.isVisible(self.dom.container) + ) { + shouldAnimate = false; + } + + if ( + !operation.toShow.length && + !operation.toHide.length && + !operation.willSort && + !operation.willChangeLayout + ) { + // If nothing to show or hide, and not sorting or + // changing layout + + shouldAnimate = false; + } + + if ( + !operation.startState.show.length && + !operation.show.length + ) { + // If nothing currently shown, nothing to show + + shouldAnimate = false; + } + + mixitup.events.fire('mixStart', self.dom.container, { + state: operation.startState, + futureState: operation.newState, + instance: self + }, self.dom.document); + + if (typeof self.config.callbacks.onMixStart === 'function') { + self.config.callbacks.onMixStart.call( + self.dom.container, + operation.startState, + operation.newState, + self + ); + } + + h.removeClass(self.dom.container, h.getClassname(self.config.classNames, 'container', self.config.classNames.modifierFailed)); + + if (!self.userDeferred) { + // Queue empty, no pending operations + + deferred = self.userDeferred = h.defer(mixitup.libraries); + } else { + // Use existing deferred + + deferred = self.userDeferred; + } + + self.isBusy = true; + + if (!shouldAnimate || !mixitup.features.has.transitions) { + // Abort + + if (self.config.debug.fauxAsync) { + setTimeout(function() { + self.cleanUp(operation); + }, self.config.animation.duration); + } else { + self.cleanUp(operation); + } + + return self.callFilters('promiseGoMix', deferred.promise, arguments); + } + + // If we should animate and the platform supports transitions, go for it + + if (window.pageYOffset !== operation.docState.scrollTop) { + window.scrollTo(operation.docState.scrollLeft, operation.docState.scrollTop); + } + + if (self.config.animation.applyPerspective) { + self.dom.parent.style[mixitup.features.perspectiveProp] = + self.config.animation.perspectiveDistance; + + self.dom.parent.style[mixitup.features.perspectiveOriginProp] = + self.config.animation.perspectiveOrigin; + } + + if ( + self.config.animation.animateResizeContainer && + operation.startHeight !== operation.newHeight && + operation.viewportDeltaY !== operation.startHeight - operation.newHeight + ) { + self.dom.parent.style.height = operation.startHeight + 'px'; + } + + if ( + self.config.animation.animateResizeContainer && + operation.startWidth !== operation.newWidth && + operation.viewportDeltaX !== operation.startWidth - operation.newWidth + ) { + self.dom.parent.style.width = operation.startWidth + 'px'; + } + + if (operation.startHeight === operation.newHeight) { + self.dom.parent.style.height = operation.startHeight + 'px'; + } + + if (operation.startWidth === operation.newWidth) { + self.dom.parent.style.width = operation.startWidth + 'px'; + } + + if (operation.startHeight === operation.newHeight && operation.startWidth === operation.newWidth) { + self.dom.parent.style.overflow = 'hidden'; + } + + requestAnimationFrame(function() { + self.moveTargets(operation); + }); + + return self.callFilters('promiseGoMix', deferred.promise, arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + getStartMixData: function(operation) { + var self = this, + parentStyle = window.getComputedStyle(self.dom.parent), + parentRect = self.dom.parent.getBoundingClientRect(), + target = null, + data = {}, + i = -1, + boxSizing = parentStyle[mixitup.features.boxSizingProp]; + + self.incPadding = (boxSizing === 'border-box'); + + self.callActions('beforeGetStartMixData', arguments); + + for (i = 0; target = operation.show[i]; i++) { + data = target.getPosData(); + + operation.showPosData[i] = { + startPosData: data + }; + } + + for (i = 0; target = operation.toHide[i]; i++) { + data = target.getPosData(); + + operation.toHidePosData[i] = { + startPosData: data + }; + } + + operation.startX = parentRect.left; + operation.startY = parentRect.top; + + operation.startHeight = self.incPadding ? + parentRect.height : + parentRect.height - + parseFloat(parentStyle.paddingTop) - + parseFloat(parentStyle.paddingBottom) - + parseFloat(parentStyle.borderTop) - + parseFloat(parentStyle.borderBottom); + + operation.startWidth = self.incPadding ? + parentRect.width : + parentRect.width - + parseFloat(parentStyle.paddingLeft) - + parseFloat(parentStyle.paddingRight) - + parseFloat(parentStyle.borderLeft) - + parseFloat(parentStyle.borderRight); + + self.callActions('afterGetStartMixData', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + setInter: function(operation) { + var self = this, + target = null, + i = -1; + + self.callActions('beforeSetInter', arguments); + + // Prevent scrollbar flicker on non-inertial scroll platforms by clamping height/width + + if (self.config.animation.clampHeight) { + self.dom.parent.style.height = operation.startHeight + 'px'; + self.dom.parent.style.overflow = 'hidden'; + } + + if (self.config.animation.clampWidth) { + self.dom.parent.style.width = operation.startWidth + 'px'; + self.dom.parent.style.overflow = 'hidden'; + } + + for (i = 0; target = operation.toShow[i]; i++) { + target.show(); + } + + if (operation.willChangeLayout) { + h.removeClass(self.dom.container, operation.startContainerClassName); + h.addClass(self.dom.container, operation.newContainerClassName); + } + + self.callActions('afterSetInter', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + getInterMixData: function(operation) { + var self = this, + target = null, + i = -1; + + self.callActions('beforeGetInterMixData', arguments); + + for (i = 0; target = operation.show[i]; i++) { + operation.showPosData[i].interPosData = target.getPosData(); + } + + for (i = 0; target = operation.toHide[i]; i++) { + operation.toHidePosData[i].interPosData = target.getPosData(); + } + + self.callActions('afterGetInterMixData', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + setFinal: function(operation) { + var self = this, + target = null, + i = -1; + + self.callActions('beforeSetFinal', arguments); + + operation.willSort && self.printSort(false, operation); + + for (i = 0; target = operation.toHide[i]; i++) { + target.hide(); + } + + self.callActions('afterSetFinal', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + getFinalMixData: function(operation) { + var self = this, + parentStyle = null, + parentRect = null, + target = null, + i = -1; + + self.callActions('beforeGetFinalMixData', arguments); + + for (i = 0; target = operation.show[i]; i++) { + operation.showPosData[i].finalPosData = target.getPosData(); + } + + for (i = 0; target = operation.toHide[i]; i++) { + operation.toHidePosData[i].finalPosData = target.getPosData(); + } + + // Remove clamping + + if (self.config.animation.clampHeight || self.config.animation.clampWidth) { + self.dom.parent.style.height = + self.dom.parent.style.width = + self.dom.parent.style.overflow = ''; + } + + if (!self.incPadding) { + parentStyle = window.getComputedStyle(self.dom.parent); + } + + parentRect = self.dom.parent.getBoundingClientRect(); + + operation.newX = parentRect.left; + operation.newY = parentRect.top; + + operation.newHeight = self.incPadding ? + parentRect.height : + parentRect.height - + parseFloat(parentStyle.paddingTop) - + parseFloat(parentStyle.paddingBottom) - + parseFloat(parentStyle.borderTop) - + parseFloat(parentStyle.borderBottom); + + operation.newWidth = self.incPadding ? + parentRect.width : + parentRect.width - + parseFloat(parentStyle.paddingLeft) - + parseFloat(parentStyle.paddingRight) - + parseFloat(parentStyle.borderLeft) - + parseFloat(parentStyle.borderRight); + + operation.viewportDeltaX = operation.docState.viewportWidth - this.dom.document.documentElement.clientWidth; + operation.viewportDeltaY = operation.docState.viewportHeight - this.dom.document.documentElement.clientHeight; + + if (operation.willSort) { + self.printSort(true, operation); + } + + for (i = 0; target = operation.toShow[i]; i++) { + target.hide(); + } + + for (i = 0; target = operation.toHide[i]; i++) { + target.show(); + } + + if (operation.willChangeLayout) { + h.removeClass(self.dom.container, operation.newContainerClassName); + h.addClass(self.dom.container, self.config.layout.containerClassName); + } + + self.callActions('afterGetFinalMixData', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Operation} operation + */ + + getTweenData: function(operation) { + var self = this, + target = null, + posData = null, + effectNames = Object.getOwnPropertyNames(self.effectsIn), + effectName = '', + effect = null, + widthChange = -1, + heightChange = -1, + i = -1, + j = -1; + + self.callActions('beforeGetTweenData', arguments); + + for (i = 0; target = operation.show[i]; i++) { + posData = operation.showPosData[i]; + posData.posIn = new mixitup.StyleData(); + posData.posOut = new mixitup.StyleData(); + posData.tweenData = new mixitup.StyleData(); + + // Process x and y + + if (target.isShown) { + posData.posIn.x = posData.startPosData.x - posData.interPosData.x; + posData.posIn.y = posData.startPosData.y - posData.interPosData.y; + } else { + posData.posIn.x = posData.posIn.y = 0; + } + + posData.posOut.x = posData.finalPosData.x - posData.interPosData.x; + posData.posOut.y = posData.finalPosData.y - posData.interPosData.y; + + // Process opacity + + posData.posIn.opacity = target.isShown ? 1 : self.effectsIn.opacity; + posData.posOut.opacity = 1; + posData.tweenData.opacity = posData.posOut.opacity - posData.posIn.opacity; + + // Adjust x and y if not nudging + + if (!target.isShown && !self.config.animation.nudge) { + posData.posIn.x = posData.posOut.x; + posData.posIn.y = posData.posOut.y; + } + + posData.tweenData.x = posData.posOut.x - posData.posIn.x; + posData.tweenData.y = posData.posOut.y - posData.posIn.y; + + // Process width, height, and margins + + if (self.config.animation.animateResizeTargets) { + posData.posIn.width = posData.startPosData.width; + posData.posIn.height = posData.startPosData.height; + + // "||" Prevents width/height change from including 0 width/height if hiding or showing + + widthChange = (posData.startPosData.width || posData.finalPosData.width) - posData.interPosData.width; + + posData.posIn.marginRight = posData.startPosData.marginRight - widthChange; + + heightChange = (posData.startPosData.height || posData.finalPosData.height) - posData.interPosData.height; + + posData.posIn.marginBottom = posData.startPosData.marginBottom - heightChange; + + posData.posOut.width = posData.finalPosData.width; + posData.posOut.height = posData.finalPosData.height; + + widthChange = (posData.finalPosData.width || posData.startPosData.width) - posData.interPosData.width; + + posData.posOut.marginRight = posData.finalPosData.marginRight - widthChange; + + heightChange = (posData.finalPosData.height || posData.startPosData.height) - posData.interPosData.height; + + posData.posOut.marginBottom = posData.finalPosData.marginBottom - heightChange; + + posData.tweenData.width = posData.posOut.width - posData.posIn.width; + posData.tweenData.height = posData.posOut.height - posData.posIn.height; + posData.tweenData.marginRight = posData.posOut.marginRight - posData.posIn.marginRight; + posData.tweenData.marginBottom = posData.posOut.marginBottom - posData.posIn.marginBottom; + } + + // Process transforms + + for (j = 0; effectName = effectNames[j]; j++) { + effect = self.effectsIn[effectName]; + + if (!(effect instanceof mixitup.TransformData) || !effect.value) continue; + + posData.posIn[effectName].value = effect.value; + posData.posOut[effectName].value = 0; + + posData.tweenData[effectName].value = + posData.posOut[effectName].value - posData.posIn[effectName].value; + + posData.posIn[effectName].unit = + posData.posOut[effectName].unit = + posData.tweenData[effectName].unit = + effect.unit; + } + } + + for (i = 0; target = operation.toHide[i]; i++) { + posData = operation.toHidePosData[i]; + posData.posIn = new mixitup.StyleData(); + posData.posOut = new mixitup.StyleData(); + posData.tweenData = new mixitup.StyleData(); + + // Process x and y + + posData.posIn.x = target.isShown ? posData.startPosData.x - posData.interPosData.x : 0; + posData.posIn.y = target.isShown ? posData.startPosData.y - posData.interPosData.y : 0; + posData.posOut.x = self.config.animation.nudge ? 0 : posData.posIn.x; + posData.posOut.y = self.config.animation.nudge ? 0 : posData.posIn.y; + posData.tweenData.x = posData.posOut.x - posData.posIn.x; + posData.tweenData.y = posData.posOut.y - posData.posIn.y; + + // Process width, height, and margins + + if (self.config.animation.animateResizeTargets) { + posData.posIn.width = posData.startPosData.width; + posData.posIn.height = posData.startPosData.height; + + widthChange = posData.startPosData.width - posData.interPosData.width; + + posData.posIn.marginRight = posData.startPosData.marginRight - widthChange; + + heightChange = posData.startPosData.height - posData.interPosData.height; + + posData.posIn.marginBottom = posData.startPosData.marginBottom - heightChange; + } + + // Process opacity + + posData.posIn.opacity = 1; + posData.posOut.opacity = self.effectsOut.opacity; + posData.tweenData.opacity = posData.posOut.opacity - posData.posIn.opacity; + + // Process transforms + + for (j = 0; effectName = effectNames[j]; j++) { + effect = self.effectsOut[effectName]; + + if (!(effect instanceof mixitup.TransformData) || !effect.value) continue; + + posData.posIn[effectName].value = 0; + posData.posOut[effectName].value = effect.value; + + posData.tweenData[effectName].value = + posData.posOut[effectName].value - posData.posIn[effectName].value; + + posData.posIn[effectName].unit = + posData.posOut[effectName].unit = + posData.tweenData[effectName].unit = + effect.unit; + } + } + + self.callActions('afterGetTweenData', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Operation} operation + * @return {void} + */ + + moveTargets: function(operation) { + var self = this, + target = null, + moveData = null, + posData = null, + statusChange = '', + willTransition = false, + staggerIndex = -1, + i = -1, + checkProgress = self.checkProgress.bind(self); + + self.callActions('beforeMoveTargets', arguments); + + // TODO: this is an extra loop in addition to the calcs + // done in getOperation, could some of this be done there? + + for (i = 0; target = operation.show[i]; i++) { + moveData = new mixitup.IMoveData(); + posData = operation.showPosData[i]; + + statusChange = target.isShown ? 'none' : 'show'; + + willTransition = self.willTransition( + statusChange, + operation.hasEffect, + posData.posIn, + posData.posOut + ); + + if (willTransition) { + // Prevent non-transitioning targets from incrementing the staggerIndex + + staggerIndex++; + } + + target.show(); + + moveData.posIn = posData.posIn; + moveData.posOut = posData.posOut; + moveData.statusChange = statusChange; + moveData.staggerIndex = staggerIndex; + moveData.operation = operation; + moveData.callback = willTransition ? checkProgress : null; + + target.move(moveData); + } + + for (i = 0; target = operation.toHide[i]; i++) { + posData = operation.toHidePosData[i]; + moveData = new mixitup.IMoveData(); + + statusChange = 'hide'; + + willTransition = self.willTransition(statusChange, posData.posIn, posData.posOut); + + moveData.posIn = posData.posIn; + moveData.posOut = posData.posOut; + moveData.statusChange = statusChange; + moveData.staggerIndex = i; + moveData.operation = operation; + moveData.callback = willTransition ? checkProgress : null; + + target.move(moveData); + } + + if (self.config.animation.animateResizeContainer) { + self.dom.parent.style[mixitup.features.transitionProp] = + 'height ' + self.config.animation.duration + 'ms ease, ' + + 'width ' + self.config.animation.duration + 'ms ease '; + + requestAnimationFrame(function() { + if ( + operation.startHeight !== operation.newHeight && + operation.viewportDeltaY !== operation.startHeight - operation.newHeight + ) { + self.dom.parent.style.height = operation.newHeight + 'px'; + } + + if ( + operation.startWidth !== operation.newWidth && + operation.viewportDeltaX !== operation.startWidth - operation.newWidth + ) { + self.dom.parent.style.width = operation.newWidth + 'px'; + } + }); + } + + if (operation.willChangeLayout) { + h.removeClass(self.dom.container, self.config.layout.ContainerClassName); + h.addClass(self.dom.container, operation.newContainerClassName); + } + + self.callActions('afterMoveTargets', arguments); + }, + + /** + * @private + * @instance + * @return {boolean} + */ + + hasEffect: function() { + var self = this, + EFFECTABLES = [ + 'scale', + 'translateX', 'translateY', 'translateZ', + 'rotateX', 'rotateY', 'rotateZ' + ], + effectName = '', + effect = null, + result = false, + value = -1, + i = -1; + + if (self.effectsIn.opacity !== 1) { + return self.callFilters('resultHasEffect', true, arguments); + } + + for (i = 0; effectName = EFFECTABLES[i]; i++) { + effect = self.effectsIn[effectName]; + value = (typeof effect && effect.value !== 'undefined') ? + effect.value : effect; + + if (value !== 0) { + result = true; + + break; + } + } + + return self.callFilters('resultHasEffect', result, arguments); + }, + + /** + * Determines if a target element will transition in + * some fasion and therefore requires binding of + * transitionEnd + * + * @private + * @instance + * @since 3.0.0 + * @param {string} statusChange + * @param {boolean} hasEffect + * @param {StyleData} posIn + * @param {StyleData} posOut + * @return {boolean} + */ + + willTransition: function(statusChange, hasEffect, posIn, posOut) { + var self = this, + result = false; + + if (!h.isVisible(self.dom.container)) { + // If the container is not visible, the transitionEnd + // event will not occur and MixItUp will hang + + result = false; + } else if ( + (statusChange !== 'none' && hasEffect) || + posIn.x !== posOut.x || + posIn.y !== posOut.y + ) { + // If opacity and/or translate will change + + result = true; + } else if (self.config.animation.animateResizeTargets) { + // Check if width, height or margins will change + + result = ( + posIn.width !== posOut.width || + posIn.height !== posOut.height || + posIn.marginRight !== posOut.marginRight || + posIn.marginTop !== posOut.marginTop + ); + } else { + result = false; + } + + return self.callFilters('resultWillTransition', result, arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + checkProgress: function(operation) { + var self = this; + + self.targetsDone++; + + if (self.targetsBound === self.targetsDone) { + self.cleanUp(operation); + } + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + cleanUp: function(operation) { + var self = this, + target = null, + whitespaceBefore = null, + whitespaceAfter = null, + nextInQueue = null, + i = -1; + + self.callActions('beforeCleanUp', arguments); + + self.targetsMoved = + self.targetsImmovable = + self.targetsBound = + self.targetsDone = 0; + + for (i = 0; target = operation.show[i]; i++) { + target.cleanUp(); + + target.show(); + } + + for (i = 0; target = operation.toHide[i]; i++) { + target.cleanUp(); + + target.hide(); + } + + if (operation.willSort) { + self.printSort(false, operation); + } + + // Remove any styles applied to the parent container + + self.dom.parent.style[mixitup.features.transitionProp] = + self.dom.parent.style.height = + self.dom.parent.style.width = + self.dom.parent.style.overflow = + self.dom.parent.style[mixitup.features.perspectiveProp] = + self.dom.parent.style[mixitup.features.perspectiveOriginProp] = ''; + + if (operation.willChangeLayout) { + h.removeClass(self.dom.container, operation.startContainerClassName); + h.addClass(self.dom.container, operation.newContainerClassName); + } + + if (operation.toRemove.length) { + for (i = 0; target = self.targets[i]; i++) { + if (operation.toRemove.indexOf(target) > -1) { + if ( + (whitespaceBefore = target.dom.el.previousSibling) && whitespaceBefore.nodeName === '#text' && + (whitespaceAfter = target.dom.el.nextSibling) && whitespaceAfter.nodeName === '#text' + ) { + h.removeWhitespace(whitespaceBefore); + } + + if (!operation.willSort) { + // NB: Sorting will remove targets as a bi-product of `printSort()` + + self.dom.parent.removeChild(target.dom.el); + } + + self.targets.splice(i, 1); + + target.isInDom = false; + + i--; + } + } + + // Since targets have been removed, the original order must be updated + + self.origOrder = self.targets; + } + + if (operation.willSort) { + self.targets = operation.newOrder; + } + + self.state = operation.newState; + self.lastOperation = operation; + + self.dom.targets = self.state.targets; + + // mixEnd + + mixitup.events.fire('mixEnd', self.dom.container, { + state: self.state, + instance: self + }, self.dom.document); + + if (typeof self.config.callbacks.onMixEnd === 'function') { + self.config.callbacks.onMixEnd.call(self.dom.container, self.state, self); + } + + if (operation.hasFailed) { + // mixFail + + mixitup.events.fire('mixFail', self.dom.container, { + state: self.state, + instance: self + }, self.dom.document); + + if (typeof self.config.callbacks.onMixFail === 'function') { + self.config.callbacks.onMixFail.call(self.dom.container, self.state, self); + } + + h.addClass(self.dom.container, h.getClassname(self.config.classNames, 'container', self.config.classNames.modifierFailed)); + } + + // User-defined callback function + + if (typeof self.userCallback === 'function') { + self.userCallback.call(self.dom.container, self.state, self); + } + + if (typeof self.userDeferred.resolve === 'function') { + self.userDeferred.resolve(self.state); + } + + self.userCallback = null; + self.userDeferred = null; + self.lastClicked = null; + self.isToggling = false; + self.isBusy = false; + + if (self.queue.length) { + self.callActions('beforeReadQueueCleanUp', arguments); + + nextInQueue = self.queue.shift(); + + // Update non-public API properties stored in queue + + self.userDeferred = nextInQueue.deferred; + self.isToggling = nextInQueue.isToggling; + self.lastClicked = nextInQueue.triggerElement; + + if (nextInQueue.instruction.command instanceof mixitup.CommandMultimix) { + self.multimix.apply(self, nextInQueue.args); + } else { + self.dataset.apply(self, nextInQueue.args); + } + } + + self.callActions('afterCleanUp', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseMultimixArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandMultimix(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + if (typeof arg === 'object') { + h.extend(instruction.command, arg); + } else if (typeof arg === 'boolean') { + instruction.animate = arg; + } else if (typeof arg === 'function') { + instruction.callback = arg; + } + } + + // Coerce arbitrary command arguments into typed command objects + + if (instruction.command.insert && !(instruction.command.insert instanceof mixitup.CommandInsert)) { + instruction.command.insert = self.parseInsertArgs([instruction.command.insert]).command; + } + + if (instruction.command.remove && !(instruction.command.remove instanceof mixitup.CommandRemove)) { + instruction.command.remove = self.parseRemoveArgs([instruction.command.remove]).command; + } + + if (instruction.command.filter && !(instruction.command.filter instanceof mixitup.CommandFilter)) { + instruction.command.filter = self.parseFilterArgs([instruction.command.filter]).command; + } + + if (instruction.command.sort && !(instruction.command.sort instanceof mixitup.CommandSort)) { + instruction.command.sort = self.parseSortArgs([instruction.command.sort]).command; + } + + if (instruction.command.changeLayout && !(instruction.command.changeLayout instanceof mixitup.CommandChangeLayout)) { + instruction.command.changeLayout = self.parseChangeLayoutArgs([instruction.command.changeLayout]).command; + } + + instruction = self.callFilters('instructionParseMultimixArgs', instruction, arguments); + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseFilterArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandFilter(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (typeof arg === 'string') { + // Selector + + instruction.command.selector = arg; + } else if (arg === null) { + instruction.command.collection = []; + } else if (typeof arg === 'object' && h.isElement(arg, self.dom.document)) { + // Single element + + instruction.command.collection = [arg]; + } else if (typeof arg === 'object' && typeof arg.length !== 'undefined') { + // Multiple elements in array, NodeList or jQuery collection + + instruction.command.collection = h.arrayFromList(arg); + } else if (typeof arg === 'object') { + // Filter command + + h.extend(instruction.command, arg); + } else if (typeof arg === 'boolean') { + instruction.animate = arg; + } else if (typeof arg === 'function') { + instruction.callback = arg; + } + } + + if (instruction.command.selector && instruction.command.collection) { + throw new Error(mixitup.messages.errorFilterInvalidArguments()); + } + + instruction = self.callFilters('instructionParseFilterArgs', instruction, arguments); + + h.freeze(instruction); + + return instruction; + }, + + parseSortArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + sortString = '', + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandSort(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + switch (typeof arg) { + case 'string': + // Sort string + + sortString = arg; + + break; + case 'object': + // Array of element references + + if (arg.length) { + instruction.command.collection = h.arrayFromList(arg); + } + + break; + case 'boolean': + instruction.animate = arg; + + break; + case 'function': + instruction.callback = arg; + + break; + } + } + + if (sortString) { + instruction.command = self.parseSortString(sortString, instruction.command); + } + + instruction = self.callFilters('instructionParseSortArgs', instruction, arguments); + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseInsertArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandInsert(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + if (typeof arg === 'number') { + // Insert index + + instruction.command.index = arg; + } else if (typeof arg === 'string' && ['before', 'after'].indexOf(arg) > -1) { + // 'before'/'after' + + instruction.command.position = arg; + } else if (typeof arg === 'string') { + // Markup + + instruction.command.collection = + h.arrayFromList(h.createElement(arg).childNodes); + } else if (typeof arg === 'object' && h.isElement(arg, self.dom.document)) { + // Single element + + !instruction.command.collection.length ? + (instruction.command.collection = [arg]) : + (instruction.command.sibling = arg); + } else if (typeof arg === 'object' && arg.length) { + // Multiple elements in array or jQuery collection + + !instruction.command.collection.length ? + (instruction.command.collection = arg) : + instruction.command.sibling = arg[0]; + } else if (typeof arg === 'object' && arg.childNodes && arg.childNodes.length) { + // Document fragment + + !instruction.command.collection.length ? + instruction.command.collection = h.arrayFromList(arg.childNodes) : + instruction.command.sibling = arg.childNodes[0]; + } else if (typeof arg === 'object') { + // Insert command + + h.extend(instruction.command, arg); + } else if (typeof arg === 'boolean') { + instruction.animate = arg; + } else if (typeof arg === 'function') { + instruction.callback = arg; + } + } + + if (instruction.command.index && instruction.command.sibling) { + throw new Error(mixitup.messages.errorInsertInvalidArguments()); + } + + if (!instruction.command.collection.length && self.config.debug.showWarnings) { + console.warn(mixitup.messages.warningInsertNoElements()); + } + + instruction = self.callFilters('instructionParseInsertArgs', instruction, arguments); + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseRemoveArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + target = null, + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandRemove(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + switch (typeof arg) { + case 'number': + if (self.targets[arg]) { + instruction.command.targets[0] = self.targets[arg]; + } + + break; + case 'string': + instruction.command.collection = h.arrayFromList(self.dom.parent.querySelectorAll(arg)); + + break; + case 'object': + if (arg && arg.length) { + instruction.command.collection = arg; + } else if (h.isElement(arg, self.dom.document)) { + instruction.command.collection = [arg]; + } else { + // Remove command + + h.extend(instruction.command, arg); + } + + break; + case 'boolean': + instruction.animate = arg; + + break; + case 'function': + instruction.callback = arg; + + break; + } + } + + if (instruction.command.collection.length) { + for (i = 0; target = self.targets[i]; i++) { + if (instruction.command.collection.indexOf(target.dom.el) > -1) { + instruction.command.targets.push(target); + } + } + } + + if (!instruction.command.targets.length && self.config.debug.showWarnings) { + console.warn(mixitup.messages.warningRemoveNoElements()); + } + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseDatasetArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandDataset(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + switch (typeof arg) { + case 'object': + if (Array.isArray(arg) || typeof arg.length === 'number') { + instruction.command.dataset = arg; + } else { + // Change layout command + + h.extend(instruction.command, arg); + } + + break; + case 'boolean': + instruction.animate = arg; + + break; + case 'function': + instruction.callback = arg; + + break; + } + } + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseChangeLayoutArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandChangeLayout(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + switch (typeof arg) { + case 'string': + instruction.command.containerClassName = arg; + + break; + case 'object': + // Change layout command + + h.extend(instruction.command, arg); + + break; + case 'boolean': + instruction.animate = arg; + + break; + case 'function': + instruction.callback = arg; + + break; + } + } + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.QueueItem} queueItem + * @return {Promise.} + */ + + queueMix: function(queueItem) { + var self = this, + deferred = null, + toggleSelector = ''; + + self.callActions('beforeQueueMix', arguments); + + deferred = h.defer(mixitup.libraries); + + if (self.config.animation.queue && self.queue.length < self.config.animation.queueLimit) { + queueItem.deferred = deferred; + + self.queue.push(queueItem); + + // Keep controls in sync with user interactions. Mixer will catch up as it drains the queue. + + if (self.config.controls.enable) { + if (self.isToggling) { + self.buildToggleArray(queueItem.instruction.command); + + toggleSelector = self.getToggleSelector(); + + self.updateControls({ + filter: { + selector: toggleSelector + } + }); + } else { + self.updateControls(queueItem.instruction.command); + } + } + } else { + if (self.config.debug.showWarnings) { + console.warn(mixitup.messages.warningMultimixInstanceQueueFull()); + } + + deferred.resolve(self.state); + + mixitup.events.fire('mixBusy', self.dom.container, { + state: self.state, + instance: self + }, self.dom.document); + + if (typeof self.config.callbacks.onMixBusy === 'function') { + self.config.callbacks.onMixBusy.call(self.dom.container, self.state, self); + } + } + + return self.callFilters('promiseQueueMix', deferred.promise, arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Array.} newDataset + * @return {Operation} + */ + + getDataOperation: function(newDataset) { + var self = this, + operation = new mixitup.Operation(), + startDataset = []; + + operation = self.callFilters('operationUnmappedGetDataOperation', operation, arguments); + + if (self.dom.targets.length && !(startDataset = (self.state.activeDataset || [])).length) { + throw new Error(mixitup.messages.errorDatasetNotSet()); + } + + operation.id = h.randomHex(); + operation.startState = self.state; + operation.startDataset = startDataset; + operation.newDataset = newDataset.slice(); + + self.diffDatasets(operation); + + operation.startOrder = self.targets; + operation.newOrder = operation.show; + + if (self.config.animation.enable) { + self.getStartMixData(operation); + self.setInter(operation); + + operation.docState = h.getDocumentState(self.dom.document); + + self.getInterMixData(operation); + self.setFinal(operation); + self.getFinalMixData(operation); + + self.parseEffects(); + + operation.hasEffect = self.hasEffect(); + + self.getTweenData(operation); + } + + self.targets = operation.show.slice(); + + operation.newState = self.buildState(operation); + + // NB: Targets to be removed must be included in `self.targets` for removal during clean up, + // but are added after state is built so that state is accurate + + Array.prototype.push.apply(self.targets, operation.toRemove); + + operation = self.callFilters('operationMappedGetDataOperation', operation, arguments); + + return operation; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.Operation} operation + * @return {void} + */ + + diffDatasets: function(operation) { + var self = this, + persistantStartIds = [], + persistantNewIds = [], + insertedTargets = [], + data = null, + target = null, + el = null, + frag = null, + nextEl = null, + uids = {}, + id = '', + i = -1; + + self.callActions('beforeDiffDatasets', arguments); + + for (i = 0; data = operation.newDataset[i]; i++) { + if (typeof (id = data[self.config.data.uidKey]) === 'undefined' || id.toString().length < 1) { + throw new TypeError(mixitup.messages.errorDatasetInvalidUidKey({ + uidKey: self.config.data.uidKey + })); + } + + if (!uids[id]) { + uids[id] = true; + } else { + throw new Error(mixitup.messages.errorDatasetDuplicateUid({ + uid: id + })); + } + + if ((target = self.cache[id]) instanceof mixitup.Target) { + // Already in cache + + if (self.config.data.dirtyCheck && !h.deepEquals(data, target.data)) { + // change detected + + el = target.render(data); + + target.data = data; + + if (el !== target.dom.el) { + // Update target element reference + + if (target.isInDom) { + target.unbindEvents(); + + self.dom.parent.replaceChild(el, target.dom.el); + } + + if (!target.isShown) { + el.style.display = 'none'; + } + + target.dom.el = el; + + if (target.isInDom) { + target.bindEvents(); + } + } + } + + el = target.dom.el; + } else { + // New target + + target = new mixitup.Target(); + + target.init(null, self, data); + + target.hide(); + } + + if (!target.isInDom) { + // Adding to DOM + + if (!frag) { + // Open frag + + frag = self.dom.document.createDocumentFragment(); + } + + if (frag.lastElementChild) { + frag.appendChild(self.dom.document.createTextNode(' ')); + } + + frag.appendChild(target.dom.el); + + target.isInDom = true; + + target.unbindEvents(); + target.bindEvents(); + target.hide(); + + operation.toShow.push(target); + + insertedTargets.push(target); + } else { + // Already in DOM + + nextEl = target.dom.el.nextElementSibling; + + persistantNewIds.push(id); + + if (frag) { + // Close and insert previously opened frag + + if (frag.lastElementChild) { + frag.appendChild(self.dom.document.createTextNode(' ')); + } + + self.insertDatasetFrag(frag, target.dom.el, insertedTargets); + + frag = null; + } + } + + operation.show.push(target); + } + + if (frag) { + // Unclosed frag remaining + + nextEl = nextEl || self.config.layout.siblingAfter; + + if (nextEl) { + frag.appendChild(self.dom.document.createTextNode(' ')); + } + + self.insertDatasetFrag(frag, nextEl, insertedTargets); + } + + for (i = 0; data = operation.startDataset[i]; i++) { + id = data[self.config.data.uidKey]; + + target = self.cache[id]; + + if (operation.show.indexOf(target) < 0) { + // Previously shown but now absent + + operation.hide.push(target); + operation.toHide.push(target); + operation.toRemove.push(target); + } else { + persistantStartIds.push(id); + } + } + + if (!h.isEqualArray(persistantStartIds, persistantNewIds)) { + operation.willSort = true; + } + + self.callActions('afterDiffDatasets', arguments); + }, + + /** + * @private + * @instance + * @since 3.1.5 + * @param {DocumentFragment} frag + * @param {(HTMLElement|null)} nextEl + * @param {Array.} targets + * @return {void} + */ + + insertDatasetFrag: function(frag, nextEl, targets) { + var self = this; + var insertAt = nextEl ? h.arrayFromList(self.dom.parent.children).indexOf(nextEl) : self.targets.length; + + self.dom.parent.insertBefore(frag, nextEl); + + while (targets.length) { + self.targets.splice(insertAt, 0, targets.shift()); + + insertAt++; + } + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.CommandSort} sortCommandA + * @param {mixitup.CommandSort} sortCommandB + * @return {boolean} + */ + + willSort: function(sortCommandA, sortCommandB) { + var self = this, + result = false; + + if ( + self.config.behavior.liveSort || + sortCommandA.order === 'random' || + sortCommandA.attribute !== sortCommandB.attribute || + sortCommandA.order !== sortCommandB.order || + sortCommandA.collection !== sortCommandB.collection || + (sortCommandA.next === null && sortCommandB.next) || + (sortCommandA.next && sortCommandB.next === null) + ) { + result = true; + } else if (sortCommandA.next && sortCommandB.next) { + result = self.willSort(sortCommandA.next, sortCommandB.next); + } else { + result = false; + } + + return self.callFilters('resultWillSort', result, arguments); + }, + + /** + * A shorthand method for `.filter('all')`. Shows all targets in the container. + * + * @example + * + * .show() + * + * @example Example: Showing all targets + * + * mixer.show() + * .then(function(state) { + * console.log(state.totalShow === state.totalTargets); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @return {Promise.} + */ + + show: function() { + var self = this; + + return self.filter('all'); + }, + + /** + * A shorthand method for `.filter('none')`. Hides all targets in the container. + * + * @example + * + * .hide() + * + * @example Example: Hiding all targets + * + * mixer.hide() + * .then(function(state) { + * console.log(state.totalShow === 0); // true + * console.log(state.totalHide === state.totalTargets); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @return {Promise.} + */ + + hide: function() { + var self = this; + + return self.filter('none'); + }, + + /** + * Returns a boolean indicating whether or not a MixItUp operation is + * currently in progress. + * + * @example + * + * .isMixing() + * + * @example Example: Checking the status of a mixer + * + * mixer.sort('random', function() { + * console.log(mixer.isMixing()) // false + * }); + * + * console.log(mixer.isMixing()) // true + * + * @public + * @instance + * @since 2.0.0 + * @return {boolean} + */ + + isMixing: function() { + var self = this; + + return self.isBusy; + }, + + /** + * Filters all targets in the container by a provided selector string, or the values `'all'` + * or `'none'`. Only targets matching the selector will be shown. + * + * @example + * + * .filter(selector [, animate] [, callback]) + * + * @example Example 1: Filtering targets by a class selector + * + * mixer.filter('.category-a') + * .then(function(state) { + * console.log(state.totalShow === containerEl.querySelectorAll('.category-a').length); // true + * }); + * + * @example Example 2: Filtering targets by an attribute selector + * + * mixer.filter('[data-category~="a"]') + * .then(function(state) { + * console.log(state.totalShow === containerEl.querySelectorAll('[data-category~="a"]').length); // true + * }); + * + * @example Example 3: Filtering targets by a compound selector + * + * // Show only those targets with the classes 'category-a' AND 'category-b' + * + * mixer.filter('.category-a.category-c') + * .then(function(state) { + * console.log(state.totalShow === containerEl.querySelectorAll('.category-a.category-c').length); // true + * }); + * + * @example Example 4: Filtering via an element collection + * + * var collection = Array.from(container.querySelectorAll('.mix')); + * + * console.log(collection.length); // 34 + * + * // Filter the collection manually using Array.prototype.filter + * + * var filtered = collection.filter(function(target) { + * return parseInt(target.getAttribute('data-price')) > 10; + * }); + * + * console.log(filtered.length); // 22 + * + * // Pass the filtered collection to MixItUp + * + * mixer.filter(filtered) + * .then(function(state) { + * console.log(state.activeFilter.collection.length === 22); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {(string|HTMLElement|Array.)} selector + * Any valid CSS selector (i.e. `'.category-a'`), or the values `'all'` or `'none'`. The filter method also accepts a reference to single target element or a collection of target elements to show. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + filter: function() { + var self = this, + instruction = self.parseFilterArgs(arguments); + + return self.multimix({ + filter: instruction.command + }, instruction.animate, instruction.callback); + }, + + /** + * Adds an additional selector to the currently active filter selector, concatenating + * as per the logic defined in `controls.toggleLogic`. + * + * @example + * + * .toggleOn(selector [, animate] [, callback]) + * + * @example Example: Toggling on a filter selector + * + * console.log(mixer.getState().activeFilter.selector); // '.category-a' + * + * mixer.toggleOn('.category-b') + * .then(function(state) { + * console.log(state.activeFilter.selector); // '.category-a, .category-b' + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {string} selector + * Any valid CSS selector (i.e. `'.category-a'`) + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + toggleOn: function() { + var self = this, + instruction = self.parseFilterArgs(arguments), + selector = instruction.command.selector, + toggleSelector = ''; + + self.isToggling = true; + + if (self.toggleArray.indexOf(selector) < 0) { + self.toggleArray.push(selector); + } + + toggleSelector = self.getToggleSelector(); + + return self.multimix({ + filter: toggleSelector + }, instruction.animate, instruction.callback); + }, + + /** + * Removes a selector from the active filter selector. + * + * @example + * + * .toggleOff(selector [, animate] [, callback]) + * + * @example Example: Toggling off a filter selector + * + * console.log(mixer.getState().activeFilter.selector); // '.category-a, .category-b' + * + * mixer.toggleOff('.category-b') + * .then(function(state) { + * console.log(state.activeFilter.selector); // '.category-a' + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {string} selector + * Any valid CSS selector (i.e. `'.category-a'`) + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + toggleOff: function() { + var self = this, + instruction = self.parseFilterArgs(arguments), + selector = instruction.command.selector, + selectorIndex = self.toggleArray.indexOf(selector), + toggleSelector = ''; + + self.isToggling = true; + + if (selectorIndex > -1) { + self.toggleArray.splice(selectorIndex, 1); + } + + toggleSelector = self.getToggleSelector(); + + return self.multimix({ + filter: toggleSelector + }, instruction.animate, instruction.callback); + }, + + /** + * Sorts all targets in the container according to a provided sort string. + * + * @example + * + * .sort(sortString [, animate] [, callback]) + * + * @example Example 1: Sorting by the default DOM order + * + * // Reverse the default order of the targets + * + * mixer.sort('default:desc') + * .then(function(state) { + * console.log(state.activeSort.attribute === 'default'); // true + * console.log(state.activeSort.order === 'desc'); // true + * }); + * + * @example Example 2: Sorting by a custom data-attribute + * + * // Sort the targets by the value of a `data-published-date` attribute + * + * mixer.sort('published-date:asc') + * .then(function(state) { + * console.log(state.activeSort.attribute === 'published-date'); // true + * console.log(state.activeSort.order === 'asc'); // true + * }); + * + * @example Example 3: Sorting by multiple attributes + * + * // Sort the targets by the value of a `data-published-date` attribute, then by `data-title` + * + * mixer.sort('published-date:desc data-title:asc') + * .then(function(state) { + * console.log(state.activeSort.attribute === 'published-date'); // true + * console.log(state.activeSort.order === 'desc'); // true + * + * console.log(state.activeSort.next.attribute === 'title'); // true + * console.log(state.activeSort.next.order === 'asc'); // true + * }); + * + * @example Example 4: Sorting by random + * + * mixer.sort('random') + * .then(function(state) { + * console.log(state.activeSort.order === 'random') // true + * }); + * + * @example Example 5: Sorting via an element collection + * + * var collection = Array.from(container.querySelectorAll('.mix')); + * + * // Swap the position of two elements in the collection: + * + * var temp = collection[1]; + * + * collection[1] = collection[0]; + * collection[0] = temp; + * + * // Pass the sorted collection to MixItUp + * + * mixer.sort(collection) + * .then(function(state) { + * console.log(state.targets[0] === collection[0]); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {(string|Array.)} sortString + * A valid sort string (e.g. `'default'`, `'published-date:asc'`, or `'random'`). The sort method also accepts an array of all target elements in a user-defined order. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + sort: function() { + var self = this, + instruction = self.parseSortArgs(arguments); + + return self.multimix({ + sort: instruction.command + }, instruction.animate, instruction.callback); + }, + + /** + * Changes the layout of the container by adding, removing or updating a + * layout-specific class name. If `animation.animateResizetargets` is + * enabled, MixItUp will attempt to gracefully animate the width, height, + * and position of targets between layout states. + * + * @example + * + * .changeLayout(containerClassName [, animate] [, callback]) + * + * @example Example 1: Adding a new class name to the container + * + * mixer.changeLayout('container-list') + * .then(function(state) { + * console.log(state.activeContainerClass === 'container-list'); // true + * }); + * + * @example Example 2: Removing a previously added class name from the container + * + * mixer.changeLayout('') + * .then(function(state) { + * console.log(state.activeContainerClass === ''); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {string} containerClassName + * A layout-specific class name to add to the container. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + changeLayout: function() { + var self = this, + instruction = self.parseChangeLayoutArgs(arguments); + + return self.multimix({ + changeLayout: instruction.command + }, instruction.animate, instruction.callback); + }, + + /** + * Updates the contents and order of the container to reflect the provided dataset, + * if the dataset API is in use. + * + * The dataset API is designed for use in API-driven JavaScript applications, and + * can be used instead of DOM-based methods such as `.filter()`, `.sort()`, + * `.insert()`, etc. When used, insertion, removal, sorting and pagination can be + * achieved purely via changes to your data model, without the uglyness of having + * to interact with or query the DOM directly. + * + * @example + * + * .dataset(dataset [, animate] [, callback]) + * + * @example Example 1: Rendering a dataset + * + * var myDataset = [ + * {id: 1, ...}, + * {id: 2, ...}, + * {id: 3, ...} + * ]; + * + * mixer.dataset(myDataset) + * .then(function(state) { + * console.log(state.totalShow === 3); // true + * }); + * + * @example Example 2: Sorting a dataset + * + * // Create a new dataset in reverse order + * + * var newDataset = myDataset.slice().reverse(); + * + * mixer.dataset(newDataset) + * .then(function(state) { + * console.log(state.activeDataset[0] === myDataset[2]); // true + * }); + * + * @example Example 3: Removing an item from the dataset + * + * console.log(myDataset.length); // 3 + * + * // Create a new dataset with the last item removed. + * + * var newDataset = myDataset.slice().pop(); + * + * mixer.dataset(newDataset) + * .then(function(state) { + * console.log(state.totalShow === 2); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {Array.} dataset + * An array of objects, each one representing the underlying data model of a target to be rendered. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + dataset: function() { + var self = this, + instruction = self.parseDatasetArgs(arguments), + operation = null, + queueItem = null, + animate = false; + + self.callActions('beforeDataset', arguments); + + if (!self.isBusy) { + if (instruction.callback) self.userCallback = instruction.callback; + + animate = (instruction.animate ^ self.config.animation.enable) ? instruction.animate : self.config.animation.enable; + + operation = self.getDataOperation(instruction.command.dataset); + + return self.goMix(animate, operation); + } else { + queueItem = new mixitup.QueueItem(); + + queueItem.args = arguments; + queueItem.instruction = instruction; + + return self.queueMix(queueItem); + } + }, + + /** + * Performs simultaneous `filter`, `sort`, `insert`, `remove` and `changeLayout` + * operations as requested. + * + * @example + * + * .multimix(multimixCommand [, animate] [, callback]) + * + * @example Example 1: Performing simultaneous filtering and sorting + * + * mixer.multimix({ + * filter: '.category-b', + * sort: 'published-date:desc' + * }) + * .then(function(state) { + * console.log(state.activeFilter.selector === '.category-b'); // true + * console.log(state.activeSort.attribute === 'published-date'); // true + * }); + * + * @example Example 2: Performing simultaneous sorting, insertion, and removal + * + * console.log(mixer.getState().totalShow); // 6 + * + * // NB: When inserting via `multimix()`, an object should be provided as the value + * // for the `insert` portion of the command, allowing for a collection of elements + * // and an insertion index to be specified. + * + * mixer.multimix({ + * sort: 'published-date:desc', // Sort the container, including any new elements + * insert: { + * collection: [newElementReferenceA, newElementReferenceB], // Add 2 new elements at index 5 + * index: 5 + * }, + * remove: existingElementReference // Remove 1 existing element + * }) + * .then(function(state) { + * console.log(state.activeSort.attribute === 'published-date'); // true + * console.log(state.totalShow === 7); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {object} multimixCommand + * An object containing one or more things to do + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + multimix: function() { + var self = this, + operation = null, + animate = false, + queueItem = null, + instruction = self.parseMultimixArgs(arguments); + + self.callActions('beforeMultimix', arguments); + + if (!self.isBusy) { + operation = self.getOperation(instruction.command); + + if (self.config.controls.enable) { + // Update controls for API calls + + if (instruction.command.filter && !self.isToggling) { + // As we are not toggling, reset the toggle array + // so new filter overrides existing toggles + + self.toggleArray.length = 0; + self.buildToggleArray(operation.command); + } + + if (self.queue.length < 1) { + self.updateControls(operation.command); + } + } + + if (instruction.callback) self.userCallback = instruction.callback; + + // Always allow the instruction to override the instance setting + + animate = (instruction.animate ^ self.config.animation.enable) ? + instruction.animate : + self.config.animation.enable; + + self.callFilters('operationMultimix', operation, arguments); + + return self.goMix(animate, operation); + } else { + queueItem = new mixitup.QueueItem(); + + queueItem.args = arguments; + queueItem.instruction = instruction; + queueItem.triggerElement = self.lastClicked; + queueItem.isToggling = self.isToggling; + + return self.queueMix(queueItem); + } + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {object} multimixCommand + * @param {boolean} [isPreFetch] + * An optional boolean indicating that the operation is being pre-fetched for execution at a later time. + * @return {Operation|null} + */ + + getOperation: function(multimixCommand) { + var self = this, + sortCommand = multimixCommand.sort, + filterCommand = multimixCommand.filter, + changeLayoutCommand = multimixCommand.changeLayout, + removeCommand = multimixCommand.remove, + insertCommand = multimixCommand.insert, + operation = new mixitup.Operation(); + + operation = self.callFilters('operationUnmappedGetOperation', operation, arguments); + + operation.id = h.randomHex(); + operation.command = multimixCommand; + operation.startState = self.state; + operation.triggerElement = self.lastClicked; + + if (self.isBusy) { + if (self.config.debug.showWarnings) { + console.warn(mixitup.messages.warningGetOperationInstanceBusy()); + } + + return null; + } + + if (insertCommand) { + self.insertTargets(insertCommand, operation); + } + + if (removeCommand) { + operation.toRemove = removeCommand.targets; + } + + operation.startSort = operation.newSort = operation.startState.activeSort; + operation.startOrder = operation.newOrder = self.targets; + + if (sortCommand) { + operation.startSort = operation.startState.activeSort; + operation.newSort = sortCommand; + + operation.willSort = self.willSort(sortCommand, operation.startState.activeSort); + + if (operation.willSort) { + self.sortOperation(operation); + } + } + + operation.startFilter = operation.startState.activeFilter; + + if (filterCommand) { + operation.newFilter = filterCommand; + } else { + operation.newFilter = h.extend(new mixitup.CommandFilter(), operation.startFilter); + } + + if (operation.newFilter.selector === 'all') { + operation.newFilter.selector = self.config.selectors.target; + } else if (operation.newFilter.selector === 'none') { + operation.newFilter.selector = ''; + } + + self.filterOperation(operation); + + operation.startContainerClassName = operation.startState.activeContainerClassName; + + if (changeLayoutCommand) { + operation.newContainerClassName = changeLayoutCommand.containerClassName; + + if (operation.newContainerClassName !== operation.startContainerClassName) { + operation.willChangeLayout = true; + } + } else { + operation.newContainerClassName = operation.startContainerClassName; + } + + if (self.config.animation.enable) { + // Populate the operation's position data + + self.getStartMixData(operation); + self.setInter(operation); + + operation.docState = h.getDocumentState(self.dom.document); + + self.getInterMixData(operation); + self.setFinal(operation); + self.getFinalMixData(operation); + + self.parseEffects(); + + operation.hasEffect = self.hasEffect(); + + self.getTweenData(operation); + } + + if (operation.willSort) { + self.targets = operation.newOrder; + } + + operation.newState = self.buildState(operation); + + return self.callFilters('operationMappedGetOperation', operation, arguments); + }, + + /** + * Renders a previously created operation at a specific point in its path, as + * determined by a multiplier between 0 and 1. + * + * @example + * .tween(operation, multiplier) + * + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.Operation} operation + * An operation object created via the `getOperation` method + * + * @param {Float} multiplier + * Any number between 0 and 1 representing the percentage complete of the operation + * @return {void} + */ + + tween: function(operation, multiplier) { + var target = null, + posData = null, + toHideIndex = -1, + i = -1; + + multiplier = Math.min(multiplier, 1); + multiplier = Math.max(multiplier, 0); + + for (i = 0; target = operation.show[i]; i++) { + posData = operation.showPosData[i]; + + target.applyTween(posData, multiplier); + } + + for (i = 0; target = operation.hide[i]; i++) { + if (target.isShown) { + target.hide(); + } + + if ((toHideIndex = operation.toHide.indexOf(target)) > -1) { + posData = operation.toHidePosData[toHideIndex]; + + if (!target.isShown) { + target.show(); + } + + target.applyTween(posData, multiplier); + } + } + }, + + /** + * Inserts one or more new target elements into the container at a specified + * index. + * + * To be indexed as targets, new elements must match the `selectors.target` + * selector (`'.mix'` by default). + * + * @example + * + * .insert(newElements [, index] [, animate], [, callback]) + * + * @example Example 1: Inserting a single element via reference + * + * console.log(mixer.getState().totalShow); // 0 + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * mixer.insert(newElement) + * .then(function(state) { + * console.log(state.totalShow === 1); // true + * }); + * + * @example Example 2: Inserting a single element via HTML string + * + * console.log(mixer.getState().totalShow); // 1 + * + * // Create a new element via reference + * + * var newElementHtml = '<div class="mix"></div>'; + * + * // Create and insert the new element at index 1 + * + * mixer.insert(newElementHtml, 1) + * .then(function(state) { + * console.log(state.totalShow === 2); // true + * console.log(state.show[1].outerHTML === newElementHtml); // true + * }); + * + * @example Example 3: Inserting multiple elements via reference + * + * console.log(mixer.getState().totalShow); // 2 + * + * // Create an array of new elements to insert. + * + * var newElement1 = document.createElement('div'); + * var newElement2 = document.createElement('div'); + * + * newElement1.classList.add('mix'); + * newElement2.classList.add('mix'); + * + * var newElementsCollection = [newElement1, newElement2]; + * + * // Insert the new elements starting at index 1 + * + * mixer.insert(newElementsCollection, 1) + * .then(function(state) { + * console.log(state.totalShow === 4); // true + * console.log(state.show[1] === newElement1); // true + * console.log(state.show[2] === newElement2); // true + * }); + * + * @example Example 4: Inserting a jQuery collection object containing one or more elements + * + * console.log(mixer.getState().totalShow); // 4 + * + * var $newElement = $('<div class="mix"></div>'); + * + * // Insert the new elements starting at index 3 + * + * mixer.insert($newElement, 3) + * .then(function(state) { + * console.log(state.totalShow === 5); // true + * console.log(state.show[3] === $newElement[0]); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {number} index=0 + * The index at which to insert the new element(s). `0` by default. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + insert: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.multimix({ + insert: args.command + }, args.animate, args.callback); + }, + + /** + * Inserts one or more new elements before a provided reference element. + * + * @example + * + * .insertBefore(newElements, referenceElement [, animate] [, callback]) + * + * @example Example: Inserting a new element before a reference element + * + * // An existing reference element is chosen at index 2 + * + * var referenceElement = mixer.getState().show[2]; + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * mixer.insertBefore(newElement, referenceElement) + * .then(function(state) { + * // The new element is inserted into the container at index 2, before the reference element + * + * console.log(state.show[2] === newElement); // true + * + * // The reference element is now at index 3 + * + * console.log(state.show[3] === referenceElement); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {HTMLElement} referenceElement + * A reference to an existing element in the container to insert new elements before. + *@param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + insertBefore: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.insert(args.command.collection, 'before', args.command.sibling, args.animate, args.callback); + }, + + /** + * Inserts one or more new elements after a provided reference element. + * + * @example + * + * .insertAfter(newElements, referenceElement [, animate] [, callback]) + * + * @example Example: Inserting a new element after a reference element + * + * // An existing reference element is chosen at index 2 + * + * var referenceElement = mixer.getState().show[2]; + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * mixer.insertAfter(newElement, referenceElement) + * .then(function(state) { + * // The new element is inserted into the container at index 3, after the reference element + * + * console.log(state.show[3] === newElement); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {HTMLElement} referenceElement + * A reference to an existing element in the container to insert new elements after. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + insertAfter: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.insert(args.command.collection, 'after', args.command.sibling, args.animate, args.callback); + }, + + /** + * Inserts one or more new elements into the container before all existing targets. + * + * @example + * + * .prepend(newElements [,animate] [,callback]) + * + * @example Example: Prepending a new element + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * // Insert the element into the container + * + * mixer.prepend(newElement) + * .then(function(state) { + * console.log(state.show[0] === newElement); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + prepend: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.insert(0, args.command.collection, args.animate, args.callback); + }, + + /** + * Inserts one or more new elements into the container after all existing targets. + * + * @example + * + * .append(newElements [,animate] [,callback]) + * + * @example Example: Appending a new element + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * // Insert the element into the container + * + * mixer.append(newElement) + * .then(function(state) { + * console.log(state.show[state.show.length - 1] === newElement); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + append: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.insert(self.state.totalTargets, args.command.collection, args.animate, args.callback); + }, + + /** + * Removes one or more existing target elements from the container. + * + * @example + * + * .remove(elements [, animate] [, callback]) + * + * @example Example 1: Removing an element by reference + * + * var elementToRemove = containerEl.firstElementChild; + * + * mixer.remove(elementToRemove) + * .then(function(state) { + * console.log(state.targets.indexOf(elementToRemove) === -1); // true + * }); + * + * @example Example 2: Removing a collection of elements by reference + * + * var elementsToRemove = containerEl.querySelectorAll('.category-a'); + * + * console.log(elementsToRemove.length) // 3 + * + * mixer.remove(elementsToRemove) + * .then(function() { + * console.log(containerEl.querySelectorAll('.category-a').length); // 0 + * }); + * + * @example Example 3: Removing one or more elements by selector + * + * mixer.remove('.category-a') + * .then(function() { + * console.log(containerEl.querySelectorAll('.category-a').length); // 0 + * }); + * + * @example Example 4: Removing an element by index + * + * console.log(mixer.getState.totalShow); // 4 + * + * // Remove the element at index 3 + * + * mixer.remove(3) + * .then(function(state) { + * console.log(state.totalShow); // 3 + * console.log(state.show[3]); // undefined + * }); + * + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string|number)} elements + * A reference to a single element to remove, an array-like collection of elements, a selector string, or the index of an element to remove. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + remove: function() { + var self = this, + args = self.parseRemoveArgs(arguments); + + return self.multimix({ + remove: args.command + }, args.animate, args.callback); + }, + + /** + * Retrieves the the value of any property or sub-object within the current + * mixitup configuration, or the whole configuration object. + * + * @example + * + * .getConfig([stringKey]) + * + * @example Example 1: retrieve the entire configuration object + * + * var config = mixer.getConfig(); // Config { ... } + * + * @example Example 2: retrieve a named sub-object of configuration object + * + * var animation = mixer.getConfig('animation'); // ConfigAnimation { ... } + * + * @example Example 3: retrieve a value of configuration object via a dot-notation string key + * + * var effects = mixer.getConfig('animation.effects'); // 'fade scale' + * + * @public + * @instance + * @since 2.0.0 + * @param {string} [stringKey] A "dot-notation" string key + * @return {*} + */ + + getConfig: function(stringKey) { + var self = this, + value = null; + + if (!stringKey) { + value = self.config; + } else { + value = h.getProperty(self.config, stringKey); + } + + return self.callFilters('valueGetConfig', value, arguments); + }, + + /** + * Updates the configuration of the mixer, after it has been instantiated. + * + * See the Configuration Object documentation for a full list of avilable + * configuration options. + * + * @example + * + * .configure(config) + * + * @example Example 1: Updating animation options + * + * mixer.configure({ + * animation: { + * effects: 'fade translateX(-100%)', + * duration: 300 + * } + * }); + * + * @example Example 2: Removing a callback after it has been set + * + * var mixer; + * + * function handleMixEndOnce() { + * // Do something .. + * + * // Then nullify the callback + * + * mixer.configure({ + * callbacks: { + * onMixEnd: null + * } + * }); + * }; + * + * // Instantiate a mixer with a callback defined + * + * mixer = mixitup(containerEl, { + * callbacks: { + * onMixEnd: handleMixEndOnce + * } + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {object} config + * An object containing one of more configuration options. + * @return {void} + */ + + configure: function(config) { + var self = this; + + self.callActions('beforeConfigure', arguments); + + h.extend(self.config, config, true, true); + + self.callActions('afterConfigure', arguments); + }, + + /** + * Returns an object containing information about the current state of the + * mixer. See the State Object documentation for more information. + * + * NB: State objects are immutable and should therefore be regenerated + * after any operation. + * + * @example + * + * .getState(); + * + * @example Example: Retrieving a state object + * + * var state = mixer.getState(); + * + * console.log(state.totalShow + 'targets are currently shown'); + * + * @public + * @instance + * @since 2.0.0 + * @return {mixitup.State} An object reflecting the current state of the mixer. + */ + + getState: function() { + var self = this, + state = null; + + state = new mixitup.State(); + + h.extend(state, self.state); + + h.freeze(state); + + return self.callFilters('stateGetState', state, arguments); + }, + + /** + * Forces the re-indexing all targets within the container. + * + * This should only be used if some other piece of code in your application + * has manipulated the contents of your container, which should be avoided. + * + * If you need to add or remove target elements from the container, use + * the built-in `.insert()` or `.remove()` methods, and MixItUp will keep + * itself up to date. + * + * @example + * + * .forceRefresh() + * + * @example Example: Force refreshing the mixer after external DOM manipulation + * + * console.log(mixer.getState().totalShow); // 3 + * + * // An element is removed from the container via some external DOM manipulation code: + * + * containerEl.removeChild(containerEl.firstElementChild); + * + * // The mixer does not know that the number of targets has changed: + * + * console.log(mixer.getState().totalShow); // 3 + * + * mixer.forceRefresh(); + * + * // After forceRefresh, the mixer is in sync again: + * + * console.log(mixer.getState().totalShow); // 2 + * + * @public + * @instance + * @since 2.1.2 + * @return {void} + */ + + forceRefresh: function() { + var self = this; + + self.indexTargets(); + }, + + /** + * Forces the re-rendering of all targets when using the Dataset API. + * + * By default, targets are only re-rendered when `data.dirtyCheck` is + * enabled, and an item's data has changed when `dataset()` is called. + * + * The `forceRender()` method allows for the re-rendering of all targets + * in response to some arbitrary event, such as the changing of the target + * render function. + * + * Targets are rendered against their existing data. + * + * @example + * + * .forceRender() + * + * @example Example: Force render targets after changing the target render function + * + * console.log(container.innerHTML); // ... <span class="mix">Foo</span> ... + * + * mixer.configure({ + * render: { + * target: (item) => `<a href="/${item.slug}/" class="mix">${item.title}</a>` + * } + * }); + * + * mixer.forceRender(); + * + * console.log(container.innerHTML); // ... <a href="/foo/" class="mix">Foo</a> ... + * + * @public + * @instance + * @since 3.2.1 + * @return {void} + */ + + forceRender: function() { + var self = this, + target = null, + el = null, + id = ''; + + for (id in self.cache) { + target = self.cache[id]; + + el = target.render(target.data); + + if (el !== target.dom.el) { + // Update target element reference + + if (target.isInDom) { + target.unbindEvents(); + + self.dom.parent.replaceChild(el, target.dom.el); + } + + if (!target.isShown) { + el.style.display = 'none'; + } + + target.dom.el = el; + + if (target.isInDom) { + target.bindEvents(); + } + } + } + + self.state = self.buildState(self.lastOperation); + }, + + /** + * Removes mixitup functionality from the container, unbinds all control + * event handlers, and deletes the mixer instance from MixItUp's internal + * cache. + * + * This should be performed whenever a mixer's container is removed from + * the DOM, such as during a page change in a single page application, + * or React's `componentWillUnmount()`. + * + * @example + * + * .destroy([cleanUp]) + * + * @example Example: Destroying the mixer before removing its container element + * + * mixer.destroy(); + * + * containerEl.parentElement.removeChild(containerEl); + * + * @public + * @instance + * @since 2.0.0 + * @param {boolean} [cleanUp=false] + * An optional boolean dictating whether or not to clean up any inline `display: none;` styling applied to hidden targets. + * @return {void} + */ + + destroy: function(cleanUp) { + var self = this, + control = null, + target = null, + i = 0; + + self.callActions('beforeDestroy', arguments); + + for (i = 0; control = self.controls[i]; i++) { + control.removeBinding(self); + } + + for (i = 0; target = self.targets[i]; i++) { + if (cleanUp) { + target.show(); + } + + target.unbindEvents(); + } + + if (self.dom.container.id.match(/^MixItUp/)) { + self.dom.container.removeAttribute('id'); + } + + delete mixitup.instances[self.id]; + + self.callActions('afterDestroy', arguments); + } + }); + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.IMoveData = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.posIn = null; + this.posOut = null; + this.operation = null; + this.callback = null; + this.statusChange = ''; + this.duration = -1; + this.staggerIndex = -1; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.IMoveData); + + mixitup.IMoveData.prototype = Object.create(mixitup.Base.prototype); + + mixitup.IMoveData.prototype.constructor = mixitup.IMoveData; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.TargetDom = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.el = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.TargetDom); + + mixitup.TargetDom.prototype = Object.create(mixitup.Base.prototype); + + mixitup.TargetDom.prototype.constructor = mixitup.TargetDom; + + /** + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.Target = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.id = ''; + this.sortString = ''; + this.mixer = null; + this.callback = null; + this.isShown = false; + this.isBound = false; + this.isExcluded = false; + this.isInDom = false; + this.handler = null; + this.operation = null; + this.data = null; + this.dom = new mixitup.TargetDom(); + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.Target); + + mixitup.Target.prototype = Object.create(mixitup.Base.prototype); + + h.extend(mixitup.Target.prototype, { + constructor: mixitup.Target, + + /** + * Initialises a newly instantiated Target. + * + * @private + * @instance + * @since 3.0.0 + * @param {(Element|null)} el + * @param {object} mixer + * @param {object} [data] + * @return {void} + */ + + init: function(el, mixer, data) { + var self = this, + id = ''; + + self.callActions('beforeInit', arguments); + + self.mixer = mixer; + + if (!el) { + // If no element is provided, render it + + el = self.render(data); + } + + self.cacheDom(el); + + self.bindEvents(); + + if (self.dom.el.style.display !== 'none') { + self.isShown = true; + } + + if (data && mixer.config.data.uidKey) { + if (typeof (id = data[mixer.config.data.uidKey]) === 'undefined' || id.toString().length < 1) { + throw new TypeError(mixitup.messages.errorDatasetInvalidUidKey({ + uidKey: mixer.config.data.uidKey + })); + } + + self.id = id; + self.data = data; + + mixer.cache[id] = self; + } + + self.callActions('afterInit', arguments); + }, + + /** + * Renders the target element using a user-defined renderer function. + * + * @private + * @instance + * @since 3.1.4 + * @param {object} data + * @return {void} + */ + + render: function(data) { + var self = this, + render = null, + el = null, + temp = null, + output = ''; + + self.callActions('beforeRender', arguments); + + render = self.callFilters('renderRender', self.mixer.config.render.target, arguments); + + if (typeof render !== 'function') { + throw new TypeError(mixitup.messages.errorDatasetRendererNotSet()); + } + + output = render(data); + + if (output && typeof output === 'object' && h.isElement(output)) { + el = output; + } else if (typeof output === 'string') { + temp = document.createElement('div'); + temp.innerHTML = output; + + el = temp.firstElementChild; + } + + return self.callFilters('elRender', el, arguments); + }, + + /** + * Caches references of DOM elements neccessary for the target's functionality. + * + * @private + * @instance + * @since 3.0.0 + * @param {Element} el + * @return {void} + */ + + cacheDom: function(el) { + var self = this; + + self.callActions('beforeCacheDom', arguments); + + self.dom.el = el; + + self.callActions('afterCacheDom', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {string} attributeName + * @return {void} + */ + + getSortString: function(attributeName) { + var self = this, + value = self.dom.el.getAttribute('data-' + attributeName) || ''; + + self.callActions('beforeGetSortString', arguments); + + value = isNaN(value * 1) ? + value.toLowerCase() : + value * 1; + + self.sortString = value; + + self.callActions('afterGetSortString', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + show: function() { + var self = this; + + self.callActions('beforeShow', arguments); + + if (!self.isShown) { + self.dom.el.style.display = ''; + + self.isShown = true; + } + + self.callActions('afterShow', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + hide: function() { + var self = this; + + self.callActions('beforeHide', arguments); + + if (self.isShown) { + self.dom.el.style.display = 'none'; + + self.isShown = false; + } + + self.callActions('afterHide', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.IMoveData} moveData + * @return {void} + */ + + move: function(moveData) { + var self = this; + + self.callActions('beforeMove', arguments); + + if (!self.isExcluded) { + self.mixer.targetsMoved++; + } + + self.applyStylesIn(moveData); + + requestAnimationFrame(function() { + self.applyStylesOut(moveData); + }); + + self.callActions('afterMove', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {object} posData + * @param {number} multiplier + * @return {void} + */ + + applyTween: function(posData, multiplier) { + var self = this, + propertyName = '', + tweenData = null, + posIn = posData.posIn, + currentTransformValues = [], + currentValues = new mixitup.StyleData(), + i = -1; + + self.callActions('beforeApplyTween', arguments); + + currentValues.x = posIn.x; + currentValues.y = posIn.y; + + if (multiplier === 0) { + self.hide(); + } else if (!self.isShown) { + self.show(); + } + + for (i = 0; propertyName = mixitup.features.TWEENABLE[i]; i++) { + tweenData = posData.tweenData[propertyName]; + + if (propertyName === 'x') { + if (!tweenData) continue; + + currentValues.x = posIn.x + (tweenData * multiplier); + } else if (propertyName === 'y') { + if (!tweenData) continue; + + currentValues.y = posIn.y + (tweenData * multiplier); + } else if (tweenData instanceof mixitup.TransformData) { + if (!tweenData.value) continue; + + currentValues[propertyName].value = + posIn[propertyName].value + (tweenData.value * multiplier); + + currentValues[propertyName].unit = tweenData.unit; + + currentTransformValues.push( + propertyName + '(' + currentValues[propertyName].value + tweenData.unit + ')' + ); + } else { + if (!tweenData) continue; + + currentValues[propertyName] = posIn[propertyName] + (tweenData * multiplier); + + self.dom.el.style[propertyName] = currentValues[propertyName]; + } + } + + if (currentValues.x || currentValues.y) { + currentTransformValues.unshift('translate(' + currentValues.x + 'px, ' + currentValues.y + 'px)'); + } + + if (currentTransformValues.length) { + self.dom.el.style[mixitup.features.transformProp] = currentTransformValues.join(' '); + } + + self.callActions('afterApplyTween', arguments); + }, + + /** + * Applies the initial styling to a target element before any transition + * is applied. + * + * @private + * @instance + * @param {mixitup.IMoveData} moveData + * @return {void} + */ + + applyStylesIn: function(moveData) { + var self = this, + posIn = moveData.posIn, + isFading = self.mixer.effectsIn.opacity !== 1, + transformValues = []; + + self.callActions('beforeApplyStylesIn', arguments); + + transformValues.push('translate(' + posIn.x + 'px, ' + posIn.y + 'px)'); + + if (self.mixer.config.animation.animateResizeTargets) { + if (moveData.statusChange !== 'show') { + // Don't apply posIn width or height or showing, as will be 0 + + self.dom.el.style.width = posIn.width + 'px'; + self.dom.el.style.height = posIn.height + 'px'; + } + + self.dom.el.style.marginRight = posIn.marginRight + 'px'; + self.dom.el.style.marginBottom = posIn.marginBottom + 'px'; + } + + isFading && (self.dom.el.style.opacity = posIn.opacity); + + if (moveData.statusChange === 'show') { + transformValues = transformValues.concat(self.mixer.transformIn); + } + + self.dom.el.style[mixitup.features.transformProp] = transformValues.join(' '); + + self.callActions('afterApplyStylesIn', arguments); + }, + + /** + * Applies a transition followed by the final styles for the element to + * transition towards. + * + * @private + * @instance + * @param {mixitup.IMoveData} moveData + * @return {void} + */ + + applyStylesOut: function(moveData) { + var self = this, + transitionRules = [], + transformValues = [], + isResizing = self.mixer.config.animation.animateResizeTargets, + isFading = typeof self.mixer.effectsIn.opacity !== 'undefined'; + + self.callActions('beforeApplyStylesOut', arguments); + + // Build the transition rules + + transitionRules.push(self.writeTransitionRule( + mixitup.features.transformRule, + moveData.staggerIndex + )); + + if (moveData.statusChange !== 'none') { + transitionRules.push(self.writeTransitionRule( + 'opacity', + moveData.staggerIndex, + moveData.duration + )); + } + + if (isResizing) { + transitionRules.push(self.writeTransitionRule( + 'width', + moveData.staggerIndex, + moveData.duration + )); + + transitionRules.push(self.writeTransitionRule( + 'height', + moveData.staggerIndex, + moveData.duration + )); + + transitionRules.push(self.writeTransitionRule( + 'margin', + moveData.staggerIndex, + moveData.duration + )); + } + + // If no callback was provided, the element will + // not transition in any way so tag it as "immovable" + + if (!moveData.callback) { + self.mixer.targetsImmovable++; + + if (self.mixer.targetsMoved === self.mixer.targetsImmovable) { + // If the total targets moved is equal to the + // number of immovable targets, the operation + // should be considered finished + + self.mixer.cleanUp(moveData.operation); + } + + return; + } + + // If the target will transition in some fasion, + // assign a callback function + + self.operation = moveData.operation; + self.callback = moveData.callback; + + // As long as the target is not excluded, increment + // the total number of targets bound + + !self.isExcluded && self.mixer.targetsBound++; + + // Tag the target as bound to differentiate from transitionEnd + // events that may come from stylesheet driven effects + + self.isBound = true; + + // Apply the transition + + self.applyTransition(transitionRules); + + // Apply width, height and margin negation + + if (isResizing && moveData.posOut.width > 0 && moveData.posOut.height > 0) { + self.dom.el.style.width = moveData.posOut.width + 'px'; + self.dom.el.style.height = moveData.posOut.height + 'px'; + self.dom.el.style.marginRight = moveData.posOut.marginRight + 'px'; + self.dom.el.style.marginBottom = moveData.posOut.marginBottom + 'px'; + } + + if (!self.mixer.config.animation.nudge && moveData.statusChange === 'hide') { + // If we're not nudging, the translation should be + // applied before any other transforms to prevent + // lateral movement + + transformValues.push('translate(' + moveData.posOut.x + 'px, ' + moveData.posOut.y + 'px)'); + } + + // Apply fade + + switch (moveData.statusChange) { + case 'hide': + isFading && (self.dom.el.style.opacity = self.mixer.effectsOut.opacity); + + transformValues = transformValues.concat(self.mixer.transformOut); + + break; + case 'show': + isFading && (self.dom.el.style.opacity = 1); + } + + if ( + self.mixer.config.animation.nudge || + (!self.mixer.config.animation.nudge && moveData.statusChange !== 'hide') + ) { + // Opposite of above - apply translate after + // other transform + + transformValues.push('translate(' + moveData.posOut.x + 'px, ' + moveData.posOut.y + 'px)'); + } + + // Apply transforms + + self.dom.el.style[mixitup.features.transformProp] = transformValues.join(' '); + + self.callActions('afterApplyStylesOut', arguments); + }, + + /** + * Combines the name of a CSS property with the appropriate duration and delay + * values to created a valid transition rule. + * + * @private + * @instance + * @since 3.0.0 + * @param {string} property + * @param {number} staggerIndex + * @param {number} duration + * @return {string} + */ + + writeTransitionRule: function(property, staggerIndex, duration) { + var self = this, + delay = self.getDelay(staggerIndex), + rule = ''; + + rule = property + ' ' + + (duration > 0 ? duration : self.mixer.config.animation.duration) + 'ms ' + + delay + 'ms ' + + (property === 'opacity' ? 'linear' : self.mixer.config.animation.easing); + + return self.callFilters('ruleWriteTransitionRule', rule, arguments); + }, + + /** + * Calculates the transition delay for each target element based on its index, if + * staggering is applied. If defined, A custom `animation.staggerSeqeuence` + * function can be used to manipulate the order of indices to produce custom + * stagger effects (e.g. for use in a grid with irregular row lengths). + * + * @private + * @instance + * @since 2.0.0 + * @param {number} index + * @return {number} + */ + + getDelay: function(index) { + var self = this, + delay = -1; + + if (typeof self.mixer.config.animation.staggerSequence === 'function') { + index = self.mixer.config.animation.staggerSequence.call(self, index, self.state); + } + + delay = !!self.mixer.staggerDuration ? index * self.mixer.staggerDuration : 0; + + return self.callFilters('delayGetDelay', delay, arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {string[]} rules + * @return {void} + */ + + applyTransition: function(rules) { + var self = this, + transitionString = rules.join(', '); + + self.callActions('beforeApplyTransition', arguments); + + self.dom.el.style[mixitup.features.transitionProp] = transitionString; + + self.callActions('afterApplyTransition', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Event} e + * @return {void} + */ + + handleTransitionEnd: function(e) { + var self = this, + propName = e.propertyName, + canResize = self.mixer.config.animation.animateResizeTargets; + + self.callActions('beforeHandleTransitionEnd', arguments); + + if ( + self.isBound && + e.target.matches(self.mixer.config.selectors.target) && + ( + propName.indexOf('transform') > -1 || + propName.indexOf('opacity') > -1 || + canResize && propName.indexOf('height') > -1 || + canResize && propName.indexOf('width') > -1 || + canResize && propName.indexOf('margin') > -1 + ) + ) { + self.callback.call(self, self.operation); + + self.isBound = false; + self.callback = null; + self.operation = null; + } + + self.callActions('afterHandleTransitionEnd', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Event} e + * @return {void} + */ + + eventBus: function(e) { + var self = this; + + self.callActions('beforeEventBus', arguments); + + switch (e.type) { + case 'webkitTransitionEnd': + case 'transitionend': + self.handleTransitionEnd(e); + } + + self.callActions('afterEventBus', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + unbindEvents: function() { + var self = this; + + self.callActions('beforeUnbindEvents', arguments); + + h.off(self.dom.el, 'webkitTransitionEnd', self.handler); + h.off(self.dom.el, 'transitionend', self.handler); + + self.callActions('afterUnbindEvents', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + bindEvents: function() { + var self = this, + transitionEndEvent = ''; + + self.callActions('beforeBindEvents', arguments); + + transitionEndEvent = mixitup.features.transitionPrefix === 'webkit' ? 'webkitTransitionEnd' : 'transitionend'; + + self.handler = function(e) { + return self.eventBus(e); + }; + + h.on(self.dom.el, transitionEndEvent, self.handler); + + self.callActions('afterBindEvents', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {boolean} [getBox] + * @return {PosData} + */ + + getPosData: function(getBox) { + var self = this, + styles = {}, + rect = null, + posData = new mixitup.StyleData(); + + self.callActions('beforeGetPosData', arguments); + + posData.x = self.dom.el.offsetLeft; + posData.y = self.dom.el.offsetTop; + + if (self.mixer.config.animation.animateResizeTargets || getBox) { + rect = self.dom.el.getBoundingClientRect(); + + posData.top = rect.top; + posData.right = rect.right; + posData.bottom = rect.bottom; + posData.left = rect.left; + + posData.width = rect.width; + posData.height = rect.height; + } + + if (self.mixer.config.animation.animateResizeTargets) { + styles = window.getComputedStyle(self.dom.el); + + posData.marginBottom = parseFloat(styles.marginBottom); + posData.marginRight = parseFloat(styles.marginRight); + } + + return self.callFilters('posDataGetPosData', posData, arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + cleanUp: function() { + var self = this; + + self.callActions('beforeCleanUp', arguments); + + self.dom.el.style[mixitup.features.transformProp] = ''; + self.dom.el.style[mixitup.features.transitionProp] = ''; + self.dom.el.style.opacity = ''; + + if (self.mixer.config.animation.animateResizeTargets) { + self.dom.el.style.width = ''; + self.dom.el.style.height = ''; + self.dom.el.style.marginRight = ''; + self.dom.el.style.marginBottom = ''; + } + + self.callActions('afterCleanUp', arguments); + } + }); + + /** + * A jQuery-collection-like wrapper around one or more `mixitup.Mixer` instances + * allowing simultaneous control of said instances similar to the MixItUp 2 API. + * + * @example + * new mixitup.Collection(instances) + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + * @param {mixitup.Mixer[]} instances + */ + + mixitup.Collection = function(instances) { + var instance = null, + i = -1; + + this.callActions('beforeConstruct'); + + for (i = 0; instance = instances[i]; i++) { + this[i] = instance; + } + + this.length = instances.length; + + this.callActions('afterConstruct'); + + h.freeze(this); + }; + + mixitup.BaseStatic.call(mixitup.Collection); + + mixitup.Collection.prototype = Object.create(mixitup.Base.prototype); + + h.extend(mixitup.Collection.prototype, + /** @lends mixitup.Collection */ + { + constructor: mixitup.Collection, + + /** + * Calls a method on all instances in the collection by passing the method + * name as a string followed by any applicable parameters to be curried into + * to the method. + * + * @example + * .mixitup(methodName[,arg1][,arg2..]); + * + * @example + * var collection = new Collection([mixer1, mixer2]); + * + * return collection.mixitup('filter', '.category-a') + * .then(function(states) { + * state.forEach(function(state) { + * console.log(state.activeFilter.selector); // .category-a + * }); + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {string} methodName + * @return {Promise>} + */ + + mixitup: function(methodName) { + var self = this, + instance = null, + args = Array.prototype.slice.call(arguments), + tasks = [], + i = -1; + + this.callActions('beforeMixitup'); + + args.shift(); + + for (i = 0; instance = self[i]; i++) { + tasks.push(instance[methodName].apply(instance, args)); + } + + return self.callFilters('promiseMixitup', h.all(tasks, mixitup.libraries), arguments); + } + }); + + /** + * `mixitup.Operation` objects contain all data neccessary to describe the full + * lifecycle of any MixItUp operation. They can be used to compute and store an + * operation for use at a later time (e.g. programmatic tweening). + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.Operation = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.id = ''; + + this.args = []; + this.command = null; + this.showPosData = []; + this.toHidePosData = []; + + this.startState = null; + this.newState = null; + this.docState = null; + + this.willSort = false; + this.willChangeLayout = false; + this.hasEffect = false; + this.hasFailed = false; + + this.triggerElement = null; + + this.show = []; + this.hide = []; + this.matching = []; + this.toShow = []; + this.toHide = []; + this.toMove = []; + this.toRemove = []; + this.startOrder = []; + this.newOrder = []; + this.startSort = null; + this.newSort = null; + this.startFilter = null; + this.newFilter = null; + this.startDataset = null; + this.newDataset = null; + this.viewportDeltaX = 0; + this.viewportDeltaY = 0; + this.startX = 0; + this.startY = 0; + this.startHeight = 0; + this.startWidth = 0; + this.newX = 0; + this.newY = 0; + this.newHeight = 0; + this.newWidth = 0; + this.startContainerClassName = ''; + this.startDisplay = ''; + this.newContainerClassName = ''; + this.newDisplay = ''; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.Operation); + + mixitup.Operation.prototype = Object.create(mixitup.Base.prototype); + + mixitup.Operation.prototype.constructor = mixitup.Operation; + + /** + * `mixitup.State` objects expose various pieces of data detailing the state of + * a MixItUp instance. They are provided at the start and end of any operation via + * callbacks and events, with the most recent state stored between operations + * for retrieval at any time via the API. + * + * @constructor + * @namespace + * @memberof mixitup + * @public + * @since 3.0.0 + */ + + mixitup.State = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * The ID of the mixer instance. + * + * @name id + * @memberof mixitup.State + * @instance + * @type {string} + * @default '' + */ + + this.id = ''; + + /** + * The currently active filter command as set by a control click or API call. + * + * @name activeFilter + * @memberof mixitup.State + * @instance + * @type {mixitup.CommandFilter} + * @default null + */ + + this.activeFilter = null; + + /** + * The currently active sort command as set by a control click or API call. + * + * @name activeSort + * @memberof mixitup.State + * @instance + * @type {mixitup.CommandSort} + * @default null + */ + + this.activeSort = null; + + /** + * The current layout-specific container class name, if applied. + * + * @name activeContainerClassName + * @memberof mixitup.State + * @instance + * @type {string} + * @default '' + */ + + this.activeContainerClassName = ''; + + /** + * A reference to the container element that the mixer is instantiated on. + * + * @name container + * @memberof mixitup.State + * @instance + * @type {Element} + * @default null + */ + + this.container = null; + + /** + * An array of all target elements indexed by the mixer. + * + * @name targets + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default [] + */ + + this.targets = []; + + /** + * An array of all target elements not matching the current filter. + * + * @name hide + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default [] + */ + + this.hide = []; + + /** + * An array of all target elements matching the current filter and any additional + * limits applied such as pagination. + * + * @name show + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default [] + */ + + this.show = []; + + /** + * An array of all target elements matching the current filter irrespective of + * any additional limits applied such as pagination. + * + * @name matching + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default [] + */ + + this.matching = []; + + /** + * An integer representing the total number of target elements indexed by the + * mixer. Equivalent to `state.targets.length`. + * + * @name totalTargets + * @memberof mixitup.State + * @instance + * @type {number} + * @default -1 + */ + + this.totalTargets = -1; + + /** + * An integer representing the total number of target elements matching the + * current filter and any additional limits applied such as pagination. + * Equivalent to `state.show.length`. + * + * @name totalShow + * @memberof mixitup.State + * @instance + * @type {number} + * @default -1 + */ + + this.totalShow = -1; + + /** + * An integer representing the total number of target elements not matching + * the current filter. Equivalent to `state.hide.length`. + * + * @name totalHide + * @memberof mixitup.State + * @instance + * @type {number} + * @default -1 + */ + + this.totalHide = -1; + + /** + * An integer representing the total number of target elements matching the + * current filter irrespective of any other limits applied such as pagination. + * Equivalent to `state.matching.length`. + * + * @name totalMatching + * @memberof mixitup.State + * @instance + * @type {number} + * @default -1 + */ + + this.totalMatching = -1; + + /** + * A boolean indicating whether the last operation "failed", i.e. no targets + * could be found matching the filter. + * + * @name hasFailed + * @memberof mixitup.State + * @instance + * @type {boolean} + * @default false + */ + + this.hasFailed = false; + + /** + * The DOM element that was clicked if the last operation was triggered by the + * clicking of a control and not an API call. + * + * @name triggerElement + * @memberof mixitup.State + * @instance + * @type {Element|null} + * @default null + */ + + this.triggerElement = null; + + /** + * The currently active dataset underlying the rendered targets, if the + * dataset API is in use. + * + * @name activeDataset + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default null + */ + + this.activeDataset = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.State); + + mixitup.State.prototype = Object.create(mixitup.Base.prototype); + + mixitup.State.prototype.constructor = mixitup.State; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.UserInstruction = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.command = {}; + this.animate = false; + this.callback = null; + + this.callActions('afterConstruct'); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.UserInstruction); + + mixitup.UserInstruction.prototype = Object.create(mixitup.Base.prototype); + + mixitup.UserInstruction.prototype.constructor = mixitup.UserInstruction; + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + + mixitup.Messages = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /* Errors + ----------------------------------------------------------------------------- */ + + this.ERROR_FACTORY_INVALID_CONTAINER = + '[MixItUp] An invalid selector or element reference was passed to the mixitup factory function'; + + this.ERROR_FACTORY_CONTAINER_NOT_FOUND = + '[MixItUp] The provided selector yielded no container element'; + + this.ERROR_CONFIG_INVALID_ANIMATION_EFFECTS = + '[MixItUp] Invalid value for `animation.effects`'; + + this.ERROR_CONFIG_INVALID_CONTROLS_SCOPE = + '[MixItUp] Invalid value for `controls.scope`'; + + this.ERROR_CONFIG_INVALID_PROPERTY = + '[MixitUp] Invalid configuration object property "${erroneous}"${suggestion}'; + + this.ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION = + '. Did you mean "${probableMatch}"?'; + + this.ERROR_CONFIG_DATA_UID_KEY_NOT_SET = + '[MixItUp] To use the dataset API, a UID key must be specified using `data.uidKey`'; + + this.ERROR_DATASET_INVALID_UID_KEY = + '[MixItUp] The specified UID key "${uidKey}" is not present on one or more dataset items'; + + this.ERROR_DATASET_DUPLICATE_UID = + '[MixItUp] The UID "${uid}" was found on two or more dataset items. UIDs must be unique.'; + + this.ERROR_INSERT_INVALID_ARGUMENTS = + '[MixItUp] Please provider either an index or a sibling and position to insert, not both'; + + this.ERROR_INSERT_PREEXISTING_ELEMENT = + '[MixItUp] An element to be inserted already exists in the container'; + + this.ERROR_FILTER_INVALID_ARGUMENTS = + '[MixItUp] Please provide either a selector or collection `.filter()`, not both'; + + this.ERROR_DATASET_NOT_SET = + '[MixItUp] To use the dataset API with pre-rendered targets, a starting dataset must be set using `load.dataset`'; + + this.ERROR_DATASET_PRERENDERED_MISMATCH = + '[MixItUp] `load.dataset` does not match pre-rendered targets'; + + this.ERROR_DATASET_RENDERER_NOT_SET = + '[MixItUp] To insert an element via the dataset API, a target renderer function must be provided to `render.target`'; + + this.ERROR_SORT_NON_EXISTENT_ELEMENT = + '[MixItUp] An element to be sorted does not already exist in the container'; + + /* Warnings + ----------------------------------------------------------------------------- */ + + this.WARNING_FACTORY_PREEXISTING_INSTANCE = + '[MixItUp] WARNING: This element already has an active MixItUp instance. The provided configuration object will be ignored.' + + ' If you wish to perform additional methods on this instance, please create a reference.'; + + this.WARNING_INSERT_NO_ELEMENTS = + '[MixItUp] WARNING: No valid elements were passed to `.insert()`'; + + this.WARNING_REMOVE_NO_ELEMENTS = + '[MixItUp] WARNING: No valid elements were passed to `.remove()`'; + + this.WARNING_MULTIMIX_INSTANCE_QUEUE_FULL = + '[MixItUp] WARNING: An operation was requested but the MixItUp instance was busy. The operation was rejected because the ' + + 'queue is full or queuing is disabled.'; + + this.WARNING_GET_OPERATION_INSTANCE_BUSY = + '[MixItUp] WARNING: Operations can be be created while the MixItUp instance is busy.'; + + this.WARNING_NO_PROMISE_IMPLEMENTATION = + '[MixItUp] WARNING: No Promise implementations could be found. If you wish to use promises with MixItUp please install' + + ' an ES6 Promise polyfill.'; + + this.WARNING_INCONSISTENT_SORTING_ATTRIBUTES = + '[MixItUp] WARNING: The requested sorting data attribute "${attribute}" was not present on one or more target elements' + + ' which may product unexpected sort output'; + + this.callActions('afterConstruct'); + + this.compileTemplates(); + + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.Messages); + + mixitup.Messages.prototype = Object.create(mixitup.Base.prototype); + + mixitup.Messages.prototype.constructor = mixitup.Messages; + + /** + * @return {void} + */ + + mixitup.Messages.prototype.compileTemplates = function() { + var errorKey = ''; + var errorMessage = ''; + + for (errorKey in this) { + if (typeof (errorMessage = this[errorKey]) !== 'string') continue; + + this[h.camelCase(errorKey)] = h.template(errorMessage); + } + }; + + mixitup.messages = new mixitup.Messages(); + + /** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + * @param {mixitup.Mixer} mixer + */ + + mixitup.Facade = function Mixer(mixer) { + mixitup.Base.call(this); + + this.callActions('beforeConstruct', arguments); + + this.configure = mixer.configure.bind(mixer); + this.show = mixer.show.bind(mixer); + this.hide = mixer.hide.bind(mixer); + this.filter = mixer.filter.bind(mixer); + this.toggleOn = mixer.toggleOn.bind(mixer); + this.toggleOff = mixer.toggleOff.bind(mixer); + this.sort = mixer.sort.bind(mixer); + this.changeLayout = mixer.changeLayout.bind(mixer); + this.multimix = mixer.multimix.bind(mixer); + this.dataset = mixer.dataset.bind(mixer); + this.tween = mixer.tween.bind(mixer); + this.insert = mixer.insert.bind(mixer); + this.insertBefore = mixer.insertBefore.bind(mixer); + this.insertAfter = mixer.insertAfter.bind(mixer); + this.prepend = mixer.prepend.bind(mixer); + this.append = mixer.append.bind(mixer); + this.remove = mixer.remove.bind(mixer); + this.destroy = mixer.destroy.bind(mixer); + this.forceRefresh = mixer.forceRefresh.bind(mixer); + this.forceRender = mixer.forceRender.bind(mixer); + this.isMixing = mixer.isMixing.bind(mixer); + this.getOperation = mixer.getOperation.bind(mixer); + this.getConfig = mixer.getConfig.bind(mixer); + this.getState = mixer.getState.bind(mixer); + + this.callActions('afterConstruct', arguments); + + h.freeze(this); + h.seal(this); + }; + + mixitup.BaseStatic.call(mixitup.Facade); + + mixitup.Facade.prototype = Object.create(mixitup.Base.prototype); + + mixitup.Facade.prototype.constructor = mixitup.Facade; + + if (typeof exports === 'object' && typeof module === 'object') { + module.exports = mixitup; + } else if (typeof define === 'function' && define.amd) { + define(function() { + return mixitup; + }); + } else if (typeof window.mixitup === 'undefined' || typeof window.mixitup !== 'function') { + window.mixitup = mixitup; + } + mixitup.BaseStatic.call(mixitup.constructor); + + mixitup.NAME = 'mixitup'; + mixitup.CORE_VERSION = '3.3.1'; +})(window); \ No newline at end of file diff --git a/mixitup-3.3.1/dist/mixitup.min.js b/mixitup-3.3.1/dist/mixitup.min.js new file mode 100644 index 0000000..8562101 --- /dev/null +++ b/mixitup-3.3.1/dist/mixitup.min.js @@ -0,0 +1,18 @@ +/**! + * MixItUp v3.3.1 + * A high-performance, dependency-free library for animated filtering, sorting and more + * Build 94e0fbf6-cd0b-4987-b3c0-14b59b67b8a0 + * + * @copyright Copyright 2014-2018 KunkaLabs Limited. + * @author KunkaLabs Limited. + * @link https://www.kunkalabs.com/mixitup/ + * + * @license Commercial use requires a commercial license. + * https://www.kunkalabs.com/mixitup/licenses/ + * + * Non-commercial use permitted under same terms as CC BY-NC 3.0 license. + * http://creativecommons.org/licenses/by-nc/3.0/ + */ +!function(t){"use strict";var e=null,n=null;!function(){var e=["webkit","moz","o","ms"],n=t.document.createElement("div"),a=-1;for(a=0;a-1}}(t.Element.prototype),Object.keys||(Object.keys=function(){var t=Object.prototype.hasOwnProperty,e=!1,n=[],a=-1;return e=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=n.length,function(i){var o=[],r="",s=-1;if("object"!=typeof i&&("function"!=typeof i||null===i))throw new TypeError("Object.keys called on non-object");for(r in i)t.call(i,r)&&o.push(r);if(e)for(s=0;s>>0,0===i)return-1;if(e=0,arguments.length>1&&(e=Number(arguments[1]),e!==e?e=0:0!==e&&e!==1/0&&e!==-(1/0)&&(e=(e>0||-1)*Math.floor(Math.abs(e)))),e>=i)return-1;for(n=e>=0?e:Math.max(i-Math.abs(e),0);n0)||s);g++)r.id?d=r.id:(d="MixItUp"+n.randomHex(),r.id=d),e.instances[d]instanceof e.Mixer?(l=e.instances[d],(!i||i&&i.debug&&i.debug.showWarnings!==!1)&&console.warn(e.messages.warningFactoryPreexistingInstance())):(l=new e.Mixer,l.attach(r,u,d,i),e.instances[d]=l),c=new e.Facade(l),i&&i.debug&&i.debug.enable?h.push(l):h.push(c);return f=s?new e.Collection(h):h[0]},e.use=function(t){e.Base.prototype.callActions.call(e,"beforeUse",arguments),"function"==typeof t&&"mixitup-extension"===t.TYPE?"undefined"==typeof e.extensions[t.NAME]&&(t(e),e.extensions[t.NAME]=t):t.fn&&t.fn.jquery&&(e.libraries.$=t),e.Base.prototype.callActions.call(e,"afterUse",arguments)},e.instances={},e.extensions={},e.libraries={},n={hasClass:function(t,e){return!!t.className.match(new RegExp("(\\s|^)"+e+"(\\s|$)"))},addClass:function(t,e){this.hasClass(t,e)||(t.className+=t.className?" "+e:e)},removeClass:function(t,e){if(this.hasClass(t,e)){var n=new RegExp("(\\s|^)"+e+"(\\s|$)");t.className=t.className.replace(n," ").trim()}},extend:function(t,e,n,a){var i=[],o="",r=-1;n=n||!1,a=a||!1;try{if(Array.isArray(e))for(r=0;ru&&(u=f,l=c)}throw u>1&&(s=e.messages.errorConfigInvalidPropertySuggestion({probableMatch:l})),r=e.messages.errorConfigInvalidProperty({erroneous:o,suggestion:s}),new TypeError(r)}throw t},template:function(t){for(var e=/\${([\w]*)}/g,n={},a=null;a=e.exec(t);)n[a[1]]=new RegExp("\\${"+a[1]+"}","g");return function(e){var a="",i=t;e=e||{};for(a in n)i=i.replace(n[a],"undefined"!=typeof e[a]?e[a]:"");return i}},on:function(e,n,a,i){e&&(e.addEventListener?e.addEventListener(n,a,i):e.attachEvent&&(e["e"+n+a]=a,e[n+a]=function(){e["e"+n+a](t.event)},e.attachEvent("on"+n,e[n+a])))},off:function(t,e,n){t&&(t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent&&(t.detachEvent("on"+e,t[e+n]),t[e+n]=null))},getCustomEvent:function(e,n,a){var i=null;return a=a||t.document,"function"==typeof t.CustomEvent?i=new t.CustomEvent(e,{detail:n,bubbles:!0,cancelable:!0}):"function"==typeof a.createEvent?(i=a.createEvent("CustomEvent"),i.initCustomEvent(e,!0,!0,n)):(i=a.createEventObject(),i.type=e,i.returnValue=!1,i.cancelBubble=!1,i.detail=n),i},getOriginalEvent:function(t){return t.touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t},index:function(t,e){for(var n=0;null!==(t=t.previousElementSibling);)e&&!t.matches(e)||++n;return n},camelCase:function(t){return t.toLowerCase().replace(/([_-][a-z])/g,function(t){return t.toUpperCase().replace(/[_-]/,"")})},pascalCase:function(t){return(t=this.camelCase(t)).charAt(0).toUpperCase()+t.slice(1)},dashCase:function(t){return t.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()},isElement:function(e,n){return n=n||t.document,!!(t.HTMLElement&&e instanceof t.HTMLElement)||(!!(n.defaultView&&n.defaultView.HTMLElement&&e instanceof n.defaultView.HTMLElement)||null!==e&&1===e.nodeType&&"string"==typeof e.nodeName)},createElement:function(e,n){var a=null,i=null;for(n=n||t.document,a=n.createDocumentFragment(),i=n.createElement("div"),i.innerHTML=e.trim();i.firstChild;)a.appendChild(i.firstChild);return a},removeWhitespace:function(t){for(var e;t&&"#text"===t.nodeName;)e=t,t=t.previousSibling,e.parentElement&&e.parentElement.removeChild(e)},isEqualArray:function(t,e){var n=t.length;if(n!==e.length)return!1;for(;n--;)if(t[n]!==e[n])return!1;return!0},deepEquals:function(t,e){var n;if("object"==typeof t&&t&&"object"==typeof e&&e){if(Object.keys(t).length!==Object.keys(e).length)return!1;for(n in t)if(!e.hasOwnProperty(n)||!this.deepEquals(t[n],e[n]))return!1}else if(t!==e)return!1;return!0},arrayShuffle:function(t){for(var e=t.slice(),n=e.length,a=n,i=-1,o=[];a--;)i=~~(Math.random()*n),o=e[a],e[a]=e[i],e[i]=o;return e},arrayFromList:function(t){var e,n;try{return Array.prototype.slice.call(t)}catch(a){for(e=[],n=0;n "+n),o&&e.removeAttribute("id")),i},clean:function(t){var e=[],n=-1;for(n=0;ni)return!0}return!0},Deferred:function(){this.promise=null,this.resolve=null,this.reject=null,this.id=n.randomHex()},isEmptyObject:function(t){var e="";if("function"==typeof Object.keys)return 0===Object.keys(t).length;for(e in t)if(t.hasOwnProperty(e))return!1;return!0},getClassname:function(t,e,n){var a="";return a+=t.block,a.length&&(a+=t.delineatorElement),a+=t["element"+this.pascalCase(e)],n?(a.length&&(a+=t.delineatorModifier),a+=n):a},getProperty:function(t,e){var n=e.split("."),a=null,i="",o=0;if(!e)return t;for(a=function(t){return t?t[i]:null};o-1,e.callFilters("afterIsBound",n,arguments)},addBinding:function(t){var e=this;this.callActions("beforeAddBinding",arguments),e.isBound()||e.bound.push(t),this.callActions("afterAddBinding",arguments)},removeBinding:function(t){var n=this,a=-1;this.callActions("beforeRemoveBinding",arguments),(a=n.bound.indexOf(t))>-1&&n.bound.splice(a,1),n.bound.length<1&&(n.unbindClick(),a=e.controls.indexOf(n),e.controls.splice(a,1),"active"===n.status&&n.renderStatus(n.el,"inactive")),this.callActions("afterRemoveBinding",arguments)},bindClick:function(){var t=this;this.callActions("beforeBindClick",arguments),t.handler=function(e){t.handleClick(e)},n.on(t.el,"click",t.handler),this.callActions("afterBindClick",arguments)},unbindClick:function(){var t=this;this.callActions("beforeUnbindClick",arguments),n.off(t.el,"click",t.handler),t.handler=null,this.callActions("afterUnbindClick",arguments)},handleClick:function(t){var a=this,i=null,o=null,r=!1,s=void 0,l={},c=null,u=[],f=-1;if(this.callActions("beforeHandleClick",arguments),this.pending=0,o=a.bound[0],i=a.selector?n.closestParent(t.target,o.config.selectors.control+a.selector,!0,o.dom.document):a.el,!i)return void a.callActions("afterHandleClick",arguments);switch(a.type){case"filter":l.filter=a.filter||i.getAttribute("data-filter");break;case"sort":l.sort=a.sort||i.getAttribute("data-sort");break;case"multimix":l.filter=a.filter||i.getAttribute("data-filter"),l.sort=a.sort||i.getAttribute("data-sort");break;case"toggle":l.filter=a.filter||i.getAttribute("data-toggle"),r="live"===a.status?n.hasClass(i,a.classNames.active):"active"===a.status}for(f=0;f0||("live"===a.status?a.updateLive(t,n):(i.sort=a.sort,i.filter=a.filter,a.callFilters("actionsUpdate",i,arguments),a.parseStatusChange(a.el,t,i,n)),a.callActions("afterUpdate",arguments))},updateLive:function(t,n){var a=this,i=null,o=null,r=null,s=-1;if(a.callActions("beforeUpdateLive",arguments),a.el){for(i=a.el.querySelectorAll(a.selector),s=0;r=i[s];s++){switch(o=new e.CommandMultimix,a.type){case"filter":o.filter=r.getAttribute("data-filter");break;case"sort":o.sort=r.getAttribute("data-sort");break;case"multimix":o.filter=r.getAttribute("data-filter"),o.sort=r.getAttribute("data-sort");break;case"toggle":o.filter=r.getAttribute("data-toggle")}o=a.callFilters("actionsUpdateLive",o,arguments),a.parseStatusChange(r,t,o,n)}a.callActions("afterUpdateLive",arguments)}},parseStatusChange:function(t,e,n,a){var i=this,o="",r="",s=-1;switch(i.callActions("beforeParseStatusChange",arguments),i.type){case"filter":e.filter===n.filter?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"multimix":e.sort===n.sort&&e.filter===n.filter?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"sort":e.sort.match(/:asc/g)&&(o=e.sort.replace(/:asc/g,"")),e.sort===n.sort||o===n.sort?i.renderStatus(t,"active"):i.renderStatus(t,"inactive");break;case"toggle":for(a.length<1&&i.renderStatus(t,"inactive"),e.filter===n.filter&&i.renderStatus(t,"active"),s=0;s-1)throw new Error(e.messages.errorInsertPreexistingElement());c.style.display="none",s.appendChild(c),s.appendChild(i.dom.document.createTextNode(" ")),n.isElement(c,i.dom.document)&&c.matches(i.config.selectors.target)&&(l=new e.Target,l.init(c,i),l.isInDom=!0,i.targets.splice(r,0,l),r++)}i.dom.parent.insertBefore(s,o)}a.startOrder=i.origOrder=i.targets,i.callActions("afterInsertTargets",arguments)},getNextSibling:function(t,e,n){var a=this,i=null;return t=Math.max(t,0),e&&"before"===n?i=e:e&&"after"===n?i=e.nextElementSibling||null:a.targets.length>0&&"undefined"!=typeof t?i=t0&&(a.config.layout.siblingAfter?i=a.config.layout.siblingAfter:a.config.layout.siblingBefore?i=a.config.layout.siblingBefore.nextElementSibling:a.dom.parent.children[0]),a.callFilters("elementGetNextSibling",i,arguments)},filterOperation:function(t){var e=this,n=!1,a=-1,i="",o=null,r=-1;for(e.callActions("beforeFilterOperation",arguments),i=t.newFilter.action,r=0;o=t.newOrder[r];r++)n=t.newFilter.collection?t.newFilter.collection.indexOf(o.dom.el)>-1:""!==t.newFilter.selector&&o.dom.el.matches(t.newFilter.selector),e.evaluateHideShow(n,o,i,t);if(t.toRemove.length)for(r=0;o=t.show[r];r++)t.toRemove.indexOf(o)>-1&&(t.show.splice(r,1),(a=t.toShow.indexOf(o))>-1&&t.toShow.splice(a,1),t.toHide.push(o),t.hide.push(o),r--);t.matching=t.show.slice(),0===t.show.length&&""!==t.newFilter.selector&&0!==e.targets.length&&(t.hasFailed=!0),e.callActions("afterFilterOperation",arguments)},evaluateHideShow:function(t,e,n,a){var i=this,o=!1,r=Array.prototype.slice.call(arguments,1);o=i.callFilters("testResultEvaluateHideShow",t,r),i.callActions("beforeEvaluateHideShow",arguments),o===!0&&"show"===n||o===!1&&"hide"===n?(a.show.push(e),!e.isShown&&a.toShow.push(e)):(a.hide.push(e),e.isShown&&a.toHide.push(e)),i.callActions("afterEvaluateHideShow",arguments)},sortOperation:function(t){var a=this,i=[],o=null,r=null,s=-1;if(a.callActions("beforeSortOperation",arguments),t.startOrder=a.targets,t.newSort.collection){for(i=[],s=0;r=t.newSort.collection[s];s++){if(a.dom.targets.indexOf(r)<0)throw new Error(e.messages.errorSortNonExistentElement());o=new e.Target,o.init(r,a),o.isInDom=!0,i.push(o)}t.newOrder=i}else"random"===t.newSort.order?t.newOrder=n.arrayShuffle(t.startOrder):""===t.newSort.attribute?(t.newOrder=a.origOrder.slice(),"desc"===t.newSort.order&&t.newOrder.reverse()):(t.newOrder=t.startOrder.slice(),t.newOrder.sort(function(e,n){return a.compare(e,n,t.newSort)}));n.isEqualArray(t.newOrder,t.startOrder)&&(t.willSort=!1),a.callActions("afterSortOperation",arguments)},compare:function(t,e,n){var a=this,i=n.order,o=a.getAttributeValue(t,n.attribute),r=a.getAttributeValue(e,n.attribute);return isNaN(1*o)||isNaN(1*r)?(o=o.toLowerCase(),r=r.toLowerCase()):(o=1*o,r=1*r),or?"asc"===i?1:-1:o===r&&n.next?a.compare(t,e,n.next):0},getAttributeValue:function(t,n){var a=this,i="";return i=t.dom.el.getAttribute("data-"+n),null===i&&a.config.debug.showWarnings&&console.warn(e.messages.warningInconsistentSortingAttributes({attribute:"data-"+n})),a.callFilters("valueGetAttributeValue",i||0,arguments)},printSort:function(e,a){var i=this,o=e?a.newOrder:a.startOrder,r=e?a.startOrder:a.newOrder,s=o.length?o[o.length-1].dom.el.nextElementSibling:null,l=t.document.createDocumentFragment(),c=null,u=null,f=null,h=-1;for(i.callActions("beforePrintSort",arguments),h=0;u=o[h];h++)f=u.dom.el,"absolute"!==f.style.position&&(n.removeWhitespace(f.previousSibling),f.parentElement.removeChild(f));for(c=s?s.previousSibling:i.dom.parent.lastChild,c&&"#text"===c.nodeName&&n.removeWhitespace(c),h=0;u=r[h];h++)f=u.dom.el,n.isElement(l.lastChild)&&l.appendChild(t.document.createTextNode(" ")),l.appendChild(f);i.dom.parent.firstChild&&i.dom.parent.firstChild!==s&&l.insertBefore(t.document.createTextNode(" "),l.childNodes[0]),s?(l.appendChild(t.document.createTextNode(" ")),i.dom.parent.insertBefore(l,s)):i.dom.parent.appendChild(l),i.callActions("afterPrintSort",arguments)},parseSortString:function(t,a){var i=this,o=t.split(" "),r=a,s=[],l=-1;for(l=0;l-1&&(c=n.substring(l),u=s.exec(c),f=u[1]),t){case"fade":a.opacity=f?parseFloat(f):0;break;case"stagger":r.staggerDuration=f?parseFloat(f):100;break;default:if(o&&r.config.animation.reverseOut&&"scale"!==t?a[t].value=(f?parseFloat(f):e.transformDefaults[t].value)*-1:a[t].value=f?parseFloat(f):e.transformDefaults[t].value,f){for(m=0;d=h[m];m++)if(f.indexOf(d)>-1){a[t].unit=d;break}}else a[t].unit=e.transformDefaults[t].unit;i.push(t+"("+a[t].value+a[t].unit+")")}r.callActions("afterParseEffect",arguments)},buildState:function(t){var n=this,a=new e.State,i=null,o=-1;for(n.callActions("beforeBuildState",arguments),o=0;i=n.targets[o];o++)(!t.toRemove.length||t.toRemove.indexOf(i)<0)&&a.targets.push(i.dom.el);for(o=0;i=t.matching[o];o++)a.matching.push(i.dom.el);for(o=0;i=t.show[o];o++)a.show.push(i.dom.el);for(o=0;i=t.hide[o];o++)(!t.toRemove.length||t.toRemove.indexOf(i)<0)&&a.hide.push(i.dom.el);return a.id=n.id,a.container=n.dom.container,a.activeFilter=t.newFilter,a.activeSort=t.newSort,a.activeDataset=t.newDataset,a.activeContainerClassName=t.newContainerClassName,a.hasFailed=t.hasFailed,a.totalTargets=n.targets.length,a.totalShow=t.show.length,a.totalHide=t.hide.length,a.totalMatching=t.matching.length,a.triggerElement=t.triggerElement,n.callFilters("stateBuildState",a,arguments)},goMix:function(a,i){var o=this,r=null;return o.callActions("beforeGoMix",arguments),o.config.animation.duration&&o.config.animation.effects&&n.isVisible(o.dom.container)||(a=!1),i.toShow.length||i.toHide.length||i.willSort||i.willChangeLayout||(a=!1),i.startState.show.length||i.show.length||(a=!1),e.events.fire("mixStart",o.dom.container,{state:i.startState,futureState:i.newState,instance:o},o.dom.document),"function"==typeof o.config.callbacks.onMixStart&&o.config.callbacks.onMixStart.call(o.dom.container,i.startState,i.newState,o),n.removeClass(o.dom.container,n.getClassname(o.config.classNames,"container",o.config.classNames.modifierFailed)),r=o.userDeferred?o.userDeferred:o.userDeferred=n.defer(e.libraries),o.isBusy=!0,a&&e.features.has.transitions?(t.pageYOffset!==i.docState.scrollTop&&t.scrollTo(i.docState.scrollLeft,i.docState.scrollTop),o.config.animation.applyPerspective&&(o.dom.parent.style[e.features.perspectiveProp]=o.config.animation.perspectiveDistance,o.dom.parent.style[e.features.perspectiveOriginProp]=o.config.animation.perspectiveOrigin),o.config.animation.animateResizeContainer&&i.startHeight!==i.newHeight&&i.viewportDeltaY!==i.startHeight-i.newHeight&&(o.dom.parent.style.height=i.startHeight+"px"),o.config.animation.animateResizeContainer&&i.startWidth!==i.newWidth&&i.viewportDeltaX!==i.startWidth-i.newWidth&&(o.dom.parent.style.width=i.startWidth+"px"),i.startHeight===i.newHeight&&(o.dom.parent.style.height=i.startHeight+"px"),i.startWidth===i.newWidth&&(o.dom.parent.style.width=i.startWidth+"px"),i.startHeight===i.newHeight&&i.startWidth===i.newWidth&&(o.dom.parent.style.overflow="hidden"),requestAnimationFrame(function(){o.moveTargets(i)}),o.callFilters("promiseGoMix",r.promise,arguments)):(o.config.debug.fauxAsync?setTimeout(function(){o.cleanUp(i)},o.config.animation.duration):o.cleanUp(i),o.callFilters("promiseGoMix",r.promise,arguments))},getStartMixData:function(n){var a=this,i=t.getComputedStyle(a.dom.parent),o=a.dom.parent.getBoundingClientRect(),r=null,s={},l=-1,c=i[e.features.boxSizingProp];for(a.incPadding="border-box"===c,a.callActions("beforeGetStartMixData",arguments),l=0;r=n.show[l];l++)s=r.getPosData(),n.showPosData[l]={startPosData:s};for(l=0;r=n.toHide[l];l++)s=r.getPosData(),n.toHidePosData[l]={startPosData:s};n.startX=o.left,n.startY=o.top,n.startHeight=a.incPadding?o.height:o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderTop)-parseFloat(i.borderBottom),n.startWidth=a.incPadding?o.width:o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderLeft)-parseFloat(i.borderRight),a.callActions("afterGetStartMixData",arguments)},setInter:function(t){var e=this,a=null,i=-1;for(e.callActions("beforeSetInter",arguments),e.config.animation.clampHeight&&(e.dom.parent.style.height=t.startHeight+"px",e.dom.parent.style.overflow="hidden"),e.config.animation.clampWidth&&(e.dom.parent.style.width=t.startWidth+"px",e.dom.parent.style.overflow="hidden"),i=0;a=t.toShow[i];i++)a.show();t.willChangeLayout&&(n.removeClass(e.dom.container,t.startContainerClassName),n.addClass(e.dom.container,t.newContainerClassName)),e.callActions("afterSetInter",arguments)},getInterMixData:function(t){var e=this,n=null,a=-1;for(e.callActions("beforeGetInterMixData",arguments),a=0;n=t.show[a];a++)t.showPosData[a].interPosData=n.getPosData();for(a=0;n=t.toHide[a];a++)t.toHidePosData[a].interPosData=n.getPosData();e.callActions("afterGetInterMixData",arguments)},setFinal:function(t){var e=this,n=null,a=-1;for(e.callActions("beforeSetFinal",arguments),t.willSort&&e.printSort(!1,t),a=0;n=t.toHide[a];a++)n.hide();e.callActions("afterSetFinal",arguments)},getFinalMixData:function(e){var a=this,i=null,o=null,r=null,s=-1;for(a.callActions("beforeGetFinalMixData",arguments),s=0;r=e.show[s];s++)e.showPosData[s].finalPosData=r.getPosData();for(s=0;r=e.toHide[s];s++)e.toHidePosData[s].finalPosData=r.getPosData();for((a.config.animation.clampHeight||a.config.animation.clampWidth)&&(a.dom.parent.style.height=a.dom.parent.style.width=a.dom.parent.style.overflow=""),a.incPadding||(i=t.getComputedStyle(a.dom.parent)),o=a.dom.parent.getBoundingClientRect(),e.newX=o.left,e.newY=o.top,e.newHeight=a.incPadding?o.height:o.height-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderTop)-parseFloat(i.borderBottom),e.newWidth=a.incPadding?o.width:o.width-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderLeft)-parseFloat(i.borderRight),e.viewportDeltaX=e.docState.viewportWidth-this.dom.document.documentElement.clientWidth,e.viewportDeltaY=e.docState.viewportHeight-this.dom.document.documentElement.clientHeight,e.willSort&&a.printSort(!0,e),s=0;r=e.toShow[s];s++)r.hide();for(s=0;r=e.toHide[s];s++)r.show();e.willChangeLayout&&(n.removeClass(a.dom.container,e.newContainerClassName),n.addClass(a.dom.container,a.config.layout.containerClassName)),a.callActions("afterGetFinalMixData",arguments)},getTweenData:function(t){var n=this,a=null,i=null,o=Object.getOwnPropertyNames(n.effectsIn),r="",s=null,l=-1,c=-1,u=-1,f=-1;for(n.callActions("beforeGetTweenData",arguments),u=0;a=t.show[u];u++)for(i=t.showPosData[u],i.posIn=new e.StyleData,i.posOut=new e.StyleData,i.tweenData=new e.StyleData,a.isShown?(i.posIn.x=i.startPosData.x-i.interPosData.x,i.posIn.y=i.startPosData.y-i.interPosData.y):i.posIn.x=i.posIn.y=0,i.posOut.x=i.finalPosData.x-i.interPosData.x,i.posOut.y=i.finalPosData.y-i.interPosData.y,i.posIn.opacity=a.isShown?1:n.effectsIn.opacity,i.posOut.opacity=1,i.tweenData.opacity=i.posOut.opacity-i.posIn.opacity,a.isShown||n.config.animation.nudge||(i.posIn.x=i.posOut.x,i.posIn.y=i.posOut.y),i.tweenData.x=i.posOut.x-i.posIn.x,i.tweenData.y=i.posOut.y-i.posIn.y,n.config.animation.animateResizeTargets&&(i.posIn.width=i.startPosData.width,i.posIn.height=i.startPosData.height,l=(i.startPosData.width||i.finalPosData.width)-i.interPosData.width,i.posIn.marginRight=i.startPosData.marginRight-l,c=(i.startPosData.height||i.finalPosData.height)-i.interPosData.height,i.posIn.marginBottom=i.startPosData.marginBottom-c,i.posOut.width=i.finalPosData.width,i.posOut.height=i.finalPosData.height,l=(i.finalPosData.width||i.startPosData.width)-i.interPosData.width,i.posOut.marginRight=i.finalPosData.marginRight-l,c=(i.finalPosData.height||i.startPosData.height)-i.interPosData.height,i.posOut.marginBottom=i.finalPosData.marginBottom-c,i.tweenData.width=i.posOut.width-i.posIn.width,i.tweenData.height=i.posOut.height-i.posIn.height,i.tweenData.marginRight=i.posOut.marginRight-i.posIn.marginRight,i.tweenData.marginBottom=i.posOut.marginBottom-i.posIn.marginBottom),f=0;r=o[f];f++)s=n.effectsIn[r],s instanceof e.TransformData&&s.value&&(i.posIn[r].value=s.value,i.posOut[r].value=0,i.tweenData[r].value=i.posOut[r].value-i.posIn[r].value,i.posIn[r].unit=i.posOut[r].unit=i.tweenData[r].unit=s.unit);for(u=0;a=t.toHide[u];u++)for(i=t.toHidePosData[u],i.posIn=new e.StyleData,i.posOut=new e.StyleData,i.tweenData=new e.StyleData,i.posIn.x=a.isShown?i.startPosData.x-i.interPosData.x:0,i.posIn.y=a.isShown?i.startPosData.y-i.interPosData.y:0,i.posOut.x=n.config.animation.nudge?0:i.posIn.x,i.posOut.y=n.config.animation.nudge?0:i.posIn.y,i.tweenData.x=i.posOut.x-i.posIn.x,i.tweenData.y=i.posOut.y-i.posIn.y,n.config.animation.animateResizeTargets&&(i.posIn.width=i.startPosData.width,i.posIn.height=i.startPosData.height,l=i.startPosData.width-i.interPosData.width,i.posIn.marginRight=i.startPosData.marginRight-l,c=i.startPosData.height-i.interPosData.height,i.posIn.marginBottom=i.startPosData.marginBottom-c),i.posIn.opacity=1,i.posOut.opacity=n.effectsOut.opacity,i.tweenData.opacity=i.posOut.opacity-i.posIn.opacity,f=0;r=o[f];f++)s=n.effectsOut[r],s instanceof e.TransformData&&s.value&&(i.posIn[r].value=0,i.posOut[r].value=s.value,i.tweenData[r].value=i.posOut[r].value-i.posIn[r].value,i.posIn[r].unit=i.posOut[r].unit=i.tweenData[r].unit=s.unit);n.callActions("afterGetTweenData",arguments)},moveTargets:function(t){var a=this,i=null,o=null,r=null,s="",l=!1,c=-1,u=-1,f=a.checkProgress.bind(a);for(a.callActions("beforeMoveTargets",arguments),u=0;i=t.show[u];u++)o=new e.IMoveData,r=t.showPosData[u],s=i.isShown?"none":"show",l=a.willTransition(s,t.hasEffect,r.posIn,r.posOut),l&&c++,i.show(),o.posIn=r.posIn,o.posOut=r.posOut,o.statusChange=s,o.staggerIndex=c,o.operation=t,o.callback=l?f:null,i.move(o);for(u=0;i=t.toHide[u];u++)r=t.toHidePosData[u],o=new e.IMoveData,s="hide",l=a.willTransition(s,r.posIn,r.posOut),o.posIn=r.posIn,o.posOut=r.posOut,o.statusChange=s,o.staggerIndex=u,o.operation=t,o.callback=l?f:null,i.move(o);a.config.animation.animateResizeContainer&&(a.dom.parent.style[e.features.transitionProp]="height "+a.config.animation.duration+"ms ease, width "+a.config.animation.duration+"ms ease ",requestAnimationFrame(function(){t.startHeight!==t.newHeight&&t.viewportDeltaY!==t.startHeight-t.newHeight&&(a.dom.parent.style.height=t.newHeight+"px"),t.startWidth!==t.newWidth&&t.viewportDeltaX!==t.startWidth-t.newWidth&&(a.dom.parent.style.width=t.newWidth+"px")})),t.willChangeLayout&&(n.removeClass(a.dom.container,a.config.layout.ContainerClassName),n.addClass(a.dom.container,t.newContainerClassName)),a.callActions("afterMoveTargets",arguments)},hasEffect:function(){var t=this,e=["scale","translateX","translateY","translateZ","rotateX","rotateY","rotateZ"],n="",a=null,i=!1,o=-1,r=-1;if(1!==t.effectsIn.opacity)return t.callFilters("resultHasEffect",!0,arguments);for(r=0;n=e[r];r++)if(a=t.effectsIn[n],o="undefined"!==a.value?a.value:a,0!==o){i=!0;break}return t.callFilters("resultHasEffect",i,arguments)},willTransition:function(t,e,a,i){var o=this,r=!1;return r=!!n.isVisible(o.dom.container)&&(!!("none"!==t&&e||a.x!==i.x||a.y!==i.y)||!!o.config.animation.animateResizeTargets&&(a.width!==i.width||a.height!==i.height||a.marginRight!==i.marginRight||a.marginTop!==i.marginTop)),o.callFilters("resultWillTransition",r,arguments)},checkProgress:function(t){var e=this;e.targetsDone++,e.targetsBound===e.targetsDone&&e.cleanUp(t)},cleanUp:function(t){var a=this,i=null,o=null,r=null,s=null,l=-1;for(a.callActions("beforeCleanUp",arguments),a.targetsMoved=a.targetsImmovable=a.targetsBound=a.targetsDone=0,l=0;i=t.show[l];l++)i.cleanUp(),i.show();for(l=0;i=t.toHide[l];l++)i.cleanUp(),i.hide();if(t.willSort&&a.printSort(!1,t),a.dom.parent.style[e.features.transitionProp]=a.dom.parent.style.height=a.dom.parent.style.width=a.dom.parent.style.overflow=a.dom.parent.style[e.features.perspectiveProp]=a.dom.parent.style[e.features.perspectiveOriginProp]="",t.willChangeLayout&&(n.removeClass(a.dom.container,t.startContainerClassName),n.addClass(a.dom.container,t.newContainerClassName)),t.toRemove.length){for(l=0;i=a.targets[l];l++)t.toRemove.indexOf(i)>-1&&((o=i.dom.el.previousSibling)&&"#text"===o.nodeName&&(r=i.dom.el.nextSibling)&&"#text"===r.nodeName&&n.removeWhitespace(o),t.willSort||a.dom.parent.removeChild(i.dom.el),a.targets.splice(l,1),i.isInDom=!1,l--);a.origOrder=a.targets}t.willSort&&(a.targets=t.newOrder),a.state=t.newState,a.lastOperation=t,a.dom.targets=a.state.targets,e.events.fire("mixEnd",a.dom.container,{state:a.state,instance:a},a.dom.document),"function"==typeof a.config.callbacks.onMixEnd&&a.config.callbacks.onMixEnd.call(a.dom.container,a.state,a),t.hasFailed&&(e.events.fire("mixFail",a.dom.container,{state:a.state,instance:a},a.dom.document),"function"==typeof a.config.callbacks.onMixFail&&a.config.callbacks.onMixFail.call(a.dom.container,a.state,a),n.addClass(a.dom.container,n.getClassname(a.config.classNames,"container",a.config.classNames.modifierFailed))),"function"==typeof a.userCallback&&a.userCallback.call(a.dom.container,a.state,a),"function"==typeof a.userDeferred.resolve&&a.userDeferred.resolve(a.state),a.userCallback=null,a.userDeferred=null,a.lastClicked=null,a.isToggling=!1,a.isBusy=!1,a.queue.length&&(a.callActions("beforeReadQueueCleanUp",arguments),s=a.queue.shift(),a.userDeferred=s.deferred,a.isToggling=s.isToggling,a.lastClicked=s.triggerElement,s.instruction.command instanceof e.CommandMultimix?a.multimix.apply(a,s.args):a.dataset.apply(a,s.args)),a.callActions("afterCleanUp",arguments)},parseMultimixArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandMultimix,r=0;r-1?i.command.position=o:"string"==typeof o?i.command.collection=n.arrayFromList(n.createElement(o).childNodes):"object"==typeof o&&n.isElement(o,a.dom.document)?i.command.collection.length?i.command.sibling=o:i.command.collection=[o]:"object"==typeof o&&o.length?i.command.collection.length?i.command.sibling=o[0]:i.command.collection=o:"object"==typeof o&&o.childNodes&&o.childNodes.length?i.command.collection.length?i.command.sibling=o.childNodes[0]:i.command.collection=n.arrayFromList(o.childNodes):"object"==typeof o?n.extend(i.command,o):"boolean"==typeof o?i.animate=o:"function"==typeof o&&(i.callback=o));if(i.command.index&&i.command.sibling)throw new Error(e.messages.errorInsertInvalidArguments());return!i.command.collection.length&&a.config.debug.showWarnings&&console.warn(e.messages.warningInsertNoElements()),i=a.callFilters("instructionParseInsertArgs",i,arguments),n.freeze(i),i},parseRemoveArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=null,s=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandRemove,s=0;s-1&&i.command.targets.push(o);return!i.command.targets.length&&a.config.debug.showWarnings&&console.warn(e.messages.warningRemoveNoElements()),n.freeze(i),i},parseDatasetArgs:function(t){var a=this,i=new e.UserInstruction,o=null,r=-1;for(i.animate=a.config.animation.enable,i.command=new e.CommandDataset,r=0;r-1&&t.toggleArray.splice(a,1),i=t.getToggleSelector(),t.multimix({filter:i},e.animate,e.callback)},sort:function(){var t=this,e=t.parseSortArgs(arguments);return t.multimix({sort:e.command},e.animate,e.callback)},changeLayout:function(){var t=this,e=t.parseChangeLayoutArgs(arguments);return t.multimix({changeLayout:e.command},e.animate,e.callback)},dataset:function(){var t=this,n=t.parseDatasetArgs(arguments),a=null,i=null,o=!1;return t.callActions("beforeDataset",arguments),t.isBusy?(i=new e.QueueItem,i.args=arguments,i.instruction=n,t.queueMix(i)):(n.callback&&(t.userCallback=n.callback),o=n.animate^t.config.animation.enable?n.animate:t.config.animation.enable,a=t.getDataOperation(n.command.dataset),t.goMix(o,a))},multimix:function(){var t=this,n=null,a=!1,i=null,o=t.parseMultimixArgs(arguments);return t.callActions("beforeMultimix",arguments),t.isBusy?(i=new e.QueueItem,i.args=arguments,i.instruction=o,i.triggerElement=t.lastClicked,i.isToggling=t.isToggling,t.queueMix(i)):(n=t.getOperation(o.command),t.config.controls.enable&&(o.command.filter&&!t.isToggling&&(t.toggleArray.length=0,t.buildToggleArray(n.command)),t.queue.length<1&&t.updateControls(n.command)),o.callback&&(t.userCallback=o.callback),a=o.animate^t.config.animation.enable?o.animate:t.config.animation.enable,t.callFilters("operationMultimix",n,arguments),t.goMix(a,n))},getOperation:function(t){var a=this,i=t.sort,o=t.filter,r=t.changeLayout,s=t.remove,l=t.insert,c=new e.Operation;return c=a.callFilters("operationUnmappedGetOperation",c,arguments),c.id=n.randomHex(),c.command=t,c.startState=a.state,c.triggerElement=a.lastClicked,a.isBusy?(a.config.debug.showWarnings&&console.warn(e.messages.warningGetOperationInstanceBusy()),null):(l&&a.insertTargets(l,c),s&&(c.toRemove=s.targets),c.startSort=c.newSort=c.startState.activeSort,c.startOrder=c.newOrder=a.targets,i&&(c.startSort=c.startState.activeSort,c.newSort=i,c.willSort=a.willSort(i,c.startState.activeSort),c.willSort&&a.sortOperation(c)),c.startFilter=c.startState.activeFilter,o?c.newFilter=o:c.newFilter=n.extend(new e.CommandFilter,c.startFilter),"all"===c.newFilter.selector?c.newFilter.selector=a.config.selectors.target:"none"===c.newFilter.selector&&(c.newFilter.selector=""),a.filterOperation(c),c.startContainerClassName=c.startState.activeContainerClassName,r?(c.newContainerClassName=r.containerClassName,c.newContainerClassName!==c.startContainerClassName&&(c.willChangeLayout=!0)):c.newContainerClassName=c.startContainerClassName,a.config.animation.enable&&(a.getStartMixData(c),a.setInter(c),c.docState=n.getDocumentState(a.dom.document),a.getInterMixData(c),a.setFinal(c),a.getFinalMixData(c),a.parseEffects(),c.hasEffect=a.hasEffect(),a.getTweenData(c)),c.willSort&&(a.targets=c.newOrder),c.newState=a.buildState(c),a.callFilters("operationMappedGetOperation",c,arguments))},tween:function(t,e){var n=null,a=null,i=-1,o=-1;for(e=Math.min(e,1),e=Math.max(e,0),o=0;n=t.show[o];o++)a=t.showPosData[o],n.applyTween(a,e);for(o=0;n=t.hide[o];o++)n.isShown&&n.hide(),(i=t.toHide.indexOf(n))>-1&&(a=t.toHidePosData[i],n.isShown||n.show(),n.applyTween(a,e))},insert:function(){var t=this,e=t.parseInsertArgs(arguments);return t.multimix({insert:e.command},e.animate,e.callback)},insertBefore:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(e.command.collection,"before",e.command.sibling,e.animate,e.callback)},insertAfter:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(e.command.collection,"after",e.command.sibling,e.animate,e.callback)},prepend:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(0,e.command.collection,e.animate,e.callback)},append:function(){var t=this,e=t.parseInsertArgs(arguments);return t.insert(t.state.totalTargets,e.command.collection,e.animate,e.callback)},remove:function(){var t=this,e=t.parseRemoveArgs(arguments);return t.multimix({remove:e.command},e.animate,e.callback)},getConfig:function(t){var e=this,a=null;return a=t?n.getProperty(e.config,t):e.config,e.callFilters("valueGetConfig",a,arguments)},configure:function(t){var e=this;e.callActions("beforeConfigure",arguments),n.extend(e.config,t,!0,!0),e.callActions("afterConfigure",arguments)},getState:function(){var t=this,a=null;return a=new e.State,n.extend(a,t.state),n.freeze(a),t.callFilters("stateGetState",a,arguments)},forceRefresh:function(){var t=this;t.indexTargets()},forceRender:function(){var t=this,e=null,n=null,a="";for(a in t.cache)e=t.cache[a],n=e.render(e.data),n!==e.dom.el&&(e.isInDom&&(e.unbindEvents(),t.dom.parent.replaceChild(n,e.dom.el)),e.isShown||(n.style.display="none"),e.dom.el=n,e.isInDom&&e.bindEvents());t.state=t.buildState(t.lastOperation)},destroy:function(t){var n=this,a=null,i=null,o=0;for(n.callActions("beforeDestroy",arguments),o=0;a=n.controls[o];o++)a.removeBinding(n);for(o=0;i=n.targets[o];o++)t&&i.show(),i.unbindEvents();n.dom.container.id.match(/^MixItUp/)&&n.dom.container.removeAttribute("id"),delete e.instances[n.id],n.callActions("afterDestroy",arguments)}}),e.IMoveData=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.posIn=null,this.posOut=null,this.operation=null,this.callback=null,this.statusChange="",this.duration=-1,this.staggerIndex=-1,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.IMoveData),e.IMoveData.prototype=Object.create(e.Base.prototype),e.IMoveData.prototype.constructor=e.IMoveData,e.TargetDom=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.el=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.TargetDom),e.TargetDom.prototype=Object.create(e.Base.prototype),e.TargetDom.prototype.constructor=e.TargetDom,e.Target=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.sortString="",this.mixer=null,this.callback=null,this.isShown=!1,this.isBound=!1,this.isExcluded=!1,this.isInDom=!1,this.handler=null,this.operation=null,this.data=null,this.dom=new e.TargetDom,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.Target),e.Target.prototype=Object.create(e.Base.prototype),n.extend(e.Target.prototype,{constructor:e.Target,init:function(t,n,a){var i=this,o="";if(i.callActions("beforeInit",arguments),i.mixer=n,t||(t=i.render(a)),i.cacheDom(t),i.bindEvents(),"none"!==i.dom.el.style.display&&(i.isShown=!0),a&&n.config.data.uidKey){if("undefined"==typeof(o=a[n.config.data.uidKey])||o.toString().length<1)throw new TypeError(e.messages.errorDatasetInvalidUidKey({uidKey:n.config.data.uidKey}));i.id=o,i.data=a,n.cache[o]=i}i.callActions("afterInit",arguments)},render:function(t){var a=this,i=null,o=null,r=null,s="";if(a.callActions("beforeRender",arguments),i=a.callFilters("renderRender",a.mixer.config.render.target,arguments),"function"!=typeof i)throw new TypeError(e.messages.errorDatasetRendererNotSet());return s=i(t),s&&"object"==typeof s&&n.isElement(s)?o=s:"string"==typeof s&&(r=document.createElement("div"),r.innerHTML=s,o=r.firstElementChild),a.callFilters("elRender",o,arguments)},cacheDom:function(t){var e=this;e.callActions("beforeCacheDom",arguments),e.dom.el=t,e.callActions("afterCacheDom",arguments)},getSortString:function(t){var e=this,n=e.dom.el.getAttribute("data-"+t)||"";e.callActions("beforeGetSortString",arguments),n=isNaN(1*n)?n.toLowerCase():1*n,e.sortString=n,e.callActions("afterGetSortString",arguments)},show:function(){var t=this;t.callActions("beforeShow",arguments),t.isShown||(t.dom.el.style.display="",t.isShown=!0),t.callActions("afterShow",arguments)},hide:function(){var t=this;t.callActions("beforeHide",arguments),t.isShown&&(t.dom.el.style.display="none",t.isShown=!1),t.callActions("afterHide",arguments)},move:function(t){var e=this;e.callActions("beforeMove",arguments),e.isExcluded||e.mixer.targetsMoved++,e.applyStylesIn(t),requestAnimationFrame(function(){e.applyStylesOut(t)}),e.callActions("afterMove",arguments)},applyTween:function(t,n){var a=this,i="",o=null,r=t.posIn,s=[],l=new e.StyleData,c=-1;for(a.callActions("beforeApplyTween",arguments),l.x=r.x,l.y=r.y,0===n?a.hide():a.isShown||a.show(),c=0;i=e.features.TWEENABLE[c];c++)if(o=t.tweenData[i],"x"===i){if(!o)continue;l.x=r.x+o*n}else if("y"===i){if(!o)continue;l.y=r.y+o*n}else if(o instanceof e.TransformData){if(!o.value)continue;l[i].value=r[i].value+o.value*n,l[i].unit=o.unit,s.push(i+"("+l[i].value+o.unit+")")}else{if(!o)continue;l[i]=r[i]+o*n,a.dom.el.style[i]=l[i]}(l.x||l.y)&&s.unshift("translate("+l.x+"px, "+l.y+"px)"),s.length&&(a.dom.el.style[e.features.transformProp]=s.join(" ")),a.callActions("afterApplyTween",arguments)},applyStylesIn:function(t){var n=this,a=t.posIn,i=1!==n.mixer.effectsIn.opacity,o=[];n.callActions("beforeApplyStylesIn",arguments),o.push("translate("+a.x+"px, "+a.y+"px)"),n.mixer.config.animation.animateResizeTargets&&("show"!==t.statusChange&&(n.dom.el.style.width=a.width+"px",n.dom.el.style.height=a.height+"px"),n.dom.el.style.marginRight=a.marginRight+"px",n.dom.el.style.marginBottom=a.marginBottom+"px"),i&&(n.dom.el.style.opacity=a.opacity),"show"===t.statusChange&&(o=o.concat(n.mixer.transformIn)),n.dom.el.style[e.features.transformProp]=o.join(" "),n.callActions("afterApplyStylesIn",arguments)},applyStylesOut:function(t){var n=this,a=[],i=[],o=n.mixer.config.animation.animateResizeTargets,r="undefined"!=typeof n.mixer.effectsIn.opacity;if(n.callActions("beforeApplyStylesOut",arguments),a.push(n.writeTransitionRule(e.features.transformRule,t.staggerIndex)),"none"!==t.statusChange&&a.push(n.writeTransitionRule("opacity",t.staggerIndex,t.duration)),o&&(a.push(n.writeTransitionRule("width",t.staggerIndex,t.duration)),a.push(n.writeTransitionRule("height",t.staggerIndex,t.duration)),a.push(n.writeTransitionRule("margin",t.staggerIndex,t.duration))),!t.callback)return n.mixer.targetsImmovable++,void(n.mixer.targetsMoved===n.mixer.targetsImmovable&&n.mixer.cleanUp(t.operation));switch(n.operation=t.operation,n.callback=t.callback,!n.isExcluded&&n.mixer.targetsBound++,n.isBound=!0,n.applyTransition(a),o&&t.posOut.width>0&&t.posOut.height>0&&(n.dom.el.style.width=t.posOut.width+"px",n.dom.el.style.height=t.posOut.height+"px",n.dom.el.style.marginRight=t.posOut.marginRight+"px",n.dom.el.style.marginBottom=t.posOut.marginBottom+"px"),n.mixer.config.animation.nudge||"hide"!==t.statusChange||i.push("translate("+t.posOut.x+"px, "+t.posOut.y+"px)"),t.statusChange){case"hide":r&&(n.dom.el.style.opacity=n.mixer.effectsOut.opacity),i=i.concat(n.mixer.transformOut);break;case"show":r&&(n.dom.el.style.opacity=1)}(n.mixer.config.animation.nudge||!n.mixer.config.animation.nudge&&"hide"!==t.statusChange)&&i.push("translate("+t.posOut.x+"px, "+t.posOut.y+"px)"),n.dom.el.style[e.features.transformProp]=i.join(" "),n.callActions("afterApplyStylesOut",arguments)},writeTransitionRule:function(t,e,n){var a=this,i=a.getDelay(e),o="";return o=t+" "+(n>0?n:a.mixer.config.animation.duration)+"ms "+i+"ms "+("opacity"===t?"linear":a.mixer.config.animation.easing),a.callFilters("ruleWriteTransitionRule",o,arguments)},getDelay:function(t){var e=this,n=-1;return"function"==typeof e.mixer.config.animation.staggerSequence&&(t=e.mixer.config.animation.staggerSequence.call(e,t,e.state)),n=e.mixer.staggerDuration?t*e.mixer.staggerDuration:0,e.callFilters("delayGetDelay",n,arguments)},applyTransition:function(t){var n=this,a=t.join(", ");n.callActions("beforeApplyTransition",arguments),n.dom.el.style[e.features.transitionProp]=a,n.callActions("afterApplyTransition",arguments)},handleTransitionEnd:function(t){var e=this,n=t.propertyName,a=e.mixer.config.animation.animateResizeTargets;e.callActions("beforeHandleTransitionEnd",arguments),e.isBound&&t.target.matches(e.mixer.config.selectors.target)&&(n.indexOf("transform")>-1||n.indexOf("opacity")>-1||a&&n.indexOf("height")>-1||a&&n.indexOf("width")>-1||a&&n.indexOf("margin")>-1)&&(e.callback.call(e,e.operation),e.isBound=!1,e.callback=null,e.operation=null),e.callActions("afterHandleTransitionEnd",arguments)},eventBus:function(t){var e=this;switch(e.callActions("beforeEventBus",arguments),t.type){case"webkitTransitionEnd":case"transitionend":e.handleTransitionEnd(t)}e.callActions("afterEventBus",arguments)},unbindEvents:function(){var t=this;t.callActions("beforeUnbindEvents",arguments),n.off(t.dom.el,"webkitTransitionEnd",t.handler),n.off(t.dom.el,"transitionend",t.handler),t.callActions("afterUnbindEvents",arguments)},bindEvents:function(){var t=this,a="";t.callActions("beforeBindEvents",arguments),a="webkit"===e.features.transitionPrefix?"webkitTransitionEnd":"transitionend",t.handler=function(e){return t.eventBus(e)},n.on(t.dom.el,a,t.handler),t.callActions("afterBindEvents",arguments)},getPosData:function(n){var a=this,i={},o=null,r=new e.StyleData;return a.callActions("beforeGetPosData",arguments),r.x=a.dom.el.offsetLeft,r.y=a.dom.el.offsetTop,(a.mixer.config.animation.animateResizeTargets||n)&&(o=a.dom.el.getBoundingClientRect(),r.top=o.top,r.right=o.right,r.bottom=o.bottom,r.left=o.left,r.width=o.width,r.height=o.height),a.mixer.config.animation.animateResizeTargets&&(i=t.getComputedStyle(a.dom.el),r.marginBottom=parseFloat(i.marginBottom),r.marginRight=parseFloat(i.marginRight)),a.callFilters("posDataGetPosData",r,arguments)},cleanUp:function(){var t=this;t.callActions("beforeCleanUp",arguments),t.dom.el.style[e.features.transformProp]="",t.dom.el.style[e.features.transitionProp]="",t.dom.el.style.opacity="",t.mixer.config.animation.animateResizeTargets&&(t.dom.el.style.width="",t.dom.el.style.height="",t.dom.el.style.marginRight="",t.dom.el.style.marginBottom=""),t.callActions("afterCleanUp",arguments)}}),e.Collection=function(t){var e=null,a=-1;for(this.callActions("beforeConstruct"),a=0;e=t[a];a++)this[a]=e;this.length=t.length,this.callActions("afterConstruct"),n.freeze(this)},e.BaseStatic.call(e.Collection),e.Collection.prototype=Object.create(e.Base.prototype),n.extend(e.Collection.prototype,{constructor:e.Collection,mixitup:function(t){var a=this,i=null,o=Array.prototype.slice.call(arguments),r=[],s=-1;for(this.callActions("beforeMixitup"),o.shift(),s=0;i=a[s];s++)r.push(i[t].apply(i,o));return a.callFilters("promiseMixitup",n.all(r,e.libraries),arguments)}}),e.Operation=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.args=[],this.command=null,this.showPosData=[],this.toHidePosData=[],this.startState=null,this.newState=null,this.docState=null,this.willSort=!1,this.willChangeLayout=!1,this.hasEffect=!1,this.hasFailed=!1,this.triggerElement=null,this.show=[],this.hide=[],this.matching=[],this.toShow=[],this.toHide=[],this.toMove=[],this.toRemove=[],this.startOrder=[],this.newOrder=[],this.startSort=null,this.newSort=null,this.startFilter=null,this.newFilter=null,this.startDataset=null,this.newDataset=null,this.viewportDeltaX=0,this.viewportDeltaY=0,this.startX=0,this.startY=0,this.startHeight=0,this.startWidth=0,this.newX=0,this.newY=0,this.newHeight=0,this.newWidth=0,this.startContainerClassName="",this.startDisplay="",this.newContainerClassName="",this.newDisplay="",this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.Operation),e.Operation.prototype=Object.create(e.Base.prototype),e.Operation.prototype.constructor=e.Operation,e.State=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.id="",this.activeFilter=null,this.activeSort=null,this.activeContainerClassName="",this.container=null,this.targets=[],this.hide=[],this.show=[],this.matching=[],this.totalTargets=-1,this.totalShow=-1,this.totalHide=-1,this.totalMatching=-1,this.hasFailed=!1,this.triggerElement=null,this.activeDataset=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.State),e.State.prototype=Object.create(e.Base.prototype),e.State.prototype.constructor=e.State,e.UserInstruction=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.command={},this.animate=!1,this.callback=null,this.callActions("afterConstruct"),n.seal(this)},e.BaseStatic.call(e.UserInstruction),e.UserInstruction.prototype=Object.create(e.Base.prototype),e.UserInstruction.prototype.constructor=e.UserInstruction,e.Messages=function(){e.Base.call(this),this.callActions("beforeConstruct"),this.ERROR_FACTORY_INVALID_CONTAINER="[MixItUp] An invalid selector or element reference was passed to the mixitup factory function",this.ERROR_FACTORY_CONTAINER_NOT_FOUND="[MixItUp] The provided selector yielded no container element",this.ERROR_CONFIG_INVALID_ANIMATION_EFFECTS="[MixItUp] Invalid value for `animation.effects`",this.ERROR_CONFIG_INVALID_CONTROLS_SCOPE="[MixItUp] Invalid value for `controls.scope`",this.ERROR_CONFIG_INVALID_PROPERTY='[MixitUp] Invalid configuration object property "${erroneous}"${suggestion}',this.ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION='. Did you mean "${probableMatch}"?',this.ERROR_CONFIG_DATA_UID_KEY_NOT_SET="[MixItUp] To use the dataset API, a UID key must be specified using `data.uidKey`",this.ERROR_DATASET_INVALID_UID_KEY='[MixItUp] The specified UID key "${uidKey}" is not present on one or more dataset items',this.ERROR_DATASET_DUPLICATE_UID='[MixItUp] The UID "${uid}" was found on two or more dataset items. UIDs must be unique.',this.ERROR_INSERT_INVALID_ARGUMENTS="[MixItUp] Please provider either an index or a sibling and position to insert, not both",this.ERROR_INSERT_PREEXISTING_ELEMENT="[MixItUp] An element to be inserted already exists in the container",this.ERROR_FILTER_INVALID_ARGUMENTS="[MixItUp] Please provide either a selector or collection `.filter()`, not both",this.ERROR_DATASET_NOT_SET="[MixItUp] To use the dataset API with pre-rendered targets, a starting dataset must be set using `load.dataset`",this.ERROR_DATASET_PRERENDERED_MISMATCH="[MixItUp] `load.dataset` does not match pre-rendered targets",this.ERROR_DATASET_RENDERER_NOT_SET="[MixItUp] To insert an element via the dataset API, a target renderer function must be provided to `render.target`",this.ERROR_SORT_NON_EXISTENT_ELEMENT="[MixItUp] An element to be sorted does not already exist in the container",this.WARNING_FACTORY_PREEXISTING_INSTANCE="[MixItUp] WARNING: This element already has an active MixItUp instance. The provided configuration object will be ignored. If you wish to perform additional methods on this instance, please create a reference.",this.WARNING_INSERT_NO_ELEMENTS="[MixItUp] WARNING: No valid elements were passed to `.insert()`",this.WARNING_REMOVE_NO_ELEMENTS="[MixItUp] WARNING: No valid elements were passed to `.remove()`",this.WARNING_MULTIMIX_INSTANCE_QUEUE_FULL="[MixItUp] WARNING: An operation was requested but the MixItUp instance was busy. The operation was rejected because the queue is full or queuing is disabled.",this.WARNING_GET_OPERATION_INSTANCE_BUSY="[MixItUp] WARNING: Operations can be be created while the MixItUp instance is busy.",this.WARNING_NO_PROMISE_IMPLEMENTATION="[MixItUp] WARNING: No Promise implementations could be found. If you wish to use promises with MixItUp please install an ES6 Promise polyfill.",this.WARNING_INCONSISTENT_SORTING_ATTRIBUTES='[MixItUp] WARNING: The requested sorting data attribute "${attribute}" was not present on one or more target elements which may product unexpected sort output',this.callActions("afterConstruct"),this.compileTemplates(),n.seal(this)},e.BaseStatic.call(e.Messages),e.Messages.prototype=Object.create(e.Base.prototype),e.Messages.prototype.constructor=e.Messages,e.Messages.prototype.compileTemplates=function(){var t="",e="";for(t in this)"string"==typeof(e=this[t])&&(this[n.camelCase(t)]=n.template(e))},e.messages=new e.Messages,e.Facade=function(t){e.Base.call(this),this.callActions("beforeConstruct",arguments),this.configure=t.configure.bind(t),this.show=t.show.bind(t),this.hide=t.hide.bind(t),this.filter=t.filter.bind(t),this.toggleOn=t.toggleOn.bind(t),this.toggleOff=t.toggleOff.bind(t),this.sort=t.sort.bind(t),this.changeLayout=t.changeLayout.bind(t),this.multimix=t.multimix.bind(t),this.dataset=t.dataset.bind(t),this.tween=t.tween.bind(t),this.insert=t.insert.bind(t),this.insertBefore=t.insertBefore.bind(t),this.insertAfter=t.insertAfter.bind(t),this.prepend=t.prepend.bind(t),this.append=t.append.bind(t),this.remove=t.remove.bind(t),this.destroy=t.destroy.bind(t),this.forceRefresh=t.forceRefresh.bind(t),this.forceRender=t.forceRender.bind(t),this.isMixing=t.isMixing.bind(t),this.getOperation=t.getOperation.bind(t),this.getConfig=t.getConfig.bind(t),this.getState=t.getState.bind(t),this.callActions("afterConstruct",arguments),n.freeze(this),n.seal(this)},e.BaseStatic.call(e.Facade),e.Facade.prototype=Object.create(e.Base.prototype),e.Facade.prototype.constructor=e.Facade,"object"==typeof exports&&"object"==typeof module?module.exports=e:"function"==typeof define&&define.amd?define(function(){return e}):"undefined"!=typeof t.mixitup&&"function"==typeof t.mixitup||(t.mixitup=e),e.BaseStatic.call(e.constructor),e.NAME="mixitup",e.CORE_VERSION="3.3.1"}(window); \ No newline at end of file diff --git a/mixitup-3.3.1/docs/mixitup-3-migration-guide.md b/mixitup-3.3.1/docs/mixitup-3-migration-guide.md new file mode 100644 index 0000000..e16d604 --- /dev/null +++ b/mixitup-3.3.1/docs/mixitup-3-migration-guide.md @@ -0,0 +1,105 @@ +# MixItUp 3 Migration Guide + +The biggest change to MixItUp with v3, is the dropping of jQuery as a dependency. MixItUp 1 and 2 both existed as jQuery plugins, with instantiation and API calls abstracted away through a typical jQuery-plugin interface. + +With MixItUp 3, we can now interact with MixItUp instances ('mixers') directly with minimal abstraction. + +## Instantiation + +###### Example: Basic Instantiation + +```js +// MixItUp 2 + +$('.container').mixItUp(); +``` + +```js +// MixItUp 3 + +var mixer = mixitup('.container'); +``` + +###### Example: Passing the configuration object + +```js +// MixItUp 2 + +$('.container').mixItUp({ + selectors: { + target: '.item' + } +}); +``` + +```js +// MixItUp 3 + +var mixer = mixitup('.container', { + selectors: { + target: '.item' + } +}); +``` + +Note that the `mixitup()` factory function is now all lowercase, as apposed to the camel case MixItUp 2 jQuery method `.mixItUp()`. + +MixItUp 3 adds many new configuration options, and renames or removes some of those from MixItUp 2. + +*Further reading: [Configuration Object](/docs/mixitup.Config.md)* + +## Method Invocation + +```js +// MixItUp 2 + +$('.container').mixItUp('filter', '.category-a'); +``` +```js +// MixItUp 3 + +mixer.filter('.category-a'); +``` + +As you may have noticed, mixers in MixItUp 3 have many of the same API methods as were available in MixItUp 2, but are called using standard method invocation syntax, with arguments passed in the standard form rather than the jQuery-UI-like syntax of MixItUp 2. + +MixItUp 3 adds many new API methods, and renames or removes some of those from MixItUp 2. + +*Further reading: [Mixer API Methods](/docs/mixitup.Mixer.md)* + +## Promises and Callbacks + +In MixItUp 2, asynchronous operations (those involving animation) accepted an optional callback function to be invoked on completion. + +With MixItUp 3, all asynchronous methods return a promise resolving with a state object. Callback functions are still permitted as an optional argument, but promises should be considered the preferred method for dealing with asynchronous operations. + +```js +// MixItUp 2 (callbacks) + +$('.container').mixItUp('filter', '.category-a', function(state) { + // Operation finished, the new state is: + + console.log(state); +}); +``` + +```js +// MixItUp 3 (promises) + +mixer.filter('.category-a') + .then(function(state) { + // Operation finished, the new state is: + + console.log(state); + }); +``` + +## CSS + +In MixItUp 2, it was required that a CSS `display: none` rule be applied to all target elements by default, with MixItUp adding the `display` value of your choice (e.g. `inline-block`) to only those targets to be shown. This was intended to prevent a flash-of-content before MixItUp 2's loading animation started. + +With MixItUp 3, loading animations are removed by default, and mixers are instantiated synchronously and instantly. Because of this, it is assumed that all targets in the DOM are already shown, so MixItUp only needs to add `display: none` to those targets to be hidden, using whatever `display` value is declared in your CSS for shown targets. + +In short – you no longer need to set `display: none` in your CSS. Simply use whatever display value your layout would require, regardless of MixItUp. + +Loading animations are still possible in MixItUp 3 as demonstrated in the [Loading Animation](http://demos.kunkalabs.com/mixitup/loading-animation/) demo. The code for this demo is available [here](/demos/loading-animation/). diff --git a/mixitup-3.3.1/docs/mixitup.Config.md b/mixitup-3.3.1/docs/mixitup.Config.md new file mode 100644 index 0000000..d7c5b16 --- /dev/null +++ b/mixitup-3.3.1/docs/mixitup.Config.md @@ -0,0 +1,1858 @@ +# mixitup.Config + +## Overview + +`mixitup.Config` is an interface used for customising the functionality of a +mixer instance. It is organised into several semantically distinct sub-objects, +each one pertaining to a particular aspect of MixItUp functionality. + +An object literal containing any or all of the available properies, +known as the "configuration object", can be passed as the second parameter to +the `mixitup` factory function when creating a mixer instance to customise its +functionality as needed. + +If no configuration object is passed, the mixer instance will take on the default +configuration values detailed below. + +### Contents + +- [animation](#animation) +- [behavior](#behavior) +- [callbacks](#callbacks) +- [controls](#controls) +- [classNames](#classNames) +- [data](#data) +- [debug](#debug) +- [layout](#layout) +- [load](#load) +- [selectors](#selectors) +- [render](#render) + + +

animation

+ +A group of properties defining the mixer's animation and effects settings. + +### enable + + + + +A boolean dictating whether or not animation should be enabled for the MixItUp instance. +If `false`, all operations will occur instantly and syncronously, although callback +functions and any returned promises will still be fulfilled. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example: Create a mixer with all animations disabled + +```js +var mixer = mixitup(containerEl, { + animation: { + enable: false + } +}); +``` +### effects + + + + +A string of one or more space-seperated properties to which transitions will be +applied for all filtering animations. + +Properties can be listed any order or combination, although they will be applied in a specific +predefined order to produce consistent results. + +To learn more about available effects, experiment with our +sandbox demo and try out the "Export config" button in the Animation options drop down. + + +|Type | Default +|--- | --- +|`string`| `'fade scale'` + +###### Example: Apply "fade" and "translateZ" effects to all animations + +```js +// As targets are filtered in and out, they will fade between +// opacity 1 and 0 and transform between translateZ(-100px) and +// translateZ(0). + +var mixer = mixitup(containerEl, { + animation: { + effects: 'fade translateZ(-100px)' + } +}); +``` +### effectsIn + + + + +A string of one or more space-seperated effects to be applied only to filter-in +animations, overriding `config.animation.effects` if set. + + +|Type | Default +|--- | --- +|`string`| `''` + +###### Example: Apply downwards vertical translate to targets being filtered in + +```js + +var mixer = mixitup(containerEl, { + animation: { + effectsIn: 'fade translateY(-100%)' + } +}); +``` +### effectsOut + + + + +A string of one or more space-seperated effects to be applied only to filter-out +animations, overriding `config.animation.effects` if set. + + +|Type | Default +|--- | --- +|`string`| `''` + +###### Example: Apply upwards vertical translate to targets being filtered out + +```js + +var mixer = mixitup(containerEl, { + animation: { + effectsOut: 'fade translateY(-100%)' + } +}); +``` +### duration + + + + +An integer dictating the duration of all MixItUp animations in milliseconds, not +including any additional delay apllied via the `'stagger'` effect. + + +|Type | Default +|--- | --- +|`number`| `600` + +###### Example: Apply an animation duration of 200ms to all mixitup animations + +```js + +var mixer = mixitup(containerEl, { + animation: { + duration: 200 + } +}); +``` +### easing + + + + +A valid CSS3 transition-timing function or shorthand. For a full list of accepted +values, visit easings.net. + + +|Type | Default +|--- | --- +|`string`| `'ease'` + +###### Example 1: Apply "ease-in-out" easing to all animations + +```js + +var mixer = mixitup(containerEl, { + animation: { + easing: 'ease-in-out' + } +}); +``` +###### Example 2: Apply a custom "cubic-bezier" easing function to all animations + +```js +var mixer = mixitup(containerEl, { + animation: { + easing: 'cubic-bezier(0.645, 0.045, 0.355, 1)' + } +}); +``` +### applyPerspective + + + + +A boolean dictating whether or not to apply perspective to the MixItUp container +during animations. By default, perspective is always applied and creates the +illusion of three-dimensional space for effects such as `translateZ`, `rotateX`, +and `rotateY`. + +You may wish to disable this and define your own perspective settings via CSS. + + +|Type | Default +|--- | --- +|`bolean`| `true` + +###### Example: Prevent perspective from being applied to any 3D transforms + +```js +var mixer = mixitup(containerEl, { + animation: { + applyPerspective: false + } +}); +``` +### perspectiveDistance + + + + +The perspective distance value to be applied to the container during animations, +affecting any 3D-transform-based effects. + + +|Type | Default +|--- | --- +|`string`| `'3000px'` + +###### Example: Set a perspective distance of 2000px + +```js +var mixer = mixitup(containerEl, { + animation: { + effects: 'rotateY(-25deg)', + perspectiveDistance: '2000px' + } +}); +``` +### perspectiveOrigin + + + + +The perspective-origin value to be applied to the container during animations, +affecting any 3D-transform-based effects. + + +|Type | Default +|--- | --- +|`string`| `'50% 50%'` + +###### Example: Set a perspective origin in the top-right of the container + +```js +var mixer = mixitup(containerEl, { + animation: { + effects: 'transateZ(-200px)', + perspectiveOrigin: '100% 0' + } +}); +``` +### queue + + + + +A boolean dictating whether or not to enable the queuing of operations. + +If `true` (default), and a control is clicked or an API call is made while another +operation is progress, the operation will go into the queue and will be automatically exectuted +when the previous operaitons is finished. + +If `false`, any requested operations will be ignored, and the `onMixBusy` callback and `mixBusy` +event will be fired. If `debug.showWarnings` is enabled, a console warning will also occur. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example: Disable queuing + +```js +var mixer = mixitup(containerEl, { + animation: { + queue: false + } +}); +``` +### queueLimit + + + + +An integer dictacting the maximum number of operations allowed in the queue at +any time, when queuing is enabled. + + +|Type | Default +|--- | --- +|`number`| `3` + +###### Example: Allow a maximum of 5 operations in the queue at any time + +```js +var mixer = mixitup(containerEl, { + animation: { + queueLimit: 5 + } +}); +``` +### animateResizeContainer + + + + +A boolean dictating whether or not to transition the height and width of the +container as elements are filtered in and out. If disabled, the container height +will change abruptly. + +It may be desirable to disable this on mobile devices as the CSS `height` and +`width` properties do not receive GPU-acceleration and can therefore cause stuttering. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example 1: Disable the transitioning of the container height and/or width + +```js +var mixer = mixitup(containerEl, { + animation: { + animateResizeContainer: false + } +}); +``` +###### Example 2: Disable the transitioning of the container height and/or width for mobile devices only + +```js +var mixer = mixitup(containerEl, { + animation: { + animateResizeContainer: myFeatureTests.isMobile ? false : true + } +}); +``` +### animateResizeTargets + + + + +A boolean dictating whether or not to transition the height and width of target +elements as they change throughout the course of an animation. + +This is often a must for flex-box grid layouts where the size of target elements may change +depending on final their position in relation to their siblings, or for `.changeLayout()` +operations where the size of targets change between layouts. + +NB: This feature requires additional calculations and manipulation to non-hardware-accelerated +properties which may adversely affect performance on slower devices, and is therefore +disabled by default. + + +|Type | Default +|--- | --- +|`boolean`| `false` + +###### Example: Enable the transitioning of target widths and heights + +```js +var mixer = mixitup(containerEl, { + animation: { + animateResizeTargets: true + } +}); +``` +### staggerSequence + + + + +A custom function used to manipulate the order in which the stagger delay is +incremented when using the ‘stagger’ effect. + +When using the 'stagger' effect, the delay applied to each target element is incremented +based on its index. You may create a custom function to manipulate the order in which the +delay is incremented and create engaging non-linear stagger effects. + +The function receives the index of the target element as a parameter, and must +return an integer which serves as the multiplier for the stagger delay. + + +|Type | Default +|--- | --- +|`function`| `null` + +###### Example 1: Stagger target elements by column in a 3-column grid + +```js +var mixer = mixitup(containerEl, { + animation: { + effects: 'fade stagger(100ms)', + staggerSequence: function(i) { + return i % 3; + } + } +}); +``` +###### Example 2: Using an algorithm to produce a more complex sequence + +```js +var mixer = mixitup(containerEl, { + animation: { + effects: 'fade stagger(100ms)', + staggerSequence: function(i) { + return (2*i) - (5*((i/3) - ((1/3) * (i%3)))); + } + } +}); +``` +### reverseOut + + + + +A boolean dictating whether or not to reverse the direction of `translate` +and `rotate` transforms for elements being filtered out. + +It can be used to create carousel-like animations where elements enter and exit +from opposite directions. If enabled, the effect `translateX(-100%)` for elements +being filtered in would become `translateX(100%)` for targets being filtered out. + +This functionality can also be achieved by providing seperate effects +strings for `config.animation.effectsIn` and `config.animation.effectsOut`. + + +|Type | Default +|--- | --- +|`boolean`| `false` + +###### Example: Reverse the desired direction on any translate/rotate effect for targets being filtered out + +```js +// Elements being filtered in will be translated from '100%' to '0' while +// elements being filtered out will be translated from 0 to '-100%' + +var mixer = mixitup(containerEl, { + animation: { + effects: 'fade translateX(100%)', + reverseOut: true, + nudge: false // Disable nudging to create a carousel-like effect + } +}); +``` +### nudge + + + + +A boolean dictating whether or not to "nudge" the animation path of targets +when they are being filtered in and out simulatenously. + +This has been the default behavior of MixItUp since version 1, but it +may be desirable to disable this effect when filtering directly from +one exclusive set of targets to a different exclusive set of targets, +to create a carousel-like effect, or a generally more subtle animation. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example: Disable the "nudging" of targets being filtered in and out simulatenously + +```js + +var mixer = mixitup(containerEl, { + animation: { + nudge: false + } +}); +``` +### clampHeight + + + + +A boolean dictating whether or not to clamp the height of the container while MixItUp's +geometry tests are carried out before an operation. + +To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the +height of the container might affect its vertical positioning in the viewport +(e.g. a vertically-centered container), this should be turned off to ensure accurate +test results and a smooth animation. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example: Disable container height-clamping + +```js + +var mixer = mixitup(containerEl, { + animation: { + clampHeight: false + } +}); +``` +### clampWidth + + + + +A boolean dictating whether or not to clamp the width of the container while MixItUp's +geometry tests are carried out before an operation. + +To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the +width of the container might affect its horitzontal positioning in the viewport +(e.g. a horizontall-centered container), this should be turned off to ensure accurate +test results and a smooth animation. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example: Disable container width-clamping + +```js + +var mixer = mixitup(containerEl, { + animation: { + clampWidth: false + } +}); +``` + +

behavior

+ +A group of properties relating to the behavior of the Mixer. + +### liveSort + + + + +A boolean dictating whether to allow "live" sorting of the mixer. + +Because of the expensive nature of sorting, MixItUp makes use of several +internal optimizations to skip redundant sorting operations, such as when +the newly requested sort command is the same as the active one. The caveat +to this optimization is that "live" edits to the value of a target's sorting +attribute will be ignored when requesting a re-sort by the same attribute. + +By setting to `behavior.liveSort` to `true`, the mixer will always re-sort +regardless of whether or not the sorting attribute and order have changed. + + +|Type | Default +|--- | --- +|`boolean`| `false` + +###### Example: Enabling `liveSort` to allow for re-sorting + +```js + +var mixer = mixitup(containerEl, { + behavior: { + liveSort: true + }, + load: { + sort: 'edited:desc' + } +}); + +var target = containerEl.children[3]; + +console.log(target.getAttribute('data-edited')); // '2015-04-24' + +target.setAttribute('data-edited', '2017-08-10'); // Update the target's edited date + +mixer.sort('edited:desc') + .then(function(state) { + // The target is now at the top of the list + + console.log(state.targets[0] === target); // true + }); +``` + +

callbacks

+ +A group of optional callback functions to be invoked at various +points within the lifecycle of a mixer operation. + +Each function is analogous to an event of the same name triggered from the +container element, and is invoked immediately after it. + +All callback functions receive the current `state` object as their first +argument, as well as other more specific arguments described below. + +### onMixStart + + + + +A callback function invoked immediately after any MixItUp operation is requested +and before animations have begun. + +A second `futureState` argument is passed to the function which represents the final +state of the mixer once the requested operation has completed. + + +|Type | Default +|--- | --- +|`function`| `null` + +###### Example: Adding an `onMixStart` callback function + +```js +var mixer = mixitup(containerEl, { + callbacks: { + onMixStart: function(state, futureState) { + console.log('Starting operation...'); + } + } +}); +``` +### onMixBusy + + + + +A callback function invoked when a MixItUp operation is requested while another +operation is in progress, and the animation queue is full, or queueing +is disabled. + + +|Type | Default +|--- | --- +|`function`| `null` + +###### Example: Adding an `onMixBusy` callback function + +```js +var mixer = mixitup(containerEl, { + callbacks: { + onMixBusy: function(state) { + console.log('Mixer busy'); + } + } +}); +``` +### onMixEnd + + + + +A callback function invoked after any MixItUp operation has completed, and the +state has been updated. + + +|Type | Default +|--- | --- +|`function`| `null` + +###### Example: Adding an `onMixEnd` callback function + +```js +var mixer = mixitup(containerEl, { + callbacks: { + onMixEnd: function(state) { + console.log('Operation complete'); + } + } +}); +``` +### onMixFail + + + + +A callback function invoked whenever an operation "fails", i.e. no targets +could be found matching the requested filter. + + +|Type | Default +|--- | --- +|`function`| `null` + +###### Example: Adding an `onMixFail` callback function + +```js +var mixer = mixitup(containerEl, { + callbacks: { + onMixFail: function(state) { + console.log('No items could be found matching the requested filter'); + } + } +}); +``` +### onMixClick + + + + +A callback function invoked whenever a MixItUp control is clicked, and before its +respective operation is requested. + +The clicked element is assigned to the `this` keyword within the function. The original +click event is passed to the function as the second argument, which can be useful if +using `` tags as controls where the default behavior needs to be prevented. + +Returning `false` from the callback will prevent the control click from triggering +an operation. + + +|Type | Default +|--- | --- +|`function`| `null` + +###### Example 1: Adding an `onMixClick` callback function + +```js +var mixer = mixitup(containerEl, { + callbacks: { + onMixClick: function(state, originalEvent) { + console.log('The control "' + this.innerText + '" was clicked'); + } + } +}); +``` +###### Example 2: Using `onMixClick` to manipulate the original click event + +```js +var mixer = mixitup(containerEl, { + callbacks: { + onMixClick: function(state, originalEvent) { + // Prevent original click event from bubbling up: + originalEvent.stopPropagation(); + + // Prevent default behavior of clicked element: + originalEvent.preventDefault(); + } + } +}); +``` +###### Example 3: Using `onMixClick` to conditionally cancel operations + +```js +var mixer = mixitup(containerEl, { + callbacks: { + onMixClick: function(state, originalEvent) { + // Perform some conditional check: + + if (myApp.isLoading) { + // By returning false, we can prevent the control click from triggering an operation. + + return false; + } + } + } +}); +``` + +

controls

+ +A group of properties relating to clickable control elements. + +### enable + + + + +A boolean dictating whether or not controls should be enabled for the mixer instance. + +If `true` (default behavior), MixItUp will search the DOM for any clickable elements with +`data-filter`, `data-sort` or `data-toggle` attributes, and bind them for click events. + +If `false`, no click handlers will be bound, and all functionality must therefore be performed +via the mixer's API methods. + +If you do not intend to use the default controls, setting this property to `false` will +marginally improve the startup time of your mixer instance, and will also prevent any other active +mixer instances in the DOM which are bound to controls from controlling the instance. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example: Disabling controls + +```js +var mixer = mixitup(containerEl, { + controls: { + enable: false + } +}); + +// With the default controls disabled, we can only control +// the mixer via its API methods, e.g.: + +mixer.filter('.cat-1'); +``` +### live + + + + +A boolean dictating whether or not to use event delegation when binding click events +to the default controls. + +If `false` (default behavior), each control button in the DOM will be found and +individually bound when a mixer is instantiated, with their corresponding actions +cached for performance. + +If `true`, a single click handler will be applied to the `window` (or container element - see +`config.controls.scope`), and any click events triggered by elements with `data-filter`, +`data-sort` or `data-toggle` attributes present will be handled as they propagate upwards. + +If you require a user interface where control buttons may be added, removed, or changed during the +lifetime of a mixer, `controls.live` should be set to `true`. There is a marginal but unavoidable +performance deficit when using live controls, as the value of each control button must be read +from the DOM in real time once the click event has propagated. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example: Setting live controls + +```js +var mixer = mixitup(containerEl, { + controls: { + live: true + } +}); + +// Control buttons can now be added, remove and changed without breaking +// the mixer's UI +``` +### scope + + + + +A string dictating the "scope" to use when binding or querying the default controls. The available +values are `'global'` or `'local'`. + +When set to `'global'` (default behavior), MixItUp will query the entire document for control buttons +to bind, or delegate click events from (see `config.controls.live`). + +When set to `'local'`, MixItUp will only query (or bind click events to) its own container element. +This may be desireable if you require multiple active mixer instances within the same document, with +controls that would otherwise intefere with each other if scoped globally. + +Conversely, if you wish to control multiple instances with a single UI, you would create one +set of controls and keep the controls scope of each mixer set to `global`. + + +|Type | Default +|--- | --- +|`string`| `'global'` + +###### Example: Setting 'local' scoped controls + +```js +var mixerOne = mixitup(containerOne, { + controls: { + scope: 'local' + } +}); + +var mixerTwo = mixitup(containerTwo, { + controls: { + scope: 'local' + } +}); + +// Both mixers can now exist within the same document with +// isolated controls placed within their container elements. +``` +### toggleLogic + + + + +A string dictating the type of logic to apply when concatenating the filter selectors of +active toggle buttons (i.e. any clickable element with a `data-toggle` attribute). + +If set to `'or'` (default behavior), selectors will be concatenated together as +a comma-seperated list. For example: + +`'.cat-1, .cat-2'` (shows any elements matching `'.cat-1'` OR `'.cat-2'`) + +If set to `'and'`, selectors will be directly concatenated together. For example: + +`'.cat-1.cat-2'` (shows any elements which match both `'.cat-1'` AND `'.cat-2'`) + + +|Type | Default +|--- | --- +|`string`| `'or'` + +###### Example: Setting "and" toggle logic + +```js +var mixer = mixitup(containerEl, { + controls: { + toggleLogic: 'and' + } +}); +``` +### toggleDefault + + + + +A string dictating the filter behavior when all toggles are inactive. + +When set to `'all'` (default behavior), *all* targets will be shown by default +when no toggles are active, or at the moment all active toggles are toggled off. + +When set to `'none'`, no targets will be shown by default when no toggles are +active, or at the moment all active toggles are toggled off. + + +|Type | Default +|--- | --- +|`string`| `'all'` + +###### Example 1: Setting the default toggle behavior to `'all'` + +```js +var mixer = mixitup(containerEl, { + controls: { + toggleDefault: 'all' + } +}); + +mixer.toggleOn('.cat-2') + .then(function() { + // Deactivate all active toggles + + return mixer.toggleOff('.cat-2') + }) + .then(function(state) { + console.log(state.activeFilter.selector); // 'all' + console.log(state.totalShow); // 12 + }); +``` +###### Example 2: Setting the default toggle behavior to `'none'` + +```js +var mixer = mixitup(containerEl, { + controls: { + toggleDefault: 'none' + } +}); + +mixer.toggleOn('.cat-2') + .then(function() { + // Deactivate all active toggles + + return mixer.toggleOff('.cat-2') + }) + .then(function(state) { + console.log(state.activeFilter.selector); // 'none' + console.log(state.totalShow); // 0 + }); +``` + +

classNames

+ +A group of properties defining the output and structure of class names programmatically +added to controls and containers to reflect the state of the mixer. + +Most commonly, class names are added to controls by MixItUp to indicate that +the control is active so that it can be styled accordingly - `'mixitup-control-active'` by default. + +Using a "BEM" like structure, each classname is broken into the three parts: +a block namespace (`'mixitup'`), an element name (e.g. `'control'`), and an optional modifier +name (e.g. `'active'`) reflecting the state of the element. + +By default, each part of the classname is concatenated together using single hyphens as +delineators, but this can be easily customised to match the naming convention and style of +your project. + +### block + + + + +The "block" portion, or top-level namespace added to the start of any class names created by MixItUp. + + +|Type | Default +|--- | --- +|`string`| `'mixitup'` + +###### Example 1: changing the `config.classNames.block` value + +```js +var mixer = mixitup(containerEl, { + classNames: { + block: 'portfolio' + } +}); + +// Active control output: "portfolio-control-active" +``` +###### Example 2: Removing `config.classNames.block` + +```js +var mixer = mixitup(containerEl, { + classNames: { + block: '' + } +}); + +// Active control output: "control-active" +``` +### elementContainer + + + + +The "element" portion of the class name added to container. + + +|Type | Default +|--- | --- +|`string`| `'container'` + +### elementFilter + + + + +The "element" portion of the class name added to filter controls. + +By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but +each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + + +|Type | Default +|--- | --- +|`string`| `'control'` + +###### Example 1: changing the `config.classNames.elementFilter` value + +```js +var mixer = mixitup(containerEl, { + classNames: { + elementFilter: 'filter' + } +}); + +// Active filter output: "mixitup-filter-active" +``` +###### Example 2: changing the `config.classNames.block` and `config.classNames.elementFilter` values + +```js +var mixer = mixitup(containerEl, { + classNames: { + block: 'portfolio', + elementFilter: 'filter' + } +}); + +// Active filter output: "portfolio-filter-active" +``` +### elementSort + + + + +The "element" portion of the class name added to sort controls. + +By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but +each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + + +|Type | Default +|--- | --- +|`string`| `'control'` + +###### Example 1: changing the `config.classNames.elementSort` value + +```js +var mixer = mixitup(containerEl, { + classNames: { + elementSort: 'sort' + } +}); + +// Active sort output: "mixitup-sort-active" +``` +###### Example 2: changing the `config.classNames.block` and `config.classNames.elementSort` values + +```js +var mixer = mixitup(containerEl, { + classNames: { + block: 'portfolio', + elementSort: 'sort' + } +}); + +// Active sort output: "portfolio-sort-active" +``` +### elementMultimix + + + + +The "element" portion of the class name added to multimix controls. + +By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but +each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + + +|Type | Default +|--- | --- +|`string`| `'control'` + +###### Example 1: changing the `config.classNames.elementMultimix` value + +```js +var mixer = mixitup(containerEl, { + classNames: { + elementMultimix: 'multimix' + } +}); + +// Active multimix output: "mixitup-multimix-active" +``` +###### Example 2: changing the `config.classNames.block` and `config.classNames.elementMultimix` values + +```js +var mixer = mixitup(containerEl, { + classNames: { + block: 'portfolio', + elementSort: 'multimix' + } +}); + +// Active multimix output: "portfolio-multimix-active" +``` +### elementToggle + + + + +The "element" portion of the class name added to toggle controls. + +By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but +each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + + +|Type | Default +|--- | --- +|`string`| `'control'` + +###### Example 1: changing the `config.classNames.elementToggle` value + +```js +var mixer = mixitup(containerEl, { + classNames: { + elementToggle: 'toggle' + } +}); + +// Active toggle output: "mixitup-toggle-active" +``` +###### Example 2: changing the `config.classNames.block` and `config.classNames.elementToggle` values + +```js +var mixer = mixitup(containerEl, { + classNames: { + block: 'portfolio', + elementToggle: 'toggle' + } +}); + +// Active toggle output: "portfolio-toggle-active" +``` +### modifierActive + + + + +The "modifier" portion of the class name added to active controls. + + +|Type | Default +|--- | --- +|`string`| `'active'` + +### modifierDisabled + + + + +The "modifier" portion of the class name added to disabled controls. + + +|Type | Default +|--- | --- +|`string`| `'disabled'` + +### modifierFailed + + + + +The "modifier" portion of the class name added to the container when in a "failed" state. + + +|Type | Default +|--- | --- +|`string`| `'failed'` + +### delineatorElement + + + + +The delineator used between the "block" and "element" portions of any class name added by MixItUp. + +If the block portion is ommited by setting it to an empty string, no delineator will be added. + + +|Type | Default +|--- | --- +|`string`| `'-'` + +###### Example: changing the delineator to match BEM convention + +```js +var mixer = mixitup(containerEl, { + classNames: { + delineatorElement: '__' + } +}); + +// example active control output: "mixitup__control-active" +``` +### delineatorModifier + + + + +The delineator used between the "element" and "modifier" portions of any class name added by MixItUp. + +If the element portion is ommited by setting it to an empty string, no delineator will be added. + + +|Type | Default +|--- | --- +|`string`| `'-'` + +###### Example: changing both delineators to match BEM convention + +```js +var mixer = mixitup(containerEl, { + classNames: { + delineatorElement: '__' + delineatorModifier: '--' + } +}); + +// Active control output: "mixitup__control--active" +``` + +

data

+ +A group of properties relating to MixItUp's dataset API. + +### uidKey + + + + +A string specifying the name of the key containing your data model's unique +identifier (UID). To use the dataset API, a UID key must be specified and +be present and unique on all objects in the dataset you provide to MixItUp. + +For example, if your dataset is made up of MongoDB documents, the UID +key would be `'id'` or `'_id'`. + + +|Type | Default +|--- | --- +|`string`| `''` + +###### Example: Setting the UID to `'id'` + +```js +var mixer = mixitup(containerEl, { + data: { + uidKey: 'id' + } +}); +``` +### dirtyCheck + + + + +A boolean dictating whether or not MixItUp should "dirty check" each object in +your dataset for changes whenever `.dataset()` is called, and re-render any targets +for which a change is found. + +Depending on the complexity of your data model, dirty checking can be expensive +and is therefore disabled by default. + +NB: For changes to be detected, a new immutable instance of the edited model must be +provided to mixitup, rather than manipulating properties on the existing instance. +If your changes are a result of a DB write and read, you will most likely be calling +`.dataset()` with a clean set of objects each time, so this will not be an issue. + + +|Type | Default +|--- | --- +|`boolean`| `false` + +###### Example: Enabling dirty checking + +```js + +var myDataset = [ + { + id: 0, + title: "Blog Post Title 0" + ... + }, + { + id: 1, + title: "Blog Post Title 1" + ... + } +]; + +// Instantiate a mixer with a pre-loaded dataset, and a target renderer +// function defined + +var mixer = mixitup(containerEl, { + data: { + uidKey: 'id', + dirtyCheck: true + }, + load: { + dataset: myDataset + }, + render: { + target: function() { ... } + } +}); + +// For illustration, we will clone and edit the second object in the dataset. +// NB: this would typically be done server-side in response to a DB update, +and then re-queried via an API. + +myDataset[1] = Object.assign({}, myDataset[1]); + +myDataset[1].title = 'Blog Post Title 11'; + +mixer.dataset(myDataset) + .then(function() { + // the target with ID "1", will be re-rendered reflecting its new title + }); +``` + +

debug

+ +A group of properties allowing the toggling of various debug features. + +### enable + + + + +A boolean dictating whether or not the mixer instance returned by the +`mixitup()` factory function should expose private properties and methods. + +By default, mixer instances only expose their public API, but enabling +debug mode will give you access to various mixer internals which may aid +in debugging, or the authoring of extensions. + + +|Type | Default +|--- | --- +|`boolean`| `false` + +###### Example: Enabling debug mode + +```js + +var mixer = mixitup(containerEl, { + debug: { + enable: true + } +}); + +// Private properties and methods will now be visible on the mixer instance: + +console.log(mixer); +``` +### showWarnings + + + + +A boolean dictating whether or not warnings should be shown when various +common gotchas occur. + +Warnings are intended to provide insights during development when something +occurs that is not a fatal, but may indicate an issue with your integration, +and are therefore turned on by default. However, you may wish to disable +them in production. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example 1: Disabling warnings + +```js + +var mixer = mixitup(containerEl, { + debug: { + showWarnings: false + } +}); +``` +###### Example 2: Disabling warnings based on environment + +```js + +var showWarnings = myAppConfig.environment === 'development' ? true : false; + +var mixer = mixitup(containerEl, { + debug: { + showWarnings: showWarnings + } +}); +``` + +

layout

+ +A group of properties relating to the layout of the container. + +### allowNestedTargets + + + + +A boolean dictating whether or not mixitup should query all descendants +of the container for targets, or only immediate children. + +By default, mixitup will query all descendants matching the +`selectors.target` selector when indexing targets upon instantiation. +This allows for targets to be nested inside a sub-container which is +useful when ring-fencing targets from locally scoped controls in your +markup (see `controls.scope`). + +However, if you are building a more complex UI requiring the nesting +of mixers within mixers, you will most likely want to limit targets to +immediate children of the container by setting this property to `false`. + + +|Type | Default +|--- | --- +|`boolean`| `true` + +###### Example: Restricting targets to immediate children + +```js + +var mixer = mixitup(containerEl, { + layout: { + allowNestedTargets: false + } +}); +``` +### containerClassName + + + + +A string specifying an optional class name to apply to the container when in +its default state. + +By changing this class name or adding a class name to the container via the +`.changeLayout()` API method, the CSS layout of the container can be changed, +and MixItUp will attemp to gracefully animate the container and its targets +between states. + + +|Type | Default +|--- | --- +|`string`| `''` + +###### Example 1: Specifying a container class name + +```js + +var mixer = mixitup(containerEl, { + layout: { + containerClassName: 'grid' + } +}); +``` +###### Example 2: Changing the default class name with `.changeLayout()` + +```js + +var mixer = mixitup(containerEl, { + layout: { + containerClassName: 'grid' + } +}); + +mixer.changeLayout('list') + .then(function(state) { + console.log(state.activeContainerClass); // "list" + }); +``` +### siblingBefore + + + + +A reference to a non-target sibling element after which to insert targets +when there are no targets in the container. + + +|Type | Default +|--- | --- +|`HTMLElement`| `null` + +###### Example: Setting a `siblingBefore` reference element + +```js + +var addButton = containerEl.querySelector('button'); + +var mixer = mixitup(containerEl, { + layout: { + siblingBefore: addButton + } +}); +``` +### siblingAfter + + + + +A reference to a non-target sibling element before which to insert targets +when there are no targets in the container. + + +|Type | Default +|--- | --- +|`HTMLElement`| `null` + +###### Example: Setting an `siblingAfter` reference element + +```js + +var gap = containerEl.querySelector('.gap'); + +var mixer = mixitup(containerEl, { + layout: { + siblingAfter: gap + } +}); +``` + +

load

+ +A group of properties defining the initial state of the mixer on load (instantiation). + +### filter + + + + +A string defining any filtering to be statically applied to the mixer on load. +As per the `.filter()` API, this can be any valid selector string, or the +values `'all'` or `'none'`. + + +|Type | Default +|--- | --- +|`string`| `'all'` + +###### Example 1: Defining an initial filter selector to be applied on load + +```js + +// The mixer will show only those targets matching '.category-a' on load. + +var mixer = mixitup(containerEl, { + load: { + filter: '.category-a' + } +}); +``` +###### Example 2: Hiding all targets on load + +```js + +// The mixer will show hide all targets on load. + +var mixer = mixitup(containerEl, { + load: { + filter: 'none' + } +}); +``` +### sort + + + + +A string defining any sorting to be statically applied to the mixer on load. +As per the `.sort()` API, this should be a valid "sort string" made up of +an attribute to sort by (or `'default'`) followed by an optional sorting +order, or the value `'random'`; + + +|Type | Default +|--- | --- +|`string`| `'default:asc'` + +###### Example: Defining sorting to be applied on load + +```js + +// The mixer will sort the container by the value of the `data-published-date` +// attribute, in descending order. + +var mixer = mixitup(containerEl, { + load: { + sort: 'published-date:desc' + } +}); +``` +### dataset + + + + +An array of objects representing the underlying data of any pre-rendered targets, +when using the `.dataset()` API. + +NB: If targets are pre-rendered when the mixer is instantiated, this must be set. + + +|Type | Default +|--- | --- +|`Array.`| `null` + +###### Example: Defining the initial underyling dataset + +```js + +var myDataset = [ + { + id: 0, + title: "Blog Post Title 0", + ... + }, + { + id: 1, + title: "Blog Post Title 1", + ... + } +]; + +var mixer = mixitup(containerEl, { + data: { + uidKey: 'id' + }, + load: { + dataset: myDataset + } +}); +``` + +

selectors

+ +A group of properties defining the selectors used to query elements within a mixitup container. + +### target + + + + +A selector string used to query and index target elements within the container. + +By default, the class selector `'.mix'` is used, but this can be changed to an +attribute or element selector to match the style of your project. + + +|Type | Default +|--- | --- +|`string`| `'.mix'` + +###### Example 1: Changing the target selector + +```js + +var mixer = mixitup(containerEl, { + selectors: { + target: '.portfolio-item' + } +}); +``` +###### Example 2: Using an attribute selector as a target selector + +```js + +// The mixer will search for any children with the attribute `data-ref="mix"` + +var mixer = mixitup(containerEl, { + selectors: { + target: '[data-ref="mix"]' + } +}); +``` +### control + + + + +A optional selector string used to add further specificity to the querying of control elements, +in addition to their mandatory data attribute (e.g. `data-filter`, `data-toggle`, `data-sort`). + +This can be used if other elements in your document must contain the above attributes +(e.g. for use in third-party scripts), and would otherwise interfere with MixItUp. Adding +an additional `control` selector of your choice allows MixItUp to restrict event handling +to only those elements matching the defined selector. + + +|Type | Default +|--- | --- +|`string`| `''` + +###### Example 1: Adding a `selectors.control` selector + +```js + +var mixer = mixitup(containerEl, { + selectors: { + control: '.mixitup-control' + } +}); + +// Will not be handled: +// + +// Will be handled: +// +``` + +

render

+ +A group of optional render functions for creating and updating elements. + +All render functions receive a data object, and should return a valid HTML string. + +### target + + + + +A function returning an HTML string representing a target element, or a reference to a +single DOM element. + +The function is invoked as part of the `.dataset()` API, whenever a new item is added +to the dataset, or an item in the dataset changes (if `dataset.dirtyCheck` is enabled). + +The function receives the relevant dataset item as its first parameter. + + +|Type | Default +|--- | --- +|`function`| `'null'` + +###### Example 1: Using string concatenation + +```js + +var mixer = mixitup(containerEl, { + render: { + target: function(item) { + return ( + '
' + + '

' + item.title + '

' + + '
' + ); + } + } +}); +``` +###### Example 2: Using an ES2015 template literal + +```js + +var mixer = mixitup(containerEl, { + render: { + target: function(item) { + return ( + `
+

${item.title}

+
` + ); + } + } +}); +``` +###### Example 3: Using a Handlebars template + +```js + +var targetTemplate = Handlebars.compile('

{{title}}

'); + +var mixer = mixitup(containerEl, { + render: { + target: targetTemplate + } +}); +``` +###### Example 4: Returning a DOM element + +```js + +var mixer = mixitup(containerEl, { + render: { + target: function(item) { + // Create a single element using your framework's built-in renderer + + var el = ... + + return el; + } + } +}); +``` + diff --git a/mixitup-3.3.1/docs/mixitup.Events.md b/mixitup-3.3.1/docs/mixitup.Events.md new file mode 100644 index 0000000..da5ea3e --- /dev/null +++ b/mixitup-3.3.1/docs/mixitup.Events.md @@ -0,0 +1,104 @@ +# mixitup.Events + +## Overview + +The `mixitup.Events` class contains all custom events dispatched by MixItUp at various +points within the lifecycle of a mixer operation. + +Each event is analogous to the callback function of the same name defined in +the `callbacks` configuration object, and is triggered immediately before it. + +Events are always triggered from the container element on which MixItUp is instantiated +upon. + +As with any event, registered event handlers receive the event object as a parameter +which includes a `detail` property containting references to the current `state`, +the `mixer` instance, and other event-specific properties described below. + +### Contents + +- [mixStart](#mixStart) +- [mixBusy](#mixBusy) +- [mixEnd](#mixEnd) +- [mixFail](#mixFail) +- [mixClick](#mixClick) + + +

mixStart

+ + + + +A custom event triggered immediately after any MixItUp operation is requested +and before animations have begun. + +The `mixStart` event also exposes a `futureState` property via the +`event.detail` object, which represents the final state of the mixer once +the requested operation has completed. + + +|Type +|--- +|`CustomEvent` + + +

mixBusy

+ + + + +A custom event triggered when a MixItUp operation is requested while another +operation is in progress, and the animation queue is full, or queueing +is disabled. + + +|Type +|--- +|`CustomEvent` + + +

mixEnd

+ + + + +A custom event triggered after any MixItUp operation has completed, and the +state has been updated. + + +|Type +|--- +|`CustomEvent` + + +

mixFail

+ + + + +A custom event triggered whenever a filter operation "fails", i.e. no targets +could be found matching the requested filter. + + +|Type +|--- +|`CustomEvent` + + +

mixClick

+ + + + +A custom event triggered whenever a MixItUp control is clicked, and before its +respective operation is requested. + +This event also exposes an `originalEvent` property via the `event.detail` +object, which holds a reference to the original click event. + + +|Type +|--- +|`CustomEvent` + + diff --git a/mixitup-3.3.1/docs/mixitup.Mixer.md b/mixitup-3.3.1/docs/mixitup.Mixer.md new file mode 100644 index 0000000..5534f2c --- /dev/null +++ b/mixitup-3.3.1/docs/mixitup.Mixer.md @@ -0,0 +1,1011 @@ +# mixitup.Mixer + +## Overview + +The `mixitup.Mixer` class is used to hold discreet, user-configured +instances of MixItUp on a provided container element. + +Mixer instances are returned whenever the `mixitup()` factory function is called, +which expose a range of methods enabling API-based filtering, sorting, +insertion, removal and more. + +### Contents + +- [show()](#show) +- [hide()](#hide) +- [isMixing()](#isMixing) +- [filter()](#filter) +- [toggleOn()](#toggleOn) +- [toggleOff()](#toggleOff) +- [sort()](#sort) +- [changeLayout()](#changeLayout) +- [dataset()](#dataset) +- [multimix()](#multimix) +- [insert()](#insert) +- [insertBefore()](#insertBefore) +- [insertAfter()](#insertAfter) +- [prepend()](#prepend) +- [append()](#append) +- [remove()](#remove) +- [getConfig()](#getConfig) +- [configure()](#configure) +- [getState()](#getState) +- [forceRefresh()](#forceRefresh) +- [forceRender()](#forceRender) +- [destroy()](#destroy) + + +

show()

+ +*Version added: 3.0.0* + +`.show()` + +A shorthand method for `.filter('all')`. Shows all targets in the container. + +| |Type | Name | Description +|---|--- | --- | --- +|Returns |`Promise.` | + + +###### Example: Showing all targets + +```js + +mixer.show() + .then(function(state) { + console.log(state.totalShow === state.totalTargets); // true + }); +``` + +

hide()

+ +*Version added: 3.0.0* + +`.hide()` + +A shorthand method for `.filter('none')`. Hides all targets in the container. + +| |Type | Name | Description +|---|--- | --- | --- +|Returns |`Promise.` | + + +###### Example: Hiding all targets + +```js + +mixer.hide() + .then(function(state) { + console.log(state.totalShow === 0); // true + console.log(state.totalHide === state.totalTargets); // true + }); +``` + +

isMixing()

+ +*Version added: 2.0.0* + +`.isMixing()` + +Returns a boolean indicating whether or not a MixItUp operation is +currently in progress. + +| |Type | Name | Description +|---|--- | --- | --- +|Returns |`boolean` | + + +###### Example: Checking the status of a mixer + +```js + +mixer.sort('random', function() { + console.log(mixer.isMixing()) // false +}); + +console.log(mixer.isMixing()) // true +``` + +

filter()

+ +*Version added: 2.0.0* + +`.filter(selector [, animate] [, callback])` + +Filters all targets in the container by a provided selector string, or the values `'all'` +or `'none'`. Only targets matching the selector will be shown. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`string, HTMLElement, Array.` | `selector` | Any valid CSS selector (i.e. `'.category-a'`), or the values `'all'` or `'none'`. The filter method also accepts a reference to single target element or a collection of target elements to show. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example 1: Filtering targets by a class selector + +```js + +mixer.filter('.category-a') + .then(function(state) { + console.log(state.totalShow === containerEl.querySelectorAll('.category-a').length); // true + }); +``` +###### Example 2: Filtering targets by an attribute selector + +```js + +mixer.filter('[data-category~="a"]') + .then(function(state) { + console.log(state.totalShow === containerEl.querySelectorAll('[data-category~="a"]').length); // true + }); +``` +###### Example 3: Filtering targets by a compound selector + +```js + +// Show only those targets with the classes 'category-a' AND 'category-b' + +mixer.filter('.category-a.category-c') + .then(function(state) { + console.log(state.totalShow === containerEl.querySelectorAll('.category-a.category-c').length); // true + }); +``` +###### Example 4: Filtering via an element collection + +```js + +var collection = Array.from(container.querySelectorAll('.mix')); + +console.log(collection.length); // 34 + +// Filter the collection manually using Array.prototype.filter + +var filtered = collection.filter(function(target) { + return parseInt(target.getAttribute('data-price')) > 10; +}); + +console.log(filtered.length); // 22 + +// Pass the filtered collection to MixItUp + +mixer.filter(filtered) + .then(function(state) { + console.log(state.activeFilter.collection.length === 22); // true + }); +``` + +

toggleOn()

+ +*Version added: 3.0.0* + +`.toggleOn(selector [, animate] [, callback])` + +Adds an additional selector to the currently active filter selector, concatenating +as per the logic defined in `controls.toggleLogic`. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`string` | `selector` | Any valid CSS selector (i.e. `'.category-a'`) +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example: Toggling on a filter selector + +```js + +console.log(mixer.getState().activeFilter.selector); // '.category-a' + +mixer.toggleOn('.category-b') + .then(function(state) { + console.log(state.activeFilter.selector); // '.category-a, .category-b' + }); +``` + +

toggleOff()

+ +*Version added: 3.0.0* + +`.toggleOff(selector [, animate] [, callback])` + +Removes a selector from the active filter selector. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`string` | `selector` | Any valid CSS selector (i.e. `'.category-a'`) +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example: Toggling off a filter selector + +```js + +console.log(mixer.getState().activeFilter.selector); // '.category-a, .category-b' + +mixer.toggleOff('.category-b') + .then(function(state) { + console.log(state.activeFilter.selector); // '.category-a' + }); +``` + +

sort()

+ +*Version added: 2.0.0* + +`.sort(sortString [, animate] [, callback])` + +Sorts all targets in the container according to a provided sort string. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`string, Array.` | `sortString` | A valid sort string (e.g. `'default'`, `'published-date:asc'`, or `'random'`). The sort method also accepts an array of all target elements in a user-defined order. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example 1: Sorting by the default DOM order + +```js + +// Reverse the default order of the targets + +mixer.sort('default:desc') + .then(function(state) { + console.log(state.activeSort.attribute === 'default'); // true + console.log(state.activeSort.order === 'desc'); // true + }); +``` +###### Example 2: Sorting by a custom data-attribute + +```js + +// Sort the targets by the value of a `data-published-date` attribute + +mixer.sort('published-date:asc') + .then(function(state) { + console.log(state.activeSort.attribute === 'published-date'); // true + console.log(state.activeSort.order === 'asc'); // true + }); +``` +###### Example 3: Sorting by multiple attributes + +```js + +// Sort the targets by the value of a `data-published-date` attribute, then by `data-title` + +mixer.sort('published-date:desc data-title:asc') + .then(function(state) { + console.log(state.activeSort.attribute === 'published-date'); // true + console.log(state.activeSort.order === 'desc'); // true + + console.log(state.activeSort.next.attribute === 'title'); // true + console.log(state.activeSort.next.order === 'asc'); // true + }); +``` +###### Example 4: Sorting by random + +```js + +mixer.sort('random') + .then(function(state) { + console.log(state.activeSort.order === 'random') // true + }); +``` +###### Example 5: Sorting via an element collection + +```js + +var collection = Array.from(container.querySelectorAll('.mix')); + +// Swap the position of two elements in the collection: + +var temp = collection[1]; + +collection[1] = collection[0]; +collection[0] = temp; + +// Pass the sorted collection to MixItUp + +mixer.sort(collection) + .then(function(state) { + console.log(state.targets[0] === collection[0]); // true + }); +``` + +

changeLayout()

+ +*Version added: 2.0.0* + +`.changeLayout(containerClassName [, animate] [, callback])` + +Changes the layout of the container by adding, removing or updating a +layout-specific class name. If `animation.animateResizetargets` is +enabled, MixItUp will attempt to gracefully animate the width, height, +and position of targets between layout states. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`string` | `containerClassName` | A layout-specific class name to add to the container. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example 1: Adding a new class name to the container + +```js + +mixer.changeLayout('container-list') + .then(function(state) { + console.log(state.activeContainerClass === 'container-list'); // true + }); +``` +###### Example 2: Removing a previously added class name from the container + +```js + +mixer.changeLayout('') + .then(function(state) { + console.log(state.activeContainerClass === ''); // true + }); +``` + +

dataset()

+ +*Version added: 3.0.0* + +`.dataset(dataset [, animate] [, callback])` + +Updates the contents and order of the container to reflect the provided dataset, +if the dataset API is in use. + +The dataset API is designed for use in API-driven JavaScript applications, and +can be used instead of DOM-based methods such as `.filter()`, `.sort()`, +`.insert()`, etc. When used, insertion, removal, sorting and pagination can be +achieved purely via changes to your data model, without the uglyness of having +to interact with or query the DOM directly. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`Array.` | `dataset` | An array of objects, each one representing the underlying data model of a target to be rendered. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example 1: Rendering a dataset + +```js + +var myDataset = [ + {id: 1, ...}, + {id: 2, ...}, + {id: 3, ...} +]; + +mixer.dataset(myDataset) + .then(function(state) { + console.log(state.totalShow === 3); // true + }); +``` +###### Example 2: Sorting a dataset + +```js + +// Create a new dataset in reverse order + +var newDataset = myDataset.slice().reverse(); + +mixer.dataset(newDataset) + .then(function(state) { + console.log(state.activeDataset[0] === myDataset[2]); // true + }); +``` +###### Example 3: Removing an item from the dataset + +```js + +console.log(myDataset.length); // 3 + +// Create a new dataset with the last item removed. + +var newDataset = myDataset.slice().pop(); + +mixer.dataset(newDataset) + .then(function(state) { + console.log(state.totalShow === 2); // true + }); +``` + +

multimix()

+ +*Version added: 2.0.0* + +`.multimix(multimixCommand [, animate] [, callback])` + +Performs simultaneous `filter`, `sort`, `insert`, `remove` and `changeLayout` +operations as requested. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`object` | `multimixCommand` | An object containing one or more things to do +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example 1: Performing simultaneous filtering and sorting + +```js + +mixer.multimix({ + filter: '.category-b', + sort: 'published-date:desc' +}) + .then(function(state) { + console.log(state.activeFilter.selector === '.category-b'); // true + console.log(state.activeSort.attribute === 'published-date'); // true + }); +``` +###### Example 2: Performing simultaneous sorting, insertion, and removal + +```js + +console.log(mixer.getState().totalShow); // 6 + +// NB: When inserting via `multimix()`, an object should be provided as the value +// for the `insert` portion of the command, allowing for a collection of elements +// and an insertion index to be specified. + +mixer.multimix({ + sort: 'published-date:desc', // Sort the container, including any new elements + insert: { + collection: [newElementReferenceA, newElementReferenceB], // Add 2 new elements at index 5 + index: 5 + }, + remove: existingElementReference // Remove 1 existing element +}) + .then(function(state) { + console.log(state.activeSort.attribute === 'published-date'); // true + console.log(state.totalShow === 7); // true + }); +``` + +

insert()

+ +*Version added: 2.0.0* + +`.insert(newElements [, index] [, animate], [, callback])` + +Inserts one or more new target elements into the container at a specified +index. + +To be indexed as targets, new elements must match the `selectors.target` +selector (`'.mix'` by default). + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`HTMLElement, Array., string` | `newElements` | A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. +|Param |`number` | `index` | The index at which to insert the new element(s). `0` by default. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example 1: Inserting a single element via reference + +```js + +console.log(mixer.getState().totalShow); // 0 + +// Create a new element + +var newElement = document.createElement('div'); +newElement.classList.add('mix'); + +mixer.insert(newElement) + .then(function(state) { + console.log(state.totalShow === 1); // true + }); +``` +###### Example 2: Inserting a single element via HTML string + +```js + +console.log(mixer.getState().totalShow); // 1 + +// Create a new element via reference + +var newElementHtml = '
'; + +// Create and insert the new element at index 1 + +mixer.insert(newElementHtml, 1) + .then(function(state) { + console.log(state.totalShow === 2); // true + console.log(state.show[1].outerHTML === newElementHtml); // true + }); +``` +###### Example 3: Inserting multiple elements via reference + +```js + +console.log(mixer.getState().totalShow); // 2 + +// Create an array of new elements to insert. + +var newElement1 = document.createElement('div'); +var newElement2 = document.createElement('div'); + +newElement1.classList.add('mix'); +newElement2.classList.add('mix'); + +var newElementsCollection = [newElement1, newElement2]; + +// Insert the new elements starting at index 1 + +mixer.insert(newElementsCollection, 1) + .then(function(state) { + console.log(state.totalShow === 4); // true + console.log(state.show[1] === newElement1); // true + console.log(state.show[2] === newElement2); // true + }); +``` +###### Example 4: Inserting a jQuery collection object containing one or more elements + +```js + +console.log(mixer.getState().totalShow); // 4 + +var $newElement = $('
'); + +// Insert the new elements starting at index 3 + +mixer.insert($newElement, 3) + .then(function(state) { + console.log(state.totalShow === 5); // true + console.log(state.show[3] === $newElement[0]); // true + }); +``` + +

insertBefore()

+ +*Version added: 3.0.0* + +`.insertBefore(newElements, referenceElement [, animate] [, callback])` + +Inserts one or more new elements before a provided reference element. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`HTMLElement, Array., string` | `newElements` | A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. +|Param |`HTMLElement` | `referenceElement` | A reference to an existing element in the container to insert new elements before. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example: Inserting a new element before a reference element + +```js + +// An existing reference element is chosen at index 2 + +var referenceElement = mixer.getState().show[2]; + +// Create a new element + +var newElement = document.createElement('div'); +newElement.classList.add('mix'); + +mixer.insertBefore(newElement, referenceElement) + .then(function(state) { + // The new element is inserted into the container at index 2, before the reference element + + console.log(state.show[2] === newElement); // true + + // The reference element is now at index 3 + + console.log(state.show[3] === referenceElement); // true + }); +``` + +

insertAfter()

+ +*Version added: 3.0.0* + +`.insertAfter(newElements, referenceElement [, animate] [, callback])` + +Inserts one or more new elements after a provided reference element. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`HTMLElement, Array., string` | `newElements` | A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. +|Param |`HTMLElement` | `referenceElement` | A reference to an existing element in the container to insert new elements after. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example: Inserting a new element after a reference element + +```js + +// An existing reference element is chosen at index 2 + +var referenceElement = mixer.getState().show[2]; + +// Create a new element + +var newElement = document.createElement('div'); +newElement.classList.add('mix'); + +mixer.insertAfter(newElement, referenceElement) + .then(function(state) { + // The new element is inserted into the container at index 3, after the reference element + + console.log(state.show[3] === newElement); // true + }); +``` + +

prepend()

+ +*Version added: 3.0.0* + +`.prepend(newElements [,animate] [,callback])` + +Inserts one or more new elements into the container before all existing targets. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`HTMLElement, Array., string` | `newElements` | A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example: Prepending a new element + +```js + +// Create a new element + +var newElement = document.createElement('div'); +newElement.classList.add('mix'); + +// Insert the element into the container + +mixer.prepend(newElement) + .then(function(state) { + console.log(state.show[0] === newElement); // true + }); +``` + +

append()

+ +*Version added: 3.0.0* + +`.append(newElements [,animate] [,callback])` + +Inserts one or more new elements into the container after all existing targets. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`HTMLElement, Array., string` | `newElements` | A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example: Appending a new element + +```js + +// Create a new element + +var newElement = document.createElement('div'); +newElement.classList.add('mix'); + +// Insert the element into the container + +mixer.append(newElement) + .then(function(state) { + console.log(state.show[state.show.length - 1] === newElement); // true + }); +``` + +

remove()

+ +*Version added: 3.0.0* + +`.remove(elements [, animate] [, callback])` + +Removes one or more existing target elements from the container. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`HTMLElement, Array., string, number` | `elements` | A reference to a single element to remove, an array-like collection of elements, a selector string, or the index of an element to remove. +|Param |`boolean` | `[animate]` | An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. +|Param |`function` | `[callback]` | An optional callback function to be invoked after the operation has completed. +|Returns |`Promise.` | A promise resolving with the current state object. + + +###### Example 1: Removing an element by reference + +```js + +var elementToRemove = containerEl.firstElementChild; + +mixer.remove(elementToRemove) + .then(function(state) { + console.log(state.targets.indexOf(elementToRemove) === -1); // true + }); +``` +###### Example 2: Removing a collection of elements by reference + +```js + +var elementsToRemove = containerEl.querySelectorAll('.category-a'); + +console.log(elementsToRemove.length) // 3 + +mixer.remove(elementsToRemove) + .then(function() { + console.log(containerEl.querySelectorAll('.category-a').length); // 0 + }); +``` +###### Example 3: Removing one or more elements by selector + +```js + +mixer.remove('.category-a') + .then(function() { + console.log(containerEl.querySelectorAll('.category-a').length); // 0 + }); +``` +###### Example 4: Removing an element by index + +```js + +console.log(mixer.getState.totalShow); // 4 + +// Remove the element at index 3 + +mixer.remove(3) + .then(function(state) { + console.log(state.totalShow); // 3 + console.log(state.show[3]); // undefined + }); +``` + +

getConfig()

+ +*Version added: 2.0.0* + +`.getConfig([stringKey])` + +Retrieves the the value of any property or sub-object within the current +mixitup configuration, or the whole configuration object. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`string` | `[stringKey]` | A "dot-notation" string key +|Returns |`*` | + + +###### Example 1: retrieve the entire configuration object + +```js + +var config = mixer.getConfig(); // Config { ... } +``` +###### Example 2: retrieve a named sub-object of configuration object + +```js + +var animation = mixer.getConfig('animation'); // ConfigAnimation { ... } +``` +###### Example 3: retrieve a value of configuration object via a dot-notation string key + +```js + +var effects = mixer.getConfig('animation.effects'); // 'fade scale' +``` + +

configure()

+ +*Version added: 3.0.0* + +`.configure(config)` + +Updates the configuration of the mixer, after it has been instantiated. + +See the Configuration Object documentation for a full list of avilable +configuration options. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`object` | `config` | An object containing one of more configuration options. +|Returns |`void` | + + +###### Example 1: Updating animation options + +```js + +mixer.configure({ + animation: { + effects: 'fade translateX(-100%)', + duration: 300 + } +}); +``` +###### Example 2: Removing a callback after it has been set + +```js + +var mixer; + +function handleMixEndOnce() { + // Do something .. + + // Then nullify the callback + + mixer.configure({ + callbacks: { + onMixEnd: null + } + }); +}; + +// Instantiate a mixer with a callback defined + +mixer = mixitup(containerEl, { + callbacks: { + onMixEnd: handleMixEndOnce + } +}); +``` + +

getState()

+ +*Version added: 2.0.0* + +`.getState();` + +Returns an object containing information about the current state of the +mixer. See the State Object documentation for more information. + +NB: State objects are immutable and should therefore be regenerated +after any operation. + +| |Type | Name | Description +|---|--- | --- | --- +|Returns |`mixitup.State` | An object reflecting the current state of the mixer. + + +###### Example: Retrieving a state object + +```js + +var state = mixer.getState(); + +console.log(state.totalShow + 'targets are currently shown'); +``` + +

forceRefresh()

+ +*Version added: 2.1.2* + +`.forceRefresh()` + +Forces the re-indexing all targets within the container. + +This should only be used if some other piece of code in your application +has manipulated the contents of your container, which should be avoided. + +If you need to add or remove target elements from the container, use +the built-in `.insert()` or `.remove()` methods, and MixItUp will keep +itself up to date. + +| |Type | Name | Description +|---|--- | --- | --- +|Returns |`void` | + + +###### Example: Force refreshing the mixer after external DOM manipulation + +```js + +console.log(mixer.getState().totalShow); // 3 + +// An element is removed from the container via some external DOM manipulation code: + +containerEl.removeChild(containerEl.firstElementChild); + +// The mixer does not know that the number of targets has changed: + +console.log(mixer.getState().totalShow); // 3 + +mixer.forceRefresh(); + +// After forceRefresh, the mixer is in sync again: + +console.log(mixer.getState().totalShow); // 2 +``` + +

forceRender()

+ +*Version added: 3.2.1* + +`.forceRender()` + +Forces the re-rendering of all targets when using the Dataset API. + +By default, targets are only re-rendered when `data.dirtyCheck` is +enabled, and an item's data has changed when `dataset()` is called. + +The `forceRender()` method allows for the re-rendering of all targets +in response to some arbitrary event, such as the changing of the target +render function. + +Targets are rendered against their existing data. + +| |Type | Name | Description +|---|--- | --- | --- +|Returns |`void` | + + +###### Example: Force render targets after changing the target render function + +```js + +console.log(container.innerHTML); // ... Foo ... + +mixer.configure({ + render: { + target: (item) => `${item.title}` + } +}); + +mixer.forceRender(); + +console.log(container.innerHTML); // ... Foo ... +``` + +

destroy()

+ +*Version added: 2.0.0* + +`.destroy([cleanUp])` + +Removes mixitup functionality from the container, unbinds all control +event handlers, and deletes the mixer instance from MixItUp's internal +cache. + +This should be performed whenever a mixer's container is removed from +the DOM, such as during a page change in a single page application, +or React's `componentWillUnmount()`. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`boolean` | `[cleanUp]` | An optional boolean dictating whether or not to clean up any inline `display: none;` styling applied to hidden targets. +|Returns |`void` | + + +###### Example: Destroying the mixer before removing its container element + +```js + +mixer.destroy(); + +containerEl.parentElement.removeChild(containerEl); +``` + diff --git a/mixitup-3.3.1/docs/mixitup.State.md b/mixitup-3.3.1/docs/mixitup.State.md new file mode 100644 index 0000000..a031431 --- /dev/null +++ b/mixitup-3.3.1/docs/mixitup.State.md @@ -0,0 +1,248 @@ +# mixitup.State + +## Overview + +`mixitup.State` objects expose various pieces of data detailing the state of +a MixItUp instance. They are provided at the start and end of any operation via +callbacks and events, with the most recent state stored between operations +for retrieval at any time via the API. + +### Contents + +- [id](#id) +- [activeFilter](#activeFilter) +- [activeSort](#activeSort) +- [activeContainerClassName](#activeContainerClassName) +- [container](#container) +- [targets](#targets) +- [hide](#hide) +- [show](#show) +- [matching](#matching) +- [totalTargets](#totalTargets) +- [totalShow](#totalShow) +- [totalHide](#totalHide) +- [totalMatching](#totalMatching) +- [hasFailed](#hasFailed) +- [triggerElement](#triggerElement) +- [activeDataset](#activeDataset) + + +

id

+ + + + +The ID of the mixer instance. + + +|Type | Default +|--- | --- +|`string`| `''` + + +

activeFilter

+ + + + +The currently active filter command as set by a control click or API call. + + +|Type | Default +|--- | --- +|`mixitup.CommandFilter`| `null` + + +

activeSort

+ + + + +The currently active sort command as set by a control click or API call. + + +|Type | Default +|--- | --- +|`mixitup.CommandSort`| `null` + + +

activeContainerClassName

+ + + + +The current layout-specific container class name, if applied. + + +|Type | Default +|--- | --- +|`string`| `''` + + +

container

+ + + + +A reference to the container element that the mixer is instantiated on. + + +|Type | Default +|--- | --- +|`Element`| `null` + + +

targets

+ + + + +An array of all target elements indexed by the mixer. + + +|Type | Default +|--- | --- +|`Array.`| `[]` + + +

hide

+ + + + +An array of all target elements not matching the current filter. + + +|Type | Default +|--- | --- +|`Array.`| `[]` + + +

show

+ + + + +An array of all target elements matching the current filter and any additional +limits applied such as pagination. + + +|Type | Default +|--- | --- +|`Array.`| `[]` + + +

matching

+ + + + +An array of all target elements matching the current filter irrespective of +any additional limits applied such as pagination. + + +|Type | Default +|--- | --- +|`Array.`| `[]` + + +

totalTargets

+ + + + +An integer representing the total number of target elements indexed by the +mixer. Equivalent to `state.targets.length`. + + +|Type | Default +|--- | --- +|`number`| `-1` + + +

totalShow

+ + + + +An integer representing the total number of target elements matching the +current filter and any additional limits applied such as pagination. +Equivalent to `state.show.length`. + + +|Type | Default +|--- | --- +|`number`| `-1` + + +

totalHide

+ + + + +An integer representing the total number of target elements not matching +the current filter. Equivalent to `state.hide.length`. + + +|Type | Default +|--- | --- +|`number`| `-1` + + +

totalMatching

+ + + + +An integer representing the total number of target elements matching the +current filter irrespective of any other limits applied such as pagination. +Equivalent to `state.matching.length`. + + +|Type | Default +|--- | --- +|`number`| `-1` + + +

hasFailed

+ + + + +A boolean indicating whether the last operation "failed", i.e. no targets +could be found matching the filter. + + +|Type | Default +|--- | --- +|`boolean`| `false` + + +

triggerElement

+ + + + +The DOM element that was clicked if the last operation was triggered by the +clicking of a control and not an API call. + + +|Type | Default +|--- | --- +|`Elementnull`| `null` + + +

activeDataset

+ + + + +The currently active dataset underlying the rendered targets, if the +dataset API is in use. + + +|Type | Default +|--- | --- +|`Array.`| `null` + + diff --git a/mixitup-3.3.1/docs/mixitup.md b/mixitup-3.3.1/docs/mixitup.md new file mode 100644 index 0000000..c9f7857 --- /dev/null +++ b/mixitup-3.3.1/docs/mixitup.md @@ -0,0 +1,47 @@ +#mixitup() + +*Version added: 3.0.0* + +`mixitup(container [,config] [,foreignDoc])` + +The `mixitup()` "factory" function creates and returns individual instances +of MixItUp, known as "mixers", on which API methods can be called. + +When loading MixItUp via a script tag, the factory function is accessed +via the global variable `mixitup`. When using a module loading +system (e.g. ES2015, CommonJS, RequireJS), the factory function is +exported into your module when you require the MixItUp library. + +| |Type | Name | Description +|---|--- | --- | --- +|Param |`Element, string` | `container` | A DOM element or selector string representing the container(s) on which to instantiate MixItUp. +|Param |`object` | `[config]` | An optional "configuration object" used to customize the behavior of the MixItUp instance. +|Param |`object` | `[foreignDoc]` | An optional reference to a `document`, which can be used to control a MixItUp instance in an iframe. +|Returns |`mixitup.Mixer` | A "mixer" object holding the MixItUp instance. + +###### Example 1: Creating a mixer instance with an element reference + +```js +var containerEl = document.querySelector('.container'); + +var mixer = mixitup(containerEl); +``` +###### Example 2: Creating a mixer instance with a selector string + +```js +var mixer = mixitup('.container'); +``` +###### Example 3: Passing a configuration object + +```js +var mixer = mixitup(containerEl, { + animation: { + effects: 'fade scale(0.5)' + } +}); +``` +###### Example 4: Passing an iframe reference + +```js +var mixer = mixitup(containerEl, config, foreignDocument); +``` diff --git a/mixitup-3.3.1/gulpfile.js b/mixitup-3.3.1/gulpfile.js new file mode 100644 index 0000000..6374ff1 --- /dev/null +++ b/mixitup-3.3.1/gulpfile.js @@ -0,0 +1,90 @@ +'use strict'; + +const gulp = require('gulp'); +const jshint = require('gulp-jshint'); +const stylish = require('jshint-stylish'); +const rename = require('gulp-rename'); +const jscs = require('gulp-jscs'); +const uglify = require('gulp-uglify'); +const livereload = require('gulp-livereload'); +const exec = require('child_process').exec; + +gulp.task('default', ['watch']); + +gulp.task('watch', () => { + livereload.listen(35730); + + gulp.watch([ + './src/*.js', + './src/*.hbs' + ], ['reload-js']) + .on('change', function(e) { + console.log( + '[gulp-watch] file ' + + e.path + + ' was ' + + e.type + + ', building' + ); + }); +}); + +gulp.task('reload-js', ['build-dist'], () => { + return livereload.changed(); +}); + +gulp.task('prod', ['uglify']); + +gulp.task('uglify', ['build'], () => { + return gulp.src([ + './dist/mixitup.js' + ]) + .pipe(uglify({ + preserveComments: 'license' + })) + .pipe(rename('mixitup.min.js')) + .on('error', e => console.error('[uglify] ' + e.message)) + .pipe(gulp.dest('./dist/')) + .pipe(gulp.dest('./demos/')); +}); + +gulp.task('build', ['build-dist'], done => { + exec('node node_modules/mixitup-build/docs.js -s mixitup.js', (e, out) => { + if (out) { + console.log(out); + } + + done(e); + }); +}); + +gulp.task('build-dist', ['lint', 'code-style'], done => { + exec('node node_modules/mixitup-build/dist.js -o mixitup.js', (e, out) => { + if (out) { + console.log(out); + } + + done(e); + }); +}); + +gulp.task('lint', () => { + return gulp.src([ + './src/*.js' + ], { + base: '/' + }) + .pipe(jshint('./.jshintrc')) + .pipe(jshint.reporter(stylish)) + .pipe(jshint.reporter('fail')); +}); + +gulp.task('code-style', () => { + return gulp.src([ + './src/*.js' + ], { + base: '/' + }) + .pipe(jscs()) + .pipe(jscs.reporter()); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/package.json b/mixitup-3.3.1/package.json new file mode 100644 index 0000000..a7f24bb --- /dev/null +++ b/mixitup-3.3.1/package.json @@ -0,0 +1,41 @@ +{ + "name": "mixitup", + "title": "MixItUp", + "version": "3.3.1", + "description": "A high-performance, dependency-free library for animated filtering, sorting and more", + "author": "KunkaLabs Limited", + "homepage": "https://www.kunkalabs.com/mixitup/", + "license": "SEE LICENSE IN README.md", + "main": "./dist/mixitup.js", + "repository": { + "type": "git", + "url": "https://github.com/patrickkunka/mixitup/" + }, + "scripts": { + "test": "mocha ./tests/unit/main.js", + "cover": "istanbul cover _mocha ./tests/unit/main.js", + "coveralls": "npm run cover -- --report lcovonly && cat ./coverage/lcov.info | coveralls" + }, + "devDependencies": { + "chai": "^3.5.0", + "chai-as-promised": "^5.3.0", + "chai-shallow-deep-equal": "^1.4.0", + "coveralls": "^2.11.14", + "gulp": "^3.8.8", + "gulp-jscs": "^4.0.0", + "gulp-jshint": "^1.8.5", + "gulp-livereload": "~2.1.1", + "gulp-rename": "^1.2.2", + "gulp-uglify": "~1.5.1", + "istanbul": "^0.4.5", + "jsdom": "9.4.2", + "jsdom-global": "2.0.0", + "jshint-stylish": "~1.0.0", + "merge-stream": "^0.1.7", + "mixitup-build": "git://github.com/patrickkunka/mixitup-build.git", + "mocha": "^3.0.2", + "mocha-lcov-reporter": "^1.2.0", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0" + } +} diff --git a/mixitup-3.3.1/src/banner.js b/mixitup-3.3.1/src/banner.js new file mode 100644 index 0000000..b2512c7 --- /dev/null +++ b/mixitup-3.3.1/src/banner.js @@ -0,0 +1,15 @@ +/**! + * {{title}} v{{version}} + * {{description}} + * Build {{buildId}} + * + * @copyright Copyright {{beginCopyrightYear}}-{{currentYear}} {{author}}. + * @author {{author}}. + * @link {{websiteUrl}} + * + * @license Commercial use requires a commercial license. + * {{commercialLicenseUrl}} + * + * Non-commercial use permitted under same terms as CC BY-NC 3.0 license. + * {{nonCommercialLicenseUrl}} + */ diff --git a/mixitup-3.3.1/src/base-static.js b/mixitup-3.3.1/src/base-static.js new file mode 100644 index 0000000..4a3d7b4 --- /dev/null +++ b/mixitup-3.3.1/src/base-static.js @@ -0,0 +1,68 @@ +/* global mixitup, h */ + +/** + * The BaseStatic class holds a set of static methods which are then added to all other + * extensible MixItUp classes as a means of integrating extensions via the addition of new + * methods and/or actions and hooks. + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.BaseStatic = function() { + this.actions = {}; + this.filters = {}; + + /** + * Performs a shallow extend on the class's prototype, adding one or more new members to + * the class in a single operation. + * + * @memberof mixitup.BaseStatic + * @public + * @static + * @since 2.1.0 + * @param {object} extension + * @return {void} + */ + + this.extend = function(extension) { + h.extend(this.prototype, extension); + }; + + /** + * Registers a function to be called on the action hook of the provided name. + * + * @memberof mixitup.BaseStatic + * @public + * @static + * @since 2.1.0 + * @param {string} hookName + * @param {string} extensionName + * @param {function} func + * @return {void} + */ + + this.registerAction = function(hookName, extensionName, func) { + (this.actions[hookName] = this.actions[hookName] || {})[extensionName] = func; + }; + + /** + * Registers a function to be called on the filter of the provided name. + * + * @memberof mixitup.BaseStatic + * @public + * @static + * @since 2.1.0 + * @param {string} hookName + * @param {string} extensionName + * @param {function} func + * @return {void} + */ + + this.registerFilter = function(hookName, extensionName, func) { + (this.filters[hookName] = this.filters[hookName] || {})[extensionName] = func; + }; +}; \ No newline at end of file diff --git a/mixitup-3.3.1/src/base.js b/mixitup-3.3.1/src/base.js new file mode 100644 index 0000000..164f58c --- /dev/null +++ b/mixitup-3.3.1/src/base.js @@ -0,0 +1,76 @@ +/* global mixitup, h */ + +/** + * The Base class adds instance methods to all other extensible MixItUp classes, + * enabling the calling of any registered hooks. + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.Base = function() {}; + +mixitup.Base.prototype = { + constructor: mixitup.Base, + + /** + * Calls any registered hooks for the provided action. + * + * @memberof mixitup.Base + * @private + * @instance + * @since 2.0.0 + * @param {string} actionName + * @param {Array<*>} args + * @return {void} + */ + + callActions: function(actionName, args) { + var self = this, + hooks = self.constructor.actions[actionName], + extensionName = ''; + + if (!hooks || h.isEmptyObject(hooks)) return; + + for (extensionName in hooks) { + hooks[extensionName].apply(self, args); + } + }, + + /** + * Calls any registered hooks for the provided filter. + * + * @memberof mixitup.Base + * @private + * @instance + * @since 2.0.0 + * @param {string} filterName + * @param {*} input + * @param {Array<*>} args + * @return {*} + */ + + callFilters: function(filterName, input, args) { + var self = this, + hooks = self.constructor.filters[filterName], + output = input, + extensionName = ''; + + if (!hooks || h.isEmptyObject(hooks)) return output; + + args = args || []; + + for (extensionName in hooks) { + args = h.arrayFromList(args); + + args.unshift(output); + + output = hooks[extensionName].apply(self, args); + } + + return output; + } +}; \ No newline at end of file diff --git a/mixitup-3.3.1/src/collection.js b/mixitup-3.3.1/src/collection.js new file mode 100644 index 0000000..3fadf92 --- /dev/null +++ b/mixitup-3.3.1/src/collection.js @@ -0,0 +1,86 @@ +/* global mixitup, h */ + +/** + * A jQuery-collection-like wrapper around one or more `mixitup.Mixer` instances + * allowing simultaneous control of said instances similar to the MixItUp 2 API. + * + * @example + * new mixitup.Collection(instances) + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + * @param {mixitup.Mixer[]} instances + */ + +mixitup.Collection = function(instances) { + var instance = null, + i = -1; + + this.callActions('beforeConstruct'); + + for (i = 0; instance = instances[i]; i++) { + this[i] = instance; + } + + this.length = instances.length; + + this.callActions('afterConstruct'); + + h.freeze(this); +}; + +mixitup.BaseStatic.call(mixitup.Collection); + +mixitup.Collection.prototype = Object.create(mixitup.Base.prototype); + +h.extend(mixitup.Collection.prototype, +/** @lends mixitup.Collection */ +{ + constructor: mixitup.Collection, + + /** + * Calls a method on all instances in the collection by passing the method + * name as a string followed by any applicable parameters to be curried into + * to the method. + * + * @example + * .mixitup(methodName[,arg1][,arg2..]); + * + * @example + * var collection = new Collection([mixer1, mixer2]); + * + * return collection.mixitup('filter', '.category-a') + * .then(function(states) { + * state.forEach(function(state) { + * console.log(state.activeFilter.selector); // .category-a + * }); + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {string} methodName + * @return {Promise>} + */ + + mixitup: function(methodName) { + var self = this, + instance = null, + args = Array.prototype.slice.call(arguments), + tasks = [], + i = -1; + + this.callActions('beforeMixitup'); + + args.shift(); + + for (i = 0; instance = self[i]; i++) { + tasks.push(instance[methodName].apply(instance, args)); + } + + return self.callFilters('promiseMixitup', h.all(tasks, mixitup.libraries), arguments); + } +}); \ No newline at end of file diff --git a/mixitup-3.3.1/src/command-change-layout.js b/mixitup-3.3.1/src/command-change-layout.js new file mode 100644 index 0000000..3f6e394 --- /dev/null +++ b/mixitup-3.3.1/src/command-change-layout.js @@ -0,0 +1,28 @@ +/* global mixitup, h */ + +/** + * An object into which all arbitrary arguments sent to '.changeLayout()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.CommandChangeLayout = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.containerClassName = ''; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.CommandChangeLayout); + +mixitup.CommandChangeLayout.prototype = Object.create(mixitup.Base.prototype); + +mixitup.CommandChangeLayout.prototype.constructor = mixitup.CommandChangeLayout; \ No newline at end of file diff --git a/mixitup-3.3.1/src/command-dataset.js b/mixitup-3.3.1/src/command-dataset.js new file mode 100644 index 0000000..8e4cb33 --- /dev/null +++ b/mixitup-3.3.1/src/command-dataset.js @@ -0,0 +1,28 @@ +/* global mixitup, h */ + +/** + * An object into which all arbitrary arguments sent to '.dataset()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.CommandDataset = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.dataset = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.CommandDataset); + +mixitup.CommandDataset.prototype = Object.create(mixitup.Base.prototype); + +mixitup.CommandDataset.prototype.constructor = mixitup.CommandDataset; \ No newline at end of file diff --git a/mixitup-3.3.1/src/command-filter.js b/mixitup-3.3.1/src/command-filter.js new file mode 100644 index 0000000..8cc9a10 --- /dev/null +++ b/mixitup-3.3.1/src/command-filter.js @@ -0,0 +1,30 @@ +/* global mixitup, h */ + +/** + * An object into which all arbitrary arguments sent to '.filter()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.CommandFilter = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.selector = ''; + this.collection = null; + this.action = 'show'; // enum: ['show', 'hide'] + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.CommandFilter); + +mixitup.CommandFilter.prototype = Object.create(mixitup.Base.prototype); + +mixitup.CommandFilter.prototype.constructor = mixitup.CommandFilter; \ No newline at end of file diff --git a/mixitup-3.3.1/src/command-insert.js b/mixitup-3.3.1/src/command-insert.js new file mode 100644 index 0000000..c1b295b --- /dev/null +++ b/mixitup-3.3.1/src/command-insert.js @@ -0,0 +1,31 @@ +/* global mixitup, h */ + +/** + * An object into which all arbitrary arguments sent to '.insert()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.CommandInsert = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.index = 0; + this.collection = []; + this.position = 'before'; // enum: ['before', 'after'] + this.sibling = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.CommandInsert); + +mixitup.CommandInsert.prototype = Object.create(mixitup.Base.prototype); + +mixitup.CommandInsert.prototype.constructor = mixitup.CommandInsert; \ No newline at end of file diff --git a/mixitup-3.3.1/src/command-multimix.js b/mixitup-3.3.1/src/command-multimix.js new file mode 100644 index 0000000..8cee97d --- /dev/null +++ b/mixitup-3.3.1/src/command-multimix.js @@ -0,0 +1,32 @@ +/* global mixitup, h */ + +/** + * An object into which all arbitrary arguments sent to '.multimix()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.CommandMultimix = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.filter = null; + this.sort = null; + this.insert = null; + this.remove = null; + this.changeLayout = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.CommandMultimix); + +mixitup.CommandMultimix.prototype = Object.create(mixitup.Base.prototype); + +mixitup.CommandMultimix.prototype.constructor = mixitup.CommandMultimix; \ No newline at end of file diff --git a/mixitup-3.3.1/src/command-remove.js b/mixitup-3.3.1/src/command-remove.js new file mode 100644 index 0000000..2b743d6 --- /dev/null +++ b/mixitup-3.3.1/src/command-remove.js @@ -0,0 +1,29 @@ +/* global mixitup, h */ + +/** + * An object into which all arbitrary arguments sent to '.remove()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.CommandRemove = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.targets = []; + this.collection = []; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.CommandRemove); + +mixitup.CommandRemove.prototype = Object.create(mixitup.Base.prototype); + +mixitup.CommandRemove.prototype.constructor = mixitup.CommandRemove; \ No newline at end of file diff --git a/mixitup-3.3.1/src/command-sort.js b/mixitup-3.3.1/src/command-sort.js new file mode 100644 index 0000000..b3d747a --- /dev/null +++ b/mixitup-3.3.1/src/command-sort.js @@ -0,0 +1,32 @@ +/* global mixitup, h */ + +/** + * An object into which all arbitrary arguments sent to '.sort()' are mapped. + * + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.CommandSort = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.sortString = ''; + this.attribute = ''; + this.order = 'asc'; + this.collection = null; + this.next = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.CommandSort); + +mixitup.CommandSort.prototype = Object.create(mixitup.Base.prototype); + +mixitup.CommandSort.prototype.constructor = mixitup.CommandSort; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-animation.js b/mixitup-3.3.1/src/config-animation.js new file mode 100644 index 0000000..7e029d1 --- /dev/null +++ b/mixitup-3.3.1/src/config-animation.js @@ -0,0 +1,491 @@ +/* global mixitup, h */ + +/** + * A group of properties defining the mixer's animation and effects settings. + * + * @constructor + * @memberof mixitup.Config + * @name animation + * @namespace + * @public + * @since 2.0.0 + */ + +mixitup.ConfigAnimation = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether or not animation should be enabled for the MixItUp instance. + * If `false`, all operations will occur instantly and syncronously, although callback + * functions and any returned promises will still be fulfilled. + * + * @example Example: Create a mixer with all animations disabled + * var mixer = mixitup(containerEl, { + * animation: { + * enable: false + * } + * }); + * + * @name enable + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.enable = true; + + /** + * A string of one or more space-seperated properties to which transitions will be + * applied for all filtering animations. + * + * Properties can be listed any order or combination, although they will be applied in a specific + * predefined order to produce consistent results. + * + * To learn more about available effects, experiment with our + * sandbox demo and try out the "Export config" button in the Animation options drop down. + * + * @example Example: Apply "fade" and "translateZ" effects to all animations + * // As targets are filtered in and out, they will fade between + * // opacity 1 and 0 and transform between translateZ(-100px) and + * // translateZ(0). + * + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade translateZ(-100px)' + * } + * }); + * + * @name effects + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default 'fade scale' + */ + + this.effects = 'fade scale'; + + /** + * A string of one or more space-seperated effects to be applied only to filter-in + * animations, overriding `config.animation.effects` if set. + * + * @example Example: Apply downwards vertical translate to targets being filtered in + * + * var mixer = mixitup(containerEl, { + * animation: { + * effectsIn: 'fade translateY(-100%)' + * } + * }); + * + * @name effectsIn + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default '' + */ + + this.effectsIn = ''; + + /** + * A string of one or more space-seperated effects to be applied only to filter-out + * animations, overriding `config.animation.effects` if set. + * + * @example Example: Apply upwards vertical translate to targets being filtered out + * + * var mixer = mixitup(containerEl, { + * animation: { + * effectsOut: 'fade translateY(-100%)' + * } + * }); + * + * @name effectsOut + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default '' + */ + + this.effectsOut = ''; + + /** + * An integer dictating the duration of all MixItUp animations in milliseconds, not + * including any additional delay apllied via the `'stagger'` effect. + * + * @example Example: Apply an animation duration of 200ms to all mixitup animations + * + * var mixer = mixitup(containerEl, { + * animation: { + * duration: 200 + * } + * }); + * + * @name duration + * @memberof mixitup.Config.animation + * @instance + * @type {number} + * @default 600 + */ + + this.duration = 600; + + /** + * A valid CSS3 transition-timing function or shorthand. For a full list of accepted + * values, visit easings.net. + * + * @example Example 1: Apply "ease-in-out" easing to all animations + * + * var mixer = mixitup(containerEl, { + * animation: { + * easing: 'ease-in-out' + * } + * }); + * + * @example Example 2: Apply a custom "cubic-bezier" easing function to all animations + * var mixer = mixitup(containerEl, { + * animation: { + * easing: 'cubic-bezier(0.645, 0.045, 0.355, 1)' + * } + * }); + * + * @name easing + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default 'ease' + */ + + this.easing = 'ease'; + + /** + * A boolean dictating whether or not to apply perspective to the MixItUp container + * during animations. By default, perspective is always applied and creates the + * illusion of three-dimensional space for effects such as `translateZ`, `rotateX`, + * and `rotateY`. + * + * You may wish to disable this and define your own perspective settings via CSS. + * + * @example Example: Prevent perspective from being applied to any 3D transforms + * var mixer = mixitup(containerEl, { + * animation: { + * applyPerspective: false + * } + * }); + * + * @name applyPerspective + * @memberof mixitup.Config.animation + * @instance + * @type {bolean} + * @default true + */ + + this.applyPerspective = true; + + /** + * The perspective distance value to be applied to the container during animations, + * affecting any 3D-transform-based effects. + * + * @example Example: Set a perspective distance of 2000px + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'rotateY(-25deg)', + * perspectiveDistance: '2000px' + * } + * }); + * + * @name perspectiveDistance + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default '3000px' + */ + + this.perspectiveDistance = '3000px'; + + /** + * The perspective-origin value to be applied to the container during animations, + * affecting any 3D-transform-based effects. + * + * @example Example: Set a perspective origin in the top-right of the container + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'transateZ(-200px)', + * perspectiveOrigin: '100% 0' + * } + * }); + * + * @name perspectiveOrigin + * @memberof mixitup.Config.animation + * @instance + * @type {string} + * @default '50% 50%' + */ + + this.perspectiveOrigin = '50% 50%'; + + /** + * A boolean dictating whether or not to enable the queuing of operations. + * + * If `true` (default), and a control is clicked or an API call is made while another + * operation is progress, the operation will go into the queue and will be automatically exectuted + * when the previous operaitons is finished. + * + * If `false`, any requested operations will be ignored, and the `onMixBusy` callback and `mixBusy` + * event will be fired. If `debug.showWarnings` is enabled, a console warning will also occur. + * + * @example Example: Disable queuing + * var mixer = mixitup(containerEl, { + * animation: { + * queue: false + * } + * }); + * + * @name queue + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.queue = true; + + /** + * An integer dictacting the maximum number of operations allowed in the queue at + * any time, when queuing is enabled. + * + * @example Example: Allow a maximum of 5 operations in the queue at any time + * var mixer = mixitup(containerEl, { + * animation: { + * queueLimit: 5 + * } + * }); + * + * @name queueLimit + * @memberof mixitup.Config.animation + * @instance + * @type {number} + * @default 3 + */ + + this.queueLimit = 3; + + /** + * A boolean dictating whether or not to transition the height and width of the + * container as elements are filtered in and out. If disabled, the container height + * will change abruptly. + * + * It may be desirable to disable this on mobile devices as the CSS `height` and + * `width` properties do not receive GPU-acceleration and can therefore cause stuttering. + * + * @example Example 1: Disable the transitioning of the container height and/or width + * var mixer = mixitup(containerEl, { + * animation: { + * animateResizeContainer: false + * } + * }); + * + * @example Example 2: Disable the transitioning of the container height and/or width for mobile devices only + * var mixer = mixitup(containerEl, { + * animation: { + * animateResizeContainer: myFeatureTests.isMobile ? false : true + * } + * }); + * + * @name animateResizeContainer + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.animateResizeContainer = true; + + /** + * A boolean dictating whether or not to transition the height and width of target + * elements as they change throughout the course of an animation. + * + * This is often a must for flex-box grid layouts where the size of target elements may change + * depending on final their position in relation to their siblings, or for `.changeLayout()` + * operations where the size of targets change between layouts. + * + * NB: This feature requires additional calculations and manipulation to non-hardware-accelerated + * properties which may adversely affect performance on slower devices, and is therefore + * disabled by default. + * + * @example Example: Enable the transitioning of target widths and heights + * var mixer = mixitup(containerEl, { + * animation: { + * animateResizeTargets: true + * } + * }); + * + * @name animateResizeTargets + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default false + */ + + this.animateResizeTargets = false; + + /** + * A custom function used to manipulate the order in which the stagger delay is + * incremented when using the ‘stagger’ effect. + * + * When using the 'stagger' effect, the delay applied to each target element is incremented + * based on its index. You may create a custom function to manipulate the order in which the + * delay is incremented and create engaging non-linear stagger effects. + * + * The function receives the index of the target element as a parameter, and must + * return an integer which serves as the multiplier for the stagger delay. + * + * @example Example 1: Stagger target elements by column in a 3-column grid + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade stagger(100ms)', + * staggerSequence: function(i) { + * return i % 3; + * } + * } + * }); + * + * @example Example 2: Using an algorithm to produce a more complex sequence + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade stagger(100ms)', + * staggerSequence: function(i) { + * return (2*i) - (5*((i/3) - ((1/3) * (i%3)))); + * } + * } + * }); + * + * @name staggerSequence + * @memberof mixitup.Config.animation + * @instance + * @type {function} + * @default null + */ + + this.staggerSequence = null; + + /** + * A boolean dictating whether or not to reverse the direction of `translate` + * and `rotate` transforms for elements being filtered out. + * + * It can be used to create carousel-like animations where elements enter and exit + * from opposite directions. If enabled, the effect `translateX(-100%)` for elements + * being filtered in would become `translateX(100%)` for targets being filtered out. + * + * This functionality can also be achieved by providing seperate effects + * strings for `config.animation.effectsIn` and `config.animation.effectsOut`. + * + * @example Example: Reverse the desired direction on any translate/rotate effect for targets being filtered out + * // Elements being filtered in will be translated from '100%' to '0' while + * // elements being filtered out will be translated from 0 to '-100%' + * + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade translateX(100%)', + * reverseOut: true, + * nudge: false // Disable nudging to create a carousel-like effect + * } + * }); + * + * @name reverseOut + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default false + */ + + this.reverseOut = false; + + /** + * A boolean dictating whether or not to "nudge" the animation path of targets + * when they are being filtered in and out simulatenously. + * + * This has been the default behavior of MixItUp since version 1, but it + * may be desirable to disable this effect when filtering directly from + * one exclusive set of targets to a different exclusive set of targets, + * to create a carousel-like effect, or a generally more subtle animation. + * + * @example Example: Disable the "nudging" of targets being filtered in and out simulatenously + * + * var mixer = mixitup(containerEl, { + * animation: { + * nudge: false + * } + * }); + * + * @name nudge + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.nudge = true; + + /** + * A boolean dictating whether or not to clamp the height of the container while MixItUp's + * geometry tests are carried out before an operation. + * + * To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the + * height of the container might affect its vertical positioning in the viewport + * (e.g. a vertically-centered container), this should be turned off to ensure accurate + * test results and a smooth animation. + * + * @example Example: Disable container height-clamping + * + * var mixer = mixitup(containerEl, { + * animation: { + * clampHeight: false + * } + * }); + * + * @name clampHeight + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.clampHeight = true; + + /** + * A boolean dictating whether or not to clamp the width of the container while MixItUp's + * geometry tests are carried out before an operation. + * + * To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the + * width of the container might affect its horitzontal positioning in the viewport + * (e.g. a horizontall-centered container), this should be turned off to ensure accurate + * test results and a smooth animation. + * + * @example Example: Disable container width-clamping + * + * var mixer = mixitup(containerEl, { + * animation: { + * clampWidth: false + * } + * }); + * + * @name clampWidth + * @memberof mixitup.Config.animation + * @instance + * @type {boolean} + * @default true + */ + + this.clampWidth = true; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigAnimation); + +mixitup.ConfigAnimation.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigAnimation.prototype.constructor = mixitup.ConfigAnimation; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-behavior.js b/mixitup-3.3.1/src/config-behavior.js new file mode 100644 index 0000000..c8b6b79 --- /dev/null +++ b/mixitup-3.3.1/src/config-behavior.js @@ -0,0 +1,73 @@ +/* global mixitup, h */ + +/** + * A group of properties relating to the behavior of the Mixer. + * + * @constructor + * @memberof mixitup.Config + * @name behavior + * @namespace + * @public + * @since 3.1.12 + */ + +mixitup.ConfigBehavior = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether to allow "live" sorting of the mixer. + * + * Because of the expensive nature of sorting, MixItUp makes use of several + * internal optimizations to skip redundant sorting operations, such as when + * the newly requested sort command is the same as the active one. The caveat + * to this optimization is that "live" edits to the value of a target's sorting + * attribute will be ignored when requesting a re-sort by the same attribute. + * + * By setting to `behavior.liveSort` to `true`, the mixer will always re-sort + * regardless of whether or not the sorting attribute and order have changed. + * + * @example Example: Enabling `liveSort` to allow for re-sorting + * + * var mixer = mixitup(containerEl, { + * behavior: { + * liveSort: true + * }, + * load: { + * sort: 'edited:desc' + * } + * }); + * + * var target = containerEl.children[3]; + * + * console.log(target.getAttribute('data-edited')); // '2015-04-24' + * + * target.setAttribute('data-edited', '2017-08-10'); // Update the target's edited date + * + * mixer.sort('edited:desc') + * .then(function(state) { + * // The target is now at the top of the list + * + * console.log(state.targets[0] === target); // true + * }); + * + * @name liveSort + * @memberof mixitup.Config.behavior + * @instance + * @type {boolean} + * @default false + */ + + this.liveSort = false; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigBehavior); + +mixitup.ConfigBehavior.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigBehavior.prototype.constructor = mixitup.ConfigBehavior; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-callbacks.js b/mixitup-3.3.1/src/config-callbacks.js new file mode 100644 index 0000000..c9e7956 --- /dev/null +++ b/mixitup-3.3.1/src/config-callbacks.js @@ -0,0 +1,184 @@ +/* global mixitup, h */ + +/** + * A group of optional callback functions to be invoked at various + * points within the lifecycle of a mixer operation. + * + * Each function is analogous to an event of the same name triggered from the + * container element, and is invoked immediately after it. + * + * All callback functions receive the current `state` object as their first + * argument, as well as other more specific arguments described below. + * + * @constructor + * @memberof mixitup.Config + * @name callbacks + * @namespace + * @public + * @since 2.0.0 + */ + +mixitup.ConfigCallbacks = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A callback function invoked immediately after any MixItUp operation is requested + * and before animations have begun. + * + * A second `futureState` argument is passed to the function which represents the final + * state of the mixer once the requested operation has completed. + * + * @example Example: Adding an `onMixStart` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixStart: function(state, futureState) { + * console.log('Starting operation...'); + * } + * } + * }); + * + * @name onMixStart + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixStart = null; + + /** + * A callback function invoked when a MixItUp operation is requested while another + * operation is in progress, and the animation queue is full, or queueing + * is disabled. + * + * @example Example: Adding an `onMixBusy` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixBusy: function(state) { + * console.log('Mixer busy'); + * } + * } + * }); + * + * @name onMixBusy + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixBusy = null; + + /** + * A callback function invoked after any MixItUp operation has completed, and the + * state has been updated. + * + * @example Example: Adding an `onMixEnd` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixEnd: function(state) { + * console.log('Operation complete'); + * } + * } + * }); + * + * @name onMixEnd + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixEnd = null; + + /** + * A callback function invoked whenever an operation "fails", i.e. no targets + * could be found matching the requested filter. + * + * @example Example: Adding an `onMixFail` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixFail: function(state) { + * console.log('No items could be found matching the requested filter'); + * } + * } + * }); + * + * @name onMixFail + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixFail = null; + + /** + * A callback function invoked whenever a MixItUp control is clicked, and before its + * respective operation is requested. + * + * The clicked element is assigned to the `this` keyword within the function. The original + * click event is passed to the function as the second argument, which can be useful if + * using `` tags as controls where the default behavior needs to be prevented. + * + * Returning `false` from the callback will prevent the control click from triggering + * an operation. + * + * @example Example 1: Adding an `onMixClick` callback function + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixClick: function(state, originalEvent) { + * console.log('The control "' + this.innerText + '" was clicked'); + * } + * } + * }); + * + * @example Example 2: Using `onMixClick` to manipulate the original click event + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixClick: function(state, originalEvent) { + * // Prevent original click event from bubbling up: + * originalEvent.stopPropagation(); + * + * // Prevent default behavior of clicked element: + * originalEvent.preventDefault(); + * } + * } + * }); + * + * @example Example 3: Using `onMixClick` to conditionally cancel operations + * var mixer = mixitup(containerEl, { + * callbacks: { + * onMixClick: function(state, originalEvent) { + * // Perform some conditional check: + * + * if (myApp.isLoading) { + * // By returning false, we can prevent the control click from triggering an operation. + * + * return false; + * } + * } + * } + * }); + * + * @name onMixClick + * @memberof mixitup.Config.callbacks + * @instance + * @type {function} + * @default null + */ + + this.onMixClick = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigCallbacks); + +mixitup.ConfigCallbacks.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigCallbacks.prototype.constructor = mixitup.ConfigCallbacks; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-class-names.js b/mixitup-3.3.1/src/config-class-names.js new file mode 100644 index 0000000..095e586 --- /dev/null +++ b/mixitup-3.3.1/src/config-class-names.js @@ -0,0 +1,300 @@ +/* global mixitup, h */ + +/** + * A group of properties defining the output and structure of class names programmatically + * added to controls and containers to reflect the state of the mixer. + * + * Most commonly, class names are added to controls by MixItUp to indicate that + * the control is active so that it can be styled accordingly - `'mixitup-control-active'` by default. + * + * Using a "BEM" like structure, each classname is broken into the three parts: + * a block namespace (`'mixitup'`), an element name (e.g. `'control'`), and an optional modifier + * name (e.g. `'active'`) reflecting the state of the element. + * + * By default, each part of the classname is concatenated together using single hyphens as + * delineators, but this can be easily customised to match the naming convention and style of + * your project. + * + * @constructor + * @memberof mixitup.Config + * @name classNames + * @namespace + * @public + * @since 3.0.0 + */ + +mixitup.ConfigClassNames = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * The "block" portion, or top-level namespace added to the start of any class names created by MixItUp. + * + * @example Example 1: changing the `config.classNames.block` value + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio' + * } + * }); + * + * // Active control output: "portfolio-control-active" + * + * @example Example 2: Removing `config.classNames.block` + * var mixer = mixitup(containerEl, { + * classNames: { + * block: '' + * } + * }); + * + * // Active control output: "control-active" + * + * @name block + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'mixitup' + */ + + this.block = 'mixitup'; + + /** + * The "element" portion of the class name added to container. + * + * @name elementContainer + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'container' + */ + + this.elementContainer = 'container'; + + /** + * The "element" portion of the class name added to filter controls. + * + * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but + * each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + * + * @example Example 1: changing the `config.classNames.elementFilter` value + * var mixer = mixitup(containerEl, { + * classNames: { + * elementFilter: 'filter' + * } + * }); + * + * // Active filter output: "mixitup-filter-active" + * + * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementFilter` values + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio', + * elementFilter: 'filter' + * } + * }); + * + * // Active filter output: "portfolio-filter-active" + * + * @name elementFilter + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'control' + */ + + this.elementFilter = 'control'; + + /** + * The "element" portion of the class name added to sort controls. + * + * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but + * each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + * + * @example Example 1: changing the `config.classNames.elementSort` value + * var mixer = mixitup(containerEl, { + * classNames: { + * elementSort: 'sort' + * } + * }); + * + * // Active sort output: "mixitup-sort-active" + * + * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementSort` values + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio', + * elementSort: 'sort' + * } + * }); + * + * // Active sort output: "portfolio-sort-active" + * + * @name elementSort + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'control' + */ + + this.elementSort = 'control'; + + /** + * The "element" portion of the class name added to multimix controls. + * + * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but + * each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + * + * @example Example 1: changing the `config.classNames.elementMultimix` value + * var mixer = mixitup(containerEl, { + * classNames: { + * elementMultimix: 'multimix' + * } + * }); + * + * // Active multimix output: "mixitup-multimix-active" + * + * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementMultimix` values + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio', + * elementSort: 'multimix' + * } + * }); + * + * // Active multimix output: "portfolio-multimix-active" + * + * @name elementMultimix + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'control' + */ + + this.elementMultimix = 'control'; + + /** + * The "element" portion of the class name added to toggle controls. + * + * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but + * each type's element value can be individually overwritten to match the unique classNames of your controls as needed. + * + * @example Example 1: changing the `config.classNames.elementToggle` value + * var mixer = mixitup(containerEl, { + * classNames: { + * elementToggle: 'toggle' + * } + * }); + * + * // Active toggle output: "mixitup-toggle-active" + * + * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementToggle` values + * var mixer = mixitup(containerEl, { + * classNames: { + * block: 'portfolio', + * elementToggle: 'toggle' + * } + * }); + * + * // Active toggle output: "portfolio-toggle-active" + * + * @name elementToggle + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'control' + */ + + this.elementToggle = 'control'; + + /** + * The "modifier" portion of the class name added to active controls. + * @name modifierActive + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'active' + */ + + this.modifierActive = 'active'; + + /** + * The "modifier" portion of the class name added to disabled controls. + * + * @name modifierDisabled + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'disabled' + */ + + this.modifierDisabled = 'disabled'; + + /** + * The "modifier" portion of the class name added to the container when in a "failed" state. + * + * @name modifierFailed + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default 'failed' + */ + + this.modifierFailed = 'failed'; + + /** + * The delineator used between the "block" and "element" portions of any class name added by MixItUp. + * + * If the block portion is ommited by setting it to an empty string, no delineator will be added. + * + * @example Example: changing the delineator to match BEM convention + * var mixer = mixitup(containerEl, { + * classNames: { + * delineatorElement: '__' + * } + * }); + * + * // example active control output: "mixitup__control-active" + * + * @name delineatorElement + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default '-' + */ + + this.delineatorElement = '-'; + + /** + * The delineator used between the "element" and "modifier" portions of any class name added by MixItUp. + * + * If the element portion is ommited by setting it to an empty string, no delineator will be added. + * + * @example Example: changing both delineators to match BEM convention + * var mixer = mixitup(containerEl, { + * classNames: { + * delineatorElement: '__' + * delineatorModifier: '--' + * } + * }); + * + * // Active control output: "mixitup__control--active" + * + * @name delineatorModifier + * @memberof mixitup.Config.classNames + * @instance + * @type {string} + * @default '-' + */ + + this.delineatorModifier = '-'; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigClassNames); + +mixitup.ConfigClassNames.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigClassNames.prototype.constructor = mixitup.ConfigClassNames; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-controls.js b/mixitup-3.3.1/src/config-controls.js new file mode 100644 index 0000000..a2fe3df --- /dev/null +++ b/mixitup-3.3.1/src/config-controls.js @@ -0,0 +1,220 @@ +/* global mixitup, h */ + +/** + * A group of properties relating to clickable control elements. + * + * @constructor + * @memberof mixitup.Config + * @name controls + * @namespace + * @public + * @since 2.0.0 + */ + +mixitup.ConfigControls = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether or not controls should be enabled for the mixer instance. + * + * If `true` (default behavior), MixItUp will search the DOM for any clickable elements with + * `data-filter`, `data-sort` or `data-toggle` attributes, and bind them for click events. + * + * If `false`, no click handlers will be bound, and all functionality must therefore be performed + * via the mixer's API methods. + * + * If you do not intend to use the default controls, setting this property to `false` will + * marginally improve the startup time of your mixer instance, and will also prevent any other active + * mixer instances in the DOM which are bound to controls from controlling the instance. + * + * @example Example: Disabling controls + * var mixer = mixitup(containerEl, { + * controls: { + * enable: false + * } + * }); + * + * // With the default controls disabled, we can only control + * // the mixer via its API methods, e.g.: + * + * mixer.filter('.cat-1'); + * + * @name enable + * @memberof mixitup.Config.controls + * @instance + * @type {boolean} + * @default true + */ + + this.enable = true; + + /** + * A boolean dictating whether or not to use event delegation when binding click events + * to the default controls. + * + * If `false` (default behavior), each control button in the DOM will be found and + * individually bound when a mixer is instantiated, with their corresponding actions + * cached for performance. + * + * If `true`, a single click handler will be applied to the `window` (or container element - see + * `config.controls.scope`), and any click events triggered by elements with `data-filter`, + * `data-sort` or `data-toggle` attributes present will be handled as they propagate upwards. + * + * If you require a user interface where control buttons may be added, removed, or changed during the + * lifetime of a mixer, `controls.live` should be set to `true`. There is a marginal but unavoidable + * performance deficit when using live controls, as the value of each control button must be read + * from the DOM in real time once the click event has propagated. + * + * @example Example: Setting live controls + * var mixer = mixitup(containerEl, { + * controls: { + * live: true + * } + * }); + * + * // Control buttons can now be added, remove and changed without breaking + * // the mixer's UI + * + * @name live + * @memberof mixitup.Config.controls + * @instance + * @type {boolean} + * @default true + */ + + this.live = false; + + /** + * A string dictating the "scope" to use when binding or querying the default controls. The available + * values are `'global'` or `'local'`. + * + * When set to `'global'` (default behavior), MixItUp will query the entire document for control buttons + * to bind, or delegate click events from (see `config.controls.live`). + * + * When set to `'local'`, MixItUp will only query (or bind click events to) its own container element. + * This may be desireable if you require multiple active mixer instances within the same document, with + * controls that would otherwise intefere with each other if scoped globally. + * + * Conversely, if you wish to control multiple instances with a single UI, you would create one + * set of controls and keep the controls scope of each mixer set to `global`. + * + * @example Example: Setting 'local' scoped controls + * var mixerOne = mixitup(containerOne, { + * controls: { + * scope: 'local' + * } + * }); + * + * var mixerTwo = mixitup(containerTwo, { + * controls: { + * scope: 'local' + * } + * }); + * + * // Both mixers can now exist within the same document with + * // isolated controls placed within their container elements. + * + * @name scope + * @memberof mixitup.Config.controls + * @instance + * @type {string} + * @default 'global' + */ + + this.scope = 'global'; // enum: ['local' ,'global'] + + /** + * A string dictating the type of logic to apply when concatenating the filter selectors of + * active toggle buttons (i.e. any clickable element with a `data-toggle` attribute). + * + * If set to `'or'` (default behavior), selectors will be concatenated together as + * a comma-seperated list. For example: + * + * `'.cat-1, .cat-2'` (shows any elements matching `'.cat-1'` OR `'.cat-2'`) + * + * If set to `'and'`, selectors will be directly concatenated together. For example: + * + * `'.cat-1.cat-2'` (shows any elements which match both `'.cat-1'` AND `'.cat-2'`) + * + * @example Example: Setting "and" toggle logic + * var mixer = mixitup(containerEl, { + * controls: { + * toggleLogic: 'and' + * } + * }); + * + * @name toggleLogic + * @memberof mixitup.Config.controls + * @instance + * @type {string} + * @default 'or' + */ + + this.toggleLogic = 'or'; // enum: ['or', 'and'] + + /** + * A string dictating the filter behavior when all toggles are inactive. + * + * When set to `'all'` (default behavior), *all* targets will be shown by default + * when no toggles are active, or at the moment all active toggles are toggled off. + * + * When set to `'none'`, no targets will be shown by default when no toggles are + * active, or at the moment all active toggles are toggled off. + * + * @example Example 1: Setting the default toggle behavior to `'all'` + * var mixer = mixitup(containerEl, { + * controls: { + * toggleDefault: 'all' + * } + * }); + * + * mixer.toggleOn('.cat-2') + * .then(function() { + * // Deactivate all active toggles + * + * return mixer.toggleOff('.cat-2') + * }) + * .then(function(state) { + * console.log(state.activeFilter.selector); // 'all' + * console.log(state.totalShow); // 12 + * }); + * + * @example Example 2: Setting the default toggle behavior to `'none'` + * var mixer = mixitup(containerEl, { + * controls: { + * toggleDefault: 'none' + * } + * }); + * + * mixer.toggleOn('.cat-2') + * .then(function() { + * // Deactivate all active toggles + * + * return mixer.toggleOff('.cat-2') + * }) + * .then(function(state) { + * console.log(state.activeFilter.selector); // 'none' + * console.log(state.totalShow); // 0 + * }); + * + * @name toggleDefault + * @memberof mixitup.Config.controls + * @instance + * @type {string} + * @default 'all' + */ + + this.toggleDefault = 'all'; // enum: ['all', 'none'] + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigControls); + +mixitup.ConfigControls.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigControls.prototype.constructor = mixitup.ConfigControls; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-data.js b/mixitup-3.3.1/src/config-data.js new file mode 100644 index 0000000..d2311e9 --- /dev/null +++ b/mixitup-3.3.1/src/config-data.js @@ -0,0 +1,118 @@ +/* global mixitup, h */ + +/** + * A group of properties relating to MixItUp's dataset API. + * + * @constructor + * @memberof mixitup.Config + * @name data + * @namespace + * @public + * @since 3.0.0 + */ + +mixitup.ConfigData = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A string specifying the name of the key containing your data model's unique + * identifier (UID). To use the dataset API, a UID key must be specified and + * be present and unique on all objects in the dataset you provide to MixItUp. + * + * For example, if your dataset is made up of MongoDB documents, the UID + * key would be `'id'` or `'_id'`. + * + * @example Example: Setting the UID to `'id'` + * var mixer = mixitup(containerEl, { + * data: { + * uidKey: 'id' + * } + * }); + * + * @name uidKey + * @memberof mixitup.Config.data + * @instance + * @type {string} + * @default '' + */ + + this.uidKey = ''; + + /** + * A boolean dictating whether or not MixItUp should "dirty check" each object in + * your dataset for changes whenever `.dataset()` is called, and re-render any targets + * for which a change is found. + * + * Depending on the complexity of your data model, dirty checking can be expensive + * and is therefore disabled by default. + * + * NB: For changes to be detected, a new immutable instance of the edited model must be + * provided to mixitup, rather than manipulating properties on the existing instance. + * If your changes are a result of a DB write and read, you will most likely be calling + * `.dataset()` with a clean set of objects each time, so this will not be an issue. + * + * @example Example: Enabling dirty checking + * + * var myDataset = [ + * { + * id: 0, + * title: "Blog Post Title 0" + * ... + * }, + * { + * id: 1, + * title: "Blog Post Title 1" + * ... + * } + * ]; + * + * // Instantiate a mixer with a pre-loaded dataset, and a target renderer + * // function defined + * + * var mixer = mixitup(containerEl, { + * data: { + * uidKey: 'id', + * dirtyCheck: true + * }, + * load: { + * dataset: myDataset + * }, + * render: { + * target: function() { ... } + * } + * }); + * + * // For illustration, we will clone and edit the second object in the dataset. + * // NB: this would typically be done server-side in response to a DB update, + * and then re-queried via an API. + * + * myDataset[1] = Object.assign({}, myDataset[1]); + * + * myDataset[1].title = 'Blog Post Title 11'; + * + * mixer.dataset(myDataset) + * .then(function() { + * // the target with ID "1", will be re-rendered reflecting its new title + * }); + * + * @name dirtyCheck + * @memberof mixitup.Config.data + * @instance + * @type {boolean} + * @default false + */ + + this.dirtyCheck = false; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigData); + +mixitup.ConfigData.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigData.prototype.constructor = mixitup.ConfigData; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-debug.js b/mixitup-3.3.1/src/config-debug.js new file mode 100644 index 0000000..f422641 --- /dev/null +++ b/mixitup-3.3.1/src/config-debug.js @@ -0,0 +1,106 @@ +/* global mixitup, h */ + +/** + * A group of properties allowing the toggling of various debug features. + * + * @constructor + * @memberof mixitup.Config + * @name debug + * @namespace + * @public + * @since 3.0.0 + */ + +mixitup.ConfigDebug = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether or not the mixer instance returned by the + * `mixitup()` factory function should expose private properties and methods. + * + * By default, mixer instances only expose their public API, but enabling + * debug mode will give you access to various mixer internals which may aid + * in debugging, or the authoring of extensions. + * + * @example Example: Enabling debug mode + * + * var mixer = mixitup(containerEl, { + * debug: { + * enable: true + * } + * }); + * + * // Private properties and methods will now be visible on the mixer instance: + * + * console.log(mixer); + * + * @name enable + * @memberof mixitup.Config.debug + * @instance + * @type {boolean} + * @default false + */ + + this.enable = false; + + /** + * A boolean dictating whether or not warnings should be shown when various + * common gotchas occur. + * + * Warnings are intended to provide insights during development when something + * occurs that is not a fatal, but may indicate an issue with your integration, + * and are therefore turned on by default. However, you may wish to disable + * them in production. + * + * @example Example 1: Disabling warnings + * + * var mixer = mixitup(containerEl, { + * debug: { + * showWarnings: false + * } + * }); + * + * @example Example 2: Disabling warnings based on environment + * + * var showWarnings = myAppConfig.environment === 'development' ? true : false; + * + * var mixer = mixitup(containerEl, { + * debug: { + * showWarnings: showWarnings + * } + * }); + * + * @name showWarnings + * @memberof mixitup.Config.debug + * @instance + * @type {boolean} + * @default true + */ + + this.showWarnings = true; + + /** + * Used for server-side testing only. + * + * @private + * @name fauxAsync + * @memberof mixitup.Config.debug + * @instance + * @type {boolean} + * @default false + */ + + this.fauxAsync = false; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigDebug); + +mixitup.ConfigDebug.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigDebug.prototype.constructor = mixitup.ConfigDebug; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-layout.js b/mixitup-3.3.1/src/config-layout.js new file mode 100644 index 0000000..8ed53e5 --- /dev/null +++ b/mixitup-3.3.1/src/config-layout.js @@ -0,0 +1,144 @@ +/* global mixitup, h */ + +/** + * A group of properties relating to the layout of the container. + * + * @constructor + * @memberof mixitup.Config + * @name layout + * @namespace + * @public + * @since 3.0.0 + */ + +mixitup.ConfigLayout = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A boolean dictating whether or not mixitup should query all descendants + * of the container for targets, or only immediate children. + * + * By default, mixitup will query all descendants matching the + * `selectors.target` selector when indexing targets upon instantiation. + * This allows for targets to be nested inside a sub-container which is + * useful when ring-fencing targets from locally scoped controls in your + * markup (see `controls.scope`). + * + * However, if you are building a more complex UI requiring the nesting + * of mixers within mixers, you will most likely want to limit targets to + * immediate children of the container by setting this property to `false`. + * + * @example Example: Restricting targets to immediate children + * + * var mixer = mixitup(containerEl, { + * layout: { + * allowNestedTargets: false + * } + * }); + * + * @name allowNestedTargets + * @memberof mixitup.Config.layout + * @instance + * @type {boolean} + * @default true + */ + + this.allowNestedTargets = true; + + /** + * A string specifying an optional class name to apply to the container when in + * its default state. + * + * By changing this class name or adding a class name to the container via the + * `.changeLayout()` API method, the CSS layout of the container can be changed, + * and MixItUp will attemp to gracefully animate the container and its targets + * between states. + * + * @example Example 1: Specifying a container class name + * + * var mixer = mixitup(containerEl, { + * layout: { + * containerClassName: 'grid' + * } + * }); + * + * @example Example 2: Changing the default class name with `.changeLayout()` + * + * var mixer = mixitup(containerEl, { + * layout: { + * containerClassName: 'grid' + * } + * }); + * + * mixer.changeLayout('list') + * .then(function(state) { + * console.log(state.activeContainerClass); // "list" + * }); + * + * @name containerClassName + * @memberof mixitup.Config.layout + * @instance + * @type {string} + * @default '' + */ + + this.containerClassName = ''; + + /** + * A reference to a non-target sibling element after which to insert targets + * when there are no targets in the container. + * + * @example Example: Setting a `siblingBefore` reference element + * + * var addButton = containerEl.querySelector('button'); + * + * var mixer = mixitup(containerEl, { + * layout: { + * siblingBefore: addButton + * } + * }); + * + * @name siblingBefore + * @memberof mixitup.Config.layout + * @instance + * @type {HTMLElement} + * @default null + */ + + this.siblingBefore = null; + + /** + * A reference to a non-target sibling element before which to insert targets + * when there are no targets in the container. + * + * @example Example: Setting an `siblingAfter` reference element + * + * var gap = containerEl.querySelector('.gap'); + * + * var mixer = mixitup(containerEl, { + * layout: { + * siblingAfter: gap + * } + * }); + * + * @name siblingAfter + * @memberof mixitup.Config.layout + * @instance + * @type {HTMLElement} + * @default null + */ + + this.siblingAfter = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigLayout); + +mixitup.ConfigLayout.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigLayout.prototype.constructor = mixitup.ConfigLayout; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-load.js b/mixitup-3.3.1/src/config-load.js new file mode 100644 index 0000000..4441b58 --- /dev/null +++ b/mixitup-3.3.1/src/config-load.js @@ -0,0 +1,127 @@ +/* global mixitup, h */ + +/** + * A group of properties defining the initial state of the mixer on load (instantiation). + * + * @constructor + * @memberof mixitup.Config + * @name load + * @namespace + * @public + * @since 2.0.0 + */ + +mixitup.ConfigLoad = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A string defining any filtering to be statically applied to the mixer on load. + * As per the `.filter()` API, this can be any valid selector string, or the + * values `'all'` or `'none'`. + * + * @example Example 1: Defining an initial filter selector to be applied on load + * + * // The mixer will show only those targets matching '.category-a' on load. + * + * var mixer = mixitup(containerEl, { + * load: { + * filter: '.category-a' + * } + * }); + * + * @example Example 2: Hiding all targets on load + * + * // The mixer will show hide all targets on load. + * + * var mixer = mixitup(containerEl, { + * load: { + * filter: 'none' + * } + * }); + * + * @name filter + * @memberof mixitup.Config.load + * @instance + * @type {string} + * @default 'all' + */ + + this.filter = 'all'; + + /** + * A string defining any sorting to be statically applied to the mixer on load. + * As per the `.sort()` API, this should be a valid "sort string" made up of + * an attribute to sort by (or `'default'`) followed by an optional sorting + * order, or the value `'random'`; + * + * @example Example: Defining sorting to be applied on load + * + * // The mixer will sort the container by the value of the `data-published-date` + * // attribute, in descending order. + * + * var mixer = mixitup(containerEl, { + * load: { + * sort: 'published-date:desc' + * } + * }); + * + * @name sort + * @memberof mixitup.Config.load + * @instance + * @type {string} + * @default 'default:asc' + */ + + this.sort = 'default:asc'; + + /** + * An array of objects representing the underlying data of any pre-rendered targets, + * when using the `.dataset()` API. + * + * NB: If targets are pre-rendered when the mixer is instantiated, this must be set. + * + * @example Example: Defining the initial underyling dataset + * + * var myDataset = [ + * { + * id: 0, + * title: "Blog Post Title 0", + * ... + * }, + * { + * id: 1, + * title: "Blog Post Title 1", + * ... + * } + * ]; + * + * var mixer = mixitup(containerEl, { + * data: { + * uidKey: 'id' + * }, + * load: { + * dataset: myDataset + * } + * }); + * + * @name dataset + * @memberof mixitup.Config.load + * @instance + * @type {Array.} + * @default null + */ + + this.dataset = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigLoad); + +mixitup.ConfigLoad.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigLoad.prototype.constructor = mixitup.ConfigLoad; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-render.js b/mixitup-3.3.1/src/config-render.js new file mode 100644 index 0000000..4719e7f --- /dev/null +++ b/mixitup-3.3.1/src/config-render.js @@ -0,0 +1,100 @@ +/* global mixitup, h */ + +/** + * A group of optional render functions for creating and updating elements. + * + * All render functions receive a data object, and should return a valid HTML string. + * + * @constructor + * @memberof mixitup.Config + * @name render + * @namespace + * @public + * @since 3.0.0 + */ + +mixitup.ConfigRender = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A function returning an HTML string representing a target element, or a reference to a + * single DOM element. + * + * The function is invoked as part of the `.dataset()` API, whenever a new item is added + * to the dataset, or an item in the dataset changes (if `dataset.dirtyCheck` is enabled). + * + * The function receives the relevant dataset item as its first parameter. + * + * @example Example 1: Using string concatenation + * + * var mixer = mixitup(containerEl, { + * render: { + * target: function(item) { + * return ( + * '<div class="mix">' + + * '<h2>' + item.title + '</h2>' + + * '</div>' + * ); + * } + * } + * }); + * + * @example Example 2: Using an ES2015 template literal + * + * var mixer = mixitup(containerEl, { + * render: { + * target: function(item) { + * return ( + * `<div class="mix"> + * <h2>${item.title}</h2> + * </div>` + * ); + * } + * } + * }); + * + * @example Example 3: Using a Handlebars template + * {{{{raw}}}} + * var targetTemplate = Handlebars.compile('<div class="mix"><h2>{{title}}</h2></div>'); + * {{{{/raw}}}} + * var mixer = mixitup(containerEl, { + * render: { + * target: targetTemplate + * } + * }); + * + * @example Example 4: Returning a DOM element + * + * var mixer = mixitup(containerEl, { + * render: { + * target: function(item) { + * // Create a single element using your framework's built-in renderer + * + * var el = ... + * + * return el; + * } + * } + * }); + * + * @name target + * @memberof mixitup.Config.render + * @instance + * @type {function} + * @default 'null' + */ + + this.target = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigRender); + +mixitup.ConfigRender.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigRender.prototype.constructor = mixitup.ConfigRender; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-selectors.js b/mixitup-3.3.1/src/config-selectors.js new file mode 100644 index 0000000..69e1256 --- /dev/null +++ b/mixitup-3.3.1/src/config-selectors.js @@ -0,0 +1,93 @@ +/* global mixitup, h */ + +/** + * A group of properties defining the selectors used to query elements within a mixitup container. + * + * @constructor + * @memberof mixitup.Config + * @name selectors + * @namespace + * @public + * @since 3.0.0 + */ + +mixitup.ConfigSelectors = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A selector string used to query and index target elements within the container. + * + * By default, the class selector `'.mix'` is used, but this can be changed to an + * attribute or element selector to match the style of your project. + * + * @example Example 1: Changing the target selector + * + * var mixer = mixitup(containerEl, { + * selectors: { + * target: '.portfolio-item' + * } + * }); + * + * @example Example 2: Using an attribute selector as a target selector + * + * // The mixer will search for any children with the attribute `data-ref="mix"` + * + * var mixer = mixitup(containerEl, { + * selectors: { + * target: '[data-ref="mix"]' + * } + * }); + * + * @name target + * @memberof mixitup.Config.selectors + * @instance + * @type {string} + * @default '.mix' + */ + + this.target = '.mix'; + + /** + * A optional selector string used to add further specificity to the querying of control elements, + * in addition to their mandatory data attribute (e.g. `data-filter`, `data-toggle`, `data-sort`). + * + * This can be used if other elements in your document must contain the above attributes + * (e.g. for use in third-party scripts), and would otherwise interfere with MixItUp. Adding + * an additional `control` selector of your choice allows MixItUp to restrict event handling + * to only those elements matching the defined selector. + * + * @name control + * @memberof mixitup.Config.selectors + * @instance + * @type {string} + * @default '' + * + * @example Example 1: Adding a `selectors.control` selector + * + * var mixer = mixitup(containerEl, { + * selectors: { + * control: '.mixitup-control' + * } + * }); + * + * // Will not be handled: + * // + * + * // Will be handled: + * // + */ + + this.control = ''; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigSelectors); + +mixitup.ConfigSelectors.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigSelectors.prototype.constructor = mixitup.ConfigSelectors; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config-templates.js b/mixitup-3.3.1/src/config-templates.js new file mode 100644 index 0000000..0786acc --- /dev/null +++ b/mixitup-3.3.1/src/config-templates.js @@ -0,0 +1,24 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.ConfigTemplates = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ConfigTemplates); + +mixitup.ConfigTemplates.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ConfigTemplates.prototype.constructor = mixitup.ConfigTemplates; \ No newline at end of file diff --git a/mixitup-3.3.1/src/config.js b/mixitup-3.3.1/src/config.js new file mode 100644 index 0000000..f5c8f39 --- /dev/null +++ b/mixitup-3.3.1/src/config.js @@ -0,0 +1,77 @@ +/* global mixitup, h */ + +/** + * `mixitup.Config` is an interface used for customising the functionality of a + * mixer instance. It is organised into several semantically distinct sub-objects, + * each one pertaining to a particular aspect of MixItUp functionality. + * + * An object literal containing any or all of the available properies, + * known as the "configuration object", can be passed as the second parameter to + * the `mixitup` factory function when creating a mixer instance to customise its + * functionality as needed. + * + * If no configuration object is passed, the mixer instance will take on the default + * configuration values detailed below. + * + * @example Example 1: Creating and passing the configuration object + * // Create a configuration object with desired values + * + * var config = { + * animation: { + * enable: false + * }, + * selectors: { + * target: '.item' + * } + * }; + * + * // Pass the configuration object to the mixitup factory function + * + * var mixer = mixitup(containerEl, config); + * + * @example Example 2: Passing the configuration object inline + * // Typically, the configuration object is passed inline for brevity. + * + * var mixer = mixitup(containerEl, { + * controls: { + * live: true, + * toggleLogic: 'and' + * } + * }); + * + * + * @constructor + * @memberof mixitup + * @namespace + * @public + * @since 2.0.0 + */ + +mixitup.Config = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.animation = new mixitup.ConfigAnimation(); + this.behavior = new mixitup.ConfigBehavior(); + this.callbacks = new mixitup.ConfigCallbacks(); + this.controls = new mixitup.ConfigControls(); + this.classNames = new mixitup.ConfigClassNames(); + this.data = new mixitup.ConfigData(); + this.debug = new mixitup.ConfigDebug(); + this.layout = new mixitup.ConfigLayout(); + this.load = new mixitup.ConfigLoad(); + this.selectors = new mixitup.ConfigSelectors(); + this.render = new mixitup.ConfigRender(); + this.templates = new mixitup.ConfigTemplates(); + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.Config); + +mixitup.Config.prototype = Object.create(mixitup.Base.prototype); + +mixitup.Config.prototype.constructor = mixitup.Config; \ No newline at end of file diff --git a/mixitup-3.3.1/src/control-definition.js b/mixitup-3.3.1/src/control-definition.js new file mode 100644 index 0000000..e2a483b --- /dev/null +++ b/mixitup-3.3.1/src/control-definition.js @@ -0,0 +1,42 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + * @param {string} type + * @param {string} selector + * @param {boolean} [live] + * @param {string} [parent] + * An optional string representing the name of the mixer.dom property containing a reference to a parent element. + */ + +mixitup.ControlDefinition = function(type, selector, live, parent) { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.type = type; + this.selector = selector; + this.live = live || false; + this.parent = parent || ''; + + this.callActions('afterConstruct'); + + h.freeze(this); + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.ControlDefinition); + +mixitup.ControlDefinition.prototype = Object.create(mixitup.Base.prototype); + +mixitup.ControlDefinition.prototype.constructor = mixitup.ControlDefinition; + +mixitup.controlDefinitions = []; + +mixitup.controlDefinitions.push(new mixitup.ControlDefinition('multimix', '[data-filter][data-sort]')); +mixitup.controlDefinitions.push(new mixitup.ControlDefinition('filter', '[data-filter]')); +mixitup.controlDefinitions.push(new mixitup.ControlDefinition('sort', '[data-sort]')); +mixitup.controlDefinitions.push(new mixitup.ControlDefinition('toggle', '[data-toggle]')); \ No newline at end of file diff --git a/mixitup-3.3.1/src/control.js b/mixitup-3.3.1/src/control.js new file mode 100644 index 0000000..19c9d35 --- /dev/null +++ b/mixitup-3.3.1/src/control.js @@ -0,0 +1,514 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.Control = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.el = null; + this.selector = ''; + this.bound = []; + this.pending = -1; + this.type = ''; + this.status = 'inactive'; // enum: ['inactive', 'active', 'disabled', 'live'] + this.filter = ''; + this.sort = ''; + this.canDisable = false; + this.handler = null; + this.classNames = new mixitup.UiClassNames(); + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.Control); + +mixitup.Control.prototype = Object.create(mixitup.Base.prototype); + +h.extend(mixitup.Control.prototype, +/** @lends mixitup.Control */ +{ + constructor: mixitup.Control, + + /** + * @private + * @param {HTMLElement} el + * @param {string} type + * @param {string} selector + */ + + init: function(el, type, selector) { + var self = this; + + this.callActions('beforeInit', arguments); + + self.el = el; + self.type = type; + self.selector = selector; + + if (self.selector) { + self.status = 'live'; + } else { + self.canDisable = typeof self.el.disable === 'boolean'; + + switch (self.type) { + case 'filter': + self.filter = self.el.getAttribute('data-filter'); + + break; + case 'toggle': + self.filter = self.el.getAttribute('data-toggle'); + + break; + case 'sort': + self.sort = self.el.getAttribute('data-sort'); + + break; + case 'multimix': + self.filter = self.el.getAttribute('data-filter'); + self.sort = self.el.getAttribute('data-sort'); + + break; + } + } + + self.bindClick(); + + mixitup.controls.push(self); + + this.callActions('afterInit', arguments); + }, + + /** + * @private + * @param {mixitup.Mixer} mixer + * @return {boolean} + */ + + isBound: function(mixer) { + var self = this, + isBound = false; + + this.callActions('beforeIsBound', arguments); + + isBound = self.bound.indexOf(mixer) > -1; + + return self.callFilters('afterIsBound', isBound, arguments); + }, + + /** + * @private + * @param {mixitup.Mixer} mixer + * @return {void} + */ + + addBinding: function(mixer) { + var self = this; + + this.callActions('beforeAddBinding', arguments); + + if (!self.isBound()) { + self.bound.push(mixer); + } + + this.callActions('afterAddBinding', arguments); + }, + + /** + * @private + * @param {mixitup.Mixer} mixer + * @return {void} + */ + + removeBinding: function(mixer) { + var self = this, + removeIndex = -1; + + this.callActions('beforeRemoveBinding', arguments); + + if ((removeIndex = self.bound.indexOf(mixer)) > -1) { + self.bound.splice(removeIndex, 1); + } + + if (self.bound.length < 1) { + // No bindings exist, unbind event click handlers + + self.unbindClick(); + + // Remove from `mixitup.controls` list + + removeIndex = mixitup.controls.indexOf(self); + + mixitup.controls.splice(removeIndex, 1); + + if (self.status === 'active') { + self.renderStatus(self.el, 'inactive'); + } + } + + this.callActions('afterRemoveBinding', arguments); + }, + + /** + * @private + * @return {void} + */ + + bindClick: function() { + var self = this; + + this.callActions('beforeBindClick', arguments); + + self.handler = function(e) { + self.handleClick(e); + }; + + h.on(self.el, 'click', self.handler); + + this.callActions('afterBindClick', arguments); + }, + + /** + * @private + * @return {void} + */ + + unbindClick: function() { + var self = this; + + this.callActions('beforeUnbindClick', arguments); + + h.off(self.el, 'click', self.handler); + + self.handler = null; + + this.callActions('afterUnbindClick', arguments); + }, + + /** + * @private + * @param {MouseEvent} e + * @return {void} + */ + + handleClick: function(e) { + var self = this, + button = null, + mixer = null, + isActive = false, + returnValue = void(0), + command = {}, + clone = null, + commands = [], + i = -1; + + this.callActions('beforeHandleClick', arguments); + + this.pending = 0; + + mixer = self.bound[0]; + + if (!self.selector) { + button = self.el; + } else { + button = h.closestParent(e.target, mixer.config.selectors.control + self.selector, true, mixer.dom.document); + } + + if (!button) { + self.callActions('afterHandleClick', arguments); + + return; + } + + switch (self.type) { + case 'filter': + command.filter = self.filter || button.getAttribute('data-filter'); + + break; + case 'sort': + command.sort = self.sort || button.getAttribute('data-sort'); + + break; + case 'multimix': + command.filter = self.filter || button.getAttribute('data-filter'); + command.sort = self.sort || button.getAttribute('data-sort'); + + break; + case 'toggle': + command.filter = self.filter || button.getAttribute('data-toggle'); + + if (self.status === 'live') { + isActive = h.hasClass(button, self.classNames.active); + } else { + isActive = self.status === 'active'; + } + + break; + } + + for (i = 0; i < self.bound.length; i++) { + // Create a clone of the command for each bound mixer instance + + clone = new mixitup.CommandMultimix(); + + h.extend(clone, command); + + commands.push(clone); + } + + commands = self.callFilters('commandsHandleClick', commands, arguments); + + self.pending = self.bound.length; + + for (i = 0; mixer = self.bound[i]; i++) { + command = commands[i]; + + if (!command) { + // An extension may set a command null to indicate that the click should not be handled + + continue; + } + + if (!mixer.lastClicked) { + mixer.lastClicked = button; + } + + mixitup.events.fire('mixClick', mixer.dom.container, { + state: mixer.state, + instance: mixer, + originalEvent: e, + control: mixer.lastClicked + }, mixer.dom.document); + + if (typeof mixer.config.callbacks.onMixClick === 'function') { + returnValue = mixer.config.callbacks.onMixClick.call(mixer.lastClicked, mixer.state, e, mixer); + + if (returnValue === false) { + // User has returned `false` from the callback, so do not handle click + + continue; + } + } + + if (self.type === 'toggle') { + isActive ? mixer.toggleOff(command.filter) : mixer.toggleOn(command.filter); + } else { + mixer.multimix(command); + } + } + + this.callActions('afterHandleClick', arguments); + }, + + /** + * @param {object} command + * @param {Array} toggleArray + * @return {void} + */ + + update: function(command, toggleArray) { + var self = this, + actions = new mixitup.CommandMultimix(); + + self.callActions('beforeUpdate', arguments); + + self.pending--; + + self.pending = Math.max(0, self.pending); + + if (self.pending > 0) return; + + if (self.status === 'live') { + // Live control (status unknown) + + self.updateLive(command, toggleArray); + } else { + // Static control + + actions.sort = self.sort; + actions.filter = self.filter; + + self.callFilters('actionsUpdate', actions, arguments); + + self.parseStatusChange(self.el, command, actions, toggleArray); + } + + self.callActions('afterUpdate', arguments); + }, + + /** + * @param {mixitup.CommandMultimix} command + * @param {Array} toggleArray + * @return {void} + */ + + updateLive: function(command, toggleArray) { + var self = this, + controlButtons = null, + actions = null, + button = null, + i = -1; + + self.callActions('beforeUpdateLive', arguments); + + if (!self.el) return; + + controlButtons = self.el.querySelectorAll(self.selector); + + for (i = 0; button = controlButtons[i]; i++) { + actions = new mixitup.CommandMultimix(); + + switch (self.type) { + case 'filter': + actions.filter = button.getAttribute('data-filter'); + + break; + case 'sort': + actions.sort = button.getAttribute('data-sort'); + + break; + case 'multimix': + actions.filter = button.getAttribute('data-filter'); + actions.sort = button.getAttribute('data-sort'); + + break; + case 'toggle': + actions.filter = button.getAttribute('data-toggle'); + + break; + } + + actions = self.callFilters('actionsUpdateLive', actions, arguments); + + self.parseStatusChange(button, command, actions, toggleArray); + } + + self.callActions('afterUpdateLive', arguments); + }, + + /** + * @param {HTMLElement} button + * @param {mixitup.CommandMultimix} command + * @param {mixitup.CommandMultimix} actions + * @param {Array} toggleArray + * @return {void} + */ + + parseStatusChange: function(button, command, actions, toggleArray) { + var self = this, + alias = '', + toggle = '', + i = -1; + + self.callActions('beforeParseStatusChange', arguments); + + switch (self.type) { + case 'filter': + if (command.filter === actions.filter) { + self.renderStatus(button, 'active'); + } else { + self.renderStatus(button, 'inactive'); + } + + break; + case 'multimix': + if (command.sort === actions.sort && command.filter === actions.filter) { + self.renderStatus(button, 'active'); + } else { + self.renderStatus(button, 'inactive'); + } + + break; + case 'sort': + if (command.sort.match(/:asc/g)) { + alias = command.sort.replace(/:asc/g, ''); + } + + if (command.sort === actions.sort || alias === actions.sort) { + self.renderStatus(button, 'active'); + } else { + self.renderStatus(button, 'inactive'); + } + + break; + case 'toggle': + if (toggleArray.length < 1) self.renderStatus(button, 'inactive'); + + if (command.filter === actions.filter) { + self.renderStatus(button, 'active'); + } + + for (i = 0; i < toggleArray.length; i++) { + toggle = toggleArray[i]; + + if (toggle === actions.filter) { + // Button matches one active toggle + + self.renderStatus(button, 'active'); + + break; + } + + self.renderStatus(button, 'inactive'); + } + + break; + } + + self.callActions('afterParseStatusChange', arguments); + }, + + /** + * @param {HTMLElement} button + * @param {string} status + * @return {void} + */ + + renderStatus: function(button, status) { + var self = this; + + self.callActions('beforeRenderStatus', arguments); + + switch (status) { + case 'active': + h.addClass(button, self.classNames.active); + h.removeClass(button, self.classNames.disabled); + + if (self.canDisable) self.el.disabled = false; + + break; + case 'inactive': + h.removeClass(button, self.classNames.active); + h.removeClass(button, self.classNames.disabled); + + if (self.canDisable) self.el.disabled = false; + + break; + case 'disabled': + if (self.canDisable) self.el.disabled = true; + + h.addClass(button, self.classNames.disabled); + h.removeClass(button, self.classNames.active); + + break; + } + + if (self.status !== 'live') { + // Update the control's status propery if not live + + self.status = status; + } + + self.callActions('afterRenderStatus', arguments); + } +}); + +mixitup.controls = []; \ No newline at end of file diff --git a/mixitup-3.3.1/src/events.js b/mixitup-3.3.1/src/events.js new file mode 100644 index 0000000..38796ad --- /dev/null +++ b/mixitup-3.3.1/src/events.js @@ -0,0 +1,166 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.EventDetail = function() { + this.state = null; + this.futureState = null; + this.instance = null; + this.originalEvent = null; +}; + +/** + * The `mixitup.Events` class contains all custom events dispatched by MixItUp at various + * points within the lifecycle of a mixer operation. + * + * Each event is analogous to the callback function of the same name defined in + * the `callbacks` configuration object, and is triggered immediately before it. + * + * Events are always triggered from the container element on which MixItUp is instantiated + * upon. + * + * As with any event, registered event handlers receive the event object as a parameter + * which includes a `detail` property containting references to the current `state`, + * the `mixer` instance, and other event-specific properties described below. + * + * @constructor + * @namespace + * @memberof mixitup + * @public + * @since 3.0.0 + */ + +mixitup.Events = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * A custom event triggered immediately after any MixItUp operation is requested + * and before animations have begun. + * + * The `mixStart` event also exposes a `futureState` property via the + * `event.detail` object, which represents the final state of the mixer once + * the requested operation has completed. + * + * @name mixStart + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixStart = null; + + /** + * A custom event triggered when a MixItUp operation is requested while another + * operation is in progress, and the animation queue is full, or queueing + * is disabled. + * + * @name mixBusy + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixBusy = null; + + /** + * A custom event triggered after any MixItUp operation has completed, and the + * state has been updated. + * + * @name mixEnd + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixEnd = null; + + /** + * A custom event triggered whenever a filter operation "fails", i.e. no targets + * could be found matching the requested filter. + * + * @name mixFail + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixFail = null; + + /** + * A custom event triggered whenever a MixItUp control is clicked, and before its + * respective operation is requested. + * + * This event also exposes an `originalEvent` property via the `event.detail` + * object, which holds a reference to the original click event. + * + * @name mixClick + * @memberof mixitup.Events + * @static + * @type {CustomEvent} + */ + + this.mixClick = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.Events); + +mixitup.Events.prototype = Object.create(mixitup.Base.prototype); + +mixitup.Events.prototype.constructor = mixitup.Events; + +/** + * @private + * @param {string} eventType + * @param {Element} el + * @param {object} detail + * @param {Document} [doc] + */ + +mixitup.Events.prototype.fire = function(eventType, el, detail, doc) { + var self = this, + event = null, + eventDetail = new mixitup.EventDetail(); + + self.callActions('beforeFire', arguments); + + if (typeof self[eventType] === 'undefined') { + throw new Error('Event type "' + eventType + '" not found.'); + } + + eventDetail.state = new mixitup.State(); + + h.extend(eventDetail.state, detail.state); + + if (detail.futureState) { + eventDetail.futureState = new mixitup.State(); + + h.extend(eventDetail.futureState, detail.futureState); + } + + eventDetail.instance = detail.instance; + + if (detail.originalEvent) { + eventDetail.originalEvent = detail.originalEvent; + } + + event = h.getCustomEvent(eventType, eventDetail, doc); + + self.callFilters('eventFire', event, arguments); + + el.dispatchEvent(event); +}; + +// Asign a singleton instance to `mixitup.events`: + +mixitup.events = new mixitup.Events(); \ No newline at end of file diff --git a/mixitup-3.3.1/src/facade.js b/mixitup-3.3.1/src/facade.js new file mode 100644 index 0000000..8203d0f --- /dev/null +++ b/mixitup-3.3.1/src/facade.js @@ -0,0 +1,51 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + * @param {mixitup.Mixer} mixer + */ + +mixitup.Facade = function Mixer(mixer) { + mixitup.Base.call(this); + + this.callActions('beforeConstruct', arguments); + + this.configure = mixer.configure.bind(mixer); + this.show = mixer.show.bind(mixer); + this.hide = mixer.hide.bind(mixer); + this.filter = mixer.filter.bind(mixer); + this.toggleOn = mixer.toggleOn.bind(mixer); + this.toggleOff = mixer.toggleOff.bind(mixer); + this.sort = mixer.sort.bind(mixer); + this.changeLayout = mixer.changeLayout.bind(mixer); + this.multimix = mixer.multimix.bind(mixer); + this.dataset = mixer.dataset.bind(mixer); + this.tween = mixer.tween.bind(mixer); + this.insert = mixer.insert.bind(mixer); + this.insertBefore = mixer.insertBefore.bind(mixer); + this.insertAfter = mixer.insertAfter.bind(mixer); + this.prepend = mixer.prepend.bind(mixer); + this.append = mixer.append.bind(mixer); + this.remove = mixer.remove.bind(mixer); + this.destroy = mixer.destroy.bind(mixer); + this.forceRefresh = mixer.forceRefresh.bind(mixer); + this.forceRender = mixer.forceRender.bind(mixer); + this.isMixing = mixer.isMixing.bind(mixer); + this.getOperation = mixer.getOperation.bind(mixer); + this.getConfig = mixer.getConfig.bind(mixer); + this.getState = mixer.getState.bind(mixer); + + this.callActions('afterConstruct', arguments); + + h.freeze(this); + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.Facade); + +mixitup.Facade.prototype = Object.create(mixitup.Base.prototype); + +mixitup.Facade.prototype.constructor = mixitup.Facade; \ No newline at end of file diff --git a/mixitup-3.3.1/src/factory.js b/mixitup-3.3.1/src/factory.js new file mode 100644 index 0000000..30f03d6 --- /dev/null +++ b/mixitup-3.3.1/src/factory.js @@ -0,0 +1,187 @@ +/* global mixitup:true, h */ + +/** + * The `mixitup()` "factory" function creates and returns individual instances + * of MixItUp, known as "mixers", on which API methods can be called. + * + * When loading MixItUp via a script tag, the factory function is accessed + * via the global variable `mixitup`. When using a module loading + * system (e.g. ES2015, CommonJS, RequireJS), the factory function is + * exported into your module when you require the MixItUp library. + * + * @example + * mixitup(container [,config] [,foreignDoc]) + * + * @example Example 1: Creating a mixer instance with an element reference + * var containerEl = document.querySelector('.container'); + * + * var mixer = mixitup(containerEl); + * + * @example Example 2: Creating a mixer instance with a selector string + * var mixer = mixitup('.container'); + * + * @example Example 3: Passing a configuration object + * var mixer = mixitup(containerEl, { + * animation: { + * effects: 'fade scale(0.5)' + * } + * }); + * + * @example Example 4: Passing an iframe reference + * var mixer = mixitup(containerEl, config, foreignDocument); + * + * @global + * @namespace + * @public + * @kind function + * @since 3.0.0 + * @param {(Element|string)} container + * A DOM element or selector string representing the container(s) on which to instantiate MixItUp. + * @param {object} [config] + * An optional "configuration object" used to customize the behavior of the MixItUp instance. + * @param {object} [foreignDoc] + * An optional reference to a `document`, which can be used to control a MixItUp instance in an iframe. + * @return {mixitup.Mixer} + * A "mixer" object holding the MixItUp instance. + */ + +mixitup = function(container, config, foreignDoc) { + var el = null, + returnCollection = false, + instance = null, + facade = null, + doc = null, + output = null, + instances = [], + id = '', + elements = [], + i = -1; + + doc = foreignDoc || window.document; + + if (returnCollection = arguments[3]) { + // A non-documented 4th paramater enabling control of multiple instances + + returnCollection = typeof returnCollection === 'boolean'; + } + + if (typeof container === 'string') { + elements = doc.querySelectorAll(container); + } else if (container && typeof container === 'object' && h.isElement(container, doc)) { + elements = [container]; + } else if (container && typeof container === 'object' && container.length) { + // Although not documented, the container may also be an array-like list of + // elements such as a NodeList or jQuery collection, is returnCollection is true + + elements = container; + } else { + throw new Error(mixitup.messages.errorFactoryInvalidContainer()); + } + + if (elements.length < 1) { + throw new Error(mixitup.messages.errorFactoryContainerNotFound()); + } + + for (i = 0; el = elements[i]; i++) { + if (i > 0 && !returnCollection) break; + + if (!el.id) { + id = 'MixItUp' + h.randomHex(); + + el.id = id; + } else { + id = el.id; + } + + if (mixitup.instances[id] instanceof mixitup.Mixer) { + instance = mixitup.instances[id]; + + if (!config || (config && config.debug && config.debug.showWarnings !== false)) { + console.warn(mixitup.messages.warningFactoryPreexistingInstance()); + } + } else { + instance = new mixitup.Mixer(); + + instance.attach(el, doc, id, config); + + mixitup.instances[id] = instance; + } + + facade = new mixitup.Facade(instance); + + if (config && config.debug && config.debug.enable) { + instances.push(instance); + } else { + instances.push(facade); + } + } + + if (returnCollection) { + output = new mixitup.Collection(instances); + } else { + // Return the first instance regardless + + output = instances[0]; + } + + return output; +}; + +/** + * The `.use()` static method is used to extend the functionality of mixitup with compatible + * extensions and libraries in an environment with modular scoping e.g. ES2015, CommonJS, or RequireJS. + * + * You need only call the `.use()` function once per project, per extension, as module loaders + * will cache a single reference to MixItUp inclusive of all changes made. + * + * @example + * mixitup.use(extension) + * + * @example Example 1: Extending MixItUp with the Pagination Extension + * + * import mixitup from 'mixitup'; + * import mixitupPagination from 'mixitup-pagination'; + * + * mixitup.use(mixitupPagination); + * + * // All mixers created by the factory function in all modules will now + * // have pagination functionality + * + * var mixer = mixitup('.container'); + * + * @public + * @name use + * @memberof mixitup + * @kind function + * @static + * @since 3.0.0 + * @param {*} extension A reference to the extension or library to be used. + * @return {void} + */ + +mixitup.use = function(extension) { + mixitup.Base.prototype.callActions.call(mixitup, 'beforeUse', arguments); + + // Call the extension's factory function, passing + // the mixitup factory as a paramater + + if (typeof extension === 'function' && extension.TYPE === 'mixitup-extension') { + // Mixitup extension + + if (typeof mixitup.extensions[extension.NAME] === 'undefined') { + extension(mixitup); + + mixitup.extensions[extension.NAME] = extension; + } + } else if (extension.fn && extension.fn.jquery) { + // jQuery + + mixitup.libraries.$ = extension; + } + + mixitup.Base.prototype.callActions.call(mixitup, 'afterUse', arguments); +}; + +mixitup.instances = {}; +mixitup.extensions = {}; +mixitup.libraries = {}; \ No newline at end of file diff --git a/mixitup-3.3.1/src/features.js b/mixitup-3.3.1/src/features.js new file mode 100644 index 0000000..e6a4ee6 --- /dev/null +++ b/mixitup-3.3.1/src/features.js @@ -0,0 +1,156 @@ +/* global mixitup, h */ + +/** + * The `mixitup.Features` class performs all feature and CSS prefix detection + * neccessary for MixItUp to function correctly, as well as storing various + * string and array constants. All feature decection is on evaluation of the + * library and stored in a singleton instance for use by other internal classes. + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.Features = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.boxSizingPrefix = ''; + this.transformPrefix = ''; + this.transitionPrefix = ''; + + this.boxSizingPrefix = ''; + this.transformProp = ''; + this.transformRule = ''; + this.transitionProp = ''; + this.perspectiveProp = ''; + this.perspectiveOriginProp = ''; + + this.has = new mixitup.Has(); + + this.canary = null; + + this.BOX_SIZING_PROP = 'boxSizing'; + this.TRANSITION_PROP = 'transition'; + this.TRANSFORM_PROP = 'transform'; + this.PERSPECTIVE_PROP = 'perspective'; + this.PERSPECTIVE_ORIGIN_PROP = 'perspectiveOrigin'; + this.VENDORS = ['Webkit', 'moz', 'O', 'ms']; + + this.TWEENABLE = [ + 'opacity', + 'width', 'height', + 'marginRight', 'marginBottom', + 'x', 'y', + 'scale', + 'translateX', 'translateY', 'translateZ', + 'rotateX', 'rotateY', 'rotateZ' + ]; + + this.callActions('afterConstruct'); +}; + +mixitup.BaseStatic.call(mixitup.Features); + +mixitup.Features.prototype = Object.create(mixitup.Base.prototype); + +h.extend(mixitup.Features.prototype, +/** @lends mixitup.Features */ +{ + constructor: mixitup.Features, + + /** + * @private + * @return {void} + */ + + init: function() { + var self = this; + + self.callActions('beforeInit', arguments); + + self.canary = document.createElement('div'); + + self.setPrefixes(); + self.runTests(); + + self.callActions('beforeInit', arguments); + }, + + /** + * @private + * @return {void} + */ + + runTests: function() { + var self = this; + + self.callActions('beforeRunTests', arguments); + + self.has.promises = typeof window.Promise === 'function'; + self.has.transitions = self.transitionPrefix !== 'unsupported'; + + self.callActions('afterRunTests', arguments); + + h.freeze(self.has); + }, + + /** + * @private + * @return {void} + */ + + setPrefixes: function() { + var self = this; + + self.callActions('beforeSetPrefixes', arguments); + + self.transitionPrefix = h.getPrefix(self.canary, 'Transition', self.VENDORS); + self.transformPrefix = h.getPrefix(self.canary, 'Transform', self.VENDORS); + self.boxSizingPrefix = h.getPrefix(self.canary, 'BoxSizing', self.VENDORS); + + self.boxSizingProp = self.boxSizingPrefix ? + self.boxSizingPrefix + h.pascalCase(self.BOX_SIZING_PROP) : self.BOX_SIZING_PROP; + + self.transitionProp = self.transitionPrefix ? + self.transitionPrefix + h.pascalCase(self.TRANSITION_PROP) : self.TRANSITION_PROP; + + self.transformProp = self.transformPrefix ? + self.transformPrefix + h.pascalCase(self.TRANSFORM_PROP) : self.TRANSFORM_PROP; + + self.transformRule = self.transformPrefix ? + '-' + self.transformPrefix + '-' + self.TRANSFORM_PROP : self.TRANSFORM_PROP; + + self.perspectiveProp = self.transformPrefix ? + self.transformPrefix + h.pascalCase(self.PERSPECTIVE_PROP) : self.PERSPECTIVE_PROP; + + self.perspectiveOriginProp = self.transformPrefix ? + self.transformPrefix + h.pascalCase(self.PERSPECTIVE_ORIGIN_PROP) : + self.PERSPECTIVE_ORIGIN_PROP; + + self.callActions('afterSetPrefixes', arguments); + } +}); + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.Has = function() { + this.transitions = false; + this.promises = false; + + h.seal(this); +}; + +// Assign a singleton instance to `mixitup.features` and initialise: + +mixitup.features = new mixitup.Features(); + +mixitup.features.init(); \ No newline at end of file diff --git a/mixitup-3.3.1/src/h.js b/mixitup-3.3.1/src/h.js new file mode 100644 index 0000000..6d43997 --- /dev/null +++ b/mixitup-3.3.1/src/h.js @@ -0,0 +1,1013 @@ +/* global mixitup, h:true */ + +/** + * @private + */ + +h = { + + /** + * @private + * @param {HTMLElement} el + * @param {string} cls + * @return {boolean} + */ + + hasClass: function(el, cls) { + return !!el.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')); + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} cls + * @return {void} + */ + + addClass: function(el, cls) { + if (!this.hasClass(el, cls)) el.className += el.className ? ' ' + cls : cls; + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} cls + * @return {void} + */ + + removeClass: function(el, cls) { + if (this.hasClass(el, cls)) { + var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)'); + + el.className = el.className.replace(reg, ' ').trim(); + } + }, + + /** + * Merges the properties of the source object onto the + * target object. Alters the target object. + * + * @private + * @param {object} destination + * @param {object} source + * @param {boolean} [deep=false] + * @param {boolean} [handleErrors=false] + * @return {void} + */ + + extend: function(destination, source, deep, handleErrors) { + var sourceKeys = [], + key = '', + i = -1; + + deep = deep || false; + handleErrors = handleErrors || false; + + try { + if (Array.isArray(source)) { + for (i = 0; i < source.length; i++) { + sourceKeys.push(i); + } + } else if (source) { + sourceKeys = Object.keys(source); + } + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + + if (!deep || typeof source[key] !== 'object' || this.isElement(source[key])) { + // All non-object properties, or all properties if shallow extend + + destination[key] = source[key]; + } else if (Array.isArray(source[key])) { + // Arrays + + if (!destination[key]) { + destination[key] = []; + } + + this.extend(destination[key], source[key], deep, handleErrors); + } else { + // Objects + + if (!destination[key]) { + destination[key] = {}; + } + + this.extend(destination[key], source[key], deep, handleErrors); + } + } + } catch(err) { + if (handleErrors) { + this.handleExtendError(err, destination); + } else { + throw err; + } + } + + return destination; + }, + + /** + * @private + * @param {Error} err + * @param {object} destination + * @return {void} + */ + + handleExtendError: function(err, destination) { + var re = /property "?(\w*)"?[,:] object/i, + matches = null, + erroneous = '', + message = '', + suggestion = '', + probableMatch = '', + key = '', + mostMatchingChars = -1, + i = -1; + + if (err instanceof TypeError && (matches = re.exec(err.message))) { + erroneous = matches[1]; + + for (key in destination) { + i = 0; + + while (i < erroneous.length && erroneous.charAt(i) === key.charAt(i)) { + i++; + } + + if (i > mostMatchingChars) { + mostMatchingChars = i; + probableMatch = key; + } + } + + if (mostMatchingChars > 1) { + suggestion = mixitup.messages.errorConfigInvalidPropertySuggestion({ + probableMatch: probableMatch + }); + } + + message = mixitup.messages.errorConfigInvalidProperty({ + erroneous: erroneous, + suggestion: suggestion + }); + + throw new TypeError(message); + } + + throw err; + }, + + /** + * @private + * @param {string} str + * @return {function} + */ + + template: function(str) { + var re = /\${([\w]*)}/g, + dynamics = {}, + matches = null; + + while ((matches = re.exec(str))) { + dynamics[matches[1]] = new RegExp('\\${' + matches[1] + '}', 'g'); + } + + return function(data) { + var key = '', + output = str; + + data = data || {}; + + for (key in dynamics) { + output = output.replace(dynamics[key], typeof data[key] !== 'undefined' ? data[key] : ''); + } + + return output; + }; + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} type + * @param {function} fn + * @param {boolean} useCapture + * @return {void} + */ + + on: function(el, type, fn, useCapture) { + if (!el) return; + + if (el.addEventListener) { + el.addEventListener(type, fn, useCapture); + } else if (el.attachEvent) { + el['e' + type + fn] = fn; + + el[type + fn] = function() { + el['e' + type + fn](window.event); + }; + + el.attachEvent('on' + type, el[type + fn]); + } + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} type + * @param {function} fn + * @return {void} + */ + + off: function(el, type, fn) { + if (!el) return; + + if (el.removeEventListener) { + el.removeEventListener(type, fn, false); + } else if (el.detachEvent) { + el.detachEvent('on' + type, el[type + fn]); + el[type + fn] = null; + } + }, + + /** + * @private + * @param {string} eventType + * @param {object} detail + * @param {Document} [doc] + * @return {CustomEvent} + */ + + getCustomEvent: function(eventType, detail, doc) { + var event = null; + + doc = doc || window.document; + + if (typeof window.CustomEvent === 'function') { + event = new window.CustomEvent(eventType, { + detail: detail, + bubbles: true, + cancelable: true + }); + } else if (typeof doc.createEvent === 'function') { + event = doc.createEvent('CustomEvent'); + event.initCustomEvent(eventType, true, true, detail); + } else { + event = doc.createEventObject(), + event.type = eventType; + + event.returnValue = false; + event.cancelBubble = false; + event.detail = detail; + } + + return event; + }, + + /** + * @private + * @param {Event} e + * @return {Event} + */ + + getOriginalEvent: function(e) { + if (e.touches && e.touches.length) { + return e.touches[0]; + } else if (e.changedTouches && e.changedTouches.length) { + return e.changedTouches[0]; + } else { + return e; + } + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} selector + * @return {Number} + */ + + index: function(el, selector) { + var i = 0; + + while ((el = el.previousElementSibling) !== null) { + if (!selector || el.matches(selector)) { + ++i; + } + } + + return i; + }, + + /** + * Converts a dash or snake-case string to camel case. + * + * @private + * @param {string} str + * @param {boolean} [isPascal] + * @return {string} + */ + + camelCase: function(str) { + return str.toLowerCase().replace(/([_-][a-z])/g, function($1) { + return $1.toUpperCase().replace(/[_-]/, ''); + }); + }, + + /** + * Converts a dash or snake-case string to pascal case. + * + * @private + * @param {string} str + * @param {boolean} [isPascal] + * @return {string} + */ + + pascalCase: function(str) { + return (str = this.camelCase(str)).charAt(0).toUpperCase() + str.slice(1); + }, + + /** + * Converts a camel or pascal-case string to dash case. + * + * @private + * @param {string} str + * @return {string} + */ + + dashCase: function(str) { + return str.replace(/([A-Z])/g, '-$1').replace(/^-/, '').toLowerCase(); + }, + + /** + * @private + * @param {HTMLElement} el + * @param {HTMLHtmlElement} [doc] + * @return {boolean} + */ + + isElement: function(el, doc) { + doc = doc || window.document; + + if ( + window.HTMLElement && + el instanceof window.HTMLElement + ) { + return true; + } else if ( + doc.defaultView && + doc.defaultView.HTMLElement && + el instanceof doc.defaultView.HTMLElement + ) { + return true; + } else { + return ( + el !== null && + el.nodeType === 1 && + typeof el.nodeName === 'string' + ); + } + }, + + /** + * @private + * @param {string} htmlString + * @param {HTMLHtmlElement} [doc] + * @return {DocumentFragment} + */ + + createElement: function(htmlString, doc) { + var frag = null, + temp = null; + + doc = doc || window.document; + + frag = doc.createDocumentFragment(); + temp = doc.createElement('div'); + + temp.innerHTML = htmlString.trim(); + + while (temp.firstChild) { + frag.appendChild(temp.firstChild); + } + + return frag; + }, + + /** + * @private + * @param {Node} node + * @return {void} + */ + + removeWhitespace: function(node) { + var deleting; + + while (node && node.nodeName === '#text') { + deleting = node; + + node = node.previousSibling; + + deleting.parentElement && deleting.parentElement.removeChild(deleting); + } + }, + + /** + * @private + * @param {Array<*>} a + * @param {Array<*>} b + * @return {boolean} + */ + + isEqualArray: function(a, b) { + var i = a.length; + + if (i !== b.length) return false; + + while (i--) { + if (a[i] !== b[i]) return false; + } + + return true; + }, + + /** + * @private + * @param {object} a + * @param {object} b + * @return {boolean} + */ + + deepEquals: function(a, b) { + var key; + + if (typeof a === 'object' && a && typeof b === 'object' && b) { + if (Object.keys(a).length !== Object.keys(b).length) return false; + + for (key in a) { + if (!b.hasOwnProperty(key) || !this.deepEquals(a[key], b[key])) return false; + } + } else if (a !== b) { + return false; + } + + return true; + }, + + /** + * @private + * @param {Array<*>} oldArray + * @return {Array<*>} + */ + + arrayShuffle: function(oldArray) { + var newArray = oldArray.slice(), + len = newArray.length, + i = len, + p = -1, + t = []; + + while (i--) { + p = ~~(Math.random() * len); + t = newArray[i]; + + newArray[i] = newArray[p]; + newArray[p] = t; + } + + return newArray; + }, + + /** + * @private + * @param {object} list + */ + + arrayFromList: function(list) { + var output, i; + + try { + return Array.prototype.slice.call(list); + } catch(err) { + output = []; + + for (i = 0; i < list.length; i++) { + output.push(list[i]); + } + + return output; + } + }, + + /** + * @private + * @param {function} func + * @param {Number} wait + * @param {boolean} immediate + * @return {function} + */ + + debounce: function(func, wait, immediate) { + var timeout; + + return function() { + var self = this, + args = arguments, + callNow = immediate && !timeout, + later = null; + + later = function() { + timeout = null; + + if (!immediate) { + func.apply(self, args); + } + }; + + clearTimeout(timeout); + + timeout = setTimeout(later, wait); + + if (callNow) func.apply(self, args); + }; + }, + + /** + * @private + * @param {HTMLElement} element + * @return {object} + */ + + position: function(element) { + var xPosition = 0, + yPosition = 0, + offsetParent = element; + + while (element) { + xPosition -= element.scrollLeft; + yPosition -= element.scrollTop; + + if (element === offsetParent) { + xPosition += element.offsetLeft; + yPosition += element.offsetTop; + + offsetParent = element.offsetParent; + } + + element = element.parentElement; + } + + return { + x: xPosition, + y: yPosition + }; + }, + + /** + * @private + * @param {object} node1 + * @param {object} node2 + * @return {Number} + */ + + getHypotenuse: function(node1, node2) { + var distanceX = node1.x - node2.x, + distanceY = node1.y - node2.y; + + distanceX = distanceX < 0 ? distanceX * -1 : distanceX, + distanceY = distanceY < 0 ? distanceY * -1 : distanceY; + + return Math.sqrt(Math.pow(distanceX, 2) + Math.pow(distanceY, 2)); + }, + + /** + * Calcuates the area of intersection between two rectangles and expresses it as + * a ratio in comparison to the area of the first rectangle. + * + * @private + * @param {Rect} box1 + * @param {Rect} box2 + * @return {number} + */ + + getIntersectionRatio: function(box1, box2) { + var controlArea = box1.width * box1.height, + intersectionX = -1, + intersectionY = -1, + intersectionArea = -1, + ratio = -1; + + intersectionX = + Math.max(0, Math.min(box1.left + box1.width, box2.left + box2.width) - Math.max(box1.left, box2.left)); + + intersectionY = + Math.max(0, Math.min(box1.top + box1.height, box2.top + box2.height) - Math.max(box1.top, box2.top)); + + intersectionArea = intersectionY * intersectionX; + + ratio = intersectionArea / controlArea; + + return ratio; + }, + + /** + * @private + * @param {object} el + * @param {string} selector + * @param {boolean} [includeSelf] + * @param {HTMLHtmlElement} [doc] + * @return {Element|null} + */ + + closestParent: function(el, selector, includeSelf, doc) { + var parent = el.parentNode; + + doc = doc || window.document; + + if (includeSelf && el.matches(selector)) { + return el; + } + + while (parent && parent != doc.body) { + if (parent.matches && parent.matches(selector)) { + return parent; + } else if (parent.parentNode) { + parent = parent.parentNode; + } else { + return null; + } + } + + return null; + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} selector + * @param {HTMLHtmlElement} [doc] + * @return {NodeList} + */ + + children: function(el, selector, doc) { + var children = [], + tempId = ''; + + doc = doc || window.doc; + + if (el) { + if (!el.id) { + tempId = 'Temp' + this.randomHexKey(); + + el.id = tempId; + } + + children = doc.querySelectorAll('#' + el.id + ' > ' + selector); + + if (tempId) { + el.removeAttribute('id'); + } + } + + return children; + }, + + /** + * Creates a clone of a provided array, with any empty strings removed. + * + * @private + * @param {Array<*>} originalArray + * @return {Array<*>} + */ + + clean: function(originalArray) { + var cleanArray = [], + i = -1; + + for (i = 0; i < originalArray.length; i++) { + if (originalArray[i] !== '') { + cleanArray.push(originalArray[i]); + } + } + + return cleanArray; + }, + + /** + * Abstracts an ES6 promise into a q-like deferred interface for storage and deferred resolution. + * + * @private + * @param {object} libraries + * @return {h.Deferred} + */ + + defer: function(libraries) { + var deferred = null, + promiseWrapper = null, + $ = null; + + promiseWrapper = new this.Deferred(); + + if (mixitup.features.has.promises) { + // ES6 native promise or polyfill + + promiseWrapper.promise = new Promise(function(resolve, reject) { + promiseWrapper.resolve = resolve; + promiseWrapper.reject = reject; + }); + } else if (($ = (window.jQuery || libraries.$)) && typeof $.Deferred === 'function') { + // jQuery + + deferred = $.Deferred(); + + promiseWrapper.promise = deferred.promise(); + promiseWrapper.resolve = deferred.resolve; + promiseWrapper.reject = deferred.reject; + } else if (window.console) { + // No implementation + + console.warn(mixitup.messages.warningNoPromiseImplementation()); + } + + return promiseWrapper; + }, + + /** + * @private + * @param {Array} tasks + * @param {object} libraries + * @return {Promise} + */ + + all: function(tasks, libraries) { + var $ = null; + + if (mixitup.features.has.promises) { + return Promise.all(tasks); + } else if (($ = (window.jQuery || libraries.$)) && typeof $.when === 'function') { + return $.when.apply($, tasks) + .done(function() { + // jQuery when returns spread arguments rather than an array or resolutions + + return arguments; + }); + } + + // No implementation + + if (window.console) { + console.warn(mixitup.messages.warningNoPromiseImplementation()); + } + + return []; + }, + + /** + * @private + * @param {HTMLElement} el + * @param {string} property + * @param {Array} vendors + * @return {string} + */ + + getPrefix: function(el, property, vendors) { + var i = -1, + prefix = ''; + + if (h.dashCase(property) in el.style) return ''; + + for (i = 0; prefix = vendors[i]; i++) { + if (prefix + property in el.style) { + return prefix.toLowerCase(); + } + } + + return 'unsupported'; + }, + + /** + * @private + * @return {string} + */ + + randomHex: function() { + return ('00000' + (Math.random() * 16777216 << 0).toString(16)).substr(-6).toUpperCase(); + }, + + /** + * @private + * @param {HTMLDocument} [doc] + * @return {object} + */ + + getDocumentState: function(doc) { + doc = typeof doc.body === 'object' ? doc : window.document; + + return { + scrollTop: window.pageYOffset, + scrollLeft: window.pageXOffset, + docHeight: doc.documentElement.scrollHeight, + docWidth: doc.documentElement.scrollWidth, + viewportHeight: doc.documentElement.clientHeight, + viewportWidth: doc.documentElement.clientWidth + }; + }, + + /** + * @private + * @param {object} obj + * @param {function} fn + * @return {function} + */ + + bind: function(obj, fn) { + return function() { + return fn.apply(obj, arguments); + }; + }, + + /** + * @private + * @param {HTMLElement} el + * @return {boolean} + */ + + isVisible: function(el) { + var styles = null; + + if (el.offsetParent) return true; + + styles = window.getComputedStyle(el); + + if ( + styles.position === 'fixed' && + styles.visibility !== 'hidden' && + styles.opacity !== '0' + ) { + // Fixed elements report no offsetParent, + // but may still be invisible + + return true; + } + + return false; + }, + + /** + * @private + * @param {object} obj + */ + + seal: function(obj) { + if (typeof Object.seal === 'function') { + Object.seal(obj); + } + }, + + /** + * @private + * @param {object} obj + */ + + freeze: function(obj) { + if (typeof Object.freeze === 'function') { + Object.freeze(obj); + } + }, + + /** + * @private + * @param {string} control + * @param {string} specimen + * @return {boolean} + */ + + compareVersions: function(control, specimen) { + var controlParts = control.split('.'), + specimenParts = specimen.split('.'), + controlPart = -1, + specimenPart = -1, + i = -1; + + for (i = 0; i < controlParts.length; i++) { + controlPart = parseInt(controlParts[i].replace(/[^\d.]/g, '')); + specimenPart = parseInt(specimenParts[i].replace(/[^\d.]/g, '') || 0); + + if (specimenPart < controlPart) { + return false; + } else if (specimenPart > controlPart) { + return true; + } + } + + return true; + }, + + /** + * @private + * @constructor + */ + + Deferred: function() { + this.promise = null; + this.resolve = null; + this.reject = null; + this.id = h.randomHex(); + }, + + /** + * @private + * @param {object} obj + * @return {boolean} + */ + + isEmptyObject: function(obj) { + var key = ''; + + if (typeof Object.keys === 'function') { + return Object.keys(obj).length === 0; + } + + for (key in obj) { + if (obj.hasOwnProperty(key)) { + return false; + } + } + + return true; + }, + + /** + * @param {mixitup.Config.ClassNames} classNames + * @param {string} elementName + * @param {string} [modifier] + * @return {string} + */ + + getClassname: function(classNames, elementName, modifier) { + var classname = ''; + + classname += classNames.block; + + if (classname.length) { + classname += classNames.delineatorElement; + } + + classname += classNames['element' + this.pascalCase(elementName)]; + + if (!modifier) return classname; + + if (classname.length) { + classname += classNames.delineatorModifier; + } + + classname += modifier; + + return classname; + }, + + /** + * Returns the value of a property on a given object via its string key. + * + * @param {object} obj + * @param {string} stringKey + * @return {*} value + */ + + getProperty: function(obj, stringKey) { + var parts = stringKey.split('.'), + returnCurrent = null, + current = '', + i = 0; + + if (!stringKey) { + return obj; + } + + returnCurrent = function(obj) { + if (!obj) { + return null; + } else { + return obj[current]; + } + }; + + while (i < parts.length) { + current = parts[i]; + + obj = returnCurrent(obj); + + i++; + } + + if (typeof obj !== 'undefined') { + return obj; + } else { + return null; + } + } +}; + +mixitup.h = h; \ No newline at end of file diff --git a/mixitup-3.3.1/src/i-move-data.js b/mixitup-3.3.1/src/i-move-data.js new file mode 100644 index 0000000..139e7f7 --- /dev/null +++ b/mixitup-3.3.1/src/i-move-data.js @@ -0,0 +1,32 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.IMoveData = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.posIn = null; + this.posOut = null; + this.operation = null; + this.callback = null; + this.statusChange = ''; + this.duration = -1; + this.staggerIndex = -1; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.IMoveData); + +mixitup.IMoveData.prototype = Object.create(mixitup.Base.prototype); + +mixitup.IMoveData.prototype.constructor = mixitup.IMoveData; \ No newline at end of file diff --git a/mixitup-3.3.1/src/messages.js b/mixitup-3.3.1/src/messages.js new file mode 100644 index 0000000..b6b9cd5 --- /dev/null +++ b/mixitup-3.3.1/src/messages.js @@ -0,0 +1,122 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.Messages = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /* Errors + ----------------------------------------------------------------------------- */ + + this.ERROR_FACTORY_INVALID_CONTAINER = + '[MixItUp] An invalid selector or element reference was passed to the mixitup factory function'; + + this.ERROR_FACTORY_CONTAINER_NOT_FOUND = + '[MixItUp] The provided selector yielded no container element'; + + this.ERROR_CONFIG_INVALID_ANIMATION_EFFECTS = + '[MixItUp] Invalid value for `animation.effects`'; + + this.ERROR_CONFIG_INVALID_CONTROLS_SCOPE = + '[MixItUp] Invalid value for `controls.scope`'; + + this.ERROR_CONFIG_INVALID_PROPERTY = + '[MixitUp] Invalid configuration object property "${erroneous}"${suggestion}'; + + this.ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION = + '. Did you mean "${probableMatch}"?'; + + this.ERROR_CONFIG_DATA_UID_KEY_NOT_SET = + '[MixItUp] To use the dataset API, a UID key must be specified using `data.uidKey`'; + + this.ERROR_DATASET_INVALID_UID_KEY = + '[MixItUp] The specified UID key "${uidKey}" is not present on one or more dataset items'; + + this.ERROR_DATASET_DUPLICATE_UID = + '[MixItUp] The UID "${uid}" was found on two or more dataset items. UIDs must be unique.'; + + this.ERROR_INSERT_INVALID_ARGUMENTS = + '[MixItUp] Please provider either an index or a sibling and position to insert, not both'; + + this.ERROR_INSERT_PREEXISTING_ELEMENT = + '[MixItUp] An element to be inserted already exists in the container'; + + this.ERROR_FILTER_INVALID_ARGUMENTS = + '[MixItUp] Please provide either a selector or collection `.filter()`, not both'; + + this.ERROR_DATASET_NOT_SET = + '[MixItUp] To use the dataset API with pre-rendered targets, a starting dataset must be set using `load.dataset`'; + + this.ERROR_DATASET_PRERENDERED_MISMATCH = + '[MixItUp] `load.dataset` does not match pre-rendered targets'; + + this.ERROR_DATASET_RENDERER_NOT_SET = + '[MixItUp] To insert an element via the dataset API, a target renderer function must be provided to `render.target`'; + + this.ERROR_SORT_NON_EXISTENT_ELEMENT = + '[MixItUp] An element to be sorted does not already exist in the container'; + + /* Warnings + ----------------------------------------------------------------------------- */ + + this.WARNING_FACTORY_PREEXISTING_INSTANCE = + '[MixItUp] WARNING: This element already has an active MixItUp instance. The provided configuration object will be ignored.' + + ' If you wish to perform additional methods on this instance, please create a reference.'; + + this.WARNING_INSERT_NO_ELEMENTS = + '[MixItUp] WARNING: No valid elements were passed to `.insert()`'; + + this.WARNING_REMOVE_NO_ELEMENTS = + '[MixItUp] WARNING: No valid elements were passed to `.remove()`'; + + this.WARNING_MULTIMIX_INSTANCE_QUEUE_FULL = + '[MixItUp] WARNING: An operation was requested but the MixItUp instance was busy. The operation was rejected because the ' + + 'queue is full or queuing is disabled.'; + + this.WARNING_GET_OPERATION_INSTANCE_BUSY = + '[MixItUp] WARNING: Operations can be be created while the MixItUp instance is busy.'; + + this.WARNING_NO_PROMISE_IMPLEMENTATION = + '[MixItUp] WARNING: No Promise implementations could be found. If you wish to use promises with MixItUp please install' + + ' an ES6 Promise polyfill.'; + + this.WARNING_INCONSISTENT_SORTING_ATTRIBUTES = + '[MixItUp] WARNING: The requested sorting data attribute "${attribute}" was not present on one or more target elements' + + ' which may product unexpected sort output'; + + this.callActions('afterConstruct'); + + this.compileTemplates(); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.Messages); + +mixitup.Messages.prototype = Object.create(mixitup.Base.prototype); + +mixitup.Messages.prototype.constructor = mixitup.Messages; + +/** + * @return {void} + */ + +mixitup.Messages.prototype.compileTemplates = function() { + var errorKey = ''; + var errorMessage = ''; + + for (errorKey in this) { + if (typeof (errorMessage = this[errorKey]) !== 'string') continue; + + this[h.camelCase(errorKey)] = h.template(errorMessage); + } +}; + +mixitup.messages = new mixitup.Messages(); \ No newline at end of file diff --git a/mixitup-3.3.1/src/mixer-dom.js b/mixitup-3.3.1/src/mixer-dom.js new file mode 100644 index 0000000..7b3f89d --- /dev/null +++ b/mixitup-3.3.1/src/mixer-dom.js @@ -0,0 +1,30 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.MixerDom = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.document = null; + this.body = null; + this.container = null; + this.parent = null; + this.targets = []; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.MixerDom); + +mixitup.MixerDom.prototype = Object.create(mixitup.Base.prototype); + +mixitup.MixerDom.prototype.constructor = mixitup.MixerDom; \ No newline at end of file diff --git a/mixitup-3.3.1/src/mixer.js b/mixitup-3.3.1/src/mixer.js new file mode 100644 index 0000000..52b1d59 --- /dev/null +++ b/mixitup-3.3.1/src/mixer.js @@ -0,0 +1,4363 @@ +/* global mixitup, h */ + +/** + * The `mixitup.Mixer` class is used to hold discreet, user-configured + * instances of MixItUp on a provided container element. + * + * Mixer instances are returned whenever the `mixitup()` factory function is called, + * which expose a range of methods enabling API-based filtering, sorting, + * insertion, removal and more. + * + * @constructor + * @namespace + * @memberof mixitup + * @public + * @since 3.0.0 + */ + +mixitup.Mixer = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.config = new mixitup.Config(); + + this.id = ''; + + this.isBusy = false; + this.isToggling = false; + this.incPadding = true; + + this.controls = []; + this.targets = []; + this.origOrder = []; + this.cache = {}; + + this.toggleArray = []; + + this.targetsMoved = 0; + this.targetsImmovable = 0; + this.targetsBound = 0; + this.targetsDone = 0; + + this.staggerDuration = 0; + this.effectsIn = null; + this.effectsOut = null; + this.transformIn = []; + this.transformOut = []; + this.queue = []; + + this.state = null; + this.lastOperation = null; + this.lastClicked = null; + this.userCallback = null; + this.userDeferred = null; + + this.dom = new mixitup.MixerDom(); + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.Mixer); + +mixitup.Mixer.prototype = Object.create(mixitup.Base.prototype); + +h.extend(mixitup.Mixer.prototype, +/** @lends mixitup.Mixer */ +{ + constructor: mixitup.Mixer, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {HTMLElement} container + * @param {HTMLElement} document + * @param {string} id + * @param {object} [config] + */ + + attach: function(container, document, id, config) { + var self = this, + target = null, + i = -1; + + self.callActions('beforeAttach', arguments); + + self.id = id; + + if (config) { + h.extend(self.config, config, true, true); + } + + self.sanitizeConfig(); + + self.cacheDom(container, document); + + if (self.config.layout.containerClassName) { + h.addClass(self.dom.container, self.config.layout.containerClassName); + } + + if (!mixitup.features.has.transitions) { + self.config.animation.enable = false; + } + + if (typeof window.console === 'undefined') { + self.config.debug.showWarnings = false; + } + + if (self.config.data.uidKey) { + // If the dataset API is in use, force disable controls + + self.config.controls.enable = false; + } + + self.indexTargets(); + + self.state = self.getInitialState(); + + for (i = 0; target = self.lastOperation.toHide[i]; i++) { + target.hide(); + } + + if (self.config.controls.enable) { + self.initControls(); + + self.buildToggleArray(null, self.state); + + self.updateControls({ + filter: self.state.activeFilter, + sort: self.state.activeSort + }); + } + + self.parseEffects(); + + self.callActions('afterAttach', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + sanitizeConfig: function() { + var self = this; + + self.callActions('beforeSanitizeConfig', arguments); + + // Sanitize enum/string config options + + self.config.controls.scope = self.config.controls.scope.toLowerCase().trim(); + self.config.controls.toggleLogic = self.config.controls.toggleLogic.toLowerCase().trim(); + self.config.controls.toggleDefault = self.config.controls.toggleDefault.toLowerCase().trim(); + + self.config.animation.effects = self.config.animation.effects.trim(); + + self.callActions('afterSanitizeConfig', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {mixitup.State} + */ + + getInitialState: function() { + var self = this, + state = new mixitup.State(), + operation = new mixitup.Operation(); + + self.callActions('beforeGetInitialState', arguments); + + // Map initial values into a mock state object in order to construct an operation + + state.activeContainerClassName = self.config.layout.containerClassName; + + if (self.config.load.dataset) { + // Dataset API + + if (!self.config.data.uidKey || typeof self.config.data.uidKey !== 'string') { + throw new TypeError(mixitup.messages.errorConfigDataUidKeyNotSet()); + } + + operation.startDataset = operation.newDataset = state.activeDataset = self.config.load.dataset.slice(); + operation.startContainerClassName = operation.newContainerClassName = state.activeContainerClassName; + operation.show = self.targets.slice(); + + state = self.callFilters('stateGetInitialState', state, arguments); + } else { + // DOM API + + state.activeFilter = self.parseFilterArgs([self.config.load.filter]).command; + state.activeSort = self.parseSortArgs([self.config.load.sort]).command; + state.totalTargets = self.targets.length; + + state = self.callFilters('stateGetInitialState', state, arguments); + + if ( + state.activeSort.collection || state.activeSort.attribute || + state.activeSort.order === 'random' || state.activeSort.order === 'desc' + ) { + // Sorting on load + + operation.newSort = state.activeSort; + + self.sortOperation(operation); + + self.printSort(false, operation); + + self.targets = operation.newOrder; + } else { + operation.startOrder = operation.newOrder = self.targets; + } + + operation.startFilter = operation.newFilter = state.activeFilter; + operation.startSort = operation.newSort = state.activeSort; + operation.startContainerClassName = operation.newContainerClassName = state.activeContainerClassName; + + if (operation.newFilter.selector === 'all') { + operation.newFilter.selector = self.config.selectors.target; + } else if (operation.newFilter.selector === 'none') { + operation.newFilter.selector = ''; + } + } + + operation = self.callFilters('operationGetInitialState', operation, [state]); + + self.lastOperation = operation; + + if (operation.newFilter) { + self.filterOperation(operation); + } + + state = self.buildState(operation); + + return state; + }, + + /** + * Caches references of DOM elements neccessary for the mixer's functionality. + * + * @private + * @instance + * @since 3.0.0 + * @param {HTMLElement} el + * @param {HTMLHtmlElement} document + * @return {void} + */ + + cacheDom: function(el, document) { + var self = this; + + self.callActions('beforeCacheDom', arguments); + + self.dom.document = document; + self.dom.body = self.dom.document.querySelector('body'); + self.dom.container = el; + self.dom.parent = el; + + self.callActions('afterCacheDom', arguments); + }, + + /** + * Indexes all child elements of the mixer matching the `selectors.target` + * selector, instantiating a mixitup.Target for each one. + * + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + indexTargets: function() { + var self = this, + target = null, + el = null, + dataset = null, + i = -1; + + self.callActions('beforeIndexTargets', arguments); + + self.dom.targets = self.config.layout.allowNestedTargets ? + self.dom.container.querySelectorAll(self.config.selectors.target) : + h.children(self.dom.container, self.config.selectors.target, self.dom.document); + + self.dom.targets = h.arrayFromList(self.dom.targets); + + self.targets = []; + + if ((dataset = self.config.load.dataset) && dataset.length !== self.dom.targets.length) { + throw new Error(mixitup.messages.errorDatasetPrerenderedMismatch()); + } + + if (self.dom.targets.length) { + for (i = 0; el = self.dom.targets[i]; i++) { + target = new mixitup.Target(); + + target.init(el, self, dataset ? dataset[i] : void(0)); + + target.isInDom = true; + + self.targets.push(target); + } + + self.dom.parent = self.dom.targets[0].parentElement === self.dom.container ? + self.dom.container : + self.dom.targets[0].parentElement; + } + + self.origOrder = self.targets; + + self.callActions('afterIndexTargets', arguments); + }, + + initControls: function() { + var self = this, + definition = '', + controlElements = null, + el = null, + parent = null, + delagators = null, + control = null, + i = -1, + j = -1; + + self.callActions('beforeInitControls', arguments); + + switch (self.config.controls.scope) { + case 'local': + parent = self.dom.container; + + break; + case 'global': + parent = self.dom.document; + + break; + default: + throw new Error(mixitup.messages.errorConfigInvalidControlsScope()); + } + + for (i = 0; definition = mixitup.controlDefinitions[i]; i++) { + if (self.config.controls.live || definition.live) { + if (definition.parent) { + delagators = self.dom[definition.parent]; + + if (!delagators || delagators.length < 0) continue; + + if (typeof delagators.length !== 'number') { + delagators = [delagators]; + } + } else { + delagators = [parent]; + } + + for (j = 0; (el = delagators[j]); j++) { + control = self.getControl(el, definition.type, definition.selector); + + self.controls.push(control); + } + } else { + controlElements = parent.querySelectorAll(self.config.selectors.control + definition.selector); + + for (j = 0; (el = controlElements[j]); j++) { + control = self.getControl(el, definition.type, ''); + + if (!control) continue; + + self.controls.push(control); + } + } + } + + self.callActions('afterInitControls', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {HTMLElement} el + * @param {string} type + * @param {string} selector + * @return {mixitup.Control|null} + */ + + getControl: function(el, type, selector) { + var self = this, + control = null, + i = -1; + + self.callActions('beforeGetControl', arguments); + + if (!selector) { + // Static controls only + + for (i = 0; control = mixitup.controls[i]; i++) { + if (control.el === el && control.isBound(self)) { + // Control already bound to this mixer (as another type). + + // NB: This prevents duplicate controls from being registered where a selector + // might collide, eg: "[data-filter]" and "[data-filter][data-sort]" + + return self.callFilters('controlGetControl', null, arguments); + } else if (control.el === el && control.type === type && control.selector === selector) { + // Another mixer is already using this control, add this mixer as a binding + + control.addBinding(self); + + return self.callFilters('controlGetControl', control, arguments); + } + } + } + + // Create new control + + control = new mixitup.Control(); + + control.init(el, type, selector); + + control.classNames.base = h.getClassname(self.config.classNames, type); + control.classNames.active = h.getClassname(self.config.classNames, type, self.config.classNames.modifierActive); + control.classNames.disabled = h.getClassname(self.config.classNames, type, self.config.classNames.modifierDisabled); + + // Add a reference to this mixer as a binding + + control.addBinding(self); + + return self.callFilters('controlGetControl', control, arguments); + }, + + /** + * Creates a compound selector by joining the `toggleArray` value as per the + * defined toggle logic. + * + * @private + * @instance + * @since 3.0.0 + * @return {string} + */ + + getToggleSelector: function() { + var self = this, + delineator = self.config.controls.toggleLogic === 'or' ? ', ' : '', + toggleSelector = ''; + + self.callActions('beforeGetToggleSelector', arguments); + + self.toggleArray = h.clean(self.toggleArray); + + toggleSelector = self.toggleArray.join(delineator); + + if (toggleSelector === '') { + toggleSelector = self.config.controls.toggleDefault; + } + + return self.callFilters('selectorGetToggleSelector', toggleSelector, arguments); + }, + + /** + * Breaks compound selector strings in an array of discreet selectors, + * as per the active `controls.toggleLogic` configuration option. Accepts + * either a dynamic command object, or a state object. + * + * @private + * @instance + * @since 2.0.0 + * @param {object} [command] + * @param {mixitup.State} [state] + * @return {void} + */ + + buildToggleArray: function(command, state) { + var self = this, + activeFilterSelector = ''; + + self.callActions('beforeBuildToggleArray', arguments); + + if (command && command.filter) { + activeFilterSelector = command.filter.selector.replace(/\s/g, ''); + } else if (state) { + activeFilterSelector = state.activeFilter.selector.replace(/\s/g, ''); + } else { + return; + } + + if (activeFilterSelector === self.config.selectors.target || activeFilterSelector === 'all') { + activeFilterSelector = ''; + } + + if (self.config.controls.toggleLogic === 'or') { + self.toggleArray = activeFilterSelector.split(','); + } else { + self.toggleArray = self.splitCompoundSelector(activeFilterSelector); + } + + self.toggleArray = h.clean(self.toggleArray); + + self.callActions('afterBuildToggleArray', arguments); + }, + + /** + * Takes a compound selector (e.g. `.cat-1.cat-2`, `[data-cat="1"][data-cat="2"]`) + * and breaks into its individual selectors. + * + * @private + * @instance + * @since 3.0.0 + * @param {string} compoundSelector + * @return {string[]} + */ + + splitCompoundSelector: function(compoundSelector) { + // Break at a `.` or `[`, capturing the delineator + + var partials = compoundSelector.split(/([\.\[])/g), + toggleArray = [], + selector = '', + i = -1; + + if (partials[0] === '') { + partials.shift(); + } + + for (i = 0; i < partials.length; i++) { + if (i % 2 === 0) { + selector = ''; + } + + selector += partials[i]; + + if (i % 2 !== 0) { + toggleArray.push(selector); + } + } + + return toggleArray; + }, + + /** + * Updates controls to their active/inactive state based on the command or + * current state of the mixer. + * + * @private + * @instance + * @since 2.0.0 + * @param {object} command + * @return {void} + */ + + updateControls: function(command) { + var self = this, + control = null, + output = new mixitup.CommandMultimix(), + i = -1; + + self.callActions('beforeUpdateControls', arguments); + + // Sanitise to defaults + + if (command.filter) { + output.filter = command.filter.selector; + } else { + output.filter = self.state.activeFilter.selector; + } + + if (command.sort) { + output.sort = self.buildSortString(command.sort); + } else { + output.sort = self.buildSortString(self.state.activeSort); + } + + if (output.filter === self.config.selectors.target) { + output.filter = 'all'; + } + + if (output.filter === '') { + output.filter = 'none'; + } + + h.freeze(output); + + for (i = 0; control = self.controls[i]; i++) { + control.update(output, self.toggleArray); + } + + self.callActions('afterUpdateControls', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.CommandSort} command + * @return {string} + */ + + buildSortString: function(command) { + var self = this; + var output = ''; + + output += command.sortString; + + if (command.next) { + output += ' ' + self.buildSortString(command.next); + } + + return output; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {object} command + * @param {Operation} operation + * @return {Promise.} + */ + + insertTargets: function(command, operation) { + var self = this, + nextSibling = null, + insertionIndex = -1, + frag = null, + target = null, + el = null, + i = -1; + + self.callActions('beforeInsertTargets', arguments); + + if (typeof command.index === 'undefined') command.index = 0; + + nextSibling = self.getNextSibling(command.index, command.sibling, command.position); + frag = self.dom.document.createDocumentFragment(); + + if (nextSibling) { + insertionIndex = h.index(nextSibling, self.config.selectors.target); + } else { + insertionIndex = self.targets.length; + } + + if (command.collection) { + for (i = 0; el = command.collection[i]; i++) { + if (self.dom.targets.indexOf(el) > -1) { + throw new Error(mixitup.messages.errorInsertPreexistingElement()); + } + + // Ensure elements are hidden when they are added to the DOM, so they can + // be animated in gracefully + + el.style.display = 'none'; + + frag.appendChild(el); + frag.appendChild(self.dom.document.createTextNode(' ')); + + if (!h.isElement(el, self.dom.document) || !el.matches(self.config.selectors.target)) continue; + + target = new mixitup.Target(); + + target.init(el, self); + + target.isInDom = true; + + self.targets.splice(insertionIndex, 0, target); + + insertionIndex++; + } + + self.dom.parent.insertBefore(frag, nextSibling); + } + + // Since targets have been added, the original order must be updated + + operation.startOrder = self.origOrder = self.targets; + + self.callActions('afterInsertTargets', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Number} [index] + * @param {Element} [sibling] + * @param {string} [position] + * @return {Element} + */ + + getNextSibling: function(index, sibling, position) { + var self = this, + element = null; + + index = Math.max(index, 0); + + if (sibling && position === 'before') { + // Explicit sibling + + element = sibling; + } else if (sibling && position === 'after') { + // Explicit sibling + + element = sibling.nextElementSibling || null; + } else if (self.targets.length > 0 && typeof index !== 'undefined') { + // Index and targets exist + + element = (index < self.targets.length || !self.targets.length) ? + self.targets[index].dom.el : + self.targets[self.targets.length - 1].dom.el.nextElementSibling; + } else if (self.targets.length === 0 && self.dom.parent.children.length > 0) { + // No targets but other siblings + + if (self.config.layout.siblingAfter) { + element = self.config.layout.siblingAfter; + } else if (self.config.layout.siblingBefore) { + element = self.config.layout.siblingBefore.nextElementSibling; + } else { + self.dom.parent.children[0]; + } + } else { + element === null; + } + + return self.callFilters('elementGetNextSibling', element, arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + filterOperation: function(operation) { + var self = this, + testResult = false, + index = -1, + action = '', + target = null, + i = -1; + + self.callActions('beforeFilterOperation', arguments); + + action = operation.newFilter.action; + + for (i = 0; target = operation.newOrder[i]; i++) { + if (operation.newFilter.collection) { + // show via collection + + testResult = operation.newFilter.collection.indexOf(target.dom.el) > -1; + } else { + // show via selector + + if (operation.newFilter.selector === '') { + testResult = false; + } else { + testResult = target.dom.el.matches(operation.newFilter.selector); + } + } + + self.evaluateHideShow(testResult, target, action, operation); + } + + if (operation.toRemove.length) { + for (i = 0; target = operation.show[i]; i++) { + if (operation.toRemove.indexOf(target) > -1) { + // If any shown targets should be removed, move them into the toHide array + + operation.show.splice(i, 1); + + if ((index = operation.toShow.indexOf(target)) > -1) { + operation.toShow.splice(index, 1); + } + + operation.toHide.push(target); + operation.hide.push(target); + + i--; + } + } + } + + operation.matching = operation.show.slice(); + + if (operation.show.length === 0 && operation.newFilter.selector !== '' && self.targets.length !== 0) { + operation.hasFailed = true; + } + + self.callActions('afterFilterOperation', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {boolean} testResult + * @param {Element} target + * @param {string} action + * @param {Operation} operation + * @return {void} + */ + + evaluateHideShow: function(testResult, target, action, operation) { + var self = this, + filteredTestResult = false, + args = Array.prototype.slice.call(arguments, 1); + + filteredTestResult = self.callFilters('testResultEvaluateHideShow', testResult, args); + + self.callActions('beforeEvaluateHideShow', arguments); + + if ( + filteredTestResult === true && action === 'show' || + filteredTestResult === false && action === 'hide' + ) { + operation.show.push(target); + + !target.isShown && operation.toShow.push(target); + } else { + operation.hide.push(target); + + target.isShown && operation.toHide.push(target); + } + + self.callActions('afterEvaluateHideShow', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + sortOperation: function(operation) { + var self = this, + newOrder = [], + target = null, + el = null, + i = -1; + + self.callActions('beforeSortOperation', arguments); + + operation.startOrder = self.targets; + + if (operation.newSort.collection) { + // Sort by collection + + newOrder = []; + + for (i = 0; (el = operation.newSort.collection[i]); i++) { + if (self.dom.targets.indexOf(el) < 0) { + throw new Error(mixitup.messages.errorSortNonExistentElement()); + } + + target = new mixitup.Target(); + + target.init(el, self); + + target.isInDom = true; + + newOrder.push(target); + } + + operation.newOrder = newOrder; + } else if (operation.newSort.order === 'random') { + // Sort random + + operation.newOrder = h.arrayShuffle(operation.startOrder); + } else if (operation.newSort.attribute === '') { + // Sort by default + + operation.newOrder = self.origOrder.slice(); + + if (operation.newSort.order === 'desc') { + operation.newOrder.reverse(); + } + } else { + // Sort by attribute + + operation.newOrder = operation.startOrder.slice(); + + operation.newOrder.sort(function(a, b) { + return self.compare(a, b, operation.newSort); + }); + } + + if (h.isEqualArray(operation.newOrder, operation.startOrder)) { + operation.willSort = false; + } + + self.callActions('afterSortOperation', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {mixitup.Target} a + * @param {mixitup.Target} b + * @param {mixitup.CommandSort} command + * @return {Number} + */ + + compare: function(a, b, command) { + var self = this, + order = command.order, + attrA = self.getAttributeValue(a, command.attribute), + attrB = self.getAttributeValue(b, command.attribute); + + if (isNaN(attrA * 1) || isNaN(attrB * 1)) { + attrA = attrA.toLowerCase(); + attrB = attrB.toLowerCase(); + } else { + attrA = attrA * 1; + attrB = attrB * 1; + } + + if (attrA < attrB) { + return order === 'asc' ? -1 : 1; + } + + if (attrA > attrB) { + return order === 'asc' ? 1 : -1; + } + + if (attrA === attrB && command.next) { + return self.compare(a, b, command.next); + } + + return 0; + }, + + /** + * Reads the values of any data attributes present the provided target element + * which match the current sort command. + * + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.Target} target + * @param {string} [attribute] + * @return {(String|Number)} + */ + + getAttributeValue: function(target, attribute) { + var self = this, + value = ''; + + value = target.dom.el.getAttribute('data-' + attribute); + + if (value === null) { + if (self.config.debug.showWarnings) { + // Encourage users to assign values to all targets to avoid erroneous sorting + // when types are mixed + + console.warn(mixitup.messages.warningInconsistentSortingAttributes({ + attribute: 'data-' + attribute + })); + } + } + + // If an attribute is not present, return 0 as a safety value + + return self.callFilters('valueGetAttributeValue', value || 0, arguments); + }, + + /** + * Inserts elements into the DOM in the appropriate + * order using a document fragment for minimal + * DOM thrashing + * + * @private + * @instance + * @since 2.0.0 + * @param {boolean} isResetting + * @param {Operation} operation + * @return {void} + */ + + printSort: function(isResetting, operation) { + var self = this, + startOrder = isResetting ? operation.newOrder : operation.startOrder, + newOrder = isResetting ? operation.startOrder : operation.newOrder, + nextSibling = startOrder.length ? startOrder[startOrder.length - 1].dom.el.nextElementSibling : null, + frag = window.document.createDocumentFragment(), + whitespace = null, + target = null, + el = null, + i = -1; + + self.callActions('beforePrintSort', arguments); + + // Empty the container + + for (i = 0; target = startOrder[i]; i++) { + el = target.dom.el; + + if (el.style.position === 'absolute') continue; + + h.removeWhitespace(el.previousSibling); + + el.parentElement.removeChild(el); + } + + whitespace = nextSibling ? nextSibling.previousSibling : self.dom.parent.lastChild; + + if (whitespace && whitespace.nodeName === '#text') { + h.removeWhitespace(whitespace); + } + + for (i = 0; target = newOrder[i]; i++) { + // Add targets into a document fragment + + el = target.dom.el; + + if (h.isElement(frag.lastChild)) { + frag.appendChild(window.document.createTextNode(' ')); + } + + frag.appendChild(el); + } + + // Insert the document fragment into the container + // before any other non-target elements + + if (self.dom.parent.firstChild && self.dom.parent.firstChild !== nextSibling) { + frag.insertBefore(window.document.createTextNode(' '), frag.childNodes[0]); + } + + if (nextSibling) { + frag.appendChild(window.document.createTextNode(' ')); + + self.dom.parent.insertBefore(frag, nextSibling); + } else { + self.dom.parent.appendChild(frag); + } + + self.callActions('afterPrintSort', arguments); + }, + + /** + * Parses user-defined sort strings (i.e. `default:asc`) into sort commands objects. + * + * @private + * @instance + * @since 3.0.0 + * @param {string} sortString + * @param {mixitup.CommandSort} command + * @return {mixitup.CommandSort} + */ + + parseSortString: function(sortString, command) { + var self = this, + rules = sortString.split(' '), + current = command, + rule = [], + i = -1; + + // command.sortString = sortString; + + for (i = 0; i < rules.length; i++) { + rule = rules[i].split(':'); + + current.sortString = rules[i]; + current.attribute = h.dashCase(rule[0]); + current.order = rule[1] || 'asc'; + + switch (current.attribute) { + case 'default': + // treat "default" as sorting by no attribute + + current.attribute = ''; + + break; + case 'random': + // treat "random" as an order not an attribute + + current.attribute = ''; + current.order = 'random'; + + break; + } + + if (!current.attribute || current.order === 'random') break; + + if (i < rules.length - 1) { + // Embed reference to the next command + + current.next = new mixitup.CommandSort(); + + h.freeze(current); + + current = current.next; + } + } + + return self.callFilters('commandsParseSort', command, arguments); + }, + + /** + * Parses all effects out of the user-defined `animation.effects` string into + * their respective properties and units. + * + * @private + * @instance + * @since 2.0.0 + * @return {void} + */ + + parseEffects: function() { + var self = this, + transformName = '', + effectsIn = self.config.animation.effectsIn || self.config.animation.effects, + effectsOut = self.config.animation.effectsOut || self.config.animation.effects; + + self.callActions('beforeParseEffects', arguments); + + self.effectsIn = new mixitup.StyleData(); + self.effectsOut = new mixitup.StyleData(); + self.transformIn = []; + self.transformOut = []; + + self.effectsIn.opacity = self.effectsOut.opacity = 1; + + self.parseEffect('fade', effectsIn, self.effectsIn, self.transformIn); + self.parseEffect('fade', effectsOut, self.effectsOut, self.transformOut, true); + + for (transformName in mixitup.transformDefaults) { + if (!(mixitup.transformDefaults[transformName] instanceof mixitup.TransformData)) { + continue; + } + + self.parseEffect(transformName, effectsIn, self.effectsIn, self.transformIn); + self.parseEffect(transformName, effectsOut, self.effectsOut, self.transformOut, true); + } + + self.parseEffect('stagger', effectsIn, self.effectsIn, self.transformIn); + self.parseEffect('stagger', effectsOut, self.effectsOut, self.transformOut, true); + + self.callActions('afterParseEffects', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {string} effectName + * @param {string} effectString + * @param {StyleData} effects + * @param {String[]} transform + * @param {boolean} [isOut] + */ + + parseEffect: function(effectName, effectString, effects, transform, isOut) { + var self = this, + re = /\(([^)]+)\)/, + propIndex = -1, + str = '', + match = [], + val = '', + units = ['%', 'px', 'em', 'rem', 'vh', 'vw', 'deg'], + unit = '', + i = -1; + + self.callActions('beforeParseEffect', arguments); + + if (typeof effectString !== 'string') { + throw new TypeError(mixitup.messages.errorConfigInvalidAnimationEffects()); + } + + if (effectString.indexOf(effectName) < 0) { + // The effect is not present in the effects string + + if (effectName === 'stagger') { + // Reset stagger to 0 + + self.staggerDuration = 0; + } + + return; + } + + // The effect is present + + propIndex = effectString.indexOf(effectName + '('); + + if (propIndex > -1) { + // The effect has a user defined value in parentheses + + // Extract from the first parenthesis to the end of string + + str = effectString.substring(propIndex); + + // Match any number of characters between "(" and ")" + + match = re.exec(str); + + val = match[1]; + } + + switch (effectName) { + case 'fade': + effects.opacity = val ? parseFloat(val) : 0; + + break; + case 'stagger': + self.staggerDuration = val ? parseFloat(val) : 100; + + // TODO: Currently stagger must be applied globally, but + // if seperate values are specified for in/out, this should + // be respected + + break; + default: + // All other effects are transforms following the same structure + + if (isOut && self.config.animation.reverseOut && effectName !== 'scale') { + effects[effectName].value = + (val ? parseFloat(val) : mixitup.transformDefaults[effectName].value) * -1; + } else { + effects[effectName].value = + (val ? parseFloat(val) : mixitup.transformDefaults[effectName].value); + } + + if (val) { + for (i = 0; unit = units[i]; i++) { + if (val.indexOf(unit) > -1) { + effects[effectName].unit = unit; + + break; + } + } + } else { + effects[effectName].unit = mixitup.transformDefaults[effectName].unit; + } + + transform.push( + effectName + + '(' + + effects[effectName].value + + effects[effectName].unit + + ')' + ); + } + + self.callActions('afterParseEffect', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {State} + */ + + buildState: function(operation) { + var self = this, + state = new mixitup.State(), + target = null, + i = -1; + + self.callActions('beforeBuildState', arguments); + + // Map target elements into state arrays. + // the real target objects should never be exposed + + for (i = 0; target = self.targets[i]; i++) { + if (!operation.toRemove.length || operation.toRemove.indexOf(target) < 0) { + state.targets.push(target.dom.el); + } + } + + for (i = 0; target = operation.matching[i]; i++) { + state.matching.push(target.dom.el); + } + + for (i = 0; target = operation.show[i]; i++) { + state.show.push(target.dom.el); + } + + for (i = 0; target = operation.hide[i]; i++) { + if (!operation.toRemove.length || operation.toRemove.indexOf(target) < 0) { + state.hide.push(target.dom.el); + } + } + + state.id = self.id; + state.container = self.dom.container; + state.activeFilter = operation.newFilter; + state.activeSort = operation.newSort; + state.activeDataset = operation.newDataset; + state.activeContainerClassName = operation.newContainerClassName; + state.hasFailed = operation.hasFailed; + state.totalTargets = self.targets.length; + state.totalShow = operation.show.length; + state.totalHide = operation.hide.length; + state.totalMatching = operation.matching.length; + state.triggerElement = operation.triggerElement; + + return self.callFilters('stateBuildState', state, arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {boolean} shouldAnimate + * @param {Operation} operation + * @return {void} + */ + + goMix: function(shouldAnimate, operation) { + var self = this, + deferred = null; + + self.callActions('beforeGoMix', arguments); + + // If the animation duration is set to 0ms, + // or no effects specified, + // or the container is hidden + // then abort animation + + if ( + !self.config.animation.duration || !self.config.animation.effects || !h.isVisible(self.dom.container) + ) { + shouldAnimate = false; + } + + if ( + !operation.toShow.length && + !operation.toHide.length && + !operation.willSort && + !operation.willChangeLayout + ) { + // If nothing to show or hide, and not sorting or + // changing layout + + shouldAnimate = false; + } + + if ( + !operation.startState.show.length && + !operation.show.length + ) { + // If nothing currently shown, nothing to show + + shouldAnimate = false; + } + + mixitup.events.fire('mixStart', self.dom.container, { + state: operation.startState, + futureState: operation.newState, + instance: self + }, self.dom.document); + + if (typeof self.config.callbacks.onMixStart === 'function') { + self.config.callbacks.onMixStart.call( + self.dom.container, + operation.startState, + operation.newState, + self + ); + } + + h.removeClass(self.dom.container, h.getClassname(self.config.classNames, 'container', self.config.classNames.modifierFailed)); + + if (!self.userDeferred) { + // Queue empty, no pending operations + + deferred = self.userDeferred = h.defer(mixitup.libraries); + } else { + // Use existing deferred + + deferred = self.userDeferred; + } + + self.isBusy = true; + + if (!shouldAnimate || !mixitup.features.has.transitions) { + // Abort + + if (self.config.debug.fauxAsync) { + setTimeout(function() { + self.cleanUp(operation); + }, self.config.animation.duration); + } else { + self.cleanUp(operation); + } + + return self.callFilters('promiseGoMix', deferred.promise, arguments); + } + + // If we should animate and the platform supports transitions, go for it + + if (window.pageYOffset !== operation.docState.scrollTop) { + window.scrollTo(operation.docState.scrollLeft, operation.docState.scrollTop); + } + + if (self.config.animation.applyPerspective) { + self.dom.parent.style[mixitup.features.perspectiveProp] = + self.config.animation.perspectiveDistance; + + self.dom.parent.style[mixitup.features.perspectiveOriginProp] = + self.config.animation.perspectiveOrigin; + } + + if ( + self.config.animation.animateResizeContainer && + operation.startHeight !== operation.newHeight && + operation.viewportDeltaY !== operation.startHeight - operation.newHeight + ) { + self.dom.parent.style.height = operation.startHeight + 'px'; + } + + if ( + self.config.animation.animateResizeContainer && + operation.startWidth !== operation.newWidth && + operation.viewportDeltaX !== operation.startWidth - operation.newWidth + ) { + self.dom.parent.style.width = operation.startWidth + 'px'; + } + + if (operation.startHeight === operation.newHeight) { + self.dom.parent.style.height = operation.startHeight + 'px'; + } + + if (operation.startWidth === operation.newWidth) { + self.dom.parent.style.width = operation.startWidth + 'px'; + } + + if (operation.startHeight === operation.newHeight && operation.startWidth === operation.newWidth) { + self.dom.parent.style.overflow = 'hidden'; + } + + requestAnimationFrame(function() { + self.moveTargets(operation); + }); + + return self.callFilters('promiseGoMix', deferred.promise, arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + getStartMixData: function(operation) { + var self = this, + parentStyle = window.getComputedStyle(self.dom.parent), + parentRect = self.dom.parent.getBoundingClientRect(), + target = null, + data = {}, + i = -1, + boxSizing = parentStyle[mixitup.features.boxSizingProp]; + + self.incPadding = (boxSizing === 'border-box'); + + self.callActions('beforeGetStartMixData', arguments); + + for (i = 0; target = operation.show[i]; i++) { + data = target.getPosData(); + + operation.showPosData[i] = { + startPosData: data + }; + } + + for (i = 0; target = operation.toHide[i]; i++) { + data = target.getPosData(); + + operation.toHidePosData[i] = { + startPosData: data + }; + } + + operation.startX = parentRect.left; + operation.startY = parentRect.top; + + operation.startHeight = self.incPadding ? + parentRect.height : + parentRect.height - + parseFloat(parentStyle.paddingTop) - + parseFloat(parentStyle.paddingBottom) - + parseFloat(parentStyle.borderTop) - + parseFloat(parentStyle.borderBottom); + + operation.startWidth = self.incPadding ? + parentRect.width : + parentRect.width - + parseFloat(parentStyle.paddingLeft) - + parseFloat(parentStyle.paddingRight) - + parseFloat(parentStyle.borderLeft) - + parseFloat(parentStyle.borderRight); + + self.callActions('afterGetStartMixData', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + setInter: function(operation) { + var self = this, + target = null, + i = -1; + + self.callActions('beforeSetInter', arguments); + + // Prevent scrollbar flicker on non-inertial scroll platforms by clamping height/width + + if (self.config.animation.clampHeight) { + self.dom.parent.style.height = operation.startHeight + 'px'; + self.dom.parent.style.overflow = 'hidden'; + } + + if (self.config.animation.clampWidth) { + self.dom.parent.style.width = operation.startWidth + 'px'; + self.dom.parent.style.overflow = 'hidden'; + } + + for (i = 0; target = operation.toShow[i]; i++) { + target.show(); + } + + if (operation.willChangeLayout) { + h.removeClass(self.dom.container, operation.startContainerClassName); + h.addClass(self.dom.container, operation.newContainerClassName); + } + + self.callActions('afterSetInter', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + getInterMixData: function(operation) { + var self = this, + target = null, + i = -1; + + self.callActions('beforeGetInterMixData', arguments); + + for (i = 0; target = operation.show[i]; i++) { + operation.showPosData[i].interPosData = target.getPosData(); + } + + for (i = 0; target = operation.toHide[i]; i++) { + operation.toHidePosData[i].interPosData = target.getPosData(); + } + + self.callActions('afterGetInterMixData', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + setFinal: function(operation) { + var self = this, + target = null, + i = -1; + + self.callActions('beforeSetFinal', arguments); + + operation.willSort && self.printSort(false, operation); + + for (i = 0; target = operation.toHide[i]; i++) { + target.hide(); + } + + self.callActions('afterSetFinal', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + getFinalMixData: function(operation) { + var self = this, + parentStyle = null, + parentRect = null, + target = null, + i = -1; + + self.callActions('beforeGetFinalMixData', arguments); + + for (i = 0; target = operation.show[i]; i++) { + operation.showPosData[i].finalPosData = target.getPosData(); + } + + for (i = 0; target = operation.toHide[i]; i++) { + operation.toHidePosData[i].finalPosData = target.getPosData(); + } + + // Remove clamping + + if (self.config.animation.clampHeight || self.config.animation.clampWidth) { + self.dom.parent.style.height = + self.dom.parent.style.width = + self.dom.parent.style.overflow = ''; + } + + if (!self.incPadding) { + parentStyle = window.getComputedStyle(self.dom.parent); + } + + parentRect = self.dom.parent.getBoundingClientRect(); + + operation.newX = parentRect.left; + operation.newY = parentRect.top; + + operation.newHeight = self.incPadding ? + parentRect.height : + parentRect.height - + parseFloat(parentStyle.paddingTop) - + parseFloat(parentStyle.paddingBottom) - + parseFloat(parentStyle.borderTop) - + parseFloat(parentStyle.borderBottom); + + operation.newWidth = self.incPadding ? + parentRect.width : + parentRect.width - + parseFloat(parentStyle.paddingLeft) - + parseFloat(parentStyle.paddingRight) - + parseFloat(parentStyle.borderLeft) - + parseFloat(parentStyle.borderRight); + + operation.viewportDeltaX = operation.docState.viewportWidth - this.dom.document.documentElement.clientWidth; + operation.viewportDeltaY = operation.docState.viewportHeight - this.dom.document.documentElement.clientHeight; + + if (operation.willSort) { + self.printSort(true, operation); + } + + for (i = 0; target = operation.toShow[i]; i++) { + target.hide(); + } + + for (i = 0; target = operation.toHide[i]; i++) { + target.show(); + } + + if (operation.willChangeLayout) { + h.removeClass(self.dom.container, operation.newContainerClassName); + h.addClass(self.dom.container, self.config.layout.containerClassName); + } + + self.callActions('afterGetFinalMixData', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Operation} operation + */ + + getTweenData: function(operation) { + var self = this, + target = null, + posData = null, + effectNames = Object.getOwnPropertyNames(self.effectsIn), + effectName = '', + effect = null, + widthChange = -1, + heightChange = -1, + i = -1, + j = -1; + + self.callActions('beforeGetTweenData', arguments); + + for (i = 0; target = operation.show[i]; i++) { + posData = operation.showPosData[i]; + posData.posIn = new mixitup.StyleData(); + posData.posOut = new mixitup.StyleData(); + posData.tweenData = new mixitup.StyleData(); + + // Process x and y + + if (target.isShown) { + posData.posIn.x = posData.startPosData.x - posData.interPosData.x; + posData.posIn.y = posData.startPosData.y - posData.interPosData.y; + } else { + posData.posIn.x = posData.posIn.y = 0; + } + + posData.posOut.x = posData.finalPosData.x - posData.interPosData.x; + posData.posOut.y = posData.finalPosData.y - posData.interPosData.y; + + // Process opacity + + posData.posIn.opacity = target.isShown ? 1 : self.effectsIn.opacity; + posData.posOut.opacity = 1; + posData.tweenData.opacity = posData.posOut.opacity - posData.posIn.opacity; + + // Adjust x and y if not nudging + + if (!target.isShown && !self.config.animation.nudge) { + posData.posIn.x = posData.posOut.x; + posData.posIn.y = posData.posOut.y; + } + + posData.tweenData.x = posData.posOut.x - posData.posIn.x; + posData.tweenData.y = posData.posOut.y - posData.posIn.y; + + // Process width, height, and margins + + if (self.config.animation.animateResizeTargets) { + posData.posIn.width = posData.startPosData.width; + posData.posIn.height = posData.startPosData.height; + + // "||" Prevents width/height change from including 0 width/height if hiding or showing + + widthChange = (posData.startPosData.width || posData.finalPosData.width) - posData.interPosData.width; + + posData.posIn.marginRight = posData.startPosData.marginRight - widthChange; + + heightChange = (posData.startPosData.height || posData.finalPosData.height) - posData.interPosData.height; + + posData.posIn.marginBottom = posData.startPosData.marginBottom - heightChange; + + posData.posOut.width = posData.finalPosData.width; + posData.posOut.height = posData.finalPosData.height; + + widthChange = (posData.finalPosData.width || posData.startPosData.width) - posData.interPosData.width; + + posData.posOut.marginRight = posData.finalPosData.marginRight - widthChange; + + heightChange = (posData.finalPosData.height || posData.startPosData.height) - posData.interPosData.height; + + posData.posOut.marginBottom = posData.finalPosData.marginBottom - heightChange; + + posData.tweenData.width = posData.posOut.width - posData.posIn.width; + posData.tweenData.height = posData.posOut.height - posData.posIn.height; + posData.tweenData.marginRight = posData.posOut.marginRight - posData.posIn.marginRight; + posData.tweenData.marginBottom = posData.posOut.marginBottom - posData.posIn.marginBottom; + } + + // Process transforms + + for (j = 0; effectName = effectNames[j]; j++) { + effect = self.effectsIn[effectName]; + + if (!(effect instanceof mixitup.TransformData) || !effect.value) continue; + + posData.posIn[effectName].value = effect.value; + posData.posOut[effectName].value = 0; + + posData.tweenData[effectName].value = + posData.posOut[effectName].value - posData.posIn[effectName].value; + + posData.posIn[effectName].unit = + posData.posOut[effectName].unit = + posData.tweenData[effectName].unit = + effect.unit; + } + } + + for (i = 0; target = operation.toHide[i]; i++) { + posData = operation.toHidePosData[i]; + posData.posIn = new mixitup.StyleData(); + posData.posOut = new mixitup.StyleData(); + posData.tweenData = new mixitup.StyleData(); + + // Process x and y + + posData.posIn.x = target.isShown ? posData.startPosData.x - posData.interPosData.x : 0; + posData.posIn.y = target.isShown ? posData.startPosData.y - posData.interPosData.y : 0; + posData.posOut.x = self.config.animation.nudge ? 0 : posData.posIn.x; + posData.posOut.y = self.config.animation.nudge ? 0 : posData.posIn.y; + posData.tweenData.x = posData.posOut.x - posData.posIn.x; + posData.tweenData.y = posData.posOut.y - posData.posIn.y; + + // Process width, height, and margins + + if (self.config.animation.animateResizeTargets) { + posData.posIn.width = posData.startPosData.width; + posData.posIn.height = posData.startPosData.height; + + widthChange = posData.startPosData.width - posData.interPosData.width; + + posData.posIn.marginRight = posData.startPosData.marginRight - widthChange; + + heightChange = posData.startPosData.height - posData.interPosData.height; + + posData.posIn.marginBottom = posData.startPosData.marginBottom - heightChange; + } + + // Process opacity + + posData.posIn.opacity = 1; + posData.posOut.opacity = self.effectsOut.opacity; + posData.tweenData.opacity = posData.posOut.opacity - posData.posIn.opacity; + + // Process transforms + + for (j = 0; effectName = effectNames[j]; j++) { + effect = self.effectsOut[effectName]; + + if (!(effect instanceof mixitup.TransformData) || !effect.value) continue; + + posData.posIn[effectName].value = 0; + posData.posOut[effectName].value = effect.value; + + posData.tweenData[effectName].value = + posData.posOut[effectName].value - posData.posIn[effectName].value; + + posData.posIn[effectName].unit = + posData.posOut[effectName].unit = + posData.tweenData[effectName].unit = + effect.unit; + } + } + + self.callActions('afterGetTweenData', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Operation} operation + * @return {void} + */ + + moveTargets: function(operation) { + var self = this, + target = null, + moveData = null, + posData = null, + statusChange = '', + willTransition = false, + staggerIndex = -1, + i = -1, + checkProgress = self.checkProgress.bind(self); + + self.callActions('beforeMoveTargets', arguments); + + // TODO: this is an extra loop in addition to the calcs + // done in getOperation, could some of this be done there? + + for (i = 0; target = operation.show[i]; i++) { + moveData = new mixitup.IMoveData(); + posData = operation.showPosData[i]; + + statusChange = target.isShown ? 'none' : 'show'; + + willTransition = self.willTransition( + statusChange, + operation.hasEffect, + posData.posIn, + posData.posOut + ); + + if (willTransition) { + // Prevent non-transitioning targets from incrementing the staggerIndex + + staggerIndex++; + } + + target.show(); + + moveData.posIn = posData.posIn; + moveData.posOut = posData.posOut; + moveData.statusChange = statusChange; + moveData.staggerIndex = staggerIndex; + moveData.operation = operation; + moveData.callback = willTransition ? checkProgress : null; + + target.move(moveData); + } + + for (i = 0; target = operation.toHide[i]; i++) { + posData = operation.toHidePosData[i]; + moveData = new mixitup.IMoveData(); + + statusChange = 'hide'; + + willTransition = self.willTransition(statusChange, posData.posIn, posData.posOut); + + moveData.posIn = posData.posIn; + moveData.posOut = posData.posOut; + moveData.statusChange = statusChange; + moveData.staggerIndex = i; + moveData.operation = operation; + moveData.callback = willTransition ? checkProgress : null; + + target.move(moveData); + } + + if (self.config.animation.animateResizeContainer) { + self.dom.parent.style[mixitup.features.transitionProp] = + 'height ' + self.config.animation.duration + 'ms ease, ' + + 'width ' + self.config.animation.duration + 'ms ease '; + + requestAnimationFrame(function() { + if ( + operation.startHeight !== operation.newHeight && + operation.viewportDeltaY !== operation.startHeight - operation.newHeight + ) { + self.dom.parent.style.height = operation.newHeight + 'px'; + } + + if ( + operation.startWidth !== operation.newWidth && + operation.viewportDeltaX !== operation.startWidth - operation.newWidth + ) { + self.dom.parent.style.width = operation.newWidth + 'px'; + } + }); + } + + if (operation.willChangeLayout) { + h.removeClass(self.dom.container, self.config.layout.ContainerClassName); + h.addClass(self.dom.container, operation.newContainerClassName); + } + + self.callActions('afterMoveTargets', arguments); + }, + + /** + * @private + * @instance + * @return {boolean} + */ + + hasEffect: function() { + var self = this, + EFFECTABLES = [ + 'scale', + 'translateX', 'translateY', 'translateZ', + 'rotateX', 'rotateY', 'rotateZ' + ], + effectName = '', + effect = null, + result = false, + value = -1, + i = -1; + + if (self.effectsIn.opacity !== 1) { + return self.callFilters('resultHasEffect', true, arguments); + } + + for (i = 0; effectName = EFFECTABLES[i]; i++) { + effect = self.effectsIn[effectName]; + value = (typeof effect && effect.value !== 'undefined') ? + effect.value : effect; + + if (value !== 0) { + result = true; + + break; + } + } + + return self.callFilters('resultHasEffect', result, arguments); + }, + + /** + * Determines if a target element will transition in + * some fasion and therefore requires binding of + * transitionEnd + * + * @private + * @instance + * @since 3.0.0 + * @param {string} statusChange + * @param {boolean} hasEffect + * @param {StyleData} posIn + * @param {StyleData} posOut + * @return {boolean} + */ + + willTransition: function(statusChange, hasEffect, posIn, posOut) { + var self = this, + result = false; + + if (!h.isVisible(self.dom.container)) { + // If the container is not visible, the transitionEnd + // event will not occur and MixItUp will hang + + result = false; + } else if ( + (statusChange !== 'none' && hasEffect) || + posIn.x !== posOut.x || + posIn.y !== posOut.y + ) { + // If opacity and/or translate will change + + result = true; + } else if (self.config.animation.animateResizeTargets) { + // Check if width, height or margins will change + + result = ( + posIn.width !== posOut.width || + posIn.height !== posOut.height || + posIn.marginRight !== posOut.marginRight || + posIn.marginTop !== posOut.marginTop + ); + } else { + result = false; + } + + return self.callFilters('resultWillTransition', result, arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + checkProgress: function(operation) { + var self = this; + + self.targetsDone++; + + if (self.targetsBound === self.targetsDone) { + self.cleanUp(operation); + } + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Operation} operation + * @return {void} + */ + + cleanUp: function(operation) { + var self = this, + target = null, + whitespaceBefore = null, + whitespaceAfter = null, + nextInQueue = null, + i = -1; + + self.callActions('beforeCleanUp', arguments); + + self.targetsMoved = + self.targetsImmovable = + self.targetsBound = + self.targetsDone = 0; + + for (i = 0; target = operation.show[i]; i++) { + target.cleanUp(); + + target.show(); + } + + for (i = 0; target = operation.toHide[i]; i++) { + target.cleanUp(); + + target.hide(); + } + + if (operation.willSort) { + self.printSort(false, operation); + } + + // Remove any styles applied to the parent container + + self.dom.parent.style[mixitup.features.transitionProp] = + self.dom.parent.style.height = + self.dom.parent.style.width = + self.dom.parent.style.overflow = + self.dom.parent.style[mixitup.features.perspectiveProp] = + self.dom.parent.style[mixitup.features.perspectiveOriginProp] = ''; + + if (operation.willChangeLayout) { + h.removeClass(self.dom.container, operation.startContainerClassName); + h.addClass(self.dom.container, operation.newContainerClassName); + } + + if (operation.toRemove.length) { + for (i = 0; target = self.targets[i]; i++) { + if (operation.toRemove.indexOf(target) > -1) { + if ( + (whitespaceBefore = target.dom.el.previousSibling) && whitespaceBefore.nodeName === '#text' && + (whitespaceAfter = target.dom.el.nextSibling) && whitespaceAfter.nodeName === '#text' + ) { + h.removeWhitespace(whitespaceBefore); + } + + if (!operation.willSort) { + // NB: Sorting will remove targets as a bi-product of `printSort()` + + self.dom.parent.removeChild(target.dom.el); + } + + self.targets.splice(i, 1); + + target.isInDom = false; + + i--; + } + } + + // Since targets have been removed, the original order must be updated + + self.origOrder = self.targets; + } + + if (operation.willSort) { + self.targets = operation.newOrder; + } + + self.state = operation.newState; + self.lastOperation = operation; + + self.dom.targets = self.state.targets; + + // mixEnd + + mixitup.events.fire('mixEnd', self.dom.container, { + state: self.state, + instance: self + }, self.dom.document); + + if (typeof self.config.callbacks.onMixEnd === 'function') { + self.config.callbacks.onMixEnd.call(self.dom.container, self.state, self); + } + + if (operation.hasFailed) { + // mixFail + + mixitup.events.fire('mixFail', self.dom.container, { + state: self.state, + instance: self + }, self.dom.document); + + if (typeof self.config.callbacks.onMixFail === 'function') { + self.config.callbacks.onMixFail.call(self.dom.container, self.state, self); + } + + h.addClass(self.dom.container, h.getClassname(self.config.classNames, 'container', self.config.classNames.modifierFailed)); + } + + // User-defined callback function + + if (typeof self.userCallback === 'function') { + self.userCallback.call(self.dom.container, self.state, self); + } + + if (typeof self.userDeferred.resolve === 'function') { + self.userDeferred.resolve(self.state); + } + + self.userCallback = null; + self.userDeferred = null; + self.lastClicked = null; + self.isToggling = false; + self.isBusy = false; + + if (self.queue.length) { + self.callActions('beforeReadQueueCleanUp', arguments); + + nextInQueue = self.queue.shift(); + + // Update non-public API properties stored in queue + + self.userDeferred = nextInQueue.deferred; + self.isToggling = nextInQueue.isToggling; + self.lastClicked = nextInQueue.triggerElement; + + if (nextInQueue.instruction.command instanceof mixitup.CommandMultimix) { + self.multimix.apply(self, nextInQueue.args); + } else { + self.dataset.apply(self, nextInQueue.args); + } + } + + self.callActions('afterCleanUp', arguments); + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseMultimixArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandMultimix(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + if (typeof arg === 'object') { + h.extend(instruction.command, arg); + } else if (typeof arg === 'boolean') { + instruction.animate = arg; + } else if (typeof arg === 'function') { + instruction.callback = arg; + } + } + + // Coerce arbitrary command arguments into typed command objects + + if (instruction.command.insert && !(instruction.command.insert instanceof mixitup.CommandInsert)) { + instruction.command.insert = self.parseInsertArgs([instruction.command.insert]).command; + } + + if (instruction.command.remove && !(instruction.command.remove instanceof mixitup.CommandRemove)) { + instruction.command.remove = self.parseRemoveArgs([instruction.command.remove]).command; + } + + if (instruction.command.filter && !(instruction.command.filter instanceof mixitup.CommandFilter)) { + instruction.command.filter = self.parseFilterArgs([instruction.command.filter]).command; + } + + if (instruction.command.sort && !(instruction.command.sort instanceof mixitup.CommandSort)) { + instruction.command.sort = self.parseSortArgs([instruction.command.sort]).command; + } + + if (instruction.command.changeLayout && !(instruction.command.changeLayout instanceof mixitup.CommandChangeLayout)) { + instruction.command.changeLayout = self.parseChangeLayoutArgs([instruction.command.changeLayout]).command; + } + + instruction = self.callFilters('instructionParseMultimixArgs', instruction, arguments); + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseFilterArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandFilter(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (typeof arg === 'string') { + // Selector + + instruction.command.selector = arg; + } else if (arg === null) { + instruction.command.collection = []; + } else if (typeof arg === 'object' && h.isElement(arg, self.dom.document)) { + // Single element + + instruction.command.collection = [arg]; + } else if (typeof arg === 'object' && typeof arg.length !== 'undefined') { + // Multiple elements in array, NodeList or jQuery collection + + instruction.command.collection = h.arrayFromList(arg); + } else if (typeof arg === 'object') { + // Filter command + + h.extend(instruction.command, arg); + } else if (typeof arg === 'boolean') { + instruction.animate = arg; + } else if (typeof arg === 'function') { + instruction.callback = arg; + } + } + + if (instruction.command.selector && instruction.command.collection) { + throw new Error(mixitup.messages.errorFilterInvalidArguments()); + } + + instruction = self.callFilters('instructionParseFilterArgs', instruction, arguments); + + h.freeze(instruction); + + return instruction; + }, + + parseSortArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + sortString = '', + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandSort(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + switch (typeof arg) { + case 'string': + // Sort string + + sortString = arg; + + break; + case 'object': + // Array of element references + + if (arg.length) { + instruction.command.collection = h.arrayFromList(arg); + } + + break; + case 'boolean': + instruction.animate = arg; + + break; + case 'function': + instruction.callback = arg; + + break; + } + } + + if (sortString) { + instruction.command = self.parseSortString(sortString, instruction.command); + } + + instruction = self.callFilters('instructionParseSortArgs', instruction, arguments); + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 2.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseInsertArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandInsert(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + if (typeof arg === 'number') { + // Insert index + + instruction.command.index = arg; + } else if (typeof arg === 'string' && ['before', 'after'].indexOf(arg) > -1) { + // 'before'/'after' + + instruction.command.position = arg; + } else if (typeof arg === 'string') { + // Markup + + instruction.command.collection = + h.arrayFromList(h.createElement(arg).childNodes); + } else if (typeof arg === 'object' && h.isElement(arg, self.dom.document)) { + // Single element + + !instruction.command.collection.length ? + (instruction.command.collection = [arg]) : + (instruction.command.sibling = arg); + } else if (typeof arg === 'object' && arg.length) { + // Multiple elements in array or jQuery collection + + !instruction.command.collection.length ? + (instruction.command.collection = arg) : + instruction.command.sibling = arg[0]; + } else if (typeof arg === 'object' && arg.childNodes && arg.childNodes.length) { + // Document fragment + + !instruction.command.collection.length ? + instruction.command.collection = h.arrayFromList(arg.childNodes) : + instruction.command.sibling = arg.childNodes[0]; + } else if (typeof arg === 'object') { + // Insert command + + h.extend(instruction.command, arg); + } else if (typeof arg === 'boolean') { + instruction.animate = arg; + } else if (typeof arg === 'function') { + instruction.callback = arg; + } + } + + if (instruction.command.index && instruction.command.sibling) { + throw new Error(mixitup.messages.errorInsertInvalidArguments()); + } + + if (!instruction.command.collection.length && self.config.debug.showWarnings) { + console.warn(mixitup.messages.warningInsertNoElements()); + } + + instruction = self.callFilters('instructionParseInsertArgs', instruction, arguments); + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseRemoveArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + target = null, + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandRemove(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + switch (typeof arg) { + case 'number': + if (self.targets[arg]) { + instruction.command.targets[0] = self.targets[arg]; + } + + break; + case 'string': + instruction.command.collection = h.arrayFromList(self.dom.parent.querySelectorAll(arg)); + + break; + case 'object': + if (arg && arg.length) { + instruction.command.collection = arg; + } else if (h.isElement(arg, self.dom.document)) { + instruction.command.collection = [arg]; + } else { + // Remove command + + h.extend(instruction.command, arg); + } + + break; + case 'boolean': + instruction.animate = arg; + + break; + case 'function': + instruction.callback = arg; + + break; + } + } + + if (instruction.command.collection.length) { + for (i = 0; target = self.targets[i]; i++) { + if (instruction.command.collection.indexOf(target.dom.el) > -1) { + instruction.command.targets.push(target); + } + } + } + + if (!instruction.command.targets.length && self.config.debug.showWarnings) { + console.warn(mixitup.messages.warningRemoveNoElements()); + } + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseDatasetArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandDataset(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + switch (typeof arg) { + case 'object': + if (Array.isArray(arg) || typeof arg.length === 'number') { + instruction.command.dataset = arg; + } else { + // Change layout command + + h.extend(instruction.command, arg); + } + + break; + case 'boolean': + instruction.animate = arg; + + break; + case 'function': + instruction.callback = arg; + + break; + } + } + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Array<*>} args + * @return {mixitup.UserInstruction} + */ + + parseChangeLayoutArgs: function(args) { + var self = this, + instruction = new mixitup.UserInstruction(), + arg = null, + i = -1; + + instruction.animate = self.config.animation.enable; + instruction.command = new mixitup.CommandChangeLayout(); + + for (i = 0; i < args.length; i++) { + arg = args[i]; + + if (arg === null) continue; + + switch (typeof arg) { + case 'string': + instruction.command.containerClassName = arg; + + break; + case 'object': + // Change layout command + + h.extend(instruction.command, arg); + + break; + case 'boolean': + instruction.animate = arg; + + break; + case 'function': + instruction.callback = arg; + + break; + } + } + + h.freeze(instruction); + + return instruction; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.QueueItem} queueItem + * @return {Promise.} + */ + + queueMix: function(queueItem) { + var self = this, + deferred = null, + toggleSelector = ''; + + self.callActions('beforeQueueMix', arguments); + + deferred = h.defer(mixitup.libraries); + + if (self.config.animation.queue && self.queue.length < self.config.animation.queueLimit) { + queueItem.deferred = deferred; + + self.queue.push(queueItem); + + // Keep controls in sync with user interactions. Mixer will catch up as it drains the queue. + + if (self.config.controls.enable) { + if (self.isToggling) { + self.buildToggleArray(queueItem.instruction.command); + + toggleSelector = self.getToggleSelector(); + + self.updateControls({ + filter: { + selector: toggleSelector + } + }); + } else { + self.updateControls(queueItem.instruction.command); + } + } + } else { + if (self.config.debug.showWarnings) { + console.warn(mixitup.messages.warningMultimixInstanceQueueFull()); + } + + deferred.resolve(self.state); + + mixitup.events.fire('mixBusy', self.dom.container, { + state: self.state, + instance: self + }, self.dom.document); + + if (typeof self.config.callbacks.onMixBusy === 'function') { + self.config.callbacks.onMixBusy.call(self.dom.container, self.state, self); + } + } + + return self.callFilters('promiseQueueMix', deferred.promise, arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Array.} newDataset + * @return {Operation} + */ + + getDataOperation: function(newDataset) { + var self = this, + operation = new mixitup.Operation(), + startDataset = []; + + operation = self.callFilters('operationUnmappedGetDataOperation', operation, arguments); + + if (self.dom.targets.length && !(startDataset = (self.state.activeDataset || [])).length) { + throw new Error(mixitup.messages.errorDatasetNotSet()); + } + + operation.id = h.randomHex(); + operation.startState = self.state; + operation.startDataset = startDataset; + operation.newDataset = newDataset.slice(); + + self.diffDatasets(operation); + + operation.startOrder = self.targets; + operation.newOrder = operation.show; + + if (self.config.animation.enable) { + self.getStartMixData(operation); + self.setInter(operation); + + operation.docState = h.getDocumentState(self.dom.document); + + self.getInterMixData(operation); + self.setFinal(operation); + self.getFinalMixData(operation); + + self.parseEffects(); + + operation.hasEffect = self.hasEffect(); + + self.getTweenData(operation); + } + + self.targets = operation.show.slice(); + + operation.newState = self.buildState(operation); + + // NB: Targets to be removed must be included in `self.targets` for removal during clean up, + // but are added after state is built so that state is accurate + + Array.prototype.push.apply(self.targets, operation.toRemove); + + operation = self.callFilters('operationMappedGetDataOperation', operation, arguments); + + return operation; + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.Operation} operation + * @return {void} + */ + + diffDatasets: function(operation) { + var self = this, + persistantStartIds = [], + persistantNewIds = [], + insertedTargets = [], + data = null, + target = null, + el = null, + frag = null, + nextEl = null, + uids = {}, + id = '', + i = -1; + + self.callActions('beforeDiffDatasets', arguments); + + for (i = 0; data = operation.newDataset[i]; i++) { + if (typeof (id = data[self.config.data.uidKey]) === 'undefined' || id.toString().length < 1) { + throw new TypeError(mixitup.messages.errorDatasetInvalidUidKey({ + uidKey: self.config.data.uidKey + })); + } + + if (!uids[id]) { + uids[id] = true; + } else { + throw new Error(mixitup.messages.errorDatasetDuplicateUid({ + uid: id + })); + } + + if ((target = self.cache[id]) instanceof mixitup.Target) { + // Already in cache + + if (self.config.data.dirtyCheck && !h.deepEquals(data, target.data)) { + // change detected + + el = target.render(data); + + target.data = data; + + if (el !== target.dom.el) { + // Update target element reference + + if (target.isInDom) { + target.unbindEvents(); + + self.dom.parent.replaceChild(el, target.dom.el); + } + + if (!target.isShown) { + el.style.display = 'none'; + } + + target.dom.el = el; + + if (target.isInDom) { + target.bindEvents(); + } + } + } + + el = target.dom.el; + } else { + // New target + + target = new mixitup.Target(); + + target.init(null, self, data); + + target.hide(); + } + + if (!target.isInDom) { + // Adding to DOM + + if (!frag) { + // Open frag + + frag = self.dom.document.createDocumentFragment(); + } + + if (frag.lastElementChild) { + frag.appendChild(self.dom.document.createTextNode(' ')); + } + + frag.appendChild(target.dom.el); + + target.isInDom = true; + + target.unbindEvents(); + target.bindEvents(); + target.hide(); + + operation.toShow.push(target); + + insertedTargets.push(target); + } else { + // Already in DOM + + nextEl = target.dom.el.nextElementSibling; + + persistantNewIds.push(id); + + if (frag) { + // Close and insert previously opened frag + + if (frag.lastElementChild) { + frag.appendChild(self.dom.document.createTextNode(' ')); + } + + self.insertDatasetFrag(frag, target.dom.el, insertedTargets); + + frag = null; + } + } + + operation.show.push(target); + } + + if (frag) { + // Unclosed frag remaining + + nextEl = nextEl || self.config.layout.siblingAfter; + + if (nextEl) { + frag.appendChild(self.dom.document.createTextNode(' ')); + } + + self.insertDatasetFrag(frag, nextEl, insertedTargets); + } + + for (i = 0; data = operation.startDataset[i]; i++) { + id = data[self.config.data.uidKey]; + + target = self.cache[id]; + + if (operation.show.indexOf(target) < 0) { + // Previously shown but now absent + + operation.hide.push(target); + operation.toHide.push(target); + operation.toRemove.push(target); + } else { + persistantStartIds.push(id); + } + } + + if (!h.isEqualArray(persistantStartIds, persistantNewIds)) { + operation.willSort = true; + } + + self.callActions('afterDiffDatasets', arguments); + }, + + /** + * @private + * @instance + * @since 3.1.5 + * @param {DocumentFragment} frag + * @param {(HTMLElement|null)} nextEl + * @param {Array.} targets + * @return {void} + */ + + insertDatasetFrag: function(frag, nextEl, targets) { + var self = this; + var insertAt = nextEl ? h.arrayFromList(self.dom.parent.children).indexOf(nextEl) : self.targets.length; + + self.dom.parent.insertBefore(frag, nextEl); + + while (targets.length) { + self.targets.splice(insertAt, 0, targets.shift()); + + insertAt++; + } + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.CommandSort} sortCommandA + * @param {mixitup.CommandSort} sortCommandB + * @return {boolean} + */ + + willSort: function(sortCommandA, sortCommandB) { + var self = this, + result = false; + + if ( + self.config.behavior.liveSort || + sortCommandA.order === 'random' || + sortCommandA.attribute !== sortCommandB.attribute || + sortCommandA.order !== sortCommandB.order || + sortCommandA.collection !== sortCommandB.collection || + (sortCommandA.next === null && sortCommandB.next) || + (sortCommandA.next && sortCommandB.next === null) + ) { + result = true; + } else if (sortCommandA.next && sortCommandB.next) { + result = self.willSort(sortCommandA.next, sortCommandB.next); + } else { + result = false; + } + + return self.callFilters('resultWillSort', result, arguments); + }, + + /** + * A shorthand method for `.filter('all')`. Shows all targets in the container. + * + * @example + * + * .show() + * + * @example Example: Showing all targets + * + * mixer.show() + * .then(function(state) { + * console.log(state.totalShow === state.totalTargets); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @return {Promise.} + */ + + show: function() { + var self = this; + + return self.filter('all'); + }, + + /** + * A shorthand method for `.filter('none')`. Hides all targets in the container. + * + * @example + * + * .hide() + * + * @example Example: Hiding all targets + * + * mixer.hide() + * .then(function(state) { + * console.log(state.totalShow === 0); // true + * console.log(state.totalHide === state.totalTargets); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @return {Promise.} + */ + + hide: function() { + var self = this; + + return self.filter('none'); + }, + + /** + * Returns a boolean indicating whether or not a MixItUp operation is + * currently in progress. + * + * @example + * + * .isMixing() + * + * @example Example: Checking the status of a mixer + * + * mixer.sort('random', function() { + * console.log(mixer.isMixing()) // false + * }); + * + * console.log(mixer.isMixing()) // true + * + * @public + * @instance + * @since 2.0.0 + * @return {boolean} + */ + + isMixing: function() { + var self = this; + + return self.isBusy; + }, + + /** + * Filters all targets in the container by a provided selector string, or the values `'all'` + * or `'none'`. Only targets matching the selector will be shown. + * + * @example + * + * .filter(selector [, animate] [, callback]) + * + * @example Example 1: Filtering targets by a class selector + * + * mixer.filter('.category-a') + * .then(function(state) { + * console.log(state.totalShow === containerEl.querySelectorAll('.category-a').length); // true + * }); + * + * @example Example 2: Filtering targets by an attribute selector + * + * mixer.filter('[data-category~="a"]') + * .then(function(state) { + * console.log(state.totalShow === containerEl.querySelectorAll('[data-category~="a"]').length); // true + * }); + * + * @example Example 3: Filtering targets by a compound selector + * + * // Show only those targets with the classes 'category-a' AND 'category-b' + * + * mixer.filter('.category-a.category-c') + * .then(function(state) { + * console.log(state.totalShow === containerEl.querySelectorAll('.category-a.category-c').length); // true + * }); + * + * @example Example 4: Filtering via an element collection + * + * var collection = Array.from(container.querySelectorAll('.mix')); + * + * console.log(collection.length); // 34 + * + * // Filter the collection manually using Array.prototype.filter + * + * var filtered = collection.filter(function(target) { + * return parseInt(target.getAttribute('data-price')) > 10; + * }); + * + * console.log(filtered.length); // 22 + * + * // Pass the filtered collection to MixItUp + * + * mixer.filter(filtered) + * .then(function(state) { + * console.log(state.activeFilter.collection.length === 22); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {(string|HTMLElement|Array.)} selector + * Any valid CSS selector (i.e. `'.category-a'`), or the values `'all'` or `'none'`. The filter method also accepts a reference to single target element or a collection of target elements to show. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + filter: function() { + var self = this, + instruction = self.parseFilterArgs(arguments); + + return self.multimix({ + filter: instruction.command + }, instruction.animate, instruction.callback); + }, + + /** + * Adds an additional selector to the currently active filter selector, concatenating + * as per the logic defined in `controls.toggleLogic`. + * + * @example + * + * .toggleOn(selector [, animate] [, callback]) + * + * @example Example: Toggling on a filter selector + * + * console.log(mixer.getState().activeFilter.selector); // '.category-a' + * + * mixer.toggleOn('.category-b') + * .then(function(state) { + * console.log(state.activeFilter.selector); // '.category-a, .category-b' + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {string} selector + * Any valid CSS selector (i.e. `'.category-a'`) + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + toggleOn: function() { + var self = this, + instruction = self.parseFilterArgs(arguments), + selector = instruction.command.selector, + toggleSelector = ''; + + self.isToggling = true; + + if (self.toggleArray.indexOf(selector) < 0) { + self.toggleArray.push(selector); + } + + toggleSelector = self.getToggleSelector(); + + return self.multimix({ + filter: toggleSelector + }, instruction.animate, instruction.callback); + }, + + /** + * Removes a selector from the active filter selector. + * + * @example + * + * .toggleOff(selector [, animate] [, callback]) + * + * @example Example: Toggling off a filter selector + * + * console.log(mixer.getState().activeFilter.selector); // '.category-a, .category-b' + * + * mixer.toggleOff('.category-b') + * .then(function(state) { + * console.log(state.activeFilter.selector); // '.category-a' + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {string} selector + * Any valid CSS selector (i.e. `'.category-a'`) + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + toggleOff: function() { + var self = this, + instruction = self.parseFilterArgs(arguments), + selector = instruction.command.selector, + selectorIndex = self.toggleArray.indexOf(selector), + toggleSelector = ''; + + self.isToggling = true; + + if (selectorIndex > -1) { + self.toggleArray.splice(selectorIndex, 1); + } + + toggleSelector = self.getToggleSelector(); + + return self.multimix({ + filter: toggleSelector + }, instruction.animate, instruction.callback); + }, + + /** + * Sorts all targets in the container according to a provided sort string. + * + * @example + * + * .sort(sortString [, animate] [, callback]) + * + * @example Example 1: Sorting by the default DOM order + * + * // Reverse the default order of the targets + * + * mixer.sort('default:desc') + * .then(function(state) { + * console.log(state.activeSort.attribute === 'default'); // true + * console.log(state.activeSort.order === 'desc'); // true + * }); + * + * @example Example 2: Sorting by a custom data-attribute + * + * // Sort the targets by the value of a `data-published-date` attribute + * + * mixer.sort('published-date:asc') + * .then(function(state) { + * console.log(state.activeSort.attribute === 'published-date'); // true + * console.log(state.activeSort.order === 'asc'); // true + * }); + * + * @example Example 3: Sorting by multiple attributes + * + * // Sort the targets by the value of a `data-published-date` attribute, then by `data-title` + * + * mixer.sort('published-date:desc data-title:asc') + * .then(function(state) { + * console.log(state.activeSort.attribute === 'published-date'); // true + * console.log(state.activeSort.order === 'desc'); // true + * + * console.log(state.activeSort.next.attribute === 'title'); // true + * console.log(state.activeSort.next.order === 'asc'); // true + * }); + * + * @example Example 4: Sorting by random + * + * mixer.sort('random') + * .then(function(state) { + * console.log(state.activeSort.order === 'random') // true + * }); + * + * @example Example 5: Sorting via an element collection + * + * var collection = Array.from(container.querySelectorAll('.mix')); + * + * // Swap the position of two elements in the collection: + * + * var temp = collection[1]; + * + * collection[1] = collection[0]; + * collection[0] = temp; + * + * // Pass the sorted collection to MixItUp + * + * mixer.sort(collection) + * .then(function(state) { + * console.log(state.targets[0] === collection[0]); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {(string|Array.)} sortString + * A valid sort string (e.g. `'default'`, `'published-date:asc'`, or `'random'`). The sort method also accepts an array of all target elements in a user-defined order. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + sort: function() { + var self = this, + instruction = self.parseSortArgs(arguments); + + return self.multimix({ + sort: instruction.command + }, instruction.animate, instruction.callback); + }, + + /** + * Changes the layout of the container by adding, removing or updating a + * layout-specific class name. If `animation.animateResizetargets` is + * enabled, MixItUp will attempt to gracefully animate the width, height, + * and position of targets between layout states. + * + * @example + * + * .changeLayout(containerClassName [, animate] [, callback]) + * + * @example Example 1: Adding a new class name to the container + * + * mixer.changeLayout('container-list') + * .then(function(state) { + * console.log(state.activeContainerClass === 'container-list'); // true + * }); + * + * @example Example 2: Removing a previously added class name from the container + * + * mixer.changeLayout('') + * .then(function(state) { + * console.log(state.activeContainerClass === ''); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {string} containerClassName + * A layout-specific class name to add to the container. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + changeLayout: function() { + var self = this, + instruction = self.parseChangeLayoutArgs(arguments); + + return self.multimix({ + changeLayout: instruction.command + }, instruction.animate, instruction.callback); + }, + + /** + * Updates the contents and order of the container to reflect the provided dataset, + * if the dataset API is in use. + * + * The dataset API is designed for use in API-driven JavaScript applications, and + * can be used instead of DOM-based methods such as `.filter()`, `.sort()`, + * `.insert()`, etc. When used, insertion, removal, sorting and pagination can be + * achieved purely via changes to your data model, without the uglyness of having + * to interact with or query the DOM directly. + * + * @example + * + * .dataset(dataset [, animate] [, callback]) + * + * @example Example 1: Rendering a dataset + * + * var myDataset = [ + * {id: 1, ...}, + * {id: 2, ...}, + * {id: 3, ...} + * ]; + * + * mixer.dataset(myDataset) + * .then(function(state) { + * console.log(state.totalShow === 3); // true + * }); + * + * @example Example 2: Sorting a dataset + * + * // Create a new dataset in reverse order + * + * var newDataset = myDataset.slice().reverse(); + * + * mixer.dataset(newDataset) + * .then(function(state) { + * console.log(state.activeDataset[0] === myDataset[2]); // true + * }); + * + * @example Example 3: Removing an item from the dataset + * + * console.log(myDataset.length); // 3 + * + * // Create a new dataset with the last item removed. + * + * var newDataset = myDataset.slice().pop(); + * + * mixer.dataset(newDataset) + * .then(function(state) { + * console.log(state.totalShow === 2); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {Array.} dataset + * An array of objects, each one representing the underlying data model of a target to be rendered. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + dataset: function() { + var self = this, + instruction = self.parseDatasetArgs(arguments), + operation = null, + queueItem = null, + animate = false; + + self.callActions('beforeDataset', arguments); + + if (!self.isBusy) { + if (instruction.callback) self.userCallback = instruction.callback; + + animate = (instruction.animate ^ self.config.animation.enable) ? instruction.animate : self.config.animation.enable; + + operation = self.getDataOperation(instruction.command.dataset); + + return self.goMix(animate, operation); + } else { + queueItem = new mixitup.QueueItem(); + + queueItem.args = arguments; + queueItem.instruction = instruction; + + return self.queueMix(queueItem); + } + }, + + /** + * Performs simultaneous `filter`, `sort`, `insert`, `remove` and `changeLayout` + * operations as requested. + * + * @example + * + * .multimix(multimixCommand [, animate] [, callback]) + * + * @example Example 1: Performing simultaneous filtering and sorting + * + * mixer.multimix({ + * filter: '.category-b', + * sort: 'published-date:desc' + * }) + * .then(function(state) { + * console.log(state.activeFilter.selector === '.category-b'); // true + * console.log(state.activeSort.attribute === 'published-date'); // true + * }); + * + * @example Example 2: Performing simultaneous sorting, insertion, and removal + * + * console.log(mixer.getState().totalShow); // 6 + * + * // NB: When inserting via `multimix()`, an object should be provided as the value + * // for the `insert` portion of the command, allowing for a collection of elements + * // and an insertion index to be specified. + * + * mixer.multimix({ + * sort: 'published-date:desc', // Sort the container, including any new elements + * insert: { + * collection: [newElementReferenceA, newElementReferenceB], // Add 2 new elements at index 5 + * index: 5 + * }, + * remove: existingElementReference // Remove 1 existing element + * }) + * .then(function(state) { + * console.log(state.activeSort.attribute === 'published-date'); // true + * console.log(state.totalShow === 7); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {object} multimixCommand + * An object containing one or more things to do + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + multimix: function() { + var self = this, + operation = null, + animate = false, + queueItem = null, + instruction = self.parseMultimixArgs(arguments); + + self.callActions('beforeMultimix', arguments); + + if (!self.isBusy) { + operation = self.getOperation(instruction.command); + + if (self.config.controls.enable) { + // Update controls for API calls + + if (instruction.command.filter && !self.isToggling) { + // As we are not toggling, reset the toggle array + // so new filter overrides existing toggles + + self.toggleArray.length = 0; + self.buildToggleArray(operation.command); + } + + if (self.queue.length < 1) { + self.updateControls(operation.command); + } + } + + if (instruction.callback) self.userCallback = instruction.callback; + + // Always allow the instruction to override the instance setting + + animate = (instruction.animate ^ self.config.animation.enable) ? + instruction.animate : + self.config.animation.enable; + + self.callFilters('operationMultimix', operation, arguments); + + return self.goMix(animate, operation); + } else { + queueItem = new mixitup.QueueItem(); + + queueItem.args = arguments; + queueItem.instruction = instruction; + queueItem.triggerElement = self.lastClicked; + queueItem.isToggling = self.isToggling; + + return self.queueMix(queueItem); + } + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {object} multimixCommand + * @param {boolean} [isPreFetch] + * An optional boolean indicating that the operation is being pre-fetched for execution at a later time. + * @return {Operation|null} + */ + + getOperation: function(multimixCommand) { + var self = this, + sortCommand = multimixCommand.sort, + filterCommand = multimixCommand.filter, + changeLayoutCommand = multimixCommand.changeLayout, + removeCommand = multimixCommand.remove, + insertCommand = multimixCommand.insert, + operation = new mixitup.Operation(); + + operation = self.callFilters('operationUnmappedGetOperation', operation, arguments); + + operation.id = h.randomHex(); + operation.command = multimixCommand; + operation.startState = self.state; + operation.triggerElement = self.lastClicked; + + if (self.isBusy) { + if (self.config.debug.showWarnings) { + console.warn(mixitup.messages.warningGetOperationInstanceBusy()); + } + + return null; + } + + if (insertCommand) { + self.insertTargets(insertCommand, operation); + } + + if (removeCommand) { + operation.toRemove = removeCommand.targets; + } + + operation.startSort = operation.newSort = operation.startState.activeSort; + operation.startOrder = operation.newOrder = self.targets; + + if (sortCommand) { + operation.startSort = operation.startState.activeSort; + operation.newSort = sortCommand; + + operation.willSort = self.willSort(sortCommand, operation.startState.activeSort); + + if (operation.willSort) { + self.sortOperation(operation); + } + } + + operation.startFilter = operation.startState.activeFilter; + + if (filterCommand) { + operation.newFilter = filterCommand; + } else { + operation.newFilter = h.extend(new mixitup.CommandFilter(), operation.startFilter); + } + + if (operation.newFilter.selector === 'all') { + operation.newFilter.selector = self.config.selectors.target; + } else if (operation.newFilter.selector === 'none') { + operation.newFilter.selector = ''; + } + + self.filterOperation(operation); + + operation.startContainerClassName = operation.startState.activeContainerClassName; + + if (changeLayoutCommand) { + operation.newContainerClassName = changeLayoutCommand.containerClassName; + + if (operation.newContainerClassName !== operation.startContainerClassName) { + operation.willChangeLayout = true; + } + } else { + operation.newContainerClassName = operation.startContainerClassName; + } + + if (self.config.animation.enable) { + // Populate the operation's position data + + self.getStartMixData(operation); + self.setInter(operation); + + operation.docState = h.getDocumentState(self.dom.document); + + self.getInterMixData(operation); + self.setFinal(operation); + self.getFinalMixData(operation); + + self.parseEffects(); + + operation.hasEffect = self.hasEffect(); + + self.getTweenData(operation); + } + + if (operation.willSort) { + self.targets = operation.newOrder; + } + + operation.newState = self.buildState(operation); + + return self.callFilters('operationMappedGetOperation', operation, arguments); + }, + + /** + * Renders a previously created operation at a specific point in its path, as + * determined by a multiplier between 0 and 1. + * + * @example + * .tween(operation, multiplier) + * + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.Operation} operation + * An operation object created via the `getOperation` method + * + * @param {Float} multiplier + * Any number between 0 and 1 representing the percentage complete of the operation + * @return {void} + */ + + tween: function(operation, multiplier) { + var target = null, + posData = null, + toHideIndex = -1, + i = -1; + + multiplier = Math.min(multiplier, 1); + multiplier = Math.max(multiplier, 0); + + for (i = 0; target = operation.show[i]; i++) { + posData = operation.showPosData[i]; + + target.applyTween(posData, multiplier); + } + + for (i = 0; target = operation.hide[i]; i++) { + if (target.isShown) { + target.hide(); + } + + if ((toHideIndex = operation.toHide.indexOf(target)) > -1) { + posData = operation.toHidePosData[toHideIndex]; + + if (!target.isShown) { + target.show(); + } + + target.applyTween(posData, multiplier); + } + } + }, + + /** + * Inserts one or more new target elements into the container at a specified + * index. + * + * To be indexed as targets, new elements must match the `selectors.target` + * selector (`'.mix'` by default). + * + * @example + * + * .insert(newElements [, index] [, animate], [, callback]) + * + * @example Example 1: Inserting a single element via reference + * + * console.log(mixer.getState().totalShow); // 0 + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * mixer.insert(newElement) + * .then(function(state) { + * console.log(state.totalShow === 1); // true + * }); + * + * @example Example 2: Inserting a single element via HTML string + * + * console.log(mixer.getState().totalShow); // 1 + * + * // Create a new element via reference + * + * var newElementHtml = '<div class="mix"></div>'; + * + * // Create and insert the new element at index 1 + * + * mixer.insert(newElementHtml, 1) + * .then(function(state) { + * console.log(state.totalShow === 2); // true + * console.log(state.show[1].outerHTML === newElementHtml); // true + * }); + * + * @example Example 3: Inserting multiple elements via reference + * + * console.log(mixer.getState().totalShow); // 2 + * + * // Create an array of new elements to insert. + * + * var newElement1 = document.createElement('div'); + * var newElement2 = document.createElement('div'); + * + * newElement1.classList.add('mix'); + * newElement2.classList.add('mix'); + * + * var newElementsCollection = [newElement1, newElement2]; + * + * // Insert the new elements starting at index 1 + * + * mixer.insert(newElementsCollection, 1) + * .then(function(state) { + * console.log(state.totalShow === 4); // true + * console.log(state.show[1] === newElement1); // true + * console.log(state.show[2] === newElement2); // true + * }); + * + * @example Example 4: Inserting a jQuery collection object containing one or more elements + * + * console.log(mixer.getState().totalShow); // 4 + * + * var $newElement = $('<div class="mix"></div>'); + * + * // Insert the new elements starting at index 3 + * + * mixer.insert($newElement, 3) + * .then(function(state) { + * console.log(state.totalShow === 5); // true + * console.log(state.show[3] === $newElement[0]); // true + * }); + * + * @public + * @instance + * @since 2.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {number} index=0 + * The index at which to insert the new element(s). `0` by default. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + insert: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.multimix({ + insert: args.command + }, args.animate, args.callback); + }, + + /** + * Inserts one or more new elements before a provided reference element. + * + * @example + * + * .insertBefore(newElements, referenceElement [, animate] [, callback]) + * + * @example Example: Inserting a new element before a reference element + * + * // An existing reference element is chosen at index 2 + * + * var referenceElement = mixer.getState().show[2]; + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * mixer.insertBefore(newElement, referenceElement) + * .then(function(state) { + * // The new element is inserted into the container at index 2, before the reference element + * + * console.log(state.show[2] === newElement); // true + * + * // The reference element is now at index 3 + * + * console.log(state.show[3] === referenceElement); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {HTMLElement} referenceElement + * A reference to an existing element in the container to insert new elements before. + *@param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + insertBefore: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.insert(args.command.collection, 'before', args.command.sibling, args.animate, args.callback); + }, + + /** + * Inserts one or more new elements after a provided reference element. + * + * @example + * + * .insertAfter(newElements, referenceElement [, animate] [, callback]) + * + * @example Example: Inserting a new element after a reference element + * + * // An existing reference element is chosen at index 2 + * + * var referenceElement = mixer.getState().show[2]; + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * mixer.insertAfter(newElement, referenceElement) + * .then(function(state) { + * // The new element is inserted into the container at index 3, after the reference element + * + * console.log(state.show[3] === newElement); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {HTMLElement} referenceElement + * A reference to an existing element in the container to insert new elements after. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + insertAfter: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.insert(args.command.collection, 'after', args.command.sibling, args.animate, args.callback); + }, + + /** + * Inserts one or more new elements into the container before all existing targets. + * + * @example + * + * .prepend(newElements [,animate] [,callback]) + * + * @example Example: Prepending a new element + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * // Insert the element into the container + * + * mixer.prepend(newElement) + * .then(function(state) { + * console.log(state.show[0] === newElement); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + prepend: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.insert(0, args.command.collection, args.animate, args.callback); + }, + + /** + * Inserts one or more new elements into the container after all existing targets. + * + * @example + * + * .append(newElements [,animate] [,callback]) + * + * @example Example: Appending a new element + * + * // Create a new element + * + * var newElement = document.createElement('div'); + * newElement.classList.add('mix'); + * + * // Insert the element into the container + * + * mixer.append(newElement) + * .then(function(state) { + * console.log(state.show[state.show.length - 1] === newElement); // true + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string)} newElements + * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + append: function() { + var self = this, + args = self.parseInsertArgs(arguments); + + return self.insert(self.state.totalTargets, args.command.collection, args.animate, args.callback); + }, + + /** + * Removes one or more existing target elements from the container. + * + * @example + * + * .remove(elements [, animate] [, callback]) + * + * @example Example 1: Removing an element by reference + * + * var elementToRemove = containerEl.firstElementChild; + * + * mixer.remove(elementToRemove) + * .then(function(state) { + * console.log(state.targets.indexOf(elementToRemove) === -1); // true + * }); + * + * @example Example 2: Removing a collection of elements by reference + * + * var elementsToRemove = containerEl.querySelectorAll('.category-a'); + * + * console.log(elementsToRemove.length) // 3 + * + * mixer.remove(elementsToRemove) + * .then(function() { + * console.log(containerEl.querySelectorAll('.category-a').length); // 0 + * }); + * + * @example Example 3: Removing one or more elements by selector + * + * mixer.remove('.category-a') + * .then(function() { + * console.log(containerEl.querySelectorAll('.category-a').length); // 0 + * }); + * + * @example Example 4: Removing an element by index + * + * console.log(mixer.getState.totalShow); // 4 + * + * // Remove the element at index 3 + * + * mixer.remove(3) + * .then(function(state) { + * console.log(state.totalShow); // 3 + * console.log(state.show[3]); // undefined + * }); + * + * + * @public + * @instance + * @since 3.0.0 + * @param {(HTMLElement|Array.|string|number)} elements + * A reference to a single element to remove, an array-like collection of elements, a selector string, or the index of an element to remove. + * @param {boolean} [animate=true] + * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default. + * @param {function} [callback=null] + * An optional callback function to be invoked after the operation has completed. + * @return {Promise.} + * A promise resolving with the current state object. + */ + + remove: function() { + var self = this, + args = self.parseRemoveArgs(arguments); + + return self.multimix({ + remove: args.command + }, args.animate, args.callback); + }, + + /** + * Retrieves the the value of any property or sub-object within the current + * mixitup configuration, or the whole configuration object. + * + * @example + * + * .getConfig([stringKey]) + * + * @example Example 1: retrieve the entire configuration object + * + * var config = mixer.getConfig(); // Config { ... } + * + * @example Example 2: retrieve a named sub-object of configuration object + * + * var animation = mixer.getConfig('animation'); // ConfigAnimation { ... } + * + * @example Example 3: retrieve a value of configuration object via a dot-notation string key + * + * var effects = mixer.getConfig('animation.effects'); // 'fade scale' + * + * @public + * @instance + * @since 2.0.0 + * @param {string} [stringKey] A "dot-notation" string key + * @return {*} + */ + + getConfig: function(stringKey) { + var self = this, + value = null; + + if (!stringKey) { + value = self.config; + } else { + value = h.getProperty(self.config, stringKey); + } + + return self.callFilters('valueGetConfig', value, arguments); + }, + + /** + * Updates the configuration of the mixer, after it has been instantiated. + * + * See the Configuration Object documentation for a full list of avilable + * configuration options. + * + * @example + * + * .configure(config) + * + * @example Example 1: Updating animation options + * + * mixer.configure({ + * animation: { + * effects: 'fade translateX(-100%)', + * duration: 300 + * } + * }); + * + * @example Example 2: Removing a callback after it has been set + * + * var mixer; + * + * function handleMixEndOnce() { + * // Do something .. + * + * // Then nullify the callback + * + * mixer.configure({ + * callbacks: { + * onMixEnd: null + * } + * }); + * }; + * + * // Instantiate a mixer with a callback defined + * + * mixer = mixitup(containerEl, { + * callbacks: { + * onMixEnd: handleMixEndOnce + * } + * }); + * + * @public + * @instance + * @since 3.0.0 + * @param {object} config + * An object containing one of more configuration options. + * @return {void} + */ + + configure: function(config) { + var self = this; + + self.callActions('beforeConfigure', arguments); + + h.extend(self.config, config, true, true); + + self.callActions('afterConfigure', arguments); + }, + + /** + * Returns an object containing information about the current state of the + * mixer. See the State Object documentation for more information. + * + * NB: State objects are immutable and should therefore be regenerated + * after any operation. + * + * @example + * + * .getState(); + * + * @example Example: Retrieving a state object + * + * var state = mixer.getState(); + * + * console.log(state.totalShow + 'targets are currently shown'); + * + * @public + * @instance + * @since 2.0.0 + * @return {mixitup.State} An object reflecting the current state of the mixer. + */ + + getState: function() { + var self = this, + state = null; + + state = new mixitup.State(); + + h.extend(state, self.state); + + h.freeze(state); + + return self.callFilters('stateGetState', state, arguments); + }, + + /** + * Forces the re-indexing all targets within the container. + * + * This should only be used if some other piece of code in your application + * has manipulated the contents of your container, which should be avoided. + * + * If you need to add or remove target elements from the container, use + * the built-in `.insert()` or `.remove()` methods, and MixItUp will keep + * itself up to date. + * + * @example + * + * .forceRefresh() + * + * @example Example: Force refreshing the mixer after external DOM manipulation + * + * console.log(mixer.getState().totalShow); // 3 + * + * // An element is removed from the container via some external DOM manipulation code: + * + * containerEl.removeChild(containerEl.firstElementChild); + * + * // The mixer does not know that the number of targets has changed: + * + * console.log(mixer.getState().totalShow); // 3 + * + * mixer.forceRefresh(); + * + * // After forceRefresh, the mixer is in sync again: + * + * console.log(mixer.getState().totalShow); // 2 + * + * @public + * @instance + * @since 2.1.2 + * @return {void} + */ + + forceRefresh: function() { + var self = this; + + self.indexTargets(); + }, + + /** + * Forces the re-rendering of all targets when using the Dataset API. + * + * By default, targets are only re-rendered when `data.dirtyCheck` is + * enabled, and an item's data has changed when `dataset()` is called. + * + * The `forceRender()` method allows for the re-rendering of all targets + * in response to some arbitrary event, such as the changing of the target + * render function. + * + * Targets are rendered against their existing data. + * + * @example + * + * .forceRender() + * + * @example Example: Force render targets after changing the target render function + * + * console.log(container.innerHTML); // ... <span class="mix">Foo</span> ... + * + * mixer.configure({ + * render: { + * target: (item) => `<a href="/${item.slug}/" class="mix">${item.title}</a>` + * } + * }); + * + * mixer.forceRender(); + * + * console.log(container.innerHTML); // ... <a href="/foo/" class="mix">Foo</a> ... + * + * @public + * @instance + * @since 3.2.1 + * @return {void} + */ + + forceRender: function() { + var self = this, + target = null, + el = null, + id = ''; + + for (id in self.cache) { + target = self.cache[id]; + + el = target.render(target.data); + + if (el !== target.dom.el) { + // Update target element reference + + if (target.isInDom) { + target.unbindEvents(); + + self.dom.parent.replaceChild(el, target.dom.el); + } + + if (!target.isShown) { + el.style.display = 'none'; + } + + target.dom.el = el; + + if (target.isInDom) { + target.bindEvents(); + } + } + } + + self.state = self.buildState(self.lastOperation); + }, + + /** + * Removes mixitup functionality from the container, unbinds all control + * event handlers, and deletes the mixer instance from MixItUp's internal + * cache. + * + * This should be performed whenever a mixer's container is removed from + * the DOM, such as during a page change in a single page application, + * or React's `componentWillUnmount()`. + * + * @example + * + * .destroy([cleanUp]) + * + * @example Example: Destroying the mixer before removing its container element + * + * mixer.destroy(); + * + * containerEl.parentElement.removeChild(containerEl); + * + * @public + * @instance + * @since 2.0.0 + * @param {boolean} [cleanUp=false] + * An optional boolean dictating whether or not to clean up any inline `display: none;` styling applied to hidden targets. + * @return {void} + */ + + destroy: function(cleanUp) { + var self = this, + control = null, + target = null, + i = 0; + + self.callActions('beforeDestroy', arguments); + + for (i = 0; control = self.controls[i]; i++) { + control.removeBinding(self); + } + + for (i = 0; target = self.targets[i]; i++) { + if (cleanUp) { + target.show(); + } + + target.unbindEvents(); + } + + if (self.dom.container.id.match(/^MixItUp/)) { + self.dom.container.removeAttribute('id'); + } + + delete mixitup.instances[self.id]; + + self.callActions('afterDestroy', arguments); + } +}); \ No newline at end of file diff --git a/mixitup-3.3.1/src/module-definitions.js b/mixitup-3.3.1/src/module-definitions.js new file mode 100644 index 0000000..4630c78 --- /dev/null +++ b/mixitup-3.3.1/src/module-definitions.js @@ -0,0 +1,11 @@ +/* global module, mixitup, define */ + +if (typeof exports === 'object' && typeof module === 'object') { + module.exports = mixitup; +} else if (typeof define === 'function' && define.amd) { + define(function() { + return mixitup; + }); +} else if (typeof window.mixitup === 'undefined' || typeof window.mixitup !== 'function') { + window.mixitup = mixitup; +} \ No newline at end of file diff --git a/mixitup-3.3.1/src/operation.js b/mixitup-3.3.1/src/operation.js new file mode 100644 index 0000000..bbfc3c9 --- /dev/null +++ b/mixitup-3.3.1/src/operation.js @@ -0,0 +1,77 @@ +/* global mixitup, h */ + +/** + * `mixitup.Operation` objects contain all data neccessary to describe the full + * lifecycle of any MixItUp operation. They can be used to compute and store an + * operation for use at a later time (e.g. programmatic tweening). + * + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.Operation = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.id = ''; + + this.args = []; + this.command = null; + this.showPosData = []; + this.toHidePosData = []; + + this.startState = null; + this.newState = null; + this.docState = null; + + this.willSort = false; + this.willChangeLayout = false; + this.hasEffect = false; + this.hasFailed = false; + + this.triggerElement = null; + + this.show = []; + this.hide = []; + this.matching = []; + this.toShow = []; + this.toHide = []; + this.toMove = []; + this.toRemove = []; + this.startOrder = []; + this.newOrder = []; + this.startSort = null; + this.newSort = null; + this.startFilter = null; + this.newFilter = null; + this.startDataset = null; + this.newDataset = null; + this.viewportDeltaX = 0; + this.viewportDeltaY = 0; + this.startX = 0; + this.startY = 0; + this.startHeight = 0; + this.startWidth = 0; + this.newX = 0; + this.newY = 0; + this.newHeight = 0; + this.newWidth = 0; + this.startContainerClassName = ''; + this.startDisplay = ''; + this.newContainerClassName = ''; + this.newDisplay = ''; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.Operation); + +mixitup.Operation.prototype = Object.create(mixitup.Base.prototype); + +mixitup.Operation.prototype.constructor = mixitup.Operation; \ No newline at end of file diff --git a/mixitup-3.3.1/src/polyfills.js b/mixitup-3.3.1/src/polyfills.js new file mode 100644 index 0000000..c239cd0 --- /dev/null +++ b/mixitup-3.3.1/src/polyfills.js @@ -0,0 +1,237 @@ +(function() { + var VENDORS = ['webkit', 'moz', 'o', 'ms'], + canary = window.document.createElement('div'), + i = -1; + + // window.requestAnimationFrame + + for (i = 0; i < VENDORS.length && !window.requestAnimationFrame; i++) { + window.requestAnimationFrame = window[VENDORS[i] + 'RequestAnimationFrame']; + } + + // Element.nextElementSibling + + if (typeof canary.nextElementSibling === 'undefined') { + Object.defineProperty(window.Element.prototype, 'nextElementSibling', { + get: function() { + var el = this.nextSibling; + + while (el) { + if (el.nodeType === 1) { + return el; + } + + el = el.nextSibling; + } + + return null; + } + }); + } + + // Element.matches + + (function(ElementPrototype) { + ElementPrototype.matches = + ElementPrototype.matches || + ElementPrototype.machesSelector || + ElementPrototype.mozMatchesSelector || + ElementPrototype.msMatchesSelector || + ElementPrototype.oMatchesSelector || + ElementPrototype.webkitMatchesSelector || + function (selector) { + return Array.prototype.indexOf.call(this.parentElement.querySelectorAll(selector), this) > -1; + }; + })(window.Element.prototype); + + // Object.keys + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys + + if (!Object.keys) { + Object.keys = (function() { + var hasOwnProperty = Object.prototype.hasOwnProperty, + hasDontEnumBug = false, + dontEnums = [], + dontEnumsLength = -1; + + hasDontEnumBug = !({ + toString: null + }) + .propertyIsEnumerable('toString'); + + dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' + ]; + + dontEnumsLength = dontEnums.length; + + return function(obj) { + var result = [], + prop = '', + i = -1; + + if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { + throw new TypeError('Object.keys called on non-object'); + } + + for (prop in obj) { + if (hasOwnProperty.call(obj, prop)) { + result.push(prop); + } + } + + if (hasDontEnumBug) { + for (i = 0; i < dontEnumsLength; i++) { + if (hasOwnProperty.call(obj, dontEnums[i])) { + result.push(dontEnums[i]); + } + } + } + + return result; + }; + }()); + } + + // Array.isArray + // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray + + if (!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + } + + // Object.create + // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/create + + if (typeof Object.create !== 'function') { + Object.create = (function(undefined) { + var Temp = function() {}; + + return function (prototype, propertiesObject) { + if (prototype !== Object(prototype) && prototype !== null) { + throw TypeError('Argument must be an object, or null'); + } + + Temp.prototype = prototype || {}; + + var result = new Temp(); + + Temp.prototype = null; + + if (propertiesObject !== undefined) { + Object.defineProperties(result, propertiesObject); + } + + if (prototype === null) { + /* jshint ignore:start */ + result.__proto__ = null; + /* jshint ignore:end */ + } + + return result; + }; + })(); + } + + // String.prototyoe.trim + + if (!String.prototype.trim) { + String.prototype.trim = function() { + return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + }; + } + + // Array.prototype.indexOf + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf + + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement) { + var n, k, t, len; + + if (this === null) { + throw new TypeError(); + } + + t = Object(this); + + len = t.length >>> 0; + + if (len === 0) { + return -1; + } + + n = 0; + + if (arguments.length > 1) { + n = Number(arguments[1]); + + if (n !== n) { + n = 0; + } else if (n !== 0 && n !== Infinity && n !== -Infinity) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); + } + } + + if (n >= len) { + return -1; + } + + for (k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) { + if (k in t && t[k] === searchElement) { + return k; + } + } + + return -1; + }; + } + + // Function.prototype.bind + // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind + + if (!Function.prototype.bind) { + Function.prototype.bind = function(oThis) { + var aArgs, self, FNOP, fBound; + + if (typeof this !== 'function') { + throw new TypeError(); + } + + aArgs = Array.prototype.slice.call(arguments, 1); + + self = this; + + FNOP = function() {}; + + fBound = function() { + return self.apply(this instanceof FNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + if (this.prototype) { + FNOP.prototype = this.prototype; + } + + fBound.prototype = new FNOP(); + + return fBound; + }; + } + + // Element.prototype.dispatchEvent + + if (!window.Element.prototype.dispatchEvent) { + window.Element.prototype.dispatchEvent = function(event) { + try { + return this.fireEvent('on' + event.type, event); + } catch (err) {} + }; + } +})(); \ No newline at end of file diff --git a/mixitup-3.3.1/src/queue-item.js b/mixitup-3.3.1/src/queue-item.js new file mode 100644 index 0000000..385fe21 --- /dev/null +++ b/mixitup-3.3.1/src/queue-item.js @@ -0,0 +1,30 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.QueueItem = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.args = []; + this.instruction = null; + this.triggerElement = null; + this.deferred = null; + this.isToggling = false; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.QueueItem); + +mixitup.QueueItem.prototype = Object.create(mixitup.Base.prototype); + +mixitup.QueueItem.prototype.constructor = mixitup.QueueItem; \ No newline at end of file diff --git a/mixitup-3.3.1/src/state.js b/mixitup-3.3.1/src/state.js new file mode 100644 index 0000000..a5602fd --- /dev/null +++ b/mixitup-3.3.1/src/state.js @@ -0,0 +1,233 @@ +/* global mixitup, h */ + +/** + * `mixitup.State` objects expose various pieces of data detailing the state of + * a MixItUp instance. They are provided at the start and end of any operation via + * callbacks and events, with the most recent state stored between operations + * for retrieval at any time via the API. + * + * @constructor + * @namespace + * @memberof mixitup + * @public + * @since 3.0.0 + */ + +mixitup.State = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + /** + * The ID of the mixer instance. + * + * @name id + * @memberof mixitup.State + * @instance + * @type {string} + * @default '' + */ + + this.id = ''; + + /** + * The currently active filter command as set by a control click or API call. + * + * @name activeFilter + * @memberof mixitup.State + * @instance + * @type {mixitup.CommandFilter} + * @default null + */ + + this.activeFilter = null; + + /** + * The currently active sort command as set by a control click or API call. + * + * @name activeSort + * @memberof mixitup.State + * @instance + * @type {mixitup.CommandSort} + * @default null + */ + + this.activeSort = null; + + /** + * The current layout-specific container class name, if applied. + * + * @name activeContainerClassName + * @memberof mixitup.State + * @instance + * @type {string} + * @default '' + */ + + this.activeContainerClassName = ''; + + /** + * A reference to the container element that the mixer is instantiated on. + * + * @name container + * @memberof mixitup.State + * @instance + * @type {Element} + * @default null + */ + + this.container = null; + + /** + * An array of all target elements indexed by the mixer. + * + * @name targets + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default [] + */ + + this.targets = []; + + /** + * An array of all target elements not matching the current filter. + * + * @name hide + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default [] + */ + + this.hide = []; + + /** + * An array of all target elements matching the current filter and any additional + * limits applied such as pagination. + * + * @name show + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default [] + */ + + this.show = []; + + /** + * An array of all target elements matching the current filter irrespective of + * any additional limits applied such as pagination. + * + * @name matching + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default [] + */ + + this.matching = []; + + /** + * An integer representing the total number of target elements indexed by the + * mixer. Equivalent to `state.targets.length`. + * + * @name totalTargets + * @memberof mixitup.State + * @instance + * @type {number} + * @default -1 + */ + + this.totalTargets = -1; + + /** + * An integer representing the total number of target elements matching the + * current filter and any additional limits applied such as pagination. + * Equivalent to `state.show.length`. + * + * @name totalShow + * @memberof mixitup.State + * @instance + * @type {number} + * @default -1 + */ + + this.totalShow = -1; + + /** + * An integer representing the total number of target elements not matching + * the current filter. Equivalent to `state.hide.length`. + * + * @name totalHide + * @memberof mixitup.State + * @instance + * @type {number} + * @default -1 + */ + + this.totalHide = -1; + + /** + * An integer representing the total number of target elements matching the + * current filter irrespective of any other limits applied such as pagination. + * Equivalent to `state.matching.length`. + * + * @name totalMatching + * @memberof mixitup.State + * @instance + * @type {number} + * @default -1 + */ + + this.totalMatching = -1; + + /** + * A boolean indicating whether the last operation "failed", i.e. no targets + * could be found matching the filter. + * + * @name hasFailed + * @memberof mixitup.State + * @instance + * @type {boolean} + * @default false + */ + + this.hasFailed = false; + + /** + * The DOM element that was clicked if the last operation was triggered by the + * clicking of a control and not an API call. + * + * @name triggerElement + * @memberof mixitup.State + * @instance + * @type {Element|null} + * @default null + */ + + this.triggerElement = null; + + /** + * The currently active dataset underlying the rendered targets, if the + * dataset API is in use. + * + * @name activeDataset + * @memberof mixitup.State + * @instance + * @type {Array.} + * @default null + */ + + this.activeDataset = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.State); + +mixitup.State.prototype = Object.create(mixitup.Base.prototype); + +mixitup.State.prototype.constructor = mixitup.State; \ No newline at end of file diff --git a/mixitup-3.3.1/src/style-data.js b/mixitup-3.3.1/src/style-data.js new file mode 100644 index 0000000..8819b5b --- /dev/null +++ b/mixitup-3.3.1/src/style-data.js @@ -0,0 +1,43 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.StyleData = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.x = 0; + this.y = 0; + this.top = 0; + this.right = 0; + this.bottom = 0; + this.left = 0; + this.width = 0; + this.height = 0; + this.marginRight = 0; + this.marginBottom = 0; + this.opacity = 0; + this.scale = new mixitup.TransformData(); + this.translateX = new mixitup.TransformData(); + this.translateY = new mixitup.TransformData(); + this.translateZ = new mixitup.TransformData(); + this.rotateX = new mixitup.TransformData(); + this.rotateY = new mixitup.TransformData(); + this.rotateZ = new mixitup.TransformData(); + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.StyleData); + +mixitup.StyleData.prototype = Object.create(mixitup.Base.prototype); + +mixitup.StyleData.prototype.constructor = mixitup.StyleData; \ No newline at end of file diff --git a/mixitup-3.3.1/src/target-dom.js b/mixitup-3.3.1/src/target-dom.js new file mode 100644 index 0000000..c00a768 --- /dev/null +++ b/mixitup-3.3.1/src/target-dom.js @@ -0,0 +1,26 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.TargetDom = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.el = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.TargetDom); + +mixitup.TargetDom.prototype = Object.create(mixitup.Base.prototype); + +mixitup.TargetDom.prototype.constructor = mixitup.TargetDom; \ No newline at end of file diff --git a/mixitup-3.3.1/src/target.js b/mixitup-3.3.1/src/target.js new file mode 100644 index 0000000..357d8c2 --- /dev/null +++ b/mixitup-3.3.1/src/target.js @@ -0,0 +1,730 @@ +/* global mixitup, h */ + +/** + * @constructor + * @namespace + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.Target = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.id = ''; + this.sortString = ''; + this.mixer = null; + this.callback = null; + this.isShown = false; + this.isBound = false; + this.isExcluded = false; + this.isInDom = false; + this.handler = null; + this.operation = null; + this.data = null; + this.dom = new mixitup.TargetDom(); + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.Target); + +mixitup.Target.prototype = Object.create(mixitup.Base.prototype); + +h.extend(mixitup.Target.prototype, { + constructor: mixitup.Target, + + /** + * Initialises a newly instantiated Target. + * + * @private + * @instance + * @since 3.0.0 + * @param {(Element|null)} el + * @param {object} mixer + * @param {object} [data] + * @return {void} + */ + + init: function(el, mixer, data) { + var self = this, + id = ''; + + self.callActions('beforeInit', arguments); + + self.mixer = mixer; + + if (!el) { + // If no element is provided, render it + + el = self.render(data); + } + + self.cacheDom(el); + + self.bindEvents(); + + if (self.dom.el.style.display !== 'none') { + self.isShown = true; + } + + if (data && mixer.config.data.uidKey) { + if (typeof (id = data[mixer.config.data.uidKey]) === 'undefined' || id.toString().length < 1) { + throw new TypeError(mixitup.messages.errorDatasetInvalidUidKey({ + uidKey: mixer.config.data.uidKey + })); + } + + self.id = id; + self.data = data; + + mixer.cache[id] = self; + } + + self.callActions('afterInit', arguments); + }, + + /** + * Renders the target element using a user-defined renderer function. + * + * @private + * @instance + * @since 3.1.4 + * @param {object} data + * @return {void} + */ + + render: function(data) { + var self = this, + render = null, + el = null, + temp = null, + output = ''; + + self.callActions('beforeRender', arguments); + + render = self.callFilters('renderRender', self.mixer.config.render.target, arguments); + + if (typeof render !== 'function') { + throw new TypeError(mixitup.messages.errorDatasetRendererNotSet()); + } + + output = render(data); + + if (output && typeof output === 'object' && h.isElement(output)) { + el = output; + } else if (typeof output === 'string') { + temp = document.createElement('div'); + temp.innerHTML = output; + + el = temp.firstElementChild; + } + + return self.callFilters('elRender', el, arguments); + }, + + /** + * Caches references of DOM elements neccessary for the target's functionality. + * + * @private + * @instance + * @since 3.0.0 + * @param {Element} el + * @return {void} + */ + + cacheDom: function(el) { + var self = this; + + self.callActions('beforeCacheDom', arguments); + + self.dom.el = el; + + self.callActions('afterCacheDom', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {string} attributeName + * @return {void} + */ + + getSortString: function(attributeName) { + var self = this, + value = self.dom.el.getAttribute('data-' + attributeName) || ''; + + self.callActions('beforeGetSortString', arguments); + + value = isNaN(value * 1) ? + value.toLowerCase() : + value * 1; + + self.sortString = value; + + self.callActions('afterGetSortString', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + show: function() { + var self = this; + + self.callActions('beforeShow', arguments); + + if (!self.isShown) { + self.dom.el.style.display = ''; + + self.isShown = true; + } + + self.callActions('afterShow', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + hide: function() { + var self = this; + + self.callActions('beforeHide', arguments); + + if (self.isShown) { + self.dom.el.style.display = 'none'; + + self.isShown = false; + } + + self.callActions('afterHide', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {mixitup.IMoveData} moveData + * @return {void} + */ + + move: function(moveData) { + var self = this; + + self.callActions('beforeMove', arguments); + + if (!self.isExcluded) { + self.mixer.targetsMoved++; + } + + self.applyStylesIn(moveData); + + requestAnimationFrame(function() { + self.applyStylesOut(moveData); + }); + + self.callActions('afterMove', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {object} posData + * @param {number} multiplier + * @return {void} + */ + + applyTween: function(posData, multiplier) { + var self = this, + propertyName = '', + tweenData = null, + posIn = posData.posIn, + currentTransformValues = [], + currentValues = new mixitup.StyleData(), + i = -1; + + self.callActions('beforeApplyTween', arguments); + + currentValues.x = posIn.x; + currentValues.y = posIn.y; + + if (multiplier === 0) { + self.hide(); + } else if (!self.isShown) { + self.show(); + } + + for (i = 0; propertyName = mixitup.features.TWEENABLE[i]; i++) { + tweenData = posData.tweenData[propertyName]; + + if (propertyName === 'x') { + if (!tweenData) continue; + + currentValues.x = posIn.x + (tweenData * multiplier); + } else if (propertyName === 'y') { + if (!tweenData) continue; + + currentValues.y = posIn.y + (tweenData * multiplier); + } else if (tweenData instanceof mixitup.TransformData) { + if (!tweenData.value) continue; + + currentValues[propertyName].value = + posIn[propertyName].value + (tweenData.value * multiplier); + + currentValues[propertyName].unit = tweenData.unit; + + currentTransformValues.push( + propertyName + '(' + currentValues[propertyName].value + tweenData.unit + ')' + ); + } else { + if (!tweenData) continue; + + currentValues[propertyName] = posIn[propertyName] + (tweenData * multiplier); + + self.dom.el.style[propertyName] = currentValues[propertyName]; + } + } + + if (currentValues.x || currentValues.y) { + currentTransformValues.unshift('translate(' + currentValues.x + 'px, ' + currentValues.y + 'px)'); + } + + if (currentTransformValues.length) { + self.dom.el.style[mixitup.features.transformProp] = currentTransformValues.join(' '); + } + + self.callActions('afterApplyTween', arguments); + }, + + /** + * Applies the initial styling to a target element before any transition + * is applied. + * + * @private + * @instance + * @param {mixitup.IMoveData} moveData + * @return {void} + */ + + applyStylesIn: function(moveData) { + var self = this, + posIn = moveData.posIn, + isFading = self.mixer.effectsIn.opacity !== 1, + transformValues = []; + + self.callActions('beforeApplyStylesIn', arguments); + + transformValues.push('translate(' + posIn.x + 'px, ' + posIn.y + 'px)'); + + if (self.mixer.config.animation.animateResizeTargets) { + if (moveData.statusChange !== 'show') { + // Don't apply posIn width or height or showing, as will be 0 + + self.dom.el.style.width = posIn.width + 'px'; + self.dom.el.style.height = posIn.height + 'px'; + } + + self.dom.el.style.marginRight = posIn.marginRight + 'px'; + self.dom.el.style.marginBottom = posIn.marginBottom + 'px'; + } + + isFading && (self.dom.el.style.opacity = posIn.opacity); + + if (moveData.statusChange === 'show') { + transformValues = transformValues.concat(self.mixer.transformIn); + } + + self.dom.el.style[mixitup.features.transformProp] = transformValues.join(' '); + + self.callActions('afterApplyStylesIn', arguments); + }, + + /** + * Applies a transition followed by the final styles for the element to + * transition towards. + * + * @private + * @instance + * @param {mixitup.IMoveData} moveData + * @return {void} + */ + + applyStylesOut: function(moveData) { + var self = this, + transitionRules = [], + transformValues = [], + isResizing = self.mixer.config.animation.animateResizeTargets, + isFading = typeof self.mixer.effectsIn.opacity !== 'undefined'; + + self.callActions('beforeApplyStylesOut', arguments); + + // Build the transition rules + + transitionRules.push(self.writeTransitionRule( + mixitup.features.transformRule, + moveData.staggerIndex + )); + + if (moveData.statusChange !== 'none') { + transitionRules.push(self.writeTransitionRule( + 'opacity', + moveData.staggerIndex, + moveData.duration + )); + } + + if (isResizing) { + transitionRules.push(self.writeTransitionRule( + 'width', + moveData.staggerIndex, + moveData.duration + )); + + transitionRules.push(self.writeTransitionRule( + 'height', + moveData.staggerIndex, + moveData.duration + )); + + transitionRules.push(self.writeTransitionRule( + 'margin', + moveData.staggerIndex, + moveData.duration + )); + } + + // If no callback was provided, the element will + // not transition in any way so tag it as "immovable" + + if (!moveData.callback) { + self.mixer.targetsImmovable++; + + if (self.mixer.targetsMoved === self.mixer.targetsImmovable) { + // If the total targets moved is equal to the + // number of immovable targets, the operation + // should be considered finished + + self.mixer.cleanUp(moveData.operation); + } + + return; + } + + // If the target will transition in some fasion, + // assign a callback function + + self.operation = moveData.operation; + self.callback = moveData.callback; + + // As long as the target is not excluded, increment + // the total number of targets bound + + !self.isExcluded && self.mixer.targetsBound++; + + // Tag the target as bound to differentiate from transitionEnd + // events that may come from stylesheet driven effects + + self.isBound = true; + + // Apply the transition + + self.applyTransition(transitionRules); + + // Apply width, height and margin negation + + if (isResizing && moveData.posOut.width > 0 && moveData.posOut.height > 0) { + self.dom.el.style.width = moveData.posOut.width + 'px'; + self.dom.el.style.height = moveData.posOut.height + 'px'; + self.dom.el.style.marginRight = moveData.posOut.marginRight + 'px'; + self.dom.el.style.marginBottom = moveData.posOut.marginBottom + 'px'; + } + + if (!self.mixer.config.animation.nudge && moveData.statusChange === 'hide') { + // If we're not nudging, the translation should be + // applied before any other transforms to prevent + // lateral movement + + transformValues.push('translate(' + moveData.posOut.x + 'px, ' + moveData.posOut.y + 'px)'); + } + + // Apply fade + + switch (moveData.statusChange) { + case 'hide': + isFading && (self.dom.el.style.opacity = self.mixer.effectsOut.opacity); + + transformValues = transformValues.concat(self.mixer.transformOut); + + break; + case 'show': + isFading && (self.dom.el.style.opacity = 1); + } + + if ( + self.mixer.config.animation.nudge || + (!self.mixer.config.animation.nudge && moveData.statusChange !== 'hide') + ) { + // Opposite of above - apply translate after + // other transform + + transformValues.push('translate(' + moveData.posOut.x + 'px, ' + moveData.posOut.y + 'px)'); + } + + // Apply transforms + + self.dom.el.style[mixitup.features.transformProp] = transformValues.join(' '); + + self.callActions('afterApplyStylesOut', arguments); + }, + + /** + * Combines the name of a CSS property with the appropriate duration and delay + * values to created a valid transition rule. + * + * @private + * @instance + * @since 3.0.0 + * @param {string} property + * @param {number} staggerIndex + * @param {number} duration + * @return {string} + */ + + writeTransitionRule: function(property, staggerIndex, duration) { + var self = this, + delay = self.getDelay(staggerIndex), + rule = ''; + + rule = property + ' ' + + (duration > 0 ? duration : self.mixer.config.animation.duration) + 'ms ' + + delay + 'ms ' + + (property === 'opacity' ? 'linear' : self.mixer.config.animation.easing); + + return self.callFilters('ruleWriteTransitionRule', rule, arguments); + }, + + /** + * Calculates the transition delay for each target element based on its index, if + * staggering is applied. If defined, A custom `animation.staggerSeqeuence` + * function can be used to manipulate the order of indices to produce custom + * stagger effects (e.g. for use in a grid with irregular row lengths). + * + * @private + * @instance + * @since 2.0.0 + * @param {number} index + * @return {number} + */ + + getDelay: function(index) { + var self = this, + delay = -1; + + if (typeof self.mixer.config.animation.staggerSequence === 'function') { + index = self.mixer.config.animation.staggerSequence.call(self, index, self.state); + } + + delay = !!self.mixer.staggerDuration ? index * self.mixer.staggerDuration : 0; + + return self.callFilters('delayGetDelay', delay, arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {string[]} rules + * @return {void} + */ + + applyTransition: function(rules) { + var self = this, + transitionString = rules.join(', '); + + self.callActions('beforeApplyTransition', arguments); + + self.dom.el.style[mixitup.features.transitionProp] = transitionString; + + self.callActions('afterApplyTransition', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Event} e + * @return {void} + */ + + handleTransitionEnd: function(e) { + var self = this, + propName = e.propertyName, + canResize = self.mixer.config.animation.animateResizeTargets; + + self.callActions('beforeHandleTransitionEnd', arguments); + + if ( + self.isBound && + e.target.matches(self.mixer.config.selectors.target) && + ( + propName.indexOf('transform') > -1 || + propName.indexOf('opacity') > -1 || + canResize && propName.indexOf('height') > -1 || + canResize && propName.indexOf('width') > -1 || + canResize && propName.indexOf('margin') > -1 + ) + ) { + self.callback.call(self, self.operation); + + self.isBound = false; + self.callback = null; + self.operation = null; + } + + self.callActions('afterHandleTransitionEnd', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {Event} e + * @return {void} + */ + + eventBus: function(e) { + var self = this; + + self.callActions('beforeEventBus', arguments); + + switch (e.type) { + case 'webkitTransitionEnd': + case 'transitionend': + self.handleTransitionEnd(e); + } + + self.callActions('afterEventBus', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + unbindEvents: function() { + var self = this; + + self.callActions('beforeUnbindEvents', arguments); + + h.off(self.dom.el, 'webkitTransitionEnd', self.handler); + h.off(self.dom.el, 'transitionend', self.handler); + + self.callActions('afterUnbindEvents', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + bindEvents: function() { + var self = this, + transitionEndEvent = ''; + + self.callActions('beforeBindEvents', arguments); + + transitionEndEvent = mixitup.features.transitionPrefix === 'webkit' ? 'webkitTransitionEnd' : 'transitionend'; + + self.handler = function(e) { + return self.eventBus(e); + }; + + h.on(self.dom.el, transitionEndEvent, self.handler); + + self.callActions('afterBindEvents', arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @param {boolean} [getBox] + * @return {PosData} + */ + + getPosData: function(getBox) { + var self = this, + styles = {}, + rect = null, + posData = new mixitup.StyleData(); + + self.callActions('beforeGetPosData', arguments); + + posData.x = self.dom.el.offsetLeft; + posData.y = self.dom.el.offsetTop; + + if (self.mixer.config.animation.animateResizeTargets || getBox) { + rect = self.dom.el.getBoundingClientRect(); + + posData.top = rect.top; + posData.right = rect.right; + posData.bottom = rect.bottom; + posData.left = rect.left; + + posData.width = rect.width; + posData.height = rect.height; + } + + if (self.mixer.config.animation.animateResizeTargets) { + styles = window.getComputedStyle(self.dom.el); + + posData.marginBottom = parseFloat(styles.marginBottom); + posData.marginRight = parseFloat(styles.marginRight); + } + + return self.callFilters('posDataGetPosData', posData, arguments); + }, + + /** + * @private + * @instance + * @since 3.0.0 + * @return {void} + */ + + cleanUp: function() { + var self = this; + + self.callActions('beforeCleanUp', arguments); + + self.dom.el.style[mixitup.features.transformProp] = ''; + self.dom.el.style[mixitup.features.transitionProp] = ''; + self.dom.el.style.opacity = ''; + + if (self.mixer.config.animation.animateResizeTargets) { + self.dom.el.style.width = ''; + self.dom.el.style.height = ''; + self.dom.el.style.marginRight = ''; + self.dom.el.style.marginBottom = ''; + } + + self.callActions('afterCleanUp', arguments); + } +}); \ No newline at end of file diff --git a/mixitup-3.3.1/src/transform-data.js b/mixitup-3.3.1/src/transform-data.js new file mode 100644 index 0000000..ac8b8d2 --- /dev/null +++ b/mixitup-3.3.1/src/transform-data.js @@ -0,0 +1,27 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.TransformData = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.value = 0; + this.unit = ''; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.TransformData); + +mixitup.TransformData.prototype = Object.create(mixitup.Base.prototype); + +mixitup.TransformData.prototype.constructor = mixitup.TransformData; \ No newline at end of file diff --git a/mixitup-3.3.1/src/transform-defaults.js b/mixitup-3.3.1/src/transform-defaults.js new file mode 100644 index 0000000..5a2a692 --- /dev/null +++ b/mixitup-3.3.1/src/transform-defaults.js @@ -0,0 +1,57 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.TransformDefaults = function() { + mixitup.StyleData.apply(this); + + this.callActions('beforeConstruct'); + + this.scale.value = 0.01; + this.scale.unit = ''; + + this.translateX.value = 20; + this.translateX.unit = 'px'; + + this.translateY.value = 20; + this.translateY.unit = 'px'; + + this.translateZ.value = 20; + this.translateZ.unit = 'px'; + + this.rotateX.value = 90; + this.rotateX.unit = 'deg'; + + this.rotateY.value = 90; + this.rotateY.unit = 'deg'; + + this.rotateX.value = 90; + this.rotateX.unit = 'deg'; + + this.rotateZ.value = 180; + this.rotateZ.unit = 'deg'; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.TransformDefaults); + +mixitup.TransformDefaults.prototype = Object.create(mixitup.StyleData.prototype); + +mixitup.TransformDefaults.prototype.constructor = mixitup.TransformDefaults; + +/** + * @private + * @static + * @since 3.0.0 + * @type {mixitup.TransformDefaults} + */ + +mixitup.transformDefaults = new mixitup.TransformDefaults(); \ No newline at end of file diff --git a/mixitup-3.3.1/src/ui-class-names.js b/mixitup-3.3.1/src/ui-class-names.js new file mode 100644 index 0000000..3ffa9c2 --- /dev/null +++ b/mixitup-3.3.1/src/ui-class-names.js @@ -0,0 +1,28 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.UiClassNames = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.base = ''; + this.active = ''; + this.disabled = ''; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.UiClassNames); + +mixitup.UiClassNames.prototype = Object.create(mixitup.Base.prototype); + +mixitup.UiClassNames.prototype.constructor = mixitup.UiClassNames; \ No newline at end of file diff --git a/mixitup-3.3.1/src/user-instruction.js b/mixitup-3.3.1/src/user-instruction.js new file mode 100644 index 0000000..f512e64 --- /dev/null +++ b/mixitup-3.3.1/src/user-instruction.js @@ -0,0 +1,28 @@ +/* global mixitup, h */ + +/** + * @constructor + * @memberof mixitup + * @private + * @since 3.0.0 + */ + +mixitup.UserInstruction = function() { + mixitup.Base.call(this); + + this.callActions('beforeConstruct'); + + this.command = {}; + this.animate = false; + this.callback = null; + + this.callActions('afterConstruct'); + + h.seal(this); +}; + +mixitup.BaseStatic.call(mixitup.UserInstruction); + +mixitup.UserInstruction.prototype = Object.create(mixitup.Base.prototype); + +mixitup.UserInstruction.prototype.constructor = mixitup.UserInstruction; \ No newline at end of file diff --git a/mixitup-3.3.1/src/wrapper.hbs b/mixitup-3.3.1/src/wrapper.hbs new file mode 100644 index 0000000..cb1b0d7 --- /dev/null +++ b/mixitup-3.3.1/src/wrapper.hbs @@ -0,0 +1,105 @@ +{{>banner}} + +(function(window) { + 'use strict'; + + var mixitup = null, + h = null; + + {{>polyfills}} + + {{>factory}} + + {{>h}} + + {{>base}} + + {{>base-static}} + + {{>features}} + + {{>config-animation}} + + {{>config-behavior}} + + {{>config-callbacks}} + + {{>config-controls}} + + {{>config-class-names}} + + {{>config-data}} + + {{>config-debug}} + + {{>config-layout}} + + {{>config-load}} + + {{>config-selectors}} + + {{>config-render}} + + {{>config-templates}} + + {{>config}} + + {{>mixer-dom}} + + {{>ui-class-names}} + + {{>command-dataset}} + + {{>command-multimix}} + + {{>command-filter}} + + {{>command-sort}} + + {{>command-insert}} + + {{>command-remove}} + + {{>command-change-layout}} + + {{>control-definition}} + + {{>control}} + + {{>style-data}} + + {{>transform-data}} + + {{>transform-defaults}} + + {{>events}} + + {{>queue-item}} + + {{>mixer}} + + {{>i-move-data}} + + {{>target-dom}} + + {{>target}} + + {{>collection}} + + {{>operation}} + + {{>state}} + + {{>user-instruction}} + + {{>messages}} + + {{>facade}} + + {{>module-definitions}} + + mixitup.BaseStatic.call(mixitup.constructor); + + mixitup.NAME = '{{name}}'; + mixitup.CORE_VERSION = '{{version}}'; +})(window); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/functional/index.html b/mixitup-3.3.1/tests/functional/index.html new file mode 100644 index 0000000..4817439 --- /dev/null +++ b/mixitup-3.3.1/tests/functional/index.html @@ -0,0 +1,101 @@ + + + + + MixItUp Demo + + + + +

Native Controls

+ +

Filters

+ + + + + + + + +

Filter Toggles

+ + + + + +

Sorts

+ + + | + + + | + + + | + + + +

MultiMix

+ + + + +

API Methods

+ +
Append
+
Prepend
+
Insert at index (5)
+
Remove by element reference (0)
+
Remove by index (3)
+
Insert Multiple via markup
+
Insert Multiple via elements


+ +
Filter Category B
+
Filter Category B + C
+
Sort Custom Ascending
+ +

+ +
3 per page
+
Infinite per page
+
10 per page
+
+ +
+
A 5
+
A 1
+
B 4
+
C 3
+
C 2
+
C 6
+ +
+
+
+
+
+
+
+ + + + +
+
+ +
+
+
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/mixitup-3.3.1/tests/functional/main.js b/mixitup-3.3.1/tests/functional/main.js new file mode 100644 index 0000000..379baaa --- /dev/null +++ b/mixitup-3.3.1/tests/functional/main.js @@ -0,0 +1,191 @@ +/* global mixitup */ + +var sandbox = document.querySelector('.sandbox'); + +var mixer = mixitup('#sandbox-1', { + animation: { + effects: 'fade', + easing: 'cubic-bezier(1, 0, 0, 1)', + duration: 400 + }, + controls: { + scope: 'global', + live: false + // toggleLogic: 'and' + }, + pagination: { + limit: 4, + maxPagers: 6 + }, + load: { + // filter: 'none', + sort: 'random' + }, + // dragndrop: { + // enable: true, + // hidePlaceholder: false, + // debounceDelay: 20, + // detection: 'collision', + // // liveSort: false + // // swap: true + // }, + callbacks: { + // onMixLift: function() { + // console.log('lift', this); + // } + } +}, null); + +console.log(mixer.getState()); + +sandbox.addEventListener('mixStart', function(e) { + console.log('mixStart', e.detail); +}); + +sandbox.addEventListener('mixEnd', function(e) { + console.log('mixEnd', e.detail); +}); + +sandbox.addEventListener('mixClick', function(e) { + console.log('mixClick', e.detail); +}); + +sandbox.addEventListener('mixBusy', function(e) { + console.log('mixBusy', e.detail); +}); + +sandbox.addEventListener('mixFail', function(e) { + console.log('mixFail', e.detail); +}); + +sandbox.classList.add('sandbox__mixitup'); + +document.querySelector('.js-append').addEventListener('click', function() { + mixer.append('
C 3
'); +}); + +document.querySelector('.js-prepend').addEventListener('click', function() { + mixer.prepend('
A 2
'); +}); + +document.querySelector('.js-insert-at-index').addEventListener('click', function() { + mixer.insert(4, '
D 5
'); +}); + +document.querySelector('.js-remove-via-element').addEventListener('click', function() { + var state = mixer.getState(); + + if (state.targets[0]) { + mixer.remove(state.targets[0]); + } +}); + +document.querySelector('.js-remove-via-index').addEventListener('click', function() { + mixer.remove(3); +}); + +document.querySelector('.js-insert-multiple-via-markup').addEventListener('click', function() { + mixer.prepend( + '
D 1
' + + '
D 2
' + + '
D 3
' + ); +}); + +document.querySelector('.js-insert-multiple-via-elements').addEventListener('click', function() { + var h = mixitup.h, + el1 = h.createElement('
D 1
').children[0], + el2 = h.createElement('
D 2
').children[0], + el3 = h.createElement('
D 3
').children[0], + elements = [el1, el2, el3]; + + // Going into the mixer backwards? + + mixer.multiMix({ + insert: elements + }); +}); + +document.querySelector('.js-api-filter').addEventListener('click', function() { + mixer.filter('.cat-2'); +}); + +document.querySelector('.js-api-filter-compound').addEventListener('click', function() { + mixer.filter('.cat-2, .cat-3'); +}); + +document.querySelector('.js-api-sort').addEventListener('click', function() { + mixer.sort('order:asc'); +}); + +document.querySelector('.js-api-limit-3').addEventListener('click', function() { + mixer.paginate({limit: 3}); +}); + +document.querySelector('.js-api-limit-inf').addEventListener('click', function() { + mixer.paginate({limit: Infinity}); +}); + +document.querySelector('.js-api-limit-10').addEventListener('click', function() { + mixer.paginate({limit: 10}); +}); + +var dataset = [{ + id: '12', + category: '1' +}]; + +var dataMixer = mixitup('#sandbox-2', { + load: { + dataset: dataset + }, + data: { + uidKey: 'id', + dirtyCheck: true + }, + render: { + target: function(data) { + return `
`; + } + } +}); + +dataset.push({ + id: '14', + category: '2' +}, { + id: '2', + category: '3' +}); + +var first; + +dataMixer.dataset(dataset) + .then(function() { + dataset.reverse(); + + return dataMixer.dataset(dataset); + }) + .then(function() { + first = dataset.shift(); + + return dataMixer.dataset(dataset); + }) + .then(function() { + dataset.push(first); + + return dataMixer.dataset(dataset); + }) + .then(function() { + dataset = [dataset[2], dataset[0]]; + + return dataMixer.dataset(dataset); + }) + .then(function() { + dataset[1] = { + id: '14', + category: '4' + }; + + return dataMixer.dataset(dataset); + }); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/functional/styles.css b/mixitup-3.3.1/tests/functional/styles.css new file mode 100644 index 0000000..2e55153 --- /dev/null +++ b/mixitup-3.3.1/tests/functional/styles.css @@ -0,0 +1,136 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +body { + background: #eee; +} + +.mixitup-control, +.mixitup-pager { + cursor: pointer; + display: inline-block; + padding: .5rem; + background: #eee; +} + +.mixitup-control-active, +.mixitup-pager-active { + font-weight: bold; +} + +.mixitup-pager-disabled { + opacity: .8; +} + +.mix { + vertical-align: top; + background: skyblue; + border-radius: 5px; + margin: 2rem; + color: transparent; + + transition: opacity 300ms; + + -webkit-user-select: none; +} + +.mix, +.gap { + display: inline-block; + width: 6%; + margin: 0 2rem; +} + +.mix { + margin: 2rem; +} + +.mix:before { + content: ''; + display: inline-block; + padding-top: 100%; +} + +.mixitup-target-placeholder { + background: transparent !important; + border: 2px dashed #ccc; + box-sizing: border-box; +} + +.mixitup-target-dragging { + opacity: .5; +} + +.mixitup-target-closest { + border: 3px solid orange; +} + +.sandbox { + overflow: hidden; + text-align: justify; + background: #333; + min-height: 2rem; +} + +.sandbox:after { + content: ''; + width: 100%; + display: inline-block; +} + +.sandbox__mixitup .mix { + +} + +.mix.cat-2 { + background: violet; +} + +.mix.cat-3 { + background: yellow; +} + +.mix.cat-4 { + background: aquamarine; +} \ No newline at end of file diff --git a/mixitup-3.3.1/tests/mock/dataset.json b/mixitup-3.3.1/tests/mock/dataset.json new file mode 100644 index 0000000..85ebc5a --- /dev/null +++ b/mixitup-3.3.1/tests/mock/dataset.json @@ -0,0 +1,38 @@ +[ + { + "id": "target-1", + "categories": ["a"], + "published": "20161102", + "views": 100 + }, + { + "id": "target-2", + "categories": ["a"], + "published": "20130501", + "views": 54 + }, + { + "id": "target-3", + "categories": ["b"], + "published": "20121231", + "views": 3 + }, + { + "id": "target-4", + "categories": ["b"], + "published": "20160407", + "views": 62 + }, + { + "id": "target-5", + "categories": ["c"], + "published": "20160820", + "views": 54 + }, + { + "id": "target-6", + "categories": ["a", "c"], + "published": "20151020", + "views": 95 + } +] \ No newline at end of file diff --git a/mixitup-3.3.1/tests/mock/dom.js b/mixitup-3.3.1/tests/mock/dom.js new file mode 100644 index 0000000..c76fd72 --- /dev/null +++ b/mixitup-3.3.1/tests/mock/dom.js @@ -0,0 +1,118 @@ +'use strict'; + +require('jsdom-global')(); + +const renderElement = (html) => { + const temp = document.createElement('div'); + + temp.innerHTML = html; + + return temp.firstElementChild; +}; + +module.exports = { + getContainer() { + return renderElement('
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'); + }, + + getEmptyContainer() { + return renderElement('
'); + }, + + getFilterControls() { + return renderElement('
' + + '
All
' + + '
None
' + + '
Category A
' + + '
Category B
' + + '
Category C
' + + '
Category D
' + + '
Category A OR B
' + + '
Category A AND C
' + + '
Category A (attribute)
' + + '
Category A OR B (attribute)
' + + '
Category A AND C (attribute)
' + + '
Category A
' + + '
Category B
' + + '
Category C
' + + '
'); + }, + + getFilterControl() { + return renderElement('
Category D
'); + }, + + getToggleControl() { + return renderElement('
Category B
'); + }, + + getSortControl() { + return renderElement('
Views (desc) Published (asc)
'); + }, + + getSortControls() { + return renderElement('
' + + '
Default
' + + '
Default Ascending
' + + '
Default Descending
' + + '
Random
' + + '
Published Date
' + + '
Views
' + + '
Published (asc) Views (desc)
' + + '
'); + }, + + getMultimixControls() { + return renderElement('
' + + '
All / Default
' + + '
Category B / Published
' + + '
'); + }, + + getTotalWhitespace(html) { + let re = /[>? ]( )[ 'category-' + category).join(' '); + } + + get categoryList() { + return this.categories.join(' '); + } + }, + + ITEM_TEMPLATE: '
', + + ITEM_TEMPLATE_ALT: '
' +}; \ No newline at end of file diff --git a/mixitup-3.3.1/tests/mock/extension.js b/mixitup-3.3.1/tests/mock/extension.js new file mode 100644 index 0000000..806d46b --- /dev/null +++ b/mixitup-3.3.1/tests/mock/extension.js @@ -0,0 +1,37 @@ +(function(window) { + 'use strict'; + + var mixitupMockExtension = function(mixitup) { + var h = mixitup.h; + + if ( + !mixitup.CORE_VERSION || + !h.compareVersions(mixitupMockExtension.REQUIRE_CORE_VERSION, mixitup.CORE_VERSION) + ) { + throw new Error( + '[MixItUp-MockExtension] MixItUp MockExtension v' + + mixitupMockExtension.EXTENSION_VERSION + + ' requires at least MixItUp v' + + mixitupMockExtension.REQUIRE_CORE_VERSION + ); + } + + }; + + mixitupMockExtension.TYPE = 'mixitup-extension'; + mixitupMockExtension.NAME = 'mixitup-mock-extension'; + mixitupMockExtension.EXTENSION_VERSION = '1.0.0'; + mixitupMockExtension.REQUIRE_CORE_VERSION = '3.0.0'; + + if (typeof exports === 'object' && typeof module === 'object') { + module.exports = mixitupMockExtension; + } else if (typeof define === 'function' && define.amd) { + define(function() { + return mixitupMockExtension; + }); + } else if (window.mixitup && typeof window.mixitup === 'function') { + mixitupMockExtension(window.mixitup); + } else { + console.error('[MixItUp-MockExtension] MixItUp core not found'); + } +})(window); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/callbacks.js b/mixitup-3.3.1/tests/unit/callbacks.js new file mode 100644 index 0000000..e9a6b4d --- /dev/null +++ b/mixitup-3.3.1/tests/unit/callbacks.js @@ -0,0 +1,175 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +describe('mixitup()', () => { + it('should accept an `onMixStart` callback, invoked at the start of operations', () => { + let container = dom.getContainer(); + let wasCalled = false; + + let mixer = mixitup(container, { + callbacks: { + onMixStart: (state, futureState) => { + chai.assert.instanceOf(state, mixitup.State); + chai.assert.instanceOf(futureState, mixitup.State); + chai.assert.notEqual(state.totalShow, futureState.totalShow); + + wasCalled = true; + } + } + }); + + return mixer.hide() + .then(() => chai.assert.equal(wasCalled, true)); + }); + + it('should accept an `onMixBusy` callback, called if simulataneous operation is rejected', () => { + let container = dom.getContainer(); + let wasCalled = false; + + let mixer = mixitup(container, { + debug: { + fauxAsync: true + }, + animation: { + duration: 200, + queue: false + }, + callbacks: { + onMixBusy: (state) => { + chai.assert.instanceOf(state, mixitup.State); + + wasCalled = true; + } + } + }); + + mixer.hide(); + + return mixer.show() + .then(() => chai.assert.equal(wasCalled, true)); + }); + + it('should accept an `onMixEnd` callback, called at the end of an operation', () => { + let container = dom.getContainer(); + let wasCalled = false; + let endState; + + let mixer = mixitup(container, { + callbacks: { + onMixEnd: (state) => { + endState = state; + + chai.assert.instanceOf(state, mixitup.State); + + wasCalled = true; + } + } + }); + + return mixer.hide() + .then(state => { + chai.assert.equal(state.totalShow, endState.totalShow); + chai.assert.equal(wasCalled, true); + }); + }); + + it('should accept an `onMixFail` callback, called when a filter operation does not match any targets', () => { + let container = dom.getContainer(); + let wasCalled = false; + + let mixer = mixitup(container, { + callbacks: { + onMixFail: (state) => { + chai.assert.instanceOf(state, mixitup.State); + + wasCalled = true; + } + } + }); + + return mixer.filter('.category-x') + .then(() => { + chai.assert.equal(wasCalled, true); + }); + }); + + it('should accept an `onMixClick` callback invoked when a control is clicked', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + let controls = dom.getFilterControls(); + let wasCalled = false; + let filter = controls.querySelector('[data-filter="none"]'); + + container.insertBefore(controls, container.children[0]); + + frag.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local' + }, + callbacks: { + onMixClick: function(state, originalEvent) { + var self = this; + + chai.assert.instanceOf(state, mixitup.State); + chai.assert.instanceOf(originalEvent, window.MouseEvent); + chai.assert.equal(self, filter); + + wasCalled = true; + } + } + }, frag); + + filter.click(); + + return Promise.resolve() + .then(() => { + chai.assert.equal(wasCalled, true); + + mixer.destroy(); + }); + }); + + it('should accept an `onMixClick` callback which can be cancelled by returning false', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + let controls = dom.getFilterControls(); + let wasCalled = false; + let filter = controls.querySelector('[data-filter="none"]'); + + container.insertBefore(controls, container.children[0]); + + frag.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local' + }, + callbacks: { + onMixClick: () => { + return false; + }, + onMixEnd: () => { + // Will not be called + + wasCalled = true; + } + } + }, frag); + + filter.click(); + + return Promise.resolve() + .then(() => { + chai.assert.equal(wasCalled, false); + + mixer.destroy(); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/controls-filter.js b/mixitup-3.3.1/tests/unit/controls-filter.js new file mode 100644 index 0000000..e877a92 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/controls-filter.js @@ -0,0 +1,201 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('Controls', () => { + describe('Filter', () => { + const frag = document.createDocumentFragment(); + const container = dom.getContainer(); + const controls = dom.getFilterControls(); + + container.insertBefore(controls, container.children[0]); + + frag.appendChild(container); + + const mixer = mixitup(container, { + controls: { + scope: 'local' + } + }, frag); + + after(() => mixer.destroy()); + + it('should detect nested filter controls and set active states upon instantiation', () => { + const filter = controls.querySelector('[data-filter="all"]'); + + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should map filter controls with value "none" to the selector ""', () => { + const filter = controls.querySelector('[data-filter="none"]'); + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, ''); + chai.assert.equal(state.totalShow, 0); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should map filter controls with value "all" to the target selector', () => { + const filter = controls.querySelector('[data-filter="all"]'); + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.mix'); + chai.assert.equal(state.totalHide, 0); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should accept filter controls with a selector value', () => { + const filter = controls.querySelector('[data-filter=".category-a"]'); + const totalMatching = container.querySelectorAll('.category-a').length; + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should accept filter controls with a compound OR selector', () => { + const filter = controls.querySelector('[data-filter=".category-a, .category-b"]'); + const totalMatching = container.querySelectorAll('.category-a, .category-b').length; + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a, .category-b'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should accept filter controls with a compound AND selector', () => { + const filter = controls.querySelector('[data-filter=".category-a.category-c"]'); + const totalMatching = container.querySelectorAll('.category-a.category-c').length; + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a.category-c'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should accept filter controls with an attribute selector value', () => { + const filter = controls.querySelector('.mixitup_control__attr-a'); + const totalMatching = container.querySelectorAll('[data-category="a"]').length; + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '[data-category="a"]'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should accept filter controls with an attribute selector value', () => { + const filter = controls.querySelector('.mixitup_control__attr-a'); + const totalMatching = container.querySelectorAll('[data-category="a"]').length; + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '[data-category="a"]'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should accept filter controls with a compound OR attribute selector value', () => { + const filter = controls.querySelector('.mixitup_control__attr-a-or-b'); + const totalMatching = container.querySelectorAll('[data-category="a"], [data-category="b"]').length; + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '[data-category="a"], [data-category="b"]'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should accept filter controls with a compound AND attribute selector value', () => { + const filter = controls.querySelector('.mixitup_control__attr-a-and-c'); + const totalMatching = container.querySelectorAll('[data-category="a"][data-category="c"]').length; + + filter.click(); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '[data-category="a"][data-category="c"]'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it ('should allow a single set of controls to control multiple mixer instance simultanously', () => { + const frag = document.createDocumentFragment(); + + const container1 = dom.getContainer(); + const container2 = dom.getContainer(); + const controls = dom.getFilterControls(); + + frag.appendChild(controls); + frag.appendChild(container1); + frag.appendChild(container2); + + const mixer1 = mixitup(container1, {}, frag); + const mixer2 = mixitup(container2, {}, frag); + + after(() => { + mixer1.destroy(); + mixer2.destroy(); + }); + + const filter = controls.querySelector('[data-filter=".category-a"]'); + + filter.click(); + + chai.assert.equal(mixer1.getState().activeFilter.selector, '.category-a'); + chai.assert.equal(mixer2.getState().activeFilter.selector, '.category-a'); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it ('should activate the appropriate controls on load for a single selector', () => { + const frag = document.createDocumentFragment(); + + const container = dom.getContainer(); + const controls = dom.getFilterControls(); + + frag.appendChild(controls); + frag.appendChild(container); + + const mixer = mixitup(container, { + load: { + filter: '.category-a' + } + }, frag); + + after(() => mixer.destroy()); + + const filter = controls.querySelector('[data-filter=".category-a"]'); + + chai.assert.isTrue(filter.classList.contains('mixitup-control-active')); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/controls-live.js b/mixitup-3.3.1/tests/unit/controls-live.js new file mode 100644 index 0000000..9984ebd --- /dev/null +++ b/mixitup-3.3.1/tests/unit/controls-live.js @@ -0,0 +1,156 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('Controls', () => { + describe('Live', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + let filterControls = dom.getFilterControls(); + let sortControls = dom.getSortControls(); + + container.insertBefore(filterControls, container.children[0]); + container.insertBefore(sortControls, filterControls); + + frag.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local', + live: true + } + }, frag); + + after(() => mixer.destroy()); + + it('should detect nested controls and set active states upon instantiation', () => { + let filter = filterControls.querySelector('[data-filter="all"]'); + + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it('should allow new filter controls to be added', () => { + let control = dom.getFilterControl(); + let totalMatching = container.querySelectorAll('.category-d').length; + + filterControls.appendChild(control); + + control.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-d'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(control.matches('.mixitup-control-active')); + }); + + it('should allow new toggle controls to be added', () => { + let control = dom.getToggleControl(); + let totalMatching = container.querySelectorAll('.category-b, .category-d').length; + + filterControls.appendChild(control); + + control.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-d, .category-b'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(control.matches('.mixitup-control-active')); + }); + + it('should allow new sort controls to be added', () => { + let control = dom.getSortControl(); + + sortControls.appendChild(control); + + control.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeSort.sortString, 'views:desc'); + chai.assert.isOk(state.activeSort.next); + chai.assert.equal(state.activeSort.next.sortString, 'published:asc'); + chai.assert.isOk(control.matches('.mixitup-control-active')); + }); + + it ('should allow a single set of filter controls to control multiple mixer instance simultanously', () => { + let frag = document.createDocumentFragment(); + + let container1 = dom.getContainer(); + let container2 = dom.getContainer(); + let controls = dom.getFilterControls(); + let config = { + controls: { + live: true + } + }; + + frag.appendChild(controls); + frag.appendChild(container1); + frag.appendChild(container2); + + let mixer1 = mixitup(container1, config, frag); + let mixer2 = mixitup(container2, config, frag); + + after(() => { + mixer1.destroy(); + mixer2.destroy(); + }); + + let filter = controls.querySelector('[data-filter=".category-a"]'); + + filter.click(); + + chai.assert.equal(mixer1.getState().activeFilter.selector, '.category-a'); + chai.assert.equal(mixer2.getState().activeFilter.selector, '.category-a'); + chai.assert.isOk(filter.matches('.mixitup-control-active')); + }); + + it ('should restrict control clicks to only those matching is a control selector is defined', () => { + let frag = document.createDocumentFragment(); + + let container = dom.getContainer(); + let controls = dom.getFilterControls(); + + let config = { + controls: { + live: true + }, + selectors: { + control: '.mixitup-control-restrict' + } + }; + + frag.appendChild(controls); + frag.appendChild(container); + + let mixer = mixitup(container, config, frag); + + after(() => { + mixer.destroy(); + }); + + let filter1 = controls.querySelector('[data-filter=".category-a"]'); + + filter1.classList.add('mixitup-control-restrict'); + + filter1.click(); + + let filter2 = controls.querySelector('[data-filter=".category-b"]'); + + filter2.click(); + + chai.assert.equal(mixer.getState().activeFilter.selector, '.category-a'); + chai.assert.isOk(filter1.matches('.mixitup-control-active')); + chai.assert.isNotOk(filter2.matches('.mixitup-control-active')); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/controls-multimix.js b/mixitup-3.3.1/tests/unit/controls-multimix.js new file mode 100644 index 0000000..572cd99 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/controls-multimix.js @@ -0,0 +1,49 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('Controls', () => { + describe('Multimix', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + let controls = dom.getMultimixControls(); + + container.insertBefore(controls, container.children[0]); + + frag.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local' + } + }, frag); + + after(() => mixer.destroy()); + + it('should detect nested filter controls and set active states upon instantiation', () => { + let control = controls.querySelector('[data-filter="all"][data-sort="default:asc"]'); + + chai.assert.isOk(control.matches('.mixitup-control-active')); + }); + + it('should read filter and sort actions simultaneously', () => { + let control = controls.querySelector('[data-filter=".category-b"][data-sort="published"]'); + + control.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-b'); + chai.assert.equal(state.activeSort.sortString, 'published'); + + chai.assert.isOk(control.matches('.mixitup-control-active')); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/controls-sort.js b/mixitup-3.3.1/tests/unit/controls-sort.js new file mode 100644 index 0000000..557d4f2 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/controls-sort.js @@ -0,0 +1,76 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('Controls', () => { + describe('Sort', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + let controls = dom.getSortControls(); + + container.insertBefore(controls, container.children[0]); + + frag.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local' + } + }, frag); + + after(() => mixer.destroy()); + + it('should detect nested sort controls and set active states upon instantiation', () => { + let control1 = controls.querySelector('[data-sort="default"]'); + let control2 = controls.querySelector('[data-sort="default:asc"]'); + + chai.assert.isOk(control1.matches('.mixitup-control-active')); + chai.assert.isOk(control2.matches('.mixitup-control-active')); + }); + + it('should handle sort control clicks with a single sortString value', () => { + let control = controls.querySelector('[data-sort="default:desc"]'); + + control.click(); + + let state = mixer.getState(); + + chai.assert.isOk(control.matches('.mixitup-control-active')); + chai.assert.equal(state.activeSort.sortString, 'default:desc'); + chai.assert.equal(state.activeSort.attribute, ''); + chai.assert.equal(state.activeSort.order, 'desc'); + }); + + it('should handle sort control clicks with "random" value', () => { + let control = controls.querySelector('[data-sort="random"]'); + + control.click(); + + let state = mixer.getState(); + + chai.assert.isOk(control.matches('.mixitup-control-active')); + chai.assert.equal(state.activeSort.sortString, 'random'); + chai.assert.equal(state.activeSort.attribute, ''); + chai.assert.equal(state.activeSort.order, 'random'); + }); + + it('should activate buttons in response to matching API calls', () => { + let control = controls.querySelector('[data-sort="published:asc views:desc"]'); + + return mixer.sort('published:asc views:desc') + .then(state => { + chai.assert.isOk(control.matches('.mixitup-control-active')); + chai.assert.equal(state.activeSort.sortString, 'published:asc'); + chai.assert.isOk(state.activeSort.next); + chai.assert.equal(state.activeSort.next.sortString, 'views:desc'); + }); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/controls-toggle.js b/mixitup-3.3.1/tests/unit/controls-toggle.js new file mode 100644 index 0000000..93450bd --- /dev/null +++ b/mixitup-3.3.1/tests/unit/controls-toggle.js @@ -0,0 +1,304 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('Controls', () => { + describe('Toggle', () => { + describe('OR', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + let controls = dom.getFilterControls(); + + container.insertBefore(controls, container.children[0]); + + frag.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local' + } + }); + + after(() => mixer.destroy()); + + it('should accept toggle controls with a selector value', () => { + return mixer.hide() + .then(() => { + let toggle = controls.querySelector('[data-toggle=".category-a"]'); + + let totalMatching = container.querySelectorAll('.category-a').length; + + toggle.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(toggle.matches('.mixitup-control-active')); + }); + }); + + it('should build up a compound selector as toggles are activated', () => { + let toggleA = controls.querySelector('[data-toggle=".category-a"]'); + let toggleB = controls.querySelector('[data-toggle=".category-b"]'); + + let totalMatching = container.querySelectorAll('.category-a, .category-b').length; + + toggleB.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a, .category-b'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(toggleA.matches('.mixitup-control-active')); + chai.assert.isOk(toggleB.matches('.mixitup-control-active')); + }); + + it('should break down a compound selector as toggles are deactivated', () => { + let toggle = controls.querySelector('[data-toggle=".category-a"]'); + + let totalMatching = container.querySelectorAll('.category-b').length; + + toggle.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-b'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isNotOk(toggle.matches('.mixitup-control-active')); + }); + + it('should return to "all" when all toggles are deactivated', () => { + let toggle = controls.querySelector('[data-toggle=".category-b"]'); + + toggle.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.mix'); + chai.assert.equal(state.totalHide, 0); + chai.assert.isNotOk(toggle.matches('.mixitup-control-active')); + }); + + it ('should activate the appropriate toggle controls on load for an OR compound selector', () => { + const frag = document.createDocumentFragment(); + + const container = dom.getContainer(); + const controls = dom.getFilterControls(); + + frag.appendChild(controls); + frag.appendChild(container); + + const mixer = mixitup(container, { + load: { + filter: '.category-a, .category-c' + } + }, frag); + + after(() => mixer.destroy()); + + const toggleA = controls.querySelector('[data-toggle=".category-a"]'); + const toggleC = controls.querySelector('[data-toggle=".category-c"]'); + + chai.assert.isTrue(toggleA.classList.contains('mixitup-control-active')); + chai.assert.isTrue(toggleC.classList.contains('mixitup-control-active')); + }); + }); + + describe('AND', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + let controls = dom.getFilterControls(); + + container.insertBefore(controls, container.children[0]); + + frag.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local', + toggleLogic: 'AND' + } + }); + + after(() => mixer.destroy()); + + it('should accept toggle controls with a selector value', () => { + return mixer.hide() + .then(() => { + let toggle = controls.querySelector('[data-toggle=".category-a"]'); + + let totalMatching = container.querySelectorAll('.category-a').length; + + toggle.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(toggle.matches('.mixitup-control-active')); + }); + }); + + it('should build up a compound selector as toggles are activated', () => { + let toggleA = controls.querySelector('[data-toggle=".category-a"]'); + let toggleB = controls.querySelector('[data-toggle=".category-c"]'); + + let totalMatching = container.querySelectorAll('.category-a.category-c').length; + + toggleB.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a.category-c'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isOk(toggleA.matches('.mixitup-control-active')); + chai.assert.isOk(toggleB.matches('.mixitup-control-active')); + }); + + it('should break down a compound selector as toggles are deactivated', () => { + let toggle = controls.querySelector('[data-toggle=".category-a"]'); + + let totalMatching = container.querySelectorAll('.category-c').length; + + toggle.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-c'); + chai.assert.equal(state.totalShow, totalMatching); + chai.assert.isNotOk(toggle.matches('.mixitup-control-active')); + }); + + it('should return to "all" when all toggles are deactivated', () => { + let toggle = controls.querySelector('[data-toggle=".category-c"]'); + + toggle.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.mix'); + chai.assert.equal(state.totalHide, 0); + chai.assert.isNotOk(toggle.matches('.mixitup-control-active')); + }); + + it('should allow toggles to activated via the API', () => { + let totalMatching = container.querySelectorAll('.category-a.category-c').length; + + mixer.toggleOn('.category-a'); + mixer.toggleOn('.category-c'); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a.category-c'); + chai.assert.equal(state.totalShow, totalMatching); + }); + + + it ('should activate the appropriate toggle controls on load for an AND compound selector', () => { + const frag = document.createDocumentFragment(); + + const container = dom.getContainer(); + const controls = dom.getFilterControls(); + + frag.appendChild(controls); + frag.appendChild(container); + + const mixer = mixitup(container, { + controls: { + toggleLogic: 'and' + }, + load: { + filter: '.category-a.category-c' + } + }, frag); + + after(() => mixer.destroy()); + + const toggleA = controls.querySelector('[data-toggle=".category-a"]'); + const toggleC = controls.querySelector('[data-toggle=".category-c"]'); + + chai.assert.isTrue(toggleA.classList.contains('mixitup-control-active')); + chai.assert.isTrue(toggleC.classList.contains('mixitup-control-active')); + }); + }); + + describe('Defaults', () => { + it('should default to "none" when all toggles are deactivated and toggleDefault is set to "none"', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + let controls = dom.getFilterControls(); + + container.insertBefore(controls, container.children[0]); + + frag.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local', + toggleDefault: 'none' + } + }); + + return mixer.hide() + .then(() => { + let toggle = controls.querySelector('[data-toggle=".category-a"]'); + + // on + toggle.click(); + + // off + toggle.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, ''); + chai.assert.equal(state.totalShow, 0); + chai.assert.isNotOk(toggle.matches('.mixitup-control-active')); + + mixer.destroy(); + }); + }); + + it('should default to "all" when all toggles are deactivated', () => { + let container = dom.getContainer(); + let controls = dom.getFilterControls(); + + container.insertBefore(controls, container.children[0]); + + document.body.appendChild(container); + + let mixer = mixitup(container, { + controls: { + scope: 'local', + toggleDefault: 'all' + } + }); + + return mixer.hide() + .then(() => { + let toggle = controls.querySelector('[data-toggle=".category-a"]'); + + // on + toggle.click(); + + // off + toggle.click(); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.mix'); + chai.assert.equal(state.totalHide, 0); + chai.assert.isNotOk(toggle.matches('.mixitup-control-active')); + }); + }); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/extension.js b/mixitup-3.3.1/tests/unit/extension.js new file mode 100644 index 0000000..c450a44 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/extension.js @@ -0,0 +1,19 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const extension = require('../mock/extension'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('Extension', () => { + it('should register itself via the mixitup.use() method', () => { + mixitup.use(extension); + + chai.assert.isOk(mixitup.extensions[extension.NAME]); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/factory.js b/mixitup-3.3.1/tests/unit/factory.js new file mode 100644 index 0000000..d589555 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/factory.js @@ -0,0 +1,294 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const dataset = require('../mock/dataset'); +const mixitup = require('../../dist/mixitup.js'); + +describe('mixitup()', () => { + it('should throw an error if no container reference', () => { + chai.assert.throws(() => mixitup(), Error, mixitup.messages.errorFactoryInvalidContainer()); + }); + + it('should throw an error if a null container reference is passed', () => { + chai.assert.throws(() => mixitup(null), Error, mixitup.messages.errorFactoryInvalidContainer()); + }); + + it('should throw an error if an invalid container reference is passed', () => { + chai.assert.throws(() => mixitup({}), Error, mixitup.messages.errorFactoryInvalidContainer()); + }); + + it('should throw an error if an invalid reference or selector is passed', function() { + chai.assert.throws(() => mixitup(false), Error, mixitup.messages.errorFactoryInvalidContainer()); + }); + + it('should throw an error if an invalid configuration option is passed', function() { + let container = dom.getContainer(); + + chai.assert.throws(() => { + mixitup(container, { + animations: {} + }); + }, TypeError); + }); + + it('should accept an element reference as a container', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + + chai.assert.isOk(mixer); + + mixer.destroy(); + }); + + it('should accept a container selector', () => { + let frag = document.createDocumentFragment(); + let container = dom.getContainer(); + + frag.appendChild(container); + + let mixer = mixitup('.mixitup-container', {}, frag); + let state = mixer.getState(); + + chai.assert.isOk(mixer); + chai.assert.equal(state.container, frag.querySelector('.mixitup-container')); + + mixer.destroy(); + }); + + it('should accept a container and valid configuration object', function() { + let container = dom.getContainer(); + let mixer = mixitup(container, { + selectors: { + target: '[data-ref="mix"]' + }, + controls: { + enable: false + } + }); + + let state = mixer.getState(); + + chai.assert.isOk(mixer); + chai.assert.equal(state.activeFilter.selector, '[data-ref="mix"]'); + + mixer.destroy(); + }); + + it('should throw an error if the container selector yields no element', () => { + chai.assert.throws(() => mixitup('.invalid-container-selector'), Error, mixitup.messages.errorFactoryContainerNotFound()); + }); + + it('should return an instance of a facade by default', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + + chai.assert.instanceOf(mixer, mixitup.Facade); + + mixer.destroy(); + }); + + it('should return an instance of a mixer if debug mode enabled', () => { + let container = dom.getContainer(); + let mixer = mixitup(container, { + debug: { + enable: true + }, + controls: { + enable: false + } + }); + + chai.assert.instanceOf(mixer, mixitup.Mixer); + + mixer.destroy(); + }); + + it('should return a single instance of a mixer, wrapping the first element if multiple elements passed', () => { + let elementList = [ + dom.getContainer(), + dom.getContainer() + ]; + + let mixer = mixitup(elementList, { + debug: { + enable: true + }, + controls: { + enable: false + } + }); + + chai.assert.instanceOf(mixer, mixitup.Mixer); + chai.assert.equal(mixer.getState().container, elementList[0]); + + mixer.destroy(); + }); + + it('should return an instance of a collection if multiple elements passed and `returnCollection` specified', () => { + let elementList = [ + dom.getContainer(), + dom.getContainer() + ]; + + let collection = mixitup(elementList, void(0), void(0), true); + + chai.assert.instanceOf(collection, mixitup.Collection); + chai.assert.instanceOf(collection[0], mixitup.Facade); + chai.assert.instanceOf(collection[1], mixitup.Facade); + + collection.mixitup('destroy'); + }); + + it('should add a unique ID to the container if no ID present', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let state = mixer.getState(); + + chai.assert.equal(container.id, state.id); + + mixer.destroy(); + }); + + it('should use any existing ID on the container as the mixer ID if present', () => { + let container = dom.getContainer(); + let id = 'test-id'; + + container.id = id; + + let mixer = mixitup(container); + let state = mixer.getState(); + + chai.assert.equal(id, state.id); + + mixer.destroy(); + }); + + it('should not allow multiple instance to be instantiated on a single container', () => { + let container = dom.getContainer(); + + let mixer1 = mixitup(container, { + debug: { + enable: true + }, + controls: { + enable: false + } + }); + + let mixer2 = mixitup(container, { + debug: { + enable: true, + showWarnings: false + }, + controls: { + enable: false + } + }); + + let facade = mixitup(container); + + chai.assert.equal(mixer1, mixer2); + chai.assert.notEqual(facade, mixer1); + chai.assert.notEqual(facade, mixer2); + + mixer1.destroy(); + }); + + it('should respect a `load.filter` configuration option of none', () => { + let container = dom.getContainer(); + let mixer = mixitup(container, { + load: { + filter: 'none' + } + }); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, ''); + chai.assert.equal(state.totalShow, 0); + chai.assert.equal(state.hide[0].style.display, 'none'); + + mixer.destroy(); + }); + + it('should respect a `load.filter` configuration option of a single selector', () => { + let container = dom.getContainer(); + let mixer = mixitup(container, { + load: { + filter: '.category-a' + } + }); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a'); + chai.assert.equal(state.totalShow, 3); + + mixer.destroy(); + }); + + it('should respect a `load.filter` configuration option of a compound selector', () => { + let container = dom.getContainer(); + let mixer = mixitup(container, { + load: { + filter: '.category-a.category-c' + } + }); + + let state = mixer.getState(); + + chai.assert.equal(state.activeFilter.selector, '.category-a.category-c'); + chai.assert.equal(state.totalShow, 1); + + mixer.destroy(); + }); + + it('should respect a `load.sort` configuration option', () => { + let idsByPublishedDate = dataset.slice().sort((a, b) => { + let dateA = a.published; + let dateB = b.published; + + if (dateA < dateB) { + return -1; + } + + if (dateA > dateB) { + return 1; + } + + return 0; + }).map(item => item.id.toString()); + + let container = dom.getContainer(); + let mixer = mixitup(container, { + load: { + sort: 'published' + } + }); + + let state = mixer.getState(); + let targetIds = state.show.map(el => el.id); + + chai.assert.deepEqual(targetIds, idsByPublishedDate); + + mixer.destroy(); + }); + + it('should add a `layout.containerClassName` class if specified and be reflected in state', () => { + let container = dom.getContainer(); + let mixer = mixitup(container, { + layout: { + containerClassName: 'grid' + } + }); + + let state = mixer.getState(); + + chai.assert.equal(state.activeContainerClassName, 'grid'); + + mixer.destroy(); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/h.js b/mixitup-3.3.1/tests/unit/h.js new file mode 100644 index 0000000..de1bcc3 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/h.js @@ -0,0 +1,44 @@ +'use strict'; + +const chai = require('chai'); +const mixitup = require('../../dist/mixitup.js'); + +const h = mixitup.h; + +describe('h#compareVersions()', () => { + it('should return true if versions are matching', () => { + let result = h.compareVersions('1.0.0', '1.0.0'); + + chai.assert.isOk(result); + }); + + it('should return false if specimen version is less than control', () => { + let result = h.compareVersions('1.0.0', '0.1.2'); + + chai.assert.isNotOk(result); + }); + + it('should return true if specimen version is greater than control', () => { + let result = h.compareVersions('1.0.0', '1.1.2'); + + chai.assert.isOk(result); + }); + + it('should return true if specimen version is greater than control, with double figures', () => { + let result = h.compareVersions('3.0.0', '10.1.2'); + + chai.assert.isOk(result); + }); + + it('should handle semver carat notation', () => { + let result = h.compareVersions('^3.0.0', '2.0.0'); + + chai.assert.isNotOk(result); + }); + + it('should handle semver label notation', () => { + let result = h.compareVersions('^3.0.0', '3.0.0-beta'); + + chai.assert.isOk(result); + }); +}); diff --git a/mixitup-3.3.1/tests/unit/main.js b/mixitup-3.3.1/tests/unit/main.js new file mode 100644 index 0000000..1ae556a --- /dev/null +++ b/mixitup-3.3.1/tests/unit/main.js @@ -0,0 +1,20 @@ +require('./factory'); +require('./mixer-get-state'); +require('./mixer-filter'); +require('./mixer-toggle-on-off'); +require('./mixer-sort'); +require('./mixer-dataset'); +require('./mixer-insert'); +require('./mixer-remove'); +require('./mixer-change-layout'); +require('./mixer-multimix'); +require('./mixer-get-config'); +require('./controls-filter'); +require('./controls-toggle'); +require('./controls-sort'); +require('./controls-multimix'); +require('./controls-live'); +require('./queue'); +require('./extension'); +require('./callbacks'); +require('./h'); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-change-layout.js b/mixitup-3.3.1/tests/unit/mixer-change-layout.js new file mode 100644 index 0000000..964b24f --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-change-layout.js @@ -0,0 +1,54 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + let container = dom.getContainer(); + let newClass = 'mixitup-container__display-rows'; + let mixer = mixitup(container); + + describe('#changeLayout()', () => { + it('should add a new class name to the container', () => { + return mixer.changeLayout(newClass) + .then(state => { + chai.assert.equal(state.activeContainerClassName, newClass); + chai.assert.isOk(container.matches('.' + newClass)); + }); + }); + + it('should remove the class name from the container', () => { + return mixer.changeLayout('') + .then(state => { + chai.assert.equal(state.activeContainerClassName, ''); + chai.assert.notOk(container.matches('.' + newClass)); + }); + }); + + it('should accept a callback function which is invoked after filtering', () => { + let promise = new Promise(resolve => mixer.changeLayout(newClass, resolve)); + + chai.assert.isFulfilled(promise); + + return promise + .then(state => { + chai.assert.equal(state.activeContainerClassName, newClass); + chai.assert.isOk(container.matches('.' + newClass)); + }); + }); + + it('should accept a boolean allowing toggling off of animation', () => { + return mixer.changeLayout('', false) + .then(state => { + chai.assert.equal(state.activeContainerClassName, ''); + chai.assert.notOk(container.matches('.' + newClass)); + }); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-dataset.js b/mixitup-3.3.1/tests/unit/mixer-dataset.js new file mode 100644 index 0000000..68a0a7a --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-dataset.js @@ -0,0 +1,301 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); +const JSONDataset = require('../mock/dataset'); + +const dataset = JSONDataset.map(data => new dom.Item(data)); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup()', () => { + it('should throw an error if `load.dataset` does not match pre-rendered targets', () => { + const emptyContainer = dom.getEmptyContainer(); + + chai.assert.throws(() => { + mixitup(emptyContainer, { + load: { + dataset: dataset + } + }); + }, mixitup.messages.errorDatasetPrerenderedMismatch()); + }); + + it('should throw an error if UID not provided in dataset API mode', () => { + const container = dom.getContainer(); + let mixer; + + chai.assert.throws(() => { + mixer = mixitup(container, { + load: { + dataset: dataset + } + }); + }, mixitup.messages.errorConfigDataUidKeyNotSet()); + }); + + it('should instantiate in dataset API mode when provided with `load.dataset` and a matching container', () => { + const container = dom.getContainer(); + const targets = Array.prototype.slice.call(container.children); + + const mixer = mixitup(container, { + data: { + uidKey: 'id' + }, + load: { + dataset: dataset + } + }); + + const state = mixer.getState(); + + chai.assert.equal(state.activeFilter, null); + chai.assert.equal(state.activeSort, null); + chai.assert.deepEqual(state.activeDataset, dataset); + chai.assert.deepEqual(state.targets, targets); + chai.assert.deepEqual(state.show, targets); + chai.assert.deepEqual(state.matching, []); + + mixer.destroy(); + }); +}); + +describe('mixitup.Mixer', () => { + describe('#dataset()', () => { + const container = dom.getContainer(); + const workingDataset = dataset.slice(); + const config = { + data: { + uidKey: 'id', + dirtyCheck: true + }, + render: { + target: mixitup.h.template(dom.ITEM_TEMPLATE) + }, + load: { + dataset: dataset + } + }; + + const mixer = mixitup(container, config); + + const startTotalWhitespace = dom.getTotalWhitespace(container.outerHTML); + + after(() => mixer.destroy()); + + it('should throw an error if an item is added to the dataset, without a render function defined', () => { + const newDataset = dataset.slice(); + const container = dom.getContainer(); + const erMixer = mixitup(container, { + data: { + uidKey: 'id' + }, + load: { + dataset: dataset + } + }); + + newDataset.push(new dom.Item({ + id: 99, + categories: ['d'] + })); + + chai.assert.throws(() => { + erMixer.dataset(newDataset); + }, mixitup.messages.errorDatasetRendererNotSet()); + }); + + it('should throw an error if an item is added to the dataset without a valid UID', () => { + const newDataset = dataset.slice(); + const container = dom.getContainer(); + + const erMixer = mixitup(container, config); + + newDataset.push(new dom.Item({ + categories: ['d'] + })); + + chai.assert.throws(() => { + erMixer.dataset(newDataset); + }, mixitup.messages.errorDatasetInvalidUidKey({ + uidKey: 'id' + })); + }); + + it('should throw an error if an item with a duplicate UID is added to the dataset', () => { + const newDataset = dataset.slice(); + const container = dom.getContainer(); + + const erMixer = mixitup(container, config); + + newDataset.push(new dom.Item({ + id: 'target-1', + categories: ['d'] + })); + + chai.assert.throws(() => { + erMixer.dataset(newDataset); + }, mixitup.messages.errorDatasetDuplicateUid({ + uid: 'target-1' + })); + }); + + it('should insert a target when a new item is added to end of the dataset', () => { + workingDataset.push(new dom.Item({ + id: 7, + categories: ['d'] + })); + + return mixer.dataset(workingDataset) + .then((state) => { + chai.assert.equal(state.totalShow, 7); + chai.assert.equal(state.show[6].id, '7'); + chai.assert.isOk(state.show[6].matches('.category-d')); + }); + }); + + it('should insert a target when a new item is added to the start of the dataset', () => { + workingDataset.unshift(new dom.Item({ + id: 0, + categories: ['d'] + })); + + return mixer.dataset(workingDataset) + .then((state) => { + chai.assert.equal(state.totalShow, 8); + chai.assert.equal(state.show[0].id, '0'); + chai.assert.isOk(state.show[0].matches('.category-d')); + }); + }); + + it('should insert a target when a new item is added at an arbitrary point in the dataset', () => { + workingDataset.splice(3, 0, new dom.Item({ + id: 999, + categories: ['d'] + })); + + return mixer.dataset(workingDataset) + .then((state) => { + chai.assert.equal(state.totalShow, 9); + chai.assert.equal(state.show[3].id, '999'); + chai.assert.isOk(state.show[3].matches('.category-d')); + }); + }); + + it('should remove a target when an item is removed from the end of the dataset', () => { + workingDataset.pop(); + + return mixer.dataset(workingDataset) + .then((state) => { + chai.assert.equal(state.totalShow, 8); + chai.assert.notEqual(state.show[7].id, '7'); + }); + }); + + it('should remove a target when an item is removed from the start of the dataset', () => { + workingDataset.shift(); + + return mixer.dataset(workingDataset) + .then((state) => { + chai.assert.equal(state.totalShow, 7); + chai.assert.notEqual(state.show[0].id, '0'); + }); + }); + + it('should remove a target when an item is removed from an arbitary point in the dataset', () => { + const removed = workingDataset.splice(2, 1); + + chai.assert.equal(removed[0].id, 999); + + return mixer.dataset(workingDataset) + .then((state) => { + chai.assert.equal(state.totalShow, 6); + chai.assert.notEqual(state.show[2].id, '999'); + }); + }); + + it('should sort targets when the dataset is sorted', () => { + workingDataset.reverse(); + + const ids = workingDataset.map((item) => item.id.toString()); + + return mixer.dataset(workingDataset) + .then((state) => { + const elIds = state.show.map((el) => el.id); + + chai.assert.equal(state.totalShow, 6); + chai.assert.deepEqual(ids, elIds); + }); + }); + + it('should sort rerender targets if their data changes and dirtyChecking is enabled', () => { + workingDataset[0] = new dom.Item(Object.assign({}, workingDataset[0])); + + workingDataset[0].categories.push('z'); + + return mixer.dataset(workingDataset) + .then((state) => { + chai.assert.isOk(state.show[0].matches('.category-z')); + }); + }); + + it('should not insert excessive whitespace after DOM manipulations', () => { + chai.assert.equal(dom.getTotalWhitespace(container.outerHTML), startTotalWhitespace); + }); + + it('should accept a callback function which is invoked after dataset change', () => { + workingDataset.reverse(); + + const ids = workingDataset.map((item) => item.id.toString()); + + const promise = new Promise(resolve => mixer.dataset(workingDataset, resolve)); + + chai.assert.isFulfilled(promise); + + return promise + .then((state) => { + const elIds = state.show.map((el) => el.id); + + chai.assert.equal(state.totalShow, 6); + chai.assert.deepEqual(ids, elIds); + }); + }); + + it('should accept a boolean allowing toggling off of animation', () => { + workingDataset.reverse(); + + const ids = workingDataset.map((item) => item.id.toString()); + + return mixer.dataset(workingDataset, false) + .then(state => { + const elIds = state.show.map((el) => el.id); + + chai.assert.equal(state.totalShow, 6); + chai.assert.deepEqual(ids, elIds); + }); + }); + + it('should re-render targets reflective of template changes when `forceRender` is called', () => { + let firstTarget = mixer.getState().show[0]; + + chai.assert.equal(firstTarget.outerHTML, '
'); + + mixer.configure({ + render: { + target: mixitup.h.template(dom.ITEM_TEMPLATE_ALT) + } + }); + + + mixer.forceRender(); + + firstTarget = mixer.getState().show[0]; + + chai.assert.equal(firstTarget.outerHTML, '
'); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-filter.js b/mixitup-3.3.1/tests/unit/mixer-filter.js new file mode 100644 index 0000000..c4bcd5c --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-filter.js @@ -0,0 +1,268 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + describe('#filter()', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + + it('should accept a class selector', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('.category-a')); + + return mixer.filter('.category-a') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should accept an attribute selector', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('[data-category~="a"]')); + + return mixer.filter('[data-category~="a"]') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should accept a compound OR class selector', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('.category-a, .category-b')); + + return mixer.filter('.category-a, .category-b') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should accept a compound AND class selector', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('.category-a.category-c')); + + return mixer.filter('.category-a.category-c') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should accept a compound OR attribute selector', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('[data-category~="a"], [data-category~="c"]')); + + return mixer.filter('[data-category~="a"], [data-category~="c"]') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should accept a compound AND attribute selector', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('[data-category~="a"][data-category~="c"]')); + + return mixer.filter('[data-category~="a"][data-category~="c"]') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.equal(state.totalShow, 1); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should accept "none"', () => { + return mixer.filter('none') + .then(state => { + chai.assert.equal(state.totalShow, 0); + chai.assert.equal(state.hasFailed, false); + chai.assert.deepEqual(state.hide, Array.prototype.slice.call(container.children)); + chai.assert.equal(state.activeFilter.selector, ''); + }); + }); + + it('should accept "all"', () => { + return mixer.filter('all') + .then(state => { + chai.assert.deepEqual(state.show, Array.prototype.slice.apply(container.children)); + chai.assert.deepEqual(state.show, state.targets); + }); + }); + + it('should fail if queried with a non matching selector', () => { + return mixer.filter('.non-mathing-selector') + .then(state => { + chai.assert.deepEqual(state.show, []); + chai.assert.equal(state.hasFailed, true); + }); + }); + + it('should accept a single element', () => { + let el = container.firstElementChild; + + return mixer.filter(el) + .then(state => { + chai.assert.deepEqual(state.show, [el]); + chai.assert.equal(state.activeFilter.selector, ''); + chai.assert.deepEqual(state.activeFilter.collection, [el]); + }); + }); + + it('should accept a collection of elements', () => { + let collection = [ + container.firstElementChild, + container.lastElementChild + ]; + + return mixer.filter(collection) + .then(state => { + chai.assert.deepEqual(state.show, collection); + chai.assert.equal(state.activeFilter.selector, ''); + chai.assert.deepEqual(state.activeFilter.collection, collection); + }); + }); + + it('should interpret `null` as hide all', () => { + return mixer.filter(null) + .then(state => { + chai.assert.deepEqual(state.show, []); + chai.assert.equal(state.activeFilter.selector, ''); + chai.assert.deepEqual(state.activeFilter.collection, []); + }); + }); + + it('should interpret `[]` as hide all', () => { + return mixer.filter(null) + .then(state => { + chai.assert.deepEqual(state.show, []); + chai.assert.equal(state.activeFilter.selector, ''); + chai.assert.deepEqual(state.activeFilter.collection, []); + }); + }); + + it('should accept a full CommandFilter object, allowing for inverse filtering via selector', () => { + let command = { + selector: '.category-a', + action: 'hide' + }; + + let collection = Array.prototype.slice.call(container.querySelectorAll(':not(.category-a)')); + + return mixer.filter(command) + .then(state => { + chai.assert.deepEqual(state.show, collection); + chai.assert.equal(state.activeFilter.selector, '.category-a'); + chai.assert.equal(state.activeFilter.action, 'hide'); + }); + }); + + it('should accept a full CommandFilter object, allowing for inverse filtering via a collection', () => { + let el = container.querySelector('.category-a.category-c'); + + let command = { + collection: [el], + action: 'hide' + }; + + let collection = Array.prototype.slice.call(container.querySelectorAll(':not(.category-a.category-c)')); + + return mixer.filter(command) + .then(state => { + chai.assert.deepEqual(state.show, collection); + chai.assert.deepEqual(state.activeFilter.collection, [el]); + chai.assert.equal(state.activeFilter.action, 'hide'); + }); + }); + + it('should accept a callback function which is invoked after filtering', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('.category-a')); + + let promise = new Promise(resolve => mixer.filter('.category-a', resolve)); + + chai.assert.isFulfilled(promise); + + return promise + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should return a promise which is resolved after filtering', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('.category-a')); + + return mixer.filter('.category-a') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should accept a boolean allowing toggling off of animation', () => { + let matching = Array.prototype.slice.call(container.querySelectorAll('.category-a')); + + return mixer.filter('.category-a', false) + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should throw an error if both a selector and a collection are provided', () => { + let command = { + collection: [], + selector: '.selector' + }; + + chai.assert.throws(() => { + mixer.filter(command); + }, Error, mixitup.messages.errorFilterInvalidArguments()); + }); + }); +}); + +describe('mixitup.Mixer', () => { + describe('#hide()', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + + it('should hide all elements', () => { + return mixer.hide() + .then(state => { + chai.assert.equal(state.totalShow, 0); + chai.assert.equal(state.totalHide, state.targets.length); + chai.assert.equal(state.activeFilter.selector, ''); + }); + }); + }); +}); + +describe('mixitup.Mixer', () => { + describe('#show()', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + + it('should show all elements', () => { + return mixer.filter('.category-a') + .then(mixer.show) + .then(state => { + chai.assert.equal(state.totalShow, state.targets.length); + chai.assert.equal(state.totalHide, 0); + chai.assert.equal(state.activeFilter.selector, '.mix'); + }); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-get-config.js b/mixitup-3.3.1/tests/unit/mixer-get-config.js new file mode 100644 index 0000000..9e3b995 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-get-config.js @@ -0,0 +1,62 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + + describe('#getConfig()', () => { + it('should retrieve the whole config object if no stringKey passed', () => { + let config = mixer.getConfig(); + + chai.assert.instanceOf(config, mixitup.Config); + }); + + it('should retrieve a config sub-object if single prop stringKey passed', () => { + let config = mixer.getConfig('animation'); + + chai.assert.instanceOf(config, mixitup.ConfigAnimation); + }); + + it('should retrieve a nested property value if multi-prop stringKey passed', () => { + let config = mixer.getConfig('animation.effects'); + + chai.assert.equal(typeof config, 'string'); + }); + + it('should retrieve a the current configuration, reflective of any changes', () => { + let newEffects = 'fade translateZ(-100px)'; + + mixer.configure({ + animation: { + effects: newEffects + } + }); + + let newConfig = mixer.getConfig('animation.effects'); + + chai.assert.equal(newConfig, newEffects); + }); + + it('should throw an error if an invalid configuration option is passed', function() { + chai.assert.throws(() => { + mixer.configure({ + animations: {} + }); + }, TypeError, mixitup.messages.errorConfigInvalidProperty({ + erroneous: 'animations', + suggestion: mixitup.messages.errorConfigInvalidPropertySuggestion({ + probableMatch: 'animation' + }) + })); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-get-state.js b/mixitup-3.3.1/tests/unit/mixer-get-state.js new file mode 100644 index 0000000..cfa9a63 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-get-state.js @@ -0,0 +1,92 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); + +describe('mixitup.Mixer', () => { + describe('#getState()', () => { + let container = dom.getContainer(); + let id = container.id = 'test-id'; + let mixer = mixitup(container); + let state = mixer.getState(); + + after(() => mixer.destroy()); + + it('should contain an id equal to the container id', () => { + chai.assert.equal(state.container.id, id); + }); + + it('should contain a reference to the container element', () => { + chai.assert.equal(state.container, container); + }); + + it('should contain a reference to the container element', () => { + chai.assert.equal(state.container, container); + }); + + it('should contain an activeFilter object with the default selector active', () => { + chai.assert.instanceOf(state.activeFilter, mixitup.CommandFilter); + chai.assert.equal(state.activeFilter.selector, '.mix'); + }); + + it('should contain an activeSort object with the default sort string active', () => { + chai.assert.instanceOf(state.activeSort, mixitup.CommandSort); + chai.assert.equal(state.activeSort.sortString, 'default:asc'); + }); + + it('should contain an empty activeContainerClassName string', () => { + chai.assert.equal(state.activeContainerClassName, ''); + }); + + it('should contain a null activeDataset', () => { + chai.assert.deepEqual(state.activeDataset, null); + }); + + it('should contain a hasFailed boolean, set to false', () => { + chai.assert.deepEqual(state.hasFailed, false); + }); + + it('should contain a list of targets deeply equaling the contents of the container', () => { + chai.assert.deepEqual(state.targets, Array.prototype.slice.apply(container.children)); + }); + + it('should contain a totalTargets integer, equal to the number of targets in the container', () => { + chai.assert.equal(state.totalTargets, container.children.length); + }); + + it('should contain a list of targets currently shown', () => { + chai.assert.deepEqual(state.show, Array.prototype.slice.apply(container.children)); + chai.assert.deepEqual(state.show, state.targets); + }); + + it('should contain a totalShow integer, equal to the number of targets shown', () => { + chai.assert.equal(state.totalShow, container.children.length); + }); + + it('should contain a list of targets matching the active selector', () => { + chai.assert.deepEqual(state.matching, Array.prototype.slice.apply(container.children)); + chai.assert.deepEqual(state.matching, state.targets); + }); + + it('should contain a totalMatching integer, equal to the number of targets matching the active selector', () => { + chai.assert.equal(state.totalMatching, container.children.length); + }); + + it('should contain a list of targets currently hidden', () => { + chai.assert.deepEqual(state.hide, []); + }); + + it('should contain a totalShow integer, equal to the number of targets hidden', () => { + chai.assert.equal(state.totalHide, 0); + }); + + it('should contain a null triggerElement reference', () => { + chai.assert.equal(state.triggerElement, null); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-insert.js b/mixitup-3.3.1/tests/unit/mixer-insert.js new file mode 100644 index 0000000..205fdbc --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-insert.js @@ -0,0 +1,395 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + describe('#insert()', () => { + it('should accept an element as an argument', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.insert(newTarget) + .then(state => { + chai.assert.equal(state.show[0].id, 7); + + mixer.destroy(); + }); + }); + + it('should accept an element and an index as arguments', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.insert(newTarget, 3) + .then(state => { + chai.assert.equal(state.show[3].id, 7); + + mixer.destroy(); + }); + }); + + it('should accept an html string as an argument', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.insert(newTarget.outerHTML) + .then(state => { + chai.assert.equal(state.show[0].id, 7); + + mixer.destroy(); + }); + }); + + it('should accept an html and an index as arguments', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.insert(newTarget.outerHTML, 5) + .then(state => { + chai.assert.equal(state.show[5].id, 7); + + mixer.destroy(); + }); + }); + + it('should accept accept an element collection as an argument', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget1 = dom.getTarget(); + let newTarget2 = dom.getTarget(); + + newTarget2.id = '8'; + + return mixer.insert([newTarget1, newTarget2]) + .then(state => { + chai.assert.equal(state.show[0].id, 7); + chai.assert.equal(state.show[1].id, 8); + + mixer.destroy(); + }); + }); + + it('should accept accept a document fragment as an argument', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + let frag = document.createDocumentFragment(); + + frag.appendChild(newTarget); + + return mixer.insert(frag) + .then(state => { + chai.assert.equal(state.show[0].id, 7); + + mixer.destroy(); + }); + }); + + it('should accept accept an element collection and an index as an argument', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget1 = dom.getTarget(); + let newTarget2 = dom.getTarget(); + + newTarget2.id = '8'; + + return mixer.insert([newTarget1, newTarget2], 4) + .then(state => { + chai.assert.equal(state.show[4].id, 7); + chai.assert.equal(state.show[5].id, 8); + + mixer.destroy(); + }); + }); + + it('should throw an error if an element, index and sibling are passed simultaneously', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + let sibling = container.children[4]; + + chai.assert.throws(() => { + mixer.insert(newTarget, 4, sibling); + }, Error, mixitup.messages.errorInsertInvalidArguments()); + }); + + it('should accept an element and sibling reference to insert before', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + let sibling = container.children[4]; + + return mixer.insert(newTarget, sibling) + .then(state => { + chai.assert.equal(state.show[4].id, '7'); + + mixer.destroy(); + }); + }); + + it('should accept an element, sibling reference and position string', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + let sibling = container.children[4]; + + return mixer.insert(newTarget, sibling, 'after') + .then(state => { + chai.assert.equal(state.show[5].id, '7'); + + mixer.destroy(); + }); + }); + + it('should insert at end if the insertion index is above range', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.insert(newTarget, 10) + .then(state => { + chai.assert.equal(state.show[6].id, '7'); + + mixer.destroy(); + }); + }); + + it('should insert at start if the insertion index is below range', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.insert(newTarget, -2) + .then(state => { + chai.assert.equal(state.show[0].id, '7'); + + mixer.destroy(); + }); + }); + + it('should throw an error if the element to insert already exists', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = container.children[1]; + + chai.assert.throws(() => { + mixer.insert(newTarget); + }, Error, mixitup.messages.errorInsertPreexistingElement()); + }); + + it('should allow no elements to be inserted with a warning', () => { + let container = dom.getContainer(); + let totalTargets = container.children.length; + let mixer = mixitup(container); + + return mixer.insert() + .then(state => { + chai.assert.equal(state.totalShow, totalTargets); + + mixer.destroy(); + }); + }); + + it('should accept a callback function which is invoked after insertion', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + let promise = new Promise(resolve => mixer.insert(newTarget, resolve)); + + chai.assert.isFulfilled(promise); + + return promise + .then(() => { + chai.assert.equal(newTarget.parentElement, container); + + mixer.destroy(); + }); + }); + + it('should accept a boolean allowing toggling off of animation', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.insert(newTarget, false) + .then(() => { + chai.assert.equal(newTarget.parentElement, container); + + mixer.destroy(); + }); + }); + + it('should accept a HTML with padding whitespace as an argument', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = ' ' + dom.getTarget().outerHTML + ' '; + + return mixer.insert(newTarget) + .then(state => { + chai.assert.equal(state.show[0].id, 7); + + mixer.destroy(); + }); + }); + }); + + describe('#prepend()', () => { + it('should insert an element at the start', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.prepend(newTarget) + .then(state => { + chai.assert.equal(state.show[0].id, 7); + + mixer.destroy(); + }); + }); + + it('should insert a collection of elements at the start', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget1 = dom.getTarget(); + let newTarget2 = dom.getTarget(); + + newTarget2.id = '8'; + + return mixer.prepend([newTarget1, newTarget2]) + .then(state => { + chai.assert.equal(state.show[0].id, 7); + chai.assert.equal(state.show[1].id, 8); + + mixer.destroy(); + }); + }); + }); + + describe('#append()', () => { + it('should insert an element at the end', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + + return mixer.append(newTarget) + .then(state => { + chai.assert.equal(state.show[6].id, 7); + + mixer.destroy(); + }); + }); + + it('should insert a collection of elements at the end', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget1 = dom.getTarget(); + let newTarget2 = dom.getTarget(); + + newTarget2.id = '8'; + + return mixer.append([newTarget1, newTarget2]) + .then(state => { + chai.assert.equal(state.show[6].id, 7); + chai.assert.equal(state.show[7].id, 8); + + mixer.destroy(); + }); + }); + + it('should accept accept a document fragment as an argument to append', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + let frag = document.createDocumentFragment(); + + frag.appendChild(newTarget); + + return mixer.append(frag) + .then(state => { + chai.assert.equal(state.show[6].id, 7); + + mixer.destroy(); + }); + }); + }); + + describe('#insertBefore()', () => { + it('should insert an element before the referenced element', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + let sibling = container.children[3]; + + return mixer.insertBefore(newTarget, sibling) + .then(state => { + chai.assert.equal(state.show[3].id, 7); + + mixer.destroy(); + }); + }); + + it('should insert a collection of elements before the referenced element', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget1 = dom.getTarget(); + let newTarget2 = dom.getTarget(); + let sibling = container.children[3]; + + newTarget2.id = '8'; + + return mixer.insertBefore([newTarget1, newTarget2], sibling) + .then(state => { + chai.assert.equal(state.show[3].id, 7); + chai.assert.equal(state.show[4].id, 8); + + mixer.destroy(); + }); + }); + }); + + describe('#insertAfter()', () => { + it('should insert an element after the referenced element', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget = dom.getTarget(); + let sibling = container.children[3]; + + return mixer.insertAfter(newTarget, sibling) + .then(state => { + chai.assert.equal(state.show[4].id, 7); + + mixer.destroy(); + }); + }); + + it('should insert a collection of elements after the referenced element', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + let newTarget1 = dom.getTarget(); + let newTarget2 = dom.getTarget(); + let sibling = container.children[3]; + + newTarget2.id = '8'; + + return mixer.insertAfter([newTarget1, newTarget2], sibling) + .then(state => { + chai.assert.equal(state.show[4].id, 7); + chai.assert.equal(state.show[5].id, 8); + + mixer.destroy(); + }); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-multimix.js b/mixitup-3.3.1/tests/unit/mixer-multimix.js new file mode 100644 index 0000000..849fae8 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-multimix.js @@ -0,0 +1,17 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + describe('#multimix()', () => { + let container = dom.getContainer(); + let mixer = mixitup(container); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-remove.js b/mixitup-3.3.1/tests/unit/mixer-remove.js new file mode 100644 index 0000000..708ccdb --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-remove.js @@ -0,0 +1,111 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + describe('#remove()', () => { + it('should accept an element as an argument', () => { + const container = dom.getContainer(); + const mixer = mixitup(container); + const toRemove = container.children[3]; + + return mixer.remove(toRemove) + .then(state => { + chai.assert.notEqual(state.show[3].id, 'target-4'); + chai.assert.equal(state.show[3].id, 'target-5'); + chai.assert.equal(state.totalShow, '5'); + + mixer.destroy(); + }); + }); + + it('should accept a collection of elements as an argument', () => { + const container = dom.getContainer(); + const mixer = mixitup(container); + const toRemove = [container.children[3], container.children[0]]; + + return mixer.remove(toRemove) + .then(state => { + chai.assert.equal(state.show[0].id, 'target-2'); + chai.assert.equal(state.show[3].id, 'target-6'); + chai.assert.equal(state.totalShow, '4'); + + mixer.destroy(); + }); + }); + + it('should accept an index as an argument', () => { + const container = dom.getContainer(); + const mixer = mixitup(container); + + return mixer.remove(3) + .then(state => { + chai.assert.equal(state.show[3].id, 'target-5'); + chai.assert.equal(state.totalShow, '5'); + + mixer.destroy(); + }); + }); + + it('should accept a selector as an argument', () => { + const container = dom.getContainer(); + const mixer = mixitup(container); + + return mixer.remove('.category-a') + .then(state => { + chai.assert.equal(state.totalShow, '3'); + + mixer.destroy(); + }); + }); + + it('should allow no elements to be removed with a warning', () => { + const container = dom.getContainer(); + const mixer = mixitup(container); + + return mixer.remove() + .then(state => { + chai.assert.equal(state.totalShow, '6'); + + mixer.destroy(); + }); + }); + + it('should accept a callback function which is invoked after removal', () => { + const container = dom.getContainer(); + const mixer = mixitup(container); + const toRemove = container.children[0]; + + const promise = new Promise(resolve => mixer.insert(mixer.remove(toRemove), resolve)); + + chai.assert.isFulfilled(promise); + + return promise + .then(() => { + chai.assert.notEqual(toRemove, container); + + mixer.destroy(); + }); + }); + + it('should accept a boolean allowing toggling off of animation', () => { + const container = dom.getContainer(); + const mixer = mixitup(container); + const toRemove = container.children[0]; + + return mixer.remove(toRemove, false) + .then(() => { + chai.assert.notEqual(toRemove, container); + + mixer.destroy(); + }); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-sort.js b/mixitup-3.3.1/tests/unit/mixer-sort.js new file mode 100644 index 0000000..9290654 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-sort.js @@ -0,0 +1,257 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const dataset = require('../mock/dataset'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + describe('#sort()', () => { + const container = dom.getContainer(); + const originalOrder = Array.prototype.slice.call(container.children); + const mixer = mixitup(container); + + const idsByPublishedDate = dataset.slice().sort((a, b) => { + const dateA = a.published; + const dateB = b.published; + + if (dateA < dateB) { + return -1; + } + + if (dateA > dateB) { + return 1; + } + + return 0; + }).map(item => item.id.toString()); + + const idsByViewsThenPublishedDate = dataset.slice().sort((a, b) => { + const viewsA = a.views; + const viewsB = b.views; + + const sortByPublishedDate = function(a, b) { + const dateA = a.published; + const dateB = b.published; + + if (dateA < dateB) { + return -1; + } + + if (dateA > dateB) { + return 1; + } + + return 0; + }; + + if (viewsA < viewsB) { + return -1; + } + + if (viewsA > viewsB) { + return 1; + } + + sortByPublishedDate(a, b); + }).map(item => item.id.toString()); + + after(() => mixer.destroy()); + + it('accepts `default` as a sort string, but should have no effect on the order', () => { + var startOrder = mixer.getState().show; + + return mixer.sort('default') + .then(state => { + chai.assert.deepEqual(startOrder, state.show); + chai.assert.equal(state.activeSort.sortString, 'default'); + chai.assert.equal(state.activeSort.order, 'asc'); + chai.assert.equal(state.activeSort.attribute, ''); + }); + }); + + it('accepts `default:asc` as a sort string, but should have no effect on the order', () => { + var startOrder = mixer.getState().show; + + return mixer.sort('default:asc') + .then(state => { + chai.assert.deepEqual(startOrder, state.show); + chai.assert.equal(state.activeSort.sortString, 'default:asc'); + chai.assert.equal(state.activeSort.order, 'asc'); + chai.assert.equal(state.activeSort.attribute, ''); + }); + }); + + it('accepts `default:desc` as a sort string, which should reverse the order', () => { + var reversedOrder = mixer.getState().show.slice().reverse(); + + return mixer.sort('default:desc') + .then(state => { + chai.assert.deepEqual(state.show, reversedOrder); + chai.assert.equal(state.activeSort.sortString, 'default:desc'); + chai.assert.equal(state.activeSort.order, 'desc'); + chai.assert.equal(state.activeSort.attribute, ''); + }); + }); + + it('should return the mixer to its original order if sorted by `default` after previous transformations', () => { + return mixer.sort('default') + .then(state => chai.assert.deepEqual(state.show, originalOrder)); + }); + + it('should accept `random` as a sort string, shuffling the targets', () => { + return mixer.sort('random') + .then(state => { + chai.assert.notDeepEqual(state.show, originalOrder); + chai.assert.equal(state.activeSort.sortString, 'random'); + chai.assert.equal(state.activeSort.order, 'random'); + chai.assert.equal(state.activeSort.attribute, ''); + }); + }); + + it('should accept a data-attribute as a sort string, sorting by the attribute\'s value', () => { + return mixer.sort('published') + .then(state => { + const targetIds = state.show.map(el => el.id); + + chai.assert.equal(state.activeSort.sortString, 'published'); + chai.assert.equal(state.activeSort.order, 'asc'); + chai.assert.equal(state.activeSort.attribute, 'published'); + + chai.assert.deepEqual(targetIds, idsByPublishedDate); + }); + }); + + it('should accept a data-attribute and an order as sorting, sorting by the attribute\'s value in the defined order', () => { + const idsByPublishedDateDesc = idsByPublishedDate.slice().reverse(); + + return mixer.sort('published:desc') + .then(state => { + const targetIds = state.show.map(el => el.id); + + chai.assert.equal(state.activeSort.sortString, 'published:desc'); + chai.assert.equal(state.activeSort.order, 'desc'); + chai.assert.equal(state.activeSort.attribute, 'published'); + + chai.assert.deepEqual(targetIds, idsByPublishedDateDesc); + }); + }); + + it('should accept multiple sort strings for multi attribute sorting', () => { + return mixer.sort('views published') + .then(state => { + const targetIds = state.show.map(el => el.id); + + chai.assert.isOk(state.activeSort.next); + chai.assert.instanceOf(state.activeSort.next, mixitup.CommandSort); + + chai.assert.equal(state.activeSort.sortString, 'views'); + chai.assert.equal(state.activeSort.order, 'asc'); + chai.assert.equal(state.activeSort.attribute, 'views'); + + chai.assert.equal(state.activeSort.next.sortString, 'published'); + chai.assert.equal(state.activeSort.next.order, 'asc'); + chai.assert.equal(state.activeSort.next.attribute, 'published'); + + chai.assert.deepEqual(targetIds, idsByViewsThenPublishedDate); + }); + }); + + it('should accept multiple sort strings with orders for multi attribute sorting', () => { + const idsByViewsThenPublishedDateDesc = idsByViewsThenPublishedDate.slice().reverse(); + + return mixer.sort('views:desc published:desc') + .then(state => { + const targetIds = state.show.map(el => el.id); + + chai.assert.deepEqual(targetIds, idsByViewsThenPublishedDateDesc); + }); + }); + + it('should accept multiple sort strings with orders for multi attribute sorting', () => { + const idsByViewsThenPublishedDateDesc = idsByViewsThenPublishedDate.slice().reverse(); + + return mixer.sort('views:desc published:desc') + .then(state => { + const targetIds = state.show.map(el => el.id); + + chai.assert.deepEqual(targetIds, idsByViewsThenPublishedDateDesc); + }); + }); + + it('should accept a collection of elements by which to sort by', () => { + const firstTarget = mixer.getState().targets[0]; + const collection = mixer.getState().targets.slice().reverse(); + + return mixer.sort(collection) + .then(state => { + const lastTarget = state.targets[state.targets.length - 1]; + + chai.assert.deepEqual(lastTarget, firstTarget); + }); + }); + + it('should error if any element in the collection provided does not exist in the container', () => { + const mixer = mixitup(container); + + const collection = [document.createElement('div')]; + + chai.assert.throws(() => mixer.sort(collection)); + }); + + it('should accept a callback function which is invoked after sorting', () => { + const promise = new Promise(resolve => mixer.sort('random', resolve)); + + chai.assert.isFulfilled(promise); + + return promise + .then(state => chai.assert.equal(state.activeSort.sortString, 'random')); + }); + + it('should accept a boolean allowing toggling off of animation', () => { + return mixer.sort('random', false) + .then(state => chai.assert.equal(state.activeSort.sortString, 'random')); + }); + + it('should resort when sorting attributes are dynamically edited, if `behavior.liveSort` is enabled', () => { + const newDate = '20170628'; + let startOrder = null; + + return mixer.sort('published', false) + .then(state => { + const target4 = container.querySelector('#target-4'); + + startOrder = state.targets; + + target4.setAttribute('data-published', newDate); + + return mixer.sort('published', false); + }) + .then(state => { + // Order has not changed + + chai.assert.deepEqual(state.targets, startOrder); + chai.assert.notEqual(state.targets[5].getAttribute('data-published'), newDate); + + mixer.configure({ + behavior: { + liveSort: true + } + }); + + return mixer.sort('published', false); + }) + .then(state => { + // Order has changed + + chai.assert.notDeepEqual(state.targets, startOrder); + chai.assert.equal(state.targets[5].getAttribute('data-published'), newDate); + }); + }); + }); +}); \ No newline at end of file diff --git a/mixitup-3.3.1/tests/unit/mixer-toggle-on-off.js b/mixitup-3.3.1/tests/unit/mixer-toggle-on-off.js new file mode 100644 index 0000000..cbe0486 --- /dev/null +++ b/mixitup-3.3.1/tests/unit/mixer-toggle-on-off.js @@ -0,0 +1,82 @@ + +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + describe('#toggleOn()', () => { + const container = dom.getContainer(); + const mixer = mixitup(container); + + it('should activate an initial toggle', () => { + const matching = Array.prototype.slice.call(container.querySelectorAll('.category-a')); + + return mixer.toggleOn('.category-a') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should activate a further toggle', () => { + const matching = Array.prototype.slice.call(container.querySelectorAll('.category-a, .category-c')); + + return mixer.toggleOn('.category-c') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should activate a non-existant toggle with no effect', () => { + const matching = Array.prototype.slice.call(container.querySelectorAll('.category-a, .category-c')); + + return mixer.toggleOn('.category-z') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + }); + + describe('#toggleOff()', () => { + const container = dom.getContainer(); + const mixer = mixitup(container, { + load: { + filter: '.category-a, .category-b, .category-c' + } + }); + + it('should deactivate a toggle', () => { + const matching = Array.prototype.slice.call(container.querySelectorAll('.category-a, .category-b')); + + return mixer.toggleOff('.category-c') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + + it('should deactivate a non existent toggle with no effect', () => { + const matching = Array.prototype.slice.call(container.querySelectorAll('.category-a, .category-b')); + + return mixer.toggleOff('.category-z') + .then(state => { + chai.assert.equal(state.totalShow, matching.length); + chai.assert.deepEqual(state.show, matching); + chai.assert.deepEqual(state.matching, matching); + }); + }); + }); +}); diff --git a/mixitup-3.3.1/tests/unit/queue.js b/mixitup-3.3.1/tests/unit/queue.js new file mode 100644 index 0000000..fa7ae3c --- /dev/null +++ b/mixitup-3.3.1/tests/unit/queue.js @@ -0,0 +1,71 @@ +'use strict'; + +require('jsdom-global')(); + +const chai = require('chai'); +const dom = require('../mock/dom'); +const mixitup = require('../../dist/mixitup.js'); +const JSONDataset = require('../mock/dataset'); +const dataset = JSONDataset.map(data => new dom.Item(data)); + +chai.use(require('chai-shallow-deep-equal')); +chai.use(require('chai-as-promised')); + +describe('mixitup.Mixer', () => { + describe('Queue', () => { + it('should warn if too many multimix operations are pushed into the queue', () => { + let container = dom.getContainer(); + let mixer = mixitup(container, { + debug: { + fauxAsync: true + }, + animation: { + duration: 200 + } + }); + + let promise = Promise.all([ + mixer.hide(), + mixer.show(), + mixer.hide(), + mixer.show(), + mixer.hide() + ]); + + chai.assert.isFulfilled(promise); + + return promise; + }); + + it('should warn if too many dataset operations are pushed into the queue', () => { + let container = dom.getContainer(); + + let mixer = mixitup(container, { + debug: { + fauxAsync: true + }, + animation: { + duration: 200 + }, + data: { + uidKey: 'id' + }, + load: { + dataset: dataset + } + }); + + let promise = Promise.all([ + mixer.dataset([]), + mixer.dataset(dataset), + mixer.dataset([]), + mixer.dataset(dataset), + mixer.dataset([]) + ]); + + chai.assert.isFulfilled(promise); + + return promise; + }); + }); +}); diff --git a/reset.css b/reset.css new file mode 100644 index 0000000..40b4860 --- /dev/null +++ b/reset.css @@ -0,0 +1,18 @@ +*{padding: 0;margin: 0;border: 0;} +*,*:before,*:after{-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;} +:focus,:active{outline: none;} +a:focus,a:active{outline: none;} +nav,footer,header,aside{display: block;} +html,body{ + height:100%;width:100%; + font-size:100%;line-height:1;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;-webkit-text-size-adjust:100%;} +input,button,textarea{font-family:inherit;} +input::-ms-clear{display: none;} +button{cursor: pointer;} +button::-moz-focus-inner{padding:0;border:0;} +a,a:visited{text-decoration: none;} +a:hover{text-decoration: none;} +ul li{list-style: none;} +img{vertical-align: top;} +h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight: inherit;} +a{color:inherit;} \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..28df450 --- /dev/null +++ b/style.css @@ -0,0 +1,1438 @@ +/* ОБЩИЕ ЭЛЕМЕНТЫ, КОТОРЫМ МЫ ПИШЕМ СТИЛИ */ + +html, +body { + font-size: 16px; + font-family: Lato, sans-serif; + color: #424551; + line-height: 160%; +} + +.wrapper { + /* дает растягивание от контента, + по умолчанию равен высоте body */ + min-height: 100%; + height: auto; + width: 100%; + /* если ширина контента превышает ширину вью-борта, + то оверфлоу-хидден его обрезает, + также убирает ползунок */ + overflow: hidden; +} +.container { + /* контент будет ограничен по ширине, + в фигме 1230px и плюс заложили padding 30px */ + max-width: 1260px; + padding: 0 15px; + /* делаем по середине страницы контент, + 0 это сверху и снизу, + auto это справа и слева */ + margin: 0 auto; + /* сделали контейнер на всю длину экрана */ + height: 100%; +} + +.main_about { + padding: 180px 0 160px; +} +.main_directions { + padding-bottom: 180px; +} +.main_cert { + margin-bottom: -46px; +} + +.button { + display: inline-block; + letter-spacing: 0.5px; + line-height: 52px; + font-weight: 700; + padding: 0 40px; + color: white; + border-radius: 4px; + background: var( + --btn-gradient, + linear-gradient(56deg, #ff3f3a 0%, #f75e05 100%) + ); + transition: all 0.3s; +} +.button:hover { + transform: scale(1.05); +} +.button--empty { + background-image: none; + border-left: 2px solid #ff3f3a; + border-right: 2px solid #f75e05; + background-image: -webkit-linear-gradient(left, #ff3f3a, #f75e05), + -webkit-linear-gradient(left, #ff3f3a, #f75e05); + background-image: linear-gradient(left, #ff3f3a, #f75e05), + linear-gradient(left, #ff3f3a, #f75e05); + background-size: 100% 2px; + background-position: 0 100%, 0 0; + background-repeat: no-repeat; + background-clip: border-box; +} + +.button--empty span { + background: linear-gradient(55.95deg, #ff3f3a 0%, #f75e05 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.logo { +} +.heading { + color: #1e212c; +} +.heading_subtitle { + line-height: 1.5; + text-transform: uppercase; + letter-spacing: 1px; + font-weight: 700; + margin-bottom: 8px; +} +.heading_title { + font-weight: 900; + font-size: 46px; + line-height: 1.3; +} + +/* ------------------------------HEADER TOP----------------------------------------------------------- */ + +.header { + font-weight: 700; + background: url("./images/1/shapes.svg") 0 0 / cover no-repeat, + linear-gradient( + 56deg, + rgba(255, 63, 58, 0.2) 0%, + rgba(247, 94, 5, 0.2) 100% + ); + height: 100vh; + display: flex; + flex-direction: column; +} +.header_top { +} +.header_top_inner { + display: flex; + justify-content: space-between; + padding: 20px 0; + align-items: center; +} +.header_logo { + margin-right: 60px; +} +.header_nav { + margin-right: auto; +} +.header_nav-list { + display: flex; +} +.header_nav_item { + margin-right: 40px; +} +.header_nav_item:last-child { + margin-right: 0; +} +.header_nav_link { + line-height: 1.6; + color: #424551; + white-space: nowrap; + transition: all 0.2s; +} +.header_nav_link:hover { + color: #ff3f3a; +} +.header_btn_box { + display: flex; + align-items: center; +} +.haeder_top_btn { + margin-right: 36px; +} +.header_user-nav { + position: relative; + padding-left: 28px; + line-height: 1.6; +} +.header_user_btn:hover { + color: #ff3f3a; +} +.header_user-nav:before { + content: ""; + position: absolute; + top: 50%; + left: 0; + transform: translateY(-50%); + display: block; + background: url("./images/1/Profile.svg") no-repeat; + width: 20px; + height: 20px; +} +.header_user_btn { + white-space: nowrap; + line-height: 1.6; + transition: all 0.2s; +} + +/* ------------------------------HEADER BODY--------------------------------------- */ + +.header_body { + flex-grow: 1; +} +.header_body_inner { + display: flex; + flex-direction: column; + height: 100%; +} +.header_main { + display: flex; + justify-content: space-between; + align-items: center; + color: #1e212c; + margin: auto 0; +} +.header_content { + margin-right: 30px; +} +.header_play { +} +.header_play_btn { + display: inline-flex; + align-items: center; +} +.header_play_btn svg { + margin-right: 16px; + border-radius: 50%; + transition: all 0.3s; +} +.header_play_btn svg:hover { + box-shadow: 0 0 0px 16px rgba(255, 63, 58, 0.12); +} +.header_title { + font-size: 64px; + font-weight: 900; + line-height: 1.3; + letter-spacing: 1px; + max-width: 496px; + margin-bottom: 60px; +} +.header_content-buttons { + display: flex; +} +.header_content_btn { + margin-right: 24px; +} +.header_content_btn:last-child { + margin-right: 0px; +} +.header_row { + display: flex; + justify-content: space-between; + align-items: center; + color: #1e212c; + margin-bottom: 80px; +} +.header_row > span { + background-color: #ff3f3a; + height: 8px; + width: 8px; + border-radius: 50%; + margin: 0 15px; +} +.header_row_item span { + font-size: 46px; + font-weight: 900; + line-height: 1.3; + margin-right: 12px; +} +.header_row_item { + display: flex; + align-items: center; +} + +/* ------------------------MAIN-CREATEX------------------------- */ + +.about { +} +.container { +} +.about_inner { +} +.about_createx { + display: flex; + align-items: flex-end; + justify-content: space-between; + margin-bottom: 180px; + position: relative; +} +.about_createx::before { + content: ""; + position: absolute; + top: -80px; + right: -140px; + background: url("./images/2/decor/shapes.svg"); + width: 100px; + height: 85px; +} +.about_createx_content { + max-width: 600px; + margin-right: 30px; +} +.about_heading { + margin-bottom: 48px; +} +.about_text { + margin-bottom: 60px; +} +.about_paragraph--accent { + font-size: 20px; + font-weight: 700; + line-height: 1.5; + color: #1e212c; +} +.about_paragraph { + margin-bottom: 24px; +} +.about_paragraph:last-child { + margin-bottom: 0; +} +.about_btn_box { + display: flex; +} +.about_btn { + margin-right: 24px; +} +.about_btn:last-child { + margin-right: 0; +} +.about_img { +} +.about_values { +} + +/* -----------------------MAIN-VALUES---------------------------------- */ + +.about_values { + display: flex; + justify-content: space-between; +} +.about_image_box { + border-radius: 4px; + overflow: hidden; +} +.about_image_box img { + width: 100%; + height: 100%; + object-fit: cover; +} +.about_numbers { + margin-left: 30px; + align-self: center; +} +.about_number span { + font-size: 48px; + font-weight: 900; + line-height: 1.3; + letter-spacing: 1px; + color: #ff3f3a; + margin-right: 16px; +} +.about_number { + display: flex; + align-items: center; + margin-bottom: 20px; +} +.about_number:last-child { + margin-bottom: 0; +} + +/* -------------------------MAIN-DIRECTIONS---------------------------- */ + +.directions { +} +.directions_inner { + +} +.directions_inner::after { +} +.directions_heading { + margin-bottom: 90px; + text-align: center; +} +.directions_body { +} +.directions_filter_box { + display: flex; + margin-bottom: 56px; +} +.directions_filter_item { + margin-right: 45px; +} +.directions_filter_item:last-child { + margin-right: 0; +} +.directions_filter_btn { + display: block; + font-size: 16px; + font-weight: 700; + line-height: 1; + color: #9a9ca5; + border: 1px solid #9a9ca5; + border-radius: 4px; + padding: 5px 8px; + background: transparent; +} +.directions_filter_btn--active { + background: linear-gradient(56deg, #ff3f3a 0%, #f75e05 100%); + border: none; + color: white; + padding: 6px 8px; +} +.directions_list { + display: grid; + grid-template: repeat(2, auto) / repeat(3, 1fr); + gap: 30px; +} +.directions_list_item { + display: block; + border: 1px solid #e5e8ed; + border-radius: 4px; + overflow: hidden; + transition: all 1s; +} +.directions_list_link { + display: block; + border-radius: 4px; + overflow: hidden; +} +.directions_list_item:hover { + box-shadow: 0px 80px 80px -20px rgba(154, 156, 165, 0.08), + 0px 30px 24px -10px rgba(154, 156, 165, 0.05), + 0px 12px 10px -6px rgba(154, 156, 165, 0.04), + 0px 4px 4px -4px rgba(30, 33, 44, 0.03); + transition: all 0.3s; +} +.directions_list_link:hover .directions_link_btn { + color: #ff3f3a; + transition: all 0.3s; +} +.directions_image_box { + +} +.directions_image_box img{ + height: 100%; + width: 100%; +} +.directions_link_content { + padding: 24px; + display: flex; + flex-direction: column; +} +.directions_link_tag { + font-weight: 700; + line-height: 1; + color: white; + background-color: #0d39eb; + padding: 6px 8px; + border-radius: 4px; + align-self: flex-start; + margin-bottom: 20px; +} +.directions_link_text { + color: #787a80; + font-weight: 400; + line-height: 1.6; + margin-bottom: 20px; +} +.directions_link_btn { + color: #1e212c; + display: flex; + font-weight: 700; + transition: all 1s; +} +.directions_link_btn img { + display: flex; + width: 30px; + height: 30px; + align-items: center; + justify-content: center; + padding: 6px; +} +.directions_link_btn:hover { + color: #ff3f3a; + transition: all 0.3s; +} +.directions_list_item--empty { + background: #F4F5F6; + color: #424551; + font-size: 20px; + font-weight: 700; + line-height: 1.5; + text-align: center; + display: flex; + align-items: center; + justify-content: center; +} +.directions_list_item--empty span { + max-width: 242px; +} + + +.directions_list_item--marketing .directions_link_tag { + background-color: #03CEA4; +} +.directions_list_item--management .directions_link_tag { + background-color: #5A87FC; +} +.directions_list_item--hr .directions_link_tag { + background-color: #F89828; +} +.directions_list_item--design .directions_link_tag { + background-color: #F52F6E; +} +.directions_list_item--development .directions_link_tag { + background-color: #7772F1; +} +.directions_list_item--empty .directions_link_tag { + background-color: #fff; +} + +/* ------------------------------------MAIN CERTIFICATE------------------------------------------------- */ + + +.cert { + margin-top: 180px; +} +.cerf_inner { + display: flex; + justify-content: space-between; +} +.cert_content { + margin-right: 30px; +} +.cert_contect_textlogo { + +} +.cert_heading { + margin-bottom: 50px; +} +.cert_text { + margin-bottom: 30px; +} +.cert_logos { + display: flex; +} +.cert_logos-item { + margin-right: 40px; +} +.cert_logos-item:last-child { + margin-right: 0; +} +.cert_image-box { + box-shadow: + 0 80px 80px -20px rgba(154, 156, 165, 0.16), + 0 30px 24px -10px rgba(154, 156, 165, 0.10), + 0 12px 10px -6px rgba(154, 156, 165, 0.08), + 0 4px 4px -4px rgba(30, 33, 44, 0.05); +} + +/* ------------------------------MAIN SLIDER----------------------------------- */ + +.main_team { + padding: 160px 0 180px; + background: #F4F5F6; +} +.team { +} +.team_inner { +} +.team_heading { + margin-bottom: 60px; + position: relative; +} +.team_slider .slick-list { + margin: 0 -15px; +} +.team_slide { + padding: 0 15px; +} +.team_slide:hover { + +} +.team_slide_inner { + +} +.team_image_box { + border-radius: 4px; + margin-bottom: 16px; + overflow: hidden; + position: relative; +} +.team_image { + position: relative; + height: 340px; +} +.team_image img{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; +} +.team_socials { + position: absolute; + top: 50%; + bottom: 0; + left: 0; + right: 0; + display: flex; + align-items: flex-end; + justify-content: flex-end; + padding: 20px; + background: linear-gradient(180deg, rgba(30, 33, 44, 0.00) 43.9%, rgba(30, 33, 44, 0.03) 55.21%, rgba(30, 33, 44, 0.33) 68.73%, rgba(30, 33, 44, 0.56) 76.17%, rgba(30, 33, 44, 0.77) 83.75%, rgba(30, 33, 44, 0.92) 91.49%, #1E212C 100%); + transform: translateY(50%); + transition: all .3s; +} +.team_slide:hover .team_socials { + transform: translateY(0%); +} +.team_socials_item { + margin-right: 12px; +} +.team_socials_item:last-child { + margin-right: 0; +} +.team_socials_link{ + display: block; + line-height: 0; +} +.team_socials_link path{ + transition: all .3s; +} +.team_socials_link:hover path{ + fill: #fff; +} +.team_info { + text-align: center; +} +.team_info_name { + font-size: 20px; + font-weight: 700; + line-height: 1.5; + color: #424551; + margin-bottom: 4px; +} +.team_info_position { + font-size: 16px; + font-weight: 400; + line-height: 1.6; + color: #787A80; +} +.team_slider_arrows { + position: absolute; + right: 0; + bottom: 0; + display: flex; +} +.team_slider_arrow { + display: flex; + border-radius: 50%; + transition: all .3s; +} +.team_slider_arrow:hover { + background-color: #FF3F3A; +} +.team_slider_arrow path { + transition: all .3s; +} +.team_slider_arrow:hover path { + fill: white; +} +.team_slider-prev { + margin-right: 12px; + height: 48px; + width: 48px; + justify-content: center; + align-items: center; +} +.team_slider-next { + height: 48px; + width: 48px; + justify-content: center; + align-items: center; +} +.team_slider_arrows .slick-prev { + +} + +/* --------------------------------MAIN TESTIMONIALS--------------------------------------------- */ + +.main_testimonials { + padding-bottom: 195px; +} +.testimonials { + background: #F4F5F6; +} +.testimonials_inner { +} +.testimonials_heading { + text-align: center; + margin-bottom: 60px; + color: #1E212C; +} +.testimonials_slider_wrapper { + padding: 0 50px; + position: relative; + margin-bottom: 50px; +} +.testimonials_slider { + max-width: 1020px; + margin: 0 auto; +} +.testimonials_slide { + padding: 64px; + background: white; + border-radius: 4px; +} +.testimonials_slide_inner { + max-width: 810px; + margin: 0 auto; + padding-left: 58px; +} +.testimonials_quote { + font-size: 20px; + font-weight: 400; + line-height: 1.5; + color: #424551; + margin-bottom: 24px; + position: relative; +} +.testimonials_quote::before { + content: ""; + position: absolute; + top: 0; + left: -58px; + background: url('./images/3/braces.svg') 0 0 / 100% no-repeat; + height: 20px; + width: 28px; +} +.testimonials_user { + display: flex; + align-items: center; +} +.testimonials_user_avatar { + border-radius: 50%; + overflow: hidden; + margin-right: 20px; +} +.testimonials_info { +} +.testimonials_info_name { + font-size: 16; + font-weight: 700; + line-height: 1.6; + color: #1E212C; + margin-bottom: 4px; +} +.testimonials_info_position { + font-size: 14px; + font-weight: 400; + line-height: 1.5; +} +.testimonials_arrow path { + transition: all .3s; +} +.testimonials_arrow { + display: flex; + border-radius: 50%; + transition: all .3s; + position: relative; + transform: translateY(-50%); +} +.testimonials_arrow:hover { + background-color: #FF3F3A; +} +.testimonials_prev { + position: absolute; + top: 50%; + left: 0; + height: 48px; + width: 48px; + justify-content: center; + align-items: center; +} +.testimonials_next { + position: absolute; + top: 50%; + right: 0; + height: 48px; + width: 48px; + justify-content: center; + align-items: center; +} +.testimonials_arrow:hover path{ + fill: white; +} +.testimonials_dots .slick-dots { + display: flex; + justify-content: center; + align-items: center; +} +.testimonials_dots li { + margin-right: 12px; +} +.testimonials_dots button { + font-size: 0px; + background: transparent; + height: 30px; + width: 30px; + display: flex; + align-items: center; +} + +.testimonials_dots button::before { + content: ""; + height: 3px; + width: 100%; + background-color: #B3B7BC; + border-radius: 3px; +} +.testimonials_dots .slick-active button::before { + background-color: #424551; + transition: all .3s; +} + +/* ----------------------------------MAIN COMPANIES-------------------------------------------- */ + + +.main_companies { + padding-bottom: 177px; + +} +.companies { + background: #F4F5F6; +} +.companies_inner { +} +.companies_heading { + text-align: center; + margin-bottom: 57px; + color: #1E212C; +} +.companies_grid { + display: grid; + grid-template: repeat(2, auto) / repeat(6, 1fr); + gap: 40px 100px; +} +.companies_grid_item { +} +.companies_item_link { + display: block; +} +.companies_item_link img { + height: 100%; + width: 100%; + filter: grayscale(1); + opacity: .4; + transition: all 1.3s; +} +.companies_item_link:hover img { + opacity: 1; + filter: grayscale(0); + transition: all .3s; +} + +/* ---------------------------MAIN PROGRAM-------------------------------- */ + +.main_program { + margin-top: 116px; + margin-bottom: 186px; +} +.program { +} +.container { +} +.program_inner { + display: flex; + justify-content: space-between; + align-items: center; +} +.program_content { + margin-right: 30px; + max-width: 600px; +} +.program_heading { + margin-bottom: 60px; + color: #1E212C; +} +.program_acc { + +} +.program_acc_item { + margin-bottom: 24px; +} +.program_acc_item:last-child { + margin-bottom: 0; +} +.program_acc_link { + display: block; + padding-left: 40px; +} +.program_acc_head { + font-size: 20px; + font-weight: 700; + line-height: 1.5; + color: #1e212c; + position: relative; +} +.program_acc_head span { + font-weight: 400; + color: #FF3F3A; + margin-right: 8px; +} +.program_acc_head::before, +.program_acc_head::after { + content: ""; + position: absolute; + top: 50%; + left: -40px; + width: 18px; + height: 2px; + background-color: #FF3F3A; + border-radius: 2px; +} +.program_acc_head::before { + +} +.program_acc_head::after { + transform: rotate(90deg); + transition: all .3s; +} +.program_acc_text { + margin-top: 16px; +} +.program_acc_link--active .program_acc_head::after { + transform: rotate(0deg); +} +.program_image { +} + +/* -----------------------------------MAIN BLOG------------------------------------------- */ + +.main_blog { + margin-bottom: 213px; +} +.blog { +} +.blog_inner { + +} +.blog_top { + display: flex; + justify-content: space-between; + align-items: flex-end; + margin-bottom: 60px; +} +.blog_heading { + margin-right: 30px; +} +.heading { +} +.heading_subtitle { +} +.heading_title { +} +.blog_btn { +} +.button { +} +.blog_row { + display: flex; + margin: 0 -15px; +} +.blog_item { + padding: 0 15px; + display: block; + +} +.blog_item_link { + display: block; + transition: all .3s; + height: 100%; +} +.blog_item_link:hover { + box-shadow: 0px 30px 30px 10px rgba(154, 156, 165, 0.08), 0px 30px 24px -10px rgba(154, 156, 165, 0.05), 0px 12px 10px -6px rgba(154, 156, 165, 0.04), 0px 4px 4px -4px rgba(30, 33, 44, 0.03); +} +.blog_item_inner { +} +.blog_image_box { + border-radius: 4px; + overflow: hidden; + margin-bottom: 16px; + position: relative; + display: flex; + justify-content: center; + align-items: center; +} +.blog_image_box span { + position: absolute; + top: 12px; + left: 12px; + font-weight: 400; + line-height: 1.5; + color: #424551; + font-size: 14px; + background-color: white; + border-radius: 4px; + padding: 0px 8px; +} +.blog_image_box span img { + width: 16px; + height: 16px; + margin-top: 2px; + margin-right: 4px; +} +.blog_image_box img { + width: auto; + height: auto; + object-fit: cover; +} +.blog_item_content { +} +.blog_item_info { + display: flex; + margin: 0 -12px 8px; +} +.blog_info_el { + padding: 0 12px; + position: relative; + color: #787A80; +} +.blog_info_el::after { + content: ""; + position: absolute; + top: 50%; + right: 0; + width: 1px; + height: 12px; + background-color: #787A80; + transform: translateY(-50%); +} +.blog_info_el:last-child:after { + content: none; +} +.blog_info_dir { +} +.blog_info_date { + display: flex; + align-items: center; +} +.blog_info_date::before { + display: block; + content: ""; + width: 16px; + height: 17px; + background: url("./images/4/icons/Calendar.svg") 0 0 / 100% no-repeat; + margin-right: 9px; +} +.blog_info_time { + display: flex; + align-items: center; +} +.blog_info_time::before { + display: block; + content: ""; + width: 16px; + height: 17px; + background: url("./images/4/icons/Clock.svg") 0 0 / 100% no-repeat; + margin-right: 9px; +} +.blog_item_title { + font-size: 20px; + font-weight: 700; + line-height: 1.5; + color: #1E212C; + margin-bottom: 8px; +} +.blog_item_text { + margin-bottom: 16px; +} +.blog_item_btn { + display: flex; + align-items: center; + font-weight: 700; + line-height: 1.6; + color: #1E212C; + transition: all .3s; +} +.blog_item_btn:hover { + color: #FF3F3A; +} +.blog_item_btn img { + padding: 6px 8px; +} + +/* ---------------------------------MAIN INFO--------------------------------------------------- */ + +.main_info { + margin-bottom: 180px; +} +.info { +} +.container { +} +.info_inner { + display: flex; + align-items: flex-end; + justify-content: space-between; +} +.info_content { + margin-right: 30px; +} +.info_heading { + color: #1E212C; + margin-bottom: 40px; +} +.heading_subtitle { +} +.heading_title { +} +.info_contacts { + +} +.info_contacts_item { + margin-bottom: 24px; + display: flex; + align-items: start; + +} +.info_contacts_item svg { + margin-right: 12px; + height: 24px; + width: 24px; +} +.info_contacts_item:last-child { + margin-bottom: 0; +} +.info_contants_text { + +} +.info_item_top { + font-size: 14px; + font-weight: 700; + line-height: 1.5; + color: #787A80; +} +.info_item_top img { + margin-right: 12px; +} + +.info_item_link { + font-size: 18px; + font-weight: 400; + line-height: 1.5; + color: #1E212C; + transition: all .3s; +} +.info_item_link:hover { + color: #FF3F3A; +} +.info_item_address { + font-size: 18px; + font-weight: 400; + line-height: 1.5; + color: #1E212C; + margin-bottom: 48px; +} +.info_follow { + +} +.info_follow_head { + font-style: 16px; + font-weight: 701; + line-height: 1.5; + letter-spacing: 1px; + text-transform: uppercase; + margin-bottom: 24px; +} +.info_socials { + display: flex; +} +.info_socials_item { +} +.info_socials_link { + margin-right: 32px; +} +.info_socials_link path { + transition: all .3s; +} +.info_socials_link:hover path{ + fill: #000; +} +.info_map { + height: 412px; + width: 100%; + max-width: 705px; + overflow: hidden; +} +.info_map iframe { + border-radius: 4px; + box-shadow: 0 80px 80px -20px rgba(154, 156, 165, 0.08), + 0 30px 24px -10px rgba(154, 156, 165, 0.05), + 0 12px 10px -6px rgba(154, 156, 165, 0.04), + 0 4px 4px -4px rgba(30, 33, 44, 0.03); +} + +/* ---------------------------MAIN QUESTIONS--------------------------------- */ + +.main_questions { + margin-bottom: 180px; +} +.questions { +} +.container { +} +.questions_inner { + display: flex; + justify-content: space-between; + align-items: center; +} +.questions_content { + margin-left: 30px; +} +.questions_heading { + color: #1E212C; + margin-bottom: 40px; +} +.heading_subtitle { +} +.heading_title { +} +.questions_form { +} +.questions_form_row { + display: flex; + margin-bottom: 24px; +} +.questions_text_label { + display: block; + margin-bottom: 48px; +} + +.questions_form_label { + margin-right: 25px; + flex: 1 1 auto; +} +.questions_form_label:last-child { + margin-right: 0; +} +.questions_form_input, +.questions_form_text { + display: block; + border: 1px solid #D7DADD; + border-radius: 4px; + padding: 13px 16px; + width: 100%; + margin-top: 8px; +} +.questions_form_input::placeholder, +.questions_form_text::placeholder { + color: #9a9ca5; + font-size: 16px; + font-weight: 400; + line-height: 1.6; +} +.questions_form_text { + resize: none; + height: 128px; +} +.questions_checkbox_label { + margin-right: 50px; + display: flex; + width: 100%; +} +.questions_form_checkbox { + width: 16px; + height: 16px; + flex: 0 0 auto; + margin-top: 5px; + margin-right: 12px; + accent-color: red; +} +.questions_form-default { + +} + +.questions_form-custom { + +} +.questions_form_btn { + width: 100%; + align-self: center; + text-align: center; +} +.button { +} + +/* ------------------------------------FOOTER------------------------------------------- */ + +.footer { + color: white; + +} +.footer_top { + background-color: #1e212c; + padding-top: 80px; +} +.container { +} +.footer_top_inner { + display: grid; + grid-template-columns: repeat(5, auto); + gap: 80px; +} +.fotter_top_col { + width: auto; +} +.fotter_top_col:first-child { + +} +.footer_logo { + display: block; + margin-bottom: 24px; +} +.logo { + +} +.footer_top_text { + font-size: 12px; + font-weight: 400; + line-height: 1.5; + opacity: 0.6; + margin-bottom: 38px; +} +.footer_socials { + display: flex; + margin-bottom: 60px; +} +.footer_socials_item { + margin-right: 20px; +} +.footer_socials_item:last-child { + margin-right: 0; +} +.footer_socials_link path { + transition: all .3s; +} +.footer_socials_link:hover path { + fill: #fff; +} +.footer_top_title { + font-size: 16px; + font-weight: 701; + line-height: 1.5; + margin-bottom: 12px; + +} +.footer_top_title--title1 { + font-size: 16px; + font-weight: 701; + line-height: 1.5; + margin-bottom: 24px; + white-space: nowrap; +} +.footer_top_list { +} +.footer_top_item { + +} +.footer_item_link { + font-size: 16px; + font-weight: 400; + line-height: 1.6; + opacity: 0.6; + margin-bottom: 8px; + transition: all .3s; + display: flex; + white-space: nowrap; +} +.footer_item_link:hover { + opacity: 1; +} +.footer_item_link:last-child { + margin-bottom: 0; +} +.footer_item_link svg { + display: block; + width: 16px; + height: 16px; + margin-right: 8px; + margin-top: 4px; +} +.footer_top_form { + display: block; + overflow: hidden; + position: relative; +} +.footer_form_input { + width: 100%; + padding: 9px 12px; + border-radius: 4px; + border: 1px solid rgba(255, 255, 255, 0.20); + background: rgba(255, 255, 255, 0.12); + color: #fff; + opacity: 0.6; + font-size: 12px; + font-weight: 400; + line-height: 1.5; +} +.footer_form_btn { + display: block; + width: 16px; + height: 16px; +} +.footer_form_img { + position: absolute; + top: 50%; + right: 12px; + top: 16px; +} +.footer_form_desc { + font-size: 10px; + font-weight: 400; + line-height: 1.5; +} +.footer_bottom { + background-color: rgb(41, 44, 55); +} +.footer_bottom_inner { + display: flex; + justify-content: space-between; + padding: 20px 0px; +} +.footer_copy { + font-size: 12px; + font-weight: 400; + line-height: 1.5; + display: flex; +} +.footer_copy span { + display: block; + height: 16px; + width: 16px; + margin: 0px 4px; + align-items: center; + justify-content: center; +} +.footer_go_top { + font-size: 14px; + font-weight: 701; + line-height: 1.5; + opacity: 0.6; + transition: all .3s; +} +.footer_go_top:hover { + opacity: 1; +}