├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .travis.yml
├── .wordpress
├── banner-1544x500.png
├── banner-772x250.png
├── icon-128x128.png
├── icon-256x256.png
└── icon.svg
├── README.md
├── animate-blocks.php
├── assets
└── github
│ └── animate-blocks-demo.gif
├── composer.json
├── composer.lock
├── dist
├── aos-3.0.0-beta.6
│ ├── aos.css
│ └── aos.js
├── aos-init.js
└── blocks.build.js
├── languages
└── animate-blocks.pot
├── package-lock.json
├── package.json
├── phpcs.xml
├── readme.txt
├── screenshot-1.png
├── scripts
├── deploy-wp-plugin.sh
└── phpcodesniffer.sh
└── src
├── animate
├── anchor-placement-options.js
├── animation-options.js
├── block.js
└── easing-options.js
├── blocks.js
├── class-animate-blocks.php
└── common.scss
/.editorconfig:
--------------------------------------------------------------------------------
1 | # This file is for unifying the coding style for different editors and IDEs
2 | # editorconfig.org
3 |
4 | # WordPress Coding Standards
5 | # https://make.wordpress.org/core/handbook/coding-standards/
6 |
7 | root = true
8 |
9 | [*]
10 | charset = utf-8
11 | end_of_line = lf
12 | insert_final_newline = true
13 | trim_trailing_whitespace = true
14 | indent_style = tab
15 | indent_size = 4
16 |
17 | [*.{yml,json}]
18 | indent_style = space
19 | indent_size = 2
20 |
21 | [*.md]
22 | indent_style = space
23 | trim_trailing_whitespace = false
24 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | **/*.min.js
2 | **/*.build.js
3 | **/node_modules/**
4 | **/vendor/**
5 | build
6 | coverage
7 | cypress
8 | node_modules
9 | vendor
10 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "parser": "babel-eslint",
4 | "extends": [
5 | "wordpress",
6 | "plugin:react/recommended",
7 | "plugin:jsx-a11y/recommended",
8 | "plugin:jest/recommended"
9 | ],
10 | "env": {
11 | "browser": false,
12 | "es6": true,
13 | "node": true,
14 | "mocha": true,
15 | "jest/globals": true
16 | },
17 | "parserOptions": {
18 | "sourceType": "module",
19 | "ecmaFeatures": {
20 | "jsx": true
21 | }
22 | },
23 | "globals": {
24 | "wp": true,
25 | "wpApiSettings": true,
26 | "window": true,
27 | "document": true
28 | },
29 | "plugins": ["react", "jsx-a11y", "jest"],
30 | "settings": {
31 | "react": {
32 | "pragma": "wp"
33 | }
34 | },
35 | "rules": {
36 | "array-bracket-spacing": ["error", "always"],
37 | "brace-style": ["error", "1tbs"],
38 | "camelcase": ["error", { "properties": "never" }],
39 | "comma-dangle": ["error", "always-multiline"],
40 | "comma-spacing": "error",
41 | "comma-style": "error",
42 | "computed-property-spacing": ["error", "always"],
43 | "constructor-super": "error",
44 | "dot-notation": "error",
45 | "eol-last": "error",
46 | "eqeqeq": "error",
47 | "func-call-spacing": "error",
48 | "indent": ["error", "tab", { "SwitchCase": 1 }],
49 | "jsx-a11y/label-has-for": [
50 | "error",
51 | {
52 | "required": "id"
53 | }
54 | ],
55 | "jsx-a11y/media-has-caption": "off",
56 | "jsx-a11y/no-noninteractive-tabindex": "off",
57 | "jsx-a11y/role-has-required-aria-props": "off",
58 | "jsx-quotes": "error",
59 | "key-spacing": "error",
60 | "keyword-spacing": "error",
61 | "lines-around-comment": "off",
62 | "no-alert": "error",
63 | "no-bitwise": "error",
64 | "no-caller": "error",
65 | "no-console": "error",
66 | "no-const-assign": "error",
67 | "no-debugger": "error",
68 | "no-dupe-args": "error",
69 | "no-dupe-class-members": "error",
70 | "no-dupe-keys": "error",
71 | "no-duplicate-case": "error",
72 | "no-duplicate-imports": "error",
73 | "no-else-return": "error",
74 | "no-eval": "error",
75 | "no-extra-semi": "error",
76 | "no-fallthrough": "error",
77 | "no-lonely-if": "error",
78 | "no-mixed-operators": "error",
79 | "no-mixed-spaces-and-tabs": "error",
80 | "no-multiple-empty-lines": ["error", { "max": 1 }],
81 | "no-multi-spaces": "error",
82 | "no-multi-str": "off",
83 | "no-negated-in-lhs": "error",
84 | "no-nested-ternary": "error",
85 | "no-redeclare": "error",
86 | "no-restricted-syntax": [
87 | "error",
88 | {
89 | "selector":
90 | "ImportDeclaration[source.value=/^@wordpress\\u002F.+\\u002F/]",
91 | "message": "Path access on WordPress dependencies is not allowed."
92 | },
93 | {
94 | "selector": "ImportDeclaration[source.value=/^blocks$/]",
95 | "message": "Use @wordpress/blocks as import path instead."
96 | },
97 | {
98 | "selector": "ImportDeclaration[source.value=/^components$/]",
99 | "message": "Use @wordpress/components as import path instead."
100 | },
101 | {
102 | "selector": "ImportDeclaration[source.value=/^date$/]",
103 | "message": "Use @wordpress/date as import path instead."
104 | },
105 | {
106 | "selector": "ImportDeclaration[source.value=/^editor$/]",
107 | "message": "Use @wordpress/editor as import path instead."
108 | },
109 | {
110 | "selector": "ImportDeclaration[source.value=/^element$/]",
111 | "message": "Use @wordpress/element as import path instead."
112 | },
113 | {
114 | "selector": "ImportDeclaration[source.value=/^i18n$/]",
115 | "message": "Use @wordpress/i18n as import path instead."
116 | },
117 | {
118 | "selector": "ImportDeclaration[source.value=/^data$/]",
119 | "message": "Use @wordpress/data as import path instead."
120 | },
121 | {
122 | "selector": "ImportDeclaration[source.value=/^utils$/]",
123 | "message": "Use @wordpress/utils as import path instead."
124 | },
125 | {
126 | "selector":
127 | "CallExpression[callee.name=/^__|_n|_x$/]:not([arguments.0.type=/^Literal|BinaryExpression$/])",
128 | "message": "Translate function arguments must be string literals."
129 | },
130 | {
131 | "selector":
132 | "CallExpression[callee.name=/^_n|_x$/]:not([arguments.1.type=/^Literal|BinaryExpression$/])",
133 | "message": "Translate function arguments must be string literals."
134 | },
135 | {
136 | "selector":
137 | "CallExpression[callee.name=_nx]:not([arguments.2.type=/^Literal|BinaryExpression$/])",
138 | "message": "Translate function arguments must be string literals."
139 | }
140 | ],
141 | "no-shadow": "error",
142 | "no-undef": "error",
143 | "no-undef-init": "error",
144 | "no-unreachable": "error",
145 | "no-unsafe-negation": "error",
146 | "no-unused-expressions": "error",
147 | "no-unused-vars": "error",
148 | "no-useless-computed-key": "error",
149 | "no-useless-constructor": "error",
150 | "no-useless-return": "error",
151 | "no-var": "error",
152 | "no-whitespace-before-property": "error",
153 | "object-curly-spacing": ["error", "always"],
154 | "padded-blocks": ["error", "never"],
155 | "prefer-const": "error",
156 | "quote-props": ["error", "as-needed"],
157 | "react/display-name": "off",
158 | "react/jsx-curly-spacing": [
159 | "error",
160 | {
161 | "when": "always",
162 | "children": true
163 | }
164 | ],
165 | "react/jsx-equals-spacing": "error",
166 | "react/jsx-indent": ["error", "tab"],
167 | "react/jsx-indent-props": ["error", "tab"],
168 | "react/jsx-key": "error",
169 | "react/jsx-tag-spacing": "error",
170 | "react/no-children-prop": "off",
171 | "react/no-find-dom-node": "warn",
172 | "react/prop-types": "off",
173 | "semi": "error",
174 | "semi-spacing": "error",
175 | "space-before-blocks": ["error", "always"],
176 | "space-before-function-paren": ["error", "never"],
177 | "space-in-parens": ["error", "always"],
178 | "space-infix-ops": ["error", { "int32Hint": false }],
179 | "space-unary-ops": [
180 | "error",
181 | {
182 | "overrides": {
183 | "!": true
184 | }
185 | }
186 | ],
187 | "template-curly-spacing": ["error", "always"],
188 | "valid-jsdoc": ["error", { "requireReturn": false }],
189 | "valid-typeof": "error",
190 | "yoda": "off"
191 | }
192 | }
193 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | vendor
3 | build/
4 | wp-cli.phar
5 | composer.phar
6 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 |
3 | php:
4 | - 7.0
5 | - 7.1
6 | - 7.2
7 | - 7.3
8 |
9 | before_install:
10 | - nvm install 10
11 |
12 | install:
13 | - composer install
14 | - vendor/bin/phpcs --config-set installed_paths vendor/wp-coding-standards/wpcs
15 | - npm install
16 |
17 | script:
18 | - scripts/phpcodesniffer.sh
19 | - npm run lint
20 |
21 | deploy:
22 | provider: script
23 | script: scripts/deploy-wp-plugin.sh
24 | on:
25 | php: 7.2
26 | tags: true
27 | all_branches: true
28 |
29 | env:
30 | global:
31 | secure: xUWw/5RB8vS0Gq1hbWeUsNCsitWyoK2l24bMMVqCvRlHZIrf4pywVOmh5e3IU5UKdRaBQzKLwRwf8kHYusp2n35EEE6a3Fe+z9nNEM38bkPybtpH7RYv2DN9Mj6t2u+TE0KpzdglwFi+z5Eq+NMSeoucCanZdJM0nb6atkxcZMwmGd7LlihdihHaken+1gUEYv8paq7SkUYNJKGByJvKmADgBRqjQ5VW737YMV1V3fi79KAhoKWSQPlKAfcytNDFRUF2MzJ3Ba4kUm84aWHwncgph53jACciogvCbqmWBpQZUmiuQ2J2F3zXUJfurHHdxgLaztkmCoTGehnU4ZUIQvS/nq0N2LXu0LTl9efcb247gXi0v50D3AEoVUiJA8UdUmO3Fbd2EULWoJOmBNQcSHZKH2oNPm7IsQM4ZFUL7PH4c8j4yrDKlqBBF/Hf5sHrN3iX/4qtiBTUAvC4LuJideyJBBBjeuknncqckfq4Dp0jqe8TgMGxbVpX3rzfIOVyhA5vci9hHXzl9khX74NKTIlKpn44EVghpoU9N/rFiSlJWsc3DrS6SZ+VIgGVIx2I/0Tr3sTY3ak/fnygNkwgyAa0y5uQ3C5KFfTY8kegybSdLsvpbBDugHEhc5o8PalR6k2oDCMS+9celOWO8SqK1ul5qVlXXYcGL33WlVsk0CQ=
32 |
--------------------------------------------------------------------------------
/.wordpress/banner-1544x500.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liip/animate-blocks-wordpress-plugin/5a839664a84c56d28ff21badfe5c4451844abe76/.wordpress/banner-1544x500.png
--------------------------------------------------------------------------------
/.wordpress/banner-772x250.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liip/animate-blocks-wordpress-plugin/5a839664a84c56d28ff21badfe5c4451844abe76/.wordpress/banner-772x250.png
--------------------------------------------------------------------------------
/.wordpress/icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liip/animate-blocks-wordpress-plugin/5a839664a84c56d28ff21badfe5c4451844abe76/.wordpress/icon-128x128.png
--------------------------------------------------------------------------------
/.wordpress/icon-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liip/animate-blocks-wordpress-plugin/5a839664a84c56d28ff21badfe5c4451844abe76/.wordpress/icon-256x256.png
--------------------------------------------------------------------------------
/.wordpress/icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Animate Blocks - Animate Gutenberg blocks plugin for WordPress
2 |
3 | [](https://travis-ci.org/liip/animate-blocks-wordpress-plugin)
4 |
5 | Animate Gutenberg blocks when they scroll into view.
6 |
7 | * Works with all existing Gutenberg blocks
8 | * Choose from 27 different animations
9 | * Configure animation with custom delays, offsets and durations
10 | * Based on [AOS Animate On Scroll Library](http://michalsnik.github.io/aos/)
11 |
12 | 
13 |
14 | ## JavaScript Filters
15 |
16 | ### animateBlocks.defaultOptions
17 |
18 | Change default options.
19 |
20 | #### Usage:
21 |
22 | ```javascript
23 | function myDefaultOptions( defaultOptions ) {
24 | // Change default animation to 'flip-up'
25 | defaultOptions.animation = 'flip-up';
26 |
27 | return defaultOptions;
28 | }
29 | wp.hooks.addFilter( 'animateBlocks.defaultOptions', 'myplugin/animate-blocks/defaultOptions', myDefaultOptions );
30 | ```
31 |
32 | #### Parameters:
33 |
34 | * `defaultOptions` (object) Object with the following attributes
35 | * `animation` (string)
36 | * `offset` (number)
37 | * `delay` (number)
38 | * `duration` (number)
39 | * `easing` (string)
40 | * `once` (boolean)
41 | * `mirror` (boolean)
42 | * `anchorPlacement` (string)
43 |
44 | ### animateBlocks.anchorPlacementOptions
45 |
46 | Modify anchor placement options.
47 |
48 | #### Usage:
49 |
50 | ```javascript
51 | function myAnchorPlacementOptions( anchorPlacementOptions ) {
52 | // Modify anchorPlacementOptions here
53 |
54 | return anchorPlacementOptions;
55 | }
56 | wp.hooks.addFilter( 'animateBlocks.anchorPlacementOptions', 'myplugin/animate-blocks/anchorPlacementOptions', myAnchorPlacementOptions );
57 | ```
58 |
59 | #### Parameters:
60 |
61 | * `anchorPlacementOptions` (array) Array with anchor placement options
62 |
63 | ### animateBlocks.animationOptions
64 |
65 | Modify animation options.
66 |
67 | #### Usage:
68 |
69 | ```javascript
70 | function myAnimationOptions( animationOptions ) {
71 | // Modify animationOptions here
72 |
73 | return animationOptions;
74 | }
75 | wp.hooks.addFilter( 'animateBlocks.animationOptions', 'myplugin/animate-blocks/animationOptions', myAnimationOptions );
76 | ```
77 |
78 | #### Parameters:
79 |
80 | * `animationOptions` (array) Array with animation options
81 |
82 | ### animateBlocks.easingOptions
83 |
84 | Modify easing options.
85 |
86 | #### Usage:
87 |
88 | ```javascript
89 | function myEasingOptions( easingOptions ) {
90 | // Modify easingOptions here
91 |
92 | return easingOptions;
93 | }
94 | wp.hooks.addFilter( 'animateBlocks.easingOptions', 'myplugin/animate-blocks/easingOptions', myEasingOptions );
95 | ```
96 |
97 | #### Parameters:
98 |
99 | * `easingOptions` (array) Array with easing options
100 |
101 |
102 | ## PHP Filters
103 |
104 | ### animate_blocks_load_aos
105 |
106 | Enable or disable loading of AOS library.
107 |
108 | #### Usage:
109 |
110 | ```php
111 | function my_plugin_disable_load_aos( $load_aos ) {
112 | $load_aos = false;
113 | return $load_aos;
114 | }
115 | add_filter( 'animate_blocks_load_aos', 'my_plugin_disable_load_aos' );
116 | ```
117 |
118 | #### Parameters:
119 |
120 | * `$enable_aos` (boolean) If true AOS will be loaded by the plugin.
121 |
122 | ## Developer information
123 |
124 | ### Installation
125 |
126 | 1. Clone this repo
127 |
128 | 1. Install composer dependencies
129 |
130 | ```
131 | $ curl -s https://getcomposer.org/installer | php
132 | $ php composer.phar install
133 | $ vendor/bin/phpcs --config-set installed_paths vendor/wp-coding-standards/wpcs
134 | ```
135 |
136 | 1. Install Node dependencies
137 |
138 | ```
139 | $ npm install
140 | ```
141 |
142 | ### Compile assets
143 |
144 | This project was bootstrapped with [Create Guten Block](https://github.com/ahmadawais/create-guten-block).
145 |
146 | #### `npm start`
147 | - Use to compile and run the block in development mode.
148 | - Watches for any changes and reports back any errors in your code.
149 |
150 | #### `npm run build`
151 | - Use to build production code for your block inside `dist` folder.
152 | - Runs once and reports back the gzip file sizes of the produced code.
153 |
154 | #### `npm run eject`
155 | - Use to eject your plugin out of `create-guten-block`.
156 | - Provides all the configurations so you can customize the project as you want.
157 | - It's a one-way street, `eject` and you have to maintain everything yourself.
158 | - You don't normally have to `eject` a project because by ejecting you lose the connection with `create-guten-block` and from there onwards you have to update and maintain all the dependencies on your own.
159 |
160 | ### Extract labels
161 |
162 | To extract the labels and generate the `languages/animate-blocks.pot` file run the following command:
163 |
164 | ```
165 | $ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
166 | $ php wp-cli.phar i18n make-pot . languages/animate-blocks.pot
167 | ```
168 |
--------------------------------------------------------------------------------
/animate-blocks.php:
--------------------------------------------------------------------------------
1 | =5.4.0"
29 | },
30 | "require-dev": {
31 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
32 | },
33 | "bin": [
34 | "bin/phpcs",
35 | "bin/phpcbf"
36 | ],
37 | "type": "library",
38 | "extra": {
39 | "branch-alias": {
40 | "dev-master": "3.x-dev"
41 | }
42 | },
43 | "notification-url": "https://packagist.org/downloads/",
44 | "license": [
45 | "BSD-3-Clause"
46 | ],
47 | "authors": [
48 | {
49 | "name": "Greg Sherwood",
50 | "role": "lead"
51 | }
52 | ],
53 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
54 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
55 | "keywords": [
56 | "phpcs",
57 | "standards"
58 | ],
59 | "time": "2019-03-19T03:22:27+00:00"
60 | },
61 | {
62 | "name": "wp-coding-standards/wpcs",
63 | "version": "2.0.0",
64 | "source": {
65 | "type": "git",
66 | "url": "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git",
67 | "reference": "c9eaadaafefce36b3cb7e06eb15305b8c4cae9ce"
68 | },
69 | "dist": {
70 | "type": "zip",
71 | "url": "https://api.github.com/repos/WordPress-Coding-Standards/WordPress-Coding-Standards/zipball/c9eaadaafefce36b3cb7e06eb15305b8c4cae9ce",
72 | "reference": "c9eaadaafefce36b3cb7e06eb15305b8c4cae9ce",
73 | "shasum": ""
74 | },
75 | "require": {
76 | "php": ">=5.4",
77 | "squizlabs/php_codesniffer": "^3.3.1"
78 | },
79 | "require-dev": {
80 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0",
81 | "phpcompatibility/php-compatibility": "^9.0",
82 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
83 | },
84 | "suggest": {
85 | "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically."
86 | },
87 | "type": "phpcodesniffer-standard",
88 | "notification-url": "https://packagist.org/downloads/",
89 | "license": [
90 | "MIT"
91 | ],
92 | "authors": [
93 | {
94 | "name": "Contributors",
95 | "homepage": "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/graphs/contributors"
96 | }
97 | ],
98 | "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions",
99 | "keywords": [
100 | "phpcs",
101 | "standards",
102 | "wordpress"
103 | ],
104 | "time": "2019-01-16T10:13:16+00:00"
105 | }
106 | ],
107 | "aliases": [],
108 | "minimum-stability": "stable",
109 | "stability-flags": [],
110 | "prefer-stable": false,
111 | "prefer-lowest": false,
112 | "platform": [],
113 | "platform-dev": []
114 | }
115 |
--------------------------------------------------------------------------------
/dist/aos-3.0.0-beta.6/aos.css:
--------------------------------------------------------------------------------
1 | [data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0s}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos]{pointer-events:none}[data-aos].aos-animate{pointer-events:auto}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}@media screen{html:not(.no-js) [data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;-webkit-transform:none;transform:none}html:not(.no-js) [data-aos=fade-up]{-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}html:not(.no-js) [data-aos=fade-down]{-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}html:not(.no-js) [data-aos=fade-right]{-webkit-transform:translate3d(-100px,0,0);transform:translate3d(-100px,0,0)}html:not(.no-js) [data-aos=fade-left]{-webkit-transform:translate3d(100px,0,0);transform:translate3d(100px,0,0)}html:not(.no-js) [data-aos=fade-up-right]{-webkit-transform:translate3d(-100px,100px,0);transform:translate3d(-100px,100px,0)}html:not(.no-js) [data-aos=fade-up-left]{-webkit-transform:translate3d(100px,100px,0);transform:translate3d(100px,100px,0)}html:not(.no-js) [data-aos=fade-down-right]{-webkit-transform:translate3d(-100px,-100px,0);transform:translate3d(-100px,-100px,0)}html:not(.no-js) [data-aos=fade-down-left]{-webkit-transform:translate3d(100px,-100px,0);transform:translate3d(100px,-100px,0)}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}html:not(.no-js) [data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}html:not(.no-js) [data-aos=zoom-in]{-webkit-transform:scale(.6);transform:scale(.6)}html:not(.no-js) [data-aos=zoom-in-up]{-webkit-transform:translate3d(0,100px,0) scale(.6);transform:translate3d(0,100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-down]{-webkit-transform:translate3d(0,-100px,0) scale(.6);transform:translate3d(0,-100px,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-right]{-webkit-transform:translate3d(-100px,0,0) scale(.6);transform:translate3d(-100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-in-left]{-webkit-transform:translate3d(100px,0,0) scale(.6);transform:translate3d(100px,0,0) scale(.6)}html:not(.no-js) [data-aos=zoom-out]{-webkit-transform:scale(1.2);transform:scale(1.2)}html:not(.no-js) [data-aos=zoom-out-up]{-webkit-transform:translate3d(0,100px,0) scale(1.2);transform:translate3d(0,100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-down]{-webkit-transform:translate3d(0,-100px,0) scale(1.2);transform:translate3d(0,-100px,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-right]{-webkit-transform:translate3d(-100px,0,0) scale(1.2);transform:translate3d(-100px,0,0) scale(1.2)}html:not(.no-js) [data-aos=zoom-out-left]{-webkit-transform:translate3d(100px,0,0) scale(1.2);transform:translate3d(100px,0,0) scale(1.2)}html:not(.no-js) [data-aos^=slide][data-aos^=slide]{transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;visibility:hidden}html:not(.no-js) [data-aos^=slide][data-aos^=slide].aos-animate{visibility:visible;-webkit-transform:translateZ(0);transform:translateZ(0)}html:not(.no-js) [data-aos=slide-up]{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}html:not(.no-js) [data-aos=slide-down]{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}html:not(.no-js) [data-aos=slide-right]{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}html:not(.no-js) [data-aos=slide-left]{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}html:not(.no-js) [data-aos^=flip][data-aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}html:not(.no-js) [data-aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}html:not(.no-js) [data-aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}html:not(.no-js) [data-aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}html:not(.no-js) [data-aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}html:not(.no-js) [data-aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}html:not(.no-js) [data-aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}html:not(.no-js) [data-aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}}
--------------------------------------------------------------------------------
/dist/aos-3.0.0-beta.6/aos.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.AOS=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t="Expected a function",n=NaN,o="[object Symbol]",i=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,r=/^0b[01]+$/i,c=/^0o[0-7]+$/i,s=parseInt,u="object"==typeof e&&e&&e.Object===Object&&e,d="object"==typeof self&&self&&self.Object===Object&&self,l=u||d||Function("return this")(),f=Object.prototype.toString,m=Math.max,p=Math.min,b=function(){return l.Date.now()};function v(e,n,o){var i,a,r,c,s,u,d=0,l=!1,f=!1,v=!0;if("function"!=typeof e)throw new TypeError(t);function y(t){var n=i,o=a;return i=a=void 0,d=t,c=e.apply(o,n)}function h(e){var t=e-u;return void 0===u||t>=n||t<0||f&&e-d>=r}function k(){var e=b();if(h(e))return x(e);s=setTimeout(k,function(e){var t=n-(e-u);return f?p(t,r-(e-d)):t}(e))}function x(e){return s=void 0,v&&i?y(e):(i=a=void 0,c)}function O(){var e=b(),t=h(e);if(i=arguments,a=this,u=e,t){if(void 0===s)return function(e){return d=e,s=setTimeout(k,n),l?y(e):c}(u);if(f)return s=setTimeout(k,n),y(u)}return void 0===s&&(s=setTimeout(k,n)),c}return n=w(n)||0,g(o)&&(l=!!o.leading,r=(f="maxWait"in o)?m(w(o.maxWait)||0,n):r,v="trailing"in o?!!o.trailing:v),O.cancel=function(){void 0!==s&&clearTimeout(s),d=0,i=u=a=s=void 0},O.flush=function(){return void 0===s?c:x(b())},O}function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function w(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&f.call(e)==o}(e))return n;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(i,"");var u=r.test(e);return u||c.test(e)?s(e.slice(2),u?2:8):a.test(e)?n:+e}var y=function(e,n,o){var i=!0,a=!0;if("function"!=typeof e)throw new TypeError(t);return g(o)&&(i="leading"in o?!!o.leading:i,a="trailing"in o?!!o.trailing:a),v(e,n,{leading:i,maxWait:n,trailing:a})},h="Expected a function",k=NaN,x="[object Symbol]",O=/^\s+|\s+$/g,j=/^[-+]0x[0-9a-f]+$/i,E=/^0b[01]+$/i,N=/^0o[0-7]+$/i,z=parseInt,C="object"==typeof e&&e&&e.Object===Object&&e,A="object"==typeof self&&self&&self.Object===Object&&self,q=C||A||Function("return this")(),L=Object.prototype.toString,T=Math.max,M=Math.min,S=function(){return q.Date.now()};function D(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function H(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&L.call(e)==x}(e))return k;if(D(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=D(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(O,"");var n=E.test(e);return n||N.test(e)?z(e.slice(2),n?2:8):j.test(e)?k:+e}var $=function(e,t,n){var o,i,a,r,c,s,u=0,d=!1,l=!1,f=!0;if("function"!=typeof e)throw new TypeError(h);function m(t){var n=o,a=i;return o=i=void 0,u=t,r=e.apply(a,n)}function p(e){var n=e-s;return void 0===s||n>=t||n<0||l&&e-u>=a}function b(){var e=S();if(p(e))return v(e);c=setTimeout(b,function(e){var n=t-(e-s);return l?M(n,a-(e-u)):n}(e))}function v(e){return c=void 0,f&&o?m(e):(o=i=void 0,r)}function g(){var e=S(),n=p(e);if(o=arguments,i=this,s=e,n){if(void 0===c)return function(e){return u=e,c=setTimeout(b,t),d?m(e):r}(s);if(l)return c=setTimeout(b,t),m(s)}return void 0===c&&(c=setTimeout(b,t)),r}return t=H(t)||0,D(n)&&(d=!!n.leading,a=(l="maxWait"in n)?T(H(n.maxWait)||0,t):a,f="trailing"in n?!!n.trailing:f),g.cancel=function(){void 0!==c&&clearTimeout(c),u=0,o=s=i=c=void 0},g.flush=function(){return void 0===c?r:v(S())},g},W=function(){};function P(e){e&&e.forEach(function(e){var t=Array.prototype.slice.call(e.addedNodes),n=Array.prototype.slice.call(e.removedNodes);if(function e(t){var n=void 0,o=void 0;for(n=0;n=o.out&&!n.once?a():t>=o.in?e.animated||(function(e,t){t&&t.forEach(function(t){return e.classList.add(t)})}(i,n.animatedClassNames),V("aos:in",i),e.options.id&&V("aos:in:"+e.options.id,i),e.animated=!0):e.animated&&!n.once&&a()}(e,window.pageYOffset)})},Z=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-("BODY"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-("BODY"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}},ee=function(e,t,n){var o=e.getAttribute("data-aos-"+t);if(void 0!==o){if("true"===o)return!0;if("false"===o)return!1}return o||n},te=function(e,t){return e.forEach(function(e,n){var o=ee(e.node,"mirror",t.mirror),i=ee(e.node,"once",t.once),a=ee(e.node,"id"),r=t.useClassNames&&e.node.getAttribute("data-aos"),c=[t.animatedClassName].concat(r?r.split(" "):[]).filter(function(e){return"string"==typeof e});t.initClassName&&e.node.classList.add(t.initClassName),e.position={in:function(e,t,n){var o=window.innerHeight,i=ee(e,"anchor"),a=ee(e,"anchor-placement"),r=Number(ee(e,"offset",a?0:t)),c=a||n,s=e;i&&document.querySelectorAll(i)&&(s=document.querySelectorAll(i)[0]);var u=Z(s).top-o;switch(c){case"top-bottom":break;case"center-bottom":u+=s.offsetHeight/2;break;case"bottom-bottom":u+=s.offsetHeight;break;case"top-center":u+=o/2;break;case"center-center":u+=o/2+s.offsetHeight/2;break;case"bottom-center":u+=o/2+s.offsetHeight;break;case"top-top":u+=o;break;case"bottom-top":u+=o+s.offsetHeight;break;case"center-top":u+=o+s.offsetHeight/2}return u+r}(e.node,t.offset,t.anchorPlacement),out:o&&function(e,t){window.innerHeight;var n=ee(e,"anchor"),o=ee(e,"offset",t),i=e;return n&&document.querySelectorAll(n)&&(i=document.querySelectorAll(n)[0]),Z(i).top+i.offsetHeight-o}(e.node,t.offset)},e.options={once:i,mirror:o,animatedClassNames:c,id:a}}),e},ne=function(){var e=document.querySelectorAll("[data-aos]");return Array.prototype.map.call(e,function(e){return{node:e}})},oe=[],ie=!1,ae={offset:120,delay:0,easing:"ease",duration:400,disable:!1,once:!1,mirror:!1,anchorPlacement:"top-bottom",startEvent:"DOMContentLoaded",animatedClassName:"aos-animate",initClassName:"aos-init",useClassNames:!1,disableMutationObserver:!1,throttleDelay:99,debounceDelay:50},re=function(){return document.all&&!window.atob},ce=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&(ie=!0),ie&&(oe=te(oe,ae),X(oe),window.addEventListener("scroll",y(function(){X(oe,ae.once)},ae.throttleDelay)))},se=function(){if(oe=ne(),de(ae.disable)||re())return ue();ce()},ue=function(){oe.forEach(function(e,t){e.node.removeAttribute("data-aos"),e.node.removeAttribute("data-aos-easing"),e.node.removeAttribute("data-aos-duration"),e.node.removeAttribute("data-aos-delay"),ae.initClassName&&e.node.classList.remove(ae.initClassName),ae.animatedClassName&&e.node.classList.remove(ae.animatedClassName)})},de=function(e){return!0===e||"mobile"===e&&U.mobile()||"phone"===e&&U.phone()||"tablet"===e&&U.tablet()||"function"==typeof e&&!0===e()};return{init:function(e){return ae=I(ae,e),oe=ne(),ae.disableMutationObserver||_.isSupported()||(console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '),ae.disableMutationObserver=!0),ae.disableMutationObserver||_.ready("[data-aos]",se),de(ae.disable)||re()?ue():(document.querySelector("body").setAttribute("data-aos-easing",ae.easing),document.querySelector("body").setAttribute("data-aos-duration",ae.duration),document.querySelector("body").setAttribute("data-aos-delay",ae.delay),-1===["DOMContentLoaded","load"].indexOf(ae.startEvent)?document.addEventListener(ae.startEvent,function(){ce(!0)}):window.addEventListener("load",function(){ce(!0)}),"DOMContentLoaded"===ae.startEvent&&["complete","interactive"].indexOf(document.readyState)>-1&&ce(!0),window.addEventListener("resize",$(ce,ae.debounceDelay,!0)),window.addEventListener("orientationchange",$(ce,ae.debounceDelay,!0)),oe)},refresh:ce,refreshHard:se}});
2 |
--------------------------------------------------------------------------------
/dist/aos-init.js:
--------------------------------------------------------------------------------
1 | AOS.init( {
2 | once: true, // whether animation should happen only once - while scrolling down
3 | } );
4 |
--------------------------------------------------------------------------------
/dist/blocks.build.js:
--------------------------------------------------------------------------------
1 | !function(e){function a(l){if(t[l])return t[l].exports;var n=t[l]={i:l,l:!1,exports:{}};return e[l].call(n.exports,n,n.exports,a),n.l=!0,n.exports}var t={};a.m=e,a.c=t,a.d=function(e,t,l){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:l})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=0)}([function(e,a,t){"use strict";Object.defineProperty(a,"__esModule",{value:!0});t(1)},function(e,a,t){"use strict";var l=t(2),n=t(3),o=t(4),i=Object.assign||function(e){for(var a=1;a0?n.a[0].value:"fade",offset:120,delay:0,duration:400,easing:o.a&&o.a.length>0?o.a[0].value:"ease",once:!0,mirror:!1,anchorPlacement:l.a&&l.a.length>0?l.a[0].value:"top-bottom"};y=g("animateBlocks.defaultOptions",y),r("animate-blocks/animate",{title:s("Animate Block","animate-blocks"),icon:"controls-forward",category:"layout",description:s("Animate blocks inside this container.","animate-blocks"),attributes:{animation:{type:"string",default:y.animation},offset:{type:"number",default:y.offset},delay:{type:"number",default:y.delay},duration:{type:"number",default:y.duration},easing:{type:"string",default:y.easing},once:{type:"boolean",default:y.once},mirror:{type:"boolean",default:y.mirror},anchorPlacement:{type:"string",default:y.anchorPlacement}},edit:function(e){var a=e.attributes,t=e.setAttributes,i=e.className,r=a.animation,c=void 0===r?"":r,p=a.offset,g=a.delay,w=a.duration,y=a.easing,E=a.once,C=a.mirror,F=a.anchorPlacement;return wp.element.createElement(u,null,wp.element.createElement(b,null,wp.element.createElement(d,{title:s("Animation options","animate-blocks"),initialOpen:!0},wp.element.createElement(k,{label:s("Animation","animate-blocks"),value:c,options:n.a,onChange:function(e){return t({animation:e})}}),wp.element.createElement(h,{label:s("Delay (ms)"),value:g,onChange:function(e){return t({delay:e})},min:0,max:3e3,step:50}),wp.element.createElement(h,{label:s("Duration (ms)"),value:w,onChange:function(e){return t({duration:e})},min:0,max:3e3,step:50}),wp.element.createElement(f,{label:s("Offset (px)","animate-blocks"),help:s("offset (in px) from the original trigger point","animate-blocks"),type:"number",value:p,onChange:function(e){return t({offset:e})}}),wp.element.createElement(k,{label:s("Easing","animate-blocks"),help:s("easing function for animations","animate-blocks"),value:y,options:o.a,onChange:function(e){return t({easing:e})}}),wp.element.createElement(v,{label:s("Once","animate-blocks"),help:"whether animation should happen only once - while scrolling down",checked:E,onChange:function(e){return t({once:e})}}),wp.element.createElement(v,{label:s("Mirror","animate-blocks"),help:"whether elements should animate out while scrolling past them",checked:C,onChange:function(e){return t({mirror:e})}}),wp.element.createElement(k,{label:s("Anchor placement","animate-blocks"),help:s("defines which position of the element regarding to window should trigger the animation","animate-blocks"),value:F,options:l.a,onChange:function(e){return t({anchorPlacement:e})}}))),wp.element.createElement("div",{className:i},wp.element.createElement(m,null)))},save:function(e){var a=e.attributes,t=e.className,l=a.animation,n=void 0===l?"":l,o=a.offset,s=a.delay,r=a.duration,u=a.easing,c=a.once,b=a.mirror,p=a.anchorPlacement;return wp.element.createElement("div",i({className:t,"data-aos":n},s!==w.delay&&{"data-aos-delay":s},r!==w.duration&&{"data-aos-duration":r},o!==w.offset&&{"data-aos-offset":o},u!==w.easing&&{"data-aos-easing":u},c!==w.once&&{"data-aos-once":c},b!==w.mirror&&{"data-aos-mirror":b},p!==w.anchorPlacement&&{"data-aos-anchor-placement":p}),wp.element.createElement(m.Content,null))}})},function(e,a,t){"use strict";var l=wp.hooks.applyFilters,n=wp.i18n.__,o=[{label:n("Top Bottom","animate-blocks"),value:"top-bottom"},{label:n("Top Center","animate-blocks"),value:"top-center"},{label:n("Top Top","animate-blocks"),value:"top-top"},{label:n("Center Bottom","animate-blocks"),value:"center-bottom"},{label:n("Center Center","animate-blocks"),value:"center-center"},{label:n("Center Top","animate-blocks"),value:"center-top"},{label:n("Bottom Bottom","animate-blocks"),value:"bottom-bottom"},{label:n("Bottom Center","animate-blocks"),value:"bottom-center"},{label:n("Bottom Top","animate-blocks"),value:"bottom-top"}];o=l("animateBlocks.anchorPlacementOptions",o),a.a=o},function(e,a,t){"use strict";var l=wp.hooks.applyFilters,n=wp.i18n.__,o=[{label:n("Fade","animate-blocks"),value:"fade"},{label:n("Fade up","animate-blocks"),value:"fade-up"},{label:n("Fade down","animate-blocks"),value:"fade-down"},{label:n("Fade left","animate-blocks"),value:"fade-left"},{label:n("Fade right","animate-blocks"),value:"fade-right"},{label:n("Fade up right","animate-blocks"),value:"fade-up-right"},{label:n("Fade up left","animate-blocks"),value:"fade-up-left"},{label:n("Fade down right","animate-blocks"),value:"fade-down-right"},{label:n("Fade down left","animate-blocks"),value:"fade-down-left"},{label:n("Flip up","animate-blocks"),value:"flip-up"},{label:n("Flip down","animate-blocks"),value:"flip-down"},{label:n("Flip left","animate-blocks"),value:"flip-left"},{label:n("Flip right","animate-blocks"),value:"flip-right"},{label:n("Slide up","animate-blocks"),value:"slide-up"},{label:n("Slide down","animate-blocks"),value:"slide-down"},{label:n("Slide left","animate-blocks"),value:"slide-left"},{label:n("Slide right","animate-blocks"),value:"slide-right"},{label:n("Zoom in","animate-blocks"),value:"zoom-in"},{label:n("Zoom in up","animate-blocks"),value:"zoom-in-up"},{label:n("Zoom in down","animate-blocks"),value:"zoom-in-down"},{label:n("Zoom in left","animate-blocks"),value:"zoom-in-left"},{label:n("Zoom in right","animate-blocks"),value:"zoom-in-right"},{label:n("Zoom out","animate-blocks"),value:"zoom-out"},{label:n("Zoom out up","animate-blocks"),value:"zoom-out-up"},{label:n("Zoom out down","animate-blocks"),value:"zoom-out-down"},{label:n("Zoom out left","animate-blocks"),value:"zoom-out-left"},{label:n("Zoom out right","animate-blocks"),value:"zoom-out-right"}],i={label:n("No Animation","animate-blocks"),value:""};o=l("animateBlocks.animationOptions",o),o=[i].concat(function(e){if(Array.isArray(e)){for(var a=0,t=Array(e.length);a\n"
8 | "Language-Team: LANGUAGE \n"
9 | "MIME-Version: 1.0\n"
10 | "Content-Type: text/plain; charset=UTF-8\n"
11 | "Content-Transfer-Encoding: 8bit\n"
12 | "POT-Creation-Date: 2019-03-29T19:47:48+00:00\n"
13 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14 | "X-Generator: WP-CLI 2.1.0\n"
15 | "X-Domain: animate-blocks\n"
16 |
17 | #. Plugin Name of the plugin
18 | msgid "Animate Blocks"
19 | msgstr ""
20 |
21 | #. Plugin URI of the plugin
22 | msgid "https://github.com/liip/animate-blocks-wordpress-plugin"
23 | msgstr ""
24 |
25 | #. Description of the plugin
26 | msgid "Animate your Gutenberg blocks."
27 | msgstr ""
28 |
29 | #. Author of the plugin
30 | msgid "Liip AG"
31 | msgstr ""
32 |
33 | #. Author URI of the plugin
34 | msgid "https://liip.ch"
35 | msgstr ""
36 |
37 | #: src/class-animate-blocks.php:170
38 | #: src/class-animate-blocks.php:177
39 | msgid "Cheatin’ huh?"
40 | msgstr ""
41 |
42 | #: src/animate/easing-options.js:6
43 | msgid "Ease"
44 | msgstr ""
45 |
46 | #: src/animate/easing-options.js:10
47 | msgid "Ease in"
48 | msgstr ""
49 |
50 | #: src/animate/easing-options.js:14
51 | msgid "Ease out"
52 | msgstr ""
53 |
54 | #: src/animate/easing-options.js:18
55 | msgid "Ease in out"
56 | msgstr ""
57 |
58 | #: src/animate/easing-options.js:22
59 | msgid "Ease in back"
60 | msgstr ""
61 |
62 | #: src/animate/easing-options.js:26
63 | msgid "Ease out back"
64 | msgstr ""
65 |
66 | #: src/animate/easing-options.js:30
67 | msgid "Ease in out back"
68 | msgstr ""
69 |
70 | #: src/animate/easing-options.js:34
71 | msgid "Ease in sine"
72 | msgstr ""
73 |
74 | #: src/animate/easing-options.js:38
75 | msgid "Ease out sine"
76 | msgstr ""
77 |
78 | #: src/animate/easing-options.js:42
79 | msgid "Ease in out sine"
80 | msgstr ""
81 |
82 | #: src/animate/easing-options.js:46
83 | msgid "Ease in quad"
84 | msgstr ""
85 |
86 | #: src/animate/easing-options.js:50
87 | msgid "Ease out quad"
88 | msgstr ""
89 |
90 | #: src/animate/easing-options.js:54
91 | msgid "Ease in out quad"
92 | msgstr ""
93 |
94 | #: src/animate/easing-options.js:58
95 | msgid "Ease in cubic"
96 | msgstr ""
97 |
98 | #: src/animate/easing-options.js:62
99 | msgid "Ease out cubic"
100 | msgstr ""
101 |
102 | #: src/animate/easing-options.js:66
103 | msgid "Ease in out cubic"
104 | msgstr ""
105 |
106 | #: src/animate/easing-options.js:70
107 | msgid "Ease in quart"
108 | msgstr ""
109 |
110 | #: src/animate/easing-options.js:74
111 | msgid "Ease out quart"
112 | msgstr ""
113 |
114 | #: src/animate/easing-options.js:78
115 | msgid "Ease in out quart"
116 | msgstr ""
117 |
118 | #: src/animate/easing-options.js:82
119 | msgid "Linear"
120 | msgstr ""
121 |
122 | #: src/animate/anchor-placement-options.js:6
123 | msgid "Top Bottom"
124 | msgstr ""
125 |
126 | #: src/animate/anchor-placement-options.js:10
127 | msgid "Top Center"
128 | msgstr ""
129 |
130 | #: src/animate/anchor-placement-options.js:14
131 | msgid "Top Top"
132 | msgstr ""
133 |
134 | #: src/animate/anchor-placement-options.js:18
135 | msgid "Center Bottom"
136 | msgstr ""
137 |
138 | #: src/animate/anchor-placement-options.js:22
139 | msgid "Center Center"
140 | msgstr ""
141 |
142 | #: src/animate/anchor-placement-options.js:26
143 | msgid "Center Top"
144 | msgstr ""
145 |
146 | #: src/animate/anchor-placement-options.js:30
147 | msgid "Bottom Bottom"
148 | msgstr ""
149 |
150 | #: src/animate/anchor-placement-options.js:34
151 | msgid "Bottom Center"
152 | msgstr ""
153 |
154 | #: src/animate/anchor-placement-options.js:38
155 | msgid "Bottom Top"
156 | msgstr ""
157 |
158 | #: src/animate/animation-options.js:6
159 | msgid "Fade"
160 | msgstr ""
161 |
162 | #: src/animate/animation-options.js:10
163 | msgid "Fade up"
164 | msgstr ""
165 |
166 | #: src/animate/animation-options.js:14
167 | msgid "Fade down"
168 | msgstr ""
169 |
170 | #: src/animate/animation-options.js:18
171 | msgid "Fade left"
172 | msgstr ""
173 |
174 | #: src/animate/animation-options.js:22
175 | msgid "Fade right"
176 | msgstr ""
177 |
178 | #: src/animate/animation-options.js:26
179 | msgid "Fade up right"
180 | msgstr ""
181 |
182 | #: src/animate/animation-options.js:30
183 | msgid "Fade up left"
184 | msgstr ""
185 |
186 | #: src/animate/animation-options.js:34
187 | msgid "Fade down right"
188 | msgstr ""
189 |
190 | #: src/animate/animation-options.js:38
191 | msgid "Fade down left"
192 | msgstr ""
193 |
194 | #: src/animate/animation-options.js:42
195 | msgid "Flip up"
196 | msgstr ""
197 |
198 | #: src/animate/animation-options.js:46
199 | msgid "Flip down"
200 | msgstr ""
201 |
202 | #: src/animate/animation-options.js:50
203 | msgid "Flip left"
204 | msgstr ""
205 |
206 | #: src/animate/animation-options.js:54
207 | msgid "Flip right"
208 | msgstr ""
209 |
210 | #: src/animate/animation-options.js:58
211 | msgid "Slide up"
212 | msgstr ""
213 |
214 | #: src/animate/animation-options.js:62
215 | msgid "Slide down"
216 | msgstr ""
217 |
218 | #: src/animate/animation-options.js:66
219 | msgid "Slide left"
220 | msgstr ""
221 |
222 | #: src/animate/animation-options.js:70
223 | msgid "Slide right"
224 | msgstr ""
225 |
226 | #: src/animate/animation-options.js:74
227 | msgid "Zoom in"
228 | msgstr ""
229 |
230 | #: src/animate/animation-options.js:78
231 | msgid "Zoom in up"
232 | msgstr ""
233 |
234 | #: src/animate/animation-options.js:82
235 | msgid "Zoom in down"
236 | msgstr ""
237 |
238 | #: src/animate/animation-options.js:86
239 | msgid "Zoom in left"
240 | msgstr ""
241 |
242 | #: src/animate/animation-options.js:90
243 | msgid "Zoom in right"
244 | msgstr ""
245 |
246 | #: src/animate/animation-options.js:94
247 | msgid "Zoom out"
248 | msgstr ""
249 |
250 | #: src/animate/animation-options.js:98
251 | msgid "Zoom out up"
252 | msgstr ""
253 |
254 | #: src/animate/animation-options.js:102
255 | msgid "Zoom out down"
256 | msgstr ""
257 |
258 | #: src/animate/animation-options.js:106
259 | msgid "Zoom out left"
260 | msgstr ""
261 |
262 | #: src/animate/animation-options.js:110
263 | msgid "Zoom out right"
264 | msgstr ""
265 |
266 | #: src/animate/animation-options.js:115
267 | msgid "No Animation"
268 | msgstr ""
269 |
270 | #: src/animate/block.js:50
271 | msgid "Animate Block"
272 | msgstr ""
273 |
274 | #: src/animate/block.js:53
275 | msgid "Animate blocks inside this container."
276 | msgstr ""
277 |
278 | #: src/animate/block.js:106
279 | msgid "Animation options"
280 | msgstr ""
281 |
282 | #: src/animate/block.js:110
283 | msgid "Animation"
284 | msgstr ""
285 |
286 | #: src/animate/block.js:132
287 | msgid "Offset (px)"
288 | msgstr ""
289 |
290 | #: src/animate/block.js:133
291 | msgid "offset (in px) from the original trigger point"
292 | msgstr ""
293 |
294 | #: src/animate/block.js:139
295 | msgid "Easing"
296 | msgstr ""
297 |
298 | #: src/animate/block.js:140
299 | msgid "easing function for animations"
300 | msgstr ""
301 |
302 | #: src/animate/block.js:146
303 | msgid "Once"
304 | msgstr ""
305 |
306 | #: src/animate/block.js:152
307 | msgid "Mirror"
308 | msgstr ""
309 |
310 | #: src/animate/block.js:158
311 | msgid "Anchor placement"
312 | msgstr ""
313 |
314 | #: src/animate/block.js:159
315 | msgid "defines which position of the element regarding to window should trigger the animation"
316 | msgstr ""
317 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "animate-blocks",
3 | "version": "1.0.1",
4 | "private": true,
5 | "scripts": {
6 | "start": "cgb-scripts start",
7 | "build": "cgb-scripts build",
8 | "eject": "cgb-scripts eject",
9 | "lint": "eslint src/"
10 | },
11 | "dependencies": {
12 | "aos": "^3.0.0-beta.6",
13 | "cgb-scripts": "1.15.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/phpcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Coding standards for animate-blocks
4 |
5 | */vendor/*
6 | */node_modules/*
7 | assets/*
8 | dist/*
9 | tests/*
10 | src/*\.(inc|css|js)$
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/readme.txt:
--------------------------------------------------------------------------------
1 | === Animate Blocks ===
2 | Contributors: liip, tschortsch
3 | Donate link: https://liip.ch/
4 | Tags: gutenberg, blocks, animations
5 | Requires at least: 5.0
6 | Tested up to: 5.1.1
7 | Requires PHP: 5.6
8 | Stable tag: 1.0.1
9 | License: GPLv2
10 | License URI: https://www.gnu.org/licenses/gpl-2.0.html
11 |
12 | Animate Gutenberg blocks plugin for WordPress.
13 |
14 | == Description ==
15 | Animate Gutenberg blocks when they scroll into view.
16 |
17 | * Works with all existing Gutenberg blocks
18 | * Choose from 27 different animations
19 | * Configure animation with custom delays, offsets and durations
20 | * Based on [AOS Animate On Scroll Library](http://michalsnik.github.io/aos/)
21 |
22 | = Requirements =
23 | * WordPress >= 5.0
24 | * PHP >= 5.6
25 |
26 | = Further Information =
27 |
28 | * Documentation: [https://github.com/liip/animate-blocks-wordpress-plugin/blob/master/README.md](https://github.com/liip/animate-blocks-wordpress-plugin/blob/master/README.md)
29 | * WordPress Plugin: [https://wordpress.org/plugins/animate-blocks/](https://wordpress.org/plugins/animate-blocks/)
30 | * GitHub Repository: [https://github.com/liip/animate-blocks-wordpress-plugin](https://github.com/liip/animate-blocks-wordpress-plugin)
31 | * Changelog: [https://github.com/liip/animate-blocks-wordpress-plugin/releases](https://github.com/liip/animate-blocks-wordpress-plugin/releases)
32 | * Issue tracker: [https://github.com/liip/animate-blocks-wordpress-plugin/issues](https://github.com/liip/animate-blocks-wordpress-plugin/issues)
33 |
34 | == Installation ==
35 |
36 | 1. Upload the `animate-blocks` directory into the `/wp-content/plugins/` directory
37 | 1. Activate the plugin through the `Plugins` menu in WordPress
38 | 1. Add `Animate Blocks` block around other block in Gutenberg editor
39 |
40 | == Frequently Asked Questions ==
41 |
42 | = How does it work? =
43 |
44 | Animate blocks is based on the `InnerBlocks` feature of Gutenberg. It wraps the blocks which should be animated. You can add as many blocks inside this wrapper block as you want.
45 |
46 | = Have you found a bug or do you have a feature request? =
47 |
48 | Please create a new GitHub issue and let us know: [https://github.com/liip/animate-blocks-wordpress-plugin/issues](https://github.com/liip/animate-blocks-wordpress-plugin/issues)
49 |
50 | == Screenshots ==
51 |
52 | 1. Animate Blocks in Gutenberg editor
53 |
54 | == Changelog ==
55 |
56 | = 1.0.1 =
57 |
58 | * [BUGFIX] Fix rendering of data-attributes when default options are changed.
59 |
60 | = 1.0.0 =
61 |
62 | * Initial release of this plugin
63 |
--------------------------------------------------------------------------------
/screenshot-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liip/animate-blocks-wordpress-plugin/5a839664a84c56d28ff21badfe5c4451844abe76/screenshot-1.png
--------------------------------------------------------------------------------
/scripts/deploy-wp-plugin.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 | # Author: Juerg Hunziker
3 | #
4 | # This script has been created based on the wordpress-plugin-git-flow-svn-deploy script from Gary Jones (Thx!).
5 | # See https://github.com/GaryJones/wordpress-plugin-git-flow-svn-deploy for instructions and credits.
6 |
7 | echo
8 | echo "WordPress Plugin Git to SVN release script - v1.0.0"
9 | echo
10 |
11 | HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
12 |
13 | # All paths have to be absolute!
14 | # Set SVNPASSWORD environment variable to not promt password during deployment
15 | PLUGINSLUG="animate-blocks"
16 | SVNURL="https://plugins.svn.wordpress.org/$PLUGINSLUG"
17 | SVNUSER=liip
18 | SOURCEPATH="$HERE/.." # this file should be in the base of your git repository
19 | BUILDPATH="$SOURCEPATH/build"
20 | MAINFILE="$PLUGINSLUG.php"
21 |
22 | echo "Deploy with following configuration"
23 | echo
24 | echo "Slug: $PLUGINSLUG"
25 | echo "Build path: $BUILDPATH"
26 | echo "Remote SVN repo: $SVNURL"
27 | echo "SVN username: $SVNUSER"
28 | echo "Source path: $SOURCEPATH"
29 | echo "Main file: $MAINFILE"
30 | echo
31 |
32 | # Let's begin...
33 | echo ".........................................."
34 | echo
35 | echo "Preparing to deploy WordPress plugin"
36 | echo
37 | echo ".........................................."
38 | echo
39 |
40 | # Check version in readme.txt is the same as plugin file after translating both to unix line breaks to work around grep's failure to identify mac line breaks
41 | PLUGINVERSION=`grep "Version:" $SOURCEPATH/$MAINFILE | awk -F' ' '{print $NF}' | tr -d '\r'`
42 | echo "$MAINFILE version: $PLUGINVERSION"
43 | READMEVERSION=`grep "^Stable tag:" $SOURCEPATH/readme.txt | awk -F' ' '{print $NF}' | tr -d '\r'`
44 | echo "readme.txt version: $READMEVERSION"
45 |
46 | if [ "$READMEVERSION" = "trunk" ]; then
47 | echo "Version in readme.txt & $MAINFILE don't match, but Stable tag is trunk. Let's proceed..."
48 | elif [ "$PLUGINVERSION" != "$READMEVERSION" ]; then
49 | echo "Version in readme.txt & $MAINFILE don't match. Exiting...."
50 | exit 1;
51 | elif [ "$PLUGINVERSION" = "$READMEVERSION" ]; then
52 | echo "Versions match in readme.txt and $MAINFILE. Let's proceed..."
53 | fi
54 |
55 | echo
56 | echo "Creating local copy of SVN repo trunk ..."
57 | svn checkout $SVNURL $BUILDPATH --depth immediates
58 | svn update --quiet $BUILDPATH/trunk --set-depth infinity
59 | echo "Clearing SVN repo trunk so we can overwrite it"
60 | rm -rf $BUILDPATH/trunk/*
61 |
62 | echo "Ignoring os specific files"
63 | svn propset svn:ignore ".DS_Store
64 | Thumbs.db" "$BUILDPATH/trunk/"
65 |
66 | echo "Copying required plugin files to SVN trunk"
67 | cp $SOURCEPATH/readme.txt $BUILDPATH/trunk/
68 | cp $SOURCEPATH/animate-blocks.php $BUILDPATH/trunk/
69 | cp $SOURCEPATH/screenshot* $BUILDPATH/trunk/
70 | cp -R $SOURCEPATH/dist $BUILDPATH/trunk/
71 | cp -R $SOURCEPATH/languages $BUILDPATH/trunk/
72 | cp -R $SOURCEPATH/src $BUILDPATH/trunk/
73 |
74 | echo "Changing directory to SVN and committing to trunk"
75 | cd $BUILDPATH/trunk/
76 |
77 | # Delete all files that should not now be added.
78 | svn status | grep -v "^.[ \t]*\..*" | grep "^\!" | awk '{print $2"@"}' | xargs svn del
79 | # Add all new files that are not set to be ignored
80 | svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2"@"}' | xargs svn add
81 | # Fix image mime-types (see: https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/)
82 | svn propset svn:mime-type image/png *.png
83 |
84 | # Commit all changes
85 | # If password is set as environment variable ($SVNPASSWORD) use it otherwise promt password
86 | if [ ! -z "$SVNPASSWORD" ]; then
87 | svn commit --username=$SVNUSER --password=$SVNPASSWORD -m "Preparing for $PLUGINVERSION release" --no-auth-cache
88 | else
89 | svn commit --username=$SVNUSER -m "Preparing for $PLUGINVERSION release" --no-auth-cache
90 | fi
91 |
92 | # Update WordPress plugin assets
93 | # Make the directory if it doesn't already exist
94 | mkdir -p $BUILDPATH/assets/
95 | svn update --quiet $BUILDPATH/assets --set-depth infinity
96 | echo "Clearing SVN repo assets so we can overwrite it"
97 | rm -rf $BUILDPATH/assets/*
98 | echo "Copying assets fiels to SVN assets"
99 | cp -R $SOURCEPATH/.wordpress/* $BUILDPATH/assets/
100 |
101 | echo "Updating WordPress plugin assets and committing"
102 | cd $BUILDPATH/assets/
103 | # Delete all new files that are not set to be ignored
104 | svn status | grep -v "^.[ \t]*\..*" | grep "^\!" | awk '{print $2"@"}' | xargs svn del
105 | # Add all new files that are not set to be ignored
106 | svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2"@"}' | xargs svn add
107 | #svn update --accept mine-full $BUILDPATH/assets/*
108 | # Fix image mime-types (see: https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/)
109 | svn propset svn:mime-type image/png *.png
110 |
111 | # Commit all changes
112 | # If password is set as environment variable ($SVNPASSWORD) use it otherwise promt password
113 | if [ ! -z "$SVNPASSWORD" ]; then
114 | svn commit --username=$SVNUSER --password=$SVNPASSWORD -m "Updating assets" --no-auth-cache
115 | else
116 | svn commit --username=$SVNUSER -m "Updating assets" --no-auth-cache
117 | fi
118 |
119 | echo "Creating new SVN tag and committing it"
120 | cd $BUILDPATH
121 | svn update --quiet $BUILDPATH/tags/$PLUGINVERSION
122 |
123 | # if tag already exists update sources otherwise create new
124 | if [ -d "$BUILDPATH/tags/$PLUGINVERSION/" ]; then
125 | cd $BUILDPATH/tags/$PLUGINVERSION
126 | cp -R $BUILDPATH/trunk/* $BUILDPATH/tags/$PLUGINVERSION/
127 | # Delete all files that should not now be added.
128 | svn status | grep -v "^.[ \t]*\..*" | grep "^\!" | awk '{print $2"@"}' | xargs svn del
129 | # Add all new files that are not set to be ignored
130 | svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2"@"}' | xargs svn add
131 | # Fix image mime-types (see: https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/)
132 | svn propset svn:mime-type image/png *.png
133 | else
134 | svn copy --quiet $BUILDPATH/trunk/ $BUILDPATH/tags/$PLUGINVERSION/
135 | cd $BUILDPATH/tags/$PLUGINVERSION
136 | fi
137 |
138 | # Commit plugin version
139 | # If password is set as environment variable ($SVNPASSWORD) use it otherwise promt password
140 | if [ ! -z "$SVNPASSWORD" ]; then
141 | svn commit --username=$SVNUSER --password=$SVNPASSWORD -m "Tagging version $PLUGINVERSION" --no-auth-cache
142 | else
143 | svn commit --username=$SVNUSER -m "Tagging version $PLUGINVERSION" --no-auth-cache
144 | fi
145 |
146 | echo "Successfully released v$PLUGINVERSION of the $PLUGINSLUG plugin!"
147 | echo
148 | echo "*** FIN ***"
149 |
--------------------------------------------------------------------------------
/scripts/phpcodesniffer.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | HERE=`dirname $0`
4 | ROOT="$HERE/.."
5 |
6 | files_to_check=$1
7 | if [ -z "$1" ]; then
8 | files_to_check="${ROOT}"
9 | fi
10 |
11 | $ROOT/vendor/bin/phpcs -p --extensions=php --report-width=100 "$files_to_check"
12 | exit $?
13 |
--------------------------------------------------------------------------------
/src/animate/anchor-placement-options.js:
--------------------------------------------------------------------------------
1 | const { applyFilters } = wp.hooks;
2 | const { __ } = wp.i18n;
3 |
4 | let anchorPlacementOptions = [
5 | {
6 | label: __( 'Top Bottom', 'animate-blocks' ),
7 | value: 'top-bottom',
8 | },
9 | {
10 | label: __( 'Top Center', 'animate-blocks' ),
11 | value: 'top-center',
12 | },
13 | {
14 | label: __( 'Top Top', 'animate-blocks' ),
15 | value: 'top-top',
16 | },
17 | {
18 | label: __( 'Center Bottom', 'animate-blocks' ),
19 | value: 'center-bottom',
20 | },
21 | {
22 | label: __( 'Center Center', 'animate-blocks' ),
23 | value: 'center-center',
24 | },
25 | {
26 | label: __( 'Center Top', 'animate-blocks' ),
27 | value: 'center-top',
28 | },
29 | {
30 | label: __( 'Bottom Bottom', 'animate-blocks' ),
31 | value: 'bottom-bottom',
32 | },
33 | {
34 | label: __( 'Bottom Center', 'animate-blocks' ),
35 | value: 'bottom-center',
36 | },
37 | {
38 | label: __( 'Bottom Top', 'animate-blocks' ),
39 | value: 'bottom-top',
40 | },
41 | ];
42 | anchorPlacementOptions = applyFilters( 'animateBlocks.anchorPlacementOptions', anchorPlacementOptions );
43 |
44 | export default anchorPlacementOptions;
45 |
--------------------------------------------------------------------------------
/src/animate/animation-options.js:
--------------------------------------------------------------------------------
1 | const { applyFilters } = wp.hooks;
2 | const { __ } = wp.i18n;
3 |
4 | let animationOptions = [
5 | {
6 | label: __( 'Fade', 'animate-blocks' ),
7 | value: 'fade',
8 | },
9 | {
10 | label: __( 'Fade up', 'animate-blocks' ),
11 | value: 'fade-up',
12 | },
13 | {
14 | label: __( 'Fade down', 'animate-blocks' ),
15 | value: 'fade-down',
16 | },
17 | {
18 | label: __( 'Fade left', 'animate-blocks' ),
19 | value: 'fade-left',
20 | },
21 | {
22 | label: __( 'Fade right', 'animate-blocks' ),
23 | value: 'fade-right',
24 | },
25 | {
26 | label: __( 'Fade up right', 'animate-blocks' ),
27 | value: 'fade-up-right',
28 | },
29 | {
30 | label: __( 'Fade up left', 'animate-blocks' ),
31 | value: 'fade-up-left',
32 | },
33 | {
34 | label: __( 'Fade down right', 'animate-blocks' ),
35 | value: 'fade-down-right',
36 | },
37 | {
38 | label: __( 'Fade down left', 'animate-blocks' ),
39 | value: 'fade-down-left',
40 | },
41 | {
42 | label: __( 'Flip up', 'animate-blocks' ),
43 | value: 'flip-up',
44 | },
45 | {
46 | label: __( 'Flip down', 'animate-blocks' ),
47 | value: 'flip-down',
48 | },
49 | {
50 | label: __( 'Flip left', 'animate-blocks' ),
51 | value: 'flip-left',
52 | },
53 | {
54 | label: __( 'Flip right', 'animate-blocks' ),
55 | value: 'flip-right',
56 | },
57 | {
58 | label: __( 'Slide up', 'animate-blocks' ),
59 | value: 'slide-up',
60 | },
61 | {
62 | label: __( 'Slide down', 'animate-blocks' ),
63 | value: 'slide-down',
64 | },
65 | {
66 | label: __( 'Slide left', 'animate-blocks' ),
67 | value: 'slide-left',
68 | },
69 | {
70 | label: __( 'Slide right', 'animate-blocks' ),
71 | value: 'slide-right',
72 | },
73 | {
74 | label: __( 'Zoom in', 'animate-blocks' ),
75 | value: 'zoom-in',
76 | },
77 | {
78 | label: __( 'Zoom in up', 'animate-blocks' ),
79 | value: 'zoom-in-up',
80 | },
81 | {
82 | label: __( 'Zoom in down', 'animate-blocks' ),
83 | value: 'zoom-in-down',
84 | },
85 | {
86 | label: __( 'Zoom in left', 'animate-blocks' ),
87 | value: 'zoom-in-left',
88 | },
89 | {
90 | label: __( 'Zoom in right', 'animate-blocks' ),
91 | value: 'zoom-in-right',
92 | },
93 | {
94 | label: __( 'Zoom out', 'animate-blocks' ),
95 | value: 'zoom-out',
96 | },
97 | {
98 | label: __( 'Zoom out up', 'animate-blocks' ),
99 | value: 'zoom-out-up',
100 | },
101 | {
102 | label: __( 'Zoom out down', 'animate-blocks' ),
103 | value: 'zoom-out-down',
104 | },
105 | {
106 | label: __( 'Zoom out left', 'animate-blocks' ),
107 | value: 'zoom-out-left',
108 | },
109 | {
110 | label: __( 'Zoom out right', 'animate-blocks' ),
111 | value: 'zoom-out-right',
112 | },
113 | ];
114 | const animationEmptyOption = {
115 | label: __( 'No Animation', 'animate-blocks' ),
116 | value: '',
117 | };
118 |
119 | animationOptions = applyFilters( 'animateBlocks.animationOptions', animationOptions );
120 | animationOptions = [ animationEmptyOption, ...animationOptions ];
121 |
122 | export default animationOptions;
123 |
--------------------------------------------------------------------------------
/src/animate/block.js:
--------------------------------------------------------------------------------
1 | /**
2 | * BLOCK: animate-blocks/animate
3 | */
4 |
5 | // Import block dependencies
6 | import anchorPlacementOptions from './anchor-placement-options';
7 | import animationOptions from './animation-options';
8 | import easingOptions from './easing-options';
9 |
10 | const { __ } = wp.i18n;
11 | const { registerBlockType } = wp.blocks;
12 | const { Fragment } = wp.element;
13 | const {
14 | InnerBlocks,
15 | InspectorControls,
16 | } = wp.editor;
17 | const {
18 | PanelBody,
19 | TextControl,
20 | SelectControl,
21 | ToggleControl,
22 | RangeControl,
23 | } = wp.components;
24 | const { applyFilters } = wp.hooks;
25 |
26 | const aosDefaultOptions = {
27 | animation: 'fade',
28 | offset: 120,
29 | delay: 0,
30 | duration: 400,
31 | easing: 'ease',
32 | once: true,
33 | mirror: false,
34 | anchorPlacement: 'top-bottom',
35 | };
36 |
37 | let defaultOptions = {
38 | animation: animationOptions && animationOptions.length > 0 ? animationOptions[ 0 ].value : 'fade',
39 | offset: 120,
40 | delay: 0,
41 | duration: 400,
42 | easing: easingOptions && easingOptions.length > 0 ? easingOptions[ 0 ].value : 'ease',
43 | once: true,
44 | mirror: false,
45 | anchorPlacement: anchorPlacementOptions && anchorPlacementOptions.length > 0 ? anchorPlacementOptions[ 0 ].value : 'top-bottom',
46 | };
47 | defaultOptions = applyFilters( 'animateBlocks.defaultOptions', defaultOptions );
48 |
49 | registerBlockType( 'animate-blocks/animate', {
50 | title: __( 'Animate Block', 'animate-blocks' ),
51 | icon: 'controls-forward',
52 | category: 'layout',
53 | description: __( 'Animate blocks inside this container.', 'animate-blocks' ),
54 |
55 | attributes: {
56 | animation: {
57 | type: 'string',
58 | default: defaultOptions.animation,
59 | },
60 | offset: {
61 | type: 'number',
62 | default: defaultOptions.offset,
63 | },
64 | delay: {
65 | type: 'number',
66 | default: defaultOptions.delay,
67 | },
68 | duration: {
69 | type: 'number',
70 | default: defaultOptions.duration,
71 | },
72 | easing: {
73 | type: 'string',
74 | default: defaultOptions.easing,
75 | },
76 | once: {
77 | type: 'boolean',
78 | default: defaultOptions.once,
79 | },
80 | mirror: {
81 | type: 'boolean',
82 | default: defaultOptions.mirror,
83 | },
84 | anchorPlacement: {
85 | type: 'string',
86 | default: defaultOptions.anchorPlacement,
87 | },
88 | },
89 |
90 | edit( { attributes, setAttributes, className } ) {
91 | const {
92 | animation = '',
93 | offset,
94 | delay,
95 | duration,
96 | easing,
97 | once,
98 | mirror,
99 | anchorPlacement,
100 | } = attributes;
101 |
102 | return (
103 |
104 |
105 |
109 | setAttributes( { animation: selectedOption } ) }
114 | />
115 | setAttributes( { delay: value } ) }
119 | min={ 0 }
120 | max={ 3000 }
121 | step={ 50 }
122 | />
123 | setAttributes( { duration: value } ) }
127 | min={ 0 }
128 | max={ 3000 }
129 | step={ 50 }
130 | />
131 | setAttributes( { offset: value } ) }
137 | />
138 | setAttributes( { easing: selectedOption } ) }
144 | />
145 | setAttributes( { once: checked } ) }
150 | />
151 | setAttributes( { mirror: checked } ) }
156 | />
157 | setAttributes( { anchorPlacement: selectedOption } ) }
163 | />
164 |
165 |
166 |
167 |
168 |
169 |
170 | );
171 | },
172 |
173 | save( { attributes, className } ) {
174 | const {
175 | animation = '',
176 | offset,
177 | delay,
178 | duration,
179 | easing,
180 | once,
181 | mirror,
182 | anchorPlacement,
183 | } = attributes;
184 |
185 | return (
186 |
197 |
198 |
199 | );
200 | },
201 | } );
202 |
--------------------------------------------------------------------------------
/src/animate/easing-options.js:
--------------------------------------------------------------------------------
1 | const { applyFilters } = wp.hooks;
2 | const { __ } = wp.i18n;
3 |
4 | let easingOptions = [
5 | {
6 | label: __( 'Ease', 'animate-blocks' ),
7 | value: 'ease',
8 | },
9 | {
10 | label: __( 'Ease in', 'animate-blocks' ),
11 | value: 'ease-in',
12 | },
13 | {
14 | label: __( 'Ease out', 'animate-blocks' ),
15 | value: 'ease-out',
16 | },
17 | {
18 | label: __( 'Ease in out', 'animate-blocks' ),
19 | value: 'ease-in-out',
20 | },
21 | {
22 | label: __( 'Ease in back', 'animate-blocks' ),
23 | value: 'ease-in-back',
24 | },
25 | {
26 | label: __( 'Ease out back', 'animate-blocks' ),
27 | value: 'ease-out-back',
28 | },
29 | {
30 | label: __( 'Ease in out back', 'animate-blocks' ),
31 | value: 'ease-in-out-back',
32 | },
33 | {
34 | label: __( 'Ease in sine', 'animate-blocks' ),
35 | value: 'ease-in-sine',
36 | },
37 | {
38 | label: __( 'Ease out sine', 'animate-blocks' ),
39 | value: 'ease-out-sine',
40 | },
41 | {
42 | label: __( 'Ease in out sine', 'animate-blocks' ),
43 | value: 'ease-in-out-sine',
44 | },
45 | {
46 | label: __( 'Ease in quad', 'animate-blocks' ),
47 | value: 'ease-in-quad',
48 | },
49 | {
50 | label: __( 'Ease out quad', 'animate-blocks' ),
51 | value: 'ease-out-quad',
52 | },
53 | {
54 | label: __( 'Ease in out quad', 'animate-blocks' ),
55 | value: 'ease-in-out-quad',
56 | },
57 | {
58 | label: __( 'Ease in cubic', 'animate-blocks' ),
59 | value: 'ease-in-cubic',
60 | },
61 | {
62 | label: __( 'Ease out cubic', 'animate-blocks' ),
63 | value: 'ease-out-cubic',
64 | },
65 | {
66 | label: __( 'Ease in out cubic', 'animate-blocks' ),
67 | value: 'ease-in-out-cubic',
68 | },
69 | {
70 | label: __( 'Ease in quart', 'animate-blocks' ),
71 | value: 'ease-in-quart',
72 | },
73 | {
74 | label: __( 'Ease out quart', 'animate-blocks' ),
75 | value: 'ease-out-quart',
76 | },
77 | {
78 | label: __( 'Ease in out quart', 'animate-blocks' ),
79 | value: 'ease-in-out-quart',
80 | },
81 | {
82 | label: __( 'Linear', 'animate-blocks' ),
83 | value: 'linear',
84 | },
85 | ];
86 |
87 | easingOptions = applyFilters( 'animateBlocks.easingOptions', easingOptions );
88 |
89 | export default easingOptions;
90 |
--------------------------------------------------------------------------------
/src/blocks.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Gutenberg Blocks
3 | *
4 | * All blocks related JavaScript files should be imported here.
5 | * You can create a new block folder in this dir and include code
6 | * for that block here as well.
7 | *
8 | * All blocks should be included here since this is the file that
9 | * Webpack is compiling as the input file.
10 | */
11 |
12 | import './animate/block.js';
13 |
--------------------------------------------------------------------------------
/src/class-animate-blocks.php:
--------------------------------------------------------------------------------
1 | define_constants();
59 | $this->init_plugin_environment();
60 | $this->init_hooks();
61 | }
62 |
63 | /**
64 | * Define plugin constants.
65 | */
66 | protected function define_constants() {
67 | if ( ! defined( 'ANIMATE_BLOCKS_ABSPATH' ) ) {
68 | define( 'ANIMATE_BLOCKS_ABSPATH', trailingslashit( dirname( ANIMATE_BLOCKS_PLUGIN_FILE ) ) );
69 | }
70 | }
71 |
72 | /**
73 | * Initializes plugin environment variables
74 | */
75 | protected function init_plugin_environment() {
76 | // Load plugin environment variables
77 | $this->assets_dir = ANIMATE_BLOCKS_ABSPATH . 'dist';
78 | $this->assets_url = esc_url( trailingslashit( plugins_url( '/dist/', ANIMATE_BLOCKS_PLUGIN_FILE ) ) );
79 | }
80 |
81 | /**
82 | * Initializes hooks.
83 | */
84 | protected function init_hooks() {
85 | // Editor assets
86 | add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_block_editor_assets' ) );
87 |
88 | // Frontend assets
89 | add_action( 'wp_enqueue_scripts', array( $this, 'wp_enqueue_scripts' ) );
90 |
91 | // Load textdomain
92 | add_action( 'plugins_loaded', array( $this, 'load_plugin_textdomain' ) );
93 |
94 | // check version number on each request
95 | add_action( 'init', array( $this, 'check_version' ) );
96 | }
97 |
98 | /**
99 | * Load editor block assets.
100 | */
101 | public function enqueue_block_editor_assets() {
102 | // Scripts
103 | wp_enqueue_script(
104 | $this->token . '-js', // Handle.
105 | esc_url( $this->assets_url ) . 'blocks.build.js', // block.build.js: We register the block here. Built with Webpack.
106 | array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ), // Dependencies, defined above.
107 | $this->version,
108 | true // Enqueue the script in the footer.
109 | );
110 | }
111 |
112 | /**
113 | * Load frontend assets.
114 | */
115 | public function wp_enqueue_scripts() {
116 | $load_aos = apply_filters( 'animate_blocks_load_aos', true );
117 | if ( $load_aos ) {
118 | // Styles
119 | wp_enqueue_style(
120 | $this->token . '-aos-styles', // Handle.
121 | esc_url( $this->assets_url ) . 'aos-3.0.0-beta.6/aos.css',
122 | array(),
123 | '3.0.0-beta.6'
124 | );
125 |
126 | // Scripts
127 | wp_enqueue_script(
128 | $this->token . '-aos-js', // Handle.
129 | esc_url( $this->assets_url ) . 'aos-3.0.0-beta.6/aos.js',
130 | array(), // Dependencies, defined above.
131 | '3.0.0-beta.6',
132 | true // Enqueue the script in the footer.
133 | );
134 | wp_enqueue_script(
135 | $this->token . '-aos-init-js', // Handle.
136 | esc_url( $this->assets_url ) . 'aos-init.js',
137 | array( $this->token . '-aos-js' ), // Dependencies, defined above.
138 | $this->version,
139 | true // Enqueue the script in the footer.
140 | );
141 | }
142 | }
143 |
144 | /**
145 | * Load plugin textdomain
146 | */
147 | public function load_plugin_textdomain() {
148 | $domain = 'animate-blocks'; // textdomain can't be stored in class variable since it must be a single string literal
149 | load_plugin_textdomain( $domain, false, dirname( plugin_basename( ANIMATE_BLOCKS_PLUGIN_FILE ) ) . '/languages/' );
150 | }
151 |
152 | /**
153 | * Main Animate_Blocks Instance
154 | * Ensures only one instance of Animate_Blocks is loaded or can be loaded.
155 | *
156 | * @return Animate_Blocks Plugin instance
157 | */
158 | public static function instance() {
159 | if ( is_null( self::$instance ) ) {
160 | self::$instance = new self();
161 | }
162 |
163 | return self::$instance;
164 | }
165 |
166 | /**
167 | * Cloning is forbidden.
168 | */
169 | public function __clone() {
170 | _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'animate-blocks' ), esc_attr( $this->version ) );
171 | }
172 |
173 | /**
174 | * Unserializing instances of this class is forbidden.
175 | */
176 | public function __wakeup() {
177 | _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'animate-blocks' ), esc_attr( $this->version ) );
178 | }
179 |
180 | /**
181 | * Checks plugin version.
182 | *
183 | * This check is done on all requests and runs if the versions do not match.
184 | */
185 | public function check_version() {
186 | if ( ! defined( 'IFRAME_REQUEST' ) && get_option( $this->token . '_version' ) !== $this->version ) {
187 | $this->log_version_number();
188 | do_action( $this->token . '_updated' );
189 | }
190 | }
191 |
192 | /**
193 | * Log the plugin version number in database.
194 | */
195 | protected function log_version_number() {
196 | delete_option( $this->token . '_version' );
197 | update_option( $this->token . '_version', $this->version );
198 | }
199 |
200 | }
201 |
--------------------------------------------------------------------------------
/src/common.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Common SCSS
3 | *
4 | * Can include things like variables and mixins
5 | * that are used across the project.
6 | */
7 |
--------------------------------------------------------------------------------