Version Description
Download this release
Release Info
Developer | themeisle |
Plugin | Gutenberg Blocks and Template Library by Otter |
Version | 1.5.0 |
Comparing to | |
See all releases |
Code changes from version 1.4.1 to 1.5.0
- CHANGELOG.md +5 -0
- build/build.css +2 -2
- build/build.js +3 -3
- docker-compose.yml +0 -31
- otter-blocks.php +2 -2
- readme.md +8 -0
- readme.txt +8 -0
- src/Components/Footer.js +0 -24
- src/Components/Header.js +0 -46
- src/Components/Main.js +0 -260
- src/Components/Onboarding.js +0 -154
- src/index.js +0 -42
- src/style.scss +0 -340
- vendor/autoload.php +1 -1
- vendor/codeinwp/gutenberg-animation/src/data.js +0 -400
- vendor/codeinwp/gutenberg-animation/src/editor.js +0 -206
- vendor/codeinwp/gutenberg-animation/src/frontend.js +0 -210
- vendor/codeinwp/gutenberg-animation/src/index.js +0 -50
- vendor/codeinwp/gutenberg-animation/webpack.config.js +0 -56
- vendor/codeinwp/gutenberg-blocks/src/frontend/google-map/index.js +0 -71
- vendor/codeinwp/gutenberg-blocks/src/frontend/google-map/styles.js +0 -960
- vendor/codeinwp/gutenberg-blocks/src/frontend/slider/index.js +0 -28
- vendor/codeinwp/gutenberg-blocks/webpack.config.js +0 -108
- vendor/codeinwp/gutenberg-css/webpack.config.js +0 -70
- vendor/codeinwp/themeisle-sdk/CHANGELOG.md +13 -0
- vendor/codeinwp/themeisle-sdk/load.php +1 -1
- vendor/codeinwp/themeisle-sdk/src/Common/Abstract_module.php +0 -66
- vendor/codeinwp/themeisle-sdk/src/Common/Module_factory.php +0 -108
- vendor/codeinwp/themeisle-sdk/src/Loader.php +0 -126
- vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php +0 -466
- vendor/codeinwp/themeisle-sdk/src/Modules/Endpoint.php +0 -358
- vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php +0 -798
- vendor/codeinwp/themeisle-sdk/src/Modules/Logger.php +0 -177
- vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php +0 -459
- vendor/codeinwp/themeisle-sdk/src/Modules/Recommendation.php +0 -374
- vendor/codeinwp/themeisle-sdk/src/Modules/Review.php +0 -117
- vendor/codeinwp/themeisle-sdk/src/Modules/Rollback.php +0 -376
- vendor/codeinwp/themeisle-sdk/src/Modules/Translate.php +0 -918
- vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php +0 -850
- vendor/codeinwp/themeisle-sdk/src/Product.php +0 -418
- vendor/composer/autoload_real.php +10 -7
- vendor/composer/autoload_static.php +4 -4
- vendor/composer/installed.json +6 -6
- vendor/tubalmartin/cssmin/src/Colors.php +0 -155
- vendor/tubalmartin/cssmin/src/Command.php +0 -223
- vendor/tubalmartin/cssmin/src/Minifier.php +0 -895
- vendor/tubalmartin/cssmin/src/Utils.php +0 -149
- webpack.config.js +0 -74
CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
1 |
##### [Version 1.4.1](https://github.com/Codeinwp/otter-blocks/compare/v1.4.0...v1.4.1) (2020-02-29)
|
2 |
|
3 |
- Fix issue with Button Group & Global Defaults
|
1 |
+
#### [Version 1.5.0](https://github.com/Codeinwp/otter-blocks/compare/v1.4.1...v1.5.0) (2020-03-20)
|
2 |
+
|
3 |
+
- Adds compatibility with WordPress 5.4
|
4 |
+
- Adds compatibility with WordPress 5.4
|
5 |
+
|
6 |
##### [Version 1.4.1](https://github.com/Codeinwp/otter-blocks/compare/v1.4.0...v1.4.1) (2020-02-29)
|
7 |
|
8 |
- Fix issue with Button Group & Global Defaults
|
build/build.css
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
*{box-sizing:inherit}.settings_page_otter{background:#f6f6f6;font-size:14px;position:relative;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}#wpcontent{padding-left:0}.auto-fold #wpcontent{padding-left:0}#otter .otter-header{padding:20px 10px;background-color:#ffffff;box-shadow:0 1px 0 rgba(213,213,213,0.5),0 1px 2px #eee}#otter .otter-header.onboarding .otter-container .otter-logo{justify-content:center}#otter .otter-header .otter-container{margin:0 auto;max-width:100%;max-width:750px}#otter .otter-header .otter-container .otter-logo{display:flex;align-items:center}#otter .otter-header .otter-container .otter-logo img{max-width:200px}#otter .otter-header .otter-container .otter-logo .version{background-color:#e5e5e5;border-radius:3px;font-size:0.8em;font-weight:400;margin-left:10px;padding:2px 7px}#otter .otter-main{margin-left:auto;margin-right:auto;max-width:750px}#otter .otter-main .components-panel__body{margin:25px 0;background:#fff;border:1px solid #e2e4e7}#otter .otter-main .components-panel__body .components-panel__body-toggle{border-bottom:1px solid #d6e2ed}#otter .otter-main .components-panel__body .components-panel__row{padding:20px 10px 10px;margin:0}#otter .otter-main .components-panel__body .components-panel__row .components-base-control .components-base-control__field{display:flex;align-items:center;margin-bottom:10px}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field{width:100%}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field{display:block}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field label{font-weight:600;margin-bottom:10px}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field input{border:1px solid #b7c9d9;border-radius:3px;font-size:14px;padding:9px 15px;width:100%;box-shadow:none;height:40px;margin:0 0 10px 0;color:#444}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field input:disabled{background:#f6f6f6;border-color:#eeeeee;color:#bbbbbb}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field input:focus{border-color:#00a0d2;box-shadow:0 0 0 1px #00a0d2;outline:2px solid transparent;outline-offset:-2px}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field .otter-text-field-button-group{display:flex;align-items:center;margin:2px 0 15px}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field .otter-text-field-button-group .is-primary{padding:2px 20px;height:auto;font-size:14px;margin-right:10px}#otter .otter-main .components-panel__body .otter-info{padding:0 10px 10px;background-image:url(data:image/png;base64,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);background-size:100px;background-repeat:no-repeat;background-position:bottom right}#otter .otter-main .components-panel__body .otter-info h2{font-weight:300;margin-bottom:10px}#otter .otter-main .components-panel__body .otter-info p{margin:0 0 1.5em 0}#otter .otter-main .components-panel__body .otter-info .otter-info-button-group{display:flex}#otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-default{padding:2px 20px;height:auto;font-size:14px}#otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-default:first-child{margin-right:15px}#otter .otter-footer{text-align:center;color:#72777c;font-style:italic;border-top:1px #e1e1e1 solid;border-bottom:1px #e1e1e1 solid;padding:20px;margin:2rem 0 1.5rem}#otter .otter-footer .otter-container{margin:0 auto}#otter .components-placeholder{background:#f6f6f6;margin-top:25vh;margin-bottom:25vh}.otter-onboarding-modal{max-width:350px}.otter-onboarding-modal .components-modal__header{text-align:center}.otter-onboarding-modal .components-modal__header h1{width:100%}.otter-onboarding-modal .otter-onboarding-modal-content{text-align:center;margin:10px 0 15px}.otter-onboarding-modal .otter-onboarding-modal-action{text-align:center;margin:10px 0}.otter-onboarding-modal .otter-onboarding-modal-action .components-button{padding:2px 20px;height:auto;font-size:14px;margin-right:10px}.components-modal__screen-overlay{background-color:rgba(0,0,0,0.5)}.react-joyride__tooltip{font-size:13px !important}.react-joyride__tooltip>div{text-align:left !important}.react-joyride__tooltip div:nth-of-type(2){margin-top:5px !important}.react-joyride__tooltip button{text-decoration:underline}.react-joyride__beacon span:first-child{background-color:#00739c !important}.react-joyride__beacon span:last-child{background-color:rgba(26,129,165,0.4) !important;border:2px solid #00739c !important}.react-joyride__tooltip button[data-action="primary"]{background:#0085ba !important;border-color:#006a95 #00648c #00648c !important;box-shadow:inset 0 -1px 0 #00648c !important;color:#fff !important;text-decoration:none !important;text-shadow:0 -1px 1px #005d82,1px 0 1px #005d82,0 1px 1px #005d82,-1px 0 1px #005d82 !important;padding:2px 20px !important;height:auto !important;line-height:28px !important;font-size:14px !important}.react-joyride__tooltip button[data-action="back"]{color:#23282d !important;font-size:14px !important}.react-notification-root .notification-container-bottom-left{bottom:40px}.react-notification-root .notification-container-mobile-bottom{bottom:60px}@media (min-width: 782px){.react-joyride__spotlight,.__floater,.__floater__open,.react-joyride__beacon{margin-top:-32px}}@media (max-width: 782px){#otter .otter-header .otter-container .otter-logo{justify-content:center}#otter .otter-info{background-image:none !important}.react-joyride__spotlight,.__floater,.__floater__open,.react-joyride__beacon{margin-top:-44px}}@media (max-width: 600px){.react-joyride__spotlight,.__floater,.__floater__open,.react-joyride__beacon{margin-top:0}}
|
2 |
|
3 |
-
.notification-container-bottom-center,.notification-container-bottom-left,.notification-container-bottom-right,.notification-container-top-center,.notification-container-top-left,.notification-container-top-right{width:325px;position:absolute;pointer-events:all}.notification-container-top-center{
|
4 |
|
1 |
+
*{box-sizing:inherit}.settings_page_otter{background:#f6f6f6;font-size:14px;position:relative;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}#wpcontent{padding-left:0}.auto-fold #wpcontent{padding-left:0}#otter .otter-header{padding:20px 10px;background-color:#ffffff;box-shadow:0 1px 0 rgba(213,213,213,0.5),0 1px 2px #eee}#otter .otter-header.onboarding .otter-container .otter-logo{justify-content:center}#otter .otter-header .otter-container{margin:0 auto;max-width:100%;max-width:750px}#otter .otter-header .otter-container .otter-logo{display:flex;align-items:center}#otter .otter-header .otter-container .otter-logo img{max-width:200px}#otter .otter-header .otter-container .otter-logo .version{background-color:#e5e5e5;border-radius:3px;font-size:0.8em;font-weight:400;margin-left:10px;padding:2px 7px}#otter .otter-main{margin-left:auto;margin-right:auto;max-width:750px}#otter .otter-main .components-panel__body{margin:25px 0;background:#fff;border:1px solid #e2e4e7}#otter .otter-main .components-panel__body .components-panel__body-toggle{border-bottom:1px solid #d6e2ed}#otter .otter-main .components-panel__body .components-panel__row{padding:20px 10px 10px;margin:0}#otter .otter-main .components-panel__body .components-panel__row .components-base-control .components-base-control__field{display:flex;align-items:center;margin-bottom:10px}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field{width:100%}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field{display:block}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field label{font-weight:600;margin-bottom:10px}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field input{border:1px solid #b7c9d9;border-radius:3px;font-size:14px;padding:9px 15px;width:100%;box-shadow:none;height:40px;margin:0 0 10px 0;color:#444}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field input:disabled{background:#f6f6f6;border-color:#eeeeee;color:#bbbbbb}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field input:focus{border-color:#00a0d2;box-shadow:0 0 0 1px #00a0d2;outline:2px solid transparent;outline-offset:-2px}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field .otter-text-field-button-group{display:flex;align-items:center;margin:2px 0 15px}#otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field .otter-text-field-button-group .is-primary{padding:2px 20px;font-size:14px;margin-right:10px}#otter .otter-main .components-panel__body .otter-info{padding:0 10px 10px;background-image:url(data:image/png;base64,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);background-size:100px;background-repeat:no-repeat;background-position:bottom right}#otter .otter-main .components-panel__body .otter-info h2{font-weight:300;margin-bottom:10px}#otter .otter-main .components-panel__body .otter-info p{margin:0 0 1.5em 0}#otter .otter-main .components-panel__body .otter-info .otter-info-button-group{display:flex}#otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-default,#otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-secondary{padding:2px 20px;font-size:14px}#otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-default:first-child,#otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-secondary:first-child{margin-right:15px}#otter .otter-footer{text-align:center;color:#72777c;font-style:italic;border-top:1px #e1e1e1 solid;border-bottom:1px #e1e1e1 solid;padding:20px;margin:2rem 0 1.5rem}#otter .otter-footer .otter-container{margin:0 auto}#otter .components-placeholder{background:#f6f6f6;margin-top:25vh;margin-bottom:25vh}#otter .components-placeholder .components-placeholder__fieldset{justify-content:center}.otter-onboarding-modal{max-width:350px}.otter-onboarding-modal .components-modal__header{text-align:center}.otter-onboarding-modal .components-modal__header h1{width:100%}.otter-onboarding-modal .otter-onboarding-modal-content{text-align:center;margin:10px 0 15px}.otter-onboarding-modal .otter-onboarding-modal-action{text-align:center;margin:10px 0}.otter-onboarding-modal .otter-onboarding-modal-action .components-button{padding:2px 20px;font-size:14px;margin-right:10px}.components-modal__screen-overlay{background-color:rgba(0,0,0,0.5)}.react-joyride__tooltip{font-size:13px !important}.react-joyride__tooltip>div{text-align:left !important}.react-joyride__tooltip div:nth-of-type(2){margin-top:5px !important}.react-joyride__tooltip button{text-decoration:underline}.react-joyride__beacon span:first-child{background-color:#00739c !important}.react-joyride__beacon span:last-child{background-color:rgba(26,129,165,0.4) !important;border:2px solid #00739c !important}.react-joyride__tooltip button[data-action="primary"]{background:#0085ba !important;border-color:#006a95 #00648c #00648c !important;box-shadow:inset 0 -1px 0 #00648c !important;color:#fff !important;text-decoration:none !important;text-shadow:0 -1px 1px #005d82,1px 0 1px #005d82,0 1px 1px #005d82,-1px 0 1px #005d82 !important;padding:2px 20px !important;height:auto !important;line-height:28px !important;font-size:14px !important}.react-joyride__tooltip button[data-action="back"]{color:#23282d !important;font-size:14px !important}.react-notification-root .notification-container-bottom-left{bottom:40px}.react-notification-root .notification-container-mobile-bottom{bottom:60px}@media (min-width: 782px){.react-joyride__spotlight,.__floater,.__floater__open,.react-joyride__beacon{margin-top:-32px}}@media (max-width: 782px){#otter .otter-header .otter-container .otter-logo{justify-content:center}#otter .otter-info{background-image:none !important}.react-joyride__spotlight,.__floater,.__floater__open,.react-joyride__beacon{margin-top:-44px}}@media (max-width: 600px){.react-joyride__spotlight,.__floater,.__floater__open,.react-joyride__beacon{margin-top:0}}.branch-5-2 #otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field .otter-text-field-button-group .is-primary,.branch-5-3 #otter .otter-main .components-panel__body .components-panel__row .components-base-control.otter-text-field .components-base-control__field .otter-text-field-button-group .is-primary{height:auto}.branch-5-2 #otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-default,.branch-5-2 #otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-secondary,.branch-5-3 #otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-default,.branch-5-3 #otter .otter-main .components-panel__body .otter-info .otter-info-button-group .is-secondary{height:auto}.branch-5-2 .otter-onboarding-modal .otter-onboarding-modal-action .components-button,.branch-5-3 .otter-onboarding-modal .otter-onboarding-modal-action .components-button{height:auto}
|
2 |
|
3 |
+
.notification-container-bottom-center,.notification-container-bottom-left,.notification-container-bottom-right,.notification-container-center,.notification-container-top-center,.notification-container-top-left,.notification-container-top-right{width:325px;position:absolute;pointer-events:all}.notification-container-bottom-center,.notification-container-center,.notification-container-top-center{display:flex;justify-content:center;align-items:center;flex-direction:column;left:calc(50% - 162.5px)}.notification-container-center{top:20px;height:100%;pointer-events:none}.notification-container-center .center-inner{width:325px;display:flex;justify-content:center;align-items:center;flex-direction:column;pointer-events:all}.notification-container-top-center{top:20px}.notification-container-bottom-center{bottom:20px}.notification-container-top-left{left:20px;top:20px}.notification-container-top-right{right:20px;top:20px}.notification-container-bottom-left{left:20px;bottom:20px}.notification-container-bottom-right{bottom:20px;right:20px}.notification-container-mobile-bottom,.notification-container-mobile-top{pointer-events:all;position:absolute}.notification-container-mobile-top{right:20px;left:20px;top:20px}.notification-container-mobile-bottom{right:20px;left:20px;bottom:20px;margin-bottom:-15px}.notification-default{border-left:8px solid #0562c7}.notification-default,.notification-default .timer{background-color:#007bff}.notification-default .timer-filler{background-color:#fff}.notification-default .notification-close{background-color:#007bff}.notification-success{border-left:8px solid #1f8838}.notification-success,.notification-success .timer{background-color:#28a745}.notification-success .timer-filler{background-color:#fff}.notification-success .notification-close{background-color:#28a745}.notification-danger{border-left:8px solid #bd1120}.notification-danger,.notification-danger .timer{background-color:#dc3545}.notification-danger .timer-filler{background-color:#fff}.notification-danger .notification-close{background-color:#dc3545}.notification-info{border-left:8px solid #138b9e}.notification-info,.notification-info .timer{background-color:#17a2b8}.notification-info .timer-filler{background-color:#fff}.notification-info .notification-close{background-color:#17a2b8}.notification-warning{border-left:8px solid #ce9c09}.notification-warning,.notification-warning .timer{background-color:#eab000}.notification-warning .timer-filler{background-color:#fff}.notification-warning .notification-close{background-color:#eab000}.notification-awesome{border-left:8px solid #4c3fb1}.notification-awesome,.notification-awesome .timer{background-color:#685dc3}.notification-awesome .timer-filler{background-color:#fff}.notification-awesome .notification-close{background-color:#685dc3}@-webkit-keyframes timer{0%{width:100%}to{width:0}}@keyframes timer{0%{width:100%}to{width:0}}.react-notification-root{position:fixed;z-index:9000;pointer-events:none;width:100%;height:100%}.notification-item{display:flex;position:relative;border-radius:3px;margin-bottom:15px;box-shadow:1px 3px 4px rgba(0,0,0,0.2);cursor:pointer}.notification-item .timer{width:100%;margin-top:10px}.notification-item .timer,.notification-item .timer .timer-filler{height:3px;border-radius:5px}.notification-item .notification-title{color:#fff;font-weight:700;font-size:14px;margin-top:5px;margin-bottom:5px}.notification-item .notification-message{color:#fff;max-width:calc(100% - 15px);font-size:14px;line-height:150%;word-wrap:break-word;margin-bottom:0;margin-top:0}.notification-item .notification-content{padding:8px 15px;display:inline-block;width:100%}.notification-item .notification-close{width:18px;height:18px;border-radius:50%;display:inline-block;position:absolute;right:10px;top:10px}.notification-item .notification-close:after{content:"\D7";position:absolute;transform:translate(-50%, -50%);color:#fff;font-size:12px;left:50%;top:50%}.notification-container-mobile-bottom .notification-item,.notification-container-mobile-bottom .notification-parent,.notification-container-mobile-top .notification-item,.notification-container-mobile-top .notification-parent{max-width:100%;width:100%}.notification-container-bottom-right .notification-parent,.notification-container-top-right .notification-parent{margin-left:auto}.notification-container-bottom-left .notification-parent,.notification-container-top-left .notification-parent{margin-right:auto}.notification-container-mobile-bottom .notification-parent,.notification-container-mobile-top .notification-parent{margin-left:auto;margin-right:auto}
|
4 |
|
build/build.js
CHANGED
@@ -28,12 +28,12 @@
|
|
28 |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
29 |
* SOFTWARE.
|
30 |
*/
|
31 |
-
var n="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,o=function(){for(var e=["Edge","Trident","Firefox"],t=0;t<e.length;t+=1)if(n&&navigator.userAgent.indexOf(e[t])>=0)return 1;return 0}();var r=n&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then((function(){t=!1,e()})))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout((function(){t=!1,e()}),o))}};function i(e){return e&&"[object Function]"==={}.toString.call(e)}function a(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function s(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function l(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=a(e),n=t.overflow,o=t.overflowX,r=t.overflowY;return/(auto|scroll|overlay)/.test(n+r+o)?e:l(s(e))}function c(e){return e&&e.referenceNode?e.referenceNode:e}var u=n&&!(!window.MSInputMethodContext||!document.documentMode),p=n&&/MSIE 10/.test(navigator.userAgent);function f(e){return 11===e?u:10===e?p:u||p}function d(e){if(!e)return document.documentElement;for(var t=f(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var o=n&&n.nodeName;return o&&"BODY"!==o&&"HTML"!==o?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===a(n,"position")?d(n):n:e?e.ownerDocument.documentElement:document.documentElement}function h(e){return null!==e.parentNode?h(e.parentNode):e}function m(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,o=n?e:t,r=n?t:e,i=document.createRange();i.setStart(o,0),i.setEnd(r,0);var a,s,l=i.commonAncestorContainer;if(e!==l&&t!==l||o.contains(r))return"BODY"===(s=(a=l).nodeName)||"HTML"!==s&&d(a.firstElementChild)!==a?d(l):l;var c=h(e);return c.host?m(c.host,t):m(e,h(t).host)}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",o=e.nodeName;if("BODY"===o||"HTML"===o){var r=e.ownerDocument.documentElement,i=e.ownerDocument.scrollingElement||r;return i[n]}return e[n]}function v(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=y(t,"top"),r=y(t,"left"),i=n?-1:1;return e.top+=o*i,e.bottom+=o*i,e.left+=r*i,e.right+=r*i,e}function g(e,t){var n="x"===t?"Left":"Top",o="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+o+"Width"],10)}function b(e,t,n,o){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],f(10)?parseInt(n["offset"+e])+parseInt(o["margin"+("Height"===e?"Top":"Left")])+parseInt(o["margin"+("Height"===e?"Bottom":"Right")]):0)}function w(e){var t=e.body,n=e.documentElement,o=f(10)&&getComputedStyle(n);return{height:b("Height",t,n,o),width:b("Width",t,n,o)}}var E=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},O=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),S=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function x(e){return k({},e,{right:e.left+e.width,bottom:e.top+e.height})}function P(e){var t={};try{if(f(10)){t=e.getBoundingClientRect();var n=y(e,"top"),o=y(e,"left");t.top+=n,t.left+=o,t.bottom+=n,t.right+=o}else t=e.getBoundingClientRect()}catch(e){}var r={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},i="HTML"===e.nodeName?w(e.ownerDocument):{},s=i.width||e.clientWidth||r.width,l=i.height||e.clientHeight||r.height,c=e.offsetWidth-s,u=e.offsetHeight-l;if(c||u){var p=a(e);c-=g(p,"x"),u-=g(p,"y"),r.width-=c,r.height-=u}return x(r)}function C(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=f(10),r="HTML"===t.nodeName,i=P(e),s=P(t),c=l(e),u=a(t),p=parseFloat(u.borderTopWidth,10),d=parseFloat(u.borderLeftWidth,10);n&&r&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var h=x({top:i.top-s.top-p,left:i.left-s.left-d,width:i.width,height:i.height});if(h.marginTop=0,h.marginLeft=0,!o&&r){var m=parseFloat(u.marginTop,10),y=parseFloat(u.marginLeft,10);h.top-=p-m,h.bottom-=p-m,h.left-=d-y,h.right-=d-y,h.marginTop=m,h.marginLeft=y}return(o&&!n?t.contains(c):t===c&&"BODY"!==c.nodeName)&&(h=v(h,t)),h}function N(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,o=C(e,n),r=Math.max(n.clientWidth,window.innerWidth||0),i=Math.max(n.clientHeight,window.innerHeight||0),a=t?0:y(n),s=t?0:y(n,"left"),l={top:a-o.top+o.marginTop,left:s-o.left+o.marginLeft,width:r,height:i};return x(l)}function T(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return!1;if("fixed"===a(e,"position"))return!0;var n=s(e);return!!n&&T(n)}function j(e){if(!e||!e.parentElement||f())return document.documentElement;for(var t=e.parentElement;t&&"none"===a(t,"transform");)t=t.parentElement;return t||document.documentElement}function I(e,t,n,o){var r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],i={top:0,left:0},a=r?j(e):m(e,c(t));if("viewport"===o)i=N(a,r);else{var u=void 0;"scrollParent"===o?"BODY"===(u=l(s(t))).nodeName&&(u=e.ownerDocument.documentElement):u="window"===o?e.ownerDocument.documentElement:o;var p=C(u,a,r);if("HTML"!==u.nodeName||T(a))i=p;else{var f=w(e.ownerDocument),d=f.height,h=f.width;i.top+=p.top-p.marginTop,i.bottom=d+p.top,i.left+=p.left-p.marginLeft,i.right=h+p.left}}var y="number"==typeof(n=n||0);return i.left+=y?n:n.left||0,i.top+=y?n:n.top||0,i.right-=y?n:n.right||0,i.bottom-=y?n:n.bottom||0,i}function R(e){return e.width*e.height}function M(e,t,n,o,r){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var a=I(n,o,i,r),s={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}},l=Object.keys(s).map((function(e){return k({key:e},s[e],{area:R(s[e])})})).sort((function(e,t){return t.area-e.area})),c=l.filter((function(e){var t=e.width,o=e.height;return t>=n.clientWidth&&o>=n.clientHeight})),u=c.length>0?c[0].key:l[0].key,p=e.split("-")[1];return u+(p?"-"+p:"")}function L(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=o?j(t):m(t,c(n));return C(n,r,o)}function _(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),o=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+o,height:e.offsetHeight+n}}function A(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function D(e,t,n){n=n.split("-")[0];var o=_(e),r={width:o.width,height:o.height},i=-1!==["right","left"].indexOf(n),a=i?"top":"left",s=i?"left":"top",l=i?"height":"width",c=i?"width":"height";return r[a]=t[a]+t[l]/2-o[l]/2,r[s]=n===s?t[s]-o[c]:t[A(s)],r}function F(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function W(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===n}));var o=F(e,(function(e){return e[t]===n}));return e.indexOf(o)}(e,"name",n))).forEach((function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&i(n)&&(t.offsets.popper=x(t.offsets.popper),t.offsets.reference=x(t.offsets.reference),t=n(t,e))})),t}function B(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=L(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=M(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=D(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=W(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function z(e,t){return e.some((function(e){var n=e.name;return e.enabled&&n===t}))}function H(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),o=0;o<t.length;o++){var r=t[o],i=r?""+r+n:e;if(void 0!==document.body.style[i])return i}return null}function U(){return this.state.isDestroyed=!0,z(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[H("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function q(e){var t=e.ownerDocument;return t?t.defaultView:window}function G(e,t,n,o){n.updateBound=o,q(e).addEventListener("resize",n.updateBound,{passive:!0});var r=l(e);return function e(t,n,o,r){var i="BODY"===t.nodeName,a=i?t.ownerDocument.defaultView:t;a.addEventListener(n,o,{passive:!0}),i||e(l(a.parentNode),n,o,r),r.push(a)}(r,"scroll",n.updateBound,n.scrollParents),n.scrollElement=r,n.eventsEnabled=!0,n}function V(){this.state.eventsEnabled||(this.state=G(this.reference,this.options,this.state,this.scheduleUpdate))}function Y(){var e,t;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(e=this.reference,t=this.state,q(e).removeEventListener("resize",t.updateBound),t.scrollParents.forEach((function(e){e.removeEventListener("scroll",t.updateBound)})),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t))}function $(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function K(e,t){Object.keys(t).forEach((function(n){var o="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&$(t[n])&&(o="px"),e.style[n]=t[n]+o}))}var X=n&&/Firefox/i.test(navigator.userAgent);function J(e,t,n){var o=F(e,(function(e){return e.name===t})),r=!!o&&e.some((function(e){return e.name===n&&e.enabled&&e.order<o.order}));if(!r){var i="`"+t+"`",a="`"+n+"`";console.warn(a+" modifier is required by "+i+" modifier in order to work, be sure to include it before "+i+"!")}return r}var Z=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Q=Z.slice(3);function ee(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Q.indexOf(e),o=Q.slice(n+1).concat(Q.slice(0,n));return t?o.reverse():o}var te="flip",ne="clockwise",oe="counterclockwise";function re(e,t,n,o){var r=[0,0],i=-1!==["right","left"].indexOf(o),a=e.split(/(\+|\-)/).map((function(e){return e.trim()})),s=a.indexOf(F(a,(function(e){return-1!==e.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==s?[a.slice(0,s).concat([a[s].split(l)[0]]),[a[s].split(l)[1]].concat(a.slice(s+1))]:[a];return(c=c.map((function(e,o){var r=(1===o?!i:i)?"height":"width",a=!1;return e.reduce((function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,a=!0,e):a?(e[e.length-1]+=t,a=!1,e):e.concat(t)}),[]).map((function(e){return function(e,t,n,o){var r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),i=+r[1],a=r[2];if(!i)return e;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=o}return x(s)[t]/100*i}if("vh"===a||"vw"===a){return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*i}return i}(e,r,t,n)}))}))).forEach((function(e,t){e.forEach((function(n,o){$(n)&&(r[t]+=n*("-"===e[o-1]?-1:1))}))})),r}var ie={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],o=t.split("-")[1];if(o){var r=e.offsets,i=r.reference,a=r.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",c=s?"width":"height",u={start:S({},l,i[l]),end:S({},l,i[l]+i[c]-a[c])};e.offsets.popper=k({},a,u[o])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,o=e.placement,r=e.offsets,i=r.popper,a=r.reference,s=o.split("-")[0],l=void 0;return l=$(+n)?[+n,0]:re(n,i,a,s),"left"===s?(i.top+=l[0],i.left-=l[1]):"right"===s?(i.top+=l[0],i.left+=l[1]):"top"===s?(i.left+=l[0],i.top-=l[1]):"bottom"===s&&(i.left+=l[0],i.top+=l[1]),e.popper=i,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||d(e.instance.popper);e.instance.reference===n&&(n=d(n));var o=H("transform"),r=e.instance.popper.style,i=r.top,a=r.left,s=r[o];r.top="",r.left="",r[o]="";var l=I(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);r.top=i,r.left=a,r[o]=s,t.boundaries=l;var c=t.priority,u=e.offsets.popper,p={primary:function(e){var n=u[e];return u[e]<l[e]&&!t.escapeWithReference&&(n=Math.max(u[e],l[e])),S({},e,n)},secondary:function(e){var n="right"===e?"left":"top",o=u[n];return u[e]>l[e]&&!t.escapeWithReference&&(o=Math.min(u[n],l[e]-("right"===e?u.width:u.height))),S({},n,o)}};return c.forEach((function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=k({},u,p[t](e))})),e.offsets.popper=u,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,o=t.reference,r=e.placement.split("-")[0],i=Math.floor,a=-1!==["top","bottom"].indexOf(r),s=a?"right":"bottom",l=a?"left":"top",c=a?"width":"height";return n[s]<i(o[l])&&(e.offsets.popper[l]=i(o[l])-n[c]),n[l]>i(o[s])&&(e.offsets.popper[l]=i(o[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!J(e.instance.modifiers,"arrow","keepTogether"))return e;var o=t.element;if("string"==typeof o){if(!(o=e.instance.popper.querySelector(o)))return e}else if(!e.instance.popper.contains(o))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],i=e.offsets,s=i.popper,l=i.reference,c=-1!==["left","right"].indexOf(r),u=c?"height":"width",p=c?"Top":"Left",f=p.toLowerCase(),d=c?"left":"top",h=c?"bottom":"right",m=_(o)[u];l[h]-m<s[f]&&(e.offsets.popper[f]-=s[f]-(l[h]-m)),l[f]+m>s[h]&&(e.offsets.popper[f]+=l[f]+m-s[h]),e.offsets.popper=x(e.offsets.popper);var y=l[f]+l[u]/2-m/2,v=a(e.instance.popper),g=parseFloat(v["margin"+p],10),b=parseFloat(v["border"+p+"Width"],10),w=y-e.offsets.popper[f]-g-b;return w=Math.max(Math.min(s[u]-m,w),0),e.arrowElement=o,e.offsets.arrow=(S(n={},f,Math.round(w)),S(n,d,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if(z(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=I(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),o=e.placement.split("-")[0],r=A(o),i=e.placement.split("-")[1]||"",a=[];switch(t.behavior){case te:a=[o,r];break;case ne:a=ee(o);break;case oe:a=ee(o,!0);break;default:a=t.behavior}return a.forEach((function(s,l){if(o!==s||a.length===l+1)return e;o=e.placement.split("-")[0],r=A(o);var c=e.offsets.popper,u=e.offsets.reference,p=Math.floor,f="left"===o&&p(c.right)>p(u.left)||"right"===o&&p(c.left)<p(u.right)||"top"===o&&p(c.bottom)>p(u.top)||"bottom"===o&&p(c.top)<p(u.bottom),d=p(c.left)<p(n.left),h=p(c.right)>p(n.right),m=p(c.top)<p(n.top),y=p(c.bottom)>p(n.bottom),v="left"===o&&d||"right"===o&&h||"top"===o&&m||"bottom"===o&&y,g=-1!==["top","bottom"].indexOf(o),b=!!t.flipVariations&&(g&&"start"===i&&d||g&&"end"===i&&h||!g&&"start"===i&&m||!g&&"end"===i&&y),w=!!t.flipVariationsByContent&&(g&&"start"===i&&h||g&&"end"===i&&d||!g&&"start"===i&&y||!g&&"end"===i&&m),E=b||w;(f||v||E)&&(e.flipped=!0,(f||v)&&(o=a[l+1]),E&&(i=function(e){return"end"===e?"start":"start"===e?"end":e}(i)),e.placement=o+(i?"-"+i:""),e.offsets.popper=k({},e.offsets.popper,D(e.instance.popper,e.offsets.reference,e.placement)),e=W(e.instance.modifiers,e,"flip"))})),e},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],o=e.offsets,r=o.popper,i=o.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return r[a?"left":"top"]=i[n]-(s?r[a?"width":"height"]:0),e.placement=A(t),e.offsets.popper=x(r),e}},hide:{order:800,enabled:!0,fn:function(e){if(!J(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=F(e.instance.modifiers,(function(e){return"preventOverflow"===e.name})).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,o=t.y,r=e.offsets.popper,i=F(e.instance.modifiers,(function(e){return"applyStyle"===e.name})).gpuAcceleration;void 0!==i&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0!==i?i:t.gpuAcceleration,s=d(e.instance.popper),l=P(s),c={position:r.position},u=function(e,t){var n=e.offsets,o=n.popper,r=n.reference,i=Math.round,a=Math.floor,s=function(e){return e},l=i(r.width),c=i(o.width),u=-1!==["left","right"].indexOf(e.placement),p=-1!==e.placement.indexOf("-"),f=t?u||p||l%2==c%2?i:a:s,d=t?i:s;return{left:f(l%2==1&&c%2==1&&!p&&t?o.left-1:o.left),top:d(o.top),bottom:d(o.bottom),right:f(o.right)}}(e,window.devicePixelRatio<2||!X),p="bottom"===n?"top":"bottom",f="right"===o?"left":"right",h=H("transform"),m=void 0,y=void 0;if(y="bottom"===p?"HTML"===s.nodeName?-s.clientHeight+u.bottom:-l.height+u.bottom:u.top,m="right"===f?"HTML"===s.nodeName?-s.clientWidth+u.right:-l.width+u.right:u.left,a&&h)c[h]="translate3d("+m+"px, "+y+"px, 0)",c[p]=0,c[f]=0,c.willChange="transform";else{var v="bottom"===p?-1:1,g="right"===f?-1:1;c[p]=y*v,c[f]=m*g,c.willChange=p+", "+f}var b={"x-placement":e.placement};return e.attributes=k({},b,e.attributes),e.styles=k({},c,e.styles),e.arrowStyles=k({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(e){var t,n;return K(e.instance.popper,e.styles),t=e.instance.popper,n=e.attributes,Object.keys(n).forEach((function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)})),e.arrowElement&&Object.keys(e.arrowStyles).length&&K(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,o,r){var i=L(r,t,e,n.positionFixed),a=M(n.placement,i,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute("x-placement",a),K(t,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},ae=function(){function e(t,n){var o=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};E(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(o.update)},this.update=r(this.update.bind(this)),this.options=k({},e.Defaults,a),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(k({},e.Defaults.modifiers,a.modifiers)).forEach((function(t){o.options.modifiers[t]=k({},e.Defaults.modifiers[t]||{},a.modifiers?a.modifiers[t]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(e){return k({name:e},o.options.modifiers[e])})).sort((function(e,t){return e.order-t.order})),this.modifiers.forEach((function(e){e.enabled&&i(e.onLoad)&&e.onLoad(o.reference,o.popper,o.options,e,o.state)})),this.update();var s=this.options.eventsEnabled;s&&this.enableEventListeners(),this.state.eventsEnabled=s}return O(e,[{key:"update",value:function(){return B.call(this)}},{key:"destroy",value:function(){return U.call(this)}},{key:"enableEventListeners",value:function(){return V.call(this)}},{key:"disableEventListeners",value:function(){return Y.call(this)}}]),e}();ae.Utils=("undefined"!=typeof window?window:e).PopperUtils,ae.placements=Z,ae.Defaults=ie,t.a=ae}).call(this,n(12))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){var n=new Error("Element already at target scroll position"),o=new Error("Scroll cancelled"),r=Math.min,i=Date.now;function a(e){return function(t,a,c,u){"function"==typeof(c=c||{})&&(u=c,c={}),"function"!=typeof u&&(u=l);var p=i(),f=t[e],d=c.ease||s,h=isNaN(c.duration)?350:+c.duration,m=!1;return f===a?u(n,t[e]):requestAnimationFrame((function n(s){if(m)return u(o,t[e]);var l=i(),c=r(1,(l-p)/h),y=d(c);t[e]=y*(a-f)+f,c<1?requestAnimationFrame(n):requestAnimationFrame((function(){u(null,t[e])}))})),function(){m=!0}}}function s(e){return.5*(1-Math.cos(Math.PI*e))}function l(){}e.exports={left:a("scrollLeft"),top:a("scrollTop")}},function(e,t,n){"use strict";(function(e){var o=n(1),r=n.n(o),i=n(0),a=n.n(i),s=n(10),l=n.n(s),c=n(11),u=n(3),p=n.n(u),f=n(2),d=n.n(f),h=n(5),m=n.n(h),y=n(4),v=n.n(y),g=n(8);function b(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function w(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function E(e,t,n){return t&&w(e.prototype,t),n&&w(e,n),e}function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function k(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?S(Object(n),!0).forEach((function(t){O(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):S(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function x(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&C(e,t)}function P(e){return(P=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function C(e,t){return(C=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function N(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function T(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function j(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?T(e):t}var I={flip:{padding:20},preventOverflow:{padding:10}},R={INIT:"init",IDLE:"idle",OPENING:"opening",OPEN:"open",CLOSING:"closing",ERROR:"error"},M=n.n(g).a.canUseDOM,L=void 0!==v.a.createPortal;function _(){return"ontouchstart"in window&&/Mobi/.test(navigator.userAgent)}function A(e){var t=e.title,n=e.data,o=e.warn,r=void 0!==o&&o,i=e.debug,a=void 0!==i&&i,s=r?console.warn||console.error:console.log;a&&t&&n&&(console.groupCollapsed("%creact-floater: ".concat(t),"color: #9b00ff; font-weight: bold; font-size: 12px;"),Array.isArray(n)?n.forEach((function(e){d.a.plainObject(e)&&e.key?s.apply(console,[e.key,e.value]):s.apply(console,[e])})):s.apply(console,[n]),console.groupEnd())}function D(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.addEventListener(t,n,o)}function F(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.removeEventListener(t,n,o)}function W(){}var B=function(e){function t(e){var n;return b(this,t),n=j(this,P(t).call(this,e)),M?(n.node=document.createElement("div"),e.id&&(n.node.id=e.id),e.zIndex&&(n.node.style.zIndex=e.zIndex),document.body.appendChild(n.node),n):j(n)}return x(t,e),E(t,[{key:"componentDidMount",value:function(){M&&(L||this.renderPortal())}},{key:"componentDidUpdate",value:function(){M&&(L||this.renderPortal())}},{key:"componentWillUnmount",value:function(){M&&this.node&&(L||v.a.unmountComponentAtNode(this.node),document.body.removeChild(this.node))}},{key:"renderPortal",value:function(){if(!M)return null;var e=this.props,t=e.children,n=e.setRef;return L?v.a.createPortal(t,this.node):(n(v.a.unstable_renderSubtreeIntoContainer(this,t.length>1?r.a.createElement("div",null,t):t[0],this.node)),null)}},{key:"renderReact16",value:function(){var e=this.props,t=e.hasChildren,n=e.placement,o=e.target;return t?this.renderPortal():o||"center"===n?this.renderPortal():null}},{key:"render",value:function(){return L?this.renderReact16():null}}]),t}(r.a.Component);O(B,"propTypes",{children:a.a.oneOfType([a.a.element,a.a.array]),hasChildren:a.a.bool,id:a.a.oneOfType([a.a.string,a.a.number]),placement:a.a.string,setRef:a.a.func.isRequired,target:a.a.oneOfType([a.a.object,a.a.string]),zIndex:a.a.number});var z=function(e){function t(){return b(this,t),j(this,P(t).apply(this,arguments))}return x(t,e),E(t,[{key:"render",value:function(){var e,t=this.props,n=t.placement,o=t.setArrowRef,i=t.styles.arrow,a=i.color,s=i.display,l=i.length,c=i.margin,u=i.position,p=i.spread,f={display:s,position:u},d=p,h=l;return n.startsWith("top")?(e="0,0 ".concat(d/2,",").concat(h," ").concat(d,",0"),f.bottom=0,f.marginLeft=c,f.marginRight=c):n.startsWith("bottom")?(e="".concat(d,",").concat(h," ").concat(d/2,",0 0,").concat(h),f.top=0,f.marginLeft=c,f.marginRight=c):n.startsWith("left")?(h=p,e="0,0 ".concat(d=l,",").concat(h/2," 0,").concat(h),f.right=0,f.marginTop=c,f.marginBottom=c):n.startsWith("right")&&(h=p,e="".concat(d=l,",").concat(h," ").concat(d,",0 0,").concat(h/2),f.left=0,f.marginTop=c,f.marginBottom=c),r.a.createElement("div",{className:"__floater__arrow",style:this.parentStyle},r.a.createElement("span",{ref:o,style:f},r.a.createElement("svg",{width:d,height:h,version:"1.1",xmlns:"http://www.w3.org/2000/svg"},r.a.createElement("polygon",{points:e,fill:a}))))}},{key:"parentStyle",get:function(){var e=this.props,t=e.placement,n=e.styles.arrow.length,o={pointerEvents:"none",position:"absolute",width:"100%"};return t.startsWith("top")?(o.bottom=0,o.left=0,o.right=0,o.height=n):t.startsWith("bottom")?(o.left=0,o.right=0,o.top=0,o.height=n):t.startsWith("left")?(o.right=0,o.top=0,o.bottom=0):t.startsWith("right")&&(o.left=0,o.top=0),o}}]),t}(r.a.Component);O(z,"propTypes",{placement:a.a.string.isRequired,setArrowRef:a.a.func.isRequired,styles:a.a.object.isRequired});var H=function(e){var t=e.handleClick,n=e.styles,o=n.color,i=n.height,a=n.width,s=N(n,["color","height","width"]);return r.a.createElement("button",{"aria-label":"close",onClick:t,style:s,type:"button"},r.a.createElement("svg",{width:"".concat(a,"px"),height:"".concat(i,"px"),viewBox:"0 0 18 18",version:"1.1",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid"},r.a.createElement("g",null,r.a.createElement("path",{d:"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z",fill:o}))))};H.propTypes={handleClick:a.a.func.isRequired,styles:a.a.object.isRequired};var U=function(e){var t=e.content,n=e.footer,o=e.handleClick,i=e.open,a=e.positionWrapper,s=e.showCloseButton,l=e.title,c=e.styles,u={content:r.a.isValidElement(t)?t:r.a.createElement("div",{className:"__floater__content",style:c.content},t)};return l&&(u.title=r.a.isValidElement(l)?l:r.a.createElement("div",{className:"__floater__title",style:c.title},l)),n&&(u.footer=r.a.isValidElement(n)?n:r.a.createElement("div",{className:"__floater__footer",style:c.footer},n)),!s&&!a||d.a.boolean(i)||(u.close=r.a.createElement(H,{styles:c.close,handleClick:o})),r.a.createElement("div",{className:"__floater__container",style:c.container},u.close,u.title,u.content,u.footer)};U.propTypes={content:a.a.node.isRequired,footer:a.a.node,handleClick:a.a.func.isRequired,open:a.a.bool,positionWrapper:a.a.bool.isRequired,showCloseButton:a.a.bool.isRequired,styles:a.a.object.isRequired,title:a.a.node};var q=function(e){function t(){return b(this,t),j(this,P(t).apply(this,arguments))}return x(t,e),E(t,[{key:"render",value:function(){var e=this.props,t=e.component,n=e.handleClick,o=e.hideArrow,i=e.setFloaterRef,a=e.status,s={},l=["__floater"];return t?r.a.isValidElement(t)?s.content=r.a.cloneElement(t,{closeFn:n}):s.content=t({closeFn:n}):s.content=r.a.createElement(U,this.props),a===R.OPEN&&l.push("__floater__open"),o||(s.arrow=r.a.createElement(z,this.props)),r.a.createElement("div",{ref:i,className:l.join(" "),style:this.style},r.a.createElement("div",{className:"__floater__body"},s.content,s.arrow))}},{key:"style",get:function(){var e=this.props,t=e.disableAnimation,n=e.component,o=e.placement,r=e.hideArrow,i=e.status,a=e.styles,s=a.arrow.length,l=a.floater,c=a.floaterCentered,u=a.floaterClosing,p=a.floaterOpening,f=a.floaterWithAnimation,d=a.floaterWithComponent,h={};return r||(o.startsWith("top")?h.padding="0 0 ".concat(s,"px"):o.startsWith("bottom")?h.padding="".concat(s,"px 0 0"):o.startsWith("left")?h.padding="0 ".concat(s,"px 0 0"):o.startsWith("right")&&(h.padding="0 0 0 ".concat(s,"px"))),-1!==[R.OPENING,R.OPEN].indexOf(i)&&(h=k({},h,{},p)),i===R.CLOSING&&(h=k({},h,{},u)),i!==R.OPEN||t||(h=k({},h,{},f)),"center"===o&&(h=k({},h,{},c)),n&&(h=k({},h,{},d)),k({},l,{},h)}}]),t}(r.a.Component);O(q,"propTypes",{component:a.a.oneOfType([a.a.func,a.a.element]),content:a.a.node,disableAnimation:a.a.bool.isRequired,footer:a.a.node,handleClick:a.a.func.isRequired,hideArrow:a.a.bool.isRequired,open:a.a.bool,placement:a.a.string.isRequired,positionWrapper:a.a.bool.isRequired,setArrowRef:a.a.func.isRequired,setFloaterRef:a.a.func.isRequired,showCloseButton:a.a.bool,status:a.a.string.isRequired,styles:a.a.object.isRequired,title:a.a.node});var G=function(e){function t(){return b(this,t),j(this,P(t).apply(this,arguments))}return x(t,e),E(t,[{key:"render",value:function(){var e,t=this.props,n=t.children,o=t.handleClick,i=t.handleMouseEnter,a=t.handleMouseLeave,s=t.setChildRef,l=t.setWrapperRef,c=t.style,u=t.styles;if(n)if(1===r.a.Children.count(n))if(r.a.isValidElement(n)){var p=d.a.function(n.type)?"innerRef":"ref";e=r.a.cloneElement(r.a.Children.only(n),O({},p,s))}else e=r.a.createElement("span",null,n);else e=n;return e?r.a.createElement("span",{ref:l,style:k({},u,{},c),onClick:o,onMouseEnter:i,onMouseLeave:a},e):null}}]),t}(r.a.Component);O(G,"propTypes",{children:a.a.node,handleClick:a.a.func.isRequired,handleMouseEnter:a.a.func.isRequired,handleMouseLeave:a.a.func.isRequired,setChildRef:a.a.func.isRequired,setWrapperRef:a.a.func.isRequired,style:a.a.object,styles:a.a.object.isRequired});var V={zIndex:100};var Y=["position","top","right","bottom","left"],$=function(t){function n(e){var t;return b(this,n),O(T(t=j(this,P(n).call(this,e))),"setArrowRef",(function(e){t.arrowRef=e})),O(T(t),"setChildRef",(function(e){t.childRef=e})),O(T(t),"setFloaterRef",(function(e){t.floaterRef||(t.floaterRef=e)})),O(T(t),"setWrapperRef",(function(e){t.wrapperRef=e})),O(T(t),"handleTransitionEnd",(function(){var e=t.state.status,n=t.props.callback;t.wrapperPopper&&t.wrapperPopper.instance.update(),t.setState({status:e===R.OPENING?R.OPEN:R.IDLE},(function(){var e=t.state.status;n(e===R.OPEN?"open":"close",t.props)}))})),O(T(t),"handleClick",(function(){var e=t.props,n=e.event,o=e.open;if(!d.a.boolean(o)){var r=t.state,i=r.positionWrapper,a=r.status;("click"===t.event||"hover"===t.event&&i)&&(A({title:"click",data:[{event:n,status:a===R.OPEN?"closing":"opening"}],debug:t.debug}),t.toggle())}})),O(T(t),"handleMouseEnter",(function(){var e=t.props,n=e.event,o=e.open;if(!d.a.boolean(o)&&!_()){var r=t.state.status;"hover"===t.event&&r===R.IDLE&&(A({title:"mouseEnter",data:[{key:"originalEvent",value:n}],debug:t.debug}),clearTimeout(t.eventDelayTimeout),t.toggle())}})),O(T(t),"handleMouseLeave",(function(){var e=t.props,n=e.event,o=e.eventDelay,r=e.open;if(!d.a.boolean(r)&&!_()){var i=t.state,a=i.status,s=i.positionWrapper;"hover"===t.event&&(A({title:"mouseLeave",data:[{key:"originalEvent",value:n}],debug:t.debug}),o?-1===[R.OPENING,R.OPEN].indexOf(a)||s||t.eventDelayTimeout||(t.eventDelayTimeout=setTimeout((function(){delete t.eventDelayTimeout,t.toggle()}),1e3*o)):t.toggle(R.IDLE))}})),t.state={currentPlacement:e.placement,positionWrapper:e.wrapperOptions.position&&!!e.target,status:R.INIT,statusWrapper:R.INIT},t._isMounted=!1,M&&window.addEventListener("load",(function(){t.popper&&t.popper.instance.update(),t.wrapperPopper&&t.wrapperPopper.instance.update()})),t}return x(n,t),E(n,[{key:"componentDidMount",value:function(){if(M){var e=this.state.positionWrapper,t=this.props,n=t.children,o=t.open,r=t.target;this._isMounted=!0,A({title:"init",data:{hasChildren:!!n,hasTarget:!!r,isControlled:d.a.boolean(o),positionWrapper:e,target:this.target,floater:this.floaterRef},debug:this.debug}),this.initPopper(),!n&&r&&d.a.boolean(o)}}},{key:"componentDidUpdate",value:function(e,t){if(M){var n,o=this.props,r=o.autoOpen,i=o.open,a=o.target,s=o.wrapperOptions,l=m()(t,this.state),c=l.changedFrom,u=l.changedTo;if(e.open!==i)d.a.boolean(i)&&(n=i?R.OPENING:R.CLOSING),this.toggle(n);e.wrapperOptions.position===s.position&&e.target===a||this.changeWrapperPosition(this.props),u("status",R.IDLE)&&i?this.toggle(R.OPEN):c("status",R.INIT,R.IDLE)&&r&&this.toggle(R.OPEN),this.popper&&u("status",R.OPENING)&&this.popper.instance.update(),this.floaterRef&&(u("status",R.OPENING)||u("status",R.CLOSING))&&function(e,t,n){var o,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];D(e,t,o=function(r){n(r),F(e,t,o)},r)}(this.floaterRef,"transitionend",this.handleTransitionEnd)}}},{key:"componentWillUnmount",value:function(){M&&(this._isMounted=!1,this.popper&&this.popper.instance.destroy(),this.wrapperPopper&&this.wrapperPopper.instance.destroy())}},{key:"initPopper",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.target,n=this.state.positionWrapper,o=this.props,r=o.disableFlip,i=o.getPopper,a=o.hideArrow,s=o.offset,l=o.placement,u=o.wrapperOptions,p="top"===l||"bottom"===l?"flip":["right","bottom-end","top-end","left","top-start","bottom-start"];if("center"===l)this.setState({status:R.IDLE});else if(t&&this.floaterRef){var f=this.options,h=f.arrow,m=f.flip,y=f.offset,v=N(f,["arrow","flip","offset"]);new c.a(t,this.floaterRef,{placement:l,modifiers:k({arrow:k({enabled:!a,element:this.arrowRef},h),flip:k({enabled:!r,behavior:p},m),offset:k({offset:"0, ".concat(s,"px")},y)},v),onCreate:function(t){e.popper=t,i(t,"floater"),e._isMounted&&e.setState({currentPlacement:t.placement,status:R.IDLE}),l!==t.placement&&setTimeout((function(){t.instance.update()}),1)},onUpdate:function(t){e.popper=t;var n=e.state.currentPlacement;e._isMounted&&t.placement!==n&&e.setState({currentPlacement:t.placement})}})}if(n){var g=d.a.undefined(u.offset)?0:u.offset;new c.a(this.target,this.wrapperRef,{placement:u.placement||l,modifiers:{arrow:{enabled:!1},offset:{offset:"0, ".concat(g,"px")},flip:{enabled:!1}},onCreate:function(t){e.wrapperPopper=t,e._isMounted&&e.setState({statusWrapper:R.IDLE}),i(t,"wrapper"),l!==t.placement&&setTimeout((function(){t.instance.update()}),1)}})}}},{key:"changeWrapperPosition",value:function(e){var t=e.target,n=e.wrapperOptions;this.setState({positionWrapper:n.position&&!!t})}},{key:"toggle",value:function(e){var t=this.state.status===R.OPEN?R.CLOSING:R.OPENING;d.a.undefined(e)||(t=e),this.setState({status:t})}},{key:"render",value:function(){var e=this.state,t=e.currentPlacement,n=e.positionWrapper,o=e.status,i=this.props,a=i.children,s=i.component,l=i.content,c=i.disableAnimation,u=i.footer,p=i.hideArrow,f=i.id,d=i.open,h=i.showCloseButton,m=i.style,y=i.target,v=i.title,g=r.a.createElement(G,{handleClick:this.handleClick,handleMouseEnter:this.handleMouseEnter,handleMouseLeave:this.handleMouseLeave,setChildRef:this.setChildRef,setWrapperRef:this.setWrapperRef,style:m,styles:this.styles.wrapper},a),b={};return n?b.wrapperInPortal=g:b.wrapperAsChildren=g,r.a.createElement("span",null,r.a.createElement(B,{hasChildren:!!a,id:f,placement:t,setRef:this.setFloaterRef,target:y,zIndex:this.styles.options.zIndex},r.a.createElement(q,{component:s,content:l,disableAnimation:c,footer:u,handleClick:this.handleClick,hideArrow:p||"center"===t,open:d,placement:t,positionWrapper:n,setArrowRef:this.setArrowRef,setFloaterRef:this.setFloaterRef,showCloseButton:h,status:o,styles:this.styles,title:v}),b.wrapperInPortal),b.wrapperAsChildren)}},{key:"debug",get:function(){return this.props.debug||!!e.ReactFloaterDebug}},{key:"event",get:function(){var e=this.props,t=e.disableHoverToClick,n=e.event;return"hover"===n&&_()&&!t?"click":n}},{key:"options",get:function(){var e=this.props.options;return p()(I,e||{})}},{key:"styles",get:function(){var e,t=this,n=this.state,o=n.status,r=n.positionWrapper,i=n.statusWrapper,a=this.props.styles,s=p()(function(e){var t=p()(V,e.options||{});return{wrapper:{cursor:"help",display:"inline-flex",flexDirection:"column",zIndex:t.zIndex},wrapperPosition:{left:-1e3,position:"absolute",top:-1e3,visibility:"hidden"},floater:{display:"inline-block",filter:"drop-shadow(0 0 3px rgba(0, 0, 0, 0.3))",maxWidth:300,opacity:0,position:"relative",transition:"opacity 0.3s",visibility:"hidden",zIndex:t.zIndex},floaterOpening:{opacity:1,visibility:"visible"},floaterWithAnimation:{opacity:1,transition:"opacity 0.3s, transform 0.2s",visibility:"visible"},floaterWithComponent:{maxWidth:"100%"},floaterClosing:{opacity:0,visibility:"visible"},floaterCentered:{left:"50%",position:"fixed",top:"50%",transform:"translate(-50%, -50%)"},container:{backgroundColor:"#fff",color:"#666",minHeight:60,minWidth:200,padding:20,position:"relative",zIndex:10},title:{borderBottom:"1px solid #555",color:"#555",fontSize:18,marginBottom:5,paddingBottom:6,paddingRight:18},content:{fontSize:15},close:{backgroundColor:"transparent",border:0,borderRadius:0,color:"#555",fontSize:0,height:15,outline:"none",padding:10,position:"absolute",right:0,top:0,width:15,WebkitAppearance:"none"},footer:{borderTop:"1px solid #ccc",fontSize:13,marginTop:10,paddingTop:5},arrow:{color:"#fff",display:"inline-flex",length:16,margin:8,position:"absolute",spread:32},options:t}}(a),a);r&&(e=-1===[R.IDLE].indexOf(o)||-1===[R.IDLE].indexOf(i)?s.wrapperPosition:this.wrapperPopper.styles,s.wrapper=k({},s.wrapper,{},e));if(this.target){var l=window.getComputedStyle(this.target);this.wrapperStyles?s.wrapper=k({},s.wrapper,{},this.wrapperStyles):-1===["relative","static"].indexOf(l.position)&&(this.wrapperStyles={},r||(Y.forEach((function(e){t.wrapperStyles[e]=l[e]})),s.wrapper=k({},s.wrapper,{},this.wrapperStyles),this.target.style.position="relative",this.target.style.top="auto",this.target.style.right="auto",this.target.style.bottom="auto",this.target.style.left="auto"))}return s}},{key:"target",get:function(){if(!M)return null;var e=this.props.target;return e?d.a.domElement(e)?e:document.querySelector(e):this.childRef||this.wrapperRef}}]),n}(r.a.Component);O($,"propTypes",{autoOpen:a.a.bool,callback:a.a.func,children:a.a.node,component:l()(a.a.oneOfType([a.a.func,a.a.element]),(function(e){return!e.content})),content:l()(a.a.node,(function(e){return!e.component})),debug:a.a.bool,disableAnimation:a.a.bool,disableFlip:a.a.bool,disableHoverToClick:a.a.bool,event:a.a.oneOf(["hover","click"]),eventDelay:a.a.number,footer:a.a.node,getPopper:a.a.func,hideArrow:a.a.bool,id:a.a.oneOfType([a.a.string,a.a.number]),offset:a.a.number,open:a.a.bool,options:a.a.object,placement:a.a.oneOf(["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end","auto","center"]),showCloseButton:a.a.bool,style:a.a.object,styles:a.a.object,target:a.a.oneOfType([a.a.object,a.a.string]),title:a.a.node,wrapperOptions:a.a.shape({offset:a.a.number,placement:a.a.oneOf(["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end","auto"]),position:a.a.bool})}),O($,"defaultProps",{autoOpen:!1,callback:W,debug:!1,disableAnimation:!1,disableFlip:!1,disableHoverToClick:!1,event:"click",eventDelay:.4,getPopper:W,hideArrow:!1,offset:15,placement:"bottom",showCloseButton:!1,styles:{},target:null,wrapperOptions:{position:!1}}),t.a=$}).call(this,n(12))},function(e,t,n){var o;
|
32 |
/*!
|
33 |
Copyright (c) 2017 Jed Watson.
|
34 |
Licensed under the MIT License (MIT), see
|
35 |
http://jedwatson.github.io/classnames
|
36 |
-
*/!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t<arguments.length;t++){var o=arguments[t];if(o){var i=typeof o;if("string"===i||"number"===i)e.push(o);else if(Array.isArray(o)&&o.length){var a=r.apply(null,o);a&&e.push(a)}else if("object"===i)for(var s in o)n.call(o,s)&&o[s]&&e.push(s)}}return e.join(" ")}e.exports?(r.default=r,e.exports=r):void 0===(o=function(){return r}.apply(t,[]))||(e.exports=o)}()},function(e,t,n){e.exports=function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([function(e,t){e.exports=n(1)},function(e,t,n){e.exports=n(2)()},function(e,t,n){"use strict";var o=n(3);function r(){}function i(){}i.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,i,a){if(a!==o){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}var n={array:e.isRequired=e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return n.PropTypes=n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var o=n(0),r=n.n(o),i=n(1),a=n.n(i),s="notification-item",l="bottom-left",c="bottom-right",u="bottom-center",p="top-left",f="top-right",d="top-center",h="success",m="danger",y="info",v="default",g="warning",b="timeout",w=function(e){return null==e};function E(e){return e===l||e===c||e===u}function O(e){return e===p||e===f||e===d}function S(e){var t=e.type,n=e.content,o=e.userDefinedTypes,r=[s];if(n)return r;if(w(o))return function(e){switch(e){case v:return[s,"notification-default"];case h:return[s,"notification-success"];case m:return[s,"notification-danger"];case g:return[s,"notification-warning"];case y:return[s,"notification-info"];default:return[s]}}(t);var i=o.find((function(e){return e.name===t}));return r.concat(i.htmlClasses)}function k(e,t){var n=e.duration,o=e.timingFunction,r=e.delay;return"".concat(n,"ms ").concat(t," ").concat(o," ").concat(r,"ms")}function x(e,t){var n=t.duration,o=t.timingFunction,r=t.delay,i=e||{};return w(i.duration)&&(i.duration=n),w(i.timingFunction)&&(i.timingFunction=o),w(i.delay)&&(i.delay=r),i}function P(e,t){var n,o,r=e,i=r.id,a=r.type,s=r.insert,l=r.content,c=r.container,u=r.animationIn,p=r.animationOut,f=r.slidingEnter,d=r.slidingExit,b=r.touchRevert,E=r.touchSlidingExit,O=r.dismiss,S=r.width,k=r.onRemoval;function P(e,t,n){return{duration:e,timingFunction:t,delay:n}}r.id=i||Math.random().toString(36).substr(2,9),r.type=l?null:a.toLowerCase(),t&&!l&&(r.userDefinedTypes=function(e,t){var n=e.content,o=e.type;if(!n&&o!==h&&o!==m&&o!==y&&o!==v&&o!==g&&t)return t}(r,t)),w(S)||(r.width=S),r.container=c.toLowerCase(),r.insert=(s||"top").toLowerCase(),r.dismiss=(o={duration:0,click:!0,touch:!0,onScreen:!1,waitForAnimation:!1,showIcon:!1},(n=O)?(Object.keys(o).forEach((function(e){w(n[e])&&(n[e]=o[e])})),n):o),r.animationIn=u||[],r.animationOut=p||[],r.onRemoval=k||function(){},r.slidingEnter=x(f,P(600,"linear",0)),r.slidingExit=x(d,P(600,"linear",0)),r.touchRevert=x(b,P(600,"linear",0));var C=E||{},N=C.swipe,T=C.fade;return r.touchSlidingExit=C,r.touchSlidingExit.swipe=x(N||{},P(600,"linear",0)),r.touchSlidingExit.fade=x(T||{},P(300,"linear",0)),r}function C(e,t){var n,o,r=t;this.pause=function(){clearTimeout(n),r-=Date.now()-o},this.resume=function(){o=Date.now(),clearTimeout(n),n=setTimeout(e,r)},this.clear=function(){clearTimeout(n)},this.resume()}var N=new function(){var e=this;return this.types=null,this.add=function(){},this.addNotification=function(t){var n=e.types;return e.add(P(t,n))},this.removeNotification=function(){},this.register=function(t){var n=t.addNotification,o=t.removeNotification,r=t.types;e.add=n,e.removeNotification=o,e.types=r},this};function T(e){return(T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function j(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],o=!0,r=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(o=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);o=!0);}catch(e){r=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(r)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function I(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function R(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?I(Object(n),!0).forEach((function(t){M(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function _(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function A(e){return(A=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function D(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function F(e,t){return(F=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var W=function(){function e(t){var n,o;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),(n=!(o=A(e).call(this,t))||"object"!==T(o)&&"function"!=typeof o?D(this):o).rootElementRef=r.a.createRef(),n.onClick=n.onClick.bind(D(n)),n.onTouchStart=n.onTouchStart.bind(D(n)),n.onTouchMove=n.onTouchMove.bind(D(n)),n.onTouchEnd=n.onTouchEnd.bind(D(n)),n.onMouseEnter=n.onMouseEnter.bind(D(n)),n.onMouseLeave=n.onMouseLeave.bind(D(n));var i=t.notification.width;return n.state={parentStyle:{height:0,overflow:"hidden",width:i?"".concat(i,"px"):"auto"},htmlClassList:S(t.notification),animationPlayState:"running",touchEnabled:!0},n}var t,n;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&F(e,t)}(e,r.a.Component),t=e,(n=[{key:"componentWillUnmount",value:function(){this.timer&&this.timer.clear()}},{key:"componentDidMount",value:function(){function e(){l&&!c&&(o.timer=new C((function(){return o.removeNotification(b)}),l))}var t,n,o=this,r=this.props,i=r.notification,a=r.count,s=i.dismiss,l=s.duration,c=s.onScreen,u=this.rootElementRef.current.scrollHeight,p=(t=i,!((n=a)<=1)&&1<n&&("top"===t.insert&&O(t.container)||"bottom"===t.insert&&E(t.container)));this.setState((function(t){return{parentStyle:{width:t.parentStyle.width,height:"".concat(u,"px"),transition:p?k(i.slidingEnter,"height"):"10ms height"},onTransitionEnd:e}}),(function(){requestAnimationFrame((function(){o.setState((function(e){return{htmlClassList:[].concat(L(i.animationIn),L(e.htmlClassList))}}))}))}))}},{key:"componentDidUpdate",value:function(e){var t=e.removed;this.props.removed&&!t&&this.removeNotification("manual")}},{key:"removeNotification",value:function(e){function t(){return i(a,(function(){return s(a,e)}))}var n=this,o=this.props,r=o.notification,i=o.toggleRemoval,a=r.id,s=r.onRemoval,l=r.dismiss.waitForAnimation,c=[].concat(L(r.animationOut),L(S(r))),u={height:0,transition:k(r.slidingExit,"height")};return l?this.setState((function(e){var o=e.parentStyle.width;return{htmlClassList:c,onAnimationEnd:function(){n.setState({parentStyle:R({width:o},u),onTransitionEnd:t})}}})):this.setState((function(e){return{parentStyle:R({width:e.parentStyle.width},u),onTransitionEnd:t,htmlClassList:c}}))}},{key:"onClick",value:function(){var e=this.props.notification.dismiss;(e.click||e.showIcon)&&this.removeNotification("click")}},{key:"onTouchStart",value:function(e){var t=j(e.touches,1)[0].pageX;this.setState((function(e){var n=e.parentStyle;return{startX:t,currentX:t,parentStyle:R({},n,{position:"relative"})}}))}},{key:"onTouchMove",value:function(e){var t,n,o=this,r=e.touches,i=this.state.startX,a=this.props,s=a.toggleRemoval,l=a.notification,c=l.id,u=l.onRemoval,p=l.slidingExit,f=l.touchSlidingExit,d=f.swipe,h=f.fade,m=j(r,1)[0].pageX,y=m-i,v=2*window.innerWidth,g="".concat(0<=m-i?v:-v,"px");if(t=y,n=Math.abs(t),.4*window.innerWidth<=n){var b=k(d,"left"),w=k(h,"opacity"),E=function(){s(c,(function(){return u(c,"touch")}))};return this.setState((function(e){return{touchEnabled:!1,parentStyle:R({},e.parentStyle,{left:g,opacity:0,transition:"".concat(b,", ").concat(w)}),onTransitionEnd:function(){o.setState((function(e){return{parentStyle:R({},e.parentStyle,{height:0,transition:k(p,"height")}),onTransitionEnd:E}}))}}}))}return this.setState((function(e){var t=e.parentStyle;return{currentX:m,parentStyle:R({},t,{left:"".concat(0+y,"px")})}}))}},{key:"onTouchEnd",value:function(){var e=this.props.notification.touchRevert;this.setState((function(t){return{parentStyle:R({},t.parentStyle,{left:0,transition:k(e,"left")})}}))}},{key:"onMouseEnter",value:function(){this.timer?this.timer.pause():this.setState({animationPlayState:"paused"})}},{key:"onMouseLeave",value:function(){this.timer?this.timer.resume():this.setState({animationPlayState:"running"})}},{key:"renderTimer",value:function(){var e=this,t=this.props.notification.dismiss,n=t.duration,o=t.onScreen,i=this.state.animationPlayState;if(n&&o){var a={animationName:"timer",animationDuration:"".concat(n,"ms"),animationTimingFunction:"linear",animationFillMode:"forwards",animationDelay:0,animationPlayState:i};return r.a.createElement("div",{className:"timer"},r.a.createElement("div",{className:"timer-filler",onAnimationEnd:function(){return e.removeNotification(b)},style:a}))}}},{key:"renderCustomContent",value:function(){var e=this.state.htmlClassList,t=this.props.notification,n=t.id,o=t.content,i=t.dismiss,a=i.duration,s=i.pauseOnHover,l=0<a&&s;return r.a.createElement("div",{className:"".concat([].concat(L(e),["n-child"]).join(" ")),onMouseEnter:l?this.onMouseEnter:null,onMouseLeave:l?this.onMouseLeave:null},r.a.isValidElement(o)?o:r.a.createElement(o,{id:n}))}},{key:"renderNotification",value:function(){var e=this.props.notification,t=e.title,n=e.message,o=e.dismiss,i=o.showIcon,a=o.duration,s=o.pauseOnHover,l=this.state.htmlClassList,c=0<a&&s;return r.a.createElement("div",{className:"".concat([].concat(L(l),["n-child"]).join(" ")),onMouseEnter:c?this.onMouseEnter:null,onMouseLeave:c?this.onMouseLeave:null},r.a.createElement("div",{className:"notification-content"},i&&r.a.createElement("div",{className:"notification-close",onClick:this.onClick}),t&&r.a.createElement("div",{className:"notification-title"},t),r.a.createElement("div",{className:"notification-message"},n),this.renderTimer()))}},{key:"render",value:function(){var e=this.props.notification,t=e.content,n=e.dismiss.click,o=this.state,i=o.parentStyle,a=o.onAnimationEnd,s=o.onTransitionEnd,l=o.touchEnabled;return r.a.createElement("div",{ref:this.rootElementRef,onClick:n?this.onClick:null,className:"n-parent",style:i,onAnimationEnd:a,onTransitionEnd:s,onTouchStart:l?this.onTouchStart:null,onTouchMove:l?this.onTouchMove:null,onTouchEnd:l?this.onTouchEnd:null},t?this.renderCustomContent():this.renderNotification())}}])&&_(t.prototype,n),e}();function B(e){return(B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function z(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function H(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function U(e){return(U=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function q(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function G(e,t){return(G=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}W.propTypes={toggleRemoval:a.a.func.isRequired,count:a.a.number.isRequired,removed:a.a.bool},n(4),n.d(t,"default",(function(){return V})),n.d(t,"store",(function(){return N}));var V=function(){function e(t){var n,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this,(n=!(o=U(e).call(this,t))||"object"!==B(o)&&"function"!=typeof o?q(this):o).state={isMobile:t.isMobile,breakpoint:t.breakpoint,notifications:[]},n.add=n.add.bind(q(n)),n.remove=n.remove.bind(q(n)),n.toggleRemoval=n.toggleRemoval.bind(q(n)),n.handleResize=n.handleResize.bind(q(n)),n}var t,n;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&G(e,t)}(e,r.a.Component),t=e,(n=[{key:"componentDidMount",value:function(){var e=this.props.types;N.register({addNotification:this.add,removeNotification:this.remove,types:e}),this.setState({width:window.innerWidth}),window.addEventListener("resize",this.handleResize)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.handleResize)}},{key:"handleResize",value:function(){this.setState({width:window.innerWidth})}},{key:"add",value:function(e){return this.setState((function(t){var n=t.notifications;return{notifications:"top"===e.insert?[e].concat(z(n)):[].concat(z(n),[e])}})),e.id}},{key:"remove",value:function(e){this.setState((function(t){return{notifications:t.notifications.map((function(t){return t.id===e&&(t.removed=!0),t}))}}))}},{key:"toggleRemoval",value:function(e,t){this.setState((function(t){return{notifications:t.notifications.filter((function(t){return t.id!==e}))}}),t)}},{key:"renderNotifications",value:function(e){var t=this;return e.map((function(n){return r.a.createElement(W,{id:n.id,key:n.id,notification:n,toggleRemoval:t.toggleRemoval,count:e.length,removed:n.removed})}))}},{key:"renderMobileNotifications",value:function(e){var t,n,o=e.className,i=e.id,a=this.state.notifications,s=(t=[],n=[],a.forEach((function(e){var o=e.container;O(o)?t.push(e):E(o)&&n.push(e)})),{top:t,bottom:n}),l=this.renderNotifications(s.top),c=this.renderNotifications(s.bottom);return r.a.createElement("div",{id:i,key:"mobile",className:"react-notification-root ".concat(o||"")},r.a.createElement("div",{className:"notification-container-mobile-top"},l),r.a.createElement("div",{className:"notification-container-mobile-bottom"},c))}},{key:"renderScreenNotifications",value:function(e){var t,n,o,i,a,s,h=e.className,m=e.id,y=this.state.notifications,v=(t=[],n=[],o=[],i=[],a=[],s=[],y.forEach((function(e){var r=e.container;r===p?t.push(e):r===f?n.push(e):r===d?o.push(e):r===l?i.push(e):r===c?a.push(e):r===u&&s.push(e)})),{topLeft:t,topRight:n,topCenter:o,bottomLeft:i,bottomRight:a,bottomCenter:s}),g=this.renderNotifications(v.topLeft),b=this.renderNotifications(v.topRight),w=this.renderNotifications(v.topCenter),E=this.renderNotifications(v.bottomLeft),O=this.renderNotifications(v.bottomRight),S=this.renderNotifications(v.bottomCenter);return r.a.createElement("div",{id:m,key:"screen",className:"react-notification-root ".concat(h||"")},r.a.createElement("div",{className:"notification-container-top-left"},g),r.a.createElement("div",{className:"notification-container-top-right"},b),r.a.createElement("div",{className:"notification-container-bottom-left"},E),r.a.createElement("div",{className:"notification-container-bottom-right"},O),r.a.createElement("div",{className:"notification-container-top-center"},w),r.a.createElement("div",{className:"notification-container-bottom-center"},S))}},{key:"render",value:function(){var e=this.props.isMobile,t=this.state,n=t.width,o=t.breakpoint;return e&&n<=o?this.renderMobileNotifications(this.props):this.renderScreenNotifications(this.props)}}])&&H(t.prototype,n),e}();V.propTypes={isMobile:a.a.bool,breakpoint:a.a.number,types:a.a.array},V.defaultProps={isMobile:!0,breakpoint:768}}])},function(e,t,n){},function(e,t,n){"use strict";var o=n(19);function r(){}function i(){}i.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,i,a){if(a!==o){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){var o,r;r=function(e){var t=["N","E","A","D"];function n(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function o(e,t){Object.defineProperty(this,"kind",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,"path",{value:t,enumerable:!0})}function r(e,t,n){r.super_.call(this,"E",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0}),Object.defineProperty(this,"rhs",{value:n,enumerable:!0})}function i(e,t){i.super_.call(this,"N",e),Object.defineProperty(this,"rhs",{value:t,enumerable:!0})}function a(e,t){a.super_.call(this,"D",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0})}function s(e,t,n){s.super_.call(this,"A",e),Object.defineProperty(this,"index",{value:t,enumerable:!0}),Object.defineProperty(this,"item",{value:n,enumerable:!0})}function l(e,t,n){var o=e.slice((n||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,o),e}function c(e){var t=typeof e;return"object"!==t?t:e===Math?"math":null===e?"null":Array.isArray(e)?"array":"[object Date]"===Object.prototype.toString.call(e)?"date":"function"==typeof e.toString&&/^\/.*\//.test(e.toString())?"regexp":"object"}function u(e){var t=0;if(0===e.length)return t;for(var n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t&=t;return t}function p(e){var t=0,n=c(e);if("array"===n)return e.forEach((function(e){t+=p(e)})),t+u("[type: array, hash: "+t+"]");if("object"===n){for(var o in e)if(e.hasOwnProperty(o)){var r="[ type: object, key: "+o+", value hash: "+p(e[o])+"]";t+=u(r)}return t}return t+u("[ type: "+n+" ; value: "+e+"]")}function f(e,t,n,o,l,u,d,h){n=n||[],d=d||[];var m=(l=l||[]).slice(0);if(null!=u){if(o){if("function"==typeof o&&o(m,u))return;if("object"==typeof o){if(o.prefilter&&o.prefilter(m,u))return;if(o.normalize){var y=o.normalize(m,u,e,t);y&&(e=y[0],t=y[1])}}}m.push(u)}"regexp"===c(e)&&"regexp"===c(t)&&(e=e.toString(),t=t.toString());var v,g,b,w,E=typeof e,O=typeof t,S="undefined"!==E||d&&d.length>0&&d[d.length-1].lhs&&Object.getOwnPropertyDescriptor(d[d.length-1].lhs,u),k="undefined"!==O||d&&d.length>0&&d[d.length-1].rhs&&Object.getOwnPropertyDescriptor(d[d.length-1].rhs,u);if(!S&&k)n.push(new i(m,t));else if(!k&&S)n.push(new a(m,e));else if(c(e)!==c(t))n.push(new r(m,e,t));else if("date"===c(e)&&e-t!=0)n.push(new r(m,e,t));else if("object"===E&&null!==e&&null!==t){for(v=d.length-1;v>-1;--v)if(d[v].lhs===e){w=!0;break}if(w)e!==t&&n.push(new r(m,e,t));else{if(d.push({lhs:e,rhs:t}),Array.isArray(e)){for(h&&(e.sort((function(e,t){return p(e)-p(t)})),t.sort((function(e,t){return p(e)-p(t)}))),v=t.length-1,g=e.length-1;v>g;)n.push(new s(m,v,new i(void 0,t[v--])));for(;g>v;)n.push(new s(m,g,new a(void 0,e[g--])));for(;v>=0;--v)f(e[v],t[v],n,o,m,v,d,h)}else{var x=Object.keys(e),P=Object.keys(t);for(v=0;v<x.length;++v)b=x[v],(w=P.indexOf(b))>=0?(f(e[b],t[b],n,o,m,b,d,h),P[w]=null):f(e[b],void 0,n,o,m,b,d,h);for(v=0;v<P.length;++v)(b=P[v])&&f(void 0,t[b],n,o,m,b,d,h)}d.length=d.length-1}}else e!==t&&("number"===E&&isNaN(e)&&isNaN(t)||n.push(new r(m,e,t)))}function d(e,t,n,o,r){var i=[];if(f(e,t,i,o,null,null,null,r),n)for(var a=0;a<i.length;++a)n(i[a]);return i}function h(e,t,n,o){var r=d(e,t,o?function(e){e&&o.push(e)}:void 0,n);return o||(r.length?r:void 0)}function m(e,n,o){if(void 0===o&&n&&~t.indexOf(n.kind)&&(o=n),e&&o&&o.kind){for(var r=e,i=-1,a=o.path?o.path.length-1:0;++i<a;)void 0===r[o.path[i]]&&(r[o.path[i]]=void 0!==o.path[i+1]&&"number"==typeof o.path[i+1]?[]:{}),r=r[o.path[i]];switch(o.kind){case"A":o.path&&void 0===r[o.path[i]]&&(r[o.path[i]]=[]),function e(t,n,o){if(o.path&&o.path.length){var r,i=t[n],a=o.path.length-1;for(r=0;r<a;r++)i=i[o.path[r]];switch(o.kind){case"A":e(i[o.path[r]],o.index,o.item);break;case"D":delete i[o.path[r]];break;case"E":case"N":i[o.path[r]]=o.rhs}}else switch(o.kind){case"A":e(t[n],o.index,o.item);break;case"D":t=l(t,n);break;case"E":case"N":t[n]=o.rhs}return t}(o.path?r[o.path[i]]:r,o.index,o.item);break;case"D":delete r[o.path[i]];break;case"E":case"N":r[o.path[i]]=o.rhs}}}return n(r,o),n(i,o),n(a,o),n(s,o),Object.defineProperties(h,{diff:{value:h,enumerable:!0},orderIndependentDiff:{value:function(e,t,n,o){var r=o?function(e){e&&o.push(e)}:void 0,i=d(e,t,r,n,!0);return o||(i.length?i:void 0)},enumerable:!0},observableDiff:{value:d,enumerable:!0},orderIndependentObservableDiff:{value:function(e,t,n,o,r,i,a){return f(e,t,n,o,r,i,a,!0)},enumerable:!0},orderIndepHash:{value:p,enumerable:!0},applyDiff:{value:function(e,t,n){e&&t&&d(e,t,(function(o){n&&!n(e,t,o)||m(e,t,o)}))},enumerable:!0},applyChange:{value:m,enumerable:!0},revertChange:{value:function(e,t,n){if(e&&t&&n&&n.kind){var o,r,i=e;for(r=n.path.length-1,o=0;o<r;o++)void 0===i[n.path[o]]&&(i[n.path[o]]={}),i=i[n.path[o]];switch(n.kind){case"A":!function e(t,n,o){if(o.path&&o.path.length){var r,i=t[n],a=o.path.length-1;for(r=0;r<a;r++)i=i[o.path[r]];switch(o.kind){case"A":e(i[o.path[r]],o.index,o.item);break;case"D":case"E":i[o.path[r]]=o.lhs;break;case"N":delete i[o.path[r]]}}else switch(o.kind){case"A":e(t[n],o.index,o.item);break;case"D":case"E":t[n]=o.lhs;break;case"N":t=l(t,n)}return t}(i[n.path[o]],n.index,n.item);break;case"D":case"E":i[n.path[o]]=n.lhs;break;case"N":delete i[n.path[o]]}}},enumerable:!0},isConflict:{value:function(){return"undefined"!=typeof $conflict},enumerable:!0}}),h.DeepDiff=h,e&&(e.DeepDiff=h),h}(this),void 0===(o=function(){return r}.call(t,n,t,e))||(e.exports=o)},function(e,t,n){"use strict";
|
37 |
/**
|
38 |
* @license nested-property https://github.com/cosmosio/nested-property
|
39 |
*
|
@@ -48,4 +48,4 @@ var n="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typ
|
|
48 |
*
|
49 |
* This source code is licensed under the MIT license found in the
|
50 |
* LICENSE file in the root directory of this source tree.
|
51 |
-
*/Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&Symbol.for,r=o?Symbol.for("react.element"):60103,i=o?Symbol.for("react.portal"):60106,a=o?Symbol.for("react.fragment"):60107,s=o?Symbol.for("react.strict_mode"):60108,l=o?Symbol.for("react.profiler"):60114,c=o?Symbol.for("react.provider"):60109,u=o?Symbol.for("react.context"):60110,p=o?Symbol.for("react.async_mode"):60111,f=o?Symbol.for("react.concurrent_mode"):60111,d=o?Symbol.for("react.forward_ref"):60112,h=o?Symbol.for("react.suspense"):60113,m=o?Symbol.for("react.suspense_list"):60120,y=o?Symbol.for("react.memo"):60115,v=o?Symbol.for("react.lazy"):60116,g=o?Symbol.for("react.fundamental"):60117,b=o?Symbol.for("react.responder"):60118,w=o?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case p:case f:case a:case l:case s:case h:return e;default:switch(e=e&&e.$$typeof){case u:case d:case v:case y:case c:return e;default:return t}}case i:return t}}}function O(e){return E(e)===f}t.typeOf=E,t.AsyncMode=p,t.ConcurrentMode=f,t.ContextConsumer=u,t.ContextProvider=c,t.Element=r,t.ForwardRef=d,t.Fragment=a,t.Lazy=v,t.Memo=y,t.Portal=i,t.Profiler=l,t.StrictMode=s,t.Suspense=h,t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===f||e===l||e===s||e===h||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===v||e.$$typeof===y||e.$$typeof===c||e.$$typeof===u||e.$$typeof===d||e.$$typeof===g||e.$$typeof===b||e.$$typeof===w)},t.isAsyncMode=function(e){return O(e)||E(e)===p},t.isConcurrentMode=O,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===d},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===v},t.isMemo=function(e){return E(e)===y},t.isPortal=function(e){return E(e)===i},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===s},t.isSuspense=function(e){return E(e)===h}},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var o=n(6),r=n.n(o),i=(n(17),n(1)),a=n.n(i),s=(n(0),n(5)),l=n.n(s),c=n(2),u=n.n(c),p=n(4),f=n.n(p),d=n(8),h=n.n(d),m=n(13),y=n.n(m),v=n(9),g=n.n(v),b=n(7),w=n(3),E=n.n(w),O=n(14);function S(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function k(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function x(e,t,n){return t&&k(e.prototype,t),n&&k(e,n),e}function P(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(){return(C=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(this,arguments)}function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function T(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?N(Object(n),!0).forEach((function(t){P(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function j(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&R(e,t)}function I(e){return(I=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function R(e,t){return(R=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function M(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function L(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?L(e):t}var A={INIT:"init",START:"start",STOP:"stop",RESET:"reset",PREV:"prev",NEXT:"next",GO:"go",CLOSE:"close",SKIP:"skip",UPDATE:"update"},D="tour:start",F="step:before",W="beacon",B="tooltip",z="step:after",H="tour:end",U="tour:status",q="error:target_not_found",G={INIT:"init",READY:"ready",BEACON:"beacon",TOOLTIP:"tooltip",COMPLETE:"complete",ERROR:"error"},V={IDLE:"idle",READY:"ready",WAITING:"waiting",RUNNING:"running",PAUSED:"paused",SKIPPED:"skipped",FINISHED:"finished",ERROR:"error"},Y=h.a.canUseDOM,$=void 0!==p.createPortal;function K(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator.userAgent,t=e;return"undefined"==typeof window?t="node":document.documentMode?t="ie":/Edge/.test(e)?t="edge":Boolean(window.opera)||e.indexOf(" OPR/")>=0?t="opera":void 0!==window.InstallTrigger?t="firefox":window.chrome?t="chrome":/(Version\/([0-9._]+).*Safari|CriOS|FxiOS| Mobile\/)/.test(e)&&(t="safari"),t}function X(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function J(e){var t=[];return function e(n){if("string"==typeof n||"number"==typeof n)t.push(n);else if(Array.isArray(n))n.forEach((function(t){return e(t)}));else if(n&&n.props){var o=n.props.children;Array.isArray(o)?o.forEach((function(t){return e(t)})):e(o)}}(e),t.join(" ").trim()}function Z(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Q(e,t){return!(!u.a.plainObject(e)||!u.a.array(t))&&Object.keys(e).every((function(e){return-1!==t.indexOf(e)}))}function ee(e){var t=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,t,n,o){return t+t+n+n+o+o})),n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return n?[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)]:[]}function te(e){return e.disableBeacon||"center"===e.placement}function ne(){return!(-1!==["chrome","safari","firefox","opera"].indexOf(K()))}function oe(e){var t=e.title,n=e.data,o=e.warn,r=void 0!==o&&o,i=e.debug,a=void 0!==i&&i,s=r?console.warn||console.error:console.log;a&&(t&&n?(console.groupCollapsed("%creact-joyride: ".concat(t),"color: #ff0044; font-weight: bold; font-size: 12px;"),Array.isArray(n)?n.forEach((function(e){u.a.plainObject(e)&&e.key?s.apply(console,[e.key,e.value]):s.apply(console,[e])})):s.apply(console,[n]),console.groupEnd()):console.error("Missing title or data props"))}var re={action:"",controlled:!1,index:0,lifecycle:G.INIT,size:0,status:V.IDLE},ie=["action","index","lifecycle","status"];function ae(e){var t=new Map,n=new Map;return new(function(){function e(){var t=this,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=o.continuous,i=void 0!==r&&r,a=o.stepIndex,s=o.steps,l=void 0===s?[]:s;S(this,e),P(this,"listener",void 0),P(this,"setSteps",(function(e){var o=t.getState(),r=o.size,i=o.status,a={size:e.length,status:i};n.set("steps",e),i===V.WAITING&&!r&&e.length&&(a.status=V.RUNNING),t.setState(a)})),P(this,"addListener",(function(e){t.listener=e})),P(this,"update",(function(e){if(!Q(e,ie))throw new Error("State is not valid. Valid keys: ".concat(ie.join(", ")));t.setState(T({},t.getNextState(T({},t.getState(),{},e,{action:e.action||A.UPDATE}),!0)))})),P(this,"start",(function(e){var n=t.getState(),o=n.index,r=n.size;t.setState(T({},t.getNextState({action:A.START,index:u.a.number(e)?e:o},!0),{status:r?V.RUNNING:V.WAITING}))})),P(this,"stop",(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=t.getState(),o=n.index,r=n.status;-1===[V.FINISHED,V.SKIPPED].indexOf(r)&&t.setState(T({},t.getNextState({action:A.STOP,index:o+(e?1:0)}),{status:V.PAUSED}))})),P(this,"close",(function(){var e=t.getState(),n=e.index;e.status===V.RUNNING&&t.setState(T({},t.getNextState({action:A.CLOSE,index:n+1})))})),P(this,"go",(function(e){var n=t.getState(),o=n.controlled,r=n.status;if(!o&&r===V.RUNNING){var i=t.getSteps()[e];t.setState(T({},t.getNextState({action:A.GO,index:e}),{status:i?r:V.FINISHED}))}})),P(this,"info",(function(){return t.getState()})),P(this,"next",(function(){var e=t.getState(),n=e.index;e.status===V.RUNNING&&t.setState(t.getNextState({action:A.NEXT,index:n+1}))})),P(this,"open",(function(){t.getState().status===V.RUNNING&&t.setState(T({},t.getNextState({action:A.UPDATE,lifecycle:G.TOOLTIP})))})),P(this,"prev",(function(){var e=t.getState(),n=e.index;e.status===V.RUNNING&&t.setState(T({},t.getNextState({action:A.PREV,index:n-1})))})),P(this,"reset",(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=t.getState(),o=n.controlled;o||t.setState(T({},t.getNextState({action:A.RESET,index:0}),{status:e?V.RUNNING:V.READY}))})),P(this,"skip",(function(){t.getState().status===V.RUNNING&&t.setState({action:A.SKIP,lifecycle:G.INIT,status:V.SKIPPED})})),this.setState({action:A.INIT,controlled:u.a.number(a),continuous:i,index:u.a.number(a)?a:0,lifecycle:G.INIT,status:l.length?V.READY:V.IDLE},!0),this.setSteps(l)}return x(e,[{key:"setState",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.getState(),r=T({},o,{},e),i=r.action,a=r.index,s=r.lifecycle,l=r.size,c=r.status;t.set("action",i),t.set("index",a),t.set("lifecycle",s),t.set("size",l),t.set("status",c),n&&(t.set("controlled",e.controlled),t.set("continuous",e.continuous)),this.listener&&this.hasUpdatedState(o)&&this.listener(this.getState())}},{key:"getState",value:function(){return t.size?{action:t.get("action")||"",controlled:t.get("controlled")||!1,index:parseInt(t.get("index"),10),lifecycle:t.get("lifecycle")||"",size:t.get("size")||0,status:t.get("status")||""}:T({},re)}},{key:"getNextState",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.getState(),o=n.action,r=n.controlled,i=n.index,a=n.size,s=n.status,l=u.a.number(e.index)?e.index:i,c=r&&!t?i:Math.min(Math.max(l,0),a);return{action:e.action||o,controlled:r,index:c,lifecycle:e.lifecycle||G.INIT,size:e.size||a,status:c===a?V.FINISHED:e.status||s}}},{key:"hasUpdatedState",value:function(e){return JSON.stringify(e)!==JSON.stringify(this.getState())}},{key:"getSteps",value:function(){var e=n.get("steps");return Array.isArray(e)?e:[]}},{key:"getHelpers",value:function(){return{close:this.close,go:this.go,info:this.info,next:this.next,open:this.open,prev:this.prev,reset:this.reset,skip:this.skip}}}]),e}())(e)}function se(){return document.scrollingElement||document.createElement("body")}function le(e){return e?e.getBoundingClientRect():{}}function ce(e){return"string"==typeof e?document.querySelector(e):e}function ue(e){return e&&1===e.nodeType?getComputedStyle(e):{}}function pe(e,t,n){var o=g()(e);return o.isSameNode(se())?n?document:se():o.scrollHeight>o.offsetHeight||t?o:(o.style.overflow="initial",se())}function fe(e,t){return!!e&&!pe(e,t).isSameNode(se())}function de(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"fixed";if(!(e&&e instanceof HTMLElement))return!1;var n=e.nodeName;return"BODY"!==n&&"HTML"!==n&&(ue(e).position===t||de(e.parentNode,t))}function he(e,t,n){if(!e)return 0;var o=g()(e),r=e.offsetTop;return fe(e,n)&&!function(e){return e.offsetParent!==document.body}(e)&&(r-=o.offsetTop),Math.floor(r-t)}!function(e){function t(t,n,o,r,i,a){var s=r||"<<anonymous>>",l=a||o;if(null==n[o])return t?new Error("Required ".concat(i," `").concat(l,"` was not specified in `").concat(s,"`.")):null;for(var c=arguments.length,u=new Array(c>6?c-6:0),p=6;p<c;p++)u[p-6]=arguments[p];return e.apply(void 0,[n,o,s,i,l].concat(u))}var n=t.bind(null,!1);n.isRequired=t.bind(null,!0)}((function(e,t,n,o,r){var i=e[t],s=i;if(!a.a.isValidElement(i)&&Object(b.isValidElementType)(i)){s=a.a.createElement(s,{ref:function(){},step:{}})}if(u.a.string(i)||u.a.number(i)||!Object(b.isValidElementType)(i)||-1===[b.Element,b.ForwardRef].indexOf(Object(b.typeOf)(s)))return new Error("Invalid ".concat(o," `").concat(r,"` supplied to `").concat(n,"`. Expected a React class or forwardRef."))}));var me={arrowColor:"#fff",backgroundColor:"#fff",beaconSize:36,overlayColor:"rgba(0, 0, 0, 0.5)",primaryColor:"#f04",spotlightShadow:"0 0 15px rgba(0, 0, 0, 0.5)",textColor:"#333",zIndex:100},ye={backgroundColor:"transparent",border:0,borderRadius:0,color:"#555",cursor:"pointer",fontSize:16,lineHeight:1,padding:8,WebkitAppearance:"none"},ve={borderRadius:4,position:"absolute"};var ge={floaterProps:{options:{preventOverflow:{boundariesElement:"scrollParent"}},wrapperOptions:{offset:-18,position:!0}},locale:{back:"Back",close:"Close",last:"Last",next:"Next",open:"Open the dialog",skip:"Skip"},step:{event:"click",placement:"bottom",offset:10}};function be(e){var t=["beaconComponent","disableCloseOnEsc","disableOverlay","disableOverlayClose","disableScrolling","disableScrollParentFix","floaterProps","hideBackButton","locale","showProgress","showSkipButton","spotlightClicks","spotlightPadding","styles","tooltipComponent"];return Object.keys(e).filter((function(e){return-1!==t.indexOf(e)})).reduce((function(t,n){return t[n]=e[n],t}),{})}function we(e,t){if(!e)return null;var n=E.a.all([be(t),ge.step,e],{isMergeableObject:u.a.plainObject}),o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=E()(me,e.options||{}),n=290;window.innerWidth>480&&(n=380),t.width&&(n=window.innerWidth<t.width?window.innerWidth-30:t.width);var o={bottom:0,left:0,overflow:"hidden",position:"absolute",right:0,top:0,zIndex:t.zIndex},r={beacon:T({},ye,{display:"inline-block",height:t.beaconSize,position:"relative",width:t.beaconSize,zIndex:t.zIndex}),beaconInner:{animation:"joyride-beacon-inner 1.2s infinite ease-in-out",backgroundColor:t.primaryColor,borderRadius:"50%",display:"block",height:"50%",left:"50%",opacity:.7,position:"absolute",top:"50%",transform:"translate(-50%, -50%)",width:"50%"},beaconOuter:{animation:"joyride-beacon-outer 1.2s infinite ease-in-out",backgroundColor:"rgba(".concat(ee(t.primaryColor).join(","),", 0.2)"),border:"2px solid ".concat(t.primaryColor),borderRadius:"50%",boxSizing:"border-box",display:"block",height:"100%",left:0,opacity:.9,position:"absolute",top:0,transformOrigin:"center",width:"100%"},tooltip:{backgroundColor:t.backgroundColor,borderRadius:5,boxSizing:"border-box",color:t.textColor,fontSize:16,maxWidth:"100%",padding:15,position:"relative",width:n},tooltipContainer:{lineHeight:1.4,textAlign:"center"},tooltipTitle:{fontSize:18,margin:0},tooltipContent:{padding:"20px 10px"},tooltipFooter:{alignItems:"center",display:"flex",justifyContent:"flex-end",marginTop:15},tooltipFooterSpacer:{flex:1},buttonNext:T({},ye,{backgroundColor:t.primaryColor,borderRadius:4,color:"#fff"}),buttonBack:T({},ye,{color:t.primaryColor,marginLeft:"auto",marginRight:5}),buttonClose:T({},ye,{color:t.textColor,height:14,padding:15,position:"absolute",right:0,top:0,width:14}),buttonSkip:T({},ye,{color:t.textColor,fontSize:14}),overlay:T({},o,{backgroundColor:t.overlayColor,mixBlendMode:"hard-light"}),overlayLegacy:T({},o),overlayLegacyCenter:T({},o,{backgroundColor:t.overlayColor}),spotlight:T({},ve,{backgroundColor:"gray"}),spotlightLegacy:T({},ve,{boxShadow:"0 0 0 9999px ".concat(t.overlayColor,", ").concat(t.spotlightShadow)}),floaterStyles:{arrow:{color:t.arrowColor},options:{zIndex:t.zIndex}},options:t};return E()(r,e)}(E()(t.styles||{},e.styles||{})),r=fe(ce(e.target),n.disableScrollParentFix),i=E.a.all([t.floaterProps||{},ge.floaterProps,n.floaterProps||{}]);return i.offset=n.offset,i.styles=E()(i.styles||{},o.floaterStyles||{}),delete o.floaterStyles,i.offset+=t.spotlightPadding||e.spotlightPadding,e.placementBeacon&&(i.wrapperOptions.placement=e.placementBeacon),r&&(i.options.preventOverflow.boundariesElement="window"),T({},n,{locale:E.a.all([ge.locale,t.locale||{},n.locale||{}]),floaterProps:i,styles:o})}function Ee(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return u.a.plainObject(e)?!!e.target||(oe({title:"validateStep",data:"target is missing from the step",warn:!0,debug:t}),!1):(oe({title:"validateStep",data:"step must be an object",warn:!0,debug:t}),!1)}function Oe(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return u.a.array(e)?e.every((function(e){return Ee(e,t)})):(oe({title:"validateSteps",data:"steps must be an array",warn:!0,debug:t}),!1)}var Se=function e(t){var n=this,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(S(this,e),P(this,"element",void 0),P(this,"options",void 0),P(this,"canBeTabbed",(function(e){var t=e.tabIndex;return(null===t||t<0)&&(t=void 0),!isNaN(t)&&n.canHaveFocus(e,!0)})),P(this,"canHaveFocus",(function(e,t){var o=e.nodeName.toLowerCase();return(/input|select|textarea|button|object/.test(o)&&!e.getAttribute("disabled")||"a"===o&&e.getAttribute("href")||t)&&n.isVisible(e)})),P(this,"findValidTabElements",(function(){return[].slice.call(n.element.querySelectorAll("*"),0).filter(n.canBeTabbed)})),P(this,"handleKeyDown",(function(e){var t=n.options.keyCode,o=void 0===t?9:t;e.keyCode===o&&n.interceptTab(e)})),P(this,"interceptTab",(function(e){e.preventDefault();var t=n.findValidTabElements(),o=e.shiftKey;if(t.length){var r=t.indexOf(document.activeElement);-1===r||!o&&r+1===t.length?r=0:o&&0===r?r=t.length-1:r+=o?-1:1,t[r].focus()}})),P(this,"isHidden",(function(e){var t=e.offsetWidth<=0&&e.offsetHeight<=0,n=window.getComputedStyle(e);return!(!t||e.innerHTML)||(t&&"visible"!==n.getPropertyValue("overflow")||"none"===n.getPropertyValue("display"))})),P(this,"isVisible",(function(e){for(var t=e;t;)if(t instanceof HTMLElement){if(t===document.body)break;if(n.isHidden(t))return!1;t=t.parentNode}return!0})),P(this,"removeScope",(function(){window.removeEventListener("keydown",n.handleKeyDown)})),P(this,"checkFocus",(function(e){document.activeElement!==e&&(e.focus(),window.requestAnimationFrame((function(){return n.checkFocus(e)})))})),P(this,"setFocus",(function(){var e=n.options.selector;if(e){var t=n.element.querySelector(e);t&&window.requestAnimationFrame((function(){return n.checkFocus(t)}))}})),!(t instanceof HTMLElement))throw new TypeError("Invalid parameter: element must be an HTMLElement");this.element=t,this.options=o,window.addEventListener("keydown",this.handleKeyDown,!1),this.setFocus()},ke=function(e){function t(e){var n;if(S(this,t),P(L(n=_(this,I(t).call(this,e))),"setBeaconRef",(function(e){n.beacon=e})),!e.beaconComponent){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",r.id="joyride-beacon-animation",r.appendChild(document.createTextNode("\n @keyframes joyride-beacon-inner {\n 20% {\n opacity: 0.9;\n }\n \n 90% {\n opacity: 0.7;\n }\n }\n \n @keyframes joyride-beacon-outer {\n 0% {\n transform: scale(1);\n }\n \n 45% {\n opacity: 0.7;\n transform: scale(0.75);\n }\n \n 100% {\n opacity: 0.9;\n transform: scale(1);\n }\n }\n ")),o.appendChild(r)}return n}return j(t,e),x(t,[{key:"componentDidMount",value:function(){var e=this,t=this.props.shouldFocus;setTimeout((function(){u.a.domElement(e.beacon)&&t&&e.beacon.focus()}),0)}},{key:"componentWillUnmount",value:function(){var e=document.getElementById("joyride-beacon-animation");e&&e.parentNode.removeChild(e)}},{key:"render",value:function(){var e,t=this.props,n=t.beaconComponent,o=t.locale,r=t.onClickOrHover,i=t.styles,s={"aria-label":o.open,onClick:r,onMouseEnter:r,ref:this.setBeaconRef,title:o.open};if(n){var l=n;e=a.a.createElement(l,s)}else e=a.a.createElement("button",C({key:"JoyrideBeacon",className:"react-joyride__beacon",style:i.beacon,type:"button"},s),a.a.createElement("span",{style:i.beaconInner}),a.a.createElement("span",{style:i.beaconOuter}));return e}}]),t}(a.a.Component),xe=function(e){var t=e.styles;return a.a.createElement("div",{key:"JoyrideSpotlight",className:"react-joyride__spotlight",style:t})},Pe=function(e){function t(){var e,n;S(this,t);for(var o=arguments.length,r=new Array(o),i=0;i<o;i++)r[i]=arguments[i];return P(L(n=_(this,(e=I(t)).call.apply(e,[this].concat(r)))),"_isMounted",!1),P(L(n),"state",{mouseOverSpotlight:!1,isScrolling:!1,showSpotlight:!0}),P(L(n),"handleMouseMove",(function(e){var t=n.state.mouseOverSpotlight,o=n.spotlightStyles,r=o.height,i=o.left,a=o.position,s=o.top,l=o.width,c="fixed"===a?e.clientY:e.pageY,u="fixed"===a?e.clientX:e.pageX,p=u>=i&&u<=i+l&&(c>=s&&c<=s+r);p!==t&&n.updateState({mouseOverSpotlight:p})})),P(L(n),"handleScroll",(function(){var e=ce(n.props.target);n.scrollParent!==document?(n.state.isScrolling||n.updateState({isScrolling:!0,showSpotlight:!1}),clearTimeout(n.scrollTimeout),n.scrollTimeout=setTimeout((function(){n.updateState({isScrolling:!1,showSpotlight:!0})}),50)):de(e,"sticky")&&n.updateState({})})),P(L(n),"handleResize",(function(){clearTimeout(n.resizeTimeout),n.resizeTimeout=setTimeout((function(){n._isMounted&&n.forceUpdate()}),100)})),n}return j(t,e),x(t,[{key:"componentDidMount",value:function(){var e=this.props,t=(e.debug,e.disableScrolling,e.disableScrollParentFix),n=ce(e.target);this.scrollParent=pe(n,t,!0),this._isMounted=!0,window.addEventListener("resize",this.handleResize)}},{key:"componentDidUpdate",value:function(e){var t=this,n=this.props,o=n.lifecycle,r=n.spotlightClicks,i=l()(e,this.props),a=i.changed;(0,i.changedTo)("lifecycle",G.TOOLTIP)&&(this.scrollParent.addEventListener("scroll",this.handleScroll,{passive:!0}),setTimeout((function(){t.state.isScrolling||t.updateState({showSpotlight:!0})}),100)),(a("spotlightClicks")||a("disableOverlay")||a("lifecycle"))&&(r&&o===G.TOOLTIP?window.addEventListener("mousemove",this.handleMouseMove,!1):o!==G.TOOLTIP&&window.removeEventListener("mousemove",this.handleMouseMove))}},{key:"componentWillUnmount",value:function(){this._isMounted=!1,window.removeEventListener("mousemove",this.handleMouseMove),window.removeEventListener("resize",this.handleResize),clearTimeout(this.resizeTimeout),clearTimeout(this.scrollTimeout),this.scrollParent.removeEventListener("scroll",this.handleScroll)}},{key:"updateState",value:function(e){this._isMounted&&this.setState(e)}},{key:"render",value:function(){var e=this.state,t=e.mouseOverSpotlight,n=e.showSpotlight,o=this.props,r=o.disableOverlay,i=o.lifecycle,s=o.onClickOverlay,l=o.placement,c=o.styles;if(r||i!==G.TOOLTIP)return null;var u=c.overlay;ne()&&(u="center"===l?c.overlayLegacyCenter:c.overlayLegacy);var p,f,d,h=T({cursor:"pointer",height:(p=document,f=p.body,d=p.documentElement,f&&d?Math.max(f.scrollHeight,f.offsetHeight,d.clientHeight,d.scrollHeight,d.offsetHeight):0),pointerEvents:t?"none":"auto"},u),m="center"!==l&&n&&a.a.createElement(xe,{styles:this.spotlightStyles});if("safari"===K()){h.mixBlendMode,h.zIndex;var y=M(h,["mixBlendMode","zIndex"]);m=a.a.createElement("div",{style:T({},y)},m),delete h.backgroundColor}return a.a.createElement("div",{className:"react-joyride__overlay",style:h,onClick:s},m)}},{key:"spotlightStyles",get:function(){var e=this.state.showSpotlight,t=this.props,n=t.disableScrollParentFix,o=t.spotlightClicks,r=t.spotlightPadding,i=t.styles,a=ce(t.target),s=le(a),l=de(a),c=function(e,t,n){var o=le(e),r=pe(e,n),i=fe(e,n),a=0;r instanceof HTMLElement&&(a=r.scrollTop);var s=o.top+(i||de(e)?0:a);return Math.floor(s-t)}(a,r,n);return T({},ne()?i.spotlightLegacy:i.spotlight,{height:Math.round(s.height+2*r),left:Math.round(s.left-r),opacity:e?1:0,pointerEvents:o?"none":"auto",position:l?"fixed":"absolute",top:c,transition:"opacity 0.2s",width:Math.round(s.width+2*r)})}}]),t}(a.a.Component),Ce=function(e){var t=e.styles,n=M(e,["styles"]),o=t.color,r=t.height,i=t.width,s=M(t,["color","height","width"]);return a.a.createElement("button",C({style:s,type:"button"},n),a.a.createElement("svg",{width:"number"==typeof i?"".concat(i,"px"):i,height:"number"==typeof r?"".concat(r,"px"):r,viewBox:"0 0 18 18",version:"1.1",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid"},a.a.createElement("g",null,a.a.createElement("path",{d:"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z",fill:o}))))},Ne=function(e){function t(){return S(this,t),_(this,I(t).apply(this,arguments))}return j(t,e),x(t,[{key:"render",value:function(){var e=this.props,t=e.backProps,n=e.closeProps,o=e.continuous,r=e.index,i=e.isLastStep,s=e.primaryProps,l=e.size,c=e.skipProps,u=e.step,p=e.tooltipProps,f=u.content,d=u.hideBackButton,h=u.hideCloseButton,m=u.hideFooter,y=u.showProgress,v=u.showSkipButton,g=u.title,b=u.styles,w=u.locale,E=w.back,O=w.close,S=w.last,k=w.next,x=w.skip,P={primary:O};return o&&(P.primary=i?S:k,y&&(P.primary=a.a.createElement("span",null,P.primary," (",r+1,"/",l,")"))),v&&!i&&(P.skip=a.a.createElement("button",C({style:b.buttonSkip,type:"button","aria-live":"off"},c),x)),!d&&r>0&&(P.back=a.a.createElement("button",C({style:b.buttonBack,type:"button"},t),E)),P.close=!h&&a.a.createElement(Ce,C({styles:b.buttonClose},n)),a.a.createElement("div",C({key:"JoyrideTooltip",className:"react-joyride__tooltip",style:b.tooltip},p),a.a.createElement("div",{style:b.tooltipContainer},g&&a.a.createElement("h4",{style:b.tooltipTitle,"aria-label":g},g),a.a.createElement("div",{style:b.tooltipContent},f)),!m&&a.a.createElement("div",{style:b.tooltipFooter},a.a.createElement("div",{style:b.tooltipFooterSpacer},P.skip),P.back,a.a.createElement("button",C({style:b.buttonNext,type:"button"},s),P.primary)),P.close)}}]),t}(a.a.Component),Te=function(e){function t(){var e,n;S(this,t);for(var o=arguments.length,r=new Array(o),i=0;i<o;i++)r[i]=arguments[i];return P(L(n=_(this,(e=I(t)).call.apply(e,[this].concat(r)))),"handleClickBack",(function(e){e.preventDefault(),n.props.helpers.prev()})),P(L(n),"handleClickClose",(function(e){e.preventDefault(),n.props.helpers.close()})),P(L(n),"handleClickPrimary",(function(e){e.preventDefault();var t=n.props,o=t.continuous,r=t.helpers;o?r.next():r.close()})),P(L(n),"handleClickSkip",(function(e){e.preventDefault(),n.props.helpers.skip()})),P(L(n),"getElementsProps",(function(){var e=n.props,t=e.continuous,o=e.isLastStep,r=e.setTooltipRef,i=e.step,a=J(i.locale.back),s=J(i.locale.close),l=J(i.locale.last),c=J(i.locale.next),u=J(i.locale.skip),p=t?c:s;return o&&(p=l),{backProps:{"aria-label":a,"data-action":"back",onClick:n.handleClickBack,role:"button",title:a},closeProps:{"aria-label":s,"data-action":"close",onClick:n.handleClickClose,role:"button",title:s},primaryProps:{"aria-label":p,"data-action":"primary",onClick:n.handleClickPrimary,role:"button",title:p},skipProps:{"aria-label":u,"data-action":"skip",onClick:n.handleClickSkip,role:"button",title:u},tooltipProps:{"aria-modal":!0,ref:r,role:"alertdialog"}}})),n}return j(t,e),x(t,[{key:"render",value:function(){var e,t=this.props,n=t.continuous,o=t.index,r=t.isLastStep,i=t.size,s=t.step,l=(s.beaconComponent,s.tooltipComponent),c=M(s,["beaconComponent","tooltipComponent"]);if(l){var u=T({},this.getElementsProps(),{continuous:n,index:o,isLastStep:r,size:i,step:c}),p=l;e=a.a.createElement(p,u)}else e=a.a.createElement(Ne,C({},this.getElementsProps(),{continuous:n,index:o,isLastStep:r,size:i,step:s}));return e}}]),t}(a.a.Component),je=function(e){function t(e){var n;return S(this,t),n=_(this,I(t).call(this,e)),Y?(n.node=document.createElement("div"),e.id&&(n.node.id=e.id),document.body.appendChild(n.node),n):_(n)}return j(t,e),x(t,[{key:"componentDidMount",value:function(){Y&&($||this.renderReact15())}},{key:"componentDidUpdate",value:function(){Y&&($||this.renderReact15())}},{key:"componentWillUnmount",value:function(){Y&&this.node&&($||f.a.unmountComponentAtNode(this.node),document.body.removeChild(this.node))}},{key:"renderReact15",value:function(){if(!Y)return null;var e=this.props.children;return f.a.unstable_renderSubtreeIntoContainer(this,e,this.node),null}},{key:"renderReact16",value:function(){if(!Y||!$)return null;var e=this.props.children;return f.a.createPortal(e,this.node)}},{key:"render",value:function(){return $?this.renderReact16():null}}]),t}(a.a.Component),Ie=function(e){function t(){var e,n;S(this,t);for(var o=arguments.length,r=new Array(o),i=0;i<o;i++)r[i]=arguments[i];return P(L(n=_(this,(e=I(t)).call.apply(e,[this].concat(r)))),"scope",{removeScope:function(){}}),P(L(n),"handleClickHoverBeacon",(function(e){var t=n.props,o=t.step,r=t.update;"mouseenter"===e.type&&"hover"!==o.event||r({lifecycle:G.TOOLTIP})})),P(L(n),"handleClickOverlay",(function(){var e=n.props,t=e.helpers;e.step.disableOverlayClose||t.close()})),P(L(n),"setTooltipRef",(function(e){n.tooltip=e})),P(L(n),"setPopper",(function(e,t){var o=n.props,r=o.action,i=o.setPopper,a=o.update;"wrapper"===t?n.beaconPopper=e:n.tooltipPopper=e,i(e,t),n.beaconPopper&&n.tooltipPopper&&a({action:r===A.CLOSE?A.CLOSE:r,lifecycle:G.READY})})),n}return j(t,e),x(t,[{key:"componentDidMount",value:function(){var e=this.props,t=e.debug,n=e.index;oe({title:"step:".concat(n),data:[{key:"props",value:this.props}],debug:t})}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.action,o=t.callback,r=t.continuous,i=t.controlled,a=t.debug,s=t.index,c=t.lifecycle,u=t.size,p=t.status,f=t.step,d=t.update,h=l()(e,this.props),m=h.changed,y=h.changedTo,v=h.changedFrom,g={action:n,controlled:i,index:s,lifecycle:c,size:u,status:p},b=r&&n!==A.CLOSE&&(s>0||n===A.PREV),w=m("action")||m("index")||m("lifecycle")||m("status"),E=v("lifecycle",[G.TOOLTIP,G.INIT],G.INIT);if(y("action",[A.NEXT,A.PREV,A.SKIP,A.CLOSE])&&(E||i)&&o(T({},g,{index:e.index,lifecycle:G.COMPLETE,step:e.step,type:z})),w&&f){var O=ce(f.target),S=!!O;S&&function(e){if(!e)return!1;for(var t=e;t&&t!==document.body;){if(t instanceof HTMLElement){var n=getComputedStyle(t),o=n.display,r=n.visibility;if("none"===o||"hidden"===r)return!1}t=t.parentNode}return!0}(O)?(v("status",V.READY,V.RUNNING)||v("lifecycle",G.INIT,G.READY))&&o(T({},g,{step:f,type:F})):(console.warn(S?"Target not visible":"Target not mounted",f),o(T({},g,{type:q,step:f})),i||d({index:s+(-1!==[A.PREV].indexOf(n)?-1:1)}))}v("lifecycle",G.INIT,G.READY)&&d({lifecycle:te(f)||b?G.TOOLTIP:G.BEACON}),m("index")&&oe({title:"step:".concat(c),data:[{key:"props",value:this.props}],debug:a}),y("lifecycle",G.BEACON)&&o(T({},g,{step:f,type:W})),y("lifecycle",G.TOOLTIP)&&(o(T({},g,{step:f,type:B})),this.scope=new Se(this.tooltip,{selector:"[data-action=primary]"}),this.scope.setFocus()),v("lifecycle",[G.TOOLTIP,G.INIT],G.INIT)&&(this.scope.removeScope(),delete this.beaconPopper,delete this.tooltipPopper)}},{key:"componentWillUnmount",value:function(){this.scope.removeScope()}},{key:"render",value:function(){var e=this.props,t=e.continuous,n=e.debug,o=e.helpers,r=e.index,i=e.lifecycle,s=e.shouldScroll,l=e.size,c=e.step,p=ce(c.target);return Ee(c)&&u.a.domElement(p)?a.a.createElement("div",{key:"JoyrideStep-".concat(r),className:"react-joyride__step"},a.a.createElement(je,{id:"react-joyride-portal"},a.a.createElement(Pe,C({},c,{debug:n,lifecycle:i,onClickOverlay:this.handleClickOverlay}))),a.a.createElement(O.a,C({component:a.a.createElement(Te,{continuous:t,helpers:o,index:r,isLastStep:r+1===l,setTooltipRef:this.setTooltipRef,size:l,step:c}),debug:n,getPopper:this.setPopper,id:"react-joyride-step-".concat(r),isPositioned:c.isFixed||de(p),open:this.open,placement:c.placement,target:c.target},c.floaterProps),a.a.createElement(ke,{beaconComponent:c.beaconComponent,locale:c.locale,onClickOrHover:this.handleClickHoverBeacon,shouldFocus:s,styles:c.styles}))):null}},{key:"open",get:function(){var e=this.props,t=e.step,n=e.lifecycle;return!(!te(t)&&n!==G.TOOLTIP)}}]),t}(a.a.Component),Re=function(e){function t(e){var n;return S(this,t),P(L(n=_(this,I(t).call(this,e))),"initStore",(function(){var e=n.props,t=e.debug,o=e.getHelpers,r=e.run,i=e.stepIndex;n.store=new ae(T({},n.props,{controlled:r&&u.a.number(i)})),n.helpers=n.store.getHelpers();var a=n.store.addListener;return oe({title:"init",data:[{key:"props",value:n.props},{key:"state",value:n.state}],debug:t}),a(n.syncState),o(n.helpers),n.store.getState()})),P(L(n),"callback",(function(e){var t=n.props.callback;u.a.function(t)&&t(e)})),P(L(n),"handleKeyboard",(function(e){var t=n.state,o=t.index,r=t.lifecycle,i=n.props.steps[o],a=window.Event?e.which:e.keyCode;r===G.TOOLTIP&&27===a&&i&&!i.disableCloseOnEsc&&n.store.close()})),P(L(n),"syncState",(function(e){n.setState(e)})),P(L(n),"setPopper",(function(e,t){"wrapper"===t?n.beaconPopper=e:n.tooltipPopper=e})),P(L(n),"shouldScroll",(function(e,t,n,o,r,i,a){return!e&&(0!==t||n||o===G.TOOLTIP)&&"center"!==r.placement&&(!r.isFixed||!de(i))&&a.lifecycle!==o&&-1!==[G.BEACON,G.TOOLTIP].indexOf(o)})),n.state=n.initStore(),n}return j(t,e),x(t,[{key:"componentDidMount",value:function(){if(Y){var e=this.props,t=e.disableCloseOnEsc,n=e.debug,o=e.run,r=e.steps,i=this.store.start;Oe(r,n)&&o&&i(),t||document.body.addEventListener("keydown",this.handleKeyboard,{passive:!0})}}},{key:"componentDidUpdate",value:function(e,t){if(Y){var n=this.state,o=n.action,r=n.controlled,a=n.index,s=n.lifecycle,c=n.status,p=this.props,f=p.debug,d=p.run,h=p.stepIndex,m=p.steps,y=e.steps,v=e.stepIndex,g=this.store,b=g.setSteps,w=g.reset,E=g.start,O=g.stop,S=g.update,k=l()(e,this.props).changed,x=l()(t,this.state),P=x.changed,C=x.changedFrom,N=x.changedTo,j=we(m[a],this.props),I=!function e(t,n){var o,r=Object(i.isValidElement)(t)||Object(i.isValidElement)(n),a=u.a.undefined(t)||u.a.undefined(n);if(X(t)!==X(n)||r||a)return!1;if(u.a.domElement(t))return t.isSameNode(n);if(u.a.number(t))return t===n;if(u.a.function(t))return t.toString()===n.toString();for(var s in t)if(Z(t,s)){if(void 0===t[s]||void 0===n[s])return!1;if(o=X(t[s]),-1!==["object","array"].indexOf(o)&&e(t[s],n[s]))continue;if("function"===o&&e(t[s],n[s]))continue;if(t[s]!==n[s])return!1}for(var l in n)if(Z(n,l)&&void 0===t[l])return!1;return!0}(y,m),R=u.a.number(h)&&k("stepIndex");if(I&&(Oe(m,f)?b(m):console.warn("Steps are not valid",m)),k("run")&&(d?E(h):O()),R){var M=v<h?A.NEXT:A.PREV;o===A.STOP&&(M=A.START),-1===[V.FINISHED,V.SKIPPED].indexOf(c)&&S({action:o===A.CLOSE?A.CLOSE:M,index:h,lifecycle:G.INIT})}var L=T({},this.state,{index:a,step:j});if(N("action",[A.NEXT,A.PREV,A.SKIP,A.CLOSE])&&N("status",V.PAUSED)){var _=we(m[t.index],this.props);this.callback(T({},L,{index:t.index,lifecycle:G.COMPLETE,step:_,type:z}))}if(N("status",[V.FINISHED,V.SKIPPED])){var F=we(m[t.index],this.props);r||this.callback(T({},L,{index:t.index,lifecycle:G.COMPLETE,step:F,type:z})),this.callback(T({},L,{type:H,step:F,index:t.index})),w()}else C("status",[V.IDLE,V.READY],V.RUNNING)?this.callback(T({},L,{type:D})):P("status")?this.callback(T({},L,{type:U})):N("action",A.RESET)&&this.callback(T({},L,{type:U}));j&&(this.scrollToStep(t),"center"===j.placement&&c===V.RUNNING&&s===G.INIT&&this.store.update({lifecycle:G.READY}))}}},{key:"componentWillUnmount",value:function(){this.props.disableCloseOnEsc||document.body.removeEventListener("keydown",this.handleKeyboard)}},{key:"scrollToStep",value:function(e){var t=this.state,n=t.index,o=t.lifecycle,r=t.status,i=this.props,a=i.debug,s=i.disableScrolling,l=i.disableScrollParentFix,c=i.scrollToFirstStep,u=i.scrollOffset,p=i.scrollDuration,f=we(i.steps[n],this.props);if(f){var d=ce(f.target),h=this.shouldScroll(s,n,c,o,f,d,e);if(r===V.RUNNING&&h){var m=fe(d,l),v=pe(d,l),g=Math.floor(he(d,u,l))||0;if(oe({title:"scrollToStep",data:[{key:"index",value:n},{key:"lifecycle",value:o},{key:"status",value:r}],debug:a}),o===G.BEACON&&this.beaconPopper){var b=this.beaconPopper,w=b.placement,E=b.popper;-1!==["bottom"].indexOf(w)||m||(g=Math.floor(E.top-u))}else if(o===G.TOOLTIP&&this.tooltipPopper){var O=this.tooltipPopper,S=O.flipped,k=O.placement,x=O.popper;-1===["top","right","left"].indexOf(k)||S||m?g-=f.spotlightPadding:g=Math.floor(x.top-u)}g=g>=0?g:0,r===V.RUNNING&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:se(),n=arguments.length>2?arguments[2]:void 0;new Promise((function(o,r){var i=t.scrollTop,a=e>i?e-i:i-e;y.a.top(t,e,{duration:a<100?50:n},(function(e){return e&&"Element already at target scroll position"!==e.message?r(e):o()}))}))}(g,v,p)}}}},{key:"render",value:function(){if(!Y)return null;var e,t=this.state,n=t.index,o=t.status,r=this.props,i=r.continuous,s=r.debug,l=r.disableScrolling,c=r.scrollToFirstStep,u=we(r.steps[n],this.props);return o===V.RUNNING&&u&&(e=a.a.createElement(Ie,C({},this.state,{callback:this.callback,continuous:i,debug:s,setPopper:this.setPopper,helpers:this.helpers,shouldScroll:!l&&(0!==n||c),step:u,update:this.store.update}))),a.a.createElement("div",{className:"react-joyride"},e)}}]),t}(a.a.Component);P(Re,"defaultProps",{continuous:!1,debug:!1,disableCloseOnEsc:!1,disableOverlay:!1,disableOverlayClose:!1,disableScrolling:!1,disableScrollParentFix:!1,getHelpers:function(){},hideBackButton:!1,run:!0,scrollOffset:20,scrollDuration:300,scrollToFirstStep:!1,showSkipButton:!1,showProgress:!1,spotlightClicks:!1,spotlightPadding:10,steps:[]});var Me=Re;function Le(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],o=!0,r=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(o=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);o=!0);}catch(e){r=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(r)throw i}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var _e=lodash.debounce,Ae=wp.i18n.__,De=wp.components,Fe=De.Button,We=De.Modal,Be=wp.element,ze=Be.Fragment,He=Be.useEffect,Ue=Be.useRef,qe=Be.useState,Ge=function(){var e=Le(qe(!0),2),t=e[0],n=e[1],o=Le(qe(!1),2),r=o[0],i=o[1],a=Ue(null);He((function(){wp.api.loadPromise.then((function(){a.current=new wp.api.models.Settings}))}),[]);var s=[{target:".otter-step-one",content:Ae("Howdy, I'm Ollie The Otter! I will help you configure your Otter experience. So let's start the magic!"),disableBeacon:!0},{target:".otter-step-two",content:Ae("Jazz up your blocks with some sparkly custom CSS or Blocks Animation right inside the block. Here you can enable modules to enhance your experience with Block Editor.")},{target:".otter-step-three",content:Ae("Section Block is the signature feature of Otter. It allows you to build beautiful layouts right inside the Block Editor. You can set Section Block as the default block for your new Pages.")},{target:".otter-step-four",content:Ae("We love maps! Here you can set your Google Maps API key for Otter's Map Block.")},{target:".otter-step-five",content:Ae("If you don't have an API key, you can register one by clicking here.")},{target:".otter-step-six",content:Ae("Help us in making our plugin better with anonymous data tracking.")},{target:".otter-step-seven",content:Ae("If you ever need any help, we are a team of real Otter-lovers who would love to help you out.")},{target:".otter-step-eight",content:Ae("And if you love what we do, please leave us a review at WordPress.org. Your review keeps us motivated to make awesome things.")},{target:".otter-step-one",content:Ae("That's it for now! Hope you enjoy Otter and love it as much as we do.")}],l=_e((function(e){if(t&&n(!1),"ready"===e||"finished"===e||"skipped"===e){var o=new wp.api.models.Settings({themeisle_blocks_settings_tour:!1}).save();o.success((function(e,t){a.current.fetch()})),o.error((function(e,t){console.warning(e.responseJSON.message)}))}}),1e3);return wp.element.createElement(ze,null,t&&wp.element.createElement(We,{title:Ae("Welcome to Otter!"),isDismissable:!1,className:"otter-onboarding-modal"},wp.element.createElement("div",{className:"otter-onboarding-modal-content"},Ae("Would you like to start the onboarding wizard which will help you personalize the plugin for yourself?")),wp.element.createElement("div",{className:"otter-onboarding-modal-action"},wp.element.createElement(Fe,{isPrimary:!0,isLarge:!0,onClick:function(){n(!1),i(!0)}},Ae("Start")),wp.element.createElement(Fe,{isDefault:!0,isLarge:!0,onClick:function(){return l("skipped")}},Ae("Skip")))),wp.element.createElement(Me,{continuous:!0,run:r,steps:s,scrollToFirstStep:!0,showSkipButton:!0,locale:{back:Ae("Back"),close:Ae("Close"),last:Ae("Finish"),next:Ae("Next"),skip:Ae("Skip")},callback:function(e){return l(e.status)}}))},Ve=n(15),Ye=n.n(Ve),$e=wp.i18n.__,Ke=function(){return wp.element.createElement("header",{className:"otter-header"},wp.element.createElement("div",{className:Ye()("otter-container","otter-step-one")},wp.element.createElement("div",{className:"otter-logo"},wp.element.createElement("img",{src:otterObj.assetsPath+"images/logo.png",title:$e("Gutenberg Blocks and Template Library by Otter")}),wp.element.createElement("abbr",{title:"Version: ".concat(otterObj.version),className:"version"},otterObj.version))))};n(23);function Xe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],o=!0,r=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(o=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);o=!0);}catch(e){r=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(r)throw i}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var Je=wp.i18n.__,Ze=wp.components,Qe=Ze.BaseControl,et=Ze.Button,tt=Ze.ExternalLink,nt=Ze.PanelBody,ot=Ze.PanelRow,rt=Ze.Placeholder,it=Ze.Spinner,at=Ze.ToggleControl,st=wp.element,lt=st.Fragment,ct=st.useEffect,ut=st.useRef,pt=st.useState,ft=function(){ct((function(){wp.api.loadPromise.then((function(){x.current=new wp.api.models.Settings,!1===t&&x.current.fetch().then((function(e){f(Boolean(e.themeisle_blocks_settings_css_module)),m(Boolean(e.themeisle_blocks_settings_blocks_animation)),g(Boolean(e.themeisle_blocks_settings_default_block)),E(e.themeisle_google_map_block_api_key),k(e.otter_blocks_logger_flag),n(!0)}))}))}),[]);var e=Xe(pt(!1),2),t=e[0],n=e[1],r=Xe(pt(!1),2),i=r[0],a=r[1],s=Xe(pt(null),2),l=s[0],c=s[1],u=Xe(pt(!1),2),p=u[0],f=u[1],d=Xe(pt(!1),2),h=d[0],m=d[1],y=Xe(pt(!0),2),v=y[0],g=y[1],b=Xe(pt(""),2),w=b[0],E=b[1],O=Xe(pt("no"),2),S=O[0],k=O[1],x=ut(null),P=(ut(null),function(e,t,n){a(!0),N(Je("Updating settings…"),"info");var r=new wp.api.models.Settings(function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},e,n)).save();r.success((function(n,r){o.store.removeNotification(l),"success"===r&&(C(t,n[e]),setTimeout((function(){N(Je("Settings saved."),"success"),a(!1)}),800)),"error"===r&&setTimeout((function(){N(Je("An unknown error occurred."),"danger"),a(!1)}),800),x.current.fetch()})),r.error((function(e,t){o.store.removeNotification(l),setTimeout((function(){N(e.responseJSON.message?e.responseJSON.message:Je("An unknown error occurred."),"danger"),a(!1)}),800)}))}),C=function(e,t){switch(e){case"cssModule":f(t);break;case"blocksAnimation":m(t);break;case"isDefaultSection":g(t);break;case"googleMapsAPI":E(t);break;case"isLoggingData":k(t)}},N=function(e,t){var n=o.store.addNotification({message:e,type:t,insert:"top",container:"bottom-left",isMobile:!0,dismiss:{duration:2e3,showIcon:!0},dismissable:{click:!0,touch:!0}});c(n)};return t?wp.element.createElement(lt,null,wp.element.createElement("div",{className:"otter-main"},wp.element.createElement("div",{className:"otter-step-two"},wp.element.createElement(nt,{title:Je("Modules")},wp.element.createElement(ot,null,wp.element.createElement(at,{label:Je("Enable Custom CSS Module"),help:"Custom CSS module allows to add custom CSS to each block in Block Editor.",checked:p,onChange:function(){return P("themeisle_blocks_settings_css_module","cssModule",!p)}})),wp.element.createElement(ot,null,wp.element.createElement(at,{label:Je("Enable Blocks Animation Module"),help:"Blocks Animation module allows to add CSS animations to each block in Block Editor.",checked:h,onChange:function(){return P("themeisle_blocks_settings_blocks_animation","blocksAnimation",!h)}})))),wp.element.createElement("div",{className:"otter-step-three"},wp.element.createElement(nt,{title:Je("Section")},wp.element.createElement(ot,null,wp.element.createElement(at,{label:Je("Make Section your default block for Pages"),help:"Everytime you create a new page, Section block will be appended there by default.",checked:v,onChange:function(){return P("themeisle_blocks_settings_default_block","isDefaultSection",!v)}})))),wp.element.createElement("div",{className:"otter-step-four"},wp.element.createElement(nt,{title:Je("Maps")},wp.element.createElement(ot,null,wp.element.createElement(Qe,{label:Je("Google Maps API"),help:"In order to use Google Maps block, you need to use Google Maps and Places API.",id:"otter-options-google-map-api",className:"otter-text-field"},wp.element.createElement("input",{type:"text",id:"otter-options-google-map-api",value:w,placeholder:Je("Google Maps API Key"),disabled:i,onChange:function(e){return E(e.target.value)}}),wp.element.createElement("div",{className:"otter-text-field-button-group"},wp.element.createElement(et,{isPrimary:!0,isLarge:!0,disabled:i,onClick:function(){return P("themeisle_google_map_block_api_key","googleMapsAPI",w)}},Je("Save")),wp.element.createElement(tt,{href:"https://developers.google.com/maps/documentation/javascript/get-api-key",className:"otter-step-five"},Je("Get API Key"))))))),wp.element.createElement("div",{className:"otter-step-six"},wp.element.createElement(nt,{title:Je("Other")},wp.element.createElement(ot,null,wp.element.createElement(at,{label:Je("Anonymous Data Tracking."),help:"Become a contributor by opting in to our anonymous data tracking. We guarantee no sensitive data is collected.",checked:"yes"===S,onChange:function(){return P("otter_blocks_logger_flag","isLoggingData","yes"===S?"no":"yes")}})))),wp.element.createElement(nt,null,wp.element.createElement("div",{className:"otter-info"},wp.element.createElement("h2",null,Je("Got a question for us?")),wp.element.createElement("p",null,Je("We would love to help you out if you need any help with Otter.")),wp.element.createElement("div",{className:"otter-info-button-group"},wp.element.createElement(et,{isDefault:!0,isLarge:!0,target:"_blank",href:"https://wordpress.org/support/plugin/otter-blocks",className:"otter-step-seven"},Je("Ask a question")),wp.element.createElement(et,{isDefault:!0,isLarge:!0,target:"_blank",href:"https://wordpress.org/support/plugin/otter-blocks/reviews/#new-post",className:"otter-step-eight"},Je("Leave a review"))))))):wp.element.createElement(rt,null,wp.element.createElement(it,null))},dt=wp.i18n.__,ht=function(){return wp.element.createElement("footer",{className:"otter-footer"},wp.element.createElement("div",{className:"otter-container"},dt("No otters were harmed during the making of this plugin.")))},mt=wp.element,yt=mt.render,vt=mt.Fragment;yt(wp.element.createElement((function(){return wp.element.createElement(vt,null,Boolean(otterObj.showTour)&&wp.element.createElement(Ge,null),wp.element.createElement(r.a,null),wp.element.createElement(Ke,null),wp.element.createElement(ft,null),wp.element.createElement(ht,null))}),null),document.getElementById("otter"))}]);
|
28 |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
29 |
* SOFTWARE.
|
30 |
*/
|
31 |
+
var n="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,o=function(){for(var e=["Edge","Trident","Firefox"],t=0;t<e.length;t+=1)if(n&&navigator.userAgent.indexOf(e[t])>=0)return 1;return 0}();var r=n&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then((function(){t=!1,e()})))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout((function(){t=!1,e()}),o))}};function i(e){return e&&"[object Function]"==={}.toString.call(e)}function a(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function s(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function l(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=a(e),n=t.overflow,o=t.overflowX,r=t.overflowY;return/(auto|scroll|overlay)/.test(n+r+o)?e:l(s(e))}function c(e){return e&&e.referenceNode?e.referenceNode:e}var u=n&&!(!window.MSInputMethodContext||!document.documentMode),p=n&&/MSIE 10/.test(navigator.userAgent);function f(e){return 11===e?u:10===e?p:u||p}function d(e){if(!e)return document.documentElement;for(var t=f(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var o=n&&n.nodeName;return o&&"BODY"!==o&&"HTML"!==o?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===a(n,"position")?d(n):n:e?e.ownerDocument.documentElement:document.documentElement}function h(e){return null!==e.parentNode?h(e.parentNode):e}function m(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,o=n?e:t,r=n?t:e,i=document.createRange();i.setStart(o,0),i.setEnd(r,0);var a,s,l=i.commonAncestorContainer;if(e!==l&&t!==l||o.contains(r))return"BODY"===(s=(a=l).nodeName)||"HTML"!==s&&d(a.firstElementChild)!==a?d(l):l;var c=h(e);return c.host?m(c.host,t):m(e,h(t).host)}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",o=e.nodeName;if("BODY"===o||"HTML"===o){var r=e.ownerDocument.documentElement,i=e.ownerDocument.scrollingElement||r;return i[n]}return e[n]}function v(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=y(t,"top"),r=y(t,"left"),i=n?-1:1;return e.top+=o*i,e.bottom+=o*i,e.left+=r*i,e.right+=r*i,e}function b(e,t){var n="x"===t?"Left":"Top",o="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+o+"Width"],10)}function g(e,t,n,o){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],f(10)?parseInt(n["offset"+e])+parseInt(o["margin"+("Height"===e?"Top":"Left")])+parseInt(o["margin"+("Height"===e?"Bottom":"Right")]):0)}function w(e){var t=e.body,n=e.documentElement,o=f(10)&&getComputedStyle(n);return{height:g("Height",t,n,o),width:g("Width",t,n,o)}}var E=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},O=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),S=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function x(e){return k({},e,{right:e.left+e.width,bottom:e.top+e.height})}function P(e){var t={};try{if(f(10)){t=e.getBoundingClientRect();var n=y(e,"top"),o=y(e,"left");t.top+=n,t.left+=o,t.bottom+=n,t.right+=o}else t=e.getBoundingClientRect()}catch(e){}var r={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},i="HTML"===e.nodeName?w(e.ownerDocument):{},s=i.width||e.clientWidth||r.width,l=i.height||e.clientHeight||r.height,c=e.offsetWidth-s,u=e.offsetHeight-l;if(c||u){var p=a(e);c-=b(p,"x"),u-=b(p,"y"),r.width-=c,r.height-=u}return x(r)}function C(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=f(10),r="HTML"===t.nodeName,i=P(e),s=P(t),c=l(e),u=a(t),p=parseFloat(u.borderTopWidth,10),d=parseFloat(u.borderLeftWidth,10);n&&r&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var h=x({top:i.top-s.top-p,left:i.left-s.left-d,width:i.width,height:i.height});if(h.marginTop=0,h.marginLeft=0,!o&&r){var m=parseFloat(u.marginTop,10),y=parseFloat(u.marginLeft,10);h.top-=p-m,h.bottom-=p-m,h.left-=d-y,h.right-=d-y,h.marginTop=m,h.marginLeft=y}return(o&&!n?t.contains(c):t===c&&"BODY"!==c.nodeName)&&(h=v(h,t)),h}function N(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,o=C(e,n),r=Math.max(n.clientWidth,window.innerWidth||0),i=Math.max(n.clientHeight,window.innerHeight||0),a=t?0:y(n),s=t?0:y(n,"left"),l={top:a-o.top+o.marginTop,left:s-o.left+o.marginLeft,width:r,height:i};return x(l)}function T(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return!1;if("fixed"===a(e,"position"))return!0;var n=s(e);return!!n&&T(n)}function j(e){if(!e||!e.parentElement||f())return document.documentElement;for(var t=e.parentElement;t&&"none"===a(t,"transform");)t=t.parentElement;return t||document.documentElement}function I(e,t,n,o){var r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],i={top:0,left:0},a=r?j(e):m(e,c(t));if("viewport"===o)i=N(a,r);else{var u=void 0;"scrollParent"===o?"BODY"===(u=l(s(t))).nodeName&&(u=e.ownerDocument.documentElement):u="window"===o?e.ownerDocument.documentElement:o;var p=C(u,a,r);if("HTML"!==u.nodeName||T(a))i=p;else{var f=w(e.ownerDocument),d=f.height,h=f.width;i.top+=p.top-p.marginTop,i.bottom=d+p.top,i.left+=p.left-p.marginLeft,i.right=h+p.left}}var y="number"==typeof(n=n||0);return i.left+=y?n:n.left||0,i.top+=y?n:n.top||0,i.right-=y?n:n.right||0,i.bottom-=y?n:n.bottom||0,i}function R(e){return e.width*e.height}function M(e,t,n,o,r){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var a=I(n,o,i,r),s={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}},l=Object.keys(s).map((function(e){return k({key:e},s[e],{area:R(s[e])})})).sort((function(e,t){return t.area-e.area})),c=l.filter((function(e){var t=e.width,o=e.height;return t>=n.clientWidth&&o>=n.clientHeight})),u=c.length>0?c[0].key:l[0].key,p=e.split("-")[1];return u+(p?"-"+p:"")}function L(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=o?j(t):m(t,c(n));return C(n,r,o)}function _(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),o=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+o,height:e.offsetHeight+n}}function A(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function D(e,t,n){n=n.split("-")[0];var o=_(e),r={width:o.width,height:o.height},i=-1!==["right","left"].indexOf(n),a=i?"top":"left",s=i?"left":"top",l=i?"height":"width",c=i?"width":"height";return r[a]=t[a]+t[l]/2-o[l]/2,r[s]=n===s?t[s]-o[c]:t[A(s)],r}function F(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function W(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===n}));var o=F(e,(function(e){return e[t]===n}));return e.indexOf(o)}(e,"name",n))).forEach((function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&i(n)&&(t.offsets.popper=x(t.offsets.popper),t.offsets.reference=x(t.offsets.reference),t=n(t,e))})),t}function B(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=L(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=M(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=D(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=W(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function z(e,t){return e.some((function(e){var n=e.name;return e.enabled&&n===t}))}function H(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),o=0;o<t.length;o++){var r=t[o],i=r?""+r+n:e;if(void 0!==document.body.style[i])return i}return null}function U(){return this.state.isDestroyed=!0,z(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[H("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function q(e){var t=e.ownerDocument;return t?t.defaultView:window}function G(e,t,n,o){n.updateBound=o,q(e).addEventListener("resize",n.updateBound,{passive:!0});var r=l(e);return function e(t,n,o,r){var i="BODY"===t.nodeName,a=i?t.ownerDocument.defaultView:t;a.addEventListener(n,o,{passive:!0}),i||e(l(a.parentNode),n,o,r),r.push(a)}(r,"scroll",n.updateBound,n.scrollParents),n.scrollElement=r,n.eventsEnabled=!0,n}function V(){this.state.eventsEnabled||(this.state=G(this.reference,this.options,this.state,this.scheduleUpdate))}function Y(){var e,t;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(e=this.reference,t=this.state,q(e).removeEventListener("resize",t.updateBound),t.scrollParents.forEach((function(e){e.removeEventListener("scroll",t.updateBound)})),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t))}function $(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function K(e,t){Object.keys(t).forEach((function(n){var o="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&$(t[n])&&(o="px"),e.style[n]=t[n]+o}))}var X=n&&/Firefox/i.test(navigator.userAgent);function J(e,t,n){var o=F(e,(function(e){return e.name===t})),r=!!o&&e.some((function(e){return e.name===n&&e.enabled&&e.order<o.order}));if(!r){var i="`"+t+"`",a="`"+n+"`";console.warn(a+" modifier is required by "+i+" modifier in order to work, be sure to include it before "+i+"!")}return r}var Z=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Q=Z.slice(3);function ee(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Q.indexOf(e),o=Q.slice(n+1).concat(Q.slice(0,n));return t?o.reverse():o}var te="flip",ne="clockwise",oe="counterclockwise";function re(e,t,n,o){var r=[0,0],i=-1!==["right","left"].indexOf(o),a=e.split(/(\+|\-)/).map((function(e){return e.trim()})),s=a.indexOf(F(a,(function(e){return-1!==e.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==s?[a.slice(0,s).concat([a[s].split(l)[0]]),[a[s].split(l)[1]].concat(a.slice(s+1))]:[a];return(c=c.map((function(e,o){var r=(1===o?!i:i)?"height":"width",a=!1;return e.reduce((function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,a=!0,e):a?(e[e.length-1]+=t,a=!1,e):e.concat(t)}),[]).map((function(e){return function(e,t,n,o){var r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),i=+r[1],a=r[2];if(!i)return e;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=o}return x(s)[t]/100*i}if("vh"===a||"vw"===a){return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*i}return i}(e,r,t,n)}))}))).forEach((function(e,t){e.forEach((function(n,o){$(n)&&(r[t]+=n*("-"===e[o-1]?-1:1))}))})),r}var ie={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],o=t.split("-")[1];if(o){var r=e.offsets,i=r.reference,a=r.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",c=s?"width":"height",u={start:S({},l,i[l]),end:S({},l,i[l]+i[c]-a[c])};e.offsets.popper=k({},a,u[o])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,o=e.placement,r=e.offsets,i=r.popper,a=r.reference,s=o.split("-")[0],l=void 0;return l=$(+n)?[+n,0]:re(n,i,a,s),"left"===s?(i.top+=l[0],i.left-=l[1]):"right"===s?(i.top+=l[0],i.left+=l[1]):"top"===s?(i.left+=l[0],i.top-=l[1]):"bottom"===s&&(i.left+=l[0],i.top+=l[1]),e.popper=i,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||d(e.instance.popper);e.instance.reference===n&&(n=d(n));var o=H("transform"),r=e.instance.popper.style,i=r.top,a=r.left,s=r[o];r.top="",r.left="",r[o]="";var l=I(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);r.top=i,r.left=a,r[o]=s,t.boundaries=l;var c=t.priority,u=e.offsets.popper,p={primary:function(e){var n=u[e];return u[e]<l[e]&&!t.escapeWithReference&&(n=Math.max(u[e],l[e])),S({},e,n)},secondary:function(e){var n="right"===e?"left":"top",o=u[n];return u[e]>l[e]&&!t.escapeWithReference&&(o=Math.min(u[n],l[e]-("right"===e?u.width:u.height))),S({},n,o)}};return c.forEach((function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=k({},u,p[t](e))})),e.offsets.popper=u,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,o=t.reference,r=e.placement.split("-")[0],i=Math.floor,a=-1!==["top","bottom"].indexOf(r),s=a?"right":"bottom",l=a?"left":"top",c=a?"width":"height";return n[s]<i(o[l])&&(e.offsets.popper[l]=i(o[l])-n[c]),n[l]>i(o[s])&&(e.offsets.popper[l]=i(o[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!J(e.instance.modifiers,"arrow","keepTogether"))return e;var o=t.element;if("string"==typeof o){if(!(o=e.instance.popper.querySelector(o)))return e}else if(!e.instance.popper.contains(o))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],i=e.offsets,s=i.popper,l=i.reference,c=-1!==["left","right"].indexOf(r),u=c?"height":"width",p=c?"Top":"Left",f=p.toLowerCase(),d=c?"left":"top",h=c?"bottom":"right",m=_(o)[u];l[h]-m<s[f]&&(e.offsets.popper[f]-=s[f]-(l[h]-m)),l[f]+m>s[h]&&(e.offsets.popper[f]+=l[f]+m-s[h]),e.offsets.popper=x(e.offsets.popper);var y=l[f]+l[u]/2-m/2,v=a(e.instance.popper),b=parseFloat(v["margin"+p],10),g=parseFloat(v["border"+p+"Width"],10),w=y-e.offsets.popper[f]-b-g;return w=Math.max(Math.min(s[u]-m,w),0),e.arrowElement=o,e.offsets.arrow=(S(n={},f,Math.round(w)),S(n,d,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if(z(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=I(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),o=e.placement.split("-")[0],r=A(o),i=e.placement.split("-")[1]||"",a=[];switch(t.behavior){case te:a=[o,r];break;case ne:a=ee(o);break;case oe:a=ee(o,!0);break;default:a=t.behavior}return a.forEach((function(s,l){if(o!==s||a.length===l+1)return e;o=e.placement.split("-")[0],r=A(o);var c=e.offsets.popper,u=e.offsets.reference,p=Math.floor,f="left"===o&&p(c.right)>p(u.left)||"right"===o&&p(c.left)<p(u.right)||"top"===o&&p(c.bottom)>p(u.top)||"bottom"===o&&p(c.top)<p(u.bottom),d=p(c.left)<p(n.left),h=p(c.right)>p(n.right),m=p(c.top)<p(n.top),y=p(c.bottom)>p(n.bottom),v="left"===o&&d||"right"===o&&h||"top"===o&&m||"bottom"===o&&y,b=-1!==["top","bottom"].indexOf(o),g=!!t.flipVariations&&(b&&"start"===i&&d||b&&"end"===i&&h||!b&&"start"===i&&m||!b&&"end"===i&&y),w=!!t.flipVariationsByContent&&(b&&"start"===i&&h||b&&"end"===i&&d||!b&&"start"===i&&y||!b&&"end"===i&&m),E=g||w;(f||v||E)&&(e.flipped=!0,(f||v)&&(o=a[l+1]),E&&(i=function(e){return"end"===e?"start":"start"===e?"end":e}(i)),e.placement=o+(i?"-"+i:""),e.offsets.popper=k({},e.offsets.popper,D(e.instance.popper,e.offsets.reference,e.placement)),e=W(e.instance.modifiers,e,"flip"))})),e},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],o=e.offsets,r=o.popper,i=o.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return r[a?"left":"top"]=i[n]-(s?r[a?"width":"height"]:0),e.placement=A(t),e.offsets.popper=x(r),e}},hide:{order:800,enabled:!0,fn:function(e){if(!J(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=F(e.instance.modifiers,(function(e){return"preventOverflow"===e.name})).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,o=t.y,r=e.offsets.popper,i=F(e.instance.modifiers,(function(e){return"applyStyle"===e.name})).gpuAcceleration;void 0!==i&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0!==i?i:t.gpuAcceleration,s=d(e.instance.popper),l=P(s),c={position:r.position},u=function(e,t){var n=e.offsets,o=n.popper,r=n.reference,i=Math.round,a=Math.floor,s=function(e){return e},l=i(r.width),c=i(o.width),u=-1!==["left","right"].indexOf(e.placement),p=-1!==e.placement.indexOf("-"),f=t?u||p||l%2==c%2?i:a:s,d=t?i:s;return{left:f(l%2==1&&c%2==1&&!p&&t?o.left-1:o.left),top:d(o.top),bottom:d(o.bottom),right:f(o.right)}}(e,window.devicePixelRatio<2||!X),p="bottom"===n?"top":"bottom",f="right"===o?"left":"right",h=H("transform"),m=void 0,y=void 0;if(y="bottom"===p?"HTML"===s.nodeName?-s.clientHeight+u.bottom:-l.height+u.bottom:u.top,m="right"===f?"HTML"===s.nodeName?-s.clientWidth+u.right:-l.width+u.right:u.left,a&&h)c[h]="translate3d("+m+"px, "+y+"px, 0)",c[p]=0,c[f]=0,c.willChange="transform";else{var v="bottom"===p?-1:1,b="right"===f?-1:1;c[p]=y*v,c[f]=m*b,c.willChange=p+", "+f}var g={"x-placement":e.placement};return e.attributes=k({},g,e.attributes),e.styles=k({},c,e.styles),e.arrowStyles=k({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(e){var t,n;return K(e.instance.popper,e.styles),t=e.instance.popper,n=e.attributes,Object.keys(n).forEach((function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)})),e.arrowElement&&Object.keys(e.arrowStyles).length&&K(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,o,r){var i=L(r,t,e,n.positionFixed),a=M(n.placement,i,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute("x-placement",a),K(t,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},ae=function(){function e(t,n){var o=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};E(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(o.update)},this.update=r(this.update.bind(this)),this.options=k({},e.Defaults,a),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(k({},e.Defaults.modifiers,a.modifiers)).forEach((function(t){o.options.modifiers[t]=k({},e.Defaults.modifiers[t]||{},a.modifiers?a.modifiers[t]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(e){return k({name:e},o.options.modifiers[e])})).sort((function(e,t){return e.order-t.order})),this.modifiers.forEach((function(e){e.enabled&&i(e.onLoad)&&e.onLoad(o.reference,o.popper,o.options,e,o.state)})),this.update();var s=this.options.eventsEnabled;s&&this.enableEventListeners(),this.state.eventsEnabled=s}return O(e,[{key:"update",value:function(){return B.call(this)}},{key:"destroy",value:function(){return U.call(this)}},{key:"enableEventListeners",value:function(){return V.call(this)}},{key:"disableEventListeners",value:function(){return Y.call(this)}}]),e}();ae.Utils=("undefined"!=typeof window?window:e).PopperUtils,ae.placements=Z,ae.Defaults=ie,t.a=ae}).call(this,n(12))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){var n=new Error("Element already at target scroll position"),o=new Error("Scroll cancelled"),r=Math.min,i=Date.now;function a(e){return function(t,a,c,u){"function"==typeof(c=c||{})&&(u=c,c={}),"function"!=typeof u&&(u=l);var p=i(),f=t[e],d=c.ease||s,h=isNaN(c.duration)?350:+c.duration,m=!1;return f===a?u(n,t[e]):requestAnimationFrame((function n(s){if(m)return u(o,t[e]);var l=i(),c=r(1,(l-p)/h),y=d(c);t[e]=y*(a-f)+f,c<1?requestAnimationFrame(n):requestAnimationFrame((function(){u(null,t[e])}))})),function(){m=!0}}}function s(e){return.5*(1-Math.cos(Math.PI*e))}function l(){}e.exports={left:a("scrollLeft"),top:a("scrollTop")}},function(e,t,n){"use strict";(function(e){var o=n(1),r=n.n(o),i=n(0),a=n.n(i),s=n(10),l=n.n(s),c=n(11),u=n(3),p=n.n(u),f=n(2),d=n.n(f),h=n(5),m=n.n(h),y=n(4),v=n.n(y),b=n(8);function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function w(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function E(e,t,n){return t&&w(e.prototype,t),n&&w(e,n),e}function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function k(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?S(Object(n),!0).forEach((function(t){O(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):S(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function x(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&C(e,t)}function P(e){return(P=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function C(e,t){return(C=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function N(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function T(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function j(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?T(e):t}var I={flip:{padding:20},preventOverflow:{padding:10}},R={INIT:"init",IDLE:"idle",OPENING:"opening",OPEN:"open",CLOSING:"closing",ERROR:"error"},M=n.n(b).a.canUseDOM,L=void 0!==v.a.createPortal;function _(){return"ontouchstart"in window&&/Mobi/.test(navigator.userAgent)}function A(e){var t=e.title,n=e.data,o=e.warn,r=void 0!==o&&o,i=e.debug,a=void 0!==i&&i,s=r?console.warn||console.error:console.log;a&&t&&n&&(console.groupCollapsed("%creact-floater: ".concat(t),"color: #9b00ff; font-weight: bold; font-size: 12px;"),Array.isArray(n)?n.forEach((function(e){d.a.plainObject(e)&&e.key?s.apply(console,[e.key,e.value]):s.apply(console,[e])})):s.apply(console,[n]),console.groupEnd())}function D(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.addEventListener(t,n,o)}function F(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.removeEventListener(t,n,o)}function W(){}var B=function(e){function t(e){var n;return g(this,t),n=j(this,P(t).call(this,e)),M?(n.node=document.createElement("div"),e.id&&(n.node.id=e.id),e.zIndex&&(n.node.style.zIndex=e.zIndex),document.body.appendChild(n.node),n):j(n)}return x(t,e),E(t,[{key:"componentDidMount",value:function(){M&&(L||this.renderPortal())}},{key:"componentDidUpdate",value:function(){M&&(L||this.renderPortal())}},{key:"componentWillUnmount",value:function(){M&&this.node&&(L||v.a.unmountComponentAtNode(this.node),document.body.removeChild(this.node))}},{key:"renderPortal",value:function(){if(!M)return null;var e=this.props,t=e.children,n=e.setRef;return L?v.a.createPortal(t,this.node):(n(v.a.unstable_renderSubtreeIntoContainer(this,t.length>1?r.a.createElement("div",null,t):t[0],this.node)),null)}},{key:"renderReact16",value:function(){var e=this.props,t=e.hasChildren,n=e.placement,o=e.target;return t||o||"center"===n?this.renderPortal():null}},{key:"render",value:function(){return L?this.renderReact16():null}}]),t}(r.a.Component);O(B,"propTypes",{children:a.a.oneOfType([a.a.element,a.a.array]),hasChildren:a.a.bool,id:a.a.oneOfType([a.a.string,a.a.number]),placement:a.a.string,setRef:a.a.func.isRequired,target:a.a.oneOfType([a.a.object,a.a.string]),zIndex:a.a.number});var z=function(e){function t(){return g(this,t),j(this,P(t).apply(this,arguments))}return x(t,e),E(t,[{key:"render",value:function(){var e,t=this.props,n=t.placement,o=t.setArrowRef,i=t.styles.arrow,a=i.color,s=i.display,l=i.length,c=i.margin,u=i.position,p=i.spread,f={display:s,position:u},d=p,h=l;return n.startsWith("top")?(e="0,0 ".concat(d/2,",").concat(h," ").concat(d,",0"),f.bottom=0,f.marginLeft=c,f.marginRight=c):n.startsWith("bottom")?(e="".concat(d,",").concat(h," ").concat(d/2,",0 0,").concat(h),f.top=0,f.marginLeft=c,f.marginRight=c):n.startsWith("left")?(h=p,e="0,0 ".concat(d=l,",").concat(h/2," 0,").concat(h),f.right=0,f.marginTop=c,f.marginBottom=c):n.startsWith("right")&&(h=p,e="".concat(d=l,",").concat(h," ").concat(d,",0 0,").concat(h/2),f.left=0,f.marginTop=c,f.marginBottom=c),r.a.createElement("div",{className:"__floater__arrow",style:this.parentStyle},r.a.createElement("span",{ref:o,style:f},r.a.createElement("svg",{width:d,height:h,version:"1.1",xmlns:"http://www.w3.org/2000/svg"},r.a.createElement("polygon",{points:e,fill:a}))))}},{key:"parentStyle",get:function(){var e=this.props,t=e.placement,n=e.styles.arrow.length,o={pointerEvents:"none",position:"absolute",width:"100%"};return t.startsWith("top")?(o.bottom=0,o.left=0,o.right=0,o.height=n):t.startsWith("bottom")?(o.left=0,o.right=0,o.top=0,o.height=n):t.startsWith("left")?(o.right=0,o.top=0,o.bottom=0):t.startsWith("right")&&(o.left=0,o.top=0),o}}]),t}(r.a.Component);O(z,"propTypes",{placement:a.a.string.isRequired,setArrowRef:a.a.func.isRequired,styles:a.a.object.isRequired});var H=function(e){var t=e.handleClick,n=e.styles,o=n.color,i=n.height,a=n.width,s=N(n,["color","height","width"]);return r.a.createElement("button",{"aria-label":"close",onClick:t,style:s,type:"button"},r.a.createElement("svg",{width:"".concat(a,"px"),height:"".concat(i,"px"),viewBox:"0 0 18 18",version:"1.1",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid"},r.a.createElement("g",null,r.a.createElement("path",{d:"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z",fill:o}))))};H.propTypes={handleClick:a.a.func.isRequired,styles:a.a.object.isRequired};var U=function(e){var t=e.content,n=e.footer,o=e.handleClick,i=e.open,a=e.positionWrapper,s=e.showCloseButton,l=e.title,c=e.styles,u={content:r.a.isValidElement(t)?t:r.a.createElement("div",{className:"__floater__content",style:c.content},t)};return l&&(u.title=r.a.isValidElement(l)?l:r.a.createElement("div",{className:"__floater__title",style:c.title},l)),n&&(u.footer=r.a.isValidElement(n)?n:r.a.createElement("div",{className:"__floater__footer",style:c.footer},n)),!s&&!a||d.a.boolean(i)||(u.close=r.a.createElement(H,{styles:c.close,handleClick:o})),r.a.createElement("div",{className:"__floater__container",style:c.container},u.close,u.title,u.content,u.footer)};U.propTypes={content:a.a.node.isRequired,footer:a.a.node,handleClick:a.a.func.isRequired,open:a.a.bool,positionWrapper:a.a.bool.isRequired,showCloseButton:a.a.bool.isRequired,styles:a.a.object.isRequired,title:a.a.node};var q=function(e){function t(){return g(this,t),j(this,P(t).apply(this,arguments))}return x(t,e),E(t,[{key:"render",value:function(){var e=this.props,t=e.component,n=e.handleClick,o=e.hideArrow,i=e.setFloaterRef,a=e.status,s={},l=["__floater"];return t?r.a.isValidElement(t)?s.content=r.a.cloneElement(t,{closeFn:n}):s.content=t({closeFn:n}):s.content=r.a.createElement(U,this.props),a===R.OPEN&&l.push("__floater__open"),o||(s.arrow=r.a.createElement(z,this.props)),r.a.createElement("div",{ref:i,className:l.join(" "),style:this.style},r.a.createElement("div",{className:"__floater__body"},s.content,s.arrow))}},{key:"style",get:function(){var e=this.props,t=e.disableAnimation,n=e.component,o=e.placement,r=e.hideArrow,i=e.status,a=e.styles,s=a.arrow.length,l=a.floater,c=a.floaterCentered,u=a.floaterClosing,p=a.floaterOpening,f=a.floaterWithAnimation,d=a.floaterWithComponent,h={};return r||(o.startsWith("top")?h.padding="0 0 ".concat(s,"px"):o.startsWith("bottom")?h.padding="".concat(s,"px 0 0"):o.startsWith("left")?h.padding="0 ".concat(s,"px 0 0"):o.startsWith("right")&&(h.padding="0 0 0 ".concat(s,"px"))),-1!==[R.OPENING,R.OPEN].indexOf(i)&&(h=k({},h,{},p)),i===R.CLOSING&&(h=k({},h,{},u)),i!==R.OPEN||t||(h=k({},h,{},f)),"center"===o&&(h=k({},h,{},c)),n&&(h=k({},h,{},d)),k({},l,{},h)}}]),t}(r.a.Component);O(q,"propTypes",{component:a.a.oneOfType([a.a.func,a.a.element]),content:a.a.node,disableAnimation:a.a.bool.isRequired,footer:a.a.node,handleClick:a.a.func.isRequired,hideArrow:a.a.bool.isRequired,open:a.a.bool,placement:a.a.string.isRequired,positionWrapper:a.a.bool.isRequired,setArrowRef:a.a.func.isRequired,setFloaterRef:a.a.func.isRequired,showCloseButton:a.a.bool,status:a.a.string.isRequired,styles:a.a.object.isRequired,title:a.a.node});var G=function(e){function t(){return g(this,t),j(this,P(t).apply(this,arguments))}return x(t,e),E(t,[{key:"render",value:function(){var e,t=this.props,n=t.children,o=t.handleClick,i=t.handleMouseEnter,a=t.handleMouseLeave,s=t.setChildRef,l=t.setWrapperRef,c=t.style,u=t.styles;if(n)if(1===r.a.Children.count(n))if(r.a.isValidElement(n)){var p=d.a.function(n.type)?"innerRef":"ref";e=r.a.cloneElement(r.a.Children.only(n),O({},p,s))}else e=r.a.createElement("span",null,n);else e=n;return e?r.a.createElement("span",{ref:l,style:k({},u,{},c),onClick:o,onMouseEnter:i,onMouseLeave:a},e):null}}]),t}(r.a.Component);O(G,"propTypes",{children:a.a.node,handleClick:a.a.func.isRequired,handleMouseEnter:a.a.func.isRequired,handleMouseLeave:a.a.func.isRequired,setChildRef:a.a.func.isRequired,setWrapperRef:a.a.func.isRequired,style:a.a.object,styles:a.a.object.isRequired});var V={zIndex:100};var Y=["position","top","right","bottom","left"],$=function(t){function n(e){var t;return g(this,n),O(T(t=j(this,P(n).call(this,e))),"setArrowRef",(function(e){t.arrowRef=e})),O(T(t),"setChildRef",(function(e){t.childRef=e})),O(T(t),"setFloaterRef",(function(e){t.floaterRef||(t.floaterRef=e)})),O(T(t),"setWrapperRef",(function(e){t.wrapperRef=e})),O(T(t),"handleTransitionEnd",(function(){var e=t.state.status,n=t.props.callback;t.wrapperPopper&&t.wrapperPopper.instance.update(),t.setState({status:e===R.OPENING?R.OPEN:R.IDLE},(function(){var e=t.state.status;n(e===R.OPEN?"open":"close",t.props)}))})),O(T(t),"handleClick",(function(){var e=t.props,n=e.event,o=e.open;if(!d.a.boolean(o)){var r=t.state,i=r.positionWrapper,a=r.status;("click"===t.event||"hover"===t.event&&i)&&(A({title:"click",data:[{event:n,status:a===R.OPEN?"closing":"opening"}],debug:t.debug}),t.toggle())}})),O(T(t),"handleMouseEnter",(function(){var e=t.props,n=e.event,o=e.open;if(!d.a.boolean(o)&&!_()){var r=t.state.status;"hover"===t.event&&r===R.IDLE&&(A({title:"mouseEnter",data:[{key:"originalEvent",value:n}],debug:t.debug}),clearTimeout(t.eventDelayTimeout),t.toggle())}})),O(T(t),"handleMouseLeave",(function(){var e=t.props,n=e.event,o=e.eventDelay,r=e.open;if(!d.a.boolean(r)&&!_()){var i=t.state,a=i.status,s=i.positionWrapper;"hover"===t.event&&(A({title:"mouseLeave",data:[{key:"originalEvent",value:n}],debug:t.debug}),o?-1===[R.OPENING,R.OPEN].indexOf(a)||s||t.eventDelayTimeout||(t.eventDelayTimeout=setTimeout((function(){delete t.eventDelayTimeout,t.toggle()}),1e3*o)):t.toggle(R.IDLE))}})),t.state={currentPlacement:e.placement,positionWrapper:e.wrapperOptions.position&&!!e.target,status:R.INIT,statusWrapper:R.INIT},t._isMounted=!1,M&&window.addEventListener("load",(function(){t.popper&&t.popper.instance.update(),t.wrapperPopper&&t.wrapperPopper.instance.update()})),t}return x(n,t),E(n,[{key:"componentDidMount",value:function(){if(M){var e=this.state.positionWrapper,t=this.props,n=t.children,o=t.open,r=t.target;this._isMounted=!0,A({title:"init",data:{hasChildren:!!n,hasTarget:!!r,isControlled:d.a.boolean(o),positionWrapper:e,target:this.target,floater:this.floaterRef},debug:this.debug}),this.initPopper(),!n&&r&&d.a.boolean(o)}}},{key:"componentDidUpdate",value:function(e,t){if(M){var n,o=this.props,r=o.autoOpen,i=o.open,a=o.target,s=o.wrapperOptions,l=m()(t,this.state),c=l.changedFrom,u=l.changedTo;if(e.open!==i)d.a.boolean(i)&&(n=i?R.OPENING:R.CLOSING),this.toggle(n);e.wrapperOptions.position===s.position&&e.target===a||this.changeWrapperPosition(this.props),(u("status",R.IDLE)&&i||c("status",R.INIT,R.IDLE)&&r)&&this.toggle(R.OPEN),this.popper&&u("status",R.OPENING)&&this.popper.instance.update(),this.floaterRef&&(u("status",R.OPENING)||u("status",R.CLOSING))&&function(e,t,n){var o,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];D(e,t,o=function(r){n(r),F(e,t,o)},r)}(this.floaterRef,"transitionend",this.handleTransitionEnd)}}},{key:"componentWillUnmount",value:function(){M&&(this._isMounted=!1,this.popper&&this.popper.instance.destroy(),this.wrapperPopper&&this.wrapperPopper.instance.destroy())}},{key:"initPopper",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.target,n=this.state.positionWrapper,o=this.props,r=o.disableFlip,i=o.getPopper,a=o.hideArrow,s=o.offset,l=o.placement,u=o.wrapperOptions,p="top"===l||"bottom"===l?"flip":["right","bottom-end","top-end","left","top-start","bottom-start"];if("center"===l)this.setState({status:R.IDLE});else if(t&&this.floaterRef){var f=this.options,h=f.arrow,m=f.flip,y=f.offset,v=N(f,["arrow","flip","offset"]);new c.a(t,this.floaterRef,{placement:l,modifiers:k({arrow:k({enabled:!a,element:this.arrowRef},h),flip:k({enabled:!r,behavior:p},m),offset:k({offset:"0, ".concat(s,"px")},y)},v),onCreate:function(t){e.popper=t,i(t,"floater"),e._isMounted&&e.setState({currentPlacement:t.placement,status:R.IDLE}),l!==t.placement&&setTimeout((function(){t.instance.update()}),1)},onUpdate:function(t){e.popper=t;var n=e.state.currentPlacement;e._isMounted&&t.placement!==n&&e.setState({currentPlacement:t.placement})}})}if(n){var b=d.a.undefined(u.offset)?0:u.offset;new c.a(this.target,this.wrapperRef,{placement:u.placement||l,modifiers:{arrow:{enabled:!1},offset:{offset:"0, ".concat(b,"px")},flip:{enabled:!1}},onCreate:function(t){e.wrapperPopper=t,e._isMounted&&e.setState({statusWrapper:R.IDLE}),i(t,"wrapper"),l!==t.placement&&setTimeout((function(){t.instance.update()}),1)}})}}},{key:"changeWrapperPosition",value:function(e){var t=e.target,n=e.wrapperOptions;this.setState({positionWrapper:n.position&&!!t})}},{key:"toggle",value:function(e){var t=this.state.status===R.OPEN?R.CLOSING:R.OPENING;d.a.undefined(e)||(t=e),this.setState({status:t})}},{key:"render",value:function(){var e=this.state,t=e.currentPlacement,n=e.positionWrapper,o=e.status,i=this.props,a=i.children,s=i.component,l=i.content,c=i.disableAnimation,u=i.footer,p=i.hideArrow,f=i.id,d=i.open,h=i.showCloseButton,m=i.style,y=i.target,v=i.title,b=r.a.createElement(G,{handleClick:this.handleClick,handleMouseEnter:this.handleMouseEnter,handleMouseLeave:this.handleMouseLeave,setChildRef:this.setChildRef,setWrapperRef:this.setWrapperRef,style:m,styles:this.styles.wrapper},a),g={};return n?g.wrapperInPortal=b:g.wrapperAsChildren=b,r.a.createElement("span",null,r.a.createElement(B,{hasChildren:!!a,id:f,placement:t,setRef:this.setFloaterRef,target:y,zIndex:this.styles.options.zIndex},r.a.createElement(q,{component:s,content:l,disableAnimation:c,footer:u,handleClick:this.handleClick,hideArrow:p||"center"===t,open:d,placement:t,positionWrapper:n,setArrowRef:this.setArrowRef,setFloaterRef:this.setFloaterRef,showCloseButton:h,status:o,styles:this.styles,title:v}),g.wrapperInPortal),g.wrapperAsChildren)}},{key:"debug",get:function(){return this.props.debug||!!e.ReactFloaterDebug}},{key:"event",get:function(){var e=this.props,t=e.disableHoverToClick,n=e.event;return"hover"===n&&_()&&!t?"click":n}},{key:"options",get:function(){var e=this.props.options;return p()(I,e||{})}},{key:"styles",get:function(){var e,t=this,n=this.state,o=n.status,r=n.positionWrapper,i=n.statusWrapper,a=this.props.styles,s=p()(function(e){var t=p()(V,e.options||{});return{wrapper:{cursor:"help",display:"inline-flex",flexDirection:"column",zIndex:t.zIndex},wrapperPosition:{left:-1e3,position:"absolute",top:-1e3,visibility:"hidden"},floater:{display:"inline-block",filter:"drop-shadow(0 0 3px rgba(0, 0, 0, 0.3))",maxWidth:300,opacity:0,position:"relative",transition:"opacity 0.3s",visibility:"hidden",zIndex:t.zIndex},floaterOpening:{opacity:1,visibility:"visible"},floaterWithAnimation:{opacity:1,transition:"opacity 0.3s, transform 0.2s",visibility:"visible"},floaterWithComponent:{maxWidth:"100%"},floaterClosing:{opacity:0,visibility:"visible"},floaterCentered:{left:"50%",position:"fixed",top:"50%",transform:"translate(-50%, -50%)"},container:{backgroundColor:"#fff",color:"#666",minHeight:60,minWidth:200,padding:20,position:"relative",zIndex:10},title:{borderBottom:"1px solid #555",color:"#555",fontSize:18,marginBottom:5,paddingBottom:6,paddingRight:18},content:{fontSize:15},close:{backgroundColor:"transparent",border:0,borderRadius:0,color:"#555",fontSize:0,height:15,outline:"none",padding:10,position:"absolute",right:0,top:0,width:15,WebkitAppearance:"none"},footer:{borderTop:"1px solid #ccc",fontSize:13,marginTop:10,paddingTop:5},arrow:{color:"#fff",display:"inline-flex",length:16,margin:8,position:"absolute",spread:32},options:t}}(a),a);r&&(e=-1===[R.IDLE].indexOf(o)||-1===[R.IDLE].indexOf(i)?s.wrapperPosition:this.wrapperPopper.styles,s.wrapper=k({},s.wrapper,{},e));if(this.target){var l=window.getComputedStyle(this.target);this.wrapperStyles?s.wrapper=k({},s.wrapper,{},this.wrapperStyles):-1===["relative","static"].indexOf(l.position)&&(this.wrapperStyles={},r||(Y.forEach((function(e){t.wrapperStyles[e]=l[e]})),s.wrapper=k({},s.wrapper,{},this.wrapperStyles),this.target.style.position="relative",this.target.style.top="auto",this.target.style.right="auto",this.target.style.bottom="auto",this.target.style.left="auto"))}return s}},{key:"target",get:function(){if(!M)return null;var e=this.props.target;return e?d.a.domElement(e)?e:document.querySelector(e):this.childRef||this.wrapperRef}}]),n}(r.a.Component);O($,"propTypes",{autoOpen:a.a.bool,callback:a.a.func,children:a.a.node,component:l()(a.a.oneOfType([a.a.func,a.a.element]),(function(e){return!e.content})),content:l()(a.a.node,(function(e){return!e.component})),debug:a.a.bool,disableAnimation:a.a.bool,disableFlip:a.a.bool,disableHoverToClick:a.a.bool,event:a.a.oneOf(["hover","click"]),eventDelay:a.a.number,footer:a.a.node,getPopper:a.a.func,hideArrow:a.a.bool,id:a.a.oneOfType([a.a.string,a.a.number]),offset:a.a.number,open:a.a.bool,options:a.a.object,placement:a.a.oneOf(["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end","auto","center"]),showCloseButton:a.a.bool,style:a.a.object,styles:a.a.object,target:a.a.oneOfType([a.a.object,a.a.string]),title:a.a.node,wrapperOptions:a.a.shape({offset:a.a.number,placement:a.a.oneOf(["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end","auto"]),position:a.a.bool})}),O($,"defaultProps",{autoOpen:!1,callback:W,debug:!1,disableAnimation:!1,disableFlip:!1,disableHoverToClick:!1,event:"click",eventDelay:.4,getPopper:W,hideArrow:!1,offset:15,placement:"bottom",showCloseButton:!1,styles:{},target:null,wrapperOptions:{position:!1}}),t.a=$}).call(this,n(12))},function(e,t,n){var o;
|
32 |
/*!
|
33 |
Copyright (c) 2017 Jed Watson.
|
34 |
Licensed under the MIT License (MIT), see
|
35 |
http://jedwatson.github.io/classnames
|
36 |
+
*/!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t<arguments.length;t++){var o=arguments[t];if(o){var i=typeof o;if("string"===i||"number"===i)e.push(o);else if(Array.isArray(o)&&o.length){var a=r.apply(null,o);a&&e.push(a)}else if("object"===i)for(var s in o)n.call(o,s)&&o[s]&&e.push(s)}}return e.join(" ")}e.exports?(r.default=r,e.exports=r):void 0===(o=function(){return r}.apply(t,[]))||(e.exports=o)}()},function(e,t,n){e.exports=function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([function(e,t){e.exports=n(1)},function(e,t,n){e.exports=n(2)()},function(e,t,n){"use strict";var o=n(3);function r(){}function i(){}i.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,i,a){if(a!==o){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var o="bottom-left",r="bottom-right",i="bottom-center",a="top-left",s="top-right",l="top-center",c="center",u="success",p="danger",f="info",d="default",h="warning",m="timeout",y=function(e){return null==e};function v(e){return e===o||e===r||e===i}function b(e){return e===a||e===s||e===l}function g(e){var t=e.type,n=e.content,o=e.userDefinedTypes,r=["notification-item"];if(n)return r;if(y(o))return function(e){switch(e){case d:return["notification-item","notification-default"];case u:return["notification-item","notification-success"];case p:return["notification-item","notification-danger"];case h:return["notification-item","notification-warning"];case f:return["notification-item","notification-info"];default:return["notification-item"]}}(t);var i=o.find((function(e){return e.name===t}));return r.concat(i.htmlClasses)}function w(e,t){var n=e.duration,o=e.timingFunction,r=e.delay;return"".concat(n,"ms ").concat(t," ").concat(o," ").concat(r,"ms")}function E(e,t){var n=t.duration,o=t.timingFunction,r=t.delay,i=e||{};return y(i.duration)&&(i.duration=n),y(i.timingFunction)&&(i.timingFunction=o),y(i.delay)&&(i.delay=r),i}var O=n(0),S=n.n(O),k=new function(){var e=this;return this.types=null,this.counter=0,this.add=function(){},this.addNotification=function(t){var n=e.types;return e.counter+=1,e.add(function(e,t){var n=e,o=n.id,r=n.type,i=n.insert,a=n.content,s=n.container,l=n.animationIn,c=n.animationOut,m=n.slidingEnter,v=n.slidingExit,b=n.touchRevert,g=n.touchSlidingExit,w=n.dismiss,O=n.width,S=n.onRemoval;n.id=o||k.counter,n.type=a?null:r.toLowerCase(),t&&!a&&(n.userDefinedTypes=function(e,t){var n=e.content,o=e.type;if(!n&&o!==u&&o!==p&&o!==f&&o!==d&&o!==h&&t)return t}(n,t)),y(O)||(n.width=O),n.container=s.toLowerCase(),n.insert=(i||"top").toLowerCase(),n.dismiss=function(e){var t=e,n={duration:0,click:!0,touch:!0,onScreen:!1,waitForAnimation:!1,showIcon:!1};return t?(Object.keys(n).forEach((function(e){y(t[e])&&(t[e]=n[e])})),t):n}(w),n.animationIn=l||[],n.animationOut=c||[],n.onRemoval=S||function(){};var x=function(e,t,n){return{duration:e,timingFunction:t,delay:n}};n.slidingEnter=E(m,x(600,"linear",0)),n.slidingExit=E(v,x(600,"linear",0)),n.touchRevert=E(b,x(600,"linear",0));var P=g||{},C=P.swipe,N=P.fade;return n.touchSlidingExit=P,n.touchSlidingExit.swipe=E(C||{},x(600,"linear",0)),n.touchSlidingExit.fade=E(N||{},x(300,"linear",0)),n}(t,n))},this.removeNotification=function(){},this.register=function(t){var n=t.addNotification,o=t.removeNotification,r=t.types;e.add=n,e.removeNotification=o,e.types=r},this},x=n(1),P=n.n(x),C=function(e,t){var n,o,r=t;this.pause=function(){clearTimeout(n),r-=Date.now()-o},this.resume=function(){o=Date.now(),clearTimeout(n),n=setTimeout(e,r)},this.clear=function(){clearTimeout(n)},this.resume()};function N(e){return(N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function T(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],o=!0,r=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(o=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);o=!0);}catch(e){r=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(r)throw i}}return n}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function j(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function I(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?j(Object(n),!0).forEach((function(t){R(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):j(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function M(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function L(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function _(e){return(_=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function A(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function D(e,t){return(D=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var F=function(e){function t(e){var n,o;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(n=!(o=_(t).call(this,e))||"object"!==N(o)&&"function"!=typeof o?A(this):o).rootElementRef=S.a.createRef(),n.onClick=n.onClick.bind(A(n)),n.onTouchStart=n.onTouchStart.bind(A(n)),n.onTouchMove=n.onTouchMove.bind(A(n)),n.onTouchEnd=n.onTouchEnd.bind(A(n)),n.onMouseEnter=n.onMouseEnter.bind(A(n)),n.onMouseLeave=n.onMouseLeave.bind(A(n));var r=e.notification.width;return n.state={parentStyle:{height:0,overflow:"hidden",width:r?"".concat(r,"px"):"100%"},htmlClassList:g(e.notification),animationPlayState:"running",touchEnabled:!0},n}var n,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&D(e,t)}(t,e),n=t,(o=[{key:"componentWillUnmount",value:function(){this.timer&&this.timer.clear()}},{key:"componentDidMount",value:function(){var e=this,t=this.props,n=t.notification,o=t.count,r=n.dismiss,i=r.duration,a=r.onScreen,s=this.rootElementRef.current.scrollHeight,l=function(e,t){return!(t<=1)&&t>1&&("top"===e.insert&&b(e.container)||"bottom"===e.insert&&v(e.container)||e.container===c)}(n,o),u=function(){i&&!a&&(e.timer=new C((function(){return e.removeNotification(m)}),i))};this.setState((function(e){return{parentStyle:{width:e.parentStyle.width,height:"".concat(s,"px"),transition:l?w(n.slidingEnter,"height"):"10ms height"},onTransitionEnd:u}}),(function(){requestAnimationFrame((function(){e.setState((function(e){return{htmlClassList:[].concat(M(n.animationIn),M(e.htmlClassList))}}))}))}))}},{key:"componentDidUpdate",value:function(e){var t=e.removed;this.props.removed&&!t&&this.removeNotification("manual")}},{key:"removeNotification",value:function(e){var t=this,n=this.props,o=n.notification,r=n.toggleRemoval,i=o.id,a=o.onRemoval,s=o.dismiss.waitForAnimation,l=[].concat(M(o.animationOut),M(g(o))),c=function(){return r(i,(function(){return a(i,e)}))},u={height:0,transition:w(o.slidingExit,"height")};return s?this.setState((function(e){var n=e.parentStyle.width;return{htmlClassList:l,onAnimationEnd:function(){t.setState({parentStyle:I({width:n},u),onTransitionEnd:c})}}})):this.setState((function(e){return{parentStyle:I({width:e.parentStyle.width},u),onTransitionEnd:c,htmlClassList:l}}))}},{key:"onClick",value:function(){var e=this.props.notification.dismiss;(e.click||e.showIcon)&&this.removeNotification("click")}},{key:"onTouchStart",value:function(e){var t=T(e.touches,1)[0].pageX;this.setState((function(e){var n=e.parentStyle;return{startX:t,currentX:t,parentStyle:I({},n,{position:"relative"})}}))}},{key:"onTouchMove",value:function(e){var t=this,n=e.touches,o=this.state.startX,r=this.props,i=r.toggleRemoval,a=r.notification,s=a.id,l=a.onRemoval,c=a.slidingExit,u=a.touchSlidingExit,p=u.swipe,f=u.fade,d=T(n,1)[0].pageX,h=d-o,m=this.rootElementRef.current.offsetWidth,y=window.innerWidth+m,v="".concat(d-o>=0?y:-y,"px");if(function(e,t){return Math.abs(e)>=.4*t}(h,m)){var b=w(p,"left"),g=w(f,"opacity"),E=function(){i(s,(function(){return l(s,"touch")}))};return this.setState((function(e){return{touchEnabled:!1,parentStyle:I({},e.parentStyle,{left:v,opacity:0,transition:"".concat(b,", ").concat(g)}),onTransitionEnd:function(){t.setState((function(e){return{parentStyle:I({},e.parentStyle,{height:0,transition:w(c,"height")}),onTransitionEnd:E}}))}}}))}return this.setState((function(e){var t=e.parentStyle;return{currentX:d,parentStyle:I({},t,{left:"".concat(0+h,"px")})}}))}},{key:"onTouchEnd",value:function(){var e=this.props.notification.touchRevert;this.setState((function(t){return{parentStyle:I({},t.parentStyle,{left:0,transition:w(e,"left")})}}))}},{key:"onMouseEnter",value:function(){this.timer?this.timer.pause():this.setState({animationPlayState:"paused"})}},{key:"onMouseLeave",value:function(){this.timer?this.timer.resume():this.setState({animationPlayState:"running"})}},{key:"renderTimer",value:function(){var e=this,t=this.props.notification.dismiss,n=t.duration,o=t.onScreen,r=this.state.animationPlayState;if(n&&o){var i={animationName:"timer",animationDuration:"".concat(n,"ms"),animationTimingFunction:"linear",animationFillMode:"forwards",animationDelay:0,animationPlayState:r};return S.a.createElement("div",{className:"timer"},S.a.createElement("div",{className:"timer-filler",onAnimationEnd:function(){return e.removeNotification(m)},style:i}))}}},{key:"renderCustomContent",value:function(){var e=this.state.htmlClassList,t=this.props.notification,n=t.id,o=t.content,r=t.dismiss,i=r.duration,a=r.pauseOnHover,s=i>0&&a;return S.a.createElement("div",{className:"".concat([].concat(M(e),["n-child"]).join(" ")),onMouseEnter:s?this.onMouseEnter:null,onMouseLeave:s?this.onMouseLeave:null},S.a.isValidElement(o)?o:S.a.createElement(o,{id:n}))}},{key:"renderNotification",value:function(){var e=this.props.notification,t=e.title,n=e.message,o=e.dismiss,r=o.showIcon,i=o.duration,a=o.pauseOnHover,s=this.state.htmlClassList,l=i>0&&a;return S.a.createElement("div",{className:"".concat([].concat(M(s),["n-child"]).join(" ")),onMouseEnter:l?this.onMouseEnter:null,onMouseLeave:l?this.onMouseLeave:null},S.a.createElement("div",{className:"notification-content"},r&&S.a.createElement("div",{className:"notification-close",onClick:this.onClick}),t&&S.a.createElement("div",{className:"notification-title"},t),S.a.createElement("div",{className:"notification-message"},n),this.renderTimer()))}},{key:"render",value:function(){var e=this.props.notification,t=e.content,n=e.dismiss.click,o=this.state,r=o.parentStyle,i=o.onAnimationEnd,a=o.onTransitionEnd,s=o.touchEnabled;return S.a.createElement("div",{ref:this.rootElementRef,onClick:n?this.onClick:null,className:"notification-parent",style:r,onAnimationEnd:i,onTransitionEnd:a,onTouchStart:s?this.onTouchStart:null,onTouchMove:s?this.onTouchMove:null,onTouchEnd:s?this.onTouchEnd:null},t?this.renderCustomContent():this.renderNotification())}}])&&L(n.prototype,o),t}(S.a.Component);F.propTypes={toggleRemoval:P.a.func.isRequired,count:P.a.number.isRequired,removed:P.a.bool};var W=F;function B(e){return(B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function z(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function H(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function U(e){return(U=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function q(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function G(e,t){return(G=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}n(4);var V=function(e){function t(e){var n,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this,(n=!(o=U(t).call(this,e))||"object"!==B(o)&&"function"!=typeof o?q(this):o).state={isMobile:e.isMobile,breakpoint:e.breakpoint,notifications:[]},n.add=n.add.bind(q(n)),n.remove=n.remove.bind(q(n)),n.toggleRemoval=n.toggleRemoval.bind(q(n)),n.handleResize=n.handleResize.bind(q(n)),n}var n,u;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&G(e,t)}(t,e),n=t,(u=[{key:"componentDidMount",value:function(){var e=this.props.types;k.register({addNotification:this.add,removeNotification:this.remove,types:e}),this.setState({width:window.innerWidth}),window.addEventListener("resize",this.handleResize)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.handleResize)}},{key:"handleResize",value:function(){this.setState({width:window.innerWidth})}},{key:"add",value:function(e){return this.setState((function(t){var n=t.notifications;return{notifications:"top"===e.insert?[e].concat(z(n)):[].concat(z(n),[e])}})),e.id}},{key:"remove",value:function(e){this.setState((function(t){return{notifications:t.notifications.map((function(t){return t.id===e&&(t.removed=!0),t}))}}))}},{key:"toggleRemoval",value:function(e,t){this.setState((function(t){return{notifications:t.notifications.filter((function(t){return t.id!==e}))}}),t)}},{key:"renderNotifications",value:function(e){var t=this;return e.map((function(n){return S.a.createElement(W,{id:n.id,key:n.id,notification:n,toggleRemoval:t.toggleRemoval,count:e.length,removed:n.removed})}))}},{key:"renderMobileNotifications",value:function(e){var t=e.className,n=e.id,o=function(e){var t=[],n=[];return e.forEach((function(e){var o=e.container;b(o)||"center"===o?t.push(e):v(o)&&n.push(e)})),{top:t,bottom:n}}(this.state.notifications),r=this.renderNotifications(o.top),i=this.renderNotifications(o.bottom);return S.a.createElement("div",{id:n,key:"mobile",className:"react-notification-root ".concat(t||"")},S.a.createElement("div",{className:"notification-container-mobile-top"},r),S.a.createElement("div",{className:"notification-container-mobile-bottom"},i))}},{key:"renderScreenNotifications",value:function(e){var t=e.className,n=e.id,u=function(e){var t=[],n=[],u=[],p=[],f=[],d=[],h=[];return e.forEach((function(e){var m=e.container;m===a?t.push(e):m===s?n.push(e):m===l?u.push(e):m===o?p.push(e):m===r?f.push(e):m===i?d.push(e):m===c&&h.push(e)})),{topLeft:t,topRight:n,topCenter:u,bottomLeft:p,bottomRight:f,bottomCenter:d,center:h}}(this.state.notifications),p=this.renderNotifications(u.topLeft),f=this.renderNotifications(u.topRight),d=this.renderNotifications(u.topCenter),h=this.renderNotifications(u.bottomLeft),m=this.renderNotifications(u.bottomRight),y=this.renderNotifications(u.bottomCenter),v=this.renderNotifications(u.center);return S.a.createElement("div",{id:n,key:"screen",className:"react-notification-root ".concat(t||"")},S.a.createElement("div",{className:"notification-container-top-left"},p),S.a.createElement("div",{className:"notification-container-top-right"},f),S.a.createElement("div",{className:"notification-container-bottom-left"},h),S.a.createElement("div",{className:"notification-container-bottom-right"},m),S.a.createElement("div",{className:"notification-container-top-center"},d),S.a.createElement("div",{className:"notification-container-center"},S.a.createElement("div",{className:"center-inner"},v)),S.a.createElement("div",{className:"notification-container-bottom-center"},y))}},{key:"render",value:function(){var e=this.props.isMobile,t=this.state,n=t.width,o=t.breakpoint;return e&&n<=o?this.renderMobileNotifications(this.props):this.renderScreenNotifications(this.props)}}])&&H(n.prototype,u),t}(S.a.Component);V.propTypes={isMobile:P.a.bool,breakpoint:P.a.number,types:P.a.array},V.defaultProps={isMobile:!0,breakpoint:768};var Y=V;n.d(t,"store",(function(){return k})),t.default=Y}])},function(e,t,n){},function(e,t,n){"use strict";var o=n(19);function r(){}function i(){}i.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,i,a){if(a!==o){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){var o,r;r=function(e){var t=["N","E","A","D"];function n(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function o(e,t){Object.defineProperty(this,"kind",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,"path",{value:t,enumerable:!0})}function r(e,t,n){r.super_.call(this,"E",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0}),Object.defineProperty(this,"rhs",{value:n,enumerable:!0})}function i(e,t){i.super_.call(this,"N",e),Object.defineProperty(this,"rhs",{value:t,enumerable:!0})}function a(e,t){a.super_.call(this,"D",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0})}function s(e,t,n){s.super_.call(this,"A",e),Object.defineProperty(this,"index",{value:t,enumerable:!0}),Object.defineProperty(this,"item",{value:n,enumerable:!0})}function l(e,t,n){var o=e.slice((n||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,o),e}function c(e){var t=typeof e;return"object"!==t?t:e===Math?"math":null===e?"null":Array.isArray(e)?"array":"[object Date]"===Object.prototype.toString.call(e)?"date":"function"==typeof e.toString&&/^\/.*\//.test(e.toString())?"regexp":"object"}function u(e){var t=0;if(0===e.length)return t;for(var n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t&=t;return t}function p(e){var t=0,n=c(e);if("array"===n)return e.forEach((function(e){t+=p(e)})),t+u("[type: array, hash: "+t+"]");if("object"===n){for(var o in e)if(e.hasOwnProperty(o)){var r="[ type: object, key: "+o+", value hash: "+p(e[o])+"]";t+=u(r)}return t}return t+u("[ type: "+n+" ; value: "+e+"]")}function f(e,t,n,o,l,u,d,h){n=n||[],d=d||[];var m=(l=l||[]).slice(0);if(null!=u){if(o){if("function"==typeof o&&o(m,u))return;if("object"==typeof o){if(o.prefilter&&o.prefilter(m,u))return;if(o.normalize){var y=o.normalize(m,u,e,t);y&&(e=y[0],t=y[1])}}}m.push(u)}"regexp"===c(e)&&"regexp"===c(t)&&(e=e.toString(),t=t.toString());var v,b,g,w,E=typeof e,O=typeof t,S="undefined"!==E||d&&d.length>0&&d[d.length-1].lhs&&Object.getOwnPropertyDescriptor(d[d.length-1].lhs,u),k="undefined"!==O||d&&d.length>0&&d[d.length-1].rhs&&Object.getOwnPropertyDescriptor(d[d.length-1].rhs,u);if(!S&&k)n.push(new i(m,t));else if(!k&&S)n.push(new a(m,e));else if(c(e)!==c(t))n.push(new r(m,e,t));else if("date"===c(e)&&e-t!=0)n.push(new r(m,e,t));else if("object"===E&&null!==e&&null!==t){for(v=d.length-1;v>-1;--v)if(d[v].lhs===e){w=!0;break}if(w)e!==t&&n.push(new r(m,e,t));else{if(d.push({lhs:e,rhs:t}),Array.isArray(e)){for(h&&(e.sort((function(e,t){return p(e)-p(t)})),t.sort((function(e,t){return p(e)-p(t)}))),v=t.length-1,b=e.length-1;v>b;)n.push(new s(m,v,new i(void 0,t[v--])));for(;b>v;)n.push(new s(m,b,new a(void 0,e[b--])));for(;v>=0;--v)f(e[v],t[v],n,o,m,v,d,h)}else{var x=Object.keys(e),P=Object.keys(t);for(v=0;v<x.length;++v)g=x[v],(w=P.indexOf(g))>=0?(f(e[g],t[g],n,o,m,g,d,h),P[w]=null):f(e[g],void 0,n,o,m,g,d,h);for(v=0;v<P.length;++v)(g=P[v])&&f(void 0,t[g],n,o,m,g,d,h)}d.length=d.length-1}}else e!==t&&("number"===E&&isNaN(e)&&isNaN(t)||n.push(new r(m,e,t)))}function d(e,t,n,o,r){var i=[];if(f(e,t,i,o,null,null,null,r),n)for(var a=0;a<i.length;++a)n(i[a]);return i}function h(e,t,n,o){var r=d(e,t,o?function(e){e&&o.push(e)}:void 0,n);return o||(r.length?r:void 0)}function m(e,n,o){if(void 0===o&&n&&~t.indexOf(n.kind)&&(o=n),e&&o&&o.kind){for(var r=e,i=-1,a=o.path?o.path.length-1:0;++i<a;)void 0===r[o.path[i]]&&(r[o.path[i]]=void 0!==o.path[i+1]&&"number"==typeof o.path[i+1]?[]:{}),r=r[o.path[i]];switch(o.kind){case"A":o.path&&void 0===r[o.path[i]]&&(r[o.path[i]]=[]),function e(t,n,o){if(o.path&&o.path.length){var r,i=t[n],a=o.path.length-1;for(r=0;r<a;r++)i=i[o.path[r]];switch(o.kind){case"A":e(i[o.path[r]],o.index,o.item);break;case"D":delete i[o.path[r]];break;case"E":case"N":i[o.path[r]]=o.rhs}}else switch(o.kind){case"A":e(t[n],o.index,o.item);break;case"D":t=l(t,n);break;case"E":case"N":t[n]=o.rhs}return t}(o.path?r[o.path[i]]:r,o.index,o.item);break;case"D":delete r[o.path[i]];break;case"E":case"N":r[o.path[i]]=o.rhs}}}return n(r,o),n(i,o),n(a,o),n(s,o),Object.defineProperties(h,{diff:{value:h,enumerable:!0},orderIndependentDiff:{value:function(e,t,n,o){var r=o?function(e){e&&o.push(e)}:void 0,i=d(e,t,r,n,!0);return o||(i.length?i:void 0)},enumerable:!0},observableDiff:{value:d,enumerable:!0},orderIndependentObservableDiff:{value:function(e,t,n,o,r,i,a){return f(e,t,n,o,r,i,a,!0)},enumerable:!0},orderIndepHash:{value:p,enumerable:!0},applyDiff:{value:function(e,t,n){e&&t&&d(e,t,(function(o){n&&!n(e,t,o)||m(e,t,o)}))},enumerable:!0},applyChange:{value:m,enumerable:!0},revertChange:{value:function(e,t,n){if(e&&t&&n&&n.kind){var o,r,i=e;for(r=n.path.length-1,o=0;o<r;o++)void 0===i[n.path[o]]&&(i[n.path[o]]={}),i=i[n.path[o]];switch(n.kind){case"A":!function e(t,n,o){if(o.path&&o.path.length){var r,i=t[n],a=o.path.length-1;for(r=0;r<a;r++)i=i[o.path[r]];switch(o.kind){case"A":e(i[o.path[r]],o.index,o.item);break;case"D":case"E":i[o.path[r]]=o.lhs;break;case"N":delete i[o.path[r]]}}else switch(o.kind){case"A":e(t[n],o.index,o.item);break;case"D":case"E":t[n]=o.lhs;break;case"N":t=l(t,n)}return t}(i[n.path[o]],n.index,n.item);break;case"D":case"E":i[n.path[o]]=n.lhs;break;case"N":delete i[n.path[o]]}}},enumerable:!0},isConflict:{value:function(){return"undefined"!=typeof $conflict},enumerable:!0}}),h.DeepDiff=h,e&&(e.DeepDiff=h),h}(this),void 0===(o=function(){return r}.call(t,n,t,e))||(e.exports=o)},function(e,t,n){"use strict";
|
37 |
/**
|
38 |
* @license nested-property https://github.com/cosmosio/nested-property
|
39 |
*
|
48 |
*
|
49 |
* This source code is licensed under the MIT license found in the
|
50 |
* LICENSE file in the root directory of this source tree.
|
51 |
+
*/Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&Symbol.for,r=o?Symbol.for("react.element"):60103,i=o?Symbol.for("react.portal"):60106,a=o?Symbol.for("react.fragment"):60107,s=o?Symbol.for("react.strict_mode"):60108,l=o?Symbol.for("react.profiler"):60114,c=o?Symbol.for("react.provider"):60109,u=o?Symbol.for("react.context"):60110,p=o?Symbol.for("react.async_mode"):60111,f=o?Symbol.for("react.concurrent_mode"):60111,d=o?Symbol.for("react.forward_ref"):60112,h=o?Symbol.for("react.suspense"):60113,m=o?Symbol.for("react.suspense_list"):60120,y=o?Symbol.for("react.memo"):60115,v=o?Symbol.for("react.lazy"):60116,b=o?Symbol.for("react.fundamental"):60117,g=o?Symbol.for("react.responder"):60118,w=o?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case p:case f:case a:case l:case s:case h:return e;default:switch(e=e&&e.$$typeof){case u:case d:case v:case y:case c:return e;default:return t}}case i:return t}}}function O(e){return E(e)===f}t.typeOf=E,t.AsyncMode=p,t.ConcurrentMode=f,t.ContextConsumer=u,t.ContextProvider=c,t.Element=r,t.ForwardRef=d,t.Fragment=a,t.Lazy=v,t.Memo=y,t.Portal=i,t.Profiler=l,t.StrictMode=s,t.Suspense=h,t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===f||e===l||e===s||e===h||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===v||e.$$typeof===y||e.$$typeof===c||e.$$typeof===u||e.$$typeof===d||e.$$typeof===b||e.$$typeof===g||e.$$typeof===w)},t.isAsyncMode=function(e){return O(e)||E(e)===p},t.isConcurrentMode=O,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===d},t.isFragment=function(e){return E(e)===a},t.isLazy=function(e){return E(e)===v},t.isMemo=function(e){return E(e)===y},t.isPortal=function(e){return E(e)===i},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===s},t.isSuspense=function(e){return E(e)===h}},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var o=n(6),r=n.n(o),i=(n(17),n(1)),a=n.n(i),s=(n(0),n(5)),l=n.n(s),c=n(2),u=n.n(c),p=n(4),f=n.n(p),d=n(8),h=n.n(d),m=n(13),y=n.n(m),v=n(9),b=n.n(v),g=n(7),w=n(3),E=n.n(w),O=n(14);function S(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function k(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function x(e,t,n){return t&&k(e.prototype,t),n&&k(e,n),e}function P(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(){return(C=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(this,arguments)}function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function T(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?N(Object(n),!0).forEach((function(t){P(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):N(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function j(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&R(e,t)}function I(e){return(I=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function R(e,t){return(R=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function M(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function L(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?L(e):t}var A={INIT:"init",START:"start",STOP:"stop",RESET:"reset",PREV:"prev",NEXT:"next",GO:"go",CLOSE:"close",SKIP:"skip",UPDATE:"update"},D="tour:start",F="step:before",W="beacon",B="tooltip",z="step:after",H="tour:end",U="tour:status",q="error:target_not_found",G={INIT:"init",READY:"ready",BEACON:"beacon",TOOLTIP:"tooltip",COMPLETE:"complete",ERROR:"error"},V={IDLE:"idle",READY:"ready",WAITING:"waiting",RUNNING:"running",PAUSED:"paused",SKIPPED:"skipped",FINISHED:"finished",ERROR:"error"},Y=h.a.canUseDOM,$=void 0!==p.createPortal;function K(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator.userAgent,t=e;return"undefined"==typeof window?t="node":document.documentMode?t="ie":/Edge/.test(e)?t="edge":Boolean(window.opera)||e.indexOf(" OPR/")>=0?t="opera":void 0!==window.InstallTrigger?t="firefox":window.chrome?t="chrome":/(Version\/([0-9._]+).*Safari|CriOS|FxiOS| Mobile\/)/.test(e)&&(t="safari"),t}function X(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function J(e){var t=[];return function e(n){if("string"==typeof n||"number"==typeof n)t.push(n);else if(Array.isArray(n))n.forEach((function(t){return e(t)}));else if(n&&n.props){var o=n.props.children;Array.isArray(o)?o.forEach((function(t){return e(t)})):e(o)}}(e),t.join(" ").trim()}function Z(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Q(e,t){return!(!u.a.plainObject(e)||!u.a.array(t))&&Object.keys(e).every((function(e){return-1!==t.indexOf(e)}))}function ee(e){var t=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,t,n,o){return t+t+n+n+o+o})),n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return n?[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)]:[]}function te(e){return e.disableBeacon||"center"===e.placement}function ne(){return!(-1!==["chrome","safari","firefox","opera"].indexOf(K()))}function oe(e){var t=e.title,n=e.data,o=e.warn,r=void 0!==o&&o,i=e.debug,a=void 0!==i&&i,s=r?console.warn||console.error:console.log;a&&(t&&n?(console.groupCollapsed("%creact-joyride: ".concat(t),"color: #ff0044; font-weight: bold; font-size: 12px;"),Array.isArray(n)?n.forEach((function(e){u.a.plainObject(e)&&e.key?s.apply(console,[e.key,e.value]):s.apply(console,[e])})):s.apply(console,[n]),console.groupEnd()):console.error("Missing title or data props"))}var re={action:"",controlled:!1,index:0,lifecycle:G.INIT,size:0,status:V.IDLE},ie=["action","index","lifecycle","status"];function ae(e){var t=new Map,n=new Map;return new(function(){function e(){var t=this,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=o.continuous,i=void 0!==r&&r,a=o.stepIndex,s=o.steps,l=void 0===s?[]:s;S(this,e),P(this,"listener",void 0),P(this,"setSteps",(function(e){var o=t.getState(),r=o.size,i=o.status,a={size:e.length,status:i};n.set("steps",e),i===V.WAITING&&!r&&e.length&&(a.status=V.RUNNING),t.setState(a)})),P(this,"addListener",(function(e){t.listener=e})),P(this,"update",(function(e){if(!Q(e,ie))throw new Error("State is not valid. Valid keys: ".concat(ie.join(", ")));t.setState(T({},t.getNextState(T({},t.getState(),{},e,{action:e.action||A.UPDATE}),!0)))})),P(this,"start",(function(e){var n=t.getState(),o=n.index,r=n.size;t.setState(T({},t.getNextState({action:A.START,index:u.a.number(e)?e:o},!0),{status:r?V.RUNNING:V.WAITING}))})),P(this,"stop",(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=t.getState(),o=n.index,r=n.status;-1===[V.FINISHED,V.SKIPPED].indexOf(r)&&t.setState(T({},t.getNextState({action:A.STOP,index:o+(e?1:0)}),{status:V.PAUSED}))})),P(this,"close",(function(){var e=t.getState(),n=e.index;e.status===V.RUNNING&&t.setState(T({},t.getNextState({action:A.CLOSE,index:n+1})))})),P(this,"go",(function(e){var n=t.getState(),o=n.controlled,r=n.status;if(!o&&r===V.RUNNING){var i=t.getSteps()[e];t.setState(T({},t.getNextState({action:A.GO,index:e}),{status:i?r:V.FINISHED}))}})),P(this,"info",(function(){return t.getState()})),P(this,"next",(function(){var e=t.getState(),n=e.index;e.status===V.RUNNING&&t.setState(t.getNextState({action:A.NEXT,index:n+1}))})),P(this,"open",(function(){t.getState().status===V.RUNNING&&t.setState(T({},t.getNextState({action:A.UPDATE,lifecycle:G.TOOLTIP})))})),P(this,"prev",(function(){var e=t.getState(),n=e.index;e.status===V.RUNNING&&t.setState(T({},t.getNextState({action:A.PREV,index:n-1})))})),P(this,"reset",(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=t.getState(),o=n.controlled;o||t.setState(T({},t.getNextState({action:A.RESET,index:0}),{status:e?V.RUNNING:V.READY}))})),P(this,"skip",(function(){t.getState().status===V.RUNNING&&t.setState({action:A.SKIP,lifecycle:G.INIT,status:V.SKIPPED})})),this.setState({action:A.INIT,controlled:u.a.number(a),continuous:i,index:u.a.number(a)?a:0,lifecycle:G.INIT,status:l.length?V.READY:V.IDLE},!0),this.setSteps(l)}return x(e,[{key:"setState",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.getState(),r=T({},o,{},e),i=r.action,a=r.index,s=r.lifecycle,l=r.size,c=r.status;t.set("action",i),t.set("index",a),t.set("lifecycle",s),t.set("size",l),t.set("status",c),n&&(t.set("controlled",e.controlled),t.set("continuous",e.continuous)),this.listener&&this.hasUpdatedState(o)&&this.listener(this.getState())}},{key:"getState",value:function(){return t.size?{action:t.get("action")||"",controlled:t.get("controlled")||!1,index:parseInt(t.get("index"),10),lifecycle:t.get("lifecycle")||"",size:t.get("size")||0,status:t.get("status")||""}:T({},re)}},{key:"getNextState",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.getState(),o=n.action,r=n.controlled,i=n.index,a=n.size,s=n.status,l=u.a.number(e.index)?e.index:i,c=r&&!t?i:Math.min(Math.max(l,0),a);return{action:e.action||o,controlled:r,index:c,lifecycle:e.lifecycle||G.INIT,size:e.size||a,status:c===a?V.FINISHED:e.status||s}}},{key:"hasUpdatedState",value:function(e){return JSON.stringify(e)!==JSON.stringify(this.getState())}},{key:"getSteps",value:function(){var e=n.get("steps");return Array.isArray(e)?e:[]}},{key:"getHelpers",value:function(){return{close:this.close,go:this.go,info:this.info,next:this.next,open:this.open,prev:this.prev,reset:this.reset,skip:this.skip}}}]),e}())(e)}function se(){return document.scrollingElement||document.createElement("body")}function le(e){return e?e.getBoundingClientRect():{}}function ce(e){return"string"==typeof e?document.querySelector(e):e}function ue(e){return e&&1===e.nodeType?getComputedStyle(e):{}}function pe(e,t,n){var o=b()(e);return o.isSameNode(se())?n?document:se():o.scrollHeight>o.offsetHeight||t?o:(o.style.overflow="initial",se())}function fe(e,t){return!!e&&!pe(e,t).isSameNode(se())}function de(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"fixed";if(!(e&&e instanceof HTMLElement))return!1;var n=e.nodeName;return"BODY"!==n&&"HTML"!==n&&(ue(e).position===t||de(e.parentNode,t))}function he(e,t,n){if(!e)return 0;var o=b()(e),r=e.offsetTop;return fe(e,n)&&!function(e){return e.offsetParent!==document.body}(e)&&(r-=o.offsetTop),Math.floor(r-t)}!function(e){function t(t,n,o,r,i,a){var s=r||"<<anonymous>>",l=a||o;if(null==n[o])return t?new Error("Required ".concat(i," `").concat(l,"` was not specified in `").concat(s,"`.")):null;for(var c=arguments.length,u=new Array(c>6?c-6:0),p=6;p<c;p++)u[p-6]=arguments[p];return e.apply(void 0,[n,o,s,i,l].concat(u))}var n=t.bind(null,!1);n.isRequired=t.bind(null,!0)}((function(e,t,n,o,r){var i=e[t],s=i;if(!a.a.isValidElement(i)&&Object(g.isValidElementType)(i)){s=a.a.createElement(s,{ref:function(){},step:{}})}if(u.a.string(i)||u.a.number(i)||!Object(g.isValidElementType)(i)||-1===[g.Element,g.ForwardRef].indexOf(Object(g.typeOf)(s)))return new Error("Invalid ".concat(o," `").concat(r,"` supplied to `").concat(n,"`. Expected a React class or forwardRef."))}));var me={arrowColor:"#fff",backgroundColor:"#fff",beaconSize:36,overlayColor:"rgba(0, 0, 0, 0.5)",primaryColor:"#f04",spotlightShadow:"0 0 15px rgba(0, 0, 0, 0.5)",textColor:"#333",zIndex:100},ye={backgroundColor:"transparent",border:0,borderRadius:0,color:"#555",cursor:"pointer",fontSize:16,lineHeight:1,padding:8,WebkitAppearance:"none"},ve={borderRadius:4,position:"absolute"};var be={floaterProps:{options:{preventOverflow:{boundariesElement:"scrollParent"}},wrapperOptions:{offset:-18,position:!0}},locale:{back:"Back",close:"Close",last:"Last",next:"Next",open:"Open the dialog",skip:"Skip"},step:{event:"click",placement:"bottom",offset:10}};function ge(e){var t=["beaconComponent","disableCloseOnEsc","disableOverlay","disableOverlayClose","disableScrolling","disableScrollParentFix","floaterProps","hideBackButton","locale","showProgress","showSkipButton","spotlightClicks","spotlightPadding","styles","tooltipComponent"];return Object.keys(e).filter((function(e){return-1!==t.indexOf(e)})).reduce((function(t,n){return t[n]=e[n],t}),{})}function we(e,t){if(!e)return null;var n=E.a.all([ge(t),be.step,e],{isMergeableObject:u.a.plainObject}),o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=E()(me,e.options||{}),n=290;window.innerWidth>480&&(n=380),t.width&&(n=window.innerWidth<t.width?window.innerWidth-30:t.width);var o={bottom:0,left:0,overflow:"hidden",position:"absolute",right:0,top:0,zIndex:t.zIndex},r={beacon:T({},ye,{display:"inline-block",height:t.beaconSize,position:"relative",width:t.beaconSize,zIndex:t.zIndex}),beaconInner:{animation:"joyride-beacon-inner 1.2s infinite ease-in-out",backgroundColor:t.primaryColor,borderRadius:"50%",display:"block",height:"50%",left:"50%",opacity:.7,position:"absolute",top:"50%",transform:"translate(-50%, -50%)",width:"50%"},beaconOuter:{animation:"joyride-beacon-outer 1.2s infinite ease-in-out",backgroundColor:"rgba(".concat(ee(t.primaryColor).join(","),", 0.2)"),border:"2px solid ".concat(t.primaryColor),borderRadius:"50%",boxSizing:"border-box",display:"block",height:"100%",left:0,opacity:.9,position:"absolute",top:0,transformOrigin:"center",width:"100%"},tooltip:{backgroundColor:t.backgroundColor,borderRadius:5,boxSizing:"border-box",color:t.textColor,fontSize:16,maxWidth:"100%",padding:15,position:"relative",width:n},tooltipContainer:{lineHeight:1.4,textAlign:"center"},tooltipTitle:{fontSize:18,margin:0},tooltipContent:{padding:"20px 10px"},tooltipFooter:{alignItems:"center",display:"flex",justifyContent:"flex-end",marginTop:15},tooltipFooterSpacer:{flex:1},buttonNext:T({},ye,{backgroundColor:t.primaryColor,borderRadius:4,color:"#fff"}),buttonBack:T({},ye,{color:t.primaryColor,marginLeft:"auto",marginRight:5}),buttonClose:T({},ye,{color:t.textColor,height:14,padding:15,position:"absolute",right:0,top:0,width:14}),buttonSkip:T({},ye,{color:t.textColor,fontSize:14}),overlay:T({},o,{backgroundColor:t.overlayColor,mixBlendMode:"hard-light"}),overlayLegacy:T({},o),overlayLegacyCenter:T({},o,{backgroundColor:t.overlayColor}),spotlight:T({},ve,{backgroundColor:"gray"}),spotlightLegacy:T({},ve,{boxShadow:"0 0 0 9999px ".concat(t.overlayColor,", ").concat(t.spotlightShadow)}),floaterStyles:{arrow:{color:t.arrowColor},options:{zIndex:t.zIndex}},options:t};return E()(r,e)}(E()(t.styles||{},e.styles||{})),r=fe(ce(e.target),n.disableScrollParentFix),i=E.a.all([t.floaterProps||{},be.floaterProps,n.floaterProps||{}]);return i.offset=n.offset,i.styles=E()(i.styles||{},o.floaterStyles||{}),delete o.floaterStyles,i.offset+=t.spotlightPadding||e.spotlightPadding,e.placementBeacon&&(i.wrapperOptions.placement=e.placementBeacon),r&&(i.options.preventOverflow.boundariesElement="window"),T({},n,{locale:E.a.all([be.locale,t.locale||{},n.locale||{}]),floaterProps:i,styles:o})}function Ee(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return u.a.plainObject(e)?!!e.target||(oe({title:"validateStep",data:"target is missing from the step",warn:!0,debug:t}),!1):(oe({title:"validateStep",data:"step must be an object",warn:!0,debug:t}),!1)}function Oe(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return u.a.array(e)?e.every((function(e){return Ee(e,t)})):(oe({title:"validateSteps",data:"steps must be an array",warn:!0,debug:t}),!1)}var Se=function e(t){var n=this,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(S(this,e),P(this,"element",void 0),P(this,"options",void 0),P(this,"canBeTabbed",(function(e){var t=e.tabIndex;return(null===t||t<0)&&(t=void 0),!isNaN(t)&&n.canHaveFocus(e,!0)})),P(this,"canHaveFocus",(function(e,t){var o=e.nodeName.toLowerCase();return(/input|select|textarea|button|object/.test(o)&&!e.getAttribute("disabled")||"a"===o&&e.getAttribute("href")||t)&&n.isVisible(e)})),P(this,"findValidTabElements",(function(){return[].slice.call(n.element.querySelectorAll("*"),0).filter(n.canBeTabbed)})),P(this,"handleKeyDown",(function(e){var t=n.options.keyCode,o=void 0===t?9:t;e.keyCode===o&&n.interceptTab(e)})),P(this,"interceptTab",(function(e){e.preventDefault();var t=n.findValidTabElements(),o=e.shiftKey;if(t.length){var r=t.indexOf(document.activeElement);-1===r||!o&&r+1===t.length?r=0:o&&0===r?r=t.length-1:r+=o?-1:1,t[r].focus()}})),P(this,"isHidden",(function(e){var t=e.offsetWidth<=0&&e.offsetHeight<=0,n=window.getComputedStyle(e);return!(!t||e.innerHTML)||(t&&"visible"!==n.getPropertyValue("overflow")||"none"===n.getPropertyValue("display"))})),P(this,"isVisible",(function(e){for(var t=e;t;)if(t instanceof HTMLElement){if(t===document.body)break;if(n.isHidden(t))return!1;t=t.parentNode}return!0})),P(this,"removeScope",(function(){window.removeEventListener("keydown",n.handleKeyDown)})),P(this,"checkFocus",(function(e){document.activeElement!==e&&(e.focus(),window.requestAnimationFrame((function(){return n.checkFocus(e)})))})),P(this,"setFocus",(function(){var e=n.options.selector;if(e){var t=n.element.querySelector(e);t&&window.requestAnimationFrame((function(){return n.checkFocus(t)}))}})),!(t instanceof HTMLElement))throw new TypeError("Invalid parameter: element must be an HTMLElement");this.element=t,this.options=o,window.addEventListener("keydown",this.handleKeyDown,!1),this.setFocus()},ke=function(e){function t(e){var n;if(S(this,t),P(L(n=_(this,I(t).call(this,e))),"setBeaconRef",(function(e){n.beacon=e})),!e.beaconComponent){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",r.id="joyride-beacon-animation",r.appendChild(document.createTextNode("\n @keyframes joyride-beacon-inner {\n 20% {\n opacity: 0.9;\n }\n \n 90% {\n opacity: 0.7;\n }\n }\n \n @keyframes joyride-beacon-outer {\n 0% {\n transform: scale(1);\n }\n \n 45% {\n opacity: 0.7;\n transform: scale(0.75);\n }\n \n 100% {\n opacity: 0.9;\n transform: scale(1);\n }\n }\n ")),o.appendChild(r)}return n}return j(t,e),x(t,[{key:"componentDidMount",value:function(){var e=this,t=this.props.shouldFocus;setTimeout((function(){u.a.domElement(e.beacon)&&t&&e.beacon.focus()}),0)}},{key:"componentWillUnmount",value:function(){var e=document.getElementById("joyride-beacon-animation");e&&e.parentNode.removeChild(e)}},{key:"render",value:function(){var e,t=this.props,n=t.beaconComponent,o=t.locale,r=t.onClickOrHover,i=t.styles,s={"aria-label":o.open,onClick:r,onMouseEnter:r,ref:this.setBeaconRef,title:o.open};if(n){var l=n;e=a.a.createElement(l,s)}else e=a.a.createElement("button",C({key:"JoyrideBeacon",className:"react-joyride__beacon",style:i.beacon,type:"button"},s),a.a.createElement("span",{style:i.beaconInner}),a.a.createElement("span",{style:i.beaconOuter}));return e}}]),t}(a.a.Component),xe=function(e){var t=e.styles;return a.a.createElement("div",{key:"JoyrideSpotlight",className:"react-joyride__spotlight",style:t})},Pe=function(e){function t(){var e,n;S(this,t);for(var o=arguments.length,r=new Array(o),i=0;i<o;i++)r[i]=arguments[i];return P(L(n=_(this,(e=I(t)).call.apply(e,[this].concat(r)))),"_isMounted",!1),P(L(n),"state",{mouseOverSpotlight:!1,isScrolling:!1,showSpotlight:!0}),P(L(n),"handleMouseMove",(function(e){var t=n.state.mouseOverSpotlight,o=n.spotlightStyles,r=o.height,i=o.left,a=o.position,s=o.top,l=o.width,c="fixed"===a?e.clientY:e.pageY,u="fixed"===a?e.clientX:e.pageX,p=u>=i&&u<=i+l&&(c>=s&&c<=s+r);p!==t&&n.updateState({mouseOverSpotlight:p})})),P(L(n),"handleScroll",(function(){var e=ce(n.props.target);n.scrollParent!==document?(n.state.isScrolling||n.updateState({isScrolling:!0,showSpotlight:!1}),clearTimeout(n.scrollTimeout),n.scrollTimeout=setTimeout((function(){n.updateState({isScrolling:!1,showSpotlight:!0})}),50)):de(e,"sticky")&&n.updateState({})})),P(L(n),"handleResize",(function(){clearTimeout(n.resizeTimeout),n.resizeTimeout=setTimeout((function(){n._isMounted&&n.forceUpdate()}),100)})),n}return j(t,e),x(t,[{key:"componentDidMount",value:function(){var e=this.props,t=(e.debug,e.disableScrolling,e.disableScrollParentFix),n=ce(e.target);this.scrollParent=pe(n,t,!0),this._isMounted=!0,window.addEventListener("resize",this.handleResize)}},{key:"componentDidUpdate",value:function(e){var t=this,n=this.props,o=n.lifecycle,r=n.spotlightClicks,i=l()(e,this.props),a=i.changed;(0,i.changedTo)("lifecycle",G.TOOLTIP)&&(this.scrollParent.addEventListener("scroll",this.handleScroll,{passive:!0}),setTimeout((function(){t.state.isScrolling||t.updateState({showSpotlight:!0})}),100)),(a("spotlightClicks")||a("disableOverlay")||a("lifecycle"))&&(r&&o===G.TOOLTIP?window.addEventListener("mousemove",this.handleMouseMove,!1):o!==G.TOOLTIP&&window.removeEventListener("mousemove",this.handleMouseMove))}},{key:"componentWillUnmount",value:function(){this._isMounted=!1,window.removeEventListener("mousemove",this.handleMouseMove),window.removeEventListener("resize",this.handleResize),clearTimeout(this.resizeTimeout),clearTimeout(this.scrollTimeout),this.scrollParent.removeEventListener("scroll",this.handleScroll)}},{key:"updateState",value:function(e){this._isMounted&&this.setState(e)}},{key:"render",value:function(){var e=this.state,t=e.mouseOverSpotlight,n=e.showSpotlight,o=this.props,r=o.disableOverlay,i=o.lifecycle,s=o.onClickOverlay,l=o.placement,c=o.styles;if(r||i!==G.TOOLTIP)return null;var u=c.overlay;ne()&&(u="center"===l?c.overlayLegacyCenter:c.overlayLegacy);var p,f,d,h=T({cursor:"pointer",height:(p=document,f=p.body,d=p.documentElement,f&&d?Math.max(f.scrollHeight,f.offsetHeight,d.clientHeight,d.scrollHeight,d.offsetHeight):0),pointerEvents:t?"none":"auto"},u),m="center"!==l&&n&&a.a.createElement(xe,{styles:this.spotlightStyles});if("safari"===K()){h.mixBlendMode,h.zIndex;var y=M(h,["mixBlendMode","zIndex"]);m=a.a.createElement("div",{style:T({},y)},m),delete h.backgroundColor}return a.a.createElement("div",{className:"react-joyride__overlay",style:h,onClick:s},m)}},{key:"spotlightStyles",get:function(){var e=this.state.showSpotlight,t=this.props,n=t.disableScrollParentFix,o=t.spotlightClicks,r=t.spotlightPadding,i=t.styles,a=ce(t.target),s=le(a),l=de(a),c=function(e,t,n){var o=le(e),r=pe(e,n),i=fe(e,n),a=0;r instanceof HTMLElement&&(a=r.scrollTop);var s=o.top+(i||de(e)?0:a);return Math.floor(s-t)}(a,r,n);return T({},ne()?i.spotlightLegacy:i.spotlight,{height:Math.round(s.height+2*r),left:Math.round(s.left-r),opacity:e?1:0,pointerEvents:o?"none":"auto",position:l?"fixed":"absolute",top:c,transition:"opacity 0.2s",width:Math.round(s.width+2*r)})}}]),t}(a.a.Component),Ce=function(e){var t=e.styles,n=M(e,["styles"]),o=t.color,r=t.height,i=t.width,s=M(t,["color","height","width"]);return a.a.createElement("button",C({style:s,type:"button"},n),a.a.createElement("svg",{width:"number"==typeof i?"".concat(i,"px"):i,height:"number"==typeof r?"".concat(r,"px"):r,viewBox:"0 0 18 18",version:"1.1",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid"},a.a.createElement("g",null,a.a.createElement("path",{d:"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z",fill:o}))))},Ne=function(e){function t(){return S(this,t),_(this,I(t).apply(this,arguments))}return j(t,e),x(t,[{key:"render",value:function(){var e=this.props,t=e.backProps,n=e.closeProps,o=e.continuous,r=e.index,i=e.isLastStep,s=e.primaryProps,l=e.size,c=e.skipProps,u=e.step,p=e.tooltipProps,f=u.content,d=u.hideBackButton,h=u.hideCloseButton,m=u.hideFooter,y=u.showProgress,v=u.showSkipButton,b=u.title,g=u.styles,w=u.locale,E=w.back,O=w.close,S=w.last,k=w.next,x=w.skip,P={primary:O};return o&&(P.primary=i?S:k,y&&(P.primary=a.a.createElement("span",null,P.primary," (",r+1,"/",l,")"))),v&&!i&&(P.skip=a.a.createElement("button",C({style:g.buttonSkip,type:"button","aria-live":"off"},c),x)),!d&&r>0&&(P.back=a.a.createElement("button",C({style:g.buttonBack,type:"button"},t),E)),P.close=!h&&a.a.createElement(Ce,C({styles:g.buttonClose},n)),a.a.createElement("div",C({key:"JoyrideTooltip",className:"react-joyride__tooltip",style:g.tooltip},p),a.a.createElement("div",{style:g.tooltipContainer},b&&a.a.createElement("h4",{style:g.tooltipTitle,"aria-label":b},b),a.a.createElement("div",{style:g.tooltipContent},f)),!m&&a.a.createElement("div",{style:g.tooltipFooter},a.a.createElement("div",{style:g.tooltipFooterSpacer},P.skip),P.back,a.a.createElement("button",C({style:g.buttonNext,type:"button"},s),P.primary)),P.close)}}]),t}(a.a.Component),Te=function(e){function t(){var e,n;S(this,t);for(var o=arguments.length,r=new Array(o),i=0;i<o;i++)r[i]=arguments[i];return P(L(n=_(this,(e=I(t)).call.apply(e,[this].concat(r)))),"handleClickBack",(function(e){e.preventDefault(),n.props.helpers.prev()})),P(L(n),"handleClickClose",(function(e){e.preventDefault(),n.props.helpers.close()})),P(L(n),"handleClickPrimary",(function(e){e.preventDefault();var t=n.props,o=t.continuous,r=t.helpers;o?r.next():r.close()})),P(L(n),"handleClickSkip",(function(e){e.preventDefault(),n.props.helpers.skip()})),P(L(n),"getElementsProps",(function(){var e=n.props,t=e.continuous,o=e.isLastStep,r=e.setTooltipRef,i=e.step,a=J(i.locale.back),s=J(i.locale.close),l=J(i.locale.last),c=J(i.locale.next),u=J(i.locale.skip),p=t?c:s;return o&&(p=l),{backProps:{"aria-label":a,"data-action":"back",onClick:n.handleClickBack,role:"button",title:a},closeProps:{"aria-label":s,"data-action":"close",onClick:n.handleClickClose,role:"button",title:s},primaryProps:{"aria-label":p,"data-action":"primary",onClick:n.handleClickPrimary,role:"button",title:p},skipProps:{"aria-label":u,"data-action":"skip",onClick:n.handleClickSkip,role:"button",title:u},tooltipProps:{"aria-modal":!0,ref:r,role:"alertdialog"}}})),n}return j(t,e),x(t,[{key:"render",value:function(){var e,t=this.props,n=t.continuous,o=t.index,r=t.isLastStep,i=t.size,s=t.step,l=(s.beaconComponent,s.tooltipComponent),c=M(s,["beaconComponent","tooltipComponent"]);if(l){var u=T({},this.getElementsProps(),{continuous:n,index:o,isLastStep:r,size:i,step:c}),p=l;e=a.a.createElement(p,u)}else e=a.a.createElement(Ne,C({},this.getElementsProps(),{continuous:n,index:o,isLastStep:r,size:i,step:s}));return e}}]),t}(a.a.Component),je=function(e){function t(e){var n;return S(this,t),n=_(this,I(t).call(this,e)),Y?(n.node=document.createElement("div"),e.id&&(n.node.id=e.id),document.body.appendChild(n.node),n):_(n)}return j(t,e),x(t,[{key:"componentDidMount",value:function(){Y&&($||this.renderReact15())}},{key:"componentDidUpdate",value:function(){Y&&($||this.renderReact15())}},{key:"componentWillUnmount",value:function(){Y&&this.node&&($||f.a.unmountComponentAtNode(this.node),document.body.removeChild(this.node))}},{key:"renderReact15",value:function(){if(!Y)return null;var e=this.props.children;return f.a.unstable_renderSubtreeIntoContainer(this,e,this.node),null}},{key:"renderReact16",value:function(){if(!Y||!$)return null;var e=this.props.children;return f.a.createPortal(e,this.node)}},{key:"render",value:function(){return $?this.renderReact16():null}}]),t}(a.a.Component),Ie=function(e){function t(){var e,n;S(this,t);for(var o=arguments.length,r=new Array(o),i=0;i<o;i++)r[i]=arguments[i];return P(L(n=_(this,(e=I(t)).call.apply(e,[this].concat(r)))),"scope",{removeScope:function(){}}),P(L(n),"handleClickHoverBeacon",(function(e){var t=n.props,o=t.step,r=t.update;"mouseenter"===e.type&&"hover"!==o.event||r({lifecycle:G.TOOLTIP})})),P(L(n),"handleClickOverlay",(function(){var e=n.props,t=e.helpers;e.step.disableOverlayClose||t.close()})),P(L(n),"setTooltipRef",(function(e){n.tooltip=e})),P(L(n),"setPopper",(function(e,t){var o=n.props,r=o.action,i=o.setPopper,a=o.update;"wrapper"===t?n.beaconPopper=e:n.tooltipPopper=e,i(e,t),n.beaconPopper&&n.tooltipPopper&&a({action:r===A.CLOSE?A.CLOSE:r,lifecycle:G.READY})})),n}return j(t,e),x(t,[{key:"componentDidMount",value:function(){var e=this.props,t=e.debug,n=e.index;oe({title:"step:".concat(n),data:[{key:"props",value:this.props}],debug:t})}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.action,o=t.callback,r=t.continuous,i=t.controlled,a=t.debug,s=t.index,c=t.lifecycle,u=t.size,p=t.status,f=t.step,d=t.update,h=l()(e,this.props),m=h.changed,y=h.changedTo,v=h.changedFrom,b={action:n,controlled:i,index:s,lifecycle:c,size:u,status:p},g=r&&n!==A.CLOSE&&(s>0||n===A.PREV),w=m("action")||m("index")||m("lifecycle")||m("status"),E=v("lifecycle",[G.TOOLTIP,G.INIT],G.INIT);if(y("action",[A.NEXT,A.PREV,A.SKIP,A.CLOSE])&&(E||i)&&o(T({},b,{index:e.index,lifecycle:G.COMPLETE,step:e.step,type:z})),w&&f){var O=ce(f.target),S=!!O;S&&function(e){if(!e)return!1;for(var t=e;t&&t!==document.body;){if(t instanceof HTMLElement){var n=getComputedStyle(t),o=n.display,r=n.visibility;if("none"===o||"hidden"===r)return!1}t=t.parentNode}return!0}(O)?(v("status",V.READY,V.RUNNING)||v("lifecycle",G.INIT,G.READY))&&o(T({},b,{step:f,type:F})):(console.warn(S?"Target not visible":"Target not mounted",f),o(T({},b,{type:q,step:f})),i||d({index:s+(-1!==[A.PREV].indexOf(n)?-1:1)}))}v("lifecycle",G.INIT,G.READY)&&d({lifecycle:te(f)||g?G.TOOLTIP:G.BEACON}),m("index")&&oe({title:"step:".concat(c),data:[{key:"props",value:this.props}],debug:a}),y("lifecycle",G.BEACON)&&o(T({},b,{step:f,type:W})),y("lifecycle",G.TOOLTIP)&&(o(T({},b,{step:f,type:B})),this.scope=new Se(this.tooltip,{selector:"[data-action=primary]"}),this.scope.setFocus()),v("lifecycle",[G.TOOLTIP,G.INIT],G.INIT)&&(this.scope.removeScope(),delete this.beaconPopper,delete this.tooltipPopper)}},{key:"componentWillUnmount",value:function(){this.scope.removeScope()}},{key:"render",value:function(){var e=this.props,t=e.continuous,n=e.debug,o=e.helpers,r=e.index,i=e.lifecycle,s=e.shouldScroll,l=e.size,c=e.step,p=ce(c.target);return Ee(c)&&u.a.domElement(p)?a.a.createElement("div",{key:"JoyrideStep-".concat(r),className:"react-joyride__step"},a.a.createElement(je,{id:"react-joyride-portal"},a.a.createElement(Pe,C({},c,{debug:n,lifecycle:i,onClickOverlay:this.handleClickOverlay}))),a.a.createElement(O.a,C({component:a.a.createElement(Te,{continuous:t,helpers:o,index:r,isLastStep:r+1===l,setTooltipRef:this.setTooltipRef,size:l,step:c}),debug:n,getPopper:this.setPopper,id:"react-joyride-step-".concat(r),isPositioned:c.isFixed||de(p),open:this.open,placement:c.placement,target:c.target},c.floaterProps),a.a.createElement(ke,{beaconComponent:c.beaconComponent,locale:c.locale,onClickOrHover:this.handleClickHoverBeacon,shouldFocus:s,styles:c.styles}))):null}},{key:"open",get:function(){var e=this.props,t=e.step,n=e.lifecycle;return!(!te(t)&&n!==G.TOOLTIP)}}]),t}(a.a.Component),Re=function(e){function t(e){var n;return S(this,t),P(L(n=_(this,I(t).call(this,e))),"initStore",(function(){var e=n.props,t=e.debug,o=e.getHelpers,r=e.run,i=e.stepIndex;n.store=new ae(T({},n.props,{controlled:r&&u.a.number(i)})),n.helpers=n.store.getHelpers();var a=n.store.addListener;return oe({title:"init",data:[{key:"props",value:n.props},{key:"state",value:n.state}],debug:t}),a(n.syncState),o(n.helpers),n.store.getState()})),P(L(n),"callback",(function(e){var t=n.props.callback;u.a.function(t)&&t(e)})),P(L(n),"handleKeyboard",(function(e){var t=n.state,o=t.index,r=t.lifecycle,i=n.props.steps[o],a=window.Event?e.which:e.keyCode;r===G.TOOLTIP&&27===a&&i&&!i.disableCloseOnEsc&&n.store.close()})),P(L(n),"syncState",(function(e){n.setState(e)})),P(L(n),"setPopper",(function(e,t){"wrapper"===t?n.beaconPopper=e:n.tooltipPopper=e})),P(L(n),"shouldScroll",(function(e,t,n,o,r,i,a){return!e&&(0!==t||n||o===G.TOOLTIP)&&"center"!==r.placement&&(!r.isFixed||!de(i))&&a.lifecycle!==o&&-1!==[G.BEACON,G.TOOLTIP].indexOf(o)})),n.state=n.initStore(),n}return j(t,e),x(t,[{key:"componentDidMount",value:function(){if(Y){var e=this.props,t=e.disableCloseOnEsc,n=e.debug,o=e.run,r=e.steps,i=this.store.start;Oe(r,n)&&o&&i(),t||document.body.addEventListener("keydown",this.handleKeyboard,{passive:!0})}}},{key:"componentDidUpdate",value:function(e,t){if(Y){var n=this.state,o=n.action,r=n.controlled,a=n.index,s=n.lifecycle,c=n.status,p=this.props,f=p.debug,d=p.run,h=p.stepIndex,m=p.steps,y=e.steps,v=e.stepIndex,b=this.store,g=b.setSteps,w=b.reset,E=b.start,O=b.stop,S=b.update,k=l()(e,this.props).changed,x=l()(t,this.state),P=x.changed,C=x.changedFrom,N=x.changedTo,j=we(m[a],this.props),I=!function e(t,n){var o,r=Object(i.isValidElement)(t)||Object(i.isValidElement)(n),a=u.a.undefined(t)||u.a.undefined(n);if(X(t)!==X(n)||r||a)return!1;if(u.a.domElement(t))return t.isSameNode(n);if(u.a.number(t))return t===n;if(u.a.function(t))return t.toString()===n.toString();for(var s in t)if(Z(t,s)){if(void 0===t[s]||void 0===n[s])return!1;if(o=X(t[s]),-1!==["object","array"].indexOf(o)&&e(t[s],n[s]))continue;if("function"===o&&e(t[s],n[s]))continue;if(t[s]!==n[s])return!1}for(var l in n)if(Z(n,l)&&void 0===t[l])return!1;return!0}(y,m),R=u.a.number(h)&&k("stepIndex");if(I&&(Oe(m,f)?g(m):console.warn("Steps are not valid",m)),k("run")&&(d?E(h):O()),R){var M=v<h?A.NEXT:A.PREV;o===A.STOP&&(M=A.START),-1===[V.FINISHED,V.SKIPPED].indexOf(c)&&S({action:o===A.CLOSE?A.CLOSE:M,index:h,lifecycle:G.INIT})}var L=T({},this.state,{index:a,step:j});if(N("action",[A.NEXT,A.PREV,A.SKIP,A.CLOSE])&&N("status",V.PAUSED)){var _=we(m[t.index],this.props);this.callback(T({},L,{index:t.index,lifecycle:G.COMPLETE,step:_,type:z}))}if(N("status",[V.FINISHED,V.SKIPPED])){var F=we(m[t.index],this.props);r||this.callback(T({},L,{index:t.index,lifecycle:G.COMPLETE,step:F,type:z})),this.callback(T({},L,{type:H,step:F,index:t.index})),w()}else C("status",[V.IDLE,V.READY],V.RUNNING)?this.callback(T({},L,{type:D})):(P("status")||N("action",A.RESET))&&this.callback(T({},L,{type:U}));j&&(this.scrollToStep(t),"center"===j.placement&&c===V.RUNNING&&s===G.INIT&&this.store.update({lifecycle:G.READY}))}}},{key:"componentWillUnmount",value:function(){this.props.disableCloseOnEsc||document.body.removeEventListener("keydown",this.handleKeyboard)}},{key:"scrollToStep",value:function(e){var t=this.state,n=t.index,o=t.lifecycle,r=t.status,i=this.props,a=i.debug,s=i.disableScrolling,l=i.disableScrollParentFix,c=i.scrollToFirstStep,u=i.scrollOffset,p=i.scrollDuration,f=we(i.steps[n],this.props);if(f){var d=ce(f.target),h=this.shouldScroll(s,n,c,o,f,d,e);if(r===V.RUNNING&&h){var m=fe(d,l),v=pe(d,l),b=Math.floor(he(d,u,l))||0;if(oe({title:"scrollToStep",data:[{key:"index",value:n},{key:"lifecycle",value:o},{key:"status",value:r}],debug:a}),o===G.BEACON&&this.beaconPopper){var g=this.beaconPopper,w=g.placement,E=g.popper;-1!==["bottom"].indexOf(w)||m||(b=Math.floor(E.top-u))}else if(o===G.TOOLTIP&&this.tooltipPopper){var O=this.tooltipPopper,S=O.flipped,k=O.placement,x=O.popper;-1===["top","right","left"].indexOf(k)||S||m?b-=f.spotlightPadding:b=Math.floor(x.top-u)}b=b>=0?b:0,r===V.RUNNING&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:se(),n=arguments.length>2?arguments[2]:void 0;new Promise((function(o,r){var i=t.scrollTop,a=e>i?e-i:i-e;y.a.top(t,e,{duration:a<100?50:n},(function(e){return e&&"Element already at target scroll position"!==e.message?r(e):o()}))}))}(b,v,p)}}}},{key:"render",value:function(){if(!Y)return null;var e,t=this.state,n=t.index,o=t.status,r=this.props,i=r.continuous,s=r.debug,l=r.disableScrolling,c=r.scrollToFirstStep,u=we(r.steps[n],this.props);return o===V.RUNNING&&u&&(e=a.a.createElement(Ie,C({},this.state,{callback:this.callback,continuous:i,debug:s,setPopper:this.setPopper,helpers:this.helpers,shouldScroll:!l&&(0!==n||c),step:u,update:this.store.update}))),a.a.createElement("div",{className:"react-joyride"},e)}}]),t}(a.a.Component);P(Re,"defaultProps",{continuous:!1,debug:!1,disableCloseOnEsc:!1,disableOverlay:!1,disableOverlayClose:!1,disableScrolling:!1,disableScrollParentFix:!1,getHelpers:function(){},hideBackButton:!1,run:!0,scrollOffset:20,scrollDuration:300,scrollToFirstStep:!1,showSkipButton:!1,showProgress:!1,spotlightClicks:!1,spotlightPadding:10,steps:[]});var Me=Re;function Le(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],o=!0,r=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(o=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);o=!0);}catch(e){r=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(r)throw i}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var _e=lodash.debounce,Ae=wp.i18n.__,De=wp.components,Fe=De.Button,We=De.Modal,Be=wp.element,ze=Be.Fragment,He=Be.useEffect,Ue=Be.useRef,qe=Be.useState,Ge=function(){var e=Le(qe(!0),2),t=e[0],n=e[1],o=Le(qe(!1),2),r=o[0],i=o[1],a=Ue(null);He((function(){wp.api.loadPromise.then((function(){a.current=new wp.api.models.Settings}))}),[]);var s=[{target:".otter-step-one",content:Ae("Howdy, I'm Ollie The Otter! I will help you configure your Otter experience. So let's start the magic!"),disableBeacon:!0},{target:".otter-step-two",content:Ae("Jazz up your blocks with some sparkly custom CSS or Blocks Animation right inside the block. Here you can enable modules to enhance your experience with Block Editor.")},{target:".otter-step-three",content:Ae("Section Block is the signature feature of Otter. It allows you to build beautiful layouts right inside the Block Editor. You can set Section Block as the default block for your new Pages.")},{target:".otter-step-four",content:Ae("We love maps! Here you can set your Google Maps API key for Otter's Map Block.")},{target:".otter-step-five",content:Ae("If you don't have an API key, you can register one by clicking here.")},{target:".otter-step-six",content:Ae("Help us in making our plugin better with anonymous data tracking.")},{target:".otter-step-seven",content:Ae("If you ever need any help, we are a team of real Otter-lovers who would love to help you out.")},{target:".otter-step-eight",content:Ae("And if you love what we do, please leave us a review at WordPress.org. Your review keeps us motivated to make awesome things.")},{target:".otter-step-one",content:Ae("That's it for now! Hope you enjoy Otter and love it as much as we do.")}],l=_e((function(e){if(t&&n(!1),"ready"===e||"finished"===e||"skipped"===e){var o=new wp.api.models.Settings({themeisle_blocks_settings_tour:!1}).save();o.success((function(e,t){a.current.fetch()})),o.error((function(e,t){console.warning(e.responseJSON.message)}))}}),1e3);return wp.element.createElement(ze,null,t&&wp.element.createElement(We,{title:Ae("Welcome to Otter!"),isDismissable:!1,isDismissible:!1,className:"otter-onboarding-modal"},wp.element.createElement("div",{className:"otter-onboarding-modal-content"},Ae("Would you like to start the onboarding wizard which will help you personalize the plugin for yourself?")),wp.element.createElement("div",{className:"otter-onboarding-modal-action"},wp.element.createElement(Fe,{isPrimary:!0,isLarge:!0,onClick:function(){n(!1),i(!0)}},Ae("Start")),wp.element.createElement(Fe,{isDefault:!0,isLarge:!0,onClick:function(){return l("skipped")}},Ae("Skip")))),wp.element.createElement(Me,{continuous:!0,run:r,steps:s,scrollToFirstStep:!0,showSkipButton:!0,locale:{back:Ae("Back"),close:Ae("Close"),last:Ae("Finish"),next:Ae("Next"),skip:Ae("Skip")},callback:function(e){return l(e.status)}}))},Ve=n(15),Ye=n.n(Ve),$e=wp.i18n.__,Ke=function(){return wp.element.createElement("header",{className:"otter-header"},wp.element.createElement("div",{className:Ye()("otter-container","otter-step-one")},wp.element.createElement("div",{className:"otter-logo"},wp.element.createElement("img",{src:otterObj.assetsPath+"images/logo.png",title:$e("Gutenberg Blocks and Template Library by Otter")}),wp.element.createElement("abbr",{title:"Version: ".concat(otterObj.version),className:"version"},otterObj.version))))};n(23);function Xe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],o=!0,r=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(o=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);o=!0);}catch(e){r=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(r)throw i}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var Je=wp.i18n.__,Ze=wp.components,Qe=Ze.BaseControl,et=Ze.Button,tt=Ze.ExternalLink,nt=Ze.PanelBody,ot=Ze.PanelRow,rt=Ze.Placeholder,it=Ze.Spinner,at=Ze.ToggleControl,st=wp.element,lt=st.Fragment,ct=st.useEffect,ut=st.useRef,pt=st.useState,ft=function(){ct((function(){wp.api.loadPromise.then((function(){x.current=new wp.api.models.Settings,!1===t&&x.current.fetch().then((function(e){f(Boolean(e.themeisle_blocks_settings_css_module)),m(Boolean(e.themeisle_blocks_settings_blocks_animation)),b(Boolean(e.themeisle_blocks_settings_default_block)),E(e.themeisle_google_map_block_api_key),k(e.otter_blocks_logger_flag),n(!0)}))}))}),[]);var e=Xe(pt(!1),2),t=e[0],n=e[1],r=Xe(pt(!1),2),i=r[0],a=r[1],s=Xe(pt(null),2),l=s[0],c=s[1],u=Xe(pt(!1),2),p=u[0],f=u[1],d=Xe(pt(!1),2),h=d[0],m=d[1],y=Xe(pt(!0),2),v=y[0],b=y[1],g=Xe(pt(""),2),w=g[0],E=g[1],O=Xe(pt("no"),2),S=O[0],k=O[1],x=ut(null),P=(ut(null),function(e,t,n){a(!0),N(Je("Updating settings…"),"info");var r=new wp.api.models.Settings(function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},e,n)).save();r.success((function(n,r){o.store.removeNotification(l),"success"===r&&(C(t,n[e]),setTimeout((function(){N(Je("Settings saved."),"success"),a(!1)}),800)),"error"===r&&setTimeout((function(){N(Je("An unknown error occurred."),"danger"),a(!1)}),800),x.current.fetch()})),r.error((function(e,t){o.store.removeNotification(l),setTimeout((function(){N(e.responseJSON.message?e.responseJSON.message:Je("An unknown error occurred."),"danger"),a(!1)}),800)}))}),C=function(e,t){switch(e){case"cssModule":f(t);break;case"blocksAnimation":m(t);break;case"isDefaultSection":b(t);break;case"googleMapsAPI":E(t);break;case"isLoggingData":k(t)}},N=function(e,t){var n=o.store.addNotification({message:e,type:t,insert:"top",container:"bottom-left",isMobile:!0,dismiss:{duration:2e3,showIcon:!0},dismissable:{click:!0,touch:!0}});c(n)};return t?wp.element.createElement(lt,null,wp.element.createElement("div",{className:"otter-main"},wp.element.createElement("div",{className:"otter-step-two"},wp.element.createElement(nt,{title:Je("Modules")},wp.element.createElement(ot,null,wp.element.createElement(at,{label:Je("Enable Custom CSS Module"),help:"Custom CSS module allows to add custom CSS to each block in Block Editor.",checked:p,onChange:function(){return P("themeisle_blocks_settings_css_module","cssModule",!p)}})),wp.element.createElement(ot,null,wp.element.createElement(at,{label:Je("Enable Blocks Animation Module"),help:"Blocks Animation module allows to add CSS animations to each block in Block Editor.",checked:h,onChange:function(){return P("themeisle_blocks_settings_blocks_animation","blocksAnimation",!h)}})))),wp.element.createElement("div",{className:"otter-step-three"},wp.element.createElement(nt,{title:Je("Section")},wp.element.createElement(ot,null,wp.element.createElement(at,{label:Je("Make Section your default block for Pages"),help:"Everytime you create a new page, Section block will be appended there by default.",checked:v,onChange:function(){return P("themeisle_blocks_settings_default_block","isDefaultSection",!v)}})))),wp.element.createElement("div",{className:"otter-step-four"},wp.element.createElement(nt,{title:Je("Maps")},wp.element.createElement(ot,null,wp.element.createElement(Qe,{label:Je("Google Maps API"),help:"In order to use Google Maps block, you need to use Google Maps and Places API.",id:"otter-options-google-map-api",className:"otter-text-field"},wp.element.createElement("input",{type:"text",id:"otter-options-google-map-api",value:w,placeholder:Je("Google Maps API Key"),disabled:i,onChange:function(e){return E(e.target.value)}}),wp.element.createElement("div",{className:"otter-text-field-button-group"},wp.element.createElement(et,{isPrimary:!0,isLarge:!0,disabled:i,onClick:function(){return P("themeisle_google_map_block_api_key","googleMapsAPI",w)}},Je("Save")),wp.element.createElement(tt,{href:"https://developers.google.com/maps/documentation/javascript/get-api-key",className:"otter-step-five"},Je("Get API Key"))))))),wp.element.createElement("div",{className:"otter-step-six"},wp.element.createElement(nt,{title:Je("Other")},wp.element.createElement(ot,null,wp.element.createElement(at,{label:Je("Anonymous Data Tracking."),help:"Become a contributor by opting in to our anonymous data tracking. We guarantee no sensitive data is collected.",checked:"yes"===S,onChange:function(){return P("otter_blocks_logger_flag","isLoggingData","yes"===S?"no":"yes")}})))),wp.element.createElement(nt,null,wp.element.createElement("div",{className:"otter-info"},wp.element.createElement("h2",null,Je("Got a question for us?")),wp.element.createElement("p",null,Je("We would love to help you out if you need any help with Otter.")),wp.element.createElement("div",{className:"otter-info-button-group"},wp.element.createElement(et,{isDefault:!0,isLarge:!0,target:"_blank",href:"https://wordpress.org/support/plugin/otter-blocks",className:"otter-step-seven"},Je("Ask a question")),wp.element.createElement(et,{isDefault:!0,isLarge:!0,target:"_blank",href:"https://wordpress.org/support/plugin/otter-blocks/reviews/#new-post",className:"otter-step-eight"},Je("Leave a review"))))))):wp.element.createElement(rt,null,wp.element.createElement(it,null))},dt=wp.i18n.__,ht=function(){return wp.element.createElement("footer",{className:"otter-footer"},wp.element.createElement("div",{className:"otter-container"},dt("No otters were harmed during the making of this plugin.")))},mt=wp.element,yt=mt.render,vt=mt.Fragment;yt(wp.element.createElement((function(){return wp.element.createElement(vt,null,Boolean(otterObj.showTour)&&wp.element.createElement(Ge,null),wp.element.createElement(r.a,null),wp.element.createElement(Ke,null),wp.element.createElement(ft,null),wp.element.createElement(ht,null))}),null),document.getElementById("otter"))}]);
|
docker-compose.yml
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
version: '3.7'
|
2 |
-
|
3 |
-
services:
|
4 |
-
mysql:
|
5 |
-
image: mysql:5.7
|
6 |
-
volumes:
|
7 |
-
- ~/otb/db_data:/var/lib/mysql
|
8 |
-
restart: always
|
9 |
-
environment:
|
10 |
-
MYSQL_ROOT_PASSWORD: wordpress
|
11 |
-
MYSQL_DATABASE: wordpress
|
12 |
-
MYSQL_USER: wordpress
|
13 |
-
MYSQL_PASSWORD: wordpress
|
14 |
-
wordpress:
|
15 |
-
depends_on:
|
16 |
-
- mysql
|
17 |
-
image: hardeepasrani/pirate-brewery
|
18 |
-
ports:
|
19 |
-
- 8889:80
|
20 |
-
networks:
|
21 |
-
- default
|
22 |
-
volumes:
|
23 |
-
- ~/wpcore:/var/www/html/
|
24 |
-
- .:/var/www/html/wp-content/plugins/otter-blocks/
|
25 |
-
restart: always
|
26 |
-
environment:
|
27 |
-
WORDPRESS_DB_NAME: wordpress
|
28 |
-
WORDPRESS_DB_USER: wordpress
|
29 |
-
WORDPRESS_DB_PASSWORD: wordpress
|
30 |
-
WORDPRESS_DB_ROOT_PASSWORD: wordpress
|
31 |
-
WORDPRESS_DEBUG: 'true'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
otter-blocks.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
* Plugin Name: Gutenberg Blocks and Template Library by Otter
|
8 |
* Plugin URI: https://themeisle.com/plugins/otter-blocks
|
9 |
* Description: Create beautiful and attracting posts, pages, and landing pages with Gutenberg Blocks and Template Library by Otter. Otter comes with dozens of Gutenberg blocks that are all you need to build beautiful pages.
|
10 |
-
* Version: 1.
|
11 |
* Author: ThemeIsle
|
12 |
* Author URI: https://themeisle.com
|
13 |
* License: GPL-2.0+
|
@@ -26,7 +26,7 @@ if ( ! defined( 'WPINC' ) ) {
|
|
26 |
define( 'OTTER_BLOCKS_BASEFILE', __FILE__ );
|
27 |
define( 'OTTER_BLOCKS_URL', plugins_url( '/', __FILE__ ) );
|
28 |
define( 'OTTER_BLOCKS_PATH', dirname( __FILE__ ) );
|
29 |
-
define( 'OTTER_BLOCKS_VERSION', '1.
|
30 |
define( 'OTTER_BLOCKS_DEV', false );
|
31 |
|
32 |
$vendor_file = OTTER_BLOCKS_PATH . '/vendor/autoload.php';
|
7 |
* Plugin Name: Gutenberg Blocks and Template Library by Otter
|
8 |
* Plugin URI: https://themeisle.com/plugins/otter-blocks
|
9 |
* Description: Create beautiful and attracting posts, pages, and landing pages with Gutenberg Blocks and Template Library by Otter. Otter comes with dozens of Gutenberg blocks that are all you need to build beautiful pages.
|
10 |
+
* Version: 1.5.0
|
11 |
* Author: ThemeIsle
|
12 |
* Author URI: https://themeisle.com
|
13 |
* License: GPL-2.0+
|
26 |
define( 'OTTER_BLOCKS_BASEFILE', __FILE__ );
|
27 |
define( 'OTTER_BLOCKS_URL', plugins_url( '/', __FILE__ ) );
|
28 |
define( 'OTTER_BLOCKS_PATH', dirname( __FILE__ ) );
|
29 |
+
define( 'OTTER_BLOCKS_VERSION', '1.5.0' );
|
30 |
define( 'OTTER_BLOCKS_DEV', false );
|
31 |
|
32 |
$vendor_file = OTTER_BLOCKS_PATH . '/vendor/autoload.php';
|
readme.md
CHANGED
@@ -46,6 +46,14 @@ It has:
|
|
46 |
|
47 |
## Changelog ##
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
##### [Version 1.4.1](https://github.com/Codeinwp/otter-blocks/compare/v1.4.0...v1.4.1) (2020-02-29)
|
50 |
|
51 |
- Fix issue with Button Group & Global Defaults
|
46 |
|
47 |
## Changelog ##
|
48 |
|
49 |
+
#### [Version 1.5.0](https://github.com/Codeinwp/otter-blocks/compare/v1.4.1...v1.5.0) (2020-03-20)
|
50 |
+
|
51 |
+
- Adds compatibility with WordPress 5.4
|
52 |
+
- Adds compatibility with WordPress 5.4
|
53 |
+
|
54 |
+
|
55 |
+
|
56 |
+
|
57 |
##### [Version 1.4.1](https://github.com/Codeinwp/otter-blocks/compare/v1.4.0...v1.4.1) (2020-02-29)
|
58 |
|
59 |
- Fix issue with Button Group & Global Defaults
|
readme.txt
CHANGED
@@ -46,6 +46,14 @@ It has:
|
|
46 |
|
47 |
== Changelog ==
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
##### [Version 1.4.1](https://github.com/Codeinwp/otter-blocks/compare/v1.4.0...v1.4.1) (2020-02-29)
|
50 |
|
51 |
- Fix issue with Button Group & Global Defaults
|
46 |
|
47 |
== Changelog ==
|
48 |
|
49 |
+
#### [Version 1.5.0](https://github.com/Codeinwp/otter-blocks/compare/v1.4.1...v1.5.0) (2020-03-20)
|
50 |
+
|
51 |
+
- Adds compatibility with WordPress 5.4
|
52 |
+
- Adds compatibility with WordPress 5.4
|
53 |
+
|
54 |
+
|
55 |
+
|
56 |
+
|
57 |
##### [Version 1.4.1](https://github.com/Codeinwp/otter-blocks/compare/v1.4.0...v1.4.1) (2020-02-29)
|
58 |
|
59 |
- Fix issue with Button Group & Global Defaults
|
src/Components/Footer.js
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* WordPress dependencies.
|
3 |
-
*/
|
4 |
-
const { __ } = wp.i18n;
|
5 |
-
|
6 |
-
const { Component } = wp.element;
|
7 |
-
|
8 |
-
class Footer extends Component {
|
9 |
-
constructor() {
|
10 |
-
super( ...arguments );
|
11 |
-
}
|
12 |
-
|
13 |
-
render() {
|
14 |
-
return (
|
15 |
-
<footer className="otter-footer">
|
16 |
-
<div className="otter-container">
|
17 |
-
{ __( 'No otters were harmed during the making of this plugin.' ) }
|
18 |
-
</div>
|
19 |
-
</footer>
|
20 |
-
);
|
21 |
-
}
|
22 |
-
}
|
23 |
-
|
24 |
-
export default Footer;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/Components/Header.js
DELETED
@@ -1,46 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies.
|
3 |
-
*/
|
4 |
-
import classnames from 'classnames';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* WordPress dependencies.
|
8 |
-
*/
|
9 |
-
const { __ } = wp.i18n;
|
10 |
-
|
11 |
-
const { Component } = wp.element;
|
12 |
-
|
13 |
-
class Headers extends Component {
|
14 |
-
constructor() {
|
15 |
-
super( ...arguments );
|
16 |
-
}
|
17 |
-
|
18 |
-
render() {
|
19 |
-
return (
|
20 |
-
<header className="otter-header">
|
21 |
-
<div
|
22 |
-
className={ classnames(
|
23 |
-
'otter-container',
|
24 |
-
'otter-step-one'
|
25 |
-
) }
|
26 |
-
>
|
27 |
-
<div className="otter-logo">
|
28 |
-
<img
|
29 |
-
src={ otterObj.assetsPath + 'images/logo.png' }
|
30 |
-
title={ __( 'Gutenberg Blocks and Template Library by Otter' ) }
|
31 |
-
/>
|
32 |
-
|
33 |
-
<abbr
|
34 |
-
title={ `Version: ${ otterObj.version }` }
|
35 |
-
className="version"
|
36 |
-
>
|
37 |
-
{ otterObj.version }
|
38 |
-
</abbr>
|
39 |
-
</div>
|
40 |
-
</div>
|
41 |
-
</header>
|
42 |
-
);
|
43 |
-
}
|
44 |
-
}
|
45 |
-
|
46 |
-
export default Headers;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/Components/Main.js
DELETED
@@ -1,260 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies.
|
3 |
-
*/
|
4 |
-
import ReactNotification from 'react-notifications-component';
|
5 |
-
|
6 |
-
import 'react-notifications-component/dist/theme.css';
|
7 |
-
|
8 |
-
/**
|
9 |
-
* WordPress dependencies.
|
10 |
-
*/
|
11 |
-
const { __ } = wp.i18n;
|
12 |
-
|
13 |
-
const {
|
14 |
-
BaseControl,
|
15 |
-
Button,
|
16 |
-
ExternalLink,
|
17 |
-
PanelBody,
|
18 |
-
PanelRow,
|
19 |
-
Placeholder,
|
20 |
-
Spinner,
|
21 |
-
ToggleControl
|
22 |
-
} = wp.components;
|
23 |
-
|
24 |
-
const {
|
25 |
-
Component,
|
26 |
-
Fragment
|
27 |
-
} = wp.element;
|
28 |
-
|
29 |
-
class Main extends Component {
|
30 |
-
constructor() {
|
31 |
-
super( ...arguments );
|
32 |
-
|
33 |
-
this.changeOptions = this.changeOptions.bind( this );
|
34 |
-
this.addNotification = this.addNotification.bind( this );
|
35 |
-
this.notificationDOMRef = React.createRef();
|
36 |
-
|
37 |
-
this.state = {
|
38 |
-
isAPILoaded: false,
|
39 |
-
isAPISaving: false,
|
40 |
-
notification: null,
|
41 |
-
cssModule: false,
|
42 |
-
blocksAnimation: false,
|
43 |
-
isDefaultSection: true,
|
44 |
-
googleMapsAPI: ''
|
45 |
-
};
|
46 |
-
}
|
47 |
-
|
48 |
-
async componentDidMount() {
|
49 |
-
wp.api.loadPromise.then( () => {
|
50 |
-
this.settings = new wp.api.models.Settings();
|
51 |
-
|
52 |
-
if ( false === this.state.isAPILoaded ) {
|
53 |
-
this.settings.fetch().then( response => {
|
54 |
-
this.setState({
|
55 |
-
cssModule: Boolean( response.themeisle_blocks_settings_css_module ),
|
56 |
-
blocksAnimation: Boolean( response.themeisle_blocks_settings_blocks_animation ),
|
57 |
-
isDefaultSection: Boolean( response.themeisle_blocks_settings_default_block ),
|
58 |
-
googleMapsAPI: response.themeisle_google_map_block_api_key,
|
59 |
-
isAPILoaded: true
|
60 |
-
});
|
61 |
-
});
|
62 |
-
}
|
63 |
-
});
|
64 |
-
}
|
65 |
-
|
66 |
-
changeOptions( option, state, value ) {
|
67 |
-
this.setState({ isAPISaving: true });
|
68 |
-
|
69 |
-
this.addNotification( __( 'Updating settings…' ), 'info' );
|
70 |
-
|
71 |
-
const model = new wp.api.models.Settings({
|
72 |
-
// eslint-disable-next-line camelcase
|
73 |
-
[option]: value
|
74 |
-
});
|
75 |
-
|
76 |
-
const save = model.save();
|
77 |
-
|
78 |
-
save.success( ( response, status ) => {
|
79 |
-
this.notificationDOMRef.current.removeNotification( this.state.notification );
|
80 |
-
|
81 |
-
if ( 'success' === status ) {
|
82 |
-
this.setState({
|
83 |
-
[state]: response[option]
|
84 |
-
});
|
85 |
-
|
86 |
-
setTimeout( () => {
|
87 |
-
this.addNotification( __( 'Settings saved.' ), 'success' );
|
88 |
-
this.setState({ isAPISaving: false });
|
89 |
-
}, 800 );
|
90 |
-
}
|
91 |
-
|
92 |
-
if ( 'error' === status ) {
|
93 |
-
setTimeout( () => {
|
94 |
-
this.addNotification( __( 'An unknown error occurred.' ), 'danger' );
|
95 |
-
this.setState({ isAPISaving: false });
|
96 |
-
}, 800 );
|
97 |
-
}
|
98 |
-
|
99 |
-
this.settings.fetch();
|
100 |
-
});
|
101 |
-
|
102 |
-
save.error( ( response, status ) => {
|
103 |
-
this.notificationDOMRef.current.removeNotification( this.state.notification );
|
104 |
-
|
105 |
-
setTimeout( () => {
|
106 |
-
this.addNotification( response.responseJSON.message ? response.responseJSON.message : __( 'An unknown error occurred.' ), 'danger' );
|
107 |
-
this.setState({ isAPISaving: false });
|
108 |
-
}, 800 );
|
109 |
-
});
|
110 |
-
}
|
111 |
-
|
112 |
-
addNotification( message, type ) {
|
113 |
-
const notification = this.notificationDOMRef.current.addNotification({
|
114 |
-
message,
|
115 |
-
type,
|
116 |
-
insert: 'top',
|
117 |
-
container: 'top-right',
|
118 |
-
slidingEnter: {
|
119 |
-
duration: 0,
|
120 |
-
delay: 0
|
121 |
-
},
|
122 |
-
dismiss: { duration: 2000 },
|
123 |
-
dismissable: { click: true }
|
124 |
-
});
|
125 |
-
|
126 |
-
this.setState({ notification });
|
127 |
-
}
|
128 |
-
|
129 |
-
render() {
|
130 |
-
if ( ! this.state.isAPILoaded ) {
|
131 |
-
return (
|
132 |
-
<Placeholder>
|
133 |
-
<Spinner />
|
134 |
-
</Placeholder>
|
135 |
-
);
|
136 |
-
}
|
137 |
-
|
138 |
-
return (
|
139 |
-
<Fragment>
|
140 |
-
<ReactNotification ref={ this.notificationDOMRef } />
|
141 |
-
|
142 |
-
<div className="otter-main">
|
143 |
-
|
144 |
-
<div className="otter-step-two">
|
145 |
-
<PanelBody
|
146 |
-
title={ __( 'Modules' ) }
|
147 |
-
>
|
148 |
-
<PanelRow>
|
149 |
-
<ToggleControl
|
150 |
-
label={ __( 'Enable Custom CSS Module' ) }
|
151 |
-
help={ 'Custom CSS module allows to add custom CSS to each block in Block Editor.' }
|
152 |
-
checked={ this.state.cssModule }
|
153 |
-
onChange={ () => this.changeOptions( 'themeisle_blocks_settings_css_module', 'cssModule', ! this.state.cssModule ) }
|
154 |
-
/>
|
155 |
-
</PanelRow>
|
156 |
-
|
157 |
-
<PanelRow>
|
158 |
-
<ToggleControl
|
159 |
-
label={ __( 'Enable Blocks Animation Module' ) }
|
160 |
-
help={ 'Blocks Animation module allows to add CSS animations to each block in Block Editor.' }
|
161 |
-
checked={ this.state.blocksAnimation }
|
162 |
-
onChange={ () => this.changeOptions( 'themeisle_blocks_settings_blocks_animation', 'blocksAnimation', ! this.state.blocksAnimation ) }
|
163 |
-
/>
|
164 |
-
</PanelRow>
|
165 |
-
</PanelBody>
|
166 |
-
</div>
|
167 |
-
|
168 |
-
<div className="otter-step-three">
|
169 |
-
<PanelBody
|
170 |
-
title={ __( 'Section' ) }
|
171 |
-
>
|
172 |
-
<PanelRow>
|
173 |
-
<ToggleControl
|
174 |
-
label={ __( 'Make Section your default block for Pages' ) }
|
175 |
-
help={ 'Everytime you create a new page, Section block will be appended there by default.' }
|
176 |
-
checked={ this.state.isDefaultSection }
|
177 |
-
onChange={ () => this.changeOptions( 'themeisle_blocks_settings_default_block', 'isDefaultSection', ! this.state.isDefaultSection ) }
|
178 |
-
/>
|
179 |
-
</PanelRow>
|
180 |
-
</PanelBody>
|
181 |
-
</div>
|
182 |
-
|
183 |
-
<div className="otter-step-four">
|
184 |
-
<PanelBody
|
185 |
-
title={ __( 'Maps' ) }
|
186 |
-
>
|
187 |
-
<PanelRow>
|
188 |
-
<BaseControl
|
189 |
-
label={ __( 'Google Maps API' ) }
|
190 |
-
help={ 'In order to use Google Maps block, you need to use Google Maps and Places API.' }
|
191 |
-
id="otter-options-google-map-api"
|
192 |
-
className="otter-text-field"
|
193 |
-
>
|
194 |
-
<input
|
195 |
-
type="text"
|
196 |
-
id="otter-options-google-map-api"
|
197 |
-
value={ this.state.googleMapsAPI }
|
198 |
-
placeholder={ __( 'Google Maps API Key' ) }
|
199 |
-
disabled={ this.state.isAPISaving }
|
200 |
-
onChange={ e => this.setState({ googleMapsAPI: e.target.value }) }
|
201 |
-
/>
|
202 |
-
|
203 |
-
<div className="otter-text-field-button-group">
|
204 |
-
<Button
|
205 |
-
isPrimary
|
206 |
-
isLarge
|
207 |
-
disabled={ this.state.isAPISaving }
|
208 |
-
onClick={ () => this.changeOptions( 'themeisle_google_map_block_api_key', 'googleMapsAPI', this.state.googleMapsAPI ) }
|
209 |
-
>
|
210 |
-
{ __( 'Save' ) }
|
211 |
-
</Button>
|
212 |
-
|
213 |
-
<ExternalLink
|
214 |
-
href="https://developers.google.com/maps/documentation/javascript/get-api-key"
|
215 |
-
className="otter-step-five"
|
216 |
-
>
|
217 |
-
{ __( 'Get API Key' ) }
|
218 |
-
</ExternalLink>
|
219 |
-
</div>
|
220 |
-
</BaseControl>
|
221 |
-
</PanelRow>
|
222 |
-
</PanelBody>
|
223 |
-
</div>
|
224 |
-
|
225 |
-
<PanelBody>
|
226 |
-
<div className="otter-info">
|
227 |
-
<h2>{ __( 'Got a question for us?' ) }</h2>
|
228 |
-
|
229 |
-
<p>{ __( 'We would love to help you out if you need any help with Otter.' ) }</p>
|
230 |
-
|
231 |
-
<div className="otter-info-button-group">
|
232 |
-
<Button
|
233 |
-
isDefault
|
234 |
-
isLarge
|
235 |
-
target="_blank"
|
236 |
-
href="https://wordpress.org/support/plugin/otter-blocks"
|
237 |
-
className="otter-step-six"
|
238 |
-
>
|
239 |
-
{ __( 'Ask a question' ) }
|
240 |
-
</Button>
|
241 |
-
|
242 |
-
<Button
|
243 |
-
isDefault
|
244 |
-
isLarge
|
245 |
-
target="_blank"
|
246 |
-
href="https://wordpress.org/support/plugin/otter-blocks/reviews/#new-post"
|
247 |
-
className="otter-step-seven"
|
248 |
-
>
|
249 |
-
{ __( 'Leave a review' ) }
|
250 |
-
</Button>
|
251 |
-
</div>
|
252 |
-
</div>
|
253 |
-
</PanelBody>
|
254 |
-
</div>
|
255 |
-
</Fragment>
|
256 |
-
);
|
257 |
-
}
|
258 |
-
}
|
259 |
-
|
260 |
-
export default Main;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/Components/Onboarding.js
DELETED
@@ -1,154 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies.
|
3 |
-
*/
|
4 |
-
import Joyride from 'react-joyride';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* WordPress dependencies.
|
8 |
-
*/
|
9 |
-
const { __ } = wp.i18n;
|
10 |
-
|
11 |
-
const {
|
12 |
-
Button,
|
13 |
-
Modal
|
14 |
-
} = wp.components;
|
15 |
-
|
16 |
-
const {
|
17 |
-
Component,
|
18 |
-
Fragment
|
19 |
-
} = wp.element;
|
20 |
-
|
21 |
-
class Onboarding extends Component {
|
22 |
-
constructor() {
|
23 |
-
super( ...arguments );
|
24 |
-
this.skipTour = this.skipTour.bind( this );
|
25 |
-
|
26 |
-
this.state = {
|
27 |
-
isOpen: true,
|
28 |
-
runTour: false,
|
29 |
-
steps: [
|
30 |
-
{
|
31 |
-
target: '.otter-step-one',
|
32 |
-
content: __( 'Howdy, I\'m Ollie The Otter! I will help you configure your Otter experience. So let\'s start the magic!' ),
|
33 |
-
disableBeacon: true
|
34 |
-
},
|
35 |
-
{
|
36 |
-
target: '.otter-step-two',
|
37 |
-
content: __( 'Jazz up your blocks with some sparkly custom CSS or Blocks Animation right inside the block. Here you can enable modules to enhance your experience with Block Editor.' )
|
38 |
-
},
|
39 |
-
{
|
40 |
-
target: '.otter-step-three',
|
41 |
-
content: __( 'Section Block is the signature feature of Otter. It allows you to build beautiful layouts right inside the Block Editor. You can set Section Block as the default block for your new Pages.' )
|
42 |
-
},
|
43 |
-
{
|
44 |
-
target: '.otter-step-four',
|
45 |
-
content: __( 'We love maps! Here you can set your Google Maps API key for Otter\'s Map Block.' )
|
46 |
-
},
|
47 |
-
{
|
48 |
-
target: '.otter-step-five',
|
49 |
-
content: __( 'If you don\'t have an API key, you can register one by clicking here.' )
|
50 |
-
},
|
51 |
-
{
|
52 |
-
target: '.otter-step-six',
|
53 |
-
content: __( 'If you ever need any help, we are a team of real Otter-lovers who would love to help you out.' )
|
54 |
-
},
|
55 |
-
{
|
56 |
-
target: '.otter-step-seven',
|
57 |
-
content: __( 'And if you love what we do, please leave us a review at WordPress.org. Your review keeps us motivated to make awesome things.' )
|
58 |
-
},
|
59 |
-
{
|
60 |
-
target: '.otter-step-one',
|
61 |
-
content: __( 'That\'s it for now! Hope you enjoy Otter and love it as much as we do.' )
|
62 |
-
}
|
63 |
-
]
|
64 |
-
};
|
65 |
-
}
|
66 |
-
|
67 |
-
async componentDidMount() {
|
68 |
-
wp.api.loadPromise.then( () => {
|
69 |
-
this.settings = new wp.api.models.Settings();
|
70 |
-
});
|
71 |
-
}
|
72 |
-
|
73 |
-
skipTour( status ) {
|
74 |
-
if ( this.state.isOpen ) {
|
75 |
-
this.setState({ isOpen: false });
|
76 |
-
}
|
77 |
-
|
78 |
-
if ( 'finished' !== status && 'skipped' !== status ) {
|
79 |
-
return;
|
80 |
-
}
|
81 |
-
|
82 |
-
const model = new wp.api.models.Settings({
|
83 |
-
// eslint-disable-next-line camelcase
|
84 |
-
'themeisle_blocks_settings_tour': false
|
85 |
-
});
|
86 |
-
|
87 |
-
const save = model.save();
|
88 |
-
|
89 |
-
save.success( ( response, status ) => {
|
90 |
-
this.settings.fetch();
|
91 |
-
});
|
92 |
-
|
93 |
-
save.error( ( response, status ) => {
|
94 |
-
console.warning( response.responseJSON.message );
|
95 |
-
});
|
96 |
-
}
|
97 |
-
|
98 |
-
render() {
|
99 |
-
return (
|
100 |
-
<Fragment>
|
101 |
-
{ this.state.isOpen && (
|
102 |
-
<Modal
|
103 |
-
title={ __( 'Welcome to Otter!' ) }
|
104 |
-
isDismissable={ false }
|
105 |
-
className="otter-onboarding-modal"
|
106 |
-
>
|
107 |
-
<div className="otter-onboarding-modal-content">
|
108 |
-
{ __( 'Would you like to start the onboarding wizard which will help you personalize the plugin for yourself?' ) }
|
109 |
-
</div>
|
110 |
-
|
111 |
-
<div className="otter-onboarding-modal-action">
|
112 |
-
<Button
|
113 |
-
isPrimary
|
114 |
-
isLarge
|
115 |
-
onClick={ () => this.setState({
|
116 |
-
isOpen: false,
|
117 |
-
runTour: true
|
118 |
-
}) }
|
119 |
-
>
|
120 |
-
{ __( 'Start' ) }
|
121 |
-
</Button>
|
122 |
-
|
123 |
-
<Button
|
124 |
-
isDefault
|
125 |
-
isLarge
|
126 |
-
onClick={ () => this.skipTour( 'skipped' ) }
|
127 |
-
>
|
128 |
-
{ __( 'Skip' ) }
|
129 |
-
</Button>
|
130 |
-
</div>
|
131 |
-
</Modal>
|
132 |
-
) }
|
133 |
-
|
134 |
-
<Joyride
|
135 |
-
continuous={ true }
|
136 |
-
run={ this.state.runTour }
|
137 |
-
steps={ this.state.steps }
|
138 |
-
scrollToFirstStep
|
139 |
-
showSkipButton
|
140 |
-
locale={ {
|
141 |
-
back: __( 'Back' ),
|
142 |
-
close: __( 'Close' ),
|
143 |
-
last: __( 'Finish' ),
|
144 |
-
next: __( 'Next' ),
|
145 |
-
skip: __( 'Skip' )
|
146 |
-
} }
|
147 |
-
callback={ data => this.skipTour( data.status )}
|
148 |
-
/>
|
149 |
-
</Fragment>
|
150 |
-
);
|
151 |
-
}
|
152 |
-
}
|
153 |
-
|
154 |
-
export default Onboarding;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/index.js
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Internal dependencies.
|
3 |
-
*/
|
4 |
-
import './style.scss';
|
5 |
-
|
6 |
-
import Onboarding from './Components/Onboarding.js';
|
7 |
-
|
8 |
-
import Header from './Components/Header.js';
|
9 |
-
|
10 |
-
import Main from './Components/Main.js';
|
11 |
-
|
12 |
-
import Footer from './Components/Footer.js';
|
13 |
-
|
14 |
-
/**
|
15 |
-
* WordPress dependencies.
|
16 |
-
*/
|
17 |
-
const {
|
18 |
-
Component,
|
19 |
-
Fragment
|
20 |
-
} = wp.element;
|
21 |
-
|
22 |
-
class App extends Component {
|
23 |
-
constructor() {
|
24 |
-
super( ...arguments );
|
25 |
-
}
|
26 |
-
|
27 |
-
render() {
|
28 |
-
return (
|
29 |
-
<Fragment>
|
30 |
-
{ Boolean( otterObj.showTour ) && <Onboarding /> }
|
31 |
-
<Header />
|
32 |
-
<Main />
|
33 |
-
<Footer />
|
34 |
-
</Fragment>
|
35 |
-
);
|
36 |
-
}
|
37 |
-
}
|
38 |
-
|
39 |
-
ReactDOM.render(
|
40 |
-
<App />,
|
41 |
-
document.getElementById( 'otter' )
|
42 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/style.scss
DELETED
@@ -1,340 +0,0 @@
|
|
1 |
-
* {
|
2 |
-
box-sizing: inherit;
|
3 |
-
}
|
4 |
-
|
5 |
-
.settings_page_otter {
|
6 |
-
background: #f6f6f6;
|
7 |
-
font-size: 14px;
|
8 |
-
position: relative;
|
9 |
-
box-sizing: border-box;
|
10 |
-
font-family: Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;
|
11 |
-
}
|
12 |
-
|
13 |
-
#wpcontent {
|
14 |
-
padding-left: 0;
|
15 |
-
}
|
16 |
-
|
17 |
-
.auto-fold {
|
18 |
-
#wpcontent {
|
19 |
-
padding-left: 0;
|
20 |
-
}
|
21 |
-
}
|
22 |
-
|
23 |
-
#otter {
|
24 |
-
.otter-header {
|
25 |
-
padding: 20px 10px;
|
26 |
-
background-color: #ffffff;
|
27 |
-
box-shadow: 0 1px 0 rgba(213,213,213,0.5),0 1px 2px #eee;
|
28 |
-
|
29 |
-
&.onboarding {
|
30 |
-
|
31 |
-
.otter-container {
|
32 |
-
.otter-logo {
|
33 |
-
justify-content: center;
|
34 |
-
}
|
35 |
-
}
|
36 |
-
}
|
37 |
-
|
38 |
-
.otter-container {
|
39 |
-
margin: 0 auto;
|
40 |
-
max-width: 100%;
|
41 |
-
max-width: 750px; // 930
|
42 |
-
|
43 |
-
.otter-logo {
|
44 |
-
display: flex;
|
45 |
-
align-items: center;
|
46 |
-
|
47 |
-
img {
|
48 |
-
max-width: 200px;
|
49 |
-
}
|
50 |
-
|
51 |
-
.version {
|
52 |
-
background-color: #e5e5e5;
|
53 |
-
border-radius: 3px;
|
54 |
-
font-size: 0.8em;
|
55 |
-
font-weight: 400;
|
56 |
-
margin-left: 10px;
|
57 |
-
padding: 2px 7px;
|
58 |
-
}
|
59 |
-
}
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
.otter-main {
|
64 |
-
margin-left: auto;
|
65 |
-
margin-right: auto;
|
66 |
-
max-width: 750px;
|
67 |
-
|
68 |
-
.components-panel__body {
|
69 |
-
margin: 25px 0;
|
70 |
-
background: #fff;
|
71 |
-
border: 1px solid #e2e4e7;
|
72 |
-
|
73 |
-
.components-panel__body-toggle {
|
74 |
-
border-bottom: 1px solid #d6e2ed;
|
75 |
-
}
|
76 |
-
|
77 |
-
.components-panel__row {
|
78 |
-
padding: 20px 10px 10px;
|
79 |
-
margin: 0;
|
80 |
-
|
81 |
-
.components-base-control {
|
82 |
-
|
83 |
-
.components-base-control__field {
|
84 |
-
display: flex;
|
85 |
-
align-items: center;
|
86 |
-
margin-bottom: 10px;
|
87 |
-
}
|
88 |
-
|
89 |
-
&.otter-text-field {
|
90 |
-
width: 100%;
|
91 |
-
|
92 |
-
.components-base-control__field {
|
93 |
-
display: block;
|
94 |
-
|
95 |
-
label {
|
96 |
-
font-weight: 600;
|
97 |
-
margin-bottom: 10px;
|
98 |
-
}
|
99 |
-
|
100 |
-
input {
|
101 |
-
border: 1px solid #b7c9d9;
|
102 |
-
border-radius: 3px;
|
103 |
-
font-size: 14px;
|
104 |
-
padding: 9px 15px;
|
105 |
-
width: 100%;
|
106 |
-
box-shadow: none;
|
107 |
-
height: 40px;
|
108 |
-
margin: 0 0 10px 0;
|
109 |
-
color: #444;
|
110 |
-
|
111 |
-
&:disabled {
|
112 |
-
background: #f6f6f6;
|
113 |
-
border-color: #eeeeee;
|
114 |
-
color: #bbbbbb;
|
115 |
-
}
|
116 |
-
|
117 |
-
&:focus {
|
118 |
-
border-color: #00a0d2;
|
119 |
-
box-shadow: 0 0 0 1px #00a0d2;
|
120 |
-
outline: 2px solid transparent;
|
121 |
-
outline-offset: -2px;
|
122 |
-
}
|
123 |
-
}
|
124 |
-
|
125 |
-
.otter-text-field-button-group {
|
126 |
-
display: flex;
|
127 |
-
align-items: center;
|
128 |
-
margin: 2px 0 15px;
|
129 |
-
|
130 |
-
.is-primary {
|
131 |
-
padding: 2px 20px;
|
132 |
-
height: auto;
|
133 |
-
font-size: 14px;
|
134 |
-
margin-right: 10px;
|
135 |
-
}
|
136 |
-
}
|
137 |
-
}
|
138 |
-
}
|
139 |
-
}
|
140 |
-
}
|
141 |
-
|
142 |
-
.otter-info {
|
143 |
-
padding: 0 10px 10px;
|
144 |
-
background-image: url( '../assets/images/logo-alt.png' );
|
145 |
-
background-size: 100px;
|
146 |
-
background-repeat: no-repeat;
|
147 |
-
background-position: bottom right;
|
148 |
-
|
149 |
-
h2 {
|
150 |
-
font-weight: 300;
|
151 |
-
margin-bottom: 10px;
|
152 |
-
}
|
153 |
-
|
154 |
-
p {
|
155 |
-
margin: 0 0 1.5em 0;
|
156 |
-
}
|
157 |
-
|
158 |
-
.otter-info-button-group {
|
159 |
-
display: flex;
|
160 |
-
|
161 |
-
.is-default {
|
162 |
-
padding: 2px 20px;
|
163 |
-
height: auto;
|
164 |
-
font-size: 14px;
|
165 |
-
|
166 |
-
&:first-child {
|
167 |
-
margin-right: 15px;
|
168 |
-
}
|
169 |
-
}
|
170 |
-
}
|
171 |
-
}
|
172 |
-
}
|
173 |
-
}
|
174 |
-
|
175 |
-
.otter-footer {
|
176 |
-
text-align: center;
|
177 |
-
color: #72777c;
|
178 |
-
font-style: italic;
|
179 |
-
border-top: 1px #e1e1e1 solid;
|
180 |
-
border-bottom: 1px #e1e1e1 solid;
|
181 |
-
padding: 20px;
|
182 |
-
margin: 2rem 0 1.5rem;
|
183 |
-
|
184 |
-
.otter-container {
|
185 |
-
margin: 0 auto;
|
186 |
-
}
|
187 |
-
}
|
188 |
-
|
189 |
-
.components-placeholder {
|
190 |
-
background: #f6f6f6;
|
191 |
-
margin-top: 25vh;
|
192 |
-
margin-bottom: 25vh;
|
193 |
-
}
|
194 |
-
}
|
195 |
-
|
196 |
-
.otter-onboarding-modal {
|
197 |
-
max-width: 350px;
|
198 |
-
|
199 |
-
.components-modal__header {
|
200 |
-
text-align: center;
|
201 |
-
|
202 |
-
h1 {
|
203 |
-
width: 100%;
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
.otter-onboarding-modal-content {
|
208 |
-
text-align: center;
|
209 |
-
margin: 10px 0 15px;
|
210 |
-
}
|
211 |
-
|
212 |
-
.otter-onboarding-modal-action {
|
213 |
-
text-align: center;
|
214 |
-
margin: 10px 0;
|
215 |
-
|
216 |
-
.components-button {
|
217 |
-
padding: 2px 20px;
|
218 |
-
height: auto;
|
219 |
-
font-size: 14px;
|
220 |
-
margin-right: 10px;
|
221 |
-
}
|
222 |
-
}
|
223 |
-
}
|
224 |
-
|
225 |
-
.components-modal__screen-overlay {
|
226 |
-
background-color: rgba(0, 0, 0, 0.5);
|
227 |
-
}
|
228 |
-
|
229 |
-
.react-joyride__tooltip {
|
230 |
-
font-size: 13px !important;
|
231 |
-
|
232 |
-
> div {
|
233 |
-
text-align: left !important;
|
234 |
-
}
|
235 |
-
|
236 |
-
div {
|
237 |
-
&:nth-of-type( 2 ) {
|
238 |
-
margin-top: 5px !important;
|
239 |
-
}
|
240 |
-
}
|
241 |
-
|
242 |
-
button {
|
243 |
-
text-decoration: underline;
|
244 |
-
}
|
245 |
-
}
|
246 |
-
|
247 |
-
.react-joyride__beacon {
|
248 |
-
span {
|
249 |
-
&:first-child {
|
250 |
-
background-color: #00739c !important;
|
251 |
-
}
|
252 |
-
|
253 |
-
&:last-child {
|
254 |
-
background-color: rgba(26, 129, 165, 0.4) !important;
|
255 |
-
border: 2px solid #00739c !important;
|
256 |
-
}
|
257 |
-
}
|
258 |
-
}
|
259 |
-
|
260 |
-
.react-joyride__tooltip {
|
261 |
-
button {
|
262 |
-
&[data-action="primary"] {
|
263 |
-
background: #0085ba !important;
|
264 |
-
border-color: #006a95 #00648c #00648c !important;
|
265 |
-
box-shadow: inset 0 -1px 0 #00648c !important;
|
266 |
-
color: #fff !important;
|
267 |
-
text-decoration: none !important;
|
268 |
-
text-shadow: 0 -1px 1px #005d82,1px 0 1px #005d82,0 1px 1px #005d82,-1px 0 1px #005d82 !important;
|
269 |
-
padding: 2px 20px !important;
|
270 |
-
height: auto !important;
|
271 |
-
line-height: 28px !important;
|
272 |
-
font-size: 14px !important;
|
273 |
-
}
|
274 |
-
|
275 |
-
&[data-action="back"] {
|
276 |
-
color: #23282d !important;
|
277 |
-
font-size: 14px !important;
|
278 |
-
}
|
279 |
-
}
|
280 |
-
}
|
281 |
-
|
282 |
-
.react-notification-root {
|
283 |
-
.notification-container-top-right {
|
284 |
-
top: 50px;
|
285 |
-
}
|
286 |
-
}
|
287 |
-
|
288 |
-
.notification-item-root {
|
289 |
-
|
290 |
-
.notification-content {
|
291 |
-
padding: 12px 15px;
|
292 |
-
}
|
293 |
-
.notification-close {
|
294 |
-
top: auto;
|
295 |
-
}
|
296 |
-
}
|
297 |
-
|
298 |
-
@media ( min-width: 782px ) {
|
299 |
-
|
300 |
-
.react-joyride__spotlight,
|
301 |
-
.__floater,
|
302 |
-
.__floater__open,
|
303 |
-
.react-joyride__beacon {
|
304 |
-
margin-top: -32px;
|
305 |
-
}
|
306 |
-
}
|
307 |
-
|
308 |
-
@media ( max-width: 782px ) {
|
309 |
-
#otter {
|
310 |
-
.otter-header {
|
311 |
-
|
312 |
-
.otter-container {
|
313 |
-
|
314 |
-
.otter-logo {
|
315 |
-
justify-content: center;
|
316 |
-
}
|
317 |
-
}
|
318 |
-
}
|
319 |
-
|
320 |
-
.otter-info {
|
321 |
-
background-image: none !important;
|
322 |
-
}
|
323 |
-
}
|
324 |
-
|
325 |
-
.react-joyride__spotlight,
|
326 |
-
.__floater,
|
327 |
-
.__floater__open,
|
328 |
-
.react-joyride__beacon {
|
329 |
-
margin-top: -44px;
|
330 |
-
}
|
331 |
-
}
|
332 |
-
|
333 |
-
@media ( max-width: 600px ) {
|
334 |
-
.react-joyride__spotlight,
|
335 |
-
.__floater,
|
336 |
-
.__floater__open,
|
337 |
-
.react-joyride__beacon {
|
338 |
-
margin-top: 0;
|
339 |
-
}
|
340 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInite4069214b60b0efef4a17b4633ac2190::getLoader();
|
vendor/codeinwp/gutenberg-animation/src/data.js
DELETED
@@ -1,400 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* WordPress dependencies.
|
3 |
-
*/
|
4 |
-
const { __ } = wp.i18n;
|
5 |
-
|
6 |
-
export const animationsList = [
|
7 |
-
{
|
8 |
-
label: __( 'None' ),
|
9 |
-
value: 'none'
|
10 |
-
},
|
11 |
-
{
|
12 |
-
label: __( 'Bounce' ),
|
13 |
-
value: 'bounce'
|
14 |
-
},
|
15 |
-
{
|
16 |
-
label: __( 'Flash' ),
|
17 |
-
value: 'flash'
|
18 |
-
},
|
19 |
-
{
|
20 |
-
label: __( 'Pulse' ),
|
21 |
-
value: 'pulse'
|
22 |
-
},
|
23 |
-
{
|
24 |
-
label: __( 'Rubber Band' ),
|
25 |
-
value: 'rubberBand'
|
26 |
-
},
|
27 |
-
{
|
28 |
-
label: __( 'Shake' ),
|
29 |
-
value: 'shake'
|
30 |
-
},
|
31 |
-
{
|
32 |
-
label: __( 'Head Shake' ),
|
33 |
-
value: 'headShake'
|
34 |
-
},
|
35 |
-
{
|
36 |
-
label: __( 'Swing' ),
|
37 |
-
value: 'swing'
|
38 |
-
},
|
39 |
-
{
|
40 |
-
label: __( 'TaDa' ),
|
41 |
-
value: 'tada'
|
42 |
-
},
|
43 |
-
{
|
44 |
-
label: __( 'Wobble' ),
|
45 |
-
value: 'wobble'
|
46 |
-
},
|
47 |
-
{
|
48 |
-
label: __( 'Jello' ),
|
49 |
-
value: 'jello'
|
50 |
-
},
|
51 |
-
{
|
52 |
-
label: __( 'Heart Beat' ),
|
53 |
-
value: 'heartBeat'
|
54 |
-
},
|
55 |
-
{
|
56 |
-
label: __( 'Hinge' ),
|
57 |
-
value: 'hinge'
|
58 |
-
},
|
59 |
-
{
|
60 |
-
label: __( 'Jack In The Box' ),
|
61 |
-
value: 'jackInTheBox'
|
62 |
-
},
|
63 |
-
{
|
64 |
-
label: __( 'Bounce In' ),
|
65 |
-
value: 'bounceIn'
|
66 |
-
},
|
67 |
-
{
|
68 |
-
label: __( 'Bounce In Down' ),
|
69 |
-
value: 'bounceInDown'
|
70 |
-
},
|
71 |
-
{
|
72 |
-
label: __( 'Bounce In Left' ),
|
73 |
-
value: 'bounceInLeft'
|
74 |
-
},
|
75 |
-
{
|
76 |
-
label: __( 'Bounce In Right' ),
|
77 |
-
value: 'bounceInRight'
|
78 |
-
},
|
79 |
-
{
|
80 |
-
label: __( 'Bounce In Up' ),
|
81 |
-
value: 'bounceInUp'
|
82 |
-
},
|
83 |
-
{
|
84 |
-
label: __( 'Bounce Out' ),
|
85 |
-
value: 'bounceOut'
|
86 |
-
},
|
87 |
-
{
|
88 |
-
label: __( 'Bounce Out Down' ),
|
89 |
-
value: 'bounceOutDown'
|
90 |
-
},
|
91 |
-
{
|
92 |
-
label: __( 'Bounce Out Left' ),
|
93 |
-
value: 'bounceOutLeft'
|
94 |
-
},
|
95 |
-
{
|
96 |
-
label: __( 'Bounce Out Right' ),
|
97 |
-
value: 'bounceOutRight'
|
98 |
-
},
|
99 |
-
{
|
100 |
-
label: __( 'Bounce Out Up' ),
|
101 |
-
value: 'bounceOutUp'
|
102 |
-
},
|
103 |
-
{
|
104 |
-
label: __( 'Fade In' ),
|
105 |
-
value: 'fadeIn'
|
106 |
-
},
|
107 |
-
{
|
108 |
-
label: __( 'Fade In Down' ),
|
109 |
-
value: 'fadeInDown'
|
110 |
-
},
|
111 |
-
{
|
112 |
-
label: __( 'Fade In Down Big' ),
|
113 |
-
value: 'fadeInDownBig'
|
114 |
-
},
|
115 |
-
{
|
116 |
-
label: __( 'Fade In Left' ),
|
117 |
-
value: 'fadeInLeft'
|
118 |
-
},
|
119 |
-
{
|
120 |
-
label: __( 'Fade In Left Big' ),
|
121 |
-
value: 'fadeInLeftBig'
|
122 |
-
},
|
123 |
-
{
|
124 |
-
label: __( 'Fade In Right' ),
|
125 |
-
value: 'fadeInRight'
|
126 |
-
},
|
127 |
-
{
|
128 |
-
label: __( 'Fade In Left Big' ),
|
129 |
-
value: 'fadeInRightBig'
|
130 |
-
},
|
131 |
-
{
|
132 |
-
label: __( 'Fade In Up' ),
|
133 |
-
value: 'fadeInUp'
|
134 |
-
},
|
135 |
-
{
|
136 |
-
label: __( 'Fade Out' ),
|
137 |
-
value: 'fadeOut'
|
138 |
-
},
|
139 |
-
{
|
140 |
-
label: __( 'Fade Out Down' ),
|
141 |
-
value: 'fadeOutDown'
|
142 |
-
},
|
143 |
-
{
|
144 |
-
label: __( 'Fade Out Down Big' ),
|
145 |
-
value: 'fadeOutDownBig'
|
146 |
-
},
|
147 |
-
{
|
148 |
-
label: __( 'Fade Out Left' ),
|
149 |
-
value: 'fadeOutLeft'
|
150 |
-
},
|
151 |
-
{
|
152 |
-
label: __( 'Fade Out Left Big' ),
|
153 |
-
value: 'fadeOutLeftBig'
|
154 |
-
},
|
155 |
-
{
|
156 |
-
label: __( 'Fade Out Right' ),
|
157 |
-
value: 'fadeOutRight'
|
158 |
-
},
|
159 |
-
{
|
160 |
-
label: __( 'Fade In Left Big' ),
|
161 |
-
value: 'fadeOutRightBig'
|
162 |
-
},
|
163 |
-
{
|
164 |
-
label: __( 'Fade Out Up' ),
|
165 |
-
value: 'fadeOutUp'
|
166 |
-
},
|
167 |
-
{
|
168 |
-
label: __( 'Fade Out Up Big' ),
|
169 |
-
value: 'fadeOutUpBig'
|
170 |
-
},
|
171 |
-
{
|
172 |
-
label: __( 'Flip' ),
|
173 |
-
value: 'flip'
|
174 |
-
},
|
175 |
-
{
|
176 |
-
label: __( 'Flip In X' ),
|
177 |
-
value: 'flipInX'
|
178 |
-
},
|
179 |
-
{
|
180 |
-
label: __( 'Flip In Y' ),
|
181 |
-
value: 'flipInY'
|
182 |
-
},
|
183 |
-
{
|
184 |
-
label: __( 'Flip Out X' ),
|
185 |
-
value: 'flipOutX'
|
186 |
-
},
|
187 |
-
{
|
188 |
-
label: __( 'Flip Out Y' ),
|
189 |
-
value: 'flipOutY'
|
190 |
-
},
|
191 |
-
{
|
192 |
-
label: __( 'Light Speed In' ),
|
193 |
-
value: 'lightSpeedIn'
|
194 |
-
},
|
195 |
-
{
|
196 |
-
label: __( 'Light Speed Out' ),
|
197 |
-
value: 'lightSpeedOut'
|
198 |
-
},
|
199 |
-
{
|
200 |
-
label: __( 'Rotate In' ),
|
201 |
-
value: 'rotateIn'
|
202 |
-
},
|
203 |
-
{
|
204 |
-
label: __( 'Rotate In Down Left' ),
|
205 |
-
value: 'rotateInDownLeft'
|
206 |
-
},
|
207 |
-
{
|
208 |
-
label: __( 'Rotate In Down Right' ),
|
209 |
-
value: 'rotateInDownRight'
|
210 |
-
},
|
211 |
-
{
|
212 |
-
label: __( 'Rotate In Up Left' ),
|
213 |
-
value: 'rotateInUpLeft'
|
214 |
-
},
|
215 |
-
{
|
216 |
-
label: __( 'Rotate In Up Right' ),
|
217 |
-
value: 'rotateInUpRight'
|
218 |
-
},
|
219 |
-
{
|
220 |
-
label: __( 'Rotate Out' ),
|
221 |
-
value: 'rotateOut'
|
222 |
-
},
|
223 |
-
{
|
224 |
-
label: __( 'Rotate Out Down Left' ),
|
225 |
-
value: 'rotateOutDownLeft'
|
226 |
-
},
|
227 |
-
{
|
228 |
-
label: __( 'Rotate Out Down Right' ),
|
229 |
-
value: 'rotateOutDownRight'
|
230 |
-
},
|
231 |
-
{
|
232 |
-
label: __( 'Rotate Out Up Left' ),
|
233 |
-
value: 'rotateOutUpLeft'
|
234 |
-
},
|
235 |
-
{
|
236 |
-
label: __( 'Rotate Out Up Right' ),
|
237 |
-
value: 'rotateOutUpRight'
|
238 |
-
},
|
239 |
-
{
|
240 |
-
label: __( 'Slide In Down' ),
|
241 |
-
value: 'slideInDown'
|
242 |
-
},
|
243 |
-
{
|
244 |
-
label: __( 'Slide In Left' ),
|
245 |
-
value: 'slideInLeft'
|
246 |
-
},
|
247 |
-
{
|
248 |
-
label: __( 'Slide In Right' ),
|
249 |
-
value: 'slideInRight'
|
250 |
-
},
|
251 |
-
{
|
252 |
-
label: __( 'Slide In Up' ),
|
253 |
-
value: 'slideInUp'
|
254 |
-
},
|
255 |
-
{
|
256 |
-
label: __( 'Slide Out Down' ),
|
257 |
-
value: 'slideOutDown'
|
258 |
-
},
|
259 |
-
{
|
260 |
-
label: __( 'Slide Out Left' ),
|
261 |
-
value: 'slideOutLeft'
|
262 |
-
},
|
263 |
-
{
|
264 |
-
label: __( 'Slide Out Right' ),
|
265 |
-
value: 'slideOutRight'
|
266 |
-
},
|
267 |
-
{
|
268 |
-
label: __( 'Slide Out Up' ),
|
269 |
-
value: 'slideOutUp'
|
270 |
-
},
|
271 |
-
{
|
272 |
-
label: __( 'Zoom In' ),
|
273 |
-
value: 'zoomIn'
|
274 |
-
},
|
275 |
-
{
|
276 |
-
label: __( 'Zoom In Down' ),
|
277 |
-
value: 'zoomInDown'
|
278 |
-
},
|
279 |
-
{
|
280 |
-
label: __( 'Zoom In Left' ),
|
281 |
-
value: 'zoomInLeft'
|
282 |
-
},
|
283 |
-
{
|
284 |
-
label: __( 'Zoom In Right' ),
|
285 |
-
value: 'zoomInRight'
|
286 |
-
},
|
287 |
-
{
|
288 |
-
label: __( 'Zoom In Up' ),
|
289 |
-
value: 'zoomInUp'
|
290 |
-
},
|
291 |
-
{
|
292 |
-
label: __( 'Zoom Out' ),
|
293 |
-
value: 'zoomOut'
|
294 |
-
},
|
295 |
-
{
|
296 |
-
label: __( 'Zoom Out Down' ),
|
297 |
-
value: 'zoomOutDown'
|
298 |
-
},
|
299 |
-
{
|
300 |
-
label: __( 'Zoom Out Left' ),
|
301 |
-
value: 'zoomOutLeft'
|
302 |
-
},
|
303 |
-
{
|
304 |
-
label: __( 'Zoom Out Right' ),
|
305 |
-
value: 'zoomOutRight'
|
306 |
-
},
|
307 |
-
{
|
308 |
-
label: __( 'Zoom Out Up' ),
|
309 |
-
value: 'zoomOutUp'
|
310 |
-
},
|
311 |
-
{
|
312 |
-
label: __( 'Roll In' ),
|
313 |
-
value: 'rollIn'
|
314 |
-
},
|
315 |
-
{
|
316 |
-
label: __( 'Roll Out' ),
|
317 |
-
value: 'rollOut'
|
318 |
-
}
|
319 |
-
];
|
320 |
-
|
321 |
-
export const outAnimation = [
|
322 |
-
'bounceOut',
|
323 |
-
'bounceOutDown',
|
324 |
-
'bounceOutLeft',
|
325 |
-
'bounceOutRight',
|
326 |
-
'bounceOutUp',
|
327 |
-
'fadeOut',
|
328 |
-
'fadeOutDown',
|
329 |
-
'fadeOutDownBig',
|
330 |
-
'fadeOutLeft',
|
331 |
-
'fadeOutLeftBig',
|
332 |
-
'fadeOutRight',
|
333 |
-
'fadeOutRightBig',
|
334 |
-
'fadeOutUp',
|
335 |
-
'fadeOutUpBig',
|
336 |
-
'flipOutX',
|
337 |
-
'flipOutY',
|
338 |
-
'lightSpeedOut',
|
339 |
-
'rotateOut',
|
340 |
-
'rotateOutDownLeft',
|
341 |
-
'rotateOutDownRight',
|
342 |
-
'rotateOutUpLeft',
|
343 |
-
'rotateOutUpRight',
|
344 |
-
'slideOutDown',
|
345 |
-
'slideOutLeft',
|
346 |
-
'slideOutRight',
|
347 |
-
'slideOutUp',
|
348 |
-
'zoomOut',
|
349 |
-
'zoomOutDown',
|
350 |
-
'zoomOutLeft',
|
351 |
-
'zoomOutRight',
|
352 |
-
'zoomOutUp',
|
353 |
-
'rollOut'
|
354 |
-
];
|
355 |
-
|
356 |
-
export const delayList = [
|
357 |
-
{
|
358 |
-
label: __( 'Default' ),
|
359 |
-
value: 'none'
|
360 |
-
},
|
361 |
-
{
|
362 |
-
label: __( 'Two Second' ),
|
363 |
-
value: 'delay-2s'
|
364 |
-
},
|
365 |
-
{
|
366 |
-
label: __( 'Three Second' ),
|
367 |
-
value: 'delay-3s'
|
368 |
-
},
|
369 |
-
{
|
370 |
-
label: __( 'Four Second' ),
|
371 |
-
value: 'delay-4s'
|
372 |
-
},
|
373 |
-
{
|
374 |
-
label: __( 'Five Second' ),
|
375 |
-
value: 'delay-5s'
|
376 |
-
}
|
377 |
-
];
|
378 |
-
|
379 |
-
export const speedList = [
|
380 |
-
{
|
381 |
-
label: __( 'Default' ),
|
382 |
-
value: 'none'
|
383 |
-
},
|
384 |
-
{
|
385 |
-
label: __( 'Slow' ),
|
386 |
-
value: 'slow'
|
387 |
-
},
|
388 |
-
{
|
389 |
-
label: __( 'Slower' ),
|
390 |
-
value: 'slower'
|
391 |
-
},
|
392 |
-
{
|
393 |
-
label: __( 'Fast' ),
|
394 |
-
value: 'fast'
|
395 |
-
},
|
396 |
-
{
|
397 |
-
label: __( 'Faster' ),
|
398 |
-
value: 'faster'
|
399 |
-
}
|
400 |
-
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-animation/src/editor.js
DELETED
@@ -1,206 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* WordPress dependencies.
|
3 |
-
*/
|
4 |
-
const { __ } = wp.i18n;
|
5 |
-
|
6 |
-
const {
|
7 |
-
SelectControl
|
8 |
-
} = wp.components;
|
9 |
-
|
10 |
-
const {
|
11 |
-
Component,
|
12 |
-
Fragment
|
13 |
-
} = wp.element;
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Internal dependencies.
|
17 |
-
*/
|
18 |
-
import {
|
19 |
-
animationsList,
|
20 |
-
outAnimation,
|
21 |
-
delayList,
|
22 |
-
speedList
|
23 |
-
} from './data.js';
|
24 |
-
|
25 |
-
class AnimationControls extends Component {
|
26 |
-
constructor() {
|
27 |
-
super( ...arguments );
|
28 |
-
|
29 |
-
this.updateAnimation = this.updateAnimation.bind( this );
|
30 |
-
this.updateDelay = this.updateDelay.bind( this );
|
31 |
-
this.updateSpeed = this.updateSpeed.bind( this );
|
32 |
-
|
33 |
-
this.state = {
|
34 |
-
animation: 'none',
|
35 |
-
delay: 'default',
|
36 |
-
speed: 'default'
|
37 |
-
};
|
38 |
-
}
|
39 |
-
|
40 |
-
componentDidMount() {
|
41 |
-
let classes;
|
42 |
-
|
43 |
-
if ( this.props.attributes.className ) {
|
44 |
-
classes = this.props.attributes.className;
|
45 |
-
classes = classes.split( ' ' );
|
46 |
-
|
47 |
-
const animationClass = Array.from( animationsList ).find( i => {
|
48 |
-
return classes.find( o => o === i.value );
|
49 |
-
});
|
50 |
-
|
51 |
-
const delayClass = Array.from( delayList ).find( i => {
|
52 |
-
return classes.find( o => o === i.value );
|
53 |
-
});
|
54 |
-
|
55 |
-
const speedClass = Array.from( speedList ).find( i => {
|
56 |
-
return classes.find( o => o === i.value );
|
57 |
-
});
|
58 |
-
|
59 |
-
this.setState({
|
60 |
-
animation: animationClass ? animationClass.value : 'none',
|
61 |
-
delay: delayClass ? delayClass.value : 'default',
|
62 |
-
speed: speedClass ? speedClass.value : 'default'
|
63 |
-
});
|
64 |
-
}
|
65 |
-
}
|
66 |
-
|
67 |
-
async updateAnimation( e ) {
|
68 |
-
let classes;
|
69 |
-
let animationValue = 'none' !== e ? e : '';
|
70 |
-
|
71 |
-
if ( this.props.attributes.className ) {
|
72 |
-
classes = this.props.attributes.className;
|
73 |
-
classes = classes.split( ' ' );
|
74 |
-
const exists = classes.find( i => i === this.state.animation );
|
75 |
-
const animatedExists = classes.find( i => 'animated' === i );
|
76 |
-
|
77 |
-
if ( ! animatedExists ) {
|
78 |
-
classes.push( 'animated' );
|
79 |
-
}
|
80 |
-
|
81 |
-
if ( exists ) {
|
82 |
-
classes = classes.join( ' ' ).replace( this.state.animation, animationValue );
|
83 |
-
} else {
|
84 |
-
classes.push( animationValue );
|
85 |
-
classes = classes.join( ' ' );
|
86 |
-
}
|
87 |
-
} else {
|
88 |
-
classes = `animated ${ animationValue }`;
|
89 |
-
}
|
90 |
-
|
91 |
-
if ( 'none' === e ) {
|
92 |
-
classes = classes.replace( 'animated', '' ).replace( this.state.delay, '' ).replace( this.state.speed, '' );
|
93 |
-
|
94 |
-
this.setState({
|
95 |
-
delay: 'default',
|
96 |
-
speed: 'defualt'
|
97 |
-
});
|
98 |
-
}
|
99 |
-
|
100 |
-
classes = classes.replace( /\s+/g, ' ' );
|
101 |
-
|
102 |
-
this.setState({ animation: e });
|
103 |
-
await this.props.setAttributes({ className: classes });
|
104 |
-
|
105 |
-
let block = document.querySelector( `#block-${ this.props.clientId } .animated` );
|
106 |
-
|
107 |
-
if ( block ) {
|
108 |
-
outAnimation.forEach( i => {
|
109 |
-
const isOut = block.className.includes( i );
|
110 |
-
|
111 |
-
if ( isOut ) {
|
112 |
-
block.addEventListener( 'animationend', () => {
|
113 |
-
block.classList.remove( i );
|
114 |
-
|
115 |
-
block.addEventListener( 'animationstart', () => {
|
116 |
-
block.classList.remove( i );
|
117 |
-
});
|
118 |
-
});
|
119 |
-
}
|
120 |
-
});
|
121 |
-
}
|
122 |
-
}
|
123 |
-
|
124 |
-
updateDelay( e ) {
|
125 |
-
let classes;
|
126 |
-
let delayValue = 'none' !== e ? e : '';
|
127 |
-
|
128 |
-
if ( this.props.attributes.className ) {
|
129 |
-
classes = this.props.attributes.className;
|
130 |
-
classes = classes.split( ' ' );
|
131 |
-
const exists = classes.find( i => i === this.state.delay );
|
132 |
-
|
133 |
-
if ( exists ) {
|
134 |
-
classes = classes.join( ' ' ).replace( this.state.delay, delayValue );
|
135 |
-
} else {
|
136 |
-
classes.push( delayValue );
|
137 |
-
classes = classes.join( ' ' );
|
138 |
-
}
|
139 |
-
} else {
|
140 |
-
classes = delayValue;
|
141 |
-
}
|
142 |
-
|
143 |
-
classes = classes.replace( /\s+/g, ' ' );
|
144 |
-
|
145 |
-
this.setState({ delay: e });
|
146 |
-
this.props.setAttributes({ className: classes });
|
147 |
-
}
|
148 |
-
|
149 |
-
updateSpeed( e ) {
|
150 |
-
let classes;
|
151 |
-
let speedValue = 'none' !== e ? e : '';
|
152 |
-
|
153 |
-
if ( this.props.attributes.className ) {
|
154 |
-
classes = this.props.attributes.className;
|
155 |
-
classes = classes.split( ' ' );
|
156 |
-
const exists = classes.find( i => i === this.state.speed );
|
157 |
-
|
158 |
-
if ( exists ) {
|
159 |
-
classes = classes.join( ' ' ).replace( this.state.speed, speedValue );
|
160 |
-
} else {
|
161 |
-
classes.push( speedValue );
|
162 |
-
classes = classes.join( ' ' );
|
163 |
-
}
|
164 |
-
} else {
|
165 |
-
classes = speedValue;
|
166 |
-
}
|
167 |
-
|
168 |
-
classes = classes.replace( /\s+/g, ' ' );
|
169 |
-
|
170 |
-
this.setState({ speed: e });
|
171 |
-
this.props.setAttributes({ className: classes });
|
172 |
-
}
|
173 |
-
|
174 |
-
render() {
|
175 |
-
return (
|
176 |
-
<Fragment>
|
177 |
-
<SelectControl
|
178 |
-
label={ __( 'Animation' ) }
|
179 |
-
value={ this.state.animation || 'none' }
|
180 |
-
options={ animationsList }
|
181 |
-
onChange={ this.updateAnimation }
|
182 |
-
/>
|
183 |
-
|
184 |
-
{ 'none' !== this.state.animation && (
|
185 |
-
<Fragment>
|
186 |
-
<SelectControl
|
187 |
-
label={ __( 'Delay' ) }
|
188 |
-
value={ this.state.delay || 'default' }
|
189 |
-
options={ delayList }
|
190 |
-
onChange={ this.updateDelay }
|
191 |
-
/>
|
192 |
-
|
193 |
-
<SelectControl
|
194 |
-
label={ __( 'Speed' ) }
|
195 |
-
value={ this.state.speed || 'default' }
|
196 |
-
options={ speedList }
|
197 |
-
onChange={ this.updateSpeed }
|
198 |
-
/>
|
199 |
-
</Fragment>
|
200 |
-
) }
|
201 |
-
</Fragment>
|
202 |
-
);
|
203 |
-
}
|
204 |
-
}
|
205 |
-
|
206 |
-
export default AnimationControls;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-animation/src/frontend.js
DELETED
@@ -1,210 +0,0 @@
|
|
1 |
-
const animations = [
|
2 |
-
'none',
|
3 |
-
'bounce',
|
4 |
-
'flash',
|
5 |
-
'pulse',
|
6 |
-
'rubberBand',
|
7 |
-
'shake',
|
8 |
-
'headShake',
|
9 |
-
'swing',
|
10 |
-
'tada',
|
11 |
-
'wobble',
|
12 |
-
'jello',
|
13 |
-
'heartBeat',
|
14 |
-
'hinge',
|
15 |
-
'jackInTheBox',
|
16 |
-
'bounceIn',
|
17 |
-
'bounceInDown',
|
18 |
-
'bounceInLeft',
|
19 |
-
'bounceInRight',
|
20 |
-
'bounceInUp',
|
21 |
-
'bounceOut',
|
22 |
-
'bounceOutDown',
|
23 |
-
'bounceOutLeft',
|
24 |
-
'bounceOutRight',
|
25 |
-
'bounceOutUp',
|
26 |
-
'fadeIn',
|
27 |
-
'fadeInDown',
|
28 |
-
'fadeInDownBig',
|
29 |
-
'fadeInLeft',
|
30 |
-
'fadeInLeftBig',
|
31 |
-
'fadeInRight',
|
32 |
-
'fadeInRightBig',
|
33 |
-
'fadeInUp',
|
34 |
-
'fadeOut',
|
35 |
-
'fadeOutDown',
|
36 |
-
'fadeOutDownBig',
|
37 |
-
'fadeOutLeft',
|
38 |
-
'fadeOutLeftBig',
|
39 |
-
'fadeOutRight',
|
40 |
-
'fadeOutRightBig',
|
41 |
-
'fadeOutUp',
|
42 |
-
'fadeOutUpBig',
|
43 |
-
'flip',
|
44 |
-
'flipInX',
|
45 |
-
'flipInY',
|
46 |
-
'flipOutX',
|
47 |
-
'flipOutY',
|
48 |
-
'lightSpeedIn',
|
49 |
-
'lightSpeedOut',
|
50 |
-
'rotateIn',
|
51 |
-
'rotateInDownLeft',
|
52 |
-
'rotateInDownRight',
|
53 |
-
'rotateInUpLeft',
|
54 |
-
'rotateInUpRight',
|
55 |
-
'rotateOut',
|
56 |
-
'rotateOutDownLeft',
|
57 |
-
'rotateOutDownRight',
|
58 |
-
'rotateOutUpLeft',
|
59 |
-
'rotateOutUpRight',
|
60 |
-
'slideInDown',
|
61 |
-
'slideInLeft',
|
62 |
-
'slideInRight',
|
63 |
-
'slideInUp',
|
64 |
-
'slideOutDown',
|
65 |
-
'slideOutLeft',
|
66 |
-
'slideOutRight',
|
67 |
-
'slideOutUp',
|
68 |
-
'zoomIn',
|
69 |
-
'zoomInDown',
|
70 |
-
'zoomInLeft',
|
71 |
-
'zoomInRight',
|
72 |
-
'zoomInUp',
|
73 |
-
'zoomOut',
|
74 |
-
'zoomOutDown',
|
75 |
-
'zoomOutLeft',
|
76 |
-
'zoomOutRight',
|
77 |
-
'zoomOutUp',
|
78 |
-
'rollIn',
|
79 |
-
'rollOut'
|
80 |
-
];
|
81 |
-
|
82 |
-
const outAnimation = [
|
83 |
-
'bounceOut',
|
84 |
-
'bounceOutDown',
|
85 |
-
'bounceOutLeft',
|
86 |
-
'bounceOutRight',
|
87 |
-
'bounceOutUp',
|
88 |
-
'fadeOut',
|
89 |
-
'fadeOutDown',
|
90 |
-
'fadeOutDownBig',
|
91 |
-
'fadeOutLeft',
|
92 |
-
'fadeOutLeftBig',
|
93 |
-
'fadeOutRight',
|
94 |
-
'fadeOutRightBig',
|
95 |
-
'fadeOutUp',
|
96 |
-
'fadeOutUpBig',
|
97 |
-
'flipOutX',
|
98 |
-
'flipOutY',
|
99 |
-
'lightSpeedOut',
|
100 |
-
'rotateOut',
|
101 |
-
'rotateOutDownLeft',
|
102 |
-
'rotateOutDownRight',
|
103 |
-
'rotateOutUpLeft',
|
104 |
-
'rotateOutUpRight',
|
105 |
-
'slideOutDown',
|
106 |
-
'slideOutLeft',
|
107 |
-
'slideOutRight',
|
108 |
-
'slideOutUp',
|
109 |
-
'zoomOut',
|
110 |
-
'zoomOutDown',
|
111 |
-
'zoomOutLeft',
|
112 |
-
'zoomOutRight',
|
113 |
-
'zoomOutUp',
|
114 |
-
'rollOut'
|
115 |
-
];
|
116 |
-
|
117 |
-
const delay = [
|
118 |
-
'none',
|
119 |
-
'delay-2s',
|
120 |
-
'delay-3s',
|
121 |
-
'delay-4s',
|
122 |
-
'delay-5s'
|
123 |
-
];
|
124 |
-
|
125 |
-
const speed = [
|
126 |
-
'none',
|
127 |
-
'slow',
|
128 |
-
'slower',
|
129 |
-
'fast',
|
130 |
-
'faster'
|
131 |
-
];
|
132 |
-
|
133 |
-
window.onload = () => {
|
134 |
-
const elements = document.querySelectorAll( '.animated' );
|
135 |
-
for ( const element of elements ) {
|
136 |
-
classes = element.classList;
|
137 |
-
element.animationClasses = [];
|
138 |
-
|
139 |
-
if ( ! isElementInViewport( element ) ) {
|
140 |
-
const animationClass = animations.find( i => {
|
141 |
-
return Array.from( classes ).find( o => o === i );
|
142 |
-
});
|
143 |
-
|
144 |
-
const delayClass = delay.find( i => {
|
145 |
-
return Array.from( classes ).find( o => o === i );
|
146 |
-
});
|
147 |
-
|
148 |
-
const speedClass = speed.find( i => {
|
149 |
-
return Array.from( classes ).find( o => o === i );
|
150 |
-
});
|
151 |
-
|
152 |
-
element.classList.add( 'hidden-animated' );
|
153 |
-
|
154 |
-
if ( animationClass ) {
|
155 |
-
element.animationClasses.push( animationClass );
|
156 |
-
element.classList.remove( animationClass );
|
157 |
-
}
|
158 |
-
|
159 |
-
if ( delayClass ) {
|
160 |
-
element.animationClasses.push( delayClass );
|
161 |
-
element.classList.remove( delayClass );
|
162 |
-
}
|
163 |
-
|
164 |
-
if ( speedClass ) {
|
165 |
-
element.animationClasses.push( speedClass );
|
166 |
-
element.classList.remove( speedClass );
|
167 |
-
}
|
168 |
-
}
|
169 |
-
|
170 |
-
outAnimation.forEach( i => {
|
171 |
-
const isOut = element.className.includes( i );
|
172 |
-
|
173 |
-
if ( isOut ) {
|
174 |
-
element.addEventListener( 'animationend', () => {
|
175 |
-
element.classList.remove( i );
|
176 |
-
});
|
177 |
-
}
|
178 |
-
});
|
179 |
-
}
|
180 |
-
|
181 |
-
window.onscroll = () => {
|
182 |
-
for ( const element of elements ) {
|
183 |
-
if ( element.getBoundingClientRect().top <= window.innerHeight * 0.75 && 0 < element.getBoundingClientRect().top ) {
|
184 |
-
if ( element.animationClasses && 0 < element.animationClasses.length ) {
|
185 |
-
const classes = element.animationClasses;
|
186 |
-
classes.forEach( i => element.classList.add( i ) );
|
187 |
-
element.classList.remove( 'hidden-animated' );
|
188 |
-
delete element.animationClasses;
|
189 |
-
}
|
190 |
-
}
|
191 |
-
}
|
192 |
-
};
|
193 |
-
};
|
194 |
-
|
195 |
-
const isElementInViewport = el => {
|
196 |
-
const scroll = window.scrollY || window.pageYOffset;
|
197 |
-
const boundsTop = el.getBoundingClientRect().top + scroll;
|
198 |
-
|
199 |
-
const viewport = {
|
200 |
-
top: scroll,
|
201 |
-
bottom: scroll + window.innerHeight
|
202 |
-
};
|
203 |
-
|
204 |
-
const bounds = {
|
205 |
-
top: boundsTop,
|
206 |
-
bottom: boundsTop + el.clientHeight
|
207 |
-
};
|
208 |
-
|
209 |
-
return ( bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom ) || ( bounds.top <= viewport.bottom && bounds.top >= viewport.top );
|
210 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-animation/src/index.js
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* WordPress dependencies.
|
3 |
-
*/
|
4 |
-
const { __ } = wp.i18n;
|
5 |
-
|
6 |
-
const { hasBlockSupport } = wp.blocks;
|
7 |
-
|
8 |
-
const { PanelBody } = wp.components;
|
9 |
-
|
10 |
-
const { createHigherOrderComponent } = wp.compose;
|
11 |
-
|
12 |
-
const { InspectorControls } = wp.blockEditor || wp.editor;
|
13 |
-
|
14 |
-
const { Fragment } = wp.element;
|
15 |
-
|
16 |
-
const { addFilter } = wp.hooks;
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Internal dependencies.
|
20 |
-
*/
|
21 |
-
import AnimationControls from './editor.js';
|
22 |
-
|
23 |
-
const withInspectorControls = createHigherOrderComponent( ( BlockEdit ) => {
|
24 |
-
return ( props ) => {
|
25 |
-
const hasCustomClassName = hasBlockSupport( props.name, 'customClassName', true );
|
26 |
-
if ( hasCustomClassName && props.isSelected ) {
|
27 |
-
return (
|
28 |
-
<Fragment>
|
29 |
-
<BlockEdit { ...props } />
|
30 |
-
<InspectorControls>
|
31 |
-
<PanelBody
|
32 |
-
title={ __( 'Animations' ) }
|
33 |
-
initialOpen={ false }
|
34 |
-
>
|
35 |
-
<AnimationControls
|
36 |
-
clientId={ props.clientId }
|
37 |
-
setAttributes={ props.setAttributes }
|
38 |
-
attributes={ props.attributes }
|
39 |
-
/>
|
40 |
-
</PanelBody>
|
41 |
-
</InspectorControls>
|
42 |
-
</Fragment>
|
43 |
-
);
|
44 |
-
}
|
45 |
-
|
46 |
-
return <BlockEdit { ...props } />;
|
47 |
-
};
|
48 |
-
}, 'withInspectorControl' );
|
49 |
-
|
50 |
-
addFilter( 'editor.BlockEdit', 'themeisle-custom-css/with-inspector-controls', withInspectorControls );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-animation/webpack.config.js
DELETED
@@ -1,56 +0,0 @@
|
|
1 |
-
const webpack = require( 'webpack' );
|
2 |
-
const NODE_ENV = process.env.NODE_ENV || 'development';
|
3 |
-
|
4 |
-
module.exports = {
|
5 |
-
mode: NODE_ENV,
|
6 |
-
entry: {
|
7 |
-
build: './src/index.js',
|
8 |
-
animate: './src/frontend.js'
|
9 |
-
},
|
10 |
-
output: {
|
11 |
-
path: __dirname,
|
12 |
-
filename: './build/[name].js',
|
13 |
-
chunkFilename: './build/[name].js'
|
14 |
-
},
|
15 |
-
module: {
|
16 |
-
rules: [
|
17 |
-
{
|
18 |
-
test: /.js?$/,
|
19 |
-
use: [ {
|
20 |
-
loader: 'babel-loader',
|
21 |
-
options: {
|
22 |
-
presets: [ '@babel/preset-env' ],
|
23 |
-
plugins: [
|
24 |
-
'@babel/plugin-transform-async-to-generator',
|
25 |
-
'@babel/plugin-proposal-object-rest-spread',
|
26 |
-
[
|
27 |
-
'@babel/plugin-transform-react-jsx', {
|
28 |
-
'pragma': 'wp.element.createElement'
|
29 |
-
}
|
30 |
-
]
|
31 |
-
]
|
32 |
-
}
|
33 |
-
},
|
34 |
-
'eslint-loader' ],
|
35 |
-
exclude: /node_modules/
|
36 |
-
}
|
37 |
-
]
|
38 |
-
},
|
39 |
-
optimization: {
|
40 |
-
splitChunks: {
|
41 |
-
cacheGroups: {
|
42 |
-
animate: {
|
43 |
-
name: 'animate',
|
44 |
-
test: /frontend\.js$/,
|
45 |
-
chunks: 'all',
|
46 |
-
reuseExistingChunk: true
|
47 |
-
}
|
48 |
-
}
|
49 |
-
}
|
50 |
-
},
|
51 |
-
plugins: [
|
52 |
-
new webpack.DefinePlugin({
|
53 |
-
'process.env.NODE_ENV': JSON.stringify( NODE_ENV )
|
54 |
-
})
|
55 |
-
]
|
56 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-blocks/src/frontend/google-map/index.js
DELETED
@@ -1,71 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Internal dependencies
|
3 |
-
*/
|
4 |
-
import styles from './styles.js';
|
5 |
-
|
6 |
-
const initMapScript = () => {
|
7 |
-
let maps = [];
|
8 |
-
maps = window.themeisleGoogleMaps;
|
9 |
-
|
10 |
-
maps.forEach( map => {
|
11 |
-
const googleMap = new google.maps.Map( document.getElementById( map.container ), {
|
12 |
-
center: {
|
13 |
-
lat: Number( map.attributes.latitude ),
|
14 |
-
lng: Number( map.attributes.longitude )
|
15 |
-
},
|
16 |
-
gestureHandling: 'cooperative',
|
17 |
-
zoom: map.attributes.zoom,
|
18 |
-
mapTypeId: map.attributes.type,
|
19 |
-
draggable: map.attributes.draggable,
|
20 |
-
mapTypeControl: map.attributes.mapTypeControl,
|
21 |
-
zoomControl: map.attributes.zoomControl,
|
22 |
-
fullscreenControl: map.attributes.fullscreenControl,
|
23 |
-
streetViewControl: map.attributes.streetViewControl,
|
24 |
-
styles: styles[ map.attributes.style || 'standard' ]
|
25 |
-
});
|
26 |
-
|
27 |
-
if ( ! map.attributes.id && map.attributes.location ) {
|
28 |
-
const request = {
|
29 |
-
query: map.attributes.location,
|
30 |
-
fields: [ 'name', 'geometry' ]
|
31 |
-
};
|
32 |
-
|
33 |
-
const service = new google.maps.places.PlacesService( googleMap );
|
34 |
-
|
35 |
-
service.findPlaceFromQuery( request, ( results, status ) => {
|
36 |
-
if ( status === google.maps.places.PlacesServiceStatus.OK ) {
|
37 |
-
if ( 0 < results.length ) {
|
38 |
-
googleMap.setCenter( results[0].geometry.location );
|
39 |
-
}
|
40 |
-
}
|
41 |
-
});
|
42 |
-
}
|
43 |
-
|
44 |
-
if ( map.attributes.markers && 0 < map.attributes.markers.length ) {
|
45 |
-
map.attributes.markers.forEach( marker => {
|
46 |
-
const position = new google.maps.LatLng( marker.latitude, marker.longitude );
|
47 |
-
|
48 |
-
const mark = new google.maps.Marker({
|
49 |
-
position,
|
50 |
-
map: googleMap,
|
51 |
-
title: marker.title,
|
52 |
-
icon: marker.icon || 'https://maps.google.com/mapfiles/ms/icons/red-dot.png'
|
53 |
-
});
|
54 |
-
|
55 |
-
if ( marker.title || marker.description ) {
|
56 |
-
const contentString = `<div class="wp-block-themeisle-blocks-map-overview"><h6 class="wp-block-themeisle-blocks-map-overview-title">${ marker.title }</h6><div class="wp-block-themeisle-blocks-map-overview-content">${ marker.description ? `<p>${ marker.description }</p>` : '' }</div></div>`;
|
57 |
-
|
58 |
-
const infowindow = new google.maps.InfoWindow({
|
59 |
-
content: contentString
|
60 |
-
});
|
61 |
-
|
62 |
-
mark.addListener( 'click', () => {
|
63 |
-
infowindow.open( googleMap, mark );
|
64 |
-
});
|
65 |
-
}
|
66 |
-
});
|
67 |
-
}
|
68 |
-
});
|
69 |
-
};
|
70 |
-
|
71 |
-
window.initMapScript = initMapScript;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-blocks/src/frontend/google-map/styles.js
DELETED
@@ -1,960 +0,0 @@
|
|
1 |
-
const styles = {
|
2 |
-
standard: [],
|
3 |
-
silver: [
|
4 |
-
{
|
5 |
-
'elementType': 'geometry',
|
6 |
-
'stylers': [
|
7 |
-
{
|
8 |
-
'color': '#f5f5f5'
|
9 |
-
}
|
10 |
-
]
|
11 |
-
},
|
12 |
-
{
|
13 |
-
'elementType': 'labels.icon',
|
14 |
-
'stylers': [
|
15 |
-
{
|
16 |
-
'visibility': 'off'
|
17 |
-
}
|
18 |
-
]
|
19 |
-
},
|
20 |
-
{
|
21 |
-
'elementType': 'labels.text.fill',
|
22 |
-
'stylers': [
|
23 |
-
{
|
24 |
-
'color': '#616161'
|
25 |
-
}
|
26 |
-
]
|
27 |
-
},
|
28 |
-
{
|
29 |
-
'elementType': 'labels.text.stroke',
|
30 |
-
'stylers': [
|
31 |
-
{
|
32 |
-
'color': '#f5f5f5'
|
33 |
-
}
|
34 |
-
]
|
35 |
-
},
|
36 |
-
{
|
37 |
-
'featureType': 'administrative.land_parcel',
|
38 |
-
'elementType': 'labels.text.fill',
|
39 |
-
'stylers': [
|
40 |
-
{
|
41 |
-
'color': '#bdbdbd'
|
42 |
-
}
|
43 |
-
]
|
44 |
-
},
|
45 |
-
{
|
46 |
-
'featureType': 'poi',
|
47 |
-
'elementType': 'geometry',
|
48 |
-
'stylers': [
|
49 |
-
{
|
50 |
-
'color': '#eeeeee'
|
51 |
-
}
|
52 |
-
]
|
53 |
-
},
|
54 |
-
{
|
55 |
-
'featureType': 'poi',
|
56 |
-
'elementType': 'labels.text.fill',
|
57 |
-
'stylers': [
|
58 |
-
{
|
59 |
-
'color': '#757575'
|
60 |
-
}
|
61 |
-
]
|
62 |
-
},
|
63 |
-
{
|
64 |
-
'featureType': 'poi.park',
|
65 |
-
'elementType': 'geometry',
|
66 |
-
'stylers': [
|
67 |
-
{
|
68 |
-
'color': '#e5e5e5'
|
69 |
-
}
|
70 |
-
]
|
71 |
-
},
|
72 |
-
{
|
73 |
-
'featureType': 'poi.park',
|
74 |
-
'elementType': 'labels.text.fill',
|
75 |
-
'stylers': [
|
76 |
-
{
|
77 |
-
'color': '#9e9e9e'
|
78 |
-
}
|
79 |
-
]
|
80 |
-
},
|
81 |
-
{
|
82 |
-
'featureType': 'road',
|
83 |
-
'elementType': 'geometry',
|
84 |
-
'stylers': [
|
85 |
-
{
|
86 |
-
'color': '#ffffff'
|
87 |
-
}
|
88 |
-
]
|
89 |
-
},
|
90 |
-
{
|
91 |
-
'featureType': 'road.arterial',
|
92 |
-
'elementType': 'labels.text.fill',
|
93 |
-
'stylers': [
|
94 |
-
{
|
95 |
-
'color': '#757575'
|
96 |
-
}
|
97 |
-
]
|
98 |
-
},
|
99 |
-
{
|
100 |
-
'featureType': 'road.highway',
|
101 |
-
'elementType': 'geometry',
|
102 |
-
'stylers': [
|
103 |
-
{
|
104 |
-
'color': '#dadada'
|
105 |
-
}
|
106 |
-
]
|
107 |
-
},
|
108 |
-
{
|
109 |
-
'featureType': 'road.highway',
|
110 |
-
'elementType': 'labels.text.fill',
|
111 |
-
'stylers': [
|
112 |
-
{
|
113 |
-
'color': '#616161'
|
114 |
-
}
|
115 |
-
]
|
116 |
-
},
|
117 |
-
{
|
118 |
-
'featureType': 'road.local',
|
119 |
-
'elementType': 'labels.text.fill',
|
120 |
-
'stylers': [
|
121 |
-
{
|
122 |
-
'color': '#9e9e9e'
|
123 |
-
}
|
124 |
-
]
|
125 |
-
},
|
126 |
-
{
|
127 |
-
'featureType': 'transit.line',
|
128 |
-
'elementType': 'geometry',
|
129 |
-
'stylers': [
|
130 |
-
{
|
131 |
-
'color': '#e5e5e5'
|
132 |
-
}
|
133 |
-
]
|
134 |
-
},
|
135 |
-
{
|
136 |
-
'featureType': 'transit.station',
|
137 |
-
'elementType': 'geometry',
|
138 |
-
'stylers': [
|
139 |
-
{
|
140 |
-
'color': '#eeeeee'
|
141 |
-
}
|
142 |
-
]
|
143 |
-
},
|
144 |
-
{
|
145 |
-
'featureType': 'water',
|
146 |
-
'elementType': 'geometry',
|
147 |
-
'stylers': [
|
148 |
-
{
|
149 |
-
'color': '#c9c9c9'
|
150 |
-
}
|
151 |
-
]
|
152 |
-
},
|
153 |
-
{
|
154 |
-
'featureType': 'water',
|
155 |
-
'elementType': 'labels.text.fill',
|
156 |
-
'stylers': [
|
157 |
-
{
|
158 |
-
'color': '#9e9e9e'
|
159 |
-
}
|
160 |
-
]
|
161 |
-
}
|
162 |
-
],
|
163 |
-
retro: [
|
164 |
-
{
|
165 |
-
'elementType': 'geometry',
|
166 |
-
'stylers': [
|
167 |
-
{
|
168 |
-
'color': '#ebe3cd'
|
169 |
-
}
|
170 |
-
]
|
171 |
-
},
|
172 |
-
{
|
173 |
-
'elementType': 'labels.text.fill',
|
174 |
-
'stylers': [
|
175 |
-
{
|
176 |
-
'color': '#523735'
|
177 |
-
}
|
178 |
-
]
|
179 |
-
},
|
180 |
-
{
|
181 |
-
'elementType': 'labels.text.stroke',
|
182 |
-
'stylers': [
|
183 |
-
{
|
184 |
-
'color': '#f5f1e6'
|
185 |
-
}
|
186 |
-
]
|
187 |
-
},
|
188 |
-
{
|
189 |
-
'featureType': 'administrative',
|
190 |
-
'elementType': 'geometry.stroke',
|
191 |
-
'stylers': [
|
192 |
-
{
|
193 |
-
'color': '#c9b2a6'
|
194 |
-
}
|
195 |
-
]
|
196 |
-
},
|
197 |
-
{
|
198 |
-
'featureType': 'administrative.land_parcel',
|
199 |
-
'elementType': 'geometry.stroke',
|
200 |
-
'stylers': [
|
201 |
-
{
|
202 |
-
'color': '#dcd2be'
|
203 |
-
}
|
204 |
-
]
|
205 |
-
},
|
206 |
-
{
|
207 |
-
'featureType': 'administrative.land_parcel',
|
208 |
-
'elementType': 'labels.text.fill',
|
209 |
-
'stylers': [
|
210 |
-
{
|
211 |
-
'color': '#ae9e90'
|
212 |
-
}
|
213 |
-
]
|
214 |
-
},
|
215 |
-
{
|
216 |
-
'featureType': 'landscape.natural',
|
217 |
-
'elementType': 'geometry',
|
218 |
-
'stylers': [
|
219 |
-
{
|
220 |
-
'color': '#dfd2ae'
|
221 |
-
}
|
222 |
-
]
|
223 |
-
},
|
224 |
-
{
|
225 |
-
'featureType': 'poi',
|
226 |
-
'elementType': 'geometry',
|
227 |
-
'stylers': [
|
228 |
-
{
|
229 |
-
'color': '#dfd2ae'
|
230 |
-
}
|
231 |
-
]
|
232 |
-
},
|
233 |
-
{
|
234 |
-
'featureType': 'poi',
|
235 |
-
'elementType': 'labels.text.fill',
|
236 |
-
'stylers': [
|
237 |
-
{
|
238 |
-
'color': '#93817c'
|
239 |
-
}
|
240 |
-
]
|
241 |
-
},
|
242 |
-
{
|
243 |
-
'featureType': 'poi.park',
|
244 |
-
'elementType': 'geometry.fill',
|
245 |
-
'stylers': [
|
246 |
-
{
|
247 |
-
'color': '#a5b076'
|
248 |
-
}
|
249 |
-
]
|
250 |
-
},
|
251 |
-
{
|
252 |
-
'featureType': 'poi.park',
|
253 |
-
'elementType': 'labels.text.fill',
|
254 |
-
'stylers': [
|
255 |
-
{
|
256 |
-
'color': '#447530'
|
257 |
-
}
|
258 |
-
]
|
259 |
-
},
|
260 |
-
{
|
261 |
-
'featureType': 'road',
|
262 |
-
'elementType': 'geometry',
|
263 |
-
'stylers': [
|
264 |
-
{
|
265 |
-
'color': '#f5f1e6'
|
266 |
-
}
|
267 |
-
]
|
268 |
-
},
|
269 |
-
{
|
270 |
-
'featureType': 'road.arterial',
|
271 |
-
'elementType': 'geometry',
|
272 |
-
'stylers': [
|
273 |
-
{
|
274 |
-
'color': '#fdfcf8'
|
275 |
-
}
|
276 |
-
]
|
277 |
-
},
|
278 |
-
{
|
279 |
-
'featureType': 'road.highway',
|
280 |
-
'elementType': 'geometry',
|
281 |
-
'stylers': [
|
282 |
-
{
|
283 |
-
'color': '#f8c967'
|
284 |
-
}
|
285 |
-
]
|
286 |
-
},
|
287 |
-
{
|
288 |
-
'featureType': 'road.highway',
|
289 |
-
'elementType': 'geometry.stroke',
|
290 |
-
'stylers': [
|
291 |
-
{
|
292 |
-
'color': '#e9bc62'
|
293 |
-
}
|
294 |
-
]
|
295 |
-
},
|
296 |
-
{
|
297 |
-
'featureType': 'road.highway.controlled_access',
|
298 |
-
'elementType': 'geometry',
|
299 |
-
'stylers': [
|
300 |
-
{
|
301 |
-
'color': '#e98d58'
|
302 |
-
}
|
303 |
-
]
|
304 |
-
},
|
305 |
-
{
|
306 |
-
'featureType': 'road.highway.controlled_access',
|
307 |
-
'elementType': 'geometry.stroke',
|
308 |
-
'stylers': [
|
309 |
-
{
|
310 |
-
'color': '#db8555'
|
311 |
-
}
|
312 |
-
]
|
313 |
-
},
|
314 |
-
{
|
315 |
-
'featureType': 'road.local',
|
316 |
-
'elementType': 'labels.text.fill',
|
317 |
-
'stylers': [
|
318 |
-
{
|
319 |
-
'color': '#806b63'
|
320 |
-
}
|
321 |
-
]
|
322 |
-
},
|
323 |
-
{
|
324 |
-
'featureType': 'transit.line',
|
325 |
-
'elementType': 'geometry',
|
326 |
-
'stylers': [
|
327 |
-
{
|
328 |
-
'color': '#dfd2ae'
|
329 |
-
}
|
330 |
-
]
|
331 |
-
},
|
332 |
-
{
|
333 |
-
'featureType': 'transit.line',
|
334 |
-
'elementType': 'labels.text.fill',
|
335 |
-
'stylers': [
|
336 |
-
{
|
337 |
-
'color': '#8f7d77'
|
338 |
-
}
|
339 |
-
]
|
340 |
-
},
|
341 |
-
{
|
342 |
-
'featureType': 'transit.line',
|
343 |
-
'elementType': 'labels.text.stroke',
|
344 |
-
'stylers': [
|
345 |
-
{
|
346 |
-
'color': '#ebe3cd'
|
347 |
-
}
|
348 |
-
]
|
349 |
-
},
|
350 |
-
{
|
351 |
-
'featureType': 'transit.station',
|
352 |
-
'elementType': 'geometry',
|
353 |
-
'stylers': [
|
354 |
-
{
|
355 |
-
'color': '#dfd2ae'
|
356 |
-
}
|
357 |
-
]
|
358 |
-
},
|
359 |
-
{
|
360 |
-
'featureType': 'water',
|
361 |
-
'elementType': 'geometry.fill',
|
362 |
-
'stylers': [
|
363 |
-
{
|
364 |
-
'color': '#b9d3c2'
|
365 |
-
}
|
366 |
-
]
|
367 |
-
},
|
368 |
-
{
|
369 |
-
'featureType': 'water',
|
370 |
-
'elementType': 'labels.text.fill',
|
371 |
-
'stylers': [
|
372 |
-
{
|
373 |
-
'color': '#92998d'
|
374 |
-
}
|
375 |
-
]
|
376 |
-
}
|
377 |
-
],
|
378 |
-
dark: [
|
379 |
-
{
|
380 |
-
'elementType': 'geometry',
|
381 |
-
'stylers': [
|
382 |
-
{
|
383 |
-
'color': '#212121'
|
384 |
-
}
|
385 |
-
]
|
386 |
-
},
|
387 |
-
{
|
388 |
-
'elementType': 'labels.icon',
|
389 |
-
'stylers': [
|
390 |
-
{
|
391 |
-
'visibility': 'off'
|
392 |
-
}
|
393 |
-
]
|
394 |
-
},
|
395 |
-
{
|
396 |
-
'elementType': 'labels.text.fill',
|
397 |
-
'stylers': [
|
398 |
-
{
|
399 |
-
'color': '#757575'
|
400 |
-
}
|
401 |
-
]
|
402 |
-
},
|
403 |
-
{
|
404 |
-
'elementType': 'labels.text.stroke',
|
405 |
-
'stylers': [
|
406 |
-
{
|
407 |
-
'color': '#212121'
|
408 |
-
}
|
409 |
-
]
|
410 |
-
},
|
411 |
-
{
|
412 |
-
'featureType': 'administrative',
|
413 |
-
'elementType': 'geometry',
|
414 |
-
'stylers': [
|
415 |
-
{
|
416 |
-
'color': '#757575'
|
417 |
-
}
|
418 |
-
]
|
419 |
-
},
|
420 |
-
{
|
421 |
-
'featureType': 'administrative.country',
|
422 |
-
'elementType': 'labels.text.fill',
|
423 |
-
'stylers': [
|
424 |
-
{
|
425 |
-
'color': '#9e9e9e'
|
426 |
-
}
|
427 |
-
]
|
428 |
-
},
|
429 |
-
{
|
430 |
-
'featureType': 'administrative.land_parcel',
|
431 |
-
'stylers': [
|
432 |
-
{
|
433 |
-
'visibility': 'off'
|
434 |
-
}
|
435 |
-
]
|
436 |
-
},
|
437 |
-
{
|
438 |
-
'featureType': 'administrative.locality',
|
439 |
-
'elementType': 'labels.text.fill',
|
440 |
-
'stylers': [
|
441 |
-
{
|
442 |
-
'color': '#bdbdbd'
|
443 |
-
}
|
444 |
-
]
|
445 |
-
},
|
446 |
-
{
|
447 |
-
'featureType': 'poi',
|
448 |
-
'elementType': 'labels.text.fill',
|
449 |
-
'stylers': [
|
450 |
-
{
|
451 |
-
'color': '#757575'
|
452 |
-
}
|
453 |
-
]
|
454 |
-
},
|
455 |
-
{
|
456 |
-
'featureType': 'poi.park',
|
457 |
-
'elementType': 'geometry',
|
458 |
-
'stylers': [
|
459 |
-
{
|
460 |
-
'color': '#181818'
|
461 |
-
}
|
462 |
-
]
|
463 |
-
},
|
464 |
-
{
|
465 |
-
'featureType': 'poi.park',
|
466 |
-
'elementType': 'labels.text.fill',
|
467 |
-
'stylers': [
|
468 |
-
{
|
469 |
-
'color': '#616161'
|
470 |
-
}
|
471 |
-
]
|
472 |
-
},
|
473 |
-
{
|
474 |
-
'featureType': 'poi.park',
|
475 |
-
'elementType': 'labels.text.stroke',
|
476 |
-
'stylers': [
|
477 |
-
{
|
478 |
-
'color': '#1b1b1b'
|
479 |
-
}
|
480 |
-
]
|
481 |
-
},
|
482 |
-
{
|
483 |
-
'featureType': 'road',
|
484 |
-
'elementType': 'geometry.fill',
|
485 |
-
'stylers': [
|
486 |
-
{
|
487 |
-
'color': '#2c2c2c'
|
488 |
-
}
|
489 |
-
]
|
490 |
-
},
|
491 |
-
{
|
492 |
-
'featureType': 'road',
|
493 |
-
'elementType': 'labels.text.fill',
|
494 |
-
'stylers': [
|
495 |
-
{
|
496 |
-
'color': '#8a8a8a'
|
497 |
-
}
|
498 |
-
]
|
499 |
-
},
|
500 |
-
{
|
501 |
-
'featureType': 'road.arterial',
|
502 |
-
'elementType': 'geometry',
|
503 |
-
'stylers': [
|
504 |
-
{
|
505 |
-
'color': '#373737'
|
506 |
-
}
|
507 |
-
]
|
508 |
-
},
|
509 |
-
{
|
510 |
-
'featureType': 'road.highway',
|
511 |
-
'elementType': 'geometry',
|
512 |
-
'stylers': [
|
513 |
-
{
|
514 |
-
'color': '#3c3c3c'
|
515 |
-
}
|
516 |
-
]
|
517 |
-
},
|
518 |
-
{
|
519 |
-
'featureType': 'road.highway.controlled_access',
|
520 |
-
'elementType': 'geometry',
|
521 |
-
'stylers': [
|
522 |
-
{
|
523 |
-
'color': '#4e4e4e'
|
524 |
-
}
|
525 |
-
]
|
526 |
-
},
|
527 |
-
{
|
528 |
-
'featureType': 'road.local',
|
529 |
-
'elementType': 'labels.text.fill',
|
530 |
-
'stylers': [
|
531 |
-
{
|
532 |
-
'color': '#616161'
|
533 |
-
}
|
534 |
-
]
|
535 |
-
},
|
536 |
-
{
|
537 |
-
'featureType': 'transit',
|
538 |
-
'elementType': 'labels.text.fill',
|
539 |
-
'stylers': [
|
540 |
-
{
|
541 |
-
'color': '#757575'
|
542 |
-
}
|
543 |
-
]
|
544 |
-
},
|
545 |
-
{
|
546 |
-
'featureType': 'water',
|
547 |
-
'elementType': 'geometry',
|
548 |
-
'stylers': [
|
549 |
-
{
|
550 |
-
'color': '#000000'
|
551 |
-
}
|
552 |
-
]
|
553 |
-
},
|
554 |
-
{
|
555 |
-
'featureType': 'water',
|
556 |
-
'elementType': 'labels.text.fill',
|
557 |
-
'stylers': [
|
558 |
-
{
|
559 |
-
'color': '#3d3d3d'
|
560 |
-
}
|
561 |
-
]
|
562 |
-
}
|
563 |
-
],
|
564 |
-
night: [
|
565 |
-
{
|
566 |
-
'elementType': 'geometry',
|
567 |
-
'stylers': [
|
568 |
-
{
|
569 |
-
'color': '#242f3e'
|
570 |
-
}
|
571 |
-
]
|
572 |
-
},
|
573 |
-
{
|
574 |
-
'elementType': 'labels.text.fill',
|
575 |
-
'stylers': [
|
576 |
-
{
|
577 |
-
'color': '#746855'
|
578 |
-
}
|
579 |
-
]
|
580 |
-
},
|
581 |
-
{
|
582 |
-
'elementType': 'labels.text.stroke',
|
583 |
-
'stylers': [
|
584 |
-
{
|
585 |
-
'color': '#242f3e'
|
586 |
-
}
|
587 |
-
]
|
588 |
-
},
|
589 |
-
{
|
590 |
-
'featureType': 'administrative.locality',
|
591 |
-
'elementType': 'labels.text.fill',
|
592 |
-
'stylers': [
|
593 |
-
{
|
594 |
-
'color': '#d59563'
|
595 |
-
}
|
596 |
-
]
|
597 |
-
},
|
598 |
-
{
|
599 |
-
'featureType': 'poi',
|
600 |
-
'elementType': 'labels.text.fill',
|
601 |
-
'stylers': [
|
602 |
-
{
|
603 |
-
'color': '#d59563'
|
604 |
-
}
|
605 |
-
]
|
606 |
-
},
|
607 |
-
{
|
608 |
-
'featureType': 'poi.park',
|
609 |
-
'elementType': 'geometry',
|
610 |
-
'stylers': [
|
611 |
-
{
|
612 |
-
'color': '#263c3f'
|
613 |
-
}
|
614 |
-
]
|
615 |
-
},
|
616 |
-
{
|
617 |
-
'featureType': 'poi.park',
|
618 |
-
'elementType': 'labels.text.fill',
|
619 |
-
'stylers': [
|
620 |
-
{
|
621 |
-
'color': '#6b9a76'
|
622 |
-
}
|
623 |
-
]
|
624 |
-
},
|
625 |
-
{
|
626 |
-
'featureType': 'road',
|
627 |
-
'elementType': 'geometry',
|
628 |
-
'stylers': [
|
629 |
-
{
|
630 |
-
'color': '#38414e'
|
631 |
-
}
|
632 |
-
]
|
633 |
-
},
|
634 |
-
{
|
635 |
-
'featureType': 'road',
|
636 |
-
'elementType': 'geometry.stroke',
|
637 |
-
'stylers': [
|
638 |
-
{
|
639 |
-
'color': '#212a37'
|
640 |
-
}
|
641 |
-
]
|
642 |
-
},
|
643 |
-
{
|
644 |
-
'featureType': 'road',
|
645 |
-
'elementType': 'labels.text.fill',
|
646 |
-
'stylers': [
|
647 |
-
{
|
648 |
-
'color': '#9ca5b3'
|
649 |
-
}
|
650 |
-
]
|
651 |
-
},
|
652 |
-
{
|
653 |
-
'featureType': 'road.highway',
|
654 |
-
'elementType': 'geometry',
|
655 |
-
'stylers': [
|
656 |
-
{
|
657 |
-
'color': '#746855'
|
658 |
-
}
|
659 |
-
]
|
660 |
-
},
|
661 |
-
{
|
662 |
-
'featureType': 'road.highway',
|
663 |
-
'elementType': 'geometry.stroke',
|
664 |
-
'stylers': [
|
665 |
-
{
|
666 |
-
'color': '#1f2835'
|
667 |
-
}
|
668 |
-
]
|
669 |
-
},
|
670 |
-
{
|
671 |
-
'featureType': 'road.highway',
|
672 |
-
'elementType': 'labels.text.fill',
|
673 |
-
'stylers': [
|
674 |
-
{
|
675 |
-
'color': '#f3d19c'
|
676 |
-
}
|
677 |
-
]
|
678 |
-
},
|
679 |
-
{
|
680 |
-
'featureType': 'transit',
|
681 |
-
'elementType': 'geometry',
|
682 |
-
'stylers': [
|
683 |
-
{
|
684 |
-
'color': '#2f3948'
|
685 |
-
}
|
686 |
-
]
|
687 |
-
},
|
688 |
-
{
|
689 |
-
'featureType': 'transit.station',
|
690 |
-
'elementType': 'labels.text.fill',
|
691 |
-
'stylers': [
|
692 |
-
{
|
693 |
-
'color': '#d59563'
|
694 |
-
}
|
695 |
-
]
|
696 |
-
},
|
697 |
-
{
|
698 |
-
'featureType': 'water',
|
699 |
-
'elementType': 'geometry',
|
700 |
-
'stylers': [
|
701 |
-
{
|
702 |
-
'color': '#17263c'
|
703 |
-
}
|
704 |
-
]
|
705 |
-
},
|
706 |
-
{
|
707 |
-
'featureType': 'water',
|
708 |
-
'elementType': 'labels.text.fill',
|
709 |
-
'stylers': [
|
710 |
-
{
|
711 |
-
'color': '#515c6d'
|
712 |
-
}
|
713 |
-
]
|
714 |
-
},
|
715 |
-
{
|
716 |
-
'featureType': 'water',
|
717 |
-
'elementType': 'labels.text.stroke',
|
718 |
-
'stylers': [
|
719 |
-
{
|
720 |
-
'color': '#17263c'
|
721 |
-
}
|
722 |
-
]
|
723 |
-
}
|
724 |
-
],
|
725 |
-
aubergine: [
|
726 |
-
{
|
727 |
-
'elementType': 'geometry',
|
728 |
-
'stylers': [
|
729 |
-
{
|
730 |
-
'color': '#1d2c4d'
|
731 |
-
}
|
732 |
-
]
|
733 |
-
},
|
734 |
-
{
|
735 |
-
'elementType': 'labels.text.fill',
|
736 |
-
'stylers': [
|
737 |
-
{
|
738 |
-
'color': '#8ec3b9'
|
739 |
-
}
|
740 |
-
]
|
741 |
-
},
|
742 |
-
{
|
743 |
-
'elementType': 'labels.text.stroke',
|
744 |
-
'stylers': [
|
745 |
-
{
|
746 |
-
'color': '#1a3646'
|
747 |
-
}
|
748 |
-
]
|
749 |
-
},
|
750 |
-
{
|
751 |
-
'featureType': 'administrative.country',
|
752 |
-
'elementType': 'geometry.stroke',
|
753 |
-
'stylers': [
|
754 |
-
{
|
755 |
-
'color': '#4b6878'
|
756 |
-
}
|
757 |
-
]
|
758 |
-
},
|
759 |
-
{
|
760 |
-
'featureType': 'administrative.land_parcel',
|
761 |
-
'elementType': 'labels.text.fill',
|
762 |
-
'stylers': [
|
763 |
-
{
|
764 |
-
'color': '#64779e'
|
765 |
-
}
|
766 |
-
]
|
767 |
-
},
|
768 |
-
{
|
769 |
-
'featureType': 'administrative.province',
|
770 |
-
'elementType': 'geometry.stroke',
|
771 |
-
'stylers': [
|
772 |
-
{
|
773 |
-
'color': '#4b6878'
|
774 |
-
}
|
775 |
-
]
|
776 |
-
},
|
777 |
-
{
|
778 |
-
'featureType': 'landscape.man_made',
|
779 |
-
'elementType': 'geometry.stroke',
|
780 |
-
'stylers': [
|
781 |
-
{
|
782 |
-
'color': '#334e87'
|
783 |
-
}
|
784 |
-
]
|
785 |
-
},
|
786 |
-
{
|
787 |
-
'featureType': 'landscape.natural',
|
788 |
-
'elementType': 'geometry',
|
789 |
-
'stylers': [
|
790 |
-
{
|
791 |
-
'color': '#023e58'
|
792 |
-
}
|
793 |
-
]
|
794 |
-
},
|
795 |
-
{
|
796 |
-
'featureType': 'poi',
|
797 |
-
'elementType': 'geometry',
|
798 |
-
'stylers': [
|
799 |
-
{
|
800 |
-
'color': '#283d6a'
|
801 |
-
}
|
802 |
-
]
|
803 |
-
},
|
804 |
-
{
|
805 |
-
'featureType': 'poi',
|
806 |
-
'elementType': 'labels.text.fill',
|
807 |
-
'stylers': [
|
808 |
-
{
|
809 |
-
'color': '#6f9ba5'
|
810 |
-
}
|
811 |
-
]
|
812 |
-
},
|
813 |
-
{
|
814 |
-
'featureType': 'poi',
|
815 |
-
'elementType': 'labels.text.stroke',
|
816 |
-
'stylers': [
|
817 |
-
{
|
818 |
-
'color': '#1d2c4d'
|
819 |
-
}
|
820 |
-
]
|
821 |
-
},
|
822 |
-
{
|
823 |
-
'featureType': 'poi.park',
|
824 |
-
'elementType': 'geometry.fill',
|
825 |
-
'stylers': [
|
826 |
-
{
|
827 |
-
'color': '#023e58'
|
828 |
-
}
|
829 |
-
]
|
830 |
-
},
|
831 |
-
{
|
832 |
-
'featureType': 'poi.park',
|
833 |
-
'elementType': 'labels.text.fill',
|
834 |
-
'stylers': [
|
835 |
-
{
|
836 |
-
'color': '#3C7680'
|
837 |
-
}
|
838 |
-
]
|
839 |
-
},
|
840 |
-
{
|
841 |
-
'featureType': 'road',
|
842 |
-
'elementType': 'geometry',
|
843 |
-
'stylers': [
|
844 |
-
{
|
845 |
-
'color': '#304a7d'
|
846 |
-
}
|
847 |
-
]
|
848 |
-
},
|
849 |
-
{
|
850 |
-
'featureType': 'road',
|
851 |
-
'elementType': 'labels.text.fill',
|
852 |
-
'stylers': [
|
853 |
-
{
|
854 |
-
'color': '#98a5be'
|
855 |
-
}
|
856 |
-
]
|
857 |
-
},
|
858 |
-
{
|
859 |
-
'featureType': 'road',
|
860 |
-
'elementType': 'labels.text.stroke',
|
861 |
-
'stylers': [
|
862 |
-
{
|
863 |
-
'color': '#1d2c4d'
|
864 |
-
}
|
865 |
-
]
|
866 |
-
},
|
867 |
-
{
|
868 |
-
'featureType': 'road.highway',
|
869 |
-
'elementType': 'geometry',
|
870 |
-
'stylers': [
|
871 |
-
{
|
872 |
-
'color': '#2c6675'
|
873 |
-
}
|
874 |
-
]
|
875 |
-
},
|
876 |
-
{
|
877 |
-
'featureType': 'road.highway',
|
878 |
-
'elementType': 'geometry.stroke',
|
879 |
-
'stylers': [
|
880 |
-
{
|
881 |
-
'color': '#255763'
|
882 |
-
}
|
883 |
-
]
|
884 |
-
},
|
885 |
-
{
|
886 |
-
'featureType': 'road.highway',
|
887 |
-
'elementType': 'labels.text.fill',
|
888 |
-
'stylers': [
|
889 |
-
{
|
890 |
-
'color': '#b0d5ce'
|
891 |
-
}
|
892 |
-
]
|
893 |
-
},
|
894 |
-
{
|
895 |
-
'featureType': 'road.highway',
|
896 |
-
'elementType': 'labels.text.stroke',
|
897 |
-
'stylers': [
|
898 |
-
{
|
899 |
-
'color': '#023e58'
|
900 |
-
}
|
901 |
-
]
|
902 |
-
},
|
903 |
-
{
|
904 |
-
'featureType': 'transit',
|
905 |
-
'elementType': 'labels.text.fill',
|
906 |
-
'stylers': [
|
907 |
-
{
|
908 |
-
'color': '#98a5be'
|
909 |
-
}
|
910 |
-
]
|
911 |
-
},
|
912 |
-
{
|
913 |
-
'featureType': 'transit',
|
914 |
-
'elementType': 'labels.text.stroke',
|
915 |
-
'stylers': [
|
916 |
-
{
|
917 |
-
'color': '#1d2c4d'
|
918 |
-
}
|
919 |
-
]
|
920 |
-
},
|
921 |
-
{
|
922 |
-
'featureType': 'transit.line',
|
923 |
-
'elementType': 'geometry.fill',
|
924 |
-
'stylers': [
|
925 |
-
{
|
926 |
-
'color': '#283d6a'
|
927 |
-
}
|
928 |
-
]
|
929 |
-
},
|
930 |
-
{
|
931 |
-
'featureType': 'transit.station',
|
932 |
-
'elementType': 'geometry',
|
933 |
-
'stylers': [
|
934 |
-
{
|
935 |
-
'color': '#3a4762'
|
936 |
-
}
|
937 |
-
]
|
938 |
-
},
|
939 |
-
{
|
940 |
-
'featureType': 'water',
|
941 |
-
'elementType': 'geometry',
|
942 |
-
'stylers': [
|
943 |
-
{
|
944 |
-
'color': '#0e1626'
|
945 |
-
}
|
946 |
-
]
|
947 |
-
},
|
948 |
-
{
|
949 |
-
'featureType': 'water',
|
950 |
-
'elementType': 'labels.text.fill',
|
951 |
-
'stylers': [
|
952 |
-
{
|
953 |
-
'color': '#4e6d70'
|
954 |
-
}
|
955 |
-
]
|
956 |
-
}
|
957 |
-
]
|
958 |
-
};
|
959 |
-
|
960 |
-
export default styles;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-blocks/src/frontend/slider/index.js
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* WordPress dependencies
|
3 |
-
*/
|
4 |
-
const { omit } = lodash;
|
5 |
-
|
6 |
-
const domReady = wp.domReady;
|
7 |
-
|
8 |
-
domReady( () => {
|
9 |
-
const sliders = document.querySelectorAll( '.wp-block-themeisle-blocks-slider' );
|
10 |
-
sliders.forEach( slider => {
|
11 |
-
const options = omit({ ...slider.dataset }, [ 'autoplay' ]);
|
12 |
-
Object.keys( options ).map( option => options[option] = Number( options[option]) );
|
13 |
-
new Glide( `#${ slider.id }`, {
|
14 |
-
type: 'carousel',
|
15 |
-
keyboard: true,
|
16 |
-
autoplay: 'true' === slider.dataset.autoplay ? 2000 : false,
|
17 |
-
hoverpause: true,
|
18 |
-
...options,
|
19 |
-
breakpoints: {
|
20 |
-
800: {
|
21 |
-
perView: 1,
|
22 |
-
peek: 0,
|
23 |
-
gap: 0
|
24 |
-
}
|
25 |
-
}
|
26 |
-
}).mount();
|
27 |
-
});
|
28 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-blocks/webpack.config.js
DELETED
@@ -1,108 +0,0 @@
|
|
1 |
-
const webpack = require( 'webpack' );
|
2 |
-
const NODE_ENV = process.env.NODE_ENV || 'development';
|
3 |
-
const glob = require( 'glob' );
|
4 |
-
const path = require( 'path' );
|
5 |
-
const MiniCssExtractPlugin = require( 'mini-css-extract-plugin' );
|
6 |
-
const { CleanWebpackPlugin } = require( 'clean-webpack-plugin' );
|
7 |
-
|
8 |
-
module.exports = {
|
9 |
-
mode: NODE_ENV,
|
10 |
-
entry: {
|
11 |
-
blocks: [
|
12 |
-
'./src/index.js',
|
13 |
-
'./src/plugins/registerPlugin.js',
|
14 |
-
...glob.sync( './src/blocks/**/index.js' )
|
15 |
-
],
|
16 |
-
maps: [
|
17 |
-
...glob.sync( './src/frontend/google-map/index.js' )
|
18 |
-
],
|
19 |
-
slider: [
|
20 |
-
...glob.sync( './src/frontend/slider/index.js' )
|
21 |
-
]
|
22 |
-
},
|
23 |
-
externals: {
|
24 |
-
'react': 'React',
|
25 |
-
'react-dom': 'ReactDOM'
|
26 |
-
},
|
27 |
-
output: {
|
28 |
-
path: path.resolve( __dirname, 'build' ),
|
29 |
-
filename: '[name].js',
|
30 |
-
chunkFilename: 'chunk-[name].js',
|
31 |
-
jsonpFunction: 'tiOtterWebpackJsonp'
|
32 |
-
},
|
33 |
-
module: {
|
34 |
-
rules: [
|
35 |
-
{
|
36 |
-
test: /.js?$/,
|
37 |
-
use: [ {
|
38 |
-
loader: 'babel-loader',
|
39 |
-
options: {
|
40 |
-
presets: [ '@babel/preset-env' ],
|
41 |
-
plugins: [
|
42 |
-
'@babel/plugin-transform-async-to-generator',
|
43 |
-
'@babel/plugin-proposal-object-rest-spread',
|
44 |
-
'@babel/plugin-syntax-dynamic-import',
|
45 |
-
[
|
46 |
-
'@babel/plugin-transform-react-jsx', {
|
47 |
-
pragma: 'wp.element.createElement',
|
48 |
-
pragmaFrag: 'wp.element.Fragment'
|
49 |
-
}
|
50 |
-
]
|
51 |
-
]
|
52 |
-
}
|
53 |
-
},
|
54 |
-
'eslint-loader' ]
|
55 |
-
},
|
56 |
-
{
|
57 |
-
test: /\.(css|scss)$/,
|
58 |
-
use: [ {
|
59 |
-
loader: MiniCssExtractPlugin.loader
|
60 |
-
},
|
61 |
-
'css-loader',
|
62 |
-
{
|
63 |
-
loader: 'postcss-loader',
|
64 |
-
options: {
|
65 |
-
plugins: [
|
66 |
-
require( 'autoprefixer' )
|
67 |
-
]
|
68 |
-
}
|
69 |
-
},
|
70 |
-
{
|
71 |
-
loader: 'sass-loader',
|
72 |
-
query: {
|
73 |
-
outputStyle:
|
74 |
-
'production' === process.env.NODE_ENV ? 'compressed' : 'nested'
|
75 |
-
}
|
76 |
-
} ]
|
77 |
-
}
|
78 |
-
]
|
79 |
-
},
|
80 |
-
optimization: {
|
81 |
-
splitChunks: {
|
82 |
-
cacheGroups: {
|
83 |
-
vendor: {
|
84 |
-
name: 'vendor',
|
85 |
-
test: /[\\/]node_modules[\\/]/,
|
86 |
-
chunks: 'all',
|
87 |
-
reuseExistingChunk: true
|
88 |
-
},
|
89 |
-
editorStyles: {
|
90 |
-
name: 'vendor',
|
91 |
-
test: /editor\.scss$/,
|
92 |
-
chunks: 'all',
|
93 |
-
enforce: true
|
94 |
-
}
|
95 |
-
}
|
96 |
-
}
|
97 |
-
},
|
98 |
-
plugins: [
|
99 |
-
new webpack.DefinePlugin({
|
100 |
-
'process.env.NODE_ENV': JSON.stringify( NODE_ENV )
|
101 |
-
}),
|
102 |
-
new MiniCssExtractPlugin({
|
103 |
-
filename: 'style.css',
|
104 |
-
chunkFilename: 'edit-blocks.css'
|
105 |
-
}),
|
106 |
-
new CleanWebpackPlugin()
|
107 |
-
]
|
108 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/gutenberg-css/webpack.config.js
DELETED
@@ -1,70 +0,0 @@
|
|
1 |
-
const webpack = require( 'webpack' );
|
2 |
-
const NODE_ENV = process.env.NODE_ENV || 'development';
|
3 |
-
const MiniCssExtractPlugin = require( 'mini-css-extract-plugin' );
|
4 |
-
|
5 |
-
module.exports = {
|
6 |
-
mode: NODE_ENV,
|
7 |
-
entry: './src/index.js',
|
8 |
-
externals: {
|
9 |
-
'react': 'React',
|
10 |
-
'react-dom': 'ReactDOM'
|
11 |
-
},
|
12 |
-
output: {
|
13 |
-
path: __dirname,
|
14 |
-
filename: './build/build.js'
|
15 |
-
},
|
16 |
-
module: {
|
17 |
-
rules: [
|
18 |
-
{
|
19 |
-
test: /.js?$/,
|
20 |
-
use: [ {
|
21 |
-
loader: 'babel-loader',
|
22 |
-
options: {
|
23 |
-
presets: [ '@babel/preset-env' ],
|
24 |
-
plugins: [
|
25 |
-
'@babel/plugin-transform-async-to-generator',
|
26 |
-
'@babel/plugin-proposal-object-rest-spread',
|
27 |
-
[
|
28 |
-
'@babel/plugin-transform-react-jsx', {
|
29 |
-
'pragma': 'wp.element.createElement'
|
30 |
-
}
|
31 |
-
]
|
32 |
-
]
|
33 |
-
}
|
34 |
-
},
|
35 |
-
'eslint-loader' ],
|
36 |
-
exclude: /node_modules/
|
37 |
-
},
|
38 |
-
{
|
39 |
-
test: /\.(css|scss)$/,
|
40 |
-
use: [ {
|
41 |
-
loader: MiniCssExtractPlugin.loader
|
42 |
-
},
|
43 |
-
'css-loader',
|
44 |
-
{
|
45 |
-
loader: 'postcss-loader',
|
46 |
-
options: {
|
47 |
-
plugins: [
|
48 |
-
require( 'autoprefixer' )
|
49 |
-
]
|
50 |
-
}
|
51 |
-
},
|
52 |
-
{
|
53 |
-
loader: 'sass-loader',
|
54 |
-
query: {
|
55 |
-
outputStyle:
|
56 |
-
'production' === process.env.NODE_ENV ? 'compressed' : 'nested'
|
57 |
-
}
|
58 |
-
} ]
|
59 |
-
}
|
60 |
-
]
|
61 |
-
},
|
62 |
-
plugins: [
|
63 |
-
new webpack.DefinePlugin({
|
64 |
-
'process.env.NODE_ENV': JSON.stringify( NODE_ENV )
|
65 |
-
}),
|
66 |
-
new MiniCssExtractPlugin({
|
67 |
-
filename: './build/build.css'
|
68 |
-
})
|
69 |
-
]
|
70 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
##### [Version 3.1.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.8...v3.1.9) (2020-02-24)
|
2 |
|
3 |
* Add integration with GitHub actions
|
1 |
+
##### [Version 3.2.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.1...v3.2.2) (2020-03-13)
|
2 |
+
|
3 |
+
* improve notice dismiss mechanism
|
4 |
+
|
5 |
+
##### [Version 3.2.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.0...v3.2.1) (2020-03-05)
|
6 |
+
|
7 |
+
Fix rollback call for private products
|
8 |
+
|
9 |
+
#### [Version 3.2.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.9...v3.2.0) (2020-03-04)
|
10 |
+
|
11 |
+
* adds license activation/deactivation handlers for wp cli
|
12 |
+
* adds compatibility with the newest license API
|
13 |
+
|
14 |
##### [Version 3.1.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.8...v3.1.9) (2020-02-24)
|
15 |
|
16 |
* Add integration with GitHub actions
|
vendor/codeinwp/themeisle-sdk/load.php
CHANGED
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
14 |
return;
|
15 |
}
|
16 |
// Current SDK version and path.
|
17 |
-
$themeisle_sdk_version = '3.
|
18 |
$themeisle_sdk_path = dirname( __FILE__ );
|
19 |
|
20 |
global $themeisle_sdk_max_version;
|
14 |
return;
|
15 |
}
|
16 |
// Current SDK version and path.
|
17 |
+
$themeisle_sdk_version = '3.2.2';
|
18 |
$themeisle_sdk_path = dirname( __FILE__ );
|
19 |
|
20 |
global $themeisle_sdk_max_version;
|
vendor/codeinwp/themeisle-sdk/src/Common/Abstract_module.php
DELETED
@@ -1,66 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The abstract class for module definition.
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Loader
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 3.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Common;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Product;
|
15 |
-
|
16 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
17 |
-
exit;
|
18 |
-
}
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Class Abstract_Module.
|
22 |
-
*
|
23 |
-
* @package ThemeisleSDK\Common
|
24 |
-
*/
|
25 |
-
abstract class Abstract_Module {
|
26 |
-
/**
|
27 |
-
* Product which use the module.
|
28 |
-
*
|
29 |
-
* @var Product $product Product object.
|
30 |
-
*/
|
31 |
-
protected $product = null;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Can load the module for the selected product.
|
35 |
-
*
|
36 |
-
* @param Product $product Product data.
|
37 |
-
*
|
38 |
-
* @return bool Should load module?
|
39 |
-
*/
|
40 |
-
public abstract function can_load( $product );
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Bootstrap the module.
|
44 |
-
*
|
45 |
-
* @param Product $product Product object.
|
46 |
-
*/
|
47 |
-
public abstract function load( $product );
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Check if the product is from partner.
|
51 |
-
*
|
52 |
-
* @param Product $product Product data.
|
53 |
-
*
|
54 |
-
* @return bool Is product from partner.
|
55 |
-
*/
|
56 |
-
public function is_from_partner( $product ) {
|
57 |
-
|
58 |
-
foreach ( Module_Factory::$domains as $partner_domain ) {
|
59 |
-
if ( strpos( $product->get_store_url(), $partner_domain ) !== false ) {
|
60 |
-
return true;
|
61 |
-
}
|
62 |
-
}
|
63 |
-
|
64 |
-
return array_key_exists( $product->get_slug(), Module_Factory::$slugs );
|
65 |
-
}
|
66 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Common/Module_factory.php
DELETED
@@ -1,108 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The module factory class.
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Loader
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 3.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Common;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Product;
|
15 |
-
|
16 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
17 |
-
exit;
|
18 |
-
}
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Class Job_Factory
|
22 |
-
*
|
23 |
-
* @package ThemeisleSDK\Common
|
24 |
-
*/
|
25 |
-
class Module_Factory {
|
26 |
-
/**
|
27 |
-
* Partners slugs.
|
28 |
-
*
|
29 |
-
* @var array $SLUGS Partners product slugs.
|
30 |
-
*/
|
31 |
-
public static $slugs = [
|
32 |
-
'zermatt' => true,
|
33 |
-
'neto' => true,
|
34 |
-
'olsen' => true,
|
35 |
-
'benson' => true,
|
36 |
-
'romero' => true,
|
37 |
-
'carmack' => true,
|
38 |
-
'puzzle' => true,
|
39 |
-
'broadsheet' => true,
|
40 |
-
'girlywp' => true,
|
41 |
-
'veggie' => true,
|
42 |
-
'zeko' => true,
|
43 |
-
'maishawp' => true,
|
44 |
-
'didi' => true,
|
45 |
-
'liber' => true,
|
46 |
-
'medicpress-pt' => true,
|
47 |
-
'adrenaline-pt' => true,
|
48 |
-
'consultpress-pt' => true,
|
49 |
-
'legalpress-pt' => true,
|
50 |
-
'gympress-pt' => true,
|
51 |
-
'readable-pt' => true,
|
52 |
-
'bolts-pt' => true,
|
53 |
-
];
|
54 |
-
/**
|
55 |
-
* Partners domains.
|
56 |
-
*
|
57 |
-
* @var array $DOMAINS Partners domains.
|
58 |
-
*/
|
59 |
-
public static $domains = [
|
60 |
-
'proteusthemes.com',
|
61 |
-
'anarieldesign.com',
|
62 |
-
'prothemedesign.com',
|
63 |
-
'cssigniter.com',
|
64 |
-
];
|
65 |
-
/**
|
66 |
-
* Map which contains all the modules loaded for each product.
|
67 |
-
*
|
68 |
-
* @var array Mapping array.
|
69 |
-
*/
|
70 |
-
private static $modules_attached = [];
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Load availabe modules for the selected product.
|
74 |
-
*
|
75 |
-
* @param Product $product Loaded product.
|
76 |
-
* @param array $modules List of modules.
|
77 |
-
*/
|
78 |
-
public static function attach( $product, $modules ) {
|
79 |
-
|
80 |
-
if ( ! isset( self::$modules_attached[ $product->get_slug() ] ) ) {
|
81 |
-
self::$modules_attached[ $product->get_slug() ] = [];
|
82 |
-
}
|
83 |
-
|
84 |
-
foreach ( $modules as $module ) {
|
85 |
-
$class = 'ThemeisleSDK\\Modules\\' . ucwords( $module, '_' );
|
86 |
-
/**
|
87 |
-
* Module object.
|
88 |
-
*
|
89 |
-
* @var Abstract_Module $module_object Module instance.
|
90 |
-
*/
|
91 |
-
$module_object = new $class( $product );
|
92 |
-
|
93 |
-
if ( ! $module_object->can_load( $product ) ) {
|
94 |
-
continue;
|
95 |
-
}
|
96 |
-
self::$modules_attached[ $product->get_slug() ][ $module ] = $module_object->load( $product );
|
97 |
-
}
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Products/Modules loaded map.
|
102 |
-
*
|
103 |
-
* @return array Modules map.
|
104 |
-
*/
|
105 |
-
public static function get_modules_map() {
|
106 |
-
return self::$modules_attached;
|
107 |
-
}
|
108 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Loader.php
DELETED
@@ -1,126 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The main loader class for ThemeIsle SDK
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Loader
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Common\Module_Factory;
|
15 |
-
|
16 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
17 |
-
exit;
|
18 |
-
}
|
19 |
-
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Singleton loader for ThemeIsle SDK.
|
23 |
-
*/
|
24 |
-
final class Loader {
|
25 |
-
/**
|
26 |
-
* Singleton instance.
|
27 |
-
*
|
28 |
-
* @var Loader instance The singleton instance
|
29 |
-
*/
|
30 |
-
private static $instance;
|
31 |
-
/**
|
32 |
-
* Current loader version.
|
33 |
-
*
|
34 |
-
* @var string $version The class version.
|
35 |
-
*/
|
36 |
-
private static $version = '2.0.0';
|
37 |
-
/**
|
38 |
-
* Holds registered products.
|
39 |
-
*
|
40 |
-
* @var array The products which use the SDK.
|
41 |
-
*/
|
42 |
-
private static $products = [];
|
43 |
-
/**
|
44 |
-
* Holds available modules to load.
|
45 |
-
*
|
46 |
-
* @var array The modules which SDK will be using.
|
47 |
-
*/
|
48 |
-
private static $available_modules = [
|
49 |
-
'dashboard_widget',
|
50 |
-
'rollback',
|
51 |
-
'uninstall_feedback',
|
52 |
-
'licenser',
|
53 |
-
'endpoint',
|
54 |
-
'notification',
|
55 |
-
'logger',
|
56 |
-
'translate',
|
57 |
-
'review',
|
58 |
-
'recommendation',
|
59 |
-
|
60 |
-
];
|
61 |
-
|
62 |
-
/**
|
63 |
-
* Initialize the sdk logic.
|
64 |
-
*/
|
65 |
-
public static function init() {
|
66 |
-
if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Loader ) ) {
|
67 |
-
self::$instance = new Loader();
|
68 |
-
$modules = array_merge( self::$available_modules, apply_filters( 'themeisle_sdk_modules', [] ) );
|
69 |
-
foreach ( $modules as $key => $module ) {
|
70 |
-
if ( ! class_exists( 'ThemeisleSDK\\Modules\\' . ucwords( $module, '_' ) ) ) {
|
71 |
-
unset( $modules[ $key ] );
|
72 |
-
}
|
73 |
-
}
|
74 |
-
self::$available_modules = $modules;
|
75 |
-
}
|
76 |
-
}
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Register product into SDK.
|
80 |
-
*
|
81 |
-
* @param string $base_file The product base file.
|
82 |
-
*
|
83 |
-
* @return Loader The singleton object.
|
84 |
-
*/
|
85 |
-
public static function add_product( $base_file ) {
|
86 |
-
|
87 |
-
if ( ! is_file( $base_file ) ) {
|
88 |
-
return self::$instance;
|
89 |
-
}
|
90 |
-
$product = new Product( $base_file );
|
91 |
-
|
92 |
-
Module_Factory::attach( $product, self::get_modules() );
|
93 |
-
|
94 |
-
self::$products[ $product->get_slug() ] = $product;
|
95 |
-
|
96 |
-
return self::$instance;
|
97 |
-
}
|
98 |
-
|
99 |
-
/**
|
100 |
-
* Get all registered modules by the SDK.
|
101 |
-
*
|
102 |
-
* @return array Modules available.
|
103 |
-
*/
|
104 |
-
public static function get_modules() {
|
105 |
-
return self::$available_modules;
|
106 |
-
}
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Get all products using the SDK.
|
110 |
-
*
|
111 |
-
* @return array Products available.
|
112 |
-
*/
|
113 |
-
public static function get_products() {
|
114 |
-
return self::$products;
|
115 |
-
}
|
116 |
-
|
117 |
-
/**
|
118 |
-
* Get the version of the SDK.
|
119 |
-
*
|
120 |
-
* @return string The version.
|
121 |
-
*/
|
122 |
-
public static function get_version() {
|
123 |
-
return self::$version;
|
124 |
-
}
|
125 |
-
|
126 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php
DELETED
@@ -1,466 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The blog dashboard model class for ThemeIsle SDK
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Modules
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
15 |
-
use ThemeisleSDK\Product;
|
16 |
-
|
17 |
-
// Exit if accessed directly.
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Blog dashboard widget module for ThemeIsle SDK.
|
24 |
-
*/
|
25 |
-
class Dashboard_Widget extends Abstract_Module {
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Fetched feeds items.
|
29 |
-
*
|
30 |
-
* @var array Feed items.
|
31 |
-
*/
|
32 |
-
private $items = array();
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Dashboard widget title.
|
36 |
-
*
|
37 |
-
* @var string $dashboard_name Dashboard name.
|
38 |
-
*/
|
39 |
-
private $dashboard_name = '';
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Dashboard widget feed sources.
|
43 |
-
*
|
44 |
-
* @var array $feeds Feed url.
|
45 |
-
*/
|
46 |
-
private $feeds = [];
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Should we load this module.
|
50 |
-
*
|
51 |
-
* @param Product $product Product object.
|
52 |
-
*
|
53 |
-
* @return bool
|
54 |
-
*/
|
55 |
-
public function can_load( $product ) {
|
56 |
-
if ( $this->is_from_partner( $product ) ) {
|
57 |
-
return false;
|
58 |
-
}
|
59 |
-
|
60 |
-
if ( ! apply_filters( $product->get_slug() . '_load_dashboard_widget', true ) ) {
|
61 |
-
return false;
|
62 |
-
}
|
63 |
-
|
64 |
-
return true;
|
65 |
-
}
|
66 |
-
|
67 |
-
/**
|
68 |
-
* Registers the hooks.
|
69 |
-
*
|
70 |
-
* @param Product $product Product to load.
|
71 |
-
*
|
72 |
-
* @return Dashboard_Widget Module instance.
|
73 |
-
*/
|
74 |
-
public function load( $product ) {
|
75 |
-
if ( apply_filters( 'themeisle_sdk_hide_dashboard_widget', false ) ) {
|
76 |
-
return;
|
77 |
-
}
|
78 |
-
$this->product = $product;
|
79 |
-
$this->dashboard_name = apply_filters( 'themeisle_sdk_dashboard_widget_name', 'WordPress Guides/Tutorials' );
|
80 |
-
$this->feeds = apply_filters(
|
81 |
-
'themeisle_sdk_dashboard_widget_feeds',
|
82 |
-
[
|
83 |
-
'https://themeisle.com/blog/feed',
|
84 |
-
]
|
85 |
-
);
|
86 |
-
add_action( 'wp_dashboard_setup', array( &$this, 'add_widget' ) );
|
87 |
-
add_action( 'wp_network_dashboard_setup', array( &$this, 'add_widget' ) );
|
88 |
-
add_filter( 'themeisle_sdk_recommend_plugin_or_theme', array( &$this, 'recommend_plugin_or_theme' ) );
|
89 |
-
|
90 |
-
return $this;
|
91 |
-
}
|
92 |
-
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Add widget to the dashboard
|
96 |
-
*
|
97 |
-
* @return string|void
|
98 |
-
*/
|
99 |
-
function add_widget() {
|
100 |
-
global $wp_meta_boxes;
|
101 |
-
if ( isset( $wp_meta_boxes['dashboard']['normal']['core']['themeisle'] ) ) {
|
102 |
-
return;
|
103 |
-
}
|
104 |
-
wp_add_dashboard_widget(
|
105 |
-
'themeisle',
|
106 |
-
$this->dashboard_name,
|
107 |
-
[
|
108 |
-
$this,
|
109 |
-
'render_dashboard_widget',
|
110 |
-
]
|
111 |
-
);
|
112 |
-
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* Render widget content
|
116 |
-
*/
|
117 |
-
function render_dashboard_widget() {
|
118 |
-
$this->setup_feeds();
|
119 |
-
if ( empty( $this->items ) || ! is_array( $this->items ) ) {
|
120 |
-
return;
|
121 |
-
}
|
122 |
-
?>
|
123 |
-
<style type="text/css">
|
124 |
-
#themeisle ul li.ti-dw-recommend-item {
|
125 |
-
padding-left: 7px;
|
126 |
-
border-top: 1px solid #eee;
|
127 |
-
margin-bottom: 0px;
|
128 |
-
padding-top: 6px;
|
129 |
-
}
|
130 |
-
|
131 |
-
#themeisle h2.hndle {
|
132 |
-
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABbCAMAAADncTNAAAAAtFBMVEVHcEyAgIB/f3+xsbGgoaGBgYGCgoKKioqAgIC1tbW5ubnFx8iAgIDU1taBgYGCgoKAgIC0tLXW19jW2NiAgIC3uLiBgYHLzMy4uLhycnLW19d/f3/T1NW0tLTX19mVlZWvr6+BgYHl5eWKiottbW5JSUnW2Nm5ubnh4eHT1NWVlZVjY2N4eHh9fX6pqqq+v79PT0/39/fu7u7Nzc7Z2ttYWFgBAQHDw8P////JysoZGRk0NTZqJc/sAAAAIXRSTlMA0FL7/oEnEPL6eibivm9gwJya76/enFq2CXI+2lFAyM8GATmPAAADj0lEQVR4Xu2YaW/iOhSGAwRCWDosnXa6znjJvm8svf//f12TuARyhiR2pfnUR6gSEnr0+uT4xK7yRb755pvhHePli5K7Bfpkuhoq8ozRJdMH+WWha6Z3sqYparCSLRJqspjImVbANJU03cNMMpofAwQZCGsmpQYyFvVM0Q00OQ9koMl5IPcCoro+RA1Dt2Ea9n9eZ0+YHJLkgIlkDywQx00wCTyaReiKH8LbNU9ybJOdkchV6QFxyCFLbVvdfaREqgUWg/tx2UbqIcK2Hex2TdGLwFTjIj3XP3YfCZFsb23KRZn/3263oymSFI0/a5S4PqUBjoBIJBDjeEhCN0wxQSRybIxtJ3K5SGzuE/vAwIQc8ZmMMJFAIM4oikZItfEFtorGgoE43FObwqHU68OtPCnOz8KZ2Jbl5LgkSW0Tc7YyIz/EFWmS4jMbiZU5mJOmKRaJpKGGyLZtDJh3iyaNUu/3+xyKnrtFL71EG+FTiMpENhQtxUQ8kSOXCIr2tnCNhg/gTX0SHYFp0t7TCwQZ7U841yoHrW6rtGroUwTWVnLMssxx+H4bgZcSOFf5MYx0Ae8FghomMDyC2EBNImBywPkNTDNqGLQpIg2TjUNU8tBy9DQMo0DAZF16rAi7vJAtFTIYFAHUc6hIRW6OuOhJgaCSwmDEAYK4oa7ro+qIEyJU/US7KTJKPNSFT9tFgVFBu0SF1y7yjX4masRA9Da7EFGj28R/BkQz6xGIOurkx38T/bKs9Uk8aIiMwm/Jw0VP1yLrJwt13xAxvABBgsK4KWLov35DkRF7ZaqgzuZ7MQ8MOntmVYyAqKTwaICKqvSUFnVccMN5sziEP/5+xGDTahbH5Q3ZB76zr8fI+nJtvUUU3t3ml5GKviK/npCg3CGodnuJ4JVkfRFJYGVDBZrqKnn9RLf+CzDTS5PaN5J38+auzX4ykU4Qoj0rdKfcYs5ijfo9OL/uRUgZyQr7NCWtWwiUSLc4arfJa7lpszTA1OJZAQ8w8dXFrR5YHzCWSnS3pZ18tOi4Ps4vl/c7i/6qomjRecN+UubrPyPGn/VEMU3T0UFHkaPzpgjxmJsnjmrtionlMDZiog0TsY/DPtn8SXtlBvbtxKtwopy7lqW3smQO+yoGE1Uu55GJ3pmI8ygoejZNnqj0vnIRCyTKfLstRdtStGQi09myUsvwvlkuzSUXbV+Xz5ryBebV33fln/A/moud69FZiEYAAAAASUVORK5CYII=');
|
133 |
-
background-repeat: no-repeat;
|
134 |
-
background-position: 92% 50%;
|
135 |
-
background-size: 25px;
|
136 |
-
}
|
137 |
-
|
138 |
-
#themeisle .inside {
|
139 |
-
padding: 0;
|
140 |
-
}
|
141 |
-
|
142 |
-
.ti-feed-list {
|
143 |
-
padding: 0 12px 5px;
|
144 |
-
margin-bottom: 10px;
|
145 |
-
border-bottom: 1px solid #eee;
|
146 |
-
}
|
147 |
-
|
148 |
-
.ti-dw-feed-item a {
|
149 |
-
display: flex;
|
150 |
-
align-items: center;
|
151 |
-
margin-bottom: 5px;
|
152 |
-
padding: 5px;
|
153 |
-
transition: .2s ease;
|
154 |
-
border-radius: 3px;
|
155 |
-
}
|
156 |
-
|
157 |
-
.ti-dw-feed-item a:hover {
|
158 |
-
background-color: #f8f8f8;
|
159 |
-
}
|
160 |
-
|
161 |
-
.ti-dw-feed-item a:hover .ti-dw-date-container {
|
162 |
-
opacity: .9;
|
163 |
-
}
|
164 |
-
|
165 |
-
.ti-dw-feed-item .ti-dw-month-container {
|
166 |
-
margin-top: -5px;
|
167 |
-
text-transform: uppercase;
|
168 |
-
font-size: 10px;
|
169 |
-
letter-spacing: 1px;
|
170 |
-
font-weight: 700;
|
171 |
-
}
|
172 |
-
|
173 |
-
.ti-dw-feed-item .ti-dw-date-container {
|
174 |
-
border-radius: 3px;
|
175 |
-
transition: .2s ease;
|
176 |
-
min-height: 35px;
|
177 |
-
margin-right: 5px;
|
178 |
-
min-width: 35px;
|
179 |
-
text-align: center;
|
180 |
-
border: 1px solid #2a6f97;
|
181 |
-
color: #fff;
|
182 |
-
background: #2ea2cc;
|
183 |
-
display: flex;
|
184 |
-
flex-direction: column;
|
185 |
-
justify-content: center;
|
186 |
-
}
|
187 |
-
|
188 |
-
.ti-dw-footer {
|
189 |
-
padding: 0 12px 5px;
|
190 |
-
text-align: center;
|
191 |
-
}
|
192 |
-
|
193 |
-
.ti-dw-recommend-item {
|
194 |
-
display: block;
|
195 |
-
}
|
196 |
-
|
197 |
-
.ti-dw-recommend-item span {
|
198 |
-
color: #72777c;
|
199 |
-
}
|
200 |
-
|
201 |
-
.ti-dw-powered-by {
|
202 |
-
font-size: 11px;
|
203 |
-
margin-top: 3px;
|
204 |
-
display: block;
|
205 |
-
color: #72777c;
|
206 |
-
}
|
207 |
-
|
208 |
-
.ti-dw-powered-by span {
|
209 |
-
font-weight: 600;
|
210 |
-
}
|
211 |
-
|
212 |
-
</style>
|
213 |
-
<?php do_action( 'themeisle_sdk_dashboard_widget_before', $this->product ); ?>
|
214 |
-
|
215 |
-
<ul class="ti-feed-list">
|
216 |
-
<?php
|
217 |
-
|
218 |
-
foreach ( $this->items as $item ) {
|
219 |
-
?>
|
220 |
-
<li class="ti-dw-feed-item">
|
221 |
-
<a href="
|
222 |
-
<?php
|
223 |
-
echo add_query_arg(
|
224 |
-
array(
|
225 |
-
'utm_source' => 'wpadmin',
|
226 |
-
'utm_campaign' => 'feed',
|
227 |
-
'utm_medium' => 'dashboard_widget',
|
228 |
-
),
|
229 |
-
$item['link']
|
230 |
-
);
|
231 |
-
?>
|
232 |
-
" target="_blank">
|
233 |
-
<span class="ti-dw-date-container"><span
|
234 |
-
class="ti-dw-day-container"><?php echo date( 'd', $item['date'] ); ?></span> <span
|
235 |
-
class="ti-dw-month-container"><?php echo substr( date( 'M', $item['date'] ), 0, 3 ); ?></span></span><?php echo $item['title']; ?>
|
236 |
-
</a>
|
237 |
-
</li>
|
238 |
-
<?php
|
239 |
-
}
|
240 |
-
?>
|
241 |
-
</ul>
|
242 |
-
<?php
|
243 |
-
$recommend = apply_filters( 'themeisle_sdk_recommend_plugin_or_theme', array() );
|
244 |
-
if ( ! is_array( $recommend ) || empty( $recommend ) ) {
|
245 |
-
return;
|
246 |
-
}
|
247 |
-
|
248 |
-
$type = $recommend['type'];
|
249 |
-
|
250 |
-
if ( ( 'theme' === $type && ! current_user_can( 'install_themes' ) ) ) {
|
251 |
-
return;
|
252 |
-
}
|
253 |
-
if ( ( 'plugin' === $type && ! current_user_can( 'install_plugins' ) ) ) {
|
254 |
-
return;
|
255 |
-
}
|
256 |
-
|
257 |
-
add_thickbox();
|
258 |
-
$url = add_query_arg(
|
259 |
-
[
|
260 |
-
'theme' => $recommend['slug'],
|
261 |
-
],
|
262 |
-
network_admin_url( 'theme-install.php' )
|
263 |
-
);
|
264 |
-
|
265 |
-
if ( 'plugin' === $type ) {
|
266 |
-
|
267 |
-
$url = add_query_arg(
|
268 |
-
array(
|
269 |
-
'tab' => 'plugin-information',
|
270 |
-
'plugin' => $recommend['slug'],
|
271 |
-
),
|
272 |
-
network_admin_url( 'plugin-install.php' )
|
273 |
-
);
|
274 |
-
}
|
275 |
-
?>
|
276 |
-
<div class="ti-dw-footer">
|
277 |
-
<span class="ti-dw-recommend-item ">
|
278 |
-
<span class="ti-dw-recommend"><?php echo apply_filters( 'themeisle_sdk_dashboard_popular_label', sprintf( 'Popular %s', ucwords( $type ) ) ); ?>
|
279 |
-
: </span>
|
280 |
-
<?php
|
281 |
-
echo trim(
|
282 |
-
str_replace(
|
283 |
-
array(
|
284 |
-
'lite',
|
285 |
-
'Lite',
|
286 |
-
'(Lite)',
|
287 |
-
'(lite)',
|
288 |
-
),
|
289 |
-
'',
|
290 |
-
$recommend['name']
|
291 |
-
)
|
292 |
-
);
|
293 |
-
?>
|
294 |
-
(<a class="thickbox open-plugin-details-modal"
|
295 |
-
href="<?php echo $url . '&TB_iframe=true&width=600&height=500'; ?>"><?php echo apply_filters( 'themeisle_sdk_dashboard_install_label', 'Install' ); ?></a>)
|
296 |
-
</span>
|
297 |
-
<span class="ti-dw-powered-by"><span><?php echo apply_filters( 'themeisle_sdk_dashboard_widget_powered_by', esc_attr( sprintf( 'Powered by %s', $this->product->get_friendly_name() ) ) ); ?></span></span>
|
298 |
-
</div>
|
299 |
-
|
300 |
-
<?php
|
301 |
-
|
302 |
-
}
|
303 |
-
|
304 |
-
/**
|
305 |
-
* Setup feed items.
|
306 |
-
*/
|
307 |
-
private function setup_feeds() {
|
308 |
-
if ( false === ( $items_normalized = get_transient( 'themeisle_sdk_feed_items' ) ) ) {
|
309 |
-
// Load SimplePie Instance.
|
310 |
-
$feed = fetch_feed( $this->feeds );
|
311 |
-
// TODO report error when is an error loading the feed.
|
312 |
-
if ( is_wp_error( $feed ) ) {
|
313 |
-
return;
|
314 |
-
}
|
315 |
-
|
316 |
-
$items = $feed->get_items( 0, 5 );
|
317 |
-
foreach ( (array) $items as $item ) {
|
318 |
-
$items_normalized[] = array(
|
319 |
-
'title' => $item->get_title(),
|
320 |
-
'date' => $item->get_date( 'U' ),
|
321 |
-
'link' => $item->get_permalink(),
|
322 |
-
);
|
323 |
-
}
|
324 |
-
set_transient( 'themeisle_sdk_feed_items', $items_normalized, 48 * HOUR_IN_SECONDS );
|
325 |
-
}
|
326 |
-
$this->items = $items_normalized;
|
327 |
-
}
|
328 |
-
|
329 |
-
/**
|
330 |
-
* Either the current product is installed or not.
|
331 |
-
*
|
332 |
-
* @param array $val The current recommended product.
|
333 |
-
*
|
334 |
-
* @return bool Either we should exclude the plugin or not.
|
335 |
-
*/
|
336 |
-
public function remove_current_products( $val ) {
|
337 |
-
if ( 'theme' === $val['type'] ) {
|
338 |
-
$exist = wp_get_theme( $val['slug'] );
|
339 |
-
|
340 |
-
return ! $exist->exists();
|
341 |
-
} else {
|
342 |
-
$all_plugins = array_keys( get_plugins() );
|
343 |
-
foreach ( $all_plugins as $slug ) {
|
344 |
-
if ( strpos( $slug, $val['slug'] ) !== false ) {
|
345 |
-
return false;
|
346 |
-
}
|
347 |
-
}
|
348 |
-
|
349 |
-
return true;
|
350 |
-
}
|
351 |
-
}
|
352 |
-
|
353 |
-
/**
|
354 |
-
* Contact the API and fetch the recommended plugins/themes
|
355 |
-
*/
|
356 |
-
function recommend_plugin_or_theme() {
|
357 |
-
$products = $this->get_product_from_api();
|
358 |
-
if ( ! is_array( $products ) ) {
|
359 |
-
$products = array();
|
360 |
-
}
|
361 |
-
$products = array_filter( $products, array( $this, 'remove_current_products' ) );
|
362 |
-
$products = array_merge( $products );
|
363 |
-
if ( count( $products ) > 1 ) {
|
364 |
-
shuffle( $products );
|
365 |
-
$products = array_slice( $products, 0, 1 );
|
366 |
-
}
|
367 |
-
$to_recommend = isset( $products[0] ) ? $products[0] : $products;
|
368 |
-
|
369 |
-
return $to_recommend;
|
370 |
-
}
|
371 |
-
|
372 |
-
/**
|
373 |
-
* Fetch products from the recomended section.
|
374 |
-
*
|
375 |
-
* @return array|mixed The list of products to use in recomended section.
|
376 |
-
*/
|
377 |
-
function get_product_from_api() {
|
378 |
-
if ( false === ( $products = get_transient( 'themeisle_sdk_products' ) ) ) {
|
379 |
-
$products = array();
|
380 |
-
$all_themes = $this->get_themes_from_wporg( 'themeisle' );
|
381 |
-
$all_plugins = $this->get_plugins_from_wporg( 'themeisle' );
|
382 |
-
static $allowed_products = [
|
383 |
-
'hestia' => true,
|
384 |
-
'neve' => true,
|
385 |
-
'visualizer' => true,
|
386 |
-
'feedzy-rss-feeds' => true,
|
387 |
-
'wp-product-review' => true,
|
388 |
-
'otter-blocks' => true,
|
389 |
-
'themeisle-companion' => true,
|
390 |
-
];
|
391 |
-
foreach ( $all_themes as $theme ) {
|
392 |
-
if ( $theme->active_installs < 4999 ) {
|
393 |
-
continue;
|
394 |
-
}
|
395 |
-
if ( ! isset( $allowed_products[ $theme->slug ] ) ) {
|
396 |
-
continue;
|
397 |
-
}
|
398 |
-
$products[] = array(
|
399 |
-
'name' => $theme->name,
|
400 |
-
'type' => 'theme',
|
401 |
-
'slug' => $theme->slug,
|
402 |
-
'installs' => $theme->active_installs,
|
403 |
-
);
|
404 |
-
}
|
405 |
-
foreach ( $all_plugins as $plugin ) {
|
406 |
-
if ( $plugin->active_installs < 4999 ) {
|
407 |
-
continue;
|
408 |
-
}
|
409 |
-
if ( ! isset( $allowed_products[ $plugin->slug ] ) ) {
|
410 |
-
continue;
|
411 |
-
}
|
412 |
-
$products[] = array(
|
413 |
-
'name' => $plugin->name,
|
414 |
-
'type' => 'plugin',
|
415 |
-
'slug' => $plugin->slug,
|
416 |
-
'installs' => $plugin->active_installs,
|
417 |
-
);
|
418 |
-
}
|
419 |
-
set_transient( 'themeisle_sdk_products', $products, 6 * HOUR_IN_SECONDS );
|
420 |
-
}
|
421 |
-
|
422 |
-
return $products;
|
423 |
-
}
|
424 |
-
|
425 |
-
/**
|
426 |
-
* Fetch themes from wporg api.
|
427 |
-
*
|
428 |
-
* @param string $author The author name.
|
429 |
-
*
|
430 |
-
* @return array The list of themes.
|
431 |
-
*/
|
432 |
-
function get_themes_from_wporg( $author ) {
|
433 |
-
$products = wp_remote_get(
|
434 |
-
'https://api.wordpress.org/themes/info/1.1/?action=query_themes&request[author]=' . $author . '&request[per_page]=30&request[fields][active_installs]=true'
|
435 |
-
);
|
436 |
-
$products = json_decode( wp_remote_retrieve_body( $products ) );
|
437 |
-
if ( is_object( $products ) ) {
|
438 |
-
$products = isset( $products->themes ) ? $products->themes : array();
|
439 |
-
} else {
|
440 |
-
$products = array();
|
441 |
-
}
|
442 |
-
|
443 |
-
return (array) $products;
|
444 |
-
}
|
445 |
-
|
446 |
-
/**
|
447 |
-
* Fetch plugin from wporg api.
|
448 |
-
*
|
449 |
-
* @param string $author The author slug.
|
450 |
-
*
|
451 |
-
* @return array The list of plugins for the selected author.
|
452 |
-
*/
|
453 |
-
function get_plugins_from_wporg( $author ) {
|
454 |
-
$products = wp_remote_get(
|
455 |
-
'https://api.wordpress.org/plugins/info/1.1/?action=query_plugins&request[author]=' . $author . '&request[per_page]=40&request[fields][active_installs]=true'
|
456 |
-
);
|
457 |
-
$products = json_decode( wp_remote_retrieve_body( $products ) );
|
458 |
-
if ( is_object( $products ) ) {
|
459 |
-
$products = isset( $products->plugins ) ? $products->plugins : array();
|
460 |
-
} else {
|
461 |
-
$products = array();
|
462 |
-
}
|
463 |
-
|
464 |
-
return (array) $products;
|
465 |
-
}
|
466 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Endpoint.php
DELETED
@@ -1,358 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The class that exposes endpoints.
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Rollback
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
// Exit if accessed directly.
|
15 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
16 |
-
use ThemeisleSDK\Loader;
|
17 |
-
use ThemeisleSDK\Product;
|
18 |
-
|
19 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
20 |
-
exit;
|
21 |
-
}
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Expose endpoints for ThemeIsle SDK.
|
25 |
-
*/
|
26 |
-
class Endpoint extends Abstract_Module {
|
27 |
-
/**
|
28 |
-
* Endpoint slug.
|
29 |
-
*/
|
30 |
-
const SDK_ENDPOINT = 'themeisle-sdk';
|
31 |
-
/**
|
32 |
-
* Endpoint version.
|
33 |
-
*/
|
34 |
-
const SDK_ENDPOINT_VERSION = 1;
|
35 |
-
/**
|
36 |
-
* Hash file which contains the checksum.
|
37 |
-
*/
|
38 |
-
const HASH_FILE = 'themeisle-hash.json';
|
39 |
-
|
40 |
-
/*
|
41 |
-
* If true, the endpoint will expect a product slug and will return the value only for that.
|
42 |
-
*/
|
43 |
-
const PRODUCT_SPECIFIC = false;
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Registers the endpoints.
|
47 |
-
*/
|
48 |
-
function rest_register() {
|
49 |
-
register_rest_route(
|
50 |
-
self::SDK_ENDPOINT . '/v' . self::SDK_ENDPOINT_VERSION,
|
51 |
-
'/checksum/' . ( self::PRODUCT_SPECIFIC ? '(?P<slug>.*)/' : '' ),
|
52 |
-
array(
|
53 |
-
'methods' => 'GET',
|
54 |
-
'callback' => array( $this, 'checksum' ),
|
55 |
-
)
|
56 |
-
);
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* The checksum endpoint.
|
61 |
-
*
|
62 |
-
* @param \WP_REST_Request $data the request.
|
63 |
-
*
|
64 |
-
* @return \WP_REST_Response Response or the error
|
65 |
-
*/
|
66 |
-
function checksum( \WP_REST_Request $data ) {
|
67 |
-
$products = Loader::get_products();
|
68 |
-
if ( self::PRODUCT_SPECIFIC ) {
|
69 |
-
$params = $this->validate_params( $data, array( 'slug' ) );
|
70 |
-
foreach ( $products as $product ) {
|
71 |
-
if ( $params['slug'] === $product->get_slug() ) {
|
72 |
-
$products = array( $product );
|
73 |
-
break;
|
74 |
-
}
|
75 |
-
}
|
76 |
-
}
|
77 |
-
$response = array();
|
78 |
-
$custom_css = $this->has_custom_css();
|
79 |
-
if ( is_bool( $custom_css ) ) {
|
80 |
-
$response['custom_css'] = $custom_css;
|
81 |
-
}
|
82 |
-
|
83 |
-
$response['child_theme'] = $this->get_theme_properties();
|
84 |
-
|
85 |
-
foreach ( $products as $product ) {
|
86 |
-
$files = array();
|
87 |
-
switch ( $product->get_type() ) {
|
88 |
-
case 'plugin':
|
89 |
-
$files = array();
|
90 |
-
break;
|
91 |
-
case 'theme':
|
92 |
-
$files = array( 'style.css', 'functions.php' );
|
93 |
-
break;
|
94 |
-
}
|
95 |
-
|
96 |
-
$error = '';
|
97 |
-
|
98 |
-
// if any element in the $files array contains a '/', this would imply recursion is required.
|
99 |
-
$diff = $this->generate_diff(
|
100 |
-
$product,
|
101 |
-
$files,
|
102 |
-
array_reduce(
|
103 |
-
$files,
|
104 |
-
array(
|
105 |
-
$this,
|
106 |
-
'is_recursion_required',
|
107 |
-
),
|
108 |
-
false
|
109 |
-
)
|
110 |
-
);
|
111 |
-
if ( is_wp_error( $diff ) ) {
|
112 |
-
/**
|
113 |
-
* Error returner by the diff checker method.
|
114 |
-
*
|
115 |
-
* @var \WP_Error $diff Error returned.
|
116 |
-
*/
|
117 |
-
$error = $diff->get_error_message();
|
118 |
-
$diff = array();
|
119 |
-
}
|
120 |
-
|
121 |
-
$response['products'][] = array(
|
122 |
-
'slug' => $product->get_slug(),
|
123 |
-
'version' => $product->get_version(),
|
124 |
-
'diffs' => $diff,
|
125 |
-
'error' => $error,
|
126 |
-
);
|
127 |
-
}
|
128 |
-
|
129 |
-
return new \WP_REST_Response( array( 'checksum' => $response ) );
|
130 |
-
}
|
131 |
-
|
132 |
-
/**
|
133 |
-
* Validates the parameters to the API
|
134 |
-
*
|
135 |
-
* @param \WP_REST_Request $data the request.
|
136 |
-
* @param array $params the parameters to validate.
|
137 |
-
*
|
138 |
-
* @return array of parameter name=>value
|
139 |
-
*/
|
140 |
-
private function validate_params( \WP_REST_Request $data, $params ) {
|
141 |
-
$collect = array();
|
142 |
-
foreach ( $params as $param ) {
|
143 |
-
$value = sanitize_text_field( $data[ $param ] );
|
144 |
-
if ( empty( $value ) ) {
|
145 |
-
return rest_ensure_response(
|
146 |
-
new \WP_Error(
|
147 |
-
'themeisle_' . $param . '_invalid',
|
148 |
-
sprintf( 'Invalid %', $param ),
|
149 |
-
array(
|
150 |
-
'status' => 403,
|
151 |
-
)
|
152 |
-
)
|
153 |
-
);
|
154 |
-
} else {
|
155 |
-
$collect[ $param ] = $value;
|
156 |
-
}
|
157 |
-
}
|
158 |
-
|
159 |
-
return $collect;
|
160 |
-
}
|
161 |
-
|
162 |
-
/**
|
163 |
-
* Check if custom css has been added to the theme.
|
164 |
-
*
|
165 |
-
* @return bool Whether custom css has been added to the theme.
|
166 |
-
*/
|
167 |
-
private function has_custom_css() {
|
168 |
-
$query = new \WP_Query(
|
169 |
-
array(
|
170 |
-
'post_type' => 'custom_css',
|
171 |
-
'post_status' => 'publish',
|
172 |
-
'numberposts' => 1,
|
173 |
-
'update_post_meta_cache' => false,
|
174 |
-
'update_post_term_cache' => false,
|
175 |
-
)
|
176 |
-
);
|
177 |
-
|
178 |
-
if ( $query->have_posts() ) {
|
179 |
-
$query->the_post();
|
180 |
-
$content = get_the_content();
|
181 |
-
|
182 |
-
// if the content contains a colon, a CSS rule has been added.
|
183 |
-
return strpos( $content, ':' ) === false ? false : true;
|
184 |
-
}
|
185 |
-
|
186 |
-
return false;
|
187 |
-
}
|
188 |
-
|
189 |
-
/**
|
190 |
-
* Get the current theme properties.
|
191 |
-
*
|
192 |
-
* @return mixed Properties of the current theme.
|
193 |
-
*/
|
194 |
-
function get_theme_properties() {
|
195 |
-
if ( ! is_child_theme() ) {
|
196 |
-
return false;
|
197 |
-
}
|
198 |
-
|
199 |
-
$properties = array();
|
200 |
-
$theme = wp_get_theme();
|
201 |
-
// @codingStandardsIgnoreStart
|
202 |
-
$properties['name'] = $theme->Name;
|
203 |
-
// @codingStandardsIgnoreEnd
|
204 |
-
|
205 |
-
// get the files in the child theme.
|
206 |
-
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
207 |
-
WP_Filesystem();
|
208 |
-
global $wp_filesystem;
|
209 |
-
$path = str_replace( ABSPATH, $wp_filesystem->abspath(), get_stylesheet_directory() );
|
210 |
-
$list = $wp_filesystem->dirlist( $path, false, false );
|
211 |
-
if ( $list ) {
|
212 |
-
$list = array_keys( self::flatten_dirlist( $list ) );
|
213 |
-
$properties['files'] = $list;
|
214 |
-
}
|
215 |
-
|
216 |
-
return $properties;
|
217 |
-
}
|
218 |
-
|
219 |
-
/**
|
220 |
-
* Flatten the results of WP_Filesystem::dirlist() for iterating over.
|
221 |
-
*
|
222 |
-
* @access private
|
223 |
-
*
|
224 |
-
* @param array $nested_files Array of files as returned by WP_Filesystem::dirlist().
|
225 |
-
* @param string $path Relative path to prepend to child nodes. Optional.
|
226 |
-
*
|
227 |
-
* @return array $files A flattened array of the $nested_files specified.
|
228 |
-
*/
|
229 |
-
private static function flatten_dirlist( $nested_files, $path = '' ) {
|
230 |
-
$files = array();
|
231 |
-
foreach ( $nested_files as $name => $details ) {
|
232 |
-
$files[ $path . $name ] = $details;
|
233 |
-
// Append children recursively.
|
234 |
-
if ( ! empty( $details['files'] ) ) {
|
235 |
-
$children = self::flatten_dirlist( $details['files'], $path . $name . '/' );
|
236 |
-
// Merge keeping possible numeric keys, which array_merge() will reindex from 0..n.
|
237 |
-
$files = $files + $children;
|
238 |
-
}
|
239 |
-
}
|
240 |
-
|
241 |
-
return $files;
|
242 |
-
}
|
243 |
-
|
244 |
-
/**
|
245 |
-
* Generate the diff of the files.
|
246 |
-
*
|
247 |
-
* @param Product $product Themeisle Product.
|
248 |
-
* @param array $files Array of files.
|
249 |
-
* @param bool $recurse Whether to recurse or not.
|
250 |
-
*
|
251 |
-
* @return mixed Diff data.
|
252 |
-
*/
|
253 |
-
private function generate_diff( $product, $files, $recurse = false ) {
|
254 |
-
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
255 |
-
WP_Filesystem();
|
256 |
-
global $wp_filesystem;
|
257 |
-
|
258 |
-
$diff = array();
|
259 |
-
$path = str_replace( ABSPATH, $wp_filesystem->abspath(), plugin_dir_path( $product->get_basefile() ) );
|
260 |
-
$list = $wp_filesystem->dirlist( $path, false, $recurse );
|
261 |
-
// nothing found.
|
262 |
-
if ( ! $list ) {
|
263 |
-
return $diff;
|
264 |
-
}
|
265 |
-
$list = array_keys( self::flatten_dirlist( $list ) );
|
266 |
-
|
267 |
-
// now let's get the valid files that actually exist.
|
268 |
-
if ( empty( $files ) ) {
|
269 |
-
$files = $list;
|
270 |
-
} else {
|
271 |
-
$files = array_intersect( $files, $list );
|
272 |
-
}
|
273 |
-
|
274 |
-
// fetch the calculated hashes.
|
275 |
-
if ( ! $wp_filesystem->is_readable( $path . '/' . self::HASH_FILE ) ) {
|
276 |
-
return new \WP_Error( 'themeisle_sdk_hash_not_found', sprintf( '%s not found', self::HASH_FILE ) );
|
277 |
-
}
|
278 |
-
|
279 |
-
$hashes = json_decode( $wp_filesystem->get_contents( $path . '/' . self::HASH_FILE ), true );
|
280 |
-
ksort( $hashes );
|
281 |
-
|
282 |
-
$diff = array();
|
283 |
-
foreach ( $files as $file ) {
|
284 |
-
// file does not exist in the hashes.
|
285 |
-
if ( ! array_key_exists( $file, $hashes ) ) {
|
286 |
-
continue;
|
287 |
-
}
|
288 |
-
$new = md5( $wp_filesystem->get_contents( $path . $file ) );
|
289 |
-
$old = $hashes[ $file ];
|
290 |
-
|
291 |
-
// same hash, bail.
|
292 |
-
if ( $new === $old ) {
|
293 |
-
continue;
|
294 |
-
}
|
295 |
-
$diff[] = $file;
|
296 |
-
}
|
297 |
-
|
298 |
-
return $diff;
|
299 |
-
}
|
300 |
-
|
301 |
-
/**
|
302 |
-
* Check if recursion needs to be enabled on the WP_Filesystem by reducing the array of files to a boolean.
|
303 |
-
*
|
304 |
-
* @param string $carry Value of the previous iteration.
|
305 |
-
* @param string $item Value of the current iteration.
|
306 |
-
*
|
307 |
-
* @return bool Whether to recurse or not.
|
308 |
-
*/
|
309 |
-
function is_recursion_required( $carry, $item ) {
|
310 |
-
if ( ! $carry ) {
|
311 |
-
return ( strpos( $item, '/' ) !== false );
|
312 |
-
}
|
313 |
-
|
314 |
-
return $carry;
|
315 |
-
}
|
316 |
-
|
317 |
-
/**
|
318 |
-
* Load module for this product.
|
319 |
-
*
|
320 |
-
* @param Product $product Product to check.
|
321 |
-
*
|
322 |
-
* @return bool Should we load this?
|
323 |
-
*/
|
324 |
-
public function can_load( $product ) {
|
325 |
-
return true;
|
326 |
-
}
|
327 |
-
|
328 |
-
/**
|
329 |
-
* Load module logic.
|
330 |
-
*
|
331 |
-
* @param Product $product Product to load.
|
332 |
-
*/
|
333 |
-
public function load( $product ) {
|
334 |
-
$this->setup_endpoints();
|
335 |
-
|
336 |
-
return $this;
|
337 |
-
}
|
338 |
-
|
339 |
-
/**
|
340 |
-
* Setup endpoints.
|
341 |
-
*/
|
342 |
-
private function setup_endpoints() {
|
343 |
-
global $wp_version;
|
344 |
-
if ( version_compare( $wp_version, '4.4', '<' ) ) {
|
345 |
-
// no REST support.
|
346 |
-
return;
|
347 |
-
}
|
348 |
-
|
349 |
-
$this->setup_rest();
|
350 |
-
}
|
351 |
-
|
352 |
-
/**
|
353 |
-
* Setup REST endpoints.
|
354 |
-
*/
|
355 |
-
private function setup_rest() {
|
356 |
-
add_action( 'rest_api_init', array( $this, 'rest_register' ) );
|
357 |
-
}
|
358 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php
DELETED
@@ -1,798 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The main loader class for license handling.
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Modules
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
// Exit if accessed directly.
|
15 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
16 |
-
use ThemeisleSDK\Product;
|
17 |
-
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Licenser module for ThemeIsle SDK.
|
24 |
-
*/
|
25 |
-
class Licenser extends Abstract_Module {
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Number of max failed checks before showing the license message.
|
29 |
-
*
|
30 |
-
* @var int $max_failed Maximum failed checks allowed before show the notice
|
31 |
-
*/
|
32 |
-
private static $max_failed = 5;
|
33 |
-
/**
|
34 |
-
* License key string.
|
35 |
-
*
|
36 |
-
* @var string $license_key The license key string
|
37 |
-
*/
|
38 |
-
public $license_key;
|
39 |
-
/**
|
40 |
-
* This ensures that the custom API request only runs on the second time that WP fires the update check.
|
41 |
-
*
|
42 |
-
* @var bool $do_check Flag for request.
|
43 |
-
*/
|
44 |
-
private $do_check = false;
|
45 |
-
/**
|
46 |
-
* Number of failed checks to the api endpoint.
|
47 |
-
*
|
48 |
-
* @var bool $failed_checks
|
49 |
-
*/
|
50 |
-
private $failed_checks = 0;
|
51 |
-
/**
|
52 |
-
* The product update response key.
|
53 |
-
*
|
54 |
-
* @var string $product_key Product key.
|
55 |
-
*/
|
56 |
-
private $product_key;
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Disable wporg updates for premium products.
|
60 |
-
*
|
61 |
-
* @param string $r Update payload.
|
62 |
-
* @param string $url The api url.
|
63 |
-
*
|
64 |
-
* @return mixed List of themes to check for update.
|
65 |
-
*/
|
66 |
-
function disable_wporg_update( $r, $url ) {
|
67 |
-
|
68 |
-
if ( 0 !== strpos( $url, 'https://api.wordpress.org/themes/update-check/' ) ) {
|
69 |
-
return $r;
|
70 |
-
}
|
71 |
-
|
72 |
-
// Decode the JSON response.
|
73 |
-
$themes = json_decode( $r['body']['themes'] );
|
74 |
-
|
75 |
-
unset( $themes->themes->{$this->product->get_slug()} );
|
76 |
-
|
77 |
-
// Encode the updated JSON response.
|
78 |
-
$r['body']['themes'] = json_encode( $themes );
|
79 |
-
|
80 |
-
return $r;
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Register the setting for the license of the product.
|
85 |
-
*
|
86 |
-
* @return bool
|
87 |
-
*/
|
88 |
-
public function register_settings() {
|
89 |
-
if ( ! is_admin() ) {
|
90 |
-
return false;
|
91 |
-
}
|
92 |
-
if ( apply_filters( $this->product->get_key() . '_hide_license_field', false ) ) {
|
93 |
-
return;
|
94 |
-
}
|
95 |
-
add_settings_field(
|
96 |
-
$this->product->get_key() . '_license',
|
97 |
-
$this->product->get_name() . ' license',
|
98 |
-
array( $this, 'license_view' ),
|
99 |
-
'general'
|
100 |
-
);
|
101 |
-
}
|
102 |
-
|
103 |
-
/**
|
104 |
-
* The license view field.
|
105 |
-
*/
|
106 |
-
public function license_view() {
|
107 |
-
$status = $this->get_license_status();
|
108 |
-
$value = $this->license_key;
|
109 |
-
|
110 |
-
$activate_string = apply_filters( $this->product->get_key() . '_lc_activate_string', 'Activate' );
|
111 |
-
$deactivate_string = apply_filters( $this->product->get_key() . '_lc_deactivate_string', 'Deactivate' );
|
112 |
-
$valid_string = apply_filters( $this->product->get_key() . '_lc_valid_string', 'Valid' );
|
113 |
-
$invalid_string = apply_filters( $this->product->get_key() . '_lc_invalid_string', 'Invalid' );
|
114 |
-
$license_message = apply_filters( $this->product->get_key() . '_lc_license_message', 'Enter your license from %s purchase history in order to get %s updates' );
|
115 |
-
$error_message = $this->get_error();
|
116 |
-
?>
|
117 |
-
<style type="text/css">
|
118 |
-
input.themeisle-sdk-text-input-valid {
|
119 |
-
border: 1px solid #7ad03a;
|
120 |
-
}
|
121 |
-
|
122 |
-
input.themeisle-sdk-license-input {
|
123 |
-
width: 300px;
|
124 |
-
padding: 0 8px;
|
125 |
-
line-height: 2;
|
126 |
-
min-height: 30px;
|
127 |
-
}
|
128 |
-
|
129 |
-
.themeisle-sdk-license-deactivate-cta {
|
130 |
-
color: #fff;
|
131 |
-
background: #7ad03a;
|
132 |
-
display: inline-block;
|
133 |
-
text-decoration: none;
|
134 |
-
font-size: 13px;
|
135 |
-
line-height: 30px;
|
136 |
-
height: 26px;
|
137 |
-
margin-left: 5px;
|
138 |
-
padding: 0 10px 3px;
|
139 |
-
-webkit-border-radius: 3px;
|
140 |
-
border-radius: 3px;
|
141 |
-
}
|
142 |
-
|
143 |
-
.themeisle-sdk-license-activate-cta {
|
144 |
-
color: #fff;
|
145 |
-
background: #dd3d36;
|
146 |
-
display: inline-block;
|
147 |
-
text-decoration: none;
|
148 |
-
font-size: 13px;
|
149 |
-
line-height: 30px;
|
150 |
-
height: 26px;
|
151 |
-
margin-left: 5px;
|
152 |
-
padding: 0 10px 3px;
|
153 |
-
-webkit-border-radius: 3px;
|
154 |
-
border-radius: 3px;
|
155 |
-
}
|
156 |
-
|
157 |
-
button.button.themeisle-sdk-licenser-button-cta {
|
158 |
-
line-height: 26px;
|
159 |
-
height: 29px;
|
160 |
-
vertical-align: top;
|
161 |
-
}
|
162 |
-
|
163 |
-
</style>
|
164 |
-
<?php
|
165 |
-
echo sprintf(
|
166 |
-
'<p>%s<input class="themeisle-sdk-license-input %s" type="text" id="%s_license" name="%s_license" value="%s" /><a class="%s">%s</a> <button name="%s_btn_trigger" class="button button-primary themeisle-sdk-licenser-button-cta" value="yes" type="submit" >%s</button></p><p class="description">%s</p>%s',
|
167 |
-
( ( 'valid' === $status ) ? sprintf( '<input type="hidden" value="%s" name="%s_license" />', $value, $this->product->get_key() ) : '' ),
|
168 |
-
( ( 'valid' === $status ) ? 'themeisle-sdk-text-input-valid' : '' ),
|
169 |
-
$this->product->get_key(),
|
170 |
-
( ( 'valid' === $status ) ? $this->product->get_key() . '_mask' : $this->product->get_key() ),
|
171 |
-
( ( 'valid' === $status ) ? ( str_repeat( '*', 30 ) . substr( $value, - 5 ) ) : $value ),
|
172 |
-
( 'valid' === $status ? 'themeisle-sdk-license-deactivate-cta' : 'themeisle-sdk-license-activate-cta' ),
|
173 |
-
( 'valid' === $status ? $valid_string : $invalid_string ),
|
174 |
-
$this->product->get_key(),
|
175 |
-
( 'valid' === $status ? $deactivate_string : $activate_string ),
|
176 |
-
sprintf( $license_message, '<a href="' . $this->get_api_url() . '">' . $this->get_distributor_name() . '</a> ', $this->product->get_type() ),
|
177 |
-
empty( $error_message ) ? '' : sprintf( '<p style="color:#dd3d36">%s</p>', $error_message )
|
178 |
-
);
|
179 |
-
|
180 |
-
}
|
181 |
-
|
182 |
-
/**
|
183 |
-
* Return the license status.
|
184 |
-
*
|
185 |
-
* @return string The License status.
|
186 |
-
*/
|
187 |
-
public function get_license_status() {
|
188 |
-
|
189 |
-
$license_data = get_option( $this->product->get_key() . '_license_data', '' );
|
190 |
-
|
191 |
-
if ( '' === $license_data ) {
|
192 |
-
return get_option( $this->product->get_key() . '_license_status', 'not_active' );
|
193 |
-
}
|
194 |
-
|
195 |
-
return isset( $license_data->license ) ? $license_data->license : get_option( $this->product->get_key() . '_license_status', 'not_active' );
|
196 |
-
|
197 |
-
}
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Get remote api url.
|
201 |
-
*
|
202 |
-
* @return string Remote api url.
|
203 |
-
*/
|
204 |
-
public function get_api_url() {
|
205 |
-
if ( $this->is_from_partner( $this->product ) ) {
|
206 |
-
return 'https://themeisle.com';
|
207 |
-
}
|
208 |
-
|
209 |
-
return $this->product->get_store_url();
|
210 |
-
}
|
211 |
-
|
212 |
-
/**
|
213 |
-
* Get remote api url.
|
214 |
-
*
|
215 |
-
* @return string Remote api url.
|
216 |
-
*/
|
217 |
-
public function get_distributor_name() {
|
218 |
-
if ( $this->is_from_partner( $this->product ) ) {
|
219 |
-
return 'ThemeIsle';
|
220 |
-
}
|
221 |
-
|
222 |
-
return $this->product->get_store_name();
|
223 |
-
}
|
224 |
-
|
225 |
-
/**
|
226 |
-
* Show the admin notice regarding the license status.
|
227 |
-
*
|
228 |
-
* @return bool Should we show the notice ?
|
229 |
-
*/
|
230 |
-
function show_notice() {
|
231 |
-
if ( ! is_admin() ) {
|
232 |
-
return false;
|
233 |
-
}
|
234 |
-
|
235 |
-
if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) {
|
236 |
-
return;
|
237 |
-
}
|
238 |
-
$status = $this->get_license_status();
|
239 |
-
$no_activations_string = apply_filters( $this->product->get_key() . '_lc_no_activations_string', 'No activations left for %s !!!. You need to upgrade your plan in order to use %s on more websites. Please ask the %s Staff for more details.' );
|
240 |
-
$no_valid_string = apply_filters( $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add your license code from your <a href="%s" target="_blank">purchase history</a> and validate it <a href="%s">here</a>. ' );
|
241 |
-
|
242 |
-
// No activations left for this license.
|
243 |
-
if ( 'valid' != $status && $this->check_activation() ) {
|
244 |
-
?>
|
245 |
-
<div class="error">
|
246 |
-
<p><strong>
|
247 |
-
<?php
|
248 |
-
echo sprintf(
|
249 |
-
$no_activations_string,
|
250 |
-
$this->product->get_name(),
|
251 |
-
$this->product->get_name(),
|
252 |
-
'<a href="' . $this->get_api_url() . '" target="_blank">' . $this->get_distributor_name() . '</a>'
|
253 |
-
);
|
254 |
-
?>
|
255 |
-
</strong>
|
256 |
-
</p>
|
257 |
-
</div>
|
258 |
-
<?php
|
259 |
-
return false;
|
260 |
-
}
|
261 |
-
// Invalid license key.
|
262 |
-
if ( 'valid' != $status ) {
|
263 |
-
?>
|
264 |
-
<div class="error">
|
265 |
-
<p>
|
266 |
-
<strong><?php echo sprintf( $no_valid_string, $this->product->get_name() . ' ' . $this->product->get_type(), $this->get_api_url(), admin_url( 'options-general.php' ) . '#' . $this->product->get_key() . '_license' ); ?> </strong>
|
267 |
-
</p>
|
268 |
-
</div>
|
269 |
-
<?php
|
270 |
-
|
271 |
-
return false;
|
272 |
-
}
|
273 |
-
|
274 |
-
return true;
|
275 |
-
}
|
276 |
-
|
277 |
-
/**
|
278 |
-
* Check if the license is active or not.
|
279 |
-
*
|
280 |
-
* @return bool
|
281 |
-
*/
|
282 |
-
public function check_activation() {
|
283 |
-
$license_data = get_option( $this->product->get_key() . '_license_data', '' );
|
284 |
-
if ( '' === $license_data ) {
|
285 |
-
return false;
|
286 |
-
}
|
287 |
-
|
288 |
-
return isset( $license_data->error ) ? ( 'no_activations_left' == $license_data->error ) : false;
|
289 |
-
|
290 |
-
}
|
291 |
-
|
292 |
-
/**
|
293 |
-
* Check if the license is about to expire in the next month.
|
294 |
-
*
|
295 |
-
* @return bool
|
296 |
-
*/
|
297 |
-
function check_expiration() {
|
298 |
-
$license_data = get_option( $this->product->get_key() . '_license_data', '' );
|
299 |
-
if ( '' === $license_data ) {
|
300 |
-
return false;
|
301 |
-
}
|
302 |
-
if ( ! isset( $license_data->expires ) ) {
|
303 |
-
return false;
|
304 |
-
}
|
305 |
-
if ( strtotime( $license_data->expires ) - time() > 30 * 24 * 3600 ) {
|
306 |
-
return false;
|
307 |
-
}
|
308 |
-
|
309 |
-
return true;
|
310 |
-
}
|
311 |
-
|
312 |
-
/**
|
313 |
-
* Return the renew url from the store used.
|
314 |
-
*
|
315 |
-
* @return string The renew url.
|
316 |
-
*/
|
317 |
-
function renew_url() {
|
318 |
-
$license_data = get_option( $this->product->get_key() . '_license_data', '' );
|
319 |
-
if ( '' === $license_data ) {
|
320 |
-
return $this->get_api_url();
|
321 |
-
}
|
322 |
-
if ( ! isset( $license_data->download_id ) || ! isset( $license_data->key ) ) {
|
323 |
-
return $this->get_api_url();
|
324 |
-
}
|
325 |
-
|
326 |
-
return $this->get_api_url() . '/checkout/?edd_license_key=' . $license_data->key . '&download_id=' . $license_data->download_id;
|
327 |
-
}
|
328 |
-
|
329 |
-
/**
|
330 |
-
* Run the license check call.
|
331 |
-
*/
|
332 |
-
public function product_valid() {
|
333 |
-
if ( false !== ( $license = get_transient( $this->product->get_key() . '_license_data' ) ) ) {
|
334 |
-
return;
|
335 |
-
}
|
336 |
-
$license = $this->check_license();
|
337 |
-
set_transient( $this->product->get_key() . '_license_data', $license, 12 * HOUR_IN_SECONDS );
|
338 |
-
update_option( $this->product->get_key() . '_license_data', $license );
|
339 |
-
}
|
340 |
-
|
341 |
-
/**
|
342 |
-
* Check the license status.
|
343 |
-
*
|
344 |
-
* @return object The license data.
|
345 |
-
*/
|
346 |
-
public function check_license() {
|
347 |
-
$status = $this->get_license_status();
|
348 |
-
if ( 'not_active' == $status ) {
|
349 |
-
$license_data = new \stdClass();
|
350 |
-
$license_data->license = 'not_active';
|
351 |
-
|
352 |
-
return $license_data;
|
353 |
-
}
|
354 |
-
$license = trim( $this->license_key );
|
355 |
-
$api_params = array(
|
356 |
-
'edd_action' => 'check_license',
|
357 |
-
'license' => $license,
|
358 |
-
'item_name' => rawurlencode( $this->product->get_name() ),
|
359 |
-
'url' => rawurlencode( home_url() ),
|
360 |
-
);
|
361 |
-
// Call the custom API.
|
362 |
-
$response = wp_remote_get(
|
363 |
-
add_query_arg( $api_params, $this->get_api_url() ),
|
364 |
-
array(
|
365 |
-
'timeout' => 15,
|
366 |
-
'sslverify' => false,
|
367 |
-
)
|
368 |
-
);
|
369 |
-
if ( is_wp_error( $response ) ) {
|
370 |
-
$license_data = new \stdClass();
|
371 |
-
$license_data->license = 'valid';
|
372 |
-
|
373 |
-
} else {
|
374 |
-
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
|
375 |
-
if ( ! is_object( $license_data ) ) {
|
376 |
-
$license_data = new \stdClass();
|
377 |
-
$license_data->license = 'valid';
|
378 |
-
}
|
379 |
-
}
|
380 |
-
$license_old = get_option( $this->product->get_key() . '_license_data', '' );
|
381 |
-
if ( 'valid' == $license_old->license && ( $license_data->license != $license_old->license ) ) {
|
382 |
-
$this->increment_failed_checks();
|
383 |
-
} else {
|
384 |
-
$this->reset_failed_checks();
|
385 |
-
}
|
386 |
-
|
387 |
-
if ( $this->failed_checks <= self::$max_failed ) {
|
388 |
-
return $license_old;
|
389 |
-
}
|
390 |
-
|
391 |
-
if ( isset( $license_old->hide_valid ) ) {
|
392 |
-
$license_data->hide_valid = true;
|
393 |
-
}
|
394 |
-
|
395 |
-
if ( ! isset( $license_data->key ) ) {
|
396 |
-
$license_data->key = isset( $license_old->key ) ? $license_old->key : '';
|
397 |
-
}
|
398 |
-
|
399 |
-
if ( isset( $license_old->hide_expiration ) ) {
|
400 |
-
$license_data->hide_expiration = true;
|
401 |
-
}
|
402 |
-
|
403 |
-
if ( isset( $license_old->hide_activation ) ) {
|
404 |
-
$license_data->hide_activation = true;
|
405 |
-
}
|
406 |
-
|
407 |
-
return $license_data;
|
408 |
-
|
409 |
-
}
|
410 |
-
|
411 |
-
/**
|
412 |
-
* Increment the failed checks.
|
413 |
-
*/
|
414 |
-
private function increment_failed_checks() {
|
415 |
-
$this->failed_checks ++;
|
416 |
-
update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks );
|
417 |
-
}
|
418 |
-
|
419 |
-
/**
|
420 |
-
* Reset the failed checks
|
421 |
-
*/
|
422 |
-
private function reset_failed_checks() {
|
423 |
-
$this->failed_checks = 1;
|
424 |
-
update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks );
|
425 |
-
}
|
426 |
-
|
427 |
-
/**
|
428 |
-
* Set license validation error message.
|
429 |
-
*
|
430 |
-
* @param string $message Error message.
|
431 |
-
*/
|
432 |
-
public function set_error( $message = '' ) {
|
433 |
-
set_transient( $this->product->get_key() . 'act_err', $message, MINUTE_IN_SECONDS );
|
434 |
-
|
435 |
-
return;
|
436 |
-
}
|
437 |
-
|
438 |
-
/**
|
439 |
-
* Return the last error message.
|
440 |
-
*
|
441 |
-
* @return mixed Error message.
|
442 |
-
*/
|
443 |
-
public function get_error() {
|
444 |
-
return get_transient( $this->product->get_key() . 'act_err' );
|
445 |
-
}
|
446 |
-
|
447 |
-
/**
|
448 |
-
* Activate the license remotely.
|
449 |
-
*/
|
450 |
-
function activate_license() {
|
451 |
-
// listen for our activate button to be clicked.
|
452 |
-
if ( ! isset( $_POST[ $this->product->get_key() . '_btn_trigger' ] ) ) {
|
453 |
-
return;
|
454 |
-
}
|
455 |
-
$status = $this->get_license_status();
|
456 |
-
// retrieve the license from the database.
|
457 |
-
$license = $_POST[ $this->product->get_key() . '_license' ];
|
458 |
-
$api_params = array(
|
459 |
-
'license' => $license,
|
460 |
-
'item_name' => rawurlencode( $this->product->get_name() ),
|
461 |
-
'url' => rawurlencode( home_url() ),
|
462 |
-
);
|
463 |
-
if ( 'valid' != $status ) {
|
464 |
-
// data to send in our API request.
|
465 |
-
$api_params['edd_action'] = 'activate_license';
|
466 |
-
} else {
|
467 |
-
$api_params['edd_action'] = 'deactivate_license';
|
468 |
-
}
|
469 |
-
// Call the custom API.
|
470 |
-
$response = wp_remote_get( add_query_arg( $api_params, $this->get_api_url() ) );
|
471 |
-
// make sure the response came back okay.
|
472 |
-
if ( is_wp_error( $response ) ) {
|
473 |
-
$this->set_error( sprintf( 'ERROR: Failed to connect to the license service. Please try again later. Reason: %s', $response->get_error_message() ) );
|
474 |
-
|
475 |
-
return;
|
476 |
-
}
|
477 |
-
|
478 |
-
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
|
479 |
-
|
480 |
-
if ( ! is_object( $license_data ) ) {
|
481 |
-
$this->set_error( 'ERROR: Failed to validate license. Please try again in one minute.' );
|
482 |
-
|
483 |
-
return;
|
484 |
-
}
|
485 |
-
if ( ! isset( $license_data->license ) ) {
|
486 |
-
$license_data->license = 'invalid';
|
487 |
-
}
|
488 |
-
|
489 |
-
if ( ! isset( $license_data->key ) ) {
|
490 |
-
$license_data->key = $license;
|
491 |
-
}
|
492 |
-
if ( 'valid' == $license_data->license ) {
|
493 |
-
$this->reset_failed_checks();
|
494 |
-
}
|
495 |
-
|
496 |
-
$this->set_error( '' );
|
497 |
-
|
498 |
-
if ( 'deactivate_license' === $api_params['edd_action'] ) {
|
499 |
-
|
500 |
-
delete_option( $this->product->get_key() . '_license_data' );
|
501 |
-
delete_option( $this->product->get_key() . '_license_plan' );
|
502 |
-
delete_transient( $this->product->get_key() . '_license_data' );
|
503 |
-
|
504 |
-
return;
|
505 |
-
}
|
506 |
-
if ( isset( $license_data->plan ) ) {
|
507 |
-
update_option( $this->product->get_key() . '_license_plan', $license_data->plan );
|
508 |
-
}
|
509 |
-
update_option( $this->product->get_key() . '_license_data', $license_data );
|
510 |
-
set_transient( $this->product->get_key() . '_license_data', $license_data, 12 * HOUR_IN_SECONDS );
|
511 |
-
|
512 |
-
}
|
513 |
-
|
514 |
-
/**
|
515 |
-
* Load the Themes screen.
|
516 |
-
*/
|
517 |
-
function load_themes_screen() {
|
518 |
-
add_thickbox();
|
519 |
-
add_action( 'admin_notices', array( &$this, 'update_nag' ) );
|
520 |
-
}
|
521 |
-
|
522 |
-
/**
|
523 |
-
* Alter the nag for themes update.
|
524 |
-
*/
|
525 |
-
function update_nag() {
|
526 |
-
$theme = wp_get_theme( $this->product->get_slug() );
|
527 |
-
$api_response = get_transient( $this->product_key );
|
528 |
-
if ( false === $api_response || ! isset( $api_response->new_version ) ) {
|
529 |
-
return;
|
530 |
-
}
|
531 |
-
$update_url = wp_nonce_url( 'update.php?action=upgrade-theme&theme=' . urlencode( $this->product->get_slug() ), 'upgrade-theme_' . $this->product->get_slug() );
|
532 |
-
$update_message = apply_filters( 'themeisle_sdk_license_update_message', 'Updating this theme will lose any customizations you have made. Cancel to stop, OK to update.' );
|
533 |
-
$update_onclick = ' onclick="if ( confirm(\'' . esc_js( $update_message ) . '\') ) {return true;}return false;"';
|
534 |
-
if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) {
|
535 |
-
echo '<div id="update-nag">';
|
536 |
-
printf(
|
537 |
-
'<strong>%1$s %2$s</strong> is available. <a href="%3$s" class="thickbox" title="%4s">Check out what\'s new</a> or <a href="%5$s"%6$s>update now</a>.',
|
538 |
-
$theme->get( 'Name' ),
|
539 |
-
$api_response->new_version,
|
540 |
-
sprintf( '%s&TB_iframe=true&width=1024&height=800', $this->product->get_changelog() ),
|
541 |
-
$theme->get( 'Name' ),
|
542 |
-
$update_url,
|
543 |
-
$update_onclick
|
544 |
-
);
|
545 |
-
echo '</div>';
|
546 |
-
echo '<div id="' . $this->product->get_slug() . '_' . 'changelog" style="display:none;">';
|
547 |
-
echo wpautop( $api_response->sections['changelog'] );
|
548 |
-
echo '</div>';
|
549 |
-
}
|
550 |
-
}
|
551 |
-
|
552 |
-
/**
|
553 |
-
* Alter update transient.
|
554 |
-
*
|
555 |
-
* @param mixed $value The transient data.
|
556 |
-
*
|
557 |
-
* @return mixed
|
558 |
-
*/
|
559 |
-
function theme_update_transient( $value ) {
|
560 |
-
$update_data = $this->check_for_update();
|
561 |
-
if ( $update_data ) {
|
562 |
-
$value->response[ $this->product->get_slug() ] = $update_data;
|
563 |
-
}
|
564 |
-
|
565 |
-
return $value;
|
566 |
-
}
|
567 |
-
|
568 |
-
/**
|
569 |
-
* Check for updates
|
570 |
-
*
|
571 |
-
* @return array|bool Either the update data or false in case of failure.
|
572 |
-
*/
|
573 |
-
function check_for_update() {
|
574 |
-
$update_data = get_transient( $this->product_key );
|
575 |
-
|
576 |
-
if ( false === $update_data ) {
|
577 |
-
$failed = false;
|
578 |
-
$update_data = $this->get_version_data();
|
579 |
-
if ( empty( $update_data ) ) {
|
580 |
-
$failed = true;
|
581 |
-
}
|
582 |
-
// If the response failed, try again in 30 minutes.
|
583 |
-
if ( $failed ) {
|
584 |
-
$data = new \stdClass();
|
585 |
-
$data->new_version = $this->product->get_version();
|
586 |
-
set_transient( $this->product_key, $data, 30 * MINUTE_IN_SECONDS );
|
587 |
-
|
588 |
-
return false;
|
589 |
-
}
|
590 |
-
$update_data->sections = isset( $update_data->sections ) ? maybe_unserialize( $update_data->sections ) : null;
|
591 |
-
|
592 |
-
set_transient( $this->product_key, $update_data, 12 * HOUR_IN_SECONDS );
|
593 |
-
}
|
594 |
-
if ( ! isset( $update_data->new_version ) ) {
|
595 |
-
return false;
|
596 |
-
}
|
597 |
-
if ( version_compare( $this->product->get_version(), $update_data->new_version, '>=' ) ) {
|
598 |
-
return false;
|
599 |
-
}
|
600 |
-
|
601 |
-
return (array) $update_data;
|
602 |
-
}
|
603 |
-
|
604 |
-
/**
|
605 |
-
* Check remote api for latest version.
|
606 |
-
*
|
607 |
-
* @return bool|mixed Update api response.
|
608 |
-
*/
|
609 |
-
private function get_version_data() {
|
610 |
-
$api_params = array(
|
611 |
-
'edd_action' => 'get_version',
|
612 |
-
'version' => $this->product->get_version(),
|
613 |
-
'license' => empty( $this->license_key ) ? 'free' : $this->license_key,
|
614 |
-
'name' => rawurlencode( $this->product->get_name() ),
|
615 |
-
'slug' => $this->product->get_slug(),
|
616 |
-
'author' => rawurlencode( $this->get_distributor_name() ),
|
617 |
-
'url' => rawurlencode( home_url() ),
|
618 |
-
);
|
619 |
-
$response = wp_remote_get(
|
620 |
-
add_query_arg( $api_params, $this->get_api_url() ),
|
621 |
-
array(
|
622 |
-
'timeout' => 15,
|
623 |
-
'sslverify' => false,
|
624 |
-
)
|
625 |
-
);
|
626 |
-
if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
|
627 |
-
return false;
|
628 |
-
}
|
629 |
-
$update_data = json_decode( wp_remote_retrieve_body( $response ) );
|
630 |
-
if ( ! is_object( $update_data ) ) {
|
631 |
-
return false;
|
632 |
-
}
|
633 |
-
|
634 |
-
return $update_data;
|
635 |
-
}
|
636 |
-
|
637 |
-
/**
|
638 |
-
* Delete the update transient
|
639 |
-
*/
|
640 |
-
function delete_theme_update_transient() {
|
641 |
-
delete_transient( $this->product_key );
|
642 |
-
}
|
643 |
-
|
644 |
-
/**
|
645 |
-
* Check for Updates at the defined API endpoint and modify the update array.
|
646 |
-
*
|
647 |
-
* @param array $_transient_data Update array build by WordPress.
|
648 |
-
*
|
649 |
-
* @return mixed Modified update array with custom plugin data.
|
650 |
-
*/
|
651 |
-
public function pre_set_site_transient_update_plugins_filter( $_transient_data ) {
|
652 |
-
if ( empty( $_transient_data ) || ! $this->do_check ) {
|
653 |
-
$this->do_check = true;
|
654 |
-
|
655 |
-
return $_transient_data;
|
656 |
-
}
|
657 |
-
$api_response = $this->api_request();
|
658 |
-
if ( false !== $api_response && is_object( $api_response ) && isset( $api_response->new_version ) ) {
|
659 |
-
if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) {
|
660 |
-
$_transient_data->response[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response;
|
661 |
-
}
|
662 |
-
}
|
663 |
-
|
664 |
-
return $_transient_data;
|
665 |
-
}
|
666 |
-
|
667 |
-
/**
|
668 |
-
* Calls the API and, if successfull, returns the object delivered by the API.
|
669 |
-
*
|
670 |
-
* @param string $_action The requested action.
|
671 |
-
* @param array $_data Parameters for the API action.
|
672 |
-
*
|
673 |
-
* @return false||object
|
674 |
-
*/
|
675 |
-
private function api_request( $_action = '', $_data = '' ) {
|
676 |
-
$update_data = $this->get_version_data();
|
677 |
-
if ( empty( $update_data ) ) {
|
678 |
-
return false;
|
679 |
-
}
|
680 |
-
if ( $update_data && isset( $update_data->sections ) ) {
|
681 |
-
$update_data->sections = maybe_unserialize( $update_data->sections );
|
682 |
-
}
|
683 |
-
|
684 |
-
return $update_data;
|
685 |
-
}
|
686 |
-
|
687 |
-
/**
|
688 |
-
* Updates information on the "View version x.x details" page with custom data.
|
689 |
-
*
|
690 |
-
* @param mixed $_data Plugin data.
|
691 |
-
* @param string $_action Action to send.
|
692 |
-
* @param object $_args Arguments to use.
|
693 |
-
*
|
694 |
-
* @return object $_data
|
695 |
-
*/
|
696 |
-
public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
|
697 |
-
if ( ( 'plugin_information' != $_action ) || ! isset( $_args->slug ) || ( $_args->slug != $this->product->get_slug() ) ) {
|
698 |
-
return $_data;
|
699 |
-
}
|
700 |
-
$api_response = $this->api_request();
|
701 |
-
if ( false !== $api_response ) {
|
702 |
-
$_data = $api_response;
|
703 |
-
}
|
704 |
-
|
705 |
-
return $_data;
|
706 |
-
}
|
707 |
-
|
708 |
-
/**
|
709 |
-
* Disable SSL verification in order to prevent download update failures.
|
710 |
-
*
|
711 |
-
* @param array $args Http args.
|
712 |
-
* @param string $url Url to check.
|
713 |
-
*
|
714 |
-
* @return array $array
|
715 |
-
*/
|
716 |
-
function http_request_args( $args, $url ) {
|
717 |
-
// If it is an https request and we are performing a package download, disable ssl verification.
|
718 |
-
if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
|
719 |
-
$args['sslverify'] = false;
|
720 |
-
}
|
721 |
-
|
722 |
-
return $args;
|
723 |
-
}
|
724 |
-
|
725 |
-
/**
|
726 |
-
* Check if we should load the module for this product.
|
727 |
-
*
|
728 |
-
* @param Product $product Product data.
|
729 |
-
*
|
730 |
-
* @return bool Should we load the module?
|
731 |
-
*/
|
732 |
-
public function can_load( $product ) {
|
733 |
-
|
734 |
-
if ( $product->is_wordpress_available() ) {
|
735 |
-
return false;
|
736 |
-
}
|
737 |
-
|
738 |
-
return ( apply_filters( $product->get_key() . '_enable_licenser', true ) === true );
|
739 |
-
|
740 |
-
}
|
741 |
-
|
742 |
-
/**
|
743 |
-
* Load module logic.
|
744 |
-
*
|
745 |
-
* @param Product $product Product to load the module for.
|
746 |
-
*
|
747 |
-
* @return Licenser Module object.
|
748 |
-
*/
|
749 |
-
public function load( $product ) {
|
750 |
-
$this->product = $product;
|
751 |
-
|
752 |
-
$this->product_key = $this->product->get_key() . '-update-response';
|
753 |
-
|
754 |
-
$this->license_key = $this->product->get_license();
|
755 |
-
if ( $this->product->requires_license() ) {
|
756 |
-
$this->failed_checks = intval( get_option( $this->product->get_key() . '_failed_checks', 0 ) );
|
757 |
-
$this->register_license_hooks();
|
758 |
-
}
|
759 |
-
|
760 |
-
if ( $this->product->is_plugin() ) {
|
761 |
-
add_filter(
|
762 |
-
'pre_set_site_transient_update_plugins',
|
763 |
-
[
|
764 |
-
$this,
|
765 |
-
'pre_set_site_transient_update_plugins_filter',
|
766 |
-
]
|
767 |
-
);
|
768 |
-
add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
|
769 |
-
add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 );
|
770 |
-
|
771 |
-
return $this;
|
772 |
-
}
|
773 |
-
if ( $this->product->is_theme() ) {
|
774 |
-
add_filter( 'site_transient_update_themes', array( &$this, 'theme_update_transient' ) );
|
775 |
-
add_filter( 'delete_site_transient_update_themes', array( &$this, 'delete_theme_update_transient' ) );
|
776 |
-
add_action( 'load-update-core.php', array( &$this, 'delete_theme_update_transient' ) );
|
777 |
-
add_action( 'load-themes.php', array( &$this, 'delete_theme_update_transient' ) );
|
778 |
-
add_action( 'load-themes.php', array( &$this, 'load_themes_screen' ) );
|
779 |
-
add_filter( 'http_request_args', array( $this, 'disable_wporg_update' ), 5, 2 );
|
780 |
-
|
781 |
-
return $this;
|
782 |
-
|
783 |
-
}
|
784 |
-
|
785 |
-
return $this;
|
786 |
-
}
|
787 |
-
|
788 |
-
/**
|
789 |
-
* Register license fields for the products.
|
790 |
-
*/
|
791 |
-
public function register_license_hooks() {
|
792 |
-
add_action( 'admin_init', array( $this, 'register_settings' ) );
|
793 |
-
add_action( 'admin_init', array( $this, 'activate_license' ) );
|
794 |
-
add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
|
795 |
-
add_action( 'admin_notices', array( $this, 'show_notice' ) );
|
796 |
-
add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) );
|
797 |
-
}
|
798 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Logger.php
DELETED
@@ -1,177 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The logger model class for ThemeIsle SDK
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Modules
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
15 |
-
use ThemeisleSDK\Loader;
|
16 |
-
use ThemeisleSDK\Product;
|
17 |
-
|
18 |
-
// Exit if accessed directly.
|
19 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
20 |
-
exit;
|
21 |
-
}
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Logger module for ThemeIsle SDK.
|
25 |
-
*/
|
26 |
-
class Logger extends Abstract_Module {
|
27 |
-
/**
|
28 |
-
* Endpoint where to collect logs.
|
29 |
-
*/
|
30 |
-
const TRACKING_ENDPOINT = 'http://log.themeisle.com/wp-json/v1/logs/';
|
31 |
-
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Check if we should load the module for this product.
|
35 |
-
*
|
36 |
-
* @param Product $product Product to load the module for.
|
37 |
-
*
|
38 |
-
* @return bool Should we load ?
|
39 |
-
*/
|
40 |
-
public function can_load( $product ) {
|
41 |
-
|
42 |
-
return apply_filters( $product->get_slug() . '_sdk_enable_logger', true );
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Load module logic.
|
47 |
-
*
|
48 |
-
* @param Product $product Product to load.
|
49 |
-
*
|
50 |
-
* @return Logger Module object.
|
51 |
-
*/
|
52 |
-
public function load( $product ) {
|
53 |
-
$this->product = $product;
|
54 |
-
$this->setup_notification();
|
55 |
-
$this->setup_actions();
|
56 |
-
|
57 |
-
return $this;
|
58 |
-
}
|
59 |
-
|
60 |
-
/**
|
61 |
-
* Setup notification on admin.
|
62 |
-
*/
|
63 |
-
public function setup_notification() {
|
64 |
-
if ( ! $this->product->is_wordpress_available() ) {
|
65 |
-
return;
|
66 |
-
}
|
67 |
-
|
68 |
-
add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );
|
69 |
-
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Setup tracking actions.
|
74 |
-
*/
|
75 |
-
public function setup_actions() {
|
76 |
-
if ( ! $this->is_logger_active() ) {
|
77 |
-
return;
|
78 |
-
}
|
79 |
-
$action_key = $this->product->get_key() . '_log_activity';
|
80 |
-
if ( ! wp_next_scheduled( $action_key ) ) {
|
81 |
-
wp_schedule_single_event( time() + ( rand( 1, 24 ) * 3600 ), $action_key );
|
82 |
-
}
|
83 |
-
add_action( $action_key, array( $this, 'send_log' ) );
|
84 |
-
|
85 |
-
}
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Check if the logger is active.
|
89 |
-
*
|
90 |
-
* @return bool Is logger active?
|
91 |
-
*/
|
92 |
-
private function is_logger_active() {
|
93 |
-
if ( ! $this->product->is_wordpress_available() ) {
|
94 |
-
return true;
|
95 |
-
}
|
96 |
-
$pro_slug = $this->product->get_pro_slug();
|
97 |
-
|
98 |
-
if ( ! empty( $pro_slug ) ) {
|
99 |
-
$all_products = Loader::get_products();
|
100 |
-
if ( isset( $all_products[ $pro_slug ] ) ) {
|
101 |
-
return true;
|
102 |
-
}
|
103 |
-
}
|
104 |
-
|
105 |
-
return ( get_option( $this->product->get_key() . '_logger_flag', 'no' ) === 'yes' );
|
106 |
-
}
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Add notification to queue.
|
110 |
-
*
|
111 |
-
* @param array $all_notifications Previous notification.
|
112 |
-
*
|
113 |
-
* @return array All notifications.
|
114 |
-
*/
|
115 |
-
public function add_notification( $all_notifications ) {
|
116 |
-
|
117 |
-
$message = apply_filters( $this->product->get_key() . '_logger_heading', 'Do you enjoy <b>{product}</b>? Become a contributor by opting in to our anonymous data tracking. We guarantee no sensitive data is collected.' );
|
118 |
-
|
119 |
-
$message = str_replace(
|
120 |
-
array( '{product}' ),
|
121 |
-
$this->product->get_friendly_name(),
|
122 |
-
$message
|
123 |
-
);
|
124 |
-
$button_submit = apply_filters( $this->product->get_key() . '_logger_button_submit', 'Sure, I would love to help.' );
|
125 |
-
$button_cancel = apply_filters( $this->product->get_key() . '_logger_button_cancel', 'No, thanks.' );
|
126 |
-
|
127 |
-
$all_notifications[] = [
|
128 |
-
'id' => $this->product->get_key() . '_logger_flag',
|
129 |
-
'message' => $message,
|
130 |
-
'ctas' => [
|
131 |
-
'confirm' => [
|
132 |
-
'link' => '#',
|
133 |
-
'text' => $button_submit,
|
134 |
-
],
|
135 |
-
'cancel' => [
|
136 |
-
'link' => '#',
|
137 |
-
'text' => $button_cancel,
|
138 |
-
],
|
139 |
-
],
|
140 |
-
];
|
141 |
-
|
142 |
-
return $all_notifications;
|
143 |
-
}
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Send the statistics to the api endpoint.
|
147 |
-
*/
|
148 |
-
public function send_log() {
|
149 |
-
$environment = array();
|
150 |
-
$theme = wp_get_theme();
|
151 |
-
$environment['theme'] = array();
|
152 |
-
$environment['theme']['name'] = $theme->get( 'Name' );
|
153 |
-
$environment['theme']['author'] = $theme->get( 'Author' );
|
154 |
-
$environment['plugins'] = get_option( 'active_plugins' );
|
155 |
-
global $wp_version;
|
156 |
-
wp_remote_post(
|
157 |
-
self::TRACKING_ENDPOINT,
|
158 |
-
array(
|
159 |
-
'method' => 'POST',
|
160 |
-
'timeout' => 3,
|
161 |
-
'redirection' => 5,
|
162 |
-
'headers' => array(
|
163 |
-
'X-ThemeIsle-Event' => 'log_site',
|
164 |
-
),
|
165 |
-
'body' => array(
|
166 |
-
'site' => get_site_url(),
|
167 |
-
'slug' => $this->product->get_slug(),
|
168 |
-
'version' => $this->product->get_version(),
|
169 |
-
'wp_version' => $wp_version,
|
170 |
-
'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ),
|
171 |
-
'environment' => $environment,
|
172 |
-
'license' => apply_filters( $this->product->get_key() . '_license_status', '' ),
|
173 |
-
),
|
174 |
-
)
|
175 |
-
);
|
176 |
-
}
|
177 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php
DELETED
@@ -1,459 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The notification model class for ThemeIsle SDK
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Modules
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
15 |
-
use ThemeisleSDK\Product;
|
16 |
-
|
17 |
-
// Exit if accessed directly.
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Notification module for ThemeIsle SDK.
|
24 |
-
*/
|
25 |
-
class Notification extends Abstract_Module {
|
26 |
-
/**
|
27 |
-
* Show notifications only after the user has the product installed after this amount of time, in hours.
|
28 |
-
*/
|
29 |
-
const MIN_INSTALL_TIME = 100;
|
30 |
-
/**
|
31 |
-
* How much time should we show the notification, in days.
|
32 |
-
*/
|
33 |
-
const MAX_TIME_TO_LIVE = 7;
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Number of days between notifications.
|
37 |
-
*/
|
38 |
-
const TIME_BETWEEN_NOTIFICATIONS = 5;
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Holds a possible notification list.
|
42 |
-
*
|
43 |
-
* @var array Notifications list.
|
44 |
-
*/
|
45 |
-
private static $notifications = [];
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Show notification data.
|
49 |
-
*/
|
50 |
-
public static function show_notification() {
|
51 |
-
|
52 |
-
$current_notification = self::get_last_notification();
|
53 |
-
|
54 |
-
$notification_details = [];
|
55 |
-
// Check if the saved notification is still present among the possible ones.
|
56 |
-
if ( ! empty( $current_notification ) ) {
|
57 |
-
$notification_details = self::get_notification_details( $current_notification );
|
58 |
-
if ( empty( $notification_details ) ) {
|
59 |
-
$current_notification = [];
|
60 |
-
}
|
61 |
-
}
|
62 |
-
// Check if the notificatin is expired.
|
63 |
-
if ( ! empty( $current_notification ) && self::is_notification_expired( $current_notification ) ) {
|
64 |
-
update_option( $current_notification['id'], 'no' );
|
65 |
-
self::set_last_active_notification_timestamp();
|
66 |
-
$current_notification = [];
|
67 |
-
}
|
68 |
-
// If we don't have any saved notification, get a new one.
|
69 |
-
if ( empty( $current_notification ) ) {
|
70 |
-
$notification_details = self::get_random_notification();
|
71 |
-
if ( empty( $notification_details ) ) {
|
72 |
-
return;
|
73 |
-
}
|
74 |
-
self::set_active_notification(
|
75 |
-
[
|
76 |
-
'id' => $notification_details['id'],
|
77 |
-
'display_at' => time(),
|
78 |
-
]
|
79 |
-
);
|
80 |
-
}
|
81 |
-
if ( empty( $notification_details ) ) {
|
82 |
-
return;
|
83 |
-
}
|
84 |
-
$notification_html = self::get_notification_html( $notification_details );
|
85 |
-
do_action( $notification_details['id'] . '_before_render' );
|
86 |
-
|
87 |
-
echo $notification_html;
|
88 |
-
|
89 |
-
do_action( $notification_details['id'] . '_after_render' );
|
90 |
-
self::render_snippets();
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Get last notification details.
|
95 |
-
*
|
96 |
-
* @return array Last notification details.
|
97 |
-
*/
|
98 |
-
private static function get_last_notification() {
|
99 |
-
$notification = self::get_notifications_metadata();
|
100 |
-
|
101 |
-
return isset( $notification['last_notification'] ) ? $notification['last_notification'] : [];
|
102 |
-
}
|
103 |
-
|
104 |
-
/**
|
105 |
-
* Get notification center details.
|
106 |
-
*
|
107 |
-
* @return array Notification center details.
|
108 |
-
*/
|
109 |
-
private static function get_notifications_metadata() {
|
110 |
-
|
111 |
-
$data = get_option(
|
112 |
-
'themeisle_sdk_notifications',
|
113 |
-
[
|
114 |
-
'last_notification' => [],
|
115 |
-
'last_notification_active' => 0,
|
116 |
-
]
|
117 |
-
);
|
118 |
-
|
119 |
-
return $data;
|
120 |
-
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* Check if the notification is still possible.
|
125 |
-
*
|
126 |
-
* @param array $notification Notification to check.
|
127 |
-
*
|
128 |
-
* @return array Either is still active or not.
|
129 |
-
*/
|
130 |
-
private static function get_notification_details( $notification ) {
|
131 |
-
$notifications = array_filter(
|
132 |
-
self::$notifications,
|
133 |
-
function ( $value ) use ( $notification ) {
|
134 |
-
if ( isset( $value['id'] ) && isset( $notification['id'] ) && $value['id'] === $notification['id'] ) {
|
135 |
-
return true;
|
136 |
-
}
|
137 |
-
|
138 |
-
return false;
|
139 |
-
}
|
140 |
-
);
|
141 |
-
|
142 |
-
return ! empty( $notifications ) ? reset( $notifications ) : [];
|
143 |
-
}
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Check if the notification is expired.
|
147 |
-
*
|
148 |
-
* @param array $notification Notification to check.
|
149 |
-
*
|
150 |
-
* @return bool Either the notification is due.
|
151 |
-
*/
|
152 |
-
private static function is_notification_expired( $notification ) {
|
153 |
-
if ( ! isset( $notification['display_at'] ) ) {
|
154 |
-
return true;
|
155 |
-
}
|
156 |
-
|
157 |
-
$notifications = array_filter(
|
158 |
-
self::$notifications,
|
159 |
-
function ( $value ) use ( $notification ) {
|
160 |
-
if ( isset( $value['id'] ) && isset( $notification['id'] ) && $value['id'] === $notification['id'] ) {
|
161 |
-
return true;
|
162 |
-
}
|
163 |
-
|
164 |
-
return false;
|
165 |
-
}
|
166 |
-
);
|
167 |
-
|
168 |
-
if ( empty( $notifications ) ) {
|
169 |
-
return true;
|
170 |
-
}
|
171 |
-
$notification_definition = reset( $notifications );
|
172 |
-
|
173 |
-
$when_to_expire = isset( $notification_definition['expires_at'] )
|
174 |
-
? $notification_definition['expires_at'] :
|
175 |
-
( isset( $notification_definition['expires'] )
|
176 |
-
? ( $notification['display_at'] + $notification_definition['expires'] ) :
|
177 |
-
( $notification['display_at'] + self::MAX_TIME_TO_LIVE * DAY_IN_SECONDS )
|
178 |
-
);
|
179 |
-
|
180 |
-
return ( $when_to_expire - time() ) < 0;
|
181 |
-
}
|
182 |
-
|
183 |
-
/**
|
184 |
-
* Set last notification details.
|
185 |
-
*/
|
186 |
-
private static function set_last_active_notification_timestamp() {
|
187 |
-
$metadata = self::get_notifications_metadata();
|
188 |
-
$metadata['last_notification_active'] = time();
|
189 |
-
update_option( 'themeisle_sdk_notifications', $metadata );
|
190 |
-
}
|
191 |
-
|
192 |
-
/**
|
193 |
-
* Return notification to show.
|
194 |
-
*
|
195 |
-
* @return array Notification data.
|
196 |
-
*/
|
197 |
-
public static function get_random_notification() {
|
198 |
-
if ( ( time() - self::get_last_active_notification_timestamp() ) < self::TIME_BETWEEN_NOTIFICATIONS * DAY_IN_SECONDS ) {
|
199 |
-
return [];
|
200 |
-
}
|
201 |
-
|
202 |
-
$notifications = self::$notifications;
|
203 |
-
$notifications = array_filter(
|
204 |
-
$notifications,
|
205 |
-
function ( $value ) {
|
206 |
-
if ( isset( $value['sticky'] ) && true === $value['sticky'] ) {
|
207 |
-
return true;
|
208 |
-
}
|
209 |
-
|
210 |
-
return false;
|
211 |
-
}
|
212 |
-
);
|
213 |
-
// No priority notifications, use all.
|
214 |
-
if ( empty( $notifications ) ) {
|
215 |
-
$notifications = self::$notifications;
|
216 |
-
}
|
217 |
-
if ( empty( $notifications ) ) {
|
218 |
-
return [];
|
219 |
-
}
|
220 |
-
$notifications = array_values( $notifications );
|
221 |
-
|
222 |
-
return $notifications[ array_rand( $notifications, 1 ) ];
|
223 |
-
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* Get last notification details.
|
228 |
-
*
|
229 |
-
* @return array Last notification details.
|
230 |
-
*/
|
231 |
-
private static function get_last_active_notification_timestamp() {
|
232 |
-
$notification = self::get_notifications_metadata();
|
233 |
-
|
234 |
-
return isset( $notification['last_notification_active'] ) ? $notification['last_notification_active'] : 0;
|
235 |
-
}
|
236 |
-
|
237 |
-
/**
|
238 |
-
* Get last notification details.
|
239 |
-
*
|
240 |
-
* @param array $notification Notification data.
|
241 |
-
*/
|
242 |
-
private static function set_active_notification( $notification ) {
|
243 |
-
$metadata = self::get_notifications_metadata();
|
244 |
-
$metadata['last_notification'] = $notification;
|
245 |
-
update_option( 'themeisle_sdk_notifications', $metadata );
|
246 |
-
}
|
247 |
-
|
248 |
-
/**
|
249 |
-
* Get notification html.
|
250 |
-
*
|
251 |
-
* @param array $notification_details Notification details.
|
252 |
-
*
|
253 |
-
* @return string Html for notice.
|
254 |
-
*/
|
255 |
-
public static function get_notification_html( $notification_details ) {
|
256 |
-
$default = [
|
257 |
-
'id' => '',
|
258 |
-
'heading' => '',
|
259 |
-
'message' => '',
|
260 |
-
'ctas' => [
|
261 |
-
'confirm' => [
|
262 |
-
'link' => '#',
|
263 |
-
'text' => '',
|
264 |
-
],
|
265 |
-
'cancel' => [
|
266 |
-
'link' => '#',
|
267 |
-
'text' => '',
|
268 |
-
],
|
269 |
-
],
|
270 |
-
];
|
271 |
-
$notification_details = wp_parse_args( $notification_details, $default );
|
272 |
-
|
273 |
-
$notification_html = '<div class="notice notice-success is-dismissible themeisle-sdk-notice" data-notification-id="' . esc_attr( $notification_details['id'] ) . '" id="' . esc_attr( $notification_details['id'] ) . '-notification"> <div class="themeisle-sdk-notification-box">';
|
274 |
-
|
275 |
-
if ( ! empty( $notification_details['heading'] ) ) {
|
276 |
-
$notification_html .= sprintf( '<h4>%s</h4>', wp_kses_post( $notification_details['heading'] ) );
|
277 |
-
}
|
278 |
-
if ( ! empty( $notification_details['message'] ) ) {
|
279 |
-
$notification_html .= wp_kses_post( $notification_details['message'] );
|
280 |
-
}
|
281 |
-
$notification_html .= '<div class="actions">';
|
282 |
-
|
283 |
-
if ( ! empty( $notification_details['ctas']['confirm']['text'] ) ) {
|
284 |
-
$notification_html .= sprintf(
|
285 |
-
'<a href="%s" target="_blank" class=" button button-primary %s" data-confirm="yes" >%s</a>',
|
286 |
-
esc_url( $notification_details['ctas']['confirm']['link'] ),
|
287 |
-
esc_attr( $notification_details['id'] . '_confirm' ),
|
288 |
-
wp_kses_post( $notification_details['ctas']['confirm']['text'] )
|
289 |
-
);
|
290 |
-
}
|
291 |
-
|
292 |
-
if ( ! empty( $notification_details['ctas']['cancel']['text'] ) ) {
|
293 |
-
$notification_html .= sprintf(
|
294 |
-
'<a href="%s" class=" button %s" data-confirm="no">%s</a>',
|
295 |
-
esc_url( $notification_details['ctas']['cancel']['link'] ),
|
296 |
-
esc_attr( $notification_details['id'] ) . '_cancel',
|
297 |
-
wp_kses_post( $notification_details['ctas']['cancel']['text'] )
|
298 |
-
);
|
299 |
-
}
|
300 |
-
|
301 |
-
$notification_html .= '</div>';
|
302 |
-
$notification_html .= ' </div>';
|
303 |
-
$notification_html .= ' </div>';
|
304 |
-
|
305 |
-
return $notification_html;
|
306 |
-
}
|
307 |
-
|
308 |
-
/**
|
309 |
-
* Adds js snippet for hiding the notice.
|
310 |
-
*/
|
311 |
-
public static function render_snippets() {
|
312 |
-
|
313 |
-
?>
|
314 |
-
<style type="text/css">
|
315 |
-
.themeisle-sdk-notification-box {
|
316 |
-
padding: 3px;
|
317 |
-
}
|
318 |
-
|
319 |
-
.themeisle-sdk-notification-box .actions {
|
320 |
-
margin-top: 6px;
|
321 |
-
margin-bottom: 4px;
|
322 |
-
}
|
323 |
-
|
324 |
-
.themeisle-sdk-notification-box .button {
|
325 |
-
margin-right: 5px;
|
326 |
-
}
|
327 |
-
</style>
|
328 |
-
<script type="text/javascript">
|
329 |
-
(function ($) {
|
330 |
-
$(document).ready(function () {
|
331 |
-
$('#wpbody-content').on('click', ".themeisle-sdk-notice a.button, .themeisle-sdk-notice .notice-dismiss", function (e) {
|
332 |
-
|
333 |
-
var container = $('.themeisle-sdk-notice');
|
334 |
-
var link = $(this);
|
335 |
-
var notification_id = container.attr('data-notification-id');
|
336 |
-
var confirm = link.attr('data-confirm');
|
337 |
-
if (typeof confirm === "undefined") {
|
338 |
-
confirm = 'no';
|
339 |
-
}
|
340 |
-
$.post(
|
341 |
-
ajaxurl,
|
342 |
-
{
|
343 |
-
'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
|
344 |
-
'action': 'themeisle_sdk_dismiss_notice',
|
345 |
-
'id': notification_id,
|
346 |
-
'confirm': confirm
|
347 |
-
}
|
348 |
-
);
|
349 |
-
if (confirm === 'yes') {
|
350 |
-
$(this).trigger('themeisle-sdk:confirmed');
|
351 |
-
} else {
|
352 |
-
$(this).trigger('themeisle-sdk:canceled');
|
353 |
-
}
|
354 |
-
container.hide();
|
355 |
-
if (link.attr('href') === '#') {
|
356 |
-
return false;
|
357 |
-
}
|
358 |
-
});
|
359 |
-
});
|
360 |
-
})(jQuery);
|
361 |
-
</script>
|
362 |
-
<?php
|
363 |
-
}
|
364 |
-
|
365 |
-
/**
|
366 |
-
* Dismiss the notification.
|
367 |
-
*/
|
368 |
-
static function dismiss() {
|
369 |
-
check_ajax_referer( (string) __CLASS__, 'nonce' );
|
370 |
-
|
371 |
-
$id = isset( $_POST['id'] ) ? sanitize_text_field( $_POST['id'] ) : '';
|
372 |
-
$confirm = isset( $_POST['confirm'] ) ? sanitize_text_field( $_POST['confirm'] ) : 'no';
|
373 |
-
|
374 |
-
if ( empty( $id ) ) {
|
375 |
-
wp_send_json( [] );
|
376 |
-
}
|
377 |
-
self::set_last_active_notification_timestamp();
|
378 |
-
update_option( $id, $confirm );
|
379 |
-
do_action( $id . '_process_confirm', $confirm );
|
380 |
-
wp_send_json( [] );
|
381 |
-
}
|
382 |
-
|
383 |
-
/**
|
384 |
-
* Check if we should load the notification module.
|
385 |
-
*
|
386 |
-
* @param Product $product Product to check.
|
387 |
-
*
|
388 |
-
* @return bool Should we load this?
|
389 |
-
*/
|
390 |
-
public function can_load( $product ) {
|
391 |
-
|
392 |
-
if ( $this->is_from_partner( $product ) ) {
|
393 |
-
return false;
|
394 |
-
}
|
395 |
-
if ( ! current_user_can( 'manage_options' ) ) {
|
396 |
-
return false;
|
397 |
-
}
|
398 |
-
if ( ( time() - $product->get_install_time() ) < ( self::MIN_INSTALL_TIME * HOUR_IN_SECONDS ) ) {
|
399 |
-
return false;
|
400 |
-
}
|
401 |
-
|
402 |
-
return true;
|
403 |
-
}
|
404 |
-
|
405 |
-
/**
|
406 |
-
* Setup notifications queue.
|
407 |
-
*/
|
408 |
-
public static function setup_notifications() {
|
409 |
-
$notifications = apply_filters( 'themeisle_sdk_registered_notifications', [] );
|
410 |
-
$notifications = array_filter(
|
411 |
-
$notifications,
|
412 |
-
function ( $value ) {
|
413 |
-
if ( ! isset( $value['id'] ) ) {
|
414 |
-
return false;
|
415 |
-
}
|
416 |
-
if ( get_option( $value['id'], '' ) !== '' ) {
|
417 |
-
return false;
|
418 |
-
}
|
419 |
-
|
420 |
-
return apply_filters( $value['id'] . '_should_show', true );
|
421 |
-
}
|
422 |
-
);
|
423 |
-
self::$notifications = $notifications;
|
424 |
-
}
|
425 |
-
/**
|
426 |
-
* Load the module logic.
|
427 |
-
*
|
428 |
-
* @param Product $product Product to load the module for.
|
429 |
-
*
|
430 |
-
* @return Notification Module instance.
|
431 |
-
*/
|
432 |
-
public function load( $product ) {
|
433 |
-
if ( apply_filters( 'themeisle_sdk_hide_notifications', false ) ) {
|
434 |
-
return;
|
435 |
-
}
|
436 |
-
$this->product = $product;
|
437 |
-
|
438 |
-
$notifications = apply_filters( 'themeisle_sdk_registered_notifications', [] );
|
439 |
-
$notifications = array_filter(
|
440 |
-
$notifications,
|
441 |
-
function ( $value ) {
|
442 |
-
if ( ! isset( $value['id'] ) ) {
|
443 |
-
return false;
|
444 |
-
}
|
445 |
-
if ( get_option( $value['id'], '' ) !== '' ) {
|
446 |
-
return false;
|
447 |
-
}
|
448 |
-
|
449 |
-
return apply_filters( $value['id'] . '_should_show', true );
|
450 |
-
}
|
451 |
-
);
|
452 |
-
self::$notifications = $notifications;
|
453 |
-
add_action( 'admin_notices', array( __CLASS__, 'show_notification' ) );
|
454 |
-
add_action( 'wp_ajax_themeisle_sdk_dismiss_notice', array( __CLASS__, 'dismiss' ) );
|
455 |
-
add_action( 'admin_head', array( __CLASS__, 'setup_notifications' ) );
|
456 |
-
|
457 |
-
return $this;
|
458 |
-
}
|
459 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Recommendation.php
DELETED
@@ -1,374 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The class that exposes hooks for recommend.
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Rollback
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
// Exit if accessed directly.
|
15 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
16 |
-
use ThemeisleSDK\Product;
|
17 |
-
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Expose endpoints for ThemeIsle SDK.
|
24 |
-
*/
|
25 |
-
class Recommendation extends Abstract_Module {
|
26 |
-
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Load module logic.
|
30 |
-
*
|
31 |
-
* @param Product $product Product to load.
|
32 |
-
*/
|
33 |
-
public function load( $product ) {
|
34 |
-
$this->product = $product;
|
35 |
-
$this->setup_hooks();
|
36 |
-
|
37 |
-
return $this;
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Setup endpoints.
|
42 |
-
*/
|
43 |
-
private function setup_hooks() {
|
44 |
-
add_action( $this->product->get_key() . '_recommend_products', array( $this, 'render_products_box' ), 10, 4 );
|
45 |
-
add_action( 'admin_head', array( $this, 'enqueue' ) );
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Check if we should load the module for this product.
|
50 |
-
*
|
51 |
-
* @param Product $product Product data.
|
52 |
-
*
|
53 |
-
* @return bool Should we load the module?
|
54 |
-
*/
|
55 |
-
public function can_load( $product ) {
|
56 |
-
return true;
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Render products box content.
|
61 |
-
*
|
62 |
-
* @param array $plugins_list - list of useful plugins (in slug => nicename format).
|
63 |
-
* @param array $themes_list - list of useful themes (in slug => nicename format).
|
64 |
-
* @param array $strings - list of translated strings.
|
65 |
-
* @param array $preferences - list of preferences.
|
66 |
-
*/
|
67 |
-
function render_products_box( $plugins_list, $themes_list, $strings, $preferences = array() ) {
|
68 |
-
|
69 |
-
if ( empty( $plugins_list ) && empty( $themes_list ) ) {
|
70 |
-
return;
|
71 |
-
}
|
72 |
-
|
73 |
-
if ( ! empty( $plugins_list ) && ! current_user_can( 'install_plugins' ) ) {
|
74 |
-
return;
|
75 |
-
}
|
76 |
-
|
77 |
-
if ( ! empty( $themes_list ) && ! current_user_can( 'install_themes' ) ) {
|
78 |
-
return;
|
79 |
-
}
|
80 |
-
|
81 |
-
add_thickbox();
|
82 |
-
|
83 |
-
if ( ! empty( $themes_list ) ) {
|
84 |
-
$list = $this->get_themes( $themes_list, $preferences );
|
85 |
-
|
86 |
-
if ( has_action( $this->product->get_key() . '_recommend_products_theme_template' ) ) {
|
87 |
-
do_action( $this->product->get_key() . '_recommend_products_theme_template', $list, $strings, $preferences );
|
88 |
-
} else {
|
89 |
-
echo '<div class="recommend-product">';
|
90 |
-
|
91 |
-
foreach ( $list as $theme ) {
|
92 |
-
echo '<div class="plugin_box">';
|
93 |
-
echo ' <img class="theme-banner" src="' . $theme->screenshot_url . '">';
|
94 |
-
echo ' <div class="title-action-wrapper">';
|
95 |
-
echo ' <span class="plugin-name">' . esc_html( $theme->custom_name ) . '</span>';
|
96 |
-
if ( ! isset( $preferences['description'] ) || ( isset( $preferences['description'] ) && $preferences['description'] ) ) {
|
97 |
-
echo '<span class="plugin-desc">' . esc_html( substr( $theme->description, 0, strpos( $theme->description, '.' ) ) ) . '.</span>';
|
98 |
-
}
|
99 |
-
echo ' </div>';
|
100 |
-
echo '<div class="plugin-box-footer">';
|
101 |
-
echo ' <div class="button-wrap">';
|
102 |
-
echo ' <a class="button button-primary " href="' . esc_url( $theme->custom_url ) . '"><span class="dashicons dashicons-external"></span>' . esc_html( $strings['install'] ) . '</a>';
|
103 |
-
echo ' </div>';
|
104 |
-
echo ' </div>';
|
105 |
-
echo '</div>';
|
106 |
-
}
|
107 |
-
|
108 |
-
echo '</div>';
|
109 |
-
}
|
110 |
-
}
|
111 |
-
if ( ! empty( $plugins_list ) ) {
|
112 |
-
$list = $this->get_plugins( $plugins_list, $preferences );
|
113 |
-
|
114 |
-
if ( has_action( $this->product->get_key() . '_recommend_products_plugin_template' ) ) {
|
115 |
-
do_action( $this->product->get_key() . '_recommend_products_plugin_template', $list, $strings, $preferences );
|
116 |
-
} else {
|
117 |
-
echo '<div class="recommend-product">';
|
118 |
-
|
119 |
-
foreach ( $list as $current_plugin ) {
|
120 |
-
echo '<div class="plugin_box">';
|
121 |
-
echo ' <img class="plugin-banner" src="' . $current_plugin->custom_image . '">';
|
122 |
-
echo ' <div class="title-action-wrapper">';
|
123 |
-
echo ' <span class="plugin-name">' . esc_html( $current_plugin->custom_name ) . '</span>';
|
124 |
-
if ( ! isset( $preferences['description'] ) || ( isset( $preferences['description'] ) && $preferences['description'] ) ) {
|
125 |
-
echo '<span class="plugin-desc">' . esc_html( substr( $current_plugin->short_description, 0, strpos( $current_plugin->short_description, '.' ) ) ) . '. </span>';
|
126 |
-
}
|
127 |
-
echo ' </div>';
|
128 |
-
echo ' <div class="plugin-box-footer">';
|
129 |
-
echo ' <a class="button button-primary thickbox open-plugin-details-modal" href="' . esc_url( $current_plugin->custom_url ) . '"><span class="dashicons dashicons-external"></span>' . esc_html( $strings['install'] ) . '</a>';
|
130 |
-
echo ' </div>';
|
131 |
-
echo '</div>';
|
132 |
-
}
|
133 |
-
|
134 |
-
echo '</div>';
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
}
|
139 |
-
|
140 |
-
/**
|
141 |
-
* Collect all the information for the themes list.
|
142 |
-
*
|
143 |
-
* @param array $themes_list - list of useful themes (in slug => nicename format).
|
144 |
-
* @param array $preferences - list of preferences.
|
145 |
-
*
|
146 |
-
* @return array
|
147 |
-
*/
|
148 |
-
private function get_themes( $themes_list, $preferences ) {
|
149 |
-
$list = array();
|
150 |
-
foreach ( $themes_list as $slug => $nicename ) {
|
151 |
-
$theme = $this->call_theme_api( $slug );
|
152 |
-
if ( ! $theme ) {
|
153 |
-
continue;
|
154 |
-
}
|
155 |
-
|
156 |
-
$url = add_query_arg(
|
157 |
-
array(
|
158 |
-
'theme' => $theme->slug,
|
159 |
-
),
|
160 |
-
network_admin_url( 'theme-install.php' )
|
161 |
-
);
|
162 |
-
|
163 |
-
$name = empty( $nicename ) ? $theme->name : $nicename;
|
164 |
-
|
165 |
-
$theme->custom_url = $url;
|
166 |
-
$theme->custom_name = $name;
|
167 |
-
|
168 |
-
$list[] = $theme;
|
169 |
-
}
|
170 |
-
|
171 |
-
return $list;
|
172 |
-
}
|
173 |
-
|
174 |
-
/**
|
175 |
-
* Call theme api
|
176 |
-
*
|
177 |
-
* @param string $slug theme slug.
|
178 |
-
*
|
179 |
-
* @return array|mixed|object
|
180 |
-
*/
|
181 |
-
private function call_theme_api( $slug ) {
|
182 |
-
$theme = get_transient( 'ti_theme_info_' . $slug );
|
183 |
-
|
184 |
-
if ( false !== $theme ) {
|
185 |
-
return $theme;
|
186 |
-
}
|
187 |
-
|
188 |
-
$products = wp_remote_get(
|
189 |
-
'https://api.wordpress.org/themes/info/1.1/?action=query_themes&request[theme]=' . $slug . '&request[per_page]=1'
|
190 |
-
);
|
191 |
-
$products = json_decode( wp_remote_retrieve_body( $products ) );
|
192 |
-
if ( is_object( $products ) ) {
|
193 |
-
$theme = $products->themes[0];
|
194 |
-
set_transient( 'ti_theme_info_' . $slug, $theme, 6 * HOUR_IN_SECONDS );
|
195 |
-
}
|
196 |
-
|
197 |
-
return $theme;
|
198 |
-
}
|
199 |
-
|
200 |
-
/**
|
201 |
-
* Collect all the information for the plugins list.
|
202 |
-
*
|
203 |
-
* @param array $plugins_list - list of useful plugins (in slug => nicename format).
|
204 |
-
* @param array $preferences - list of preferences.
|
205 |
-
*
|
206 |
-
* @return array
|
207 |
-
*/
|
208 |
-
private function get_plugins( $plugins_list, $preferences ) {
|
209 |
-
$list = array();
|
210 |
-
foreach ( $plugins_list as $plugin => $nicename ) {
|
211 |
-
$current_plugin = $this->call_plugin_api( $plugin );
|
212 |
-
|
213 |
-
$name = empty( $nicename ) ? $current_plugin->name : $nicename;
|
214 |
-
|
215 |
-
$image = $current_plugin->banners['low'];
|
216 |
-
if ( isset( $preferences['image'] ) && 'icon' === $preferences['image'] ) {
|
217 |
-
$image = $current_plugin->icons['1x'];
|
218 |
-
}
|
219 |
-
|
220 |
-
$url = add_query_arg(
|
221 |
-
array(
|
222 |
-
'tab' => 'plugin-information',
|
223 |
-
'plugin' => $current_plugin->slug,
|
224 |
-
'TB_iframe' => true,
|
225 |
-
'width' => 800,
|
226 |
-
'height' => 800,
|
227 |
-
),
|
228 |
-
network_admin_url( 'plugin-install.php' )
|
229 |
-
);
|
230 |
-
|
231 |
-
$current_plugin->custom_url = $url;
|
232 |
-
$current_plugin->custom_name = $name;
|
233 |
-
$current_plugin->custom_image = $image;
|
234 |
-
|
235 |
-
$list[] = $current_plugin;
|
236 |
-
}
|
237 |
-
|
238 |
-
return $list;
|
239 |
-
}
|
240 |
-
|
241 |
-
/**
|
242 |
-
* Call plugin api
|
243 |
-
*
|
244 |
-
* @param string $slug plugin slug.
|
245 |
-
*
|
246 |
-
* @return array|mixed|object
|
247 |
-
*/
|
248 |
-
private function call_plugin_api( $slug ) {
|
249 |
-
include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
|
250 |
-
|
251 |
-
$call_api = get_transient( 'ti_plugin_info_' . $slug );
|
252 |
-
|
253 |
-
if ( false === $call_api ) {
|
254 |
-
$call_api = plugins_api(
|
255 |
-
'plugin_information',
|
256 |
-
array(
|
257 |
-
'slug' => $slug,
|
258 |
-
'fields' => array(
|
259 |
-
'downloaded' => false,
|
260 |
-
'rating' => false,
|
261 |
-
'description' => false,
|
262 |
-
'short_description' => true,
|
263 |
-
'donate_link' => false,
|
264 |
-
'tags' => false,
|
265 |
-
'sections' => true,
|
266 |
-
'homepage' => true,
|
267 |
-
'added' => false,
|
268 |
-
'last_updated' => false,
|
269 |
-
'compatibility' => false,
|
270 |
-
'tested' => false,
|
271 |
-
'requires' => false,
|
272 |
-
'downloadlink' => false,
|
273 |
-
'icons' => true,
|
274 |
-
'banners' => true,
|
275 |
-
),
|
276 |
-
)
|
277 |
-
);
|
278 |
-
set_transient( 'ti_plugin_info_' . $slug, $call_api, 30 * MINUTE_IN_SECONDS );
|
279 |
-
}
|
280 |
-
|
281 |
-
return $call_api;
|
282 |
-
}
|
283 |
-
|
284 |
-
/**
|
285 |
-
* Load css and scripts for the plugin recommend page.
|
286 |
-
*/
|
287 |
-
public function enqueue() {
|
288 |
-
$screen = get_current_screen();
|
289 |
-
|
290 |
-
if ( ! isset( $screen->id ) ) {
|
291 |
-
return;
|
292 |
-
}
|
293 |
-
if ( false === apply_filters( $this->product->get_key() . '_enqueue_recommend', false, $screen->id ) ) {
|
294 |
-
return;
|
295 |
-
}
|
296 |
-
|
297 |
-
?>
|
298 |
-
<style type="text/css">
|
299 |
-
.recommend-product {
|
300 |
-
display: flex;
|
301 |
-
justify-content: space-between;
|
302 |
-
flex-wrap: wrap;
|
303 |
-
}
|
304 |
-
|
305 |
-
.recommend-product .theme-banner {
|
306 |
-
width:200px;
|
307 |
-
margin: auto;
|
308 |
-
}
|
309 |
-
.recommend-product .plugin-banner {
|
310 |
-
width: 100px;
|
311 |
-
margin: auto;
|
312 |
-
}
|
313 |
-
|
314 |
-
.recommend-product .plugin_box .button span{
|
315 |
-
|
316 |
-
margin-top: 2px;
|
317 |
-
margin-right: 7px;
|
318 |
-
}
|
319 |
-
.recommend-product .plugin_box .button{
|
320 |
-
margin-bottom:10px;
|
321 |
-
}
|
322 |
-
.recommend-product .plugin_box {
|
323 |
-
margin-bottom: 20px;
|
324 |
-
padding-top: 5px;
|
325 |
-
display: flex;
|
326 |
-
box-shadow: 0px 0px 10px -5px rgba(0,0,0,0.55);
|
327 |
-
background: #fff;
|
328 |
-
border-radius: 5px;
|
329 |
-
flex-direction: column;
|
330 |
-
justify-content: flex-start;
|
331 |
-
width: 95%;
|
332 |
-
}
|
333 |
-
|
334 |
-
.recommend-product .title-action-wrapper {
|
335 |
-
padding: 15px 20px 5px 20px;
|
336 |
-
}
|
337 |
-
|
338 |
-
.recommend-product .plugin-name {
|
339 |
-
font-size: 18px;
|
340 |
-
display: block;
|
341 |
-
white-space: nowrap;
|
342 |
-
text-overflow: ellipsis;
|
343 |
-
margin-bottom: 10px;
|
344 |
-
overflow: hidden;
|
345 |
-
line-height: normal;
|
346 |
-
}
|
347 |
-
|
348 |
-
|
349 |
-
.recommend-product .plugin-desc {
|
350 |
-
display: block;
|
351 |
-
margin-bottom: 10px;
|
352 |
-
font-size: 13px;
|
353 |
-
color: #777;
|
354 |
-
line-height: 1.6;
|
355 |
-
}
|
356 |
-
|
357 |
-
.recommend-product .button-wrap > div {
|
358 |
-
padding: 0;
|
359 |
-
margin: 0;
|
360 |
-
}
|
361 |
-
|
362 |
-
.plugin-box-footer {
|
363 |
-
display: flex;
|
364 |
-
justify-content: space-around;
|
365 |
-
vertical-align: middle;
|
366 |
-
align-items: center;
|
367 |
-
padding: 0px 10px 5px;
|
368 |
-
flex: 1;
|
369 |
-
margin-top: auto;
|
370 |
-
}
|
371 |
-
</style>
|
372 |
-
<?php
|
373 |
-
}
|
374 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Review.php
DELETED
@@ -1,117 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Review model class for ThemeIsle SDK
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Modules
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
15 |
-
use ThemeisleSDK\Product;
|
16 |
-
|
17 |
-
// Exit if accessed directly.
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Review module for ThemeIsle SDK.
|
24 |
-
*/
|
25 |
-
class Review extends Abstract_Module {
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Check if we should load module for this.
|
29 |
-
*
|
30 |
-
* @param Product $product Product to check.
|
31 |
-
*
|
32 |
-
* @return bool Should load ?
|
33 |
-
*/
|
34 |
-
public function can_load( $product ) {
|
35 |
-
if ( $this->is_from_partner( $product ) ) {
|
36 |
-
return false;
|
37 |
-
}
|
38 |
-
if ( ! $product->is_wordpress_available() ) {
|
39 |
-
return false;
|
40 |
-
}
|
41 |
-
|
42 |
-
return apply_filters( $product->get_slug() . '_sdk_should_review', true );
|
43 |
-
}
|
44 |
-
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Add notification to queue.
|
48 |
-
*
|
49 |
-
* @param array $all_notifications Previous notification.
|
50 |
-
*
|
51 |
-
* @return array All notifications.
|
52 |
-
*/
|
53 |
-
public function add_notification( $all_notifications ) {
|
54 |
-
|
55 |
-
$developers = [
|
56 |
-
'Bogdan',
|
57 |
-
'Marius',
|
58 |
-
'Hardeep',
|
59 |
-
'Rodica',
|
60 |
-
'Stefan',
|
61 |
-
'Uriahs',
|
62 |
-
'Madalin',
|
63 |
-
'Cristi',
|
64 |
-
'Silviu',
|
65 |
-
'Andrei',
|
66 |
-
];
|
67 |
-
|
68 |
-
$link = 'https://wordpress.org/support/' . $this->product->get_type() . '/' . $this->product->get_slug() . '/reviews/#wporg-footer';
|
69 |
-
|
70 |
-
$message = apply_filters( $this->product->get_key() . '_feedback_review_message', '<p>Hey, it’s great to see you have <b>{product}</b> active for a few days now. How is everything going? If you can spare a few moments to rate it on WordPress.org it would help us a lot (and boost my motivation). Cheers! <br/> <br/>~ {developer}, developer of {product}</p>' );
|
71 |
-
|
72 |
-
$button_submit = apply_filters( $this->product->get_key() . '_feedback_review_button_do', 'Ok, I will gladly help.' );
|
73 |
-
$button_cancel = apply_filters( $this->product->get_key() . '_feedback_review_button_cancel', 'No, thanks.' );
|
74 |
-
$message = str_replace(
|
75 |
-
[ '{product}', '{developer}' ],
|
76 |
-
[
|
77 |
-
$this->product->get_friendly_name(),
|
78 |
-
$developers[ strlen( get_site_url() ) % 10 ],
|
79 |
-
],
|
80 |
-
$message
|
81 |
-
);
|
82 |
-
|
83 |
-
$all_notifications[] = [
|
84 |
-
'id' => $this->product->get_key() . '_review_flag',
|
85 |
-
'message' => $message,
|
86 |
-
'ctas' => [
|
87 |
-
'confirm' => [
|
88 |
-
'link' => $link,
|
89 |
-
'text' => $button_submit,
|
90 |
-
],
|
91 |
-
'cancel' => [
|
92 |
-
'link' => '#',
|
93 |
-
'text' => $button_cancel,
|
94 |
-
],
|
95 |
-
],
|
96 |
-
];
|
97 |
-
|
98 |
-
return $all_notifications;
|
99 |
-
}
|
100 |
-
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Load module logic.
|
104 |
-
*
|
105 |
-
* @param Product $product Product to load.
|
106 |
-
*
|
107 |
-
* @return Review Module instance.
|
108 |
-
*/
|
109 |
-
public function load( $product ) {
|
110 |
-
|
111 |
-
$this->product = $product;
|
112 |
-
|
113 |
-
add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );
|
114 |
-
|
115 |
-
return $this;
|
116 |
-
}
|
117 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Rollback.php
DELETED
@@ -1,376 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The rollback class for ThemeIsle SDK.
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Rollback
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
// Exit if accessed directly.
|
15 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
16 |
-
use ThemeisleSDK\Product;
|
17 |
-
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Rollback for ThemeIsle SDK.
|
24 |
-
*/
|
25 |
-
class Rollback extends Abstract_Module {
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Add js scripts for themes rollback.
|
29 |
-
*/
|
30 |
-
public function add_footer() {
|
31 |
-
$screen = get_current_screen();
|
32 |
-
if ( ! isset( $screen->parent_file ) ) {
|
33 |
-
return;
|
34 |
-
}
|
35 |
-
if ( 'themes.php' !== $screen->parent_file ) {
|
36 |
-
return;
|
37 |
-
}
|
38 |
-
if ( ! $this->product->is_theme() ) {
|
39 |
-
return;
|
40 |
-
}
|
41 |
-
$version = $this->get_rollback();
|
42 |
-
if ( empty( $version ) ) {
|
43 |
-
return;
|
44 |
-
}
|
45 |
-
?>
|
46 |
-
<script type="text/javascript">
|
47 |
-
jQuery(document).ready(function ($) {
|
48 |
-
setInterval(checkTheme, 500);
|
49 |
-
|
50 |
-
function checkTheme() {
|
51 |
-
var theme = '<?php echo esc_attr( $this->product->get_slug() ); ?>-action';
|
52 |
-
|
53 |
-
if (jQuery('#' + theme).length > 0) {
|
54 |
-
if (jQuery('.theme-overlay.active').is(':visible')) {
|
55 |
-
if (jQuery('#' + theme + '-rollback').length === 0) {
|
56 |
-
jQuery('.theme-actions .active-theme').prepend('<a class="button" style="float:left" id="' + theme + '-rollback" href="<?php echo esc_url( wp_nonce_url( admin_url( 'admin-post.php?action=' . $this->product->get_key() . '_rollback' ), $this->product->get_key() . '_rollback' ) ); ?>">Rollback to v<?php echo esc_attr( $version['version'] ); ?></a>')
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
}
|
61 |
-
}
|
62 |
-
})
|
63 |
-
|
64 |
-
</script>
|
65 |
-
<?php
|
66 |
-
|
67 |
-
}
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Get the last rollback for this product.
|
71 |
-
*
|
72 |
-
* @return array The rollback version.
|
73 |
-
*/
|
74 |
-
public function get_rollback() {
|
75 |
-
$rollback = array();
|
76 |
-
$versions = $this->get_api_versions();
|
77 |
-
$versions = apply_filters( $this->product->get_key() . '_rollbacks', $versions );
|
78 |
-
if ( empty( $versions ) ) {
|
79 |
-
return $rollback;
|
80 |
-
}
|
81 |
-
if ( $versions ) {
|
82 |
-
usort( $versions, array( $this, 'sort_rollback_array' ) );
|
83 |
-
foreach ( $versions as $version ) {
|
84 |
-
if ( isset( $version['version'] ) && isset( $version['url'] ) && version_compare( $this->product->get_version(), $version['version'], '>' ) ) {
|
85 |
-
$rollback = $version;
|
86 |
-
break;
|
87 |
-
}
|
88 |
-
}
|
89 |
-
}
|
90 |
-
|
91 |
-
return $rollback;
|
92 |
-
}
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Get versions array from wp.org
|
96 |
-
*
|
97 |
-
* @return array Array of versions.
|
98 |
-
*/
|
99 |
-
private function get_api_versions() {
|
100 |
-
|
101 |
-
$cache_key = $this->product->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->product->get_version() ) . 'versions';
|
102 |
-
$cache_versions = get_transient( $cache_key );
|
103 |
-
if ( false === $cache_versions ) {
|
104 |
-
$versions = $this->get_remote_versions();
|
105 |
-
set_transient( $cache_key, $versions, 5 * DAY_IN_SECONDS );
|
106 |
-
} else {
|
107 |
-
$versions = is_array( $cache_versions ) ? $cache_versions : array();
|
108 |
-
}
|
109 |
-
|
110 |
-
return $versions;
|
111 |
-
}
|
112 |
-
|
113 |
-
/**
|
114 |
-
* Get remote versions zips.
|
115 |
-
*
|
116 |
-
* @return array Array of available versions.
|
117 |
-
*/
|
118 |
-
private function get_remote_versions() {
|
119 |
-
$url = $this->get_versions_api_url();
|
120 |
-
if ( empty( $url ) ) {
|
121 |
-
return [];
|
122 |
-
}
|
123 |
-
$response = wp_remote_get( $url );
|
124 |
-
if ( is_wp_error( $response ) ) {
|
125 |
-
return array();
|
126 |
-
}
|
127 |
-
$response = wp_remote_retrieve_body( $response );
|
128 |
-
|
129 |
-
if ( is_serialized( $response ) ) {
|
130 |
-
$response = maybe_unserialize( $response );
|
131 |
-
} else {
|
132 |
-
$response = json_decode( $response );
|
133 |
-
}
|
134 |
-
|
135 |
-
if ( ! is_object( $response ) ) {
|
136 |
-
return array();
|
137 |
-
}
|
138 |
-
if ( ! isset( $response->versions ) ) {
|
139 |
-
return array();
|
140 |
-
}
|
141 |
-
|
142 |
-
$versions = array();
|
143 |
-
foreach ( $response->versions as $key => $value ) {
|
144 |
-
$versions[] = array(
|
145 |
-
'version' => is_object( $value ) ? $value->version : $key,
|
146 |
-
'url' => is_object( $value ) ? $value->file : $value,
|
147 |
-
);
|
148 |
-
}
|
149 |
-
|
150 |
-
return $versions;
|
151 |
-
}
|
152 |
-
|
153 |
-
/**
|
154 |
-
* Return url where to check for versions.
|
155 |
-
*
|
156 |
-
* @return string Url where to check for versions.
|
157 |
-
*/
|
158 |
-
private function get_versions_api_url() {
|
159 |
-
if ( $this->product->is_wordpress_available() && $this->product->is_plugin() ) {
|
160 |
-
return sprintf( 'https://api.wordpress.org/plugins/info/1.0/%s', $this->product->get_slug() );
|
161 |
-
}
|
162 |
-
if ( $this->product->is_wordpress_available() && $this->product->is_theme() ) {
|
163 |
-
return sprintf( 'https://api.wordpress.org/themes/info/1.1/?action=theme_information&request[slug]=%s&request[fields][versions]=true', $this->product->get_slug() );
|
164 |
-
}
|
165 |
-
$license = $this->product->get_license();
|
166 |
-
if ( $this->product->requires_license() && strlen( $license ) < 10 ) {
|
167 |
-
return '';
|
168 |
-
}
|
169 |
-
|
170 |
-
return sprintf( '%s?edd_action=get_versions&name=%s&url=%s&license=%s', $this->product->get_store_url(), urlencode( $this->product->get_name() ), urlencode( get_site_url() ), $license );
|
171 |
-
}
|
172 |
-
|
173 |
-
/**
|
174 |
-
* Show the rollback links in the plugin page.
|
175 |
-
*
|
176 |
-
* @param array $links Plugin links.
|
177 |
-
*
|
178 |
-
* @return array $links Altered links.
|
179 |
-
*/
|
180 |
-
public function add_rollback_link( $links ) {
|
181 |
-
$version = $this->get_rollback();
|
182 |
-
if ( empty( $version ) ) {
|
183 |
-
return $links;
|
184 |
-
}
|
185 |
-
$links[] = '<a href="' . wp_nonce_url( admin_url( 'admin-post.php?action=' . $this->product->get_key() . '_rollback' ), $this->product->get_key() . '_rollback' ) . '">' . sprintf( apply_filters( $this->product->get_key() . '_rollback_label', 'Rollback to v%s' ), $version['version'] ) . '</a>';
|
186 |
-
|
187 |
-
return $links;
|
188 |
-
}
|
189 |
-
|
190 |
-
/**
|
191 |
-
* Start the rollback operation.
|
192 |
-
*/
|
193 |
-
public function start_rollback() {
|
194 |
-
if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], $this->product->get_key() . '_rollback' ) ) {
|
195 |
-
wp_nonce_ays( '' );
|
196 |
-
}
|
197 |
-
|
198 |
-
if ( $this->product->is_plugin() ) {
|
199 |
-
$this->start_rollback_plugin();
|
200 |
-
|
201 |
-
return;
|
202 |
-
}
|
203 |
-
if ( $this->product->is_theme() ) {
|
204 |
-
$this->start_rollback_theme();
|
205 |
-
|
206 |
-
return;
|
207 |
-
}
|
208 |
-
}
|
209 |
-
|
210 |
-
/**
|
211 |
-
* Start the rollback operation for the plugin.
|
212 |
-
*/
|
213 |
-
private function start_rollback_plugin() {
|
214 |
-
$rollback = $this->get_rollback();
|
215 |
-
$plugin_transient = get_site_transient( 'update_plugins' );
|
216 |
-
$plugin_folder = $this->product->get_slug();
|
217 |
-
$plugin_file = $this->product->get_file();
|
218 |
-
$version = $rollback['version'];
|
219 |
-
$temp_array = array(
|
220 |
-
'slug' => $plugin_folder,
|
221 |
-
'new_version' => $version,
|
222 |
-
'package' => $rollback['url'],
|
223 |
-
);
|
224 |
-
|
225 |
-
$temp_object = (object) $temp_array;
|
226 |
-
$plugin_transient->response[ $plugin_folder . '/' . $plugin_file ] = $temp_object;
|
227 |
-
set_site_transient( 'update_plugins', $plugin_transient );
|
228 |
-
|
229 |
-
$transient = get_transient( $this->product->get_key() . '_warning_rollback' );
|
230 |
-
|
231 |
-
if ( false === $transient ) {
|
232 |
-
set_transient( $this->product->get_key() . '_warning_rollback', 'in progress', 30 );
|
233 |
-
require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
|
234 |
-
$title = sprintf( apply_filters( $this->product->get_key() . '_rollback_message', 'Rolling back %s to v%s' ), $this->product->get_name(), $version );
|
235 |
-
$plugin = $plugin_folder . '/' . $plugin_file;
|
236 |
-
$nonce = 'upgrade-plugin_' . $plugin;
|
237 |
-
$url = 'update.php?action=upgrade-plugin&plugin=' . urlencode( $plugin );
|
238 |
-
$upgrader_skin = new \Plugin_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'plugin' ) );
|
239 |
-
$upgrader = new \Plugin_Upgrader( $upgrader_skin );
|
240 |
-
$upgrader->upgrade( $plugin );
|
241 |
-
delete_transient( $this->product->get_key() . '_warning_rollback' );
|
242 |
-
wp_die(
|
243 |
-
'',
|
244 |
-
$title,
|
245 |
-
array(
|
246 |
-
'response' => 200,
|
247 |
-
)
|
248 |
-
);
|
249 |
-
}
|
250 |
-
}
|
251 |
-
|
252 |
-
/**
|
253 |
-
* Start the rollback operation for the theme.
|
254 |
-
*/
|
255 |
-
private function start_rollback_theme() {
|
256 |
-
add_filter( 'update_theme_complete_actions', array( $this, 'alter_links_theme_upgrade' ) );
|
257 |
-
$rollback = $this->get_rollback();
|
258 |
-
$transient = get_site_transient( 'update_themes' );
|
259 |
-
$folder = $this->product->get_slug();
|
260 |
-
$version = $rollback['version'];
|
261 |
-
$temp_array = array(
|
262 |
-
'new_version' => $version,
|
263 |
-
'package' => $rollback['url'],
|
264 |
-
);
|
265 |
-
|
266 |
-
$transient->response[ $folder . '/style.css' ] = $temp_array;
|
267 |
-
set_site_transient( 'update_themes', $transient );
|
268 |
-
|
269 |
-
$transient = get_transient( $this->product->get_key() . '_warning_rollback' );
|
270 |
-
|
271 |
-
if ( false === $transient ) {
|
272 |
-
set_transient( $this->product->get_key() . '_warning_rollback', 'in progress', 30 );
|
273 |
-
require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
|
274 |
-
$title = sprintf( apply_filters( $this->product->get_key() . '_rollback_message', 'Rolling back %s to v%s' ), $this->product->get_name(), $version );
|
275 |
-
$theme = $folder . '/style.css';
|
276 |
-
$nonce = 'upgrade-theme_' . $theme;
|
277 |
-
$url = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme );
|
278 |
-
|
279 |
-
$upgrader = new \Theme_Upgrader( new \Theme_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'theme' ) ) );
|
280 |
-
$upgrader->upgrade( $theme );
|
281 |
-
delete_transient( $this->product->get_key() . '_warning_rollback' );
|
282 |
-
wp_die(
|
283 |
-
'',
|
284 |
-
$title,
|
285 |
-
array(
|
286 |
-
'response' => 200,
|
287 |
-
)
|
288 |
-
);
|
289 |
-
}
|
290 |
-
}
|
291 |
-
|
292 |
-
/**
|
293 |
-
* Alter links and remove duplicate customize message.
|
294 |
-
*
|
295 |
-
* @param array $links Array of old links.
|
296 |
-
*
|
297 |
-
* @return mixed Array of links.
|
298 |
-
*/
|
299 |
-
public function alter_links_theme_upgrade( $links ) {
|
300 |
-
if ( isset( $links['preview'] ) ) {
|
301 |
-
$links['preview'] = str_replace( '<span aria-hidden="true">Customize</span>', '', $links['preview'] );
|
302 |
-
}
|
303 |
-
|
304 |
-
return $links;
|
305 |
-
}
|
306 |
-
|
307 |
-
/**
|
308 |
-
* Loads product object.
|
309 |
-
*
|
310 |
-
* @param Product $product Product object.
|
311 |
-
*
|
312 |
-
* @return bool Should we load the module?
|
313 |
-
*/
|
314 |
-
public function can_load( $product ) {
|
315 |
-
if ( $this->is_from_partner( $product ) ) {
|
316 |
-
return false;
|
317 |
-
}
|
318 |
-
if ( $product->is_theme() && ! current_user_can( 'switch_themes' ) ) {
|
319 |
-
return false;
|
320 |
-
}
|
321 |
-
|
322 |
-
if ( $product->is_plugin() && ! current_user_can( 'install_plugins' ) ) {
|
323 |
-
return false;
|
324 |
-
}
|
325 |
-
|
326 |
-
return true;
|
327 |
-
}
|
328 |
-
|
329 |
-
/**
|
330 |
-
* Sort the rollbacks array in descending order.
|
331 |
-
*
|
332 |
-
* @param mixed $a First version to compare.
|
333 |
-
* @param mixed $b Second version to compare.
|
334 |
-
*
|
335 |
-
* @return bool Which version is greater?
|
336 |
-
*/
|
337 |
-
public function sort_rollback_array( $a, $b ) {
|
338 |
-
return version_compare( $a['version'], $b['version'], '<' ) > 0;
|
339 |
-
}
|
340 |
-
|
341 |
-
/**
|
342 |
-
* Load module logic.
|
343 |
-
*
|
344 |
-
* @param Product $product Product object.
|
345 |
-
*
|
346 |
-
* @return $this Module object.
|
347 |
-
*/
|
348 |
-
public function load( $product ) {
|
349 |
-
$this->product = $product;
|
350 |
-
$this->show_link();
|
351 |
-
$this->add_hooks();
|
352 |
-
|
353 |
-
return $this;
|
354 |
-
}
|
355 |
-
|
356 |
-
/**
|
357 |
-
* If product can be rolled back, show the link to rollback.
|
358 |
-
*/
|
359 |
-
private function show_link() {
|
360 |
-
add_filter(
|
361 |
-
'plugin_action_links_' . plugin_basename( $this->product->get_basefile() ),
|
362 |
-
array(
|
363 |
-
$this,
|
364 |
-
'add_rollback_link',
|
365 |
-
)
|
366 |
-
);
|
367 |
-
}
|
368 |
-
|
369 |
-
/**
|
370 |
-
* Set the rollback hook. Strangely, this does not work if placed in the ThemeIsle_SDK_Rollback class, so it is being called from there instead.
|
371 |
-
*/
|
372 |
-
public function add_hooks() {
|
373 |
-
add_action( 'admin_post_' . $this->product->get_key() . '_rollback', array( $this, 'start_rollback' ) );
|
374 |
-
add_action( 'admin_footer', array( $this, 'add_footer' ) );
|
375 |
-
}
|
376 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Translate.php
DELETED
@@ -1,918 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The translate model class for ThemeIsle SDK
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Modules
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
15 |
-
use ThemeisleSDK\Product;
|
16 |
-
|
17 |
-
// Exit if accessed directly.
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Translate module for ThemeIsle SDK.
|
24 |
-
*/
|
25 |
-
class Translate extends Abstract_Module {
|
26 |
-
/**
|
27 |
-
* List of available locales.
|
28 |
-
*
|
29 |
-
* @var array Array of available locals.
|
30 |
-
*/
|
31 |
-
private static $locales = array(
|
32 |
-
'af' => array(
|
33 |
-
'slug' => 'af',
|
34 |
-
'name' => 'Afrikaans',
|
35 |
-
),
|
36 |
-
'ak' => array(
|
37 |
-
'slug' => 'ak',
|
38 |
-
'name' => 'Akan',
|
39 |
-
),
|
40 |
-
'am' => array(
|
41 |
-
'slug' => 'am',
|
42 |
-
'name' => 'Amharic',
|
43 |
-
),
|
44 |
-
'ar' => array(
|
45 |
-
'slug' => 'ar',
|
46 |
-
'name' => 'Arabic',
|
47 |
-
),
|
48 |
-
'arq' => array(
|
49 |
-
'slug' => 'arq',
|
50 |
-
'name' => 'Algerian Arabic',
|
51 |
-
),
|
52 |
-
'ary' => array(
|
53 |
-
'slug' => 'ary',
|
54 |
-
'name' => 'Moroccan Arabic',
|
55 |
-
),
|
56 |
-
'as' => array(
|
57 |
-
'slug' => 'as',
|
58 |
-
'name' => 'Assamese',
|
59 |
-
),
|
60 |
-
'ast' => array(
|
61 |
-
'slug' => 'ast',
|
62 |
-
'name' => 'Asturian',
|
63 |
-
),
|
64 |
-
'az' => array(
|
65 |
-
'slug' => 'az',
|
66 |
-
'name' => 'Azerbaijani',
|
67 |
-
),
|
68 |
-
'azb' => array(
|
69 |
-
'slug' => 'azb',
|
70 |
-
'name' => 'South Azerbaijani',
|
71 |
-
),
|
72 |
-
'az_TR' => array(
|
73 |
-
'slug' => 'az-tr',
|
74 |
-
'name' => 'Azerbaijani (Turkey)',
|
75 |
-
),
|
76 |
-
'ba' => array(
|
77 |
-
'slug' => 'ba',
|
78 |
-
'name' => 'Bashkir',
|
79 |
-
),
|
80 |
-
'bal' => array(
|
81 |
-
'slug' => 'bal',
|
82 |
-
'name' => 'Catalan (Balear)',
|
83 |
-
),
|
84 |
-
'bcc' => array(
|
85 |
-
'slug' => 'bcc',
|
86 |
-
'name' => 'Balochi Southern',
|
87 |
-
),
|
88 |
-
'bel' => array(
|
89 |
-
'slug' => 'bel',
|
90 |
-
'name' => 'Belarusian',
|
91 |
-
),
|
92 |
-
'bg_BG' => array(
|
93 |
-
'slug' => 'bg',
|
94 |
-
'name' => 'Bulgarian',
|
95 |
-
),
|
96 |
-
'bn_BD' => array(
|
97 |
-
'slug' => 'bn',
|
98 |
-
'name' => 'Bengali',
|
99 |
-
),
|
100 |
-
'bo' => array(
|
101 |
-
'slug' => 'bo',
|
102 |
-
'name' => 'Tibetan',
|
103 |
-
),
|
104 |
-
'bre' => array(
|
105 |
-
'slug' => 'br',
|
106 |
-
'name' => 'Breton',
|
107 |
-
),
|
108 |
-
'bs_BA' => array(
|
109 |
-
'slug' => 'bs',
|
110 |
-
'name' => 'Bosnian',
|
111 |
-
),
|
112 |
-
'ca' => array(
|
113 |
-
'slug' => 'ca',
|
114 |
-
'name' => 'Catalan',
|
115 |
-
),
|
116 |
-
'ceb' => array(
|
117 |
-
'slug' => 'ceb',
|
118 |
-
'name' => 'Cebuano',
|
119 |
-
),
|
120 |
-
'ckb' => array(
|
121 |
-
'slug' => 'ckb',
|
122 |
-
'name' => 'Kurdish (Sorani)',
|
123 |
-
),
|
124 |
-
'co' => array(
|
125 |
-
'slug' => 'co',
|
126 |
-
'name' => 'Corsican',
|
127 |
-
),
|
128 |
-
'cs_CZ' => array(
|
129 |
-
'slug' => 'cs',
|
130 |
-
'name' => 'Czech',
|
131 |
-
),
|
132 |
-
'cy' => array(
|
133 |
-
'slug' => 'cy',
|
134 |
-
'name' => 'Welsh',
|
135 |
-
),
|
136 |
-
'da_DK' => array(
|
137 |
-
'slug' => 'da',
|
138 |
-
'name' => 'Danish',
|
139 |
-
),
|
140 |
-
'de_DE' => array(
|
141 |
-
'slug' => 'de',
|
142 |
-
'name' => 'German',
|
143 |
-
),
|
144 |
-
'de_CH' => array(
|
145 |
-
'slug' => 'de-ch',
|
146 |
-
'name' => 'German (Switzerland)',
|
147 |
-
),
|
148 |
-
'dv' => array(
|
149 |
-
'slug' => 'dv',
|
150 |
-
'name' => 'Dhivehi',
|
151 |
-
),
|
152 |
-
'dzo' => array(
|
153 |
-
'slug' => 'dzo',
|
154 |
-
'name' => 'Dzongkha',
|
155 |
-
),
|
156 |
-
'el' => array(
|
157 |
-
'slug' => 'el',
|
158 |
-
'name' => 'Greek',
|
159 |
-
),
|
160 |
-
'art_xemoji' => array(
|
161 |
-
'slug' => 'art-xemoji',
|
162 |
-
'name' => 'Emoji',
|
163 |
-
),
|
164 |
-
'en_US' => array(
|
165 |
-
'slug' => 'en',
|
166 |
-
'name' => 'English',
|
167 |
-
),
|
168 |
-
'en_AU' => array(
|
169 |
-
'slug' => 'en-au',
|
170 |
-
'name' => 'English (Australia)',
|
171 |
-
),
|
172 |
-
'en_CA' => array(
|
173 |
-
'slug' => 'en-ca',
|
174 |
-
'name' => 'English (Canada)',
|
175 |
-
),
|
176 |
-
'en_GB' => array(
|
177 |
-
'slug' => 'en-gb',
|
178 |
-
'name' => 'English (UK)',
|
179 |
-
),
|
180 |
-
'en_NZ' => array(
|
181 |
-
'slug' => 'en-nz',
|
182 |
-
'name' => 'English (New Zealand)',
|
183 |
-
),
|
184 |
-
'en_ZA' => array(
|
185 |
-
'slug' => 'en-za',
|
186 |
-
'name' => 'English (South Africa)',
|
187 |
-
),
|
188 |
-
'eo' => array(
|
189 |
-
'slug' => 'eo',
|
190 |
-
'name' => 'Esperanto',
|
191 |
-
),
|
192 |
-
'es_ES' => array(
|
193 |
-
'slug' => 'es',
|
194 |
-
'name' => 'Spanish (Spain)',
|
195 |
-
),
|
196 |
-
'es_AR' => array(
|
197 |
-
'slug' => 'es-ar',
|
198 |
-
'name' => 'Spanish (Argentina)',
|
199 |
-
),
|
200 |
-
'es_CL' => array(
|
201 |
-
'slug' => 'es-cl',
|
202 |
-
'name' => 'Spanish (Chile)',
|
203 |
-
),
|
204 |
-
'es_CO' => array(
|
205 |
-
'slug' => 'es-co',
|
206 |
-
'name' => 'Spanish (Colombia)',
|
207 |
-
),
|
208 |
-
'es_CR' => array(
|
209 |
-
'slug' => 'es-cr',
|
210 |
-
'name' => 'Spanish (Costa Rica)',
|
211 |
-
),
|
212 |
-
'es_GT' => array(
|
213 |
-
'slug' => 'es-gt',
|
214 |
-
'name' => 'Spanish (Guatemala)',
|
215 |
-
),
|
216 |
-
'es_MX' => array(
|
217 |
-
'slug' => 'es-mx',
|
218 |
-
'name' => 'Spanish (Mexico)',
|
219 |
-
),
|
220 |
-
'es_PE' => array(
|
221 |
-
'slug' => 'es-pe',
|
222 |
-
'name' => 'Spanish (Peru)',
|
223 |
-
),
|
224 |
-
'es_PR' => array(
|
225 |
-
'slug' => 'es-pr',
|
226 |
-
'name' => 'Spanish (Puerto Rico)',
|
227 |
-
),
|
228 |
-
'es_VE' => array(
|
229 |
-
'slug' => 'es-ve',
|
230 |
-
'name' => 'Spanish (Venezuela)',
|
231 |
-
),
|
232 |
-
'et' => array(
|
233 |
-
'slug' => 'et',
|
234 |
-
'name' => 'Estonian',
|
235 |
-
),
|
236 |
-
'eu' => array(
|
237 |
-
'slug' => 'eu',
|
238 |
-
'name' => 'Basque',
|
239 |
-
),
|
240 |
-
'fa_IR' => array(
|
241 |
-
'slug' => 'fa',
|
242 |
-
'name' => 'Persian',
|
243 |
-
),
|
244 |
-
'fa_AF' => array(
|
245 |
-
'slug' => 'fa-af',
|
246 |
-
'name' => 'Persian (Afghanistan)',
|
247 |
-
),
|
248 |
-
'fuc' => array(
|
249 |
-
'slug' => 'fuc',
|
250 |
-
'name' => 'Fulah',
|
251 |
-
),
|
252 |
-
'fi' => array(
|
253 |
-
'slug' => 'fi',
|
254 |
-
'name' => 'Finnish',
|
255 |
-
),
|
256 |
-
'fo' => array(
|
257 |
-
'slug' => 'fo',
|
258 |
-
'name' => 'Faroese',
|
259 |
-
),
|
260 |
-
'fr_FR' => array(
|
261 |
-
'slug' => 'fr',
|
262 |
-
'name' => 'French (France)',
|
263 |
-
),
|
264 |
-
'fr_BE' => array(
|
265 |
-
'slug' => 'fr-be',
|
266 |
-
'name' => 'French (Belgium)',
|
267 |
-
),
|
268 |
-
'fr_CA' => array(
|
269 |
-
'slug' => 'fr-ca',
|
270 |
-
'name' => 'French (Canada)',
|
271 |
-
),
|
272 |
-
'frp' => array(
|
273 |
-
'slug' => 'frp',
|
274 |
-
'name' => 'Arpitan',
|
275 |
-
),
|
276 |
-
'fur' => array(
|
277 |
-
'slug' => 'fur',
|
278 |
-
'name' => 'Friulian',
|
279 |
-
),
|
280 |
-
'fy' => array(
|
281 |
-
'slug' => 'fy',
|
282 |
-
'name' => 'Frisian',
|
283 |
-
),
|
284 |
-
'ga' => array(
|
285 |
-
'slug' => 'ga',
|
286 |
-
'name' => 'Irish',
|
287 |
-
),
|
288 |
-
'gd' => array(
|
289 |
-
'slug' => 'gd',
|
290 |
-
'name' => 'Scottish Gaelic',
|
291 |
-
),
|
292 |
-
'gl_ES' => array(
|
293 |
-
'slug' => 'gl',
|
294 |
-
'name' => 'Galician',
|
295 |
-
),
|
296 |
-
'gn' => array(
|
297 |
-
'slug' => 'gn',
|
298 |
-
'name' => 'Guaraní',
|
299 |
-
),
|
300 |
-
'gsw' => array(
|
301 |
-
'slug' => 'gsw',
|
302 |
-
'name' => 'Swiss German',
|
303 |
-
),
|
304 |
-
'gu' => array(
|
305 |
-
'slug' => 'gu',
|
306 |
-
'name' => 'Gujarati',
|
307 |
-
),
|
308 |
-
'hat' => array(
|
309 |
-
'slug' => 'hat',
|
310 |
-
'name' => 'Haitian Creole',
|
311 |
-
),
|
312 |
-
'hau' => array(
|
313 |
-
'slug' => 'hau',
|
314 |
-
'name' => 'Hausa',
|
315 |
-
),
|
316 |
-
'haw_US' => array(
|
317 |
-
'slug' => 'haw',
|
318 |
-
'name' => 'Hawaiian',
|
319 |
-
),
|
320 |
-
'haz' => array(
|
321 |
-
'slug' => 'haz',
|
322 |
-
'name' => 'Hazaragi',
|
323 |
-
),
|
324 |
-
'he_IL' => array(
|
325 |
-
'slug' => 'he',
|
326 |
-
'name' => 'Hebrew',
|
327 |
-
),
|
328 |
-
'hi_IN' => array(
|
329 |
-
'slug' => 'hi',
|
330 |
-
'name' => 'Hindi',
|
331 |
-
),
|
332 |
-
'hr' => array(
|
333 |
-
'slug' => 'hr',
|
334 |
-
'name' => 'Croatian',
|
335 |
-
),
|
336 |
-
'hu_HU' => array(
|
337 |
-
'slug' => 'hu',
|
338 |
-
'name' => 'Hungarian',
|
339 |
-
),
|
340 |
-
'hy' => array(
|
341 |
-
'slug' => 'hy',
|
342 |
-
'name' => 'Armenian',
|
343 |
-
),
|
344 |
-
'id_ID' => array(
|
345 |
-
'slug' => 'id',
|
346 |
-
'name' => 'Indonesian',
|
347 |
-
),
|
348 |
-
'ido' => array(
|
349 |
-
'slug' => 'ido',
|
350 |
-
'name' => 'Ido',
|
351 |
-
),
|
352 |
-
'is_IS' => array(
|
353 |
-
'slug' => 'is',
|
354 |
-
'name' => 'Icelandic',
|
355 |
-
),
|
356 |
-
'it_IT' => array(
|
357 |
-
'slug' => 'it',
|
358 |
-
'name' => 'Italian',
|
359 |
-
),
|
360 |
-
'ja' => array(
|
361 |
-
'slug' => 'ja',
|
362 |
-
'name' => 'Japanese',
|
363 |
-
),
|
364 |
-
'jv_ID' => array(
|
365 |
-
'slug' => 'jv',
|
366 |
-
'name' => 'Javanese',
|
367 |
-
),
|
368 |
-
'ka_GE' => array(
|
369 |
-
'slug' => 'ka',
|
370 |
-
'name' => 'Georgian',
|
371 |
-
),
|
372 |
-
'kab' => array(
|
373 |
-
'slug' => 'kab',
|
374 |
-
'name' => 'Kabyle',
|
375 |
-
),
|
376 |
-
'kal' => array(
|
377 |
-
'slug' => 'kal',
|
378 |
-
'name' => 'Greenlandic',
|
379 |
-
),
|
380 |
-
'kin' => array(
|
381 |
-
'slug' => 'kin',
|
382 |
-
'name' => 'Kinyarwanda',
|
383 |
-
),
|
384 |
-
'kk' => array(
|
385 |
-
'slug' => 'kk',
|
386 |
-
'name' => 'Kazakh',
|
387 |
-
),
|
388 |
-
'km' => array(
|
389 |
-
'slug' => 'km',
|
390 |
-
'name' => 'Khmer',
|
391 |
-
),
|
392 |
-
'kn' => array(
|
393 |
-
'slug' => 'kn',
|
394 |
-
'name' => 'Kannada',
|
395 |
-
),
|
396 |
-
'ko_KR' => array(
|
397 |
-
'slug' => 'ko',
|
398 |
-
'name' => 'Korean',
|
399 |
-
),
|
400 |
-
'kir' => array(
|
401 |
-
'slug' => 'kir',
|
402 |
-
'name' => 'Kyrgyz',
|
403 |
-
),
|
404 |
-
'lb_LU' => array(
|
405 |
-
'slug' => 'lb',
|
406 |
-
'name' => 'Luxembourgish',
|
407 |
-
),
|
408 |
-
'li' => array(
|
409 |
-
'slug' => 'li',
|
410 |
-
'name' => 'Limburgish',
|
411 |
-
),
|
412 |
-
'lin' => array(
|
413 |
-
'slug' => 'lin',
|
414 |
-
'name' => 'Lingala',
|
415 |
-
),
|
416 |
-
'lo' => array(
|
417 |
-
'slug' => 'lo',
|
418 |
-
'name' => 'Lao',
|
419 |
-
),
|
420 |
-
'lt_LT' => array(
|
421 |
-
'slug' => 'lt',
|
422 |
-
'name' => 'Lithuanian',
|
423 |
-
),
|
424 |
-
'lv' => array(
|
425 |
-
'slug' => 'lv',
|
426 |
-
'name' => 'Latvian',
|
427 |
-
),
|
428 |
-
'me_ME' => array(
|
429 |
-
'slug' => 'me',
|
430 |
-
'name' => 'Montenegrin',
|
431 |
-
),
|
432 |
-
'mg_MG' => array(
|
433 |
-
'slug' => 'mg',
|
434 |
-
'name' => 'Malagasy',
|
435 |
-
),
|
436 |
-
'mk_MK' => array(
|
437 |
-
'slug' => 'mk',
|
438 |
-
'name' => 'Macedonian',
|
439 |
-
),
|
440 |
-
'ml_IN' => array(
|
441 |
-
'slug' => 'ml',
|
442 |
-
'name' => 'Malayalam',
|
443 |
-
),
|
444 |
-
'mlt' => array(
|
445 |
-
'slug' => 'mlt',
|
446 |
-
'name' => 'Maltese',
|
447 |
-
),
|
448 |
-
'mn' => array(
|
449 |
-
'slug' => 'mn',
|
450 |
-
'name' => 'Mongolian',
|
451 |
-
),
|
452 |
-
'mr' => array(
|
453 |
-
'slug' => 'mr',
|
454 |
-
'name' => 'Marathi',
|
455 |
-
),
|
456 |
-
'mri' => array(
|
457 |
-
'slug' => 'mri',
|
458 |
-
'name' => 'Maori',
|
459 |
-
),
|
460 |
-
'ms_MY' => array(
|
461 |
-
'slug' => 'ms',
|
462 |
-
'name' => 'Malay',
|
463 |
-
),
|
464 |
-
'my_MM' => array(
|
465 |
-
'slug' => 'mya',
|
466 |
-
'name' => 'Myanmar (Burmese)',
|
467 |
-
),
|
468 |
-
'ne_NP' => array(
|
469 |
-
'slug' => 'ne',
|
470 |
-
'name' => 'Nepali',
|
471 |
-
),
|
472 |
-
'nb_NO' => array(
|
473 |
-
'slug' => 'nb',
|
474 |
-
'name' => 'Norwegian (Bokmål)',
|
475 |
-
),
|
476 |
-
'nl_NL' => array(
|
477 |
-
'slug' => 'nl',
|
478 |
-
'name' => 'Dutch',
|
479 |
-
),
|
480 |
-
'nl_BE' => array(
|
481 |
-
'slug' => 'nl-be',
|
482 |
-
'name' => 'Dutch (Belgium)',
|
483 |
-
),
|
484 |
-
'nn_NO' => array(
|
485 |
-
'slug' => 'nn',
|
486 |
-
'name' => 'Norwegian (Nynorsk)',
|
487 |
-
),
|
488 |
-
'oci' => array(
|
489 |
-
'slug' => 'oci',
|
490 |
-
'name' => 'Occitan',
|
491 |
-
),
|
492 |
-
'ory' => array(
|
493 |
-
'slug' => 'ory',
|
494 |
-
'name' => 'Oriya',
|
495 |
-
),
|
496 |
-
'os' => array(
|
497 |
-
'slug' => 'os',
|
498 |
-
'name' => 'Ossetic',
|
499 |
-
),
|
500 |
-
'pa_IN' => array(
|
501 |
-
'slug' => 'pa',
|
502 |
-
'name' => 'Punjabi',
|
503 |
-
),
|
504 |
-
'pl_PL' => array(
|
505 |
-
'slug' => 'pl',
|
506 |
-
'name' => 'Polish',
|
507 |
-
),
|
508 |
-
'pt_BR' => array(
|
509 |
-
'slug' => 'pt-br',
|
510 |
-
'name' => 'Portuguese (Brazil)',
|
511 |
-
),
|
512 |
-
'pt_PT' => array(
|
513 |
-
'slug' => 'pt',
|
514 |
-
'name' => 'Portuguese (Portugal)',
|
515 |
-
),
|
516 |
-
'ps' => array(
|
517 |
-
'slug' => 'ps',
|
518 |
-
'name' => 'Pashto',
|
519 |
-
),
|
520 |
-
'rhg' => array(
|
521 |
-
'slug' => 'rhg',
|
522 |
-
'name' => 'Rohingya',
|
523 |
-
),
|
524 |
-
'ro_RO' => array(
|
525 |
-
'slug' => 'ro',
|
526 |
-
'name' => 'Romanian',
|
527 |
-
),
|
528 |
-
'roh' => array(
|
529 |
-
'slug' => 'roh',
|
530 |
-
'name' => 'Romansh',
|
531 |
-
),
|
532 |
-
'ru_RU' => array(
|
533 |
-
'slug' => 'ru',
|
534 |
-
'name' => 'Russian',
|
535 |
-
),
|
536 |
-
'rue' => array(
|
537 |
-
'slug' => 'rue',
|
538 |
-
'name' => 'Rusyn',
|
539 |
-
),
|
540 |
-
'rup_MK' => array(
|
541 |
-
'slug' => 'rup',
|
542 |
-
'name' => 'Aromanian',
|
543 |
-
),
|
544 |
-
'sah' => array(
|
545 |
-
'slug' => 'sah',
|
546 |
-
'name' => 'Sakha',
|
547 |
-
),
|
548 |
-
'sa_IN' => array(
|
549 |
-
'slug' => 'sa-in',
|
550 |
-
'name' => 'Sanskrit',
|
551 |
-
),
|
552 |
-
'scn' => array(
|
553 |
-
'slug' => 'scn',
|
554 |
-
'name' => 'Sicilian',
|
555 |
-
),
|
556 |
-
'si_LK' => array(
|
557 |
-
'slug' => 'si',
|
558 |
-
'name' => 'Sinhala',
|
559 |
-
),
|
560 |
-
'sk_SK' => array(
|
561 |
-
'slug' => 'sk',
|
562 |
-
'name' => 'Slovak',
|
563 |
-
),
|
564 |
-
'sl_SI' => array(
|
565 |
-
'slug' => 'sl',
|
566 |
-
'name' => 'Slovenian',
|
567 |
-
),
|
568 |
-
'sna' => array(
|
569 |
-
'slug' => 'sna',
|
570 |
-
'name' => 'Shona',
|
571 |
-
),
|
572 |
-
'snd' => array(
|
573 |
-
'slug' => 'snd',
|
574 |
-
'name' => 'Sindhi',
|
575 |
-
),
|
576 |
-
'so_SO' => array(
|
577 |
-
'slug' => 'so',
|
578 |
-
'name' => 'Somali',
|
579 |
-
),
|
580 |
-
'sq' => array(
|
581 |
-
'slug' => 'sq',
|
582 |
-
'name' => 'Albanian',
|
583 |
-
),
|
584 |
-
'sq_XK' => array(
|
585 |
-
'slug' => 'sq-xk',
|
586 |
-
'name' => 'Shqip (Kosovo)',
|
587 |
-
),
|
588 |
-
'sr_RS' => array(
|
589 |
-
'slug' => 'sr',
|
590 |
-
'name' => 'Serbian',
|
591 |
-
),
|
592 |
-
'srd' => array(
|
593 |
-
'slug' => 'srd',
|
594 |
-
'name' => 'Sardinian',
|
595 |
-
),
|
596 |
-
'su_ID' => array(
|
597 |
-
'slug' => 'su',
|
598 |
-
'name' => 'Sundanese',
|
599 |
-
),
|
600 |
-
'sv_SE' => array(
|
601 |
-
'slug' => 'sv',
|
602 |
-
'name' => 'Swedish',
|
603 |
-
),
|
604 |
-
'sw' => array(
|
605 |
-
'slug' => 'sw',
|
606 |
-
'name' => 'Swahili',
|
607 |
-
),
|
608 |
-
'syr' => array(
|
609 |
-
'slug' => 'syr',
|
610 |
-
'name' => 'Syriac',
|
611 |
-
),
|
612 |
-
'szl' => array(
|
613 |
-
'slug' => 'szl',
|
614 |
-
'name' => 'Silesian',
|
615 |
-
),
|
616 |
-
'ta_IN' => array(
|
617 |
-
'slug' => 'ta',
|
618 |
-
'name' => 'Tamil',
|
619 |
-
),
|
620 |
-
'ta_LK' => array(
|
621 |
-
'slug' => 'ta-lk',
|
622 |
-
'name' => 'Tamil (Sri Lanka)',
|
623 |
-
),
|
624 |
-
'tah' => array(
|
625 |
-
'slug' => 'tah',
|
626 |
-
'name' => 'Tahitian',
|
627 |
-
),
|
628 |
-
'te' => array(
|
629 |
-
'slug' => 'te',
|
630 |
-
'name' => 'Telugu',
|
631 |
-
),
|
632 |
-
'tg' => array(
|
633 |
-
'slug' => 'tg',
|
634 |
-
'name' => 'Tajik',
|
635 |
-
),
|
636 |
-
'th' => array(
|
637 |
-
'slug' => 'th',
|
638 |
-
'name' => 'Thai',
|
639 |
-
),
|
640 |
-
'tir' => array(
|
641 |
-
'slug' => 'tir',
|
642 |
-
'name' => 'Tigrinya',
|
643 |
-
),
|
644 |
-
'tl' => array(
|
645 |
-
'slug' => 'tl',
|
646 |
-
'name' => 'Tagalog',
|
647 |
-
),
|
648 |
-
'tr_TR' => array(
|
649 |
-
'slug' => 'tr',
|
650 |
-
'name' => 'Turkish',
|
651 |
-
),
|
652 |
-
'tt_RU' => array(
|
653 |
-
'slug' => 'tt',
|
654 |
-
'name' => 'Tatar',
|
655 |
-
),
|
656 |
-
'tuk' => array(
|
657 |
-
'slug' => 'tuk',
|
658 |
-
'name' => 'Turkmen',
|
659 |
-
),
|
660 |
-
'twd' => array(
|
661 |
-
'slug' => 'twd',
|
662 |
-
'name' => 'Tweants',
|
663 |
-
),
|
664 |
-
'tzm' => array(
|
665 |
-
'slug' => 'tzm',
|
666 |
-
'name' => 'Tamazight (Central Atlas)',
|
667 |
-
),
|
668 |
-
'ug_CN' => array(
|
669 |
-
'slug' => 'ug',
|
670 |
-
'name' => 'Uighur',
|
671 |
-
),
|
672 |
-
'uk' => array(
|
673 |
-
'slug' => 'uk',
|
674 |
-
'name' => 'Ukrainian',
|
675 |
-
),
|
676 |
-
'ur' => array(
|
677 |
-
'slug' => 'ur',
|
678 |
-
'name' => 'Urdu',
|
679 |
-
),
|
680 |
-
'uz_UZ' => array(
|
681 |
-
'slug' => 'uz',
|
682 |
-
'name' => 'Uzbek',
|
683 |
-
),
|
684 |
-
'vi' => array(
|
685 |
-
'slug' => 'vi',
|
686 |
-
'name' => 'Vietnamese',
|
687 |
-
),
|
688 |
-
'wa' => array(
|
689 |
-
'slug' => 'wa',
|
690 |
-
'name' => 'Walloon',
|
691 |
-
),
|
692 |
-
'xho' => array(
|
693 |
-
'slug' => 'xho',
|
694 |
-
'name' => 'Xhosa',
|
695 |
-
),
|
696 |
-
'xmf' => array(
|
697 |
-
'slug' => 'xmf',
|
698 |
-
'name' => 'Mingrelian',
|
699 |
-
),
|
700 |
-
'yor' => array(
|
701 |
-
'slug' => 'yor',
|
702 |
-
'name' => 'Yoruba',
|
703 |
-
),
|
704 |
-
'zh_CN' => array(
|
705 |
-
'slug' => 'zh-cn',
|
706 |
-
'name' => 'Chinese (China)',
|
707 |
-
),
|
708 |
-
'zh_HK' => array(
|
709 |
-
'slug' => 'zh-hk',
|
710 |
-
'name' => 'Chinese (Hong Kong)',
|
711 |
-
),
|
712 |
-
'zh_TW' => array(
|
713 |
-
'slug' => 'zh-tw',
|
714 |
-
'name' => 'Chinese (Taiwan)',
|
715 |
-
),
|
716 |
-
'de_DE_formal' => array(
|
717 |
-
'slug' => 'de/formal',
|
718 |
-
'name' => 'German (Formal)',
|
719 |
-
),
|
720 |
-
'nl_NL_formal' => array(
|
721 |
-
'slug' => 'nl/formal',
|
722 |
-
'name' => 'Dutch (Formal)',
|
723 |
-
),
|
724 |
-
'de_CH_informal' => array(
|
725 |
-
'slug' => 'de-ch/informal',
|
726 |
-
'name' => 'Chinese (Taiwan)',
|
727 |
-
),
|
728 |
-
'pt_PT_ao90' => array(
|
729 |
-
'slug' => 'pt/ao90',
|
730 |
-
'name' => 'Portuguese (Portugal, AO90)',
|
731 |
-
),
|
732 |
-
);
|
733 |
-
|
734 |
-
/**
|
735 |
-
* Check if we should load module for this.
|
736 |
-
*
|
737 |
-
* @param Product $product Product to check.
|
738 |
-
*
|
739 |
-
* @return bool Should load ?
|
740 |
-
*/
|
741 |
-
public function can_load( $product ) {
|
742 |
-
if ( $this->is_from_partner( $product ) ) {
|
743 |
-
return false;
|
744 |
-
}
|
745 |
-
if ( ! $product->is_wordpress_available() ) {
|
746 |
-
return false;
|
747 |
-
}
|
748 |
-
|
749 |
-
$lang = $this->get_user_locale();
|
750 |
-
|
751 |
-
if ( 'en_US' === $lang ) {
|
752 |
-
return false;
|
753 |
-
}
|
754 |
-
|
755 |
-
$languages = $this->get_translations( $product );
|
756 |
-
|
757 |
-
if ( ! is_array( $languages ) ) {
|
758 |
-
return false;
|
759 |
-
}
|
760 |
-
|
761 |
-
if ( ! isset( $languages['translations'] ) ) {
|
762 |
-
return false;
|
763 |
-
}
|
764 |
-
|
765 |
-
$languages = $languages['translations'];
|
766 |
-
|
767 |
-
$available = wp_list_pluck( $languages, 'language' );
|
768 |
-
|
769 |
-
if ( in_array( $lang, $available ) ) {
|
770 |
-
return false;
|
771 |
-
}
|
772 |
-
|
773 |
-
if ( ! isset( self::$locales[ $lang ] ) ) {
|
774 |
-
return false;
|
775 |
-
}
|
776 |
-
|
777 |
-
return apply_filters( $product->get_slug() . '_sdk_enable_translate', true );
|
778 |
-
}
|
779 |
-
|
780 |
-
/**
|
781 |
-
* Get the user's locale.
|
782 |
-
*/
|
783 |
-
private function get_user_locale() {
|
784 |
-
global $wp_version;
|
785 |
-
if ( version_compare( $wp_version, '4.7.0', '>=' ) ) {
|
786 |
-
return get_user_locale();
|
787 |
-
}
|
788 |
-
$user = wp_get_current_user();
|
789 |
-
if ( $user ) {
|
790 |
-
$locale = $user->locale;
|
791 |
-
}
|
792 |
-
|
793 |
-
return $locale ? $locale : get_locale();
|
794 |
-
}
|
795 |
-
|
796 |
-
/**
|
797 |
-
* Fetch translations from api.
|
798 |
-
*
|
799 |
-
* @param Product $product Product to check.
|
800 |
-
*
|
801 |
-
* @return mixed Translation array.
|
802 |
-
*/
|
803 |
-
private function get_translations( $product ) {
|
804 |
-
$cache_key = $product->get_key() . '_all_languages';
|
805 |
-
$translations = get_transient( $cache_key );
|
806 |
-
|
807 |
-
if ( false === $translations ) {
|
808 |
-
require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
|
809 |
-
$translations = translations_api(
|
810 |
-
$product->get_type() . 's',
|
811 |
-
array(
|
812 |
-
'slug' => $product->get_slug(),
|
813 |
-
'version' => $product->get_version(),
|
814 |
-
)
|
815 |
-
);
|
816 |
-
set_transient( $cache_key, $translations, WEEK_IN_SECONDS );
|
817 |
-
}
|
818 |
-
|
819 |
-
return $translations;
|
820 |
-
|
821 |
-
}
|
822 |
-
|
823 |
-
/**
|
824 |
-
* Add notification to queue.
|
825 |
-
*
|
826 |
-
* @param array $all_notifications Previous notification.
|
827 |
-
*
|
828 |
-
* @return array All notifications.
|
829 |
-
*/
|
830 |
-
public function add_notification( $all_notifications ) {
|
831 |
-
|
832 |
-
$lang = $this->get_user_locale();
|
833 |
-
$link = $this->get_locale_paths( $lang );
|
834 |
-
$language_meta = self::$locales[ $lang ];
|
835 |
-
|
836 |
-
$heading = apply_filters( $this->product->get_key() . '_feedback_translate_heading', 'Improve {product}' );
|
837 |
-
$heading = str_replace(
|
838 |
-
array( '{product}' ),
|
839 |
-
$this->product->get_friendly_name(),
|
840 |
-
$heading
|
841 |
-
);
|
842 |
-
$message = apply_filters(
|
843 |
-
$this->product->get_key() . '_feedback_translation',
|
844 |
-
'Translating <b>{product}</b> into as many languages as possible is a huge project. We still need help with a lot of them, so if you are good at translating into <b>{language}</b>, it would be greatly appreciated.
|
845 |
-
The process is easy, and you can join by following the link below!'
|
846 |
-
);
|
847 |
-
|
848 |
-
$message = str_replace(
|
849 |
-
[ '{product}', '{language}' ],
|
850 |
-
[
|
851 |
-
$this->product->get_friendly_name(),
|
852 |
-
$language_meta['name'],
|
853 |
-
],
|
854 |
-
$message
|
855 |
-
);
|
856 |
-
|
857 |
-
$button_submit = apply_filters( $this->product->get_key() . '_feedback_translate_button_do', 'Ok, I will gladly help.' );
|
858 |
-
$button_cancel = apply_filters( $this->product->get_key() . '_feedback_translate_button_cancel', 'No, thanks.' );
|
859 |
-
|
860 |
-
$all_notifications[] = [
|
861 |
-
'id' => $this->product->get_key() . '_translate_flag',
|
862 |
-
'heading' => $heading,
|
863 |
-
'message' => $message,
|
864 |
-
'ctas' => [
|
865 |
-
'confirm' => [
|
866 |
-
'link' => $link,
|
867 |
-
'text' => $button_submit,
|
868 |
-
],
|
869 |
-
'cancel' => [
|
870 |
-
'link' => '#',
|
871 |
-
'text' => $button_cancel,
|
872 |
-
],
|
873 |
-
],
|
874 |
-
];
|
875 |
-
|
876 |
-
return $all_notifications;
|
877 |
-
}
|
878 |
-
|
879 |
-
/**
|
880 |
-
* Return the locale path.
|
881 |
-
*
|
882 |
-
* @param string $locale Locale code.
|
883 |
-
*
|
884 |
-
* @return string Locale path.
|
885 |
-
*/
|
886 |
-
private function get_locale_paths( $locale ) {
|
887 |
-
if ( empty( $locale ) ) {
|
888 |
-
return '';
|
889 |
-
}
|
890 |
-
|
891 |
-
$slug = isset( self::$locales[ $locale ] ) ? self::$locales[ $locale ]['slug'] : '';
|
892 |
-
if ( empty( $slug ) ) {
|
893 |
-
return '';
|
894 |
-
}
|
895 |
-
if ( strpos( $slug, '/' ) === false ) {
|
896 |
-
$slug .= '/default';
|
897 |
-
}
|
898 |
-
$url = 'https://translate.wordpress.org/projects/wp-' . $this->product->get_type() . 's/' . $this->product->get_slug() . '/' . ( $this->product->get_type() === 'plugin' ? 'dev/' : '' ) . $slug . '?filters%5Bstatus%5D=untranslated&sort%5Bby%5D=random';
|
899 |
-
|
900 |
-
return $url;
|
901 |
-
}
|
902 |
-
|
903 |
-
/**
|
904 |
-
* Load module logic.
|
905 |
-
*
|
906 |
-
* @param Product $product Product to load.
|
907 |
-
*
|
908 |
-
* @return Translate Module instance.
|
909 |
-
*/
|
910 |
-
public function load( $product ) {
|
911 |
-
|
912 |
-
$this->product = $product;
|
913 |
-
|
914 |
-
add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] );
|
915 |
-
|
916 |
-
return $this;
|
917 |
-
}
|
918 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php
DELETED
@@ -1,850 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The deactivate feedback model class for ThemeIsle SDK
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Feedback
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK\Modules;
|
13 |
-
|
14 |
-
use ThemeisleSDK\Common\Abstract_Module;
|
15 |
-
use ThemeisleSDK\Product;
|
16 |
-
|
17 |
-
// Exit if accessed directly.
|
18 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Uninstall feedback module for ThemeIsle SDK.
|
24 |
-
*/
|
25 |
-
class Uninstall_Feedback extends Abstract_Module {
|
26 |
-
/**
|
27 |
-
* How many seconds before the deactivation window is triggered for themes?
|
28 |
-
*
|
29 |
-
* @var int Number of days.
|
30 |
-
*/
|
31 |
-
const AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS = 3;
|
32 |
-
/**
|
33 |
-
* How many days before the deactivation window pops up again for the theme?
|
34 |
-
*
|
35 |
-
* @var int Number of days.
|
36 |
-
*/
|
37 |
-
const PAUSE_DEACTIVATE_WINDOW_DAYS = 100;
|
38 |
-
/**
|
39 |
-
* Where to send the data.
|
40 |
-
*
|
41 |
-
* @var string Endpoint url.
|
42 |
-
*/
|
43 |
-
const FEEDBACK_ENDPOINT = 'http://feedback.themeisle.com/wordpress/wp-json/__pirate_feedback_/v1/feedback';
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Default options for plugins.
|
47 |
-
*
|
48 |
-
* @var array $options_plugin The main options list for plugins.
|
49 |
-
*/
|
50 |
-
private $options_plugin = array(
|
51 |
-
'I found a better plugin' => array(
|
52 |
-
'id' => 3,
|
53 |
-
'type' => 'text',
|
54 |
-
'placeholder' => 'What\'s the plugin\'s name?',
|
55 |
-
),
|
56 |
-
'I could not get the plugin to work' => array(
|
57 |
-
'type' => 'textarea',
|
58 |
-
'placeholder' => 'What problem are you experiencing?',
|
59 |
-
'id' => 4,
|
60 |
-
),
|
61 |
-
'I no longer need the plugin' => array(
|
62 |
-
'id' => 5,
|
63 |
-
'type' => 'textarea',
|
64 |
-
'placeholder' => 'If you could improve one thing about our product, what would it be?',
|
65 |
-
),
|
66 |
-
'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
|
67 |
-
'type' => 'textarea',
|
68 |
-
'placeholder' => 'What problem are you experiencing?',
|
69 |
-
'id' => 6,
|
70 |
-
),
|
71 |
-
);
|
72 |
-
/**
|
73 |
-
* Default options for theme.
|
74 |
-
*
|
75 |
-
* @var array $options_theme The main options list for themes.
|
76 |
-
*/
|
77 |
-
private $options_theme = array(
|
78 |
-
'I don\'t know how to make it look like demo' => array(
|
79 |
-
'id' => 7,
|
80 |
-
),
|
81 |
-
'It lacks options' => array(
|
82 |
-
'placeholder' => 'What option is missing?',
|
83 |
-
'type' => 'text',
|
84 |
-
'id' => 8,
|
85 |
-
),
|
86 |
-
'Is not working with a plugin that I need' => array(
|
87 |
-
'id' => 9,
|
88 |
-
'type' => 'text',
|
89 |
-
'placeholder' => 'What is the name of the plugin',
|
90 |
-
),
|
91 |
-
'I want to try a new design, I don\'t like {theme} style' => array(
|
92 |
-
'id' => 10,
|
93 |
-
),
|
94 |
-
);
|
95 |
-
/**
|
96 |
-
* Default other option.
|
97 |
-
*
|
98 |
-
* @var array $other The other option
|
99 |
-
*/
|
100 |
-
private $other = array(
|
101 |
-
'Other' => array(
|
102 |
-
'id' => 999,
|
103 |
-
'type' => 'textarea',
|
104 |
-
'placeholder' => 'What can we do better?',
|
105 |
-
),
|
106 |
-
);
|
107 |
-
/**
|
108 |
-
* Default heading for plugin.
|
109 |
-
*
|
110 |
-
* @var string $heading_plugin The heading of the modal
|
111 |
-
*/
|
112 |
-
private $heading_plugin = 'What’s wrong?';
|
113 |
-
/**
|
114 |
-
* Default heading for theme.
|
115 |
-
*
|
116 |
-
* @var string $heading_theme The heading of the modal
|
117 |
-
*/
|
118 |
-
private $heading_theme = 'What does not work for you in {theme}?';
|
119 |
-
/**
|
120 |
-
* Default submit button action text.
|
121 |
-
*
|
122 |
-
* @var string $button_submit The text of the deactivate button
|
123 |
-
*/
|
124 |
-
private $button_submit = 'Submit & Deactivate';
|
125 |
-
/**
|
126 |
-
* Default cancel button.
|
127 |
-
*
|
128 |
-
* @var string $button_cancel The text of the cancel button
|
129 |
-
*/
|
130 |
-
private $button_cancel = 'Skip & Deactivate';
|
131 |
-
|
132 |
-
/**
|
133 |
-
* Loads the additional resources
|
134 |
-
*/
|
135 |
-
function load_resources() {
|
136 |
-
$screen = get_current_screen();
|
137 |
-
|
138 |
-
if ( ! $screen || ! in_array( $screen->id, array( 'theme-install', 'plugins' ) ) ) {
|
139 |
-
return;
|
140 |
-
}
|
141 |
-
|
142 |
-
$this->add_feedback_popup_style();
|
143 |
-
|
144 |
-
if ( $this->product->get_type() === 'theme' ) {
|
145 |
-
$this->add_theme_feedback_drawer_js();
|
146 |
-
$this->render_theme_feedback_popup();
|
147 |
-
|
148 |
-
return;
|
149 |
-
}
|
150 |
-
$this->add_plugin_feedback_popup_js();
|
151 |
-
$this->render_plugin_feedback_popup();
|
152 |
-
}
|
153 |
-
|
154 |
-
/**
|
155 |
-
* Render theme feedback drawer.
|
156 |
-
*/
|
157 |
-
private function render_theme_feedback_popup() {
|
158 |
-
$heading = str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
|
159 |
-
$button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', 'Submit' );
|
160 |
-
$options = $this->options_theme;
|
161 |
-
$options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
|
162 |
-
$info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
|
163 |
-
|
164 |
-
$options += $this->other;
|
165 |
-
|
166 |
-
?>
|
167 |
-
<div class="ti-theme-uninstall-feedback-drawer ti-feedback">
|
168 |
-
<div class="popup--header">
|
169 |
-
<h5><?php echo wp_kses( $heading, array( 'span' => true ) ); ?> </h5>
|
170 |
-
<button class="toggle"><span>×</span></button>
|
171 |
-
</div><!--/.popup--header-->
|
172 |
-
<div class="popup--body">
|
173 |
-
<?php $this->render_options_list( $options ); ?>
|
174 |
-
</div><!--/.popup--body-->
|
175 |
-
<div class="popup--footer">
|
176 |
-
<div class="actions">
|
177 |
-
<?php
|
178 |
-
echo wp_kses_post( $info_disclosure_link );
|
179 |
-
echo wp_kses_post( $this->get_disclosure_labels() );
|
180 |
-
echo '<div class="buttons">';
|
181 |
-
echo get_submit_button(
|
182 |
-
$button_submit,
|
183 |
-
'secondary',
|
184 |
-
$this->product->get_key() . 'ti-deactivate-yes',
|
185 |
-
false,
|
186 |
-
array(
|
187 |
-
'data-after-text' => $button_submit,
|
188 |
-
'disabled' => true,
|
189 |
-
)
|
190 |
-
);
|
191 |
-
echo '</div>';
|
192 |
-
?>
|
193 |
-
</div><!--/.actions-->
|
194 |
-
</div><!--/.popup--footer-->
|
195 |
-
</div>
|
196 |
-
<?php
|
197 |
-
}
|
198 |
-
|
199 |
-
/**
|
200 |
-
* Add feedback styles.
|
201 |
-
*/
|
202 |
-
private function add_feedback_popup_style() {
|
203 |
-
?>
|
204 |
-
<style>
|
205 |
-
.ti-feedback {
|
206 |
-
background: #fff;
|
207 |
-
max-width: 400px;
|
208 |
-
z-index: 10000;
|
209 |
-
box-shadow: 0 0 15px -5px rgba(0, 0, 0, .5);
|
210 |
-
transition: all .3s ease-out;
|
211 |
-
}
|
212 |
-
|
213 |
-
|
214 |
-
.ti-feedback .popup--header {
|
215 |
-
position: relative;
|
216 |
-
background-color: #23A1CE;
|
217 |
-
}
|
218 |
-
|
219 |
-
.ti-feedback .popup--header h5 {
|
220 |
-
margin: 0;
|
221 |
-
font-size: 16px;
|
222 |
-
padding: 15px;
|
223 |
-
color: #fff;
|
224 |
-
font-weight: 600;
|
225 |
-
text-align: center;
|
226 |
-
letter-spacing: .3px;
|
227 |
-
}
|
228 |
-
|
229 |
-
.ti-feedback .popup--body {
|
230 |
-
padding: 15px;
|
231 |
-
}
|
232 |
-
|
233 |
-
.ti-feedback .popup--form {
|
234 |
-
margin: 0;
|
235 |
-
font-size: 13px;
|
236 |
-
}
|
237 |
-
|
238 |
-
.ti-feedback .popup--form input[type="radio"] {
|
239 |
-
margin: 0 10px 0 0;
|
240 |
-
}
|
241 |
-
|
242 |
-
.ti-feedback .popup--form input[type="radio"]:checked ~ textarea {
|
243 |
-
display: block;
|
244 |
-
}
|
245 |
-
|
246 |
-
.ti-feedback .popup--form textarea {
|
247 |
-
width: 100%;
|
248 |
-
margin: 10px 0 0;
|
249 |
-
display: none;
|
250 |
-
max-height: 150px;
|
251 |
-
}
|
252 |
-
|
253 |
-
.ti-feedback li {
|
254 |
-
display: flex;
|
255 |
-
align-items: center;
|
256 |
-
margin-bottom: 15px;
|
257 |
-
flex-wrap: wrap;
|
258 |
-
}
|
259 |
-
|
260 |
-
.ti-feedback li label {
|
261 |
-
max-width: 90%;
|
262 |
-
}
|
263 |
-
|
264 |
-
.ti-feedback li:last-child {
|
265 |
-
margin-bottom: 0;
|
266 |
-
}
|
267 |
-
|
268 |
-
.ti-feedback .popup--footer {
|
269 |
-
padding: 0 15px 15px;
|
270 |
-
}
|
271 |
-
|
272 |
-
.ti-feedback .actions {
|
273 |
-
display: flex;
|
274 |
-
flex-wrap: wrap;
|
275 |
-
}
|
276 |
-
|
277 |
-
.info-disclosure-link {
|
278 |
-
width: 100%;
|
279 |
-
margin-bottom: 15px;
|
280 |
-
}
|
281 |
-
|
282 |
-
.ti-feedback .info-disclosure-content {
|
283 |
-
max-height: 0;
|
284 |
-
overflow: hidden;
|
285 |
-
width: 100%;
|
286 |
-
transition: .3s ease;
|
287 |
-
}
|
288 |
-
|
289 |
-
.ti-feedback .info-disclosure-content.active {
|
290 |
-
max-height: 300px;
|
291 |
-
}
|
292 |
-
|
293 |
-
.ti-feedback .info-disclosure-content p {
|
294 |
-
margin: 0;
|
295 |
-
}
|
296 |
-
|
297 |
-
.ti-feedback .info-disclosure-content ul {
|
298 |
-
margin: 10px 0;
|
299 |
-
border-radius: 3px;
|
300 |
-
}
|
301 |
-
|
302 |
-
.ti-feedback .info-disclosure-content ul li {
|
303 |
-
display: flex;
|
304 |
-
align-items: center;
|
305 |
-
justify-content: space-between;
|
306 |
-
margin-bottom: 0;
|
307 |
-
padding: 5px 0;
|
308 |
-
border-bottom: 1px solid #ccc;
|
309 |
-
}
|
310 |
-
|
311 |
-
.ti-feedback .buttons {
|
312 |
-
display: flex;
|
313 |
-
width: 100%;
|
314 |
-
}
|
315 |
-
|
316 |
-
.ti-feedback .buttons input:last-child {
|
317 |
-
margin-left: auto;
|
318 |
-
}
|
319 |
-
|
320 |
-
.ti-theme-uninstall-feedback-drawer {
|
321 |
-
border-top-left-radius: 5px;
|
322 |
-
position: fixed;
|
323 |
-
top: 100%;
|
324 |
-
right: 15px;
|
325 |
-
}
|
326 |
-
|
327 |
-
.ti-theme-uninstall-feedback-drawer.active {
|
328 |
-
transform: translateY(-100%);
|
329 |
-
}
|
330 |
-
|
331 |
-
.ti-theme-uninstall-feedback-drawer .popup--header {
|
332 |
-
border-top-left-radius: 5px;
|
333 |
-
}
|
334 |
-
|
335 |
-
.ti-theme-uninstall-feedback-drawer .popup--header .toggle {
|
336 |
-
position: absolute;
|
337 |
-
padding: 3px 0;
|
338 |
-
width: 30px;
|
339 |
-
top: -26px;
|
340 |
-
right: 0;
|
341 |
-
cursor: pointer;
|
342 |
-
border-top-left-radius: 5px;
|
343 |
-
border-top-right-radius: 5px;
|
344 |
-
font-size: 20px;
|
345 |
-
background-color: #23A1CE;
|
346 |
-
color: #fff;
|
347 |
-
border: none;
|
348 |
-
line-height: 20px;
|
349 |
-
}
|
350 |
-
|
351 |
-
.ti-theme-uninstall-feedback-drawer .toggle span {
|
352 |
-
margin: 0;
|
353 |
-
display: inline-block;
|
354 |
-
}
|
355 |
-
|
356 |
-
.ti-theme-uninstall-feedback-drawer:not(.active) .toggle span {
|
357 |
-
transform: rotate(45deg);
|
358 |
-
}
|
359 |
-
|
360 |
-
.ti-theme-uninstall-feedback-drawer .popup--header .toggle:hover {
|
361 |
-
background-color: #1880a5;
|
362 |
-
}
|
363 |
-
|
364 |
-
|
365 |
-
.ti-plugin-uninstall-feedback-popup .popup--header:before {
|
366 |
-
content: "";
|
367 |
-
display: block;
|
368 |
-
position: absolute;
|
369 |
-
border: 20px solid #23A1CE;
|
370 |
-
left: -10px;
|
371 |
-
top: 50%;
|
372 |
-
border-top: 20px solid transparent;
|
373 |
-
border-bottom: 20px solid transparent;
|
374 |
-
border-left: 0;
|
375 |
-
transform: translateY(-50%);
|
376 |
-
}
|
377 |
-
|
378 |
-
.ti-plugin-uninstall-feedback-popup {
|
379 |
-
display: none;
|
380 |
-
position: absolute;
|
381 |
-
white-space: normal;
|
382 |
-
width: 400px;
|
383 |
-
left: 100%;
|
384 |
-
top: -15px;
|
385 |
-
}
|
386 |
-
|
387 |
-
.ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i {
|
388 |
-
animation: rotation 2s infinite linear;
|
389 |
-
display: block;
|
390 |
-
float: none;
|
391 |
-
align-items: center;
|
392 |
-
width: 100%;
|
393 |
-
margin: 0 auto;
|
394 |
-
height: 100%;
|
395 |
-
background: transparent;
|
396 |
-
padding: 0;
|
397 |
-
}
|
398 |
-
|
399 |
-
.ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i:before {
|
400 |
-
padding: 0;
|
401 |
-
background: transparent;
|
402 |
-
box-shadow: none;
|
403 |
-
color: #b4b9be
|
404 |
-
}
|
405 |
-
|
406 |
-
|
407 |
-
.ti-plugin-uninstall-feedback-popup.active {
|
408 |
-
display: block;
|
409 |
-
}
|
410 |
-
|
411 |
-
tr[data-plugin^="<?php echo $this->product->get_slug(); ?>"] .deactivate {
|
412 |
-
position: relative;
|
413 |
-
}
|
414 |
-
|
415 |
-
body.ti-feedback-open .ti-feedback-overlay {
|
416 |
-
content: "";
|
417 |
-
display: block;
|
418 |
-
background-color: rgba(0, 0, 0, 0.5);
|
419 |
-
top: 0;
|
420 |
-
bottom: 0;
|
421 |
-
right: 0;
|
422 |
-
left: 0;
|
423 |
-
z-index: 10000;
|
424 |
-
position: fixed;
|
425 |
-
}
|
426 |
-
|
427 |
-
@media (max-width: 768px) {
|
428 |
-
.ti-plugin-uninstall-feedback-popup {
|
429 |
-
position: fixed;
|
430 |
-
max-width: 100%;
|
431 |
-
margin: 0 auto;
|
432 |
-
left: 50%;
|
433 |
-
top: 50px;
|
434 |
-
transform: translateX(-50%);
|
435 |
-
}
|
436 |
-
|
437 |
-
.ti-plugin-uninstall-feedback-popup .popup--header:before {
|
438 |
-
display: none;
|
439 |
-
}
|
440 |
-
}
|
441 |
-
</style>
|
442 |
-
<?php
|
443 |
-
}
|
444 |
-
|
445 |
-
/**
|
446 |
-
* Theme feedback drawer JS.
|
447 |
-
*/
|
448 |
-
private function add_theme_feedback_drawer_js() {
|
449 |
-
$key = $this->product->get_key();
|
450 |
-
?>
|
451 |
-
<script type="text/javascript" id="ti-deactivate-js">
|
452 |
-
(function ($) {
|
453 |
-
$(document).ready(function () {
|
454 |
-
setTimeout(function () {
|
455 |
-
$('.ti-theme-uninstall-feedback-drawer').addClass('active');
|
456 |
-
}, <?php echo absint( self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000 ); ?> );
|
457 |
-
|
458 |
-
$('.ti-theme-uninstall-feedback-drawer .toggle').on('click', function (e) {
|
459 |
-
e.preventDefault();
|
460 |
-
$('.ti-theme-uninstall-feedback-drawer').toggleClass('active');
|
461 |
-
});
|
462 |
-
|
463 |
-
$('.info-disclosure-link').on('click', function (e) {
|
464 |
-
e.preventDefault();
|
465 |
-
$('.info-disclosure-content').toggleClass('active');
|
466 |
-
});
|
467 |
-
|
468 |
-
$('.ti-theme-uninstall-feedback-drawer input[type="radio"]').on('change', function () {
|
469 |
-
var radio = $(this);
|
470 |
-
if (radio.parent().find('textarea').length > 0 &&
|
471 |
-
radio.parent().find('textarea').val().length === 0) {
|
472 |
-
$('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
|
473 |
-
radio.parent().find('textarea').on('keyup', function (e) {
|
474 |
-
if ($(this).val().length === 0) {
|
475 |
-
$('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
|
476 |
-
} else {
|
477 |
-
$('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
|
478 |
-
}
|
479 |
-
});
|
480 |
-
} else {
|
481 |
-
$('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
|
482 |
-
}
|
483 |
-
});
|
484 |
-
|
485 |
-
$('#<?php echo $key; ?>ti-deactivate-yes').on('click', function (e) {
|
486 |
-
e.preventDefault();
|
487 |
-
e.stopPropagation();
|
488 |
-
|
489 |
-
var selectedOption = $(
|
490 |
-
'.ti-theme-uninstall-feedback-drawer input[name="ti-deactivate-option"]:checked');
|
491 |
-
$.post(ajaxurl, {
|
492 |
-
'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
|
493 |
-
'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
|
494 |
-
'id': selectedOption.parent().attr('ti-option-id'),
|
495 |
-
'msg': selectedOption.parent().find('textarea').val(),
|
496 |
-
'type': 'theme',
|
497 |
-
'key': '<?php echo esc_attr( $key ); ?>'
|
498 |
-
});
|
499 |
-
$('.ti-theme-uninstall-feedback-drawer').fadeOut();
|
500 |
-
});
|
501 |
-
});
|
502 |
-
})(jQuery);
|
503 |
-
|
504 |
-
</script>
|
505 |
-
<?php
|
506 |
-
do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
|
507 |
-
}
|
508 |
-
|
509 |
-
/**
|
510 |
-
* Render the options list.
|
511 |
-
*
|
512 |
-
* @param array $options the options for the feedback form.
|
513 |
-
*/
|
514 |
-
private function render_options_list( $options ) {
|
515 |
-
$key = $this->product->get_key();
|
516 |
-
$inputs_row_map = [
|
517 |
-
'text' => 1,
|
518 |
-
'textarea' => 2,
|
519 |
-
];
|
520 |
-
?>
|
521 |
-
<ul class="popup--form">
|
522 |
-
<?php foreach ( $options as $title => $attributes ) { ?>
|
523 |
-
<li ti-option-id="<?php echo esc_attr( $attributes['id'] ); ?>">
|
524 |
-
<input type="radio" name="ti-deactivate-option" id="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
|
525 |
-
<label for="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
|
526 |
-
<?php echo str_replace( '{theme}', $this->product->get_name(), $title ); ?>
|
527 |
-
</label>
|
528 |
-
<?php
|
529 |
-
if ( array_key_exists( 'type', $attributes ) ) {
|
530 |
-
$placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
|
531 |
-
echo '<textarea width="100%" rows="' . $inputs_row_map[ $attributes['type'] ] . '" name="comments" placeholder="' . esc_attr( $placeholder ) . '"></textarea>';
|
532 |
-
}
|
533 |
-
?>
|
534 |
-
</li>
|
535 |
-
<?php } ?>
|
536 |
-
</ul>
|
537 |
-
<?php
|
538 |
-
}
|
539 |
-
|
540 |
-
/**
|
541 |
-
* Render plugin feedback popup.
|
542 |
-
*/
|
543 |
-
private function render_plugin_feedback_popup() {
|
544 |
-
$button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $this->button_cancel );
|
545 |
-
$button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $this->button_submit );
|
546 |
-
$options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $this->options_plugin ) );
|
547 |
-
$info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
|
548 |
-
|
549 |
-
$options += $this->other;
|
550 |
-
?>
|
551 |
-
<div class="ti-plugin-uninstall-feedback-popup ti-feedback" id="<?php echo esc_attr( $this->product->get_slug() . '_uninstall_feedback_popup' ); ?>">
|
552 |
-
<div class="popup--header">
|
553 |
-
<h5><?php echo wp_kses( $this->heading_plugin, array( 'span' => true ) ); ?> </h5>
|
554 |
-
</div><!--/.popup--header-->
|
555 |
-
<div class="popup--body">
|
556 |
-
<?php $this->render_options_list( $options ); ?>
|
557 |
-
</div><!--/.popup--body-->
|
558 |
-
<div class="popup--footer">
|
559 |
-
<div class="actions">
|
560 |
-
<?php
|
561 |
-
echo wp_kses_post( $info_disclosure_link );
|
562 |
-
echo wp_kses_post( $this->get_disclosure_labels() );
|
563 |
-
echo '<div class="buttons">';
|
564 |
-
echo get_submit_button(
|
565 |
-
$button_cancel,
|
566 |
-
'secondary',
|
567 |
-
$this->product->get_key() . 'ti-deactivate-no',
|
568 |
-
false
|
569 |
-
);
|
570 |
-
echo get_submit_button(
|
571 |
-
$button_submit,
|
572 |
-
'primary',
|
573 |
-
$this->product->get_key() . 'ti-deactivate-yes',
|
574 |
-
false,
|
575 |
-
array(
|
576 |
-
'data-after-text' => $button_submit,
|
577 |
-
'disabled' => true,
|
578 |
-
)
|
579 |
-
);
|
580 |
-
echo '</div>';
|
581 |
-
?>
|
582 |
-
</div><!--/.actions-->
|
583 |
-
</div><!--/.popup--footer-->
|
584 |
-
</div>
|
585 |
-
|
586 |
-
<?php
|
587 |
-
}
|
588 |
-
|
589 |
-
/**
|
590 |
-
* Add plugin feedback popup JS
|
591 |
-
*/
|
592 |
-
private function add_plugin_feedback_popup_js() {
|
593 |
-
$popup_id = '#' . $this->product->get_slug() . '_uninstall_feedback_popup';
|
594 |
-
$key = $this->product->get_key();
|
595 |
-
?>
|
596 |
-
<script type="text/javascript" id="ti-deactivate-js">
|
597 |
-
(function ($) {
|
598 |
-
$(document).ready(function () {
|
599 |
-
var targetElement = 'tr[data-plugin^="<?php echo $this->product->get_slug(); ?>/"] span.deactivate a';
|
600 |
-
var redirectUrl = $(targetElement).attr('href');
|
601 |
-
if ($('.ti-feedback-overlay').length === 0) {
|
602 |
-
$('body').prepend('<div class="ti-feedback-overlay"></div>');
|
603 |
-
}
|
604 |
-
$('<?php echo esc_attr( $popup_id ); ?> ').appendTo($(targetElement).parent());
|
605 |
-
|
606 |
-
$(targetElement).on('click', function (e) {
|
607 |
-
e.preventDefault();
|
608 |
-
$('<?php echo esc_attr( $popup_id ); ?> ').addClass('active');
|
609 |
-
$('body').addClass('ti-feedback-open');
|
610 |
-
$('.ti-feedback-overlay').on('click', function () {
|
611 |
-
$('<?php echo esc_attr( $popup_id ); ?> ').removeClass('active');
|
612 |
-
$('body').removeClass('ti-feedback-open');
|
613 |
-
});
|
614 |
-
});
|
615 |
-
|
616 |
-
$('<?php echo esc_attr( $popup_id ); ?> .info-disclosure-link').on('click', function (e) {
|
617 |
-
e.preventDefault();
|
618 |
-
$(this).parent().find('.info-disclosure-content').toggleClass('active');
|
619 |
-
});
|
620 |
-
|
621 |
-
$('<?php echo esc_attr( $popup_id ); ?> input[type="radio"]').on('change', function () {
|
622 |
-
var radio = $(this);
|
623 |
-
if (radio.parent().find('textarea').length > 0 &&
|
624 |
-
radio.parent().find('textarea').val().length === 0) {
|
625 |
-
$('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
|
626 |
-
radio.parent().find('textarea').on('keyup', function (e) {
|
627 |
-
if ($(this).val().length === 0) {
|
628 |
-
$('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
|
629 |
-
} else {
|
630 |
-
$('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
|
631 |
-
}
|
632 |
-
});
|
633 |
-
} else {
|
634 |
-
$('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
|
635 |
-
}
|
636 |
-
});
|
637 |
-
|
638 |
-
$('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-no').on('click', function (e) {
|
639 |
-
e.preventDefault();
|
640 |
-
e.stopPropagation();
|
641 |
-
$(targetElement).unbind('click');
|
642 |
-
$('body').removeClass('ti-feedback-open');
|
643 |
-
$('<?php echo esc_attr( $popup_id ); ?>').remove();
|
644 |
-
if (redirectUrl !== '') {
|
645 |
-
location.href = redirectUrl;
|
646 |
-
}
|
647 |
-
});
|
648 |
-
|
649 |
-
$('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').on('click', function (e) {
|
650 |
-
e.preventDefault();
|
651 |
-
e.stopPropagation();
|
652 |
-
$(targetElement).unbind('click');
|
653 |
-
var selectedOption = $(
|
654 |
-
'<?php echo esc_attr( $popup_id ); ?> input[name="ti-deactivate-option"]:checked');
|
655 |
-
var data = {
|
656 |
-
'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
|
657 |
-
'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
|
658 |
-
'id': selectedOption.parent().attr('ti-option-id'),
|
659 |
-
'msg': selectedOption.parent().find('textarea').val(),
|
660 |
-
'type': 'plugin',
|
661 |
-
'key': '<?php echo esc_attr( $key ); ?>'
|
662 |
-
};
|
663 |
-
$.ajax({
|
664 |
-
type: 'POST',
|
665 |
-
url: ajaxurl,
|
666 |
-
data: data,
|
667 |
-
complete() {
|
668 |
-
$('body').removeClass('ti-feedback-open');
|
669 |
-
$('<?php echo esc_attr( $popup_id ); ?>').remove();
|
670 |
-
if (redirectUrl !== '') {
|
671 |
-
location.href = redirectUrl;
|
672 |
-
}
|
673 |
-
},
|
674 |
-
beforeSend() {
|
675 |
-
$('<?php echo esc_attr( $popup_id ); ?>').addClass('sending-feedback');
|
676 |
-
$('<?php echo esc_attr( $popup_id ); ?> .popup--footer').remove();
|
677 |
-
$('<?php echo esc_attr( $popup_id ); ?> .popup--body').html('<i class="dashicons dashicons-update-alt"></i>');
|
678 |
-
}
|
679 |
-
});
|
680 |
-
});
|
681 |
-
});
|
682 |
-
})(jQuery);
|
683 |
-
|
684 |
-
</script>
|
685 |
-
<?php
|
686 |
-
do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
|
687 |
-
}
|
688 |
-
|
689 |
-
/**
|
690 |
-
* Get the disclosure labels markup.
|
691 |
-
*
|
692 |
-
* @return string
|
693 |
-
*/
|
694 |
-
private function get_disclosure_labels() {
|
695 |
-
$disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
|
696 |
-
$disclosure_labels = array_merge(
|
697 |
-
[
|
698 |
-
'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No domain name, email address or IP addresses are transmited after you submit the survey.',
|
699 |
-
'items' => [
|
700 |
-
sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
|
701 |
-
sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
|
702 |
-
],
|
703 |
-
],
|
704 |
-
$disclosure_new_labels
|
705 |
-
);
|
706 |
-
|
707 |
-
$info_disclosure_content = '<div class="info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
|
708 |
-
foreach ( $disclosure_labels['items'] as $disclosure_item ) {
|
709 |
-
$info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
|
710 |
-
}
|
711 |
-
$info_disclosure_content .= '</ul></div>';
|
712 |
-
|
713 |
-
return $info_disclosure_content;
|
714 |
-
}
|
715 |
-
|
716 |
-
/**
|
717 |
-
* Randomizes the options array.
|
718 |
-
*
|
719 |
-
* @param array $options The options array.
|
720 |
-
*/
|
721 |
-
function randomize_options( $options ) {
|
722 |
-
$new = array();
|
723 |
-
$keys = array_keys( $options );
|
724 |
-
shuffle( $keys );
|
725 |
-
|
726 |
-
foreach ( $keys as $key ) {
|
727 |
-
$new[ $key ] = $options[ $key ];
|
728 |
-
}
|
729 |
-
|
730 |
-
return $new;
|
731 |
-
}
|
732 |
-
|
733 |
-
/**
|
734 |
-
* Called when the deactivate button is clicked.
|
735 |
-
*/
|
736 |
-
function post_deactivate() {
|
737 |
-
check_ajax_referer( (string) __CLASS__, 'nonce' );
|
738 |
-
|
739 |
-
$this->post_deactivate_or_cancel();
|
740 |
-
|
741 |
-
if ( empty( $_POST['id'] ) ) {
|
742 |
-
|
743 |
-
wp_send_json( [] );
|
744 |
-
|
745 |
-
return;
|
746 |
-
}
|
747 |
-
$this->call_api(
|
748 |
-
array(
|
749 |
-
'type' => 'deactivate',
|
750 |
-
'id' => $_POST['id'],
|
751 |
-
'comment' => isset( $_POST['msg'] ) ? $_POST['msg'] : '',
|
752 |
-
)
|
753 |
-
);
|
754 |
-
wp_send_json( [] );
|
755 |
-
|
756 |
-
}
|
757 |
-
|
758 |
-
/**
|
759 |
-
* Called when the deactivate/cancel button is clicked.
|
760 |
-
*/
|
761 |
-
private function post_deactivate_or_cancel() {
|
762 |
-
if ( ! isset( $_POST['type'] ) || ! isset( $_POST['key'] ) ) {
|
763 |
-
return;
|
764 |
-
}
|
765 |
-
if ( 'theme' !== $_POST['type'] ) {
|
766 |
-
return;
|
767 |
-
}
|
768 |
-
|
769 |
-
set_transient( 'ti_sdk_pause_' . $_POST['key'], true, self::PAUSE_DEACTIVATE_WINDOW_DAYS * DAY_IN_SECONDS );
|
770 |
-
|
771 |
-
}
|
772 |
-
|
773 |
-
/**
|
774 |
-
* Calls the API
|
775 |
-
*
|
776 |
-
* @param array $attributes The attributes of the post body.
|
777 |
-
*
|
778 |
-
* @return bool Is the request succesfull?
|
779 |
-
*/
|
780 |
-
protected function call_api( $attributes ) {
|
781 |
-
$slug = $this->product->get_slug();
|
782 |
-
$version = $this->product->get_version();
|
783 |
-
$attributes['slug'] = $slug;
|
784 |
-
$attributes['version'] = $version;
|
785 |
-
|
786 |
-
$response = wp_remote_post(
|
787 |
-
self::FEEDBACK_ENDPOINT,
|
788 |
-
array(
|
789 |
-
'body' => $attributes,
|
790 |
-
)
|
791 |
-
);
|
792 |
-
|
793 |
-
return is_wp_error( $response );
|
794 |
-
}
|
795 |
-
|
796 |
-
/**
|
797 |
-
* Should we load this object?.
|
798 |
-
*
|
799 |
-
* @param Product $product Product object.
|
800 |
-
*
|
801 |
-
* @return bool Should we load the module?
|
802 |
-
*/
|
803 |
-
public function can_load( $product ) {
|
804 |
-
if ( $this->is_from_partner( $product ) ) {
|
805 |
-
return false;
|
806 |
-
}
|
807 |
-
if ( $product->is_theme() && ( false !== get_transient( 'ti_sdk_pause_' . $product->get_key(), false ) ) ) {
|
808 |
-
return false;
|
809 |
-
}
|
810 |
-
|
811 |
-
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
812 |
-
return true;
|
813 |
-
}
|
814 |
-
global $pagenow;
|
815 |
-
|
816 |
-
if ( ! isset( $pagenow ) || empty( $pagenow ) ) {
|
817 |
-
return false;
|
818 |
-
}
|
819 |
-
|
820 |
-
if ( $product->is_plugin() && 'plugins.php' !== $pagenow ) {
|
821 |
-
return false;
|
822 |
-
|
823 |
-
}
|
824 |
-
if ( $product->is_theme() && 'theme-install.php' !== $pagenow ) {
|
825 |
-
return false;
|
826 |
-
}
|
827 |
-
|
828 |
-
return true;
|
829 |
-
}
|
830 |
-
|
831 |
-
/**
|
832 |
-
* Loads module hooks.
|
833 |
-
*
|
834 |
-
* @param Product $product Product details.
|
835 |
-
*
|
836 |
-
* @return Uninstall_Feedback Current module instance.
|
837 |
-
*/
|
838 |
-
public function load( $product ) {
|
839 |
-
|
840 |
-
if ( apply_filters( $product->get_key() . '_hide_uninstall_feedback', false ) ) {
|
841 |
-
return;
|
842 |
-
}
|
843 |
-
|
844 |
-
$this->product = $product;
|
845 |
-
add_action( 'admin_head', array( $this, 'load_resources' ) );
|
846 |
-
add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) );
|
847 |
-
|
848 |
-
return $this;
|
849 |
-
}
|
850 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/codeinwp/themeisle-sdk/src/Product.php
DELETED
@@ -1,418 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The product model class for ThemeIsle SDK
|
4 |
-
*
|
5 |
-
* @package ThemeIsleSDK
|
6 |
-
* @subpackage Product
|
7 |
-
* @copyright Copyright (c) 2017, Marius Cristea
|
8 |
-
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
|
9 |
-
* @since 1.0.0
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace ThemeisleSDK;
|
13 |
-
|
14 |
-
// Exit if accessed directly.
|
15 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
16 |
-
exit;
|
17 |
-
}
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Product model for ThemeIsle SDK.
|
21 |
-
*/
|
22 |
-
class Product {
|
23 |
-
/**
|
24 |
-
* Define plugin type string.
|
25 |
-
*/
|
26 |
-
const PLUGIN_TYPE = 'plugin';
|
27 |
-
/**
|
28 |
-
* Define theme type string.
|
29 |
-
*/
|
30 |
-
const THEME_TYPE = 'theme';
|
31 |
-
/**
|
32 |
-
* If the product has a pro version, contains the pro slug.
|
33 |
-
*
|
34 |
-
* @var string $pro_slug Pro slug, if available.
|
35 |
-
*/
|
36 |
-
public $pro_slug;
|
37 |
-
/**
|
38 |
-
* Current product slug.
|
39 |
-
*
|
40 |
-
* @var string $slug THe product slug.
|
41 |
-
*/
|
42 |
-
private $slug;
|
43 |
-
/**
|
44 |
-
* Product basefile, with the proper metadata.
|
45 |
-
*
|
46 |
-
* @var string $basefile The file with headers.
|
47 |
-
*/
|
48 |
-
private $basefile;
|
49 |
-
/**
|
50 |
-
* Type of the product.
|
51 |
-
*
|
52 |
-
* @var string $type The product type ( plugin | theme ).
|
53 |
-
*/
|
54 |
-
private $type;
|
55 |
-
/**
|
56 |
-
* The file name.
|
57 |
-
*
|
58 |
-
* @var string $file The file name.
|
59 |
-
*/
|
60 |
-
private $file;
|
61 |
-
/**
|
62 |
-
* Product name, fetched from the file headers.
|
63 |
-
*
|
64 |
-
* @var string $name The product name.
|
65 |
-
*/
|
66 |
-
private $name;
|
67 |
-
/**
|
68 |
-
* Product normalized key.
|
69 |
-
*
|
70 |
-
* @var string $key The product ready key.
|
71 |
-
*/
|
72 |
-
private $key;
|
73 |
-
/**
|
74 |
-
* Product store url.
|
75 |
-
*
|
76 |
-
* @var string $store_url The store url.
|
77 |
-
*/
|
78 |
-
private $store_url;
|
79 |
-
/**
|
80 |
-
* Product install timestamp.
|
81 |
-
*
|
82 |
-
* @var int $install The date of install.
|
83 |
-
*/
|
84 |
-
private $install;
|
85 |
-
/**
|
86 |
-
* Product store/author name.
|
87 |
-
*
|
88 |
-
* @var string $store_name The store name.
|
89 |
-
*/
|
90 |
-
private $store_name;
|
91 |
-
/**
|
92 |
-
* Does the product requires license.
|
93 |
-
*
|
94 |
-
* @var bool $requires_license Either user needs to activate it with license.
|
95 |
-
*/
|
96 |
-
private $requires_license;
|
97 |
-
/**
|
98 |
-
* Is the product available on wordpress.org
|
99 |
-
*
|
100 |
-
* @var bool $wordpress_available Either is available on WordPress or not.
|
101 |
-
*/
|
102 |
-
private $wordpress_available;
|
103 |
-
/**
|
104 |
-
* Current version of the product.
|
105 |
-
*
|
106 |
-
* @var string $version The product version.
|
107 |
-
*/
|
108 |
-
private $version;
|
109 |
-
|
110 |
-
/**
|
111 |
-
* ThemeIsle_SDK_Product constructor.
|
112 |
-
*
|
113 |
-
* @param string $basefile Product basefile.
|
114 |
-
*/
|
115 |
-
public function __construct( $basefile ) {
|
116 |
-
if ( ! empty( $basefile ) ) {
|
117 |
-
if ( is_file( $basefile ) ) {
|
118 |
-
$this->basefile = $basefile;
|
119 |
-
$this->setup_from_path();
|
120 |
-
$this->setup_from_fileheaders();
|
121 |
-
}
|
122 |
-
}
|
123 |
-
$install = get_option( $this->get_key() . '_install', 0 );
|
124 |
-
if ( 0 === $install ) {
|
125 |
-
$install = time();
|
126 |
-
update_option( $this->get_key() . '_install', time() );
|
127 |
-
}
|
128 |
-
$this->install = $install;
|
129 |
-
|
130 |
-
}
|
131 |
-
|
132 |
-
/**
|
133 |
-
* Setup props from path.
|
134 |
-
*/
|
135 |
-
public function setup_from_path() {
|
136 |
-
$this->file = basename( $this->basefile );
|
137 |
-
$dir = dirname( $this->basefile );
|
138 |
-
$this->slug = basename( $dir );
|
139 |
-
$exts = explode( '.', $this->basefile );
|
140 |
-
$ext = $exts[ count( $exts ) - 1 ];
|
141 |
-
if ( 'css' === $ext ) {
|
142 |
-
$this->type = 'theme';
|
143 |
-
}
|
144 |
-
if ( 'php' === $ext ) {
|
145 |
-
$this->type = 'plugin';
|
146 |
-
}
|
147 |
-
$this->key = self::key_ready_name( $this->slug );
|
148 |
-
}
|
149 |
-
|
150 |
-
/**
|
151 |
-
* Normalize string.
|
152 |
-
*
|
153 |
-
* @param string $string the String to be normalized for cron handler.
|
154 |
-
*
|
155 |
-
* @return string $name The normalized string.
|
156 |
-
*/
|
157 |
-
static function key_ready_name( $string ) {
|
158 |
-
return str_replace( '-', '_', strtolower( trim( $string ) ) );
|
159 |
-
}
|
160 |
-
|
161 |
-
/**
|
162 |
-
* Setup props from fileheaders.
|
163 |
-
*/
|
164 |
-
public function setup_from_fileheaders() {
|
165 |
-
$file_headers = array(
|
166 |
-
'Requires License' => 'Requires License',
|
167 |
-
'WordPress Available' => 'WordPress Available',
|
168 |
-
'Pro Slug' => 'Pro Slug',
|
169 |
-
'Version' => 'Version',
|
170 |
-
);
|
171 |
-
if ( 'plugin' === $this->type ) {
|
172 |
-
$file_headers['Name'] = 'Plugin Name';
|
173 |
-
$file_headers['AuthorName'] = 'Author';
|
174 |
-
$file_headers['AuthorURI'] = 'Author URI';
|
175 |
-
}
|
176 |
-
if ( 'theme' === $this->type ) {
|
177 |
-
$file_headers['Name'] = 'Theme Name';
|
178 |
-
$file_headers['AuthorName'] = 'Author';
|
179 |
-
$file_headers['AuthorURI'] = 'Author URI';
|
180 |
-
}
|
181 |
-
$file_headers = get_file_data( $this->basefile, $file_headers );
|
182 |
-
|
183 |
-
$this->name = $file_headers['Name'];
|
184 |
-
$this->store_name = $file_headers['AuthorName'];
|
185 |
-
$this->author_url = $file_headers['AuthorURI'];
|
186 |
-
$this->store_url = $file_headers['AuthorURI'];
|
187 |
-
|
188 |
-
$this->requires_license = ( 'yes' === $file_headers['Requires License'] ) ? true : false;
|
189 |
-
$this->wordpress_available = ( 'yes' === $file_headers['WordPress Available'] ) ? true : false;
|
190 |
-
$this->pro_slug = ! empty( $file_headers['Pro Slug'] ) ? $file_headers['Pro Slug'] : '';
|
191 |
-
$this->version = $file_headers['Version'];
|
192 |
-
|
193 |
-
}
|
194 |
-
|
195 |
-
/**
|
196 |
-
* Return the product key.
|
197 |
-
*
|
198 |
-
* @return string The product key.
|
199 |
-
*/
|
200 |
-
public function get_key() {
|
201 |
-
return $this->key;
|
202 |
-
}
|
203 |
-
|
204 |
-
/**
|
205 |
-
* Check if the product is either theme or plugin.
|
206 |
-
*
|
207 |
-
* @return string Product type.
|
208 |
-
*/
|
209 |
-
public function get_type() {
|
210 |
-
return $this->type;
|
211 |
-
}
|
212 |
-
|
213 |
-
/**
|
214 |
-
* Return if the product is used as a plugin.
|
215 |
-
*
|
216 |
-
* @return bool Is plugin?
|
217 |
-
*/
|
218 |
-
public function is_plugin() {
|
219 |
-
return self::PLUGIN_TYPE === $this->type;
|
220 |
-
}
|
221 |
-
|
222 |
-
/**
|
223 |
-
* Return if the product is used as a theme.
|
224 |
-
*
|
225 |
-
* @return bool Is theme ?
|
226 |
-
*/
|
227 |
-
public function is_theme() {
|
228 |
-
return self::THEME_TYPE === $this->type;
|
229 |
-
}
|
230 |
-
|
231 |
-
/**
|
232 |
-
* Returns the product slug.
|
233 |
-
*
|
234 |
-
* @return string The product slug.
|
235 |
-
*/
|
236 |
-
public function get_slug() {
|
237 |
-
return $this->slug;
|
238 |
-
}
|
239 |
-
|
240 |
-
/**
|
241 |
-
* The magic var_dump info method.
|
242 |
-
*
|
243 |
-
* @return array Debug info.
|
244 |
-
*/
|
245 |
-
public function __debugInfo() {
|
246 |
-
return array(
|
247 |
-
'name' => $this->name,
|
248 |
-
'slug' => $this->slug,
|
249 |
-
'version' => $this->version,
|
250 |
-
'basefile' => $this->basefile,
|
251 |
-
'key' => $this->key,
|
252 |
-
'type' => $this->type,
|
253 |
-
'store_name' => $this->store_name,
|
254 |
-
'store_url' => $this->store_url,
|
255 |
-
'wordpress_available' => $this->wordpress_available,
|
256 |
-
'requires_license' => $this->requires_license,
|
257 |
-
);
|
258 |
-
|
259 |
-
}
|
260 |
-
|
261 |
-
/**
|
262 |
-
* Getter for product version.
|
263 |
-
*
|
264 |
-
* @return string The product version.
|
265 |
-
*/
|
266 |
-
public function get_version() {
|
267 |
-
return $this->version;
|
268 |
-
}
|
269 |
-
|
270 |
-
/**
|
271 |
-
* Returns current product license, if available.
|
272 |
-
*
|
273 |
-
* @return string Return license key, if available.
|
274 |
-
*/
|
275 |
-
public function get_license() {
|
276 |
-
|
277 |
-
if ( ! $this->requires_license() && ! $this->is_wordpress_available() ) {
|
278 |
-
return 'free';
|
279 |
-
}
|
280 |
-
$license_data = get_option( $this->get_key() . '_license_data', '' );
|
281 |
-
|
282 |
-
if ( empty( $license_data ) ) {
|
283 |
-
return get_option( $this->get_key() . '_license', '' );
|
284 |
-
}
|
285 |
-
if ( ! isset( $license_data->key ) ) {
|
286 |
-
return get_option( $this->get_key() . '_license', '' );
|
287 |
-
}
|
288 |
-
|
289 |
-
return $license_data->key;
|
290 |
-
}
|
291 |
-
|
292 |
-
/**
|
293 |
-
* Either the product requires license or not.
|
294 |
-
*
|
295 |
-
* @return bool Either requires license or not.
|
296 |
-
*/
|
297 |
-
public function requires_license() {
|
298 |
-
return $this->requires_license;
|
299 |
-
}
|
300 |
-
|
301 |
-
/**
|
302 |
-
* If product is available on wordpress.org or not.
|
303 |
-
*
|
304 |
-
* @return bool Either is wp available or not.
|
305 |
-
*/
|
306 |
-
public function is_wordpress_available() {
|
307 |
-
return $this->wordpress_available;
|
308 |
-
}
|
309 |
-
|
310 |
-
/**
|
311 |
-
* Return friendly name.
|
312 |
-
*
|
313 |
-
* @return string Friendly name.
|
314 |
-
*/
|
315 |
-
public function get_friendly_name() {
|
316 |
-
$name = apply_filters( $this->get_key() . '_friendly_name', trim( str_replace( 'Lite', '', $this->get_name() ) ) );
|
317 |
-
$name = rtrim( $name, '- ()' );
|
318 |
-
|
319 |
-
return $name;
|
320 |
-
}
|
321 |
-
|
322 |
-
/**
|
323 |
-
* Getter for product name.
|
324 |
-
*
|
325 |
-
* @return string The product name.
|
326 |
-
*/
|
327 |
-
public function get_name() {
|
328 |
-
return $this->name;
|
329 |
-
}
|
330 |
-
|
331 |
-
/**
|
332 |
-
* Returns the Store name.
|
333 |
-
*
|
334 |
-
* @return string Store name.
|
335 |
-
*/
|
336 |
-
public function get_store_name() {
|
337 |
-
return $this->store_name;
|
338 |
-
}
|
339 |
-
|
340 |
-
/**
|
341 |
-
* Returns the store url.
|
342 |
-
*
|
343 |
-
* @return string The store url.
|
344 |
-
*/
|
345 |
-
public function get_store_url() {
|
346 |
-
|
347 |
-
if ( strpos( $this->store_url, '/themeisle.com' ) !== false ) {
|
348 |
-
return 'https://store.themeisle.com/';
|
349 |
-
}
|
350 |
-
|
351 |
-
return $this->store_url;
|
352 |
-
}
|
353 |
-
|
354 |
-
/**
|
355 |
-
* Returns product basefile, which holds the metaheaders.
|
356 |
-
*
|
357 |
-
* @return string The product basefile.
|
358 |
-
*/
|
359 |
-
public function get_basefile() {
|
360 |
-
return $this->basefile;
|
361 |
-
}
|
362 |
-
|
363 |
-
/**
|
364 |
-
* Get changelog url.
|
365 |
-
*
|
366 |
-
* @return string Changelog url.
|
367 |
-
*/
|
368 |
-
public function get_changelog() {
|
369 |
-
return add_query_arg(
|
370 |
-
[
|
371 |
-
'name' => rawurlencode( $this->get_name() ),
|
372 |
-
'edd_action' => 'view_changelog',
|
373 |
-
],
|
374 |
-
$this->get_store_url()
|
375 |
-
);
|
376 |
-
}
|
377 |
-
|
378 |
-
/**
|
379 |
-
* Returns product filename.
|
380 |
-
*
|
381 |
-
* @return string The product filename.
|
382 |
-
*/
|
383 |
-
public function get_file() {
|
384 |
-
return $this->file;
|
385 |
-
}
|
386 |
-
|
387 |
-
/**
|
388 |
-
* Returns the pro slug, if available.
|
389 |
-
*
|
390 |
-
* @return string The pro slug.
|
391 |
-
*/
|
392 |
-
public function get_pro_slug() {
|
393 |
-
return $this->pro_slug;
|
394 |
-
}
|
395 |
-
|
396 |
-
/**
|
397 |
-
* Return the install timestamp.
|
398 |
-
*
|
399 |
-
* @return int The install timestamp.
|
400 |
-
*/
|
401 |
-
public function get_install_time() {
|
402 |
-
return $this->install;
|
403 |
-
}
|
404 |
-
|
405 |
-
/**
|
406 |
-
* Returns the URL of the product base file.
|
407 |
-
*
|
408 |
-
* @param string $path The path to the file.
|
409 |
-
*
|
410 |
-
* @return string The URL of the product base file.
|
411 |
-
*/
|
412 |
-
public function get_base_url( $path = '/' ) {
|
413 |
-
if ( $this->type ) {
|
414 |
-
return plugins_url( $path, $this->basefile );
|
415 |
-
}
|
416 |
-
}
|
417 |
-
|
418 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -13,21 +13,24 @@ class ComposerAutoloaderInita8c63f4e9c2954bc69536840bf87006d
|
|
13 |
}
|
14 |
}
|
15 |
|
|
|
|
|
|
|
16 |
public static function getLoader()
|
17 |
{
|
18 |
if (null !== self::$loader) {
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
@@ -48,19 +51,19 @@ class ComposerAutoloaderInita8c63f4e9c2954bc69536840bf87006d
|
|
48 |
$loader->register(true);
|
49 |
|
50 |
if ($useStaticLoader) {
|
51 |
-
$includeFiles = Composer\Autoload\
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
-
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
-
function
|
64 |
{
|
65 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInite4069214b60b0efef4a17b4633ac2190
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
13 |
}
|
14 |
}
|
15 |
|
16 |
+
/**
|
17 |
+
* @return \Composer\Autoload\ClassLoader
|
18 |
+
*/
|
19 |
public static function getLoader()
|
20 |
{
|
21 |
if (null !== self::$loader) {
|
22 |
return self::$loader;
|
23 |
}
|
24 |
|
25 |
+
spl_autoload_register(array('ComposerAutoloaderInite4069214b60b0efef4a17b4633ac2190', 'loadClassLoader'), true, true);
|
26 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
27 |
+
spl_autoload_unregister(array('ComposerAutoloaderInite4069214b60b0efef4a17b4633ac2190', 'loadClassLoader'));
|
28 |
|
29 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
30 |
if ($useStaticLoader) {
|
31 |
require_once __DIR__ . '/autoload_static.php';
|
32 |
|
33 |
+
call_user_func(\Composer\Autoload\ComposerStaticInite4069214b60b0efef4a17b4633ac2190::getInitializer($loader));
|
34 |
} else {
|
35 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
36 |
foreach ($map as $namespace => $path) {
|
51 |
$loader->register(true);
|
52 |
|
53 |
if ($useStaticLoader) {
|
54 |
+
$includeFiles = Composer\Autoload\ComposerStaticInite4069214b60b0efef4a17b4633ac2190::$files;
|
55 |
} else {
|
56 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
57 |
}
|
58 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
59 |
+
composerRequiree4069214b60b0efef4a17b4633ac2190($fileIdentifier, $file);
|
60 |
}
|
61 |
|
62 |
return $loader;
|
63 |
}
|
64 |
}
|
65 |
|
66 |
+
function composerRequiree4069214b60b0efef4a17b4633ac2190($fileIdentifier, $file)
|
67 |
{
|
68 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
69 |
require $file;
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'4940672e65e7c6c88ed7150711580427' => __DIR__ . '/..' . '/codeinwp/gutenberg-animation/load.php',
|
@@ -53,9 +53,9 @@ class ComposerStaticInita8c63f4e9c2954bc69536840bf87006d
|
|
53 |
public static function getInitializer(ClassLoader $loader)
|
54 |
{
|
55 |
return \Closure::bind(function () use ($loader) {
|
56 |
-
$loader->prefixLengthsPsr4 =
|
57 |
-
$loader->prefixDirsPsr4 =
|
58 |
-
$loader->classMap =
|
59 |
|
60 |
}, null, ClassLoader::class);
|
61 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInite4069214b60b0efef4a17b4633ac2190
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'4940672e65e7c6c88ed7150711580427' => __DIR__ . '/..' . '/codeinwp/gutenberg-animation/load.php',
|
53 |
public static function getInitializer(ClassLoader $loader)
|
54 |
{
|
55 |
return \Closure::bind(function () use ($loader) {
|
56 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInite4069214b60b0efef4a17b4633ac2190::$prefixLengthsPsr4;
|
57 |
+
$loader->prefixDirsPsr4 = ComposerStaticInite4069214b60b0efef4a17b4633ac2190::$prefixDirsPsr4;
|
58 |
+
$loader->classMap = ComposerStaticInite4069214b60b0efef4a17b4633ac2190::$classMap;
|
59 |
|
60 |
}, null, ClassLoader::class);
|
61 |
}
|
vendor/composer/installed.json
CHANGED
@@ -137,17 +137,17 @@
|
|
137 |
},
|
138 |
{
|
139 |
"name": "codeinwp/themeisle-sdk",
|
140 |
-
"version": "3.
|
141 |
-
"version_normalized": "3.
|
142 |
"source": {
|
143 |
"type": "git",
|
144 |
"url": "https://github.com/Codeinwp/themeisle-sdk.git",
|
145 |
-
"reference": "
|
146 |
},
|
147 |
"dist": {
|
148 |
"type": "zip",
|
149 |
-
"url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/
|
150 |
-
"reference": "
|
151 |
"shasum": ""
|
152 |
},
|
153 |
"require-dev": {
|
@@ -155,7 +155,7 @@
|
|
155 |
"squizlabs/php_codesniffer": "^3.1",
|
156 |
"wp-coding-standards/wpcs": "^1.0.0"
|
157 |
},
|
158 |
-
"time": "2020-
|
159 |
"type": "library",
|
160 |
"installation-source": "dist",
|
161 |
"notification-url": "https://packagist.org/downloads/",
|
137 |
},
|
138 |
{
|
139 |
"name": "codeinwp/themeisle-sdk",
|
140 |
+
"version": "3.2.2",
|
141 |
+
"version_normalized": "3.2.2.0",
|
142 |
"source": {
|
143 |
"type": "git",
|
144 |
"url": "https://github.com/Codeinwp/themeisle-sdk.git",
|
145 |
+
"reference": "1b787d10970575780b35f96380c6ef3173b00d18"
|
146 |
},
|
147 |
"dist": {
|
148 |
"type": "zip",
|
149 |
+
"url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/1b787d10970575780b35f96380c6ef3173b00d18",
|
150 |
+
"reference": "1b787d10970575780b35f96380c6ef3173b00d18",
|
151 |
"shasum": ""
|
152 |
},
|
153 |
"require-dev": {
|
155 |
"squizlabs/php_codesniffer": "^3.1",
|
156 |
"wp-coding-standards/wpcs": "^1.0.0"
|
157 |
},
|
158 |
+
"time": "2020-03-13T15:58:53+00:00",
|
159 |
"type": "library",
|
160 |
"installation-source": "dist",
|
161 |
"notification-url": "https://packagist.org/downloads/",
|
vendor/tubalmartin/cssmin/src/Colors.php
DELETED
@@ -1,155 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace tubalmartin\CssMin;
|
4 |
-
|
5 |
-
class Colors
|
6 |
-
{
|
7 |
-
public static function getHexToNamedMap()
|
8 |
-
{
|
9 |
-
// Hex colors longer than named counterpart
|
10 |
-
return array(
|
11 |
-
'#f0ffff' => 'azure',
|
12 |
-
'#f5f5dc' => 'beige',
|
13 |
-
'#ffe4c4' => 'bisque',
|
14 |
-
'#a52a2a' => 'brown',
|
15 |
-
'#ff7f50' => 'coral',
|
16 |
-
'#ffd700' => 'gold',
|
17 |
-
'#808080' => 'gray',
|
18 |
-
'#008000' => 'green',
|
19 |
-
'#4b0082' => 'indigo',
|
20 |
-
'#fffff0' => 'ivory',
|
21 |
-
'#f0e68c' => 'khaki',
|
22 |
-
'#faf0e6' => 'linen',
|
23 |
-
'#800000' => 'maroon',
|
24 |
-
'#000080' => 'navy',
|
25 |
-
'#fdf5e6' => 'oldlace',
|
26 |
-
'#808000' => 'olive',
|
27 |
-
'#ffa500' => 'orange',
|
28 |
-
'#da70d6' => 'orchid',
|
29 |
-
'#cd853f' => 'peru',
|
30 |
-
'#ffc0cb' => 'pink',
|
31 |
-
'#dda0dd' => 'plum',
|
32 |
-
'#800080' => 'purple',
|
33 |
-
'#f00' => 'red',
|
34 |
-
'#fa8072' => 'salmon',
|
35 |
-
'#a0522d' => 'sienna',
|
36 |
-
'#c0c0c0' => 'silver',
|
37 |
-
'#fffafa' => 'snow',
|
38 |
-
'#d2b48c' => 'tan',
|
39 |
-
'#008080' => 'teal',
|
40 |
-
'#ff6347' => 'tomato',
|
41 |
-
'#ee82ee' => 'violet',
|
42 |
-
'#f5deb3' => 'wheat'
|
43 |
-
);
|
44 |
-
}
|
45 |
-
|
46 |
-
public static function getNamedToHexMap()
|
47 |
-
{
|
48 |
-
// Named colors longer than hex counterpart
|
49 |
-
return array(
|
50 |
-
'aliceblue' => '#f0f8ff',
|
51 |
-
'antiquewhite' => '#faebd7',
|
52 |
-
'aquamarine' => '#7fffd4',
|
53 |
-
'black' => '#000',
|
54 |
-
'blanchedalmond' => '#ffebcd',
|
55 |
-
'blueviolet' => '#8a2be2',
|
56 |
-
'burlywood' => '#deb887',
|
57 |
-
'cadetblue' => '#5f9ea0',
|
58 |
-
'chartreuse' => '#7fff00',
|
59 |
-
'chocolate' => '#d2691e',
|
60 |
-
'cornflowerblue' => '#6495ed',
|
61 |
-
'cornsilk' => '#fff8dc',
|
62 |
-
'darkblue' => '#00008b',
|
63 |
-
'darkcyan' => '#008b8b',
|
64 |
-
'darkgoldenrod' => '#b8860b',
|
65 |
-
'darkgray' => '#a9a9a9',
|
66 |
-
'darkgreen' => '#006400',
|
67 |
-
'darkgrey' => '#a9a9a9',
|
68 |
-
'darkkhaki' => '#bdb76b',
|
69 |
-
'darkmagenta' => '#8b008b',
|
70 |
-
'darkolivegreen' => '#556b2f',
|
71 |
-
'darkorange' => '#ff8c00',
|
72 |
-
'darkorchid' => '#9932cc',
|
73 |
-
'darksalmon' => '#e9967a',
|
74 |
-
'darkseagreen' => '#8fbc8f',
|
75 |
-
'darkslateblue' => '#483d8b',
|
76 |
-
'darkslategray' => '#2f4f4f',
|
77 |
-
'darkslategrey' => '#2f4f4f',
|
78 |
-
'darkturquoise' => '#00ced1',
|
79 |
-
'darkviolet' => '#9400d3',
|
80 |
-
'deeppink' => '#ff1493',
|
81 |
-
'deepskyblue' => '#00bfff',
|
82 |
-
'dodgerblue' => '#1e90ff',
|
83 |
-
'firebrick' => '#b22222',
|
84 |
-
'floralwhite' => '#fffaf0',
|
85 |
-
'forestgreen' => '#228b22',
|
86 |
-
'fuchsia' => '#f0f',
|
87 |
-
'gainsboro' => '#dcdcdc',
|
88 |
-
'ghostwhite' => '#f8f8ff',
|
89 |
-
'goldenrod' => '#daa520',
|
90 |
-
'greenyellow' => '#adff2f',
|
91 |
-
'honeydew' => '#f0fff0',
|
92 |
-
'indianred' => '#cd5c5c',
|
93 |
-
'lavender' => '#e6e6fa',
|
94 |
-
'lavenderblush' => '#fff0f5',
|
95 |
-
'lawngreen' => '#7cfc00',
|
96 |
-
'lemonchiffon' => '#fffacd',
|
97 |
-
'lightblue' => '#add8e6',
|
98 |
-
'lightcoral' => '#f08080',
|
99 |
-
'lightcyan' => '#e0ffff',
|
100 |
-
'lightgoldenrodyellow' => '#fafad2',
|
101 |
-
'lightgray' => '#d3d3d3',
|
102 |
-
'lightgreen' => '#90ee90',
|
103 |
-
'lightgrey' => '#d3d3d3',
|
104 |
-
'lightpink' => '#ffb6c1',
|
105 |
-
'lightsalmon' => '#ffa07a',
|
106 |
-
'lightseagreen' => '#20b2aa',
|
107 |
-
'lightskyblue' => '#87cefa',
|
108 |
-
'lightslategray' => '#778899',
|
109 |
-
'lightslategrey' => '#778899',
|
110 |
-
'lightsteelblue' => '#b0c4de',
|
111 |
-
'lightyellow' => '#ffffe0',
|
112 |
-
'limegreen' => '#32cd32',
|
113 |
-
'mediumaquamarine' => '#66cdaa',
|
114 |
-
'mediumblue' => '#0000cd',
|
115 |
-
'mediumorchid' => '#ba55d3',
|
116 |
-
'mediumpurple' => '#9370db',
|
117 |
-
'mediumseagreen' => '#3cb371',
|
118 |
-
'mediumslateblue' => '#7b68ee',
|
119 |
-
'mediumspringgreen' => '#00fa9a',
|
120 |
-
'mediumturquoise' => '#48d1cc',
|
121 |
-
'mediumvioletred' => '#c71585',
|
122 |
-
'midnightblue' => '#191970',
|
123 |
-
'mintcream' => '#f5fffa',
|
124 |
-
'mistyrose' => '#ffe4e1',
|
125 |
-
'moccasin' => '#ffe4b5',
|
126 |
-
'navajowhite' => '#ffdead',
|
127 |
-
'olivedrab' => '#6b8e23',
|
128 |
-
'orangered' => '#ff4500',
|
129 |
-
'palegoldenrod' => '#eee8aa',
|
130 |
-
'palegreen' => '#98fb98',
|
131 |
-
'paleturquoise' => '#afeeee',
|
132 |
-
'palevioletred' => '#db7093',
|
133 |
-
'papayawhip' => '#ffefd5',
|
134 |
-
'peachpuff' => '#ffdab9',
|
135 |
-
'powderblue' => '#b0e0e6',
|
136 |
-
'rebeccapurple' => '#663399',
|
137 |
-
'rosybrown' => '#bc8f8f',
|
138 |
-
'royalblue' => '#4169e1',
|
139 |
-
'saddlebrown' => '#8b4513',
|
140 |
-
'sandybrown' => '#f4a460',
|
141 |
-
'seagreen' => '#2e8b57',
|
142 |
-
'seashell' => '#fff5ee',
|
143 |
-
'slateblue' => '#6a5acd',
|
144 |
-
'slategray' => '#708090',
|
145 |
-
'slategrey' => '#708090',
|
146 |
-
'springgreen' => '#00ff7f',
|
147 |
-
'steelblue' => '#4682b4',
|
148 |
-
'turquoise' => '#40e0d0',
|
149 |
-
'white' => '#fff',
|
150 |
-
'whitesmoke' => '#f5f5f5',
|
151 |
-
'yellow' => '#ff0',
|
152 |
-
'yellowgreen' => '#9acd32'
|
153 |
-
);
|
154 |
-
}
|
155 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/tubalmartin/cssmin/src/Command.php
DELETED
@@ -1,223 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace tubalmartin\CssMin;
|
4 |
-
|
5 |
-
class Command
|
6 |
-
{
|
7 |
-
const SUCCESS_EXIT = 0;
|
8 |
-
const FAILURE_EXIT = 1;
|
9 |
-
|
10 |
-
protected $stats = array();
|
11 |
-
|
12 |
-
public static function main()
|
13 |
-
{
|
14 |
-
$command = new self;
|
15 |
-
$command->run();
|
16 |
-
}
|
17 |
-
|
18 |
-
public function run()
|
19 |
-
{
|
20 |
-
$opts = getopt(
|
21 |
-
'hi:o:',
|
22 |
-
array(
|
23 |
-
'help',
|
24 |
-
'input:',
|
25 |
-
'output:',
|
26 |
-
'dry-run',
|
27 |
-
'keep-sourcemap',
|
28 |
-
'keep-sourcemap-comment',
|
29 |
-
'linebreak-position:',
|
30 |
-
'memory-limit:',
|
31 |
-
'pcre-backtrack-limit:',
|
32 |
-
'pcre-recursion-limit:',
|
33 |
-
'remove-important-comments'
|
34 |
-
)
|
35 |
-
);
|
36 |
-
|
37 |
-
$help = $this->getOpt(array('h', 'help'), $opts);
|
38 |
-
$input = $this->getOpt(array('i', 'input'), $opts);
|
39 |
-
$output = $this->getOpt(array('o', 'output'), $opts);
|
40 |
-
$dryrun = $this->getOpt('dry-run', $opts);
|
41 |
-
$keepSourceMapComment = $this->getOpt(array('keep-sourcemap', 'keep-sourcemap-comment'), $opts);
|
42 |
-
$linebreakPosition = $this->getOpt('linebreak-position', $opts);
|
43 |
-
$memoryLimit = $this->getOpt('memory-limit', $opts);
|
44 |
-
$backtrackLimit = $this->getOpt('pcre-backtrack-limit', $opts);
|
45 |
-
$recursionLimit = $this->getOpt('pcre-recursion-limit', $opts);
|
46 |
-
$removeImportantComments = $this->getOpt('remove-important-comments', $opts);
|
47 |
-
|
48 |
-
if (!is_null($help)) {
|
49 |
-
$this->showHelp();
|
50 |
-
die(self::SUCCESS_EXIT);
|
51 |
-
}
|
52 |
-
|
53 |
-
if (is_null($input)) {
|
54 |
-
fwrite(STDERR, '-i <file> argument is missing' . PHP_EOL);
|
55 |
-
$this->showHelp();
|
56 |
-
die(self::FAILURE_EXIT);
|
57 |
-
}
|
58 |
-
|
59 |
-
if (!is_readable($input)) {
|
60 |
-
fwrite(STDERR, 'Input file is not readable' . PHP_EOL);
|
61 |
-
die(self::FAILURE_EXIT);
|
62 |
-
}
|
63 |
-
|
64 |
-
$css = file_get_contents($input);
|
65 |
-
|
66 |
-
if ($css === false) {
|
67 |
-
fwrite(STDERR, 'Input CSS code could not be retrieved from input file' . PHP_EOL);
|
68 |
-
die(self::FAILURE_EXIT);
|
69 |
-
}
|
70 |
-
|
71 |
-
$this->setStat('original-size', strlen($css));
|
72 |
-
|
73 |
-
$cssmin = new Minifier;
|
74 |
-
|
75 |
-
if (!is_null($keepSourceMapComment)) {
|
76 |
-
$cssmin->keepSourceMapComment();
|
77 |
-
}
|
78 |
-
|
79 |
-
if (!is_null($removeImportantComments)) {
|
80 |
-
$cssmin->removeImportantComments();
|
81 |
-
}
|
82 |
-
|
83 |
-
if (!is_null($linebreakPosition)) {
|
84 |
-
$cssmin->setLineBreakPosition($linebreakPosition);
|
85 |
-
}
|
86 |
-
|
87 |
-
if (!is_null($memoryLimit)) {
|
88 |
-
$cssmin->setMemoryLimit($memoryLimit);
|
89 |
-
}
|
90 |
-
|
91 |
-
if (!is_null($backtrackLimit)) {
|
92 |
-
$cssmin->setPcreBacktrackLimit($backtrackLimit);
|
93 |
-
}
|
94 |
-
|
95 |
-
if (!is_null($recursionLimit)) {
|
96 |
-
$cssmin->setPcreRecursionLimit($recursionLimit);
|
97 |
-
}
|
98 |
-
|
99 |
-
$this->setStat('compression-time-start', microtime(true));
|
100 |
-
|
101 |
-
$css = $cssmin->run($css);
|
102 |
-
|
103 |
-
$this->setStat('compression-time-end', microtime(true));
|
104 |
-
$this->setStat('peak-memory-usage', memory_get_peak_usage(true));
|
105 |
-
$this->setStat('compressed-size', strlen($css));
|
106 |
-
|
107 |
-
if (!is_null($dryrun)) {
|
108 |
-
$this->showStats();
|
109 |
-
die(self::SUCCESS_EXIT);
|
110 |
-
}
|
111 |
-
|
112 |
-
if (is_null($output)) {
|
113 |
-
fwrite(STDOUT, $css . PHP_EOL);
|
114 |
-
$this->showStats();
|
115 |
-
die(self::SUCCESS_EXIT);
|
116 |
-
}
|
117 |
-
|
118 |
-
if (!is_writable(dirname($output))) {
|
119 |
-
fwrite(STDERR, 'Output file is not writable' . PHP_EOL);
|
120 |
-
die(self::FAILURE_EXIT);
|
121 |
-
}
|
122 |
-
|
123 |
-
if (file_put_contents($output, $css) === false) {
|
124 |
-
fwrite(STDERR, 'Compressed CSS code could not be saved to output file' . PHP_EOL);
|
125 |
-
die(self::FAILURE_EXIT);
|
126 |
-
}
|
127 |
-
|
128 |
-
$this->showStats();
|
129 |
-
|
130 |
-
die(self::SUCCESS_EXIT);
|
131 |
-
}
|
132 |
-
|
133 |
-
protected function getOpt($opts, $options)
|
134 |
-
{
|
135 |
-
$value = null;
|
136 |
-
|
137 |
-
if (is_string($opts)) {
|
138 |
-
$opts = array($opts);
|
139 |
-
}
|
140 |
-
|
141 |
-
foreach ($opts as $opt) {
|
142 |
-
if (array_key_exists($opt, $options)) {
|
143 |
-
$value = $options[$opt];
|
144 |
-
break;
|
145 |
-
}
|
146 |
-
}
|
147 |
-
|
148 |
-
return $value;
|
149 |
-
}
|
150 |
-
|
151 |
-
protected function setStat($statName, $statValue)
|
152 |
-
{
|
153 |
-
$this->stats[$statName] = $statValue;
|
154 |
-
}
|
155 |
-
|
156 |
-
protected function formatBytes($size, $precision = 2)
|
157 |
-
{
|
158 |
-
$base = log($size, 1024);
|
159 |
-
$suffixes = array('B', 'K', 'M', 'G', 'T');
|
160 |
-
return round(pow(1024, $base - floor($base)), $precision) .' '. $suffixes[floor($base)];
|
161 |
-
}
|
162 |
-
|
163 |
-
protected function formatMicroSeconds($microSecs, $precision = 2)
|
164 |
-
{
|
165 |
-
// ms
|
166 |
-
$time = round($microSecs * 1000, $precision);
|
167 |
-
|
168 |
-
if ($time >= 60 * 1000) {
|
169 |
-
$time = round($time / 60 * 1000, $precision) .' m'; // m
|
170 |
-
} elseif ($time >= 1000) {
|
171 |
-
$time = round($time / 1000, $precision) .' s'; // s
|
172 |
-
} else {
|
173 |
-
$time .= ' ms';
|
174 |
-
}
|
175 |
-
|
176 |
-
return $time;
|
177 |
-
}
|
178 |
-
|
179 |
-
protected function showStats()
|
180 |
-
{
|
181 |
-
$spaceSavings = round((1 - ($this->stats['compressed-size'] / $this->stats['original-size'])) * 100, 2);
|
182 |
-
$compressionRatio = round($this->stats['original-size'] / $this->stats['compressed-size'], 2);
|
183 |
-
$compressionTime = $this->formatMicroSeconds(
|
184 |
-
$this->stats['compression-time-end'] - $this->stats['compression-time-start']
|
185 |
-
);
|
186 |
-
$peakMemoryUsage = $this->formatBytes($this->stats['peak-memory-usage']);
|
187 |
-
|
188 |
-
print <<<EOT
|
189 |
-
|
190 |
-
------------------------------
|
191 |
-
CSSMIN STATS
|
192 |
-
------------------------------
|
193 |
-
Space savings: {$spaceSavings} %
|
194 |
-
Compression ratio: {$compressionRatio}:1
|
195 |
-
Compression time: $compressionTime
|
196 |
-
Peak memory usage: $peakMemoryUsage
|
197 |
-
|
198 |
-
|
199 |
-
EOT;
|
200 |
-
}
|
201 |
-
|
202 |
-
protected function showHelp()
|
203 |
-
{
|
204 |
-
print <<<'EOT'
|
205 |
-
Usage: cssmin [options] -i <file> [-o <file>]
|
206 |
-
|
207 |
-
-i|--input <file> File containing uncompressed CSS code.
|
208 |
-
-o|--output <file> File to use to save compressed CSS code.
|
209 |
-
|
210 |
-
Options:
|
211 |
-
|
212 |
-
-h|--help Prints this usage information.
|
213 |
-
--dry-run Performs a dry run displaying statistics.
|
214 |
-
--keep-sourcemap[-comment] Keeps the sourcemap special comment in the output.
|
215 |
-
--linebreak-position <pos> Splits long lines after a specific column in the output.
|
216 |
-
--memory-limit <limit> Sets the memory limit for this script.
|
217 |
-
--pcre-backtrack-limit <limit> Sets the PCRE backtrack limit for this script.
|
218 |
-
--pcre-recursion-limit <limit> Sets the PCRE recursion limit for this script.
|
219 |
-
--remove-important-comments Removes !important comments from output.
|
220 |
-
|
221 |
-
EOT;
|
222 |
-
}
|
223 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/tubalmartin/cssmin/src/Minifier.php
DELETED
@@ -1,895 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*!
|
4 |
-
* CssMin
|
5 |
-
* Author: Tubal Martin - http://tubalmartin.me/
|
6 |
-
* Repo: https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port
|
7 |
-
*
|
8 |
-
* This is a PHP port of the CSS minification tool distributed with YUICompressor,
|
9 |
-
* itself a port of the cssmin utility by Isaac Schlueter - http://foohack.com/
|
10 |
-
* Permission is hereby granted to use the PHP version under the same
|
11 |
-
* conditions as the YUICompressor.
|
12 |
-
*/
|
13 |
-
|
14 |
-
/*!
|
15 |
-
* YUI Compressor
|
16 |
-
* http://developer.yahoo.com/yui/compressor/
|
17 |
-
* Author: Julien Lecomte - http://www.julienlecomte.net/
|
18 |
-
* Copyright (c) 2013 Yahoo! Inc. All rights reserved.
|
19 |
-
* The copyrights embodied in the content of this file are licensed
|
20 |
-
* by Yahoo! Inc. under the BSD (revised) open source license.
|
21 |
-
*/
|
22 |
-
|
23 |
-
namespace tubalmartin\CssMin;
|
24 |
-
|
25 |
-
class Minifier
|
26 |
-
{
|
27 |
-
const QUERY_FRACTION = '_CSSMIN_QF_';
|
28 |
-
const COMMENT_TOKEN = '_CSSMIN_CMT_%d_';
|
29 |
-
const COMMENT_TOKEN_START = '_CSSMIN_CMT_';
|
30 |
-
const RULE_BODY_TOKEN = '_CSSMIN_RBT_%d_';
|
31 |
-
const PRESERVED_TOKEN = '_CSSMIN_PTK_%d_';
|
32 |
-
|
33 |
-
// Token lists
|
34 |
-
private $comments = array();
|
35 |
-
private $ruleBodies = array();
|
36 |
-
private $preservedTokens = array();
|
37 |
-
|
38 |
-
// Output options
|
39 |
-
private $keepImportantComments = true;
|
40 |
-
private $keepSourceMapComment = false;
|
41 |
-
private $linebreakPosition = 0;
|
42 |
-
|
43 |
-
// PHP ini limits
|
44 |
-
private $raisePhpLimits;
|
45 |
-
private $memoryLimit;
|
46 |
-
private $maxExecutionTime = 60; // 1 min
|
47 |
-
private $pcreBacktrackLimit;
|
48 |
-
private $pcreRecursionLimit;
|
49 |
-
|
50 |
-
// Color maps
|
51 |
-
private $hexToNamedColorsMap;
|
52 |
-
private $namedToHexColorsMap;
|
53 |
-
|
54 |
-
// Regexes
|
55 |
-
private $numRegex;
|
56 |
-
private $charsetRegex = '/@charset [^;]+;/Si';
|
57 |
-
private $importRegex = '/@import [^;]+;/Si';
|
58 |
-
private $namespaceRegex = '/@namespace [^;]+;/Si';
|
59 |
-
private $namedToHexColorsRegex;
|
60 |
-
private $shortenOneZeroesRegex;
|
61 |
-
private $shortenTwoZeroesRegex;
|
62 |
-
private $shortenThreeZeroesRegex;
|
63 |
-
private $shortenFourZeroesRegex;
|
64 |
-
private $unitsGroupRegex = '(?:ch|cm|em|ex|gd|in|mm|px|pt|pc|q|rem|vh|vmax|vmin|vw|%)';
|
65 |
-
|
66 |
-
/**
|
67 |
-
* @param bool|int $raisePhpLimits If true, PHP settings will be raised if needed
|
68 |
-
*/
|
69 |
-
public function __construct($raisePhpLimits = true)
|
70 |
-
{
|
71 |
-
$this->raisePhpLimits = (bool) $raisePhpLimits;
|
72 |
-
$this->memoryLimit = 128 * 1048576; // 128MB in bytes
|
73 |
-
$this->pcreBacktrackLimit = 1000 * 1000;
|
74 |
-
$this->pcreRecursionLimit = 500 * 1000;
|
75 |
-
$this->hexToNamedColorsMap = Colors::getHexToNamedMap();
|
76 |
-
$this->namedToHexColorsMap = Colors::getNamedToHexMap();
|
77 |
-
$this->namedToHexColorsRegex = sprintf(
|
78 |
-
'/([:,( ])(%s)( |,|\)|;|$)/Si',
|
79 |
-
implode('|', array_keys($this->namedToHexColorsMap))
|
80 |
-
);
|
81 |
-
$this->numRegex = sprintf('-?\d*\.?\d+%s?', $this->unitsGroupRegex);
|
82 |
-
$this->setShortenZeroValuesRegexes();
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Parses & minifies the given input CSS string
|
87 |
-
* @param string $css
|
88 |
-
* @return string
|
89 |
-
*/
|
90 |
-
public function run($css = '')
|
91 |
-
{
|
92 |
-
if (empty($css) || !is_string($css)) {
|
93 |
-
return '';
|
94 |
-
}
|
95 |
-
|
96 |
-
$this->resetRunProperties();
|
97 |
-
|
98 |
-
if ($this->raisePhpLimits) {
|
99 |
-
$this->doRaisePhpLimits();
|
100 |
-
}
|
101 |
-
|
102 |
-
return $this->minify($css);
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Sets whether to keep or remove sourcemap special comment.
|
107 |
-
* Sourcemap comments are removed by default.
|
108 |
-
* @param bool $keepSourceMapComment
|
109 |
-
*/
|
110 |
-
public function keepSourceMapComment($keepSourceMapComment = true)
|
111 |
-
{
|
112 |
-
$this->keepSourceMapComment = (bool) $keepSourceMapComment;
|
113 |
-
}
|
114 |
-
|
115 |
-
/**
|
116 |
-
* Sets whether to keep or remove important comments.
|
117 |
-
* Important comments outside of a declaration block are kept by default.
|
118 |
-
* @param bool $removeImportantComments
|
119 |
-
*/
|
120 |
-
public function removeImportantComments($removeImportantComments = true)
|
121 |
-
{
|
122 |
-
$this->keepImportantComments = !(bool) $removeImportantComments;
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* Sets the approximate column after which long lines will be splitted in the output
|
127 |
-
* with a linebreak.
|
128 |
-
* @param int $position
|
129 |
-
*/
|
130 |
-
public function setLineBreakPosition($position)
|
131 |
-
{
|
132 |
-
$this->linebreakPosition = (int) $position;
|
133 |
-
}
|
134 |
-
|
135 |
-
/**
|
136 |
-
* Sets the memory limit for this script
|
137 |
-
* @param int|string $limit
|
138 |
-
*/
|
139 |
-
public function setMemoryLimit($limit)
|
140 |
-
{
|
141 |
-
$this->memoryLimit = Utils::normalizeInt($limit);
|
142 |
-
}
|
143 |
-
|
144 |
-
/**
|
145 |
-
* Sets the maximum execution time for this script
|
146 |
-
* @param int|string $seconds
|
147 |
-
*/
|
148 |
-
public function setMaxExecutionTime($seconds)
|
149 |
-
{
|
150 |
-
$this->maxExecutionTime = (int) $seconds;
|
151 |
-
}
|
152 |
-
|
153 |
-
/**
|
154 |
-
* Sets the PCRE backtrack limit for this script
|
155 |
-
* @param int $limit
|
156 |
-
*/
|
157 |
-
public function setPcreBacktrackLimit($limit)
|
158 |
-
{
|
159 |
-
$this->pcreBacktrackLimit = (int) $limit;
|
160 |
-
}
|
161 |
-
|
162 |
-
/**
|
163 |
-
* Sets the PCRE recursion limit for this script
|
164 |
-
* @param int $limit
|
165 |
-
*/
|
166 |
-
public function setPcreRecursionLimit($limit)
|
167 |
-
{
|
168 |
-
$this->pcreRecursionLimit = (int) $limit;
|
169 |
-
}
|
170 |
-
|
171 |
-
/**
|
172 |
-
* Builds regular expressions needed for shortening zero values
|
173 |
-
*/
|
174 |
-
private function setShortenZeroValuesRegexes()
|
175 |
-
{
|
176 |
-
$zeroRegex = '0'. $this->unitsGroupRegex;
|
177 |
-
$numOrPosRegex = '('. $this->numRegex .'|top|left|bottom|right|center) ';
|
178 |
-
$oneZeroSafeProperties = array(
|
179 |
-
'(?:line-)?height',
|
180 |
-
'(?:(?:min|max)-)?width',
|
181 |
-
'top',
|
182 |
-
'left',
|
183 |
-
'background-position',
|
184 |
-
'bottom',
|
185 |
-
'right',
|
186 |
-
'border(?:-(?:top|left|bottom|right))?(?:-width)?',
|
187 |
-
'border-(?:(?:top|bottom)-(?:left|right)-)?radius',
|
188 |
-
'column-(?:gap|width)',
|
189 |
-
'margin(?:-(?:top|left|bottom|right))?',
|
190 |
-
'outline-width',
|
191 |
-
'padding(?:-(?:top|left|bottom|right))?'
|
192 |
-
);
|
193 |
-
|
194 |
-
// First zero regex
|
195 |
-
$regex = '/(^|;)('. implode('|', $oneZeroSafeProperties) .'):%s/Si';
|
196 |
-
$this->shortenOneZeroesRegex = sprintf($regex, $zeroRegex);
|
197 |
-
|
198 |
-
// Multiple zeroes regexes
|
199 |
-
$regex = '/(^|;)(margin|padding|border-(?:width|radius)|background-position):%s/Si';
|
200 |
-
$this->shortenTwoZeroesRegex = sprintf($regex, $numOrPosRegex . $zeroRegex);
|
201 |
-
$this->shortenThreeZeroesRegex = sprintf($regex, $numOrPosRegex . $numOrPosRegex . $zeroRegex);
|
202 |
-
$this->shortenFourZeroesRegex = sprintf($regex, $numOrPosRegex . $numOrPosRegex . $numOrPosRegex . $zeroRegex);
|
203 |
-
}
|
204 |
-
|
205 |
-
/**
|
206 |
-
* Resets properties whose value may change between runs
|
207 |
-
*/
|
208 |
-
private function resetRunProperties()
|
209 |
-
{
|
210 |
-
$this->comments = array();
|
211 |
-
$this->ruleBodies = array();
|
212 |
-
$this->preservedTokens = array();
|
213 |
-
}
|
214 |
-
|
215 |
-
/**
|
216 |
-
* Tries to configure PHP to use at least the suggested minimum settings
|
217 |
-
* @return void
|
218 |
-
*/
|
219 |
-
private function doRaisePhpLimits()
|
220 |
-
{
|
221 |
-
$phpLimits = array(
|
222 |
-
'memory_limit' => $this->memoryLimit,
|
223 |
-
'max_execution_time' => $this->maxExecutionTime,
|
224 |
-
'pcre.backtrack_limit' => $this->pcreBacktrackLimit,
|
225 |
-
'pcre.recursion_limit' => $this->pcreRecursionLimit
|
226 |
-
);
|
227 |
-
|
228 |
-
// If current settings are higher respect them.
|
229 |
-
foreach ($phpLimits as $name => $suggested) {
|
230 |
-
$current = Utils::normalizeInt(ini_get($name));
|
231 |
-
|
232 |
-
if ($current >= $suggested) {
|
233 |
-
continue;
|
234 |
-
}
|
235 |
-
|
236 |
-
// memoryLimit exception: allow -1 for "no memory limit".
|
237 |
-
if ($name === 'memory_limit' && $current === -1) {
|
238 |
-
continue;
|
239 |
-
}
|
240 |
-
|
241 |
-
// maxExecutionTime exception: allow 0 for "no memory limit".
|
242 |
-
if ($name === 'max_execution_time' && $current === 0) {
|
243 |
-
continue;
|
244 |
-
}
|
245 |
-
|
246 |
-
ini_set($name, $suggested);
|
247 |
-
}
|
248 |
-
}
|
249 |
-
|
250 |
-
/**
|
251 |
-
* Registers a preserved token
|
252 |
-
* @param string $token
|
253 |
-
* @return string The token ID string
|
254 |
-
*/
|
255 |
-
private function registerPreservedToken($token)
|
256 |
-
{
|
257 |
-
$tokenId = sprintf(self::PRESERVED_TOKEN, count($this->preservedTokens));
|
258 |
-
$this->preservedTokens[$tokenId] = $token;
|
259 |
-
return $tokenId;
|
260 |
-
}
|
261 |
-
|
262 |
-
/**
|
263 |
-
* Registers a candidate comment token
|
264 |
-
* @param string $comment
|
265 |
-
* @return string The comment token ID string
|
266 |
-
*/
|
267 |
-
private function registerCommentToken($comment)
|
268 |
-
{
|
269 |
-
$tokenId = sprintf(self::COMMENT_TOKEN, count($this->comments));
|
270 |
-
$this->comments[$tokenId] = $comment;
|
271 |
-
return $tokenId;
|
272 |
-
}
|
273 |
-
|
274 |
-
/**
|
275 |
-
* Registers a rule body token
|
276 |
-
* @param string $body the minified rule body
|
277 |
-
* @return string The rule body token ID string
|
278 |
-
*/
|
279 |
-
private function registerRuleBodyToken($body)
|
280 |
-
{
|
281 |
-
if (empty($body)) {
|
282 |
-
return '';
|
283 |
-
}
|
284 |
-
|
285 |
-
$tokenId = sprintf(self::RULE_BODY_TOKEN, count($this->ruleBodies));
|
286 |
-
$this->ruleBodies[$tokenId] = $body;
|
287 |
-
return $tokenId;
|
288 |
-
}
|
289 |
-
|
290 |
-
/**
|
291 |
-
* Parses & minifies the given input CSS string
|
292 |
-
* @param string $css
|
293 |
-
* @return string
|
294 |
-
*/
|
295 |
-
private function minify($css)
|
296 |
-
{
|
297 |
-
// Process data urls
|
298 |
-
$css = $this->processDataUrls($css);
|
299 |
-
|
300 |
-
// Process comments
|
301 |
-
$css = preg_replace_callback(
|
302 |
-
'/(?<!\\\\)\/\*(.*?)\*(?<!\\\\)\//Ss',
|
303 |
-
array($this, 'processCommentsCallback'),
|
304 |
-
$css
|
305 |
-
);
|
306 |
-
|
307 |
-
// IE7: Process Microsoft matrix filters (whitespaces between Matrix parameters). Can contain strings inside.
|
308 |
-
$css = preg_replace_callback(
|
309 |
-
'/filter:\s*progid:DXImageTransform\.Microsoft\.Matrix\(([^)]+)\)/Ss',
|
310 |
-
array($this, 'processOldIeSpecificMatrixDefinitionCallback'),
|
311 |
-
$css
|
312 |
-
);
|
313 |
-
|
314 |
-
// Process quoted unquotable attribute selectors to unquote them. Covers most common cases.
|
315 |
-
// Likelyhood of a quoted attribute selector being a substring in a string: Very very low.
|
316 |
-
$css = preg_replace(
|
317 |
-
'/\[\s*([a-z][a-z-]+)\s*([\*\|\^\$~]?=)\s*[\'"](-?[a-z_][a-z0-9-_]+)[\'"]\s*\]/Ssi',
|
318 |
-
'[$1$2$3]',
|
319 |
-
$css
|
320 |
-
);
|
321 |
-
|
322 |
-
// Process strings so their content doesn't get accidentally minified
|
323 |
-
$css = preg_replace_callback(
|
324 |
-
'/(?:"(?:[^\\\\"]|\\\\.|\\\\)*")|'."(?:'(?:[^\\\\']|\\\\.|\\\\)*')/S",
|
325 |
-
array($this, 'processStringsCallback'),
|
326 |
-
$css
|
327 |
-
);
|
328 |
-
|
329 |
-
// Normalize all whitespace strings to single spaces. Easier to work with that way.
|
330 |
-
$css = preg_replace('/\s+/S', ' ', $css);
|
331 |
-
|
332 |
-
// Process import At-rules with unquoted URLs so URI reserved characters such as a semicolon may be used safely.
|
333 |
-
$css = preg_replace_callback(
|
334 |
-
'/@import url\(([^\'"]+?)\)( |;)/Si',
|
335 |
-
array($this, 'processImportUnquotedUrlAtRulesCallback'),
|
336 |
-
$css
|
337 |
-
);
|
338 |
-
|
339 |
-
// Process comments
|
340 |
-
$css = $this->processComments($css);
|
341 |
-
|
342 |
-
// Process rule bodies
|
343 |
-
$css = $this->processRuleBodies($css);
|
344 |
-
|
345 |
-
// Process at-rules and selectors
|
346 |
-
$css = $this->processAtRulesAndSelectors($css);
|
347 |
-
|
348 |
-
// Restore preserved rule bodies before splitting
|
349 |
-
$css = strtr($css, $this->ruleBodies);
|
350 |
-
|
351 |
-
// Split long lines in output if required
|
352 |
-
$css = $this->processLongLineSplitting($css);
|
353 |
-
|
354 |
-
// Restore preserved comments and strings
|
355 |
-
$css = strtr($css, $this->preservedTokens);
|
356 |
-
|
357 |
-
return trim($css);
|
358 |
-
}
|
359 |
-
|
360 |
-
/**
|
361 |
-
* Searches & replaces all data urls with tokens before we start compressing,
|
362 |
-
* to avoid performance issues running some of the subsequent regexes against large string chunks.
|
363 |
-
* @param string $css
|
364 |
-
* @return string
|
365 |
-
*/
|
366 |
-
private function processDataUrls($css)
|
367 |
-
{
|
368 |
-
$ret = '';
|
369 |
-
$searchOffset = $substrOffset = 0;
|
370 |
-
|
371 |
-
// Since we need to account for non-base64 data urls, we need to handle
|
372 |
-
// ' and ) being part of the data string.
|
373 |
-
while (preg_match('/url\(\s*(["\']?)data:/Si', $css, $m, PREG_OFFSET_CAPTURE, $searchOffset)) {
|
374 |
-
$matchStartIndex = $m[0][1];
|
375 |
-
$dataStartIndex = $matchStartIndex + 4; // url( length
|
376 |
-
$searchOffset = $matchStartIndex + strlen($m[0][0]);
|
377 |
-
$terminator = $m[1][0]; // ', " or empty (not quoted)
|
378 |
-
$terminatorRegex = '/(?<!\\\\)'. (strlen($terminator) === 0 ? '' : $terminator.'\s*') .'(\))/S';
|
379 |
-
|
380 |
-
$ret .= substr($css, $substrOffset, $matchStartIndex - $substrOffset);
|
381 |
-
|
382 |
-
// Terminator found
|
383 |
-
if (preg_match($terminatorRegex, $css, $matches, PREG_OFFSET_CAPTURE, $searchOffset)) {
|
384 |
-
$matchEndIndex = $matches[1][1];
|
385 |
-
$searchOffset = $matchEndIndex + 1;
|
386 |
-
$token = substr($css, $dataStartIndex, $matchEndIndex - $dataStartIndex);
|
387 |
-
|
388 |
-
// Remove all spaces only for base64 encoded URLs.
|
389 |
-
if (stripos($token, 'base64,') !== false) {
|
390 |
-
$token = preg_replace('/\s+/S', '', $token);
|
391 |
-
}
|
392 |
-
|
393 |
-
$ret .= 'url('. $this->registerPreservedToken(trim($token)) .')';
|
394 |
-
// No end terminator found, re-add the whole match. Should we throw/warn here?
|
395 |
-
} else {
|
396 |
-
$ret .= substr($css, $matchStartIndex, $searchOffset - $matchStartIndex);
|
397 |
-
}
|
398 |
-
|
399 |
-
$substrOffset = $searchOffset;
|
400 |
-
}
|
401 |
-
|
402 |
-
$ret .= substr($css, $substrOffset);
|
403 |
-
|
404 |
-
return $ret;
|
405 |
-
}
|
406 |
-
|
407 |
-
/**
|
408 |
-
* Registers all comments found as candidates to be preserved.
|
409 |
-
* @param array $matches
|
410 |
-
* @return string
|
411 |
-
*/
|
412 |
-
private function processCommentsCallback($matches)
|
413 |
-
{
|
414 |
-
return '/*'. $this->registerCommentToken($matches[1]) .'*/';
|
415 |
-
}
|
416 |
-
|
417 |
-
/**
|
418 |
-
* Preserves old IE Matrix string definition
|
419 |
-
* @param array $matches
|
420 |
-
* @return string
|
421 |
-
*/
|
422 |
-
private function processOldIeSpecificMatrixDefinitionCallback($matches)
|
423 |
-
{
|
424 |
-
return 'filter:progid:DXImageTransform.Microsoft.Matrix('. $this->registerPreservedToken($matches[1]) .')';
|
425 |
-
}
|
426 |
-
|
427 |
-
/**
|
428 |
-
* Preserves strings found
|
429 |
-
* @param array $matches
|
430 |
-
* @return string
|
431 |
-
*/
|
432 |
-
private function processStringsCallback($matches)
|
433 |
-
{
|
434 |
-
$match = $matches[0];
|
435 |
-
$quote = substr($match, 0, 1);
|
436 |
-
$match = substr($match, 1, -1);
|
437 |
-
|
438 |
-
// maybe the string contains a comment-like substring?
|
439 |
-
// one, maybe more? put'em back then
|
440 |
-
if (strpos($match, self::COMMENT_TOKEN_START) !== false) {
|
441 |
-
$match = strtr($match, $this->comments);
|
442 |
-
}
|
443 |
-
|
444 |
-
// minify alpha opacity in filter strings
|
445 |
-
$match = str_ireplace('progid:DXImageTransform.Microsoft.Alpha(Opacity=', 'alpha(opacity=', $match);
|
446 |
-
|
447 |
-
return $quote . $this->registerPreservedToken($match) . $quote;
|
448 |
-
}
|
449 |
-
|
450 |
-
/**
|
451 |
-
* Searches & replaces all import at-rule unquoted urls with tokens so URI reserved characters such as a semicolon
|
452 |
-
* may be used safely in a URL.
|
453 |
-
* @param array $matches
|
454 |
-
* @return string
|
455 |
-
*/
|
456 |
-
private function processImportUnquotedUrlAtRulesCallback($matches)
|
457 |
-
{
|
458 |
-
return '@import url('. $this->registerPreservedToken($matches[1]) .')'. $matches[2];
|
459 |
-
}
|
460 |
-
|
461 |
-
/**
|
462 |
-
* Preserves or removes comments found.
|
463 |
-
* @param string $css
|
464 |
-
* @return string
|
465 |
-
*/
|
466 |
-
private function processComments($css)
|
467 |
-
{
|
468 |
-
foreach ($this->comments as $commentId => $comment) {
|
469 |
-
$commentIdString = '/*'. $commentId .'*/';
|
470 |
-
|
471 |
-
// ! in the first position of the comment means preserve
|
472 |
-
// so push to the preserved tokens keeping the !
|
473 |
-
if ($this->keepImportantComments && strpos($comment, '!') === 0) {
|
474 |
-
$preservedTokenId = $this->registerPreservedToken($comment);
|
475 |
-
// Put new lines before and after /*! important comments
|
476 |
-
$css = str_replace($commentIdString, "\n/*$preservedTokenId*/\n", $css);
|
477 |
-
continue;
|
478 |
-
}
|
479 |
-
|
480 |
-
// # sourceMappingURL= in the first position of the comment means sourcemap
|
481 |
-
// so push to the preserved tokens if {$this->keepSourceMapComment} is truthy.
|
482 |
-
if ($this->keepSourceMapComment && strpos($comment, '# sourceMappingURL=') === 0) {
|
483 |
-
$preservedTokenId = $this->registerPreservedToken($comment);
|
484 |
-
// Add new line before the sourcemap comment
|
485 |
-
$css = str_replace($commentIdString, "\n/*$preservedTokenId*/", $css);
|
486 |
-
continue;
|
487 |
-
}
|
488 |
-
|
489 |
-
// Keep empty comments after child selectors (IE7 hack)
|
490 |
-
// e.g. html >/**/ body
|
491 |
-
if (strlen($comment) === 0 && strpos($css, '>/*'.$commentId) !== false) {
|
492 |
-
$css = str_replace($commentId, $this->registerPreservedToken(''), $css);
|
493 |
-
continue;
|
494 |
-
}
|
495 |
-
|
496 |
-
// in all other cases kill the comment
|
497 |
-
$css = str_replace($commentIdString, '', $css);
|
498 |
-
}
|
499 |
-
|
500 |
-
// Normalize whitespace again
|
501 |
-
$css = preg_replace('/ +/S', ' ', $css);
|
502 |
-
|
503 |
-
return $css;
|
504 |
-
}
|
505 |
-
|
506 |
-
/**
|
507 |
-
* Finds, minifies & preserves all rule bodies.
|
508 |
-
* @param string $css the whole stylesheet.
|
509 |
-
* @return string
|
510 |
-
*/
|
511 |
-
private function processRuleBodies($css)
|
512 |
-
{
|
513 |
-
$ret = '';
|
514 |
-
$searchOffset = $substrOffset = 0;
|
515 |
-
|
516 |
-
while (($blockStartPos = strpos($css, '{', $searchOffset)) !== false) {
|
517 |
-
$blockEndPos = strpos($css, '}', $blockStartPos);
|
518 |
-
$nextBlockStartPos = strpos($css, '{', $blockStartPos + 1);
|
519 |
-
$ret .= substr($css, $substrOffset, $blockStartPos - $substrOffset);
|
520 |
-
|
521 |
-
if ($nextBlockStartPos !== false && $nextBlockStartPos < $blockEndPos) {
|
522 |
-
$ret .= substr($css, $blockStartPos, $nextBlockStartPos - $blockStartPos);
|
523 |
-
$searchOffset = $nextBlockStartPos;
|
524 |
-
} else {
|
525 |
-
$ruleBody = substr($css, $blockStartPos + 1, $blockEndPos - $blockStartPos - 1);
|
526 |
-
$ruleBodyToken = $this->registerRuleBodyToken($this->processRuleBody($ruleBody));
|
527 |
-
$ret .= '{'. $ruleBodyToken .'}';
|
528 |
-
$searchOffset = $blockEndPos + 1;
|
529 |
-
}
|
530 |
-
|
531 |
-
$substrOffset = $searchOffset;
|
532 |
-
}
|
533 |
-
|
534 |
-
$ret .= substr($css, $substrOffset);
|
535 |
-
|
536 |
-
return $ret;
|
537 |
-
}
|
538 |
-
|
539 |
-
/**
|
540 |
-
* Compresses non-group rule bodies.
|
541 |
-
* @param string $body The rule body without curly braces
|
542 |
-
* @return string
|
543 |
-
*/
|
544 |
-
private function processRuleBody($body)
|
545 |
-
{
|
546 |
-
$body = trim($body);
|
547 |
-
|
548 |
-
// Remove spaces before the things that should not have spaces before them.
|
549 |
-
$body = preg_replace('/ ([:=,)*\/;\n])/S', '$1', $body);
|
550 |
-
|
551 |
-
// Remove the spaces after the things that should not have spaces after them.
|
552 |
-
$body = preg_replace('/([:=,(*\/!;\n]) /S', '$1', $body);
|
553 |
-
|
554 |
-
// Replace multiple semi-colons in a row by a single one
|
555 |
-
$body = preg_replace('/;;+/S', ';', $body);
|
556 |
-
|
557 |
-
// Remove semicolon before closing brace except when:
|
558 |
-
// - The last property is prefixed with a `*` (lte IE7 hack) to avoid issues on Symbian S60 3.x browsers.
|
559 |
-
if (!preg_match('/\*[a-z0-9-]+:[^;]+;$/Si', $body)) {
|
560 |
-
$body = rtrim($body, ';');
|
561 |
-
}
|
562 |
-
|
563 |
-
// Remove important comments inside a rule body (because they make no sense here).
|
564 |
-
if (strpos($body, '/*') !== false) {
|
565 |
-
$body = preg_replace('/\n?\/\*[A-Z0-9_]+\*\/\n?/S', '', $body);
|
566 |
-
}
|
567 |
-
|
568 |
-
// Empty rule body? Exit :)
|
569 |
-
if (empty($body)) {
|
570 |
-
return '';
|
571 |
-
}
|
572 |
-
|
573 |
-
// Shorten font-weight values
|
574 |
-
$body = preg_replace(
|
575 |
-
array('/(font-weight:)bold\b/Si', '/(font-weight:)normal\b/Si'),
|
576 |
-
array('${1}700', '${1}400'),
|
577 |
-
$body
|
578 |
-
);
|
579 |
-
|
580 |
-
// Shorten background property
|
581 |
-
$body = preg_replace('/(background:)(?:none|transparent)( !|;|$)/Si', '${1}0 0$2', $body);
|
582 |
-
|
583 |
-
// Shorten opacity IE filter
|
584 |
-
$body = str_ireplace('progid:DXImageTransform.Microsoft.Alpha(Opacity=', 'alpha(opacity=', $body);
|
585 |
-
|
586 |
-
// Shorten colors from rgb(51,102,153) to #336699, rgb(100%,0%,0%) to #ff0000 (sRGB color space)
|
587 |
-
// Shorten colors from hsl(0, 100%, 50%) to #ff0000 (sRGB color space)
|
588 |
-
// This makes it more likely that it'll get further compressed in the next step.
|
589 |
-
$body = preg_replace_callback(
|
590 |
-
'/(rgb|hsl)\(([0-9,.% -]+)\)(.|$)/Si',
|
591 |
-
array($this, 'shortenHslAndRgbToHexCallback'),
|
592 |
-
$body
|
593 |
-
);
|
594 |
-
|
595 |
-
// Shorten colors from #AABBCC to #ABC or shorter color name:
|
596 |
-
// - Look for hex colors which don't have a "=" in front of them (to avoid MSIE filters)
|
597 |
-
$body = preg_replace_callback(
|
598 |
-
'/(?<!=)#([0-9a-f]{3,6})( |,|\)|;|$)/Si',
|
599 |
-
array($this, 'shortenHexColorsCallback'),
|
600 |
-
$body
|
601 |
-
);
|
602 |
-
|
603 |
-
// Shorten long named colors with a shorter HEX counterpart: white -> #fff.
|
604 |
-
// Run at least 2 times to cover most cases
|
605 |
-
$body = preg_replace_callback(
|
606 |
-
array($this->namedToHexColorsRegex, $this->namedToHexColorsRegex),
|
607 |
-
array($this, 'shortenNamedColorsCallback'),
|
608 |
-
$body
|
609 |
-
);
|
610 |
-
|
611 |
-
// Replace positive sign from numbers before the leading space is removed.
|
612 |
-
// +1.2em to 1.2em, +.8px to .8px, +2% to 2%
|
613 |
-
$body = preg_replace('/([ :,(])\+(\.?\d+)/S', '$1$2', $body);
|
614 |
-
|
615 |
-
// shorten ms to s
|
616 |
-
$body = preg_replace_callback('/([ :,(])(-?)(\d{3,})ms/Si', function ($matches) {
|
617 |
-
return $matches[1] . $matches[2] . ((int) $matches[3] / 1000) .'s';
|
618 |
-
}, $body);
|
619 |
-
|
620 |
-
// Remove leading zeros from integer and float numbers.
|
621 |
-
// 000.6 to .6, -0.8 to -.8, 0050 to 50, -01.05 to -1.05
|
622 |
-
$body = preg_replace('/([ :,(])(-?)0+([1-9]?\.?\d+)/S', '$1$2$3', $body);
|
623 |
-
|
624 |
-
// Remove trailing zeros from float numbers.
|
625 |
-
// -6.0100em to -6.01em, .0100 to .01, 1.200px to 1.2px
|
626 |
-
$body = preg_replace('/([ :,(])(-?\d?\.\d+?)0+([^\d])/S', '$1$2$3', $body);
|
627 |
-
|
628 |
-
// Remove trailing .0 -> -9.0 to -9
|
629 |
-
$body = preg_replace('/([ :,(])(-?\d+)\.0([^\d])/S', '$1$2$3', $body);
|
630 |
-
|
631 |
-
// Replace 0 length numbers with 0
|
632 |
-
$body = preg_replace('/([ :,(])-?\.?0+([^\d])/S', '${1}0$2', $body);
|
633 |
-
|
634 |
-
// Shorten zero values for safe properties only
|
635 |
-
$body = preg_replace(
|
636 |
-
array(
|
637 |
-
$this->shortenOneZeroesRegex,
|
638 |
-
$this->shortenTwoZeroesRegex,
|
639 |
-
$this->shortenThreeZeroesRegex,
|
640 |
-
$this->shortenFourZeroesRegex
|
641 |
-
),
|
642 |
-
array(
|
643 |
-
'$1$2:0',
|
644 |
-
'$1$2:$3 0',
|
645 |
-
'$1$2:$3 $4 0',
|
646 |
-
'$1$2:$3 $4 $5 0'
|
647 |
-
),
|
648 |
-
$body
|
649 |
-
);
|
650 |
-
|
651 |
-
// Replace 0 0 0; or 0 0 0 0; with 0 0 for background-position property.
|
652 |
-
$body = preg_replace('/(background-position):0(?: 0){2,3}( !|;|$)/Si', '$1:0 0$2', $body);
|
653 |
-
|
654 |
-
// Shorten suitable shorthand properties with repeated values
|
655 |
-
$body = preg_replace(
|
656 |
-
array(
|
657 |
-
'/(margin|padding|border-(?:width|radius)):('.$this->numRegex.')(?: \2)+( !|;|$)/Si',
|
658 |
-
'/(border-(?:style|color)):([#a-z0-9]+)(?: \2)+( !|;|$)/Si'
|
659 |
-
),
|
660 |
-
'$1:$2$3',
|
661 |
-
$body
|
662 |
-
);
|
663 |
-
$body = preg_replace(
|
664 |
-
array(
|
665 |
-
'/(margin|padding|border-(?:width|radius)):'.
|
666 |
-
'('.$this->numRegex.') ('.$this->numRegex.') \2 \3( !|;|$)/Si',
|
667 |
-
'/(border-(?:style|color)):([#a-z0-9]+) ([#a-z0-9]+) \2 \3( !|;|$)/Si'
|
668 |
-
),
|
669 |
-
'$1:$2 $3$4',
|
670 |
-
$body
|
671 |
-
);
|
672 |
-
$body = preg_replace(
|
673 |
-
array(
|
674 |
-
'/(margin|padding|border-(?:width|radius)):'.
|
675 |
-
'('.$this->numRegex.') ('.$this->numRegex.') ('.$this->numRegex.') \3( !|;|$)/Si',
|
676 |
-
'/(border-(?:style|color)):([#a-z0-9]+) ([#a-z0-9]+) ([#a-z0-9]+) \3( !|;|$)/Si'
|
677 |
-
),
|
678 |
-
'$1:$2 $3 $4$5',
|
679 |
-
$body
|
680 |
-
);
|
681 |
-
|
682 |
-
// Lowercase some common functions that can be values
|
683 |
-
$body = preg_replace_callback(
|
684 |
-
'/(?:attr|blur|brightness|circle|contrast|cubic-bezier|drop-shadow|ellipse|from|grayscale|'.
|
685 |
-
'hsla?|hue-rotate|inset|invert|local|minmax|opacity|perspective|polygon|rgba?|rect|repeat|saturate|sepia|'.
|
686 |
-
'steps|to|url|var|-webkit-gradient|'.
|
687 |
-
'(?:-(?:atsc|khtml|moz|ms|o|wap|webkit)-)?(?:calc|(?:repeating-)?(?:linear|radial)-gradient))\(/Si',
|
688 |
-
array($this, 'strtolowerCallback'),
|
689 |
-
$body
|
690 |
-
);
|
691 |
-
|
692 |
-
// Lowercase all uppercase properties
|
693 |
-
$body = preg_replace_callback('/(?:^|;)[A-Z-]+:/S', array($this, 'strtolowerCallback'), $body);
|
694 |
-
|
695 |
-
return $body;
|
696 |
-
}
|
697 |
-
|
698 |
-
/**
|
699 |
-
* Compresses At-rules and selectors.
|
700 |
-
* @param string $css the whole stylesheet with rule bodies tokenized.
|
701 |
-
* @return string
|
702 |
-
*/
|
703 |
-
private function processAtRulesAndSelectors($css)
|
704 |
-
{
|
705 |
-
$charset = '';
|
706 |
-
$imports = '';
|
707 |
-
$namespaces = '';
|
708 |
-
|
709 |
-
// Remove spaces before the things that should not have spaces before them.
|
710 |
-
$css = preg_replace('/ ([@{};>+)\]~=,\/\n])/S', '$1', $css);
|
711 |
-
|
712 |
-
// Remove the spaces after the things that should not have spaces after them.
|
713 |
-
$css = preg_replace('/([{}:;>+(\[~=,\/\n]) /S', '$1', $css);
|
714 |
-
|
715 |
-
// Shorten shortable double colon (CSS3) pseudo-elements to single colon (CSS2)
|
716 |
-
$css = preg_replace('/::(before|after|first-(?:line|letter))(\{|,)/Si', ':$1$2', $css);
|
717 |
-
|
718 |
-
// Retain space for special IE6 cases
|
719 |
-
$css = preg_replace_callback('/:first-(line|letter)(\{|,)/Si', function ($matches) {
|
720 |
-
return ':first-'. strtolower($matches[1]) .' '. $matches[2];
|
721 |
-
}, $css);
|
722 |
-
|
723 |
-
// Find a fraction that may used in some @media queries such as: (min-aspect-ratio: 1/1)
|
724 |
-
// Add token to add the "/" back in later
|
725 |
-
$css = preg_replace('/\(([a-z-]+):([0-9]+)\/([0-9]+)\)/Si', '($1:$2'. self::QUERY_FRACTION .'$3)', $css);
|
726 |
-
|
727 |
-
// Remove empty rule blocks up to 2 levels deep.
|
728 |
-
$css = preg_replace(array_fill(0, 2, '/(\{)[^{};\/\n]+\{\}/S'), '$1', $css);
|
729 |
-
$css = preg_replace('/[^{};\/\n]+\{\}/S', '', $css);
|
730 |
-
|
731 |
-
// Two important comments next to each other? Remove extra newline.
|
732 |
-
if ($this->keepImportantComments) {
|
733 |
-
$css = str_replace("\n\n", "\n", $css);
|
734 |
-
}
|
735 |
-
|
736 |
-
// Restore fraction
|
737 |
-
$css = str_replace(self::QUERY_FRACTION, '/', $css);
|
738 |
-
|
739 |
-
// Lowercase some popular @directives
|
740 |
-
$css = preg_replace_callback(
|
741 |
-
'/(?<!\\\\)@(?:charset|document|font-face|import|(?:-(?:atsc|khtml|moz|ms|o|wap|webkit)-)?keyframes|media|'.
|
742 |
-
'namespace|page|supports|viewport)/Si',
|
743 |
-
array($this, 'strtolowerCallback'),
|
744 |
-
$css
|
745 |
-
);
|
746 |
-
|
747 |
-
// Lowercase some popular media types
|
748 |
-
$css = preg_replace_callback(
|
749 |
-
'/[ ,](?:all|aural|braille|handheld|print|projection|screen|tty|tv|embossed|speech)[ ,;{]/Si',
|
750 |
-
array($this, 'strtolowerCallback'),
|
751 |
-
$css
|
752 |
-
);
|
753 |
-
|
754 |
-
// Lowercase some common pseudo-classes & pseudo-elements
|
755 |
-
$css = preg_replace_callback(
|
756 |
-
'/(?<!\\\\):(?:active|after|before|checked|default|disabled|empty|enabled|first-(?:child|of-type)|'.
|
757 |
-
'focus(?:-within)?|hover|indeterminate|in-range|invalid|lang\(|last-(?:child|of-type)|left|link|not\(|'.
|
758 |
-
'nth-(?:child|of-type)\(|nth-last-(?:child|of-type)\(|only-(?:child|of-type)|optional|out-of-range|'.
|
759 |
-
'read-(?:only|write)|required|right|root|:selection|target|valid|visited)/Si',
|
760 |
-
array($this, 'strtolowerCallback'),
|
761 |
-
$css
|
762 |
-
);
|
763 |
-
|
764 |
-
// @charset handling
|
765 |
-
if (preg_match($this->charsetRegex, $css, $matches)) {
|
766 |
-
// Keep the first @charset at-rule found
|
767 |
-
$charset = $matches[0];
|
768 |
-
// Delete all @charset at-rules
|
769 |
-
$css = preg_replace($this->charsetRegex, '', $css);
|
770 |
-
}
|
771 |
-
|
772 |
-
// @import handling
|
773 |
-
$css = preg_replace_callback($this->importRegex, function ($matches) use (&$imports) {
|
774 |
-
// Keep all @import at-rules found for later
|
775 |
-
$imports .= $matches[0];
|
776 |
-
// Delete all @import at-rules
|
777 |
-
return '';
|
778 |
-
}, $css);
|
779 |
-
|
780 |
-
// @namespace handling
|
781 |
-
$css = preg_replace_callback($this->namespaceRegex, function ($matches) use (&$namespaces) {
|
782 |
-
// Keep all @namespace at-rules found for later
|
783 |
-
$namespaces .= $matches[0];
|
784 |
-
// Delete all @namespace at-rules
|
785 |
-
return '';
|
786 |
-
}, $css);
|
787 |
-
|
788 |
-
// Order critical at-rules:
|
789 |
-
// 1. @charset first
|
790 |
-
// 2. @imports below @charset
|
791 |
-
// 3. @namespaces below @imports
|
792 |
-
$css = $charset . $imports . $namespaces . $css;
|
793 |
-
|
794 |
-
return $css;
|
795 |
-
}
|
796 |
-
|
797 |
-
/**
|
798 |
-
* Splits long lines after a specific column.
|
799 |
-
*
|
800 |
-
* Some source control tools don't like it when files containing lines longer
|
801 |
-
* than, say 8000 characters, are checked in. The linebreak option is used in
|
802 |
-
* that case to split long lines after a specific column.
|
803 |
-
*
|
804 |
-
* @param string $css the whole stylesheet.
|
805 |
-
* @return string
|
806 |
-
*/
|
807 |
-
private function processLongLineSplitting($css)
|
808 |
-
{
|
809 |
-
if ($this->linebreakPosition > 0) {
|
810 |
-
$l = strlen($css);
|
811 |
-
$offset = $this->linebreakPosition;
|
812 |
-
while (preg_match('/(?<!\\\\)\}(?!\n)/S', $css, $matches, PREG_OFFSET_CAPTURE, $offset)) {
|
813 |
-
$matchIndex = $matches[0][1];
|
814 |
-
$css = substr_replace($css, "\n", $matchIndex + 1, 0);
|
815 |
-
$offset = $matchIndex + 2 + $this->linebreakPosition;
|
816 |
-
$l += 1;
|
817 |
-
if ($offset > $l) {
|
818 |
-
break;
|
819 |
-
}
|
820 |
-
}
|
821 |
-
}
|
822 |
-
|
823 |
-
return $css;
|
824 |
-
}
|
825 |
-
|
826 |
-
/**
|
827 |
-
* Converts hsl() & rgb() colors to HEX format.
|
828 |
-
* @param $matches
|
829 |
-
* @return string
|
830 |
-
*/
|
831 |
-
private function shortenHslAndRgbToHexCallback($matches)
|
832 |
-
{
|
833 |
-
$type = $matches[1];
|
834 |
-
$values = explode(',', $matches[2]);
|
835 |
-
$terminator = $matches[3];
|
836 |
-
|
837 |
-
if ($type === 'hsl') {
|
838 |
-
$values = Utils::hslToRgb($values);
|
839 |
-
}
|
840 |
-
|
841 |
-
$hexColors = Utils::rgbToHex($values);
|
842 |
-
|
843 |
-
// Restore space after rgb() or hsl() function in some cases such as:
|
844 |
-
// background-image: linear-gradient(to bottom, rgb(210,180,140) 10%, rgb(255,0,0) 90%);
|
845 |
-
if (!empty($terminator) && !preg_match('/[ ,);]/S', $terminator)) {
|
846 |
-
$terminator = ' '. $terminator;
|
847 |
-
}
|
848 |
-
|
849 |
-
return '#'. implode('', $hexColors) . $terminator;
|
850 |
-
}
|
851 |
-
|
852 |
-
/**
|
853 |
-
* Compresses HEX color values of the form #AABBCC to #ABC or short color name.
|
854 |
-
* @param $matches
|
855 |
-
* @return string
|
856 |
-
*/
|
857 |
-
private function shortenHexColorsCallback($matches)
|
858 |
-
{
|
859 |
-
$hex = $matches[1];
|
860 |
-
|
861 |
-
// Shorten suitable 6 chars HEX colors
|
862 |
-
if (strlen($hex) === 6 && preg_match('/^([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3$/Si', $hex, $m)) {
|
863 |
-
$hex = $m[1] . $m[2] . $m[3];
|
864 |
-
}
|
865 |
-
|
866 |
-
// Lowercase
|
867 |
-
$hex = '#'. strtolower($hex);
|
868 |
-
|
869 |
-
// Replace Hex colors with shorter color names
|
870 |
-
$color = array_key_exists($hex, $this->hexToNamedColorsMap) ? $this->hexToNamedColorsMap[$hex] : $hex;
|
871 |
-
|
872 |
-
return $color . $matches[2];
|
873 |
-
}
|
874 |
-
|
875 |
-
/**
|
876 |
-
* Shortens all named colors with a shorter HEX counterpart for a set of safe properties
|
877 |
-
* e.g. white -> #fff
|
878 |
-
* @param array $matches
|
879 |
-
* @return string
|
880 |
-
*/
|
881 |
-
private function shortenNamedColorsCallback($matches)
|
882 |
-
{
|
883 |
-
return $matches[1] . $this->namedToHexColorsMap[strtolower($matches[2])] . $matches[3];
|
884 |
-
}
|
885 |
-
|
886 |
-
/**
|
887 |
-
* Makes a string lowercase
|
888 |
-
* @param array $matches
|
889 |
-
* @return string
|
890 |
-
*/
|
891 |
-
private function strtolowerCallback($matches)
|
892 |
-
{
|
893 |
-
return strtolower($matches[0]);
|
894 |
-
}
|
895 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/tubalmartin/cssmin/src/Utils.php
DELETED
@@ -1,149 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace tubalmartin\CssMin;
|
4 |
-
|
5 |
-
class Utils
|
6 |
-
{
|
7 |
-
/**
|
8 |
-
* Clamps a number between a minimum and a maximum value.
|
9 |
-
* @param int|float $n the number to clamp
|
10 |
-
* @param int|float $min the lower end number allowed
|
11 |
-
* @param int|float $max the higher end number allowed
|
12 |
-
* @return int|float
|
13 |
-
*/
|
14 |
-
public static function clampNumber($n, $min, $max)
|
15 |
-
{
|
16 |
-
return min(max($n, $min), $max);
|
17 |
-
}
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Clamps a RGB color number outside the sRGB color space
|
21 |
-
* @param int|float $n the number to clamp
|
22 |
-
* @return int|float
|
23 |
-
*/
|
24 |
-
public static function clampNumberSrgb($n)
|
25 |
-
{
|
26 |
-
return self::clampNumber($n, 0, 255);
|
27 |
-
}
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Converts a HSL color into a RGB color
|
31 |
-
* @param array $hslValues
|
32 |
-
* @return array
|
33 |
-
*/
|
34 |
-
public static function hslToRgb($hslValues)
|
35 |
-
{
|
36 |
-
$h = floatval($hslValues[0]);
|
37 |
-
$s = floatval(str_replace('%', '', $hslValues[1]));
|
38 |
-
$l = floatval(str_replace('%', '', $hslValues[2]));
|
39 |
-
|
40 |
-
// Wrap and clamp, then fraction!
|
41 |
-
$h = ((($h % 360) + 360) % 360) / 360;
|
42 |
-
$s = self::clampNumber($s, 0, 100) / 100;
|
43 |
-
$l = self::clampNumber($l, 0, 100) / 100;
|
44 |
-
|
45 |
-
if ($s == 0) {
|
46 |
-
$r = $g = $b = self::roundNumber(255 * $l);
|
47 |
-
} else {
|
48 |
-
$v2 = $l < 0.5 ? $l * (1 + $s) : ($l + $s) - ($s * $l);
|
49 |
-
$v1 = (2 * $l) - $v2;
|
50 |
-
$r = self::roundNumber(255 * self::hueToRgb($v1, $v2, $h + (1/3)));
|
51 |
-
$g = self::roundNumber(255 * self::hueToRgb($v1, $v2, $h));
|
52 |
-
$b = self::roundNumber(255 * self::hueToRgb($v1, $v2, $h - (1/3)));
|
53 |
-
}
|
54 |
-
|
55 |
-
return array($r, $g, $b);
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Tests and selects the correct formula for each RGB color channel
|
60 |
-
* @param $v1
|
61 |
-
* @param $v2
|
62 |
-
* @param $vh
|
63 |
-
* @return mixed
|
64 |
-
*/
|
65 |
-
public static function hueToRgb($v1, $v2, $vh)
|
66 |
-
{
|
67 |
-
$vh = $vh < 0 ? $vh + 1 : ($vh > 1 ? $vh - 1 : $vh);
|
68 |
-
|
69 |
-
if ($vh * 6 < 1) {
|
70 |
-
return $v1 + ($v2 - $v1) * 6 * $vh;
|
71 |
-
}
|
72 |
-
|
73 |
-
if ($vh * 2 < 1) {
|
74 |
-
return $v2;
|
75 |
-
}
|
76 |
-
|
77 |
-
if ($vh * 3 < 2) {
|
78 |
-
return $v1 + ($v2 - $v1) * ((2 / 3) - $vh) * 6;
|
79 |
-
}
|
80 |
-
|
81 |
-
return $v1;
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Convert strings like "64M" or "30" to int values
|
86 |
-
* @param mixed $size
|
87 |
-
* @return int
|
88 |
-
*/
|
89 |
-
public static function normalizeInt($size)
|
90 |
-
{
|
91 |
-
if (is_string($size)) {
|
92 |
-
$letter = substr($size, -1);
|
93 |
-
$size = intval($size);
|
94 |
-
switch ($letter) {
|
95 |
-
case 'M':
|
96 |
-
case 'm':
|
97 |
-
return (int) $size * 1048576;
|
98 |
-
case 'K':
|
99 |
-
case 'k':
|
100 |
-
return (int) $size * 1024;
|
101 |
-
case 'G':
|
102 |
-
case 'g':
|
103 |
-
return (int) $size * 1073741824;
|
104 |
-
}
|
105 |
-
}
|
106 |
-
return (int) $size;
|
107 |
-
}
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Converts a string containing and RGB percentage value into a RGB integer value i.e. '90%' -> 229.5
|
111 |
-
* @param $rgbPercentage
|
112 |
-
* @return int
|
113 |
-
*/
|
114 |
-
public static function rgbPercentageToRgbInteger($rgbPercentage)
|
115 |
-
{
|
116 |
-
if (strpos($rgbPercentage, '%') !== false) {
|
117 |
-
$rgbPercentage = self::roundNumber(floatval(str_replace('%', '', $rgbPercentage)) * 2.55);
|
118 |
-
}
|
119 |
-
|
120 |
-
return intval($rgbPercentage, 10);
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* Converts a RGB color into a HEX color
|
125 |
-
* @param array $rgbColors
|
126 |
-
* @return array
|
127 |
-
*/
|
128 |
-
public static function rgbToHex($rgbColors)
|
129 |
-
{
|
130 |
-
$hexColors = array();
|
131 |
-
|
132 |
-
// Values outside the sRGB color space should be clipped (0-255)
|
133 |
-
for ($i = 0, $l = count($rgbColors); $i < $l; $i++) {
|
134 |
-
$hexColors[$i] = sprintf("%02x", self::clampNumberSrgb(self::rgbPercentageToRgbInteger($rgbColors[$i])));
|
135 |
-
}
|
136 |
-
|
137 |
-
return $hexColors;
|
138 |
-
}
|
139 |
-
|
140 |
-
/**
|
141 |
-
* Rounds a number to its closest integer
|
142 |
-
* @param $n
|
143 |
-
* @return int
|
144 |
-
*/
|
145 |
-
public static function roundNumber($n)
|
146 |
-
{
|
147 |
-
return intval(round(floatval($n)), 10);
|
148 |
-
}
|
149 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
webpack.config.js
DELETED
@@ -1,74 +0,0 @@
|
|
1 |
-
const webpack = require( 'webpack' );
|
2 |
-
const NODE_ENV = process.env.NODE_ENV || 'development';
|
3 |
-
const MiniCssExtractPlugin = require( 'mini-css-extract-plugin' );
|
4 |
-
|
5 |
-
module.exports = {
|
6 |
-
mode: NODE_ENV,
|
7 |
-
entry: './src/index.js',
|
8 |
-
externals: {
|
9 |
-
'react': 'React',
|
10 |
-
'react-dom': 'ReactDOM'
|
11 |
-
},
|
12 |
-
output: {
|
13 |
-
path: __dirname,
|
14 |
-
filename: './build/build.js'
|
15 |
-
},
|
16 |
-
module: {
|
17 |
-
rules: [
|
18 |
-
{
|
19 |
-
test: /.js?$/,
|
20 |
-
use: [ {
|
21 |
-
loader: 'babel-loader',
|
22 |
-
options: {
|
23 |
-
presets: [ '@babel/preset-env' ],
|
24 |
-
plugins: [
|
25 |
-
'@babel/plugin-transform-async-to-generator',
|
26 |
-
'@babel/plugin-proposal-object-rest-spread',
|
27 |
-
[
|
28 |
-
'@babel/plugin-transform-react-jsx', {
|
29 |
-
'pragma': 'wp.element.createElement'
|
30 |
-
}
|
31 |
-
]
|
32 |
-
]
|
33 |
-
}
|
34 |
-
},
|
35 |
-
'eslint-loader' ],
|
36 |
-
exclude: /node_modules/
|
37 |
-
},
|
38 |
-
{
|
39 |
-
test: /\.(css|scss)$/,
|
40 |
-
use: [ {
|
41 |
-
loader: MiniCssExtractPlugin.loader
|
42 |
-
},
|
43 |
-
'css-loader',
|
44 |
-
{
|
45 |
-
loader: 'postcss-loader',
|
46 |
-
options: {
|
47 |
-
plugins: [
|
48 |
-
require( 'autoprefixer' )
|
49 |
-
]
|
50 |
-
}
|
51 |
-
},
|
52 |
-
{
|
53 |
-
loader: 'sass-loader',
|
54 |
-
query: {
|
55 |
-
outputStyle:
|
56 |
-
'production' === process.env.NODE_ENV ? 'compressed' : 'nested'
|
57 |
-
}
|
58 |
-
} ]
|
59 |
-
},
|
60 |
-
{
|
61 |
-
test: /\.(png|jpg)$/,
|
62 |
-
loader: 'url-loader'
|
63 |
-
}
|
64 |
-
]
|
65 |
-
},
|
66 |
-
plugins: [
|
67 |
-
new webpack.DefinePlugin({
|
68 |
-
'process.env.NODE_ENV': JSON.stringify( NODE_ENV )
|
69 |
-
}),
|
70 |
-
new MiniCssExtractPlugin({
|
71 |
-
filename: './build/build.css'
|
72 |
-
})
|
73 |
-
]
|
74 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|