├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md ├── .gitignore ├── CODE_OF_CONDUCT.md ├── ChangeLog.md ├── LICENSE ├── README.md ├── _config.yml ├── composer.json └── src ├── FormWizard.php ├── assetbundles ├── bs3 │ ├── FormWizardAsset.php │ ├── ThemeArrowsAsset.php │ ├── ThemeBase.php │ ├── ThemeCirclesAsset.php │ ├── ThemeDotsAsset.php │ ├── ThemeMaterialAsset.php │ ├── ThemeMaterialVerticleAsset.php │ └── ThemeTagsAsset.php └── bs4 │ ├── FormWizardAsset.php │ ├── ThemeArrowsAsset.php │ ├── ThemeBase.php │ ├── ThemeCirclesAsset.php │ ├── ThemeDotsAsset.php │ ├── ThemeMaterialAsset.php │ ├── ThemeMaterialVerticleAsset.php │ └── ThemeTagsAsset.php ├── assets ├── css │ ├── animate.css │ ├── animate.min.css │ ├── fonts │ │ ├── formwizard.eot │ │ ├── formwizard.svg │ │ ├── formwizard.ttf │ │ └── formwizard.woff │ ├── icons-theme.css │ ├── icons-theme.min.css │ ├── ie7 │ │ ├── ie7.css │ │ └── ie7.js │ ├── shake.css │ ├── shake.min.css │ ├── smart_wizard.css │ ├── smart_wizard.min.css │ └── theme │ │ ├── smart_wizard_theme_arrows.css │ │ ├── smart_wizard_theme_arrows.min.css │ │ ├── smart_wizard_theme_circles.css │ │ ├── smart_wizard_theme_circles.min.css │ │ ├── smart_wizard_theme_dots.css │ │ ├── smart_wizard_theme_dots.min.css │ │ ├── smart_wizard_theme_material-v.css │ │ ├── smart_wizard_theme_material-v.min.css │ │ ├── smart_wizard_theme_material.css │ │ ├── smart_wizard_theme_material.min.css │ │ ├── smart_wizard_theme_tags.css │ │ ├── smart_wizard_theme_tags.min.css │ │ └── waves.css └── js │ ├── formwizard.js │ ├── formwizard.min.js │ ├── jquery.smartWizard.js │ ├── jquery.smartWizard.min.js │ └── theme │ ├── material.js │ └── waves.js ├── step ├── Generator.php ├── Normal.php ├── Response.php ├── Sorter.php └── Tabular.php └── traits ├── StepTrait.php └── WizardTrait.php /.gitattributes: -------------------------------------------------------------------------------- 1 | src/assets/css/* linguist-vendored 2 | src/assets/js/* linguist-vendored 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | package-lock.json 2 | /node_modules 3 | _config.yml 4 | .vscode 5 | *.sh -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at buttflattery@hotmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /ChangeLog.md: -------------------------------------------------------------------------------- 1 |

Change Log

2 | All notable changes to this project will be documented in this file. 3 | 4 |

1.6.4 - 19-01-2020

5 | 6 |

Added

7 | 8 | - [FEATURE:e50321d](https://github.com/buttflattery/yii2-formwizard/commit/e50321d900e9c03754c1cabfb09e075118be2a36) Added editMode feature. 9 | 10 |

Enhancements/Fixes

11 | - [ENH:096ef77](https://github.com/buttflattery/yii2-formwizard/commit/096ef77ce63b2bc4f40fb274396f0c3dbe2ef690) Added minified script. 12 | - [BUG:306ab54](https://github.com/buttflattery/yii2-formwizard/commit/306ab5480a7848276b0b27fcf2a1332262329215) Fixed class name assets. 13 | - [ENH:aab5a18](https://github.com/buttflattery/yii2-formwizard/commit/aab5a180150b1b298af9b83b515105c76a5aaefb) Minify file js. 14 | - [ENH:1940ec9](https://github.com/buttflattery/yii2-formwizard/commit/1940ec95fd7a2741616f5ae300602c20dc1d2326) Added forceBsVersion to force the bootstrap class to use only the specific version. 15 | 16 |

1.5.0 - 11-01-2020

17 | 18 |

Added

19 | 20 | - [FEATURE:4fb9198](https://github.com/buttflattery/yii2-formwizard/commit/8985c826ce58e53ab05a0ebd8f018958e3466f9a) Added skippable step feature. 21 | - [ENH:3b85d9b](https://github.com/buttflattery/yii2-formwizard/commit/efcdd423fe4547f36915aed9c58f774cfb4b6116) Updated code comments and optimization, moved code to the relevant areas from the run method. 22 | - [ENH:a3c0509](https://github.com/buttflattery/yii2-formwizard/commit/a3c05091c982daac8542680ea0e74a09367cbee4) added enhancement for the skippable step to detect if any input is filled in the skippable step then it wont skip and ask for validation. 23 | 24 |

Changes/Fixes

25 | 26 | - [HOTFIX:64c6590](https://github.com/buttflattery/yii2-formwizard/commit/64c6590deaa8b813ddc609f5694d5bfcaa464f9d) Added hotfix for the latest Yii 2.0.22 updates to activeform js file. 27 | - [BUG:3e1c668](https://github.com/buttflattery/yii2-formwizard/commit/64c6590deaa8b813ddc609f5694d5bfcaa464f9d) Added fix for multiple instances bug failing to stat the observer on the last. 28 | 29 |

1.4.6 - 17/05/2019

30 | 31 |

Added

32 | 33 | - [ENH:6cbe50a](https://github.com/buttflattery/yii2-formwizard/commit/6cbe50ae60137cb31c4e6d4c541d1b24850a2b5d) Added support for the missing input type number by [@sircovsw](https://github.com/sircovsw). 34 | - [ENH:25dd39b]() Limit rows for tabular form and code enhancement 35 | 36 |

Changed

37 | 38 | - [BUG:84899ca](https://github.com/buttflattery/yii2-formwizard/commit/84899ca84f9efabae9df6482ada79ca0e34f92fb) Fixed the bug in formwizard preview steps while retrieving the text from drop-down by [@sircovsw](https://github.com/sircovsw). 39 | - [HOTFIX:36594062f97fcd31cf142484fc3c86cd511fd0c5](https://github.com/buttflattery/yii2-formwizard/commit/36594062f97fcd31cf142484fc3c86cd511fd0c5) added missing semi-colon. 40 | - [HOTFIX:9f9c8892fc8e155695f15b83662cae610294f438](https://github.com/buttflattery/yii2-formwizard/commit/9f9c8892fc8e155695f15b83662cae610294f438) added check for the options type. 41 | - [BUG:71efb65]() Fixed name for the classListGroup option 42 | 43 |

1.4.0 - 25/04/2019

44 | 45 |

Added

46 | - April 24, 2019 [FEATURE:f387e81](https://github.com/buttflattery/yii2-formwizard/commit/f387e81a9f48241904fed9f1e4b4e17ef213ad9c) added ability to group fields under heading. 47 | - April 21, 2019 [FEATURE:97e5464](https://github.com/buttflattery/yii2-formwizard/commit/97e5464d6c3b84ad5cb4472320cdf56b4fa5bd9d) added new theme tags. 48 | 49 |

Changed

50 | - April 25, 2019[BUG:30936c3](https://github.com/buttflattery/yii2-formwizard/commit/30936c352a93b365e681bbb76cc5b8dfdb74e9aa) added fix for the form-persistence bug when using multiple instances. 51 | 52 | - April 23, 2019 [BUG:22b06d2 ](https://github.com/buttflattery/yii2-formwizard/commit/22b06d2cb6eb0c233ca82f4864f21de0e19d86f7) fix for tabular row width for all themes and zindex for the tags theme tool bar. 53 | 54 | - April 22, 2019 [BUG:3ab6f4f](https://github.com/buttflattery/yii2-formwizard/commit/3ab6f4f7d6ebd721c6834f6d5a26e802fa919e19) fixed toolbar position. 55 | 56 | - April 16,2019 [BUG:e4bcf15](https://github.com/buttflattery/yii2-formwizard/commit/e4bcf154b51c8e3cbac9c8f962b23c767e7f9111) fixed the navigation padding and the background for the toolbar buttons. 57 | 58 | - April 15, 2019 [BUG:30936c3](https://github.com/buttflattery/yii2-formwizard/commit/30936c352a93b365e681bbb76cc5b8dfdb74e9aa) added fix for the form-persistence bug when using multiple instances. 59 | 60 | --- 61 | 62 |

1.3.0 - 22/10/2018

63 | 64 |

Added

65 | 66 | - April 02, 2019 [FEATURE:6fca8ea](https://github.com/buttflattery/yii2-formwizard/commit/6fca8ea9a29de0da9c4c3c14a8e291a47566615b) Added new feaature to save/restore un-saved form fields by enabling `enablePersistence` option. 67 | 68 | - March 27, 2019 [FEATURE:1beb505](https://github.com/buttflattery/yii2-formwizard/commit/1beb5050f8fbaa8d8b8cb6af89cc8cb8de20fe7d) (feature/final-preview) Added new feature Preview Step. 69 | - March 18, 2019 [FEATURE:5769d27](https://github.com/buttflattery/yii2-formwizard/commit/5769d27fc9059cf4d7d5f7348d0a67213678c8c9) Added new feature for the Tabular step 70 | 71 |

Removed

72 | 73 | - March 25, 2019 [2d7d08f](https://github.com/buttflattery/yii2-formwizard/commit/2d7d08f5aa6a6489a57e30a87baaa67e3225b29f) removed the `form-inline` class for the tabular form. 74 | 75 | --- 76 | 77 |

1.0.0 - 22/10/2018

78 | 79 |

Added

80 | 81 | - March 13, 2019 [ENH:4e52390](https://github.com/buttflattery/yii2-formwizard/commit/4e523900e3f5312a1bc72e7561b5b43a731f1fb3) Added hint option for the inputs to provide customized text. 82 | 83 | - Nov 26, 2018 [ENH:bdcd340](https://github.com/buttflattery/yii2-formwizard/commit/bdcd34097f19ce9b37dfa63c065366c5ae3b3a52) added bootstrap4 support and updated all the css and assets files. 84 | 85 | - Nov 25, 2018 [ENH:f27ec80](https://github.com/buttflattery/yii2-formwizard/commit/f27ec80b8f2f2b40200a9eb1b0ecda8e9e20b884) updates for the bootstrap-4-compatibility. 86 | 87 | - Nov 24, 2018 [ENH:6111316](https://github.com/buttflattery/yii2-formwizard/commit/61113161729a4ed1aa0aebd75dd1a8359ccfc789) added support for field order using `fieldOrder` under the `steps` options and a new option to specify `inputOptions` for the ActiveField under the `fieldConfig`, and updated the docs. 88 | 89 | - Nov 21, 2018 [ENH:5c74aa0](https://github.com/buttflattery/yii2-formwizard/commit/5c74aa069eb37947777e4fa3f43e359173e1b652) added support for the `password` and `hidden` active field. 90 | 91 | - Nov 7, 2018 [ENH:678be15](https://github.com/buttflattery/yii2-formwizard/commit/678be15d4a8be813653cf8a29dc8a05715e11ede) added support for array based field names by adding `multifield` option for the active fields. 92 | 93 | - Nov 6, 2018 [ENH:223dd53](https://github.com/buttflattery/yii2-formwizard/commit/223dd5379b1c34aeed41e0facd9b4259e5bd0c18) added support for multiple models in single step. 94 | 95 | - Oct 7, 2018 [ENH:d8b14a6](https://github.com/buttflattery/yii2-formwizard/commit/d8b14a6de252bb0ff6e48963e2ecebdfbbeb9adf) updated the sections to customize all fields with `textarea`, `radio`, `checkbox`. 96 | 97 |

Changed

98 | - March 30,2019 [BUG:52d9582](https://github.com/buttflattery/yii2-formwizard/commit/52d9582014c5b8e3b80633b8fbaa161f60800cc5) fixed unsynced preview containers for theme arrows. 99 | 100 | - March 25, 2019 [BUG:9e44bf7](https://github.com/buttflattery/yii2-formwizard/commit/9e44bf7805f7c78f7a33d746a1d42bf736bfbdd6) Fixed the bug with the add row when using widgets, closes #14. 101 | 102 | - Dec 6, 2018 [BUG:19c9619](https://github.com/buttflattery/yii2-formwizard/commit/19c96197bceb3767d4e9623897bd1f20ee3de02b) Added fix for kartik/depdrop widget Fixes #8 103 | 104 | - Nov 28, 2018 [BUG:142f4de](https://github.com/buttflattery/yii2-formwizard/commit/142f4de15aa8cfcdd55997dca3cfead295bcbd0a) Disabled form navigation on keyboard LEFT & RIGHT buttons as it skips the validation for the form and navigates to the next step change the default to `keyNavigation:false`. 105 | 106 | - Oct 20, 2018 [ENH:7d09163](https://github.com/buttflattery/yii2-formwizard/commit/7d091630424e171d7f2ce61d8fc0a4e81adf085a) changed form info from `h3` to info `alert` bootstrap. 107 | 108 | - Oct 20, 2018 [ENH:2d3e476](https://github.com/buttflattery/yii2-formwizard/commit/2d3e4767b50422a0c80978ad8d996e7ef7d0ae9e) fixes for the css and renamed `disabled` option to `except`. 109 | 110 | - Oct 19, 2018 [ENH:343f942](https://github.com/buttflattery/yii2-formwizard/commit/343f942728cdbebb1ee93e915cb6f8c1325bd710) fixes for bootstrap themes. 111 | 112 | - Oct 17, 2018 [ENH:9380d57](https://github.com/buttflattery/yii2-formwizard/commit/9380d575f23f55de76a625feb45345dc9acc9590) Code improvement, replaced the `isset()` with `ArrayHelper::getValue()` and removed several if else shorthand statements. 113 | 114 | - Oct 10, 2018 [BUG:1d001ae](https://github.com/buttflattery/yii2-formwizard/commit/1d001aee91f8dbed7df04cf2ce4cfa38f773f1ea) added css button toolbar fix. 115 | 116 | - Oct 10, 2018 [BUG:628e1d4](https://github.com/buttflattery/yii2-formwizard/commit/628e1d4b1b20e05bfc52c4ec0669953da3f727d3) Updated material.js with correct selectors for the theme material to apply wave effects via `observer` once loaded. 117 | 118 | - Oct 10, 2018 [ENH:eece731](https://github.com/buttflattery/yii2-formwizard/commit/eece731284d336061eea6efb422043a03c46b9c1) added `margin-bottom:40px` in `smart_wizard_theme_dots.css`. 119 | 120 | - Oct 10, 2018 [ENH:099416a](https://github.com/buttflattery/yii2-formwizard/commit/099416a43d50d38cb61b8661d070ca9a9761ad09) updated the section for css and added minified versions minify. 121 | 122 | - Oct 10, 2018 [BUG:3a7bc4a](https://github.com/buttflattery/yii2-formwizard/commit/3a7bc4aefc50e0be2b597b5ffa233c55c5aa4b97) updated the sections with ajax validation fix. 123 | 124 |

Removed

125 | 126 | - Nov 21, 2018 [BUG:30cd5d8](https://github.com/buttflattery/yii2-formwizard/commit/30cd5d85dc135084011b3e61407c940962a6ce95) remove manual setting of `formOptions['action']` in the `setDefaults()` method. 127 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | # The BSD License (BSD) 2 | 3 | Copyright (c) 2013-{2018}, idowsTECH. 4 | 5 | > Redistribution and use in source and binary forms, with or without modification, 6 | > are permitted provided that the following conditions are met: 7 | > 8 | > Redistributions of source code must retain the above copyright notice, this 9 | > list of conditions and the following disclaimer. 10 | > 11 | > Redistributions in binary form must reproduce the above copyright notice, this 12 | > list of conditions and the following disclaimer in the documentation and/or 13 | > other materials provided with the distribution. 14 | > 15 | > Neither the name of idowsTECH. nor the names of its 16 | > contributors may be used to endorse or promote products derived from 17 | > this software without specific prior written permission. 18 | > 19 | >THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | >ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | >WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | >DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 23 | >ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | >(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | >LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26 | >ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | >(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | >SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-leap-day -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "buttflattery/yii2-formwizard", 3 | "description": "A yii2 widget for form wizard, to create a multistep form.", 4 | "type": "yii2-extension", 5 | "require": { 6 | "php": ">=5.4.0" 7 | }, 8 | "license": "MIT", 9 | "authors": [{ 10 | "name": "omer aslam", 11 | "email": "buttflattery@hotmail.com" 12 | }], 13 | "minimum-stability": "dev", 14 | "autoload": { 15 | "psr-4": { 16 | "buttflattery\\formwizard\\": "//src" 17 | } 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /src/assetbundles/bs3/FormWizardAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs3\FormWizardAsset'); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/assetbundles/bs3/ThemeBase.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs3\FormWizardAsset'); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/assetbundles/bs3/ThemeDotsAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs3\FormWizardAsset'); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/assetbundles/bs3/ThemeMaterialAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs3\FormWizardAsset'); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/assetbundles/bs3/ThemeMaterialVerticleAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs3\FormWizardAsset'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/assetbundles/bs3/ThemeTagsAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs3\FormWizardAsset'); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/assetbundles/bs4/FormWizardAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs4\FormWizardAsset'); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/assetbundles/bs4/ThemeBase.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs4\FormWizardAsset'); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/assetbundles/bs4/ThemeDotsAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs4\FormWizardAsset'); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/assetbundles/bs4/ThemeMaterialAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs4\FormWizardAsset'); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/assetbundles/bs4/ThemeMaterialVerticleAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs4\FormWizardAsset'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/assetbundles/bs4/ThemeTagsAsset.php: -------------------------------------------------------------------------------- 1 | depends, 'buttflattery\formwizard\assetbundles\bs4\FormWizardAsset'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/assets/css/fonts/formwizard.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/buttflattery/yii2-formwizard/13a963c777a2e580698841526573fab49fc8a0b3/src/assets/css/fonts/formwizard.eot -------------------------------------------------------------------------------- /src/assets/css/fonts/formwizard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | { 8 | "fontFamily": "formwizard", 9 | "majorVersion": 1, 10 | "minorVersion": 0, 11 | "version": "Version 1.0", 12 | "fontId": "formwizard", 13 | "psName": "formwizard", 14 | "subFamily": "Regular", 15 | "fullName": "formwizard", 16 | "description": "Font generated by IcoMoon." 17 | } 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/assets/css/fonts/formwizard.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/buttflattery/yii2-formwizard/13a963c777a2e580698841526573fab49fc8a0b3/src/assets/css/fonts/formwizard.ttf -------------------------------------------------------------------------------- /src/assets/css/fonts/formwizard.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/buttflattery/yii2-formwizard/13a963c777a2e580698841526573fab49fc8a0b3/src/assets/css/fonts/formwizard.woff -------------------------------------------------------------------------------- /src/assets/css/icons-theme.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'formwizard'; 3 | src: url('fonts/formwizard.eot?un40vz'); 4 | src: url('fonts/formwizard.eot?un40vz#iefix') format('embedded-opentype'), 5 | url('fonts/formwizard.ttf?un40vz') format('truetype'), 6 | url('fonts/formwizard.woff?un40vz') format('woff'), 7 | url('fonts/formwizard.svg?un40vz#formwizard') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | [class^="formwizard-"], 13 | [class*=" formwizard-"] { 14 | /* use !important to prevent issues with browser extensions that change fonts */ 15 | font-family: 'formwizard' !important; 16 | speak: none; 17 | font-style: normal; 18 | font-weight: normal; 19 | font-variant: normal; 20 | text-transform: none; 21 | line-height: 1; 22 | 23 | /* Better Font Rendering =========== */ 24 | -webkit-font-smoothing: antialiased; 25 | -moz-osx-font-smoothing: grayscale; 26 | } 27 | 28 | .formwizard-quill-ico:before { 29 | content: "\e91a"; 30 | } 31 | 32 | .formwizard-restore-ico:before { 33 | content: "\ea2e"; 34 | } 35 | 36 | .formwizard-checkmark-ico:before { 37 | content: "\e900"; 38 | } 39 | 40 | .formwizard-check-alt-ico:before { 41 | content: "\e901"; 42 | } 43 | 44 | .formwizard-x-ico:before { 45 | content: "\e902"; 46 | } 47 | 48 | .formwizard-x-altx-alt-ico:before { 49 | content: "\e903"; 50 | } 51 | 52 | .formwizard-denied-ico:before { 53 | content: "\e904"; 54 | } 55 | 56 | .formwizard-plus-ico:before { 57 | content: "\e905"; 58 | } 59 | 60 | .formwizard-plus-alt-ico:before { 61 | content: "\e906"; 62 | } 63 | 64 | .formwizard-minus-ico:before { 65 | content: "\e907"; 66 | } 67 | 68 | .formwizard-minus-alt-ico:before { 69 | content: "\e908"; 70 | } 71 | 72 | .formwizard-arrow-left-ico:before { 73 | content: "\e909"; 74 | } 75 | 76 | .formwizard-arrow-left-alt1-ico:before { 77 | content: "\e90a"; 78 | } 79 | 80 | .formwizard-arrow-left-alt2-ico:before { 81 | content: "\e90b"; 82 | } 83 | 84 | .formwizard-arrow-right-ico:before { 85 | content: "\e90c"; 86 | } 87 | 88 | .formwizard-arrow-right-alt1-ico:before { 89 | content: "\e90d"; 90 | } 91 | 92 | .formwizard-arrow-right-alt2-ico:before { 93 | content: "\e90e"; 94 | } 95 | 96 | .formwizard-arrow-up-ico:before { 97 | content: "\e90f"; 98 | } 99 | 100 | .formwizard-arrow-up-alt1-ico:before { 101 | content: "\e910"; 102 | } 103 | 104 | .formwizard-arrow-up-alt2-ico:before { 105 | content: "\e911"; 106 | } 107 | 108 | .formwizard-arrow-down-ico:before { 109 | content: "\e912"; 110 | } 111 | 112 | .formwizard-arrow-down-alt1-ico:before { 113 | content: "\e913"; 114 | } 115 | 116 | .formwizard-arrow-down-alt2-ico:before { 117 | content: "\e914"; 118 | } 119 | 120 | .formwizard-cd-ico:before { 121 | content: "\e915"; 122 | } 123 | 124 | .formwizard-first-ico:before { 125 | content: "\e916"; 126 | } 127 | 128 | .formwizard-last-ico:before { 129 | content: "\e917"; 130 | } 131 | 132 | .formwizard-info-ico:before { 133 | content: "\e918"; 134 | } 135 | 136 | .formwizard-hash-ico:before { 137 | content: "\e919"; 138 | } -------------------------------------------------------------------------------- /src/assets/css/icons-theme.min.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:formwizard;src:url(fonts/formwizard.eot?un40vz);src:url(fonts/formwizard.eot?un40vz#iefix) format('embedded-opentype'),url(fonts/formwizard.ttf?un40vz) format('truetype'),url(fonts/formwizard.woff?un40vz) format('woff'),url(fonts/formwizard.svg?un40vz#formwizard) format('svg');font-weight:400;font-style:normal}[class*=" formwizard-"],[class^=formwizard-]{font-family:formwizard!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.formwizard-quill-ico:before{content:"\e91a"}.formwizard-restore-ico:before{content:"\ea2e"}.formwizard-checkmark-ico:before{content:"\e900"}.formwizard-check-alt-ico:before{content:"\e901"}.formwizard-x-ico:before{content:"\e902"}.formwizard-x-altx-alt-ico:before{content:"\e903"}.formwizard-denied-ico:before{content:"\e904"}.formwizard-plus-ico:before{content:"\e905"}.formwizard-plus-alt-ico:before{content:"\e906"}.formwizard-minus-ico:before{content:"\e907"}.formwizard-minus-alt-ico:before{content:"\e908"}.formwizard-arrow-left-ico:before{content:"\e909"}.formwizard-arrow-left-alt1-ico:before{content:"\e90a"}.formwizard-arrow-left-alt2-ico:before{content:"\e90b"}.formwizard-arrow-right-ico:before{content:"\e90c"}.formwizard-arrow-right-alt1-ico:before{content:"\e90d"}.formwizard-arrow-right-alt2-ico:before{content:"\e90e"}.formwizard-arrow-up-ico:before{content:"\e90f"}.formwizard-arrow-up-alt1-ico:before{content:"\e910"}.formwizard-arrow-up-alt2-ico:before{content:"\e911"}.formwizard-arrow-down-ico:before{content:"\e912"}.formwizard-arrow-down-alt1-ico:before{content:"\e913"}.formwizard-arrow-down-alt2-ico:before{content:"\e914"}.formwizard-cd-ico:before{content:"\e915"}.formwizard-first-ico:before{content:"\e916"}.formwizard-last-ico:before{content:"\e917"}.formwizard-info-ico:before{content:"\e918"}.formwizard-hash-ico:before{content:"\e919"} -------------------------------------------------------------------------------- /src/assets/css/ie7/ie7.css: -------------------------------------------------------------------------------- 1 | .formwizard-quill-ico { 2 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 3 | } 4 | .formwizard-restore-ico { 5 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 6 | } 7 | .formwizard-checkmark-ico { 8 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 9 | } 10 | .formwizard-check-alt-ico { 11 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 12 | } 13 | .formwizard-x-ico { 14 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 15 | } 16 | .formwizard-x-altx-alt-ico { 17 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 18 | } 19 | .formwizard-denied-ico { 20 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 21 | } 22 | .formwizard-plus-ico { 23 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 24 | } 25 | .formwizard-plus-alt-ico { 26 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 27 | } 28 | .formwizard-minus-ico { 29 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 30 | } 31 | .formwizard-minus-alt-ico { 32 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 33 | } 34 | .formwizard-arrow-left-ico { 35 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 36 | } 37 | .formwizard-arrow-left-alt1-ico { 38 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 39 | } 40 | .formwizard-arrow-left-alt2-ico { 41 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 42 | } 43 | .formwizard-arrow-right-ico { 44 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 45 | } 46 | .formwizard-arrow-right-alt1-ico { 47 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 48 | } 49 | .formwizard-arrow-right-alt2-ico { 50 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 51 | } 52 | .formwizard-arrow-up-ico { 53 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 54 | } 55 | .formwizard-arrow-up-alt1-ico { 56 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 57 | } 58 | .formwizard-arrow-up-alt2-ico { 59 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 60 | } 61 | .formwizard-arrow-down-ico { 62 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 63 | } 64 | .formwizard-arrow-down-alt1-ico { 65 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 66 | } 67 | .formwizard-arrow-down-alt2-ico { 68 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 69 | } 70 | .formwizard-cd-ico { 71 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 72 | } 73 | .formwizard-first-ico { 74 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 75 | } 76 | .formwizard-last-ico { 77 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 78 | } 79 | .formwizard-info-ico { 80 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 81 | } 82 | .formwizard-hash-ico { 83 | *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); 84 | } 85 | 86 | -------------------------------------------------------------------------------- /src/assets/css/ie7/ie7.js: -------------------------------------------------------------------------------- 1 | /* To avoid CSS expressions while still supporting IE 7 and IE 6, use this script */ 2 | /* The script tag referencing this file must be placed before the ending body tag. */ 3 | 4 | /* Use conditional comments in order to target IE 7 and older: 5 | 6 | 7 | 8 | */ 9 | 10 | (function() { 11 | function addIcon(el, entity) { 12 | var html = el.innerHTML; 13 | el.innerHTML = '' + entity + '' + html; 14 | } 15 | var icons = { 16 | 'formwizard-quill-ico': '', 17 | 'formwizard-restore-ico': '', 18 | 'formwizard-checkmark-ico': '', 19 | 'formwizard-check-alt-ico': '', 20 | 'formwizard-x-ico': '', 21 | 'formwizard-x-altx-alt-ico': '', 22 | 'formwizard-denied-ico': '', 23 | 'formwizard-plus-ico': '', 24 | 'formwizard-plus-alt-ico': '', 25 | 'formwizard-minus-ico': '', 26 | 'formwizard-minus-alt-ico': '', 27 | 'formwizard-arrow-left-ico': '', 28 | 'formwizard-arrow-left-alt1-ico': '', 29 | 'formwizard-arrow-left-alt2-ico': '', 30 | 'formwizard-arrow-right-ico': '', 31 | 'formwizard-arrow-right-alt1-ico': '', 32 | 'formwizard-arrow-right-alt2-ico': '', 33 | 'formwizard-arrow-up-ico': '', 34 | 'formwizard-arrow-up-alt1-ico': '', 35 | 'formwizard-arrow-up-alt2-ico': '', 36 | 'formwizard-arrow-down-ico': '', 37 | 'formwizard-arrow-down-alt1-ico': '', 38 | 'formwizard-arrow-down-alt2-ico': '', 39 | 'formwizard-cd-ico': '', 40 | 'formwizard-first-ico': '', 41 | 'formwizard-last-ico': '', 42 | 'formwizard-info-ico': '', 43 | 'formwizard-hash-ico': '', 44 | '0': 0 45 | }, 46 | els = document.getElementsByTagName('*'), 47 | i, c, el; 48 | for (i = 0; ; i += 1) { 49 | el = els[i]; 50 | if(!el) { 51 | break; 52 | } 53 | c = el.className; 54 | c = c.match(/formwizard-[^\s'"]+/); 55 | if (c && icons[c[0]]) { 56 | addIcon(el, icons[c[0]]); 57 | } 58 | } 59 | }()); 60 | -------------------------------------------------------------------------------- /src/assets/css/shake.css: -------------------------------------------------------------------------------- 1 | /* 2 | To change this license header, choose License Headers in Project Properties. 3 | To change this template file, choose Tools | Templates 4 | and open the template in the editor. 5 | */ 6 | /* 7 | Created on : Sep 20, 2018, 3:09:24 AM 8 | Author : omer 9 | */ 10 | 11 | 12 | /* Shake animation */ 13 | @charset "UTF-8"; 14 | 15 | .animated { 16 | -webkit-animation-duration: 1s; 17 | -moz-animation-duration: 1s; 18 | -o-animation-duration: 1s; 19 | animation-duration: 1s; 20 | -webkit-animation-fill-mode: both; 21 | -moz-animation-fill-mode: both; 22 | -o-animation-fill-mode: both; 23 | animation-fill-mode: both; 24 | } 25 | 26 | .animated.hinges { 27 | -webkit-animation-duration: 2s; 28 | -moz-animation-duration: 2s; 29 | -o-animation-duration: 2s; 30 | animation-duration: 2s; 31 | } 32 | 33 | .animated.slow { 34 | -webkit-animation-duration: 3s; 35 | -moz-animation-duration: 3s; 36 | -o-animation-duration: 3s; 37 | animation-duration: 3s; 38 | } 39 | 40 | .animated.snail { 41 | -webkit-animation-duration: 4s; 42 | -moz-animation-duration: 4s; 43 | -o-animation-duration: 4s; 44 | animation-duration: 4s; 45 | } 46 | 47 | @-webkit-keyframes shake { 48 | 0%, 100% {-webkit-transform: translateX(0);} 49 | 10%, 30%, 50%, 70%, 90% {-webkit-transform: translateX(-10px);} 50 | 20%, 40%, 60%, 80% {-webkit-transform: translateX(10px);} 51 | } 52 | 53 | @-moz-keyframes shake { 54 | 0%, 100% {-moz-transform: translateX(0);} 55 | 10%, 30%, 50%, 70%, 90% {-moz-transform: translateX(-10px);} 56 | 20%, 40%, 60%, 80% {-moz-transform: translateX(10px);} 57 | } 58 | 59 | @-o-keyframes shake { 60 | 0%, 100% {-o-transform: translateX(0);} 61 | 10%, 30%, 50%, 70%, 90% {-o-transform: translateX(-10px);} 62 | 20%, 40%, 60%, 80% {-o-transform: translateX(10px);} 63 | } 64 | 65 | @keyframes shake { 66 | 0%, 100% {transform: translateX(0);} 67 | 10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);} 68 | 20%, 40%, 60%, 80% {transform: translateX(10px);} 69 | } 70 | 71 | .shake { 72 | -webkit-animation-name: shake; 73 | -moz-animation-name: shake; 74 | -o-animation-name: shake; 75 | animation-name: shake; 76 | } -------------------------------------------------------------------------------- /src/assets/css/shake.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | .animated{-webkit-animation-duration:1s;-moz-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.animated.hinges{-webkit-animation-duration:2s;-moz-animation-duration:2s;-o-animation-duration:2s;animation-duration:2s}.animated.slow{-webkit-animation-duration:3s;-moz-animation-duration:3s;-o-animation-duration:3s;animation-duration:3s}.animated.snail{-webkit-animation-duration:4s;-moz-animation-duration:4s;-o-animation-duration:4s;animation-duration:4s}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px)}}@-moz-keyframes shake{0%,100%{-moz-transform:translateX(0)}10%,30%,50%,70%,90%{-moz-transform:translateX(-10px)}20%,40%,60%,80%{-moz-transform:translateX(10px)}}@-o-keyframes shake{0%,100%{-o-transform:translateX(0)}10%,30%,50%,70%,90%{-o-transform:translateX(-10px)}20%,40%,60%,80%{-o-transform:translateX(10px)}}@keyframes shake{0%,100%{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}.shake{-webkit-animation-name:shake;-moz-animation-name:shake;-o-animation-name:shake;animation-name:shake} -------------------------------------------------------------------------------- /src/assets/css/smart_wizard.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */ 12 | .sw-main { 13 | font-family: "Montserrat", sans-serif !important; 14 | position: relative; 15 | display: block; 16 | margin: 0; 17 | padding: 0; 18 | border-radius: .25rem !important; 19 | background: #fff; 20 | } 21 | 22 | .sw-main .sw-container { 23 | display: block; 24 | margin: 0; 25 | padding: 0; 26 | position: relative; 27 | } 28 | 29 | .sw-theme-default .field-heading { 30 | border-bottom: 1px solid rgb(161, 161, 161); 31 | margin-bottom: 31px; 32 | font-size: 1.3em; 33 | } 34 | 35 | .sw-main .formwizard_next, 36 | .sw-main .formwizard_prev, 37 | .sw-main .formwizard_finish { 38 | font-family: inherit !important; 39 | } 40 | 41 | .sw-main .step-content { 42 | display: none; 43 | position: relative; 44 | margin: 0; 45 | } 46 | 47 | .sw-main .sw-toolbar { 48 | margin-left: 0; 49 | } 50 | 51 | .sw-main .tabular-row i.remove-row { 52 | float: right; 53 | clear: both; 54 | color: #d9534f; 55 | cursor: pointer; 56 | } 57 | 58 | 59 | .sw-main .fields_container .tabular-row { 60 | margin-top: 10px; 61 | border-top: 1px solid #c8c8c8; 62 | padding: 5px; 63 | width: 80%; 64 | } 65 | 66 | .justify-content-end { 67 | -ms-flex-pack: end !important; 68 | justify-content: flex-end !important; 69 | display: flex; 70 | } 71 | 72 | .sw-main .sw-toolbar { 73 | margin-left: 0 74 | } 75 | 76 | .sw-theme-default { 77 | -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); 78 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); 79 | } 80 | 81 | .sw-theme-default .sw-container { 82 | min-height: 250px; 83 | } 84 | 85 | .sw-theme-default .step-content { 86 | padding: 10px; 87 | border: 0 solid #d4d4d4; 88 | background-color: #fff; 89 | text-align: left; 90 | } 91 | 92 | .sw-theme-default .sw-toolbar { 93 | 94 | border-radius: 0 !important; 95 | padding-left: 10px; 96 | padding-right: 10px; 97 | padding: 10px; 98 | margin-bottom: 0 !important; 99 | } 100 | 101 | .sw-theme-default .sw-toolbar-top { 102 | border-bottom-color: #ddd !important; 103 | } 104 | 105 | .sw-theme-default .sw-toolbar-bottom { 106 | border-top-color: #ddd !important; 107 | } 108 | 109 | .sw-theme-default>ul.step-anchor { 110 | background: #f9f9f9; 111 | padding: 0 !important; 112 | } 113 | 114 | .sw-theme-default>ul.step-anchor>li { 115 | position: relative; 116 | margin-right: 2px; 117 | } 118 | 119 | .sw-theme-default>ul.step-anchor>li>a, 120 | .sw-theme-default>ul.step-anchor>li>a:hover { 121 | border: none !important; 122 | color: #bbb !important; 123 | text-decoration: none; 124 | outline-style: none; 125 | background: 0 0 !important; 126 | border: none !important; 127 | cursor: not-allowed; 128 | 129 | } 130 | 131 | .sw-theme-default>ul.step-anchor>li.clickable>a:hover { 132 | color: #4285f4 !important; 133 | background: 0 0 !important; 134 | cursor: pointer; 135 | } 136 | 137 | .sw-theme-default>ul.step-anchor>li>a::after { 138 | content: ""; 139 | background: teal; 140 | height: 2px; 141 | position: absolute; 142 | width: 100%; 143 | left: 0; 144 | bottom: 0; 145 | -webkit-transition: all 250ms ease 0s; 146 | transition: all 250ms ease 0s; 147 | -webkit-transform: scale(0); 148 | -ms-transform: scale(0); 149 | transform: scale(0); 150 | } 151 | 152 | .sw-theme-default>ul.step-anchor>li.active>a { 153 | border: none !important; 154 | color: teal !important; 155 | background: 0 0 !important; 156 | cursor: pointer; 157 | 158 | } 159 | 160 | .sw-theme-default>ul.step-anchor>li.active>a::after { 161 | -webkit-transform: scale(1); 162 | -ms-transform: scale(1); 163 | transform: scale(1); 164 | } 165 | 166 | .sw-theme-default>ul.step-anchor>li.done>a { 167 | border: none !important; 168 | color: green !important; 169 | background: 0 0 !important; 170 | cursor: pointer; 171 | } 172 | 173 | .sw-theme-default>ul.step-anchor>li.done>a::after { 174 | background: #5cb85c; 175 | -webkit-transform: scale(1); 176 | -ms-transform: scale(1); 177 | transform: scale(1); 178 | } 179 | 180 | .sw-theme-default>ul.step-anchor>li.danger>a { 181 | border: none !important; 182 | color: #d9534f !important; 183 | cursor: pointer; 184 | } 185 | 186 | .sw-theme-default>ul.step-anchor>li.danger>a::after { 187 | background: #d9534f; 188 | border-left-color: #f8d7da; 189 | -webkit-transform: scale(1); 190 | -ms-transform: scale(1); 191 | transform: scale(1); 192 | } 193 | 194 | .sw-theme-default>ul.step-anchor>li.disabled>a, 195 | .sw-theme-default>ul.step-anchor>li.disabled>a:hover { 196 | color: #eee !important; 197 | cursor: not-allowed; 198 | } 199 | 200 | .notify-target { 201 | box-shadow: 0 0 5px rgba(81, 203, 238, 1); 202 | padding: 3px 0px 3px 3px; 203 | margin: 5px 1px 3px 0px; 204 | border: 1px solid rgba(81, 203, 238, 1); 205 | -webkit-transition: all 0.30s ease-in-out; 206 | -moz-transition: all 0.30s ease-in-out; 207 | -ms-transition: all 0.30s ease-in-out; 208 | -o-transition: all 0.30s ease-in-out; 209 | } 210 | 211 | @media screen and (max-width: 768px) { 212 | .sw-theme-default>.nav-tabs>li { 213 | float: none !important; 214 | } 215 | } 216 | 217 | .sw-loading::after { 218 | position: absolute; 219 | display: block; 220 | opacity: 1; 221 | content: ""; 222 | top: 0; 223 | left: 0; 224 | height: 100%; 225 | width: 100%; 226 | background: rgba(255, 255, 255, 0.7); 227 | -webkit-transition: all 0.2s ease; 228 | transition: all 0.2s ease; 229 | z-index: 2; 230 | } 231 | 232 | .sw-loading::before { 233 | content: ""; 234 | display: inline-block; 235 | position: absolute; 236 | top: 50%; 237 | left: 50%; 238 | z-index: 10; 239 | border: 10px solid #f3f3f3; 240 | border-radius: 50%; 241 | border-top: 10px solid #3498db; 242 | width: 80px; 243 | height: 80px; 244 | margin-top: -40px; 245 | margin-left: -40px; 246 | -webkit-animation: spin 1s linear infinite; 247 | animation: spin 1s linear infinite; 248 | } 249 | 250 | @-webkit-keyframes spin { 251 | 0% { 252 | -webkit-transform: rotate(0); 253 | } 254 | 255 | 100% { 256 | -webkit-transform: rotate(360deg); 257 | } 258 | } 259 | 260 | @keyframes spin { 261 | 0% { 262 | -webkit-transform: rotate(0); 263 | transform: rotate(0); 264 | } 265 | 266 | 100% { 267 | -webkit-transform: rotate(360deg); 268 | transform: rotate(360deg); 269 | } 270 | } -------------------------------------------------------------------------------- /src/assets/css/smart_wizard.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */.sw-main{font-family:Montserrat,sans-serif!important;position:relative;display:block;margin:0;padding:0;border-radius:.25rem!important;background:#fff}.sw-main .sw-container{display:block;margin:0;padding:0;position:relative}.sw-theme-default .field-heading{border-bottom:1px solid #a1a1a1;margin-bottom:31px;font-size:1.3em}.sw-main .formwizard_finish,.sw-main .formwizard_next,.sw-main .formwizard_prev{font-family:inherit!important}.sw-main .step-content{display:none;position:relative;margin:0}.sw-main .sw-toolbar{margin-left:0}.sw-main .tabular-row i.remove-row{float:right;clear:both;color:#d9534f;cursor:pointer}.sw-main .fields_container .tabular-row{margin-top:10px;border-top:1px solid #c8c8c8;padding:5px;width:80%}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important;display:flex}.sw-main .sw-toolbar{margin-left:0}.sw-theme-default{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.sw-theme-default .sw-container{min-height:250px}.sw-theme-default .step-content{padding:10px;border:0 solid #d4d4d4;background-color:#fff;text-align:left}.sw-theme-default .sw-toolbar{border-radius:0!important;padding-left:10px;padding-right:10px;padding:10px;margin-bottom:0!important}.sw-theme-default .sw-toolbar-top{border-bottom-color:#ddd!important}.sw-theme-default .sw-toolbar-bottom{border-top-color:#ddd!important}.sw-theme-default>ul.step-anchor{background:#f9f9f9;padding:0!important}.sw-theme-default>ul.step-anchor>li{position:relative;margin-right:2px}.sw-theme-default>ul.step-anchor>li>a,.sw-theme-default>ul.step-anchor>li>a:hover{border:none!important;color:#bbb!important;text-decoration:none;outline-style:none;background:0 0!important;border:none!important;cursor:not-allowed}.sw-theme-default>ul.step-anchor>li.clickable>a:hover{color:#4285f4!important;background:0 0!important;cursor:pointer}.sw-theme-default>ul.step-anchor>li>a::after{content:"";background:teal;height:2px;position:absolute;width:100%;left:0;bottom:0;-webkit-transition:all 250ms ease 0s;transition:all 250ms ease 0s;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.sw-theme-default>ul.step-anchor>li.active>a{border:none!important;color:teal!important;background:0 0!important;cursor:pointer}.sw-theme-default>ul.step-anchor>li.active>a::after{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.sw-theme-default>ul.step-anchor>li.done>a{border:none!important;color:green!important;background:0 0!important;cursor:pointer}.sw-theme-default>ul.step-anchor>li.done>a::after{background:#5cb85c;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.sw-theme-default>ul.step-anchor>li.danger>a{border:none!important;color:#d9534f!important;cursor:pointer}.sw-theme-default>ul.step-anchor>li.danger>a::after{background:#d9534f;border-left-color:#f8d7da;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.sw-theme-default>ul.step-anchor>li.disabled>a,.sw-theme-default>ul.step-anchor>li.disabled>a:hover{color:#eee!important;cursor:not-allowed}.notify-target{box-shadow:0 0 5px rgba(81,203,238,1);padding:3px 0 3px 3px;margin:5px 1px 3px 0;border:1px solid rgba(81,203,238,1);-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out}@media screen and (max-width:768px){.sw-theme-default>.nav-tabs>li{float:none!important}}.sw-loading::after{position:absolute;display:block;opacity:1;content:"";top:0;left:0;height:100%;width:100%;background:rgba(255,255,255,.7);-webkit-transition:all .2s ease;transition:all .2s ease;z-index:2}.sw-loading::before{content:"";display:inline-block;position:absolute;top:50%;left:50%;z-index:10;border:10px solid #f3f3f3;border-radius:50%;border-top:10px solid #3498db;width:80px;height:80px;margin-top:-40px;margin-left:-40px;-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_arrows.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */.sw-container,.sw-main{background:#fff}.sw-theme-arrows{border-radius:5px;border:1px solid #ddd;font-family:Montserrat,sans-serif!important}.sw-theme-arrows .fields_container .tabular-row{margin-top:10px;border-top:1px solid #c8c8c8;padding:5px;width:80%}.sw-theme-arrows .field-heading{border-bottom:1px solid #a1a1a1;margin-bottom:31px;font-size:1.3em}.sw-theme-arrows>.sw-container{min-height:200px}.sw-theme-arrows .tabular-row i.remove-row{float:right;clear:both;color:#d9534f;cursor:pointer}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important;display:flex}.sw-theme-arrows .step-content{padding:0 10px;border:0 solid #d4d4d4;background-color:#fff;text-align:left}.sw-theme-arrows .sw-toolbar{padding:10px;margin-bottom:0!important;background:#fff}.sw-theme-arrows>ul.step-anchor{border:0;border-bottom:1px solid #ddd;padding:0;background:#f5f5f5!important;border-radius:0;border-top-right-radius:5px;list-style:none;overflow:hidden}.sw-theme-arrows>ul.step-anchor li+li:before{padding:0}.sw-theme-arrows>ul.step-anchor>li>a,.sw-theme-arrows>ul.step-anchor>li>a:hover{color:#bbb!important;text-decoration:none;padding:10px 0 10px 45px;position:relative;display:block;border:0!important;border-radius:0;outline-style:none;background:#f5f5f5}.sw-theme-arrows>ul.step-anchor>li>a:after{content:" ";display:block;width:0;height:0;border-top:50px solid transparent;border-bottom:50px solid transparent;border-left:30px solid #f5f5f5;position:absolute;top:50%;margin-top:-50px;left:100%;z-index:2}.sw-theme-arrows>ul.step-anchor>li>a:before{content:" ";display:block;width:0;height:0;border-top:50px solid transparent;border-bottom:50px solid transparent;border-left:30px solid #ddd;position:absolute;top:50%;margin-top:-50px;margin-left:1px;left:100%;z-index:1}.sw-theme-arrows>ul.step-anchor>li:first-child>a{padding-left:15px}.sw-theme-arrows>ul.step-anchor>li>a:hover{color:#bbb;text-decoration:none;outline-style:none;background:#f5f5f5;border-color:#f5f5f5}.sw-theme-arrows>ul.step-anchor>li>a:hover:after{border-left-color:#f5f5f5}.sw-theme-arrows>ul.step-anchor>li.clickable>a:hover{color:#4285f4!important;background:#46b8da!important}.sw-theme-arrows>ul.step-anchor>li.active>a{border-color:#5cb85c!important;color:#fff!important;background:#5cb85c!important}.sw-theme-arrows>ul.step-anchor>li.active>a:after{border-left:30px solid #5cb85c!important}.sw-theme-arrows>ul.step-anchor>li.done>a{border-color:#b1dfbb!important;color:#fff!important;background:#b1dfbb!important}.sw-theme-arrows>ul.step-anchor>li.done>a:after{border-left:30px solid #b1dfbb}.sw-theme-arrows>ul.step-anchor>li.danger>a{border-color:#d9534f!important;color:#fff!important;background:#d9534f!important}.sw-theme-arrows>ul.step-anchor>li.danger>a:after{border-left:30px solid #d9534f!important}.sw-theme-arrows>ul.step-anchor>li.disabled>a,.sw-theme-arrows>ul.step-anchor>li.disabled>a:hover{color:#eee!important}.sw-theme-arrows ul.nav-tabs li{top:0!important}@media screen and (max-width:768px){.sw-theme-arrows>ul.step-anchor{border:0;background:#ddd!important}.sw-theme-arrows>.nav-tabs>li{float:none!important;margin-bottom:0}.sw-theme-arrows>ul.step-anchor>li>a,.sw-theme-arrows>ul.step-anchor>li>a:hover{padding-left:15px;margin-right:0;margin-bottom:1px}.sw-theme-arrows>ul.step-anchor>li>a:after,.sw-theme-arrows>ul.step-anchor>li>a:before{display:none}}.sw-theme-arrows::before{border:10px solid #f3f3f3;border-top:10px solid #5cb85c} -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_arrows.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * SmartWizard v4.3.x 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */.sw-container,.sw-main{background:#fff}.sw-theme-arrows{border-radius:5px;border:1px solid #ddd;font-family:Montserrat,sans-serif!important}.sw-theme-arrows .fields_container .tabular-row{margin-top:10px;border-top:1px solid #c8c8c8;padding:5px;width:80%}.sw-theme-arrows .field-heading{border-bottom:1px solid #a1a1a1;margin-bottom:31px;font-size:1.3em}.sw-theme-arrows>.sw-container{min-height:200px}.sw-theme-arrows .tabular-row i.remove-row{float:right;clear:both;color:#d9534f;cursor:pointer}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important;display:flex}.sw-theme-arrows .step-content{padding:0 10px;border:0 solid #d4d4d4;background-color:#fff;text-align:left}.sw-theme-arrows .sw-toolbar{padding:10px;margin-bottom:0!important;background:#fff}.sw-theme-arrows>ul.step-anchor{border:0;border-bottom:1px solid #ddd;padding:0;background:#f5f5f5!important;border-radius:0;border-top-right-radius:5px;list-style:none;overflow:hidden}.sw-theme-arrows>ul.step-anchor li+li:before{padding:0}.sw-theme-arrows>ul.step-anchor>li>a,.sw-theme-arrows>ul.step-anchor>li>a:hover{color:#bbb!important;text-decoration:none;padding:10px 0 10px 45px;position:relative;display:block;border:0!important;border-radius:0;outline-style:none;background:#f5f5f5}.sw-theme-arrows>ul.step-anchor>li>a:after{content:" ";display:block;width:0;height:0;border-top:50px solid transparent;border-bottom:50px solid transparent;border-left:30px solid #f5f5f5;position:absolute;top:50%;margin-top:-50px;left:100%;z-index:2}.sw-theme-arrows>ul.step-anchor>li>a:before{content:" ";display:block;width:0;height:0;border-top:50px solid transparent;border-bottom:50px solid transparent;border-left:30px solid #ddd;position:absolute;top:50%;margin-top:-50px;margin-left:1px;left:100%;z-index:1}.sw-theme-arrows>ul.step-anchor>li:first-child>a{padding-left:15px}.sw-theme-arrows>ul.step-anchor>li>a:hover{color:#bbb;text-decoration:none;outline-style:none;background:#f5f5f5;border-color:#f5f5f5}.sw-theme-arrows>ul.step-anchor>li>a:hover:after{border-left-color:#f5f5f5}.sw-theme-arrows>ul.step-anchor>li.clickable>a:hover{color:#4285f4!important;background:#46b8da!important}.sw-theme-arrows>ul.step-anchor>li.active>a{border-color:#5cb85c!important;color:#fff!important;background:#5cb85c!important}.sw-theme-arrows>ul.step-anchor>li.active>a:after{border-left:30px solid #5cb85c!important}.sw-theme-arrows>ul.step-anchor>li.done>a{border-color:#b1dfbb!important;color:#fff!important;background:#b1dfbb!important}.sw-theme-arrows>ul.step-anchor>li.done>a:after{border-left:30px solid #b1dfbb}.sw-theme-arrows>ul.step-anchor>li.danger>a{border-color:#d9534f!important;color:#fff!important;background:#d9534f!important}.sw-theme-arrows>ul.step-anchor>li.danger>a:after{border-left:30px solid #d9534f!important}.sw-theme-arrows>ul.step-anchor>li.disabled>a,.sw-theme-arrows>ul.step-anchor>li.disabled>a:hover{color:#eee!important}.sw-theme-arrows ul.nav-tabs li{top:0!important}@media screen and (max-width:768px){.sw-theme-arrows>ul.step-anchor{border:0;background:#ddd!important}.sw-theme-arrows>.nav-tabs>li{float:none!important;margin-bottom:0}.sw-theme-arrows>ul.step-anchor>li>a,.sw-theme-arrows>ul.step-anchor>li>a:hover{padding-left:15px;margin-right:0;margin-bottom:1px}.sw-theme-arrows>ul.step-anchor>li>a:after,.sw-theme-arrows>ul.step-anchor>li>a:before{display:none}}.sw-theme-arrows::before{border:10px solid #f3f3f3;border-top:10px solid #5cb85c} -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_circles.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */.sw-theme-circles{font-family:Montserrat,sans-serif!important}.sw-theme-circles .sw-container{min-height:300px}.sw-theme-circles .fields_container .tabular-row{margin-top:10px;border-top:1px solid #c8c8c8;padding:5px;width:80%}.sw-theme-circles .field-heading{border-bottom:1px solid #a1a1a1;margin-bottom:31px;font-size:1.3em}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important;display:flex}.sw-main .tabular-row i.remove-row{float:right;clear:both;color:#d9534f;cursor:pointer}.sw-theme-circles .step-content{padding:10px 0;background-color:#fff;text-align:left}.sw-theme-circles .sw-toolbar{background:#fff;padding-left:10px;padding-right:10px;margin-bottom:0!important}.sw-theme-circles .sw-toolbar-bottom{border-top-color:#ddd!important;border-bottom-color:#ddd!important}.sw-theme-circles>ul.step-anchor{position:relative;background:#fff!important;border:none;list-style:none;margin-bottom:60px}.sw-theme-circles>ul.step-anchor:before{content:" ";position:absolute;top:50%;bottom:0;width:100%;height:5px;background-color:#f5f5f5;border-radius:3px;z-index:0}.sw-theme-circles>ul.step-anchor>li{border:none;margin-left:40px;z-index:98}.sw-theme-circles>ul.step-anchor>li>a{border:2px solid #f5f5f5;width:105px;height:105px;text-align:center;padding:53px 0;border-radius:50%;-webkit-box-shadow:inset 0 0 0 3px #fff!important;box-shadow:inset 0 0 0 3px #fff!important;text-decoration:none;outline-style:none;z-index:99;color:#bbb!important;background:#f5f5f5!important;line-height:10px}.sw-theme-circles>ul.step-anchor>li>a:hover{color:#bbb!important;background:#f5f5f5;border-width:2px}.sw-theme-circles>ul.step-anchor>li>a>small{position:relative;bottom:-53px;color:#ccc;line-height:15px}.sw-theme-circles>ul.step-anchor>li.clickable>a:hover{color:#4285f4!important}.sw-theme-circles>ul.step-anchor>li.active>a{border-color:#5bc0de!important;color:#fff!important;background:#5bc0de!important;transition:background-color .1s .2s}.sw-theme-circles>ul.step-anchor>li.active>a>small{color:#5bc0de}.sw-theme-circles>ul.step-anchor>li.done>a{border-color:#5cb85c!important;color:#fff!important;background:#5cb85c!important}.sw-theme-circles>ul.step-anchor>li.done>a>small{color:#5cb85c}.sw-theme-circles>ul.step-anchor>li.danger>a{border-color:#d9534f;color:#d9534f;background:#fff}.sw-theme-circles>ul.step-anchor>li.danger>a>small{color:#d9534f}.sw-theme-circles>ul.step-anchor>li.disabled>a,.sw-theme-circles>ul.step-anchor>li.disabled>a:hover{color:#eee!important} -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_circles.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */ 12 | 13 | /* SmartWizard Theme: Circles */ 14 | .sw-theme-circles { 15 | font-family: 'Montserrat', sans-serif !important; 16 | } 17 | 18 | .sw-theme-circles .sw-container { 19 | min-height: 300px; 20 | } 21 | 22 | 23 | .sw-theme-circles .fields_container .tabular-row { 24 | margin-top: 10px; 25 | border-top: 1px solid #c8c8c8; 26 | padding: 5px; 27 | width: 80%; 28 | } 29 | 30 | .sw-theme-circles .field-heading { 31 | border-bottom: 1px solid rgb(161, 161, 161); 32 | margin-bottom: 31px; 33 | font-size: 1.3em; 34 | } 35 | 36 | .justify-content-end { 37 | -ms-flex-pack: end !important; 38 | justify-content: flex-end !important; 39 | display: flex; 40 | } 41 | 42 | .sw-main .tabular-row i.remove-row { 43 | float: right; 44 | clear: both; 45 | color: #d9534f; 46 | cursor: pointer; 47 | } 48 | 49 | .sw-theme-circles .step-content { 50 | padding: 10px 0; 51 | background-color: #FFF; 52 | text-align: left; 53 | } 54 | 55 | .sw-theme-circles .sw-toolbar { 56 | background: #fff; 57 | padding-left: 10px; 58 | padding-right: 10px; 59 | margin-bottom: 0 !important; 60 | } 61 | 62 | .sw-theme-circles .sw-toolbar-top {} 63 | 64 | .sw-theme-circles .sw-toolbar-bottom { 65 | border-top-color: #ddd !important; 66 | border-bottom-color: #ddd !important; 67 | } 68 | 69 | .sw-theme-circles>ul.step-anchor { 70 | position: relative; 71 | background: #fff !important; 72 | border: none; 73 | list-style: none; 74 | margin-bottom: 60px; 75 | } 76 | 77 | .sw-theme-circles>ul.step-anchor:before { 78 | content: " "; 79 | position: absolute; 80 | top: 50%; 81 | bottom: 0; 82 | width: 100%; 83 | height: 5px; 84 | background-color: #f5f5f5; 85 | border-radius: 3px; 86 | z-index: 0; 87 | } 88 | 89 | .sw-theme-circles>ul.step-anchor>li { 90 | border: none; 91 | margin-left: 40px; 92 | z-index: 98; 93 | } 94 | 95 | .sw-theme-circles>ul.step-anchor>li>a { 96 | border: 2px solid #f5f5f5; 97 | width: 105px; 98 | height: 105px; 99 | text-align: center; 100 | padding: 53px 0; 101 | border-radius: 50%; 102 | -webkit-box-shadow: inset 0px 0px 0px 3px #fff !important; 103 | box-shadow: inset 0px 0px 0px 3px #fff !important; 104 | text-decoration: none; 105 | outline-style: none; 106 | z-index: 99; 107 | color: #bbb !important; 108 | background: #f5f5f5 !important; 109 | line-height: 10px; 110 | } 111 | 112 | .sw-theme-circles>ul.step-anchor>li>a:hover { 113 | color: #bbb !important; 114 | background: #f5f5f5; 115 | border-width: 2px; 116 | } 117 | 118 | .sw-theme-circles>ul.step-anchor>li>a>small { 119 | position: relative; 120 | bottom: -53px; 121 | color: #ccc; 122 | line-height: 15px; 123 | } 124 | 125 | .sw-theme-circles>ul.step-anchor>li.clickable>a:hover { 126 | color: #4285F4 !important; 127 | } 128 | 129 | .sw-theme-circles>ul.step-anchor>li.active>a { 130 | border-color: #5bc0de !important; 131 | color: #fff !important; 132 | background: #5bc0de !important; 133 | transition: background-color .1s .2s; 134 | } 135 | 136 | .sw-theme-circles>ul.step-anchor>li.active>a>small { 137 | color: #5bc0de; 138 | 139 | } 140 | 141 | .sw-theme-circles>ul.step-anchor>li.done>a { 142 | border-color: #5cb85c !important; 143 | color: #fff !important; 144 | background: #5cb85c !important; 145 | } 146 | 147 | .sw-theme-circles>ul.step-anchor>li.done>a>small { 148 | color: #5cb85c; 149 | } 150 | 151 | .sw-theme-circles>ul.step-anchor>li.danger>a { 152 | border-color: #d9534f; 153 | color: #d9534f; 154 | background: #fff; 155 | } 156 | 157 | .sw-theme-circles>ul.step-anchor>li.danger>a>small { 158 | color: #d9534f; 159 | } 160 | 161 | .sw-theme-circles>ul.step-anchor>li.disabled>a, 162 | .sw-theme-circles>ul.step-anchor>li.disabled>a:hover { 163 | color: #eee !important; 164 | } -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_dots.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */ 12 | 13 | /* SmartWizard Theme: Dots */ 14 | .sw-theme-dots { 15 | font-family: 'Montserrat', sans-serif !important; 16 | } 17 | 18 | .sw-theme-dots .sw-container { 19 | min-height: 300px; 20 | } 21 | 22 | .justify-content-end { 23 | -ms-flex-pack: end !important; 24 | justify-content: flex-end !important; 25 | display: flex; 26 | } 27 | 28 | .sw-theme-dots .fields_container .tabular-row { 29 | margin-top: 10px; 30 | border-top: 1px solid #c8c8c8; 31 | padding: 5px; 32 | width: 80%; 33 | } 34 | 35 | .sw-theme-dots .field-heading { 36 | border-bottom: 1px solid rgb(161, 161, 161); 37 | margin-bottom: 31px; 38 | font-size: 1.3em; 39 | } 40 | 41 | .sw-main .tabular-row i.remove-row { 42 | float: right; 43 | clear: both; 44 | color: #d9534f; 45 | cursor: pointer; 46 | } 47 | 48 | .sw-theme-dots .step-content { 49 | padding: 10px 0; 50 | border: none; 51 | background-color: #FFF; 52 | text-align: left; 53 | } 54 | 55 | .sw-theme-dots .sw-toolbar { 56 | background: #fff; 57 | border-radius: 0 !important; 58 | padding-left: 10px; 59 | padding-right: 10px; 60 | margin-bottom: 0 !important; 61 | } 62 | 63 | .sw-theme-dots .sw-toolbar-top { 64 | border-bottom-color: #ddd !important; 65 | } 66 | 67 | .sw-theme-dots .sw-toolbar-bottom { 68 | border-top-color: #ddd !important; 69 | border-bottom-color: #ddd !important; 70 | } 71 | 72 | .sw-theme-dots>ul.step-anchor { 73 | position: relative; 74 | background: #fff !important; 75 | border: 0px solid #ccc !important; 76 | list-style: none; 77 | margin-bottom: 40px; 78 | } 79 | 80 | .sw-theme-dots>ul.step-anchor:before { 81 | content: " "; 82 | position: absolute; 83 | top: 70px; 84 | bottom: 0; 85 | width: 100%; 86 | height: 5px; 87 | background-color: #f5f5f5; 88 | border-radius: 3px; 89 | z-order: 0; 90 | z-index: 95; 91 | } 92 | 93 | .sw-theme-dots>ul.step-anchor>li { 94 | border: none; 95 | } 96 | 97 | /* Anchors styles */ 98 | .sw-theme-dots>ul.step-anchor>li>a { 99 | position: relative; 100 | text-align: center; 101 | font-weight: bold; 102 | background: transparent; 103 | border: none !important; 104 | color: #ccc !important; 105 | text-decoration: none; 106 | outline-style: none; 107 | z-index: 96; 108 | display: block; 109 | } 110 | 111 | .sw-theme-dots>ul.step-anchor>li>a:before { 112 | content: ' '; 113 | position: absolute; 114 | bottom: 2px; 115 | left: 40%; 116 | margin-top: 10px; 117 | display: block; 118 | border-radius: 50%; 119 | color: #428bca; 120 | background: #f5f5f5; 121 | border: none; 122 | width: 30px; 123 | height: 30px; 124 | text-decoration: none; 125 | z-index: 98; 126 | } 127 | 128 | .sw-theme-dots>ul.step-anchor>li>a:after { 129 | content: ' '; 130 | position: relative; 131 | left: 44%; 132 | bottom: 2px; 133 | margin-top: 10px; 134 | display: block; 135 | width: 15px; 136 | height: 15px; 137 | background: #f5f5f5; 138 | border-radius: 50%; 139 | z-index: 99; 140 | } 141 | 142 | .sw-theme-dots>ul.step-anchor>li>a:hover { 143 | color: #ccc; 144 | background: transparent; 145 | } 146 | 147 | .sw-theme-dots>ul.step-anchor>li>a:focus { 148 | color: #ccc; 149 | border: none; 150 | } 151 | 152 | .sw-theme-dots>ul.step-anchor>li.clickable>a:hover { 153 | color: #999; 154 | } 155 | 156 | /* Active anchors */ 157 | .sw-theme-dots>ul.step-anchor>li.active>a { 158 | color: #5bc0de !important; 159 | } 160 | 161 | .sw-theme-dots>ul.step-anchor>li.active>a:hover { 162 | border: none; 163 | } 164 | 165 | .sw-theme-dots>ul.step-anchor>li.active>a:after { 166 | background: #5bc0de; 167 | top: -2px; 168 | left: 45%; 169 | } 170 | 171 | /* Done anchors */ 172 | .sw-theme-dots>ul.step-anchor>li.done>a { 173 | color: #5cb85c !important; 174 | } 175 | 176 | .sw-theme-dots>ul.step-anchor>li.done>a:after { 177 | background: #5cb85c; 178 | } 179 | 180 | /* Danger anchors */ 181 | .sw-theme-dots>ul.step-anchor>li.danger>a { 182 | color: #d9534f; 183 | } 184 | 185 | .sw-theme-dots>ul.step-anchor>li.danger>a:after { 186 | background: #d9534f; 187 | } 188 | 189 | .sw-theme-dots>ul.step-anchor>li.disabled>a, 190 | .sw-theme-dots>ul.step-anchor>li.disabled>a:hover { 191 | color: #eee !important; 192 | } 193 | 194 | .sw-theme-dots>ul.step-anchor>li.disabled>a:after { 195 | background: #eee; 196 | } 197 | 198 | /* Responsive CSS */ 199 | @media screen and (max-width: 768px) { 200 | .sw-theme-dots>ul.step-anchor:before { 201 | top: 0; 202 | bottom: 0; 203 | left: 10px; 204 | width: 5px; 205 | height: 100%; 206 | background-color: #f5f5f5; 207 | display: block; 208 | margin-right: 10px; 209 | } 210 | 211 | .sw-theme-dots>ul.step-anchor>li { 212 | margin-left: 20px; 213 | display: block; 214 | clear: both; 215 | } 216 | 217 | .sw-theme-dots>ul.step-anchor>li>a { 218 | text-align: left; 219 | margin-left: 0; 220 | display: block; 221 | } 222 | 223 | .sw-theme-dots>ul.step-anchor>li>a:before { 224 | top: 5px; 225 | left: -23px; 226 | margin-right: 10px; 227 | display: block; 228 | } 229 | 230 | .sw-theme-dots>ul.step-anchor>li>a:after { 231 | top: -38px; 232 | left: -31px; 233 | margin-right: 10px; 234 | display: block; 235 | } 236 | } -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_dots.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */.sw-theme-dots{font-family:Montserrat,sans-serif!important}.sw-theme-dots .sw-container{min-height:300px}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important;display:flex}.sw-theme-dots .fields_container .tabular-row{margin-top:10px;border-top:1px solid #c8c8c8;padding:5px;width:80%}.sw-theme-dots .field-heading{border-bottom:1px solid #a1a1a1;margin-bottom:31px;font-size:1.3em}.sw-main .tabular-row i.remove-row{float:right;clear:both;color:#d9534f;cursor:pointer}.sw-theme-dots .step-content{padding:10px 0;border:none;background-color:#fff;text-align:left}.sw-theme-dots .sw-toolbar{background:#fff;border-radius:0!important;padding-left:10px;padding-right:10px;margin-bottom:0!important}.sw-theme-dots .sw-toolbar-top{border-bottom-color:#ddd!important}.sw-theme-dots .sw-toolbar-bottom{border-top-color:#ddd!important;border-bottom-color:#ddd!important}.sw-theme-dots>ul.step-anchor{position:relative;background:#fff!important;border:0 solid #ccc!important;list-style:none;margin-bottom:40px}.sw-theme-dots>ul.step-anchor:before{content:" ";position:absolute;top:70px;bottom:0;width:100%;height:5px;background-color:#f5f5f5;border-radius:3px;z-order:0;z-index:95}.sw-theme-dots>ul.step-anchor>li{border:none}.sw-theme-dots>ul.step-anchor>li>a{position:relative;text-align:center;font-weight:700;background:0 0;border:none!important;color:#ccc!important;text-decoration:none;outline-style:none;z-index:96;display:block}.sw-theme-dots>ul.step-anchor>li>a:before{content:' ';position:absolute;bottom:2px;left:40%;margin-top:10px;display:block;border-radius:50%;color:#428bca;background:#f5f5f5;border:none;width:30px;height:30px;text-decoration:none;z-index:98}.sw-theme-dots>ul.step-anchor>li>a:after{content:' ';position:relative;left:44%;bottom:2px;margin-top:10px;display:block;width:15px;height:15px;background:#f5f5f5;border-radius:50%;z-index:99}.sw-theme-dots>ul.step-anchor>li>a:hover{color:#ccc;background:0 0}.sw-theme-dots>ul.step-anchor>li>a:focus{color:#ccc;border:none}.sw-theme-dots>ul.step-anchor>li.clickable>a:hover{color:#999}.sw-theme-dots>ul.step-anchor>li.active>a{color:#5bc0de!important}.sw-theme-dots>ul.step-anchor>li.active>a:hover{border:none}.sw-theme-dots>ul.step-anchor>li.active>a:after{background:#5bc0de;top:-2px;left:45%}.sw-theme-dots>ul.step-anchor>li.done>a{color:#5cb85c!important}.sw-theme-dots>ul.step-anchor>li.done>a:after{background:#5cb85c}.sw-theme-dots>ul.step-anchor>li.danger>a{color:#d9534f}.sw-theme-dots>ul.step-anchor>li.danger>a:after{background:#d9534f}.sw-theme-dots>ul.step-anchor>li.disabled>a,.sw-theme-dots>ul.step-anchor>li.disabled>a:hover{color:#eee!important}.sw-theme-dots>ul.step-anchor>li.disabled>a:after{background:#eee}@media screen and (max-width:768px){.sw-theme-dots>ul.step-anchor:before{top:0;bottom:0;left:10px;width:5px;height:100%;background-color:#f5f5f5;display:block;margin-right:10px}.sw-theme-dots>ul.step-anchor>li{margin-left:20px;display:block;clear:both}.sw-theme-dots>ul.step-anchor>li>a{text-align:left;margin-left:0;display:block}.sw-theme-dots>ul.step-anchor>li>a:before{top:5px;left:-23px;margin-right:10px;display:block}.sw-theme-dots>ul.step-anchor>li>a:after{top:-38px;left:-31px;margin-right:10px;display:block}} -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_material-v.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */ 12 | 13 | /* SmartWizard Theme: Dots */ 14 | .sw-theme-material-v { 15 | font-family: "Montserrat", sans-serif !important; 16 | background: #fff; 17 | min-height: 50px; 18 | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); 19 | position: relative; 20 | margin-bottom: 30px; 21 | -webkit-border-radius: 2px; 22 | -moz-border-radius: 2px; 23 | -ms-border-radius: 2px; 24 | border-radius: 2px; 25 | float: left; 26 | clear: both; 27 | min-width: 96%; 28 | } 29 | 30 | .sw-theme-material-v .fields_container .tabular-row { 31 | margin-top: 10px; 32 | border-top: 1px solid #c8c8c8; 33 | padding: 5px; 34 | width: 80%; 35 | } 36 | 37 | .sw-theme-material-v .field-heading { 38 | border-bottom: 1px solid rgb(161, 161, 161); 39 | margin-bottom: 31px; 40 | font-size: 1.3em; 41 | } 42 | 43 | .sw-theme-material-v .formwizard_next, 44 | .sw-theme-material-v .formwizard_prev, 45 | .sw-theme-material-v .formwizard_finish { 46 | font-family: inherit !important; 47 | background-color: rgb(76, 117, 175) !important; 48 | } 49 | 50 | .justify-content-end { 51 | -ms-flex-pack: end !important; 52 | justify-content: flex-end !important; 53 | display: flex; 54 | } 55 | 56 | .sw-theme-material-v .step-anchor { 57 | border: 0px; 58 | background-color: #ffffff; 59 | } 60 | 61 | .sw-theme-material-v .sw-container { 62 | min-height: 300px; 63 | width: 73%; 64 | float: left; 65 | margin-left: 15px; 66 | } 67 | 68 | .sw-theme-material-v .sw-btn-group-extra { 69 | float: right !important; 70 | } 71 | 72 | .sw-main .tabular-row i.remove-row { 73 | float: right; 74 | clear: both; 75 | color: #d9534f; 76 | cursor: pointer; 77 | } 78 | 79 | .sw-theme-material-v .step-content { 80 | margin: 0; 81 | padding: 0; 82 | clear: both; 83 | width: 74%; 84 | font-size: 14px; 85 | color: #555; 86 | padding: 20px; 87 | } 88 | 89 | .sw-theme-material-v ul.step-anchor { 90 | list-style: none !important; 91 | padding: 0; 92 | margin: 0; 93 | float: left; 94 | width: 25%; 95 | clear: both; 96 | display: block; 97 | } 98 | 99 | .sw-theme-material-v ul.step-anchor li { 100 | float: none; 101 | display: block; 102 | padding: 0; 103 | box-shadow: 0 0px 1px rgba(0, 0, 0, 0.2); 104 | } 105 | 106 | .sw-theme-material-v .step-anchor a { 107 | -moz-transition: 0.5s; 108 | -o-transition: 0.5s; 109 | -webkit-transition: 0.5s; 110 | transition: 0.5s; 111 | display: block; 112 | width: auto; 113 | padding: 1em 1em; 114 | text-decoration: none; 115 | border: 0px !important; 116 | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); 117 | background: #eee; 118 | color: #aaa !important; 119 | cursor: default; 120 | border-radius: 0px; 121 | } 122 | 123 | .sw-theme-material-v ul.step-anchor>li.active a { 124 | background-color: rgb(76, 117, 175) !important; 125 | color: #fff !important; 126 | cursor: default; 127 | padding: 20px 30px 20px 10px; 128 | } 129 | 130 | .sw-theme-material-v ul.step-anchor li.done a { 131 | background-color: #00ac4899; 132 | color: #fff !important; 133 | } 134 | 135 | .sw-theme-material-v .sw-container .step-content { 136 | min-height: 245px; 137 | -webkit-border-radius: 0; 138 | -moz-border-radius: 0; 139 | -ms-border-radius: 0; 140 | border-radius: 0; 141 | overflow-y: auto; 142 | min-height: 35em; 143 | overflow: hidden; 144 | position: relative; 145 | width: auto; 146 | padding: 5px; 147 | border-top: 0px; 148 | } 149 | 150 | .sw-theme-material-v .sw-toolbar { 151 | padding: 5px; 152 | float: left; 153 | width: 73%; 154 | color: #555; 155 | padding: 10px 20px; 156 | position: relative; 157 | } 158 | 159 | .sw-theme-material-v .sw-toolbar button, 160 | .sw-theme-material-v .sw-toolbar input { 161 | border-radius: 0px; 162 | } 163 | 164 | .sw-theme-material-v .step-content h3 { 165 | font-size: 1.3em; 166 | } 167 | 168 | .sw-theme-material-v .step-content input { 169 | border-radius: 0px; 170 | } 171 | 172 | .sw-theme-material-v .step-content label { 173 | font-size: 12px; 174 | font-weight: normal; 175 | } 176 | 177 | /* Responsive CSS */ 178 | @media screen and (max-width: 800px) { 179 | 180 | .sw-theme-material-v .step-anchor li a, 181 | .sw-theme-material-v .step-anchor li.active a { 182 | padding-right: 0px !important; 183 | } 184 | } -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_material-v.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */.sw-theme-material-v{font-family:Montserrat,sans-serif!important;background:#fff;min-height:50px;box-shadow:0 2px 10px rgba(0,0,0,.2);position:relative;margin-bottom:30px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;border-radius:2px;float:left;clear:both;min-width:96%}.sw-theme-material-v .fields_container .tabular-row{margin-top:10px;border-top:1px solid #c8c8c8;padding:5px;width:80%}.sw-theme-material-v .field-heading{border-bottom:1px solid #a1a1a1;margin-bottom:31px;font-size:1.3em}.sw-theme-material-v .formwizard_finish,.sw-theme-material-v .formwizard_next,.sw-theme-material-v .formwizard_prev{font-family:inherit!important;background-color:#4c75af!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important;display:flex}.sw-theme-material-v .step-anchor{border:0;background-color:#fff}.sw-theme-material-v .sw-container{min-height:300px;width:73%;float:left;margin-left:15px}.sw-theme-material-v .sw-btn-group-extra{float:right!important}.sw-main .tabular-row i.remove-row{float:right;clear:both;color:#d9534f;cursor:pointer}.sw-theme-material-v .step-content{margin:0;padding:0;clear:both;width:74%;font-size:14px;color:#555;padding:20px}.sw-theme-material-v ul.step-anchor{list-style:none!important;padding:0;margin:0;float:left;width:25%;clear:both;display:block}.sw-theme-material-v ul.step-anchor li{float:none;display:block;padding:0;box-shadow:0 0 1px rgba(0,0,0,.2)}.sw-theme-material-v .step-anchor a{-moz-transition:.5s;-o-transition:.5s;-webkit-transition:.5s;transition:.5s;display:block;width:auto;padding:1em 1em;text-decoration:none;border:0!important;box-shadow:0 2px 10px rgba(0,0,0,.2);background:#eee;color:#aaa!important;cursor:default;border-radius:0}.sw-theme-material-v ul.step-anchor>li.active a{background-color:#4c75af!important;color:#fff!important;cursor:default;padding:20px 30px 20px 10px}.sw-theme-material-v ul.step-anchor li.done a{background-color:#00ac4899;color:#fff!important}.sw-theme-material-v .sw-container .step-content{min-height:245px;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;border-radius:0;overflow-y:auto;min-height:35em;overflow:hidden;position:relative;width:auto;padding:5px;border-top:0}.sw-theme-material-v .sw-toolbar{padding:5px;float:left;width:73%;color:#555;padding:10px 20px;position:relative}.sw-theme-material-v .sw-toolbar button,.sw-theme-material-v .sw-toolbar input{border-radius:0}.sw-theme-material-v .step-content h3{font-size:1.3em}.sw-theme-material-v .step-content input{border-radius:0}.sw-theme-material-v .step-content label{font-size:12px;font-weight:400}@media screen and (max-width:800px){.sw-theme-material-v .step-anchor li a,.sw-theme-material-v .step-anchor li.active a{padding-right:0!important}} -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_material.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */ 12 | 13 | /* SmartWizard Theme: Dots */ 14 | .sw-theme-material { 15 | font-family: "Montserrat", sans-serif !important; 16 | background: #fff; 17 | min-height: 50px; 18 | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); 19 | position: relative; 20 | margin-bottom: 30px; 21 | -webkit-border-radius: 2px; 22 | -moz-border-radius: 2px; 23 | -ms-border-radius: 2px; 24 | border-radius: 2px; 25 | /* float: left; */ 26 | /* clear: both; */ 27 | min-width: 96%; 28 | } 29 | 30 | .sw-theme-material .formwizard_next, 31 | .sw-theme-material .formwizard_prev, 32 | .sw-theme-material .formwizard_finish { 33 | font-family: inherit !important; 34 | background-color: teal; 35 | } 36 | 37 | .sw-theme-material .field-heading { 38 | border-bottom: 1px solid rgb(161, 161, 161); 39 | margin-bottom: 31px; 40 | font-size: 1.3em; 41 | } 42 | 43 | .sw-theme-material .fields_container .tabular-row { 44 | margin-top: 10px; 45 | border-top: 1px solid #c8c8c8; 46 | padding: 5px; 47 | width: 80%; 48 | } 49 | 50 | .sw-theme-material .step-anchor { 51 | border: 0px; 52 | background-color: #f5f5f5; 53 | } 54 | 55 | .sw-theme-material .sw-container { 56 | min-height: 300px; 57 | } 58 | 59 | .sw-theme-material .step-content { 60 | padding: 10px 0; 61 | border: none; 62 | background-color: #fff; 63 | text-align: left; 64 | } 65 | 66 | .sw-theme-material ul.step-anchor { 67 | list-style: none !important; 68 | padding: 0; 69 | margin: 0; 70 | } 71 | 72 | .sw-theme-material ul.step-anchor li { 73 | float: left; 74 | display: block; 75 | padding: 0; 76 | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); 77 | } 78 | 79 | .justify-content-end { 80 | -ms-flex-pack: end !important; 81 | justify-content: flex-end !important; 82 | display: flex; 83 | } 84 | 85 | .sw-theme-material .step-anchor a { 86 | -moz-transition: 0.5s; 87 | -o-transition: 0.5s; 88 | -webkit-transition: 0.5s; 89 | transition: 0.5s; 90 | display: block; 91 | width: auto; 92 | padding: 1em 1em; 93 | text-decoration: none; 94 | border: 0px; 95 | } 96 | 97 | .sw-theme-material ul.step-anchor>li a { 98 | background: #eee !important; 99 | color: #aaa !important; 100 | cursor: default; 101 | border-radius: 0px !important; 102 | } 103 | 104 | .sw-theme-material ul.step-anchor>li.active a { 105 | background-color: #009688 !important; 106 | color: #fff !important; 107 | cursor: default; 108 | padding: 1em 3em; 109 | } 110 | 111 | .sw-theme-material ul.step-anchor li.done a { 112 | background-color: rgba(92, 184, 92, 0.6); 113 | color: #fff; 114 | } 115 | 116 | .sw-main .tabular-row i.remove-row { 117 | float: right; 118 | clear: both; 119 | color: #d9534f; 120 | cursor: pointer; 121 | } 122 | 123 | .sw-theme-material .sw-container .step-content { 124 | -webkit-border-radius: 0; 125 | -moz-border-radius: 0; 126 | -ms-border-radius: 0; 127 | border-radius: 0; 128 | overflow-y: auto; 129 | border: 1px solid #ddd; 130 | min-height: 35em; 131 | overflow: hidden; 132 | position: relative; 133 | width: auto; 134 | border-top: 0px; 135 | font-size: 14px; 136 | color: #555; 137 | padding: 20px; 138 | } 139 | 140 | .sw-theme-material .sw-toolbar { 141 | padding: 5px; 142 | border: 1px solid #ddd; 143 | color: #555; 144 | padding: 20px; 145 | position: relative; 146 | border-bottom: 1px solid rgba(204, 204, 204, 0.35); 147 | } 148 | 149 | .sw-theme-material .sw-toolbar button, 150 | .sw-theme-material .sw-toolbar input { 151 | border-radius: 0px; 152 | } 153 | 154 | .sw-theme-material .step-content h3 { 155 | font-size: 1.3em; 156 | } 157 | 158 | .sw-theme-material .step-content input { 159 | border-radius: 0px; 160 | } 161 | 162 | .sw-theme-material .step-content label { 163 | font-size: 12px; 164 | font-weight: normal; 165 | } 166 | 167 | /* Responsive CSS */ 168 | @media screen and (max-width: 768px) {} -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_material.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */.sw-theme-material{font-family:Montserrat,sans-serif!important;background:#fff;min-height:50px;box-shadow:0 2px 10px rgba(0,0,0,.2);position:relative;margin-bottom:30px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;border-radius:2px;min-width:96%}.sw-theme-material .formwizard_finish,.sw-theme-material .formwizard_next,.sw-theme-material .formwizard_prev{font-family:inherit!important;background-color:teal}.sw-theme-material .field-heading{border-bottom:1px solid #a1a1a1;margin-bottom:31px;font-size:1.3em}.sw-theme-material .fields_container .tabular-row{margin-top:10px;border-top:1px solid #c8c8c8;padding:5px;width:80%}.sw-theme-material .step-anchor{border:0;background-color:#f5f5f5}.sw-theme-material .sw-container{min-height:300px}.sw-theme-material .step-content{padding:10px 0;border:none;background-color:#fff;text-align:left}.sw-theme-material ul.step-anchor{list-style:none!important;padding:0;margin:0}.sw-theme-material ul.step-anchor li{float:left;display:block;padding:0;box-shadow:0 2px 10px rgba(0,0,0,.2)}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important;display:flex}.sw-theme-material .step-anchor a{-moz-transition:.5s;-o-transition:.5s;-webkit-transition:.5s;transition:.5s;display:block;width:auto;padding:1em 1em;text-decoration:none;border:0}.sw-theme-material ul.step-anchor>li a{background:#eee!important;color:#aaa!important;cursor:default;border-radius:0!important}.sw-theme-material ul.step-anchor>li.active a{background-color:#009688!important;color:#fff!important;cursor:default;padding:1em 3em}.sw-theme-material ul.step-anchor li.done a{background-color:rgba(92,184,92,.6);color:#fff}.sw-main .tabular-row i.remove-row{float:right;clear:both;color:#d9534f;cursor:pointer}.sw-theme-material .sw-container .step-content{-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;border-radius:0;overflow-y:auto;border:1px solid #ddd;min-height:35em;overflow:hidden;position:relative;width:auto;border-top:0;font-size:14px;color:#555;padding:20px}.sw-theme-material .sw-toolbar{padding:5px;border:1px solid #ddd;color:#555;padding:20px;position:relative;border-bottom:1px solid rgba(204,204,204,.35)}.sw-theme-material .sw-toolbar button,.sw-theme-material .sw-toolbar input{border-radius:0}.sw-theme-material .step-content h3{font-size:1.3em}.sw-theme-material .step-content input{border-radius:0}.sw-theme-material .step-content label{font-size:12px;font-weight:400} -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_tags.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */ 12 | 13 | /* SmartWizard Theme: Dots */ 14 | .sw-theme-tags { 15 | font-family: "Montserrat", sans-serif !important; 16 | background: #fff; 17 | min-height: 50px; 18 | position: relative; 19 | margin-bottom: 30px; 20 | -webkit-border-radius: 2px; 21 | -moz-border-radius: 2px; 22 | -ms-border-radius: 2px; 23 | border-radius: 2px; 24 | min-width: 96%; 25 | } 26 | 27 | 28 | .sw-theme-tags .fields_container .tabular-row { 29 | margin-top: 10px; 30 | border-top: 1px solid #c8c8c8; 31 | padding: 5px; 32 | width: 80%; 33 | } 34 | 35 | .sw-theme-tags .field-heading { 36 | border-bottom: 1px solid rgb(161, 161, 161); 37 | margin-bottom: 31px; 38 | font-size: 1.3em; 39 | } 40 | 41 | .sw-theme-tags .formwizard_next, 42 | .sw-theme-tags .formwizard_prev, 43 | .sw-theme-tags .formwizard_finish { 44 | font-family: inherit !important; 45 | background-color: rgb(76, 117, 175) !important; 46 | } 47 | 48 | .sw-theme-tags .formwizard_next, 49 | .sw-theme-tags .formwizard_finish { 50 | -webkit-clip-path: polygon(0% 0%, 75% 0%, 100% 50%, 75% 100%, 0% 100%); 51 | clip-path: polygon(0% 0%, 75% 0%, 100% 50%, 75% 100%, 0% 100%); 52 | } 53 | 54 | .sw-theme-tags .formwizard_prev { 55 | -webkit-clip-path: polygon(25% 0%, 100% 1%, 100% 100%, 25% 100%, 0% 50%); 56 | clip-path: polygon(25% 0%, 100% 1%, 100% 100%, 25% 100%, 0% 50%); 57 | } 58 | 59 | .justify-content-end { 60 | -ms-flex-pack: end !important; 61 | justify-content: flex-end !important; 62 | display: flex; 63 | } 64 | 65 | .sw-theme-tags .step-anchor { 66 | border: 0px; 67 | background-color: #ffffff; 68 | } 69 | 70 | .sw-theme-tags .sw-container { 71 | min-height: 300px; 72 | box-shadow: 0px 0px 5px 1px #ccc; 73 | 74 | top: 0; 75 | z-index: 10; 76 | background: #fff; 77 | border-radius: 2px; 78 | } 79 | 80 | .sw-theme-tags .sw-btn-group-extra { 81 | float: right !important; 82 | } 83 | 84 | .sw-main .tabular-row i.remove-row { 85 | float: right; 86 | clear: both; 87 | color: #d9534f; 88 | cursor: pointer; 89 | } 90 | 91 | .sw-theme-tags .step-content { 92 | margin: 0; 93 | padding: 0; 94 | clear: both; 95 | width: 74%; 96 | font-size: 14px; 97 | color: #555; 98 | padding: 20px; 99 | } 100 | 101 | .sw-theme-tags ul.step-anchor { 102 | list-style: none !important; 103 | padding: 0; 104 | margin: 0; 105 | width: 25%; 106 | display: block; 107 | position: absolute; 108 | } 109 | 110 | .sw-theme-tags ul.step-anchor li { 111 | float: none; 112 | display: block; 113 | padding: 0; 114 | transition: 1s; 115 | left: 0; 116 | } 117 | 118 | .sw-theme-tags ul.step-anchor li.done,.sw-theme-tags li.nav-item.edit { 119 | left: -65%; 120 | } 121 | 122 | .sw-theme-tags li.nav-item.active { 123 | left: -90%; 124 | } 125 | 126 | .sw-theme-tags .step-anchor a { 127 | -moz-transition: 0.5s; 128 | -o-transition: 0.5s; 129 | -webkit-transition: 0.5s; 130 | transition: 0.5s; 131 | display: block; 132 | width: auto; 133 | padding: 15px 73px; 134 | text-decoration: none; 135 | border: 0px !important; 136 | box-shadow: 0 2px 10px rgb(0, 0, 0); 137 | background: #eee; 138 | color: #aaa !important; 139 | cursor: default; 140 | cursor: pointer; 141 | border-radius: 0; 142 | /* border-top-left-radius: 37px; */ 143 | -webkit-clip-path: polygon(25% 0%, 100% 0%, 100% 100%, 25% 100%, 10% 50%); 144 | clip-path: polygon(25% 0%, 100% 0%, 100% 100%, 25% 100%, 10% 50%); 145 | white-space: nowrap; 146 | } 147 | 148 | .sw-theme-tags .step-anchor a:hover, 149 | .sw-theme-tags .step-anchor a:focus { 150 | color: inherit !important; 151 | 152 | } 153 | 154 | .sw-theme-tags ul.step-anchor>li.active a { 155 | background-color: rgb(76, 158, 175) !important; 156 | color: #fff !important; 157 | cursor: default; 158 | /* padding: 20px 30px 20px 10px; */ 159 | } 160 | 161 | .sw-theme-tags ul.step-anchor li.done a { 162 | background-color: #00ac4899; 163 | color: #fff !important; 164 | -webkit-clip-path: polygon(0% 0%, 75% 0%, 100% 50%, 75% 100%, 0% 100%); 165 | clip-path: polygon(0% 0%, 75% 0%, 100% 50%, 75% 100%, 0% 100%); 166 | padding: 15px 9px; 167 | } 168 | 169 | .sw-theme-tags .sw-container .step-content { 170 | min-height: 245px; 171 | -webkit-border-radius: 0; 172 | -moz-border-radius: 0; 173 | -ms-border-radius: 0; 174 | border-radius: 0; 175 | overflow-y: auto; 176 | min-height: 35em; 177 | overflow: hidden; 178 | position: relative; 179 | width: auto; 180 | padding: 45px; 181 | border-top: 0px; 182 | } 183 | 184 | .sw-theme-tags .sw-toolbar { 185 | width: 100%; 186 | color: #555; 187 | position: absolute; 188 | z-index: 99; 189 | 190 | } 191 | 192 | .sw-theme-tags .sw-toolbar button, 193 | .sw-theme-tags .sw-toolbar input { 194 | border-radius: 0px; 195 | } 196 | 197 | .sw-theme-tags .step-content h3 { 198 | font-size: 1.3em; 199 | } 200 | 201 | .sw-theme-tags .step-content input { 202 | border-radius: 0px; 203 | } 204 | 205 | .sw-theme-tags .step-content label { 206 | font-size: 12px; 207 | font-weight: normal; 208 | } 209 | 210 | 211 | 212 | /* Responsive CSS */ 213 | @media screen and (max-width: 800px) { 214 | 215 | .sw-theme-tags .step-anchor li a, 216 | .sw-theme-tags .step-anchor li.active a { 217 | padding-right: 0px !important; 218 | } 219 | } -------------------------------------------------------------------------------- /src/assets/css/theme/smart_wizard_theme_tags.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Yii2-formwizard 3 | * jQuery Wizard Plugin 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */.sw-theme-tags{font-family:Montserrat,sans-serif!important;background:#fff;min-height:50px;position:relative;margin-bottom:30px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;border-radius:2px;min-width:96%}.sw-theme-tags .fields_container .tabular-row{margin-top:10px;border-top:1px solid #c8c8c8;padding:5px;width:80%}.sw-theme-tags .field-heading{border-bottom:1px solid #a1a1a1;margin-bottom:31px;font-size:1.3em}.sw-theme-tags .formwizard_finish,.sw-theme-tags .formwizard_next,.sw-theme-tags .formwizard_prev{font-family:inherit!important;background-color:#4c75af!important}.sw-theme-tags .formwizard_finish,.sw-theme-tags .formwizard_next{-webkit-clip-path:polygon(0 0,75% 0,100% 50%,75% 100%,0 100%);clip-path:polygon(0 0,75% 0,100% 50%,75% 100%,0 100%)}.sw-theme-tags .formwizard_prev{-webkit-clip-path:polygon(25% 0,100% 1%,100% 100%,25% 100%,0 50%);clip-path:polygon(25% 0,100% 1%,100% 100%,25% 100%,0 50%)}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important;display:flex}.sw-theme-tags .step-anchor{border:0;background-color:#fff}.sw-theme-tags .sw-container{min-height:300px;box-shadow:0 0 5px 1px #ccc;top:0;z-index:10;background:#fff;border-radius:2px}.sw-theme-tags .sw-btn-group-extra{float:right!important}.sw-main .tabular-row i.remove-row{float:right;clear:both;color:#d9534f;cursor:pointer}.sw-theme-tags .step-content{margin:0;padding:0;clear:both;width:74%;font-size:14px;color:#555;padding:20px}.sw-theme-tags ul.step-anchor{list-style:none!important;padding:0;margin:0;width:25%;display:block;position:absolute}.sw-theme-tags ul.step-anchor li{float:none;display:block;padding:0;transition:1s;left:0}.sw-theme-tags li.nav-item.edit,.sw-theme-tags ul.step-anchor li.done{left:-65%}.sw-theme-tags li.nav-item.active{left:-90%}.sw-theme-tags .step-anchor a{-moz-transition:.5s;-o-transition:.5s;-webkit-transition:.5s;transition:.5s;display:block;width:auto;padding:15px 73px;text-decoration:none;border:0!important;box-shadow:0 2px 10px #000;background:#eee;color:#aaa!important;cursor:default;cursor:pointer;border-radius:0;-webkit-clip-path:polygon(25% 0,100% 0,100% 100%,25% 100%,10% 50%);clip-path:polygon(25% 0,100% 0,100% 100%,25% 100%,10% 50%);white-space:nowrap}.sw-theme-tags .step-anchor a:focus,.sw-theme-tags .step-anchor a:hover{color:inherit!important}.sw-theme-tags ul.step-anchor>li.active a{background-color:#4c9eaf!important;color:#fff!important;cursor:default}.sw-theme-tags ul.step-anchor li.done a{background-color:#00ac4899;color:#fff!important;-webkit-clip-path:polygon(0 0,75% 0,100% 50%,75% 100%,0 100%);clip-path:polygon(0 0,75% 0,100% 50%,75% 100%,0 100%);padding:15px 9px}.sw-theme-tags .sw-container .step-content{min-height:245px;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;border-radius:0;overflow-y:auto;min-height:35em;overflow:hidden;position:relative;width:auto;padding:45px;border-top:0}.sw-theme-tags .sw-toolbar{width:100%;color:#555;position:absolute;z-index:99}.sw-theme-tags .sw-toolbar button,.sw-theme-tags .sw-toolbar input{border-radius:0}.sw-theme-tags .step-content h3{font-size:1.3em}.sw-theme-tags .step-content input{border-radius:0}.sw-theme-tags .step-content label{font-size:12px;font-weight:400}@media screen and (max-width:800px){.sw-theme-tags .step-anchor li a,.sw-theme-tags .step-anchor li.active a{padding-right:0!important}} -------------------------------------------------------------------------------- /src/assets/css/theme/waves.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Waves v0.7.5 3 | * http://fian.my.id/Waves 4 | * 5 | * Copyright 2014-2016 Alfiana E. Sibuea and other contributors 6 | * Released under the MIT license 7 | * https://github.com/fians/Waves/blob/master/LICENSE 8 | */ 9 | .waves-effect { 10 | position: relative; 11 | cursor: pointer; 12 | display: inline-block; 13 | overflow: hidden; 14 | -webkit-user-select: none; 15 | -moz-user-select: none; 16 | -ms-user-select: none; 17 | user-select: none; 18 | -webkit-tap-highlight-color: transparent; 19 | } 20 | .waves-effect .waves-ripple { 21 | position: absolute; 22 | border-radius: 50%; 23 | width: 100px; 24 | height: 100px; 25 | margin-top: -50px; 26 | margin-left: -50px; 27 | opacity: 0; 28 | background: rgba(0, 0, 0, 0.2); 29 | background: -webkit-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); 30 | background: -o-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); 31 | background: -moz-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); 32 | background: radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); 33 | -webkit-transition: all 0.5s ease-out; 34 | -moz-transition: all 0.5s ease-out; 35 | -o-transition: all 0.5s ease-out; 36 | transition: all 0.5s ease-out; 37 | -webkit-transition-property: -webkit-transform, opacity; 38 | -moz-transition-property: -moz-transform, opacity; 39 | -o-transition-property: -o-transform, opacity; 40 | transition-property: transform, opacity; 41 | -webkit-transform: scale(0) translate(0, 0); 42 | -moz-transform: scale(0) translate(0, 0); 43 | -ms-transform: scale(0) translate(0, 0); 44 | -o-transform: scale(0) translate(0, 0); 45 | transform: scale(0) translate(0, 0); 46 | pointer-events: none; 47 | } 48 | .waves-effect.waves-light .waves-ripple { 49 | background: rgba(255, 255, 255, 0.4); 50 | background: -webkit-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); 51 | background: -o-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); 52 | background: -moz-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); 53 | background: radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); 54 | } 55 | .waves-effect.waves-classic .waves-ripple { 56 | background: rgba(0, 0, 0, 0.2); 57 | } 58 | .waves-effect.waves-classic.waves-light .waves-ripple { 59 | background: rgba(255, 255, 255, 0.4); 60 | } 61 | .waves-notransition { 62 | -webkit-transition: none !important; 63 | -moz-transition: none !important; 64 | -o-transition: none !important; 65 | transition: none !important; 66 | } 67 | .waves-button, 68 | .waves-circle { 69 | -webkit-transform: translateZ(0); 70 | -moz-transform: translateZ(0); 71 | -ms-transform: translateZ(0); 72 | -o-transform: translateZ(0); 73 | transform: translateZ(0); 74 | -webkit-mask-image: -webkit-radial-gradient(circle, #ffffff 100%, #000000 100%); 75 | } 76 | .waves-button, 77 | .waves-button:hover, 78 | .waves-button:visited, 79 | .waves-button-input { 80 | white-space: nowrap; 81 | vertical-align: middle; 82 | cursor: pointer; 83 | border: none; 84 | outline: none; 85 | color: inherit; 86 | background-color: rgba(0, 0, 0, 0); 87 | font-size: 1em; 88 | line-height: 1em; 89 | text-align: center; 90 | text-decoration: none; 91 | z-index: 1; 92 | } 93 | .waves-button { 94 | padding: 0.85em 1.1em; 95 | border-radius: 0.2em; 96 | } 97 | .waves-button-input { 98 | margin: 0; 99 | padding: 0.85em 1.1em; 100 | } 101 | .waves-input-wrapper { 102 | border-radius: 0.2em; 103 | vertical-align: bottom; 104 | } 105 | .waves-input-wrapper.waves-button { 106 | padding: 0; 107 | } 108 | .waves-input-wrapper .waves-button-input { 109 | position: relative; 110 | top: 0; 111 | left: 0; 112 | z-index: 1; 113 | } 114 | .waves-circle { 115 | text-align: center; 116 | width: 2.5em; 117 | height: 2.5em; 118 | line-height: 2.5em; 119 | border-radius: 50%; 120 | } 121 | .waves-float { 122 | -webkit-mask-image: none; 123 | -webkit-box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12); 124 | box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12); 125 | -webkit-transition: all 300ms; 126 | -moz-transition: all 300ms; 127 | -o-transition: all 300ms; 128 | transition: all 300ms; 129 | } 130 | .waves-float:active { 131 | -webkit-box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3); 132 | box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3); 133 | } 134 | .waves-block { 135 | display: block; 136 | } 137 | 138 | .bg-red { 139 | background-color: #F44336 !important; 140 | color: #fff; 141 | } 142 | 143 | .bg-red .content .text, 144 | .bg-red .content .number { 145 | color: #fff !important; 146 | } 147 | 148 | .bg-pink { 149 | background-color: #E91E63 !important; 150 | color: #fff; 151 | } 152 | 153 | .bg-pink .content .text, 154 | .bg-pink .content .number { 155 | color: #fff !important; 156 | } 157 | 158 | .bg-purple { 159 | background-color: #9C27B0 !important; 160 | color: #fff; 161 | } 162 | 163 | .bg-purple .content .text, 164 | .bg-purple .content .number { 165 | color: #fff !important; 166 | } 167 | 168 | .bg-deep-purple { 169 | background-color: #673AB7 !important; 170 | color: #fff; 171 | } 172 | 173 | .bg-deep-purple .content .text, 174 | .bg-deep-purple .content .number { 175 | color: #fff !important; 176 | } 177 | 178 | .bg-indigo { 179 | background-color: #3F51B5 !important; 180 | color: #fff; 181 | } 182 | 183 | .bg-indigo .content .text, 184 | .bg-indigo .content .number { 185 | color: #fff !important; 186 | } 187 | 188 | .bg-blue { 189 | background-color: #2196F3 !important; 190 | color: #fff; 191 | } 192 | 193 | .bg-blue .content .text, 194 | .bg-blue .content .number { 195 | color: #fff !important; 196 | } 197 | 198 | .bg-light-blue { 199 | background-color: #03A9F4 !important; 200 | color: #fff; 201 | } 202 | 203 | .bg-light-blue .content .text, 204 | .bg-light-blue .content .number { 205 | color: #fff !important; 206 | } 207 | 208 | .bg-cyan { 209 | background-color: #00BCD4 !important; 210 | color: #fff; 211 | } 212 | 213 | .bg-cyan .content .text, 214 | .bg-cyan .content .number { 215 | color: #fff !important; 216 | } 217 | 218 | .bg-teal { 219 | background-color: #009688 !important; 220 | color: #fff; 221 | } 222 | 223 | .bg-teal .content .text, 224 | .bg-teal .content .number { 225 | color: #fff !important; 226 | } 227 | 228 | .bg-green { 229 | background-color: #4CAF50 !important; 230 | color: #fff; 231 | } 232 | 233 | .bg-green .content .text, 234 | .bg-green .content .number { 235 | color: #fff !important; 236 | } 237 | 238 | .bg-light-green { 239 | background-color: #8BC34A !important; 240 | color: #fff; 241 | } 242 | 243 | .bg-light-green .content .text, 244 | .bg-light-green .content .number { 245 | color: #fff !important; 246 | } 247 | 248 | .bg-lime { 249 | background-color: #CDDC39 !important; 250 | color: #fff; 251 | } 252 | 253 | .bg-lime .content .text, 254 | .bg-lime .content .number { 255 | color: #fff !important; 256 | } 257 | 258 | .bg-yellow { 259 | background-color: #ffe821 !important; 260 | color: #fff; 261 | } 262 | 263 | .bg-yellow .content .text, 264 | .bg-yellow .content .number { 265 | color: #fff !important; 266 | } 267 | 268 | .bg-amber { 269 | background-color: #FFC107 !important; 270 | color: #fff; 271 | } 272 | 273 | .bg-amber .content .text, 274 | .bg-amber .content .number { 275 | color: #fff !important; 276 | } 277 | 278 | .bg-orange { 279 | background-color: #FF9800 !important; 280 | color: #fff; 281 | } 282 | 283 | .bg-orange .content .text, 284 | .bg-orange .content .number { 285 | color: #fff !important; 286 | } 287 | 288 | .bg-deep-orange { 289 | background-color: #FF5722 !important; 290 | color: #fff; 291 | } 292 | 293 | .bg-deep-orange .content .text, 294 | .bg-deep-orange .content .number { 295 | color: #fff !important; 296 | } 297 | 298 | .bg-brown { 299 | background-color: #795548 !important; 300 | color: #fff; 301 | } 302 | 303 | .bg-brown .content .text, 304 | .bg-brown .content .number { 305 | color: #fff !important; 306 | } 307 | 308 | .bg-grey { 309 | background-color: #9E9E9E !important; 310 | color: #fff; 311 | } 312 | 313 | .bg-grey .content .text, 314 | .bg-grey .content .number { 315 | color: #fff !important; 316 | } 317 | 318 | .bg-blue-grey { 319 | background-color: #607D8B !important; 320 | color: #fff; 321 | } 322 | 323 | .bg-blue-grey .content .text, 324 | .bg-blue-grey .content .number { 325 | color: #fff !important; 326 | } 327 | 328 | .bg-black { 329 | background-color: #000000 !important; 330 | color: #fff; 331 | } 332 | 333 | .bg-black .content .text, 334 | .bg-black .content .number { 335 | color: #fff !important; 336 | } 337 | 338 | .bg-white { 339 | background-color: #ffffff !important; 340 | color: #fff; 341 | } 342 | 343 | .bg-white .content .text, 344 | .bg-white .content .number { 345 | color: #fff !important; 346 | } 347 | .sw-main .btn { 348 | margin-right: 8px; 349 | margin-bottom: 13px; 350 | min-width: 120px; 351 | border-bottom: none !important; 352 | color: #fff !important; 353 | } -------------------------------------------------------------------------------- /src/assets/js/formwizard.min.js: -------------------------------------------------------------------------------- 1 | if("undefined"==typeof jQuery)throw new Error("jQuery plugins need to be before formizard.js file.");$.formwizard={triggerEvent:(e,t,r)=>{$(t).trigger(e,r)},currentButtonTarget:null,resetCurrentTarget:!0,observerObj:null,fields:[],previewHeadings:[],previewEmptyText:"",options:[],submit:!1,helper:{showMessage:e=>{alert(e)},removeField:e=>{let t=$(e).closest("form").attr("id"),r=$.formwizard.helper.currentIndex("#"+t),i=$(e).attr("id"),a=$.formwizard.fields[t][r];$.formwizard.fields[t][r]=$.grep(a,function(e){return e!=i})},clearField:e=>{$(e).val("")},addField:(e,t,r)=>{$.formwizard.fields[e][r].push(t.id)},shake:function(e){$(e+" .sw-main").addClass("shake animated"),setTimeout(function(){$(e+" .sw-main").removeClass("shake animated")},1e3)},appendButtons:function({form:e,labelNext:t,labelPrev:r,labelFinish:i,labelRestore:a,iconNext:o,iconPrev:s,iconFinish:n,iconRestore:d,classNext:l,classPrev:f,classFinish:c,classRestore:u,enablePersistence:p=!1}){let m=[];p&&m.push($('').html(d+" "+a).addClass(u)),m.push($('').html(s+" "+r).addClass(f).on("click",function(e){e.preventDefault(),$.formwizard.formNavigation.previous(e.target)}));let w=$('').html(t+" "+o).addClass(l);m.push(w);let h=$('').html(n+" "+i).addClass(c);m.push(h);var v=w.add(h);return $(v).on("click",function(t){t.preventDefault(),setTimeout(function(){if($(e).yiiActiveForm("data").attributes.length)return $.formwizard.formValidation.run(e,t);$(t.target).hasClass("formwizard_finish")&&$(e).yiiActiveForm("submitForm"),$.formwizard.formNavigation.next(t.target)},200)}),m},updateButtons:function(e){$(e).on("showStep",function(t,r,i,a,o){let s=$(e+" > .sw-toolbar > .sw-btn-group-extra button.formwizard_prev"),n=$(e+" > .sw-toolbar > .sw-btn-group-extra >button.formwizard_finish"),d=$(e+" > .sw-toolbar > .sw-btn-group-extra >button.formwizard_next ");"first"===o?(s.addClass("disabled"),n.addClass("hidden d-none"),d.removeClass("hidden d-none")):"final"===o?(d.addClass("hidden d-none"),n.removeClass("hidden d-none"),s.removeClass("disabled hidden d-none"),$.formwizard.previewStep.add(e)):(s.removeClass("disabled"),d.removeClass("disabled hidden d-none"),n.addClass("hidden d-none"))})},currentIndex:function(e){return $(e+" ul.step-anchor>li.active").index()}},previewStep:{add:e=>{let t=$.formwizard.options,r=$(e).closest("form").attr("id"),i=document.createDocumentFragment(),a=$.formwizard.helper.currentIndex("#"+r),o=document.querySelector("#step-"+a),s=t[r].bsVersion,n=t[r].classListGroup,d=t[r].classListGroupHeading;if(o.querySelectorAll("."+n).forEach(e=>{e.remove()}),t.hasOwnProperty(r)&&t[r].enablePreview){$.formwizard.fields[r].forEach(function(a,o){let l=document.createElement("div");l.setAttribute("class",n+" preview-container"),l.dataset.step=o;let f=$(e).find("#step-"+o).data("step").type,c=""==$.formwizard.previewHeadings[o]?"Step "+parseInt(o+1):$.formwizard.previewHeadings[o],u='

'+c+"

";a.forEach(function(i,n){let d=$.formwizard.previewStep.getLabel(i),l=$.formwizard.previewStep.getValue(r,i),c={label:""==d?$.formwizard.previewEmptyText:d,value:""==l?$.formwizard.previewEmptyText:l,target:i};if("hidden"!==$("#"+r+" #"+i).attr("type")&&(u+=$.formwizard.previewStep.getTemplate(c,s,t[r])),"tabular"==f){let t=$(e).find("#step-"+o).find(".fields_container .tabular-row").length;divider=a.length/t,(n+1)%divider==0&&(u+='
')}}),l.innerHTML=u,i.appendChild(l)}),o.appendChild(i),$(".preview-button").on("click",function(t){let r=$(this).closest("div.preview-container").data("step");$.formwizard.formNavigation.goToStep(e,r),$.formwizard.previewStep.highlightTarget($(this).val())})}},getLabel:e=>{let t=$("#"+e).siblings("label").text();return""!==t?t:$("#"+e).attr("placeholder")},getValue:(e,t)=>{let r=$("#"+e+" #"+t),i=function(){if(""!==$.formwizard.previewEmptyText){let r=$("#"+e+" #"+t+" option:selected").val(),i=$("#"+e+" #"+t+" option:selected").text();return""==r?"NA"==$.formwizard.previewEmptyText?i:$.formwizard.previewEmptyText:$("#"+e+" #"+t+" option:selected").text()}return $("#"+e+" #"+t+" option:selected").text()},a=function(){let e=r.find("input:checked");return e.length?e.val():""},o=function(){let e=r.find("input:checked"),t="";return e.each(function(e,r){t+=$(r).val()+","}),t},s=function(){return r.is(":checked")?r.val():""},n=function(){return r.get(0).files.length+" files"};return r.is("select")?i():r.is("div")&&"radiogroup"==r.attr("role")?a():r.is("div")?o():"checkbox"==r.attr("type")?s():"file"==r.attr("type")?n():r.val()},getTemplate:(e,t,r)=>{let i=4==t?"list-group-item-action":"";return``},highlightTarget:function(e){$(".field-"+e).addClass("notify-target"),setTimeout(function(){$(".field-"+e).removeClass("notify-target")},2e3)}},formValidation:{run:function(e,t){$.formwizard.resetCurrentTarget=!1,$.formwizard.currentButtonTarget=t.target,$(e).yiiActiveForm("validate",!0)},bindAfterValidate:function(e){$(e).on("beforeValidate",function(t,r,i){let a=$(this).attr("id"),o=$.formwizard.helper.currentIndex(e);const s=$("#step-"+o).data("step").skipable;let n=!0;$("#step-"+o+" .fields_container").find(":input").each(function(e,t){if(inputTypes={text:function(e){if(""!==$(e).val())return!1},radio:function(e){return!$(e).is(":checked")},"select-one":function(e){if(""!==$(e).val())return!1},"select-multiple":function(e){if(""!==$(e).val())return!1},number:function(e){if(""!==$(e).val())return!1},range:function(e){if(""!==$(e).val())return!1},password:function(e){if(""!==$(e).val())return!1},file:function(e){if(""!==$(e).val())return!1}},inputTypes.hasOwnProperty(t.type)&&!1===inputTypes[t.type].call(this,t))return n=!1,!1}),s&&n&&$.each($.formwizard.fields[a][o],function(e,t){$("#"+a).yiiActiveForm("remove",t)})}).on("afterValidate",function(t,r,i){$.formwizard.resetCurrentTarget&&($.formwizard.currentButtonTarget=null),t.preventDefault();let a=$(this).attr("id"),o=$.formwizard.helper.currentIndex(e);const s=o==$(e+" .step-anchor").find("li").length-1,n=$.formwizard.options[a].enablePreview&&s,d=$("#step-"+o).data("step").skipable;let l=n||d?0:$.formwizard.fields[a][o].diff(r);if(!$.formwizard.formValidation.editModeErrors(a,r)){if(l.length)!1===$.formwizard.resetCurrentTarget&&$.formwizard.helper.shake(e);else{if(s)return $.formwizard.submit=!0,!0;$(e).yiiActiveForm("resetForm"),null!==$.formwizard.currentButtonTarget&&$.formwizard.formNavigation.next($.formwizard.currentButtonTarget)}return!1}}).on("beforeSubmit",function(e){return e.preventDefault(),!!$.formwizard.submit&&($.formwizard.persistence.clearStorage(),!0)})},editModeErrors:function(e,t){if($.formwizard.options[e].editMode){let r=$.formwizard.fields[e],i=[];$.each(r,function(e,r){!$("#step-"+e).data("step").skipable&&r.diff(t).length&&i.push(e)});let a=$.formwizard.options[e].wizardContainerId;if($("#"+a).smartWizard("updateErrorStep",i),i.length)return $.formwizard.formNavigation.goToStep("#"+a,i[0]),!0}},isValid:function(e){for(var t in e)if(e[t].length>0)return!0;return!1},updateErrorMessages:function(e,t){for(var r in t)if(t[r].length){let i=r.replace(/\-([0-9]+)/g,"");$(e).yiiActiveForm("updateAttribute",i,t[r])}},addField:(e,t)=>{$("#"+e).yiiActiveForm("add",t)},removeField:e=>{let t=$(e).closest("form").attr("id");$("#"+t).yiiActiveForm("remove",e.id)}},formNavigation:{next:e=>{let t=$(e).parent().closest(".sw-main").attr("id");$("#"+t).smartWizard("next")},goToStep:(e,t)=>{$(e).smartWizard("goToStep",t)},previous:e=>{let t=$(e).parent().closest(".sw-main").attr("id");$("#"+t).smartWizard("prev")}},observer:{start:function(e){var t=document.querySelector(e);$.formwizard.observerObj=$.formwizard.observer.observerInstance(e);$.formwizard.observerObj.observe(t,{childList:!0,attributes:!0,subtree:!1})},observerInstance:function(e){return new MutationObserver(function(t){t.forEach(function(t){"childList"==t.type&&(void 0!==$.themematerial&&$.themematerial.init(),$.formwizard.init(e),$.formwizard.observerObj.disconnect())})})}},tabular:{addRow:e=>{let t=$(e).siblings(".fields_container"),r=t.find(".tabular-row").length;if(r===t.data("rows-limit"))return void $.formwizard.helper.showMessage("Cannot add any more.");let i=document.createDocumentFragment(),a=$(t)[0].firstChild,o=$(e).closest("form").attr("id"),s=$.formwizard.helper.currentIndex("#"+o),n=$.formwizard.tabular,d=$(a).find("input,select,textarea"),l=$.formwizard.triggerEvent;d.each(function(e,t){void 0!==$(t).attr("id")&&l("formwizard.beforeClone","#"+o+" #step-"+s+" #"+t.id)}),i.appendChild(a.cloneNode(!0)),d.each(function(e,t){void 0!==$(t).attr("id")&&l("formwizard.afterClone","#"+o+" #step-"+s+" #"+t.id)});let f=i.querySelector("div.tabular-row");f.id=f.id.replace(/\_[^\_]+$/,"_"+parseInt(r));let c=[];i.querySelectorAll("input,select,textarea").forEach(function(e,t){let i=e.id;if(n.updateFieldAttributes(e,r),void 0!==$(e).attr("id")){let t=n.setFieldDefaults(e,o,i);$.formwizard.helper.addField(o,e,s),c.push(e.id),void 0!==t&&$.formwizard.formValidation.addField(o,t)}}),$(t)[0].appendChild(i),document.querySelector("#row_"+r+" i.remove-row").dataset.rowid=r,l("formwizard.afterInsert","#"+o+" #step-"+s+" #row_"+r,{rowIndex:r})},removeRow:e=>{let t=$("#row_"+e),r=1==t.closest(".fields_container").find(".tabular-row").length;t.find("textarea,input,select").each(function(e,t){if(r)return $.formwizard.helper.clearField(t);$.formwizard.helper.removeField(t),$.formwizard.formValidation.removeField(t)}),!r&&t.remove()},setFieldDefaults:(e,t,r)=>{let i,a=e.name.match(/(\[[\d]{0,}\].*)/),o=$("#"+t).yiiActiveForm("find",r);return void 0!==o&&(i={id:e.id,name:a[0],container:".field-"+e.id,input:"#"+e.id,error:".help-block.help-block-error",value:e.value,status:0,validate:o.hasOwnProperty("validate")?o.validate:function(e,t,r,i,a){}}),i},updateFieldAttributes:(e,t)=>{let r=$(e).parent().hasClass("field-"+e.id);if(void 0!==$(e).attr("id")&&(e.id=e.id.replace(/\-([\d]+)\-/,"-"+parseInt(t)+"-")),e.name=e.name.replace(/\[([\d]+)\]/,"["+parseInt(t)+"]"),e.value="",r){let t=$(e).parent();$(t).removeClassesExceptThese(["form-group","required"]),$(t).addClass("field-"+e.id),$(t).find("label").attr("for",e.id),$(t).find(".help-block").html("")}}},init:e=>{$(e).on("click",".remove-row",function(e){$.formwizard.tabular.removeRow($(this).data("rowid"))}),$(e+" .add_row").on("click",function(e){$.formwizard.tabular.addRow($(this))}),$(e).find(":input:not(button)").on("blur change",function(e){e.preventDefault(),$.formwizard.resetCurrentTarget=!0})},persistence:{assign:(e,t,r)=>{lastKeyIndex=t.length-1;for(var i=0;i{let i=e.id,a=$(e).get(0).type,o=r.number,s=r.type;$.formwizard.persistence.storageFields.hasOwnProperty("step-"+o)||($.formwizard.persistence.storageFields["step-"+o]={stepType:s,fields:{}});let n={"select-one":e=>{if("tabular"==$.formwizard.persistence.storageFields["step-"+o].stepType){let r=$("#"+t+" #"+e).closest("div.tabular-row").attr("id");$.formwizard.persistence.storageFields["step-"+o].fields.hasOwnProperty(r)||($.formwizard.persistence.storageFields["step-"+o].fields[r]={}),$.formwizard.persistence.storageFields["step-"+o].fields[r][e]=document.querySelector("#"+t+" #"+e).value}else $.formwizard.persistence.storageFields["step-"+o].fields[e]=document.querySelector("#"+t+" #"+e).value},text:function(e){if("tabular"==$.formwizard.persistence.storageFields["step-"+o].stepType){let r=$("#"+t+" #"+e).closest("div.tabular-row").attr("id");$.formwizard.persistence.storageFields["step-"+o].fields.hasOwnProperty(r)||($.formwizard.persistence.storageFields["step-"+o].fields[r]={}),$.formwizard.persistence.storageFields["step-"+o].fields[r][e]=document.querySelector("#"+t+" #"+e).value}else $.formwizard.persistence.storageFields["step-"+o].fields[e]=document.querySelector("#"+t+" #"+e).value},radio:e=>{let r=$("#"+t+" #"+e).closest('div[role="radiogroup"]').find("input:radio");if("tabular"==$.formwizard.persistence.storageFields["step-"+o].stepType){let i=$("#"+t+" #"+e).closest("div.tabular-row").attr("id");$.formwizard.persistence.storageFields["step-"+o].fields.hasOwnProperty(i)||($.formwizard.persistence.storageFields["step-"+o].fields[i]={}),r.length?r.each(function(e,t){$.formwizard.persistence.storageFields["step-"+o].fields[i][t.id]=t.checked}):$.formwizard.persistence.storageFields["step-"+o].fields[i][e]=$("#"+t+" #"+e).is(":checked")}else r.length?r.each(function(e,t){$.formwizard.persistence.storageFields["step-"+o].fields[t.id]=t.checked}):$.formwizard.persistence.storageFields["step-"+o].fields[e]=$("#"+t+" #"+e).is(":checked")},checkbox:e=>{let r=$("#"+t+" #"+e).attr("name").match(/\[\]$/g);if("tabular"==$.formwizard.persistence.storageFields["step-"+o].stepType){let i=$("#"+t+" #"+e).closest("div.tabular-row").attr("id");if($.formwizard.persistence.storageFields["step-"+o].fields.hasOwnProperty(i)||($.formwizard.persistence.storageFields["step-"+o].fields[i]={}),r.length){$("input[name='"+$("#"+t+" #"+e).attr("name")+"']").each(function(e,t){$.formwizard.persistence.storageFields["step-"+o].fields[i][t.id]=t.checked})}else $.formwizard.persistence.storageFields["step-"+o].fields[i][e]=$("#"+t+" #"+e).is(":checked")}else if(r&&r.length){$("input[name='"+$("#"+t+" #"+e).attr("name")+"']").each(function(e,t){$.formwizard.persistence.storageFields["step-"+o].fields[t.id]=t.checked})}else $.formwizard.persistence.storageFields["step-"+o].fields[e]=$("#"+t+" #"+e).is(":checked")}};n.hasOwnProperty(a)&&n[a].call(this,i),localStorage.setItem("formwizard."+t,JSON.stringify($.formwizard.persistence.storageFields))},clearStorage:()=>{for(var e in localStorage)0==e.indexOf("formwizard.")&&localStorage.removeItem(e);$.formwizard.persistence.storageFields={}},loadForm:e=>{$.formwizard.persistence.storageFields=JSON.parse(localStorage.getItem("formwizard."+e));let t=$.formwizard.persistence.storageFields,r={"select-one":(t,r)=>{document.querySelector("#"+e+" #"+t).value=r,$("#"+t).trigger("change"),$.formwizard.triggerEvent("formwizard."+e+".afterRestore","#"+e+" #"+t,{fieldId:t,fieldValue:r})},text:function(t,r){document.querySelector("#"+e+" #"+t).value=r,$.formwizard.triggerEvent("formwizard."+e+".afterRestore","#"+e+" #"+t,{fieldId:t,fieldValue:r})},radio:(t,r)=>{document.querySelector("#"+e+" #"+t).checked=r,$.formwizard.triggerEvent("formwizard."+e+".afterRestore","#"+e+" #"+t,{fieldId:t,fieldValue:r})},checkbox:(t,r)=>{document.querySelector("#"+e+" #"+t).checked=r,$.formwizard.triggerEvent("formwizard."+e+".afterRestore","#"+e+" #"+t,{fieldId:t,fieldValue:r})}};for(let e in t)if(t.hasOwnProperty(e)){let i=t[e];if("tabular"==i.stepType){$.formwizard.persistence.tabularData(i,e,r);continue}let a=i.fields;for(let e in a)if(a.hasOwnProperty(e)){let t=a[e],i=$("#"+e).get(0).type;r.hasOwnProperty(i)&&r[i].call(this,e,t)}}},tabularData:function(e,t,r){let i=e.fields,a=Object.keys(i).length;if(a>1)for(let e=1;e<=a-1;e++)$("#"+t+" .add_row").trigger("click");for(let e in i)if(i.hasOwnProperty(e)){let t=i[e];for(let e in t)if(t.hasOwnProperty(e)){let i=t[e],a=$("#"+e).get(0).type;r.hasOwnProperty(a)&&r[a].call(this,e,i)}}},init:e=>{$(document).on("change","#"+e+" :input",function(t){let r=$(this).closest("div.step-content").data("step");$.formwizard.persistence.savefield(t.currentTarget,e,r)}),$("#"+e+" button.formwizard_restore").on("click",function(t){t.preventDefault(),$.formwizard.persistence.loadForm(e)})}}},Array.prototype.classDiff=function(e){return this.filter(function(t){return e.indexOf(t)<0})},$.fn.removeClassesExceptThese=function(e){var t=$(this);if(t.length>0){var r=t.attr("class").split(" ").classDiff(e);t.removeClass(r.join(" ")).addClass(e.join(" "))}return t},Array.prototype.diff=function(e){var t=[];for(var r in this)this.hasOwnProperty(r)&&e.hasOwnProperty(this[r])&&e[this[r]].length>0&&t.push(this[r]);return t}; -------------------------------------------------------------------------------- /src/assets/js/jquery.smartWizard.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * SmartWizard v4.3.1 3 | * The awesome jQuery step wizard plugin with Bootstrap support 4 | * http://www.techlaboratory.net/smartwizard 5 | * 6 | * Created by Dipu Raj 7 | * http://dipuraj.me 8 | * 9 | * Licensed under the terms of the MIT License 10 | * https://github.com/techlab/SmartWizard/blob/master/LICENSE 11 | */ 12 | !function(t,s,e,n){"use strict";function i(s,e){this.options=t.extend(!0,{},o,e),this.main=t(s),this.nav=this.main.children("ul"),this.steps=t("li > a",this.nav),this.container=this.main.children("div"),this.pages=this.container.children("div"),this.current_index=null,this.options.toolbarSettings.toolbarButtonPosition="right"===this.options.toolbarSettings.toolbarButtonPosition?"end":this.options.toolbarSettings.toolbarButtonPosition,this.options.toolbarSettings.toolbarButtonPosition="left"===this.options.toolbarSettings.toolbarButtonPosition?"start":this.options.toolbarSettings.toolbarButtonPosition,this.options.theme=null===this.options.theme||""===this.options.theme?"default":this.options.theme,this.init()}var o={selected:0,keyNavigation:!0,autoAdjustHeight:!0,cycleSteps:!1,backButtonSupport:!0,useURLhash:!0,showStepURLhash:!0,lang:{next:"Next",previous:"Previous"},toolbarSettings:{toolbarPosition:"bottom",toolbarButtonPosition:"end",showNextButton:!0,showPreviousButton:!0,toolbarExtraButtons:[]},anchorSettings:{anchorClickable:!0,enableAllAnchors:!1,markDoneStep:!0,markAllPreviousStepsAsDone:!0,removeDoneStepOnNavigateBack:!1,enableAnchorOnDoneStep:!0},contentURL:null,contentCache:!0,ajaxSettings:{},disabledSteps:[],errorSteps:[],hiddenSteps:[],theme:"default",transitionEffect:"none",transitionSpeed:"400"};t.extend(i.prototype,{init:function(){this._setElements(),this._setToolbar(),this._setEvents();var e=this.options.selected;if(this.options.useURLhash){var n=s.location.hash;if(n&&n.length>0){var i=t("a[href*='"+n+"']",this.nav);if(i.length>0){var o=this.steps.index(i);e=o>=0?o:e}}}e>0&&this.options.anchorSettings.markDoneStep&&this.options.anchorSettings.markAllPreviousStepsAsDone&&this.steps.eq(e).parent("li").prevAll().addClass("done"),this._showStep(e)},_setElements:function(){this.main.addClass("sw-main sw-theme-"+this.options.theme),this.nav.addClass("nav nav-tabs step-anchor").children("li").addClass("nav-item").children("a").addClass("nav-link"),this.options.anchorSettings.enableAllAnchors!==!1&&this.options.anchorSettings.anchorClickable!==!1&&this.steps.parent("li").addClass("clickable"),this.container.addClass("sw-container tab-content"),this.pages.addClass("tab-pane step-content");var s=this;return this.options.disabledSteps&&this.options.disabledSteps.length>0&&t.each(this.options.disabledSteps,function(t,e){s.steps.eq(e).parent("li").addClass("disabled")}),this.options.errorSteps&&this.options.errorSteps.length>0&&t.each(this.options.errorSteps,function(t,e){s.steps.eq(e).parent("li").addClass("danger")}),this.options.hiddenSteps&&this.options.hiddenSteps.length>0&&t.each(this.options.hiddenSteps,function(t,e){s.steps.eq(e).parent("li").addClass("hidden")}),!0},_setToolbar:function(){if("none"===this.options.toolbarSettings.toolbarPosition)return!0;var s=this.options.toolbarSettings.showNextButton!==!1?t("").text(this.options.lang.next).addClass("btn btn-secondary sw-btn-next").attr("type","button"):null,e=this.options.toolbarSettings.showPreviousButton!==!1?t("").text(this.options.lang.previous).addClass("btn btn-secondary sw-btn-prev").attr("type","button"):null,n=t("
").addClass("btn-group mr-2 sw-btn-group").attr("role","group").append(e,s),i=null;this.options.toolbarSettings.toolbarExtraButtons&&this.options.toolbarSettings.toolbarExtraButtons.length>0&&(i=t("
").addClass("btn-group mr-2 sw-btn-group-extra").attr("role","group"),t.each(this.options.toolbarSettings.toolbarExtraButtons,function(t,s){i.append(s.clone(!0))}));var o,a;switch(this.options.toolbarSettings.toolbarPosition){case"top":o=t("
").addClass("btn-toolbar sw-toolbar sw-toolbar-top justify-content-"+this.options.toolbarSettings.toolbarButtonPosition),o.append(n),"start"===this.options.toolbarSettings.toolbarButtonPosition?o.prepend(i):o.append(i),this.container.before(o);break;case"bottom":a=t("
").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition),a.append(n),"start"===this.options.toolbarSettings.toolbarButtonPosition?a.prepend(i):a.append(i),this.container.after(a);break;case"both":o=t("
").addClass("btn-toolbar sw-toolbar sw-toolbar-top justify-content-"+this.options.toolbarSettings.toolbarButtonPosition),o.append(n),"start"===this.options.toolbarSettings.toolbarButtonPosition?o.prepend(i):o.append(i),this.container.before(o),a=t("
").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition),a.append(n.clone(!0)),null!==i&&("start"===this.options.toolbarSettings.toolbarButtonPosition?a.prepend(i.clone(!0)):a.append(i.clone(!0))),this.container.after(a);break;default:a=t("
").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition),a.append(n),this.options.toolbarSettings.toolbarButtonPosition,a.append(i),this.container.after(a)}return!0},_setEvents:function(){var n=this;return t(this.steps).on("click",function(t){if(t.preventDefault(),n.options.anchorSettings.anchorClickable===!1)return!0;var s=n.steps.index(this);if(n.options.anchorSettings.enableAnchorOnDoneStep===!1&&n.steps.eq(s).parent("li").hasClass("done"))return!0;s!==n.current_index&&(n.options.anchorSettings.enableAllAnchors!==!1&&n.options.anchorSettings.anchorClickable!==!1?n._showStep(s):n.steps.eq(s).parent("li").hasClass("done")&&n._showStep(s))}),t(".sw-btn-next",this.main).on("click",function(t){t.preventDefault(),n._showNext()}),t(".sw-btn-prev",this.main).on("click",function(t){t.preventDefault(),n._showPrevious()}),this.options.keyNavigation&&t(e).keyup(function(t){n._keyNav(t)}),this.options.backButtonSupport&&t(s).on("hashchange",function(e){if(!n.options.useURLhash)return!0;if(s.location.hash){var i=t("a[href*='"+s.location.hash+"']",n.nav);i&&i.length>0&&(e.preventDefault(),n._showStep(n.steps.index(i)))}}),!0},_showNext:function(){for(var t=this.current_index+1,s=t;s=0;s--)if(!this.steps.eq(s).parent("li").hasClass("disabled")&&!this.steps.eq(s).parent("li").hasClass("hidden")){t=s;break}if(0>t){if(!this.options.cycleSteps)return!1;t=this.steps.length-1}return this._showStep(t),!0},_showStep:function(t){return!!this.steps.eq(t)&&(t!=this.current_index&&(!this.steps.eq(t).parent("li").hasClass("disabled")&&!this.steps.eq(t).parent("li").hasClass("hidden")&&(this._loadStepContent(t),!0)))},_loadStepContent:function(s){var e=this,n=this.steps.eq(this.current_index),i="",o=this.steps.eq(s),a=o.data("content-url")&&o.data("content-url").length>0?o.data("content-url"):this.options.contentURL;if(null!==this.current_index&&this.current_index!==s&&(i=this.current_index0)||o.data("has-content")&&this.options.contentCache)this._transitPage(s);else{var r=o.length>0?t(o.attr("href"),this.main):null,h=t.extend(!0,{},{url:a,type:"POST",data:{step_number:s},dataType:"text",beforeSend:function(){e._loader("show")},error:function(s,n,i){e._loader("hide"),t.error(i)},success:function(t){t&&t.length>0&&(o.data("has-content",!0),r.html(t)),e._loader("hide"),e._transitPage(s)}},this.options.ajaxSettings);t.ajax(h)}return!0},_transitPage:function(s){var e=this,n=this.steps.eq(this.current_index),i=n.length>0?t(n.attr("href"),this.main):null,o=this.steps.eq(s),a=o.length>0?t(o.attr("href"),this.main):null,r="";null!==this.current_index&&this.current_index!==s&&(r=this.current_index0?i.slideUp("fast",this.options.transitionEasing,function(){a.slideDown(e.options.transitionSpeed,e.options.transitionEasing)}):a.slideDown(this.options.transitionSpeed,this.options.transitionEasing):"fade"===this.options.transitionEffect?i&&i.length>0?i.fadeOut("fast",this.options.transitionEasing,function(){a.fadeIn("fast",e.options.transitionEasing,function(){t(this).show()})}):a.fadeIn(this.options.transitionSpeed,this.options.transitionEasing,function(){t(this).show()}):(i&&i.length>0&&i.hide(),a.show()),this._setURLHash(o.attr("href")),this._setAnchor(s),this._setButtons(s),this._fixHeight(s),this.current_index=s,this._triggerEvent("showStep",[o,this.current_index,r,h]),!0},_setAnchor:function(t){return this.steps.eq(this.current_index).parent("li").removeClass("active"),this.options.anchorSettings.markDoneStep!==!1&&null!==this.current_index&&(this.steps.eq(this.current_index).parent("li").addClass("done"),this.options.anchorSettings.removeDoneStepOnNavigateBack!==!1&&this.steps.eq(t).parent("li").nextAll().removeClass("done")),this.steps.eq(t).parent("li").removeClass("done").addClass("active"),!0},_setButtons:function(s){return this.options.cycleSteps||(0>=s?t(".sw-btn-prev",this.main).addClass("disabled"):t(".sw-btn-prev",this.main).removeClass("disabled"),this.steps.length-1<=s?t(".sw-btn-next",this.main).addClass("disabled"):t(".sw-btn-next",this.main).removeClass("disabled")),!0},_keyNav:function(t){var s=this;switch(t.which){case 37:s._showPrevious(),t.preventDefault();break;case 39:s._showNext(),t.preventDefault();break;default:return}},_fixHeight:function(s){if(this.options.autoAdjustHeight){var e=this.steps.eq(s).length>0?t(this.steps.eq(s).attr("href"),this.main):null;this.container.finish().animate({minHeight:e.outerHeight()},this.options.transitionSpeed,function(){})}return!0},_triggerEvent:function(s,e){var n=t.Event(s);return this.main.trigger(n,e),!n.isDefaultPrevented()&&n.result},_setURLHash:function(t){this.options.showStepURLhash&&s.location.hash!==t&&(s.location.hash=t)},_loader:function(t){switch(t){case"show":this.main.addClass("sw-loading");break;case"hide":this.main.removeClass("sw-loading");break;default:this.main.toggleClass("sw-loading")}},theme:function(t){if(this.options.theme===t)return!1;this.main.removeClass("sw-theme-"+this.options.theme),this.options.theme=t,this.main.addClass("sw-theme-"+this.options.theme),this._triggerEvent("themeChanged",[this.options.theme])},next:function(){this._showNext()},prev:function(){this._showPrevious()},reset:function(){if(this._triggerEvent("beginReset")===!1)return!1;this.container.stop(!0),this.pages.stop(!0),this.pages.hide(),this.current_index=null,this._setURLHash(this.steps.eq(this.options.selected).attr("href")),t(".sw-toolbar",this.main).remove(),this.steps.removeClass(),this.steps.parents("li").removeClass(),this.steps.data("has-content",!1),this.init(),this._triggerEvent("endReset")},stepState:function(s,e){s=t.isArray(s)?s:[s];var n=t.grep(this.steps,function(e,n){return t.inArray(n,s)!==-1});if(n&&n.length>0)switch(e){case"disable":t(n).parents("li").addClass("disabled");break;case"enable":t(n).parents("li").removeClass("disabled");break;case"hide":t(n).parents("li").addClass("hidden");break;case"show":t(n).parents("li").removeClass("hidden");break;case"error-on":t(n).parents("li").addClass("danger");break;case"error-off":t(n).parents("li").removeClass("danger")}}}),t.fn.smartWizard=function(s){var e,n=arguments;return void 0===s||"object"==typeof s?this.each(function(){t.data(this,"smartWizard")||t.data(this,"smartWizard",new i(this,s))}):"string"==typeof s&&"_"!==s[0]&&"init"!==s?(e=t.data(this[0],"smartWizard"),"destroy"===s&&t.data(this,"smartWizard",null),e instanceof i&&"function"==typeof e[s]?e[s].apply(e,Array.prototype.slice.call(n,1)):this):void 0}}(jQuery,window,document); -------------------------------------------------------------------------------- /src/assets/js/theme/material.js: -------------------------------------------------------------------------------- 1 | $.themematerial = {}; 2 | $.themematerial.init = function () { 3 | $(".sw-theme-material>.step-anchor>li>a, .sw-theme-material-v>.step-anchor>li>a").addClass('waves-effect'); 4 | $(".sw-theme-material>.sw-toolbar button, .sw-theme-material-v> .sw-toolbar button").addClass('waves-effect'); 5 | Waves.attach('.sw-theme-material> .sw-toolbar button', ['waves-block']); 6 | Waves.attach('.sw-theme-material> .step-anchor li a', ['waves-block']); 7 | Waves.init(); 8 | }; -------------------------------------------------------------------------------- /src/assets/js/theme/waves.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Waves v0.7.5 3 | * http://fian.my.id/Waves 4 | * 5 | * Copyright 2014-2016 Alfiana E. Sibuea and other contributors 6 | * Released under the MIT license 7 | * https://github.com/fians/Waves/blob/master/LICENSE 8 | */ 9 | 10 | ;(function(window, factory) { 11 | 'use strict'; 12 | 13 | // AMD. Register as an anonymous module. Wrap in function so we have access 14 | // to root via `this`. 15 | if (typeof define === 'function' && define.amd) { 16 | define([], function() { 17 | return factory.apply(window); 18 | }); 19 | } 20 | 21 | // Node. Does not work with strict CommonJS, but only CommonJS-like 22 | // environments that support module.exports, like Node. 23 | else if (typeof exports === 'object') { 24 | module.exports = factory.call(window); 25 | } 26 | 27 | // Browser globals. 28 | else { 29 | window.Waves = factory.call(window); 30 | } 31 | })(typeof global === 'object' ? global : this, function() { 32 | 'use strict'; 33 | 34 | var Waves = Waves || {}; 35 | var $$ = document.querySelectorAll.bind(document); 36 | var toString = Object.prototype.toString; 37 | var isTouchAvailable = 'ontouchstart' in window; 38 | 39 | 40 | // Find exact position of element 41 | function isWindow(obj) { 42 | return obj !== null && obj === obj.window; 43 | } 44 | 45 | function getWindow(elem) { 46 | return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView; 47 | } 48 | 49 | function isObject(value) { 50 | var type = typeof value; 51 | return type === 'function' || type === 'object' && !!value; 52 | } 53 | 54 | function isDOMNode(obj) { 55 | return isObject(obj) && obj.nodeType > 0; 56 | } 57 | 58 | function getWavesElements(nodes) { 59 | var stringRepr = toString.call(nodes); 60 | 61 | if (stringRepr === '[object String]') { 62 | return $$(nodes); 63 | } else if (isObject(nodes) && /^\[object (Array|HTMLCollection|NodeList|Object)\]$/.test(stringRepr) && nodes.hasOwnProperty('length')) { 64 | return nodes; 65 | } else if (isDOMNode(nodes)) { 66 | return [nodes]; 67 | } 68 | 69 | return []; 70 | } 71 | 72 | function offset(elem) { 73 | var docElem, win, 74 | box = { top: 0, left: 0 }, 75 | doc = elem && elem.ownerDocument; 76 | 77 | docElem = doc.documentElement; 78 | 79 | if (typeof elem.getBoundingClientRect !== typeof undefined) { 80 | box = elem.getBoundingClientRect(); 81 | } 82 | win = getWindow(doc); 83 | return { 84 | top: box.top + win.pageYOffset - docElem.clientTop, 85 | left: box.left + win.pageXOffset - docElem.clientLeft 86 | }; 87 | } 88 | 89 | function convertStyle(styleObj) { 90 | var style = ''; 91 | 92 | for (var prop in styleObj) { 93 | if (styleObj.hasOwnProperty(prop)) { 94 | style += (prop + ':' + styleObj[prop] + ';'); 95 | } 96 | } 97 | 98 | return style; 99 | } 100 | 101 | var Effect = { 102 | 103 | // Effect duration 104 | duration: 750, 105 | 106 | // Effect delay (check for scroll before showing effect) 107 | delay: 200, 108 | 109 | show: function(e, element, velocity) { 110 | 111 | // Disable right click 112 | if (e.button === 2) { 113 | return false; 114 | } 115 | 116 | element = element || this; 117 | 118 | // Create ripple 119 | var ripple = document.createElement('div'); 120 | ripple.className = 'waves-ripple waves-rippling'; 121 | element.appendChild(ripple); 122 | 123 | // Get click coordinate and element width 124 | var pos = offset(element); 125 | var relativeY = 0; 126 | var relativeX = 0; 127 | // Support for touch devices 128 | if('touches' in e && e.touches.length) { 129 | relativeY = (e.touches[0].pageY - pos.top); 130 | relativeX = (e.touches[0].pageX - pos.left); 131 | } 132 | //Normal case 133 | else { 134 | relativeY = (e.pageY - pos.top); 135 | relativeX = (e.pageX - pos.left); 136 | } 137 | // Support for synthetic events 138 | relativeX = relativeX >= 0 ? relativeX : 0; 139 | relativeY = relativeY >= 0 ? relativeY : 0; 140 | 141 | var scale = 'scale(' + ((element.clientWidth / 100) * 3) + ')'; 142 | var translate = 'translate(0,0)'; 143 | 144 | if (velocity) { 145 | translate = 'translate(' + (velocity.x) + 'px, ' + (velocity.y) + 'px)'; 146 | } 147 | 148 | // Attach data to element 149 | ripple.setAttribute('data-hold', Date.now()); 150 | ripple.setAttribute('data-x', relativeX); 151 | ripple.setAttribute('data-y', relativeY); 152 | ripple.setAttribute('data-scale', scale); 153 | ripple.setAttribute('data-translate', translate); 154 | 155 | // Set ripple position 156 | var rippleStyle = { 157 | top: relativeY + 'px', 158 | left: relativeX + 'px' 159 | }; 160 | 161 | ripple.classList.add('waves-notransition'); 162 | ripple.setAttribute('style', convertStyle(rippleStyle)); 163 | ripple.classList.remove('waves-notransition'); 164 | 165 | // Scale the ripple 166 | rippleStyle['-webkit-transform'] = scale + ' ' + translate; 167 | rippleStyle['-moz-transform'] = scale + ' ' + translate; 168 | rippleStyle['-ms-transform'] = scale + ' ' + translate; 169 | rippleStyle['-o-transform'] = scale + ' ' + translate; 170 | rippleStyle.transform = scale + ' ' + translate; 171 | rippleStyle.opacity = '1'; 172 | 173 | var duration = e.type === 'mousemove' ? 2500 : Effect.duration; 174 | rippleStyle['-webkit-transition-duration'] = duration + 'ms'; 175 | rippleStyle['-moz-transition-duration'] = duration + 'ms'; 176 | rippleStyle['-o-transition-duration'] = duration + 'ms'; 177 | rippleStyle['transition-duration'] = duration + 'ms'; 178 | 179 | ripple.setAttribute('style', convertStyle(rippleStyle)); 180 | }, 181 | 182 | hide: function(e, element) { 183 | element = element || this; 184 | 185 | var ripples = element.getElementsByClassName('waves-rippling'); 186 | 187 | for (var i = 0, len = ripples.length; i < len; i++) { 188 | removeRipple(e, element, ripples[i]); 189 | } 190 | } 191 | }; 192 | 193 | /** 194 | * Collection of wrapper for HTML element that only have single tag 195 | * like and 196 | */ 197 | var TagWrapper = { 198 | 199 | // Wrap tag so it can perform the effect 200 | input: function(element) { 201 | 202 | var parent = element.parentNode; 203 | 204 | // If input already have parent just pass through 205 | if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) { 206 | return; 207 | } 208 | 209 | // Put element class and style to the specified parent 210 | var wrapper = document.createElement('i'); 211 | wrapper.className = element.className + ' waves-input-wrapper'; 212 | element.className = 'waves-button-input'; 213 | 214 | // Put element as child 215 | parent.replaceChild(wrapper, element); 216 | wrapper.appendChild(element); 217 | 218 | // Apply element color and background color to wrapper 219 | var elementStyle = window.getComputedStyle(element, null); 220 | var color = elementStyle.color; 221 | var backgroundColor = elementStyle.backgroundColor; 222 | 223 | wrapper.setAttribute('style', 'color:' + color + ';background:' + backgroundColor); 224 | element.setAttribute('style', 'background-color:rgba(0,0,0,0);'); 225 | 226 | }, 227 | 228 | // Wrap tag so it can perform the effect 229 | img: function(element) { 230 | 231 | var parent = element.parentNode; 232 | 233 | // If input already have parent just pass through 234 | if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) { 235 | return; 236 | } 237 | 238 | // Put element as child 239 | var wrapper = document.createElement('i'); 240 | parent.replaceChild(wrapper, element); 241 | wrapper.appendChild(element); 242 | 243 | } 244 | }; 245 | 246 | /** 247 | * Hide the effect and remove the ripple. Must be 248 | * a separate function to pass the JSLint... 249 | */ 250 | function removeRipple(e, el, ripple) { 251 | 252 | // Check if the ripple still exist 253 | if (!ripple) { 254 | return; 255 | } 256 | 257 | ripple.classList.remove('waves-rippling'); 258 | 259 | var relativeX = ripple.getAttribute('data-x'); 260 | var relativeY = ripple.getAttribute('data-y'); 261 | var scale = ripple.getAttribute('data-scale'); 262 | var translate = ripple.getAttribute('data-translate'); 263 | 264 | // Get delay beetween mousedown and mouse leave 265 | var diff = Date.now() - Number(ripple.getAttribute('data-hold')); 266 | var delay = 350 - diff; 267 | 268 | if (delay < 0) { 269 | delay = 0; 270 | } 271 | 272 | if (e.type === 'mousemove') { 273 | delay = 150; 274 | } 275 | 276 | // Fade out ripple after delay 277 | var duration = e.type === 'mousemove' ? 2500 : Effect.duration; 278 | 279 | setTimeout(function() { 280 | 281 | var style = { 282 | top: relativeY + 'px', 283 | left: relativeX + 'px', 284 | opacity: '0', 285 | 286 | // Duration 287 | '-webkit-transition-duration': duration + 'ms', 288 | '-moz-transition-duration': duration + 'ms', 289 | '-o-transition-duration': duration + 'ms', 290 | 'transition-duration': duration + 'ms', 291 | '-webkit-transform': scale + ' ' + translate, 292 | '-moz-transform': scale + ' ' + translate, 293 | '-ms-transform': scale + ' ' + translate, 294 | '-o-transform': scale + ' ' + translate, 295 | 'transform': scale + ' ' + translate 296 | }; 297 | 298 | ripple.setAttribute('style', convertStyle(style)); 299 | 300 | setTimeout(function() { 301 | try { 302 | el.removeChild(ripple); 303 | } catch (e) { 304 | return false; 305 | } 306 | }, duration); 307 | 308 | }, delay); 309 | } 310 | 311 | 312 | /** 313 | * Disable mousedown event for 500ms during and after touch 314 | */ 315 | var TouchHandler = { 316 | 317 | /* uses an integer rather than bool so there's no issues with 318 | * needing to clear timeouts if another touch event occurred 319 | * within the 500ms. Cannot mouseup between touchstart and 320 | * touchend, nor in the 500ms after touchend. */ 321 | touches: 0, 322 | 323 | allowEvent: function(e) { 324 | 325 | var allow = true; 326 | 327 | if (/^(mousedown|mousemove)$/.test(e.type) && TouchHandler.touches) { 328 | allow = false; 329 | } 330 | 331 | return allow; 332 | }, 333 | registerEvent: function(e) { 334 | var eType = e.type; 335 | 336 | if (eType === 'touchstart') { 337 | 338 | TouchHandler.touches += 1; // push 339 | 340 | } else if (/^(touchend|touchcancel)$/.test(eType)) { 341 | 342 | setTimeout(function() { 343 | if (TouchHandler.touches) { 344 | TouchHandler.touches -= 1; // pop after 500ms 345 | } 346 | }, 500); 347 | 348 | } 349 | } 350 | }; 351 | 352 | 353 | /** 354 | * Delegated click handler for .waves-effect element. 355 | * returns null when .waves-effect element not in "click tree" 356 | */ 357 | function getWavesEffectElement(e) { 358 | 359 | if (TouchHandler.allowEvent(e) === false) { 360 | return null; 361 | } 362 | 363 | var element = null; 364 | var target = e.target || e.srcElement; 365 | 366 | while (target.parentElement !== null) { 367 | if (target.classList.contains('waves-effect') && (!(target instanceof SVGElement))) { 368 | element = target; 369 | break; 370 | } 371 | target = target.parentElement; 372 | } 373 | 374 | return element; 375 | } 376 | 377 | /** 378 | * Bubble the click and show effect if .waves-effect elem was found 379 | */ 380 | function showEffect(e) { 381 | 382 | // Disable effect if element has "disabled" property on it 383 | // In some cases, the event is not triggered by the current element 384 | // if (e.target.getAttribute('disabled') !== null) { 385 | // return; 386 | // } 387 | 388 | var element = getWavesEffectElement(e); 389 | 390 | if (element !== null) { 391 | 392 | // Make it sure the element has either disabled property, disabled attribute or 'disabled' class 393 | if (element.disabled || element.getAttribute('disabled') || element.classList.contains('disabled')) { 394 | return; 395 | } 396 | 397 | TouchHandler.registerEvent(e); 398 | 399 | if (e.type === 'touchstart' && Effect.delay) { 400 | 401 | var hidden = false; 402 | 403 | var timer = setTimeout(function () { 404 | timer = null; 405 | Effect.show(e, element); 406 | }, Effect.delay); 407 | 408 | var hideEffect = function(hideEvent) { 409 | 410 | // if touch hasn't moved, and effect not yet started: start effect now 411 | if (timer) { 412 | clearTimeout(timer); 413 | timer = null; 414 | Effect.show(e, element); 415 | } 416 | if (!hidden) { 417 | hidden = true; 418 | Effect.hide(hideEvent, element); 419 | } 420 | }; 421 | 422 | var touchMove = function(moveEvent) { 423 | if (timer) { 424 | clearTimeout(timer); 425 | timer = null; 426 | } 427 | hideEffect(moveEvent); 428 | }; 429 | 430 | element.addEventListener('touchmove', touchMove, false); 431 | element.addEventListener('touchend', hideEffect, false); 432 | element.addEventListener('touchcancel', hideEffect, false); 433 | 434 | } else { 435 | 436 | Effect.show(e, element); 437 | 438 | if (isTouchAvailable) { 439 | element.addEventListener('touchend', Effect.hide, false); 440 | element.addEventListener('touchcancel', Effect.hide, false); 441 | } 442 | 443 | element.addEventListener('mouseup', Effect.hide, false); 444 | element.addEventListener('mouseleave', Effect.hide, false); 445 | } 446 | } 447 | } 448 | 449 | Waves.init = function(options) { 450 | var body = document.body; 451 | 452 | options = options || {}; 453 | 454 | if ('duration' in options) { 455 | Effect.duration = options.duration; 456 | } 457 | 458 | if ('delay' in options) { 459 | Effect.delay = options.delay; 460 | } 461 | 462 | if (isTouchAvailable) { 463 | body.addEventListener('touchstart', showEffect, false); 464 | body.addEventListener('touchcancel', TouchHandler.registerEvent, false); 465 | body.addEventListener('touchend', TouchHandler.registerEvent, false); 466 | } 467 | 468 | body.addEventListener('mousedown', showEffect, false); 469 | }; 470 | 471 | 472 | /** 473 | * Attach Waves to dynamically loaded inputs, or add .waves-effect and other 474 | * waves classes to a set of elements. Set drag to true if the ripple mouseover 475 | * or skimming effect should be applied to the elements. 476 | */ 477 | Waves.attach = function(elements, classes) { 478 | 479 | elements = getWavesElements(elements); 480 | 481 | if (toString.call(classes) === '[object Array]') { 482 | classes = classes.join(' '); 483 | } 484 | 485 | classes = classes ? ' ' + classes : ''; 486 | 487 | var element, tagName; 488 | 489 | for (var i = 0, len = elements.length; i < len; i++) { 490 | 491 | element = elements[i]; 492 | tagName = element.tagName.toLowerCase(); 493 | 494 | if (['input', 'img'].indexOf(tagName) !== -1) { 495 | TagWrapper[tagName](element); 496 | element = element.parentElement; 497 | } 498 | 499 | if (element.className.indexOf('waves-effect') === -1) { 500 | element.className += ' waves-effect' + classes; 501 | } 502 | } 503 | }; 504 | 505 | 506 | /** 507 | * Cause a ripple to appear in an element via code. 508 | */ 509 | Waves.ripple = function(elements, options) { 510 | elements = getWavesElements(elements); 511 | var elementsLen = elements.length; 512 | 513 | options = options || {}; 514 | options.wait = options.wait || 0; 515 | options.position = options.position || null; // default = centre of element 516 | 517 | 518 | if (elementsLen) { 519 | var element, pos, off, centre = {}, i = 0; 520 | var mousedown = { 521 | type: 'mousedown', 522 | button: 1 523 | }; 524 | var hideRipple = function(mouseup, element) { 525 | return function() { 526 | Effect.hide(mouseup, element); 527 | }; 528 | }; 529 | 530 | for (; i < elementsLen; i++) { 531 | element = elements[i]; 532 | pos = options.position || { 533 | x: element.clientWidth / 2, 534 | y: element.clientHeight / 2 535 | }; 536 | 537 | off = offset(element); 538 | centre.x = off.left + pos.x; 539 | centre.y = off.top + pos.y; 540 | 541 | mousedown.pageX = centre.x; 542 | mousedown.pageY = centre.y; 543 | 544 | Effect.show(mousedown, element); 545 | 546 | if (options.wait >= 0 && options.wait !== null) { 547 | var mouseup = { 548 | type: 'mouseup', 549 | button: 1 550 | }; 551 | 552 | setTimeout(hideRipple(mouseup, element), options.wait); 553 | } 554 | } 555 | } 556 | }; 557 | 558 | /** 559 | * Remove all ripples from an element. 560 | */ 561 | Waves.calm = function(elements) { 562 | elements = getWavesElements(elements); 563 | var mouseup = { 564 | type: 'mouseup', 565 | button: 1 566 | }; 567 | 568 | for (var i = 0, len = elements.length; i < len; i++) { 569 | Effect.hide(mouseup, elements[i]); 570 | } 571 | }; 572 | 573 | /** 574 | * Deprecated API fallback 575 | */ 576 | Waves.displayEffect = function(options) { 577 | console.error('Waves.displayEffect() has been deprecated and will be removed in future version. Please use Waves.init() to initialize Waves effect'); 578 | Waves.init(options); 579 | }; 580 | 581 | return Waves; 582 | }); 583 | -------------------------------------------------------------------------------- /src/step/Generator.php: -------------------------------------------------------------------------------- 1 | stepConfig['model']); 51 | 52 | //check if models 53 | $models = !$isArrayOfModels ? [$this->stepConfig['model']] : $this->stepConfig['model']; 54 | 55 | //check if tabular step 56 | if ($this->isTabular) { 57 | return $this->createTabularStep($models); 58 | } 59 | 60 | //return for normal step 61 | return $this->createStep($models); 62 | } 63 | 64 | /** 65 | * Creates a tabular step 66 | * 67 | * @param array $models the models used for the step 68 | * 69 | * @return StepResponse 70 | */ 71 | public function createTabularStep($models) 72 | { 73 | //tabular step object 74 | $step = Yii::createObject( 75 | [ 76 | 'class' => Tabular::class, 77 | 'models' => $models, 78 | 'stepConfig' => $this->stepConfig, 79 | 'limit' => $this->limit, 80 | 'form' => $this->form, 81 | 'index' => $this->stepIndex, 82 | 'formOptions' => $this->formOptions, 83 | ] 84 | ); 85 | 86 | //get the step html 87 | $html = $step->create(); 88 | 89 | //populate response object 90 | $response = Yii::createObject( 91 | [ 92 | 'class' => Response::class, 93 | 'html' => $html, 94 | 'tabularEventsJs' => $step->getTabularEventJs(), 95 | 'persistenceJs' => $step->getPersistenceEvents(), 96 | 'dependentInputJs' => $step->getDependentInputScript(), 97 | ], 98 | [$models, $this->stepConfig] 99 | ); 100 | 101 | return $response; 102 | } 103 | 104 | /** 105 | * Creates a normal step 106 | * 107 | * @param array $models array of models for the current step 108 | * 109 | * @return StepResponse 110 | */ 111 | public function createStep($models) 112 | { 113 | //create a step object 114 | $step = Yii::createObject( 115 | [ 116 | 'class' => Normal::class, 117 | 'models' => $models, 118 | 'stepConfig' => $this->stepConfig, 119 | 'form' => $this->form, 120 | 'formOptions' => $this->formOptions, 121 | ] 122 | ); 123 | 124 | //get the step html 125 | $html = $step->create(); 126 | 127 | //populate the response object 128 | $response = Yii::createObject( 129 | [ 130 | 'class' => Response::class, 131 | 'html' => $html, 132 | 'persistenceJs' => $step->getPersistenceEvents(), 133 | 'dependentInputJs' => $step->getDependentInputScript(), 134 | ], 135 | [$models, $this->stepConfig] 136 | ); 137 | 138 | //return response 139 | return $response; 140 | } 141 | 142 | } 143 | -------------------------------------------------------------------------------- /src/step/Normal.php: -------------------------------------------------------------------------------- 1 | _persistenceEvents; 48 | } 49 | 50 | /** 51 | * @param $script 52 | */ 53 | public function setDependentInputScript($script) 54 | { 55 | $this->_dependentInputScript = $script; 56 | } 57 | 58 | /** 59 | * @return mixed 60 | */ 61 | public function getDependentInputScript() 62 | { 63 | return $this->_dependentInputScript; 64 | } 65 | 66 | /** 67 | * Creates a Step 68 | * 69 | * @return mixed 70 | */ 71 | public function create() 72 | { 73 | $models = $this->models; 74 | 75 | //field configurations 76 | $fieldConfig = ArrayHelper::getValue($this->stepConfig, 'fieldConfig', false); 77 | 78 | //get the step headings 79 | $stepHeadings = ArrayHelper::getValue($this->stepConfig, 'stepHeadings', false); 80 | 81 | $sorter = Yii::createObject( 82 | [ 83 | 'class' => Sorter::class, 84 | 'models' => $models, 85 | 'stepConfig' => $this->stepConfig, 86 | ] 87 | ); 88 | 89 | $attributes = $sorter->sort(); 90 | 91 | $this->attributes = $attributes; 92 | return $this->_createStepHtml($fieldConfig, $stepHeadings); 93 | } 94 | 95 | /** 96 | * Generates Html for normal steps fields 97 | * 98 | * @param array $attributes the attributes to iterate 99 | * @param array $fieldConfig customer field configurations 100 | * @param array $stepHeadings the headings for the current step 101 | * 102 | * @return mixed 103 | */ 104 | private function _createStepHtml($fieldConfig, $stepHeadings) 105 | { 106 | $htmlFields = ''; 107 | 108 | foreach ($this->attributes as $modelIndex => $row) { 109 | 110 | $model = $row['model']; 111 | $attribute = $row['attribute']; 112 | 113 | //prefix attributes with model name 114 | $attributePrefixed = strtolower($model->formName()) . '.' . $attribute; 115 | 116 | //attribute name 117 | $attributeName = $attribute; 118 | $customConfigDefinedForField = $fieldConfig && (isset($fieldConfig[$attribute]) || isset($fieldConfig[$attributePrefixed])); 119 | 120 | //has heading for the field 121 | $hasHeading = false !== $stepHeadings; 122 | 123 | //add heading 124 | if ($hasHeading) { 125 | $htmlFields .= $this->addHeading($attribute, $stepHeadings); 126 | } 127 | 128 | //if custom config available for field 129 | if ($customConfigDefinedForField) { 130 | 131 | $customFieldConfig = (isset($fieldConfig[$attributePrefixed])) ? $fieldConfig[$attributePrefixed] : $fieldConfig[$attribute]; 132 | $dependentInput = ArrayHelper::getValue($customFieldConfig, 'depends', false); 133 | 134 | //if filtered field 135 | $isFilteredField = $customFieldConfig === false; 136 | 137 | //skip the field and go to next 138 | if ($isFilteredField) { 139 | continue; 140 | } 141 | 142 | //custom field population 143 | $htmlFields .= $this->createCustomInput( 144 | $model, 145 | $attributeName, 146 | $customFieldConfig 147 | ); 148 | 149 | //id of the input 150 | $attributeId = Html::getInputId($model, $attributeName); 151 | 152 | //add the restore events 153 | $this->_addRestoreEvents($customFieldConfig, $attributeId); 154 | 155 | //add dependent input script if available 156 | $dependentInput && $this->_addDependentInputScript($dependentInput, $attributeId, $model, $modelIndex); 157 | } else { 158 | //default field population 159 | $htmlFields .= $this->createDefaultInput($model, $attributeName); 160 | } 161 | } 162 | return $htmlFields; 163 | } 164 | } -------------------------------------------------------------------------------- /src/step/Response.php: -------------------------------------------------------------------------------- 1 | setJsFields($models, $stepConfig); 39 | } 40 | 41 | /** 42 | * @param $models 43 | */ 44 | public function setJsFields($models, $stepConfig) 45 | { 46 | $fields = []; 47 | 48 | //sorter class object 49 | $sorter = Yii::createObject(Sorter::class); 50 | 51 | //disabled fields 52 | $disabledFields = ArrayHelper::getValue($stepConfig, 'fieldConfig.except', []); 53 | 54 | //only fields 55 | $onlyFields = ArrayHelper::getValue($stepConfig, 'fieldConfig.only', []); 56 | 57 | //step type 58 | $stepType = ArrayHelper::getValue($stepConfig, 'type', FormWizard::STEP_TYPE_DEFAULT); 59 | 60 | //is tabular 61 | $isTabularStep = $this->isTabularStep($stepType); 62 | 63 | foreach ($models as $modelIndex => $model) { 64 | 65 | //get the fields for the current model 66 | $attributes = $sorter->getStepFields($model, $onlyFields, $disabledFields); 67 | 68 | //add all the field ids to array 69 | $fields = array_merge( 70 | $fields, 71 | array_map( 72 | function ($element) use ($model, $modelIndex, $isTabularStep) { 73 | return Html::getInputId($model, ($isTabularStep) ? "[$modelIndex]" . $element : $element); 74 | }, 75 | $attributes 76 | ) 77 | ); 78 | } 79 | $this->jsFields = $fields; 80 | } 81 | 82 | /** 83 | * @param $stepType 84 | * @return mixed 85 | */ 86 | public function isTabularStep($stepType) 87 | { 88 | return $stepType === FormWizard::STEP_TYPE_TABULAR; 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/step/Sorter.php: -------------------------------------------------------------------------------- 1 | stepConfig, 'fieldConfig', false); 31 | 32 | //disabled fields 33 | $disabledFields = ArrayHelper::getValue($fieldConfig, 'except', []); 34 | 35 | //only fields 36 | $onlyFields = ArrayHelper::getValue($fieldConfig, 'only', []); 37 | 38 | //iterate models 39 | foreach ($this->models as $model) { 40 | 41 | //get safe attributes 42 | $attributes = $this->getStepFields($model, $onlyFields, $disabledFields); 43 | 44 | //field order 45 | foreach ($attributes as $attribute) { 46 | $mappedFields[] = ['model' => $model, 'attribute' => $attribute]; 47 | } 48 | } 49 | 50 | return $this->sortFields($mappedFields); 51 | } 52 | 53 | /** 54 | * Sorts the fields. If the `fieldOrder` option is specified then the 55 | * order will be dependend on the order specified in the `fieldOrder` 56 | * array. If not provided the order will be according to the order of 57 | * the fields specified under the `fieldConfig` option, and if none of 58 | * the above is given then it will fallback to the order in which they 59 | * are retrieved from the model. 60 | * 61 | * @param array $attributes the attributes reference for the model 62 | * 63 | * @return null 64 | */ 65 | public function sortFields(array &$attributes) 66 | { 67 | //field configurations 68 | $fieldConfig = ArrayHelper::getValue($this->stepConfig, 'fieldConfig', false); 69 | 70 | $defaultOrder = $fieldConfig !== false ? array_keys($fieldConfig) : false; 71 | 72 | $fieldOrder = ArrayHelper::getValue($this->stepConfig, 'fieldOrder', $defaultOrder); 73 | 74 | if ($fieldOrder) { 75 | 76 | $orderedAttributes = []; 77 | $unorderedAttributes = []; 78 | 79 | foreach ($attributes as $item) { 80 | $attribute = isset($item['attribute']) ? $item['attribute'] : $item; 81 | 82 | $moveToIndex = array_search($attribute, $fieldOrder); 83 | 84 | if ($moveToIndex !== false) { 85 | $orderedAttributes[$moveToIndex] = $item; 86 | continue; 87 | } 88 | $unorderedAttributes[] = $item; 89 | } 90 | 91 | //sort new order according to keys 92 | ksort($orderedAttributes); 93 | 94 | //merge array with unordered attributes 95 | $attributes = array_merge($orderedAttributes, $unorderedAttributes); 96 | } 97 | return $attributes; 98 | } 99 | 100 | /** 101 | * Filters the step fields for the `except` and `only` options if mentioned 102 | * 103 | * @param object $model instance of the model dedicated for the step 104 | * @param array $onlyFields the field to be populated only 105 | * @param array $disabledFields the fields to be ignored 106 | * 107 | * @return array $fields 108 | */ 109 | public function getStepFields(Model $model, array $onlyFields = [], array $disabledFields = []) 110 | { 111 | //return $onlyFields list 112 | if (!empty($onlyFields)) { 113 | return array_values( 114 | array_filter( 115 | array_keys($model->getAttributes($model->safeAttributes())), 116 | function ($item) use ($onlyFields) { 117 | return in_array($item, $onlyFields); 118 | } 119 | ) 120 | ); 121 | } 122 | 123 | //return all fields list for the model 124 | return array_filter( 125 | array_keys($model->getAttributes($model->safeAttributes())), 126 | function ($item) use ($disabledFields) { 127 | return !in_array($item, $disabledFields); 128 | } 129 | ); 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /src/step/Tabular.php: -------------------------------------------------------------------------------- 1 | _persistenceEvents; 80 | } 81 | 82 | /** 83 | * Returns the tabularEventJs 84 | * 85 | * @return mixed 86 | */ 87 | public function getTabularEventJs() 88 | { 89 | return $this->_tabularEventJs; 90 | } 91 | 92 | /** 93 | * Sets the Dependent Input script 94 | * 95 | * @param string $script the script for the dependent input 96 | */ 97 | public function setDependentInputScript($script) 98 | { 99 | $this->_dependentInputScript = $script; 100 | } 101 | 102 | /** 103 | * Returns the dependent input script 104 | * 105 | * @return mixed 106 | */ 107 | public function getDependentInputScript() 108 | { 109 | return $this->_dependentInputScript; 110 | } 111 | 112 | /** 113 | * Creates the tabular step 114 | * 115 | * @return mixed 116 | */ 117 | public function create() 118 | { 119 | 120 | //field configurations 121 | $fieldConfig = ArrayHelper::getValue($this->stepConfig, 'fieldConfig', false); 122 | 123 | //disabled fields 124 | $disabledFields = ArrayHelper::getValue($fieldConfig, 'except', []); 125 | 126 | //get the step headings 127 | $stepHeadings = ArrayHelper::getValue($this->stepConfig, 'stepHeadings', false); 128 | 129 | //only fields 130 | $onlyFields = ArrayHelper::getValue($fieldConfig, 'only', []); 131 | 132 | $html = ''; 133 | 134 | $sorter = Yii::createObject( 135 | [ 136 | 'class' => Sorter::class, 137 | 'stepConfig' => $this->stepConfig, 138 | ] 139 | ); 140 | 141 | foreach ($this->models as $modelIndex => $model) { 142 | 143 | //get safe attributes 144 | $attributes = $sorter->getStepFields($model, $onlyFields, $disabledFields); 145 | 146 | //sort fields 147 | $sorter->sortFields($attributes); 148 | 149 | //add tabular row if limit not exceed 150 | if (!$this->addTabularRow($model, $modelIndex, $html, $fieldConfig, $attributes, $stepHeadings)) { 151 | break; 152 | } 153 | } 154 | 155 | return $html; 156 | 157 | } 158 | 159 | /** 160 | * Adds a tabular row in the tabular step 161 | * 162 | * @param object $model the model object 163 | * @param integer $modelIndex the model index for the tabular step model 164 | * @param integer $stepIndex the current step index 165 | * @param string $htmlFields the html for the fields 166 | * @param array $fieldConfig the field configurations 167 | * @param array $attributes the list of the attributes in the current model 168 | * @param integer $limitRows the rows limit if set 169 | * @param mixed $stepHeadings the stepheadings configurations 170 | * 171 | * @return boolean 172 | */ 173 | protected function addTabularRow( 174 | Model $model, $modelIndex, &$htmlFields, 175 | array $fieldConfig, array $attributes, 176 | $stepHeadings 177 | ) { 178 | 179 | //limit not exceeded 180 | if ($this->allowedRowLimit($modelIndex)) { 181 | //start the row constainer 182 | $htmlFields .= Html::beginTag('div', ['id' => 'row_' . $modelIndex, 'class' => 'tabular-row']); 183 | 184 | //add the remove icon if edit mode and more than one rows 185 | $htmlFields .= Html::tag('i', '', ['class' => 'remove-row formwizard-x-ico', 'data' => ['rowid' => $modelIndex]]); 186 | 187 | //generate the html for the step 188 | $htmlFields .= $this->_createTabularStepHtml($attributes, $modelIndex, $model, $fieldConfig, $stepHeadings); 189 | 190 | //close row div 191 | $htmlFields .= Html::endTag('div'); 192 | return true; 193 | } 194 | return false; 195 | } 196 | 197 | /** 198 | * Generates Html for the tabular step fields 199 | * 200 | * @param array $attributes the attributes to iterate 201 | * @param integer $modelIndex the index of the current model 202 | * @param object $model the model object 203 | * @param array $fieldConfig customer field confitigurations 204 | * @param mixed $stepHeadings the headings configurations for the current step, false if not provided 205 | * 206 | * @return mixed 207 | */ 208 | private function _createTabularStepHtml(array $attributes, $modelIndex, Model $model, array $fieldConfig, $stepHeadings) 209 | { 210 | $htmlFields = ''; 211 | $stepIndex = $this->index; 212 | 213 | //prefix attributes with model name 214 | $attributesPrefixed = preg_filter('/^/', strtolower($model->formName()) . '.', $attributes); 215 | 216 | //iterate all fields associated to the relevant model 217 | foreach ($attributes as $attributeIndex => $attribute) { 218 | 219 | //attribute name 220 | $attributeName = "[$modelIndex]" . $attribute; 221 | $customConfigDefinedForField = $fieldConfig && (isset($fieldConfig[$attribute]) || isset($fieldConfig[$attributesPrefixed[$attributeIndex]])); 222 | 223 | //has heading for the field 224 | $hasHeading = false !== $stepHeadings; 225 | 226 | //add heading 227 | if ($hasHeading) { 228 | $htmlFields .= $this->addHeading($stepHeadings, $attribute); 229 | } 230 | 231 | //if custom config available for field 232 | if ($customConfigDefinedForField) { 233 | 234 | $customFieldConfig = (isset($fieldConfig[$attributesPrefixed[$attributeIndex]])) ? $fieldConfig[$attributesPrefixed[$attributeIndex]] : $fieldConfig[$attribute]; 235 | $dependentInput = ArrayHelper::getValue($customFieldConfig, 'depends', false); 236 | 237 | //if filtered field 238 | $isFilteredField = $customFieldConfig === false; 239 | 240 | //skip the field and go to next 241 | if ($isFilteredField) { 242 | continue; 243 | } 244 | 245 | //custom field population 246 | $htmlFields .= $this->createCustomInput( 247 | $model, 248 | $attributeName, 249 | $customFieldConfig 250 | ); 251 | 252 | //id of the input 253 | $attributeId = Html::getInputId($model, $attributeName); 254 | 255 | //add tabular events 256 | $this->_addTabularEvents($customFieldConfig, $modelIndex, $attributeId, $stepIndex); 257 | 258 | //add the restore events 259 | $this->_addRestoreEvents($customFieldConfig, $attributeId); 260 | 261 | //add dependent input script if available 262 | $dependentInput && $this->_addDependentInputScript($dependentInput, $attributeId, $model, $attributeIndex, $modelIndex); 263 | 264 | //go to next iteration, add after removing the else part of this if statement 265 | continue; 266 | } 267 | 268 | //default field population 269 | $htmlFields .= $this->createDefaultInput($model, $attributeName); 270 | } 271 | 272 | return $htmlFields; 273 | } 274 | 275 | /** 276 | * Adds tabular events for the attribute 277 | * 278 | * @param array $attributeConfig attribute configurations passed 279 | * @param int $modelIndex the index of the current model 280 | * @param string $attributeId the id of the current field 281 | * @param int $index the index of the current step 282 | * 283 | * @return null 284 | */ 285 | private function _addTabularEvents(array $attributeConfig, $modelIndex, $attributeId, $index) 286 | { 287 | //get the tabular events for the field 288 | $tabularEvents = ArrayHelper::getValue($attributeConfig, 'tabularEvents', false); 289 | 290 | //check if tabular step and tabularEvents provided for field 291 | if (is_array($tabularEvents) && $modelIndex == 0) { 292 | 293 | //id of the form 294 | $formId = $this->formOptions['id']; 295 | 296 | //iterate all events attached and bind them 297 | foreach ($tabularEvents as $eventName => $callback) { 298 | //get the call back 299 | $eventCallBack = new JsExpression($callback); 300 | 301 | $this->_bindEvents($eventName, $eventCallBack, $formId, $index, $attributeId); 302 | } 303 | } 304 | } 305 | 306 | /** 307 | * Binds the tabular events provided by the user 308 | * 309 | * @param string $eventName the name of the event to bind 310 | * @param string $eventCallBack the js callback event provided by the user 311 | * @param string $formId the id of the form 312 | * @param integer $index the current model index 313 | * @param string $attributeId the attribute id to triger the event for 314 | * 315 | * @return null 316 | */ 317 | private function _bindEvents($eventName, $eventCallBack, $formId, $index, $attributeId) 318 | { 319 | $formEvents = [ 320 | 'afterInsert' => function ($eventName, $formId, $index, $eventCallBack) { 321 | $this->_tabularEventJs .= <<div[id^='row_']",{$eventCallBack}); 323 | JS; 324 | }, 325 | 'afterClone' => function ($eventName, $formId, $index, $eventCallBack, $attributeId) { 326 | $this->_tabularEventJs .= << function ($eventName, $formId, $index, $eventCallBack, $attributeId) { 331 | $this->_tabularEventJs .= <<_addHeading($headingConfig); 29 | } 30 | return ''; 31 | } 32 | 33 | /** 34 | * Allowed Row limit 35 | * 36 | * @param int $modelIndex the model index 37 | * 38 | * @return mixed 39 | */ 40 | public function allowedRowLimit($modelIndex) 41 | { 42 | return $this->limit === FormWizard::ROWS_UNLIMITED || $this->limit > $modelIndex; 43 | } 44 | 45 | /** 46 | * Creates a customized input field according to the 47 | * structured option for the steps by user 48 | * 49 | * @param object $model instance of the current model 50 | * @param string $attribute name of the current field 51 | * @param array $fieldConfig config for the current field 52 | * 53 | * @return \yii\widgets\ActiveField 54 | */ 55 | public function createCustomInput(Model $model, $attribute, array $fieldConfig) 56 | { 57 | 58 | //get the options 59 | list( 60 | $options, $isMultiField, $fieldType, $widget, $template, $containerOptions, $inputOptions, $itemsList, $label, $labelOptions, $hintText, $activeFieldOptions 61 | ) = $this->_parseFieldConfig($fieldConfig); 62 | 63 | //create field 64 | $field = $this->createField( 65 | $model, 66 | $attribute, 67 | array_merge( 68 | $activeFieldOptions, 69 | [ 70 | 'template' => $template, 71 | 'options' => $containerOptions, 72 | 'inputOptions' => $inputOptions, 73 | ] 74 | ), 75 | $isMultiField 76 | ); 77 | 78 | //widget 79 | if ($widget) { 80 | $field = $field->widget($widget, $options)->label($label, $labelOptions); 81 | return (!$hintText) ? $field : $field->hint($hintText); 82 | } 83 | 84 | //remove the type and itemList from options list 85 | if (isset($options['type']) && $options['type'] !== 'number') { 86 | unset($options['type']); 87 | } 88 | 89 | //unset the itemsList from the options list 90 | unset($options['itemsList']); 91 | 92 | //init the options for the field types 93 | $fieldTypeOptions = [ 94 | 'field' => $field, 95 | 'options' => $options, 96 | 'labelOptions' => $labelOptions, 97 | 'label' => $label, 98 | 'itemsList' => $itemsList, 99 | ]; 100 | 101 | //create the field 102 | return $this->_createField($fieldType, $fieldTypeOptions, $hintText); 103 | } 104 | 105 | /** 106 | * Creates a default field for the steps if no fields under 107 | * the activefield config is provided 108 | * 109 | * @param object $model instance of the current model 110 | * @param string $attribute name of the attribute / field 111 | * 112 | * @return \yii\widgets\ActiveField 113 | */ 114 | public function createDefaultInput(Model $model, $attribute) 115 | { 116 | //create field 117 | $field = $this->createField($model, $attribute); 118 | return $field->textInput()->label(null, ['class' => 'form-label']); 119 | } 120 | 121 | /** 122 | * Creates a default ActiveFieldObject 123 | * 124 | * @param object $model instance of the current model 125 | * @param string $attribute name of the current field / attribute 126 | * @param array $fieldOptions options for the field as in 127 | * \yii\widgets\ActiveField `fieldOptions` 128 | * @param boolean $isMulti determines if the field will be using array name 129 | * or not for example : first_name[] will be used 130 | * if true and first_name if false 131 | * 132 | * @return \yii\widgets\ActiveField 133 | */ 134 | public function createField( 135 | Model $model, 136 | $attribute, 137 | array $fieldOptions = [], 138 | $isMulti = false 139 | ) { 140 | return $this->form->field( 141 | $model, 142 | $attribute . ($isMulti ? '[]' : ''), 143 | $fieldOptions 144 | ); 145 | } 146 | 147 | /** 148 | * Parse the configurations for the field 149 | * 150 | * @param array $fieldConfig the configurations array passed by the user 151 | * 152 | * @return array 153 | */ 154 | protected function _parseFieldConfig(array $fieldConfig) 155 | { 156 | //options 157 | $options = ArrayHelper::getValue($fieldConfig, 'options', []); 158 | 159 | //is multi field name 160 | $isMultiField = Arrayhelper::getValue($fieldConfig, 'multifield', false); 161 | 162 | //field type 163 | $fieldType = ArrayHelper::getValue($options, 'type', 'text'); 164 | 165 | //widget 166 | $widget = ArrayHelper::getValue($fieldConfig, 'widget', false); 167 | 168 | //label configuration 169 | $labelConfig = ArrayHelper::getValue($fieldConfig, 'labelOptions', null); 170 | 171 | //template 172 | $template = ArrayHelper::getValue( 173 | $fieldConfig, 174 | 'template', 175 | "{label}\n{input}\n{hint}\n{error}" 176 | ); 177 | 178 | //container 179 | $containerOptions = ArrayHelper::getValue( 180 | $fieldConfig, 181 | 'containerOptions', 182 | [] 183 | ); 184 | 185 | //inputOptions 186 | $inputOptions = ArrayHelper::getValue($fieldConfig, 'inputOptions', []); 187 | 188 | //items list 189 | $itemsList = ArrayHelper::getValue($options, 'itemsList', ''); 190 | 191 | //label text 192 | $label = ArrayHelper::getValue($labelConfig, 'label', null); 193 | 194 | //label options 195 | $labelOptions = ArrayHelper::getValue($labelConfig, 'options', []); 196 | 197 | //get the hint text for the field 198 | $hintText = ArrayHelper::getValue($fieldConfig, 'hint', false); 199 | 200 | $this->_removeWidgetOptions($fieldConfig); 201 | 202 | return [$options, $isMultiField, $fieldType, $widget, $template, $containerOptions, $inputOptions, $itemsList, $label, $labelOptions, $hintText, $fieldConfig]; 203 | } 204 | 205 | /** 206 | * Adds the dependent input script for the inputs 207 | * 208 | * @param array $dependentInput the dependent input configurations 209 | * @param string $attributeId the id of the input it is applied on 210 | * @param object $model the model object for the dependent input 211 | * @param integer $attributeIndex the attribute index of the current attribute 212 | * @param integer $modelIndex the model index of the current attribute, used for tabular step 213 | * 214 | * @return null 215 | */ 216 | private function _addDependentInputScript(array $dependentInput, $attributeId, Model $model, $attributeIndex, $modelIndex = 0) 217 | { 218 | $dependentAttribute = $dependentInput['attribute']; 219 | $dependentValue = $model->$dependentAttribute; 220 | $dependentValueRequired = $dependentInput['when']; 221 | $dependentCondition = ArrayHelper::getValue($dependentInput, 'condition', '=='); 222 | 223 | $dependentActionThen = ArrayHelper::getValue( 224 | $dependentInput, 225 | 'then', 226 | "function(){\$('#{$attributeId}').show();}" 227 | ); 228 | 229 | $dependentActionElse = ArrayHelper::getValue( 230 | $dependentInput, 231 | 'else', 232 | "function(){\$('#{$attributeId}').hide();}" 233 | ); 234 | 235 | $this->_dependentInputScript .= << $headingClass]); 262 | } 263 | 264 | /** 265 | * Adds the restore events for the fields 266 | * 267 | * @param array $attributeConfig the configurations for the attribute 268 | * @param string $attributeId the field attribute id 269 | * 270 | * @return null 271 | */ 272 | private function _addRestoreEvents(array $attributeConfig, $attributeId) 273 | { 274 | $persistenceEvents = ArrayHelper::getValue($attributeConfig, 'persistencEvents', []); 275 | $formId = $this->formOptions['id']; 276 | 277 | foreach ($persistenceEvents as $eventName => $callback) { 278 | $eventCallBack = new JsExpression($callback); 279 | $this->_persistenceEvents .= << function ($params) { 298 | $field = $params['field']; 299 | $options = $params['options']; 300 | $label = $params['label']; 301 | $labelOptions = $params['labelOptions']; 302 | 303 | return $field->textInput($options)->label($label, $labelOptions); 304 | }, 305 | 'number' => function ($params) { 306 | $field = $params['field']; 307 | $options = $params['options']; 308 | $label = $params['label']; 309 | $labelOptions = $params['labelOptions']; 310 | 311 | return $field->textInput($options)->label($label, $labelOptions); 312 | }, 313 | 'dropdown' => function ($params) { 314 | $field = $params['field']; 315 | $options = $params['options']; 316 | $label = $params['label']; 317 | $labelOptions = $params['labelOptions']; 318 | $itemsList = $params['itemsList']; 319 | 320 | return $field->dropDownList($itemsList, $options) 321 | ->label($label, $labelOptions); 322 | }, 323 | 'radio' => function ($params) { 324 | $field = $params['field']; 325 | $options = $params['options']; 326 | $label = $params['label']; 327 | $labelOptions = $params['labelOptions']; 328 | $itemsList = $params['itemsList']; 329 | 330 | if (is_array($itemsList)) { 331 | return $field->radioList($itemsList, $options) 332 | ->label($label, $labelOptions); 333 | } 334 | return $field->radio($options); 335 | }, 336 | 'checkbox' => function ($params) { 337 | $field = $params['field']; 338 | $options = $params['options']; 339 | $label = $params['label']; 340 | $labelOptions = $params['labelOptions']; 341 | $itemsList = $params['itemsList']; 342 | 343 | //if checkboxList needs to be created 344 | if (is_array($itemsList)) { 345 | return $field->checkboxList($itemsList, $options) 346 | ->label($label, $labelOptions); 347 | } 348 | 349 | //if a single checkbox needs to be created 350 | $labelNull = $label === null; 351 | $labelOptionsEmpty = empty($labelOptions); 352 | $nothingSetByUser = ($labelNull && $labelOptionsEmpty); 353 | $label = $nothingSetByUser ? false : $label; 354 | 355 | return $field->checkbox($options)->label($label, $labelOptions); 356 | }, 357 | 'textarea' => function ($params) { 358 | $field = $params['field']; 359 | $options = $params['options']; 360 | $label = $params['label']; 361 | $labelOptions = $params['labelOptions']; 362 | 363 | return $field->textarea($options)->label($label, $labelOptions); 364 | }, 365 | 'file' => function ($params) { 366 | $field = $params['field']; 367 | $options = $params['options']; 368 | $label = $params['label']; 369 | $labelOptions = $params['labelOptions']; 370 | 371 | return $field->fileInput($options)->label($label, $labelOptions); 372 | }, 373 | 'hidden' => function ($params) { 374 | $field = $params['field']; 375 | $options = $params['options']; 376 | 377 | return $field->hiddenInput($options)->label(false); 378 | }, 379 | 'password' => function ($params) { 380 | $field = $params['field']; 381 | $options = $params['options']; 382 | $label = $params['label']; 383 | $labelOptions = $params['labelOptions']; 384 | 385 | return $field->passwordInput($options)->label($label, $labelOptions); 386 | }, 387 | ]; 388 | 389 | //create field depending on the type of the value provided 390 | if (array_key_exists($fieldType, $defaultFieldTypes)) { 391 | $field = $defaultFieldTypes[$fieldType]($fieldTypeOptions); 392 | return (!$hintText) ? $field : $field->hint($hintText); 393 | } 394 | } 395 | 396 | /** 397 | * Remove custom widget options fro 398 | * @param $fieldConfig 399 | * 400 | * @return mixed 401 | */ 402 | private function _removeWidgetOptions(&$fieldConfig) 403 | { 404 | $defaultOptions = [ 405 | 'containerOptions', 406 | 'hint', 407 | 'itemsList', 408 | 'inputOptions', 409 | 'template', 410 | 'labelOptions', 411 | 'widget', 412 | 'options', 413 | 'multifield', 414 | 'label', 415 | 'tabularEvents', 416 | ]; 417 | 418 | foreach ($defaultOptions as $option) { 419 | if (array_key_exists($option, $fieldConfig)) { 420 | unset($fieldConfig[$option]); 421 | } 422 | } 423 | 424 | return $fieldConfig; 425 | } 426 | } 427 | -------------------------------------------------------------------------------- /src/traits/WizardTrait.php: -------------------------------------------------------------------------------- 1 | 1) { 29 | throw new ArgException(self::MSG_TABULAR_CONSTRAINT); 30 | } 31 | return true; 32 | } 33 | 34 | public function isFormIdSet() 35 | { 36 | return isset($this->formOptions['id']); 37 | } 38 | 39 | public function isEmptySteps() 40 | { 41 | return empty($this->steps); 42 | } 43 | 44 | public function isContainerIdSet() 45 | { 46 | return isset($this->wizardContainerId); 47 | } 48 | 49 | /** 50 | * @return mixed 51 | */ 52 | public function isThemeMaterial() 53 | { 54 | return $this->theme == self::THEME_MATERIAL || $this->theme == self::THEME_MATERIAL_V; 55 | } 56 | 57 | /** 58 | * @return mixed 59 | */ 60 | public function isBs3() 61 | { 62 | return $this->_bsVersion == self::BS_3; 63 | } 64 | 65 | /** 66 | * @param $stepType 67 | * @return mixed 68 | */ 69 | public function isTabularStep($stepType) 70 | { 71 | return $stepType === self::STEP_TYPE_TABULAR; 72 | } 73 | 74 | public function isPreviewStep($step){ 75 | return empty($step['model']); 76 | } 77 | } 78 | --------------------------------------------------------------------------------