Version Description
- Fixed: Woocircle Widget not showing issue fixed
Download this release
Release Info
Developer | bdthemes |
Plugin | Prime Slider – Addons For Elementor (Revolution of a slider, Hero Slider, Media Slider, Drag Drop Slider, Video Slider, Product Slider, Ecommerce Slider) |
Version | 2.7.1 |
Comparing to | |
See all releases |
Code changes from version 2.6.2 to 2.7.1
- assets/css/prime-slider-font.css +1 -1
- assets/css/prime-slider-font.rtl.css +1 -1
- assets/css/ps-paranoia.css +1 -1
- assets/css/ps-paranoia.rtl.css +1 -1
- assets/css/ps-reveal.css +1 -1
- assets/css/ps-reveal.rtl.css +1 -1
- assets/css/ps-woocircle.css +1 -0
- assets/css/ps-woocircle.rtl.css +1 -0
- assets/fonts/prime-slider-font.svg +3 -0
- assets/fonts/prime-slider-font.ttf +0 -0
- assets/fonts/prime-slider-font.woff +0 -0
- assets/fonts/prime-slider-font.woff2 +0 -0
- assets/js/widgets/ps-woocircle.js +542 -0
- assets/js/widgets/ps-woocircle.min.js +1 -0
- assets/js/widgets/ps-wooexpand.min.js +1 -1
- assets/vendor/js/classie.js +85 -0
- assets/vendor/js/classie.min.js +12 -0
- assets/vendor/js/dynamics.js +2058 -0
- assets/vendor/js/dynamics.min.js +1 -0
- bdthemes-prime-slider.php +3 -3
- changelog.txt +16 -0
- freemius/assets/css/admin/account.css +496 -1
- freemius/assets/css/admin/add-ons.css +1 -2
- freemius/assets/css/admin/affiliation.css +129 -1
- freemius/assets/css/admin/checkout.css +1 -1
- freemius/assets/css/admin/clone-resolution.css +1 -0
- freemius/assets/css/admin/common.css +1 -2
- freemius/assets/css/admin/connect.css +1 -1
- freemius/assets/css/admin/debug.css +1 -1
- freemius/assets/css/admin/dialog-boxes.css +1 -2
- freemius/assets/css/admin/gdpr-optin-notice.css +1 -1
- freemius/assets/css/admin/plugins.css +1 -1
- freemius/assets/css/customizer.css +1 -1
- freemius/assets/img/bdthemes-prime-slider.png +0 -0
- freemius/config.php +5 -5
- freemius/includes/class-freemius.php +1103 -261
- freemius/includes/class-fs-admin-notices.php +52 -21
- freemius/includes/class-fs-api.php +27 -3
- freemius/includes/class-fs-plugin-updater.php +8 -6
- freemius/includes/entities/class-fs-user.php +12 -1
- freemius/includes/fs-core-functions.php +1 -1
- freemius/includes/fs-plugin-info-dialog.php +1 -1
- freemius/includes/i18n.php +1 -1
- freemius/includes/managers/class-fs-admin-notice-manager.php +74 -20
- freemius/includes/managers/class-fs-clone-manager.php +1480 -0
- freemius/includes/managers/class-fs-key-value-storage.php +10 -0
- freemius/includes/managers/class-fs-plugin-manager.php +18 -5
- freemius/includes/sdk/Exceptions/ArgumentNotExistException.php +5 -1
- freemius/includes/sdk/Exceptions/EmptyArgumentException.php +5 -1
- freemius/includes/sdk/Exceptions/Exception.php +5 -1
- freemius/includes/sdk/Exceptions/InvalidArgumentException.php +5 -1
- freemius/includes/sdk/Exceptions/OAuthException.php +5 -1
- freemius/includes/sdk/FreemiusBase.php +4 -0
- freemius/includes/sdk/FreemiusWordPress.php +4 -1
- freemius/languages/freemius-cs_CZ.mo +0 -0
- freemius/languages/freemius-da_DK.mo +0 -0
- freemius/languages/freemius-de_DE.mo +0 -0
- freemius/languages/freemius-en.mo +0 -0
- freemius/languages/freemius-es_ES.mo +0 -0
- freemius/languages/freemius-fr_FR.mo +0 -0
- freemius/languages/freemius-he_IL.mo +0 -0
- freemius/languages/freemius-hu_HU.mo +0 -0
- freemius/languages/freemius-it_IT.mo +0 -0
- freemius/languages/freemius-ja.mo +0 -0
- freemius/languages/freemius-nl_NL.mo +0 -0
- freemius/languages/freemius-ru_RU.mo +0 -0
- freemius/languages/freemius-ta.mo +0 -0
- freemius/languages/freemius-zh_CN.mo +0 -0
- freemius/languages/freemius.pot +587 -409
- freemius/require.php +6 -1
- freemius/start.php +1 -1
- freemius/templates/account.php +38 -9
- freemius/templates/account/partials/addon.php +6 -1
- freemius/templates/account/partials/site.php +3 -3
- freemius/templates/account/payments.php +10 -11
- freemius/templates/admin-notice.php +4 -1
- freemius/templates/ajax-loader.php +6 -1
- freemius/templates/clone-resolution-js.php +77 -0
- freemius/templates/connect.php +22 -10
- freemius/templates/debug.php +26 -6
- freemius/templates/firewall-issues-js.php +10 -6
- freemius/templates/forms/deactivation/form.php +666 -543
- freemius/templates/forms/email-address-update.php +347 -0
- freemius/templates/forms/license-activation.php +33 -5
- freemius/templates/partials/network-activation.php +6 -1
- freemius/templates/plugin-info/features.php +1 -1
- freemius/templates/powered-by.php +7 -7
- freemius/templates/pricing.php +11 -10
- freemius/templates/sticky-admin-notice-js.php +4 -2
- includes/admin-feeds.php +1 -1
- includes/admin-settings.php +24 -0
- includes/modules-manager.php +6 -0
- includes/prime-slider-filters.php +12 -0
- loader.php +8 -0
- modules/blog/widgets/blog.php +1 -1
- modules/general/widgets/general.php +1 -1
- modules/isolate/widgets/isolate.php +1 -1
- modules/pagepiling/widgets/pagepiling.php +3 -3
- modules/reveal/widgets/reveal.php +7 -7
- modules/woocircle/module.info.php +10 -0
- modules/woocircle/module.php +21 -0
- modules/woocircle/widgets/woocircle.php +1588 -0
- readme.txt +14 -4
assets/css/prime-slider-font.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
@font-face{font-family:'prime-slider-font';src:url('../fonts/prime-slider-font.woff2?
|
1 |
+
@font-face{font-family:'prime-slider-font';src:url('../fonts/prime-slider-font.woff2?3khjh0') format('woff2'),url('../fonts/prime-slider-font.ttf?3khjh0') format('truetype'),url('../fonts/prime-slider-font.woff?3khjh0') format('woff'),url('../fonts/prime-slider-font.svg?3khjh0#prime-slider-font') format('svg');font-weight:normal;font-style:normal;font-display:block}[class^="ps-wi-"],[class*=" ps-wi-"]{font-family:'prime-slider-font' !important;speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ps-wi-arrow-left-1:before{content:"\e919"}.ps-wi-arrow-right-1:before{content:"\e925"}.ps-wi-arrow-left-2:before{content:"\e91a"}.ps-wi-arrow-right-2:before{content:"\e926"}.ps-wi-arrow-left-3:before{content:"\e91b"}.ps-wi-arrow-right-3:before{content:"\e927"}.ps-wi-arrow-left-4:before{content:"\e91c"}.ps-wi-arrow-right-4:before{content:"\e928"}.ps-wi-arrow-left-5:before{content:"\e943"}.ps-wi-arrow-right-5:before{content:"\e944"}.ps-wi-arrow-left-6:before{content:"\e945"}.ps-wi-arrow-right-6:before{content:"\e946"}.ps-wi-arrow-left-7:before{content:"\e949"}.ps-wi-arrow-right-7:before{content:"\e94a"}.ps-wi-arrow-left-8:before{content:"\e91e"}.ps-wi-arrow-right-8:before{content:"\e92c"}.ps-wi-arrow-left-9:before{content:"\e91f"}.ps-wi-arrow-right-9:before{content:"\e92d"}.ps-wi-arrow-left-10:before{content:"\e920"}.ps-wi-arrow-right-10:before{content:"\e92e"}.ps-wi-arrow-left-11:before{content:"\e921"}.ps-wi-arrow-right-11:before{content:"\e92f"}.ps-wi-arrow-left-12:before{content:"\e94b"}.ps-wi-arrow-right-12:before{content:"\e94c"}.ps-wi-arrow-left-13:before{content:"\e922"}.ps-wi-arrow-right-13:before{content:"\e930"}.ps-wi-arrow-left-14:before{content:"\e91d"}.ps-wi-arrow-right-14:before{content:"\e92b"}.ps-wi-arrow-left-15:before{content:"\e923"}.ps-wi-arrow-right-15:before{content:"\e931"}.ps-wi-arrow-left-16:before{content:"\e924"}.ps-wi-arrow-right-16:before{content:"\e932"}.ps-wi-arrow-left-17:before{content:"\e929"}.ps-wi-arrow-right-17:before{content:"\e92a"}.ps-wi-arrow-left-18:before{content:"\e933"}.ps-wi-arrow-right-18:before{content:"\e934"}.ps-wi-arrow-up-1:before{content:"\e935"}.ps-wi-arrow-down-1:before{content:"\e936"}.ps-wi-arrow-up-2:before{content:"\e937"}.ps-wi-arrow-down-2:before{content:"\e938"}.ps-wi-arrow-up-3:before{content:"\e939"}.ps-wi-arrow-down-3:before{content:"\e93a"}.ps-wi-arrow-up-4:before{content:"\e93b"}.ps-wi-arrow-down-4:before{content:"\e93c"}.ps-wi-arrow-up-5:before{content:"\e93d"}.ps-wi-arrow-down-5:before{content:"\e93e"}.ps-wi-arrow-up-7:before{content:"\e93f"}.ps-wi-arrow-down-7:before{content:"\e940"}.ps-wi-arrow-up-8:before{content:"\e941"}.ps-wi-arrow-down-8:before{content:"\e947"}.ps-wi-arrow-left-circle-1:before{content:"\e942"}.ps-wi-arrow-right-circle-1:before{content:"\e948"}.ps-wi-arrow-left-circle-2:before{content:"\e94d"}.ps-wi-arrow-right-circle-2:before{content:"\e94e"}.ps-wi-arrow-left-circle-3:before{content:"\e94f"}.ps-wi-arrow-right-circle-3:before{content:"\e950"}.ps-wi-arrow-left-circle-4:before{content:"\e951"}.ps-wi-arrow-right-circle-4:before{content:"\e952"}.ps-wi-arrow-left-square-1:before{content:"\e953"}.ps-wi-arrow-right-square-1:before{content:"\e954"}.ps-wi-foxico-slider:before{content:"\e968"}.ps-wi-woocircle:before{content:"\e969"}.ps-wi-diagonal:before{content:"\e96a"}.ps-wi-reveal:before{content:"\e967"}.ps-wi-pacific:before{content:"\e963"}.ps-wi-mash:before{content:"\e964"}.ps-wi-nixon:before{content:"\e965"}.ps-wi-paranoia:before{content:"\e966"}.ps-wi-crossroad:before{content:"\e960"}.ps-wi-rubix:before{content:"\e961"}.ps-wi-matrix:before{content:"\e962"}.ps-wi-astoria:before{content:"\e95f"}.ps-wi-vertex:before{content:"\e95e"}.ps-wi-mercury:before{content:"\e956"}.ps-wi-marble:before{content:"\e957"}.ps-wi-fiestar:before{content:"\e958"}.ps-wi-wooexpand:before{content:"\e959"}.ps-wi-knily1:before{content:"\e95a"}.ps-wi-storker1:before{content:"\e95b"}.ps-wi-knily:before{content:"\e95c"}.ps-wi-storker:before{content:"\e95d"}.ps-wi-prime-slider:before{content:"\e915"}.ps-wi-woolamp:before{content:"\e955"}.ps-wi-mount:before{content:"\e916"}.ps-wi-flexure:before{content:"\e917"}.ps-wi-monster:before{content:"\e918"}.ps-wi-sequester:before{content:"\e914"}.ps-wi-pagepiling:before{content:"\e913"}.ps-wi-dragon:before{content:"\e912"}.ps-wi-fluent:before{content:"\e911"}.ps-wi-event-calendar:before{content:"\e910"}.ps-wi-multiscroll:before{content:"\e90f"}.ps-wi-woostand:before{content:"\e90d"}.ps-wi-flogia:before{content:"\e90c"}.ps-wi-custom:before{content:"\e90b"}.ps-wi-isolate:before{content:"\e908"}.ps-wi-isolate_skin_locate:before{content:"\e909"}.ps-wi-isolate_skin_slice:before{content:"\e90a"}.ps-wi-woocommerce:before{content:"\e90e"}.ps-wi-blog:before{content:"\e900"}.ps-wi-blog_skin_coral:before{content:"\e901"}.ps-wi-blog_skin_folio:before{content:"\e902"}.ps-wi-blog_skin_zinest:before{content:"\e903"}.ps-wi-general:before{content:"\e904"}.ps-wi-general_skin_crelly:before{content:"\e905"}.ps-wi-general_skin_meteor:before{content:"\e906"}.ps-wi-general_skin_slide:before{content:"\e907"}.ps-wi-tutorial:before{content:"\e992"}.ps-wi-preview:before{content:"\ea75"}
|
assets/css/prime-slider-font.rtl.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
@font-face{font-family:'prime-slider-font';src:url('../fonts/prime-slider-font.woff2?
|
1 |
+
@font-face{font-family:'prime-slider-font';src:url('../fonts/prime-slider-font.woff2?3khjh0') format('woff2'),url('../fonts/prime-slider-font.ttf?3khjh0') format('truetype'),url('../fonts/prime-slider-font.woff?3khjh0') format('woff'),url('../fonts/prime-slider-font.svg?3khjh0#prime-slider-font') format('svg');font-weight:normal;font-style:normal;font-display:block}[class^="ps-wi-"],[class*=" ps-wi-"]{font-family:'prime-slider-font' !important;speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ps-wi-arrow-left-1:before{content:"\e919"}.ps-wi-arrow-right-1:before{content:"\e925"}.ps-wi-arrow-left-2:before{content:"\e91a"}.ps-wi-arrow-right-2:before{content:"\e926"}.ps-wi-arrow-left-3:before{content:"\e91b"}.ps-wi-arrow-right-3:before{content:"\e927"}.ps-wi-arrow-left-4:before{content:"\e91c"}.ps-wi-arrow-right-4:before{content:"\e928"}.ps-wi-arrow-left-5:before{content:"\e943"}.ps-wi-arrow-right-5:before{content:"\e944"}.ps-wi-arrow-left-6:before{content:"\e945"}.ps-wi-arrow-right-6:before{content:"\e946"}.ps-wi-arrow-left-7:before{content:"\e949"}.ps-wi-arrow-right-7:before{content:"\e94a"}.ps-wi-arrow-left-8:before{content:"\e91e"}.ps-wi-arrow-right-8:before{content:"\e92c"}.ps-wi-arrow-left-9:before{content:"\e91f"}.ps-wi-arrow-right-9:before{content:"\e92d"}.ps-wi-arrow-left-10:before{content:"\e920"}.ps-wi-arrow-right-10:before{content:"\e92e"}.ps-wi-arrow-left-11:before{content:"\e921"}.ps-wi-arrow-right-11:before{content:"\e92f"}.ps-wi-arrow-left-12:before{content:"\e94b"}.ps-wi-arrow-right-12:before{content:"\e94c"}.ps-wi-arrow-left-13:before{content:"\e922"}.ps-wi-arrow-right-13:before{content:"\e930"}.ps-wi-arrow-left-14:before{content:"\e91d"}.ps-wi-arrow-right-14:before{content:"\e92b"}.ps-wi-arrow-left-15:before{content:"\e923"}.ps-wi-arrow-right-15:before{content:"\e931"}.ps-wi-arrow-left-16:before{content:"\e924"}.ps-wi-arrow-right-16:before{content:"\e932"}.ps-wi-arrow-left-17:before{content:"\e929"}.ps-wi-arrow-right-17:before{content:"\e92a"}.ps-wi-arrow-left-18:before{content:"\e933"}.ps-wi-arrow-right-18:before{content:"\e934"}.ps-wi-arrow-up-1:before{content:"\e935"}.ps-wi-arrow-down-1:before{content:"\e936"}.ps-wi-arrow-up-2:before{content:"\e937"}.ps-wi-arrow-down-2:before{content:"\e938"}.ps-wi-arrow-up-3:before{content:"\e939"}.ps-wi-arrow-down-3:before{content:"\e93a"}.ps-wi-arrow-up-4:before{content:"\e93b"}.ps-wi-arrow-down-4:before{content:"\e93c"}.ps-wi-arrow-up-5:before{content:"\e93d"}.ps-wi-arrow-down-5:before{content:"\e93e"}.ps-wi-arrow-up-7:before{content:"\e93f"}.ps-wi-arrow-down-7:before{content:"\e940"}.ps-wi-arrow-up-8:before{content:"\e941"}.ps-wi-arrow-down-8:before{content:"\e947"}.ps-wi-arrow-left-circle-1:before{content:"\e942"}.ps-wi-arrow-right-circle-1:before{content:"\e948"}.ps-wi-arrow-left-circle-2:before{content:"\e94d"}.ps-wi-arrow-right-circle-2:before{content:"\e94e"}.ps-wi-arrow-left-circle-3:before{content:"\e94f"}.ps-wi-arrow-right-circle-3:before{content:"\e950"}.ps-wi-arrow-left-circle-4:before{content:"\e951"}.ps-wi-arrow-right-circle-4:before{content:"\e952"}.ps-wi-arrow-left-square-1:before{content:"\e953"}.ps-wi-arrow-right-square-1:before{content:"\e954"}.ps-wi-foxico-slider:before{content:"\e968"}.ps-wi-woocircle:before{content:"\e969"}.ps-wi-diagonal:before{content:"\e96a"}.ps-wi-reveal:before{content:"\e967"}.ps-wi-pacific:before{content:"\e963"}.ps-wi-mash:before{content:"\e964"}.ps-wi-nixon:before{content:"\e965"}.ps-wi-paranoia:before{content:"\e966"}.ps-wi-crossroad:before{content:"\e960"}.ps-wi-rubix:before{content:"\e961"}.ps-wi-matrix:before{content:"\e962"}.ps-wi-astoria:before{content:"\e95f"}.ps-wi-vertex:before{content:"\e95e"}.ps-wi-mercury:before{content:"\e956"}.ps-wi-marble:before{content:"\e957"}.ps-wi-fiestar:before{content:"\e958"}.ps-wi-wooexpand:before{content:"\e959"}.ps-wi-knily1:before{content:"\e95a"}.ps-wi-storker1:before{content:"\e95b"}.ps-wi-knily:before{content:"\e95c"}.ps-wi-storker:before{content:"\e95d"}.ps-wi-prime-slider:before{content:"\e915"}.ps-wi-woolamp:before{content:"\e955"}.ps-wi-mount:before{content:"\e916"}.ps-wi-flexure:before{content:"\e917"}.ps-wi-monster:before{content:"\e918"}.ps-wi-sequester:before{content:"\e914"}.ps-wi-pagepiling:before{content:"\e913"}.ps-wi-dragon:before{content:"\e912"}.ps-wi-fluent:before{content:"\e911"}.ps-wi-event-calendar:before{content:"\e910"}.ps-wi-multiscroll:before{content:"\e90f"}.ps-wi-woostand:before{content:"\e90d"}.ps-wi-flogia:before{content:"\e90c"}.ps-wi-custom:before{content:"\e90b"}.ps-wi-isolate:before{content:"\e908"}.ps-wi-isolate_skin_locate:before{content:"\e909"}.ps-wi-isolate_skin_slice:before{content:"\e90a"}.ps-wi-woocommerce:before{content:"\e90e"}.ps-wi-blog:before{content:"\e900"}.ps-wi-blog_skin_coral:before{content:"\e901"}.ps-wi-blog_skin_folio:before{content:"\e902"}.ps-wi-blog_skin_zinest:before{content:"\e903"}.ps-wi-general:before{content:"\e904"}.ps-wi-general_skin_crelly:before{content:"\e905"}.ps-wi-general_skin_meteor:before{content:"\e906"}.ps-wi-general_skin_slide:before{content:"\e907"}.ps-wi-tutorial:before{content:"\e992"}.ps-wi-preview:before{content:"\ea75"}
|
assets/css/ps-paranoia.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
:root{--nav-width:60px;--nav-height:100px}.bdt-paranoia-slider{position:relative;overflow:hidden;height:100vh;width:100%;display:grid;grid-template-columns:20% 60% 20%;grid-template-rows:25% 1fr 29.5% 8.5%}.bdt-paranoia-slider .unbutton{background:none;border:0;padding:0;margin:0;font:inherit}.bdt-paranoia-slider .unbutton:focus{outline:none}.bdt-paranoia-slider .no-select{user-select:none}.bdt-paranoia-slider .bdt-slideshow{position:relative;height:100vh;display:grid;grid-template-areas:'... img ...' 'nav-prev img nav-next' '... img ...' 'title title title';grid-area:2 / 2 / 5 / 3;grid-template-columns:20% 100% 20%;grid-template-rows:38% 20% 42%;justify-content:center}.bdt-paranoia-slider .meta{position:absolute;top:0;left:0;right:0;text-align:center;z-index:1;height:100%;width:100%}.bdt-paranoia-slider .bdt-meta-content-wrap{display:grid;color:#fff;height:100%;width:100%}.bdt-paranoia-slider .bdt-meta-item-content{opacity:0;grid-area:1 / 1 / 2 / 2;will-change:opacity,transform;height:100%;width:100%}.bdt-paranoia-slider .bdt-sub-title{font-size:18px;margin-top:0;color:#2B2D42;text-transform:uppercase;margin-bottom:10px;font-weight:500;letter-spacing:10px}.bdt-paranoia-slider .bdt-main-title{margin:0;font-size:55px;text-transform:uppercase;color:#2B2D42}.bdt-paranoia-slider .bdt-inner-top-content{margin-top:20px;position:absolute;top:0;left:50%;transform:translateX(-50%)}.bdt-paranoia-slider .bdt-inner-bottom-content{position:absolute;bottom:40%;left:0;right:0;width:100%}.bdt-paranoia-slider .bdt-text{font-size:15px;color:#2B2D42;line-height:1.6;display:none}.bdt-paranoia-slider .bdt-text p{margin:0}.bdt-paranoia-slider .bdt-link-btn{position:relative;display:inline-block;color:#2B2D42;margin:auto;padding:10px 8px;font-size:13px;font-weight:600;text-decoration:none;transition:all .2s ease;z-index:111}.bdt-paranoia-slider .bdt-link-btn:before{content:"";position:absolute;top:50%;transform:translateY(-50%);left:0;border-radius:25px;background:#fe506c;width:40px;height:50px;transition:all .3s ease}.bdt-paranoia-slider .bdt-link-btn span{position:relative}.bdt-paranoia-slider .bdt-link-btn i{margin-left:10px;transform:translateX(-5px);transition:all .3s ease}.bdt-paranoia-slider .bdt-link-btn:hover
|
1 |
+
:root{--nav-width:60px;--nav-height:100px}.bdt-paranoia-slider{position:relative;overflow:hidden;height:100vh;width:100%;display:grid;grid-template-columns:20% 60% 20%;grid-template-rows:25% 1fr 29.5% 8.5%}.bdt-paranoia-slider .unbutton{background:none;border:0;padding:0;margin:0;font:inherit}.bdt-paranoia-slider .unbutton:focus{outline:none}.bdt-paranoia-slider .no-select{user-select:none}.bdt-paranoia-slider .bdt-slideshow{position:relative;height:100vh;display:grid;grid-template-areas:'... img ...' 'nav-prev img nav-next' '... img ...' 'title title title';grid-area:2 / 2 / 5 / 3;grid-template-columns:20% 100% 20%;grid-template-rows:38% 20% 42%;justify-content:center}.bdt-paranoia-slider .meta{position:absolute;top:0;left:0;right:0;text-align:center;z-index:1;height:100%;width:100%}.bdt-paranoia-slider .bdt-meta-content-wrap{display:grid;color:#fff;height:100%;width:100%}.bdt-paranoia-slider .bdt-meta-item-content{opacity:0;grid-area:1 / 1 / 2 / 2;will-change:opacity,transform;height:100%;width:100%}.bdt-paranoia-slider .bdt-sub-title{font-size:18px;margin-top:0;color:#2B2D42;text-transform:uppercase;margin-bottom:10px;font-weight:500;letter-spacing:10px}.bdt-paranoia-slider .bdt-main-title{margin:0;font-size:55px;text-transform:uppercase;color:#2B2D42}.bdt-paranoia-slider .bdt-inner-top-content{margin-top:20px;position:absolute;top:0;left:50%;transform:translateX(-50%)}.bdt-paranoia-slider .bdt-inner-bottom-content{position:absolute;bottom:40%;left:0;right:0;width:100%}.bdt-paranoia-slider .bdt-text{font-size:15px;color:#2B2D42;line-height:1.6;display:none}.bdt-paranoia-slider .bdt-text p{margin:0}.bdt-paranoia-slider .bdt-link-btn{position:relative;display:inline-block;color:#2B2D42;margin:auto;padding:10px 8px;font-size:13px;font-weight:600;text-decoration:none;transition:all .2s ease;z-index:111}.bdt-paranoia-slider .bdt-link-btn:before{content:"";position:absolute;top:50%;transform:translateY(-50%);left:0;border-radius:25px;background:#fe506c;width:40px;height:50px;transition:all .3s ease}.bdt-paranoia-slider .bdt-link-btn span{position:relative}.bdt-paranoia-slider .bdt-link-btn i{margin-left:10px;transform:translateX(-5px);transition:all .3s ease}.bdt-paranoia-slider .bdt-link-btn:hover{color:#f2f3f8}.bdt-paranoia-slider .bdt-link-btn:hover i{transform:translateX(0)}.bdt-paranoia-slider .bdt-link-btn:hover::before{width:100%;left:0}.bdt-paranoia-slider .bdt-link-btn:hover:active{transform:scale(.96)}.bdt-paranoia-slider .bdt-gallery-wrap{grid-area:img;width:100%;height:100%;overflow:hidden;position:relative;margin-top:auto;border-radius:35vw 35vw 0 0;justify-self:center;z-index:0}.bdt-paranoia-slider .bdt-gallery-img{overflow:hidden;position:absolute;opacity:0;pointer-events:none;width:100%;height:100%;will-change:opacity,transform}.bdt-paranoia-slider .bdt-gallery-img.bdt-slides-img::before{position:absolute;content:'';width:100%;height:100%;background:rgba(6,6,6,0.089);z-index:1}.bdt-paranoia-slider .no-js .bdt-gallery-img:first-child{opacity:1}.bdt-paranoia-slider .bdt-gallery-img-inner{width:100%;height:100%;background-size:cover;background-position:50% 50%;will-change:filter,transform}.bdt-paranoia-slider .nav{text-align:center;cursor:pointer;display:flex;flex-direction:column;align-self:center;position:relative}.bdt-paranoia-slider .nav .nav__text{opacity:0;transition:all .3s ease;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%) scale(0);z-index:1111}.bdt-paranoia-slider .nav:hover .nav__text{color:#2B2D42;opacity:1;transform:translate(-50%, -50%) scale(1)}.bdt-paranoia-slider .no-js .nav{display:none}.bdt-paranoia-slider .bdt-nav--prev{grid-area:nav-prev;align-items:center;margin-right:20px}.bdt-paranoia-slider .bdt-nav--next{grid-area:nav-next;align-items:center;margin-left:20px}.bdt-paranoia-slider .bdt-nav-imgwrap{width:40px;height:80px;border-radius:30px;overflow:hidden;position:relative;display:grid;grid-template-rows:100%;grid-template-columns:100% 100%}.bdt-paranoia-slider .bdt-nav-img{grid-area:1 / 1 / 2 / 2;position:relative;overflow:hidden;opacity:0;pointer-events:none;will-change:opacity,transform}.bdt-paranoia-slider .bdt-nav-img-inner{width:40px;height:80px;background-size:cover;will-change:filter,transform;position:relative}.bdt-paranoia-slider .nav__text{text-transform:uppercase;cursor:pointer;display:none;color:#f2f3f8;font-size:14px;font-weight:600;transition:all .3s ease}.bdt-paranoia-slider .bdt__slides__img--current{pointer-events:auto;opacity:1;z-index:1000}@media (min-width:768px){.bdt-paranoia-slider .bdt-main-title{font-size:145px}.bdt-paranoia-slider .bdt-sub-title{font-size:20px}.bdt-paranoia-slider .bdt-gallery-wrap{border-radius:25vw 25vw 0 0;width:100%}.bdt-paranoia-slider .bdt-inner-top-content{margin-top:-120px}.bdt-paranoia-slider .bdt-text{display:block;margin:0 50px 30px 50px}.bdt-paranoia-slider .bdt-link-btn{padding:15px 22px;font-size:16px}.bdt-paranoia-slider .nav{align-self:start}.bdt-paranoia-slider .nav__text{display:block}.bdt-paranoia-slider .bdt-nav-img-inner{width:var(--nav-width);height:var(--nav-height)}.bdt-paranoia-slider .bdt-nav-imgwrap{width:var(--nav-width);height:var(--nav-height)}.bdt-paranoia-slider .bdt-link-btn:before{width:50px;height:65px}}@media (min-width:1024px){.bdt-paranoia-slider .bdt-main-title{font-size:215px}.bdt-paranoia-slider .bdt-text{margin:0 70px 30px 70px}}
|
assets/css/ps-paranoia.rtl.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
:root{--nav-width:60px;--nav-height:100px}.bdt-paranoia-slider{position:relative;overflow:hidden;height:100vh;width:100%;display:grid;grid-template-columns:20% 60% 20%;grid-template-rows:25% 1fr 29.5% 8.5%}.bdt-paranoia-slider .unbutton{background:none;border:0;padding:0;margin:0;font:inherit}.bdt-paranoia-slider .unbutton:focus{outline:none}.bdt-paranoia-slider .no-select{user-select:none}.bdt-paranoia-slider .bdt-slideshow{position:relative;height:100vh;display:grid;grid-template-areas:'... img ...' 'nav-prev img nav-next' '... img ...' 'title title title';grid-area:2 / 2 / 5 / 3;grid-template-columns:20% 100% 20%;grid-template-rows:38% 20% 42%;justify-content:center}.bdt-paranoia-slider .meta{position:absolute;top:0;right:0;left:0;text-align:center;z-index:1;height:100%;width:100%}.bdt-paranoia-slider .bdt-meta-content-wrap{display:grid;color:#fff;height:100%;width:100%}.bdt-paranoia-slider .bdt-meta-item-content{opacity:0;grid-area:1 / 1 / 2 / 2;will-change:opacity,transform;height:100%;width:100%}.bdt-paranoia-slider .bdt-sub-title{font-size:18px;margin-top:0;color:#2B2D42;text-transform:uppercase;margin-bottom:10px;font-weight:500;letter-spacing:10px}.bdt-paranoia-slider .bdt-main-title{margin:0;font-size:55px;text-transform:uppercase;color:#2B2D42}.bdt-paranoia-slider .bdt-inner-top-content{margin-top:20px;position:absolute;top:0;right:50%;transform:translateX(50%)}.bdt-paranoia-slider .bdt-inner-bottom-content{position:absolute;bottom:40%;right:0;left:0;width:100%}.bdt-paranoia-slider .bdt-text{font-size:15px;color:#2B2D42;line-height:1.6;display:none}.bdt-paranoia-slider .bdt-text p{margin:0}.bdt-paranoia-slider .bdt-link-btn{position:relative;display:inline-block;color:#2B2D42;margin:auto;padding:10px 8px;font-size:13px;font-weight:600;text-decoration:none;transition:all .2s ease;z-index:111}.bdt-paranoia-slider .bdt-link-btn:before{content:"";position:absolute;top:50%;transform:translateY(-50%);right:0;border-radius:25px;background:#fe506c;width:40px;height:50px;transition:all .3s ease}.bdt-paranoia-slider .bdt-link-btn span{position:relative}.bdt-paranoia-slider .bdt-link-btn i{margin-right:10px;transform:translateX(5px);transition:all .3s ease}.bdt-paranoia-slider .bdt-link-btn:hover
|
1 |
+
:root{--nav-width:60px;--nav-height:100px}.bdt-paranoia-slider{position:relative;overflow:hidden;height:100vh;width:100%;display:grid;grid-template-columns:20% 60% 20%;grid-template-rows:25% 1fr 29.5% 8.5%}.bdt-paranoia-slider .unbutton{background:none;border:0;padding:0;margin:0;font:inherit}.bdt-paranoia-slider .unbutton:focus{outline:none}.bdt-paranoia-slider .no-select{user-select:none}.bdt-paranoia-slider .bdt-slideshow{position:relative;height:100vh;display:grid;grid-template-areas:'... img ...' 'nav-prev img nav-next' '... img ...' 'title title title';grid-area:2 / 2 / 5 / 3;grid-template-columns:20% 100% 20%;grid-template-rows:38% 20% 42%;justify-content:center}.bdt-paranoia-slider .meta{position:absolute;top:0;right:0;left:0;text-align:center;z-index:1;height:100%;width:100%}.bdt-paranoia-slider .bdt-meta-content-wrap{display:grid;color:#fff;height:100%;width:100%}.bdt-paranoia-slider .bdt-meta-item-content{opacity:0;grid-area:1 / 1 / 2 / 2;will-change:opacity,transform;height:100%;width:100%}.bdt-paranoia-slider .bdt-sub-title{font-size:18px;margin-top:0;color:#2B2D42;text-transform:uppercase;margin-bottom:10px;font-weight:500;letter-spacing:10px}.bdt-paranoia-slider .bdt-main-title{margin:0;font-size:55px;text-transform:uppercase;color:#2B2D42}.bdt-paranoia-slider .bdt-inner-top-content{margin-top:20px;position:absolute;top:0;right:50%;transform:translateX(50%)}.bdt-paranoia-slider .bdt-inner-bottom-content{position:absolute;bottom:40%;right:0;left:0;width:100%}.bdt-paranoia-slider .bdt-text{font-size:15px;color:#2B2D42;line-height:1.6;display:none}.bdt-paranoia-slider .bdt-text p{margin:0}.bdt-paranoia-slider .bdt-link-btn{position:relative;display:inline-block;color:#2B2D42;margin:auto;padding:10px 8px;font-size:13px;font-weight:600;text-decoration:none;transition:all .2s ease;z-index:111}.bdt-paranoia-slider .bdt-link-btn:before{content:"";position:absolute;top:50%;transform:translateY(-50%);right:0;border-radius:25px;background:#fe506c;width:40px;height:50px;transition:all .3s ease}.bdt-paranoia-slider .bdt-link-btn span{position:relative}.bdt-paranoia-slider .bdt-link-btn i{margin-right:10px;transform:translateX(5px);transition:all .3s ease}.bdt-paranoia-slider .bdt-link-btn:hover{color:#f2f3f8}.bdt-paranoia-slider .bdt-link-btn:hover i{transform:translateX(0)}.bdt-paranoia-slider .bdt-link-btn:hover::before{width:100%;right:0}.bdt-paranoia-slider .bdt-link-btn:hover:active{transform:scale(.96)}.bdt-paranoia-slider .bdt-gallery-wrap{grid-area:img;width:100%;height:100%;overflow:hidden;position:relative;margin-top:auto;border-radius:35vw 35vw 0 0;justify-self:center;z-index:0}.bdt-paranoia-slider .bdt-gallery-img{overflow:hidden;position:absolute;opacity:0;pointer-events:none;width:100%;height:100%;will-change:opacity,transform}.bdt-paranoia-slider .bdt-gallery-img.bdt-slides-img::before{position:absolute;content:'';width:100%;height:100%;background:rgba(6,6,6,0.089);z-index:1}.bdt-paranoia-slider .no-js .bdt-gallery-img:first-child{opacity:1}.bdt-paranoia-slider .bdt-gallery-img-inner{width:100%;height:100%;background-size:cover;background-position:50% 50%;will-change:filter,transform}.bdt-paranoia-slider .nav{text-align:center;cursor:pointer;display:flex;flex-direction:column;align-self:center;position:relative}.bdt-paranoia-slider .nav .nav__text{opacity:0;transition:all .3s ease;position:absolute;top:50%;right:50%;transform:translate(50%, -50%) scale(0);z-index:1111}.bdt-paranoia-slider .nav:hover .nav__text{color:#2B2D42;opacity:1;transform:translate(50%, -50%) scale(1)}.bdt-paranoia-slider .no-js .nav{display:none}.bdt-paranoia-slider .bdt-nav--prev{grid-area:nav-prev;align-items:center;margin-left:20px}.bdt-paranoia-slider .bdt-nav--next{grid-area:nav-next;align-items:center;margin-right:20px}.bdt-paranoia-slider .bdt-nav-imgwrap{width:40px;height:80px;border-radius:30px;overflow:hidden;position:relative;display:grid;grid-template-rows:100%;grid-template-columns:100% 100%}.bdt-paranoia-slider .bdt-nav-img{grid-area:1 / 1 / 2 / 2;position:relative;overflow:hidden;opacity:0;pointer-events:none;will-change:opacity,transform}.bdt-paranoia-slider .bdt-nav-img-inner{width:40px;height:80px;background-size:cover;will-change:filter,transform;position:relative}.bdt-paranoia-slider .nav__text{text-transform:uppercase;cursor:pointer;display:none;color:#f2f3f8;font-size:14px;font-weight:600;transition:all .3s ease}.bdt-paranoia-slider .bdt__slides__img--current{pointer-events:auto;opacity:1;z-index:1000}@media (min-width:768px){.bdt-paranoia-slider .bdt-main-title{font-size:145px}.bdt-paranoia-slider .bdt-sub-title{font-size:20px}.bdt-paranoia-slider .bdt-gallery-wrap{border-radius:25vw 25vw 0 0;width:100%}.bdt-paranoia-slider .bdt-inner-top-content{margin-top:-120px}.bdt-paranoia-slider .bdt-text{display:block;margin:0 50px 30px 50px}.bdt-paranoia-slider .bdt-link-btn{padding:15px 22px;font-size:16px}.bdt-paranoia-slider .nav{align-self:start}.bdt-paranoia-slider .nav__text{display:block}.bdt-paranoia-slider .bdt-nav-img-inner{width:var(--nav-width);height:var(--nav-height)}.bdt-paranoia-slider .bdt-nav-imgwrap{width:var(--nav-width);height:var(--nav-height)}.bdt-paranoia-slider .bdt-link-btn:before{width:50px;height:65px}}@media (min-width:1024px){.bdt-paranoia-slider .bdt-main-title{font-size:215px}.bdt-paranoia-slider .bdt-text{margin:0 70px 30px 70px}}
|
assets/css/ps-reveal.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.bdt-reveal-slider{--color-text:#000;--color-bg:#fff;--color-link:#333;--color-link-hover:#000;--color-info:#000;--color-grid:#f3f3f3;--color-slide-alt:#fff;--color-slide-text-bg:#000;color:#57585c;color:var(--color-text);position:relative;width:100%}.bdt-reveal-slider a{text-decoration:none;color:var(--color-link);outline:none}.bdt-reveal-slider a:hover,.bdt-reveal-slider a:focus{color:var(--color-link-hover);outline:none}.bdt-reveal-slider .content{text-align:left;max-width:450px}.bdt-reveal-slider .
|
1 |
+
.bdt-reveal-slider{--color-text:#000;--color-bg:#fff;--color-link:#333;--color-link-hover:#000;--color-info:#000;--color-grid:#f3f3f3;--color-slide-alt:#fff;--color-slide-text-bg:#000;color:#57585c;color:var(--color-text);position:relative;width:100%}.bdt-reveal-slider a{text-decoration:none;color:var(--color-link);outline:none}.bdt-reveal-slider a:hover,.bdt-reveal-slider a:focus{color:var(--color-link-hover);outline:none}.bdt-reveal-slider .content{text-align:left;max-width:450px}.bdt-reveal-slider .reveal-header{position:relative;z-index:10;grid-area:header;padding:0 .5rem}.bdt-reveal-slider .reveal-header__title{font-size:40px;line-height:1.3;font-weight:bold;margin-bottom:10px;letter-spacing:4px;text-transform:uppercase}.bdt-reveal-slider .info{display:block;margin:1rem auto;color:var(--color-info)}.bdt-reveal-slider .slideshow{position:relative;width:100%;margin-top:1rem}.bdt-reveal-slider .slide{width:100%;top:0;position:absolute;pointer-events:none}.bdt-reveal-slider .slide--current{position:relative}.bdt-reveal-slider .slide--current .slide__img-wrap{cursor:default}.bdt-reveal-slider .slide--current .slide__img::after{content:"";background:rgba(57,71,72,0.27);position:absolute;top:0;left:0;width:100%;height:100%}.bdt-reveal-slider .slide--current .bdt-slide-content-wrap{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.bdt-reveal-slider .slide--current.slide--visible .slide__img-wrap,.bdt-reveal-slider .slide--current.slide--visible .slide__title,.bdt-reveal-slider .slide--current.slide--visible .slide__subtitle,.bdt-reveal-slider .slide--current.slide--visible .bdt-description,.bdt-reveal-slider .slide--current.slide--visible .slide__number,.bdt-reveal-slider .slide--current.slide--visible .slide__explore{opacity:1}.bdt-reveal-slider .slide--current.slide--visible .slide__explore{pointer-events:auto}.bdt-reveal-slider .slide__img-wrap,.bdt-reveal-slider .slide__title,.bdt-reveal-slider .slide__subtitle,.bdt-reveal-slider .bdt-description,.bdt-reveal-slider .slide__side,.bdt-reveal-slider .slide__number,.bdt-reveal-slider .slide__explore{opacity:0;pointer-events:none}.bdt-reveal-slider .slide__img-wrap{width:100%;height:50vh;overflow:hidden;position:relative}.bdt-reveal-slider .slide--left,.bdt-reveal-slider .slide--right{z-index:10}.bdt-reveal-slider .slide--left .slide__img-wrap,.bdt-reveal-slider .slide--right .slide__img-wrap{opacity:1;width:10vw;pointer-events:auto;cursor:pointer}.bdt-reveal-slider .slide--right .slide__img-wrap{margin-left:auto}.bdt-reveal-slider .slide__img{width:100%;height:100%;left:0;top:0;background-size:cover;background-position:50% 50%;position:absolute;backface-visibility:hidden;pointer-events:none}.bdt-reveal-slider .slide__img-reveal{position:absolute;width:100%;height:100%;top:0;left:0;background:#fff;transform:translate3d(0, 100%, 0);pointer-events:none}.bdt-reveal-slider .slide__title{font-size:35px;margin-top:0;margin-bottom:5px;font-weight:700}.bdt-reveal-slider .slide__subtitle{margin-top:0;margin-bottom:26px;font-size:22px;text-transform:capitalize;font-weight:500}.bdt-reveal-slider .bdt-description{margin-top:0;margin-bottom:30px;font-size:16px;line-height:1.6;max-width:440px;color:#0d0e10;display:none}.bdt-reveal-slider .bdt-slide-content-wrap{display:block;text-align:left;pointer-events:none}.bdt-reveal-slider .slide__explore{display:inline-block;margin:0}.bdt-reveal-slider .slide__explore .slide__explore-inner{cursor:pointer;background:var(--color-slide-text-bg);color:#fff;padding:10px 15px;transition:all .3s ease}.bdt-reveal-slider .slide__explore .slide__explore-inner:hover{color:#fff;background:#f00}.bdt-reveal-slider .slide__category{color:#fff;font-size:12px;letter-spacing:5px;text-transform:uppercase;font-weight:400}@media screen and (min-width:768px){.bdt-reveal-slider .bdt-description{display:inherit}}@media screen and (min-width:53em){.bdt-reveal-slider .content{position:relative;display:flex;justify-content:center;align-items:center;margin:0 auto;min-height:100vh;text-align:left}.bdt-reveal-slider .content--fixed{position:absolute;z-index:10;top:0;left:0;display:grid;align-content:space-between;width:100%;max-width:none;min-height:0;height:100vh;padding:1rem 0;pointer-events:none;align-items:start;grid-template-columns:10% 80% 10%;grid-template-rows:100%;grid-template-areas:"links header github"}.bdt-reveal-slider .content--fixed a{pointer-events:auto}.bdt-reveal-slider .info{max-width:16rem;margin:0}.bdt-reveal-slider .slideshow{overflow:hidden;margin:0;height:100vh;display:grid;grid-template-columns:10% 50% 10%;grid-column-gap:15%;grid-template-rows:100%;grid-template-areas:"preview-left current-slide preview-right"}.bdt-reveal-slider .slide{color:var(--color-slide-alt)}.bdt-reveal-slider .slide--current::after{display:none}.bdt-reveal-slider .slide--right::after{bottom:80vh;left:auto;right:0}.bdt-reveal-slider .slide__img-wrap{height:100%;position:absolute}.bdt-reveal-slider .slide__img{background-position:50% 0}.bdt-reveal-slider .slide--visible .slide__img-wrap.slide--visible .slide__side,.bdt-reveal-slider .slide--visible .slide__title.slide--visible .slide__side,.bdt-reveal-slider .slide--current.slide--visible .slide__side,.bdt-reveal-slider .slide--visible .slide__img-wrap.slide--visible .bdt-description,.bdt-reveal-slider .slide--visible .slide__title.slide--visible .bdt-description,.bdt-reveal-slider .slide--current.slide--visible .bdt-description{opacity:1}.bdt-reveal-slider .slide--visible .slide__img-wrap{pointer-events:auto}.bdt-reveal-slider .slide--current,.bdt-reveal-slider .slide--left,.bdt-reveal-slider .slide--right{position:relative;pointer-events:auto}.bdt-reveal-slider .slide--current{grid-area:current-slide}.bdt-reveal-slider .slide--current .bdt-slide-content-wrap{display:flex;flex-direction:column;align-items:flex-end;max-width:400px;position:absolute;top:50%;transform:translateY(-50%);right:50%;left:unset;text-align:right}.bdt-reveal-slider .slide--left .slide__title,.bdt-reveal-slider .slide--right .slide__title{-webkit-writing-mode:vertical-rl;writing-mode:vertical-rl;transform:rotate(180deg);position:absolute;font-size:1rem;right:0;top:80vh;text-align:right;color:var(--color-text);margin:1rem 0 0;font-weight:normal}.bdt-reveal-slider .slide--left .slide__img-wrap,.bdt-reveal-slider .slide--right .slide__img-wrap{height:50%;width:100%;top:20%;position:relative}.bdt-reveal-slider .slide--left .slide__img-wrap{top:30%}.bdt-reveal-slider .slide--left{border-right:1px solid var(--color-grid);grid-area:preview-left}.bdt-reveal-slider .slide--right{border-left:1px solid var(--color-grid);grid-area:preview-right}.bdt-reveal-slider .slide--right .slide__title{left:0;right:auto;top:70vh}.bdt-reveal-slider .slide__side{position:absolute;right:18px;white-space:nowrap;-webkit-writing-mode:vertical-rl;writing-mode:vertical-rl;transform:rotate(180deg)}.bdt-reveal-slider .slide--current .slide__title,.bdt-reveal-slider .slide__subtitle{font-size:5vw;margin-bottom:20px;padding:10px 15px 20px;font-weight:normal;line-height:1;white-space:nowrap;position:relative;overflow:hidden;color:#fff;font-weight:700}.bdt-reveal-slider .slide--current .slide__title .slide__box,.bdt-reveal-slider .slide__subtitle .slide__box{position:absolute;width:100%;height:100%;top:0;left:0;background:var(--color-slide-text-bg)}.bdt-reveal-slider .slide__title-inner,.bdt-reveal-slider .slide__subtitle-inner{position:relative;display:inline-block}.bdt-reveal-slider .slide__subtitle{font-size:2.2vw;line-height:1.5}}
|
assets/css/ps-reveal.rtl.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.bdt-reveal-slider{--color-text:#000;--color-bg:#fff;--color-link:#333;--color-link-hover:#000;--color-info:#000;--color-grid:#f3f3f3;--color-slide-alt:#fff;--color-slide-text-bg:#000;color:#57585c;color:var(--color-text);position:relative;width:100%}.bdt-reveal-slider a{text-decoration:none;color:var(--color-link);outline:none}.bdt-reveal-slider a:hover,.bdt-reveal-slider a:focus{color:var(--color-link-hover);outline:none}.bdt-reveal-slider .content{text-align:right;max-width:450px}.bdt-reveal-slider .
|
1 |
+
.bdt-reveal-slider{--color-text:#000;--color-bg:#fff;--color-link:#333;--color-link-hover:#000;--color-info:#000;--color-grid:#f3f3f3;--color-slide-alt:#fff;--color-slide-text-bg:#000;color:#57585c;color:var(--color-text);position:relative;width:100%}.bdt-reveal-slider a{text-decoration:none;color:var(--color-link);outline:none}.bdt-reveal-slider a:hover,.bdt-reveal-slider a:focus{color:var(--color-link-hover);outline:none}.bdt-reveal-slider .content{text-align:right;max-width:450px}.bdt-reveal-slider .reveal-header{position:relative;z-index:10;grid-area:header;padding:0 .5rem}.bdt-reveal-slider .reveal-header__title{font-size:40px;line-height:1.3;font-weight:bold;margin-bottom:10px;letter-spacing:4px;text-transform:uppercase}.bdt-reveal-slider .info{display:block;margin:1rem auto;color:var(--color-info)}.bdt-reveal-slider .slideshow{position:relative;width:100%;margin-top:1rem}.bdt-reveal-slider .slide{width:100%;top:0;position:absolute;pointer-events:none}.bdt-reveal-slider .slide--current{position:relative}.bdt-reveal-slider .slide--current .slide__img-wrap{cursor:default}.bdt-reveal-slider .slide--current .slide__img::after{content:"";background:rgba(57,71,72,0.27);position:absolute;top:0;right:0;width:100%;height:100%}.bdt-reveal-slider .slide--current .bdt-slide-content-wrap{position:absolute;top:50%;right:50%;transform:translate(50%, -50%)}.bdt-reveal-slider .slide--current.slide--visible .slide__img-wrap,.bdt-reveal-slider .slide--current.slide--visible .slide__title,.bdt-reveal-slider .slide--current.slide--visible .slide__subtitle,.bdt-reveal-slider .slide--current.slide--visible .bdt-description,.bdt-reveal-slider .slide--current.slide--visible .slide__number,.bdt-reveal-slider .slide--current.slide--visible .slide__explore{opacity:1}.bdt-reveal-slider .slide--current.slide--visible .slide__explore{pointer-events:auto}.bdt-reveal-slider .slide__img-wrap,.bdt-reveal-slider .slide__title,.bdt-reveal-slider .slide__subtitle,.bdt-reveal-slider .bdt-description,.bdt-reveal-slider .slide__side,.bdt-reveal-slider .slide__number,.bdt-reveal-slider .slide__explore{opacity:0;pointer-events:none}.bdt-reveal-slider .slide__img-wrap{width:100%;height:50vh;overflow:hidden;position:relative}.bdt-reveal-slider .slide--left,.bdt-reveal-slider .slide--right{z-index:10}.bdt-reveal-slider .slide--left .slide__img-wrap,.bdt-reveal-slider .slide--right .slide__img-wrap{opacity:1;width:10vw;pointer-events:auto;cursor:pointer}.bdt-reveal-slider .slide--right .slide__img-wrap{margin-right:auto}.bdt-reveal-slider .slide__img{width:100%;height:100%;right:0;top:0;background-size:cover;background-position:50% 50%;position:absolute;backface-visibility:hidden;pointer-events:none}.bdt-reveal-slider .slide__img-reveal{position:absolute;width:100%;height:100%;top:0;right:0;background:#fff;transform:translate3d(0, 100%, 0);pointer-events:none}.bdt-reveal-slider .slide__title{font-size:35px;margin-top:0;margin-bottom:5px;font-weight:700}.bdt-reveal-slider .slide__subtitle{margin-top:0;margin-bottom:26px;font-size:22px;text-transform:capitalize;font-weight:500}.bdt-reveal-slider .bdt-description{margin-top:0;margin-bottom:30px;font-size:16px;line-height:1.6;max-width:440px;color:#0d0e10;display:none}.bdt-reveal-slider .bdt-slide-content-wrap{display:block;text-align:right;pointer-events:none}.bdt-reveal-slider .slide__explore{display:inline-block;margin:0}.bdt-reveal-slider .slide__explore .slide__explore-inner{cursor:pointer;background:var(--color-slide-text-bg);color:#fff;padding:10px 15px;transition:all .3s ease}.bdt-reveal-slider .slide__explore .slide__explore-inner:hover{color:#fff;background:#f00}.bdt-reveal-slider .slide__category{color:#fff;font-size:12px;letter-spacing:5px;text-transform:uppercase;font-weight:400}@media screen and (min-width:768px){.bdt-reveal-slider .bdt-description{display:inherit}}@media screen and (min-width:53em){.bdt-reveal-slider .content{position:relative;display:flex;justify-content:center;align-items:center;margin:0 auto;min-height:100vh;text-align:right}.bdt-reveal-slider .content--fixed{position:absolute;z-index:10;top:0;right:0;display:grid;align-content:space-between;width:100%;max-width:none;min-height:0;height:100vh;padding:1rem 0;pointer-events:none;align-items:start;grid-template-columns:10% 80% 10%;grid-template-rows:100%;grid-template-areas:"links header github"}.bdt-reveal-slider .content--fixed a{pointer-events:auto}.bdt-reveal-slider .info{max-width:16rem;margin:0}.bdt-reveal-slider .slideshow{overflow:hidden;margin:0;height:100vh;display:grid;grid-template-columns:10% 50% 10%;grid-column-gap:15%;grid-template-rows:100%;grid-template-areas:"preview-left current-slide preview-right"}.bdt-reveal-slider .slide{color:var(--color-slide-alt)}.bdt-reveal-slider .slide--current::after{display:none}.bdt-reveal-slider .slide--right::after{bottom:80vh;right:auto;left:0}.bdt-reveal-slider .slide__img-wrap{height:100%;position:absolute}.bdt-reveal-slider .slide__img{background-position:50% 0}.bdt-reveal-slider .slide--visible .slide__img-wrap.slide--visible .slide__side,.bdt-reveal-slider .slide--visible .slide__title.slide--visible .slide__side,.bdt-reveal-slider .slide--current.slide--visible .slide__side,.bdt-reveal-slider .slide--visible .slide__img-wrap.slide--visible .bdt-description,.bdt-reveal-slider .slide--visible .slide__title.slide--visible .bdt-description,.bdt-reveal-slider .slide--current.slide--visible .bdt-description{opacity:1}.bdt-reveal-slider .slide--visible .slide__img-wrap{pointer-events:auto}.bdt-reveal-slider .slide--current,.bdt-reveal-slider .slide--left,.bdt-reveal-slider .slide--right{position:relative;pointer-events:auto}.bdt-reveal-slider .slide--current{grid-area:current-slide}.bdt-reveal-slider .slide--current .bdt-slide-content-wrap{display:flex;flex-direction:column;align-items:flex-end;max-width:400px;position:absolute;top:50%;transform:translateY(-50%);left:50%;right:unset;text-align:left}.bdt-reveal-slider .slide--left .slide__title,.bdt-reveal-slider .slide--right .slide__title{-webkit-writing-mode:vertical-rl;writing-mode:vertical-rl;transform:rotate(-180deg);position:absolute;font-size:1rem;left:0;top:80vh;text-align:left;color:var(--color-text);margin:1rem 0 0;font-weight:normal}.bdt-reveal-slider .slide--left .slide__img-wrap,.bdt-reveal-slider .slide--right .slide__img-wrap{height:50%;width:100%;top:20%;position:relative}.bdt-reveal-slider .slide--left .slide__img-wrap{top:30%}.bdt-reveal-slider .slide--left{border-left:1px solid var(--color-grid);grid-area:preview-left}.bdt-reveal-slider .slide--right{border-right:1px solid var(--color-grid);grid-area:preview-right}.bdt-reveal-slider .slide--right .slide__title{right:0;left:auto;top:70vh}.bdt-reveal-slider .slide__side{position:absolute;left:18px;white-space:nowrap;-webkit-writing-mode:vertical-rl;writing-mode:vertical-rl;transform:rotate(-180deg)}.bdt-reveal-slider .slide--current .slide__title,.bdt-reveal-slider .slide__subtitle{font-size:5vw;margin-bottom:20px;padding:10px 15px 20px;font-weight:normal;line-height:1;white-space:nowrap;position:relative;overflow:hidden;color:#fff;font-weight:700}.bdt-reveal-slider .slide--current .slide__title .slide__box,.bdt-reveal-slider .slide__subtitle .slide__box{position:absolute;width:100%;height:100%;top:0;right:0;background:var(--color-slide-text-bg)}.bdt-reveal-slider .slide__title-inner,.bdt-reveal-slider .slide__subtitle-inner{position:relative;display:inline-block}.bdt-reveal-slider .slide__subtitle{font-size:2.2vw;line-height:1.5}}
|
assets/css/ps-woocircle.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.bdt-elastic-slider{position:relative;overflow:hidden;width:100%;height:100vh;display:flex;align-items:center}.bdt-elastic-slider .bdt-elastic-slideshow{position:relative;width:100vw}.bdt-elastic-slider .bdt-elastic-slide-item{position:absolute;z-index:1000;top:0;left:0;right:0;visibility:hidden;pointer-events:none;display:-webkit-flex;display:flex;flex-direction:column-reverse;align-items:center;text-align:center}.bdt-elastic-slider .bdt-elastic-slide-item.slide--current{position:relative;visibility:visible}.bdt-elastic-slider .bdt-elastic-slide-item.slide--current.slide--open{z-index:1111}.bdt-elastic-slider .deco--circle{position:absolute;top:0;border-radius:50%;background:#f2f8ff}.bdt-elastic-slider .deco--circle-left{right:calc(100% - 140px)}.bdt-elastic-slider .deco--circle-right{left:calc(100% - 140px)}.bdt-elastic-slider .deco--circle,.bdt-elastic-slider .bdt-elastic-image-action__inner{width:450px;height:450px}.bdt-elastic-slider .bdt-elastic-image-action-btn{position:relative;width:100%}.bdt-elastic-slider .no-js .bdt-elastic-image-action-btn{display:none}.bdt-elastic-slider .bdt-elastic-image-action__inner{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 auto;pointer-events:auto}.bdt-elastic-slider .deco--expander{position:absolute;top:50%;left:50%;margin:-225px 0 0 -225px;border-radius:50%;background:#f2f8ff}.bdt-elastic-slider .bdt-elastic-slide-content{padding:30px}.bdt-elastic-slider .bdt-elastic-title-preview{font-size:40px;margin-top:0;margin-bottom:20px;text-transform:capitalize}.bdt-elastic-slider .bdt-elastic-title--main{font-size:50px;margin-top:0;margin-bottom:30px;color:#464653}.bdt-elastic-slider .slide--open .bdt-elastic-title--main{opacity:1}.bdt-elastic-slider .bdt-elastic-price{color:#38383e;font-size:17px;font-weight:700}.bdt-elastic-slider .bdt-elastic-price .price{display:inline-flex;align-items:center;grid-column-gap:15px}.bdt-elastic-slider .bdt-elastic-price .price ins{background:#f2f8ff;color:#2ab603;padding:5px 14px;text-decoration:none;border-radius:30px}.bdt-elastic-slider .bdt-elastic-price--large{font-size:20px;vertical-align:middle}.bdt-elastic-slider .bdt-elastic-price--large .price ins{background:#deebfb}.bdt-elastic-slider .bdt-elastic-img{position:relative;display:block;margin:0 auto}.bdt-elastic-slider .bdt-elastic-img-small{max-height:80%}.bdt-elastic-slider .bdt-elastic-img-large{height:50vh;max-height:400px}.bdt-elastic-slider .bdt-elastic-action{font-size:1.5em;margin:0;text-align:center;border:none;background:none}.bdt-elastic-slider .bdt-elastic-action:focus{outline:none}.bdt-elastic-slider .bdt-elastic-action--open{position:absolute;right:0;bottom:0;margin:0 40px 40px 0;padding:17px 19px;font-size:18px;color:#ffffff;border-radius:30px;background:#6cd84e;transition:transform .3s ease;transition-delay:.1s;cursor:pointer;box-shadow:0 0 0 6px #fff}.bdt-elastic-slider .bdt-elastic-action--open i{transform:rotate(-90deg);transition:transform .3s ease}.bdt-elastic-slider .bdt-elastic-action--open:hover{background:#fd6a2c;transform:scale(1.3)}.bdt-elastic-slider .bdt-elastic-action--open:hover i{transform:rotate(0)}.bdt-elastic-slider .slide--open .bdt-elastic-action--open{opacity:0;transition-delay:0s;transform:scale3d(.3, .3, 1)}.bdt-elastic-slider .bdt-elastic-action--close{position:fixed;z-index:9999;top:0;right:0;margin:40px;color:#262627;cursor:pointer;transition:transform .1s,opacity .1s,all .3s;border:0;background:#fff;font-size:16px;padding:12px 14px;border-radius:30px}.bdt-elastic-slider .bdt-elastic-action--close i{transform:rotate(-90deg);transition:transform .2s ease}.bdt-elastic-slider .bdt-elastic-action--close:focus,.bdt-elastic-slider .bdt-elastic-action--close:hover{color:#fff;background:#fd6a2c}.bdt-elastic-slider .bdt-elastic-action--close:focus i,.bdt-elastic-slider .bdt-elastic-action--close:hover i{transform:rotate(0)}.bdt-elastic-slider .slide--open~.bdt-elastic-action--close{opacity:1;transform:scale3d(1, 1, 1);transition-delay:.5s,.5s,0s;visibility:visible}.bdt-elastic-slider .bdt-elastic-action--close,.bdt-elastic-slider .slide--close~.bdt-elastic-action--close{opacity:0;transform:scale3d(.3, .3, 1);transition-delay:0s;visibility:hidden}.bdt-elastic-slider .bdt-elastic-modal-wrap{position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;opacity:0;background-color:#f2f8ff;transition:opacity .4s cubic-bezier(.17, .54, .69, 1.03)}.bdt-elastic-slider .bdt-elastic-modal-details{padding:30px;max-width:700px;margin:0}.bdt-elastic-slider .slide--open .bdt-elastic-modal-wrap{pointer-events:auto;opacity:1}.bdt-elastic-slider .bdt-elastic-content-scroller{position:fixed;height:100%;width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:0;position:relative}.bdt-elastic-slider .bdt-elastic-description{font-size:14px;margin-top:0;margin-bottom:45px;text-transform:capitalize;color:#535360;line-height:1.8}.bdt-elastic-slider .bdt-elastic-price-buy-btn{display:flex;align-items:center;justify-content:center;flex-direction:column}.bdt-elastic-slider .bdt-elastic-price-buy-btn .price{margin:0}.bdt-elastic-slider .bdt-elastic-button--buy{margin-top:45px}.bdt-elastic-slider .bdt-elastic-button--buy .cart{display:flex;flex-direction:row-reverse}.bdt-elastic-slider .bdt-elastic-button--buy .quantity input{color:#2B2D42;font-size:14px;width:60px;padding:13px 8px 10px 21px;font-weight:600;margin-left:20px;text-align:center;outline:none;border:0;transition:all .3s ease;background:#deebfb;border-radius:30px}.bdt-elastic-slider .bdt-elastic-button--buy .button{font-weight:600;margin:0;font-size:14px;padding:16px 35px;color:#f2f8ff;border:none;border-radius:30px;background:#6cd84e;margin-left:20px;cursor:pointer;transition:all .3s ease;text-transform:uppercase;position:relative;letter-spacing:2px;overflow:hidden;z-index:1}.bdt-elastic-slider .bdt-elastic-button--buy .button::before{content:'';position:absolute;transition:all 300ms ease;background-color:#fd6a2c;left:0;top:0;width:0;height:100%;z-index:-1}.bdt-elastic-slider .bdt-elastic-button--buy .button:hover::before{width:100%}.bdt-elastic-slider .navbutton{position:absolute;z-index:1;top:50%;left:50%;width:100px;padding:0;border:none;background:none;cursor:pointer}.bdt-elastic-slider .navbutton__line{transition:stroke .3s}.bdt-elastic-slider .navbutton:focus{outline:none}.bdt-elastic-slider .navbutton:hover .navbutton__line{stroke:#fd6a2c}.bdt-elastic-slider .navbutton--next{transform:translate3d(230px, -220px, 0)}.bdt-elastic-slider .navbutton--prev{transform:translate3d(-100%, 0, 0) translate3d(-210px, 60px, 0)}.bdt-elastic-slider .lockscroll{height:100vh}.bdt-elastic-slider .noscroll{overflow:hidden;height:100vh;position:fixed}.bdt-elastic-slider .noscroll .deco--expander{display:none}.bdt-elastic-slider .scrollable .bdt-elastic-content-scroller{position:relative}@media screen and (max-width:50em){.bdt-elastic-slider .deco--title{right:-50px;left:-50px}.bdt-elastic-slider .deco--circle,.bdt-elastic-slider .bdt-elastic-image-action__inner{width:260px;height:260px}.bdt-elastic-slider .deco--expander{margin:-130px 0 0 -130px}.bdt-elastic-slider .deco--circle-left{right:calc(100% - 50px)}.bdt-elastic-slider .deco--circle-right{left:calc(100% - 50px)}.bdt-elastic-slider .bdt-elastic-slideshow{margin-top:0}.bdt-elastic-slider .bdt-elastic-action--open{margin:0 15px 15px 0}.bdt-elastic-slider .bdt-elastic-img-large{margin:0 auto 2em}.bdt-elastic-slider .bdt-elastic-title--main{font-size:24px}.bdt-elastic-slider .bdt-elastic-description{font-size:14px}.bdt-elastic-slider .navbutton--next{transform:translate3d(70px, -140px, 0) scale3d(.5, .5, 1);z-index:1111}.bdt-elastic-slider .navbutton--prev{transform:translate3d(-50%, 0, 0) translate3d(-114px, -14px, 0) scale3d(.5, .5, 1);z-index:1111}}
|
assets/css/ps-woocircle.rtl.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.bdt-elastic-slider{position:relative;overflow:hidden;width:100%;height:100vh;display:flex;align-items:center}.bdt-elastic-slider .bdt-elastic-slideshow{position:relative;width:100vw}.bdt-elastic-slider .bdt-elastic-slide-item{position:absolute;z-index:1000;top:0;right:0;left:0;visibility:hidden;pointer-events:none;display:-webkit-flex;display:flex;flex-direction:column-reverse;align-items:center;text-align:center}.bdt-elastic-slider .bdt-elastic-slide-item.slide--current{position:relative;visibility:visible}.bdt-elastic-slider .bdt-elastic-slide-item.slide--current.slide--open{z-index:1111}.bdt-elastic-slider .deco--circle{position:absolute;top:0;border-radius:50%;background:#f2f8ff}.bdt-elastic-slider .deco--circle-left{left:calc(100% - 140px)}.bdt-elastic-slider .deco--circle-right{right:calc(100% - 140px)}.bdt-elastic-slider .deco--circle,.bdt-elastic-slider .bdt-elastic-image-action__inner{width:450px;height:450px}.bdt-elastic-slider .bdt-elastic-image-action-btn{position:relative;width:100%}.bdt-elastic-slider .no-js .bdt-elastic-image-action-btn{display:none}.bdt-elastic-slider .bdt-elastic-image-action__inner{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 auto;pointer-events:auto}.bdt-elastic-slider .deco--expander{position:absolute;top:50%;right:50%;margin:-225px -225px 0 0;border-radius:50%;background:#f2f8ff}.bdt-elastic-slider .bdt-elastic-slide-content{padding:30px}.bdt-elastic-slider .bdt-elastic-title-preview{font-size:40px;margin-top:0;margin-bottom:20px;text-transform:capitalize}.bdt-elastic-slider .bdt-elastic-title--main{font-size:50px;margin-top:0;margin-bottom:30px;color:#464653}.bdt-elastic-slider .slide--open .bdt-elastic-title--main{opacity:1}.bdt-elastic-slider .bdt-elastic-price{color:#38383e;font-size:17px;font-weight:700}.bdt-elastic-slider .bdt-elastic-price .price{display:inline-flex;align-items:center;grid-column-gap:15px}.bdt-elastic-slider .bdt-elastic-price .price ins{background:#f2f8ff;color:#2ab603;padding:5px 14px;text-decoration:none;border-radius:30px}.bdt-elastic-slider .bdt-elastic-price--large{font-size:20px;vertical-align:middle}.bdt-elastic-slider .bdt-elastic-price--large .price ins{background:#deebfb}.bdt-elastic-slider .bdt-elastic-img{position:relative;display:block;margin:0 auto}.bdt-elastic-slider .bdt-elastic-img-small{max-height:80%}.bdt-elastic-slider .bdt-elastic-img-large{height:50vh;max-height:400px}.bdt-elastic-slider .bdt-elastic-action{font-size:1.5em;margin:0;text-align:center;border:none;background:none}.bdt-elastic-slider .bdt-elastic-action:focus{outline:none}.bdt-elastic-slider .bdt-elastic-action--open{position:absolute;left:0;bottom:0;margin:0 0 40px 40px;padding:17px 19px;font-size:18px;color:#ffffff;border-radius:30px;background:#6cd84e;transition:transform .3s ease;transition-delay:.1s;cursor:pointer;box-shadow:0 0 0 6px #fff}.bdt-elastic-slider .bdt-elastic-action--open i{transform:rotate(90deg);transition:transform .3s ease}.bdt-elastic-slider .bdt-elastic-action--open:hover{background:#fd6a2c;transform:scale(1.3)}.bdt-elastic-slider .bdt-elastic-action--open:hover i{transform:rotate(0)}.bdt-elastic-slider .slide--open .bdt-elastic-action--open{opacity:0;transition-delay:0s;transform:scale3d(.3, .3, 1)}.bdt-elastic-slider .bdt-elastic-action--close{position:fixed;z-index:9999;top:0;left:0;margin:40px;color:#262627;cursor:pointer;transition:transform .1s,opacity .1s,all .3s;border:0;background:#fff;font-size:16px;padding:12px 14px;border-radius:30px}.bdt-elastic-slider .bdt-elastic-action--close i{transform:rotate(90deg);transition:transform .2s ease}.bdt-elastic-slider .bdt-elastic-action--close:focus,.bdt-elastic-slider .bdt-elastic-action--close:hover{color:#fff;background:#fd6a2c}.bdt-elastic-slider .bdt-elastic-action--close:focus i,.bdt-elastic-slider .bdt-elastic-action--close:hover i{transform:rotate(0)}.bdt-elastic-slider .slide--open~.bdt-elastic-action--close{opacity:1;transform:scale3d(1, 1, 1);transition-delay:.5s,.5s,0s;visibility:visible}.bdt-elastic-slider .bdt-elastic-action--close,.bdt-elastic-slider .slide--close~.bdt-elastic-action--close{opacity:0;transform:scale3d(.3, .3, 1);transition-delay:0s;visibility:hidden}.bdt-elastic-slider .bdt-elastic-modal-wrap{position:fixed;top:0;right:0;width:100vw;height:100vh;pointer-events:none;opacity:0;background-color:#f2f8ff;transition:opacity .4s cubic-bezier(.17, .54, .69, 1.03)}.bdt-elastic-slider .bdt-elastic-modal-details{padding:30px;max-width:700px;margin:0}.bdt-elastic-slider .slide--open .bdt-elastic-modal-wrap{pointer-events:auto;opacity:1}.bdt-elastic-slider .bdt-elastic-content-scroller{position:fixed;height:100%;width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:0;position:relative}.bdt-elastic-slider .bdt-elastic-description{font-size:14px;margin-top:0;margin-bottom:45px;text-transform:capitalize;color:#535360;line-height:1.8}.bdt-elastic-slider .bdt-elastic-price-buy-btn{display:flex;align-items:center;justify-content:center;flex-direction:column}.bdt-elastic-slider .bdt-elastic-price-buy-btn .price{margin:0}.bdt-elastic-slider .bdt-elastic-button--buy{margin-top:45px}.bdt-elastic-slider .bdt-elastic-button--buy .cart{display:flex;flex-direction:row-reverse}.bdt-elastic-slider .bdt-elastic-button--buy .quantity input{color:#2B2D42;font-size:14px;width:60px;padding:13px 21px 10px 8px;font-weight:600;margin-right:20px;text-align:center;outline:none;border:0;transition:all .3s ease;background:#deebfb;border-radius:30px}.bdt-elastic-slider .bdt-elastic-button--buy .button{font-weight:600;margin:0;font-size:14px;padding:16px 35px;color:#f2f8ff;border:none;border-radius:30px;background:#6cd84e;margin-right:20px;cursor:pointer;transition:all .3s ease;text-transform:uppercase;position:relative;letter-spacing:2px;overflow:hidden;z-index:1}.bdt-elastic-slider .bdt-elastic-button--buy .button::before{content:'';position:absolute;transition:all 300ms ease;background-color:#fd6a2c;right:0;top:0;width:0;height:100%;z-index:-1}.bdt-elastic-slider .bdt-elastic-button--buy .button:hover::before{width:100%}.bdt-elastic-slider .navbutton{position:absolute;z-index:1;top:50%;right:50%;width:100px;padding:0;border:none;background:none;cursor:pointer}.bdt-elastic-slider .navbutton__line{transition:stroke .3s}.bdt-elastic-slider .navbutton:focus{outline:none}.bdt-elastic-slider .navbutton:hover .navbutton__line{stroke:#fd6a2c}.bdt-elastic-slider .navbutton--next{transform:translate3d(-230px, -220px, 0)}.bdt-elastic-slider .navbutton--prev{transform:translate3d(100%, 0, 0) translate3d(210px, 60px, 0)}.bdt-elastic-slider .lockscroll{height:100vh}.bdt-elastic-slider .noscroll{overflow:hidden;height:100vh;position:fixed}.bdt-elastic-slider .noscroll .deco--expander{display:none}.bdt-elastic-slider .scrollable .bdt-elastic-content-scroller{position:relative}@media screen and (max-width:50em){.bdt-elastic-slider .deco--title{left:-50px;right:-50px}.bdt-elastic-slider .deco--circle,.bdt-elastic-slider .bdt-elastic-image-action__inner{width:260px;height:260px}.bdt-elastic-slider .deco--expander{margin:-130px -130px 0 0}.bdt-elastic-slider .deco--circle-left{left:calc(100% - 50px)}.bdt-elastic-slider .deco--circle-right{right:calc(100% - 50px)}.bdt-elastic-slider .bdt-elastic-slideshow{margin-top:0}.bdt-elastic-slider .bdt-elastic-action--open{margin:0 0 15px 15px}.bdt-elastic-slider .bdt-elastic-img-large{margin:0 auto 2em}.bdt-elastic-slider .bdt-elastic-title--main{font-size:24px}.bdt-elastic-slider .bdt-elastic-description{font-size:14px}.bdt-elastic-slider .navbutton--next{transform:translate3d(-70px, -140px, 0) scale3d(.5, .5, 1);z-index:1111}.bdt-elastic-slider .navbutton--prev{transform:translate3d(50%, 0, 0) translate3d(114px, -14px, 0) scale3d(.5, .5, 1);z-index:1111}}
|
assets/fonts/prime-slider-font.svg
CHANGED
@@ -111,6 +111,9 @@
|
|
111 |
<glyph unicode="" glyph-name="nixon" d="M424.96 446.976h-154.624c-5.12 0-8.192 4.096-8.192 8.192v0c0 5.12 4.096 8.192 8.192 8.192h154.624c5.12 0 8.192-4.096 8.192-8.192v0c0-4.096-4.096-8.192-8.192-8.192zM314.368 403.968h-44.032c-5.12 0-8.192 4.096-8.192 8.192v0c0 5.12 4.096 8.192 8.192 8.192h44.032c5.12 0 8.192-4.096 8.192-8.192v0c0-5.12-3.072-8.192-8.192-8.192zM262.144 539.136h47.104v-35.84h-47.104v35.84zM842.752 188.928h-660.48c-17.408 0-31.744 14.336-31.744 31.744v457.728c0 17.408 14.336 31.744 31.744 31.744h660.48c17.408 0 31.744-14.336 31.744-31.744v-457.728c0-17.408-14.336-31.744-31.744-31.744zM182.272 689.664c-6.144 0-11.264-5.12-11.264-11.264v-457.728c0-6.144 5.12-11.264 11.264-11.264h660.48c6.144 0 11.264 5.12 11.264 11.264v457.728c0 6.144-5.12 11.264-11.264 11.264h-660.48zM300.032 194.048c-2.048 0-5.12 1.024-6.144 2.048-4.096 4.096-5.12 10.24-1.024 14.336l184.32 211.968c2.048 2.048 4.096 3.072 7.168 3.072s5.12-1.024 7.168-3.072l86.016-76.8 276.48 269.312c4.096 4.096 10.24 4.096 14.336 0s4.096-10.24 0-14.336l-284.672-276.48c-4.096-4.096-10.24-4.096-13.312 0l-84.992 76.8-178.176-203.776c-2.048-2.048-5.12-3.072-7.168-3.072zM583.68 463.36c-30.72 0-55.296 24.576-55.296 55.296s24.576 55.296 55.296 55.296c30.72 0 55.296-24.576 55.296-55.296s-24.576-55.296-55.296-55.296zM583.68 554.496c-19.456 0-35.84-16.384-35.84-35.84s16.384-35.84 35.84-35.84c19.456 0 35.84 16.384 35.84 35.84s-16.384 35.84-35.84 35.84zM783.36 251.392c-2.048 0-5.12 1.024-6.144 2.048-4.096 4.096-5.12 10.24-1.024 14.336l13.312 15.36-12.288 12.288c-4.096 4.096-4.096 10.24 0 14.336s10.24 4.096 14.336 0l18.432-19.456c3.072-4.096 4.096-9.216 0-13.312l-18.432-21.504c-2.048-3.072-5.12-4.096-8.192-4.096zM742.4 251.392c-3.072 0-5.12 1.024-7.168 3.072l-18.432 21.504c-3.072 4.096-3.072 9.216 0 13.312l18.432 19.456c4.096 4.096 10.24 4.096 14.336 0s4.096-10.24 0-14.336l-12.288-12.288 13.312-15.36c4.096-4.096 3.072-10.24-1.024-14.336-3.072 0-5.12-1.024-7.168-1.024z" />
|
112 |
<glyph unicode="" glyph-name="paranoia" d="M842.752 185.856h-660.48c-17.408 0-31.744 14.336-31.744 31.744v457.728c0 17.408 14.336 31.744 31.744 31.744h660.48c17.408 0 31.744-14.336 31.744-31.744v-457.728c0-17.408-14.336-31.744-31.744-31.744zM182.272 686.592c-6.144 0-11.264-5.12-11.264-11.264v-457.728c0-6.144 5.12-11.264 11.264-11.264h660.48c6.144 0 11.264 5.12 11.264 11.264v457.728c0 6.144-5.12 11.264-11.264 11.264h-660.48zM373.76 283.136c-2.048 0-5.12 1.024-6.144 2.048-4.096 4.096-5.12 10.24-1.024 14.336l115.712 114.688c2.048 2.048 4.096 3.072 7.168 3.072s5.12-1.024 7.168-3.072l81.92-73.728 72.704 82.944c4.096 4.096 10.24 4.096 14.336 0s4.096-10.24 0-14.336l-80.896-87.040c-4.096-4.096-10.24-4.096-13.312 0l-80.896 72.704-109.568-107.52c-2.048-2.048-5.12-4.096-7.168-4.096zM561.152 446.976c-26.624 0-47.104 21.504-47.104 47.104s21.504 47.104 47.104 47.104 47.104-21.504 47.104-47.104c0-26.624-21.504-47.104-47.104-47.104zM561.152 523.776c-16.384 0-30.72-13.312-30.72-30.72 0-16.384 13.312-30.72 30.72-30.72 16.384 0 30.72 13.312 30.72 30.72s-14.336 30.72-30.72 30.72zM670.72 185.856h-311.296v271.36c0 84.992 69.632 154.624 155.648 154.624s155.648-69.632 155.648-154.624v-271.36zM379.904 206.336h270.336v250.88c0 74.752-60.416 134.144-135.168 134.144-73.728 0-135.168-60.416-135.168-134.144v-250.88zM743.424 419.328c-2.048 0-5.12 1.024-7.168 2.048-4.096 4.096-5.12 10.24-1.024 14.336l10.24 11.264-9.216 10.24c-4.096 4.096-4.096 10.24 0 14.336s10.24 4.096 14.336 0l16.384-16.384c4.096-4.096 4.096-10.24 0-13.312l-16.384-18.432c-2.048-3.072-4.096-4.096-7.168-4.096zM281.6 419.328c2.048 0 5.12 1.024 7.168 2.048 4.096 4.096 5.12 10.24 1.024 14.336l-10.24 11.264 9.216 10.24c4.096 4.096 4.096 10.24 0 14.336s-10.24 4.096-14.336 0l-16.384-16.384c-4.096-4.096-4.096-10.24 0-13.312l16.384-18.432c1.024-3.072 4.096-4.096 7.168-4.096z" />
|
113 |
<glyph unicode="" glyph-name="reveal" d="M232.448 316.928h-81.92c-6.144 0-10.24 4.096-10.24 10.24s4.096 10.24 10.24 10.24h81.92c3.072 0 5.12 2.048 5.12 5.12v209.92c0 3.072-2.048 5.12-5.12 5.12h-79.872c-6.144 0-10.24 4.096-10.24 10.24s4.096 10.24 10.24 10.24h79.872c14.336 0 25.6-11.264 25.6-25.6v-209.92c0-13.312-12.288-25.6-25.6-25.6zM874.496 316.928h-81.92c-14.336 0-25.6 11.264-25.6 25.6v209.92c0 14.336 11.264 25.6 25.6 25.6h79.872c6.144 0 10.24-4.096 10.24-10.24s-4.096-10.24-10.24-10.24h-79.872c-3.072 0-5.12-2.048-5.12-5.12v-209.92c0-3.072 2.048-5.12 5.12-5.12h81.92c6.144 0 10.24-4.096 10.24-10.24s-5.12-10.24-10.24-10.24zM667.648 255.488h-299.008c-13.312 0-24.576 11.264-24.576 24.576v112.64c0 4.096 3.072 8.192 7.168 10.24 4.096 1.024 9.216 0 11.264-4.096 24.576-33.792 51.2-51.2 76.8-52.224 32.768-1.024 56.32 25.6 56.32 26.624 51.2 70.656 98.304 93.184 139.264 65.536 8.192-4.096 23.552-13.312 35.84-22.528v199.68c0 2.048-2.048 4.096-4.096 4.096h-297.984c-2.048 0-4.096-2.048-4.096-4.096v-70.656c0-6.144-4.096-10.24-10.24-10.24s-10.24 4.096-10.24 10.24v70.656c0 13.312 11.264 24.576 24.576 24.576h297.984c13.312 0 24.576-11.264 24.576-24.576v-334.848c0-14.336-10.24-25.6-23.552-25.6zM364.544 365.056v-84.992c0-2.048 2.048-4.096 4.096-4.096h297.984c2.048 0 4.096 2.048 4.096 4.096v108.544c-4.096 6.144-24.576 20.48-46.080 32.768-30.72 20.48-68.608 0-112.64-61.44-2.048-2.048-29.696-34.816-73.728-33.792-24.576 1.024-49.152 14.336-73.728 38.912zM578.56 483.84c-27.648 0-50.176 22.528-50.176 50.176s22.528 50.176 50.176 50.176 50.176-22.528 50.176-50.176-22.528-50.176-50.176-50.176zM578.56 563.712c-16.384 0-29.696-13.312-29.696-29.696s13.312-29.696 29.696-29.696 29.696 13.312 29.696 29.696-13.312 29.696-29.696 29.696zM497.664 499.2h-175.104c-4.096 0-7.168 3.072-7.168 7.168s3.072 7.168 7.168 7.168h175.104c4.096 0 7.168-3.072 7.168-7.168s-3.072-7.168-7.168-7.168zM497.664 459.264h-150.528c-4.096 0-7.168 3.072-7.168 7.168s3.072 7.168 7.168 7.168h151.552c4.096 0 7.168-3.072 7.168-7.168s-4.096-7.168-8.192-7.168zM497.664 419.328h-81.92c-4.096 0-7.168 3.072-7.168 7.168s3.072 7.168 7.168 7.168h82.944c4.096 0 7.168-3.072 7.168-7.168s-4.096-7.168-8.192-7.168z" />
|
|
|
|
|
|
|
114 |
<glyph unicode="" glyph-name="tutorial" d="M384 608l320-192-320-192v384zM512-14.754c-9.674 0-18.83 4.376-24.904 11.906-37.65 46.66-144.478 98.848-231.096 98.848-83.564 0-159.858-30.212-199.096-78.848-8.52-10.558-22.77-14.596-35.558-10.078-12.792 4.518-21.346 16.61-21.346 30.174v672c0 7.312 2.504 14.404 7.096 20.094 51.094 63.322 146.468 102.658 248.904 102.658 93.278 0 197.908-46.594 256-97.208 58.094 50.614 162.724 97.208 256 97.208 102.436 0 197.804-39.336 248.9-102.658 4.592-5.69 7.1-12.782 7.1-20.094v-672c0-13.564-8.552-25.656-21.348-30.174-12.792-4.516-27.042-0.476-35.556 10.078-39.244 48.636-115.534 78.848-199.096 78.848-86.62 0-193.45-52.188-231.096-98.848-6.076-7.528-15.23-11.906-24.904-11.906zM256 160c93.278 0 197.908-46.594 256-97.208 58.092 50.614 162.722 97.208 256 97.208 71.714 0 139.972-19.286 192-52.578v589.898c-40.904 43.826-113.22 70.68-192 70.68-86.62 0-193.45-52.186-231.096-98.848-6.076-7.53-15.23-11.906-24.904-11.906s-18.83 4.376-24.904 11.906c-37.65 46.662-144.48 98.848-231.096 98.848-78.784 0-151.096-26.854-192-70.68v-589.898c52.022 33.292 120.282 52.578 192 52.578z" />
|
115 |
<glyph unicode="" glyph-name="preview" d="M96 488h570l-28 16h-542zM96 520h514l-28 16h-486zM96 552h458l-28 16h-430zM96 584h402l-28 16h-374zM96 456h626l-28 16h-598zM96 424h682l-28 16h-654zM96 392h738l-28 16h-710zM96 776h66l-28 16h-38zM96 376v-16h794l-28 16zM96 744h122l-28 16h-94zM96 712h178l-28 16h-150zM96 648h290l-28 16h-262zM96 680h234l-28 16h-206zM96 616h346l-28 16h-318zM0 896v-640h1024v640h-1024zM960 320h-896v512h896v-512zM672 192h-320l-32-128-64-64h512l-64 64z" />
|
116 |
</font></defs></svg>
|
111 |
<glyph unicode="" glyph-name="nixon" d="M424.96 446.976h-154.624c-5.12 0-8.192 4.096-8.192 8.192v0c0 5.12 4.096 8.192 8.192 8.192h154.624c5.12 0 8.192-4.096 8.192-8.192v0c0-4.096-4.096-8.192-8.192-8.192zM314.368 403.968h-44.032c-5.12 0-8.192 4.096-8.192 8.192v0c0 5.12 4.096 8.192 8.192 8.192h44.032c5.12 0 8.192-4.096 8.192-8.192v0c0-5.12-3.072-8.192-8.192-8.192zM262.144 539.136h47.104v-35.84h-47.104v35.84zM842.752 188.928h-660.48c-17.408 0-31.744 14.336-31.744 31.744v457.728c0 17.408 14.336 31.744 31.744 31.744h660.48c17.408 0 31.744-14.336 31.744-31.744v-457.728c0-17.408-14.336-31.744-31.744-31.744zM182.272 689.664c-6.144 0-11.264-5.12-11.264-11.264v-457.728c0-6.144 5.12-11.264 11.264-11.264h660.48c6.144 0 11.264 5.12 11.264 11.264v457.728c0 6.144-5.12 11.264-11.264 11.264h-660.48zM300.032 194.048c-2.048 0-5.12 1.024-6.144 2.048-4.096 4.096-5.12 10.24-1.024 14.336l184.32 211.968c2.048 2.048 4.096 3.072 7.168 3.072s5.12-1.024 7.168-3.072l86.016-76.8 276.48 269.312c4.096 4.096 10.24 4.096 14.336 0s4.096-10.24 0-14.336l-284.672-276.48c-4.096-4.096-10.24-4.096-13.312 0l-84.992 76.8-178.176-203.776c-2.048-2.048-5.12-3.072-7.168-3.072zM583.68 463.36c-30.72 0-55.296 24.576-55.296 55.296s24.576 55.296 55.296 55.296c30.72 0 55.296-24.576 55.296-55.296s-24.576-55.296-55.296-55.296zM583.68 554.496c-19.456 0-35.84-16.384-35.84-35.84s16.384-35.84 35.84-35.84c19.456 0 35.84 16.384 35.84 35.84s-16.384 35.84-35.84 35.84zM783.36 251.392c-2.048 0-5.12 1.024-6.144 2.048-4.096 4.096-5.12 10.24-1.024 14.336l13.312 15.36-12.288 12.288c-4.096 4.096-4.096 10.24 0 14.336s10.24 4.096 14.336 0l18.432-19.456c3.072-4.096 4.096-9.216 0-13.312l-18.432-21.504c-2.048-3.072-5.12-4.096-8.192-4.096zM742.4 251.392c-3.072 0-5.12 1.024-7.168 3.072l-18.432 21.504c-3.072 4.096-3.072 9.216 0 13.312l18.432 19.456c4.096 4.096 10.24 4.096 14.336 0s4.096-10.24 0-14.336l-12.288-12.288 13.312-15.36c4.096-4.096 3.072-10.24-1.024-14.336-3.072 0-5.12-1.024-7.168-1.024z" />
|
112 |
<glyph unicode="" glyph-name="paranoia" d="M842.752 185.856h-660.48c-17.408 0-31.744 14.336-31.744 31.744v457.728c0 17.408 14.336 31.744 31.744 31.744h660.48c17.408 0 31.744-14.336 31.744-31.744v-457.728c0-17.408-14.336-31.744-31.744-31.744zM182.272 686.592c-6.144 0-11.264-5.12-11.264-11.264v-457.728c0-6.144 5.12-11.264 11.264-11.264h660.48c6.144 0 11.264 5.12 11.264 11.264v457.728c0 6.144-5.12 11.264-11.264 11.264h-660.48zM373.76 283.136c-2.048 0-5.12 1.024-6.144 2.048-4.096 4.096-5.12 10.24-1.024 14.336l115.712 114.688c2.048 2.048 4.096 3.072 7.168 3.072s5.12-1.024 7.168-3.072l81.92-73.728 72.704 82.944c4.096 4.096 10.24 4.096 14.336 0s4.096-10.24 0-14.336l-80.896-87.040c-4.096-4.096-10.24-4.096-13.312 0l-80.896 72.704-109.568-107.52c-2.048-2.048-5.12-4.096-7.168-4.096zM561.152 446.976c-26.624 0-47.104 21.504-47.104 47.104s21.504 47.104 47.104 47.104 47.104-21.504 47.104-47.104c0-26.624-21.504-47.104-47.104-47.104zM561.152 523.776c-16.384 0-30.72-13.312-30.72-30.72 0-16.384 13.312-30.72 30.72-30.72 16.384 0 30.72 13.312 30.72 30.72s-14.336 30.72-30.72 30.72zM670.72 185.856h-311.296v271.36c0 84.992 69.632 154.624 155.648 154.624s155.648-69.632 155.648-154.624v-271.36zM379.904 206.336h270.336v250.88c0 74.752-60.416 134.144-135.168 134.144-73.728 0-135.168-60.416-135.168-134.144v-250.88zM743.424 419.328c-2.048 0-5.12 1.024-7.168 2.048-4.096 4.096-5.12 10.24-1.024 14.336l10.24 11.264-9.216 10.24c-4.096 4.096-4.096 10.24 0 14.336s10.24 4.096 14.336 0l16.384-16.384c4.096-4.096 4.096-10.24 0-13.312l-16.384-18.432c-2.048-3.072-4.096-4.096-7.168-4.096zM281.6 419.328c2.048 0 5.12 1.024 7.168 2.048 4.096 4.096 5.12 10.24 1.024 14.336l-10.24 11.264 9.216 10.24c4.096 4.096 4.096 10.24 0 14.336s-10.24 4.096-14.336 0l-16.384-16.384c-4.096-4.096-4.096-10.24 0-13.312l16.384-18.432c1.024-3.072 4.096-4.096 7.168-4.096z" />
|
113 |
<glyph unicode="" glyph-name="reveal" d="M232.448 316.928h-81.92c-6.144 0-10.24 4.096-10.24 10.24s4.096 10.24 10.24 10.24h81.92c3.072 0 5.12 2.048 5.12 5.12v209.92c0 3.072-2.048 5.12-5.12 5.12h-79.872c-6.144 0-10.24 4.096-10.24 10.24s4.096 10.24 10.24 10.24h79.872c14.336 0 25.6-11.264 25.6-25.6v-209.92c0-13.312-12.288-25.6-25.6-25.6zM874.496 316.928h-81.92c-14.336 0-25.6 11.264-25.6 25.6v209.92c0 14.336 11.264 25.6 25.6 25.6h79.872c6.144 0 10.24-4.096 10.24-10.24s-4.096-10.24-10.24-10.24h-79.872c-3.072 0-5.12-2.048-5.12-5.12v-209.92c0-3.072 2.048-5.12 5.12-5.12h81.92c6.144 0 10.24-4.096 10.24-10.24s-5.12-10.24-10.24-10.24zM667.648 255.488h-299.008c-13.312 0-24.576 11.264-24.576 24.576v112.64c0 4.096 3.072 8.192 7.168 10.24 4.096 1.024 9.216 0 11.264-4.096 24.576-33.792 51.2-51.2 76.8-52.224 32.768-1.024 56.32 25.6 56.32 26.624 51.2 70.656 98.304 93.184 139.264 65.536 8.192-4.096 23.552-13.312 35.84-22.528v199.68c0 2.048-2.048 4.096-4.096 4.096h-297.984c-2.048 0-4.096-2.048-4.096-4.096v-70.656c0-6.144-4.096-10.24-10.24-10.24s-10.24 4.096-10.24 10.24v70.656c0 13.312 11.264 24.576 24.576 24.576h297.984c13.312 0 24.576-11.264 24.576-24.576v-334.848c0-14.336-10.24-25.6-23.552-25.6zM364.544 365.056v-84.992c0-2.048 2.048-4.096 4.096-4.096h297.984c2.048 0 4.096 2.048 4.096 4.096v108.544c-4.096 6.144-24.576 20.48-46.080 32.768-30.72 20.48-68.608 0-112.64-61.44-2.048-2.048-29.696-34.816-73.728-33.792-24.576 1.024-49.152 14.336-73.728 38.912zM578.56 483.84c-27.648 0-50.176 22.528-50.176 50.176s22.528 50.176 50.176 50.176 50.176-22.528 50.176-50.176-22.528-50.176-50.176-50.176zM578.56 563.712c-16.384 0-29.696-13.312-29.696-29.696s13.312-29.696 29.696-29.696 29.696 13.312 29.696 29.696-13.312 29.696-29.696 29.696zM497.664 499.2h-175.104c-4.096 0-7.168 3.072-7.168 7.168s3.072 7.168 7.168 7.168h175.104c4.096 0 7.168-3.072 7.168-7.168s-3.072-7.168-7.168-7.168zM497.664 459.264h-150.528c-4.096 0-7.168 3.072-7.168 7.168s3.072 7.168 7.168 7.168h151.552c4.096 0 7.168-3.072 7.168-7.168s-4.096-7.168-8.192-7.168zM497.664 419.328h-81.92c-4.096 0-7.168 3.072-7.168 7.168s3.072 7.168 7.168 7.168h82.944c4.096 0 7.168-3.072 7.168-7.168s-4.096-7.168-8.192-7.168z" />
|
114 |
+
<glyph unicode="" glyph-name="foxico-slider" d="M278.528 314.88v0c-1.024 0-2.048 0-2.048 1.024v257.024c0 1.024 1.024 1.024 1.024 1.024v0c1.024 0 1.024-1.024 1.024-1.024v-257.024c1.024-1.024 1.024-1.024 0-1.024zM286.72 450.048c0-4.524-3.668-8.192-8.192-8.192s-8.192 3.668-8.192 8.192c0 4.524 3.668 8.192 8.192 8.192s8.192-3.668 8.192-8.192zM286.72 524.8c0-4.524-3.668-8.192-8.192-8.192s-8.192 3.668-8.192 8.192c0 4.524 3.668 8.192 8.192 8.192s8.192-3.668 8.192-8.192zM293.888 367.104c0-8.483-6.877-15.36-15.36-15.36s-15.36 6.877-15.36 15.36c0 8.483 6.877 15.36 15.36 15.36s15.36-6.877 15.36-15.36zM844.8 217.6h-666.624c-15.36 0-28.672 12.288-28.672 28.672v403.456c0 15.36 12.288 28.672 28.672 28.672h666.624c15.36 0 28.672-12.288 28.672-28.672v-404.48c0-15.36-13.312-27.648-28.672-27.648zM178.176 657.92c-4.096 0-8.192-3.072-8.192-8.192v-404.48c0-4.096 3.072-8.192 8.192-8.192h666.624c4.096 0 8.192 3.072 8.192 8.192v404.48c0 4.096-3.072 8.192-8.192 8.192h-666.624zM544.768 332.288h-128c-10.24 0-18.432 8.192-18.432 18.432v194.56c0 10.24 8.192 18.432 18.432 18.432h128c10.24 0 18.432-8.192 18.432-18.432v-194.56c0-11.264-8.192-18.432-18.432-18.432zM418.816 352.768h123.904v189.44h-123.904v-189.44zM415.744 393.728l-11.264 16.384 50.176 34.816c7.168 5.12 17.408 4.096 24.576-2.048l15.36-14.336 56.32 34.816 11.264-17.408-57.344-35.84c-7.168-5.12-17.408-4.096-23.552 2.048l-15.36 15.36-50.176-33.792zM492.544 470.528c-15.36 0-27.648 12.288-27.648 27.648s12.288 27.648 27.648 27.648 27.648-12.288 27.648-27.648-12.288-27.648-27.648-27.648zM492.544 506.368c-4.096 0-7.168-3.072-7.168-7.168s3.072-7.168 7.168-7.168 7.168 3.072 7.168 7.168c1.024 4.096-3.072 7.168-7.168 7.168zM711.68 352.768h-105.472c-8.192 0-14.336 6.144-14.336 14.336v159.744c0 8.192 6.144 14.336 14.336 14.336h105.472c8.192 0 14.336-6.144 14.336-14.336v-159.744c0-8.192-6.144-14.336-14.336-14.336zM608.256 369.152h101.376v155.648h-101.376v-155.648zM606.208 402.944l-10.24 14.336 40.96 28.672c6.144 4.096 14.336 3.072 19.456-1.024l12.288-11.264 46.080 28.672 9.216-14.336-46.080-30.72c-6.144-4.096-14.336-3.072-19.456 2.048l-12.288 11.264-39.936-27.648zM668.672 466.432c-12.288 0-22.528 10.24-22.528 22.528s10.24 22.528 22.528 22.528c12.288 0 22.528-10.24 22.528-22.528s-9.216-22.528-22.528-22.528zM668.672 496.128c-3.072 0-6.144-3.072-6.144-6.144s3.072-6.144 6.144-6.144c3.072 0 6.144 3.072 6.144 6.144s-3.072 6.144-6.144 6.144zM771.072 524.8h80.896v16.384h-82.944c-8.192 0-14.336-6.144-14.336-15.36v-159.744c0-8.192 6.144-15.36 14.336-15.36h82.944v17.408h-80.896v156.672zM852.992 444.928v-19.456l-11.264-8.192c-6.144-4.096-14.336-3.072-19.456 2.048l-12.288 11.264-40.96-27.648-9.216 14.336 40.96 28.672c6.144 4.096 14.336 4.096 19.456-1.024l12.288-11.264 20.48 11.264zM832.512 512.512c-12.288 0-22.528-10.24-22.528-22.528s10.24-22.528 22.528-22.528c9.216 0 16.384 5.12 20.48 12.288v21.504c-4.096 6.144-11.264 11.264-20.48 11.264zM832.512 482.816c-3.072 0-6.144 3.072-6.144 6.144s3.072 6.144 6.144 6.144c3.072 0 6.144-3.072 6.144-6.144s-3.072-6.144-6.144-6.144z" />
|
115 |
+
<glyph unicode="" glyph-name="woocircle" d="M516.096 676.352c-126.976 0-231.424-103.424-231.424-230.4s104.448-231.424 231.424-231.424c35.84 0 69.632 8.192 99.328 22.528 6.144 3.072 12.288 6.144 18.432 10.24-5.12 4.096-9.216 10.24-11.264 17.408-6.144-3.072-12.288-7.168-18.432-10.24-26.624-12.288-57.344-19.456-88.064-19.456-115.712 0-210.944 94.208-210.944 209.92s94.208 209.92 210.944 209.92c115.712 0 209.92-94.208 209.92-209.92 0-46.080-14.336-88.064-39.936-122.88-4.096-5.12-8.192-11.264-13.312-16.384 6.144-3.072 11.264-8.192 14.336-14.336 5.12 5.12 9.216 11.264 13.312 16.384 28.672 37.888 45.056 84.992 45.056 136.192 2.048 129.024-102.4 232.448-229.376 232.448zM252.928 176.64l-80.896 60.416h163.84v-20.48h-101.376l30.72-22.528zM771.072 764.416l80.896-59.392h-162.816v20.48h101.376l-31.744 22.528zM842.752 410.112c-3.072 0-5.12 1.024-7.168 3.072-4.096 4.096-3.072 10.24 1.024 14.336l18.432 17.408-20.48 20.48c-4.096 4.096-4.096 10.24 0 14.336s10.24 4.096 14.336 0l27.648-27.648c2.048-2.048 3.072-5.12 3.072-7.168 0-3.072-1.024-5.12-3.072-7.168l-26.624-24.576c-2.048-2.048-4.096-3.072-7.168-3.072zM187.392 413.184c-2.048 0-5.12 1.024-7.168 3.072l-26.624 24.576c-2.048 2.048-3.072 4.096-3.072 7.168s1.024 5.12 3.072 7.168l27.648 27.648c4.096 4.096 10.24 4.096 14.336 0s4.096-10.24 0-14.336l-20.48-20.48 18.432-17.408c4.096-4.096 4.096-10.24 1.024-14.336-1.024-2.048-4.096-3.072-7.168-3.072zM702.464 309.76c-4.096 5.12-9.216 10.24-15.36 14.336-8.192 5.12-18.432 8.192-29.696 8.192-30.72 0-56.32-25.6-56.32-56.32 0-7.168 1.024-14.336 4.096-20.48 2.048-6.144 6.144-12.288 11.264-17.408 10.24-11.264 25.6-18.432 41.984-18.432 30.72 0 56.32 25.6 56.32 56.32-1.024 12.288-5.12 23.552-12.288 33.792zM657.408 239.104c-8.192 0-16.384 3.072-22.528 8.192-5.12 4.096-9.216 10.24-11.264 17.408-1.024 3.072-2.048 7.168-2.048 10.24 0 19.456 16.384 35.84 35.84 35.84 6.144 0 11.264-1.024 16.384-4.096 6.144-3.072 11.264-8.192 14.336-14.336 3.072-5.12 4.096-11.264 4.096-17.408 1.024-19.456-15.36-35.84-34.816-35.84zM507.904 506.368c-26.624 0-48.128 21.504-48.128 48.128s21.504 48.128 48.128 48.128c26.624 0 48.128-21.504 48.128-48.128s-21.504-48.128-48.128-48.128zM507.904 582.144c-15.36 0-27.648-12.288-27.648-27.648s12.288-27.648 27.648-27.648 27.648 12.288 27.648 27.648-13.312 27.648-27.648 27.648zM315.392 350.72c-3.072 0-7.168 2.048-8.192 5.12-3.072 5.12-2.048 11.264 3.072 14.336l150.528 96.256c4.096 2.048 8.192 2.048 12.288-1.024l84.992-66.56 152.576 142.336c4.096 4.096 10.24 4.096 14.336 0s4.096-10.24 0-14.336l-159.744-148.48c-4.096-3.072-9.216-4.096-13.312-1.024l-86.016 67.584-145.408-93.184c-2.048-1.024-4.096-1.024-5.12-1.024zM676.864 280.064h-15.36v14.336c0 3.072-2.048 5.12-5.12 5.12s-5.12-2.048-5.12-5.12v-15.36h-15.36c-3.072 0-5.12-2.048-5.12-5.12s2.048-5.12 5.12-5.12h15.36v-15.36c0-3.072 2.048-5.12 5.12-5.12s5.12 2.048 5.12 5.12v15.36h15.36c3.072 0 5.12 2.048 5.12 5.12s-2.048 6.144-5.12 6.144zM605.184 139.776h-186.368c-6.144 0-10.24 4.096-10.24 10.24s4.096 10.24 10.24 10.24h186.368c6.144 0 10.24-4.096 10.24-10.24s-4.096-10.24-10.24-10.24zM544.768 92.672h-64.512c-6.144 0-10.24 4.096-10.24 10.24s4.096 10.24 10.24 10.24h64.512c6.144 0 10.24-4.096 10.24-10.24s-5.12-10.24-10.24-10.24z" />
|
116 |
+
<glyph unicode="" glyph-name="diagonal" d="M562.176 299.52h-134.144c-3.072 0-6.144 2.048-6.144 6.144v3.072c0 3.072 2.048 6.144 6.144 6.144h134.144c3.072 0 6.144-2.048 6.144-6.144v-3.072c-1.024-3.072-3.072-6.144-6.144-6.144zM468.992 271.872h-40.96c-3.072 0-6.144 2.048-6.144 6.144v3.072c0 3.072 2.048 6.144 6.144 6.144h40.96c3.072 0 6.144-2.048 6.144-6.144v-3.072c-1.024-4.096-3.072-6.144-6.144-6.144zM456.704 325.12h-28.672c-3.072 0-5.12 2.048-5.12 5.12v19.456c0 3.072 2.048 5.12 5.12 5.12h28.672c3.072 0 5.12-2.048 5.12-5.12v-19.456c1.024-3.072-2.048-5.12-5.12-5.12zM586.752 643.584h-185.344c-14.336 0-26.624-12.288-26.624-26.624v-350.208c0-14.336 12.288-26.624 26.624-26.624h185.344c14.336 0 26.624 12.288 26.624 26.624v350.208c0 14.336-12.288 26.624-26.624 26.624zM596.992 267.776c0-5.12-4.096-10.24-10.24-10.24h-185.344c-5.12 0-10.24 4.096-10.24 10.24v349.184c0 5.12 4.096 10.24 10.24 10.24h185.344c5.12 0 10.24-4.096 10.24-10.24v-349.184zM619.52 673.28h-185.344c-14.336 0-26.624-12.288-26.624-26.624v-19.456h16.384v19.456c0 5.12 4.096 10.24 10.24 10.24h185.344c5.12 0 10.24-4.096 10.24-10.24v-350.208c0-5.12-4.096-10.24-10.24-10.24h-22.528v-16.384h22.528c14.336 0 26.624 12.288 26.624 26.624v350.208c0 14.336-12.288 26.624-26.624 26.624zM510.976 474.624c-22.528 0-40.96 18.432-40.96 40.96s18.432 40.96 40.96 40.96c22.528 0 40.96-18.432 40.96-40.96 1.024-22.528-17.408-40.96-40.96-40.96zM510.976 544.256c-15.36 0-27.648-12.288-27.648-27.648s12.288-27.648 27.648-27.648c15.36 0 27.648 12.288 27.648 27.648s-12.288 27.648-27.648 27.648zM391.168 359.936c-3.072 0-5.12 1.024-7.168 3.072-3.072 4.096-2.048 9.216 2.048 11.264l98.304 69.632c3.072 2.048 8.192 2.048 10.24-1.024l24.576-23.552 79.872 68.608c3.072 3.072 9.216 3.072 12.288-1.024 3.072-3.072 3.072-9.216-1.024-12.288l-84.992-72.704c-3.072-3.072-8.192-3.072-11.264 0l-25.6 25.6-93.184-66.56c-1.024-1.024-3.072-1.024-4.096-1.024zM237.568 706.048c-14.336 0-25.6 11.264-25.6 25.6s11.264 25.6 25.6 25.6c14.336 0 25.6-11.264 25.6-25.6s-11.264-25.6-25.6-25.6zM237.568 749.056c-9.216 0-17.408-8.192-17.408-17.408s8.192-17.408 17.408-17.408 17.408 8.192 17.408 17.408-8.192 17.408-17.408 17.408zM282.624 556.544h-115.712c-9.216 0-16.384 7.168-16.384 16.384v220.16c0 9.216 7.168 16.384 16.384 16.384h116.736c9.216 0 16.384-7.168 16.384-16.384v-219.136c0-10.24-8.192-17.408-17.408-17.408zM166.912 799.232c-3.072 0-6.144-3.072-6.144-6.144v-219.136c0-3.072 3.072-6.144 6.144-6.144h116.736c3.072 0 6.144 3.072 6.144 6.144v219.136c0 3.072-3.072 6.144-6.144 6.144h-116.736zM159.744 631.296c-2.048 0-3.072 1.024-4.096 2.048-2.048 2.048-1.024 6.144 1.024 7.168l62.464 44.032c2.048 1.024 5.12 1.024 7.168 0l15.36-14.336 50.176 43.008c2.048 2.048 5.12 2.048 7.168-1.024 2.048-2.048 2.048-5.12-1.024-7.168l-53.248-46.080c-2.048-2.048-5.12-2.048-7.168 0l-16.384 14.336-58.368-40.96c-1.024-1.024-2.048-1.024-3.072-1.024zM812.032 235.008c-14.336 0-25.6 11.264-25.6 25.6s11.264 25.6 25.6 25.6c14.336 0 25.6-11.264 25.6-25.6 0-13.312-11.264-25.6-25.6-25.6zM812.032 279.040c-9.216 0-17.408-8.192-17.408-17.408s8.192-17.408 17.408-17.408 17.408 8.192 17.408 17.408-8.192 17.408-17.408 17.408zM858.112 85.504h-116.736c-9.216 0-16.384 7.168-16.384 16.384v220.16c0 9.216 7.168 16.384 16.384 16.384h116.736c9.216 0 16.384-7.168 16.384-16.384v-219.136c0-10.24-7.168-17.408-16.384-17.408zM741.376 328.192c-3.072 0-6.144-3.072-6.144-6.144v-219.136c0-3.072 3.072-6.144 6.144-6.144h116.736c3.072 0 6.144 3.072 6.144 6.144v219.136c0 3.072-3.072 6.144-6.144 6.144h-116.736zM734.208 160.256c-2.048 0-3.072 1.024-4.096 2.048-2.048 2.048-1.024 6.144 1.024 7.168l62.464 44.032c2.048 1.024 5.12 1.024 7.168 0l15.36-14.336 50.176 43.008c2.048 2.048 5.12 2.048 7.168-1.024 2.048-2.048 2.048-5.12-1.024-7.168l-53.248-46.080c-2.048-2.048-5.12-2.048-7.168 0l-16.384 14.336-58.368-40.96c-1.024-1.024-2.048-1.024-3.072-1.024zM402.432 764.416c3.072 0 5.12 2.048 5.12 5.12v19.456l78.848-62.464c2.048-2.048 6.144-1.024 7.168 1.024 2.048 2.048 1.024 6.144-1.024 7.168l-76.8 61.44h21.504c3.072 0 5.12 2.048 5.12 5.12s-2.048 5.12-5.12 5.12v0h-34.816c-3.072 0-5.12-2.048-5.12-5.12v-31.744c0-3.072 2.048-5.12 5.12-5.12zM611.328 128.512c-3.072 0-5.12-2.048-5.12-5.12v-19.456l-78.848 62.464c-2.048 2.048-6.144 1.024-7.168-1.024-2.048-2.048-1.024-6.144 1.024-7.168l76.8-61.44h-21.504c-3.072 0-5.12-2.048-5.12-5.12s2.048-5.12 5.12-5.12v0h34.816c3.072 0 5.12 2.048 5.12 5.12v31.744c0 2.048-2.048 5.12-5.12 5.12z" />
|
117 |
<glyph unicode="" glyph-name="tutorial" d="M384 608l320-192-320-192v384zM512-14.754c-9.674 0-18.83 4.376-24.904 11.906-37.65 46.66-144.478 98.848-231.096 98.848-83.564 0-159.858-30.212-199.096-78.848-8.52-10.558-22.77-14.596-35.558-10.078-12.792 4.518-21.346 16.61-21.346 30.174v672c0 7.312 2.504 14.404 7.096 20.094 51.094 63.322 146.468 102.658 248.904 102.658 93.278 0 197.908-46.594 256-97.208 58.094 50.614 162.724 97.208 256 97.208 102.436 0 197.804-39.336 248.9-102.658 4.592-5.69 7.1-12.782 7.1-20.094v-672c0-13.564-8.552-25.656-21.348-30.174-12.792-4.516-27.042-0.476-35.556 10.078-39.244 48.636-115.534 78.848-199.096 78.848-86.62 0-193.45-52.188-231.096-98.848-6.076-7.528-15.23-11.906-24.904-11.906zM256 160c93.278 0 197.908-46.594 256-97.208 58.092 50.614 162.722 97.208 256 97.208 71.714 0 139.972-19.286 192-52.578v589.898c-40.904 43.826-113.22 70.68-192 70.68-86.62 0-193.45-52.186-231.096-98.848-6.076-7.53-15.23-11.906-24.904-11.906s-18.83 4.376-24.904 11.906c-37.65 46.662-144.48 98.848-231.096 98.848-78.784 0-151.096-26.854-192-70.68v-589.898c52.022 33.292 120.282 52.578 192 52.578z" />
|
118 |
<glyph unicode="" glyph-name="preview" d="M96 488h570l-28 16h-542zM96 520h514l-28 16h-486zM96 552h458l-28 16h-430zM96 584h402l-28 16h-374zM96 456h626l-28 16h-598zM96 424h682l-28 16h-654zM96 392h738l-28 16h-710zM96 776h66l-28 16h-38zM96 376v-16h794l-28 16zM96 744h122l-28 16h-94zM96 712h178l-28 16h-150zM96 648h290l-28 16h-262zM96 680h234l-28 16h-206zM96 616h346l-28 16h-318zM0 896v-640h1024v640h-1024zM960 320h-896v512h896v-512zM672 192h-320l-32-128-64-64h512l-64 64z" />
|
119 |
</font></defs></svg>
|
assets/fonts/prime-slider-font.ttf
CHANGED
Binary file
|
assets/fonts/prime-slider-font.woff
CHANGED
Binary file
|
assets/fonts/prime-slider-font.woff2
CHANGED
Binary file
|
assets/js/widgets/ps-woocircle.js
ADDED
@@ -0,0 +1,542 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function ($, elementor) {
|
2 |
+
|
3 |
+
'use strict';
|
4 |
+
|
5 |
+
var widgetWooCircle = function ($scope, $) {
|
6 |
+
var $widgetWooCircle = $scope.find('.bdt-elastic-slideshow'),
|
7 |
+
$settings = $widgetWooCircle.data('settings');
|
8 |
+
if (!$widgetWooCircle.length) {
|
9 |
+
return;
|
10 |
+
}
|
11 |
+
|
12 |
+
(function(window) {
|
13 |
+
|
14 |
+
// 'use strict';
|
15 |
+
|
16 |
+
var bodyEl = document.body,
|
17 |
+
docElem = window.document.documentElement,
|
18 |
+
// http://stackoverflow.com/a/1147768
|
19 |
+
docWidth = Math.max(bodyEl.scrollWidth, bodyEl.offsetWidth, docElem.clientWidth, docElem.scrollWidth, docElem.offsetWidth),
|
20 |
+
docHeight = Math.max(bodyEl.scrollHeight, bodyEl.offsetHeight, docElem.clientHeight, docElem.scrollHeight, docElem.offsetHeight);
|
21 |
+
|
22 |
+
function scrollY() {
|
23 |
+
return window.pageYOffset || docElem.scrollTop;
|
24 |
+
}
|
25 |
+
|
26 |
+
function extend( a, b ) {
|
27 |
+
for( var key in b ) {
|
28 |
+
if( b.hasOwnProperty( key ) ) {
|
29 |
+
a[key] = b[key];
|
30 |
+
}
|
31 |
+
}
|
32 |
+
return a;
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Circle Slideshow
|
37 |
+
*/
|
38 |
+
function CircleSlideshow(el, options) {
|
39 |
+
this.el = el;
|
40 |
+
this.options = extend( {}, this.options );
|
41 |
+
extend( this.options, options );
|
42 |
+
|
43 |
+
// items
|
44 |
+
this.items = [].slice.call(this.el.querySelectorAll('.bdt-elastic-slide-item'));
|
45 |
+
// total items
|
46 |
+
this.itemsTotal = this.items.length;
|
47 |
+
if( this.itemsTotal < 2 ) return;
|
48 |
+
|
49 |
+
// content close control
|
50 |
+
this.closeCtrl = this.el.querySelector('.bdt-elastic-action--close');
|
51 |
+
// index of current slide
|
52 |
+
this.current = 0;
|
53 |
+
// all items are closed initially
|
54 |
+
this.isClosed = true;
|
55 |
+
|
56 |
+
this._init();
|
57 |
+
}
|
58 |
+
|
59 |
+
CircleSlideshow.prototype.options = {};
|
60 |
+
|
61 |
+
CircleSlideshow.prototype._init = function() {
|
62 |
+
// add navigation ctrls and left & right circles to the DOM
|
63 |
+
this.navLeftCtrl = document.createElement('button');
|
64 |
+
this.navLeftCtrl.className = 'navbutton navbutton--next';
|
65 |
+
this.navLeftCtrl.setAttribute('aria-label', 'Next item');
|
66 |
+
this.navLeftCtrl.innerHTML = '<svg width="100px" height="30px" viewBox="0 0 100 30"><polyline class="navbutton__line" fill="none" stroke="#6CD84E" stroke-width="5" points="69.821,3.795 92.232,26.205 0,26.205"/></svg>';
|
67 |
+
|
68 |
+
this.navRightCtrl = document.createElement('button');
|
69 |
+
this.navRightCtrl.className = 'navbutton navbutton--prev';
|
70 |
+
this.navRightCtrl.setAttribute('aria-label', 'Previous item');
|
71 |
+
this.navRightCtrl.innerHTML = '<svg width="100px" height="30px" viewBox="0 0 100 30"><polyline class="navbutton__line" fill="none" stroke="#6CD84E" stroke-width="5" points="30.179,26.205 7.768,3.795 100,3.795"/></svg>';
|
72 |
+
|
73 |
+
this.el.insertBefore(this.navLeftCtrl, this.el.firstChild);
|
74 |
+
this.el.insertBefore(this.navRightCtrl, this.el.firstChild);
|
75 |
+
|
76 |
+
var leftCircle = document.createElement('div'), rightCircle = document.createElement('div');
|
77 |
+
leftCircle.className = 'deco deco--circle deco--circle-left';
|
78 |
+
rightCircle.className = 'deco deco--circle deco--circle-right';
|
79 |
+
|
80 |
+
this.el.insertBefore(leftCircle, this.el.firstChild);
|
81 |
+
this.el.insertBefore(rightCircle, this.el.firstChild);
|
82 |
+
|
83 |
+
this.circles = {left: leftCircle, right: rightCircle};
|
84 |
+
dynamics.css(this.circles.left, {scale: 0.8});
|
85 |
+
dynamics.css(this.circles.right, {scale: 0.8});
|
86 |
+
|
87 |
+
// add the expander element per slide (.deco--expander)
|
88 |
+
this.items.forEach(function(item) {
|
89 |
+
var expanderEl = document.createElement('div');
|
90 |
+
expanderEl.className = 'deco deco--circle deco--expander';
|
91 |
+
|
92 |
+
var slideEl = item.querySelector('.bdt-elastic-image-action-btn');
|
93 |
+
slideEl.insertBefore(expanderEl, slideEl.firstChild);
|
94 |
+
});
|
95 |
+
|
96 |
+
// position current item:
|
97 |
+
classie.add(this.items[this.current], 'slide--current');
|
98 |
+
// event binding
|
99 |
+
this._initEvents();
|
100 |
+
};
|
101 |
+
|
102 |
+
CircleSlideshow.prototype._initEvents = function() {
|
103 |
+
var self = this;
|
104 |
+
|
105 |
+
// slideshow navigation
|
106 |
+
this.navRightCtrl.addEventListener('click', function() { self._navigate('left'); });
|
107 |
+
this.navLeftCtrl.addEventListener('click', function() { self._navigate('right'); });
|
108 |
+
|
109 |
+
// opening items
|
110 |
+
this.items.forEach(function(item) {
|
111 |
+
item.querySelector('.bdt-elastic-action--open').addEventListener('click', function(ev) {
|
112 |
+
self._openContent(item);
|
113 |
+
ev.target.blur();
|
114 |
+
});
|
115 |
+
});
|
116 |
+
|
117 |
+
// closing items
|
118 |
+
this.closeCtrl.addEventListener('click', function() { self._closeContent(); });
|
119 |
+
|
120 |
+
// keyboard navigation events
|
121 |
+
document.addEventListener('keydown', function(ev) {
|
122 |
+
var keyCode = ev.keyCode || ev.which;
|
123 |
+
switch (keyCode) {
|
124 |
+
case 37:
|
125 |
+
self._navigate('left');
|
126 |
+
break;
|
127 |
+
case 39:
|
128 |
+
self._navigate('right');
|
129 |
+
break;
|
130 |
+
case 13: // enter
|
131 |
+
if( self.isExpanded ) return;
|
132 |
+
self._openContent(self.items[self.current]);
|
133 |
+
break;
|
134 |
+
case 27: // esc
|
135 |
+
if( self.isClosed ) return;
|
136 |
+
self._closeContent();
|
137 |
+
break;
|
138 |
+
}
|
139 |
+
});
|
140 |
+
|
141 |
+
// swipe navigation
|
142 |
+
// from http://stackoverflow.com/a/23230280
|
143 |
+
this.el.addEventListener('touchstart', handleTouchStart, false);
|
144 |
+
this.el.addEventListener('touchmove', handleTouchMove, false);
|
145 |
+
var xDown = null;
|
146 |
+
var yDown = null;
|
147 |
+
function handleTouchStart(evt) {
|
148 |
+
xDown = evt.touches[0].clientX;
|
149 |
+
yDown = evt.touches[0].clientY;
|
150 |
+
};
|
151 |
+
function handleTouchMove(evt) {
|
152 |
+
if ( ! xDown || ! yDown ) {
|
153 |
+
return;
|
154 |
+
}
|
155 |
+
|
156 |
+
var xUp = evt.touches[0].clientX;
|
157 |
+
var yUp = evt.touches[0].clientY;
|
158 |
+
|
159 |
+
var xDiff = xDown - xUp;
|
160 |
+
var yDiff = yDown - yUp;
|
161 |
+
|
162 |
+
if ( Math.abs( xDiff ) > Math.abs( yDiff ) ) {/*most significant*/
|
163 |
+
if ( xDiff > 0 ) {
|
164 |
+
/* left swipe */
|
165 |
+
if( !self.isExpanded ) {
|
166 |
+
self._navigate('right');
|
167 |
+
}
|
168 |
+
} else {
|
169 |
+
/* right swipe */
|
170 |
+
if( !self.isExpanded ) {
|
171 |
+
self._navigate('left');
|
172 |
+
}
|
173 |
+
}
|
174 |
+
}
|
175 |
+
/* reset values */
|
176 |
+
xDown = null;
|
177 |
+
yDown = null;
|
178 |
+
};
|
179 |
+
};
|
180 |
+
|
181 |
+
CircleSlideshow.prototype._navigate = function(dir) {
|
182 |
+
if( this.isExpanded ) {
|
183 |
+
return false;
|
184 |
+
}
|
185 |
+
|
186 |
+
this._moveCircles(dir);
|
187 |
+
|
188 |
+
var self = this,
|
189 |
+
itemCurrent = this.items[this.current],
|
190 |
+
currentEl = itemCurrent.querySelector('.bdt-elastic-image-action-btn'),
|
191 |
+
currentTitleEl = itemCurrent.querySelector('.bdt-elastic-slide-content');
|
192 |
+
|
193 |
+
// update new current value
|
194 |
+
if( dir === 'right' ) {
|
195 |
+
this.current = this.current < this.itemsTotal-1 ? this.current + 1 : 0;
|
196 |
+
}
|
197 |
+
else {
|
198 |
+
this.current = this.current > 0 ? this.current - 1 : this.itemsTotal-1;
|
199 |
+
}
|
200 |
+
|
201 |
+
var itemNext = this.items[this.current],
|
202 |
+
nextEl = itemNext.querySelector('.bdt-elastic-image-action-btn'),
|
203 |
+
nextTitleEl = itemNext.querySelector('.bdt-elastic-slide-content');
|
204 |
+
|
205 |
+
// animate the current element out
|
206 |
+
dynamics.animate(currentEl,
|
207 |
+
{
|
208 |
+
translateX: dir === 'right' ? -1*currentEl.offsetWidth : currentEl.offsetWidth, scale: 0.7
|
209 |
+
},
|
210 |
+
{
|
211 |
+
type: dynamics.spring, duration: 2000, friction: 600,
|
212 |
+
complete: function() {
|
213 |
+
dynamics.css(itemCurrent, { visibility: 'hidden' });
|
214 |
+
}
|
215 |
+
}
|
216 |
+
);
|
217 |
+
|
218 |
+
// animate the current title out
|
219 |
+
dynamics.animate(currentTitleEl,
|
220 |
+
{
|
221 |
+
translateX: dir === 'right' ? -250 : 250, opacity: 0
|
222 |
+
},
|
223 |
+
{
|
224 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 450
|
225 |
+
}
|
226 |
+
);
|
227 |
+
|
228 |
+
// set the right properties for the next element to come in
|
229 |
+
dynamics.css(itemNext, {visibility: 'visible'});
|
230 |
+
dynamics.css(nextEl, {translateX: dir === 'right' ? nextEl.offsetWidth : -1*nextEl.offsetWidth, scale: 0.7});
|
231 |
+
|
232 |
+
// animate the next element in
|
233 |
+
dynamics.animate(nextEl,
|
234 |
+
{
|
235 |
+
translateX: 0
|
236 |
+
},
|
237 |
+
{
|
238 |
+
type: dynamics.spring, duration: 3000, friction: 700, frequency: 500,
|
239 |
+
complete: function() {
|
240 |
+
self.items.forEach(function(item) { classie.remove(item, 'slide--current'); });
|
241 |
+
classie.add(itemNext, 'slide--current');
|
242 |
+
}
|
243 |
+
}
|
244 |
+
);
|
245 |
+
|
246 |
+
// set the right properties for the next title to come in
|
247 |
+
dynamics.css(nextTitleEl, { translateX: dir === 'right' ? 250 : -250, opacity: 0 });
|
248 |
+
// animate the next title in
|
249 |
+
dynamics.animate(nextTitleEl,
|
250 |
+
{
|
251 |
+
translateX: 0, opacity: 1
|
252 |
+
},
|
253 |
+
{
|
254 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000
|
255 |
+
}
|
256 |
+
);
|
257 |
+
};
|
258 |
+
|
259 |
+
CircleSlideshow.prototype._moveCircles = function(dir) {
|
260 |
+
var animProps = {
|
261 |
+
type: dynamics.easeIn,
|
262 |
+
duration: 100,
|
263 |
+
complete: function(el) {
|
264 |
+
dynamics.animate(el,
|
265 |
+
{
|
266 |
+
translateX: 0, scale: 0.8
|
267 |
+
},
|
268 |
+
{
|
269 |
+
type: dynamics.spring, duration: 1000, friction: 300
|
270 |
+
}
|
271 |
+
);
|
272 |
+
}
|
273 |
+
};
|
274 |
+
|
275 |
+
dynamics.animate(this.circles.right,
|
276 |
+
{
|
277 |
+
translateX: dir === 'right' ? -this.circles.right.offsetWidth/3 : this.circles.right.offsetWidth/3, scale: 0.9
|
278 |
+
},
|
279 |
+
animProps
|
280 |
+
);
|
281 |
+
dynamics.animate(this.circles.left,
|
282 |
+
{
|
283 |
+
translateX: dir === 'right' ? -this.circles.left.offsetWidth/3 : this.circles.left.offsetWidth/3, scale: 0.9
|
284 |
+
},
|
285 |
+
animProps
|
286 |
+
);
|
287 |
+
};
|
288 |
+
|
289 |
+
CircleSlideshow.prototype._openContent = function(item) {
|
290 |
+
this.isExpanded = true;
|
291 |
+
this.isClosed = false;
|
292 |
+
this.expandedItem = item;
|
293 |
+
|
294 |
+
var self = this,
|
295 |
+
expanderEl = item.querySelector('.deco--expander'),
|
296 |
+
scaleVal = Math.ceil(Math.sqrt(Math.pow(docWidth, 2) + Math.pow(docHeight, 2)) / expanderEl.offsetWidth),
|
297 |
+
smallImgEl = item.querySelector('.bdt-elastic-img-small'),
|
298 |
+
contentEl = item.querySelector('.bdt-elastic-modal-wrap'),
|
299 |
+
largeImgEl = contentEl.querySelector('.bdt-elastic-img-large'),
|
300 |
+
titleEl = contentEl.querySelector('.bdt-elastic-title--main'),
|
301 |
+
descriptionEl = contentEl.querySelector('.bdt-elastic-description'),
|
302 |
+
priceEl = contentEl.querySelector('.bdt-elastic-price'),
|
303 |
+
buyEl = contentEl.querySelector('.bdt-elastic-button--buy');
|
304 |
+
|
305 |
+
// add slide--open class to the item
|
306 |
+
classie.add(item, 'slide--open');
|
307 |
+
// prevent scrolling
|
308 |
+
bodyEl.style.top = -scrollY() + 'px';
|
309 |
+
classie.add(bodyEl, 'lockscroll');
|
310 |
+
|
311 |
+
// position the content elements:
|
312 |
+
// - image (large image)
|
313 |
+
dynamics.css(largeImgEl, {translateY : 800, opacity: 0});
|
314 |
+
// - title
|
315 |
+
dynamics.css(titleEl, {translateY : 600, opacity: 0});
|
316 |
+
// - description
|
317 |
+
dynamics.css(descriptionEl, {translateY : 400, opacity: 0});
|
318 |
+
// - price
|
319 |
+
dynamics.css(priceEl, {translateY : 400, opacity: 0});
|
320 |
+
// - buy button
|
321 |
+
dynamics.css(buyEl, {translateY : 400, opacity: 0});
|
322 |
+
|
323 |
+
// animate (scale up) the expander element
|
324 |
+
dynamics.animate(expanderEl,
|
325 |
+
{
|
326 |
+
scaleX : scaleVal, scaleY : scaleVal
|
327 |
+
},
|
328 |
+
{
|
329 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.5,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.5,"y":1}]}], duration: 1700
|
330 |
+
}
|
331 |
+
);
|
332 |
+
|
333 |
+
// animate the small image out
|
334 |
+
dynamics.animate(smallImgEl,
|
335 |
+
{
|
336 |
+
translateY : -600, opacity : 0
|
337 |
+
},
|
338 |
+
{
|
339 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 300, delay: 75
|
340 |
+
}
|
341 |
+
);
|
342 |
+
|
343 |
+
// animate the large image in
|
344 |
+
dynamics.animate(largeImgEl,
|
345 |
+
{
|
346 |
+
translateY : 0, opacity : 1
|
347 |
+
},
|
348 |
+
{
|
349 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000, delay: 300
|
350 |
+
}
|
351 |
+
);
|
352 |
+
|
353 |
+
// animate the title element in
|
354 |
+
dynamics.animate(titleEl,
|
355 |
+
{
|
356 |
+
translateY : 0, opacity : 1
|
357 |
+
},
|
358 |
+
{
|
359 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000, delay: 400
|
360 |
+
}
|
361 |
+
);
|
362 |
+
|
363 |
+
// animate the description element in
|
364 |
+
dynamics.animate(descriptionEl,
|
365 |
+
{
|
366 |
+
translateY : 0, opacity : 1
|
367 |
+
},
|
368 |
+
{
|
369 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000, delay: 500
|
370 |
+
}
|
371 |
+
);
|
372 |
+
|
373 |
+
// animate the price element in
|
374 |
+
dynamics.animate(priceEl,
|
375 |
+
{
|
376 |
+
translateY : 0, opacity : 1
|
377 |
+
},
|
378 |
+
{
|
379 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000, delay: 600
|
380 |
+
}
|
381 |
+
);
|
382 |
+
|
383 |
+
// animate the buy element in
|
384 |
+
dynamics.animate(buyEl,
|
385 |
+
{
|
386 |
+
translateY : 0, opacity : 1
|
387 |
+
},
|
388 |
+
{
|
389 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000, delay: 700,
|
390 |
+
complete: function() {
|
391 |
+
// add .noscroll to body and .scrollable to .slide__content
|
392 |
+
classie.add(bodyEl, 'noscroll');
|
393 |
+
classie.add(contentEl, 'scrollable');
|
394 |
+
|
395 |
+
// force redraw (chrome)
|
396 |
+
contentEl.style.display = 'none';
|
397 |
+
contentEl.offsetHeight;
|
398 |
+
contentEl.style.display = 'block';
|
399 |
+
|
400 |
+
// allow scrolling
|
401 |
+
classie.remove(bodyEl, 'lockscroll');
|
402 |
+
}
|
403 |
+
}
|
404 |
+
);
|
405 |
+
};
|
406 |
+
|
407 |
+
CircleSlideshow.prototype._closeContent = function() {
|
408 |
+
this.isClosed = true;
|
409 |
+
|
410 |
+
var self = this,
|
411 |
+
item = this.expandedItem,
|
412 |
+
expanderEl = item.querySelector('.deco--expander'),
|
413 |
+
smallImgEl = item.querySelector('.bdt-elastic-img-small'),
|
414 |
+
contentEl = item.querySelector('.bdt-elastic-modal-wrap'),
|
415 |
+
largeImgEl = contentEl.querySelector('.bdt-elastic-img-large'),
|
416 |
+
titleEl = contentEl.querySelector('.bdt-elastic-title--main'),
|
417 |
+
descriptionEl = contentEl.querySelector('.bdt-elastic-description'),
|
418 |
+
priceEl = contentEl.querySelector('.bdt-elastic-price'),
|
419 |
+
buyEl = contentEl.querySelector('.bdt-elastic-button--buy');
|
420 |
+
|
421 |
+
// add slide--close class to the item
|
422 |
+
classie.add(item, 'slide--close');
|
423 |
+
|
424 |
+
// remove .noscroll from body and .scrollable from .slide__content
|
425 |
+
classie.remove(bodyEl, 'noscroll');
|
426 |
+
classie.remove(contentEl, 'scrollable');
|
427 |
+
|
428 |
+
// animate the buy element out
|
429 |
+
dynamics.stop(buyEl);
|
430 |
+
dynamics.animate(buyEl,
|
431 |
+
{
|
432 |
+
translateY : 400, opacity : 0
|
433 |
+
},
|
434 |
+
{
|
435 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000
|
436 |
+
}
|
437 |
+
);
|
438 |
+
|
439 |
+
// animate the price element out
|
440 |
+
dynamics.stop(priceEl);
|
441 |
+
dynamics.animate(priceEl,
|
442 |
+
{
|
443 |
+
translateY : 400, opacity : 0
|
444 |
+
},
|
445 |
+
{
|
446 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000
|
447 |
+
}
|
448 |
+
);
|
449 |
+
|
450 |
+
// animate the description element out
|
451 |
+
dynamics.stop(descriptionEl);
|
452 |
+
dynamics.animate(descriptionEl,
|
453 |
+
{
|
454 |
+
translateY : 400, opacity : 0
|
455 |
+
},
|
456 |
+
{
|
457 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000, delay: 100
|
458 |
+
}
|
459 |
+
);
|
460 |
+
|
461 |
+
// animate the title element out
|
462 |
+
dynamics.stop(titleEl);
|
463 |
+
dynamics.animate(titleEl,
|
464 |
+
{
|
465 |
+
translateY : 600, opacity : 0
|
466 |
+
},
|
467 |
+
{
|
468 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 1000, delay: 200
|
469 |
+
}
|
470 |
+
);
|
471 |
+
|
472 |
+
// animate the large image out
|
473 |
+
dynamics.animate(largeImgEl,
|
474 |
+
{
|
475 |
+
translateY : 800, opacity : 0
|
476 |
+
},
|
477 |
+
{
|
478 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 500, delay: 300,
|
479 |
+
complete: function() {
|
480 |
+
// remove slide--open class to the item
|
481 |
+
classie.remove(item, 'slide--open');
|
482 |
+
// remove slide--close class to the item
|
483 |
+
classie.remove(item, 'slide--close');
|
484 |
+
// allow scrolling
|
485 |
+
classie.remove(bodyEl, 'lockscroll');
|
486 |
+
self.isExpanded = false;
|
487 |
+
}
|
488 |
+
}
|
489 |
+
);
|
490 |
+
|
491 |
+
// animate the small image in
|
492 |
+
dynamics.animate(smallImgEl,
|
493 |
+
{
|
494 |
+
translateY : 0, opacity : 1
|
495 |
+
},
|
496 |
+
{
|
497 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}], duration: 700, delay: 500
|
498 |
+
}
|
499 |
+
);
|
500 |
+
|
501 |
+
// animate (scale down) the expander element
|
502 |
+
dynamics.animate(expanderEl,
|
503 |
+
{
|
504 |
+
scaleX : 1, scaleY : 1
|
505 |
+
},
|
506 |
+
{
|
507 |
+
type: dynamics.bezier, points: [{"x":0,"y":0,"cp":[{"x":0.5,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.5,"y":1}]}], duration: 700, delay: 250
|
508 |
+
}
|
509 |
+
);
|
510 |
+
};
|
511 |
+
|
512 |
+
window.CircleSlideshow = CircleSlideshow;
|
513 |
+
|
514 |
+
})(window);
|
515 |
+
|
516 |
+
(function() {
|
517 |
+
document.documentElement.className = 'js';
|
518 |
+
var slideshow = new CircleSlideshow(document.querySelector($settings.id));
|
519 |
+
})();
|
520 |
+
|
521 |
+
};
|
522 |
+
|
523 |
+
|
524 |
+
jQuery(window).on('elementor/frontend/init', function () {
|
525 |
+
elementorFrontend.hooks.addAction('frontend/element_ready/prime-slider-woocircle.default', widgetWooCircle);
|
526 |
+
});
|
527 |
+
|
528 |
+
}(jQuery, window.elementorFrontend));
|
529 |
+
|
530 |
+
|
531 |
+
/**
|
532 |
+
* main.js
|
533 |
+
* http://www.codrops.com
|
534 |
+
*
|
535 |
+
* Licensed under the MIT license.
|
536 |
+
* http://www.opensource.org/licenses/mit-license.php
|
537 |
+
*
|
538 |
+
* Copyright 2016, Codrops
|
539 |
+
* http://www.codrops.com
|
540 |
+
*
|
541 |
+
*/
|
542 |
+
|
assets/js/widgets/ps-woocircle.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
!function(t,e){"use strict";var i=function(t,e){var i=t.find(".bdt-elastic-slideshow"),s=i.data("settings");i.length&&(function(t){var e=document.body,i=t.document.documentElement,s=Math.max(e.scrollWidth,e.offsetWidth,i.clientWidth,i.scrollWidth,i.offsetWidth),a=Math.max(e.scrollHeight,e.offsetHeight,i.clientHeight,i.scrollHeight,i.offsetHeight);function n(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function c(t,e){this.el=t,this.options=n({},this.options),n(this.options,e),this.items=[].slice.call(this.el.querySelectorAll(".bdt-elastic-slide-item")),this.itemsTotal=this.items.length,this.itemsTotal<2||(this.closeCtrl=this.el.querySelector(".bdt-elastic-action--close"),this.current=0,this.isClosed=!0,this._init())}c.prototype.options={},c.prototype._init=function(){this.navLeftCtrl=document.createElement("button"),this.navLeftCtrl.className="navbutton navbutton--next",this.navLeftCtrl.setAttribute("aria-label","Next item"),this.navLeftCtrl.innerHTML='<svg width="100px" height="30px" viewBox="0 0 100 30"><polyline class="navbutton__line" fill="none" stroke="#6CD84E" stroke-width="5" points="69.821,3.795 92.232,26.205 0,26.205"/></svg>',this.navRightCtrl=document.createElement("button"),this.navRightCtrl.className="navbutton navbutton--prev",this.navRightCtrl.setAttribute("aria-label","Previous item"),this.navRightCtrl.innerHTML='<svg width="100px" height="30px" viewBox="0 0 100 30"><polyline class="navbutton__line" fill="none" stroke="#6CD84E" stroke-width="5" points="30.179,26.205 7.768,3.795 100,3.795"/></svg>',this.el.insertBefore(this.navLeftCtrl,this.el.firstChild),this.el.insertBefore(this.navRightCtrl,this.el.firstChild);var t=document.createElement("div"),e=document.createElement("div");t.className="deco deco--circle deco--circle-left",e.className="deco deco--circle deco--circle-right",this.el.insertBefore(t,this.el.firstChild),this.el.insertBefore(e,this.el.firstChild),this.circles={left:t,right:e},dynamics.css(this.circles.left,{scale:.8}),dynamics.css(this.circles.right,{scale:.8}),this.items.forEach((function(t){var e=document.createElement("div");e.className="deco deco--circle deco--expander";var i=t.querySelector(".bdt-elastic-image-action-btn");i.insertBefore(e,i.firstChild)})),classie.add(this.items[this.current],"slide--current"),this._initEvents()},c.prototype._initEvents=function(){var t=this;this.navRightCtrl.addEventListener("click",(function(){t._navigate("left")})),this.navLeftCtrl.addEventListener("click",(function(){t._navigate("right")})),this.items.forEach((function(e){e.querySelector(".bdt-elastic-action--open").addEventListener("click",(function(i){t._openContent(e),i.target.blur()}))})),this.closeCtrl.addEventListener("click",(function(){t._closeContent()})),document.addEventListener("keydown",(function(e){switch(e.keyCode||e.which){case 37:t._navigate("left");break;case 39:t._navigate("right");break;case 13:if(t.isExpanded)return;t._openContent(t.items[t.current]);break;case 27:if(t.isClosed)return;t._closeContent()}})),this.el.addEventListener("touchstart",(function(t){e=t.touches[0].clientX,i=t.touches[0].clientY}),!1),this.el.addEventListener("touchmove",(function(s){if(!e||!i)return;var a=s.touches[0].clientX,n=s.touches[0].clientY,c=e-a,r=i-n;Math.abs(c)>Math.abs(r)&&(c>0?t.isExpanded||t._navigate("right"):t.isExpanded||t._navigate("left"));e=null,i=null}),!1);var e=null,i=null},c.prototype._navigate=function(t){if(this.isExpanded)return!1;this._moveCircles(t);var e=this,i=this.items[this.current],s=i.querySelector(".bdt-elastic-image-action-btn"),a=i.querySelector(".bdt-elastic-slide-content");this.current="right"===t?this.current<this.itemsTotal-1?this.current+1:0:this.current>0?this.current-1:this.itemsTotal-1;var n=this.items[this.current],c=n.querySelector(".bdt-elastic-image-action-btn"),r=n.querySelector(".bdt-elastic-slide-content");dynamics.animate(s,{translateX:"right"===t?-1*s.offsetWidth:s.offsetWidth,scale:.7},{type:dynamics.spring,duration:2e3,friction:600,complete:function(){dynamics.css(i,{visibility:"hidden"})}}),dynamics.animate(a,{translateX:"right"===t?-250:250,opacity:0},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:450}),dynamics.css(n,{visibility:"visible"}),dynamics.css(c,{translateX:"right"===t?c.offsetWidth:-1*c.offsetWidth,scale:.7}),dynamics.animate(c,{translateX:0},{type:dynamics.spring,duration:3e3,friction:700,frequency:500,complete:function(){e.items.forEach((function(t){classie.remove(t,"slide--current")})),classie.add(n,"slide--current")}}),dynamics.css(r,{translateX:"right"===t?250:-250,opacity:0}),dynamics.animate(r,{translateX:0,opacity:1},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3})},c.prototype._moveCircles=function(t){var e={type:dynamics.easeIn,duration:100,complete:function(t){dynamics.animate(t,{translateX:0,scale:.8},{type:dynamics.spring,duration:1e3,friction:300})}};dynamics.animate(this.circles.right,{translateX:"right"===t?-this.circles.right.offsetWidth/3:this.circles.right.offsetWidth/3,scale:.9},e),dynamics.animate(this.circles.left,{translateX:"right"===t?-this.circles.left.offsetWidth/3:this.circles.left.offsetWidth/3,scale:.9},e)},c.prototype._openContent=function(n){this.isExpanded=!0,this.isClosed=!1,this.expandedItem=n;var c=n.querySelector(".deco--expander"),r=Math.ceil(Math.sqrt(Math.pow(s,2)+Math.pow(a,2))/c.offsetWidth),l=n.querySelector(".bdt-elastic-img-small"),o=n.querySelector(".bdt-elastic-modal-wrap"),d=o.querySelector(".bdt-elastic-img-large"),y=o.querySelector(".bdt-elastic-title--main"),p=o.querySelector(".bdt-elastic-description"),h=o.querySelector(".bdt-elastic-price"),m=o.querySelector(".bdt-elastic-button--buy");classie.add(n,"slide--open"),e.style.top=-(t.pageYOffset||i.scrollTop)+"px",classie.add(e,"lockscroll"),dynamics.css(d,{translateY:800,opacity:0}),dynamics.css(y,{translateY:600,opacity:0}),dynamics.css(p,{translateY:400,opacity:0}),dynamics.css(h,{translateY:400,opacity:0}),dynamics.css(m,{translateY:400,opacity:0}),dynamics.animate(c,{scaleX:r,scaleY:r},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.5,y:1}]},{x:1,y:1,cp:[{x:.5,y:1}]}],duration:1700}),dynamics.animate(l,{translateY:-600,opacity:0},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:300,delay:75}),dynamics.animate(d,{translateY:0,opacity:1},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3,delay:300}),dynamics.animate(y,{translateY:0,opacity:1},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3,delay:400}),dynamics.animate(p,{translateY:0,opacity:1},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3,delay:500}),dynamics.animate(h,{translateY:0,opacity:1},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3,delay:600}),dynamics.animate(m,{translateY:0,opacity:1},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3,delay:700,complete:function(){classie.add(e,"noscroll"),classie.add(o,"scrollable"),o.style.display="none",o.offsetHeight,o.style.display="block",classie.remove(e,"lockscroll")}})},c.prototype._closeContent=function(){this.isClosed=!0;var t=this,i=this.expandedItem,s=i.querySelector(".deco--expander"),a=i.querySelector(".bdt-elastic-img-small"),n=i.querySelector(".bdt-elastic-modal-wrap"),c=n.querySelector(".bdt-elastic-img-large"),r=n.querySelector(".bdt-elastic-title--main"),l=n.querySelector(".bdt-elastic-description"),o=n.querySelector(".bdt-elastic-price"),d=n.querySelector(".bdt-elastic-button--buy");classie.add(i,"slide--close"),classie.remove(e,"noscroll"),classie.remove(n,"scrollable"),dynamics.stop(d),dynamics.animate(d,{translateY:400,opacity:0},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3}),dynamics.stop(o),dynamics.animate(o,{translateY:400,opacity:0},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3}),dynamics.stop(l),dynamics.animate(l,{translateY:400,opacity:0},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3,delay:100}),dynamics.stop(r),dynamics.animate(r,{translateY:600,opacity:0},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:1e3,delay:200}),dynamics.animate(c,{translateY:800,opacity:0},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:500,delay:300,complete:function(){classie.remove(i,"slide--open"),classie.remove(i,"slide--close"),classie.remove(e,"lockscroll"),t.isExpanded=!1}}),dynamics.animate(a,{translateY:0,opacity:1},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.2,y:1}]},{x:1,y:1,cp:[{x:.3,y:1}]}],duration:700,delay:500}),dynamics.animate(s,{scaleX:1,scaleY:1},{type:dynamics.bezier,points:[{x:0,y:0,cp:[{x:.5,y:1}]},{x:1,y:1,cp:[{x:.5,y:1}]}],duration:700,delay:250})},t.CircleSlideshow=c}(window),function(){document.documentElement.className="js";new CircleSlideshow(document.querySelector(s.id))}())};jQuery(window).on("elementor/frontend/init",(function(){elementorFrontend.hooks.addAction("frontend/element_ready/prime-slider-woocircle.default",i)}))}(jQuery,window.elementorFrontend);
|
assets/js/widgets/ps-wooexpand.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(e,t){"use strict";var n=function(e,t){var n=e.find(".bdt-wooexpand"),o=n.data("settings"),
|
1 |
+
!function(e,t){"use strict";var n=function(e,t){var n=e.find(".bdt-wooexpand"),o=n.data("settings"),a=t(n).find(".bdt-wooexpand-item"),d=n.children().length;t(a).on(o.mouse_event,(function(){t(this).siblings().removeClass("active"),t(this).addClass("active"),t(this).parent().addClass("active")})),1==o.activeItem&&o.activeItemNumber<=d&&(n.find(".bdt-wooexpand-item").removeClass("active"),n.children().eq(o.activeItemNumber-1).addClass("active")),1!=o.activeItem&&t("body").on(o.mouse_event,(function(e){"bdt-wooexpand"==e.target.$imageExpand||t(e.target).closest(".bdt-wooexpand").length||(t(".bdt-wooexpand-item").removeClass("active"),t(".bdt-wooexpand-item").parent().removeClass("active"))}))};jQuery(window).on("elementor/frontend/init",(function(){elementorFrontend.hooks.addAction("frontend/element_ready/prime-slider-wooexpand.default",n)}))}(jQuery,window.elementorFrontend);
|
assets/vendor/js/classie.js
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* classie v1.0.1
|
3 |
+
* class helper functions
|
4 |
+
* from bonzo https://github.com/ded/bonzo
|
5 |
+
* MIT license
|
6 |
+
*
|
7 |
+
* classie.has( elem, 'my-class' ) -> true/false
|
8 |
+
* classie.add( elem, 'my-new-class' )
|
9 |
+
* classie.remove( elem, 'my-unwanted-class' )
|
10 |
+
* classie.toggle( elem, 'my-class' )
|
11 |
+
*/
|
12 |
+
|
13 |
+
/*jshint browser: true, strict: true, undef: true, unused: true */
|
14 |
+
/*global define: false, module: false */
|
15 |
+
|
16 |
+
( function( window ) {
|
17 |
+
|
18 |
+
'use strict';
|
19 |
+
|
20 |
+
// class helper functions from bonzo https://github.com/ded/bonzo
|
21 |
+
|
22 |
+
function classReg( className ) {
|
23 |
+
return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
|
24 |
+
}
|
25 |
+
|
26 |
+
// classList support for class management
|
27 |
+
// altho to be fair, the api sucks because it won't accept multiple classes at once
|
28 |
+
var hasClass, addClass, removeClass;
|
29 |
+
|
30 |
+
if ( 'classList' in document.documentElement ) {
|
31 |
+
hasClass = function( elem, c ) {
|
32 |
+
return elem.classList.contains( c );
|
33 |
+
};
|
34 |
+
addClass = function( elem, c ) {
|
35 |
+
elem.classList.add( c );
|
36 |
+
};
|
37 |
+
removeClass = function( elem, c ) {
|
38 |
+
elem.classList.remove( c );
|
39 |
+
};
|
40 |
+
}
|
41 |
+
else {
|
42 |
+
hasClass = function( elem, c ) {
|
43 |
+
return classReg( c ).test( elem.className );
|
44 |
+
};
|
45 |
+
addClass = function( elem, c ) {
|
46 |
+
if ( !hasClass( elem, c ) ) {
|
47 |
+
elem.className = elem.className + ' ' + c;
|
48 |
+
}
|
49 |
+
};
|
50 |
+
removeClass = function( elem, c ) {
|
51 |
+
elem.className = elem.className.replace( classReg( c ), ' ' );
|
52 |
+
};
|
53 |
+
}
|
54 |
+
|
55 |
+
function toggleClass( elem, c ) {
|
56 |
+
var fn = hasClass( elem, c ) ? removeClass : addClass;
|
57 |
+
fn( elem, c );
|
58 |
+
}
|
59 |
+
|
60 |
+
var classie = {
|
61 |
+
// full names
|
62 |
+
hasClass: hasClass,
|
63 |
+
addClass: addClass,
|
64 |
+
removeClass: removeClass,
|
65 |
+
toggleClass: toggleClass,
|
66 |
+
// short names
|
67 |
+
has: hasClass,
|
68 |
+
add: addClass,
|
69 |
+
remove: removeClass,
|
70 |
+
toggle: toggleClass
|
71 |
+
};
|
72 |
+
|
73 |
+
// transport
|
74 |
+
if ( typeof define === 'function' && define.amd ) {
|
75 |
+
// AMD
|
76 |
+
define( classie );
|
77 |
+
} else if ( typeof exports === 'object' ) {
|
78 |
+
// CommonJS
|
79 |
+
module.exports = classie;
|
80 |
+
} else {
|
81 |
+
// browser global
|
82 |
+
window.classie = classie;
|
83 |
+
}
|
84 |
+
|
85 |
+
})( window );
|
assets/vendor/js/classie.min.js
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* classie v1.0.1
|
3 |
+
* class helper functions
|
4 |
+
* from bonzo https://github.com/ded/bonzo
|
5 |
+
* MIT license
|
6 |
+
*
|
7 |
+
* classie.has( elem, 'my-class' ) -> true/false
|
8 |
+
* classie.add( elem, 'my-new-class' )
|
9 |
+
* classie.remove( elem, 'my-unwanted-class' )
|
10 |
+
* classie.toggle( elem, 'my-class' )
|
11 |
+
*/
|
12 |
+
!function(s){"use strict";function e(s){return new RegExp("(^|\\s+)"+s+"(\\s+|$)")}var n,t,a;function c(s,e){(n(s,e)?a:t)(s,e)}"classList"in document.documentElement?(n=function(s,e){return s.classList.contains(e)},t=function(s,e){s.classList.add(e)},a=function(s,e){s.classList.remove(e)}):(n=function(s,n){return e(n).test(s.className)},t=function(s,e){n(s,e)||(s.className=s.className+" "+e)},a=function(s,n){s.className=s.className.replace(e(n)," ")});var o={hasClass:n,addClass:t,removeClass:a,toggleClass:c,has:n,add:t,remove:a,toggle:c};"function"==typeof define&&define.amd?define(o):"object"==typeof exports?module.exports=o:s.classie=o}(window);
|
assets/vendor/js/dynamics.js
ADDED
@@ -0,0 +1,2058 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// Generated by CoffeeScript 1.7.1
|
2 |
+
(function() {
|
3 |
+
var Color, DecomposedMatrix, DecomposedMatrix2D, InterpolableArray, InterpolableColor, InterpolableNumber, InterpolableObject, InterpolableString, Matrix, Matrix2D, Set, Vector, addTimeout, animationTick, animations, animationsTimeouts, applyDefaults, applyFrame, applyProperties, baseSVG, cacheFn, cancelTimeout, clone, createInterpolable, defaultValueForKey, degProperties, dynamics, getCurrentProperties, interpolate, isDocumentVisible, isSVGElement, lastTime, leftDelayForTimeout, makeArrayFn, observeVisibilityChange, parseProperties, prefixFor, propertyWithPrefix, pxProperties, rAF, roundf, runLoopPaused, runLoopRunning, runLoopTick, setRealTimeout, slow, slowRatio, startAnimation, startRunLoop, svgProperties, timeBeforeVisibilityChange, timeoutLastId, timeouts, toDashed, transformProperties, transformValueForProperty, unitForProperty,
|
4 |
+
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
5 |
+
|
6 |
+
isDocumentVisible = function() {
|
7 |
+
return document.visibilityState === "visible" || (dynamics.tests != null);
|
8 |
+
};
|
9 |
+
|
10 |
+
observeVisibilityChange = (function() {
|
11 |
+
var fns;
|
12 |
+
fns = [];
|
13 |
+
if (typeof document !== "undefined" && document !== null) {
|
14 |
+
document.addEventListener("visibilitychange", function() {
|
15 |
+
var fn, _i, _len, _results;
|
16 |
+
_results = [];
|
17 |
+
for (_i = 0, _len = fns.length; _i < _len; _i++) {
|
18 |
+
fn = fns[_i];
|
19 |
+
_results.push(fn(isDocumentVisible()));
|
20 |
+
}
|
21 |
+
return _results;
|
22 |
+
});
|
23 |
+
}
|
24 |
+
return function(fn) {
|
25 |
+
return fns.push(fn);
|
26 |
+
};
|
27 |
+
})();
|
28 |
+
|
29 |
+
clone = function(o) {
|
30 |
+
var k, newO, v;
|
31 |
+
newO = {};
|
32 |
+
for (k in o) {
|
33 |
+
v = o[k];
|
34 |
+
newO[k] = v;
|
35 |
+
}
|
36 |
+
return newO;
|
37 |
+
};
|
38 |
+
|
39 |
+
cacheFn = function(func) {
|
40 |
+
var data;
|
41 |
+
data = {};
|
42 |
+
return function() {
|
43 |
+
var k, key, result, _i, _len;
|
44 |
+
key = "";
|
45 |
+
for (_i = 0, _len = arguments.length; _i < _len; _i++) {
|
46 |
+
k = arguments[_i];
|
47 |
+
key += k.toString() + ",";
|
48 |
+
}
|
49 |
+
result = data[key];
|
50 |
+
if (!result) {
|
51 |
+
data[key] = result = func.apply(this, arguments);
|
52 |
+
}
|
53 |
+
return result;
|
54 |
+
};
|
55 |
+
};
|
56 |
+
|
57 |
+
makeArrayFn = function(fn) {
|
58 |
+
return function(el) {
|
59 |
+
var args, i, res;
|
60 |
+
if (el instanceof Array || el instanceof NodeList || el instanceof HTMLCollection) {
|
61 |
+
res = (function() {
|
62 |
+
var _i, _ref, _results;
|
63 |
+
_results = [];
|
64 |
+
for (i = _i = 0, _ref = el.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
|
65 |
+
args = Array.prototype.slice.call(arguments, 1);
|
66 |
+
args.splice(0, 0, el[i]);
|
67 |
+
_results.push(fn.apply(this, args));
|
68 |
+
}
|
69 |
+
return _results;
|
70 |
+
}).apply(this, arguments);
|
71 |
+
return res;
|
72 |
+
}
|
73 |
+
return fn.apply(this, arguments);
|
74 |
+
};
|
75 |
+
};
|
76 |
+
|
77 |
+
applyDefaults = function(options, defaults) {
|
78 |
+
var k, v, _results;
|
79 |
+
_results = [];
|
80 |
+
for (k in defaults) {
|
81 |
+
v = defaults[k];
|
82 |
+
_results.push(options[k] != null ? options[k] : options[k] = v);
|
83 |
+
}
|
84 |
+
return _results;
|
85 |
+
};
|
86 |
+
|
87 |
+
applyFrame = function(el, properties) {
|
88 |
+
var k, v, _results;
|
89 |
+
if ((el.style != null)) {
|
90 |
+
return applyProperties(el, properties);
|
91 |
+
} else {
|
92 |
+
_results = [];
|
93 |
+
for (k in properties) {
|
94 |
+
v = properties[k];
|
95 |
+
_results.push(el[k] = v.format());
|
96 |
+
}
|
97 |
+
return _results;
|
98 |
+
}
|
99 |
+
};
|
100 |
+
|
101 |
+
applyProperties = function(el, properties) {
|
102 |
+
var isSVG, k, matrix, transforms, v;
|
103 |
+
properties = parseProperties(properties);
|
104 |
+
transforms = [];
|
105 |
+
isSVG = isSVGElement(el);
|
106 |
+
for (k in properties) {
|
107 |
+
v = properties[k];
|
108 |
+
if (transformProperties.contains(k)) {
|
109 |
+
transforms.push([k, v]);
|
110 |
+
} else {
|
111 |
+
if (v.format != null) {
|
112 |
+
v = v.format();
|
113 |
+
}
|
114 |
+
if (typeof v === 'number') {
|
115 |
+
v = "" + v + (unitForProperty(k, v));
|
116 |
+
}
|
117 |
+
if (isSVG && svgProperties.contains(k)) {
|
118 |
+
el.setAttribute(k, v);
|
119 |
+
} else {
|
120 |
+
el.style[propertyWithPrefix(k)] = v;
|
121 |
+
}
|
122 |
+
}
|
123 |
+
}
|
124 |
+
if (transforms.length > 0) {
|
125 |
+
if (isSVG) {
|
126 |
+
matrix = new Matrix2D();
|
127 |
+
matrix.applyProperties(transforms);
|
128 |
+
return el.setAttribute("transform", matrix.decompose().format());
|
129 |
+
} else {
|
130 |
+
v = (transforms.map(function(transform) {
|
131 |
+
return transformValueForProperty(transform[0], transform[1]);
|
132 |
+
})).join(" ");
|
133 |
+
return el.style[propertyWithPrefix("transform")] = v;
|
134 |
+
}
|
135 |
+
}
|
136 |
+
};
|
137 |
+
|
138 |
+
isSVGElement = function(el) {
|
139 |
+
var _ref, _ref1;
|
140 |
+
if ((typeof SVGElement !== "undefined" && SVGElement !== null) && (typeof SVGSVGElement !== "undefined" && SVGSVGElement !== null)) {
|
141 |
+
return el instanceof SVGElement && !(el instanceof SVGSVGElement);
|
142 |
+
} else {
|
143 |
+
return (_ref = (_ref1 = dynamics.tests) != null ? typeof _ref1.isSVG === "function" ? _ref1.isSVG(el) : void 0 : void 0) != null ? _ref : false;
|
144 |
+
}
|
145 |
+
};
|
146 |
+
|
147 |
+
roundf = function(v, decimal) {
|
148 |
+
var d;
|
149 |
+
d = Math.pow(10, decimal);
|
150 |
+
return Math.round(v * d) / d;
|
151 |
+
};
|
152 |
+
|
153 |
+
Set = (function() {
|
154 |
+
function Set(array) {
|
155 |
+
var v, _i, _len;
|
156 |
+
this.obj = {};
|
157 |
+
for (_i = 0, _len = array.length; _i < _len; _i++) {
|
158 |
+
v = array[_i];
|
159 |
+
this.obj[v] = 1;
|
160 |
+
}
|
161 |
+
}
|
162 |
+
|
163 |
+
Set.prototype.contains = function(v) {
|
164 |
+
return this.obj[v] === 1;
|
165 |
+
};
|
166 |
+
|
167 |
+
return Set;
|
168 |
+
|
169 |
+
})();
|
170 |
+
|
171 |
+
toDashed = function(str) {
|
172 |
+
return str.replace(/([A-Z])/g, function($1) {
|
173 |
+
return "-" + $1.toLowerCase();
|
174 |
+
});
|
175 |
+
};
|
176 |
+
|
177 |
+
pxProperties = new Set('marginTop,marginLeft,marginBottom,marginRight,paddingTop,paddingLeft,paddingBottom,paddingRight,top,left,bottom,right,translateX,translateY,translateZ,perspectiveX,perspectiveY,perspectiveZ,width,height,maxWidth,maxHeight,minWidth,minHeight,borderRadius'.split(','));
|
178 |
+
|
179 |
+
degProperties = new Set('rotate,rotateX,rotateY,rotateZ,skew,skewX,skewY,skewZ'.split(','));
|
180 |
+
|
181 |
+
transformProperties = new Set('translate,translateX,translateY,translateZ,scale,scaleX,scaleY,scaleZ,rotate,rotateX,rotateY,rotateZ,rotateC,rotateCX,rotateCY,skew,skewX,skewY,skewZ,perspective'.split(','));
|
182 |
+
|
183 |
+
svgProperties = new Set('accent-height,ascent,azimuth,baseFrequency,baseline-shift,bias,cx,cy,d,diffuseConstant,divisor,dx,dy,elevation,filterRes,fx,fy,gradientTransform,height,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,letter-spacing,limitingConeAngle,markerHeight,markerWidth,numOctaves,order,overline-position,overline-thickness,pathLength,points,pointsAtX,pointsAtY,pointsAtZ,r,radius,rx,ry,seed,specularConstant,specularExponent,stdDeviation,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,surfaceScale,target,targetX,targetY,transform,underline-position,underline-thickness,viewBox,width,x,x1,x2,y,y1,y2,z'.split(','));
|
184 |
+
|
185 |
+
unitForProperty = function(k, v) {
|
186 |
+
if (typeof v !== 'number') {
|
187 |
+
return '';
|
188 |
+
}
|
189 |
+
if (pxProperties.contains(k)) {
|
190 |
+
return 'px';
|
191 |
+
} else if (degProperties.contains(k)) {
|
192 |
+
return 'deg';
|
193 |
+
}
|
194 |
+
return '';
|
195 |
+
};
|
196 |
+
|
197 |
+
transformValueForProperty = function(k, v) {
|
198 |
+
var match, unit;
|
199 |
+
match = ("" + v).match(/^([0-9.-]*)([^0-9]*)$/);
|
200 |
+
if (match != null) {
|
201 |
+
v = match[1];
|
202 |
+
unit = match[2];
|
203 |
+
} else {
|
204 |
+
v = parseFloat(v);
|
205 |
+
}
|
206 |
+
v = roundf(parseFloat(v), 10);
|
207 |
+
if ((unit == null) || unit === "") {
|
208 |
+
unit = unitForProperty(k, v);
|
209 |
+
}
|
210 |
+
return "" + k + "(" + v + unit + ")";
|
211 |
+
};
|
212 |
+
|
213 |
+
parseProperties = function(properties) {
|
214 |
+
var axis, match, parsed, property, value, _i, _len, _ref;
|
215 |
+
parsed = {};
|
216 |
+
for (property in properties) {
|
217 |
+
value = properties[property];
|
218 |
+
if (transformProperties.contains(property)) {
|
219 |
+
match = property.match(/(translate|rotateC|rotate|skew|scale|perspective)(X|Y|Z|)/);
|
220 |
+
if (match && match[2].length > 0) {
|
221 |
+
parsed[property] = value;
|
222 |
+
} else {
|
223 |
+
_ref = ['X', 'Y', 'Z'];
|
224 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
225 |
+
axis = _ref[_i];
|
226 |
+
parsed[match[1] + axis] = value;
|
227 |
+
}
|
228 |
+
}
|
229 |
+
} else {
|
230 |
+
parsed[property] = value;
|
231 |
+
}
|
232 |
+
}
|
233 |
+
return parsed;
|
234 |
+
};
|
235 |
+
|
236 |
+
defaultValueForKey = function(key) {
|
237 |
+
var v;
|
238 |
+
v = key === 'opacity' ? 1 : 0;
|
239 |
+
return "" + v + (unitForProperty(key, v));
|
240 |
+
};
|
241 |
+
|
242 |
+
getCurrentProperties = function(el, keys) {
|
243 |
+
var isSVG, key, matrix, properties, style, v, _i, _j, _len, _len1, _ref;
|
244 |
+
properties = {};
|
245 |
+
isSVG = isSVGElement(el);
|
246 |
+
if (el.style != null) {
|
247 |
+
style = window.getComputedStyle(el, null);
|
248 |
+
for (_i = 0, _len = keys.length; _i < _len; _i++) {
|
249 |
+
key = keys[_i];
|
250 |
+
if (transformProperties.contains(key)) {
|
251 |
+
if (properties['transform'] == null) {
|
252 |
+
if (isSVG) {
|
253 |
+
matrix = new Matrix2D((_ref = el.transform.baseVal.consolidate()) != null ? _ref.matrix : void 0);
|
254 |
+
} else {
|
255 |
+
matrix = Matrix.fromTransform(style[propertyWithPrefix('transform')]);
|
256 |
+
}
|
257 |
+
properties['transform'] = matrix.decompose();
|
258 |
+
}
|
259 |
+
} else {
|
260 |
+
v = style[key];
|
261 |
+
if ((v == null) && svgProperties.contains(key)) {
|
262 |
+
v = el.getAttribute(key);
|
263 |
+
}
|
264 |
+
if (v === "" || (v == null)) {
|
265 |
+
v = defaultValueForKey(key);
|
266 |
+
}
|
267 |
+
properties[key] = createInterpolable(v);
|
268 |
+
}
|
269 |
+
}
|
270 |
+
} else {
|
271 |
+
for (_j = 0, _len1 = keys.length; _j < _len1; _j++) {
|
272 |
+
key = keys[_j];
|
273 |
+
properties[key] = createInterpolable(el[key]);
|
274 |
+
}
|
275 |
+
}
|
276 |
+
return properties;
|
277 |
+
};
|
278 |
+
|
279 |
+
createInterpolable = function(value) {
|
280 |
+
var interpolable, klass, klasses, _i, _len;
|
281 |
+
klasses = [InterpolableArray, InterpolableObject, InterpolableNumber, InterpolableString];
|
282 |
+
for (_i = 0, _len = klasses.length; _i < _len; _i++) {
|
283 |
+
klass = klasses[_i];
|
284 |
+
interpolable = klass.create(value);
|
285 |
+
if (interpolable != null) {
|
286 |
+
return interpolable;
|
287 |
+
}
|
288 |
+
}
|
289 |
+
return null;
|
290 |
+
};
|
291 |
+
|
292 |
+
InterpolableString = (function() {
|
293 |
+
function InterpolableString(parts) {
|
294 |
+
this.parts = parts;
|
295 |
+
this.format = __bind(this.format, this);
|
296 |
+
this.interpolate = __bind(this.interpolate, this);
|
297 |
+
}
|
298 |
+
|
299 |
+
InterpolableString.prototype.interpolate = function(endInterpolable, t) {
|
300 |
+
var end, i, newParts, start, _i, _ref;
|
301 |
+
start = this.parts;
|
302 |
+
end = endInterpolable.parts;
|
303 |
+
newParts = [];
|
304 |
+
for (i = _i = 0, _ref = Math.min(start.length, end.length); 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
|
305 |
+
if (start[i].interpolate != null) {
|
306 |
+
newParts.push(start[i].interpolate(end[i], t));
|
307 |
+
} else {
|
308 |
+
newParts.push(start[i]);
|
309 |
+
}
|
310 |
+
}
|
311 |
+
return new InterpolableString(newParts);
|
312 |
+
};
|
313 |
+
|
314 |
+
InterpolableString.prototype.format = function() {
|
315 |
+
var parts;
|
316 |
+
parts = this.parts.map(function(val) {
|
317 |
+
if (val.format != null) {
|
318 |
+
return val.format();
|
319 |
+
} else {
|
320 |
+
return val;
|
321 |
+
}
|
322 |
+
});
|
323 |
+
return parts.join('');
|
324 |
+
};
|
325 |
+
|
326 |
+
InterpolableString.create = function(value) {
|
327 |
+
var index, match, matches, parts, re, type, types, _i, _j, _len, _len1;
|
328 |
+
value = "" + value;
|
329 |
+
matches = [];
|
330 |
+
types = [
|
331 |
+
{
|
332 |
+
re: /(#[a-f\d]{3,6})/ig,
|
333 |
+
klass: InterpolableColor,
|
334 |
+
parse: function(v) {
|
335 |
+
return v;
|
336 |
+
}
|
337 |
+
}, {
|
338 |
+
re: /(rgba?\([0-9.]*, ?[0-9.]*, ?[0-9.]*(?:, ?[0-9.]*)?\))/ig,
|
339 |
+
klass: InterpolableColor,
|
340 |
+
parse: function(v) {
|
341 |
+
return v;
|
342 |
+
}
|
343 |
+
}, {
|
344 |
+
re: /([-+]?[\d.]+)/ig,
|
345 |
+
klass: InterpolableNumber,
|
346 |
+
parse: parseFloat
|
347 |
+
}
|
348 |
+
];
|
349 |
+
for (_i = 0, _len = types.length; _i < _len; _i++) {
|
350 |
+
type = types[_i];
|
351 |
+
re = type.re;
|
352 |
+
while (match = re.exec(value)) {
|
353 |
+
matches.push({
|
354 |
+
index: match.index,
|
355 |
+
length: match[1].length,
|
356 |
+
interpolable: type.klass.create(type.parse(match[1]))
|
357 |
+
});
|
358 |
+
}
|
359 |
+
}
|
360 |
+
matches = matches.sort(function(a, b) {
|
361 |
+
if (a.index > b.index) {
|
362 |
+
return 1;
|
363 |
+
} else {
|
364 |
+
return -1;
|
365 |
+
}
|
366 |
+
});
|
367 |
+
parts = [];
|
368 |
+
index = 0;
|
369 |
+
for (_j = 0, _len1 = matches.length; _j < _len1; _j++) {
|
370 |
+
match = matches[_j];
|
371 |
+
if (match.index < index) {
|
372 |
+
continue;
|
373 |
+
}
|
374 |
+
if (match.index > index) {
|
375 |
+
parts.push(value.substring(index, match.index));
|
376 |
+
}
|
377 |
+
parts.push(match.interpolable);
|
378 |
+
index = match.index + match.length;
|
379 |
+
}
|
380 |
+
if (index < value.length) {
|
381 |
+
parts.push(value.substring(index));
|
382 |
+
}
|
383 |
+
return new InterpolableString(parts);
|
384 |
+
};
|
385 |
+
|
386 |
+
return InterpolableString;
|
387 |
+
|
388 |
+
})();
|
389 |
+
|
390 |
+
InterpolableObject = (function() {
|
391 |
+
function InterpolableObject(obj) {
|
392 |
+
this.format = __bind(this.format, this);
|
393 |
+
this.interpolate = __bind(this.interpolate, this);
|
394 |
+
this.obj = obj;
|
395 |
+
}
|
396 |
+
|
397 |
+
InterpolableObject.prototype.interpolate = function(endInterpolable, t) {
|
398 |
+
var end, k, newObj, start, v;
|
399 |
+
start = this.obj;
|
400 |
+
end = endInterpolable.obj;
|
401 |
+
newObj = {};
|
402 |
+
for (k in start) {
|
403 |
+
v = start[k];
|
404 |
+
if (v.interpolate != null) {
|
405 |
+
newObj[k] = v.interpolate(end[k], t);
|
406 |
+
} else {
|
407 |
+
newObj[k] = v;
|
408 |
+
}
|
409 |
+
}
|
410 |
+
return new InterpolableObject(newObj);
|
411 |
+
};
|
412 |
+
|
413 |
+
InterpolableObject.prototype.format = function() {
|
414 |
+
return this.obj;
|
415 |
+
};
|
416 |
+
|
417 |
+
InterpolableObject.create = function(value) {
|
418 |
+
var k, obj, v;
|
419 |
+
if (value instanceof Object) {
|
420 |
+
obj = {};
|
421 |
+
for (k in value) {
|
422 |
+
v = value[k];
|
423 |
+
obj[k] = createInterpolable(v);
|
424 |
+
}
|
425 |
+
return new InterpolableObject(obj);
|
426 |
+
}
|
427 |
+
return null;
|
428 |
+
};
|
429 |
+
|
430 |
+
return InterpolableObject;
|
431 |
+
|
432 |
+
})();
|
433 |
+
|
434 |
+
InterpolableNumber = (function() {
|
435 |
+
function InterpolableNumber(value) {
|
436 |
+
this.format = __bind(this.format, this);
|
437 |
+
this.interpolate = __bind(this.interpolate, this);
|
438 |
+
this.value = parseFloat(value);
|
439 |
+
}
|
440 |
+
|
441 |
+
InterpolableNumber.prototype.interpolate = function(endInterpolable, t) {
|
442 |
+
var end, start;
|
443 |
+
start = this.value;
|
444 |
+
end = endInterpolable.value;
|
445 |
+
return new InterpolableNumber((end - start) * t + start);
|
446 |
+
};
|
447 |
+
|
448 |
+
InterpolableNumber.prototype.format = function() {
|
449 |
+
return roundf(this.value, 5);
|
450 |
+
};
|
451 |
+
|
452 |
+
InterpolableNumber.create = function(value) {
|
453 |
+
if (typeof value === 'number') {
|
454 |
+
return new InterpolableNumber(value);
|
455 |
+
}
|
456 |
+
return null;
|
457 |
+
};
|
458 |
+
|
459 |
+
return InterpolableNumber;
|
460 |
+
|
461 |
+
})();
|
462 |
+
|
463 |
+
InterpolableArray = (function() {
|
464 |
+
function InterpolableArray(values) {
|
465 |
+
this.values = values;
|
466 |
+
this.format = __bind(this.format, this);
|
467 |
+
this.interpolate = __bind(this.interpolate, this);
|
468 |
+
}
|
469 |
+
|
470 |
+
InterpolableArray.prototype.interpolate = function(endInterpolable, t) {
|
471 |
+
var end, i, newValues, start, _i, _ref;
|
472 |
+
start = this.values;
|
473 |
+
end = endInterpolable.values;
|
474 |
+
newValues = [];
|
475 |
+
for (i = _i = 0, _ref = Math.min(start.length, end.length); 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
|
476 |
+
if (start[i].interpolate != null) {
|
477 |
+
newValues.push(start[i].interpolate(end[i], t));
|
478 |
+
} else {
|
479 |
+
newValues.push(start[i]);
|
480 |
+
}
|
481 |
+
}
|
482 |
+
return new InterpolableArray(newValues);
|
483 |
+
};
|
484 |
+
|
485 |
+
InterpolableArray.prototype.format = function() {
|
486 |
+
return this.values.map(function(val) {
|
487 |
+
if (val.format != null) {
|
488 |
+
return val.format();
|
489 |
+
} else {
|
490 |
+
return val;
|
491 |
+
}
|
492 |
+
});
|
493 |
+
};
|
494 |
+
|
495 |
+
InterpolableArray.createFromArray = function(arr) {
|
496 |
+
var values;
|
497 |
+
values = arr.map(function(val) {
|
498 |
+
return createInterpolable(val) || val;
|
499 |
+
});
|
500 |
+
values = values.filter(function(val) {
|
501 |
+
return val != null;
|
502 |
+
});
|
503 |
+
return new InterpolableArray(values);
|
504 |
+
};
|
505 |
+
|
506 |
+
InterpolableArray.create = function(value) {
|
507 |
+
if (value instanceof Array) {
|
508 |
+
return InterpolableArray.createFromArray(value);
|
509 |
+
}
|
510 |
+
return null;
|
511 |
+
};
|
512 |
+
|
513 |
+
return InterpolableArray;
|
514 |
+
|
515 |
+
})();
|
516 |
+
|
517 |
+
Color = (function() {
|
518 |
+
function Color(rgb, format) {
|
519 |
+
this.rgb = rgb != null ? rgb : {};
|
520 |
+
this.format = format;
|
521 |
+
this.toRgba = __bind(this.toRgba, this);
|
522 |
+
this.toRgb = __bind(this.toRgb, this);
|
523 |
+
this.toHex = __bind(this.toHex, this);
|
524 |
+
}
|
525 |
+
|
526 |
+
Color.fromHex = function(hex) {
|
527 |
+
var hex3, result;
|
528 |
+
hex3 = hex.match(/^#([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})$/i);
|
529 |
+
if (hex3 != null) {
|
530 |
+
hex = "#" + hex3[1] + hex3[1] + hex3[2] + hex3[2] + hex3[3] + hex3[3];
|
531 |
+
}
|
532 |
+
result = hex.match(/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i);
|
533 |
+
if (result != null) {
|
534 |
+
return new Color({
|
535 |
+
r: parseInt(result[1], 16),
|
536 |
+
g: parseInt(result[2], 16),
|
537 |
+
b: parseInt(result[3], 16),
|
538 |
+
a: 1
|
539 |
+
}, "hex");
|
540 |
+
}
|
541 |
+
return null;
|
542 |
+
};
|
543 |
+
|
544 |
+
Color.fromRgb = function(rgb) {
|
545 |
+
var match, _ref;
|
546 |
+
match = rgb.match(/^rgba?\(([0-9.]*), ?([0-9.]*), ?([0-9.]*)(?:, ?([0-9.]*))?\)$/);
|
547 |
+
if (match != null) {
|
548 |
+
return new Color({
|
549 |
+
r: parseFloat(match[1]),
|
550 |
+
g: parseFloat(match[2]),
|
551 |
+
b: parseFloat(match[3]),
|
552 |
+
a: parseFloat((_ref = match[4]) != null ? _ref : 1)
|
553 |
+
}, match[4] != null ? "rgba" : "rgb");
|
554 |
+
}
|
555 |
+
return null;
|
556 |
+
};
|
557 |
+
|
558 |
+
Color.componentToHex = function(c) {
|
559 |
+
var hex;
|
560 |
+
hex = c.toString(16);
|
561 |
+
if (hex.length === 1) {
|
562 |
+
return "0" + hex;
|
563 |
+
} else {
|
564 |
+
return hex;
|
565 |
+
}
|
566 |
+
};
|
567 |
+
|
568 |
+
Color.prototype.toHex = function() {
|
569 |
+
return "#" + Color.componentToHex(this.rgb.r) + Color.componentToHex(this.rgb.g) + Color.componentToHex(this.rgb.b);
|
570 |
+
};
|
571 |
+
|
572 |
+
Color.prototype.toRgb = function() {
|
573 |
+
return "rgb(" + this.rgb.r + ", " + this.rgb.g + ", " + this.rgb.b + ")";
|
574 |
+
};
|
575 |
+
|
576 |
+
Color.prototype.toRgba = function() {
|
577 |
+
return "rgba(" + this.rgb.r + ", " + this.rgb.g + ", " + this.rgb.b + ", " + this.rgb.a + ")";
|
578 |
+
};
|
579 |
+
|
580 |
+
return Color;
|
581 |
+
|
582 |
+
})();
|
583 |
+
|
584 |
+
InterpolableColor = (function() {
|
585 |
+
function InterpolableColor(color) {
|
586 |
+
this.color = color;
|
587 |
+
this.format = __bind(this.format, this);
|
588 |
+
this.interpolate = __bind(this.interpolate, this);
|
589 |
+
}
|
590 |
+
|
591 |
+
InterpolableColor.prototype.interpolate = function(endInterpolable, t) {
|
592 |
+
var end, k, rgb, start, v, _i, _len, _ref;
|
593 |
+
start = this.color;
|
594 |
+
end = endInterpolable.color;
|
595 |
+
rgb = {};
|
596 |
+
_ref = ['r', 'g', 'b'];
|
597 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
598 |
+
k = _ref[_i];
|
599 |
+
v = Math.round((end.rgb[k] - start.rgb[k]) * t + start.rgb[k]);
|
600 |
+
rgb[k] = Math.min(255, Math.max(0, v));
|
601 |
+
}
|
602 |
+
k = "a";
|
603 |
+
v = roundf((end.rgb[k] - start.rgb[k]) * t + start.rgb[k], 5);
|
604 |
+
rgb[k] = Math.min(1, Math.max(0, v));
|
605 |
+
return new InterpolableColor(new Color(rgb, end.format));
|
606 |
+
};
|
607 |
+
|
608 |
+
InterpolableColor.prototype.format = function() {
|
609 |
+
if (this.color.format === "hex") {
|
610 |
+
return this.color.toHex();
|
611 |
+
} else if (this.color.format === "rgb") {
|
612 |
+
return this.color.toRgb();
|
613 |
+
} else if (this.color.format === "rgba") {
|
614 |
+
return this.color.toRgba();
|
615 |
+
}
|
616 |
+
};
|
617 |
+
|
618 |
+
InterpolableColor.create = function(value) {
|
619 |
+
var color;
|
620 |
+
if (typeof value !== "string") {
|
621 |
+
return;
|
622 |
+
}
|
623 |
+
color = Color.fromHex(value) || Color.fromRgb(value);
|
624 |
+
if (color != null) {
|
625 |
+
return new InterpolableColor(color);
|
626 |
+
}
|
627 |
+
return null;
|
628 |
+
};
|
629 |
+
|
630 |
+
return InterpolableColor;
|
631 |
+
|
632 |
+
})();
|
633 |
+
|
634 |
+
DecomposedMatrix2D = (function() {
|
635 |
+
function DecomposedMatrix2D(props) {
|
636 |
+
this.props = props;
|
637 |
+
this.applyRotateCenter = __bind(this.applyRotateCenter, this);
|
638 |
+
this.format = __bind(this.format, this);
|
639 |
+
this.interpolate = __bind(this.interpolate, this);
|
640 |
+
}
|
641 |
+
|
642 |
+
DecomposedMatrix2D.prototype.interpolate = function(endMatrix, t) {
|
643 |
+
var i, k, newProps, _i, _j, _k, _l, _len, _len1, _ref, _ref1, _ref2;
|
644 |
+
newProps = {};
|
645 |
+
_ref = ['translate', 'scale', 'rotate'];
|
646 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
647 |
+
k = _ref[_i];
|
648 |
+
newProps[k] = [];
|
649 |
+
for (i = _j = 0, _ref1 = this.props[k].length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
|
650 |
+
newProps[k][i] = (endMatrix.props[k][i] - this.props[k][i]) * t + this.props[k][i];
|
651 |
+
}
|
652 |
+
}
|
653 |
+
for (i = _k = 1; _k <= 2; i = ++_k) {
|
654 |
+
newProps['rotate'][i] = endMatrix.props['rotate'][i];
|
655 |
+
}
|
656 |
+
_ref2 = ['skew'];
|
657 |
+
for (_l = 0, _len1 = _ref2.length; _l < _len1; _l++) {
|
658 |
+
k = _ref2[_l];
|
659 |
+
newProps[k] = (endMatrix.props[k] - this.props[k]) * t + this.props[k];
|
660 |
+
}
|
661 |
+
return new DecomposedMatrix2D(newProps);
|
662 |
+
};
|
663 |
+
|
664 |
+
DecomposedMatrix2D.prototype.format = function() {
|
665 |
+
return "translate(" + (this.props.translate.join(',')) + ") rotate(" + (this.props.rotate.join(',')) + ") skewX(" + this.props.skew + ") scale(" + (this.props.scale.join(',')) + ")";
|
666 |
+
};
|
667 |
+
|
668 |
+
DecomposedMatrix2D.prototype.applyRotateCenter = function(rotateC) {
|
669 |
+
var i, m, m2d, negativeTranslate, _i, _results;
|
670 |
+
m = baseSVG.createSVGMatrix();
|
671 |
+
m = m.translate(rotateC[0], rotateC[1]);
|
672 |
+
m = m.rotate(this.props.rotate[0]);
|
673 |
+
m = m.translate(-rotateC[0], -rotateC[1]);
|
674 |
+
m2d = new Matrix2D(m);
|
675 |
+
negativeTranslate = m2d.decompose().props.translate;
|
676 |
+
_results = [];
|
677 |
+
for (i = _i = 0; _i <= 1; i = ++_i) {
|
678 |
+
_results.push(this.props.translate[i] -= negativeTranslate[i]);
|
679 |
+
}
|
680 |
+
return _results;
|
681 |
+
};
|
682 |
+
|
683 |
+
return DecomposedMatrix2D;
|
684 |
+
|
685 |
+
})();
|
686 |
+
|
687 |
+
baseSVG = typeof document !== "undefined" && document !== null ? document.createElementNS("http://www.w3.org/2000/svg", "svg") : void 0;
|
688 |
+
|
689 |
+
Matrix2D = (function() {
|
690 |
+
function Matrix2D(m) {
|
691 |
+
this.m = m;
|
692 |
+
this.applyProperties = __bind(this.applyProperties, this);
|
693 |
+
this.decompose = __bind(this.decompose, this);
|
694 |
+
if (!this.m) {
|
695 |
+
this.m = baseSVG.createSVGMatrix();
|
696 |
+
}
|
697 |
+
}
|
698 |
+
|
699 |
+
Matrix2D.prototype.decompose = function() {
|
700 |
+
var kx, ky, kz, r0, r1;
|
701 |
+
r0 = new Vector([this.m.a, this.m.b]);
|
702 |
+
r1 = new Vector([this.m.c, this.m.d]);
|
703 |
+
kx = r0.length();
|
704 |
+
kz = r0.dot(r1);
|
705 |
+
r0 = r0.normalize();
|
706 |
+
ky = r1.combine(r0, 1, -kz).length();
|
707 |
+
return new DecomposedMatrix2D({
|
708 |
+
translate: [this.m.e, this.m.f],
|
709 |
+
rotate: [Math.atan2(this.m.b, this.m.a) * 180 / Math.PI, this.rotateCX, this.rotateCY],
|
710 |
+
scale: [kx, ky],
|
711 |
+
skew: kz / ky * 180 / Math.PI
|
712 |
+
});
|
713 |
+
};
|
714 |
+
|
715 |
+
Matrix2D.prototype.applyProperties = function(properties) {
|
716 |
+
var hash, k, props, v, _i, _len, _ref, _ref1;
|
717 |
+
hash = {};
|
718 |
+
for (_i = 0, _len = properties.length; _i < _len; _i++) {
|
719 |
+
props = properties[_i];
|
720 |
+
hash[props[0]] = props[1];
|
721 |
+
}
|
722 |
+
for (k in hash) {
|
723 |
+
v = hash[k];
|
724 |
+
if (k === "translateX") {
|
725 |
+
this.m = this.m.translate(v, 0);
|
726 |
+
} else if (k === "translateY") {
|
727 |
+
this.m = this.m.translate(0, v);
|
728 |
+
} else if (k === "scaleX") {
|
729 |
+
this.m = this.m.scaleNonUniform(v, 1);
|
730 |
+
} else if (k === "scaleY") {
|
731 |
+
this.m = this.m.scaleNonUniform(1, v);
|
732 |
+
} else if (k === "rotateZ") {
|
733 |
+
this.m = this.m.rotate(v);
|
734 |
+
} else if (k === "skewX") {
|
735 |
+
this.m = this.m.skewX(v);
|
736 |
+
} else if (k === "skewY") {
|
737 |
+
this.m = this.m.skewY(v);
|
738 |
+
}
|
739 |
+
}
|
740 |
+
this.rotateCX = (_ref = hash.rotateCX) != null ? _ref : 0;
|
741 |
+
return this.rotateCY = (_ref1 = hash.rotateCY) != null ? _ref1 : 0;
|
742 |
+
};
|
743 |
+
|
744 |
+
return Matrix2D;
|
745 |
+
|
746 |
+
})();
|
747 |
+
|
748 |
+
Vector = (function() {
|
749 |
+
function Vector(els) {
|
750 |
+
this.els = els;
|
751 |
+
this.combine = __bind(this.combine, this);
|
752 |
+
this.normalize = __bind(this.normalize, this);
|
753 |
+
this.length = __bind(this.length, this);
|
754 |
+
this.cross = __bind(this.cross, this);
|
755 |
+
this.dot = __bind(this.dot, this);
|
756 |
+
this.e = __bind(this.e, this);
|
757 |
+
}
|
758 |
+
|
759 |
+
Vector.prototype.e = function(i) {
|
760 |
+
if (i < 1 || i > this.els.length) {
|
761 |
+
return null;
|
762 |
+
} else {
|
763 |
+
return this.els[i - 1];
|
764 |
+
}
|
765 |
+
};
|
766 |
+
|
767 |
+
Vector.prototype.dot = function(vector) {
|
768 |
+
var V, n, product;
|
769 |
+
V = vector.els || vector;
|
770 |
+
product = 0;
|
771 |
+
n = this.els.length;
|
772 |
+
if (n !== V.length) {
|
773 |
+
return null;
|
774 |
+
}
|
775 |
+
n += 1;
|
776 |
+
while (--n) {
|
777 |
+
product += this.els[n - 1] * V[n - 1];
|
778 |
+
}
|
779 |
+
return product;
|
780 |
+
};
|
781 |
+
|
782 |
+
Vector.prototype.cross = function(vector) {
|
783 |
+
var A, B;
|
784 |
+
B = vector.els || vector;
|
785 |
+
if (this.els.length !== 3 || B.length !== 3) {
|
786 |
+
return null;
|
787 |
+
}
|
788 |
+
A = this.els;
|
789 |
+
return new Vector([(A[1] * B[2]) - (A[2] * B[1]), (A[2] * B[0]) - (A[0] * B[2]), (A[0] * B[1]) - (A[1] * B[0])]);
|
790 |
+
};
|
791 |
+
|
792 |
+
Vector.prototype.length = function() {
|
793 |
+
var a, e, _i, _len, _ref;
|
794 |
+
a = 0;
|
795 |
+
_ref = this.els;
|
796 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
797 |
+
e = _ref[_i];
|
798 |
+
a += Math.pow(e, 2);
|
799 |
+
}
|
800 |
+
return Math.sqrt(a);
|
801 |
+
};
|
802 |
+
|
803 |
+
Vector.prototype.normalize = function() {
|
804 |
+
var e, i, length, newElements, _ref;
|
805 |
+
length = this.length();
|
806 |
+
newElements = [];
|
807 |
+
_ref = this.els;
|
808 |
+
for (i in _ref) {
|
809 |
+
e = _ref[i];
|
810 |
+
newElements[i] = e / length;
|
811 |
+
}
|
812 |
+
return new Vector(newElements);
|
813 |
+
};
|
814 |
+
|
815 |
+
Vector.prototype.combine = function(b, ascl, bscl) {
|
816 |
+
var i, result, _i, _ref;
|
817 |
+
result = [];
|
818 |
+
for (i = _i = 0, _ref = this.els.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
|
819 |
+
result[i] = (ascl * this.els[i]) + (bscl * b.els[i]);
|
820 |
+
}
|
821 |
+
return new Vector(result);
|
822 |
+
};
|
823 |
+
|
824 |
+
return Vector;
|
825 |
+
|
826 |
+
})();
|
827 |
+
|
828 |
+
DecomposedMatrix = (function() {
|
829 |
+
function DecomposedMatrix() {
|
830 |
+
this.toMatrix = __bind(this.toMatrix, this);
|
831 |
+
this.format = __bind(this.format, this);
|
832 |
+
this.interpolate = __bind(this.interpolate, this);
|
833 |
+
}
|
834 |
+
|
835 |
+
DecomposedMatrix.prototype.interpolate = function(decomposedB, t, only) {
|
836 |
+
var angle, decomposed, decomposedA, i, invscale, invth, k, qa, qb, scale, th, _i, _j, _k, _l, _len, _ref, _ref1;
|
837 |
+
if (only == null) {
|
838 |
+
only = null;
|
839 |
+
}
|
840 |
+
decomposedA = this;
|
841 |
+
decomposed = new DecomposedMatrix;
|
842 |
+
_ref = ['translate', 'scale', 'skew', 'perspective'];
|
843 |
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
844 |
+
k = _ref[_i];
|
845 |
+
decomposed[k] = [];
|
846 |
+
for (i = _j = 0, _ref1 = decomposedA[k].length - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
|
847 |
+
if ((only == null) || only.indexOf(k) > -1 || only.indexOf("" + k + ['x', 'y', 'z'][i]) > -1) {
|
848 |
+
decomposed[k][i] = (decomposedB[k][i] - decomposedA[k][i]) * t + decomposedA[k][i];
|
849 |
+
} else {
|
850 |
+
decomposed[k][i] = decomposedA[k][i];
|
851 |
+
}
|
852 |
+
}
|
853 |
+
}
|
854 |
+
if ((only == null) || only.indexOf('rotate') !== -1) {
|
855 |
+
qa = decomposedA.quaternion;
|
856 |
+
qb = decomposedB.quaternion;
|
857 |
+
angle = qa[0] * qb[0] + qa[1] * qb[1] + qa[2] * qb[2] + qa[3] * qb[3];
|
858 |
+
if (angle < 0.0) {
|
859 |
+
for (i = _k = 0; _k <= 3; i = ++_k) {
|
860 |
+
qa[i] = -qa[i];
|
861 |
+
}
|
862 |
+
angle = -angle;
|
863 |
+
}
|
864 |
+
if (angle + 1.0 > .05) {
|
865 |
+
if (1.0 - angle >= .05) {
|
866 |
+
th = Math.acos(angle);
|
867 |
+
invth = 1.0 / Math.sin(th);
|
868 |
+
scale = Math.sin(th * (1.0 - t)) * invth;
|
869 |
+
invscale = Math.sin(th * t) * invth;
|
870 |
+
} else {
|
871 |
+
scale = 1.0 - t;
|
872 |
+
invscale = t;
|
873 |
+
}
|
874 |
+
} else {
|
875 |
+
qb[0] = -qa[1];
|
876 |
+
qb[1] = qa[0];
|
877 |
+
qb[2] = -qa[3];
|
878 |
+
qb[3] = qa[2];
|
879 |
+
scale = Math.sin(piDouble * (.5 - t));
|
880 |
+
invscale = Math.sin(piDouble * t);
|
881 |
+
}
|
882 |
+
decomposed.quaternion = [];
|
883 |
+
for (i = _l = 0; _l <= 3; i = ++_l) {
|
884 |
+
decomposed.quaternion[i] = qa[i] * scale + qb[i] * invscale;
|
885 |
+
}
|
886 |
+
} else {
|
887 |
+
decomposed.quaternion = decomposedA.quaternion;
|
888 |
+
}
|
889 |
+
return decomposed;
|
890 |
+
};
|
891 |
+
|
892 |
+
DecomposedMatrix.prototype.format = function() {
|
893 |
+
return this.toMatrix().toString();
|
894 |
+
};
|
895 |
+
|
896 |
+
DecomposedMatrix.prototype.toMatrix = function() {
|
897 |
+
var decomposedMatrix, i, j, match, matrix, quaternion, skew, temp, w, x, y, z, _i, _j, _k, _l;
|
898 |
+
decomposedMatrix = this;
|
899 |
+
matrix = Matrix.I(4);
|
900 |
+
for (i = _i = 0; _i <= 3; i = ++_i) {
|
901 |
+
matrix.els[i][3] = decomposedMatrix.perspective[i];
|
902 |
+
}
|
903 |
+
quaternion = decomposedMatrix.quaternion;
|
904 |
+
x = quaternion[0];
|
905 |
+
y = quaternion[1];
|
906 |
+
z = quaternion[2];
|
907 |
+
w = quaternion[3];
|
908 |
+
skew = decomposedMatrix.skew;
|
909 |
+
match = [[1, 0], [2, 0], [2, 1]];
|
910 |
+
for (i = _j = 2; _j >= 0; i = --_j) {
|
911 |
+
if (skew[i]) {
|
912 |
+
temp = Matrix.I(4);
|
913 |
+
temp.els[match[i][0]][match[i][1]] = skew[i];
|
914 |
+
matrix = matrix.multiply(temp);
|
915 |
+
}
|
916 |
+
}
|
917 |
+
matrix = matrix.multiply(new Matrix([[1 - 2 * (y * y + z * z), 2 * (x * y - z * w), 2 * (x * z + y * w), 0], [2 * (x * y + z * w), 1 - 2 * (x * x + z * z), 2 * (y * z - x * w), 0], [2 * (x * z - y * w), 2 * (y * z + x * w), 1 - 2 * (x * x + y * y), 0], [0, 0, 0, 1]]));
|
918 |
+
for (i = _k = 0; _k <= 2; i = ++_k) {
|
919 |
+
for (j = _l = 0; _l <= 2; j = ++_l) {
|
920 |
+
matrix.els[i][j] *= decomposedMatrix.scale[i];
|
921 |
+
}
|
922 |
+
matrix.els[3][i] = decomposedMatrix.translate[i];
|
923 |
+
}
|
924 |
+
return matrix;
|
925 |
+
};
|
926 |
+
|
927 |
+
return DecomposedMatrix;
|
928 |
+
|
929 |
+
})();
|
930 |
+
|
931 |
+
Matrix = (function() {
|
932 |
+
function Matrix(els) {
|
933 |
+
this.els = els;
|
934 |
+
this.toString = __bind(this.toString, this);
|
935 |
+
this.decompose = __bind(this.decompose, this);
|
936 |
+
this.inverse = __bind(this.inverse, this);
|
937 |
+
this.augment = __bind(this.augment, this);
|
938 |
+
this.toRightTriangular = __bind(this.toRightTriangular, this);
|
939 |
+
this.transpose = __bind(this.transpose, this);
|
940 |
+
this.multiply = __bind(this.multiply, this);
|
941 |
+
this.dup = __bind(this.dup, this);
|
942 |
+
this.e = __bind(this.e, this);
|
943 |
+
}
|
944 |
+
|
945 |
+
Matrix.prototype.e = function(i, j) {
|
946 |
+
if (i < 1 || i > this.els.length || j < 1 || j > this.els[0].length) {
|
947 |
+
return null;
|
948 |
+
}
|
949 |
+
return this.els[i - 1][j - 1];
|
950 |
+
};
|
951 |
+
|
952 |
+
Matrix.prototype.dup = function() {
|
953 |
+
return new Matrix(this.els);
|
954 |
+
};
|
955 |
+
|
956 |
+
Matrix.prototype.multiply = function(matrix) {
|
957 |
+
var M, c, cols, elements, i, j, ki, kj, nc, ni, nj, returnVector, sum;
|
958 |
+
returnVector = matrix.modulus ? true : false;
|
959 |
+
M = matrix.els || matrix;
|
960 |
+
if (typeof M[0][0] === 'undefined') {
|
961 |
+
M = new Matrix(M).els;
|
962 |
+
}
|
963 |
+
ni = this.els.length;
|
964 |
+
ki = ni;
|
965 |
+
kj = M[0].length;
|
966 |
+
cols = this.els[0].length;
|
967 |
+
elements = [];
|
968 |
+
ni += 1;
|
969 |
+
while (--ni) {
|
970 |
+
i = ki - ni;
|
971 |
+
elements[i] = [];
|
972 |
+
nj = kj;
|
973 |
+
nj += 1;
|
974 |
+
while (--nj) {
|
975 |
+
j = kj - nj;
|
976 |
+
sum = 0;
|
977 |
+
nc = cols;
|
978 |
+
nc += 1;
|
979 |
+
while (--nc) {
|
980 |
+
c = cols - nc;
|
981 |
+
sum += this.els[i][c] * M[c][j];
|
982 |
+
}
|
983 |
+
elements[i][j] = sum;
|
984 |
+
}
|
985 |
+
}
|
986 |
+
M = new Matrix(elements);
|
987 |
+
if (returnVector) {
|
988 |
+
return M.col(1);
|
989 |
+
} else {
|
990 |
+
return M;
|
991 |
+
}
|
992 |
+
};
|
993 |
+
|
994 |
+
Matrix.prototype.transpose = function() {
|
995 |
+
var cols, elements, i, j, ni, nj, rows;
|
996 |
+
rows = this.els.length;
|
997 |
+
cols = this.els[0].length;
|
998 |
+
elements = [];
|
999 |
+
ni = cols;
|
1000 |
+
ni += 1;
|
1001 |
+
while (--ni) {
|
1002 |
+
i = cols - ni;
|
1003 |
+
elements[i] = [];
|
1004 |
+
nj = rows;
|
1005 |
+
nj += 1;
|
1006 |
+
while (--nj) {
|
1007 |
+
j = rows - nj;
|
1008 |
+
elements[i][j] = this.els[j][i];
|
1009 |
+
}
|
1010 |
+
}
|
1011 |
+
return new Matrix(elements);
|
1012 |
+
};
|
1013 |
+
|
1014 |
+
Matrix.prototype.toRightTriangular = function() {
|
1015 |
+
var M, els, i, j, k, kp, multiplier, n, np, p, _i, _j, _ref, _ref1;
|
1016 |
+
M = this.dup();
|
1017 |
+
n = this.els.length;
|
1018 |
+
k = n;
|
1019 |
+
kp = this.els[0].length;
|
1020 |
+
while (--n) {
|
1021 |
+
i = k - n;
|
1022 |
+
if (M.els[i][i] === 0) {
|
1023 |
+
for (j = _i = _ref = i + 1; _ref <= k ? _i < k : _i > k; j = _ref <= k ? ++_i : --_i) {
|
1024 |
+
if (M.els[j][i] !== 0) {
|
1025 |
+
els = [];
|
1026 |
+
np = kp;
|
1027 |
+
np += 1;
|
1028 |
+
while (--np) {
|
1029 |
+
p = kp - np;
|
1030 |
+
els.push(M.els[i][p] + M.els[j][p]);
|
1031 |
+
}
|
1032 |
+
M.els[i] = els;
|
1033 |
+
break;
|
1034 |
+
}
|
1035 |
+
}
|
1036 |
+
}
|
1037 |
+
if (M.els[i][i] !== 0) {
|
1038 |
+
for (j = _j = _ref1 = i + 1; _ref1 <= k ? _j < k : _j > k; j = _ref1 <= k ? ++_j : --_j) {
|
1039 |
+
multiplier = M.els[j][i] / M.els[i][i];
|
1040 |
+
els = [];
|
1041 |
+
np = kp;
|
1042 |
+
np += 1;
|
1043 |
+
while (--np) {
|
1044 |
+
p = kp - np;
|
1045 |
+
els.push(p <= i ? 0 : M.els[j][p] - M.els[i][p] * multiplier);
|
1046 |
+
}
|
1047 |
+
M.els[j] = els;
|
1048 |
+
}
|
1049 |
+
}
|
1050 |
+
}
|
1051 |
+
return M;
|
1052 |
+
};
|
1053 |
+
|
1054 |
+
Matrix.prototype.augment = function(matrix) {
|
1055 |
+
var M, T, cols, i, j, ki, kj, ni, nj;
|
1056 |
+
M = matrix.els || matrix;
|
1057 |
+
if (typeof M[0][0] === 'undefined') {
|
1058 |
+
M = new Matrix(M).els;
|
1059 |
+
}
|
1060 |
+
T = this.dup();
|
1061 |
+
cols = T.els[0].length;
|
1062 |
+
ni = T.els.length;
|
1063 |
+
ki = ni;
|
1064 |
+
kj = M[0].length;
|
1065 |
+
if (ni !== M.length) {
|
1066 |
+
return null;
|
1067 |
+
}
|
1068 |
+
ni += 1;
|
1069 |
+
while (--ni) {
|
1070 |
+
i = ki - ni;
|
1071 |
+
nj = kj;
|
1072 |
+
nj += 1;
|
1073 |
+
while (--nj) {
|
1074 |
+
j = kj - nj;
|
1075 |
+
T.els[i][cols + j] = M[i][j];
|
1076 |
+
}
|
1077 |
+
}
|
1078 |
+
return T;
|
1079 |
+
};
|
1080 |
+
|
1081 |
+
Matrix.prototype.inverse = function() {
|
1082 |
+
var M, divisor, els, i, inverse_elements, j, ki, kp, new_element, ni, np, p, _i;
|
1083 |
+
ni = this.els.length;
|
1084 |
+
ki = ni;
|
1085 |
+
M = this.augment(Matrix.I(ni)).toRightTriangular();
|
1086 |
+
kp = M.els[0].length;
|
1087 |
+
inverse_elements = [];
|
1088 |
+
ni += 1;
|
1089 |
+
while (--ni) {
|
1090 |
+
i = ni - 1;
|
1091 |
+
els = [];
|
1092 |
+
np = kp;
|
1093 |
+
inverse_elements[i] = [];
|
1094 |
+
divisor = M.els[i][i];
|
1095 |
+
np += 1;
|
1096 |
+
while (--np) {
|
1097 |
+
p = kp - np;
|
1098 |
+
new_element = M.els[i][p] / divisor;
|
1099 |
+
els.push(new_element);
|
1100 |
+
if (p >= ki) {
|
1101 |
+
inverse_elements[i].push(new_element);
|
1102 |
+
}
|
1103 |
+
}
|
1104 |
+
M.els[i] = els;
|
1105 |
+
for (j = _i = 0; 0 <= i ? _i < i : _i > i; j = 0 <= i ? ++_i : --_i) {
|
1106 |
+
els = [];
|
1107 |
+
np = kp;
|
1108 |
+
np += 1;
|
1109 |
+
while (--np) {
|
1110 |
+
p = kp - np;
|
1111 |
+
els.push(M.els[j][p] - M.els[i][p] * M.els[j][i]);
|
1112 |
+
}
|
1113 |
+
M.els[j] = els;
|
1114 |
+
}
|
1115 |
+
}
|
1116 |
+
return new Matrix(inverse_elements);
|
1117 |
+
};
|
1118 |
+
|
1119 |
+
Matrix.I = function(n) {
|
1120 |
+
var els, i, j, k, nj;
|
1121 |
+
els = [];
|
1122 |
+
k = n;
|
1123 |
+
n += 1;
|
1124 |
+
while (--n) {
|
1125 |
+
i = k - n;
|
1126 |
+
els[i] = [];
|
1127 |
+
nj = k;
|
1128 |
+
nj += 1;
|
1129 |
+
while (--nj) {
|
1130 |
+
j = k - nj;
|
1131 |
+
els[i][j] = i === j ? 1 : 0;
|
1132 |
+
}
|
1133 |
+
}
|
1134 |
+
return new Matrix(els);
|
1135 |
+
};
|
1136 |
+
|
1137 |
+
Matrix.prototype.decompose = function() {
|
1138 |
+
var els, i, inversePerspectiveMatrix, j, k, matrix, pdum3, perspective, perspectiveMatrix, quaternion, result, rightHandSide, rotate, row, rowElement, s, scale, skew, t, translate, transposedInversePerspectiveMatrix, type, typeKey, v, w, x, y, z, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
|
1139 |
+
matrix = this;
|
1140 |
+
translate = [];
|
1141 |
+
scale = [];
|
1142 |
+
skew = [];
|
1143 |
+
quaternion = [];
|
1144 |
+
perspective = [];
|
1145 |
+
els = [];
|
1146 |
+
for (i = _i = 0; _i <= 3; i = ++_i) {
|
1147 |
+
els[i] = [];
|
1148 |
+
for (j = _j = 0; _j <= 3; j = ++_j) {
|
1149 |
+
els[i][j] = matrix.els[i][j];
|
1150 |
+
}
|
1151 |
+
}
|
1152 |
+
if (els[3][3] === 0) {
|
1153 |
+
return false;
|
1154 |
+
}
|
1155 |
+
for (i = _k = 0; _k <= 3; i = ++_k) {
|
1156 |
+
for (j = _l = 0; _l <= 3; j = ++_l) {
|
1157 |
+
els[i][j] /= els[3][3];
|
1158 |
+
}
|
1159 |
+
}
|
1160 |
+
perspectiveMatrix = matrix.dup();
|
1161 |
+
for (i = _m = 0; _m <= 2; i = ++_m) {
|
1162 |
+
perspectiveMatrix.els[i][3] = 0;
|
1163 |
+
}
|
1164 |
+
perspectiveMatrix.els[3][3] = 1;
|
1165 |
+
if (els[0][3] !== 0 || els[1][3] !== 0 || els[2][3] !== 0) {
|
1166 |
+
rightHandSide = new Vector(els.slice(0, 4)[3]);
|
1167 |
+
inversePerspectiveMatrix = perspectiveMatrix.inverse();
|
1168 |
+
transposedInversePerspectiveMatrix = inversePerspectiveMatrix.transpose();
|
1169 |
+
perspective = transposedInversePerspectiveMatrix.multiply(rightHandSide).els;
|
1170 |
+
for (i = _n = 0; _n <= 2; i = ++_n) {
|
1171 |
+
els[i][3] = 0;
|
1172 |
+
}
|
1173 |
+
els[3][3] = 1;
|
1174 |
+
} else {
|
1175 |
+
perspective = [0, 0, 0, 1];
|
1176 |
+
}
|
1177 |
+
for (i = _o = 0; _o <= 2; i = ++_o) {
|
1178 |
+
translate[i] = els[3][i];
|
1179 |
+
els[3][i] = 0;
|
1180 |
+
}
|
1181 |
+
row = [];
|
1182 |
+
for (i = _p = 0; _p <= 2; i = ++_p) {
|
1183 |
+
row[i] = new Vector(els[i].slice(0, 3));
|
1184 |
+
}
|
1185 |
+
scale[0] = row[0].length();
|
1186 |
+
row[0] = row[0].normalize();
|
1187 |
+
skew[0] = row[0].dot(row[1]);
|
1188 |
+
row[1] = row[1].combine(row[0], 1.0, -skew[0]);
|
1189 |
+
scale[1] = row[1].length();
|
1190 |
+
row[1] = row[1].normalize();
|
1191 |
+
skew[0] /= scale[1];
|
1192 |
+
skew[1] = row[0].dot(row[2]);
|
1193 |
+
row[2] = row[2].combine(row[0], 1.0, -skew[1]);
|
1194 |
+
skew[2] = row[1].dot(row[2]);
|
1195 |
+
row[2] = row[2].combine(row[1], 1.0, -skew[2]);
|
1196 |
+
scale[2] = row[2].length();
|
1197 |
+
row[2] = row[2].normalize();
|
1198 |
+
skew[1] /= scale[2];
|
1199 |
+
skew[2] /= scale[2];
|
1200 |
+
pdum3 = row[1].cross(row[2]);
|
1201 |
+
if (row[0].dot(pdum3) < 0) {
|
1202 |
+
for (i = _q = 0; _q <= 2; i = ++_q) {
|
1203 |
+
scale[i] *= -1;
|
1204 |
+
for (j = _r = 0; _r <= 2; j = ++_r) {
|
1205 |
+
row[i].els[j] *= -1;
|
1206 |
+
}
|
1207 |
+
}
|
1208 |
+
}
|
1209 |
+
rowElement = function(index, elementIndex) {
|
1210 |
+
return row[index].els[elementIndex];
|
1211 |
+
};
|
1212 |
+
rotate = [];
|
1213 |
+
rotate[1] = Math.asin(-rowElement(0, 2));
|
1214 |
+
if (Math.cos(rotate[1]) !== 0) {
|
1215 |
+
rotate[0] = Math.atan2(rowElement(1, 2), rowElement(2, 2));
|
1216 |
+
rotate[2] = Math.atan2(rowElement(0, 1), rowElement(0, 0));
|
1217 |
+
} else {
|
1218 |
+
rotate[0] = Math.atan2(-rowElement(2, 0), rowElement(1, 1));
|
1219 |
+
rotate[1] = 0;
|
1220 |
+
}
|
1221 |
+
t = rowElement(0, 0) + rowElement(1, 1) + rowElement(2, 2) + 1.0;
|
1222 |
+
if (t > 1e-4) {
|
1223 |
+
s = 0.5 / Math.sqrt(t);
|
1224 |
+
w = 0.25 / s;
|
1225 |
+
x = (rowElement(2, 1) - rowElement(1, 2)) * s;
|
1226 |
+
y = (rowElement(0, 2) - rowElement(2, 0)) * s;
|
1227 |
+
z = (rowElement(1, 0) - rowElement(0, 1)) * s;
|
1228 |
+
} else if ((rowElement(0, 0) > rowElement(1, 1)) && (rowElement(0, 0) > rowElement(2, 2))) {
|
1229 |
+
s = Math.sqrt(1.0 + rowElement(0, 0) - rowElement(1, 1) - rowElement(2, 2)) * 2.0;
|
1230 |
+
x = 0.25 * s;
|
1231 |
+
y = (rowElement(0, 1) + rowElement(1, 0)) / s;
|
1232 |
+
z = (rowElement(0, 2) + rowElement(2, 0)) / s;
|
1233 |
+
w = (rowElement(2, 1) - rowElement(1, 2)) / s;
|
1234 |
+
} else if (rowElement(1, 1) > rowElement(2, 2)) {
|
1235 |
+
s = Math.sqrt(1.0 + rowElement(1, 1) - rowElement(0, 0) - rowElement(2, 2)) * 2.0;
|
1236 |
+
x = (rowElement(0, 1) + rowElement(1, 0)) / s;
|
1237 |
+
y = 0.25 * s;
|
1238 |
+
z = (rowElement(1, 2) + rowElement(2, 1)) / s;
|
1239 |
+
w = (rowElement(0, 2) - rowElement(2, 0)) / s;
|
1240 |
+
} else {
|
1241 |
+
s = Math.sqrt(1.0 + rowElement(2, 2) - rowElement(0, 0) - rowElement(1, 1)) * 2.0;
|
1242 |
+
x = (rowElement(0, 2) + rowElement(2, 0)) / s;
|
1243 |
+
y = (rowElement(1, 2) + rowElement(2, 1)) / s;
|
1244 |
+
z = 0.25 * s;
|
1245 |
+
w = (rowElement(1, 0) - rowElement(0, 1)) / s;
|
1246 |
+
}
|
1247 |
+
quaternion = [x, y, z, w];
|
1248 |
+
result = new DecomposedMatrix;
|
1249 |
+
result.translate = translate;
|
1250 |
+
result.scale = scale;
|
1251 |
+
result.skew = skew;
|
1252 |
+
result.quaternion = quaternion;
|
1253 |
+
result.perspective = perspective;
|
1254 |
+
result.rotate = rotate;
|
1255 |
+
for (typeKey in result) {
|
1256 |
+
type = result[typeKey];
|
1257 |
+
for (k in type) {
|
1258 |
+
v = type[k];
|
1259 |
+
if (isNaN(v)) {
|
1260 |
+
type[k] = 0;
|
1261 |
+
}
|
1262 |
+
}
|
1263 |
+
}
|
1264 |
+
return result;
|
1265 |
+
};
|
1266 |
+
|
1267 |
+
Matrix.prototype.toString = function() {
|
1268 |
+
var i, j, str, _i, _j;
|
1269 |
+
str = 'matrix3d(';
|
1270 |
+
for (i = _i = 0; _i <= 3; i = ++_i) {
|
1271 |
+
for (j = _j = 0; _j <= 3; j = ++_j) {
|
1272 |
+
str += roundf(this.els[i][j], 10);
|
1273 |
+
if (!(i === 3 && j === 3)) {
|
1274 |
+
str += ',';
|
1275 |
+
}
|
1276 |
+
}
|
1277 |
+
}
|
1278 |
+
str += ')';
|
1279 |
+
return str;
|
1280 |
+
};
|
1281 |
+
|
1282 |
+
Matrix.matrixForTransform = cacheFn(function(transform) {
|
1283 |
+
var matrixEl, result, style, _ref, _ref1, _ref2;
|
1284 |
+
matrixEl = document.createElement('div');
|
1285 |
+
matrixEl.style.position = 'absolute';
|
1286 |
+
matrixEl.style.visibility = 'hidden';
|
1287 |
+
matrixEl.style[propertyWithPrefix("transform")] = transform;
|
1288 |
+
document.body.appendChild(matrixEl);
|
1289 |
+
style = window.getComputedStyle(matrixEl, null);
|
1290 |
+
result = (_ref = (_ref1 = style.transform) != null ? _ref1 : style[propertyWithPrefix("transform")]) != null ? _ref : (_ref2 = dynamics.tests) != null ? _ref2.matrixForTransform(transform) : void 0;
|
1291 |
+
document.body.removeChild(matrixEl);
|
1292 |
+
return result;
|
1293 |
+
});
|
1294 |
+
|
1295 |
+
Matrix.fromTransform = function(transform) {
|
1296 |
+
var digits, elements, i, match, matrixElements, _i;
|
1297 |
+
match = transform != null ? transform.match(/matrix3?d?\(([-0-9,e \.]*)\)/) : void 0;
|
1298 |
+
if (match) {
|
1299 |
+
digits = match[1].split(',');
|
1300 |
+
digits = digits.map(parseFloat);
|
1301 |
+
if (digits.length === 6) {
|
1302 |
+
elements = [digits[0], digits[1], 0, 0, digits[2], digits[3], 0, 0, 0, 0, 1, 0, digits[4], digits[5], 0, 1];
|
1303 |
+
} else {
|
1304 |
+
elements = digits;
|
1305 |
+
}
|
1306 |
+
} else {
|
1307 |
+
elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
|
1308 |
+
}
|
1309 |
+
matrixElements = [];
|
1310 |
+
for (i = _i = 0; _i <= 3; i = ++_i) {
|
1311 |
+
matrixElements.push(elements.slice(i * 4, i * 4 + 4));
|
1312 |
+
}
|
1313 |
+
return new Matrix(matrixElements);
|
1314 |
+
};
|
1315 |
+
|
1316 |
+
return Matrix;
|
1317 |
+
|
1318 |
+
})();
|
1319 |
+
|
1320 |
+
prefixFor = cacheFn(function(property) {
|
1321 |
+
var k, prefix, prop, propArray, propertyName, _i, _j, _len, _len1, _ref;
|
1322 |
+
if (document.body.style[property] !== void 0) {
|
1323 |
+
return '';
|
1324 |
+
}
|
1325 |
+
propArray = property.split('-');
|
1326 |
+
propertyName = "";
|
1327 |
+
for (_i = 0, _len = propArray.length; _i < _len; _i++) {
|
1328 |
+
prop = propArray[_i];
|
1329 |
+
propertyName += prop.substring(0, 1).toUpperCase() + prop.substring(1);
|
1330 |
+
}
|
1331 |
+
_ref = ["Webkit", "Moz", "ms"];
|
1332 |
+
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
|
1333 |
+
prefix = _ref[_j];
|
1334 |
+
k = prefix + propertyName;
|
1335 |
+
if (document.body.style[k] !== void 0) {
|
1336 |
+
return prefix;
|
1337 |
+
}
|
1338 |
+
}
|
1339 |
+
return '';
|
1340 |
+
});
|
1341 |
+
|
1342 |
+
propertyWithPrefix = cacheFn(function(property) {
|
1343 |
+
var prefix;
|
1344 |
+
prefix = prefixFor(property);
|
1345 |
+
if (prefix === 'Moz') {
|
1346 |
+
return "" + prefix + (property.substring(0, 1).toUpperCase() + property.substring(1));
|
1347 |
+
}
|
1348 |
+
if (prefix !== '') {
|
1349 |
+
return "-" + (prefix.toLowerCase()) + "-" + (toDashed(property));
|
1350 |
+
}
|
1351 |
+
return toDashed(property);
|
1352 |
+
});
|
1353 |
+
|
1354 |
+
rAF = typeof window !== "undefined" && window !== null ? window.requestAnimationFrame : void 0;
|
1355 |
+
|
1356 |
+
animations = [];
|
1357 |
+
|
1358 |
+
animationsTimeouts = [];
|
1359 |
+
|
1360 |
+
slow = false;
|
1361 |
+
|
1362 |
+
slowRatio = 1;
|
1363 |
+
|
1364 |
+
if (typeof window !== "undefined" && window !== null) {
|
1365 |
+
window.addEventListener('keyup', function(e) {
|
1366 |
+
if (e.keyCode === 68 && e.shiftKey && e.ctrlKey) {
|
1367 |
+
return dynamics.toggleSlow();
|
1368 |
+
}
|
1369 |
+
});
|
1370 |
+
}
|
1371 |
+
|
1372 |
+
if (rAF == null) {
|
1373 |
+
lastTime = 0;
|
1374 |
+
rAF = function(callback) {
|
1375 |
+
var currTime, id, timeToCall;
|
1376 |
+
currTime = Date.now();
|
1377 |
+
timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
1378 |
+
id = window.setTimeout(function() {
|
1379 |
+
return callback(currTime + timeToCall);
|
1380 |
+
}, timeToCall);
|
1381 |
+
lastTime = currTime + timeToCall;
|
1382 |
+
return id;
|
1383 |
+
};
|
1384 |
+
}
|
1385 |
+
|
1386 |
+
runLoopRunning = false;
|
1387 |
+
|
1388 |
+
runLoopPaused = false;
|
1389 |
+
|
1390 |
+
startRunLoop = function() {
|
1391 |
+
if (!runLoopRunning) {
|
1392 |
+
runLoopRunning = true;
|
1393 |
+
return rAF(runLoopTick);
|
1394 |
+
}
|
1395 |
+
};
|
1396 |
+
|
1397 |
+
runLoopTick = function(t) {
|
1398 |
+
var animation, toRemoveAnimations, _i, _len;
|
1399 |
+
if (runLoopPaused) {
|
1400 |
+
rAF(runLoopTick);
|
1401 |
+
return;
|
1402 |
+
}
|
1403 |
+
toRemoveAnimations = [];
|
1404 |
+
for (_i = 0, _len = animations.length; _i < _len; _i++) {
|
1405 |
+
animation = animations[_i];
|
1406 |
+
if (!animationTick(t, animation)) {
|
1407 |
+
toRemoveAnimations.push(animation);
|
1408 |
+
}
|
1409 |
+
}
|
1410 |
+
animations = animations.filter(function(animation) {
|
1411 |
+
return toRemoveAnimations.indexOf(animation) === -1;
|
1412 |
+
});
|
1413 |
+
if (animations.length === 0) {
|
1414 |
+
return runLoopRunning = false;
|
1415 |
+
} else {
|
1416 |
+
return rAF(runLoopTick);
|
1417 |
+
}
|
1418 |
+
};
|
1419 |
+
|
1420 |
+
animationTick = function(t, animation) {
|
1421 |
+
var key, properties, property, tt, y, _base, _base1, _ref;
|
1422 |
+
if (animation.tStart == null) {
|
1423 |
+
animation.tStart = t;
|
1424 |
+
}
|
1425 |
+
tt = (t - animation.tStart) / animation.options.duration;
|
1426 |
+
y = animation.curve(tt);
|
1427 |
+
properties = {};
|
1428 |
+
if (tt >= 1) {
|
1429 |
+
if (animation.curve.returnsToSelf) {
|
1430 |
+
properties = animation.properties.start;
|
1431 |
+
} else {
|
1432 |
+
properties = animation.properties.end;
|
1433 |
+
}
|
1434 |
+
} else {
|
1435 |
+
_ref = animation.properties.start;
|
1436 |
+
for (key in _ref) {
|
1437 |
+
property = _ref[key];
|
1438 |
+
properties[key] = interpolate(property, animation.properties.end[key], y);
|
1439 |
+
}
|
1440 |
+
}
|
1441 |
+
applyFrame(animation.el, properties);
|
1442 |
+
if (typeof (_base = animation.options).change === "function") {
|
1443 |
+
_base.change(animation.el, Math.min(1, tt));
|
1444 |
+
}
|
1445 |
+
if (tt >= 1) {
|
1446 |
+
if (typeof (_base1 = animation.options).complete === "function") {
|
1447 |
+
_base1.complete(animation.el);
|
1448 |
+
}
|
1449 |
+
}
|
1450 |
+
return tt < 1;
|
1451 |
+
};
|
1452 |
+
|
1453 |
+
interpolate = function(start, end, y) {
|
1454 |
+
if ((start != null) && (start.interpolate != null)) {
|
1455 |
+
return start.interpolate(end, y);
|
1456 |
+
}
|
1457 |
+
return null;
|
1458 |
+
};
|
1459 |
+
|
1460 |
+
startAnimation = function(el, properties, options, timeoutId) {
|
1461 |
+
var endProperties, interpolable, isSVG, k, matrix, startProperties, transforms, v;
|
1462 |
+
if (timeoutId != null) {
|
1463 |
+
animationsTimeouts = animationsTimeouts.filter(function(timeout) {
|
1464 |
+
return timeout.id !== timeoutId;
|
1465 |
+
});
|
1466 |
+
}
|
1467 |
+
dynamics.stop(el, {
|
1468 |
+
timeout: false
|
1469 |
+
});
|
1470 |
+
if (!options.animated) {
|
1471 |
+
dynamics.css(el, properties);
|
1472 |
+
if (typeof options.complete === "function") {
|
1473 |
+
options.complete(this);
|
1474 |
+
}
|
1475 |
+
return;
|
1476 |
+
}
|
1477 |
+
properties = parseProperties(properties);
|
1478 |
+
startProperties = getCurrentProperties(el, Object.keys(properties));
|
1479 |
+
endProperties = {};
|
1480 |
+
transforms = [];
|
1481 |
+
for (k in properties) {
|
1482 |
+
v = properties[k];
|
1483 |
+
if ((el.style != null) && transformProperties.contains(k)) {
|
1484 |
+
transforms.push([k, v]);
|
1485 |
+
} else {
|
1486 |
+
interpolable = createInterpolable(v);
|
1487 |
+
if (interpolable instanceof InterpolableNumber && (el.style != null)) {
|
1488 |
+
interpolable = new InterpolableString([interpolable, unitForProperty(k, 0)]);
|
1489 |
+
}
|
1490 |
+
endProperties[k] = interpolable;
|
1491 |
+
}
|
1492 |
+
}
|
1493 |
+
if (transforms.length > 0) {
|
1494 |
+
isSVG = isSVGElement(el);
|
1495 |
+
if (isSVG) {
|
1496 |
+
matrix = new Matrix2D();
|
1497 |
+
matrix.applyProperties(transforms);
|
1498 |
+
} else {
|
1499 |
+
v = (transforms.map(function(transform) {
|
1500 |
+
return transformValueForProperty(transform[0], transform[1]);
|
1501 |
+
})).join(" ");
|
1502 |
+
matrix = Matrix.fromTransform(Matrix.matrixForTransform(v));
|
1503 |
+
}
|
1504 |
+
endProperties['transform'] = matrix.decompose();
|
1505 |
+
if (isSVG) {
|
1506 |
+
startProperties.transform.applyRotateCenter([endProperties.transform.props.rotate[1], endProperties.transform.props.rotate[2]]);
|
1507 |
+
}
|
1508 |
+
}
|
1509 |
+
animations.push({
|
1510 |
+
el: el,
|
1511 |
+
properties: {
|
1512 |
+
start: startProperties,
|
1513 |
+
end: endProperties
|
1514 |
+
},
|
1515 |
+
options: options,
|
1516 |
+
curve: options.type.call(options.type, options)
|
1517 |
+
});
|
1518 |
+
return startRunLoop();
|
1519 |
+
};
|
1520 |
+
|
1521 |
+
timeouts = [];
|
1522 |
+
|
1523 |
+
timeoutLastId = 0;
|
1524 |
+
|
1525 |
+
setRealTimeout = function(timeout) {
|
1526 |
+
if (!isDocumentVisible()) {
|
1527 |
+
return;
|
1528 |
+
}
|
1529 |
+
return timeout.realTimeoutId = setTimeout(function() {
|
1530 |
+
timeout.fn();
|
1531 |
+
return cancelTimeout(timeout.id);
|
1532 |
+
}, timeout.delay);
|
1533 |
+
};
|
1534 |
+
|
1535 |
+
addTimeout = function(fn, delay) {
|
1536 |
+
var timeout;
|
1537 |
+
timeoutLastId += 1;
|
1538 |
+
timeout = {
|
1539 |
+
id: timeoutLastId,
|
1540 |
+
tStart: Date.now(),
|
1541 |
+
fn: fn,
|
1542 |
+
delay: delay,
|
1543 |
+
originalDelay: delay
|
1544 |
+
};
|
1545 |
+
setRealTimeout(timeout);
|
1546 |
+
timeouts.push(timeout);
|
1547 |
+
return timeoutLastId;
|
1548 |
+
};
|
1549 |
+
|
1550 |
+
cancelTimeout = function(id) {
|
1551 |
+
return timeouts = timeouts.filter(function(timeout) {
|
1552 |
+
if (timeout.id === id) {
|
1553 |
+
clearTimeout(timeout.realTimeoutId);
|
1554 |
+
}
|
1555 |
+
return timeout.id !== id;
|
1556 |
+
});
|
1557 |
+
};
|
1558 |
+
|
1559 |
+
leftDelayForTimeout = function(time, timeout) {
|
1560 |
+
var consumedDelay;
|
1561 |
+
if (time != null) {
|
1562 |
+
consumedDelay = time - timeout.tStart;
|
1563 |
+
return timeout.originalDelay - consumedDelay;
|
1564 |
+
} else {
|
1565 |
+
return timeout.originalDelay;
|
1566 |
+
}
|
1567 |
+
};
|
1568 |
+
|
1569 |
+
if (typeof window !== "undefined" && window !== null) {
|
1570 |
+
window.addEventListener('unload', function() {});
|
1571 |
+
}
|
1572 |
+
|
1573 |
+
timeBeforeVisibilityChange = null;
|
1574 |
+
|
1575 |
+
observeVisibilityChange(function(visible) {
|
1576 |
+
var animation, difference, timeout, _i, _j, _k, _len, _len1, _len2, _results;
|
1577 |
+
runLoopPaused = !visible;
|
1578 |
+
if (!visible) {
|
1579 |
+
timeBeforeVisibilityChange = Date.now();
|
1580 |
+
_results = [];
|
1581 |
+
for (_i = 0, _len = timeouts.length; _i < _len; _i++) {
|
1582 |
+
timeout = timeouts[_i];
|
1583 |
+
_results.push(clearTimeout(timeout.realTimeoutId));
|
1584 |
+
}
|
1585 |
+
return _results;
|
1586 |
+
} else {
|
1587 |
+
if (runLoopRunning) {
|
1588 |
+
difference = Date.now() - timeBeforeVisibilityChange;
|
1589 |
+
for (_j = 0, _len1 = animations.length; _j < _len1; _j++) {
|
1590 |
+
animation = animations[_j];
|
1591 |
+
if (animation.tStart != null) {
|
1592 |
+
animation.tStart += difference;
|
1593 |
+
}
|
1594 |
+
}
|
1595 |
+
}
|
1596 |
+
for (_k = 0, _len2 = timeouts.length; _k < _len2; _k++) {
|
1597 |
+
timeout = timeouts[_k];
|
1598 |
+
timeout.delay = leftDelayForTimeout(timeBeforeVisibilityChange, timeout);
|
1599 |
+
setRealTimeout(timeout);
|
1600 |
+
}
|
1601 |
+
return timeBeforeVisibilityChange = null;
|
1602 |
+
}
|
1603 |
+
});
|
1604 |
+
|
1605 |
+
dynamics = {};
|
1606 |
+
|
1607 |
+
dynamics.linear = function() {
|
1608 |
+
return function(t) {
|
1609 |
+
return t;
|
1610 |
+
};
|
1611 |
+
};
|
1612 |
+
|
1613 |
+
dynamics.spring = function(options) {
|
1614 |
+
var A1, A2, decal, frequency, friction, s;
|
1615 |
+
if (options == null) {
|
1616 |
+
options = {};
|
1617 |
+
}
|
1618 |
+
applyDefaults(options, dynamics.spring.defaults);
|
1619 |
+
frequency = Math.max(1, options.frequency / 20);
|
1620 |
+
friction = Math.pow(20, options.friction / 100);
|
1621 |
+
s = options.anticipationSize / 1000;
|
1622 |
+
decal = Math.max(0, s);
|
1623 |
+
A1 = function(t) {
|
1624 |
+
var M, a, b, x0, x1;
|
1625 |
+
M = 0.8;
|
1626 |
+
x0 = s / (1 - s);
|
1627 |
+
x1 = 0;
|
1628 |
+
b = (x0 - (M * x1)) / (x0 - x1);
|
1629 |
+
a = (M - b) / x0;
|
1630 |
+
return (a * t * options.anticipationStrength / 100) + b;
|
1631 |
+
};
|
1632 |
+
A2 = function(t) {
|
1633 |
+
return Math.pow(friction / 10, -t) * (1 - t);
|
1634 |
+
};
|
1635 |
+
return function(t) {
|
1636 |
+
var A, At, a, angle, b, frictionT, y0, yS;
|
1637 |
+
frictionT = (t / (1 - s)) - (s / (1 - s));
|
1638 |
+
if (t < s) {
|
1639 |
+
yS = (s / (1 - s)) - (s / (1 - s));
|
1640 |
+
y0 = (0 / (1 - s)) - (s / (1 - s));
|
1641 |
+
b = Math.acos(1 / A1(yS));
|
1642 |
+
a = (Math.acos(1 / A1(y0)) - b) / (frequency * (-s));
|
1643 |
+
A = A1;
|
1644 |
+
} else {
|
1645 |
+
A = A2;
|
1646 |
+
b = 0;
|
1647 |
+
a = 1;
|
1648 |
+
}
|
1649 |
+
At = A(frictionT);
|
1650 |
+
angle = frequency * (t - s) * a + b;
|
1651 |
+
return 1 - (At * Math.cos(angle));
|
1652 |
+
};
|
1653 |
+
};
|
1654 |
+
|
1655 |
+
dynamics.bounce = function(options) {
|
1656 |
+
var A, fn, frequency, friction;
|
1657 |
+
if (options == null) {
|
1658 |
+
options = {};
|
1659 |
+
}
|
1660 |
+
applyDefaults(options, dynamics.bounce.defaults);
|
1661 |
+
frequency = Math.max(1, options.frequency / 20);
|
1662 |
+
friction = Math.pow(20, options.friction / 100);
|
1663 |
+
A = function(t) {
|
1664 |
+
return Math.pow(friction / 10, -t) * (1 - t);
|
1665 |
+
};
|
1666 |
+
fn = function(t) {
|
1667 |
+
var At, a, angle, b;
|
1668 |
+
b = -3.14 / 2;
|
1669 |
+
a = 1;
|
1670 |
+
At = A(t);
|
1671 |
+
angle = frequency * t * a + b;
|
1672 |
+
return At * Math.cos(angle);
|
1673 |
+
};
|
1674 |
+
fn.returnsToSelf = true;
|
1675 |
+
return fn;
|
1676 |
+
};
|
1677 |
+
|
1678 |
+
dynamics.gravity = function(options) {
|
1679 |
+
var L, bounciness, curves, elasticity, fn, getPointInCurve, gravity;
|
1680 |
+
if (options == null) {
|
1681 |
+
options = {};
|
1682 |
+
}
|
1683 |
+
applyDefaults(options, dynamics.gravity.defaults);
|
1684 |
+
bounciness = Math.min(options.bounciness / 1250, 0.8);
|
1685 |
+
elasticity = options.elasticity / 1000;
|
1686 |
+
gravity = 100;
|
1687 |
+
curves = [];
|
1688 |
+
L = (function() {
|
1689 |
+
var b, curve;
|
1690 |
+
b = Math.sqrt(2 / gravity);
|
1691 |
+
curve = {
|
1692 |
+
a: -b,
|
1693 |
+
b: b,
|
1694 |
+
H: 1
|
1695 |
+
};
|
1696 |
+
if (options.returnsToSelf) {
|
1697 |
+
curve.a = 0;
|
1698 |
+
curve.b = curve.b * 2;
|
1699 |
+
}
|
1700 |
+
while (curve.H > 0.001) {
|
1701 |
+
L = curve.b - curve.a;
|
1702 |
+
curve = {
|
1703 |
+
a: curve.b,
|
1704 |
+
b: curve.b + L * bounciness,
|
1705 |
+
H: curve.H * bounciness * bounciness
|
1706 |
+
};
|
1707 |
+
}
|
1708 |
+
return curve.b;
|
1709 |
+
})();
|
1710 |
+
getPointInCurve = function(a, b, H, t) {
|
1711 |
+
var c, t2;
|
1712 |
+
L = b - a;
|
1713 |
+
t2 = (2 / L) * t - 1 - (a * 2 / L);
|
1714 |
+
c = t2 * t2 * H - H + 1;
|
1715 |
+
if (options.returnsToSelf) {
|
1716 |
+
c = 1 - c;
|
1717 |
+
}
|
1718 |
+
return c;
|
1719 |
+
};
|
1720 |
+
(function() {
|
1721 |
+
var L2, b, curve, _results;
|
1722 |
+
b = Math.sqrt(2 / (gravity * L * L));
|
1723 |
+
curve = {
|
1724 |
+
a: -b,
|
1725 |
+
b: b,
|
1726 |
+
H: 1
|
1727 |
+
};
|
1728 |
+
if (options.returnsToSelf) {
|
1729 |
+
curve.a = 0;
|
1730 |
+
curve.b = curve.b * 2;
|
1731 |
+
}
|
1732 |
+
curves.push(curve);
|
1733 |
+
L2 = L;
|
1734 |
+
_results = [];
|
1735 |
+
while (curve.b < 1 && curve.H > 0.001) {
|
1736 |
+
L2 = curve.b - curve.a;
|
1737 |
+
curve = {
|
1738 |
+
a: curve.b,
|
1739 |
+
b: curve.b + L2 * bounciness,
|
1740 |
+
H: curve.H * elasticity
|
1741 |
+
};
|
1742 |
+
_results.push(curves.push(curve));
|
1743 |
+
}
|
1744 |
+
return _results;
|
1745 |
+
})();
|
1746 |
+
fn = function(t) {
|
1747 |
+
var curve, i, v;
|
1748 |
+
i = 0;
|
1749 |
+
curve = curves[i];
|
1750 |
+
while (!(t >= curve.a && t <= curve.b)) {
|
1751 |
+
i += 1;
|
1752 |
+
curve = curves[i];
|
1753 |
+
if (!curve) {
|
1754 |
+
break;
|
1755 |
+
}
|
1756 |
+
}
|
1757 |
+
if (!curve) {
|
1758 |
+
v = options.returnsToSelf ? 0 : 1;
|
1759 |
+
} else {
|
1760 |
+
v = getPointInCurve(curve.a, curve.b, curve.H, t);
|
1761 |
+
}
|
1762 |
+
return v;
|
1763 |
+
};
|
1764 |
+
fn.returnsToSelf = options.returnsToSelf;
|
1765 |
+
return fn;
|
1766 |
+
};
|
1767 |
+
|
1768 |
+
dynamics.forceWithGravity = function(options) {
|
1769 |
+
if (options == null) {
|
1770 |
+
options = {};
|
1771 |
+
}
|
1772 |
+
applyDefaults(options, dynamics.forceWithGravity.defaults);
|
1773 |
+
options.returnsToSelf = true;
|
1774 |
+
return dynamics.gravity(options);
|
1775 |
+
};
|
1776 |
+
|
1777 |
+
dynamics.bezier = (function() {
|
1778 |
+
var Bezier, Bezier_, yForX;
|
1779 |
+
Bezier_ = function(t, p0, p1, p2, p3) {
|
1780 |
+
return (Math.pow(1 - t, 3) * p0) + (3 * Math.pow(1 - t, 2) * t * p1) + (3 * (1 - t) * Math.pow(t, 2) * p2) + Math.pow(t, 3) * p3;
|
1781 |
+
};
|
1782 |
+
Bezier = function(t, p0, p1, p2, p3) {
|
1783 |
+
return {
|
1784 |
+
x: Bezier_(t, p0.x, p1.x, p2.x, p3.x),
|
1785 |
+
y: Bezier_(t, p0.y, p1.y, p2.y, p3.y)
|
1786 |
+
};
|
1787 |
+
};
|
1788 |
+
yForX = function(xTarget, Bs, returnsToSelf) {
|
1789 |
+
var B, aB, i, lower, percent, upper, x, xTolerance, _i, _len;
|
1790 |
+
B = null;
|
1791 |
+
for (_i = 0, _len = Bs.length; _i < _len; _i++) {
|
1792 |
+
aB = Bs[_i];
|
1793 |
+
if (xTarget >= aB(0).x && xTarget <= aB(1).x) {
|
1794 |
+
B = aB;
|
1795 |
+
}
|
1796 |
+
if (B !== null) {
|
1797 |
+
break;
|
1798 |
+
}
|
1799 |
+
}
|
1800 |
+
if (!B) {
|
1801 |
+
if (returnsToSelf) {
|
1802 |
+
return 0;
|
1803 |
+
} else {
|
1804 |
+
return 1;
|
1805 |
+
}
|
1806 |
+
}
|
1807 |
+
xTolerance = 0.0001;
|
1808 |
+
lower = 0;
|
1809 |
+
upper = 1;
|
1810 |
+
percent = (upper + lower) / 2;
|
1811 |
+
x = B(percent).x;
|
1812 |
+
i = 0;
|
1813 |
+
while (Math.abs(xTarget - x) > xTolerance && i < 100) {
|
1814 |
+
if (xTarget > x) {
|
1815 |
+
lower = percent;
|
1816 |
+
} else {
|
1817 |
+
upper = percent;
|
1818 |
+
}
|
1819 |
+
percent = (upper + lower) / 2;
|
1820 |
+
x = B(percent).x;
|
1821 |
+
i += 1;
|
1822 |
+
}
|
1823 |
+
return B(percent).y;
|
1824 |
+
};
|
1825 |
+
return function(options) {
|
1826 |
+
var Bs, fn, points;
|
1827 |
+
if (options == null) {
|
1828 |
+
options = {};
|
1829 |
+
}
|
1830 |
+
points = options.points;
|
1831 |
+
Bs = (function() {
|
1832 |
+
var i, k, _fn;
|
1833 |
+
Bs = [];
|
1834 |
+
_fn = function(pointA, pointB) {
|
1835 |
+
var B2;
|
1836 |
+
B2 = function(t) {
|
1837 |
+
return Bezier(t, pointA, pointA.cp[pointA.cp.length - 1], pointB.cp[0], pointB);
|
1838 |
+
};
|
1839 |
+
return Bs.push(B2);
|
1840 |
+
};
|
1841 |
+
for (i in points) {
|
1842 |
+
k = parseInt(i);
|
1843 |
+
if (k >= points.length - 1) {
|
1844 |
+
break;
|
1845 |
+
}
|
1846 |
+
_fn(points[k], points[k + 1]);
|
1847 |
+
}
|
1848 |
+
return Bs;
|
1849 |
+
})();
|
1850 |
+
fn = function(t) {
|
1851 |
+
if (t === 0) {
|
1852 |
+
return 0;
|
1853 |
+
} else if (t === 1) {
|
1854 |
+
return 1;
|
1855 |
+
} else {
|
1856 |
+
return yForX(t, Bs, this.returnsToSelf);
|
1857 |
+
}
|
1858 |
+
};
|
1859 |
+
fn.returnsToSelf = points[points.length - 1].y === 0;
|
1860 |
+
return fn;
|
1861 |
+
};
|
1862 |
+
})();
|
1863 |
+
|
1864 |
+
dynamics.easeInOut = function(options) {
|
1865 |
+
var friction, _ref;
|
1866 |
+
if (options == null) {
|
1867 |
+
options = {};
|
1868 |
+
}
|
1869 |
+
friction = (_ref = options.friction) != null ? _ref : dynamics.easeInOut.defaults.friction;
|
1870 |
+
return dynamics.bezier({
|
1871 |
+
points: [
|
1872 |
+
{
|
1873 |
+
x: 0,
|
1874 |
+
y: 0,
|
1875 |
+
cp: [
|
1876 |
+
{
|
1877 |
+
x: 0.92 - (friction / 1000),
|
1878 |
+
y: 0
|
1879 |
+
}
|
1880 |
+
]
|
1881 |
+
}, {
|
1882 |
+
x: 1,
|
1883 |
+
y: 1,
|
1884 |
+
cp: [
|
1885 |
+
{
|
1886 |
+
x: 0.08 + (friction / 1000),
|
1887 |
+
y: 1
|
1888 |
+
}
|
1889 |
+
]
|
1890 |
+
}
|
1891 |
+
]
|
1892 |
+
});
|
1893 |
+
};
|
1894 |
+
|
1895 |
+
dynamics.easeIn = function(options) {
|
1896 |
+
var friction, _ref;
|
1897 |
+
if (options == null) {
|
1898 |
+
options = {};
|
1899 |
+
}
|
1900 |
+
friction = (_ref = options.friction) != null ? _ref : dynamics.easeIn.defaults.friction;
|
1901 |
+
return dynamics.bezier({
|
1902 |
+
points: [
|
1903 |
+
{
|
1904 |
+
x: 0,
|
1905 |
+
y: 0,
|
1906 |
+
cp: [
|
1907 |
+
{
|
1908 |
+
x: 0.92 - (friction / 1000),
|
1909 |
+
y: 0
|
1910 |
+
}
|
1911 |
+
]
|
1912 |
+
}, {
|
1913 |
+
x: 1,
|
1914 |
+
y: 1,
|
1915 |
+
cp: [
|
1916 |
+
{
|
1917 |
+
x: 1,
|
1918 |
+
y: 1
|
1919 |
+
}
|
1920 |
+
]
|
1921 |
+
}
|
1922 |
+
]
|
1923 |
+
});
|
1924 |
+
};
|
1925 |
+
|
1926 |
+
dynamics.easeOut = function(options) {
|
1927 |
+
var friction, _ref;
|
1928 |
+
if (options == null) {
|
1929 |
+
options = {};
|
1930 |
+
}
|
1931 |
+
friction = (_ref = options.friction) != null ? _ref : dynamics.easeOut.defaults.friction;
|
1932 |
+
return dynamics.bezier({
|
1933 |
+
points: [
|
1934 |
+
{
|
1935 |
+
x: 0,
|
1936 |
+
y: 0,
|
1937 |
+
cp: [
|
1938 |
+
{
|
1939 |
+
x: 0,
|
1940 |
+
y: 0
|
1941 |
+
}
|
1942 |
+
]
|
1943 |
+
}, {
|
1944 |
+
x: 1,
|
1945 |
+
y: 1,
|
1946 |
+
cp: [
|
1947 |
+
{
|
1948 |
+
x: 0.08 + (friction / 1000),
|
1949 |
+
y: 1
|
1950 |
+
}
|
1951 |
+
]
|
1952 |
+
}
|
1953 |
+
]
|
1954 |
+
});
|
1955 |
+
};
|
1956 |
+
|
1957 |
+
dynamics.spring.defaults = {
|
1958 |
+
frequency: 300,
|
1959 |
+
friction: 200,
|
1960 |
+
anticipationSize: 0,
|
1961 |
+
anticipationStrength: 0
|
1962 |
+
};
|
1963 |
+
|
1964 |
+
dynamics.bounce.defaults = {
|
1965 |
+
frequency: 300,
|
1966 |
+
friction: 200
|
1967 |
+
};
|
1968 |
+
|
1969 |
+
dynamics.forceWithGravity.defaults = dynamics.gravity.defaults = {
|
1970 |
+
bounciness: 400,
|
1971 |
+
elasticity: 200
|
1972 |
+
};
|
1973 |
+
|
1974 |
+
dynamics.easeInOut.defaults = dynamics.easeIn.defaults = dynamics.easeOut.defaults = {
|
1975 |
+
friction: 500
|
1976 |
+
};
|
1977 |
+
|
1978 |
+
dynamics.css = makeArrayFn(function(el, properties) {
|
1979 |
+
return applyProperties(el, properties, true);
|
1980 |
+
});
|
1981 |
+
|
1982 |
+
dynamics.animate = makeArrayFn(function(el, properties, options) {
|
1983 |
+
var id;
|
1984 |
+
if (options == null) {
|
1985 |
+
options = {};
|
1986 |
+
}
|
1987 |
+
options = clone(options);
|
1988 |
+
applyDefaults(options, {
|
1989 |
+
type: dynamics.easeInOut,
|
1990 |
+
duration: 1000,
|
1991 |
+
delay: 0,
|
1992 |
+
animated: true
|
1993 |
+
});
|
1994 |
+
options.duration = Math.max(0, options.duration * slowRatio);
|
1995 |
+
options.delay = Math.max(0, options.delay);
|
1996 |
+
if (options.delay === 0) {
|
1997 |
+
return startAnimation(el, properties, options);
|
1998 |
+
} else {
|
1999 |
+
id = dynamics.setTimeout(function() {
|
2000 |
+
return startAnimation(el, properties, options, id);
|
2001 |
+
}, options.delay);
|
2002 |
+
return animationsTimeouts.push({
|
2003 |
+
id: id,
|
2004 |
+
el: el
|
2005 |
+
});
|
2006 |
+
}
|
2007 |
+
});
|
2008 |
+
|
2009 |
+
dynamics.stop = makeArrayFn(function(el, options) {
|
2010 |
+
if (options == null) {
|
2011 |
+
options = {};
|
2012 |
+
}
|
2013 |
+
if (options.timeout == null) {
|
2014 |
+
options.timeout = true;
|
2015 |
+
}
|
2016 |
+
if (options.timeout) {
|
2017 |
+
animationsTimeouts = animationsTimeouts.filter(function(timeout) {
|
2018 |
+
if (timeout.el === el && ((options.filter == null) || options.filter(timeout))) {
|
2019 |
+
dynamics.clearTimeout(timeout.id);
|
2020 |
+
return false;
|
2021 |
+
}
|
2022 |
+
return true;
|
2023 |
+
});
|
2024 |
+
}
|
2025 |
+
return animations = animations.filter(function(animation) {
|
2026 |
+
return animation.el !== el;
|
2027 |
+
});
|
2028 |
+
});
|
2029 |
+
|
2030 |
+
dynamics.setTimeout = function(fn, delay) {
|
2031 |
+
return addTimeout(fn, delay * slowRatio);
|
2032 |
+
};
|
2033 |
+
|
2034 |
+
dynamics.clearTimeout = function(id) {
|
2035 |
+
return cancelTimeout(id);
|
2036 |
+
};
|
2037 |
+
|
2038 |
+
dynamics.toggleSlow = function() {
|
2039 |
+
slow = !slow;
|
2040 |
+
if (slow) {
|
2041 |
+
slowRatio = 3;
|
2042 |
+
} else {
|
2043 |
+
slowRatio = 1;
|
2044 |
+
}
|
2045 |
+
return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log("dynamics.js: slow animations " + (slow ? "enabled" : "disabled")) : void 0 : void 0;
|
2046 |
+
};
|
2047 |
+
|
2048 |
+
if (typeof module === "object" && typeof module.exports === "object") {
|
2049 |
+
module.exports = dynamics;
|
2050 |
+
} else if (typeof define === "function") {
|
2051 |
+
define('dynamics', function() {
|
2052 |
+
return dynamics;
|
2053 |
+
});
|
2054 |
+
} else {
|
2055 |
+
window.dynamics = dynamics;
|
2056 |
+
}
|
2057 |
+
|
2058 |
+
}).call(this);
|
assets/vendor/js/dynamics.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
(function(){var t,e,n,r,o,i,s,a,l,u,f,h,p,c,m,d,g,y,v,b,w,x,M,S,k,T,C,H,R,q,X,I,Y,j,z,F,G,A,O,V,Z,E,L,D,P,W,N,U,$,B,K,J,Q,_,tt,et,nt,rt,ot,it,st,at=function(t,e){return function(){return t.apply(e,arguments)}};q=function(){return"visible"===document.visibilityState||null!=C.tests},rt=[],"undefined"!=typeof document&&null!==document&&document.addEventListener("visibilitychange",(function(){var t,e,n,r;for(r=[],e=0,n=rt.length;e<n;e++)t=rt[e],r.push(t(q()));return r})),z=function(t){return rt.push(t)},M=function(t){var e,n,r;for(e in n={},t)r=t[e],n[e]=r;return n},w=function(t){var e;return e={},function(){var n,r,o,i;for(n="",o=0,i=arguments.length;o<i;o++)n+=arguments[o].toString()+",";return(r=e[n])||(e[n]=r=t.apply(this,arguments)),r}},j=function(t){return function(e){var n,r,o;return e instanceof Array||e instanceof NodeList||e instanceof HTMLCollection?(o=function(){var o,i,s;for(s=[],r=o=0,i=e.length;0<=i?o<i:o>i;r=0<=i?++o:--o)(n=Array.prototype.slice.call(arguments,1)).splice(0,0,e[r]),s.push(t.apply(this,n));return s}.apply(this,arguments),o):t.apply(this,arguments)}},g=function(t,e){var n,r,o;for(n in o=[],e)r=e[n],o.push(null!=t[n]?t[n]:t[n]=r);return o},y=function(t,e){var n,r,o;if(null!=t.style)return v(t,e);for(n in o=[],e)r=e[n],o.push(t[n]=r.format());return o},v=function(t,e){var n,r,o,i,s;for(r in e=F(e),i=[],n=X(t),e)s=e[r],tt.contains(r)?i.push([r,s]):(null!=s.format&&(s=s.format()),"number"==typeof s&&(s=""+s+nt(r,s)),n&&B.contains(r)?t.setAttribute(r,s):t.style[A(r)]=s);if(i.length>0)return n?((o=new u).applyProperties(i),t.setAttribute("transform",o.decompose().format())):(s=i.map((function(t){return et(t[0],t[1])})).join(" "),t.style[A("transform")]=s)},X=function(t){var e,n;return"undefined"!=typeof SVGElement&&null!==SVGElement&&"undefined"!=typeof SVGSVGElement&&null!==SVGSVGElement?t instanceof SVGElement&&!(t instanceof SVGSVGElement):null!=(e=null!=(n=C.tests)&&"function"==typeof n.isSVG?n.isSVG(t):void 0)&&e},Z=function(t,e){var n;return n=Math.pow(10,e),Math.round(t*n)/n},f=function(){function t(t){var e,n,r;for(this.obj={},n=0,r=t.length;n<r;n++)e=t[n],this.obj[e]=1}return t.prototype.contains=function(t){return 1===this.obj[t]},t}(),_=function(t){return t.replace(/([A-Z])/g,(function(t){return"-"+t.toLowerCase()}))},O=new f("marginTop,marginLeft,marginBottom,marginRight,paddingTop,paddingLeft,paddingBottom,paddingRight,top,left,bottom,right,translateX,translateY,translateZ,perspectiveX,perspectiveY,perspectiveZ,width,height,maxWidth,maxHeight,minWidth,minHeight,borderRadius".split(",")),T=new f("rotate,rotateX,rotateY,rotateZ,skew,skewX,skewY,skewZ".split(",")),tt=new f("translate,translateX,translateY,translateZ,scale,scaleX,scaleY,scaleZ,rotate,rotateX,rotateY,rotateZ,rotateC,rotateCX,rotateCY,skew,skewX,skewY,skewZ,perspective".split(",")),B=new f("accent-height,ascent,azimuth,baseFrequency,baseline-shift,bias,cx,cy,d,diffuseConstant,divisor,dx,dy,elevation,filterRes,fx,fy,gradientTransform,height,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,letter-spacing,limitingConeAngle,markerHeight,markerWidth,numOctaves,order,overline-position,overline-thickness,pathLength,points,pointsAtX,pointsAtY,pointsAtZ,r,radius,rx,ry,seed,specularConstant,specularExponent,stdDeviation,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,surfaceScale,target,targetX,targetY,transform,underline-position,underline-thickness,viewBox,width,x,x1,x2,y,y1,y2,z".split(",")),nt=function(t,e){return"number"!=typeof e?"":O.contains(t)?"px":T.contains(t)?"deg":""},et=function(t,e){var n,r;return null!=(n=(""+e).match(/^([0-9.-]*)([^0-9]*)$/))?(e=n[1],r=n[2]):e=parseFloat(e),e=Z(parseFloat(e),10),null!=r&&""!==r||(r=nt(t,e)),t+"("+e+r+")"},F=function(t){var e,n,r,o,i,s,a,l;for(o in r={},t)if(i=t[o],tt.contains(o))if((n=o.match(/(translate|rotateC|rotate|skew|scale|perspective)(X|Y|Z|)/))&&n[2].length>0)r[o]=i;else for(s=0,a=(l=["X","Y","Z"]).length;s<a;s++)e=l[s],r[n[1]+e]=i;else r[o]=i;return r},k=function(t){var e;return""+(e="opacity"===t?1:0)+nt(t,e)},H=function(t,e){var n,r,o,i,s,a,f,h,p,c,m;if(i={},n=X(t),null!=t.style)for(s=window.getComputedStyle(t,null),f=0,p=e.length;f<p;f++)r=e[f],tt.contains(r)?null==i.transform&&(o=n?new u(null!=(m=t.transform.baseVal.consolidate())?m.matrix:void 0):l.fromTransform(s[A("transform")]),i.transform=o.decompose()):(null==(a=s[r])&&B.contains(r)&&(a=t.getAttribute(r)),""!==a&&null!=a||(a=k(r)),i[r]=S(a));else for(h=0,c=e.length;h<c;h++)i[r=e[h]]=S(t[r]);return i},S=function(t){var e,n,o,l;for(o=0,l=(n=[r,s,i,a]).length;o<l;o++)if(null!=(e=n[o].create(t)))return e;return null},a=function(){function t(t){this.parts=t,this.format=at(this.format,this),this.interpolate=at(this.interpolate,this)}return t.prototype.interpolate=function(e,n){var r,o,i,s,a,l;for(s=this.parts,r=e.parts,i=[],o=a=0,l=Math.min(s.length,r.length);0<=l?a<l:a>l;o=0<=l?++a:--a)null!=s[o].interpolate?i.push(s[o].interpolate(r[o],n)):i.push(s[o]);return new t(i)},t.prototype.format=function(){return this.parts.map((function(t){return null!=t.format?t.format():t})).join("")},t.create=function(e){var n,r,s,a,l,u,f,h,p,c,m;for(e=""+e,s=[],h=0,c=(f=[{re:/(#[a-f\d]{3,6})/gi,klass:o,parse:function(t){return t}},{re:/(rgba?\([0-9.]*, ?[0-9.]*, ?[0-9.]*(?:, ?[0-9.]*)?\))/gi,klass:o,parse:function(t){return t}},{re:/([-+]?[\d.]+)/gi,klass:i,parse:parseFloat}]).length;h<c;h++)for(l=(u=f[h]).re;r=l.exec(e);)s.push({index:r.index,length:r[1].length,interpolable:u.klass.create(u.parse(r[1]))});for(a=[],n=0,p=0,m=(s=s.sort((function(t,e){return t.index>e.index?1:-1}))).length;p<m;p++)(r=s[p]).index<n||(r.index>n&&a.push(e.substring(n,r.index)),a.push(r.interpolable),n=r.index+r.length);return n<e.length&&a.push(e.substring(n)),new t(a)},t}(),s=function(){function t(t){this.format=at(this.format,this),this.interpolate=at(this.interpolate,this),this.obj=t}return t.prototype.interpolate=function(e,n){var r,o,i,s,a;for(o in s=this.obj,r=e.obj,i={},s)null!=(a=s[o]).interpolate?i[o]=a.interpolate(r[o],n):i[o]=a;return new t(i)},t.prototype.format=function(){return this.obj},t.create=function(e){var n,r,o;if(e instanceof Object){for(n in r={},e)o=e[n],r[n]=S(o);return new t(r)}return null},t}(),i=function(){function t(t){this.format=at(this.format,this),this.interpolate=at(this.interpolate,this),this.value=parseFloat(t)}return t.prototype.interpolate=function(e,n){var r;return r=this.value,new t((e.value-r)*n+r)},t.prototype.format=function(){return Z(this.value,5)},t.create=function(e){return"number"==typeof e?new t(e):null},t}(),r=function(){function t(t){this.values=t,this.format=at(this.format,this),this.interpolate=at(this.interpolate,this)}return t.prototype.interpolate=function(e,n){var r,o,i,s,a,l;for(s=this.values,r=e.values,i=[],o=a=0,l=Math.min(s.length,r.length);0<=l?a<l:a>l;o=0<=l?++a:--a)null!=s[o].interpolate?i.push(s[o].interpolate(r[o],n)):i.push(s[o]);return new t(i)},t.prototype.format=function(){return this.values.map((function(t){return null!=t.format?t.format():t}))},t.createFromArray=function(e){return new t(e.map((function(t){return S(t)||t})).filter((function(t){return null!=t})))},t.create=function(e){return e instanceof Array?t.createFromArray(e):null},t}(),t=function(){function t(t,e){this.rgb=null!=t?t:{},this.format=e,this.toRgba=at(this.toRgba,this),this.toRgb=at(this.toRgb,this),this.toHex=at(this.toHex,this)}return t.fromHex=function(e){var n,r;return null!=(n=e.match(/^#([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})$/i))&&(e="#"+n[1]+n[1]+n[2]+n[2]+n[3]+n[3]),null!=(r=e.match(/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i))?new t({r:parseInt(r[1],16),g:parseInt(r[2],16),b:parseInt(r[3],16),a:1},"hex"):null},t.fromRgb=function(e){var n,r;return null!=(n=e.match(/^rgba?\(([0-9.]*), ?([0-9.]*), ?([0-9.]*)(?:, ?([0-9.]*))?\)$/))?new t({r:parseFloat(n[1]),g:parseFloat(n[2]),b:parseFloat(n[3]),a:parseFloat(null!=(r=n[4])?r:1)},null!=n[4]?"rgba":"rgb"):null},t.componentToHex=function(t){var e;return 1===(e=t.toString(16)).length?"0"+e:e},t.prototype.toHex=function(){return"#"+t.componentToHex(this.rgb.r)+t.componentToHex(this.rgb.g)+t.componentToHex(this.rgb.b)},t.prototype.toRgb=function(){return"rgb("+this.rgb.r+", "+this.rgb.g+", "+this.rgb.b+")"},t.prototype.toRgba=function(){return"rgba("+this.rgb.r+", "+this.rgb.g+", "+this.rgb.b+", "+this.rgb.a+")"},t}(),o=function(){function e(t){this.color=t,this.format=at(this.format,this),this.interpolate=at(this.interpolate,this)}return e.prototype.interpolate=function(n,r){var o,i,s,a,l,u,f,h;for(a=this.color,o=n.color,s={},u=0,f=(h=["r","g","b"]).length;u<f;u++)i=h[u],l=Math.round((o.rgb[i]-a.rgb[i])*r+a.rgb[i]),s[i]=Math.min(255,Math.max(0,l));return i="a",l=Z((o.rgb[i]-a.rgb[i])*r+a.rgb[i],5),s[i]=Math.min(1,Math.max(0,l)),new e(new t(s,o.format))},e.prototype.format=function(){return"hex"===this.color.format?this.color.toHex():"rgb"===this.color.format?this.color.toRgb():"rgba"===this.color.format?this.color.toRgba():void 0},e.create=function(n){var r;if("string"==typeof n)return null!=(r=t.fromHex(n)||t.fromRgb(n))?new e(r):null},e}(),n=function(){function t(t){this.props=t,this.applyRotateCenter=at(this.applyRotateCenter,this),this.format=at(this.format,this),this.interpolate=at(this.interpolate,this)}return t.prototype.interpolate=function(e,n){var r,o,i,s,a,l,u,f,h,p,c,m;for(i={},s=0,f=(p=["translate","scale","rotate"]).length;s<f;s++)for(i[o=p[s]]=[],r=a=0,c=this.props[o].length;0<=c?a<c:a>c;r=0<=c?++a:--a)i[o][r]=(e.props[o][r]-this.props[o][r])*n+this.props[o][r];for(r=l=1;l<=2;r=++l)i.rotate[r]=e.props.rotate[r];for(u=0,h=(m=["skew"]).length;u<h;u++)i[o=m[u]]=(e.props[o]-this.props[o])*n+this.props[o];return new t(i)},t.prototype.format=function(){return"translate("+this.props.translate.join(",")+") rotate("+this.props.rotate.join(",")+") skewX("+this.props.skew+") scale("+this.props.scale.join(",")+")"},t.prototype.applyRotateCenter=function(t){var e,n,r,o,i;for(n=(n=(n=(n=b.createSVGMatrix()).translate(t[0],t[1])).rotate(this.props.rotate[0])).translate(-t[0],-t[1]),r=new u(n).decompose().props.translate,i=[],e=o=0;o<=1;e=++o)i.push(this.props.translate[e]-=r[e]);return i},t}(),b="undefined"!=typeof document&&null!==document?document.createElementNS("http://www.w3.org/2000/svg","svg"):void 0,u=function(){function t(t){this.m=t,this.applyProperties=at(this.applyProperties,this),this.decompose=at(this.decompose,this),this.m||(this.m=b.createSVGMatrix())}return t.prototype.decompose=function(){var t,e,r,o,i;return o=new h([this.m.a,this.m.b]),i=new h([this.m.c,this.m.d]),t=o.length(),r=o.dot(i),o=o.normalize(),e=i.combine(o,1,-r).length(),new n({translate:[this.m.e,this.m.f],rotate:[180*Math.atan2(this.m.b,this.m.a)/Math.PI,this.rotateCX,this.rotateCY],scale:[t,e],skew:r/e*180/Math.PI})},t.prototype.applyProperties=function(t){var e,n,r,o,i,s,a,l;for(e={},i=0,s=t.length;i<s;i++)e[(r=t[i])[0]]=r[1];for(n in e)o=e[n],"translateX"===n?this.m=this.m.translate(o,0):"translateY"===n?this.m=this.m.translate(0,o):"scaleX"===n?this.m=this.m.scaleNonUniform(o,1):"scaleY"===n?this.m=this.m.scaleNonUniform(1,o):"rotateZ"===n?this.m=this.m.rotate(o):"skewX"===n?this.m=this.m.skewX(o):"skewY"===n&&(this.m=this.m.skewY(o));return this.rotateCX=null!=(a=e.rotateCX)?a:0,this.rotateCY=null!=(l=e.rotateCY)?l:0},t}(),h=function(){function t(t){this.els=t,this.combine=at(this.combine,this),this.normalize=at(this.normalize,this),this.length=at(this.length,this),this.cross=at(this.cross,this),this.dot=at(this.dot,this),this.e=at(this.e,this)}return t.prototype.e=function(t){return t<1||t>this.els.length?null:this.els[t-1]},t.prototype.dot=function(t){var e,n,r;if(e=t.els||t,r=0,(n=this.els.length)!==e.length)return null;for(n+=1;--n;)r+=this.els[n-1]*e[n-1];return r},t.prototype.cross=function(e){var n,r;return r=e.els||e,3!==this.els.length||3!==r.length?null:new t([(n=this.els)[1]*r[2]-n[2]*r[1],n[2]*r[0]-n[0]*r[2],n[0]*r[1]-n[1]*r[0]])},t.prototype.length=function(){var t,e,n,r,o;for(t=0,n=0,r=(o=this.els).length;n<r;n++)e=o[n],t+=Math.pow(e,2);return Math.sqrt(t)},t.prototype.normalize=function(){var e,n,r,o,i;for(n in r=this.length(),o=[],i=this.els)e=i[n],o[n]=e/r;return new t(o)},t.prototype.combine=function(e,n,r){var o,i,s,a;for(i=[],o=s=0,a=this.els.length;0<=a?s<a:s>a;o=0<=a?++s:--s)i[o]=n*this.els[o]+r*e.els[o];return new t(i)},t}(),e=function(){function t(){this.toMatrix=at(this.toMatrix,this),this.format=at(this.format,this),this.interpolate=at(this.interpolate,this)}return t.prototype.interpolate=function(e,n,r){var o,i,s,a,l,u,f,h,p,c,m,d,g,y,v,b,w,x;for(null==r&&(r=null),s=this,i=new t,d=0,b=(w=["translate","scale","skew","perspective"]).length;d<b;d++)for(i[f=w[d]]=[],a=g=0,x=s[f].length-1;0<=x?g<=x:g>=x;a=0<=x?++g:--g)null==r||r.indexOf(f)>-1||r.indexOf(""+f+["x","y","z"][a])>-1?i[f][a]=(e[f][a]-s[f][a])*n+s[f][a]:i[f][a]=s[f][a];if(null==r||-1!==r.indexOf("rotate")){if(h=s.quaternion,p=e.quaternion,(o=h[0]*p[0]+h[1]*p[1]+h[2]*p[2]+h[3]*p[3])<0){for(a=y=0;y<=3;a=++y)h[a]=-h[a];o=-o}for(o+1>.05?1-o>=.05?(m=Math.acos(o),u=1/Math.sin(m),c=Math.sin(m*(1-n))*u,l=Math.sin(m*n)*u):(c=1-n,l=n):(p[0]=-h[1],p[1]=h[0],p[2]=-h[3],p[3]=h[2],c=Math.sin(piDouble*(.5-n)),l=Math.sin(piDouble*n)),i.quaternion=[],a=v=0;v<=3;a=++v)i.quaternion[a]=h[a]*c+p[a]*l}else i.quaternion=s.quaternion;return i},t.prototype.format=function(){return this.toMatrix().toString()},t.prototype.toMatrix=function(){var t,e,n,r,o,i,s,a,u,f,h,p,c,m,d,g;for(t=this,o=l.I(4),e=c=0;c<=3;e=++c)o.els[e][3]=t.perspective[e];for(f=(i=t.quaternion)[0],h=i[1],p=i[2],u=i[3],s=t.skew,r=[[1,0],[2,0],[2,1]],e=m=2;m>=0;e=--m)s[e]&&((a=l.I(4)).els[r[e][0]][r[e][1]]=s[e],o=o.multiply(a));for(o=o.multiply(new l([[1-2*(h*h+p*p),2*(f*h-p*u),2*(f*p+h*u),0],[2*(f*h+p*u),1-2*(f*f+p*p),2*(h*p-f*u),0],[2*(f*p-h*u),2*(h*p+f*u),1-2*(f*f+h*h),0],[0,0,0,1]])),e=d=0;d<=2;e=++d){for(n=g=0;g<=2;n=++g)o.els[e][n]*=t.scale[e];o.els[3][e]=t.translate[e]}return o},t}(),l=function(){function t(t){this.els=t,this.toString=at(this.toString,this),this.decompose=at(this.decompose,this),this.inverse=at(this.inverse,this),this.augment=at(this.augment,this),this.toRightTriangular=at(this.toRightTriangular,this),this.transpose=at(this.transpose,this),this.multiply=at(this.multiply,this),this.dup=at(this.dup,this),this.e=at(this.e,this)}return t.prototype.e=function(t,e){return t<1||t>this.els.length||e<1||e>this.els[0].length?null:this.els[t-1][e-1]},t.prototype.dup=function(){return new t(this.els)},t.prototype.multiply=function(e){var n,r,o,i,s,a,l,u,f,h,p,c,m;for(c=!!e.modulus,void 0===(n=e.els||e)[0][0]&&(n=new t(n).els),l=h=this.els.length,u=n[0].length,o=this.els[0].length,i=[],h+=1;--h;)for(i[s=l-h]=[],p=u,p+=1;--p;){for(a=u-p,m=0,f=o,f+=1;--f;)r=o-f,m+=this.els[s][r]*n[r][a];i[s][a]=m}return n=new t(i),c?n.col(1):n},t.prototype.transpose=function(){var e,n,r,o,i,s,a;for(a=this.els.length,n=[],i=e=this.els[0].length,i+=1;--i;)for(n[r=e-i]=[],s=a,s+=1;--s;)o=a-s,n[r][o]=this.els[o][r];return new t(n)},t.prototype.toRightTriangular=function(){var t,e,n,r,o,i,s,a,l,u,f,h,p,c;for(t=this.dup(),o=a=this.els.length,i=this.els[0].length;--a;){if(n=o-a,0===t.els[n][n])for(r=f=p=n+1;p<=o?f<o:f>o;r=p<=o?++f:--f)if(0!==t.els[r][n]){for(e=[],l=i,l+=1;--l;)u=i-l,e.push(t.els[n][u]+t.els[r][u]);t.els[n]=e;break}if(0!==t.els[n][n])for(r=h=c=n+1;c<=o?h<o:h>o;r=c<=o?++h:--h){for(s=t.els[r][n]/t.els[n][n],e=[],l=i,l+=1;--l;)u=i-l,e.push(u<=n?0:t.els[r][u]-t.els[n][u]*s);t.els[r]=e}}return t},t.prototype.augment=function(e){var n,r,o,i,s,a,l,u,f;if(void 0===(n=e.els||e)[0][0]&&(n=new t(n).els),o=(r=this.dup()).els[0].length,a=u=r.els.length,l=n[0].length,u!==n.length)return null;for(u+=1;--u;)for(i=a-u,f=l,f+=1;--f;)s=l-f,r.els[i][o+s]=n[i][s];return r},t.prototype.inverse=function(){var e,n,r,o,i,s,a,l,u,f,h,p,c;for(a=f=this.els.length,l=(e=this.augment(t.I(f)).toRightTriangular()).els[0].length,i=[],f+=1;--f;){for(r=[],h=l,i[o=f-1]=[],n=e.els[o][o],h+=1;--h;)p=l-h,u=e.els[o][p]/n,r.push(u),p>=a&&i[o].push(u);for(e.els[o]=r,s=c=0;0<=o?c<o:c>o;s=0<=o?++c:--c){for(r=[],h=l,h+=1;--h;)p=l-h,r.push(e.els[s][p]-e.els[o][p]*e.els[s][o]);e.els[s]=r}}return new t(i)},t.I=function(e){var n,r,o,i,s;for(n=[],i=e,e+=1;--e;)for(n[r=i-e]=[],s=i,s+=1;--s;)o=i-s,n[r][o]=r===o?1:0;return new t(n)},t.prototype.decompose=function(){var t,n,r,o,i,s,a,l,u,f,p,c,m,d,g,y,v,b,w,x,M,S,k,T,C,H,R,q,X,I,Y,j,z,F,G;for(this,b=[],g=[],y=[],[],s=[],t=[],n=H=0;H<=3;n=++H)for(t[n]=[],r=R=0;R<=3;r=++R)t[n][r]=this.els[n][r];if(0===t[3][3])return!1;for(n=q=0;q<=3;n=++q)for(r=X=0;X<=3;r=++X)t[n][r]/=t[3][3];for(a=this.dup(),n=I=0;I<=2;n=++I)a.els[n][3]=0;if(a.els[3][3]=1,0!==t[0][3]||0!==t[1][3]||0!==t[2][3]){for(f=new h(t.slice(0,4)[3]),s=a.inverse().transpose().multiply(f).els,n=Y=0;Y<=2;n=++Y)t[n][3]=0;t[3][3]=1}else s=[0,0,0,1];for(n=j=0;j<=2;n=++j)b[n]=t[3][n],t[3][n]=0;for(c=[],n=z=0;z<=2;n=++z)c[n]=new h(t[n].slice(0,3));if(g[0]=c[0].length(),c[0]=c[0].normalize(),y[0]=c[0].dot(c[1]),c[1]=c[1].combine(c[0],1,-y[0]),g[1]=c[1].length(),c[1]=c[1].normalize(),y[0]/=g[1],y[1]=c[0].dot(c[2]),c[2]=c[2].combine(c[0],1,-y[1]),y[2]=c[1].dot(c[2]),c[2]=c[2].combine(c[1],1,-y[2]),g[2]=c[2].length(),c[2]=c[2].normalize(),y[1]/=g[2],y[2]/=g[2],i=c[1].cross(c[2]),c[0].dot(i)<0)for(n=F=0;F<=2;n=++F)for(g[n]*=-1,r=G=0;G<=2;r=++G)c[n].els[r]*=-1;for(x in m=function(t,e){return c[t].els[e]},(p=[])[1]=Math.asin(-m(0,2)),0!==Math.cos(p[1])?(p[0]=Math.atan2(m(1,2),m(2,2)),p[2]=Math.atan2(m(0,1),m(0,0))):(p[0]=Math.atan2(-m(2,0),m(1,1)),p[1]=0),(v=m(0,0)+m(1,1)+m(2,2)+1)>1e-4?(S=.25/(d=.5/Math.sqrt(v)),k=(m(2,1)-m(1,2))*d,T=(m(0,2)-m(2,0))*d,C=(m(1,0)-m(0,1))*d):m(0,0)>m(1,1)&&m(0,0)>m(2,2)?(k=.25*(d=2*Math.sqrt(1+m(0,0)-m(1,1)-m(2,2))),T=(m(0,1)+m(1,0))/d,C=(m(0,2)+m(2,0))/d,S=(m(2,1)-m(1,2))/d):m(1,1)>m(2,2)?(d=2*Math.sqrt(1+m(1,1)-m(0,0)-m(2,2)),k=(m(0,1)+m(1,0))/d,T=.25*d,C=(m(1,2)+m(2,1))/d,S=(m(0,2)-m(2,0))/d):(d=2*Math.sqrt(1+m(2,2)-m(0,0)-m(1,1)),k=(m(0,2)+m(2,0))/d,T=(m(1,2)+m(2,1))/d,C=.25*d,S=(m(1,0)-m(0,1))/d),l=[k,T,C,S],(u=new e).translate=b,u.scale=g,u.skew=y,u.quaternion=l,u.perspective=s,u.rotate=p,u)for(o in w=u[x])M=w[o],isNaN(M)&&(w[o]=0);return u},t.prototype.toString=function(){var t,e,n,r,o;for(n="matrix3d(",t=r=0;r<=3;t=++r)for(e=o=0;o<=3;e=++o)n+=Z(this.els[t][e],10),3===t&&3===e||(n+=",");return n+=")"},t.matrixForTransform=w((function(t){var e,n,r,o,i,s;return(e=document.createElement("div")).style.position="absolute",e.style.visibility="hidden",e.style[A("transform")]=t,document.body.appendChild(e),n=null!=(o=null!=(i=(r=window.getComputedStyle(e,null)).transform)?i:r[A("transform")])?o:null!=(s=C.tests)?s.matrixForTransform(t):void 0,document.body.removeChild(e),n})),t.fromTransform=function(e){var n,r,o,i,s,a;for(r=(i=null!=e?e.match(/matrix3?d?\(([-0-9,e \.]*)\)/):void 0)?6===(n=(n=i[1].split(",")).map(parseFloat)).length?[n[0],n[1],0,0,n[2],n[3],0,0,0,0,1,0,n[4],n[5],0,1]:n:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],s=[],o=a=0;a<=3;o=++a)s.push(r.slice(4*o,4*o+4));return new t(s)},t}(),G=w((function(t){var e,n,r,o,i,s,a,l,u,f;if(void 0!==document.body.style[t])return"";for(i="",s=0,l=(o=t.split("-")).length;s<l;s++)i+=(r=o[s]).substring(0,1).toUpperCase()+r.substring(1);for(a=0,u=(f=["Webkit","Moz","ms"]).length;a<u;a++)if(e=(n=f[a])+i,void 0!==document.body.style[e])return n;return""})),A=w((function(t){var e;return"Moz"===(e=G(t))?""+e+(t.substring(0,1).toUpperCase()+t.substring(1)):""!==e?"-"+e.toLowerCase()+"-"+_(t):_(t)})),V="undefined"!=typeof window&&null!==window?window.requestAnimationFrame:void 0,m=[],d=[],W=!1,N=1,"undefined"!=typeof window&&null!==window&&window.addEventListener("keyup",(function(t){if(68===t.keyCode&&t.shiftKey&&t.ctrlKey)return C.toggleSlow()})),null==V&&(I=0,V=function(t){var e,n,r;return e=Date.now(),r=Math.max(0,16-(e-I)),n=window.setTimeout((function(){return t(e+r)}),r),I=e+r,n}),L=!1,E=!1,$=function(){if(!L)return L=!0,V(D)},D=function(t){var e,n,r,o;if(!E){for(n=[],r=0,o=m.length;r<o;r++)e=m[r],c(t,e)||n.push(e);return m=m.filter((function(t){return-1===n.indexOf(t)})),0===m.length?L=!1:V(D)}V(D)},c=function(t,e){var n,r,o,i,s,a,l,u;if(null==e.tStart&&(e.tStart=t),i=(t-e.tStart)/e.options.duration,s=e.curve(i),r={},i>=1)r=e.curve.returnsToSelf?e.properties.start:e.properties.end;else for(n in u=e.properties.start)o=u[n],r[n]=R(o,e.properties.end[n],s);return y(e.el,r),"function"==typeof(a=e.options).change&&a.change(e.el,Math.min(1,i)),i>=1&&"function"==typeof(l=e.options).complete&&l.complete(e.el),i<1},R=function(t,e,n){return null!=t&&null!=t.interpolate?t.interpolate(e,n):null},U=function(t,e,n,r){var o,s,f,h,p,c,g,y;if(null!=r&&(d=d.filter((function(t){return t.id!==r}))),C.stop(t,{timeout:!1}),!n.animated)return C.css(t,e),void("function"==typeof n.complete&&n.complete(this));for(h in e=F(e),c=H(t,Object.keys(e)),o={},g=[],e)y=e[h],null!=t.style&&tt.contains(h)?g.push([h,y]):((s=S(y))instanceof i&&null!=t.style&&(s=new a([s,nt(h,0)])),o[h]=s);return g.length>0&&((f=X(t))?(p=new u).applyProperties(g):(y=g.map((function(t){return et(t[0],t[1])})).join(" "),p=l.fromTransform(l.matrixForTransform(y))),o.transform=p.decompose(),f&&c.transform.applyRotateCenter([o.transform.props.rotate[1],o.transform.props.rotate[2]])),m.push({el:t,properties:{start:c,end:o},options:n,curve:n.type.call(n.type,n)}),$()},Q=[],J=0,P=function(t){if(q())return t.realTimeoutId=setTimeout((function(){return t.fn(),x(t.id)}),t.delay)},p=function(t,e){var n;return n={id:J+=1,tStart:Date.now(),fn:t,delay:e,originalDelay:e},P(n),Q.push(n),J},x=function(t){return Q=Q.filter((function(e){return e.id===t&&clearTimeout(e.realTimeoutId),e.id!==t}))},Y=function(t,e){var n;return null!=t?(n=t-e.tStart,e.originalDelay-n):e.originalDelay},"undefined"!=typeof window&&null!==window&&window.addEventListener("unload",(function(){})),K=null,z((function(t){var e,n,r,o,i,s,a,l,u,f;if(E=!t,t){if(L)for(n=Date.now()-K,i=0,l=m.length;i<l;i++)null!=(e=m[i]).tStart&&(e.tStart+=n);for(s=0,u=Q.length;s<u;s++)(r=Q[s]).delay=Y(K,r),P(r);return K=null}for(K=Date.now(),f=[],o=0,a=Q.length;o<a;o++)r=Q[o],f.push(clearTimeout(r.realTimeoutId));return f})),(C={}).linear=function(){return function(t){return t}},C.spring=function(t){var e,n,r,o,i;return null==t&&(t={}),g(t,C.spring.defaults),r=Math.max(1,t.frequency/20),o=Math.pow(20,t.friction/100),i=t.anticipationSize/1e3,Math.max(0,i),e=function(e){var n,r;return.8,0,(.8-(n=((r=i/(1-i))-0)/(r-0)))/r*e*t.anticipationStrength/100+n},n=function(t){return Math.pow(o/10,-t)*(1-t)},function(t){var o,s,a,l,u,f,h,p;return f=t/(1-i)-i/(1-i),t<i?(p=i/(1-i)-i/(1-i),h=0/(1-i)-i/(1-i),u=Math.acos(1/e(p)),a=(Math.acos(1/e(h))-u)/(r*-i),o=e):(o=n,u=0,a=1),s=o(f),l=r*(t-i)*a+u,1-s*Math.cos(l)}},C.bounce=function(t){var e,n,r,o;return null==t&&(t={}),g(t,C.bounce.defaults),r=Math.max(1,t.frequency/20),o=Math.pow(20,t.friction/100),e=function(t){return Math.pow(o/10,-t)*(1-t)},(n=function(t){var n,o;return-1.57,1,n=e(t),o=r*t*1-1.57,n*Math.cos(o)}).returnsToSelf=!0,n},C.gravity=function(t){var e,n,r,o,i,s;return null==t&&(t={}),g(t,C.gravity.defaults),n=Math.min(t.bounciness/1250,.8),o=t.elasticity/1e3,100,r=[],e=function(){var r,o;for(o={a:-(r=Math.sqrt(.02)),b:r,H:1},t.returnsToSelf&&(o.a=0,o.b=2*o.b);o.H>.001;)e=o.b-o.a,o={a:o.b,b:o.b+e*n,H:o.H*n*n};return o.b}(),s=function(n,r,o,i){var s,a;return s=(a=2/(e=r-n)*i-1-2*n/e)*a*o-o+1,t.returnsToSelf&&(s=1-s),s},function(){var i,s,a,l;for(a={a:-(s=Math.sqrt(2/(100*e*e))),b:s,H:1},t.returnsToSelf&&(a.a=0,a.b=2*a.b),r.push(a),i=e,l=[];a.b<1&&a.H>.001;)i=a.b-a.a,a={a:a.b,b:a.b+i*n,H:a.H*o},l.push(r.push(a))}(),(i=function(e){var n,o;for(n=r[o=0];!(e>=n.a&&e<=n.b)&&(n=r[o+=1]););return n?s(n.a,n.b,n.H,e):t.returnsToSelf?0:1}).returnsToSelf=t.returnsToSelf,i},C.forceWithGravity=function(t){return null==t&&(t={}),g(t,C.forceWithGravity.defaults),t.returnsToSelf=!0,C.gravity(t)},C.bezier=(it=function(t,e,n,r,o){return Math.pow(1-t,3)*e+3*Math.pow(1-t,2)*t*n+3*(1-t)*Math.pow(t,2)*r+Math.pow(t,3)*o},ot=function(t,e,n,r,o){return{x:it(t,e.x,n.x,r.x,o.x),y:it(t,e.y,n.y,r.y,o.y)}},st=function(t,e,n){var r,o,i,s,a,l,u,f,h;for(r=null,f=0,h=e.length;f<h&&(t>=(o=e[f])(0).x&&t<=o(1).x&&(r=o),null===r);f++);if(!r)return n?0:1;for(u=r(a=((l=1)+(s=0))/2).x,i=0;Math.abs(t-u)>1e-4&&i<100;)t>u?s=a:l=a,u=r(a=(l+s)/2).x,i+=1;return r(a).y},function(t){var e,n,r;return null==t&&(t={}),r=t.points,e=function(){var t,n,o;for(t in e=[],o=function(t,n){var r;return r=function(e){return ot(e,t,t.cp[t.cp.length-1],n.cp[0],n)},e.push(r)},r){if((n=parseInt(t))>=r.length-1)break;o(r[n],r[n+1])}return e}(),(n=function(t){return 0===t?0:1===t?1:st(t,e,this.returnsToSelf)}).returnsToSelf=0===r[r.length-1].y,n}),C.easeInOut=function(t){var e,n;return null==t&&(t={}),e=null!=(n=t.friction)?n:C.easeInOut.defaults.friction,C.bezier({points:[{x:0,y:0,cp:[{x:.92-e/1e3,y:0}]},{x:1,y:1,cp:[{x:.08+e/1e3,y:1}]}]})},C.easeIn=function(t){var e,n;return null==t&&(t={}),e=null!=(n=t.friction)?n:C.easeIn.defaults.friction,C.bezier({points:[{x:0,y:0,cp:[{x:.92-e/1e3,y:0}]},{x:1,y:1,cp:[{x:1,y:1}]}]})},C.easeOut=function(t){var e,n;return null==t&&(t={}),e=null!=(n=t.friction)?n:C.easeOut.defaults.friction,C.bezier({points:[{x:0,y:0,cp:[{x:0,y:0}]},{x:1,y:1,cp:[{x:.08+e/1e3,y:1}]}]})},C.spring.defaults={frequency:300,friction:200,anticipationSize:0,anticipationStrength:0},C.bounce.defaults={frequency:300,friction:200},C.forceWithGravity.defaults=C.gravity.defaults={bounciness:400,elasticity:200},C.easeInOut.defaults=C.easeIn.defaults=C.easeOut.defaults={friction:500},C.css=j((function(t,e){return v(t,e,!0)})),C.animate=j((function(t,e,n){var r;return null==n&&(n={}),n=M(n),g(n,{type:C.easeInOut,duration:1e3,delay:0,animated:!0}),n.duration=Math.max(0,n.duration*N),n.delay=Math.max(0,n.delay),0===n.delay?U(t,e,n):(r=C.setTimeout((function(){return U(t,e,n,r)}),n.delay),d.push({id:r,el:t}))})),C.stop=j((function(t,e){return null==e&&(e={}),null==e.timeout&&(e.timeout=!0),e.timeout&&(d=d.filter((function(n){return n.el!==t||null!=e.filter&&!e.filter(n)||(C.clearTimeout(n.id),!1)}))),m=m.filter((function(e){return e.el!==t}))})),C.setTimeout=function(t,e){return p(t,e*N)},C.clearTimeout=function(t){return x(t)},C.toggleSlow=function(){return N=(W=!W)?3:1,"undefined"!=typeof console&&null!==console&&"function"==typeof console.log?console.log("dynamics.js: slow animations "+(W?"enabled":"disabled")):void 0},"object"==typeof module&&"object"==typeof module.exports?module.exports=C:"function"==typeof define?define("dynamics",(function(){return C})):window.dynamics=C}).call(this);
|
bdthemes-prime-slider.php
CHANGED
@@ -4,14 +4,14 @@
|
|
4 |
* Plugin Name: Prime Slider
|
5 |
* Plugin URI: https://primeslider.pro/
|
6 |
* Description: Prime Slider is a packed of elementor widget that gives you some awesome header and slider combination for your website.
|
7 |
-
* Version: 2.
|
8 |
* Author: BdThemes
|
9 |
* Author URI: https://bdthemes.com/
|
10 |
* Text Domain: bdthemes-prime-slider
|
11 |
* Domain Path: /languages
|
12 |
* License: GPL3
|
13 |
* Elementor requires at least: 3.0.0
|
14 |
-
* Elementor tested up to: 3.5.
|
15 |
*
|
16 |
*/
|
17 |
|
@@ -57,7 +57,7 @@ if ( function_exists( 'bdt_ps' ) ) {
|
|
57 |
}
|
58 |
|
59 |
// Some pre define value for easy use
|
60 |
-
define( 'BDTPS_VER', '2.
|
61 |
define( 'BDTPS__FILE__', __FILE__ );
|
62 |
define( 'BDTPS_PNAME', basename( dirname( BDTPS__FILE__ ) ) );
|
63 |
define( 'BDTPS_PBNAME', plugin_basename( BDTPS__FILE__ ) );
|
4 |
* Plugin Name: Prime Slider
|
5 |
* Plugin URI: https://primeslider.pro/
|
6 |
* Description: Prime Slider is a packed of elementor widget that gives you some awesome header and slider combination for your website.
|
7 |
+
* Version: 2.7.1
|
8 |
* Author: BdThemes
|
9 |
* Author URI: https://bdthemes.com/
|
10 |
* Text Domain: bdthemes-prime-slider
|
11 |
* Domain Path: /languages
|
12 |
* License: GPL3
|
13 |
* Elementor requires at least: 3.0.0
|
14 |
+
* Elementor tested up to: 3.5.6
|
15 |
*
|
16 |
*/
|
17 |
|
57 |
}
|
58 |
|
59 |
// Some pre define value for easy use
|
60 |
+
define( 'BDTPS_VER', '2.7.1' );
|
61 |
define( 'BDTPS__FILE__', __FILE__ );
|
62 |
define( 'BDTPS_PNAME', basename( dirname( BDTPS__FILE__ ) ) );
|
63 |
define( 'BDTPS_PBNAME', plugin_basename( BDTPS__FILE__ ) );
|
changelog.txt
CHANGED
@@ -1,3 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
## 2.6.2 [20th February 2022]
|
2 |
|
3 |
### Added
|
1 |
+
## 2.7.1 [8th March 2022]
|
2 |
+
|
3 |
+
### Fixed
|
4 |
+
|
5 |
+
- Woocircle Widget not showing issue fixed
|
6 |
+
|
7 |
+
## 2.7.0 [7th March 2022]
|
8 |
+
|
9 |
+
### Added
|
10 |
+
|
11 |
+
- Woocircle Widget Added
|
12 |
+
|
13 |
+
### Fixed
|
14 |
+
|
15 |
+
- Deprecated issue fixed in Blog, General, Isolate Slider Widgets (Thanks to BeautyMed Co)
|
16 |
+
|
17 |
## 2.6.2 [20th February 2022]
|
18 |
|
19 |
### Added
|
freemius/assets/css/admin/account.css
CHANGED
@@ -1 +1,496 @@
|
|
1 |
-
label.fs-tag,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
label.fs-tag,
|
2 |
+
span.fs-tag {
|
3 |
+
background: #ffba00;
|
4 |
+
color: #fff;
|
5 |
+
display: inline-block;
|
6 |
+
border-radius: 3px;
|
7 |
+
padding: 5px;
|
8 |
+
font-size: 11px;
|
9 |
+
line-height: 11px;
|
10 |
+
vertical-align: baseline;
|
11 |
+
}
|
12 |
+
|
13 |
+
label.fs-tag.fs-warn,
|
14 |
+
span.fs-tag.fs-warn {
|
15 |
+
background: #ffba00;
|
16 |
+
}
|
17 |
+
|
18 |
+
label.fs-tag.fs-info,
|
19 |
+
span.fs-tag.fs-info {
|
20 |
+
background: #00a0d2;
|
21 |
+
}
|
22 |
+
|
23 |
+
label.fs-tag.fs-success,
|
24 |
+
span.fs-tag.fs-success {
|
25 |
+
background: #46b450;
|
26 |
+
}
|
27 |
+
|
28 |
+
label.fs-tag.fs-error,
|
29 |
+
span.fs-tag.fs-error {
|
30 |
+
background: #dc3232;
|
31 |
+
}
|
32 |
+
|
33 |
+
.fs-notice[data-id="license_not_whitelabeled"].success,
|
34 |
+
.fs-notice[data-id="license_whitelabeled"].success {
|
35 |
+
color: inherit;
|
36 |
+
border-left-color: #00a0d2;
|
37 |
+
}
|
38 |
+
|
39 |
+
.fs-notice[data-id="license_not_whitelabeled"].success label.fs-plugin-title,
|
40 |
+
.fs-notice[data-id="license_whitelabeled"].success label.fs-plugin-title {
|
41 |
+
display: none;
|
42 |
+
}
|
43 |
+
|
44 |
+
#fs_account .postbox,
|
45 |
+
#fs_account .widefat {
|
46 |
+
max-width: 800px;
|
47 |
+
padding: 35px;
|
48 |
+
border-radius: 10px;
|
49 |
+
border: 0;
|
50 |
+
}
|
51 |
+
|
52 |
+
#fs_account h3 {
|
53 |
+
font-size: 1.3em;
|
54 |
+
margin: 0;
|
55 |
+
display: inline-block;
|
56 |
+
}
|
57 |
+
|
58 |
+
#fs_account h3 .dashicons {
|
59 |
+
width: 26px;
|
60 |
+
height: 26px;
|
61 |
+
font-size: 1.3em;
|
62 |
+
}
|
63 |
+
|
64 |
+
#fs_account i.dashicons {
|
65 |
+
font-size: 1.2em;
|
66 |
+
height: 1.2em;
|
67 |
+
width: 1.2em;
|
68 |
+
}
|
69 |
+
|
70 |
+
#fs_account .dashicons {
|
71 |
+
vertical-align: middle;
|
72 |
+
}
|
73 |
+
|
74 |
+
#fs_account .fs-header-actions {
|
75 |
+
position: absolute;
|
76 |
+
top: 35px;
|
77 |
+
right: 35px;
|
78 |
+
font-size: 14px;
|
79 |
+
}
|
80 |
+
|
81 |
+
#fs_account .fs-header-actions ul {
|
82 |
+
margin: 0;
|
83 |
+
display: inline-flex;
|
84 |
+
align-items: center;
|
85 |
+
grid-column-gap: 5px;
|
86 |
+
}
|
87 |
+
#fs_account .fs-header-actions li {
|
88 |
+
float: left;
|
89 |
+
margin: 0;
|
90 |
+
}
|
91 |
+
|
92 |
+
#fs_account .fs-header-actions li form {
|
93 |
+
display: inline-block;
|
94 |
+
}
|
95 |
+
|
96 |
+
#fs_account .fs-header-actions li a {
|
97 |
+
text-decoration: none;
|
98 |
+
color: #4f5b76;
|
99 |
+
}
|
100 |
+
|
101 |
+
#fs_account_details .button-group {
|
102 |
+
float: right;
|
103 |
+
}
|
104 |
+
|
105 |
+
.rtl #fs_account .fs-header-actions {
|
106 |
+
left: 15px;
|
107 |
+
right: auto;
|
108 |
+
}
|
109 |
+
|
110 |
+
.fs-key-value-table {
|
111 |
+
width: 100%;
|
112 |
+
}
|
113 |
+
|
114 |
+
.fs-key-value-table form {
|
115 |
+
display: inline-block;
|
116 |
+
}
|
117 |
+
|
118 |
+
.fs-key-value-table tr td:first-child {
|
119 |
+
text-align: left;
|
120 |
+
}
|
121 |
+
|
122 |
+
.fs-key-value-table tr td:first-child nobr {
|
123 |
+
font-weight: 600;
|
124 |
+
font-size: 14px;
|
125 |
+
text-transform: capitalize;
|
126 |
+
}
|
127 |
+
|
128 |
+
.fs-key-value-table tr td:first-child form {
|
129 |
+
display: block;
|
130 |
+
}
|
131 |
+
|
132 |
+
.fs-key-value-table tr td.fs-right {
|
133 |
+
margin-left: auto;
|
134 |
+
}
|
135 |
+
|
136 |
+
.fs-key-value-table tr.fs-odd {
|
137 |
+
background: #ebebeb;
|
138 |
+
}
|
139 |
+
|
140 |
+
/* .fs-key-value-table td,
|
141 |
+
.fs-key-value-table th {
|
142 |
+
padding: 10px;
|
143 |
+
} */
|
144 |
+
.fs-key-value-table code {
|
145 |
+
line-height: 28px;
|
146 |
+
}
|
147 |
+
|
148 |
+
.fs-key-value-table var,
|
149 |
+
.fs-key-value-table code,
|
150 |
+
.fs-key-value-table input[type="text"] {
|
151 |
+
color: #0073aa;
|
152 |
+
font-size: 12px;
|
153 |
+
background: none;
|
154 |
+
margin-left: 10px;
|
155 |
+
}
|
156 |
+
|
157 |
+
.fs-key-value-table input[type="text"] {
|
158 |
+
width: 100%;
|
159 |
+
font-weight: bold;
|
160 |
+
}
|
161 |
+
|
162 |
+
label.fs-tag {
|
163 |
+
background: #ffba00;
|
164 |
+
color: #fff;
|
165 |
+
display: inline-block;
|
166 |
+
border-radius: 3px;
|
167 |
+
padding: 5px;
|
168 |
+
font-size: 11px;
|
169 |
+
line-height: 11px;
|
170 |
+
vertical-align: baseline;
|
171 |
+
}
|
172 |
+
|
173 |
+
label.fs-tag.fs-warn {
|
174 |
+
background: #ffba00;
|
175 |
+
}
|
176 |
+
|
177 |
+
label.fs-tag.fs-success {
|
178 |
+
background: #46b450;
|
179 |
+
}
|
180 |
+
|
181 |
+
label.fs-tag.fs-error {
|
182 |
+
background: #dc3232;
|
183 |
+
}
|
184 |
+
|
185 |
+
#fs_sites .fs-scrollable-table .fs-table-body {
|
186 |
+
max-height: 200px;
|
187 |
+
overflow: auto;
|
188 |
+
border: 1px solid #e5e5e5;
|
189 |
+
}
|
190 |
+
|
191 |
+
#fs_sites .fs-scrollable-table .fs-table-body>table.widefat {
|
192 |
+
border: none !important;
|
193 |
+
}
|
194 |
+
|
195 |
+
#fs_sites .fs-scrollable-table .fs-main-column {
|
196 |
+
width: 100%;
|
197 |
+
}
|
198 |
+
|
199 |
+
#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type {
|
200 |
+
text-align: right;
|
201 |
+
color: grey;
|
202 |
+
width: 1px;
|
203 |
+
}
|
204 |
+
|
205 |
+
#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type {
|
206 |
+
text-align: right;
|
207 |
+
}
|
208 |
+
|
209 |
+
#fs_sites .fs-scrollable-table .fs-install-details table tr td {
|
210 |
+
width: 1px;
|
211 |
+
white-space: nowrap;
|
212 |
+
}
|
213 |
+
|
214 |
+
#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type {
|
215 |
+
width: auto;
|
216 |
+
}
|
217 |
+
|
218 |
+
#fs_addons h3 {
|
219 |
+
border: none;
|
220 |
+
margin-bottom: 0;
|
221 |
+
padding: 4px 5px;
|
222 |
+
}
|
223 |
+
|
224 |
+
#fs_addons td {
|
225 |
+
vertical-align: middle;
|
226 |
+
}
|
227 |
+
|
228 |
+
#fs_addons thead {
|
229 |
+
white-space: nowrap;
|
230 |
+
}
|
231 |
+
|
232 |
+
#fs_addons td:first-child,
|
233 |
+
#fs_addons th:first-child {
|
234 |
+
text-align: left;
|
235 |
+
font-weight: bold;
|
236 |
+
}
|
237 |
+
|
238 |
+
#fs_addons td:last-child,
|
239 |
+
#fs_addons th:last-child {
|
240 |
+
text-align: right;
|
241 |
+
}
|
242 |
+
|
243 |
+
#fs_addons th {
|
244 |
+
font-weight: bold;
|
245 |
+
}
|
246 |
+
|
247 |
+
#fs_billing_address {
|
248 |
+
width: 100%;
|
249 |
+
}
|
250 |
+
|
251 |
+
#fs_billing_address tr td {
|
252 |
+
width: 50%;
|
253 |
+
padding: 5px;
|
254 |
+
}
|
255 |
+
|
256 |
+
#fs_billing_address tr:first-of-type td {
|
257 |
+
padding-top: 0;
|
258 |
+
}
|
259 |
+
|
260 |
+
#fs_billing_address span {
|
261 |
+
font-weight: bold;
|
262 |
+
}
|
263 |
+
|
264 |
+
#fs_billing_address input,
|
265 |
+
#fs_billing_address select {
|
266 |
+
display: block;
|
267 |
+
width: 100%;
|
268 |
+
margin-top: 5px;
|
269 |
+
}
|
270 |
+
|
271 |
+
#fs_billing_address input::-moz-placeholder,
|
272 |
+
#fs_billing_address select::-moz-placeholder {
|
273 |
+
color: transparent;
|
274 |
+
opacity: 1;
|
275 |
+
}
|
276 |
+
|
277 |
+
#fs_billing_address input:-ms-input-placeholder,
|
278 |
+
#fs_billing_address select:-ms-input-placeholder {
|
279 |
+
color: transparent;
|
280 |
+
}
|
281 |
+
|
282 |
+
#fs_billing_address input::-webkit-input-placeholder,
|
283 |
+
#fs_billing_address select::-webkit-input-placeholder {
|
284 |
+
color: transparent;
|
285 |
+
}
|
286 |
+
|
287 |
+
#fs_billing_address input.fs-read-mode,
|
288 |
+
#fs_billing_address select.fs-read-mode {
|
289 |
+
border-color: transparent;
|
290 |
+
color: #777;
|
291 |
+
border-bottom: 1px dashed #ccc;
|
292 |
+
padding-left: 0;
|
293 |
+
background: none;
|
294 |
+
}
|
295 |
+
|
296 |
+
#fs_billing_address.fs-read-mode td span {
|
297 |
+
display: none;
|
298 |
+
}
|
299 |
+
|
300 |
+
#fs_billing_address.fs-read-mode input,
|
301 |
+
#fs_billing_address.fs-read-mode select {
|
302 |
+
border-color: transparent;
|
303 |
+
color: #777;
|
304 |
+
border-bottom: 1px dashed #ccc;
|
305 |
+
padding-left: 0;
|
306 |
+
background: none;
|
307 |
+
}
|
308 |
+
|
309 |
+
#fs_billing_address.fs-read-mode input::-moz-placeholder,
|
310 |
+
#fs_billing_address.fs-read-mode select::-moz-placeholder {
|
311 |
+
color: #ccc;
|
312 |
+
opacity: 1;
|
313 |
+
}
|
314 |
+
|
315 |
+
#fs_billing_address.fs-read-mode input:-ms-input-placeholder,
|
316 |
+
#fs_billing_address.fs-read-mode select:-ms-input-placeholder {
|
317 |
+
color: #ccc;
|
318 |
+
}
|
319 |
+
|
320 |
+
#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,
|
321 |
+
#fs_billing_address.fs-read-mode select::-webkit-input-placeholder {
|
322 |
+
color: #ccc;
|
323 |
+
}
|
324 |
+
|
325 |
+
#fs_billing_address button {
|
326 |
+
display: block;
|
327 |
+
width: 100%;
|
328 |
+
}
|
329 |
+
|
330 |
+
/* edit by asik */
|
331 |
+
.fs-key-value-table tr {
|
332 |
+
height: 55px;
|
333 |
+
padding: 0 16px;
|
334 |
+
display: flex;
|
335 |
+
align-items: center;
|
336 |
+
border-radius: 5px;
|
337 |
+
background: transparent;
|
338 |
+
border: 1px solid #f1f1f1;
|
339 |
+
margin-bottom: 10px;
|
340 |
+
}
|
341 |
+
|
342 |
+
.fs-key-value-table code {
|
343 |
+
padding: 0;
|
344 |
+
margin-left: 10px;
|
345 |
+
font-size: 14px;
|
346 |
+
color: #5e646c;
|
347 |
+
}
|
348 |
+
|
349 |
+
.fs-field-plan td {
|
350 |
+
display: flex;
|
351 |
+
align-items: center;
|
352 |
+
justify-content: flex-start;
|
353 |
+
width: 100%;
|
354 |
+
}
|
355 |
+
|
356 |
+
#fs_account_details .button-group {
|
357 |
+
margin-left: auto;
|
358 |
+
}
|
359 |
+
|
360 |
+
#poststuff .inside {
|
361 |
+
margin-top: 30px !important;
|
362 |
+
padding: 0;
|
363 |
+
}
|
364 |
+
|
365 |
+
.wp-core-ui .button-group {
|
366 |
+
font-size: inherit !important;
|
367 |
+
}
|
368 |
+
|
369 |
+
.wp-core-ui .button,
|
370 |
+
.wp-core-ui .button-secondary {
|
371 |
+
color: #2c2f32 !important;
|
372 |
+
border-color: #c4c9cc !important;
|
373 |
+
background: #fbfbfb00 !important;
|
374 |
+
transition: all .3s ease;
|
375 |
+
}
|
376 |
+
|
377 |
+
.wp-core-ui .button:hover, .wp-core-ui .button-secondary:hover {
|
378 |
+
border-color: rgba(0, 46, 243, 0.73) !important;
|
379 |
+
}
|
380 |
+
|
381 |
+
/* clone-resolution css start*/
|
382 |
+
|
383 |
+
.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option {
|
384 |
+
border: 1px solid #efefef;
|
385 |
+
padding: 20px;
|
386 |
+
border-radius: 10px;
|
387 |
+
}
|
388 |
+
.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option strong {
|
389 |
+
font-size: 14px;
|
390 |
+
padding: 0;
|
391 |
+
line-height: 1.7;
|
392 |
+
text-transform: capitalize;
|
393 |
+
margin-bottom: 10px;
|
394 |
+
display: inline-block;
|
395 |
+
color: #343a4a;
|
396 |
+
font-weight: 400;
|
397 |
+
}
|
398 |
+
|
399 |
+
.fs-clone-resolution-option div button {
|
400 |
+
margin-top: 20px !important;
|
401 |
+
}
|
402 |
+
/* clone-resolution css end*/
|
403 |
+
|
404 |
+
/* common css start*/
|
405 |
+
.notice p, .notice-title, div.updated p, div.error p, .form-table td .notice p {
|
406 |
+
margin: 0 !important;
|
407 |
+
padding: 0 !important;
|
408 |
+
display: inline-block;
|
409 |
+
text-transform: capitalize;
|
410 |
+
font-size: 14px;
|
411 |
+
color: #343a4a;
|
412 |
+
}
|
413 |
+
.postbox .inside {
|
414 |
+
padding: 30px 0 0 0!important;
|
415 |
+
}
|
416 |
+
|
417 |
+
.input-container {
|
418 |
+
margin-top: 12px;
|
419 |
+
}
|
420 |
+
|
421 |
+
/* common css end*/
|
422 |
+
|
423 |
+
/* dialog boxs css start*/
|
424 |
+
.fs-modal .fs-modal-header h4 {
|
425 |
+
color: #2b2e3c !important;
|
426 |
+
text-shadow: 0 !important;
|
427 |
+
}
|
428 |
+
.fs-modal .fs-modal-body>div {
|
429 |
+
margin-top: 0 !important;
|
430 |
+
}
|
431 |
+
.fs-modal.fs-modal-email-address-update p {
|
432 |
+
margin: 0 !important;
|
433 |
+
}
|
434 |
+
input.fs-new-email-address-input {
|
435 |
+
height: 50px;
|
436 |
+
border: 1px solid #d7d8dc !important;
|
437 |
+
margin-top: 10px;
|
438 |
+
}
|
439 |
+
.fs-modal .fs-modal-header {
|
440 |
+
padding: 20px 30px !important;
|
441 |
+
margin-bottom: 0 !important;
|
442 |
+
}
|
443 |
+
|
444 |
+
.fs-modal .fs-modal-body {
|
445 |
+
padding: 30px 40px !important;
|
446 |
+
}
|
447 |
+
.fs-modal .fs-modal-footer {
|
448 |
+
padding: 20px !important;
|
449 |
+
}
|
450 |
+
|
451 |
+
.fs-modal .fs-modal-header .fs-close {
|
452 |
+
right: 30px !important;
|
453 |
+
top: 15px !important;
|
454 |
+
color: #42445c !important;
|
455 |
+
}
|
456 |
+
.fs-modal .fs-modal-dialog {
|
457 |
+
background: #ffffff !important;
|
458 |
+
border-radius: 10px;
|
459 |
+
padding-bottom: 0 !important;
|
460 |
+
}
|
461 |
+
.fs-modal .fs-modal-header {
|
462 |
+
background: transparent !important;
|
463 |
+
}
|
464 |
+
.fs-modal .fs-modal-body, .fs-modal .fs-modal-footer {
|
465 |
+
background: transparent !important;
|
466 |
+
}
|
467 |
+
.fs-modal .fs-modal-body p {
|
468 |
+
margin: 0;
|
469 |
+
}
|
470 |
+
input.fs-license-key {
|
471 |
+
height: 50px;
|
472 |
+
border: 1px solid #d7d8dc !important;
|
473 |
+
margin: 12px 0;
|
474 |
+
}
|
475 |
+
|
476 |
+
.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address {
|
477 |
+
height: 40px;
|
478 |
+
margin-left: 11px;
|
479 |
+
border: 1px solid #ccccd0;
|
480 |
+
}
|
481 |
+
.fs-modal.fs-modal-license-key-resend.fs-freemium label {
|
482 |
+
margin-bottom: 24px !important;
|
483 |
+
}
|
484 |
+
|
485 |
+
/* dialog boxs css end*/
|
486 |
+
|
487 |
+
/* affiliation start*/
|
488 |
+
|
489 |
+
/* affiliation end*/
|
490 |
+
|
491 |
+
/* edit css start*/
|
492 |
+
#poststuff .inside {
|
493 |
+
margin: 0 !important;
|
494 |
+
}
|
495 |
+
/* edit css end*/
|
496 |
+
|
freemius/assets/css/admin/add-ons.css
CHANGED
@@ -1,2 +1 @@
|
|
1 |
-
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
|
2 |
-
#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid white;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
|
1 |
+
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#f3f3f3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}/*# sourceMappingURL=add-ons.css.map */
|
|
freemius/assets/css/admin/affiliation.css
CHANGED
@@ -1 +1,129 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* edit by asik start*/
|
2 |
+
#fs_affiliation_content_wrapper #messages {
|
3 |
+
margin-top: 0
|
4 |
+
}
|
5 |
+
|
6 |
+
#poststuff .inside {
|
7 |
+
margin: 0 !important;
|
8 |
+
}
|
9 |
+
|
10 |
+
.postbox .inside {
|
11 |
+
padding: 30px !important;
|
12 |
+
}
|
13 |
+
|
14 |
+
.postbox .inside ul{
|
15 |
+
margin: 0;
|
16 |
+
padding: 0;
|
17 |
+
}
|
18 |
+
div#application_messages_container p {
|
19 |
+
margin: 0;
|
20 |
+
margin-bottom: 5px;
|
21 |
+
}
|
22 |
+
|
23 |
+
div#application_messages_container p:nth-last-child(1) {
|
24 |
+
margin-bottom: 0;
|
25 |
+
}
|
26 |
+
#fs_affiliation_content_wrapper p:not(.description),
|
27 |
+
#fs_affiliation_content_wrapper li,
|
28 |
+
#fs_affiliation_content_wrapper label {
|
29 |
+
font-size: 16px !important;
|
30 |
+
line-height: 26px !important;
|
31 |
+
color: #71758a;
|
32 |
+
}
|
33 |
+
#fs_affiliation_content_wrapper h3 {
|
34 |
+
font-size: 26px;
|
35 |
+
padding: 0;
|
36 |
+
margin: 20px 0;
|
37 |
+
margin-left: 0;
|
38 |
+
text-transform: capitalize;
|
39 |
+
font-weight: 700;
|
40 |
+
color: #3e4360;
|
41 |
+
}
|
42 |
+
|
43 |
+
.postbox {
|
44 |
+
border: 0 !important;
|
45 |
+
border-radius: 10px;
|
46 |
+
}
|
47 |
+
/* edit by asik end*/
|
48 |
+
|
49 |
+
|
50 |
+
#fs_affiliation_content_wrapper ul li {
|
51 |
+
-moz-box-sizing: border-box;
|
52 |
+
-webkit-box-sizing: border-box;
|
53 |
+
box-sizing: border-box;
|
54 |
+
list-style-type: none
|
55 |
+
}
|
56 |
+
|
57 |
+
#fs_affiliation_content_wrapper ul li:before {
|
58 |
+
content: "✓";
|
59 |
+
margin-right: 10px;
|
60 |
+
font-weight: bold
|
61 |
+
}
|
62 |
+
|
63 |
+
#fs_affiliation_content_wrapper .button {
|
64 |
+
margin-top: 20px;
|
65 |
+
margin-bottom: 7px;
|
66 |
+
line-height: 35px;
|
67 |
+
height: 40px;
|
68 |
+
font-size: 16px;
|
69 |
+
border: 0;
|
70 |
+
}
|
71 |
+
|
72 |
+
#fs_affiliation_content_wrapper .button#cancel_button {
|
73 |
+
margin-right: 5px
|
74 |
+
}
|
75 |
+
|
76 |
+
#fs_affiliation_content_wrapper form .input-container {
|
77 |
+
margin-bottom: 15px
|
78 |
+
}
|
79 |
+
|
80 |
+
#fs_affiliation_content_wrapper form .input-container .input-label {
|
81 |
+
font-weight: bold;
|
82 |
+
display: block;
|
83 |
+
width: 100%
|
84 |
+
}
|
85 |
+
|
86 |
+
#fs_affiliation_content_wrapper form .input-container.input-container-text label,
|
87 |
+
#fs_affiliation_content_wrapper form .input-container.input-container-text input,
|
88 |
+
#fs_affiliation_content_wrapper form .input-container.input-container-text textarea {
|
89 |
+
display: block
|
90 |
+
}
|
91 |
+
|
92 |
+
#fs_affiliation_content_wrapper form .input-container #add_domain,
|
93 |
+
#fs_affiliation_content_wrapper form .input-container .remove-domain {
|
94 |
+
text-decoration: none;
|
95 |
+
display: inline-block;
|
96 |
+
margin-top: 3px
|
97 |
+
}
|
98 |
+
|
99 |
+
#fs_affiliation_content_wrapper form .input-container #add_domain:focus,
|
100 |
+
#fs_affiliation_content_wrapper form .input-container .remove-domain:focus {
|
101 |
+
box-shadow: none
|
102 |
+
}
|
103 |
+
|
104 |
+
#fs_affiliation_content_wrapper form .input-container #add_domain.disabled,
|
105 |
+
#fs_affiliation_content_wrapper form .input-container .remove-domain.disabled {
|
106 |
+
color: #aaa;
|
107 |
+
cursor: default
|
108 |
+
}
|
109 |
+
|
110 |
+
#fs_affiliation_content_wrapper form #extra_domains_container .description {
|
111 |
+
margin-top: 0;
|
112 |
+
position: relative;
|
113 |
+
top: -4px
|
114 |
+
}
|
115 |
+
|
116 |
+
#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container {
|
117 |
+
margin-bottom: 15px
|
118 |
+
}
|
119 |
+
|
120 |
+
#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain {
|
121 |
+
display: inline-block;
|
122 |
+
margin-right: 5px
|
123 |
+
}
|
124 |
+
|
125 |
+
#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain:last-of-type {
|
126 |
+
margin-bottom: 0
|
127 |
+
}
|
128 |
+
|
129 |
+
/*# sourceMappingURL=affiliation.css.map */
|
freemius/assets/css/admin/checkout.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
@media screen and (max-width: 782px){#wpbody-content{padding-bottom:0 !important}}
|
1 |
+
@media screen and (max-width: 782px){#wpbody-content{padding-bottom:0 !important}}/*# sourceMappingURL=checkout.css.map */
|
freemius/assets/css/admin/clone-resolution.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.fs-notice[data-id^=clone_resolution_options_notice]{padding:0;color:inherit !important}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-body{padding:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-header{padding:5px 10px}.fs-notice[data-id^=clone_resolution_options_notice] ol{margin-top:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{display:flex;flex-direction:row;padding:0 10px 10px}@media(max-width: 750px){.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{flex-direction:column}}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option{border:1px solid #ccc;padding:10px 10px 15px 10px;flex:auto;margin:5px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:first-child{margin-left:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:last-child{margin-right:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option strong{font-size:1.2em;padding:2px;line-height:1.5em}.fs-notice[data-id^=clone_resolution_options_notice] a{text-decoration:none}.fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:10px}.rtl .fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:0;margin-left:10px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-documentation-container{padding:0 10px 15px}.fs-notice[data-id=temporary_duplicate_notice] #fs_clone_resolution_error_message{border:1px solid #d3135a;background:#fee;color:#d3135a;padding:10px}.fs-notice[data-id=temporary_duplicate_notice] ol{margin-top:0}/*# sourceMappingURL=clone-resolution.css.map */
|
freemius/assets/css/admin/common.css
CHANGED
@@ -1,2 +1 @@
|
|
1 |
-
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color
|
2 |
-
.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 1250px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
|
1 |
+
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,.1),inset 0 1px 3px 0 rgba(0,0,0,.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.5);z-index:999;-moz-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}.fs-switch-feedback{margin-left:10px}.fs-switch-feedback.success{color:#71ae00}.rtl .fs-switch-feedback{margin-left:0;margin-right:10px}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media(max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,.3);box-shadow:0 2px 2px rgba(6,113,6,.3);opacity:.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 1250px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:"↳";padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:"↲"}.fs-submenu-item.pricing.upgrade-mode{color:#adff2f}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}/*# sourceMappingURL=common.css.map */
|
|
freemius/assets/css/admin/connect.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0
|
1 |
+
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,.3);box-shadow:0px 1px 2px rgba(0,0,0,.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#c0c7ca}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:" ➜"}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:""}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#fefefe;-moz-transition:background .5s ease;-o-transition:background .5s ease;-ms-transition:background .5s ease;-webkit-transition:background .5s ease;transition:background .5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions>.fs-trigger{font-size:.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li>i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li .fs-switch{float:right}#fs_connect .fs-permissions ul li .fs-permission-description{margin-left:55px}#fs_connect .fs-permissions ul li .fs-permission-description span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#c2eeff;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:.85em;padding:5px;background:rgba(0,0,0,.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#c0c7ca}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:" »"}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:""}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li .fs-switch{float:left}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:#fff;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:52px;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms{background:rgba(140,140,140,.64)}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}#license_issues_link{display:block;text-align:center;font-size:.9em;margin-top:10px}/*# sourceMappingURL=connect.css.map */
|
freemius/assets/css/admin/debug.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}
|
1 |
+
.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}/*# sourceMappingURL=debug.css.map */
|
freemius/assets/css/admin/dialog-boxes.css
CHANGED
@@ -1,2 +1 @@
|
|
1 |
-
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type="radio"]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
|
2 |
-
.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
|
1 |
+
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,.6)}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media(max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:last-of-type{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}.rtl .fs-modal .fs-modal-footer{text-align:left}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media(max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:left;line-height:30px}.rtl .fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.rtl .fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:right}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type=radio]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media(max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-modal.fs-modal-email-address-update .fs-modal-body input[type=text]{width:100%}.fs-modal.fs-modal-email-address-update p{margin-bottom:0}.fs-modal.fs-modal-email-address-update ul{margin:1em .5em}.fs-modal.fs-modal-email-address-update ul li label span{float:left;margin-top:0}.fs-modal.fs-modal-email-address-update ul li label span:last-child{display:block;float:none;margin-left:20px}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:.3;-o-transform:.3;-ms-transform:.3;-webkit-transform:.3;transform:.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,.1) !important}/*# sourceMappingURL=dialog-boxes.css.map */
|
|
freemius/assets/css/admin/gdpr-optin-notice.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-notice[data-id^=
|
1 |
+
.fs-notice[data-id^=gdpr_optin_actions] .underlined{text-decoration:underline}.fs-notice[data-id^=gdpr_optin_actions] ul .button,.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{vertical-align:middle}.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{display:inline-block;margin-left:3px}/*# sourceMappingURL=gdpr-optin-notice.css.map */
|
freemius/assets/css/admin/plugins.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}
|
1 |
+
label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}/*# sourceMappingURL=plugins.css.map */
|
freemius/assets/css/customizer.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity
|
1 |
+
#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}#customize-theme-controls #accordion-section-freemius_upsell{border-top:1px solid #0085ba !important;border-bottom:1px solid #0085ba !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title{color:#fff;background-color:#0085ba;border-left:4px solid #0085ba;transition:.15s background-color ease-in-out,.15s border-color ease-in-out;outline:none;border-bottom:none !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:hover{background-color:#008ec2;border-left-color:#0073aa}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:after{color:#fff}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title{border-left:none;border-right:4px solid #0085ba}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title:hover{border-right-color:#0073aa}/*# sourceMappingURL=customizer.css.map */
|
freemius/assets/img/bdthemes-prime-slider.png
DELETED
Binary file
|
freemius/config.php
CHANGED
@@ -354,7 +354,7 @@
|
|
354 |
is_multisite() &&
|
355 |
( is_network_admin() ||
|
356 |
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
|
357 |
-
( isset( $_REQUEST['_fs_network_admin'] ) /*||
|
358 |
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
|
359 |
) ||
|
360 |
// Plugin uninstall.
|
@@ -385,7 +385,7 @@
|
|
385 |
|
386 |
if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
|
387 |
define( 'WP_FS__DEMO_MODE', false );
|
388 |
-
}
|
389 |
-
if ( ! defined( 'FS_SDK__SSLVERIFY' ) ) {
|
390 |
-
define( 'FS_SDK__SSLVERIFY', false );
|
391 |
-
}
|
354 |
is_multisite() &&
|
355 |
( is_network_admin() ||
|
356 |
( ( defined( 'DOING_AJAX' ) && DOING_AJAX &&
|
357 |
+
( isset( $_REQUEST['_fs_network_admin'] ) && 'true' === $_REQUEST['_fs_network_admin'] /*||
|
358 |
( ! empty( $_REQUEST['action'] ) && 'delete-plugin' === $_REQUEST['action'] )*/ )
|
359 |
) ||
|
360 |
// Plugin uninstall.
|
385 |
|
386 |
if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
|
387 |
define( 'WP_FS__DEMO_MODE', false );
|
388 |
+
}
|
389 |
+
if ( ! defined( 'FS_SDK__SSLVERIFY' ) ) {
|
390 |
+
define( 'FS_SDK__SSLVERIFY', false );
|
391 |
+
}
|
freemius/includes/class-freemius.php
CHANGED
@@ -408,8 +408,10 @@
|
|
408 |
* @param bool $is_init Since 1.2.1 Is initiation sequence.
|
409 |
*/
|
410 |
private function __construct( $module_id, $slug = false, $is_init = false ) {
|
|
|
|
|
411 |
if ( $is_init && is_numeric( $module_id ) && is_string( $slug ) ) {
|
412 |
-
$this->store_id_slug_type_path_map( $module_id, $slug );
|
413 |
}
|
414 |
|
415 |
$this->_module_id = $module_id;
|
@@ -424,7 +426,7 @@
|
|
424 |
|
425 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $this->get_unique_affix(), WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
426 |
|
427 |
-
$this->_plugin_main_file_path = $this->_find_caller_plugin_file( $is_init );
|
428 |
$this->_plugin_dir_path = plugin_dir_path( $this->_plugin_main_file_path );
|
429 |
$this->_plugin_basename = $this->get_plugin_basename();
|
430 |
$this->_free_plugin_basename = str_replace( '-premium/', '/', $this->_plugin_basename );
|
@@ -519,7 +521,10 @@
|
|
519 |
* @author Leo Fajardo (@leorw)
|
520 |
* @since 1.2.2
|
521 |
*/
|
522 |
-
( is_object( $this->_plugin )
|
|
|
|
|
|
|
523 |
$this->get_unique_affix()
|
524 |
);
|
525 |
|
@@ -1641,8 +1646,10 @@
|
|
1641 |
}
|
1642 |
|
1643 |
if ( $this->is_plugin() ) {
|
1644 |
-
if ( $
|
1645 |
add_action( 'wpmu_new_blog', array( $this, '_after_new_blog_callback' ), 10, 6 );
|
|
|
|
|
1646 |
}
|
1647 |
|
1648 |
register_deactivation_hook( $this->_plugin_main_file_path, array( &$this, '_deactivate_plugin_hook' ) );
|
@@ -1652,7 +1659,12 @@
|
|
1652 |
add_action( 'deactivate_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1653 |
add_action( 'archive_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1654 |
add_action( 'make_spam_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1655 |
-
|
|
|
|
|
|
|
|
|
|
|
1656 |
|
1657 |
add_action( 'activate_blog', array( &$this, '_after_site_reactivated_callback' ) );
|
1658 |
add_action( 'unarchive_blog', array( &$this, '_after_site_reactivated_callback' ) );
|
@@ -1677,6 +1689,7 @@
|
|
1677 |
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
|
1678 |
add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
|
1679 |
add_action( 'admin_init', array( &$this, '_add_user_change_option' ) );
|
|
|
1680 |
|
1681 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1682 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
@@ -2094,20 +2107,27 @@
|
|
2094 |
/**
|
2095 |
* Leverage backtrace to find caller plugin file path.
|
2096 |
*
|
2097 |
-
* @
|
2098 |
-
* @
|
2099 |
-
*
|
2100 |
-
* @param bool $is_init Is initiation sequence.
|
2101 |
*
|
2102 |
* @return string
|
|
|
|
|
|
|
2103 |
*/
|
2104 |
-
private function _find_caller_plugin_file( $is_init = false ) {
|
2105 |
// Try to load the cached value of the file path.
|
2106 |
if ( isset( $this->_storage->plugin_main_file ) ) {
|
2107 |
$plugin_main_file = $this->_storage->plugin_main_file;
|
2108 |
if ( ! empty( $plugin_main_file->path ) ) {
|
2109 |
$absolute_path = $this->get_absolute_path( $plugin_main_file->path );
|
2110 |
if ( file_exists( $absolute_path ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
2111 |
return $absolute_path;
|
2112 |
}
|
2113 |
}
|
@@ -2148,12 +2168,11 @@
|
|
2148 |
* Only the original instantiator that calls dynamic_init can modify the module's path.
|
2149 |
*/
|
2150 |
// Find caller module.
|
2151 |
-
$id_slug_type_path_map = self::$_accounts->get_option( 'id_slug_type_path_map', array() );
|
2152 |
$this->_storage->plugin_main_file = (object) array(
|
2153 |
-
'path' => $
|
2154 |
);
|
2155 |
|
2156 |
-
return $this->get_absolute_path( $
|
2157 |
}
|
2158 |
|
2159 |
/**
|
@@ -2215,6 +2234,8 @@
|
|
2215 |
* @param number $module_id
|
2216 |
* @param string $slug
|
2217 |
*
|
|
|
|
|
2218 |
* @since 1.2.2
|
2219 |
*/
|
2220 |
private function store_id_slug_type_path_map( $module_id, $slug ) {
|
@@ -2236,20 +2257,52 @@
|
|
2236 |
$store_option = true;
|
2237 |
}
|
2238 |
|
2239 |
-
|
2240 |
-
|
2241 |
-
|
2242 |
-
|
2243 |
-
|
2244 |
-
|
2245 |
-
|
2246 |
-
|
2247 |
-
|
2248 |
-
|
2249 |
-
|
2250 |
-
|
2251 |
-
|
2252 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2253 |
|
2254 |
$id_slug_type_path_map[ $module_id ]['type'] = $caller_main_file_and_type->module_type;
|
2255 |
$id_slug_type_path_map[ $module_id ]['path'] = $caller_main_file_and_type->path;
|
@@ -2260,6 +2313,8 @@
|
|
2260 |
if ( $store_option ) {
|
2261 |
self::$_accounts->set_option( 'id_slug_type_path_map', $id_slug_type_path_map, true );
|
2262 |
}
|
|
|
|
|
2263 |
}
|
2264 |
|
2265 |
/**
|
@@ -2273,8 +2328,10 @@
|
|
2273 |
* add-ons are relying on loading the SDK from the parent module, and also allows themes including the
|
2274 |
* SDK an internal file instead of directly from functions.php.
|
2275 |
* @since 1.2.1.7 Knows how to handle cases when an add-on includes the parent module logic.
|
|
|
|
|
2276 |
*/
|
2277 |
-
private function get_caller_main_file_and_type() {
|
2278 |
self::require_plugin_essentials();
|
2279 |
|
2280 |
$all_plugins = fs_get_plugins( true );
|
@@ -2413,10 +2470,12 @@
|
|
2413 |
}
|
2414 |
}
|
2415 |
|
2416 |
-
|
2417 |
'module_type' => $module_type,
|
2418 |
'path' => $caller_file_candidate
|
2419 |
);
|
|
|
|
|
2420 |
}
|
2421 |
|
2422 |
#----------------------------------------------------------------------------------
|
@@ -2433,6 +2492,13 @@
|
|
2433 |
* @since 1.1.2
|
2434 |
*/
|
2435 |
function _add_deactivation_feedback_dialog_box() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2436 |
$subscription_cancellation_dialog_box_template_params = $this->apply_filters( 'show_deactivation_subscription_cancellation', true ) ?
|
2437 |
$this->_get_subscription_cancellation_dialog_box_template_params() :
|
2438 |
array();
|
@@ -2440,7 +2506,7 @@
|
|
2440 |
/**
|
2441 |
* @since 2.3.0 Developers can optionally hide the deactivation feedback form using the 'show_deactivation_feedback_form' filter.
|
2442 |
*/
|
2443 |
-
$show_deactivation_feedback_form =
|
2444 |
if ( $this->has_filter( 'show_deactivation_feedback_form' ) ) {
|
2445 |
$show_deactivation_feedback_form = $this->apply_filters( 'show_deactivation_feedback_form', true );
|
2446 |
} else if ( $this->is_addon() ) {
|
@@ -2545,7 +2611,7 @@
|
|
2545 |
$reason_temporary_deactivation = array(
|
2546 |
'id' => self::REASON_TEMPORARY_DEACTIVATION,
|
2547 |
'text' => sprintf(
|
2548 |
-
$this->get_text_inline( "It's a temporary %s
|
2549 |
strtolower( $this->is_plugin() ?
|
2550 |
$this->get_text_inline( 'Deactivation', 'deactivation' ) :
|
2551 |
$this->get_text_inline( 'Theme Switch', 'theme-switch' )
|
@@ -2710,6 +2776,14 @@
|
|
2710 |
|
2711 |
$this->_storage->store( 'uninstall_reason', $reason );
|
2712 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2713 |
/**
|
2714 |
* If the module type is "theme", trigger the uninstall event here (on theme deactivation) since themes do
|
2715 |
* not support uninstall hook.
|
@@ -2731,6 +2805,73 @@
|
|
2731 |
exit;
|
2732 |
}
|
2733 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2734 |
/**
|
2735 |
* @author Leo Fajardo (@leorw)
|
2736 |
* @since 2.1.4
|
@@ -2927,6 +3068,13 @@
|
|
2927 |
return self::instance( $addon_id );
|
2928 |
}
|
2929 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2930 |
#endregion ------------------------------------------------------------------
|
2931 |
|
2932 |
/**
|
@@ -3437,6 +3585,9 @@
|
|
3437 |
add_action( 'plugins_loaded', array( 'Freemius', '_load_textdomain' ), 1 );
|
3438 |
}
|
3439 |
|
|
|
|
|
|
|
3440 |
add_action( 'admin_footer', array( 'Freemius', '_enrich_ajax_url' ) );
|
3441 |
add_action( 'admin_footer', array( 'Freemius', '_open_support_forum_in_new_page' ) );
|
3442 |
|
@@ -3456,6 +3607,86 @@
|
|
3456 |
self::$_statics_loaded = true;
|
3457 |
}
|
3458 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3459 |
/**
|
3460 |
* @author Leo Fajardo (@leorw)
|
3461 |
*
|
@@ -3550,6 +3781,8 @@
|
|
3550 |
* @since 1.1.7.3
|
3551 |
*/
|
3552 |
static function _toggle_debug_mode() {
|
|
|
|
|
3553 |
if ( ! is_super_admin() ) {
|
3554 |
return;
|
3555 |
}
|
@@ -3571,10 +3804,19 @@
|
|
3571 |
* @since 1.2.1.6
|
3572 |
*/
|
3573 |
static function _get_debug_log() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3574 |
$logs = FS_Logger::load_db_logs(
|
3575 |
fs_request_get( 'filters', false, 'post' ),
|
3576 |
-
|
3577 |
-
|
3578 |
);
|
3579 |
|
3580 |
self::shoot_ajax_success( $logs );
|
@@ -3681,6 +3923,10 @@
|
|
3681 |
|
3682 |
switch_to_blog( $current_blog_id );
|
3683 |
}
|
|
|
|
|
|
|
|
|
3684 |
} else if ( fs_request_is_action( 'simulate_trial' ) ) {
|
3685 |
check_admin_referer( 'simulate_trial' );
|
3686 |
|
@@ -3729,55 +3975,69 @@
|
|
3729 |
}
|
3730 |
|
3731 |
/**
|
3732 |
-
* @author
|
3733 |
-
* @since
|
|
|
|
|
3734 |
*/
|
3735 |
-
static function
|
3736 |
self::$_static_logger->entrance();
|
3737 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3738 |
if ( ! is_multisite() ) {
|
3739 |
-
$
|
3740 |
-
|
|
|
|
|
|
|
|
|
|
|
3741 |
} else {
|
3742 |
$sites = self::get_sites();
|
3743 |
|
3744 |
-
$all_plugins_installs = array();
|
3745 |
-
$all_themes_installs = array();
|
3746 |
-
|
3747 |
foreach ( $sites as $site ) {
|
3748 |
$blog_id = self::get_site_blog_id( $site );
|
3749 |
|
3750 |
-
|
3751 |
-
|
3752 |
-
foreach ( $plugins_installs as $slug => $install ) {
|
3753 |
-
if ( ! isset( $all_plugins_installs[ $slug ] ) ) {
|
3754 |
-
$all_plugins_installs[ $slug ] = array();
|
3755 |
-
}
|
3756 |
|
3757 |
-
$install
|
3758 |
-
|
3759 |
-
|
3760 |
-
|
3761 |
|
3762 |
-
|
3763 |
|
3764 |
-
|
3765 |
-
if ( ! isset( $all_themes_installs[ $slug ] ) ) {
|
3766 |
-
$all_themes_installs[ $slug ] = array();
|
3767 |
}
|
3768 |
|
3769 |
-
$install->blog_id = $blog_id;
|
3770 |
-
|
3771 |
-
$all_themes_installs[ $slug ][] = $install;
|
3772 |
}
|
3773 |
}
|
3774 |
}
|
3775 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3776 |
$licenses_by_module_type = self::get_all_licenses_by_module_type();
|
3777 |
|
3778 |
$vars = array(
|
3779 |
-
'plugin_sites' => $
|
3780 |
-
'theme_sites' => $
|
3781 |
'users' => self::get_all_users(),
|
3782 |
'addons' => self::get_all_addons(),
|
3783 |
'account_addons' => self::get_all_account_addons(),
|
@@ -3809,6 +4069,10 @@
|
|
3809 |
function is_on() {
|
3810 |
self::$_static_logger->entrance();
|
3811 |
|
|
|
|
|
|
|
|
|
3812 |
if ( isset( $this->_is_on ) ) {
|
3813 |
return $this->_is_on;
|
3814 |
}
|
@@ -3897,18 +4161,24 @@
|
|
3897 |
|
3898 |
$is_update = $this->apply_filters( 'is_plugin_update', $this->is_plugin_update() );
|
3899 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3900 |
return $this->get_api_plugin_scope()->ping(
|
3901 |
$this->get_anonymous_id( $blog_id ),
|
3902 |
-
|
3903 |
-
'is_update' => json_encode( $is_update ),
|
3904 |
-
'version' => $version,
|
3905 |
-
'sdk' => $this->version,
|
3906 |
-
'is_admin' => json_encode( is_admin() ),
|
3907 |
-
'is_ajax' => json_encode( self::is_ajax() ),
|
3908 |
-
'is_cron' => json_encode( self::is_cron() ),
|
3909 |
-
'is_gdpr_test' => $is_gdpr_test,
|
3910 |
-
'is_http' => json_encode( WP_FS__IS_HTTP_REQUEST ),
|
3911 |
-
)
|
3912 |
);
|
3913 |
}
|
3914 |
|
@@ -4047,7 +4317,7 @@
|
|
4047 |
if ( empty( $unique_id ) || ! is_string( $unique_id ) ) {
|
4048 |
$key = fs_strip_url_protocol( get_site_url( $blog_id ) );
|
4049 |
|
4050 |
-
$secure_auth = SECURE_AUTH_KEY;
|
4051 |
if ( empty( $secure_auth ) ||
|
4052 |
false !== strpos( $secure_auth, ' ' ) ||
|
4053 |
'put your unique phrase here' === $secure_auth
|
@@ -4074,6 +4344,17 @@
|
|
4074 |
return $unique_id;
|
4075 |
}
|
4076 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4077 |
/**
|
4078 |
* @author Vova Feldman (@svovaf)
|
4079 |
* @since 1.1.7.4
|
@@ -4447,6 +4728,12 @@
|
|
4447 |
* @since 1.0.9
|
4448 |
*/
|
4449 |
function _email_about_firewall_issue() {
|
|
|
|
|
|
|
|
|
|
|
|
|
4450 |
$this->_admin_notices->remove_sticky( 'failed_connect_api' );
|
4451 |
|
4452 |
$pong = $this->ping();
|
@@ -4521,6 +4808,12 @@
|
|
4521 |
* @since 1.1.7.4
|
4522 |
*/
|
4523 |
function _retry_connectivity_test() {
|
|
|
|
|
|
|
|
|
|
|
|
|
4524 |
$this->_admin_notices->remove_sticky( 'failed_connect_api_first' );
|
4525 |
|
4526 |
$pong = $this->ping();
|
@@ -4884,10 +5177,8 @@
|
|
4884 |
* @since 1.1.7.3
|
4885 |
*
|
4886 |
*/
|
4887 |
-
if ( $this->is_registered() ) {
|
4888 |
-
|
4889 |
-
$this->schedule_sync_cron();
|
4890 |
-
}
|
4891 |
}
|
4892 |
|
4893 |
/**
|
@@ -4900,6 +5191,8 @@
|
|
4900 |
}
|
4901 |
|
4902 |
if ( $this->is_registered() ) {
|
|
|
|
|
4903 |
$this->hook_callback_to_install_sync();
|
4904 |
}
|
4905 |
|
@@ -4914,6 +5207,28 @@
|
|
4914 |
}
|
4915 |
|
4916 |
if ( $this->is_user_in_admin() ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4917 |
if ( $this->is_addon() ) {
|
4918 |
if ( ! $this->is_parent_plugin_installed() ) {
|
4919 |
$parent_name = $this->get_option( $plugin_info, 'parent_name', null );
|
@@ -5037,7 +5352,8 @@
|
|
5037 |
*/
|
5038 |
( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this->premium_plugin_basename() ) ) )
|
5039 |
) &&
|
5040 |
-
$this->has_release_on_freemius()
|
|
|
5041 |
) {
|
5042 |
FS_Plugin_Updater::instance( $this );
|
5043 |
}
|
@@ -5185,7 +5501,7 @@
|
|
5185 |
}
|
5186 |
|
5187 |
// Send update to FS.
|
5188 |
-
$result = $this->
|
5189 |
'is_disconnected' => true
|
5190 |
) );
|
5191 |
|
@@ -5334,7 +5650,7 @@
|
|
5334 |
return true;
|
5335 |
}
|
5336 |
|
5337 |
-
$result = $this->
|
5338 |
'is_disconnected' => false
|
5339 |
) );
|
5340 |
|
@@ -6914,6 +7230,24 @@
|
|
6914 |
return $this->is_cron_on( 'sync' );
|
6915 |
}
|
6916 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6917 |
/**
|
6918 |
* @author Vova Feldman (@svovaf)
|
6919 |
* @since 1.1.7.3
|
@@ -7092,6 +7426,10 @@
|
|
7092 |
* @param int|null $current_blog_id
|
7093 |
*/
|
7094 |
function _sync_install_cron_method( array $blog_ids, $current_blog_id = null ) {
|
|
|
|
|
|
|
|
|
7095 |
if ( $this->is_registered() ) {
|
7096 |
if ( 1 < count( $blog_ids ) ) {
|
7097 |
$this->sync_installs( array(), true );
|
@@ -7108,13 +7446,20 @@
|
|
7108 |
/**
|
7109 |
* Show a notice that activation is currently pending.
|
7110 |
*
|
|
|
|
|
7111 |
* @author Vova Feldman (@svovaf)
|
7112 |
* @since 1.0.7
|
7113 |
*
|
7114 |
* @param bool|string $email
|
7115 |
* @param bool $is_pending_trial Since 1.2.1.5
|
|
|
7116 |
*/
|
7117 |
-
function _add_pending_activation_notice(
|
|
|
|
|
|
|
|
|
7118 |
if ( ! is_string( $email ) ) {
|
7119 |
$current_user = self::_get_current_wp_user();
|
7120 |
$email = $current_user->user_email;
|
@@ -7170,6 +7515,20 @@
|
|
7170 |
/**
|
7171 |
* Don't redirect if activating multiple plugins at once (bulk activation).
|
7172 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7173 |
} else if ( ! $is_migration ) {
|
7174 |
$this->_redirect_on_activation_hook();
|
7175 |
return;
|
@@ -7356,8 +7715,6 @@
|
|
7356 |
|
7357 |
fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
|
7358 |
fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
|
7359 |
-
|
7360 |
-
fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
|
7361 |
}
|
7362 |
|
7363 |
/**
|
@@ -7393,14 +7750,14 @@
|
|
7393 |
<?php
|
7394 |
echo $this->apply_filters( 'optin_pointer_execute', "
|
7395 |
|
7396 |
-
|
7397 |
|
7398 |
-
|
7399 |
-
|
7400 |
-
|
7401 |
-
|
7402 |
|
7403 |
-
|
7404 |
}
|
7405 |
}
|
7406 |
});
|
@@ -7448,7 +7805,7 @@
|
|
7448 |
}
|
7449 |
|
7450 |
/* Events
|
7451 |
-
|
7452 |
/**
|
7453 |
* Delete site install from Database.
|
7454 |
*
|
@@ -7780,7 +8137,9 @@
|
|
7780 |
$plugin_version = $this->_storage->is_anonymous_ms['version'];
|
7781 |
$network = true;
|
7782 |
} else {
|
7783 |
-
$plugin_version = $this->_storage->is_anonymous
|
|
|
|
|
7784 |
$network = false;
|
7785 |
}
|
7786 |
|
@@ -7928,7 +8287,7 @@
|
|
7928 |
);
|
7929 |
} else {
|
7930 |
// Activate the license.
|
7931 |
-
$install = $this->
|
7932 |
'/',
|
7933 |
'put',
|
7934 |
array( 'license_key' => $this->apply_filters( 'license_key', $license->secret_key ) )
|
@@ -8603,9 +8962,17 @@
|
|
8603 |
* @uses Freemius::is_network_anonymous() to check if the super-admin network skipped.
|
8604 |
* @uses Freemius::is_network_delegated_connection() to check if the super-admin network delegated the connection to the site admins.
|
8605 |
*/
|
8606 |
-
function _after_new_blog_callback( $blog_id, $user_id, $domain, $path, $network_id, $meta ) {
|
8607 |
$this->_logger->entrance();
|
8608 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8609 |
if ( $this->is_premium() &&
|
8610 |
$this->is_network_connected() &&
|
8611 |
is_object( $this->_license ) &&
|
@@ -8639,9 +9006,13 @@
|
|
8639 |
}
|
8640 |
}
|
8641 |
|
|
|
|
|
8642 |
$this->switch_to_blog( $current_blog_id );
|
8643 |
|
8644 |
-
if ( is_object( $
|
|
|
|
|
8645 |
// Already connected (with or without a license), so no need to continue.
|
8646 |
return;
|
8647 |
}
|
@@ -8674,6 +9045,8 @@
|
|
8674 |
false
|
8675 |
);
|
8676 |
|
|
|
|
|
8677 |
$this->switch_to_blog( $current_blog_id );
|
8678 |
} else {
|
8679 |
/**
|
@@ -8684,8 +9057,8 @@
|
|
8684 |
$has_delegated_site = false;
|
8685 |
|
8686 |
$sites = self::get_sites();
|
8687 |
-
foreach ( $sites as $
|
8688 |
-
$blog_id = self::get_site_blog_id( $
|
8689 |
|
8690 |
if ( $this->is_site_delegated_connection( $blog_id ) ) {
|
8691 |
$has_delegated_site = true;
|
@@ -8699,6 +9072,36 @@
|
|
8699 |
$this->skip_site_connection( $blog_id );
|
8700 |
}
|
8701 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8702 |
}
|
8703 |
|
8704 |
/**
|
@@ -9274,6 +9677,7 @@
|
|
9274 |
*
|
9275 |
* @param string[] string $override
|
9276 |
* @param bool $only_diff
|
|
|
9277 |
* @param bool $include_plugins Since 1.1.8 by default include plugin changes.
|
9278 |
* @param bool $include_themes Since 1.1.8 by default include plugin changes.
|
9279 |
*
|
@@ -9282,6 +9686,7 @@
|
|
9282 |
private function get_installs_data_for_api(
|
9283 |
array $override,
|
9284 |
$only_diff = false,
|
|
|
9285 |
$include_plugins = true,
|
9286 |
$include_themes = true
|
9287 |
) {
|
@@ -9319,6 +9724,9 @@
|
|
9319 |
|
9320 |
$sites = self::get_sites();
|
9321 |
|
|
|
|
|
|
|
9322 |
foreach ( $sites as $site ) {
|
9323 |
$blog_id = self::get_site_blog_id( $site );
|
9324 |
|
@@ -9337,10 +9745,34 @@
|
|
9337 |
|
9338 |
$install_data = $this->get_site_info( $site );
|
9339 |
|
|
|
|
|
|
|
|
|
9340 |
$uid = $install_data['uid'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9341 |
|
9342 |
unset( $install_data['blog_id'] );
|
9343 |
unset( $install_data['uid'] );
|
|
|
9344 |
|
9345 |
$install_data['is_disconnected'] = $install->is_disconnected;
|
9346 |
$install_data['is_active'] = $this->is_active_for_site( $blog_id );
|
@@ -9365,18 +9797,25 @@
|
|
9365 |
$is_common_diff_for_any_site = $is_common_diff_for_any_site || $is_common_diff;
|
9366 |
}
|
9367 |
|
9368 |
-
if ( ! empty( $install_data ) || $is_common_diff ) {
|
9369 |
// Add install ID and site unique ID.
|
9370 |
$install_data['id'] = $install->id;
|
9371 |
$install_data['uid'] = $uid;
|
|
|
9372 |
|
9373 |
-
$
|
|
|
9374 |
}
|
9375 |
}
|
9376 |
}
|
9377 |
|
9378 |
restore_current_blog();
|
9379 |
|
|
|
|
|
|
|
|
|
|
|
9380 |
if ( 0 < count( $installs_data ) && ( $is_common_diff_for_any_site || ! $only_diff ) ) {
|
9381 |
if ( ! $only_diff ) {
|
9382 |
$installs_data[] = $common;
|
@@ -9448,10 +9887,11 @@
|
|
9448 |
*
|
9449 |
* @param string[] string $override
|
9450 |
* @param bool $flush
|
|
|
9451 |
*
|
9452 |
* @return false|object|string
|
9453 |
*/
|
9454 |
-
private function send_install_update( $override = array(), $flush = false ) {
|
9455 |
$this->_logger->entrance();
|
9456 |
|
9457 |
$check_properties = $this->get_install_data_for_api( $override );
|
@@ -9477,10 +9917,9 @@
|
|
9477 |
}
|
9478 |
}
|
9479 |
|
9480 |
-
if (
|
9481 |
/**
|
9482 |
-
*
|
9483 |
-
* updates sent.
|
9484 |
*
|
9485 |
* @author Leo Fajardo (@leorw)
|
9486 |
* @since 2.2.3
|
@@ -9496,11 +9935,11 @@
|
|
9496 |
$this->set_keepalive_timestamp();
|
9497 |
|
9498 |
// Send updated values to FS.
|
9499 |
-
$site = $this->
|
9500 |
|
9501 |
-
if (
|
9502 |
/**
|
9503 |
-
*
|
9504 |
*
|
9505 |
* @author Leo Fajardo (@leorw)
|
9506 |
* @since 2.2.3
|
@@ -9522,37 +9961,29 @@
|
|
9522 |
*
|
9523 |
* @param string[] string $override
|
9524 |
* @param bool $flush
|
|
|
9525 |
*
|
9526 |
* @return false|object|string
|
9527 |
*/
|
9528 |
-
private function send_installs_update( $override = array(), $flush = false ) {
|
9529 |
$this->_logger->entrance();
|
9530 |
|
9531 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
9532 |
|
9533 |
-
$
|
9534 |
-
if ( empty( $installs_data ) ) {
|
9535 |
-
/**
|
9536 |
-
* Pass `true` to use the network level storage since the update is for many installs.
|
9537 |
-
*
|
9538 |
-
* @author Leo Fajardo (@leorw)
|
9539 |
-
* @since 2.2.3
|
9540 |
-
*/
|
9541 |
-
$keepalive_only_update = $this->should_send_keepalive_update( true );
|
9542 |
|
9543 |
-
|
9544 |
-
|
9545 |
-
* There are no updates to send including keepalive.
|
9546 |
-
*
|
9547 |
-
* @author Leo Fajardo (@leorw)
|
9548 |
-
* @since 2.2.3
|
9549 |
-
*/
|
9550 |
-
return false;
|
9551 |
-
}
|
9552 |
}
|
9553 |
|
9554 |
-
if (
|
9555 |
-
// Update last install sync timestamp
|
9556 |
$this->set_cron_execution_timestamp( 'install_sync' );
|
9557 |
}
|
9558 |
|
@@ -9567,8 +9998,8 @@
|
|
9567 |
// Send updated values to FS.
|
9568 |
$result = $this->get_api_user_scope()->call( "/plugins/{$this->_plugin->id}/installs.json", 'put', $installs_data );
|
9569 |
|
9570 |
-
if (
|
9571 |
-
// I successfully sent
|
9572 |
$this->clear_install_sync_cron();
|
9573 |
}
|
9574 |
|
@@ -9618,10 +10049,10 @@
|
|
9618 |
* @param string[] string $override
|
9619 |
* @param bool $flush
|
9620 |
*/
|
9621 |
-
|
9622 |
$this->_logger->entrance();
|
9623 |
|
9624 |
-
$site = $this->send_install_update( $override, $flush );
|
9625 |
|
9626 |
if ( false === $site ) {
|
9627 |
// No sync required.
|
@@ -9650,7 +10081,7 @@
|
|
9650 |
private function sync_installs( $override = array(), $flush = false ) {
|
9651 |
$this->_logger->entrance();
|
9652 |
|
9653 |
-
$result = $this->send_installs_update( $override, $flush );
|
9654 |
|
9655 |
if ( false === $result ) {
|
9656 |
// No sync required.
|
@@ -9903,7 +10334,17 @@
|
|
9903 |
return;
|
9904 |
}
|
9905 |
|
9906 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9907 |
|
9908 |
$fs->do_action( 'after_uninstall' );
|
9909 |
}
|
@@ -10299,7 +10740,7 @@
|
|
10299 |
#endregion ------------------------------------------------------------------
|
10300 |
|
10301 |
/* Account
|
10302 |
-
|
10303 |
|
10304 |
/**
|
10305 |
* Find plugin's slug by plugin's basename.
|
@@ -10363,9 +10804,14 @@
|
|
10363 |
*/
|
10364 |
private static function get_all_sites(
|
10365 |
$module_type = WP_FS__MODULE_TYPE_PLUGIN,
|
10366 |
-
$blog_id = null
|
|
|
10367 |
) {
|
10368 |
-
$sites = self::get_account_option(
|
|
|
|
|
|
|
|
|
10369 |
|
10370 |
if ( ! is_array( $sites ) ) {
|
10371 |
$sites = array();
|
@@ -10785,6 +11231,52 @@
|
|
10785 |
return $this->_site;
|
10786 |
}
|
10787 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10788 |
/**
|
10789 |
* Get plugin add-ons.
|
10790 |
*
|
@@ -12868,6 +13360,75 @@
|
|
12868 |
fs_require_template( 'forms/resend-key.php', $vars );
|
12869 |
}
|
12870 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12871 |
/**
|
12872 |
* Returns a collection of IDs of installs that are associated with the context product and its add-ons, and activated with foreign licenses.
|
12873 |
*
|
@@ -13075,10 +13636,15 @@
|
|
13075 |
( $is_network_admin && $this->is_network_active() && ! $this->is_network_delegated_connection() ) ||
|
13076 |
( ! $is_network_admin && ( ! $this->is_network_active() || $this->is_delegated_connection() ) )
|
13077 |
) {
|
13078 |
-
|
13079 |
-
|
13080 |
-
|
13081 |
-
|
|
|
|
|
|
|
|
|
|
|
13082 |
}
|
13083 |
}
|
13084 |
|
@@ -13250,7 +13816,7 @@
|
|
13250 |
self::shoot_ajax_failure();
|
13251 |
}
|
13252 |
|
13253 |
-
$site = $this->
|
13254 |
'',
|
13255 |
'put',
|
13256 |
array(
|
@@ -13863,7 +14429,7 @@
|
|
13863 |
|
13864 |
$addon_info = $fs->_get_addon_info( $addon_id, $is_installed );
|
13865 |
|
13866 |
-
if ( ! $addon_info['is_connected'] ) {
|
13867 |
// Add-on is not associated with an install entity.
|
13868 |
continue;
|
13869 |
}
|
@@ -14840,6 +15406,16 @@
|
|
14840 |
return ( defined( 'DOING_CRON' ) && DOING_CRON );
|
14841 |
}
|
14842 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14843 |
/**
|
14844 |
* Check if a real user is visiting the admin dashboard.
|
14845 |
*
|
@@ -14853,7 +15429,7 @@
|
|
14853 |
is_admin() &&
|
14854 |
! self::is_ajax() &&
|
14855 |
! self::is_cron() &&
|
14856 |
-
|
14857 |
);
|
14858 |
}
|
14859 |
|
@@ -15134,12 +15710,17 @@
|
|
15134 |
}
|
15135 |
|
15136 |
/**
|
|
|
|
|
15137 |
* @author Leo Fajardo (@leorw)
|
15138 |
* @since 2.0.0
|
15139 |
*
|
|
|
|
|
|
|
15140 |
* @return array Active & public sites collection.
|
15141 |
*/
|
15142 |
-
static function get_sites() {
|
15143 |
if ( ! is_multisite() ) {
|
15144 |
return array();
|
15145 |
}
|
@@ -15161,6 +15742,8 @@
|
|
15161 |
'mature' => 0,
|
15162 |
'spam' => 0,
|
15163 |
'deleted' => 0,
|
|
|
|
|
15164 |
);
|
15165 |
|
15166 |
if ( function_exists( 'get_sites' ) ) {
|
@@ -15350,11 +15933,16 @@
|
|
15350 |
*
|
15351 |
* @param int $blog_id
|
15352 |
* @param FS_Site $install
|
|
|
15353 |
*
|
15354 |
* @return bool Since 2.3.1 returns if a switch was made.
|
15355 |
*/
|
15356 |
-
function switch_to_blog( $blog_id, FS_Site $install = null ) {
|
15357 |
-
if ( ! is_numeric( $blog_id )
|
|
|
|
|
|
|
|
|
15358 |
return false;
|
15359 |
}
|
15360 |
|
@@ -15418,7 +16006,7 @@
|
|
15418 |
unset( $this->_site_api );
|
15419 |
unset( $this->_user_api );
|
15420 |
|
15421 |
-
return
|
15422 |
}
|
15423 |
|
15424 |
/**
|
@@ -15715,6 +16303,10 @@
|
|
15715 |
}
|
15716 |
}
|
15717 |
|
|
|
|
|
|
|
|
|
15718 |
if ( $this->is_sync_cron_scheduled() &&
|
15719 |
$context_blog_id == $this->get_sync_cron_blog_id()
|
15720 |
) {
|
@@ -15748,6 +16340,10 @@
|
|
15748 |
|
15749 |
$this->update_multisite_data_after_site_deactivation( $context_blog_id );
|
15750 |
|
|
|
|
|
|
|
|
|
15751 |
$current_blog_id = get_current_blog_id();
|
15752 |
|
15753 |
$this->switch_to_blog( $context_blog_id );
|
@@ -15781,6 +16377,10 @@
|
|
15781 |
|
15782 |
$this->update_multisite_data_after_site_deactivation( $context_blog_id );
|
15783 |
|
|
|
|
|
|
|
|
|
15784 |
$current_blog_id = get_current_blog_id();
|
15785 |
|
15786 |
$this->switch_to_blog( $context_blog_id );
|
@@ -15798,6 +16398,20 @@
|
|
15798 |
$this->switch_to_blog( $current_blog_id );
|
15799 |
}
|
15800 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15801 |
/**
|
15802 |
* Executed after site re-activation.
|
15803 |
*
|
@@ -16044,7 +16658,7 @@
|
|
16044 |
}
|
16045 |
|
16046 |
/* Logger
|
16047 |
-
|
16048 |
/**
|
16049 |
* @param string $id
|
16050 |
* @param bool $prefix_slug
|
@@ -16069,7 +16683,7 @@
|
|
16069 |
}
|
16070 |
|
16071 |
/* Security
|
16072 |
-
|
16073 |
private static function _encrypt( $str ) {
|
16074 |
if ( is_null( $str ) ) {
|
16075 |
return null;
|
@@ -16289,20 +16903,6 @@
|
|
16289 |
) {
|
16290 |
// Load site.
|
16291 |
$this->_site = $site;
|
16292 |
-
|
16293 |
-
// Load plans.
|
16294 |
-
$this->_plans = $plans[ $this->_slug ];
|
16295 |
-
if ( ! is_array( $this->_plans ) || empty( $this->_plans ) ) {
|
16296 |
-
$this->_sync_plans();
|
16297 |
-
} else {
|
16298 |
-
for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
|
16299 |
-
if ( $this->_plans[ $i ] instanceof FS_Plugin_Plan ) {
|
16300 |
-
$this->_plans[ $i ] = self::decrypt_entity( $this->_plans[ $i ] );
|
16301 |
-
} else {
|
16302 |
-
unset( $this->_plans[ $i ] );
|
16303 |
-
}
|
16304 |
-
}
|
16305 |
-
}
|
16306 |
}
|
16307 |
|
16308 |
$user = null;
|
@@ -16331,7 +16931,30 @@
|
|
16331 |
/**
|
16332 |
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
|
16333 |
*/
|
16334 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16335 |
}
|
16336 |
|
16337 |
$this->_user = ( $user instanceof FS_User ) ?
|
@@ -16345,6 +16968,23 @@
|
|
16345 |
}
|
16346 |
|
16347 |
if ( is_object( $this->_site ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16348 |
$this->_license = $this->_get_license_by_id( $this->_site->license_id );
|
16349 |
|
16350 |
if ( $this->_site->version != $this->get_plugin_version() ) {
|
@@ -16363,6 +17003,13 @@
|
|
16363 |
if ( $this->is_theme() ) {
|
16364 |
$this->_register_account_hooks();
|
16365 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16366 |
}
|
16367 |
|
16368 |
/**
|
@@ -16574,6 +17221,10 @@
|
|
16574 |
);
|
16575 |
}
|
16576 |
|
|
|
|
|
|
|
|
|
16577 |
return array_merge( $params, $override_with );
|
16578 |
}
|
16579 |
|
@@ -16595,6 +17246,7 @@
|
|
16595 |
* @param bool $is_disconnected Whether or not to opt in without tracking.
|
16596 |
* @param null|bool $is_marketing_allowed
|
16597 |
* @param array $sites If network-level opt-in, an array of containing details of sites.
|
|
|
16598 |
*
|
16599 |
* @return string|object
|
16600 |
* @use WP_Error
|
@@ -16608,7 +17260,8 @@
|
|
16608 |
$trial_plan_id = false,
|
16609 |
$is_disconnected = false,
|
16610 |
$is_marketing_allowed = null,
|
16611 |
-
$sites = array()
|
|
|
16612 |
) {
|
16613 |
$this->_logger->entrance();
|
16614 |
|
@@ -16632,7 +17285,7 @@
|
|
16632 |
$fs_user,
|
16633 |
false,
|
16634 |
$trial_plan_id,
|
16635 |
-
|
16636 |
true,
|
16637 |
$sites
|
16638 |
);
|
@@ -16706,7 +17359,7 @@
|
|
16706 |
$request = array(
|
16707 |
'method' => 'POST',
|
16708 |
'body' => $params,
|
16709 |
-
'timeout' =>
|
16710 |
);
|
16711 |
|
16712 |
$url = $this->add_show_pending( WP_FS__ADDRESS . '/action/service/user/install/' );
|
@@ -16792,7 +17445,8 @@
|
|
16792 |
true ),
|
16793 |
false,
|
16794 |
$filtered_license_key,
|
16795 |
-
! empty( $params['trial_plan_id'] )
|
|
|
16796 |
);
|
16797 |
} else if ( isset( $decoded->install_secret_key ) ) {
|
16798 |
return $this->install_with_new_user(
|
@@ -17067,7 +17721,13 @@
|
|
17067 |
);
|
17068 |
}
|
17069 |
} else if ( fs_request_has( 'pending_activation' ) ) {
|
17070 |
-
$this->set_pending_confirmation(
|
|
|
|
|
|
|
|
|
|
|
|
|
17071 |
}
|
17072 |
}
|
17073 |
}
|
@@ -17162,7 +17822,7 @@
|
|
17162 |
$site->secret_key = $install_secret_key;
|
17163 |
|
17164 |
$this->_site = $site;
|
17165 |
-
$site_result = $this->get_api_site_scope()->get();
|
17166 |
$site = new FS_Site( $site_result );
|
17167 |
$this->_site = $site;
|
17168 |
|
@@ -17309,7 +17969,8 @@
|
|
17309 |
$email = false,
|
17310 |
$redirect = true,
|
17311 |
$license_key = false,
|
17312 |
-
$is_pending_trial = false
|
|
|
17313 |
) {
|
17314 |
if ( $this->_ignore_pending_mode ) {
|
17315 |
/**
|
@@ -17324,7 +17985,7 @@
|
|
17324 |
// Install must be activated via email since
|
17325 |
// user with the same email already exist.
|
17326 |
$this->_storage->is_pending_activation = true;
|
17327 |
-
$this->_add_pending_activation_notice( $email, $is_pending_trial );
|
17328 |
}
|
17329 |
|
17330 |
if ( ! empty( $license_key ) ) {
|
@@ -17387,7 +18048,7 @@
|
|
17387 |
*
|
17388 |
* @return object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install.
|
17389 |
*/
|
17390 |
-
|
17391 |
$license_key = false,
|
17392 |
$trial_plan_id = false,
|
17393 |
$sites = array(),
|
@@ -17770,9 +18431,6 @@
|
|
17770 |
$this->send_installs_update();
|
17771 |
}
|
17772 |
|
17773 |
-
// Switch install context back to the first install.
|
17774 |
-
$this->_site = $first_install;
|
17775 |
-
|
17776 |
$current_blog = get_current_blog_id();
|
17777 |
|
17778 |
foreach ( $blog_2_install_map as $blog_id => $install ) {
|
@@ -17781,7 +18439,12 @@
|
|
17781 |
$this->do_action( 'after_account_connection', $this->_user, $install );
|
17782 |
}
|
17783 |
|
17784 |
-
|
|
|
|
|
|
|
|
|
|
|
17785 |
|
17786 |
$this->do_action( 'after_network_account_connection', $this->_user, $blog_2_install_map );
|
17787 |
}
|
@@ -17885,6 +18548,10 @@
|
|
17885 |
// return;
|
17886 |
// }
|
17887 |
|
|
|
|
|
|
|
|
|
17888 |
/**
|
17889 |
* When running from a site admin with a network activated module and the connection
|
17890 |
* was NOT delegated and the user still haven't skipped or opted-in, then hide the
|
@@ -18839,7 +19506,7 @@
|
|
18839 |
*
|
18840 |
* @return string
|
18841 |
*/
|
18842 |
-
|
18843 |
$action = "fs_{$tag}";
|
18844 |
|
18845 |
if ( ! empty( $module_id ) ) {
|
@@ -19082,7 +19749,7 @@
|
|
19082 |
}
|
19083 |
|
19084 |
/* Account Page
|
19085 |
-
|
19086 |
/**
|
19087 |
* Update site information.
|
19088 |
*
|
@@ -19093,7 +19760,7 @@
|
|
19093 |
* @param null|int $network_level_or_blog_id Since 2.0.0
|
19094 |
* @param \FS_Site $site Since 2.0.0
|
19095 |
*/
|
19096 |
-
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null ) {
|
19097 |
$this->_logger->entrance();
|
19098 |
|
19099 |
if ( is_null( $site ) ) {
|
@@ -19108,9 +19775,12 @@
|
|
19108 |
|
19109 |
$site_clone = clone $site;
|
19110 |
|
19111 |
-
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
|
19112 |
|
19113 |
-
if (
|
|
|
|
|
|
|
19114 |
$this->sync_user_by_current_install( $site->user_id );
|
19115 |
|
19116 |
$prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
|
@@ -19135,7 +19805,26 @@
|
|
19135 |
|
19136 |
$sites[ $this->_slug ] = $site_clone;
|
19137 |
|
19138 |
-
$this->set_account_option(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19139 |
}
|
19140 |
|
19141 |
/**
|
@@ -20376,10 +21065,10 @@
|
|
20376 |
$this->switch_to_blog( $current_blog_id );
|
20377 |
}
|
20378 |
|
20379 |
-
$result = $this->send_install_update( array(), true );
|
20380 |
$is_valid = $this->is_api_result_entity( $result );
|
20381 |
} else {
|
20382 |
-
$result = $this->send_installs_update( array(), true );
|
20383 |
$is_valid = $this->is_api_result_object( $result, 'installs' );
|
20384 |
}
|
20385 |
|
@@ -20389,7 +21078,7 @@
|
|
20389 |
$this->switch_to_blog( $this->_storage->network_install_blog_id );
|
20390 |
}
|
20391 |
|
20392 |
-
// Show API
|
20393 |
if ( ! $background || $this->is_paying() ) {
|
20394 |
// Try to ping API to see if not blocked.
|
20395 |
if ( ! FS_Api::test() ) {
|
@@ -20399,25 +21088,49 @@
|
|
20399 |
* @author Vova Feldman (@svovaf)
|
20400 |
* @since 1.1.6 Only show message related to one of the Freemius powered plugins. Once it will be resolved it will fix the issue for all plugins anyways. There's no point to scare users with multiple error messages.
|
20401 |
*/
|
20402 |
-
$api = $this->get_api_site_scope();
|
20403 |
|
20404 |
if ( ! self::$_global_admin_notices->has_sticky( 'api_blocked' ) ) {
|
20405 |
-
|
20406 |
-
|
20407 |
-
|
20408 |
-
|
20409 |
-
|
20410 |
-
|
20411 |
-
|
20412 |
-
|
20413 |
-
|
20414 |
-
|
20415 |
-
|
20416 |
-
|
20417 |
-
|
20418 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20419 |
}
|
20420 |
-
} else {
|
20421 |
// Authentication params are broken.
|
20422 |
$this->_admin_notices->add(
|
20423 |
$this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
@@ -20431,6 +21144,9 @@
|
|
20431 |
return;
|
20432 |
}
|
20433 |
|
|
|
|
|
|
|
20434 |
if ( $is_site_level_sync ) {
|
20435 |
$site = new FS_Site( $result );
|
20436 |
} else {
|
@@ -20622,7 +21338,7 @@
|
|
20622 |
}
|
20623 |
|
20624 |
if ( ! $this->is_addon() &&
|
20625 |
-
$this->_site->is_beta() !== $site->is_beta
|
20626 |
) {
|
20627 |
// Beta flag updated.
|
20628 |
$this->_site = $site;
|
@@ -21356,6 +22072,10 @@
|
|
21356 |
) {
|
21357 |
$this->_logger->entrance();
|
21358 |
|
|
|
|
|
|
|
|
|
21359 |
$switch_to_blog_id = null;
|
21360 |
|
21361 |
/**
|
@@ -21468,9 +22188,11 @@
|
|
21468 |
private function get_latest_download_api_url( $plugin_id = false ) {
|
21469 |
$this->_logger->entrance();
|
21470 |
|
21471 |
-
|
21472 |
$this->_get_latest_version_endpoint( $plugin_id, 'zip' )
|
21473 |
);
|
|
|
|
|
21474 |
}
|
21475 |
|
21476 |
/**
|
@@ -21665,7 +22387,6 @@
|
|
21665 |
private function update_email( $new_email ) {
|
21666 |
$this->_logger->entrance();
|
21667 |
|
21668 |
-
|
21669 |
$api = $this->get_api_user_scope();
|
21670 |
$user = $api->call( "?plugin_id={$this->_plugin->id}&fields=id,email,is_verified", 'put', array(
|
21671 |
'email' => $new_email,
|
@@ -21681,7 +22402,6 @@
|
|
21681 |
$this->_store_user();
|
21682 |
} else {
|
21683 |
// handle different error cases.
|
21684 |
-
|
21685 |
}
|
21686 |
|
21687 |
return $user;
|
@@ -21757,15 +22477,32 @@
|
|
21757 |
* @uses FS_Api
|
21758 |
*
|
21759 |
* @param string $candidate_email
|
|
|
21760 |
*
|
21761 |
* @return bool Is ownership change successfully initiated.
|
21762 |
*/
|
21763 |
-
private function init_change_owner( $candidate_email ) {
|
21764 |
$this->_logger->entrance();
|
21765 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21766 |
$api = $this->get_api_site_scope();
|
21767 |
$result = $api->call( "/users/{$this->_user->id}.json", 'put', array(
|
21768 |
'email' => $candidate_email,
|
|
|
|
|
21769 |
'after_confirm_url' => $this->_get_admin_page_url(
|
21770 |
'account',
|
21771 |
array( 'fs_action' => 'change_owner' )
|
@@ -21787,28 +22524,113 @@
|
|
21787 |
private function complete_change_owner() {
|
21788 |
$this->_logger->entrance();
|
21789 |
|
21790 |
-
$
|
21791 |
-
|
21792 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21793 |
|
21794 |
-
$user
|
21795 |
-
$user->id
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21796 |
|
21797 |
// Validate install's user and given user.
|
21798 |
if ( $user->id != $this->_site->user_id ) {
|
|
|
|
|
21799 |
return false;
|
21800 |
}
|
21801 |
|
21802 |
-
$
|
21803 |
-
$user->secret_key = fs_request_get( 'user_secret_key' );
|
21804 |
|
21805 |
// Fetch new user information.
|
21806 |
-
$this->_user = $user;
|
21807 |
$user_result = $this->get_api_user_scope( true )->get();
|
21808 |
$user = new FS_User( $user_result );
|
21809 |
$this->_user = $user;
|
21810 |
|
21811 |
-
$this->_set_account( $user, $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21812 |
|
21813 |
return true;
|
21814 |
}
|
@@ -22220,10 +23042,15 @@
|
|
22220 |
$state = fs_request_get( 'state', 'init' );
|
22221 |
switch ( $state ) {
|
22222 |
case 'init':
|
22223 |
-
$candidate_email = fs_request_get( 'candidate_email'
|
|
|
22224 |
|
22225 |
-
if ( $this->init_change_owner( $candidate_email ) ) {
|
22226 |
-
|
|
|
|
|
|
|
|
|
22227 |
}
|
22228 |
break;
|
22229 |
case 'owner_confirmed':
|
@@ -22246,37 +23073,6 @@
|
|
22246 |
|
22247 |
return;
|
22248 |
|
22249 |
-
case 'update_email':
|
22250 |
-
check_admin_referer( 'update_email' );
|
22251 |
-
|
22252 |
-
$new_email = fs_request_get( 'fs_email_' . $this->get_unique_affix(), '' );
|
22253 |
-
$result = $this->update_email( $new_email );
|
22254 |
-
|
22255 |
-
if ( isset( $result->error ) ) {
|
22256 |
-
switch ( $result->error->code ) {
|
22257 |
-
case 'user_exist':
|
22258 |
-
$this->_admin_notices->add(
|
22259 |
-
$this->get_text_inline( 'Sorry, we could not complete the email update. Another user with the same email is already registered.', 'user-exist-message' ) . ' ' .
|
22260 |
-
sprintf( $this->get_text_inline( 'If you would like to give up the ownership of the %s\'s account to %s click the Change Ownership button.', 'user-exist-message_ownership' ), $this->_module_type, '<b>' . $new_email . '</b>' ) .
|
22261 |
-
sprintf(
|
22262 |
-
'<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s ➜</button></a>',
|
22263 |
-
$this->get_account_url( 'change_owner', array(
|
22264 |
-
'state' => 'init',
|
22265 |
-
'candidate_email' => $new_email
|
22266 |
-
) ),
|
22267 |
-
$this->get_text_inline( 'Change Ownership', 'change-ownership' )
|
22268 |
-
),
|
22269 |
-
$oops_text,
|
22270 |
-
'error'
|
22271 |
-
);
|
22272 |
-
break;
|
22273 |
-
}
|
22274 |
-
} else {
|
22275 |
-
$this->_admin_notices->add( $this->get_text_inline( 'Your email was successfully updated. You should receive an email with confirmation instructions in few moments.', 'email-updated-message' ) );
|
22276 |
-
}
|
22277 |
-
|
22278 |
-
return;
|
22279 |
-
|
22280 |
case 'update_user_name':
|
22281 |
check_admin_referer( 'update_user_name' );
|
22282 |
|
@@ -22539,7 +23335,7 @@
|
|
22539 |
}
|
22540 |
|
22541 |
/* Pricing & Upgrade
|
22542 |
-
|
22543 |
/**
|
22544 |
* Render pricing page.
|
22545 |
*
|
@@ -22698,17 +23494,17 @@
|
|
22698 |
}
|
22699 |
|
22700 |
/* CSS & JavaScript
|
22701 |
-
|
22702 |
/* function _enqueue_script($handle, $src) {
|
22703 |
-
|
22704 |
|
22705 |
-
|
22706 |
|
22707 |
-
|
22708 |
-
|
22709 |
|
22710 |
/* SDK
|
22711 |
-
|
22712 |
private $_user_api;
|
22713 |
|
22714 |
/**
|
@@ -22720,7 +23516,7 @@
|
|
22720 |
*
|
22721 |
* @return FS_Api
|
22722 |
*/
|
22723 |
-
|
22724 |
if ( ! isset( $this->_user_api ) || $flush ) {
|
22725 |
$this->_user_api = $this->get_api_user_scope_by_user( $this->_user );
|
22726 |
}
|
@@ -22799,13 +23595,56 @@
|
|
22799 |
$this->_site->public_key,
|
22800 |
! $this->is_live(),
|
22801 |
$this->_site->secret_key,
|
22802 |
-
$this->get_sdk_version()
|
|
|
22803 |
);
|
22804 |
}
|
22805 |
|
22806 |
return $this->_site_api;
|
22807 |
}
|
22808 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22809 |
private $_plugin_api;
|
22810 |
|
22811 |
/**
|
@@ -23241,7 +24080,7 @@
|
|
23241 |
}
|
23242 |
|
23243 |
/* Action Links
|
23244 |
-
|
23245 |
private $_action_links_hooked = false;
|
23246 |
private $_action_links = array();
|
23247 |
|
@@ -23428,10 +24267,13 @@
|
|
23428 |
|
23429 |
if (
|
23430 |
$this->is_addon() &&
|
23431 |
-
! $this->is_only_premium()
|
23432 |
-
$this->_parent->is_anonymous()
|
23433 |
) {
|
23434 |
-
|
|
|
|
|
|
|
|
|
23435 |
}
|
23436 |
|
23437 |
if ( fs_is_network_admin() ) {
|
408 |
* @param bool $is_init Since 1.2.1 Is initiation sequence.
|
409 |
*/
|
410 |
private function __construct( $module_id, $slug = false, $is_init = false ) {
|
411 |
+
$main_file = false;
|
412 |
+
|
413 |
if ( $is_init && is_numeric( $module_id ) && is_string( $slug ) ) {
|
414 |
+
$main_file = $this->store_id_slug_type_path_map( $module_id, $slug );
|
415 |
}
|
416 |
|
417 |
$this->_module_id = $module_id;
|
426 |
|
427 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $this->get_unique_affix(), WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
428 |
|
429 |
+
$this->_plugin_main_file_path = $this->_find_caller_plugin_file( $is_init, $main_file );
|
430 |
$this->_plugin_dir_path = plugin_dir_path( $this->_plugin_main_file_path );
|
431 |
$this->_plugin_basename = $this->get_plugin_basename();
|
432 |
$this->_free_plugin_basename = str_replace( '-premium/', '/', $this->_plugin_basename );
|
521 |
* @author Leo Fajardo (@leorw)
|
522 |
* @since 1.2.2
|
523 |
*/
|
524 |
+
( is_object( $this->_plugin ) && isset( $this->_plugin->title ) ?
|
525 |
+
$this->_plugin->title :
|
526 |
+
$this->get_plugin_name()
|
527 |
+
),
|
528 |
$this->get_unique_affix()
|
529 |
);
|
530 |
|
1646 |
}
|
1647 |
|
1648 |
if ( $this->is_plugin() ) {
|
1649 |
+
if ( version_compare( $GLOBALS['wp_version'], '5.1', '<' ) ) {
|
1650 |
add_action( 'wpmu_new_blog', array( $this, '_after_new_blog_callback' ), 10, 6 );
|
1651 |
+
} else {
|
1652 |
+
add_action( 'wp_initialize_site', array( $this, '_after_wp_initialize_site_callback' ), 11, 2 );
|
1653 |
}
|
1654 |
|
1655 |
register_deactivation_hook( $this->_plugin_main_file_path, array( &$this, '_deactivate_plugin_hook' ) );
|
1659 |
add_action( 'deactivate_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1660 |
add_action( 'archive_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1661 |
add_action( 'make_spam_blog', array( &$this, '_after_site_deactivated_callback' ) );
|
1662 |
+
|
1663 |
+
if ( version_compare( $GLOBALS['wp_version'], '5.1', '<' ) ) {
|
1664 |
+
add_action( 'deleted_blog', array( $this, '_after_site_deleted_callback' ), 10, 2 );
|
1665 |
+
} else {
|
1666 |
+
add_action( 'wp_delete_site', array( $this, '_after_wpsite_deleted_callback' ) );
|
1667 |
+
}
|
1668 |
|
1669 |
add_action( 'activate_blog', array( &$this, '_after_site_reactivated_callback' ) );
|
1670 |
add_action( 'unarchive_blog', array( &$this, '_after_site_reactivated_callback' ) );
|
1689 |
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
|
1690 |
add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
|
1691 |
add_action( 'admin_init', array( &$this, '_add_user_change_option' ) );
|
1692 |
+
add_action( 'admin_init', array( &$this, '_add_email_address_update_option' ) );
|
1693 |
|
1694 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1695 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
2107 |
/**
|
2108 |
* Leverage backtrace to find caller plugin file path.
|
2109 |
*
|
2110 |
+
* @param bool $is_init Is initiation sequence.
|
2111 |
+
* @param string $main_file Since 2.5.0 expects the module's main file path to potentially purge the cached path.
|
|
|
|
|
2112 |
*
|
2113 |
* @return string
|
2114 |
+
* @since 1.0.6
|
2115 |
+
*
|
2116 |
+
* @author Vova Feldman (@svovaf)
|
2117 |
*/
|
2118 |
+
private function _find_caller_plugin_file( $is_init = false, $main_file = '' ) {
|
2119 |
// Try to load the cached value of the file path.
|
2120 |
if ( isset( $this->_storage->plugin_main_file ) ) {
|
2121 |
$plugin_main_file = $this->_storage->plugin_main_file;
|
2122 |
if ( ! empty( $plugin_main_file->path ) ) {
|
2123 |
$absolute_path = $this->get_absolute_path( $plugin_main_file->path );
|
2124 |
if ( file_exists( $absolute_path ) ) {
|
2125 |
+
if ( $is_init && $absolute_path !== $this->get_absolute_path( $main_file ) ) {
|
2126 |
+
// Update cached path if not matching the actual path.
|
2127 |
+
$plugin_main_file->path = $main_file;
|
2128 |
+
$this->_storage->plugin_main_file = $plugin_main_file;
|
2129 |
+
}
|
2130 |
+
|
2131 |
return $absolute_path;
|
2132 |
}
|
2133 |
}
|
2168 |
* Only the original instantiator that calls dynamic_init can modify the module's path.
|
2169 |
*/
|
2170 |
// Find caller module.
|
|
|
2171 |
$this->_storage->plugin_main_file = (object) array(
|
2172 |
+
'path' => $main_file,
|
2173 |
);
|
2174 |
|
2175 |
+
return $this->get_absolute_path( $main_file );
|
2176 |
}
|
2177 |
|
2178 |
/**
|
2234 |
* @param number $module_id
|
2235 |
* @param string $slug
|
2236 |
*
|
2237 |
+
* @return string Since 2.5.0 return the module's main file path.
|
2238 |
+
*
|
2239 |
* @since 1.2.2
|
2240 |
*/
|
2241 |
private function store_id_slug_type_path_map( $module_id, $slug ) {
|
2257 |
$store_option = true;
|
2258 |
}
|
2259 |
|
2260 |
+
$find_caller = empty( $id_slug_type_path_map[ $module_id ]['path'] );
|
2261 |
+
|
2262 |
+
if ( ! $find_caller ) {
|
2263 |
+
/**
|
2264 |
+
* This verification is for cases when suddenly the same module
|
2265 |
+
* is installed but with a different folder name.
|
2266 |
+
*
|
2267 |
+
* @author Vova Feldman (@svovaf)
|
2268 |
+
* @since 1.2.3
|
2269 |
+
*/
|
2270 |
+
$find_caller = ! file_exists( $this->get_absolute_path(
|
2271 |
+
$id_slug_type_path_map[ $module_id ]['path'],
|
2272 |
+
$id_slug_type_path_map[ $module_id ]['type']
|
2273 |
+
) );
|
2274 |
+
}
|
2275 |
+
|
2276 |
+
foreach ( $id_slug_type_path_map as $id => $data ) {
|
2277 |
+
if ( empty( $id ) ) {
|
2278 |
+
// Remove maps with empty module ID.
|
2279 |
+
unset( $id_slug_type_path_map[ $id ] );
|
2280 |
+
$store_option = true;
|
2281 |
+
continue;
|
2282 |
+
}
|
2283 |
+
|
2284 |
+
/**
|
2285 |
+
* If the module's main file path is identical to the main file path of another module then it means that the cached path of the current module or the other one with the same path is wrong, and therefore, we need to recalculate those paths.
|
2286 |
+
*
|
2287 |
+
* @author Vova Feldman (@svovaf)
|
2288 |
+
* @since 2.5.0
|
2289 |
+
*/
|
2290 |
+
if ( ! $find_caller ) {
|
2291 |
+
if ( $id == $module_id ) {
|
2292 |
+
continue;
|
2293 |
+
}
|
2294 |
+
|
2295 |
+
if (
|
2296 |
+
isset( $data['path'] ) &&
|
2297 |
+
$data['path'] === $id_slug_type_path_map[ $module_id ]['path']
|
2298 |
+
) {
|
2299 |
+
$find_caller = true;
|
2300 |
+
}
|
2301 |
+
}
|
2302 |
+
}
|
2303 |
+
|
2304 |
+
if ( $find_caller ) {
|
2305 |
+
$caller_main_file_and_type = $this->get_caller_main_file_and_type( $module_id );
|
2306 |
|
2307 |
$id_slug_type_path_map[ $module_id ]['type'] = $caller_main_file_and_type->module_type;
|
2308 |
$id_slug_type_path_map[ $module_id ]['path'] = $caller_main_file_and_type->path;
|
2313 |
if ( $store_option ) {
|
2314 |
self::$_accounts->set_option( 'id_slug_type_path_map', $id_slug_type_path_map, true );
|
2315 |
}
|
2316 |
+
|
2317 |
+
return $id_slug_type_path_map[ $module_id ]['path'];
|
2318 |
}
|
2319 |
|
2320 |
/**
|
2328 |
* add-ons are relying on loading the SDK from the parent module, and also allows themes including the
|
2329 |
* SDK an internal file instead of directly from functions.php.
|
2330 |
* @since 1.2.1.7 Knows how to handle cases when an add-on includes the parent module logic.
|
2331 |
+
*
|
2332 |
+
* @param number $module_id @since 2.5.0
|
2333 |
*/
|
2334 |
+
private function get_caller_main_file_and_type( $module_id ) {
|
2335 |
self::require_plugin_essentials();
|
2336 |
|
2337 |
$all_plugins = fs_get_plugins( true );
|
2470 |
}
|
2471 |
}
|
2472 |
|
2473 |
+
$caller_main_file_and_type = (object) array(
|
2474 |
'module_type' => $module_type,
|
2475 |
'path' => $caller_file_candidate
|
2476 |
);
|
2477 |
+
|
2478 |
+
return apply_filters( "fs_{$module_id}_caller_main_file_and_type", $caller_main_file_and_type );
|
2479 |
}
|
2480 |
|
2481 |
#----------------------------------------------------------------------------------
|
2492 |
* @since 1.1.2
|
2493 |
*/
|
2494 |
function _add_deactivation_feedback_dialog_box() {
|
2495 |
+
if (
|
2496 |
+
$this->is_clone() ||
|
2497 |
+
( is_object( $this->_site ) && ! $this->is_registered() )
|
2498 |
+
) {
|
2499 |
+
return;
|
2500 |
+
}
|
2501 |
+
|
2502 |
$subscription_cancellation_dialog_box_template_params = $this->apply_filters( 'show_deactivation_subscription_cancellation', true ) ?
|
2503 |
$this->_get_subscription_cancellation_dialog_box_template_params() :
|
2504 |
array();
|
2506 |
/**
|
2507 |
* @since 2.3.0 Developers can optionally hide the deactivation feedback form using the 'show_deactivation_feedback_form' filter.
|
2508 |
*/
|
2509 |
+
$show_deactivation_feedback_form = ! self::is_deactivation_snoozed();
|
2510 |
if ( $this->has_filter( 'show_deactivation_feedback_form' ) ) {
|
2511 |
$show_deactivation_feedback_form = $this->apply_filters( 'show_deactivation_feedback_form', true );
|
2512 |
} else if ( $this->is_addon() ) {
|
2611 |
$reason_temporary_deactivation = array(
|
2612 |
'id' => self::REASON_TEMPORARY_DEACTIVATION,
|
2613 |
'text' => sprintf(
|
2614 |
+
$this->get_text_inline( "It's a temporary %s - I'm troubleshooting an issue", 'reason-temporary-x' ),
|
2615 |
strtolower( $this->is_plugin() ?
|
2616 |
$this->get_text_inline( 'Deactivation', 'deactivation' ) :
|
2617 |
$this->get_text_inline( 'Theme Switch', 'theme-switch' )
|
2776 |
|
2777 |
$this->_storage->store( 'uninstall_reason', $reason );
|
2778 |
|
2779 |
+
if ( self::REASON_TEMPORARY_DEACTIVATION == $reason->id ) {
|
2780 |
+
$snooze_period = fs_request_get( 'snooze_period' );
|
2781 |
+
|
2782 |
+
if ( is_numeric( $snooze_period ) && 0 < $snooze_period ) {
|
2783 |
+
self::snooze_deactivation_form( (int) $snooze_period );
|
2784 |
+
}
|
2785 |
+
}
|
2786 |
+
|
2787 |
/**
|
2788 |
* If the module type is "theme", trigger the uninstall event here (on theme deactivation) since themes do
|
2789 |
* not support uninstall hook.
|
2805 |
exit;
|
2806 |
}
|
2807 |
|
2808 |
+
#--------------------------------------------------------------------------------
|
2809 |
+
#region Deactivation Feedback Snoozing
|
2810 |
+
#--------------------------------------------------------------------------------
|
2811 |
+
|
2812 |
+
/**
|
2813 |
+
* @author Vova Feldman (@svovaf)
|
2814 |
+
* @since 2.4.3
|
2815 |
+
*
|
2816 |
+
* @param int $period
|
2817 |
+
*
|
2818 |
+
* @return bool True if the value was set, false otherwise.
|
2819 |
+
*/
|
2820 |
+
private static function snooze_deactivation_form( $period ) {
|
2821 |
+
return ( 0 < $period && self::reset_deactivation_snoozing( $period ) );
|
2822 |
+
}
|
2823 |
+
|
2824 |
+
/**
|
2825 |
+
* Check if deactivation feedback form is snoozed.
|
2826 |
+
*
|
2827 |
+
* @author Vova Feldman (@svovaf)
|
2828 |
+
* @since 2.4.3
|
2829 |
+
*
|
2830 |
+
* @return bool
|
2831 |
+
*/
|
2832 |
+
static function is_deactivation_snoozed() {
|
2833 |
+
$is_snoozed = ( ! is_multisite() || fs_is_network_admin() ) ?
|
2834 |
+
get_transient( 'fs_snooze_period' ) :
|
2835 |
+
get_site_transient( 'fs_snooze_period' );
|
2836 |
+
|
2837 |
+
|
2838 |
+
return ( 'true' === $is_snoozed );
|
2839 |
+
}
|
2840 |
+
|
2841 |
+
/**
|
2842 |
+
* Reset deactivation snoozing. When `$period` is `0` will stop deactivation snoozing by deleting the transients. Otherwise, will set the transients for the selected period.
|
2843 |
+
*
|
2844 |
+
* @param int $period Period in seconds.
|
2845 |
+
*
|
2846 |
+
* @author Vova Feldman (@svovaf)
|
2847 |
+
* @since 2.4.3
|
2848 |
+
*/
|
2849 |
+
private static function reset_deactivation_snoozing( $period = 0 ) {
|
2850 |
+
$value = ( 0 === $period ) ? null : 'true';
|
2851 |
+
|
2852 |
+
if ( ! is_multisite() || fs_is_network_admin() ) {
|
2853 |
+
return set_transient( 'fs_snooze_period', $value, $period );
|
2854 |
+
} else {
|
2855 |
+
return set_site_transient( 'fs_snooze_period', $value, $period );
|
2856 |
+
}
|
2857 |
+
}
|
2858 |
+
|
2859 |
+
/**
|
2860 |
+
* The deactivation snooze expiration UNIX timestamp (in sec).
|
2861 |
+
*
|
2862 |
+
* @author Vova Feldman (@svovaf)
|
2863 |
+
* @since 2.4.3
|
2864 |
+
*
|
2865 |
+
* @return int
|
2866 |
+
*/
|
2867 |
+
static function deactivation_snooze_expires_at() {
|
2868 |
+
return ( ! is_multisite() || fs_is_network_admin() ) ?
|
2869 |
+
(int) get_option( '_transient_timeout_fs_snooze_period' ) :
|
2870 |
+
(int) get_site_option( '_site_transient_timeout_fs_snooze_period' );
|
2871 |
+
}
|
2872 |
+
|
2873 |
+
#endregion
|
2874 |
+
|
2875 |
/**
|
2876 |
* @author Leo Fajardo (@leorw)
|
2877 |
* @since 2.1.4
|
3068 |
return self::instance( $addon_id );
|
3069 |
}
|
3070 |
|
3071 |
+
/**
|
3072 |
+
* @return Freemius[]
|
3073 |
+
*/
|
3074 |
+
static function _get_all_instances() {
|
3075 |
+
return self::$_instances;
|
3076 |
+
}
|
3077 |
+
|
3078 |
#endregion ------------------------------------------------------------------
|
3079 |
|
3080 |
/**
|
3585 |
add_action( 'plugins_loaded', array( 'Freemius', '_load_textdomain' ), 1 );
|
3586 |
}
|
3587 |
|
3588 |
+
$clone_manager = FS_Clone_Manager::instance();
|
3589 |
+
add_action( 'init', array( $clone_manager, '_init' ) );
|
3590 |
+
|
3591 |
add_action( 'admin_footer', array( 'Freemius', '_enrich_ajax_url' ) );
|
3592 |
add_action( 'admin_footer', array( 'Freemius', '_open_support_forum_in_new_page' ) );
|
3593 |
|
3607 |
self::$_statics_loaded = true;
|
3608 |
}
|
3609 |
|
3610 |
+
#--------------------------------------------------------------------------------
|
3611 |
+
#region Clone
|
3612 |
+
#--------------------------------------------------------------------------------
|
3613 |
+
|
3614 |
+
/**
|
3615 |
+
* @author Leo Fajardo (@leorw)
|
3616 |
+
* @since 2.5.0
|
3617 |
+
*
|
3618 |
+
* @return bool
|
3619 |
+
*/
|
3620 |
+
private function is_unresolved_clone() {
|
3621 |
+
if ( ! $this->is_clone() ) {
|
3622 |
+
return false;
|
3623 |
+
}
|
3624 |
+
|
3625 |
+
return FS_Clone_Manager::instance()->has_temporary_duplicate_mode_expired();
|
3626 |
+
}
|
3627 |
+
|
3628 |
+
/**
|
3629 |
+
* @author Leo Fajardo (@leorw)
|
3630 |
+
* @since 2.5.0
|
3631 |
+
*/
|
3632 |
+
function is_clone() {
|
3633 |
+
if ( ! is_object( $this->_site ) ) {
|
3634 |
+
return false;
|
3635 |
+
}
|
3636 |
+
|
3637 |
+
return (
|
3638 |
+
fs_strip_url_protocol( trailingslashit( $this->_site->url ) ) !== fs_strip_url_protocol( trailingslashit( get_site_url() ) )
|
3639 |
+
);
|
3640 |
+
}
|
3641 |
+
|
3642 |
+
/**
|
3643 |
+
* @author Leo Fajardo (@leorw)
|
3644 |
+
* @since 2.5.0
|
3645 |
+
*
|
3646 |
+
* @param number $site_id
|
3647 |
+
*/
|
3648 |
+
function fetch_install_by_id( $site_id ) {
|
3649 |
+
return $this->get_current_or_network_user_api_scope()->get( "/installs/{$site_id}.json" );
|
3650 |
+
}
|
3651 |
+
|
3652 |
+
/**
|
3653 |
+
* @author Leo Fajardo (@leorw)
|
3654 |
+
* @since 2.5.0
|
3655 |
+
*
|
3656 |
+
* @return string|object|bool
|
3657 |
+
*/
|
3658 |
+
function _handle_long_term_duplicate() {
|
3659 |
+
$this->_logger->entrance();
|
3660 |
+
|
3661 |
+
$this->delete_current_install( false );
|
3662 |
+
|
3663 |
+
$license_key = false;
|
3664 |
+
|
3665 |
+
if (
|
3666 |
+
is_object( $this->_license ) &&
|
3667 |
+
! $this->_license->is_utilized(
|
3668 |
+
( WP_FS__IS_LOCALHOST_FOR_SERVER || FS_Site::is_localhost_by_address( get_site_url() ) )
|
3669 |
+
)
|
3670 |
+
) {
|
3671 |
+
$license_key = $this->_license->secret_key;
|
3672 |
+
}
|
3673 |
+
|
3674 |
+
return $this->opt_in(
|
3675 |
+
false,
|
3676 |
+
false,
|
3677 |
+
false,
|
3678 |
+
$license_key,
|
3679 |
+
false,
|
3680 |
+
false,
|
3681 |
+
false,
|
3682 |
+
null,
|
3683 |
+
array(),
|
3684 |
+
false
|
3685 |
+
);
|
3686 |
+
}
|
3687 |
+
|
3688 |
+
#endregion
|
3689 |
+
|
3690 |
/**
|
3691 |
* @author Leo Fajardo (@leorw)
|
3692 |
*
|
3781 |
* @since 1.1.7.3
|
3782 |
*/
|
3783 |
static function _toggle_debug_mode() {
|
3784 |
+
check_admin_referer( 'fs_toggle_debug_mode' );
|
3785 |
+
|
3786 |
if ( ! is_super_admin() ) {
|
3787 |
return;
|
3788 |
}
|
3804 |
* @since 1.2.1.6
|
3805 |
*/
|
3806 |
static function _get_debug_log() {
|
3807 |
+
check_admin_referer( 'fs_get_debug_log' );
|
3808 |
+
|
3809 |
+
if ( ! is_super_admin() ) {
|
3810 |
+
return;
|
3811 |
+
}
|
3812 |
+
|
3813 |
+
$limit = min( ! empty( $_POST['limit'] ) ? absint( $_POST['limit'] ) : 200, 200 );
|
3814 |
+
$offset = min( ! empty( $_POST['offset'] ) ? absint( $_POST['offset'] ) : 200, 200 );
|
3815 |
+
|
3816 |
$logs = FS_Logger::load_db_logs(
|
3817 |
fs_request_get( 'filters', false, 'post' ),
|
3818 |
+
$limit,
|
3819 |
+
$offset
|
3820 |
);
|
3821 |
|
3822 |
self::shoot_ajax_success( $logs );
|
3923 |
|
3924 |
switch_to_blog( $current_blog_id );
|
3925 |
}
|
3926 |
+
} else if ( fs_request_is_action( 'reset_deactivation_snoozing' ) ) {
|
3927 |
+
check_admin_referer( 'reset_deactivation_snoozing' );
|
3928 |
+
|
3929 |
+
self::reset_deactivation_snoozing();
|
3930 |
} else if ( fs_request_is_action( 'simulate_trial' ) ) {
|
3931 |
check_admin_referer( 'simulate_trial' );
|
3932 |
|
3975 |
}
|
3976 |
|
3977 |
/**
|
3978 |
+
* @author Leo Fajardo (@leorw)
|
3979 |
+
* @since 2.5.0
|
3980 |
+
*
|
3981 |
+
* @return array
|
3982 |
*/
|
3983 |
+
static function get_all_modules_sites() {
|
3984 |
self::$_static_logger->entrance();
|
3985 |
|
3986 |
+
$sites_by_type = array(
|
3987 |
+
WP_FS__MODULE_TYPE_PLUGIN => array(),
|
3988 |
+
WP_FS__MODULE_TYPE_THEME => array(),
|
3989 |
+
);
|
3990 |
+
|
3991 |
+
$module_types = array_keys( $sites_by_type );
|
3992 |
+
|
3993 |
if ( ! is_multisite() ) {
|
3994 |
+
foreach ( $module_types as $type ) {
|
3995 |
+
$sites_by_type[ $type ] = self::get_all_sites( $type );
|
3996 |
+
|
3997 |
+
foreach ( $sites_by_type[ $type ] as $slug => $install ) {
|
3998 |
+
$sites_by_type[ $type ][ $slug ] = array( $install );
|
3999 |
+
}
|
4000 |
+
}
|
4001 |
} else {
|
4002 |
$sites = self::get_sites();
|
4003 |
|
|
|
|
|
|
|
4004 |
foreach ( $sites as $site ) {
|
4005 |
$blog_id = self::get_site_blog_id( $site );
|
4006 |
|
4007 |
+
foreach ( $module_types as $type ) {
|
4008 |
+
$installs = self::get_all_sites( $type, $blog_id );
|
|
|
|
|
|
|
|
|
4009 |
|
4010 |
+
foreach ( $installs as $slug => $install ) {
|
4011 |
+
if ( ! isset( $sites_by_type[ $type ][ $slug ] ) ) {
|
4012 |
+
$sites_by_type[ $type ][ $slug ] = array();
|
4013 |
+
}
|
4014 |
|
4015 |
+
$install->blog_id = $blog_id;
|
4016 |
|
4017 |
+
$sites_by_type[ $type ][ $slug ][] = $install;
|
|
|
|
|
4018 |
}
|
4019 |
|
|
|
|
|
|
|
4020 |
}
|
4021 |
}
|
4022 |
}
|
4023 |
|
4024 |
+
return $sites_by_type;
|
4025 |
+
}
|
4026 |
+
|
4027 |
+
/**
|
4028 |
+
* @author Vova Feldman (@svovaf)
|
4029 |
+
* @since 1.0.8
|
4030 |
+
*/
|
4031 |
+
static function _debug_page_render() {
|
4032 |
+
self::$_static_logger->entrance();
|
4033 |
+
|
4034 |
+
$all_modules_sites = self::get_all_modules_sites();
|
4035 |
+
|
4036 |
$licenses_by_module_type = self::get_all_licenses_by_module_type();
|
4037 |
|
4038 |
$vars = array(
|
4039 |
+
'plugin_sites' => $all_modules_sites[ WP_FS__MODULE_TYPE_PLUGIN ],
|
4040 |
+
'theme_sites' => $all_modules_sites[ WP_FS__MODULE_TYPE_THEME ],
|
4041 |
'users' => self::get_all_users(),
|
4042 |
'addons' => self::get_all_addons(),
|
4043 |
'account_addons' => self::get_all_account_addons(),
|
4069 |
function is_on() {
|
4070 |
self::$_static_logger->entrance();
|
4071 |
|
4072 |
+
if ( is_object( $this->_site ) && ! $this->is_registered() ) {
|
4073 |
+
return false;
|
4074 |
+
}
|
4075 |
+
|
4076 |
if ( isset( $this->_is_on ) ) {
|
4077 |
return $this->_is_on;
|
4078 |
}
|
4161 |
|
4162 |
$is_update = $this->apply_filters( 'is_plugin_update', $this->is_plugin_update() );
|
4163 |
|
4164 |
+
$params = array(
|
4165 |
+
'is_update' => json_encode( $is_update ),
|
4166 |
+
'version' => $version,
|
4167 |
+
'sdk' => $this->version,
|
4168 |
+
'is_admin' => json_encode( is_admin() ),
|
4169 |
+
'is_ajax' => json_encode( self::is_ajax() ),
|
4170 |
+
'is_cron' => json_encode( self::is_cron() ),
|
4171 |
+
'is_gdpr_test' => $is_gdpr_test,
|
4172 |
+
'is_http' => json_encode( WP_FS__IS_HTTP_REQUEST ),
|
4173 |
+
);
|
4174 |
+
|
4175 |
+
if ( is_multisite() && function_exists( 'get_network' ) ) {
|
4176 |
+
$params['network_uid'] = $this->get_anonymous_network_id();
|
4177 |
+
}
|
4178 |
+
|
4179 |
return $this->get_api_plugin_scope()->ping(
|
4180 |
$this->get_anonymous_id( $blog_id ),
|
4181 |
+
$params
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4182 |
);
|
4183 |
}
|
4184 |
|
4317 |
if ( empty( $unique_id ) || ! is_string( $unique_id ) ) {
|
4318 |
$key = fs_strip_url_protocol( get_site_url( $blog_id ) );
|
4319 |
|
4320 |
+
$secure_auth = defined( 'SECURE_AUTH_KEY' ) ? SECURE_AUTH_KEY : '';
|
4321 |
if ( empty( $secure_auth ) ||
|
4322 |
false !== strpos( $secure_auth, ' ' ) ||
|
4323 |
'put your unique phrase here' === $secure_auth
|
4344 |
return $unique_id;
|
4345 |
}
|
4346 |
|
4347 |
+
/**
|
4348 |
+
* Returns anonymous network ID.
|
4349 |
+
*
|
4350 |
+
* @since 2.4.3
|
4351 |
+
*
|
4352 |
+
* @return string
|
4353 |
+
*/
|
4354 |
+
function get_anonymous_network_id() {
|
4355 |
+
return $this->get_anonymous_id( get_network()->site_id );
|
4356 |
+
}
|
4357 |
+
|
4358 |
/**
|
4359 |
* @author Vova Feldman (@svovaf)
|
4360 |
* @since 1.1.7.4
|
4728 |
* @since 1.0.9
|
4729 |
*/
|
4730 |
function _email_about_firewall_issue() {
|
4731 |
+
check_admin_referer( 'fs_resolve_firewall_issues' );
|
4732 |
+
|
4733 |
+
if ( ! current_user_can( is_multisite() ? 'manage_options' : 'activate_plugins' ) ) {
|
4734 |
+
return;
|
4735 |
+
}
|
4736 |
+
|
4737 |
$this->_admin_notices->remove_sticky( 'failed_connect_api' );
|
4738 |
|
4739 |
$pong = $this->ping();
|
4808 |
* @since 1.1.7.4
|
4809 |
*/
|
4810 |
function _retry_connectivity_test() {
|
4811 |
+
check_admin_referer( 'fs_retry_connectivity_test' );
|
4812 |
+
|
4813 |
+
if ( ! current_user_can( is_multisite() ? 'manage_options' : 'activate_plugins' ) ) {
|
4814 |
+
return;
|
4815 |
+
}
|
4816 |
+
|
4817 |
$this->_admin_notices->remove_sticky( 'failed_connect_api_first' );
|
4818 |
|
4819 |
$pong = $this->ping();
|
5177 |
* @since 1.1.7.3
|
5178 |
*
|
5179 |
*/
|
5180 |
+
if ( $this->is_registered() && $this->is_tracking_allowed() ) {
|
5181 |
+
$this->maybe_schedule_sync_cron();
|
|
|
|
|
5182 |
}
|
5183 |
|
5184 |
/**
|
5191 |
}
|
5192 |
|
5193 |
if ( $this->is_registered() ) {
|
5194 |
+
FS_Clone_Manager::instance()->maybe_resolve_new_subsite_install_automatically( $this );
|
5195 |
+
|
5196 |
$this->hook_callback_to_install_sync();
|
5197 |
}
|
5198 |
|
5207 |
}
|
5208 |
|
5209 |
if ( $this->is_user_in_admin() ) {
|
5210 |
+
if ( $this->is_registered() && fs_request_has( 'purchase_completed' ) ) {
|
5211 |
+
$this->_admin_notices->add_sticky(
|
5212 |
+
sprintf(
|
5213 |
+
/* translators: %s: License type (e.g. you have a professional license) */
|
5214 |
+
$this->get_text_inline( 'You have purchased a %s license.', 'you-have-x-license' ),
|
5215 |
+
fs_request_get( 'purchased_plan' )
|
5216 |
+
) .
|
5217 |
+
sprintf(
|
5218 |
+
$this->get_text_inline(" The %s's %sdownload link%s, license key, and installation instructions have been sent to %s. If you can't find the email after 5 min, please check your spam box.", 'post-purchase-email-sent-message' ),
|
5219 |
+
$this->get_module_label( true ),
|
5220 |
+
( FS_Plugin::is_valid_id( $this->get_bundle_id() ) ? "products' " : '' ),
|
5221 |
+
( FS_Plugin::is_valid_id( $this->get_bundle_id() ) ? 's' : '' ),
|
5222 |
+
sprintf(
|
5223 |
+
'<strong>%s</strong>',
|
5224 |
+
fs_request_get( 'purchase_email' )
|
5225 |
+
)
|
5226 |
+
),
|
5227 |
+
'plan_purchased',
|
5228 |
+
$this->get_text_x_inline( 'Yee-haw', 'interjection expressing joy or exuberance', 'yee-haw' ) . '!'
|
5229 |
+
);
|
5230 |
+
}
|
5231 |
+
|
5232 |
if ( $this->is_addon() ) {
|
5233 |
if ( ! $this->is_parent_plugin_installed() ) {
|
5234 |
$parent_name = $this->get_option( $plugin_info, 'parent_name', null );
|
5352 |
*/
|
5353 |
( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this->premium_plugin_basename() ) ) )
|
5354 |
) &&
|
5355 |
+
$this->has_release_on_freemius() &&
|
5356 |
+
( ! $this->is_unresolved_clone() )
|
5357 |
) {
|
5358 |
FS_Plugin_Updater::instance( $this );
|
5359 |
}
|
5501 |
}
|
5502 |
|
5503 |
// Send update to FS.
|
5504 |
+
$result = $this->api_site_call( '/?fields=is_disconnected', 'put', array(
|
5505 |
'is_disconnected' => true
|
5506 |
) );
|
5507 |
|
5650 |
return true;
|
5651 |
}
|
5652 |
|
5653 |
+
$result = $this->api_site_call( '/?is_disconnected', 'put', array(
|
5654 |
'is_disconnected' => false
|
5655 |
) );
|
5656 |
|
7230 |
return $this->is_cron_on( 'sync' );
|
7231 |
}
|
7232 |
|
7233 |
+
/**
|
7234 |
+
* @author Leo Fajardo (@leorw)
|
7235 |
+
* @since 2.5.0
|
7236 |
+
*/
|
7237 |
+
private function maybe_schedule_sync_cron() {
|
7238 |
+
$next_schedule = $this->next_sync_cron();
|
7239 |
+
|
7240 |
+
// The event is properly scheduled, so no need to reschedule it.
|
7241 |
+
if (
|
7242 |
+
is_numeric( $next_schedule ) &&
|
7243 |
+
$next_schedule > time()
|
7244 |
+
) {
|
7245 |
+
return;
|
7246 |
+
}
|
7247 |
+
|
7248 |
+
$this->schedule_sync_cron();
|
7249 |
+
}
|
7250 |
+
|
7251 |
/**
|
7252 |
* @author Vova Feldman (@svovaf)
|
7253 |
* @since 1.1.7.3
|
7426 |
* @param int|null $current_blog_id
|
7427 |
*/
|
7428 |
function _sync_install_cron_method( array $blog_ids, $current_blog_id = null ) {
|
7429 |
+
if ( $this->is_clone() ) {
|
7430 |
+
return;
|
7431 |
+
}
|
7432 |
+
|
7433 |
if ( $this->is_registered() ) {
|
7434 |
if ( 1 < count( $blog_ids ) ) {
|
7435 |
$this->sync_installs( array(), true );
|
7446 |
/**
|
7447 |
* Show a notice that activation is currently pending.
|
7448 |
*
|
7449 |
+
* @todo Add some sort of mechanism to allow users to update the email address they would like to opt-in with when $is_suspicious_email is true.
|
7450 |
+
*
|
7451 |
* @author Vova Feldman (@svovaf)
|
7452 |
* @since 1.0.7
|
7453 |
*
|
7454 |
* @param bool|string $email
|
7455 |
* @param bool $is_pending_trial Since 1.2.1.5
|
7456 |
+
* @param bool $is_suspicious_email Since 2.5.0 Set to true when there's an indication that email address the user opted in with is fake/dummy/placeholder.
|
7457 |
*/
|
7458 |
+
function _add_pending_activation_notice(
|
7459 |
+
$email = false,
|
7460 |
+
$is_pending_trial = false,
|
7461 |
+
$is_suspicious_email = false
|
7462 |
+
) {
|
7463 |
if ( ! is_string( $email ) ) {
|
7464 |
$current_user = self::_get_current_wp_user();
|
7465 |
$email = $current_user->user_email;
|
7515 |
/**
|
7516 |
* Don't redirect if activating multiple plugins at once (bulk activation).
|
7517 |
*/
|
7518 |
+
} else if (
|
7519 |
+
self::is_deactivation_snoozed() &&
|
7520 |
+
(
|
7521 |
+
// Either running the free code base.
|
7522 |
+
! $this->is_premium() ||
|
7523 |
+
// Or if has a free version.
|
7524 |
+
! $this->is_only_premium() ||
|
7525 |
+
// If premium only, don't redirect if license is activated.
|
7526 |
+
( $this->is_registered() && ! $this->can_use_premium_code() )
|
7527 |
+
)
|
7528 |
+
) {
|
7529 |
+
/**
|
7530 |
+
* Don't redirect if activating during the deactivation snooze period (aka troubleshooting), unless activating a paid product version that the admin didn't enter its license key yet.
|
7531 |
+
*/
|
7532 |
} else if ( ! $is_migration ) {
|
7533 |
$this->_redirect_on_activation_hook();
|
7534 |
return;
|
7715 |
|
7716 |
fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
|
7717 |
fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
|
|
|
|
|
7718 |
}
|
7719 |
|
7720 |
/**
|
7750 |
<?php
|
7751 |
echo $this->apply_filters( 'optin_pointer_execute', "
|
7752 |
|
7753 |
+
optin.pointer('open');
|
7754 |
|
7755 |
+
// Tag the opt-in pointer with custom class.
|
7756 |
+
$('.wp-pointer #fs_connect')
|
7757 |
+
.parents('.wp-pointer.wp-pointer-top')
|
7758 |
+
.addClass('fs-opt-in-pointer');
|
7759 |
|
7760 |
+
", 'element', 'optin' ) ?>
|
7761 |
}
|
7762 |
}
|
7763 |
});
|
7805 |
}
|
7806 |
|
7807 |
/* Events
|
7808 |
+
------------------------------------------------------------------------------------------------------------------*/
|
7809 |
/**
|
7810 |
* Delete site install from Database.
|
7811 |
*
|
8137 |
$plugin_version = $this->_storage->is_anonymous_ms['version'];
|
8138 |
$network = true;
|
8139 |
} else {
|
8140 |
+
$plugin_version = isset( $this->_storage->is_anonymous ) ?
|
8141 |
+
$this->_storage->is_anonymous['version'] :
|
8142 |
+
null;
|
8143 |
$network = false;
|
8144 |
}
|
8145 |
|
8287 |
);
|
8288 |
} else {
|
8289 |
// Activate the license.
|
8290 |
+
$install = $this->api_site_call(
|
8291 |
'/',
|
8292 |
'put',
|
8293 |
array( 'license_key' => $this->apply_filters( 'license_key', $license->secret_key ) )
|
8962 |
* @uses Freemius::is_network_anonymous() to check if the super-admin network skipped.
|
8963 |
* @uses Freemius::is_network_delegated_connection() to check if the super-admin network delegated the connection to the site admins.
|
8964 |
*/
|
8965 |
+
public function _after_new_blog_callback( $blog_id, $user_id, $domain, $path, $network_id, $meta ) {
|
8966 |
$this->_logger->entrance();
|
8967 |
|
8968 |
+
if ( ! $this->_is_network_active ) {
|
8969 |
+
FS_Clone_Manager::instance()->store_new_blog_install_info( $blog_id );
|
8970 |
+
return;
|
8971 |
+
}
|
8972 |
+
|
8973 |
+
$site = null;
|
8974 |
+
$new_blog_id = $blog_id;
|
8975 |
+
|
8976 |
if ( $this->is_premium() &&
|
8977 |
$this->is_network_connected() &&
|
8978 |
is_object( $this->_license ) &&
|
9006 |
}
|
9007 |
}
|
9008 |
|
9009 |
+
$site = $this->_site;
|
9010 |
+
|
9011 |
$this->switch_to_blog( $current_blog_id );
|
9012 |
|
9013 |
+
if ( is_object( $site ) ) {
|
9014 |
+
FS_Clone_Manager::instance()->store_new_blog_install_info( $blog_id, $site );
|
9015 |
+
|
9016 |
// Already connected (with or without a license), so no need to continue.
|
9017 |
return;
|
9018 |
}
|
9045 |
false
|
9046 |
);
|
9047 |
|
9048 |
+
$site = $this->_site;
|
9049 |
+
|
9050 |
$this->switch_to_blog( $current_blog_id );
|
9051 |
} else {
|
9052 |
/**
|
9057 |
$has_delegated_site = false;
|
9058 |
|
9059 |
$sites = self::get_sites();
|
9060 |
+
foreach ( $sites as $wp_site ) {
|
9061 |
+
$blog_id = self::get_site_blog_id( $wp_site );
|
9062 |
|
9063 |
if ( $this->is_site_delegated_connection( $blog_id ) ) {
|
9064 |
$has_delegated_site = true;
|
9072 |
$this->skip_site_connection( $blog_id );
|
9073 |
}
|
9074 |
}
|
9075 |
+
|
9076 |
+
/**
|
9077 |
+
* Store the new blog's information even if there's no install so that when a clone install is stored in the new blog's storage, we can try to resolve it automatically.
|
9078 |
+
*
|
9079 |
+
* @author Leo Fajardo (@leorw)
|
9080 |
+
* @since 2.5.0
|
9081 |
+
*/
|
9082 |
+
FS_Clone_Manager::instance()->store_new_blog_install_info( $new_blog_id, $site );
|
9083 |
+
}
|
9084 |
+
|
9085 |
+
/**
|
9086 |
+
* @author Vova Feldman (@svovaf)
|
9087 |
+
* @since 2.5.0
|
9088 |
+
*
|
9089 |
+
* @param \WP_Site $new_site
|
9090 |
+
* @param array $args
|
9091 |
+
*/
|
9092 |
+
public function _after_wp_initialize_site_callback( WP_Site $new_site, $args ) {
|
9093 |
+
$this->_logger->entrance();
|
9094 |
+
|
9095 |
+
$this->_after_new_blog_callback(
|
9096 |
+
$new_site->id,
|
9097 |
+
// Dummy user ID (not in use).
|
9098 |
+
0,
|
9099 |
+
$new_site->domain,
|
9100 |
+
$new_site->path,
|
9101 |
+
$new_site->network_id,
|
9102 |
+
// Dummy meta, not in use.
|
9103 |
+
array()
|
9104 |
+
);
|
9105 |
}
|
9106 |
|
9107 |
/**
|
9677 |
*
|
9678 |
* @param string[] string $override
|
9679 |
* @param bool $only_diff
|
9680 |
+
* @param bool $is_keepalive
|
9681 |
* @param bool $include_plugins Since 1.1.8 by default include plugin changes.
|
9682 |
* @param bool $include_themes Since 1.1.8 by default include plugin changes.
|
9683 |
*
|
9686 |
private function get_installs_data_for_api(
|
9687 |
array $override,
|
9688 |
$only_diff = false,
|
9689 |
+
$is_keepalive = false,
|
9690 |
$include_plugins = true,
|
9691 |
$include_themes = true
|
9692 |
) {
|
9724 |
|
9725 |
$sites = self::get_sites();
|
9726 |
|
9727 |
+
$subsite_data_by_install_id = array();
|
9728 |
+
$install_url_by_install_id = array();
|
9729 |
+
|
9730 |
foreach ( $sites as $site ) {
|
9731 |
$blog_id = self::get_site_blog_id( $site );
|
9732 |
|
9745 |
|
9746 |
$install_data = $this->get_site_info( $site );
|
9747 |
|
9748 |
+
if ( FS_Clone_Manager::instance()->is_temporary_duplicate_by_blog_id( $install_data['blog_id'] ) ) {
|
9749 |
+
continue;
|
9750 |
+
}
|
9751 |
+
|
9752 |
$uid = $install_data['uid'];
|
9753 |
+
$url = $install_data['url'];
|
9754 |
+
|
9755 |
+
if ( isset( $subsite_data_by_install_id[ $install->id ] ) ) {
|
9756 |
+
$clone_subsite_data = $subsite_data_by_install_id[ $install->id ];
|
9757 |
+
$clone_install_url = $install_url_by_install_id[ $install->id ];
|
9758 |
+
|
9759 |
+
if (
|
9760 |
+
/**
|
9761 |
+
* If we already have an install with the same URL as the subsite it's stored in, skip the current subsite. Otherwise, replace the existing install's data with the current subsite's install's data if the URLs match.
|
9762 |
+
*
|
9763 |
+
* @author Leo Fajardo (@leorw)
|
9764 |
+
* @since 2.5.0
|
9765 |
+
*/
|
9766 |
+
fs_strip_url_protocol( untrailingslashit( $clone_install_url ) ) === fs_strip_url_protocol( untrailingslashit( $clone_subsite_data['url'] ) ) ||
|
9767 |
+
fs_strip_url_protocol( untrailingslashit( $install->url ) ) !== fs_strip_url_protocol( untrailingslashit( $url ) )
|
9768 |
+
) {
|
9769 |
+
continue;
|
9770 |
+
}
|
9771 |
+
}
|
9772 |
|
9773 |
unset( $install_data['blog_id'] );
|
9774 |
unset( $install_data['uid'] );
|
9775 |
+
unset( $install_data['url'] );
|
9776 |
|
9777 |
$install_data['is_disconnected'] = $install->is_disconnected;
|
9778 |
$install_data['is_active'] = $this->is_active_for_site( $blog_id );
|
9797 |
$is_common_diff_for_any_site = $is_common_diff_for_any_site || $is_common_diff;
|
9798 |
}
|
9799 |
|
9800 |
+
if ( ! empty( $install_data ) || $is_common_diff || $is_keepalive ) {
|
9801 |
// Add install ID and site unique ID.
|
9802 |
$install_data['id'] = $install->id;
|
9803 |
$install_data['uid'] = $uid;
|
9804 |
+
$install_data['url'] = $url;
|
9805 |
|
9806 |
+
$subsite_data_by_install_id[ $install->id ] = $install_data;
|
9807 |
+
$install_url_by_install_id[ $install->id ] = $install->url;
|
9808 |
}
|
9809 |
}
|
9810 |
}
|
9811 |
|
9812 |
restore_current_blog();
|
9813 |
|
9814 |
+
$installs_data = array_merge(
|
9815 |
+
$installs_data,
|
9816 |
+
array_values( $subsite_data_by_install_id )
|
9817 |
+
);
|
9818 |
+
|
9819 |
if ( 0 < count( $installs_data ) && ( $is_common_diff_for_any_site || ! $only_diff ) ) {
|
9820 |
if ( ! $only_diff ) {
|
9821 |
$installs_data[] = $common;
|
9887 |
*
|
9888 |
* @param string[] string $override
|
9889 |
* @param bool $flush
|
9890 |
+
* @param bool $is_two_way_sync @since 2.5.0 If true and there's a successful API request, the install sync cron will be cleared.
|
9891 |
*
|
9892 |
* @return false|object|string
|
9893 |
*/
|
9894 |
+
private function send_install_update( $override = array(), $flush = false, $is_two_way_sync = false ) {
|
9895 |
$this->_logger->entrance();
|
9896 |
|
9897 |
$check_properties = $this->get_install_data_for_api( $override );
|
9917 |
}
|
9918 |
}
|
9919 |
|
9920 |
+
if ( $is_two_way_sync ) {
|
9921 |
/**
|
9922 |
+
* Update last install sync timestamp during a two-way sync call as we expect that updates are sent during this call.
|
|
|
9923 |
*
|
9924 |
* @author Leo Fajardo (@leorw)
|
9925 |
* @since 2.2.3
|
9935 |
$this->set_keepalive_timestamp();
|
9936 |
|
9937 |
// Send updated values to FS.
|
9938 |
+
$site = $this->api_site_call( '/', 'put', $params, true );
|
9939 |
|
9940 |
+
if ( $is_two_way_sync && $this->is_api_result_entity( $site ) ) {
|
9941 |
/**
|
9942 |
+
* Clear scheduled install sync after a two-way sync call.
|
9943 |
*
|
9944 |
* @author Leo Fajardo (@leorw)
|
9945 |
* @since 2.2.3
|
9961 |
*
|
9962 |
* @param string[] string $override
|
9963 |
* @param bool $flush
|
9964 |
+
* @param bool $is_two_way_sync @since 2.5.0 If true and there's a successful API request, the install sync cron will be cleared.
|
9965 |
*
|
9966 |
* @return false|object|string
|
9967 |
*/
|
9968 |
+
private function send_installs_update( $override = array(), $flush = false, $is_two_way_sync = false ) {
|
9969 |
$this->_logger->entrance();
|
9970 |
|
9971 |
+
/**
|
9972 |
+
* Pass `true` to use the network level storage since the update is for many installs.
|
9973 |
+
*
|
9974 |
+
* @author Leo Fajardo (@leorw)
|
9975 |
+
* @since 2.2.3
|
9976 |
+
*/
|
9977 |
+
$should_send_keepalive = $this->should_send_keepalive_update( true );
|
9978 |
|
9979 |
+
$installs_data = $this->get_installs_data_for_api( $override, ! $flush, $should_send_keepalive );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9980 |
|
9981 |
+
if ( empty( $installs_data ) ) {
|
9982 |
+
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9983 |
}
|
9984 |
|
9985 |
+
if ( $is_two_way_sync ) {
|
9986 |
+
// Update last install sync timestamp during a two-way sync call as we expect that updates are sent during this call.
|
9987 |
$this->set_cron_execution_timestamp( 'install_sync' );
|
9988 |
}
|
9989 |
|
9998 |
// Send updated values to FS.
|
9999 |
$result = $this->get_api_user_scope()->call( "/plugins/{$this->_plugin->id}/installs.json", 'put', $installs_data );
|
10000 |
|
10001 |
+
if ( $is_two_way_sync && $this->is_api_result_object( $result, 'installs' ) ) {
|
10002 |
+
// I successfully sent a two-way installs update, clear the scheduled install sync if it exists.
|
10003 |
$this->clear_install_sync_cron();
|
10004 |
}
|
10005 |
|
10049 |
* @param string[] string $override
|
10050 |
* @param bool $flush
|
10051 |
*/
|
10052 |
+
function sync_install( $override = array(), $flush = false ) {
|
10053 |
$this->_logger->entrance();
|
10054 |
|
10055 |
+
$site = $this->send_install_update( $override, $flush, true );
|
10056 |
|
10057 |
if ( false === $site ) {
|
10058 |
// No sync required.
|
10081 |
private function sync_installs( $override = array(), $flush = false ) {
|
10082 |
$this->_logger->entrance();
|
10083 |
|
10084 |
+
$result = $this->send_installs_update( $override, $flush, true );
|
10085 |
|
10086 |
if ( false === $result ) {
|
10087 |
// No sync required.
|
10334 |
return;
|
10335 |
}
|
10336 |
|
10337 |
+
if (
|
10338 |
+
! $fs->is_clone() &&
|
10339 |
+
/**
|
10340 |
+
* If there's a context install, run this method only when there's also a context user (e.g., when cloning a subsite of a multisite network into a single-site installation, it's possible for an install to be associated with a non-existing user entity; we want Freemius to be off in this case, while we are trying to recover the user).
|
10341 |
+
*
|
10342 |
+
* @author Leo Fajardo
|
10343 |
+
*/
|
10344 |
+
( ! is_object( $fs->_site ) || $fs->is_registered() )
|
10345 |
+
) {
|
10346 |
+
$fs->_uninstall_plugin_event();
|
10347 |
+
}
|
10348 |
|
10349 |
$fs->do_action( 'after_uninstall' );
|
10350 |
}
|
10740 |
#endregion ------------------------------------------------------------------
|
10741 |
|
10742 |
/* Account
|
10743 |
+
------------------------------------------------------------------------------------------------------------------*/
|
10744 |
|
10745 |
/**
|
10746 |
* Find plugin's slug by plugin's basename.
|
10804 |
*/
|
10805 |
private static function get_all_sites(
|
10806 |
$module_type = WP_FS__MODULE_TYPE_PLUGIN,
|
10807 |
+
$blog_id = null,
|
10808 |
+
$is_backup = false
|
10809 |
) {
|
10810 |
+
$sites = self::get_account_option(
|
10811 |
+
( $is_backup ? 'prev_' : '' ) . 'sites',
|
10812 |
+
$module_type,
|
10813 |
+
$blog_id
|
10814 |
+
);
|
10815 |
|
10816 |
if ( ! is_array( $sites ) ) {
|
10817 |
$sites = array();
|
11231 |
return $this->_site;
|
11232 |
}
|
11233 |
|
11234 |
+
/**
|
11235 |
+
* @author Leo Fajardo (@leorw)
|
11236 |
+
* @since 2.5.0
|
11237 |
+
*/
|
11238 |
+
function store_site( $site ) {
|
11239 |
+
$this->_site = $site;
|
11240 |
+
$this->_store_site( true );
|
11241 |
+
}
|
11242 |
+
|
11243 |
+
/**
|
11244 |
+
* Deletes the current install with an option to back it up in case restoration will be needed (e.g., if the automatic clone resolution attempt fails).
|
11245 |
+
*
|
11246 |
+
* @author Leo Fajardo (@leorw)
|
11247 |
+
* @since 2.5.0
|
11248 |
+
*/
|
11249 |
+
function delete_current_install( $back_up ) {
|
11250 |
+
// Back up and delete the unique ID.
|
11251 |
+
if ( $back_up ) {
|
11252 |
+
self::$_accounts->set_option( 'prev_unique_id', $this->get_anonymous_id() );
|
11253 |
+
}
|
11254 |
+
|
11255 |
+
self::$_accounts->set_option( 'unique_id', null );
|
11256 |
+
|
11257 |
+
if ( $back_up ) {
|
11258 |
+
// Back up the install before deleting it so that it can be restored later on if necessary (e.g., if the automatic clone resolution attempt fails).
|
11259 |
+
$this->back_up_site();
|
11260 |
+
}
|
11261 |
+
|
11262 |
+
$this->_delete_site();
|
11263 |
+
$this->_site = null;
|
11264 |
+
}
|
11265 |
+
|
11266 |
+
/**
|
11267 |
+
* @author Leo Fajardo (@leorw)
|
11268 |
+
* @since 2.5.0
|
11269 |
+
*/
|
11270 |
+
function restore_backup_site() {
|
11271 |
+
self::$_accounts->set_option(
|
11272 |
+
'unique_id',
|
11273 |
+
self::$_accounts->get_option( 'prev_unique_id' )
|
11274 |
+
);
|
11275 |
+
|
11276 |
+
$sites = self::get_all_sites( $this->_module_type, null, true );
|
11277 |
+
$this->store_site( clone $sites[ $this->_slug ] );
|
11278 |
+
}
|
11279 |
+
|
11280 |
/**
|
11281 |
* Get plugin add-ons.
|
11282 |
*
|
13360 |
fs_require_template( 'forms/resend-key.php', $vars );
|
13361 |
}
|
13362 |
|
13363 |
+
/**
|
13364 |
+
* Displays an email address update dialog box when the user clicks on the email address "Edit" button on the "Account" page.
|
13365 |
+
*
|
13366 |
+
* @author Leo Fajardo (@leorw)
|
13367 |
+
* @since 2.5.0
|
13368 |
+
*/
|
13369 |
+
function _add_email_address_update_dialog_box() {
|
13370 |
+
$vars = array( 'id' => $this->_module_id );
|
13371 |
+
|
13372 |
+
fs_require_template( 'forms/email-address-update.php', $vars );
|
13373 |
+
}
|
13374 |
+
|
13375 |
+
/**
|
13376 |
+
* @author Leo Fajardo (@leorw)
|
13377 |
+
* @since 2.5.0
|
13378 |
+
*/
|
13379 |
+
function _add_email_address_update_option() {
|
13380 |
+
if ( ! $this->should_handle_user_change() ) {
|
13381 |
+
return;
|
13382 |
+
}
|
13383 |
+
|
13384 |
+
// Add email address update AJAX handler.
|
13385 |
+
$this->add_ajax_action( 'update_email_address', array( &$this, '_email_address_update_ajax_handler' ) );
|
13386 |
+
}
|
13387 |
+
|
13388 |
+
/**
|
13389 |
+
* @author Leo Fajardo (@leorw)
|
13390 |
+
* @since 2.5.0
|
13391 |
+
*/
|
13392 |
+
function _email_address_update_ajax_handler() {
|
13393 |
+
$this->check_ajax_referer( 'update_email_address' );
|
13394 |
+
|
13395 |
+
$new_email_address = fs_request_get( 'email_address' );
|
13396 |
+
$transfer_type = fs_request_get( 'transfer_type' );
|
13397 |
+
|
13398 |
+
$result = $this->update_email( $new_email_address );
|
13399 |
+
|
13400 |
+
if ( ! FS_Api::is_api_error( $result ) ) {
|
13401 |
+
self::shoot_ajax_success();
|
13402 |
+
}
|
13403 |
+
|
13404 |
+
$error = '';
|
13405 |
+
|
13406 |
+
if ( FS_Api::is_api_error_object( $result ) ) {
|
13407 |
+
switch ( $result->error->code ) {
|
13408 |
+
case 'user_exist':
|
13409 |
+
case 'account_verification_required':
|
13410 |
+
$error = array(
|
13411 |
+
'code' => 'change_ownership',
|
13412 |
+
'url' => $this->get_account_url( 'change_owner', array(
|
13413 |
+
'state' => 'init',
|
13414 |
+
'candidate_email' => $new_email_address,
|
13415 |
+
'transfer_type' => $transfer_type,
|
13416 |
+
) ),
|
13417 |
+
);
|
13418 |
+
|
13419 |
+
break;
|
13420 |
+
}
|
13421 |
+
}
|
13422 |
+
|
13423 |
+
if ( empty( $error ) ) {
|
13424 |
+
$error = is_object( $result ) ?
|
13425 |
+
var_export( $result->error, true ) :
|
13426 |
+
$result;
|
13427 |
+
}
|
13428 |
+
|
13429 |
+
self::shoot_ajax_failure( $error );
|
13430 |
+
}
|
13431 |
+
|
13432 |
/**
|
13433 |
* Returns a collection of IDs of installs that are associated with the context product and its add-ons, and activated with foreign licenses.
|
13434 |
*
|
13636 |
( $is_network_admin && $this->is_network_active() && ! $this->is_network_delegated_connection() ) ||
|
13637 |
( ! $is_network_admin && ( ! $this->is_network_active() || $this->is_delegated_connection() ) )
|
13638 |
) {
|
13639 |
+
if (
|
13640 |
+
$this->is_premium() ||
|
13641 |
+
( $this->has_paid_plan() && ! $this->has_premium_version() )
|
13642 |
+
) {
|
13643 |
+
/**
|
13644 |
+
* @since 1.2.0 Add license action link only on plugins page.
|
13645 |
+
*/
|
13646 |
+
$this->_add_license_action_link();
|
13647 |
+
}
|
13648 |
}
|
13649 |
}
|
13650 |
|
13816 |
self::shoot_ajax_failure();
|
13817 |
}
|
13818 |
|
13819 |
+
$site = $this->api_site_call(
|
13820 |
'',
|
13821 |
'put',
|
13822 |
array(
|
14429 |
|
14430 |
$addon_info = $fs->_get_addon_info( $addon_id, $is_installed );
|
14431 |
|
14432 |
+
if ( ! isset( $addon_info['is_connected'] ) || ! $addon_info['is_connected'] ) {
|
14433 |
// Add-on is not associated with an install entity.
|
14434 |
continue;
|
14435 |
}
|
15406 |
return ( defined( 'DOING_CRON' ) && DOING_CRON );
|
15407 |
}
|
15408 |
|
15409 |
+
/**
|
15410 |
+
* @author Leo Fajardo (@leorw)
|
15411 |
+
* @since 2.5.0
|
15412 |
+
*
|
15413 |
+
* @return bool
|
15414 |
+
*/
|
15415 |
+
static function is_admin_post() {
|
15416 |
+
return ( 'admin-post.php' === self::get_current_page() );
|
15417 |
+
}
|
15418 |
+
|
15419 |
/**
|
15420 |
* Check if a real user is visiting the admin dashboard.
|
15421 |
*
|
15429 |
is_admin() &&
|
15430 |
! self::is_ajax() &&
|
15431 |
! self::is_cron() &&
|
15432 |
+
! self::is_admin_post()
|
15433 |
);
|
15434 |
}
|
15435 |
|
15710 |
}
|
15711 |
|
15712 |
/**
|
15713 |
+
* @todo Implement pagination when accessing the subsites collection.
|
15714 |
+
*
|
15715 |
* @author Leo Fajardo (@leorw)
|
15716 |
* @since 2.0.0
|
15717 |
*
|
15718 |
+
* @param int $limit Default to 1,000
|
15719 |
+
* @param int $offset Default to 0
|
15720 |
+
*
|
15721 |
* @return array Active & public sites collection.
|
15722 |
*/
|
15723 |
+
static function get_sites( $limit = 1000, $offset = 0 ) {
|
15724 |
if ( ! is_multisite() ) {
|
15725 |
return array();
|
15726 |
}
|
15742 |
'mature' => 0,
|
15743 |
'spam' => 0,
|
15744 |
'deleted' => 0,
|
15745 |
+
'number' => $limit,
|
15746 |
+
'offset' => $offset,
|
15747 |
);
|
15748 |
|
15749 |
if ( function_exists( 'get_sites' ) ) {
|
15933 |
*
|
15934 |
* @param int $blog_id
|
15935 |
* @param FS_Site $install
|
15936 |
+
* @param bool $flush
|
15937 |
*
|
15938 |
* @return bool Since 2.3.1 returns if a switch was made.
|
15939 |
*/
|
15940 |
+
function switch_to_blog( $blog_id, FS_Site $install = null, $flush = false ) {
|
15941 |
+
if ( ! is_numeric( $blog_id ) ) {
|
15942 |
+
return false;
|
15943 |
+
}
|
15944 |
+
|
15945 |
+
if ( ! $flush && $blog_id == $this->_context_is_network_or_blog_id ) {
|
15946 |
return false;
|
15947 |
}
|
15948 |
|
16006 |
unset( $this->_site_api );
|
16007 |
unset( $this->_user_api );
|
16008 |
|
16009 |
+
return true;
|
16010 |
}
|
16011 |
|
16012 |
/**
|
16303 |
}
|
16304 |
}
|
16305 |
|
16306 |
+
if ( ! $this->is_registered() ) {
|
16307 |
+
return;
|
16308 |
+
}
|
16309 |
+
|
16310 |
if ( $this->is_sync_cron_scheduled() &&
|
16311 |
$context_blog_id == $this->get_sync_cron_blog_id()
|
16312 |
) {
|
16340 |
|
16341 |
$this->update_multisite_data_after_site_deactivation( $context_blog_id );
|
16342 |
|
16343 |
+
if ( ! $this->is_registered() ) {
|
16344 |
+
return;
|
16345 |
+
}
|
16346 |
+
|
16347 |
$current_blog_id = get_current_blog_id();
|
16348 |
|
16349 |
$this->switch_to_blog( $context_blog_id );
|
16377 |
|
16378 |
$this->update_multisite_data_after_site_deactivation( $context_blog_id );
|
16379 |
|
16380 |
+
if ( ! $this->is_registered() ) {
|
16381 |
+
return;
|
16382 |
+
}
|
16383 |
+
|
16384 |
$current_blog_id = get_current_blog_id();
|
16385 |
|
16386 |
$this->switch_to_blog( $context_blog_id );
|
16398 |
$this->switch_to_blog( $current_blog_id );
|
16399 |
}
|
16400 |
|
16401 |
+
/**
|
16402 |
+
* Executed after site deletion, called from wp_delete_site
|
16403 |
+
*
|
16404 |
+
* @author Dario Curvino (@dudo)
|
16405 |
+
* @since 2.5.0
|
16406 |
+
*
|
16407 |
+
* @param WP_Site $old_site
|
16408 |
+
*/
|
16409 |
+
public function _after_wpsite_deleted_callback( WP_Site $old_site ) {
|
16410 |
+
$this->_logger->entrance();
|
16411 |
+
|
16412 |
+
$this->_after_site_deleted_callback( $old_site->blog_id, true );
|
16413 |
+
}
|
16414 |
+
|
16415 |
/**
|
16416 |
* Executed after site re-activation.
|
16417 |
*
|
16658 |
}
|
16659 |
|
16660 |
/* Logger
|
16661 |
+
------------------------------------------------------------------------------------------------------------------*/
|
16662 |
/**
|
16663 |
* @param string $id
|
16664 |
* @param bool $prefix_slug
|
16683 |
}
|
16684 |
|
16685 |
/* Security
|
16686 |
+
------------------------------------------------------------------------------------------------------------------*/
|
16687 |
private static function _encrypt( $str ) {
|
16688 |
if ( is_null( $str ) ) {
|
16689 |
return null;
|
16903 |
) {
|
16904 |
// Load site.
|
16905 |
$this->_site = $site;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16906 |
}
|
16907 |
|
16908 |
$user = null;
|
16931 |
/**
|
16932 |
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
|
16933 |
*/
|
16934 |
+
if (
|
16935 |
+
! isset( $this->_storage->user_recovery_from_install_last_attempt_timestamp ) ||
|
16936 |
+
time() > ( $this->_storage->user_recovery_from_install_last_attempt_timestamp + FS_Clone_Manager::CLONE_RESOLUTION_MAX_EXECUTION_TIME )
|
16937 |
+
) {
|
16938 |
+
$user = $this->sync_user_by_current_install();
|
16939 |
+
} else {
|
16940 |
+
return;
|
16941 |
+
}
|
16942 |
+
|
16943 |
+
if ( is_object( $user ) ) {
|
16944 |
+
$this->_storage->user_was_recovered_from_install = true;
|
16945 |
+
} else {
|
16946 |
+
$this->_storage->user_recovery_from_install_attempts = isset( $this->_storage->user_recovery_from_install_attempts ) ?
|
16947 |
+
( $this->_storage->user_recovery_from_install_attempts + 1 ) :
|
16948 |
+
1;
|
16949 |
+
|
16950 |
+
if ( $this->_storage->user_recovery_from_install_attempts >= 3 ) {
|
16951 |
+
$this->delete_current_install( false );
|
16952 |
+
} else {
|
16953 |
+
$this->_storage->user_recovery_from_install_last_attempt_timestamp = time();
|
16954 |
+
|
16955 |
+
return;
|
16956 |
+
}
|
16957 |
+
}
|
16958 |
}
|
16959 |
|
16960 |
$this->_user = ( $user instanceof FS_User ) ?
|
16968 |
}
|
16969 |
|
16970 |
if ( is_object( $this->_site ) ) {
|
16971 |
+
// Load plans.
|
16972 |
+
$this->_plans = isset( $plans[ $this->_slug ] ) ?
|
16973 |
+
$plans[ $this->_slug ] :
|
16974 |
+
array();
|
16975 |
+
|
16976 |
+
if ( ! is_array( $this->_plans ) || empty( $this->_plans ) ) {
|
16977 |
+
$this->_sync_plans();
|
16978 |
+
} else {
|
16979 |
+
for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
|
16980 |
+
if ( $this->_plans[ $i ] instanceof FS_Plugin_Plan ) {
|
16981 |
+
$this->_plans[ $i ] = self::decrypt_entity( $this->_plans[ $i ] );
|
16982 |
+
} else {
|
16983 |
+
unset( $this->_plans[ $i ] );
|
16984 |
+
}
|
16985 |
+
}
|
16986 |
+
}
|
16987 |
+
|
16988 |
$this->_license = $this->_get_license_by_id( $this->_site->license_id );
|
16989 |
|
16990 |
if ( $this->_site->version != $this->get_plugin_version() ) {
|
17003 |
if ( $this->is_theme() ) {
|
17004 |
$this->_register_account_hooks();
|
17005 |
}
|
17006 |
+
|
17007 |
+
if (
|
17008 |
+
$this->is_clone() &&
|
17009 |
+
empty( FS_Clone_Manager::instance()->get_clone_identification_timestamp() )
|
17010 |
+
) {
|
17011 |
+
FS_Clone_Manager::instance()->store_clone_identification_timestamp();
|
17012 |
+
}
|
17013 |
}
|
17014 |
|
17015 |
/**
|
17221 |
);
|
17222 |
}
|
17223 |
|
17224 |
+
if ( is_multisite() && function_exists( 'get_network' ) ) {
|
17225 |
+
$params['network_uid'] = $this->get_anonymous_network_id();
|
17226 |
+
}
|
17227 |
+
|
17228 |
return array_merge( $params, $override_with );
|
17229 |
}
|
17230 |
|
17246 |
* @param bool $is_disconnected Whether or not to opt in without tracking.
|
17247 |
* @param null|bool $is_marketing_allowed
|
17248 |
* @param array $sites If network-level opt-in, an array of containing details of sites.
|
17249 |
+
* @param bool $redirect
|
17250 |
*
|
17251 |
* @return string|object
|
17252 |
* @use WP_Error
|
17260 |
$trial_plan_id = false,
|
17261 |
$is_disconnected = false,
|
17262 |
$is_marketing_allowed = null,
|
17263 |
+
$sites = array(),
|
17264 |
+
$redirect = true
|
17265 |
) {
|
17266 |
$this->_logger->entrance();
|
17267 |
|
17285 |
$fs_user,
|
17286 |
false,
|
17287 |
$trial_plan_id,
|
17288 |
+
$redirect,
|
17289 |
true,
|
17290 |
$sites
|
17291 |
);
|
17359 |
$request = array(
|
17360 |
'method' => 'POST',
|
17361 |
'body' => $params,
|
17362 |
+
'timeout' => 60,
|
17363 |
);
|
17364 |
|
17365 |
$url = $this->add_show_pending( WP_FS__ADDRESS . '/action/service/user/install/' );
|
17445 |
true ),
|
17446 |
false,
|
17447 |
$filtered_license_key,
|
17448 |
+
! empty( $params['trial_plan_id'] ),
|
17449 |
+
isset( $decoded->is_suspicious_email ) && $decoded->is_suspicious_email
|
17450 |
);
|
17451 |
} else if ( isset( $decoded->install_secret_key ) ) {
|
17452 |
return $this->install_with_new_user(
|
17721 |
);
|
17722 |
}
|
17723 |
} else if ( fs_request_has( 'pending_activation' ) ) {
|
17724 |
+
$this->set_pending_confirmation(
|
17725 |
+
fs_request_get( 'user_email' ),
|
17726 |
+
true,
|
17727 |
+
false,
|
17728 |
+
false,
|
17729 |
+
fs_request_get_bool( 'is_suspicious_email' )
|
17730 |
+
);
|
17731 |
}
|
17732 |
}
|
17733 |
}
|
17822 |
$site->secret_key = $install_secret_key;
|
17823 |
|
17824 |
$this->_site = $site;
|
17825 |
+
$site_result = $this->get_api_site_scope( true )->get();
|
17826 |
$site = new FS_Site( $site_result );
|
17827 |
$this->_site = $site;
|
17828 |
|
17969 |
$email = false,
|
17970 |
$redirect = true,
|
17971 |
$license_key = false,
|
17972 |
+
$is_pending_trial = false,
|
17973 |
+
$is_suspicious_email = false
|
17974 |
) {
|
17975 |
if ( $this->_ignore_pending_mode ) {
|
17976 |
/**
|
17985 |
// Install must be activated via email since
|
17986 |
// user with the same email already exist.
|
17987 |
$this->_storage->is_pending_activation = true;
|
17988 |
+
$this->_add_pending_activation_notice( $email, $is_pending_trial, $is_suspicious_email );
|
17989 |
}
|
17990 |
|
17991 |
if ( ! empty( $license_key ) ) {
|
18048 |
*
|
18049 |
* @return object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install.
|
18050 |
*/
|
18051 |
+
function install_with_current_user(
|
18052 |
$license_key = false,
|
18053 |
$trial_plan_id = false,
|
18054 |
$sites = array(),
|
18431 |
$this->send_installs_update();
|
18432 |
}
|
18433 |
|
|
|
|
|
|
|
18434 |
$current_blog = get_current_blog_id();
|
18435 |
|
18436 |
foreach ( $blog_2_install_map as $blog_id => $install ) {
|
18439 |
$this->do_action( 'after_account_connection', $this->_user, $install );
|
18440 |
}
|
18441 |
|
18442 |
+
// Switch install context back to the first install.
|
18443 |
+
$this->switch_to_blog(
|
18444 |
+
$current_blog,
|
18445 |
+
$first_install,
|
18446 |
+
( $this->_site->id != $first_install->id )
|
18447 |
+
);
|
18448 |
|
18449 |
$this->do_action( 'after_network_account_connection', $this->_user, $blog_2_install_map );
|
18450 |
}
|
18548 |
// return;
|
18549 |
// }
|
18550 |
|
18551 |
+
if ( is_object( $this->_site ) && ! $this->is_registered() ) {
|
18552 |
+
return;
|
18553 |
+
}
|
18554 |
+
|
18555 |
/**
|
18556 |
* When running from a site admin with a network activated module and the connection
|
18557 |
* was NOT delegated and the user still haven't skipped or opted-in, then hide the
|
19506 |
*
|
19507 |
* @return string
|
19508 |
*/
|
19509 |
+
static function get_ajax_action_static( $tag, $module_id = null ) {
|
19510 |
$action = "fs_{$tag}";
|
19511 |
|
19512 |
if ( ! empty( $module_id ) ) {
|
19749 |
}
|
19750 |
|
19751 |
/* Account Page
|
19752 |
+
------------------------------------------------------------------------------------------------------------------*/
|
19753 |
/**
|
19754 |
* Update site information.
|
19755 |
*
|
19760 |
* @param null|int $network_level_or_blog_id Since 2.0.0
|
19761 |
* @param \FS_Site $site Since 2.0.0
|
19762 |
*/
|
19763 |
+
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null, $is_backup = false ) {
|
19764 |
$this->_logger->entrance();
|
19765 |
|
19766 |
if ( is_null( $site ) ) {
|
19775 |
|
19776 |
$site_clone = clone $site;
|
19777 |
|
19778 |
+
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id, $is_backup );
|
19779 |
|
19780 |
+
if (
|
19781 |
+
! $is_backup &&
|
19782 |
+
is_object( $this->_user ) && $this->_user->id != $site->user_id
|
19783 |
+
) {
|
19784 |
$this->sync_user_by_current_install( $site->user_id );
|
19785 |
|
19786 |
$prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
|
19805 |
|
19806 |
$sites[ $this->_slug ] = $site_clone;
|
19807 |
|
19808 |
+
$this->set_account_option(
|
19809 |
+
( $is_backup ? 'prev_' : '' ) . 'sites',
|
19810 |
+
$sites,
|
19811 |
+
$store,
|
19812 |
+
$network_level_or_blog_id
|
19813 |
+
);
|
19814 |
+
}
|
19815 |
+
|
19816 |
+
/**
|
19817 |
+
* Stores the context site in the sites backup storage. This logic is used before deleting the site info so that it can be restored later on if necessary (e.g., if the automatic clone resolution attempt fails).
|
19818 |
+
*
|
19819 |
+
* @author Leo Fajardo (@leorw)
|
19820 |
+
* @since 2.5.0
|
19821 |
+
*/
|
19822 |
+
private function back_up_site() {
|
19823 |
+
$this->_logger->entrance();
|
19824 |
+
|
19825 |
+
$site_clone = clone $this->_site;
|
19826 |
+
|
19827 |
+
$this->_store_site( true, null, $site_clone, true );
|
19828 |
}
|
19829 |
|
19830 |
/**
|
21065 |
$this->switch_to_blog( $current_blog_id );
|
21066 |
}
|
21067 |
|
21068 |
+
$result = $this->send_install_update( array(), true, true );
|
21069 |
$is_valid = $this->is_api_result_entity( $result );
|
21070 |
} else {
|
21071 |
+
$result = $this->send_installs_update( array(), true, true );
|
21072 |
$is_valid = $this->is_api_result_object( $result, 'installs' );
|
21073 |
}
|
21074 |
|
21078 |
$this->switch_to_blog( $this->_storage->network_install_blog_id );
|
21079 |
}
|
21080 |
|
21081 |
+
// Show API message only if not background sync or if paying customer.
|
21082 |
if ( ! $background || $this->is_paying() ) {
|
21083 |
// Try to ping API to see if not blocked.
|
21084 |
if ( ! FS_Api::test() ) {
|
21088 |
* @author Vova Feldman (@svovaf)
|
21089 |
* @since 1.1.6 Only show message related to one of the Freemius powered plugins. Once it will be resolved it will fix the issue for all plugins anyways. There's no point to scare users with multiple error messages.
|
21090 |
*/
|
|
|
21091 |
|
21092 |
if ( ! self::$_global_admin_notices->has_sticky( 'api_blocked' ) ) {
|
21093 |
+
// Add notice immediately if not a background sync.
|
21094 |
+
$add_notice = ( ! $background );
|
21095 |
+
|
21096 |
+
if ( ! $add_notice ) {
|
21097 |
+
$counter = (int) get_transient( '_fs_api_connection_retry_counter' );
|
21098 |
+
|
21099 |
+
// We only want to add the notice after 3 consecutive failures.
|
21100 |
+
$add_notice = ( 3 <= $counter );
|
21101 |
+
|
21102 |
+
if ( ! $add_notice ) {
|
21103 |
+
/**
|
21104 |
+
* Update counter transient only if notice shouldn't be added. If it is added the transient will be reset anyway, because the retries mechanism should only start counting if the admin isn't aware of the connectivity issue.
|
21105 |
+
*
|
21106 |
+
* Also, since the background sync happens once a day, setting the transient expiration for a week should be enough to count 3 failures, if there's an actual connectivity issue.
|
21107 |
+
*/
|
21108 |
+
set_transient( '_fs_api_connection_retry_counter', $counter + 1, WP_FS__TIME_WEEK_IN_SEC );
|
21109 |
+
}
|
21110 |
+
}
|
21111 |
+
|
21112 |
+
// Add notice instantly for not-background sync and only after 3 failed attempts for background sync.
|
21113 |
+
if ( $add_notice ) {
|
21114 |
+
self::$_global_admin_notices->add(
|
21115 |
+
sprintf(
|
21116 |
+
$this->get_text_inline( 'Your server is blocking the access to Freemius\' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s', 'server-blocking-access' ),
|
21117 |
+
$this->get_plugin_name(),
|
21118 |
+
'<b>' . implode( ', ', $this->apply_filters( 'api_domains', array(
|
21119 |
+
'api.freemius.com',
|
21120 |
+
'wp.freemius.com'
|
21121 |
+
) ) ) . '</b>'
|
21122 |
+
) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
21123 |
+
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
|
21124 |
+
'error',
|
21125 |
+
$background,
|
21126 |
+
'api_blocked'
|
21127 |
+
);
|
21128 |
+
|
21129 |
+
// Notice was just shown, reset connectivity counter.
|
21130 |
+
delete_transient( '_fs_api_connection_retry_counter' );
|
21131 |
+
}
|
21132 |
}
|
21133 |
+
} else if ( is_object( $result ) ) {
|
21134 |
// Authentication params are broken.
|
21135 |
$this->_admin_notices->add(
|
21136 |
$this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
21144 |
return;
|
21145 |
}
|
21146 |
|
21147 |
+
// API is working now. Delete the transient and start afresh.
|
21148 |
+
delete_transient('_fs_api_connection_retry_counter');
|
21149 |
+
|
21150 |
if ( $is_site_level_sync ) {
|
21151 |
$site = new FS_Site( $result );
|
21152 |
} else {
|
21338 |
}
|
21339 |
|
21340 |
if ( ! $this->is_addon() &&
|
21341 |
+
$this->_site->is_beta() !== $site->is_beta()
|
21342 |
) {
|
21343 |
// Beta flag updated.
|
21344 |
$this->_site = $site;
|
22072 |
) {
|
22073 |
$this->_logger->entrance();
|
22074 |
|
22075 |
+
if ( $this->is_unresolved_clone() ) {
|
22076 |
+
return false;
|
22077 |
+
}
|
22078 |
+
|
22079 |
$switch_to_blog_id = null;
|
22080 |
|
22081 |
/**
|
22188 |
private function get_latest_download_api_url( $plugin_id = false ) {
|
22189 |
$this->_logger->entrance();
|
22190 |
|
22191 |
+
$download_api_url = $this->get_api_site_scope()->get_signed_url(
|
22192 |
$this->_get_latest_version_endpoint( $plugin_id, 'zip' )
|
22193 |
);
|
22194 |
+
|
22195 |
+
return str_replace( 'http:', 'https:', $download_api_url );
|
22196 |
}
|
22197 |
|
22198 |
/**
|
22387 |
private function update_email( $new_email ) {
|
22388 |
$this->_logger->entrance();
|
22389 |
|
|
|
22390 |
$api = $this->get_api_user_scope();
|
22391 |
$user = $api->call( "?plugin_id={$this->_plugin->id}&fields=id,email,is_verified", 'put', array(
|
22392 |
'email' => $new_email,
|
22402 |
$this->_store_user();
|
22403 |
} else {
|
22404 |
// handle different error cases.
|
|
|
22405 |
}
|
22406 |
|
22407 |
return $user;
|
22477 |
* @uses FS_Api
|
22478 |
*
|
22479 |
* @param string $candidate_email
|
22480 |
+
* @param string $transfer_type
|
22481 |
*
|
22482 |
* @return bool Is ownership change successfully initiated.
|
22483 |
*/
|
22484 |
+
private function init_change_owner( $candidate_email, $transfer_type ) {
|
22485 |
$this->_logger->entrance();
|
22486 |
|
22487 |
+
$installs_info_by_slug_map = $this->get_parent_and_addons_installs_info();
|
22488 |
+
$install_ids = array();
|
22489 |
+
|
22490 |
+
foreach ( $installs_info_by_slug_map as $slug => $install_info ) {
|
22491 |
+
$install = $install_info['install'];
|
22492 |
+
|
22493 |
+
if ( $this->_user->id != $install->user_id ) {
|
22494 |
+
// Skip add-on installs that are not owned by the parent product's install's owner.
|
22495 |
+
continue;
|
22496 |
+
}
|
22497 |
+
|
22498 |
+
$install_ids[ $slug ] = $install->id;
|
22499 |
+
}
|
22500 |
+
|
22501 |
$api = $this->get_api_site_scope();
|
22502 |
$result = $api->call( "/users/{$this->_user->id}.json", 'put', array(
|
22503 |
'email' => $candidate_email,
|
22504 |
+
'transfer_type' => $transfer_type,
|
22505 |
+
'install_ids' => implode( ',', array_values( $install_ids ) ),
|
22506 |
'after_confirm_url' => $this->_get_admin_page_url(
|
22507 |
'account',
|
22508 |
array( 'fs_action' => 'change_owner' )
|
22524 |
private function complete_change_owner() {
|
22525 |
$this->_logger->entrance();
|
22526 |
|
22527 |
+
$install_ids = fs_request_get( 'install_ids' );
|
22528 |
+
|
22529 |
+
if ( ! empty( $install_ids ) ) {
|
22530 |
+
$install_ids = explode( ',', $install_ids );
|
22531 |
+
|
22532 |
+
foreach ( $install_ids as $key => $install_id ) {
|
22533 |
+
if ( ! FS_Site::is_valid_id( $install_id ) ) {
|
22534 |
+
unset( $install_ids[ $key ] );
|
22535 |
+
}
|
22536 |
+
}
|
22537 |
+
}
|
22538 |
+
|
22539 |
+
if ( ! is_array( $install_ids ) ) {
|
22540 |
+
$install_ids = array();
|
22541 |
+
}
|
22542 |
|
22543 |
+
$user = new FS_User();
|
22544 |
+
$user->id = fs_request_get( 'user_id' );
|
22545 |
+
$user->public_key = fs_request_get( 'user_public_key' );
|
22546 |
+
$user->secret_key = fs_request_get( 'user_secret_key' );
|
22547 |
+
|
22548 |
+
$prev_user = $this->_user;
|
22549 |
+
$this->_user = $user;
|
22550 |
+
|
22551 |
+
$result = $this->get_api_user_scope( true )->get(
|
22552 |
+
"/installs.json?install_ids=" . implode( ',', $install_ids )
|
22553 |
+
);
|
22554 |
+
|
22555 |
+
$current_blog_sites = self::get_all_sites( $this->get_module_type() );
|
22556 |
+
|
22557 |
+
if ( $this->is_api_result_object( $result, 'installs' ) ) {
|
22558 |
+
$site_id_slug_map = array();
|
22559 |
+
|
22560 |
+
foreach ( $current_blog_sites as $slug => $site ) {
|
22561 |
+
$site_id_slug_map[ $site->id ] = $slug;
|
22562 |
+
}
|
22563 |
+
|
22564 |
+
foreach ( $result->installs as $install ) {
|
22565 |
+
$site = new FS_Site( $install );
|
22566 |
+
|
22567 |
+
if ( ! isset( $site_id_slug_map[ $install->id ] ) ) {
|
22568 |
+
continue;
|
22569 |
+
}
|
22570 |
+
|
22571 |
+
$current_blog_sites[ $site_id_slug_map[ $install->id ] ] = clone $site;
|
22572 |
+
|
22573 |
+
if ( $this->_site->id == $site->id ) {
|
22574 |
+
$this->_site = $site;
|
22575 |
+
}
|
22576 |
+
}
|
22577 |
+
}
|
22578 |
|
22579 |
// Validate install's user and given user.
|
22580 |
if ( $user->id != $this->_site->user_id ) {
|
22581 |
+
$this->_user = $prev_user;
|
22582 |
+
|
22583 |
return false;
|
22584 |
}
|
22585 |
|
22586 |
+
$this->set_account_option( 'sites', $current_blog_sites, true );
|
|
|
22587 |
|
22588 |
// Fetch new user information.
|
|
|
22589 |
$user_result = $this->get_api_user_scope( true )->get();
|
22590 |
$user = new FS_User( $user_result );
|
22591 |
$this->_user = $user;
|
22592 |
|
22593 |
+
$this->_set_account( $user, $this->_site );
|
22594 |
+
|
22595 |
+
$remove_user = true;
|
22596 |
+
$all_modules_sites = self::get_all_modules_sites();
|
22597 |
+
|
22598 |
+
foreach ( $all_modules_sites as $sites_by_module_type ) {
|
22599 |
+
foreach ( $sites_by_module_type as $sites_by_slug ) {
|
22600 |
+
foreach ( $sites_by_slug as $site ) {
|
22601 |
+
if ( $prev_user->id == $site->user_id ) {
|
22602 |
+
$remove_user = false;
|
22603 |
+
break;
|
22604 |
+
}
|
22605 |
+
}
|
22606 |
+
|
22607 |
+
if ( ! $remove_user ) {
|
22608 |
+
break;
|
22609 |
+
}
|
22610 |
+
}
|
22611 |
+
|
22612 |
+
if ( ! $remove_user ) {
|
22613 |
+
break;
|
22614 |
+
}
|
22615 |
+
}
|
22616 |
+
|
22617 |
+
if ( $remove_user ) {
|
22618 |
+
$users = self::get_all_users();
|
22619 |
+
|
22620 |
+
if ( isset( $users[ $prev_user->id ] ) ) {
|
22621 |
+
unset( $users[ $prev_user->id ] );
|
22622 |
+
} else {
|
22623 |
+
// If the prev user wasn't found by the key, iterate over the users collection.
|
22624 |
+
foreach ( $users as $key => $user ) {
|
22625 |
+
if ( $user->id == $prev_user->id ) {
|
22626 |
+
unset( $users[ $key ] );
|
22627 |
+
break;
|
22628 |
+
}
|
22629 |
+
}
|
22630 |
+
}
|
22631 |
+
|
22632 |
+
$this->set_account_option( 'users', $users, true );
|
22633 |
+
}
|
22634 |
|
22635 |
return true;
|
22636 |
}
|
23042 |
$state = fs_request_get( 'state', 'init' );
|
23043 |
switch ( $state ) {
|
23044 |
case 'init':
|
23045 |
+
$candidate_email = fs_request_get( 'candidate_email' );
|
23046 |
+
$transfer_type = fs_request_get( 'transfer_type' );
|
23047 |
|
23048 |
+
if ( $this->init_change_owner( $candidate_email, $transfer_type ) ) {
|
23049 |
+
if ( 'transfer' === $transfer_type ) {
|
23050 |
+
$this->_admin_notices->add( sprintf( $this->get_text_inline( 'A confirmation email was just sent to %s. The email owner must confirm the update within the next 4 hours.', 'change-owner-request-sent-x-transfer' ), '<b>' . $this->_user->email . '</b>' ) );
|
23051 |
+
} else {
|
23052 |
+
$this->_admin_notices->add( sprintf( $this->get_text_inline( 'A confirmation email was just sent to %s. You must confirm the update within the next 4 hours. If you cannot find the email, please check your spam folder.', 'change-owner-request-sent-x' ), '<b>' . $this->_user->email . '</b>' ) );
|
23053 |
+
}
|
23054 |
}
|
23055 |
break;
|
23056 |
case 'owner_confirmed':
|
23073 |
|
23074 |
return;
|
23075 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23076 |
case 'update_user_name':
|
23077 |
check_admin_referer( 'update_user_name' );
|
23078 |
|
23335 |
}
|
23336 |
|
23337 |
/* Pricing & Upgrade
|
23338 |
+
------------------------------------------------------------------------------------------------------------------*/
|
23339 |
/**
|
23340 |
* Render pricing page.
|
23341 |
*
|
23494 |
}
|
23495 |
|
23496 |
/* CSS & JavaScript
|
23497 |
+
------------------------------------------------------------------------------------------------------------------*/
|
23498 |
/* function _enqueue_script($handle, $src) {
|
23499 |
+
$url = plugins_url( substr( WP_FS__DIR_JS, strlen( $this->_plugin_dir_path ) ) . '/assets/js/' . $src );
|
23500 |
|
23501 |
+
$this->_logger->entrance( 'script = ' . $url );
|
23502 |
|
23503 |
+
wp_enqueue_script( $handle, $url );
|
23504 |
+
}*/
|
23505 |
|
23506 |
/* SDK
|
23507 |
+
------------------------------------------------------------------------------------------------------------------*/
|
23508 |
private $_user_api;
|
23509 |
|
23510 |
/**
|
23516 |
*
|
23517 |
* @return FS_Api
|
23518 |
*/
|
23519 |
+
function get_api_user_scope( $flush = false ) {
|
23520 |
if ( ! isset( $this->_user_api ) || $flush ) {
|
23521 |
$this->_user_api = $this->get_api_user_scope_by_user( $this->_user );
|
23522 |
}
|
23595 |
$this->_site->public_key,
|
23596 |
! $this->is_live(),
|
23597 |
$this->_site->secret_key,
|
23598 |
+
$this->get_sdk_version(),
|
23599 |
+
get_site_url()
|
23600 |
);
|
23601 |
}
|
23602 |
|
23603 |
return $this->_site_api;
|
23604 |
}
|
23605 |
|
23606 |
+
/**
|
23607 |
+
* @author Leo Fajardo (@leorw)
|
23608 |
+
* @since 2.5.0
|
23609 |
+
*
|
23610 |
+
* @param string $path
|
23611 |
+
* @param string $method
|
23612 |
+
* @param array $params
|
23613 |
+
* @param bool $flush_instance
|
23614 |
+
*
|
23615 |
+
* @return array|mixed|string|void
|
23616 |
+
* @throws Freemius_Exception
|
23617 |
+
*/
|
23618 |
+
private function api_site_call( $path, $method = 'GET', $params = array(), $flush_instance = false ) {
|
23619 |
+
$result = $this->get_api_site_scope( $flush_instance )->call( $path, $method, $params );
|
23620 |
+
|
23621 |
+
/**
|
23622 |
+
* Checks if the local install's URL is different from the remote install's URL, update the local install if necessary, and then run the clone handler if the install's URL is different from the URL of the site.
|
23623 |
+
*
|
23624 |
+
* @author Leo Fajardo (@leorw)
|
23625 |
+
* @since 2.5.0
|
23626 |
+
*/
|
23627 |
+
if (
|
23628 |
+
$this->is_registered() &&
|
23629 |
+
FS_Api::is_api_result_entity( $result ) &&
|
23630 |
+
isset( $result->url )
|
23631 |
+
) {
|
23632 |
+
$stored_local_url = trailingslashit( $this->_site->url );
|
23633 |
+
$stored_remote_url = trailingslashit( $result->url );
|
23634 |
+
|
23635 |
+
if ( $stored_local_url !== $stored_remote_url ) {
|
23636 |
+
$this->_site->url = $result->url;
|
23637 |
+
$this->_store_site();
|
23638 |
+
}
|
23639 |
+
|
23640 |
+
if ( fs_strip_url_protocol( $stored_remote_url ) !== fs_strip_url_protocol( trailingslashit( get_site_url() ) ) ) {
|
23641 |
+
FS_Clone_Manager::instance()->maybe_run_clone_resolution();
|
23642 |
+
}
|
23643 |
+
}
|
23644 |
+
|
23645 |
+
return $result;
|
23646 |
+
}
|
23647 |
+
|
23648 |
private $_plugin_api;
|
23649 |
|
23650 |
/**
|
24080 |
}
|
24081 |
|
24082 |
/* Action Links
|
24083 |
+
------------------------------------------------------------------------------------------------------------------*/
|
24084 |
private $_action_links_hooked = false;
|
24085 |
private $_action_links = array();
|
24086 |
|
24267 |
|
24268 |
if (
|
24269 |
$this->is_addon() &&
|
24270 |
+
! $this->is_only_premium()
|
|
|
24271 |
) {
|
24272 |
+
$parent = $this->get_parent_instance();
|
24273 |
+
|
24274 |
+
if ( is_object( $parent ) && $parent->is_anonymous() ) {
|
24275 |
+
return;
|
24276 |
+
}
|
24277 |
}
|
24278 |
|
24279 |
if ( fs_is_network_admin() ) {
|
freemius/includes/class-fs-admin-notices.php
CHANGED
@@ -125,13 +125,10 @@
|
|
125 |
$is_sticky = false,
|
126 |
$id = '',
|
127 |
$store_if_sticky = true,
|
128 |
-
$network_level_or_blog_id = null
|
|
|
129 |
) {
|
130 |
-
|
131 |
-
$notices = $this->_network_notices;
|
132 |
-
} else {
|
133 |
-
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
134 |
-
}
|
135 |
|
136 |
$notices->add(
|
137 |
$message,
|
@@ -139,7 +136,11 @@
|
|
139 |
$type,
|
140 |
$is_sticky,
|
141 |
$id,
|
142 |
-
$store_if_sticky
|
|
|
|
|
|
|
|
|
143 |
);
|
144 |
}
|
145 |
|
@@ -149,8 +150,9 @@
|
|
149 |
*
|
150 |
* @param string|string[] $ids
|
151 |
* @param int|null $network_level_or_blog_id
|
|
|
152 |
*/
|
153 |
-
function remove_sticky( $ids, $network_level_or_blog_id = null ) {
|
154 |
if ( ! is_array( $ids ) ) {
|
155 |
$ids = array( $ids );
|
156 |
}
|
@@ -161,7 +163,7 @@
|
|
161 |
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
162 |
}
|
163 |
|
164 |
-
return $notices->remove_sticky( $ids );
|
165 |
}
|
166 |
|
167 |
/**
|
@@ -176,11 +178,7 @@
|
|
176 |
* @return bool
|
177 |
*/
|
178 |
function has_sticky( $id, $network_level_or_blog_id = null ) {
|
179 |
-
|
180 |
-
$notices = $this->_network_notices;
|
181 |
-
} else {
|
182 |
-
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
183 |
-
}
|
184 |
|
185 |
return $notices->has_sticky( $id );
|
186 |
}
|
@@ -200,6 +198,7 @@
|
|
200 |
* @param string|null $plugin_title
|
201 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network and
|
202 |
* blog admin pages.
|
|
|
203 |
*/
|
204 |
function add_sticky(
|
205 |
$message,
|
@@ -209,15 +208,30 @@
|
|
209 |
$network_level_or_blog_id = null,
|
210 |
$wp_user_id = null,
|
211 |
$plugin_title = null,
|
212 |
-
$is_network_and_blog_admins = false
|
|
|
|
|
213 |
) {
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
219 |
|
220 |
-
$notices->
|
221 |
}
|
222 |
|
223 |
/**
|
@@ -317,5 +331,22 @@
|
|
317 |
return fs_is_network_admin();
|
318 |
}
|
319 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
#endregion
|
321 |
}
|
125 |
$is_sticky = false,
|
126 |
$id = '',
|
127 |
$store_if_sticky = true,
|
128 |
+
$network_level_or_blog_id = null,
|
129 |
+
$is_dimissible = null
|
130 |
) {
|
131 |
+
$notices = $this->get_site_or_network_notices( $id, $network_level_or_blog_id );
|
|
|
|
|
|
|
|
|
132 |
|
133 |
$notices->add(
|
134 |
$message,
|
136 |
$type,
|
137 |
$is_sticky,
|
138 |
$id,
|
139 |
+
$store_if_sticky,
|
140 |
+
null,
|
141 |
+
null,
|
142 |
+
false,
|
143 |
+
$is_dimissible
|
144 |
);
|
145 |
}
|
146 |
|
150 |
*
|
151 |
* @param string|string[] $ids
|
152 |
* @param int|null $network_level_or_blog_id
|
153 |
+
* @param bool $store
|
154 |
*/
|
155 |
+
function remove_sticky( $ids, $network_level_or_blog_id = null, $store = true ) {
|
156 |
if ( ! is_array( $ids ) ) {
|
157 |
$ids = array( $ids );
|
158 |
}
|
163 |
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
164 |
}
|
165 |
|
166 |
+
return $notices->remove_sticky( $ids, $store );
|
167 |
}
|
168 |
|
169 |
/**
|
178 |
* @return bool
|
179 |
*/
|
180 |
function has_sticky( $id, $network_level_or_blog_id = null ) {
|
181 |
+
$notices = $this->get_site_or_network_notices( $id, $network_level_or_blog_id );
|
|
|
|
|
|
|
|
|
182 |
|
183 |
return $notices->has_sticky( $id );
|
184 |
}
|
198 |
* @param string|null $plugin_title
|
199 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network and
|
200 |
* blog admin pages.
|
201 |
+
* @param bool $is_dismissible
|
202 |
*/
|
203 |
function add_sticky(
|
204 |
$message,
|
208 |
$network_level_or_blog_id = null,
|
209 |
$wp_user_id = null,
|
210 |
$plugin_title = null,
|
211 |
+
$is_network_and_blog_admins = false,
|
212 |
+
$is_dismissible = true,
|
213 |
+
$data = array()
|
214 |
) {
|
215 |
+
$notices = $this->get_site_or_network_notices( $id, $network_level_or_blog_id );
|
216 |
+
|
217 |
+
$notices->add_sticky( $message, $id, $title, $type, $wp_user_id, $plugin_title, $is_network_and_blog_admins, $is_dismissible, $data );
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Retrieves the data of a sticky notice.
|
222 |
+
*
|
223 |
+
* @author Leo Fajardo (@leorw)
|
224 |
+
* @since 2.4.3
|
225 |
+
*
|
226 |
+
* @param string $id
|
227 |
+
* @param int|null $network_level_or_blog_id
|
228 |
+
*
|
229 |
+
* @return array|null
|
230 |
+
*/
|
231 |
+
function get_sticky( $id, $network_level_or_blog_id ) {
|
232 |
+
$notices = $this->get_site_or_network_notices( $id, $network_level_or_blog_id );
|
233 |
|
234 |
+
return $notices->get_sticky( $id );
|
235 |
}
|
236 |
|
237 |
/**
|
331 |
return fs_is_network_admin();
|
332 |
}
|
333 |
|
334 |
+
/**
|
335 |
+
* Retrieves an instance of FS_Admin_Notice_Manager.
|
336 |
+
*
|
337 |
+
* @author Leo Fajardo (@leorw)
|
338 |
+
* @since 2.5.0
|
339 |
+
*
|
340 |
+
* @param string $id
|
341 |
+
* @param int|null $network_level_or_blog_id
|
342 |
+
*
|
343 |
+
* @return FS_Admin_Notice_Manager
|
344 |
+
*/
|
345 |
+
private function get_site_or_network_notices( $id, $network_level_or_blog_id ) {
|
346 |
+
return $this->should_use_network_notices( $id, $network_level_or_blog_id ) ?
|
347 |
+
$this->_network_notices :
|
348 |
+
$this->get_site_notices( $network_level_or_blog_id );
|
349 |
+
}
|
350 |
+
|
351 |
#endregion
|
352 |
}
|
freemius/includes/class-fs-api.php
CHANGED
@@ -64,6 +64,14 @@
|
|
64 |
*/
|
65 |
private $_sdk_version;
|
66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
/**
|
68 |
* @param string $slug
|
69 |
* @param string $scope 'app', 'developer', 'user' or 'install'.
|
@@ -72,6 +80,7 @@
|
|
72 |
* @param bool $is_sandbox
|
73 |
* @param bool|string $secret_key Element's secret key.
|
74 |
* @param null|string $sdk_version
|
|
|
75 |
*
|
76 |
* @return FS_Api
|
77 |
*/
|
@@ -82,14 +91,15 @@
|
|
82 |
$public_key,
|
83 |
$is_sandbox,
|
84 |
$secret_key = false,
|
85 |
-
$sdk_version = null
|
|
|
86 |
) {
|
87 |
$identifier = md5( $slug . $scope . $id . $public_key . ( is_string( $secret_key ) ? $secret_key : '' ) . json_encode( $is_sandbox ) );
|
88 |
|
89 |
if ( ! isset( self::$_instances[ $identifier ] ) ) {
|
90 |
self::_init();
|
91 |
|
92 |
-
self::$_instances[ $identifier ] = new FS_Api( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox, $sdk_version );
|
93 |
}
|
94 |
|
95 |
return self::$_instances[ $identifier ];
|
@@ -123,6 +133,7 @@
|
|
123 |
* @param bool|string $secret_key Element's secret key.
|
124 |
* @param bool $is_sandbox
|
125 |
* @param null|string $sdk_version
|
|
|
126 |
*/
|
127 |
private function __construct(
|
128 |
$slug,
|
@@ -131,12 +142,14 @@
|
|
131 |
$public_key,
|
132 |
$secret_key,
|
133 |
$is_sandbox,
|
134 |
-
$sdk_version
|
|
|
135 |
) {
|
136 |
$this->_api = new Freemius_Api_WordPress( $scope, $id, $public_key, $secret_key, $is_sandbox );
|
137 |
|
138 |
$this->_slug = $slug;
|
139 |
$this->_sdk_version = $sdk_version;
|
|
|
140 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_api', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
141 |
}
|
142 |
|
@@ -198,6 +211,17 @@
|
|
198 |
}
|
199 |
}
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
$result = $this->_api->Api( $path, $method, $params );
|
202 |
|
203 |
if ( null !== $result &&
|
64 |
*/
|
65 |
private $_sdk_version;
|
66 |
|
67 |
+
/**
|
68 |
+
* @author Leo Fajardo (@leorw)
|
69 |
+
* @since 2.5.0
|
70 |
+
*
|
71 |
+
* @var string
|
72 |
+
*/
|
73 |
+
private $_url;
|
74 |
+
|
75 |
/**
|
76 |
* @param string $slug
|
77 |
* @param string $scope 'app', 'developer', 'user' or 'install'.
|
80 |
* @param bool $is_sandbox
|
81 |
* @param bool|string $secret_key Element's secret key.
|
82 |
* @param null|string $sdk_version
|
83 |
+
* @param null|string $url
|
84 |
*
|
85 |
* @return FS_Api
|
86 |
*/
|
91 |
$public_key,
|
92 |
$is_sandbox,
|
93 |
$secret_key = false,
|
94 |
+
$sdk_version = null,
|
95 |
+
$url = null
|
96 |
) {
|
97 |
$identifier = md5( $slug . $scope . $id . $public_key . ( is_string( $secret_key ) ? $secret_key : '' ) . json_encode( $is_sandbox ) );
|
98 |
|
99 |
if ( ! isset( self::$_instances[ $identifier ] ) ) {
|
100 |
self::_init();
|
101 |
|
102 |
+
self::$_instances[ $identifier ] = new FS_Api( $slug, $scope, $id, $public_key, $secret_key, $is_sandbox, $sdk_version, $url );
|
103 |
}
|
104 |
|
105 |
return self::$_instances[ $identifier ];
|
133 |
* @param bool|string $secret_key Element's secret key.
|
134 |
* @param bool $is_sandbox
|
135 |
* @param null|string $sdk_version
|
136 |
+
* @param null|string $url
|
137 |
*/
|
138 |
private function __construct(
|
139 |
$slug,
|
142 |
$public_key,
|
143 |
$secret_key,
|
144 |
$is_sandbox,
|
145 |
+
$sdk_version,
|
146 |
+
$url
|
147 |
) {
|
148 |
$this->_api = new Freemius_Api_WordPress( $scope, $id, $public_key, $secret_key, $is_sandbox );
|
149 |
|
150 |
$this->_slug = $slug;
|
151 |
$this->_sdk_version = $sdk_version;
|
152 |
+
$this->_url = $url;
|
153 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . $slug . '_api', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
154 |
}
|
155 |
|
211 |
}
|
212 |
}
|
213 |
|
214 |
+
/**
|
215 |
+
* @since 2.5.0 Include the site's URL, if available, in all API requests that are going through the API manager.
|
216 |
+
*/
|
217 |
+
if ( ! empty( $this->_url ) ) {
|
218 |
+
if ( false === strpos( $path, 'url=' ) &&
|
219 |
+
! isset( $params['url'] )
|
220 |
+
) {
|
221 |
+
$path = add_query_arg( 'url', $this->_url, $path );
|
222 |
+
}
|
223 |
+
}
|
224 |
+
|
225 |
$result = $this->_api->Api( $path, $method, $params );
|
226 |
|
227 |
if ( null !== $result &&
|
freemius/includes/class-fs-plugin-updater.php
CHANGED
@@ -240,7 +240,11 @@
|
|
240 |
* @since 2.0.0
|
241 |
*/
|
242 |
private function add_transient_filters() {
|
243 |
-
if (
|
|
|
|
|
|
|
|
|
244 |
$this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
|
245 |
|
246 |
return;
|
@@ -610,11 +614,9 @@
|
|
610 |
if ( ! isset( $this->_translation_updates ) ) {
|
611 |
$this->_translation_updates = array();
|
612 |
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
$this->_translation_updates = $translation_updates;
|
617 |
-
}
|
618 |
}
|
619 |
}
|
620 |
|
240 |
* @since 2.0.0
|
241 |
*/
|
242 |
private function add_transient_filters() {
|
243 |
+
if (
|
244 |
+
$this->_fs->is_premium() &&
|
245 |
+
$this->_fs->is_registered() &&
|
246 |
+
! $this->_fs->is_tracking_allowed()
|
247 |
+
) {
|
248 |
$this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
|
249 |
|
250 |
return;
|
614 |
if ( ! isset( $this->_translation_updates ) ) {
|
615 |
$this->_translation_updates = array();
|
616 |
|
617 |
+
$translation_updates = $this->fetch_wp_org_module_translation_updates( $module_type, $slug );
|
618 |
+
if ( ! empty( $translation_updates ) ) {
|
619 |
+
$this->_translation_updates = $translation_updates;
|
|
|
|
|
620 |
}
|
621 |
}
|
622 |
|
freemius/includes/entities/class-fs-user.php
CHANGED
@@ -56,7 +56,18 @@
|
|
56 |
return ( isset( $this->is_verified ) && true === $this->is_verified );
|
57 |
}
|
58 |
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
return 'user';
|
61 |
}
|
62 |
}
|
56 |
return ( isset( $this->is_verified ) && true === $this->is_verified );
|
57 |
}
|
58 |
|
59 |
+
/**
|
60 |
+
* @author Leo Fajardo (@leorw)
|
61 |
+
* @since 2.4.2
|
62 |
+
*
|
63 |
+
* @return bool
|
64 |
+
*/
|
65 |
+
function is_beta() {
|
66 |
+
// Return `false` since this is just for backward compatibility.
|
67 |
+
return false;
|
68 |
+
}
|
69 |
+
|
70 |
+
static function get_type() {
|
71 |
return 'user';
|
72 |
}
|
73 |
}
|
freemius/includes/fs-core-functions.php
CHANGED
@@ -1349,7 +1349,7 @@
|
|
1349 |
function fs_is_plugin_uninstall() {
|
1350 |
return (
|
1351 |
defined( 'WP_UNINSTALL_PLUGIN' ) ||
|
1352 |
-
( 0 < did_action( '
|
1353 |
);
|
1354 |
}
|
1355 |
}
|
1349 |
function fs_is_plugin_uninstall() {
|
1350 |
return (
|
1351 |
defined( 'WP_UNINSTALL_PLUGIN' ) ||
|
1352 |
+
( 0 < did_action( 'pre_uninstall_plugin' ) )
|
1353 |
);
|
1354 |
}
|
1355 |
}
|
freemius/includes/fs-plugin-info-dialog.php
CHANGED
@@ -1306,8 +1306,8 @@
|
|
1306 |
<?php endif ?>
|
1307 |
</div>
|
1308 |
</div>
|
1309 |
-
</div>
|
1310 |
<?php endforeach ?>
|
|
|
1311 |
<?php endif ?>
|
1312 |
<?php endif ?>
|
1313 |
<div>
|
1306 |
<?php endif ?>
|
1307 |
</div>
|
1308 |
</div>
|
|
|
1309 |
<?php endforeach ?>
|
1310 |
+
</div>
|
1311 |
<?php endif ?>
|
1312 |
<?php endif ?>
|
1313 |
<div>
|
freemius/includes/i18n.php
CHANGED
@@ -278,7 +278,7 @@
|
|
278 |
'permissions-profile' => _fs_text( 'Your Profile Overview' ),
|
279 |
'permissions-profile_desc' => _fs_text( 'Name and email address' ),
|
280 |
'permissions-site' => _fs_text( 'Your Site Overview' ),
|
281 |
-
'permissions-site_desc' => _fs_text( 'Site URL, WP version, PHP
|
282 |
'permissions-events' => _fs_text( 'Current %s Events' ),
|
283 |
'permissions-events_desc' => _fs_text( 'Activation, deactivation and uninstall' ),
|
284 |
'permissions-plugins_themes' => _fs_text( 'Plugins & Themes' ),
|
278 |
'permissions-profile' => _fs_text( 'Your Profile Overview' ),
|
279 |
'permissions-profile_desc' => _fs_text( 'Name and email address' ),
|
280 |
'permissions-site' => _fs_text( 'Your Site Overview' ),
|
281 |
+
'permissions-site_desc' => _fs_text( 'Site URL, WP version, PHP version, plugins & themes' ),
|
282 |
'permissions-events' => _fs_text( 'Current %s Events' ),
|
283 |
'permissions-events_desc' => _fs_text( 'Activation, deactivation and uninstall' ),
|
284 |
'permissions-plugins_themes' => _fs_text( 'Plugins & Themes' ),
|
freemius/includes/managers/class-fs-admin-notice-manager.php
CHANGED
@@ -160,7 +160,10 @@
|
|
160 |
false,
|
161 |
isset( $msg['wp_user_id'] ) ? $msg['wp_user_id'] : null,
|
162 |
! empty( $msg['plugin'] ) ? $msg['plugin'] : null,
|
163 |
-
$is_network_and_blog_admins
|
|
|
|
|
|
|
164 |
);
|
165 |
}
|
166 |
}
|
@@ -175,7 +178,12 @@
|
|
175 |
*
|
176 |
*/
|
177 |
function dismiss_notice_ajax_callback() {
|
178 |
-
|
|
|
|
|
|
|
|
|
|
|
179 |
wp_die();
|
180 |
}
|
181 |
|
@@ -219,9 +227,6 @@
|
|
219 |
return;
|
220 |
}
|
221 |
|
222 |
-
|
223 |
-
$show_admin_notices = ( ! $this->is_gutenberg_page() );
|
224 |
-
|
225 |
foreach ( $this->_notices as $id => $msg ) {
|
226 |
if ( isset( $msg['wp_user_id'] ) && is_numeric( $msg['wp_user_id'] ) ) {
|
227 |
if ( get_current_user_id() != $msg['wp_user_id'] ) {
|
@@ -264,7 +269,7 @@
|
|
264 |
$show_notice = call_user_func_array( 'fs_apply_filter', array(
|
265 |
$this->_module_unique_affix,
|
266 |
'show_admin_notice',
|
267 |
-
$show_admin_notices,
|
268 |
$msg
|
269 |
) );
|
270 |
|
@@ -318,6 +323,30 @@
|
|
318 |
return false;
|
319 |
}
|
320 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
321 |
/**
|
322 |
* Add admin message to admin messages queue, and hook to admin_notices / all_admin_notices if not yet hooked.
|
323 |
*
|
@@ -334,6 +363,8 @@
|
|
334 |
* @param string|null $plugin_title
|
335 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network
|
336 |
* and blog admin pages.
|
|
|
|
|
337 |
*
|
338 |
* @uses add_action()
|
339 |
*/
|
@@ -346,7 +377,9 @@
|
|
346 |
$store_if_sticky = true,
|
347 |
$wp_user_id = null,
|
348 |
$plugin_title = null,
|
349 |
-
$is_network_and_blog_admins = false
|
|
|
|
|
350 |
) {
|
351 |
$notices_type = $this->get_notices_type();
|
352 |
|
@@ -366,14 +399,16 @@
|
|
366 |
}
|
367 |
|
368 |
$message_object = array(
|
369 |
-
'message'
|
370 |
-
'title'
|
371 |
-
'type'
|
372 |
-
'sticky'
|
373 |
-
'id'
|
374 |
-
'manager_id'
|
375 |
-
'plugin'
|
376 |
-
'wp_user_id'
|
|
|
|
|
377 |
);
|
378 |
|
379 |
if ( $is_sticky && $store_if_sticky ) {
|
@@ -388,15 +423,16 @@
|
|
388 |
* @since 1.0.7
|
389 |
*
|
390 |
* @param string|string[] $ids
|
|
|
391 |
*/
|
392 |
-
function remove_sticky( $ids ) {
|
393 |
if ( ! is_array( $ids ) ) {
|
394 |
$ids = array( $ids );
|
395 |
}
|
396 |
|
397 |
foreach ( $ids as $id ) {
|
398 |
// Remove from sticky storage.
|
399 |
-
$this->_sticky_storage->remove( $id );
|
400 |
|
401 |
if ( isset( $this->_notices[ $id ] ) ) {
|
402 |
unset( $this->_notices[ $id ] );
|
@@ -432,14 +468,32 @@
|
|
432 |
* @param string|null $plugin_title
|
433 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network
|
434 |
* and blog admin pages.
|
|
|
|
|
435 |
*/
|
436 |
-
function add_sticky( $message, $id, $title = '', $type = 'success', $wp_user_id = null, $plugin_title = null, $is_network_and_blog_admins = false ) {
|
437 |
if ( ! empty( $this->_module_unique_affix ) ) {
|
438 |
$message = fs_apply_filter( $this->_module_unique_affix, "sticky_message_{$id}", $message );
|
439 |
$title = fs_apply_filter( $this->_module_unique_affix, "sticky_title_{$id}", $title );
|
440 |
}
|
441 |
|
442 |
-
$this->add( $message, $title, $type, true, $id, true, $wp_user_id, $plugin_title, $is_network_and_blog_admins );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
443 |
}
|
444 |
|
445 |
/**
|
@@ -469,4 +523,4 @@
|
|
469 |
}
|
470 |
|
471 |
#endregion
|
472 |
-
}
|
160 |
false,
|
161 |
isset( $msg['wp_user_id'] ) ? $msg['wp_user_id'] : null,
|
162 |
! empty( $msg['plugin'] ) ? $msg['plugin'] : null,
|
163 |
+
$is_network_and_blog_admins,
|
164 |
+
isset( $msg['dismissible'] ) ?
|
165 |
+
$msg['dismissible'] :
|
166 |
+
null
|
167 |
);
|
168 |
}
|
169 |
}
|
178 |
*
|
179 |
*/
|
180 |
function dismiss_notice_ajax_callback() {
|
181 |
+
check_admin_referer( 'fs_dismiss_notice_action' );
|
182 |
+
|
183 |
+
if ( ! is_numeric( $_POST['message_id'] ) ) {
|
184 |
+
$this->_sticky_storage->remove( $_POST['message_id'] );
|
185 |
+
}
|
186 |
+
|
187 |
wp_die();
|
188 |
}
|
189 |
|
227 |
return;
|
228 |
}
|
229 |
|
|
|
|
|
|
|
230 |
foreach ( $this->_notices as $id => $msg ) {
|
231 |
if ( isset( $msg['wp_user_id'] ) && is_numeric( $msg['wp_user_id'] ) ) {
|
232 |
if ( get_current_user_id() != $msg['wp_user_id'] ) {
|
269 |
$show_notice = call_user_func_array( 'fs_apply_filter', array(
|
270 |
$this->_module_unique_affix,
|
271 |
'show_admin_notice',
|
272 |
+
$this->show_admin_notices(),
|
273 |
$msg
|
274 |
) );
|
275 |
|
323 |
return false;
|
324 |
}
|
325 |
|
326 |
+
/**
|
327 |
+
* Check if admin notices should be shown on page. E.g., we don't want to show notices in the Visual Editor.
|
328 |
+
*
|
329 |
+
* @author Xiaheng Chen (@xhchen)
|
330 |
+
* @since 2.4.2
|
331 |
+
*
|
332 |
+
* @return bool
|
333 |
+
*/
|
334 |
+
function show_admin_notices() {
|
335 |
+
global $pagenow;
|
336 |
+
|
337 |
+
if ( 'about.php' === $pagenow ) {
|
338 |
+
// Don't show admin notices on the About page.
|
339 |
+
return false;
|
340 |
+
}
|
341 |
+
|
342 |
+
if ( $this->is_gutenberg_page() ) {
|
343 |
+
// Don't show admin notices in Gutenberg (visual editor).
|
344 |
+
return false;
|
345 |
+
}
|
346 |
+
|
347 |
+
return true;
|
348 |
+
}
|
349 |
+
|
350 |
/**
|
351 |
* Add admin message to admin messages queue, and hook to admin_notices / all_admin_notices if not yet hooked.
|
352 |
*
|
363 |
* @param string|null $plugin_title
|
364 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network
|
365 |
* and blog admin pages.
|
366 |
+
* @param bool|null $is_dismissible
|
367 |
+
* @param array $data
|
368 |
*
|
369 |
* @uses add_action()
|
370 |
*/
|
377 |
$store_if_sticky = true,
|
378 |
$wp_user_id = null,
|
379 |
$plugin_title = null,
|
380 |
+
$is_network_and_blog_admins = false,
|
381 |
+
$is_dismissible = null,
|
382 |
+
$data = array()
|
383 |
) {
|
384 |
$notices_type = $this->get_notices_type();
|
385 |
|
399 |
}
|
400 |
|
401 |
$message_object = array(
|
402 |
+
'message' => $message,
|
403 |
+
'title' => $title,
|
404 |
+
'type' => $type,
|
405 |
+
'sticky' => $is_sticky,
|
406 |
+
'id' => $id,
|
407 |
+
'manager_id' => $this->_id,
|
408 |
+
'plugin' => ( ! is_null( $plugin_title ) ? $plugin_title : $this->_title ),
|
409 |
+
'wp_user_id' => $wp_user_id,
|
410 |
+
'dismissible' => $is_dismissible,
|
411 |
+
'data' => $data
|
412 |
);
|
413 |
|
414 |
if ( $is_sticky && $store_if_sticky ) {
|
423 |
* @since 1.0.7
|
424 |
*
|
425 |
* @param string|string[] $ids
|
426 |
+
* @param bool $store
|
427 |
*/
|
428 |
+
function remove_sticky( $ids, $store = true ) {
|
429 |
if ( ! is_array( $ids ) ) {
|
430 |
$ids = array( $ids );
|
431 |
}
|
432 |
|
433 |
foreach ( $ids as $id ) {
|
434 |
// Remove from sticky storage.
|
435 |
+
$this->_sticky_storage->remove( $id, $store );
|
436 |
|
437 |
if ( isset( $this->_notices[ $id ] ) ) {
|
438 |
unset( $this->_notices[ $id ] );
|
468 |
* @param string|null $plugin_title
|
469 |
* @param bool $is_network_and_blog_admins Whether or not the message should be shown both on network
|
470 |
* and blog admin pages.
|
471 |
+
* @param bool $is_dimissible
|
472 |
+
* @param array $data
|
473 |
*/
|
474 |
+
function add_sticky( $message, $id, $title = '', $type = 'success', $wp_user_id = null, $plugin_title = null, $is_network_and_blog_admins = false, $is_dimissible = true, $data = array() ) {
|
475 |
if ( ! empty( $this->_module_unique_affix ) ) {
|
476 |
$message = fs_apply_filter( $this->_module_unique_affix, "sticky_message_{$id}", $message );
|
477 |
$title = fs_apply_filter( $this->_module_unique_affix, "sticky_title_{$id}", $title );
|
478 |
}
|
479 |
|
480 |
+
$this->add( $message, $title, $type, true, $id, true, $wp_user_id, $plugin_title, $is_network_and_blog_admins, $is_dimissible, $data );
|
481 |
+
}
|
482 |
+
|
483 |
+
/**
|
484 |
+
* Retrieves the data of an sticky notice.
|
485 |
+
*
|
486 |
+
* @author Leo Fajardo (@leorw)
|
487 |
+
* @since 2.4.3
|
488 |
+
*
|
489 |
+
* @param string $id Message ID.
|
490 |
+
*
|
491 |
+
* @return array|null
|
492 |
+
*/
|
493 |
+
function get_sticky( $id ) {
|
494 |
+
return isset( $this->_sticky_storage->{$id} ) ?
|
495 |
+
$this->_sticky_storage->{$id} :
|
496 |
+
null;
|
497 |
}
|
498 |
|
499 |
/**
|
523 |
}
|
524 |
|
525 |
#endregion
|
526 |
+
}
|
freemius/includes/managers/class-fs-clone-manager.php
ADDED
@@ -0,0 +1,1480 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @author Leo Fajardo (@leorw)
|
7 |
+
* @since 2.5.0
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
exit;
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Manages the detection of clones and provides the logged-in WordPress user with options for manually resolving them.
|
16 |
+
*
|
17 |
+
* @since 2.5.0
|
18 |
+
*
|
19 |
+
* @property int $clone_identification_timestamp
|
20 |
+
* @property int $temporary_duplicate_mode_selection_timestamp
|
21 |
+
* @property int $temporary_duplicate_notice_shown_timestamp
|
22 |
+
* @property string $request_handler_id
|
23 |
+
* @property int $request_handler_timestamp
|
24 |
+
* @property int $request_handler_retries_count
|
25 |
+
*/
|
26 |
+
class FS_Clone_Manager {
|
27 |
+
/**
|
28 |
+
* @var FS_Option_Manager
|
29 |
+
*/
|
30 |
+
private $_storage;
|
31 |
+
/**
|
32 |
+
* @var FS_Option_Manager
|
33 |
+
*/
|
34 |
+
private $_network_storage;
|
35 |
+
/**
|
36 |
+
* @var array {
|
37 |
+
* @type int $clone_identification_timestamp
|
38 |
+
* @type int $temporary_duplicate_mode_selection_timestamp
|
39 |
+
* @type int $temporary_duplicate_notice_shown_timestamp
|
40 |
+
* @type string $request_handler_id
|
41 |
+
* @type int $request_handler_timestamp
|
42 |
+
* @type int $request_handler_retries_count
|
43 |
+
* }
|
44 |
+
*/
|
45 |
+
private $_data;
|
46 |
+
/**
|
47 |
+
* @var array {
|
48 |
+
* @type array $new_blog_install_map
|
49 |
+
* }
|
50 |
+
*/
|
51 |
+
private $_network_data;
|
52 |
+
/**
|
53 |
+
* @var FS_Admin_Notices
|
54 |
+
*/
|
55 |
+
private $_notices;
|
56 |
+
/**
|
57 |
+
* @var FS_Logger
|
58 |
+
*/
|
59 |
+
protected $_logger;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @var int 3 minutes
|
63 |
+
*/
|
64 |
+
const CLONE_RESOLUTION_MAX_EXECUTION_TIME = 180;
|
65 |
+
/**
|
66 |
+
* @var int
|
67 |
+
*/
|
68 |
+
const CLONE_RESOLUTION_MAX_RETRIES = 3;
|
69 |
+
/**
|
70 |
+
* @var int
|
71 |
+
*/
|
72 |
+
const TEMPORARY_DUPLICATE_PERIOD = WP_FS__TIME_WEEK_IN_SEC * 2;
|
73 |
+
/**
|
74 |
+
* @var string
|
75 |
+
*/
|
76 |
+
const OPTION_NAME = 'clone_resolution';
|
77 |
+
/**
|
78 |
+
* @var string
|
79 |
+
*/
|
80 |
+
const OPTION_MANAGER_NAME = 'clone_management';
|
81 |
+
/**
|
82 |
+
* @var string
|
83 |
+
*/
|
84 |
+
const OPTION_TEMPORARY_DUPLICATE = 'temporary_duplicate';
|
85 |
+
/**
|
86 |
+
* @var string
|
87 |
+
*/
|
88 |
+
const OPTION_NEW_HOME = 'new_home';
|
89 |
+
|
90 |
+
#--------------------------------------------------------------------------------
|
91 |
+
#region Singleton
|
92 |
+
#--------------------------------------------------------------------------------
|
93 |
+
|
94 |
+
/**
|
95 |
+
* @var FS_Clone_Manager
|
96 |
+
*/
|
97 |
+
private static $_instance;
|
98 |
+
|
99 |
+
/**
|
100 |
+
* @return FS_Clone_Manager
|
101 |
+
*/
|
102 |
+
static function instance() {
|
103 |
+
if ( ! isset( self::$_instance ) ) {
|
104 |
+
self::$_instance = new self();
|
105 |
+
}
|
106 |
+
|
107 |
+
return self::$_instance;
|
108 |
+
}
|
109 |
+
|
110 |
+
#endregion
|
111 |
+
|
112 |
+
private function __construct() {
|
113 |
+
$this->_storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true );
|
114 |
+
$this->_network_storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true, true );
|
115 |
+
$this->_data = $this->_storage->get_option( self::OPTION_NAME, array() );
|
116 |
+
$this->_network_data = $this->_network_storage->get_option( self::OPTION_NAME, array() );
|
117 |
+
|
118 |
+
$this->_notices = FS_Admin_Notices::instance( 'global_clone_resolution_notices', '', '', true );
|
119 |
+
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . '_clone_manager', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
120 |
+
|
121 |
+
$defaults = array(
|
122 |
+
'clone_identification_timestamp' => null,
|
123 |
+
'temporary_duplicate_mode_selection_timestamp' => null,
|
124 |
+
'temporary_duplicate_notice_shown_timestamp' => null,
|
125 |
+
'request_handler_id' => null,
|
126 |
+
'request_handler_timestamp' => null,
|
127 |
+
'request_handler_retries_count' => null,
|
128 |
+
);
|
129 |
+
|
130 |
+
if ( ! is_array( $this->_data ) ) {
|
131 |
+
$this->_data = $defaults;
|
132 |
+
} else {
|
133 |
+
foreach ( $defaults as $name => $value ) {
|
134 |
+
$this->_data[ $name ] = isset( $this->_data[ $name ] ) ?
|
135 |
+
$this->_data[ $name ] :
|
136 |
+
$value;
|
137 |
+
}
|
138 |
+
}
|
139 |
+
|
140 |
+
if (
|
141 |
+
! is_array( $this->_network_data ) ||
|
142 |
+
! isset( $this->_network_data['new_blog_install_map'] )
|
143 |
+
) {
|
144 |
+
$this->_network_data = array( 'new_blog_install_map' => null );
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* @author Leo Fajardo (@leorw)
|
150 |
+
* @since 2.5.0
|
151 |
+
*/
|
152 |
+
function _init() {
|
153 |
+
if ( is_admin() ) {
|
154 |
+
if ( Freemius::is_admin_post() ) {
|
155 |
+
add_action( 'admin_post_fs_clone_resolution', array( $this, '_handle_clone_resolution' ) );
|
156 |
+
}
|
157 |
+
|
158 |
+
if (
|
159 |
+
empty( $this->get_clone_identification_timestamp() ) &&
|
160 |
+
(
|
161 |
+
! fs_is_network_admin() ||
|
162 |
+
! ( $this->is_clone_resolution_options_notice_shown() || $this->is_temporary_duplicate_notice_shown() )
|
163 |
+
)
|
164 |
+
) {
|
165 |
+
$this->hide_clone_admin_notices();
|
166 |
+
} else {
|
167 |
+
if ( Freemius::is_ajax() ) {
|
168 |
+
Freemius::add_ajax_action_static( 'handle_clone_resolution', array( $this, '_clone_resolution_action_ajax_handler' ) );
|
169 |
+
} else if ( ! Freemius::is_cron() && ! Freemius::is_admin_post() ) {
|
170 |
+
$this->maybe_show_clone_admin_notice();
|
171 |
+
|
172 |
+
add_action( 'admin_footer', array( $this, '_add_clone_resolution_javascript' ) );
|
173 |
+
}
|
174 |
+
}
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Retrieves the timestamp that was stored when a clone was identified.
|
180 |
+
*
|
181 |
+
* @return int|null
|
182 |
+
*/
|
183 |
+
function get_clone_identification_timestamp() {
|
184 |
+
return $this->clone_identification_timestamp;
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Stores the time when a clone was identified.
|
189 |
+
*/
|
190 |
+
function store_clone_identification_timestamp() {
|
191 |
+
$this->clone_identification_timestamp = time();
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Retrieves the timestamp for the temporary duplicate mode's expiration.
|
196 |
+
*
|
197 |
+
* @return int
|
198 |
+
*/
|
199 |
+
function get_temporary_duplicate_expiration_timestamp() {
|
200 |
+
$temporary_duplicate_mode_start_timestamp = $this->was_temporary_duplicate_mode_selected() ?
|
201 |
+
$this->temporary_duplicate_mode_selection_timestamp :
|
202 |
+
$this->get_clone_identification_timestamp();
|
203 |
+
|
204 |
+
return ( $temporary_duplicate_mode_start_timestamp + self::TEMPORARY_DUPLICATE_PERIOD );
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Determines if the SDK should handle clones. The SDK handles clones only up to 3 times with 3 min interval.
|
209 |
+
*
|
210 |
+
* @return bool
|
211 |
+
*/
|
212 |
+
private function should_handle_clones() {
|
213 |
+
if ( ! isset( $this->request_handler_timestamp ) ) {
|
214 |
+
return true;
|
215 |
+
}
|
216 |
+
|
217 |
+
if ( $this->request_handler_retries_count >= self::CLONE_RESOLUTION_MAX_RETRIES ) {
|
218 |
+
return false;
|
219 |
+
}
|
220 |
+
|
221 |
+
// Give the logic that handles clones enough time to finish (it is given 3 minutes for now).
|
222 |
+
return ( time() > ( $this->request_handler_timestamp + self::CLONE_RESOLUTION_MAX_EXECUTION_TIME ) );
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Executes the clones handler logic if it should be executed, i.e., based on the return value of the should_handle_clones() method.
|
227 |
+
*
|
228 |
+
* @author Leo Fajardo (@leorw)
|
229 |
+
* @since 2.5.0
|
230 |
+
*/
|
231 |
+
function maybe_run_clone_resolution() {
|
232 |
+
if ( ! $this->should_handle_clones() ) {
|
233 |
+
return;
|
234 |
+
}
|
235 |
+
|
236 |
+
$this->request_handler_retries_count = isset( $this->request_handler_retries_count ) ?
|
237 |
+
( $this->request_handler_retries_count + 1 ) :
|
238 |
+
1;
|
239 |
+
|
240 |
+
$this->request_handler_timestamp = time();
|
241 |
+
|
242 |
+
$handler_id = ( rand() . microtime() );
|
243 |
+
$this->request_handler_id = $handler_id;
|
244 |
+
|
245 |
+
// Add cookies to trigger request with the same user access permissions.
|
246 |
+
$cookies = array();
|
247 |
+
foreach ( $_COOKIE as $name => $value ) {
|
248 |
+
$cookies[] = new WP_Http_Cookie( array(
|
249 |
+
'name' => $name,
|
250 |
+
'value' => $value,
|
251 |
+
) );
|
252 |
+
}
|
253 |
+
|
254 |
+
wp_remote_post(
|
255 |
+
admin_url( 'admin-post.php' ),
|
256 |
+
array(
|
257 |
+
'method' => 'POST',
|
258 |
+
'body' => array(
|
259 |
+
'action' => 'fs_clone_resolution',
|
260 |
+
'handler_id' => $handler_id,
|
261 |
+
),
|
262 |
+
'timeout' => 0.01,
|
263 |
+
'blocking' => false,
|
264 |
+
'sslverify' => false,
|
265 |
+
'cookies' => $cookies,
|
266 |
+
)
|
267 |
+
);
|
268 |
+
}
|
269 |
+
|
270 |
+
/**
|
271 |
+
* Executes the clones handler logic.
|
272 |
+
*
|
273 |
+
* @author Leo Fajardo (@leorw)
|
274 |
+
* @since 2.5.0
|
275 |
+
*/
|
276 |
+
function _handle_clone_resolution() {
|
277 |
+
$handler_id = fs_request_get( 'handler_id' );
|
278 |
+
|
279 |
+
if ( empty( $handler_id ) ) {
|
280 |
+
return;
|
281 |
+
}
|
282 |
+
|
283 |
+
if (
|
284 |
+
! isset( $this->request_handler_id ) ||
|
285 |
+
$this->request_handler_id !== $handler_id
|
286 |
+
) {
|
287 |
+
return;
|
288 |
+
}
|
289 |
+
|
290 |
+
if ( ! $this->try_automatic_resolution() ) {
|
291 |
+
$this->store_clone_identification_timestamp();
|
292 |
+
$this->clear_temporary_duplicate_notice_shown_timestamp();
|
293 |
+
}
|
294 |
+
}
|
295 |
+
|
296 |
+
#--------------------------------------------------------------------------------
|
297 |
+
#region Automatic Clone Resolution
|
298 |
+
#--------------------------------------------------------------------------------
|
299 |
+
|
300 |
+
/**
|
301 |
+
* @var array All installs cache.
|
302 |
+
*/
|
303 |
+
private $all_installs;
|
304 |
+
|
305 |
+
/**
|
306 |
+
* Checks if a given instance's install is a clone of another subsite in the network.
|
307 |
+
*
|
308 |
+
* @author Vova Feldman (@svovaf)
|
309 |
+
*
|
310 |
+
* @return FS_Site
|
311 |
+
*/
|
312 |
+
private function find_network_subsite_clone_install( Freemius $instance ) {
|
313 |
+
if ( ! is_multisite() ) {
|
314 |
+
// Not a multi-site network.
|
315 |
+
return null;
|
316 |
+
}
|
317 |
+
|
318 |
+
if ( ! isset( $this->all_installs ) ) {
|
319 |
+
$this->all_installs = Freemius::get_all_modules_sites();
|
320 |
+
}
|
321 |
+
|
322 |
+
// Check if there's another blog that has the same site.
|
323 |
+
$module_type = $instance->get_module_type();
|
324 |
+
$sites_by_module_type = ! empty( $this->all_installs[ $module_type ] ) ?
|
325 |
+
$this->all_installs[ $module_type ] :
|
326 |
+
array();
|
327 |
+
|
328 |
+
$slug = $instance->get_slug();
|
329 |
+
$sites_by_slug = ! empty( $sites_by_module_type[ $slug ] ) ?
|
330 |
+
$sites_by_module_type[ $slug ] :
|
331 |
+
array();
|
332 |
+
|
333 |
+
$current_blog_id = get_current_blog_id();
|
334 |
+
|
335 |
+
$current_install = $instance->get_site();
|
336 |
+
|
337 |
+
foreach ( $sites_by_slug as $site ) {
|
338 |
+
if (
|
339 |
+
$current_install->id == $site->id &&
|
340 |
+
$current_blog_id != $site->blog_id
|
341 |
+
) {
|
342 |
+
// Clone is identical to an install on another subsite in the network.
|
343 |
+
return $site;
|
344 |
+
}
|
345 |
+
}
|
346 |
+
|
347 |
+
return null;
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Tries to find a different install of the context product that is associated with the current URL and loads it.
|
352 |
+
*
|
353 |
+
* @author Leo Fajardo (@leorw)
|
354 |
+
* @since 2.5.0
|
355 |
+
*
|
356 |
+
* @param Freemius $instance
|
357 |
+
* @param string $url
|
358 |
+
*
|
359 |
+
* @return object
|
360 |
+
*/
|
361 |
+
private function find_other_install_by_url( Freemius $instance, $url ) {
|
362 |
+
$result = $instance->get_api_user_scope()->get( "/plugins/{$instance->get_id()}/installs.json?search=" . urlencode( $url ) . "&all=true", true );
|
363 |
+
|
364 |
+
$current_install = $instance->get_site();
|
365 |
+
|
366 |
+
if ( $instance->is_api_result_object( $result, 'installs' ) ) {
|
367 |
+
foreach ( $result->installs as $install ) {
|
368 |
+
if ( $install->id == $current_install->id ) {
|
369 |
+
continue;
|
370 |
+
}
|
371 |
+
|
372 |
+
if (
|
373 |
+
$instance->is_only_premium() &&
|
374 |
+
! FS_Plugin_License::is_valid_id( $install->license_id )
|
375 |
+
) {
|
376 |
+
continue;
|
377 |
+
}
|
378 |
+
|
379 |
+
// When searching for installs by a URL, the API will first strip any paths and search for any matching installs by the subdomain. Therefore, we need to test if there's a match between the current URL and the install's URL before continuing.
|
380 |
+
if ( $url !== fs_strip_url_protocol( untrailingslashit( $install->url ) ) ) {
|
381 |
+
continue;
|
382 |
+
}
|
383 |
+
|
384 |
+
// Found a different install that is associated with the current URL, load it and replace the current install with it if no updated install is found.
|
385 |
+
return $install;
|
386 |
+
}
|
387 |
+
}
|
388 |
+
|
389 |
+
return null;
|
390 |
+
}
|
391 |
+
|
392 |
+
/**
|
393 |
+
* Delete the current install associated with a given instance and opt-in/activate-license to create a fresh install.
|
394 |
+
*
|
395 |
+
* @author Vova Feldman (@svovaf)
|
396 |
+
* @since 2.5.0
|
397 |
+
*
|
398 |
+
* @param Freemius $instance
|
399 |
+
* @param string|false $license_key
|
400 |
+
*
|
401 |
+
* @return bool TRUE if successfully connected. FALSE if failed and had to restore install from backup.
|
402 |
+
*/
|
403 |
+
private function delete_install_and_connect( Freemius $instance, $license_key = false ) {
|
404 |
+
$user = Freemius::_get_user_by_id( $instance->get_site()->user_id );
|
405 |
+
|
406 |
+
$instance->delete_current_install( true );
|
407 |
+
|
408 |
+
if ( ! is_object( $user ) ) {
|
409 |
+
// Get logged-in WordPress user.
|
410 |
+
$current_user = Freemius::_get_current_wp_user();
|
411 |
+
|
412 |
+
// Find the relevant FS user by email address.
|
413 |
+
$user = Freemius::_get_user_by_email( $current_user->user_email );
|
414 |
+
}
|
415 |
+
|
416 |
+
if ( is_object( $user ) ) {
|
417 |
+
// When a clone is found, we prefer to use the same user of the original install for the opt-in.
|
418 |
+
$instance->install_with_user( $user, $license_key, false, false );
|
419 |
+
} else {
|
420 |
+
// If no user is found, activate with the license.
|
421 |
+
$instance->opt_in(
|
422 |
+
false,
|
423 |
+
false,
|
424 |
+
false,
|
425 |
+
$license_key
|
426 |
+
);
|
427 |
+
}
|
428 |
+
|
429 |
+
if ( is_object( $instance->get_site() ) ) {
|
430 |
+
// Install successfully created.
|
431 |
+
return true;
|
432 |
+
}
|
433 |
+
|
434 |
+
// Restore from backup.
|
435 |
+
$instance->restore_backup_site();
|
436 |
+
|
437 |
+
return false;
|
438 |
+
}
|
439 |
+
|
440 |
+
/**
|
441 |
+
* Try to resolve the clone situation automatically.
|
442 |
+
*
|
443 |
+
* @param Freemius $instance
|
444 |
+
* @param string $current_url
|
445 |
+
* @param bool $is_localhost
|
446 |
+
* @param bool|null $is_clone_of_network_subsite
|
447 |
+
*
|
448 |
+
* @return bool If managed to automatically resolve the clone.
|
449 |
+
*/
|
450 |
+
private function try_resolve_clone_automatically( Freemius $instance, $current_url, $is_localhost, $is_clone_of_network_subsite = null ) {
|
451 |
+
// Try to find a different install of the context product that is associated with the current URL.
|
452 |
+
$associated_install = $this->find_other_install_by_url( $instance, $current_url );
|
453 |
+
|
454 |
+
if ( is_object( $associated_install ) ) {
|
455 |
+
// Replace the current install with a different install that is associated with the current URL.
|
456 |
+
$instance->store_site( new FS_Site( clone $associated_install ) );
|
457 |
+
$instance->sync_install( array( 'is_new_site' => true ), true );
|
458 |
+
|
459 |
+
return true;
|
460 |
+
}
|
461 |
+
|
462 |
+
if ( ! $instance->is_premium() ) {
|
463 |
+
// For free products, opt-in with the context user to create new install.
|
464 |
+
return $this->delete_install_and_connect( $instance );
|
465 |
+
}
|
466 |
+
|
467 |
+
$license = $instance->_get_license();
|
468 |
+
$can_activate_license = ( is_object( $license ) && ! $license->is_utilized( $is_localhost ) );
|
469 |
+
|
470 |
+
if ( ! $can_activate_license ) {
|
471 |
+
// License can't be activated, therefore, can't be automatically resolved.
|
472 |
+
return false;
|
473 |
+
}
|
474 |
+
|
475 |
+
$is_clone_of_network_subsite = ( ! is_null( $is_clone_of_network_subsite ) ) ?
|
476 |
+
$is_clone_of_network_subsite :
|
477 |
+
is_object( $this->find_network_subsite_clone_install( $instance ) );
|
478 |
+
|
479 |
+
if (
|
480 |
+
$is_clone_of_network_subsite ||
|
481 |
+
WP_FS__IS_LOCALHOST_FOR_SERVER ||
|
482 |
+
$is_localhost
|
483 |
+
) {
|
484 |
+
// If the site is a clone of another subsite in the network, or a localhost one, try to auto activate the license.
|
485 |
+
return $this->delete_install_and_connect( $instance, $license->secret_key );
|
486 |
+
}
|
487 |
+
|
488 |
+
return false;
|
489 |
+
}
|
490 |
+
|
491 |
+
/**
|
492 |
+
* Tries to recover the install of a newly created subsite or resolve it if it's a clone.
|
493 |
+
*
|
494 |
+
* @author Leo Fajardo (@leorw)
|
495 |
+
* @since 2.5.0
|
496 |
+
*
|
497 |
+
* @param Freemius $instance
|
498 |
+
*/
|
499 |
+
function maybe_resolve_new_subsite_install_automatically( Freemius $instance ) {
|
500 |
+
if ( ! $instance->is_user_in_admin() ) {
|
501 |
+
// Try to recover an install or resolve a clone only when there's a user in admin to prevent doing it prematurely (e.g., the install can get replaced with clone data again).
|
502 |
+
return;
|
503 |
+
}
|
504 |
+
|
505 |
+
if ( ! is_multisite() ) {
|
506 |
+
return;
|
507 |
+
}
|
508 |
+
|
509 |
+
$new_blog_install_map = $this->new_blog_install_map;
|
510 |
+
|
511 |
+
if ( empty( $new_blog_install_map ) || ! is_array( $new_blog_install_map ) ) {
|
512 |
+
return;
|
513 |
+
}
|
514 |
+
|
515 |
+
$is_network_admin = fs_is_network_admin();
|
516 |
+
|
517 |
+
if ( ! $is_network_admin ) {
|
518 |
+
// If not in network admin, handle the current site.
|
519 |
+
$blog_id = get_current_blog_id();
|
520 |
+
} else {
|
521 |
+
// If in network admin, handle only the first site.
|
522 |
+
$blog_ids = array_keys( $new_blog_install_map );
|
523 |
+
$blog_id = $blog_ids[0];
|
524 |
+
}
|
525 |
+
|
526 |
+
if ( ! isset( $new_blog_install_map[ $blog_id ] ) ) {
|
527 |
+
// There's no site to handle.
|
528 |
+
return;
|
529 |
+
}
|
530 |
+
|
531 |
+
$expected_install_id = $new_blog_install_map[ $blog_id ]['install_id'];
|
532 |
+
|
533 |
+
$current_install = $instance->get_install_by_blog_id( $blog_id );
|
534 |
+
$current_install_id = is_object( $current_install ) ?
|
535 |
+
$current_install->id :
|
536 |
+
null;
|
537 |
+
|
538 |
+
if ( $expected_install_id == $current_install_id ) {
|
539 |
+
// Remove the current site's information from the map to prevent handling it again.
|
540 |
+
$this->remove_new_blog_install_info_from_storage( $blog_id );
|
541 |
+
|
542 |
+
return;
|
543 |
+
}
|
544 |
+
|
545 |
+
$instance->switch_to_blog( $blog_id );
|
546 |
+
|
547 |
+
$current_url = fs_strip_url_protocol( untrailingslashit( get_site_url() ) );
|
548 |
+
$current_install_url = is_object( $current_install ) ?
|
549 |
+
fs_strip_url_protocol( untrailingslashit( $current_install->url ) ) :
|
550 |
+
null;
|
551 |
+
|
552 |
+
// This can be `false` even if the install is a clone as the URL can be updated as part of the cloning process.
|
553 |
+
$is_clone = ( ! is_null( $current_install_url ) && $current_url !== $current_install_url );
|
554 |
+
|
555 |
+
if ( ! FS_Site::is_valid_id( $expected_install_id ) ) {
|
556 |
+
$expected_install = null;
|
557 |
+
} else {
|
558 |
+
$expected_install = $instance->fetch_install_by_id( $expected_install_id );
|
559 |
+
}
|
560 |
+
|
561 |
+
if ( FS_Api::is_api_result_entity( $expected_install ) ) {
|
562 |
+
// Replace the current install with the expected install.
|
563 |
+
$instance->store_site( new FS_Site( clone $expected_install ) );
|
564 |
+
$instance->sync_install( array( 'is_new_site' => true ), true );
|
565 |
+
} else {
|
566 |
+
$network_subsite_clone_install = null;
|
567 |
+
|
568 |
+
if ( ! $is_clone ) {
|
569 |
+
// It is possible that `$is_clone` is `false` but the install is actually a clone as the following call checks the install ID and not the URL.
|
570 |
+
$network_subsite_clone_install = $this->find_network_subsite_clone_install( $instance );
|
571 |
+
}
|
572 |
+
|
573 |
+
if ( $is_clone || is_object( $network_subsite_clone_install ) ) {
|
574 |
+
// If there's no expected install (or it couldn't be fetched) and the current install is a clone, try to resolve the clone automatically.
|
575 |
+
$is_localhost = FS_Site::is_localhost_by_address( $current_url );
|
576 |
+
|
577 |
+
$resolved = $this->try_resolve_clone_automatically( $instance, $current_url, $is_localhost, is_object( $network_subsite_clone_install ) );
|
578 |
+
|
579 |
+
if ( ! $resolved && is_object( $network_subsite_clone_install ) ) {
|
580 |
+
if ( empty( $this->get_clone_identification_timestamp() ) ) {
|
581 |
+
$this->store_clone_identification_timestamp();
|
582 |
+
}
|
583 |
+
|
584 |
+
// Since the clone couldn't be identified based on the URL, replace the stored install with the cloned install so that the manual clone resolution notice will appear.
|
585 |
+
$instance->store_site( clone $network_subsite_clone_install );
|
586 |
+
}
|
587 |
+
}
|
588 |
+
}
|
589 |
+
|
590 |
+
$instance->restore_current_blog();
|
591 |
+
|
592 |
+
// Remove the current site's information from the map to prevent handling it again.
|
593 |
+
$this->remove_new_blog_install_info_from_storage( $blog_id );
|
594 |
+
}
|
595 |
+
|
596 |
+
/**
|
597 |
+
* If a new install was created after creating a new subsite, its ID is stored in the blog-install map so that it can be recovered in case it's replaced with a clone install (e.g., when the newly created subsite is a clone).
|
598 |
+
*
|
599 |
+
* @author Leo Fajardo (@leorw)
|
600 |
+
* @since 2.5.0
|
601 |
+
*
|
602 |
+
* @param int $blog_id
|
603 |
+
* @param FS_Site $site
|
604 |
+
*/
|
605 |
+
function store_new_blog_install_info( $blog_id, $site = null ) {
|
606 |
+
$new_blog_install_map = $this->new_blog_install_map;
|
607 |
+
|
608 |
+
if (
|
609 |
+
empty( $new_blog_install_map ) ||
|
610 |
+
! is_array( $new_blog_install_map )
|
611 |
+
) {
|
612 |
+
$new_blog_install_map = array();
|
613 |
+
}
|
614 |
+
|
615 |
+
$install_id = null;
|
616 |
+
|
617 |
+
if ( is_object( $site ) ) {
|
618 |
+
$install_id = $site->id;
|
619 |
+
}
|
620 |
+
|
621 |
+
$new_blog_install_map[ $blog_id ] = array( 'install_id' => $install_id );
|
622 |
+
|
623 |
+
$this->new_blog_install_map = $new_blog_install_map;
|
624 |
+
}
|
625 |
+
|
626 |
+
/**
|
627 |
+
* @author Leo Fajardo (@leorw)
|
628 |
+
* @since 2.5.0
|
629 |
+
*
|
630 |
+
* @param int $blog_id
|
631 |
+
*/
|
632 |
+
private function remove_new_blog_install_info_from_storage( $blog_id ) {
|
633 |
+
$new_blog_install_map = $this->new_blog_install_map;
|
634 |
+
|
635 |
+
unset( $new_blog_install_map[ $blog_id ] );
|
636 |
+
$this->new_blog_install_map = $new_blog_install_map;
|
637 |
+
}
|
638 |
+
|
639 |
+
/**
|
640 |
+
* Tries to resolve all clones automatically.
|
641 |
+
*
|
642 |
+
* @author Leo Fajardo (@leorw)
|
643 |
+
* @since 2.5.0
|
644 |
+
*
|
645 |
+
* @return bool If managed to automatically resolve all clones.
|
646 |
+
*/
|
647 |
+
private function try_automatic_resolution() {
|
648 |
+
$this->_logger->entrance();
|
649 |
+
|
650 |
+
$current_url = fs_strip_url_protocol( untrailingslashit( get_site_url() ) );
|
651 |
+
$is_localhost = FS_Site::is_localhost_by_address( $current_url );
|
652 |
+
|
653 |
+
$require_manual_resolution = false;
|
654 |
+
|
655 |
+
$instances = Freemius::_get_all_instances();
|
656 |
+
|
657 |
+
foreach ( $instances as $instance ) {
|
658 |
+
if ( ! $instance->is_registered() ) {
|
659 |
+
continue;
|
660 |
+
}
|
661 |
+
|
662 |
+
if ( ! $instance->is_clone() ) {
|
663 |
+
continue;
|
664 |
+
}
|
665 |
+
|
666 |
+
if ( ! $this->try_resolve_clone_automatically( $instance, $current_url, $is_localhost ) ) {
|
667 |
+
$require_manual_resolution = true;
|
668 |
+
}
|
669 |
+
}
|
670 |
+
|
671 |
+
return ( ! $require_manual_resolution );
|
672 |
+
}
|
673 |
+
|
674 |
+
#endregion
|
675 |
+
|
676 |
+
#--------------------------------------------------------------------------------
|
677 |
+
#region Manual Clone Resolution
|
678 |
+
#--------------------------------------------------------------------------------
|
679 |
+
|
680 |
+
/**
|
681 |
+
* @author Leo Fajardo (@leorw)
|
682 |
+
* @since 2.5.0
|
683 |
+
*/
|
684 |
+
function _add_clone_resolution_javascript() {
|
685 |
+
$vars = array( 'ajax_action' => Freemius::get_ajax_action_static( 'handle_clone_resolution' ) );
|
686 |
+
|
687 |
+
fs_require_once_template( 'clone-resolution-js.php', $vars );
|
688 |
+
}
|
689 |
+
|
690 |
+
/**
|
691 |
+
* @author Leo Fajardo (@leorw)
|
692 |
+
* @since 2.5.0
|
693 |
+
*/
|
694 |
+
function _clone_resolution_action_ajax_handler() {
|
695 |
+
$this->_logger->entrance();
|
696 |
+
|
697 |
+
check_ajax_referer( Freemius::get_ajax_action_static( 'handle_clone_resolution' ), 'security' );
|
698 |
+
|
699 |
+
$clone_action = fs_request_get( 'clone_action' );
|
700 |
+
|
701 |
+
if ( empty( $clone_action ) ) {
|
702 |
+
Freemius::shoot_ajax_failure( array(
|
703 |
+
'message' => fs_text_inline( 'Invalid clone resolution action.', 'invalid-clone-resolution-action-error' ),
|
704 |
+
'redirect_url' => '',
|
705 |
+
) );
|
706 |
+
}
|
707 |
+
|
708 |
+
$result = array();
|
709 |
+
|
710 |
+
if ( self::OPTION_TEMPORARY_DUPLICATE === $clone_action ) {
|
711 |
+
$this->store_temporary_duplicate_timestamp();
|
712 |
+
} else {
|
713 |
+
$result = $this->resolve_cloned_sites( $clone_action );
|
714 |
+
}
|
715 |
+
|
716 |
+
if ( 'temporary_duplicate_license_activation' !== $clone_action ) {
|
717 |
+
$this->remove_clone_resolution_options_notice();
|
718 |
+
} else {
|
719 |
+
$this->remove_temporary_duplicate_notice();
|
720 |
+
}
|
721 |
+
|
722 |
+
Freemius::shoot_ajax_success( $result );
|
723 |
+
}
|
724 |
+
|
725 |
+
/**
|
726 |
+
* @author Leo Fajardo (@leorw)
|
727 |
+
* @since 2.5.0
|
728 |
+
*
|
729 |
+
* @param string $clone_action
|
730 |
+
*/
|
731 |
+
private function resolve_cloned_sites( $clone_action ) {
|
732 |
+
$this->_logger->entrance();
|
733 |
+
|
734 |
+
$instances_with_clone_count = 0;
|
735 |
+
$instance_with_error = null;
|
736 |
+
$has_error = false;
|
737 |
+
|
738 |
+
$instances = Freemius::_get_all_instances();
|
739 |
+
|
740 |
+
foreach ( $instances as $instance ) {
|
741 |
+
if ( ! $instance->is_registered() ) {
|
742 |
+
continue;
|
743 |
+
}
|
744 |
+
|
745 |
+
if ( ! $instance->is_clone() ) {
|
746 |
+
continue;
|
747 |
+
}
|
748 |
+
|
749 |
+
$instances_with_clone_count ++;
|
750 |
+
|
751 |
+
if ( FS_Clone_Manager::OPTION_NEW_HOME === $clone_action ) {
|
752 |
+
$instance->sync_install( array( 'is_new_site' => true ), true );
|
753 |
+
} else {
|
754 |
+
$instance->_handle_long_term_duplicate();
|
755 |
+
|
756 |
+
if ( ! is_object( $instance->get_site() ) ) {
|
757 |
+
$has_error = true;
|
758 |
+
|
759 |
+
if ( ! is_object( $instance_with_error ) ) {
|
760 |
+
$instance_with_error = $instance;
|
761 |
+
}
|
762 |
+
}
|
763 |
+
}
|
764 |
+
}
|
765 |
+
|
766 |
+
$redirect_url = '';
|
767 |
+
|
768 |
+
if (
|
769 |
+
1 === $instances_with_clone_count &&
|
770 |
+
$has_error
|
771 |
+
) {
|
772 |
+
$redirect_url = $instance_with_error->get_activation_url();
|
773 |
+
}
|
774 |
+
|
775 |
+
return ( array( 'redirect_url' => $redirect_url ) );
|
776 |
+
}
|
777 |
+
|
778 |
+
/**
|
779 |
+
* @author Leo Fajardo (@leorw)
|
780 |
+
* @since 2.5.0
|
781 |
+
*/
|
782 |
+
private function hide_clone_admin_notices() {
|
783 |
+
$this->remove_clone_resolution_options_notice( false );
|
784 |
+
$this->remove_temporary_duplicate_notice( false );
|
785 |
+
}
|
786 |
+
|
787 |
+
/**
|
788 |
+
* @author Leo Fajardo (@leorw)
|
789 |
+
* @since 2.5.0
|
790 |
+
*/
|
791 |
+
private function maybe_show_clone_admin_notice() {
|
792 |
+
$this->_logger->entrance();
|
793 |
+
|
794 |
+
if ( fs_is_network_admin() ) {
|
795 |
+
$existing_notice_ids = $this->maybe_remove_notices();
|
796 |
+
|
797 |
+
if ( ! empty( $existing_notice_ids ) ) {
|
798 |
+
fs_enqueue_local_style( 'fs_clone_resolution_notice', '/admin/clone-resolution.css' );
|
799 |
+
}
|
800 |
+
|
801 |
+
return;
|
802 |
+
}
|
803 |
+
|
804 |
+
$first_instance_with_clone = null;
|
805 |
+
|
806 |
+
$site_urls = array();
|
807 |
+
$sites_with_license_urls = array();
|
808 |
+
$sites_with_premium_version_count = 0;
|
809 |
+
$product_ids = array();
|
810 |
+
$product_titles = array();
|
811 |
+
|
812 |
+
$instances = Freemius::_get_all_instances();
|
813 |
+
|
814 |
+
foreach ( $instances as $instance ) {
|
815 |
+
if ( ! $instance->is_registered() ) {
|
816 |
+
continue;
|
817 |
+
}
|
818 |
+
|
819 |
+
if ( ! $instance->is_clone() ) {
|
820 |
+
continue;
|
821 |
+
}
|
822 |
+
|
823 |
+
$install = $instance->get_site();
|
824 |
+
|
825 |
+
$site_urls[] = $install->url;
|
826 |
+
$product_ids[] = $instance->get_id();
|
827 |
+
$product_titles[] = $instance->get_plugin_title();
|
828 |
+
|
829 |
+
if ( is_null( $first_instance_with_clone ) ) {
|
830 |
+
$first_instance_with_clone = $instance;
|
831 |
+
}
|
832 |
+
|
833 |
+
if ( is_object( $instance->_get_license() ) ) {
|
834 |
+
$sites_with_license_urls[] = $install->url;
|
835 |
+
}
|
836 |
+
|
837 |
+
if ( $instance->is_premium() ) {
|
838 |
+
$sites_with_premium_version_count ++;
|
839 |
+
}
|
840 |
+
}
|
841 |
+
|
842 |
+
if ( empty( $site_urls ) && empty( $sites_with_license_urls ) ) {
|
843 |
+
$this->hide_clone_admin_notices();
|
844 |
+
|
845 |
+
return;
|
846 |
+
}
|
847 |
+
|
848 |
+
$site_urls = array_unique( $site_urls );
|
849 |
+
$sites_with_license_urls = array_unique( $sites_with_license_urls );
|
850 |
+
|
851 |
+
$module_label = fs_text_inline( 'products', 'products' );
|
852 |
+
$admin_notice_module_title = null;
|
853 |
+
|
854 |
+
$has_temporary_duplicate_mode_expired = $this->has_temporary_duplicate_mode_expired();
|
855 |
+
|
856 |
+
if (
|
857 |
+
! $this->was_temporary_duplicate_mode_selected() ||
|
858 |
+
$has_temporary_duplicate_mode_expired
|
859 |
+
) {
|
860 |
+
if ( ! empty( $site_urls ) ) {
|
861 |
+
fs_enqueue_local_style( 'fs_clone_resolution_notice', '/admin/clone-resolution.css' );
|
862 |
+
|
863 |
+
$doc_url = 'https://freemius.com/help/documentation/wordpress-sdk/safe-mode-clone-resolution-duplicate-website/';
|
864 |
+
|
865 |
+
if ( 1 === count( $instances ) ) {
|
866 |
+
$doc_url = fs_apply_filter(
|
867 |
+
$first_instance_with_clone->get_unique_affix(),
|
868 |
+
'clone_resolution_documentation_url',
|
869 |
+
$doc_url
|
870 |
+
);
|
871 |
+
}
|
872 |
+
|
873 |
+
$this->add_manual_clone_resolution_admin_notice(
|
874 |
+
$product_ids,
|
875 |
+
$product_titles,
|
876 |
+
$site_urls,
|
877 |
+
get_site_url(),
|
878 |
+
( count( $site_urls ) === count( $sites_with_license_urls ) ),
|
879 |
+
( count( $site_urls ) === $sites_with_premium_version_count ),
|
880 |
+
$doc_url
|
881 |
+
);
|
882 |
+
}
|
883 |
+
|
884 |
+
return;
|
885 |
+
}
|
886 |
+
|
887 |
+
if ( empty( $sites_with_license_urls ) ) {
|
888 |
+
return;
|
889 |
+
}
|
890 |
+
|
891 |
+
if ( ! $this->is_temporary_duplicate_notice_shown() ) {
|
892 |
+
$last_time_temporary_duplicate_notice_shown = $this->last_time_temporary_duplicate_notice_was_shown();
|
893 |
+
$was_temporary_duplicate_notice_shown_before = is_numeric( $last_time_temporary_duplicate_notice_shown );
|
894 |
+
|
895 |
+
if ( $was_temporary_duplicate_notice_shown_before ) {
|
896 |
+
$temporary_duplicate_mode_expiration_timestamp = $this->get_temporary_duplicate_expiration_timestamp();
|
897 |
+
$current_time = time();
|
898 |
+
|
899 |
+
if (
|
900 |
+
$current_time > $temporary_duplicate_mode_expiration_timestamp ||
|
901 |
+
$current_time < ( $temporary_duplicate_mode_expiration_timestamp - ( 2 * WP_FS__TIME_24_HOURS_IN_SEC ) )
|
902 |
+
) {
|
903 |
+
// Do not show the notice if the temporary duplicate mode has already expired or it will expire more than 2 days from now.
|
904 |
+
return;
|
905 |
+
}
|
906 |
+
}
|
907 |
+
}
|
908 |
+
|
909 |
+
if ( 1 === count( $sites_with_license_urls ) ) {
|
910 |
+
$module_label = $first_instance_with_clone->get_module_label( true );
|
911 |
+
$admin_notice_module_title = $first_instance_with_clone->get_plugin_title();
|
912 |
+
}
|
913 |
+
|
914 |
+
fs_enqueue_local_style( 'fs_clone_resolution_notice', '/admin/clone-resolution.css' );
|
915 |
+
|
916 |
+
$this->add_temporary_duplicate_sticky_notice(
|
917 |
+
$product_ids,
|
918 |
+
$this->get_temporary_duplicate_admin_notice_string( $sites_with_license_urls, $product_titles, $module_label ),
|
919 |
+
$admin_notice_module_title
|
920 |
+
);
|
921 |
+
}
|
922 |
+
|
923 |
+
/**
|
924 |
+
* Removes the notices from the storage if the context product is either no longer active on the context subsite or it's active but there's no longer any clone. This prevents the notices from being shown on the network-level admin page when they are no longer relevant.
|
925 |
+
*
|
926 |
+
* @author Leo Fajardo (@leorw)
|
927 |
+
* @since 2.5.1
|
928 |
+
*
|
929 |
+
* @return string[]
|
930 |
+
*/
|
931 |
+
private function maybe_remove_notices() {
|
932 |
+
$notices = array(
|
933 |
+
'clone_resolution_options_notice' => $this->_notices->get_sticky( 'clone_resolution_options_notice', true ),
|
934 |
+
'temporary_duplicate_notice' => $this->_notices->get_sticky( 'temporary_duplicate_notice', true ),
|
935 |
+
);
|
936 |
+
|
937 |
+
$instances = Freemius::_get_all_instances();
|
938 |
+
|
939 |
+
foreach ( $notices as $id => $notice ) {
|
940 |
+
if ( ! is_array( $notice ) ) {
|
941 |
+
unset( $notices[ $id ] );
|
942 |
+
continue;
|
943 |
+
}
|
944 |
+
|
945 |
+
if ( empty( $notice['data'] ) || ! is_array( $notice['data'] ) ) {
|
946 |
+
continue;
|
947 |
+
}
|
948 |
+
|
949 |
+
if ( empty( $notice['data']['product_ids'] ) || empty( $notice['data']['blog_id'] ) ) {
|
950 |
+
continue;
|
951 |
+
}
|
952 |
+
|
953 |
+
$product_ids = $notice['data']['product_ids'];
|
954 |
+
$blog_id = $notice['data']['blog_id'];
|
955 |
+
$has_clone = false;
|
956 |
+
|
957 |
+
if ( ! is_null( get_site( $blog_id ) ) ) {
|
958 |
+
foreach ( $product_ids as $product_id ) {
|
959 |
+
if ( ! isset( $instances[ 'm_' . $product_id ] ) ) {
|
960 |
+
continue;
|
961 |
+
}
|
962 |
+
|
963 |
+
$instance = $instances[ 'm_' . $product_id ];
|
964 |
+
|
965 |
+
$plugin_basename = $instance->get_plugin_basename();
|
966 |
+
|
967 |
+
$is_plugin_active = is_plugin_active_for_network( $plugin_basename );
|
968 |
+
|
969 |
+
if ( ! $is_plugin_active ) {
|
970 |
+
switch_to_blog( $blog_id );
|
971 |
+
|
972 |
+
$is_plugin_active = is_plugin_active( $plugin_basename );
|
973 |
+
|
974 |
+
restore_current_blog();
|
975 |
+
}
|
976 |
+
|
977 |
+
if ( ! $is_plugin_active ) {
|
978 |
+
continue;
|
979 |
+
}
|
980 |
+
|
981 |
+
$install = $instance->get_install_by_blog_id( $blog_id );
|
982 |
+
|
983 |
+
if ( ! is_object( $install ) ) {
|
984 |
+
continue;
|
985 |
+
}
|
986 |
+
|
987 |
+
$subsite_url = trailingslashit( get_site_url( $blog_id ) );
|
988 |
+
$install_url = trailingslashit( $install->url );
|
989 |
+
|
990 |
+
$has_clone = ( fs_strip_url_protocol( $install_url ) !== fs_strip_url_protocol( $subsite_url ) );
|
991 |
+
}
|
992 |
+
}
|
993 |
+
|
994 |
+
if ( ! $has_clone ) {
|
995 |
+
$this->_notices->remove_sticky( $id, true, false );
|
996 |
+
unset( $notices[ $id ] );
|
997 |
+
}
|
998 |
+
}
|
999 |
+
|
1000 |
+
return array_keys( $notices );
|
1001 |
+
}
|
1002 |
+
|
1003 |
+
/**
|
1004 |
+
* Adds a notice that provides the logged-in WordPress user with manual clone resolution options.
|
1005 |
+
*
|
1006 |
+
* @param number[] $product_ids
|
1007 |
+
* @param string[] $site_urls
|
1008 |
+
* @param string $current_url
|
1009 |
+
* @param bool $has_license
|
1010 |
+
* @param bool $is_premium
|
1011 |
+
* @param string $doc_url
|
1012 |
+
*/
|
1013 |
+
private function add_manual_clone_resolution_admin_notice(
|
1014 |
+
$product_ids,
|
1015 |
+
$product_titles,
|
1016 |
+
$site_urls,
|
1017 |
+
$current_url,
|
1018 |
+
$has_license,
|
1019 |
+
$is_premium,
|
1020 |
+
$doc_url
|
1021 |
+
) {
|
1022 |
+
$this->_logger->entrance();
|
1023 |
+
|
1024 |
+
$total_sites = count( $site_urls );
|
1025 |
+
$sites_list = '';
|
1026 |
+
|
1027 |
+
$total_products = count( $product_titles );
|
1028 |
+
$products_list = '';
|
1029 |
+
|
1030 |
+
if ( 1 === $total_products ) {
|
1031 |
+
$notice_header = sprintf(
|
1032 |
+
'<div class="fs-notice-header"><p>%s</p></div>',
|
1033 |
+
fs_esc_html_inline( '%1$s has been placed into safe mode because we noticed that %2$s is an exact copy of %3$s.', 'single-cloned-site-safe-mode-message' )
|
1034 |
+
);
|
1035 |
+
} else {
|
1036 |
+
$notice_header = sprintf(
|
1037 |
+
'<div class="fs-notice-header"><p>%s</p></div>',
|
1038 |
+
( 1 === $total_sites ) ?
|
1039 |
+
fs_esc_html_inline( 'The products below have been placed into safe mode because we noticed that %2$s is an exact copy of %3$s:%1$s', 'multiple-products-cloned-site-safe-mode-message' ) :
|
1040 |
+
fs_esc_html_inline( 'The products below have been placed into safe mode because we noticed that %2$s is an exact copy of these sites:%3$s%1$s', 'multiple-products-multiple-cloned-sites-safe-mode-message' )
|
1041 |
+
);
|
1042 |
+
|
1043 |
+
foreach ( $product_titles as $product_title ) {
|
1044 |
+
$products_list .= sprintf( '<li>%s</li>', $product_title );
|
1045 |
+
}
|
1046 |
+
|
1047 |
+
$products_list = '<ol>' . $products_list . '</ol>';
|
1048 |
+
|
1049 |
+
foreach ( $site_urls as $site_url ) {
|
1050 |
+
$sites_list .= sprintf(
|
1051 |
+
'<li><a href="%s" target="_blank">%s</a></li>',
|
1052 |
+
$site_url,
|
1053 |
+
fs_strip_url_protocol( $site_url )
|
1054 |
+
);
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
$sites_list = '<ol>' . $sites_list . '</ol>';
|
1058 |
+
}
|
1059 |
+
|
1060 |
+
$remote_site_link = '<b>' . (1 === $total_sites ?
|
1061 |
+
sprintf(
|
1062 |
+
'<a href="%s" target="_blank">%s</a>',
|
1063 |
+
$site_urls[0],
|
1064 |
+
fs_strip_url_protocol( $site_urls[0] )
|
1065 |
+
) :
|
1066 |
+
fs_text_inline( 'the above-mentioned sites', 'above-mentioned-sites' )) . '</b>';
|
1067 |
+
|
1068 |
+
$current_site_link = sprintf(
|
1069 |
+
'<b><a href="%s" target="_blank">%s</a></b>',
|
1070 |
+
$current_url,
|
1071 |
+
fs_strip_url_protocol( $current_url )
|
1072 |
+
);
|
1073 |
+
|
1074 |
+
$button_template = '<button class="button" data-clone-action="%s">%s</button>';
|
1075 |
+
$option_template = '<div class="fs-clone-resolution-option"><strong>%s</strong><p>%s</p><div>%s</div></div>';
|
1076 |
+
|
1077 |
+
$duplicate_option = sprintf(
|
1078 |
+
$option_template,
|
1079 |
+
fs_esc_html_inline( 'Is %2$s a duplicate of %4$s?', 'duplicate-site-confirmation-message' ),
|
1080 |
+
fs_esc_html_inline( 'Yes, %2$s is a duplicate of %4$s for the purpose of testing, staging, or development.', 'duplicate-site-message' ),
|
1081 |
+
($this->has_temporary_duplicate_mode_expired() ?
|
1082 |
+
sprintf(
|
1083 |
+
$button_template,
|
1084 |
+
'long_term_duplicate',
|
1085 |
+
fs_text_inline( 'Long-Term Duplicate', 'long-term-duplicate' )
|
1086 |
+
) :
|
1087 |
+
sprintf(
|
1088 |
+
$button_template,
|
1089 |
+
'temporary_duplicate',
|
1090 |
+
fs_text_inline( 'Duplicate Website', 'duplicate-site' )
|
1091 |
+
))
|
1092 |
+
);
|
1093 |
+
|
1094 |
+
$migration_option = sprintf(
|
1095 |
+
$option_template,
|
1096 |
+
fs_esc_html_inline( 'Is %2$s the new home of %4$s?', 'migrate-site-confirmation-message' ),
|
1097 |
+
sprintf(
|
1098 |
+
fs_esc_html_inline( 'Yes, %%2$s is replacing %%4$s. I would like to migrate my %s from %%4$s to %%2$s.', 'migrate-site-message' ),
|
1099 |
+
( $has_license ? fs_text_inline( 'license', 'license' ) : fs_text_inline( 'data', 'data' ) )
|
1100 |
+
),
|
1101 |
+
sprintf(
|
1102 |
+
$button_template,
|
1103 |
+
'new_home',
|
1104 |
+
$has_license ?
|
1105 |
+
fs_text_inline( 'Migrate License', 'migrate-product-license' ) :
|
1106 |
+
fs_text_inline( 'Migrate', 'migrate-product-data' )
|
1107 |
+
)
|
1108 |
+
);
|
1109 |
+
|
1110 |
+
$new_website = sprintf(
|
1111 |
+
$option_template,
|
1112 |
+
fs_esc_html_inline( 'Is %2$s a new website?', 'new-site-confirmation-message' ),
|
1113 |
+
fs_esc_html_inline( 'Yes, %2$s is a new and different website that is separate from %4$s.', 'new-site-message' ) .
|
1114 |
+
($is_premium ?
|
1115 |
+
' ' . fs_text_inline( 'It requires license activation.', 'new-site-requires-license-activation-message' ) :
|
1116 |
+
''
|
1117 |
+
),
|
1118 |
+
sprintf(
|
1119 |
+
$button_template,
|
1120 |
+
'new_website',
|
1121 |
+
( ! $is_premium || ! $has_license ) ?
|
1122 |
+
fs_text_inline( 'New Website', 'new-website' ) :
|
1123 |
+
fs_text_inline( 'Activate License', 'activate-license' )
|
1124 |
+
)
|
1125 |
+
);
|
1126 |
+
|
1127 |
+
/**
|
1128 |
+
* %1$s - single product's title or product titles list.
|
1129 |
+
* %2$s - site's URL.
|
1130 |
+
* %3$s - single install's URL or install URLs list.
|
1131 |
+
* %4$s - Clone site's link or "the above-mentioned sites" if there are multiple clone sites.
|
1132 |
+
*/
|
1133 |
+
$message = sprintf(
|
1134 |
+
$notice_header .
|
1135 |
+
'<div class="fs-clone-resolution-options-container" data-ajax-url="' . esc_attr( admin_url( 'admin-ajax.php?_fs_network_admin=false', 'relative' ) ) . '">' .
|
1136 |
+
$duplicate_option .
|
1137 |
+
$migration_option .
|
1138 |
+
$new_website . '</div>' .
|
1139 |
+
sprintf( '<div class="fs-clone-documentation-container">Unsure what to do? <a href="%s" target="_blank">Read more here</a>.</div>', $doc_url ),
|
1140 |
+
// %1$s
|
1141 |
+
( 1 === $total_products ?
|
1142 |
+
sprintf( '<b>%s</b>', $product_titles[0] ) :
|
1143 |
+
( 1 === $total_sites ?
|
1144 |
+
sprintf( '<div>%s</div>', $products_list ) :
|
1145 |
+
sprintf( '<div><p><strong>%s</strong>:</p>%s</div>', fs_esc_html_x_inline( 'Products', 'Clone resolution admin notice products list label', 'products' ), $products_list ) )
|
1146 |
+
),
|
1147 |
+
// %2$s
|
1148 |
+
$current_site_link,
|
1149 |
+
// %3$s
|
1150 |
+
( 1 === $total_sites ?
|
1151 |
+
$remote_site_link :
|
1152 |
+
$sites_list ),
|
1153 |
+
// %4$s
|
1154 |
+
$remote_site_link
|
1155 |
+
);
|
1156 |
+
|
1157 |
+
$this->_notices->add_sticky(
|
1158 |
+
$message,
|
1159 |
+
'clone_resolution_options_notice',
|
1160 |
+
'',
|
1161 |
+
'warn',
|
1162 |
+
true,
|
1163 |
+
null,
|
1164 |
+
null,
|
1165 |
+
true,
|
1166 |
+
// Intentionally not dismissible.
|
1167 |
+
false,
|
1168 |
+
array(
|
1169 |
+
'product_ids' => $product_ids,
|
1170 |
+
'blog_id' => get_current_blog_id()
|
1171 |
+
)
|
1172 |
+
);
|
1173 |
+
}
|
1174 |
+
|
1175 |
+
#endregion
|
1176 |
+
|
1177 |
+
#--------------------------------------------------------------------------------
|
1178 |
+
#region Temporary Duplicate (Short Term)
|
1179 |
+
#--------------------------------------------------------------------------------
|
1180 |
+
|
1181 |
+
/**
|
1182 |
+
* @author Leo Fajardo (@leorw)
|
1183 |
+
* @since 2.5.0
|
1184 |
+
*
|
1185 |
+
* @return string
|
1186 |
+
*/
|
1187 |
+
private function get_temporary_duplicate_admin_notice_string( $site_urls, $product_titles, $module_label ) {
|
1188 |
+
$this->_logger->entrance();
|
1189 |
+
|
1190 |
+
$temporary_duplicate_end_date = $this->get_temporary_duplicate_expiration_timestamp();
|
1191 |
+
$temporary_duplicate_end_date = date( 'M j, Y', $temporary_duplicate_end_date );
|
1192 |
+
|
1193 |
+
$current_url = get_site_url();
|
1194 |
+
$current_site_link = sprintf(
|
1195 |
+
'<b><a href="%s" target="_blank">%s</a></b>',
|
1196 |
+
$current_url,
|
1197 |
+
fs_strip_url_protocol( $current_url )
|
1198 |
+
);
|
1199 |
+
|
1200 |
+
$total_sites = count( $site_urls );
|
1201 |
+
$sites_list = '';
|
1202 |
+
|
1203 |
+
$total_products = count( $product_titles );
|
1204 |
+
$products_list = '';
|
1205 |
+
|
1206 |
+
if ( $total_sites > 1 ) {
|
1207 |
+
foreach ( $site_urls as $site_url ) {
|
1208 |
+
$sites_list .= sprintf(
|
1209 |
+
'<li><a href="%s" target="_blank">%s</a></li>',
|
1210 |
+
$site_url,
|
1211 |
+
fs_strip_url_protocol( $site_url )
|
1212 |
+
);
|
1213 |
+
}
|
1214 |
+
|
1215 |
+
$sites_list = '<ol class="fs-sites-list">' . $sites_list . '</ol>';
|
1216 |
+
}
|
1217 |
+
|
1218 |
+
if ( $total_products > 1 ) {
|
1219 |
+
foreach ( $product_titles as $product_title ) {
|
1220 |
+
$products_list .= sprintf( '<li>%s</li>', $product_title );
|
1221 |
+
}
|
1222 |
+
|
1223 |
+
$products_list = '<ol>' . $products_list . '</ol>';
|
1224 |
+
}
|
1225 |
+
|
1226 |
+
return sprintf(
|
1227 |
+
sprintf(
|
1228 |
+
'<div>%s</div>',
|
1229 |
+
( 1 === $total_sites ?
|
1230 |
+
sprintf( '<p>%s</p>', fs_esc_html_inline( 'You marked this website, %s, as a temporary duplicate of %s.', 'temporary-duplicate-message' ) ) :
|
1231 |
+
sprintf( '<p>%s:</p>', fs_esc_html_inline( 'You marked this website, %s, as a temporary duplicate of these sites', 'temporary-duplicate-of-sites-message' ) ) . '%s' )
|
1232 |
+
) . '%s',
|
1233 |
+
$current_site_link,
|
1234 |
+
( 1 === $total_sites ?
|
1235 |
+
sprintf(
|
1236 |
+
'<b><a href="%s" target="_blank">%s</a></b>',
|
1237 |
+
$site_urls[0],
|
1238 |
+
fs_strip_url_protocol( $site_urls[0] )
|
1239 |
+
) :
|
1240 |
+
$sites_list ),
|
1241 |
+
sprintf(
|
1242 |
+
'<div class="fs-clone-resolution-options-container fs-duplicate-site-options" data-ajax-url="%s" data-blog-id="' . get_current_blog_id() . '"><p>%s</p>%s<p>%s</p></div>',
|
1243 |
+
esc_attr( admin_url( 'admin-ajax.php?_fs_network_admin=false', 'relative' ) ),
|
1244 |
+
sprintf(
|
1245 |
+
fs_esc_html_inline( "%s automatic security & feature updates and paid functionality will keep working without interruptions until %s (or when your license expires, whatever comes first).", 'duplicate-site-confirmation-message' ),
|
1246 |
+
( 1 === $total_products ?
|
1247 |
+
sprintf(
|
1248 |
+
fs_esc_html_x_inline( "The %s's", '"The <product_label>", e.g.: "The plugin"', 'the-product-x'),
|
1249 |
+
"<strong>{$module_label}</strong>"
|
1250 |
+
) :
|
1251 |
+
fs_esc_html_inline( "The following products'", 'the-following-products' ) ),
|
1252 |
+
sprintf( '<strong>%s</strong>', $temporary_duplicate_end_date )
|
1253 |
+
),
|
1254 |
+
( 1 === $total_products ?
|
1255 |
+
'' :
|
1256 |
+
sprintf( '<div>%s</div>', $products_list )
|
1257 |
+
),
|
1258 |
+
sprintf(
|
1259 |
+
fs_esc_html_inline( 'If this is a long term duplicate, to keep automatic updates and paid functionality after %s, please %s.', 'duplicate-site-message' ),
|
1260 |
+
sprintf( '<strong>%s</strong>', $temporary_duplicate_end_date),
|
1261 |
+
sprintf( '<a href="#" id="fs_temporary_duplicate_license_activation_link" data-clone-action="temporary_duplicate_license_activation">%s</a>', fs_esc_html_inline( 'activate a license here', 'activate-license-here' ) )
|
1262 |
+
)
|
1263 |
+
)
|
1264 |
+
);
|
1265 |
+
}
|
1266 |
+
|
1267 |
+
/**
|
1268 |
+
* Determines if the temporary duplicate mode has already expired.
|
1269 |
+
*
|
1270 |
+
* @return bool
|
1271 |
+
*/
|
1272 |
+
function has_temporary_duplicate_mode_expired() {
|
1273 |
+
$temporary_duplicate_mode_start_timestamp = $this->was_temporary_duplicate_mode_selected() ?
|
1274 |
+
$this->temporary_duplicate_mode_selection_timestamp :
|
1275 |
+
$this->get_clone_identification_timestamp();
|
1276 |
+
|
1277 |
+
if ( ! is_numeric( $temporary_duplicate_mode_start_timestamp ) ) {
|
1278 |
+
return false;
|
1279 |
+
}
|
1280 |
+
|
1281 |
+
return ( time() > ( $temporary_duplicate_mode_start_timestamp + self::TEMPORARY_DUPLICATE_PERIOD ) );
|
1282 |
+
}
|
1283 |
+
|
1284 |
+
/**
|
1285 |
+
* Determines if the logged-in WordPress user manually selected the temporary duplicate mode for the site.
|
1286 |
+
*
|
1287 |
+
* @return bool
|
1288 |
+
*/
|
1289 |
+
function was_temporary_duplicate_mode_selected() {
|
1290 |
+
return (
|
1291 |
+
isset( $this->temporary_duplicate_mode_selection_timestamp ) &&
|
1292 |
+
is_numeric( $this->temporary_duplicate_mode_selection_timestamp )
|
1293 |
+
);
|
1294 |
+
}
|
1295 |
+
|
1296 |
+
/**
|
1297 |
+
* Stores the time when the logged-in WordPress user selected the temporary duplicate mode for the site.
|
1298 |
+
*/
|
1299 |
+
private function store_temporary_duplicate_timestamp() {
|
1300 |
+
$this->temporary_duplicate_mode_selection_timestamp = time();
|
1301 |
+
}
|
1302 |
+
|
1303 |
+
/**
|
1304 |
+
* Removes the notice that is shown when the logged-in WordPress user has selected the temporary duplicate mode for the site.
|
1305 |
+
*
|
1306 |
+
* @param bool $store
|
1307 |
+
*/
|
1308 |
+
function remove_clone_resolution_options_notice( $store = true ) {
|
1309 |
+
$this->_notices->remove_sticky( 'clone_resolution_options_notice', true, $store );
|
1310 |
+
}
|
1311 |
+
|
1312 |
+
/**
|
1313 |
+
* Removes the notice that is shown when the logged-in WordPress user has selected the temporary duplicate mode for the site.
|
1314 |
+
*
|
1315 |
+
* @param bool $store
|
1316 |
+
*/
|
1317 |
+
function remove_temporary_duplicate_notice( $store = true ) {
|
1318 |
+
$this->_notices->remove_sticky( 'temporary_duplicate_notice', true, $store );
|
1319 |
+
}
|
1320 |
+
|
1321 |
+
/**
|
1322 |
+
* Determines if the manual clone resolution options notice is currently being shown.
|
1323 |
+
*
|
1324 |
+
* @return bool
|
1325 |
+
*/
|
1326 |
+
function is_clone_resolution_options_notice_shown() {
|
1327 |
+
return $this->_notices->has_sticky( 'clone_resolution_options_notice', true );
|
1328 |
+
}
|
1329 |
+
|
1330 |
+
/**
|
1331 |
+
* Determines if the temporary duplicate notice is currently being shown.
|
1332 |
+
*
|
1333 |
+
* @return bool
|
1334 |
+
*/
|
1335 |
+
function is_temporary_duplicate_notice_shown() {
|
1336 |
+
return $this->_notices->has_sticky( 'temporary_duplicate_notice', true );
|
1337 |
+
}
|
1338 |
+
|
1339 |
+
/**
|
1340 |
+
* Determines if a site was marked as a temporary duplicate and if it's still a temporary duplicate.
|
1341 |
+
*
|
1342 |
+
* @return bool
|
1343 |
+
*/
|
1344 |
+
function is_temporary_duplicate_by_blog_id( $blog_id ) {
|
1345 |
+
$storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true, $blog_id );
|
1346 |
+
$data = $storage->get_option( self::OPTION_NAME, array() );
|
1347 |
+
|
1348 |
+
if ( ! is_array( $data ) ) {
|
1349 |
+
return false;
|
1350 |
+
}
|
1351 |
+
|
1352 |
+
$was_temporary_duplicate_mode_selected = (
|
1353 |
+
isset( $data['temporary_duplicate_mode_selection_timestamp'] ) &&
|
1354 |
+
is_numeric( $data['temporary_duplicate_mode_selection_timestamp'] )
|
1355 |
+
);
|
1356 |
+
|
1357 |
+
if ( ! $was_temporary_duplicate_mode_selected ) {
|
1358 |
+
return false;
|
1359 |
+
}
|
1360 |
+
|
1361 |
+
return ( time() < ( $data['temporary_duplicate_mode_selection_timestamp'] + self::TEMPORARY_DUPLICATE_PERIOD ) );
|
1362 |
+
}
|
1363 |
+
|
1364 |
+
/**
|
1365 |
+
* Determines the last time the temporary duplicate notice was shown.
|
1366 |
+
*
|
1367 |
+
* @return int|null
|
1368 |
+
*/
|
1369 |
+
function last_time_temporary_duplicate_notice_was_shown() {
|
1370 |
+
return ( ! isset( $this->temporary_duplicate_notice_shown_timestamp ) ) ?
|
1371 |
+
null :
|
1372 |
+
$this->temporary_duplicate_notice_shown_timestamp;
|
1373 |
+
}
|
1374 |
+
|
1375 |
+
/**
|
1376 |
+
* Clears the time that has been stored when the temporary duplicate notice was shown.
|
1377 |
+
*/
|
1378 |
+
function clear_temporary_duplicate_notice_shown_timestamp() {
|
1379 |
+
$this->temporary_duplicate_notice_shown_timestamp = null;
|
1380 |
+
}
|
1381 |
+
|
1382 |
+
/**
|
1383 |
+
* Adds a temporary duplicate notice that provides the logged-in WordPress user with an option to activate a license for the site.
|
1384 |
+
*
|
1385 |
+
* @param number[] $product_ids
|
1386 |
+
* @param string $message
|
1387 |
+
* @param string $message
|
1388 |
+
* @param string|null $plugin_title
|
1389 |
+
*/
|
1390 |
+
function add_temporary_duplicate_sticky_notice( $product_ids, $message, $plugin_title = null ) {
|
1391 |
+
$this->_logger->entrance();
|
1392 |
+
|
1393 |
+
$this->_notices->add_sticky(
|
1394 |
+
$message,
|
1395 |
+
'temporary_duplicate_notice',
|
1396 |
+
'',
|
1397 |
+
'promotion',
|
1398 |
+
true,
|
1399 |
+
null,
|
1400 |
+
$plugin_title,
|
1401 |
+
true,
|
1402 |
+
true,
|
1403 |
+
array(
|
1404 |
+
'product_ids' => $product_ids,
|
1405 |
+
'blog_id' => get_current_blog_id()
|
1406 |
+
)
|
1407 |
+
);
|
1408 |
+
|
1409 |
+
$this->temporary_duplicate_notice_shown_timestamp = time();
|
1410 |
+
}
|
1411 |
+
|
1412 |
+
#endregion
|
1413 |
+
|
1414 |
+
/**
|
1415 |
+
* @author Leo Fajardo
|
1416 |
+
* @since 2.5.0
|
1417 |
+
*
|
1418 |
+
* @param string $key
|
1419 |
+
*
|
1420 |
+
* @return bool
|
1421 |
+
*/
|
1422 |
+
private function should_use_network_storage( $key ) {
|
1423 |
+
return ( 'new_blog_install_map' === $key );
|
1424 |
+
}
|
1425 |
+
|
1426 |
+
#--------------------------------------------------------------------------------
|
1427 |
+
#region Magic methods
|
1428 |
+
#--------------------------------------------------------------------------------
|
1429 |
+
|
1430 |
+
/**
|
1431 |
+
* @param string $name
|
1432 |
+
* @param int|string $value
|
1433 |
+
*/
|
1434 |
+
function __set( $name, $value ) {
|
1435 |
+
if ( ! $this->should_use_network_storage( $name ) ) {
|
1436 |
+
$storage = $this->_storage;
|
1437 |
+
$data = $this->_data;
|
1438 |
+
} else {
|
1439 |
+
$storage = $this->_network_storage;
|
1440 |
+
$data = $this->_network_data;
|
1441 |
+
}
|
1442 |
+
|
1443 |
+
if ( ! array_key_exists( $name, $data ) ) {
|
1444 |
+
return;
|
1445 |
+
}
|
1446 |
+
|
1447 |
+
$data[ $name ] = $value;
|
1448 |
+
|
1449 |
+
$storage->set_option( self::OPTION_NAME, $data, true );
|
1450 |
+
}
|
1451 |
+
|
1452 |
+
/**
|
1453 |
+
* @param string $name
|
1454 |
+
*
|
1455 |
+
* @return bool
|
1456 |
+
*/
|
1457 |
+
function __isset( $name ) {
|
1458 |
+
return (
|
1459 |
+
isset( $this->_data[ $name ] ) ||
|
1460 |
+
isset( $this->_network_data[ $name ] )
|
1461 |
+
);
|
1462 |
+
}
|
1463 |
+
|
1464 |
+
/**
|
1465 |
+
* @param string $name
|
1466 |
+
*
|
1467 |
+
* @return null|int|string
|
1468 |
+
*/
|
1469 |
+
function __get( $name ) {
|
1470 |
+
$data = ( ! $this->should_use_network_storage( $name ) ) ?
|
1471 |
+
$this->_data :
|
1472 |
+
$this->_network_data;
|
1473 |
+
|
1474 |
+
return array_key_exists( $name, $data ) ?
|
1475 |
+
$data[ $name ] :
|
1476 |
+
null;
|
1477 |
+
}
|
1478 |
+
|
1479 |
+
#endregion
|
1480 |
+
}
|
freemius/includes/managers/class-fs-key-value-storage.php
CHANGED
@@ -298,6 +298,7 @@
|
|
298 |
return $this->get( $k, null );
|
299 |
}
|
300 |
|
|
|
301 |
function offsetSet( $k, $v ) {
|
302 |
if ( is_null( $k ) ) {
|
303 |
throw new Exception( 'Can\'t append value to request params.' );
|
@@ -306,14 +307,17 @@
|
|
306 |
}
|
307 |
}
|
308 |
|
|
|
309 |
function offsetExists( $k ) {
|
310 |
return array_key_exists( $k, $this->_data );
|
311 |
}
|
312 |
|
|
|
313 |
function offsetUnset( $k ) {
|
314 |
unset( $this->$k );
|
315 |
}
|
316 |
|
|
|
317 |
function offsetGet( $k ) {
|
318 |
return $this->get( $k, null );
|
319 |
}
|
@@ -325,6 +329,7 @@
|
|
325 |
* @link http://php.net/manual/en/iterator.current.php
|
326 |
* @return mixed Can return any type.
|
327 |
*/
|
|
|
328 |
public function current() {
|
329 |
return current( $this->_data );
|
330 |
}
|
@@ -336,6 +341,7 @@
|
|
336 |
* @link http://php.net/manual/en/iterator.next.php
|
337 |
* @return void Any returned value is ignored.
|
338 |
*/
|
|
|
339 |
public function next() {
|
340 |
next( $this->_data );
|
341 |
}
|
@@ -347,6 +353,7 @@
|
|
347 |
* @link http://php.net/manual/en/iterator.key.php
|
348 |
* @return mixed scalar on success, or null on failure.
|
349 |
*/
|
|
|
350 |
public function key() {
|
351 |
return key( $this->_data );
|
352 |
}
|
@@ -359,6 +366,7 @@
|
|
359 |
* @return boolean The return value will be casted to boolean and then evaluated.
|
360 |
* Returns true on success or false on failure.
|
361 |
*/
|
|
|
362 |
public function valid() {
|
363 |
$key = key( $this->_data );
|
364 |
|
@@ -372,6 +380,7 @@
|
|
372 |
* @link http://php.net/manual/en/iterator.rewind.php
|
373 |
* @return void Any returned value is ignored.
|
374 |
*/
|
|
|
375 |
public function rewind() {
|
376 |
reset( $this->_data );
|
377 |
}
|
@@ -386,6 +395,7 @@
|
|
386 |
* <p>
|
387 |
* The return value is cast to an integer.
|
388 |
*/
|
|
|
389 |
public function count() {
|
390 |
return count( $this->_data );
|
391 |
}
|
298 |
return $this->get( $k, null );
|
299 |
}
|
300 |
|
301 |
+
#[ReturnTypeWillChange]
|
302 |
function offsetSet( $k, $v ) {
|
303 |
if ( is_null( $k ) ) {
|
304 |
throw new Exception( 'Can\'t append value to request params.' );
|
307 |
}
|
308 |
}
|
309 |
|
310 |
+
#[ReturnTypeWillChange]
|
311 |
function offsetExists( $k ) {
|
312 |
return array_key_exists( $k, $this->_data );
|
313 |
}
|
314 |
|
315 |
+
#[ReturnTypeWillChange]
|
316 |
function offsetUnset( $k ) {
|
317 |
unset( $this->$k );
|
318 |
}
|
319 |
|
320 |
+
#[ReturnTypeWillChange]
|
321 |
function offsetGet( $k ) {
|
322 |
return $this->get( $k, null );
|
323 |
}
|
329 |
* @link http://php.net/manual/en/iterator.current.php
|
330 |
* @return mixed Can return any type.
|
331 |
*/
|
332 |
+
#[ReturnTypeWillChange]
|
333 |
public function current() {
|
334 |
return current( $this->_data );
|
335 |
}
|
341 |
* @link http://php.net/manual/en/iterator.next.php
|
342 |
* @return void Any returned value is ignored.
|
343 |
*/
|
344 |
+
#[ReturnTypeWillChange]
|
345 |
public function next() {
|
346 |
next( $this->_data );
|
347 |
}
|
353 |
* @link http://php.net/manual/en/iterator.key.php
|
354 |
* @return mixed scalar on success, or null on failure.
|
355 |
*/
|
356 |
+
#[ReturnTypeWillChange]
|
357 |
public function key() {
|
358 |
return key( $this->_data );
|
359 |
}
|
366 |
* @return boolean The return value will be casted to boolean and then evaluated.
|
367 |
* Returns true on success or false on failure.
|
368 |
*/
|
369 |
+
#[ReturnTypeWillChange]
|
370 |
public function valid() {
|
371 |
$key = key( $this->_data );
|
372 |
|
380 |
* @link http://php.net/manual/en/iterator.rewind.php
|
381 |
* @return void Any returned value is ignored.
|
382 |
*/
|
383 |
+
#[ReturnTypeWillChange]
|
384 |
public function rewind() {
|
385 |
reset( $this->_data );
|
386 |
}
|
395 |
* <p>
|
396 |
* The return value is cast to an integer.
|
397 |
*/
|
398 |
+
#[ReturnTypeWillChange]
|
399 |
public function count() {
|
400 |
return count( $this->_data );
|
401 |
}
|
freemius/includes/managers/class-fs-plugin-manager.php
CHANGED
@@ -211,10 +211,23 @@
|
|
211 |
* @return bool|\FS_Plugin
|
212 |
*/
|
213 |
function get() {
|
214 |
-
|
215 |
-
|
216 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
}
|
218 |
-
|
219 |
-
|
220 |
}
|
211 |
* @return bool|\FS_Plugin
|
212 |
*/
|
213 |
function get() {
|
214 |
+
if ( isset( $this->_module ) ) {
|
215 |
+
return $this->_module;
|
216 |
+
}
|
217 |
+
|
218 |
+
if ( empty( $this->_module_id ) ) {
|
219 |
+
return false;
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Return an FS_Plugin entity that has its `id` and `is_live` properties set (`is_live` is initialized in the FS_Plugin constructor) to avoid triggering an error that is relevant to these properties when the FS_Plugin entity is used before the `parse_settings()` method is called. This can happen when creating a regular WordPress site by cloning a subsite of a multisite network and the data that is stored in the network-level storage is not cloned.
|
224 |
+
*
|
225 |
+
* @author Leo Fajardo (@leorw)
|
226 |
+
* @since 2.5.0
|
227 |
+
*/
|
228 |
+
$plugin = new FS_Plugin();
|
229 |
+
$plugin->id = $this->_module_id;
|
230 |
+
|
231 |
+
return $plugin;
|
232 |
}
|
|
|
|
|
233 |
}
|
freemius/includes/sdk/Exceptions/ArgumentNotExistException.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
3 |
exit;
|
4 |
}
|
@@ -6,4 +10,4 @@
|
|
6 |
if ( ! class_exists( 'Freemius_ArgumentNotExistException' ) ) {
|
7 |
class Freemius_ArgumentNotExistException extends Freemius_InvalidArgumentException {
|
8 |
}
|
9 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
7 |
exit;
|
8 |
}
|
10 |
if ( ! class_exists( 'Freemius_ArgumentNotExistException' ) ) {
|
11 |
class Freemius_ArgumentNotExistException extends Freemius_InvalidArgumentException {
|
12 |
}
|
13 |
+
}
|
freemius/includes/sdk/Exceptions/EmptyArgumentException.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
3 |
exit;
|
4 |
}
|
@@ -6,4 +10,4 @@
|
|
6 |
if ( ! class_exists( 'Freemius_EmptyArgumentException' ) ) {
|
7 |
class Freemius_EmptyArgumentException extends Freemius_InvalidArgumentException {
|
8 |
}
|
9 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
7 |
exit;
|
8 |
}
|
10 |
if ( ! class_exists( 'Freemius_EmptyArgumentException' ) ) {
|
11 |
class Freemius_EmptyArgumentException extends Freemius_InvalidArgumentException {
|
12 |
}
|
13 |
+
}
|
freemius/includes/sdk/Exceptions/Exception.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
3 |
/**
|
4 |
* Thrown when an API call returns an exception.
|
@@ -71,4 +75,4 @@
|
|
71 |
return $str . $this->getMessage();
|
72 |
}
|
73 |
}
|
74 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
7 |
/**
|
8 |
* Thrown when an API call returns an exception.
|
75 |
return $str . $this->getMessage();
|
76 |
}
|
77 |
}
|
78 |
+
}
|
freemius/includes/sdk/Exceptions/InvalidArgumentException.php
CHANGED
@@ -1,8 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
3 |
exit;
|
4 |
}
|
5 |
|
6 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
7 |
class Freemius_InvalidArgumentException extends Freemius_Exception { }
|
8 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
7 |
exit;
|
8 |
}
|
9 |
|
10 |
if ( ! class_exists( 'Freemius_InvalidArgumentException' ) ) {
|
11 |
class Freemius_InvalidArgumentException extends Freemius_Exception { }
|
12 |
+
}
|
freemius/includes/sdk/Exceptions/OAuthException.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
3 |
exit;
|
4 |
}
|
@@ -9,4 +13,4 @@
|
|
9 |
parent::__construct( $pResult );
|
10 |
}
|
11 |
}
|
12 |
-
}
|
1 |
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
|
6 |
if ( ! class_exists( 'Freemius_Exception' ) ) {
|
7 |
exit;
|
8 |
}
|
13 |
parent::__construct( $pResult );
|
14 |
}
|
15 |
}
|
16 |
+
}
|
freemius/includes/sdk/FreemiusBase.php
CHANGED
@@ -15,6 +15,10 @@
|
|
15 |
* under the License.
|
16 |
*/
|
17 |
|
|
|
|
|
|
|
|
|
18 |
if ( ! defined( 'FS_API__VERSION' ) ) {
|
19 |
define( 'FS_API__VERSION', '1' );
|
20 |
}
|
15 |
* under the License.
|
16 |
*/
|
17 |
|
18 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
19 |
+
exit;
|
20 |
+
}
|
21 |
+
|
22 |
if ( ! defined( 'FS_API__VERSION' ) ) {
|
23 |
define( 'FS_API__VERSION', '1' );
|
24 |
}
|
freemius/includes/sdk/FreemiusWordPress.php
CHANGED
@@ -14,6 +14,9 @@
|
|
14 |
* License for the specific language governing permissions and limitations
|
15 |
* under the License.
|
16 |
*/
|
|
|
|
|
|
|
17 |
|
18 |
require_once dirname( __FILE__ ) . '/FreemiusBase.php';
|
19 |
|
@@ -709,4 +712,4 @@
|
|
709 |
}
|
710 |
|
711 |
#endregion
|
712 |
-
}
|
14 |
* License for the specific language governing permissions and limitations
|
15 |
* under the License.
|
16 |
*/
|
17 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
18 |
+
exit;
|
19 |
+
}
|
20 |
|
21 |
require_once dirname( __FILE__ ) . '/FreemiusBase.php';
|
22 |
|
712 |
}
|
713 |
|
714 |
#endregion
|
715 |
+
}
|
freemius/languages/freemius-cs_CZ.mo
CHANGED
Binary file
|
freemius/languages/freemius-da_DK.mo
CHANGED
Binary file
|
freemius/languages/freemius-de_DE.mo
ADDED
Binary file
|
freemius/languages/freemius-en.mo
CHANGED
Binary file
|
freemius/languages/freemius-es_ES.mo
CHANGED
Binary file
|
freemius/languages/freemius-fr_FR.mo
CHANGED
Binary file
|
freemius/languages/freemius-he_IL.mo
CHANGED
Binary file
|
freemius/languages/freemius-hu_HU.mo
CHANGED
Binary file
|
freemius/languages/freemius-it_IT.mo
CHANGED
Binary file
|
freemius/languages/freemius-ja.mo
CHANGED
Binary file
|
freemius/languages/freemius-nl_NL.mo
CHANGED
Binary file
|
freemius/languages/freemius-ru_RU.mo
CHANGED
Binary file
|
freemius/languages/freemius-ta.mo
CHANGED
Binary file
|
freemius/languages/freemius-zh_CN.mo
CHANGED
Binary file
|
freemius/languages/freemius.pot
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
# Copyright (C)
|
2 |
# This file is distributed under the same license as the freemius package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
@@ -16,795 +16,803 @@ msgstr ""
|
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
|
19 |
-
#: includes/class-freemius.php:
|
20 |
msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
|
21 |
msgstr ""
|
22 |
|
23 |
-
#: includes/class-freemius.php:
|
24 |
msgid "Would you like to proceed with the update?"
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: includes/class-freemius.php:
|
28 |
msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: includes/class-freemius.php:
|
32 |
msgid "Error"
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: includes/class-freemius.php:
|
36 |
msgid "I found a better %s"
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: includes/class-freemius.php:
|
40 |
msgid "What's the %s's name?"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: includes/class-freemius.php:
|
44 |
-
msgid "It's a temporary %s
|
45 |
msgstr ""
|
46 |
|
47 |
-
#: includes/class-freemius.php:
|
48 |
msgid "Deactivation"
|
49 |
msgstr ""
|
50 |
|
51 |
-
#: includes/class-freemius.php:
|
52 |
msgid "Theme Switch"
|
53 |
msgstr ""
|
54 |
|
55 |
-
#: includes/class-freemius.php:
|
56 |
msgid "Other"
|
57 |
msgstr ""
|
58 |
|
59 |
-
#: includes/class-freemius.php:
|
60 |
msgid "I no longer need the %s"
|
61 |
msgstr ""
|
62 |
|
63 |
-
#: includes/class-freemius.php:
|
64 |
msgid "I only needed the %s for a short period"
|
65 |
msgstr ""
|
66 |
|
67 |
-
#: includes/class-freemius.php:
|
68 |
msgid "The %s broke my site"
|
69 |
msgstr ""
|
70 |
|
71 |
-
#: includes/class-freemius.php:
|
72 |
msgid "The %s suddenly stopped working"
|
73 |
msgstr ""
|
74 |
|
75 |
-
#: includes/class-freemius.php:
|
76 |
msgid "I can't pay for it anymore"
|
77 |
msgstr ""
|
78 |
|
79 |
-
#: includes/class-freemius.php:
|
80 |
msgid "What price would you feel comfortable paying?"
|
81 |
msgstr ""
|
82 |
|
83 |
-
#: includes/class-freemius.php:
|
84 |
msgid "I don't like to share my information with you"
|
85 |
msgstr ""
|
86 |
|
87 |
-
#: includes/class-freemius.php:
|
88 |
msgid "The %s didn't work"
|
89 |
msgstr ""
|
90 |
|
91 |
-
#: includes/class-freemius.php:
|
92 |
msgid "I couldn't understand how to make it work"
|
93 |
msgstr ""
|
94 |
|
95 |
-
#: includes/class-freemius.php:
|
96 |
msgid "The %s is great, but I need specific feature that you don't support"
|
97 |
msgstr ""
|
98 |
|
99 |
-
#: includes/class-freemius.php:
|
100 |
msgid "What feature?"
|
101 |
msgstr ""
|
102 |
|
103 |
-
#: includes/class-freemius.php:
|
104 |
msgid "The %s is not working"
|
105 |
msgstr ""
|
106 |
|
107 |
-
#: includes/class-freemius.php:
|
108 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
109 |
msgstr ""
|
110 |
|
111 |
-
#: includes/class-freemius.php:
|
112 |
msgid "It's not what I was looking for"
|
113 |
msgstr ""
|
114 |
|
115 |
-
#: includes/class-freemius.php:
|
116 |
msgid "What you've been looking for?"
|
117 |
msgstr ""
|
118 |
|
119 |
-
#: includes/class-freemius.php:
|
120 |
msgid "The %s didn't work as expected"
|
121 |
msgstr ""
|
122 |
|
123 |
-
#: includes/class-freemius.php:
|
124 |
msgid "What did you expect?"
|
125 |
msgstr ""
|
126 |
|
127 |
-
#: includes/class-freemius.php:
|
128 |
msgid "Freemius Debug"
|
129 |
msgstr ""
|
130 |
|
131 |
-
#: includes/class-freemius.php:
|
132 |
msgid "I don't know what is cURL or how to install it, help me!"
|
133 |
msgstr ""
|
134 |
|
135 |
-
#: includes/class-freemius.php:
|
136 |
msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
|
137 |
msgstr ""
|
138 |
|
139 |
-
#: includes/class-freemius.php:
|
140 |
msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
|
141 |
msgstr ""
|
142 |
|
143 |
-
#: includes/class-freemius.php:
|
144 |
msgid "Yes - do your thing"
|
145 |
msgstr ""
|
146 |
|
147 |
-
#: includes/class-freemius.php:
|
148 |
msgid "No - just deactivate"
|
149 |
msgstr ""
|
150 |
|
151 |
-
#: includes/class-freemius.php:
|
152 |
msgctxt "exclamation"
|
153 |
msgid "Oops"
|
154 |
msgstr ""
|
155 |
|
156 |
-
#: includes/class-freemius.php:
|
157 |
msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
|
158 |
msgstr ""
|
159 |
|
160 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
msgctxt "addonX cannot run without pluginY"
|
162 |
msgid "%s cannot run without %s."
|
163 |
msgstr ""
|
164 |
|
165 |
-
#: includes/class-freemius.php:
|
166 |
msgctxt "addonX cannot run..."
|
167 |
msgid "%s cannot run without the plugin."
|
168 |
msgstr ""
|
169 |
|
170 |
-
#: includes/class-freemius.php:
|
171 |
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
172 |
msgstr ""
|
173 |
|
174 |
-
#: includes/class-freemius.php:
|
175 |
msgid "Premium %s version was successfully activated."
|
176 |
msgstr ""
|
177 |
|
178 |
-
#: includes/class-freemius.php:
|
179 |
msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
|
180 |
msgid "W00t"
|
181 |
msgstr ""
|
182 |
|
183 |
-
#: includes/class-freemius.php:
|
184 |
msgid "You have a %s license."
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: includes/class-freemius.php:
|
188 |
-
msgctxt "interjection expressing joy or exuberance"
|
189 |
-
msgid "Yee-haw"
|
190 |
-
msgstr ""
|
191 |
-
|
192 |
-
#: includes/class-freemius.php:6174
|
193 |
msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
|
194 |
msgstr ""
|
195 |
|
196 |
-
#: includes/class-freemius.php:
|
197 |
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
198 |
msgstr ""
|
199 |
|
200 |
-
#: includes/class-freemius.php:
|
201 |
msgid "More information about %s"
|
202 |
msgstr ""
|
203 |
|
204 |
-
#: includes/class-freemius.php:
|
205 |
msgid "Purchase License"
|
206 |
msgstr ""
|
207 |
|
208 |
-
#: includes/class-freemius.php:
|
209 |
msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
|
210 |
msgstr ""
|
211 |
|
212 |
-
#: includes/class-freemius.php:
|
213 |
msgid "start the trial"
|
214 |
msgstr ""
|
215 |
|
216 |
-
#: includes/class-freemius.php:
|
217 |
msgid "complete the install"
|
218 |
msgstr ""
|
219 |
|
220 |
-
#: includes/class-freemius.php:
|
221 |
msgid "You are just one step away - %s"
|
222 |
msgstr ""
|
223 |
|
224 |
-
#: includes/class-freemius.php:
|
225 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
226 |
msgid "Complete \"%s\" Activation Now"
|
227 |
msgstr ""
|
228 |
|
229 |
-
#: includes/class-freemius.php:
|
230 |
msgid "We made a few tweaks to the %s, %s"
|
231 |
msgstr ""
|
232 |
|
233 |
-
#: includes/class-freemius.php:
|
234 |
msgid "Opt in to make \"%s\" better!"
|
235 |
msgstr ""
|
236 |
|
237 |
-
#: includes/class-freemius.php:
|
238 |
msgid "The upgrade of %s was successfully completed."
|
239 |
msgstr ""
|
240 |
|
241 |
-
#: includes/class-freemius.php:
|
242 |
msgid "Add-On"
|
243 |
msgstr ""
|
244 |
|
245 |
-
#: includes/class-freemius.php:
|
246 |
msgid "Plugin"
|
247 |
msgstr ""
|
248 |
|
249 |
-
#: includes/class-freemius.php:
|
250 |
msgid "Theme"
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: includes/class-freemius.php:
|
254 |
msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: includes/class-freemius.php:
|
258 |
msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
|
259 |
msgstr ""
|
260 |
|
261 |
-
#: includes/class-freemius.php:
|
262 |
msgid "User Dashboard"
|
263 |
msgstr ""
|
264 |
|
265 |
-
#: includes/class-freemius.php:
|
266 |
msgid "revert it now"
|
267 |
msgstr ""
|
268 |
|
269 |
-
#: includes/class-freemius.php:
|
270 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
271 |
msgstr ""
|
272 |
|
273 |
-
#: includes/class-freemius.php:
|
274 |
msgid "Invalid new user ID or email address."
|
275 |
msgstr ""
|
276 |
|
277 |
-
#: includes/class-freemius.php:
|
278 |
msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
|
279 |
msgstr ""
|
280 |
|
281 |
-
#: includes/class-freemius.php:
|
282 |
msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
283 |
msgstr ""
|
284 |
|
285 |
-
#: includes/class-freemius.php:
|
286 |
msgid "Change Ownership"
|
287 |
msgstr ""
|
288 |
|
289 |
-
#: includes/class-freemius.php:
|
290 |
msgid "Invalid site details collection."
|
291 |
msgstr ""
|
292 |
|
293 |
-
#: includes/class-freemius.php:
|
294 |
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
295 |
msgstr ""
|
296 |
|
297 |
-
#: includes/class-freemius.php:
|
298 |
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
299 |
msgstr ""
|
300 |
|
301 |
-
#: includes/class-freemius.php:
|
302 |
msgid "Account is pending activation."
|
303 |
msgstr ""
|
304 |
|
305 |
-
#: includes/class-freemius.php:
|
306 |
msgid "Buy a license now"
|
307 |
msgstr ""
|
308 |
|
309 |
-
#: includes/class-freemius.php:
|
310 |
msgid "Renew your license now"
|
311 |
msgstr ""
|
312 |
|
313 |
-
#: includes/class-freemius.php:
|
314 |
msgid "%s to access version %s security & feature updates, and support."
|
315 |
msgstr ""
|
316 |
|
317 |
-
#: includes/class-freemius.php:
|
318 |
msgid "%s activation was successfully completed."
|
319 |
msgstr ""
|
320 |
|
321 |
-
#: includes/class-freemius.php:
|
322 |
msgid "Your account was successfully activated with the %s plan."
|
323 |
msgstr ""
|
324 |
|
325 |
-
#: includes/class-freemius.php:
|
326 |
msgid "Your trial has been successfully started."
|
327 |
msgstr ""
|
328 |
|
329 |
-
#: includes/class-freemius.php:
|
330 |
msgid "Couldn't activate %s."
|
331 |
msgstr ""
|
332 |
|
333 |
-
#: includes/class-freemius.php:
|
334 |
msgid "Please contact us with the following message:"
|
335 |
msgstr ""
|
336 |
|
337 |
-
#: includes/class-freemius.php:
|
338 |
msgid "An unknown error has occurred."
|
339 |
msgstr ""
|
340 |
|
341 |
-
#: includes/class-freemius.php:
|
342 |
msgid "Upgrade"
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: includes/class-freemius.php:
|
346 |
msgid "Start Trial"
|
347 |
msgstr ""
|
348 |
|
349 |
-
#: includes/class-freemius.php:
|
350 |
msgid "Pricing"
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: includes/class-freemius.php:
|
354 |
msgid "Affiliation"
|
355 |
msgstr ""
|
356 |
|
357 |
-
#: includes/class-freemius.php:
|
358 |
msgid "Account"
|
359 |
msgstr ""
|
360 |
|
361 |
-
#: includes/class-freemius.php:
|
362 |
msgid "Contact Us"
|
363 |
msgstr ""
|
364 |
|
365 |
-
#: includes/class-freemius.php:
|
366 |
msgid "Add-Ons"
|
367 |
msgstr ""
|
368 |
|
369 |
-
#: includes/class-freemius.php:
|
370 |
msgctxt "ASCII arrow left icon"
|
371 |
msgid "←"
|
372 |
msgstr ""
|
373 |
|
374 |
-
#: includes/class-freemius.php:
|
375 |
msgctxt "ASCII arrow right icon"
|
376 |
msgid "➤"
|
377 |
msgstr ""
|
378 |
|
379 |
-
#: includes/class-freemius.php:
|
380 |
msgctxt "noun"
|
381 |
msgid "Pricing"
|
382 |
msgstr ""
|
383 |
|
384 |
-
#: includes/class-freemius.php:
|
385 |
msgid "Support Forum"
|
386 |
msgstr ""
|
387 |
|
388 |
-
#: includes/class-freemius.php:
|
389 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
390 |
msgstr ""
|
391 |
|
392 |
-
#: includes/class-freemius.php:
|
393 |
msgctxt "a positive response"
|
394 |
msgid "Right on"
|
395 |
msgstr ""
|
396 |
|
397 |
-
#: includes/class-freemius.php:
|
398 |
msgid "seems like the key you entered doesn't match our records."
|
399 |
msgstr ""
|
400 |
|
401 |
-
#: includes/class-freemius.php:
|
402 |
msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
|
403 |
msgstr ""
|
404 |
|
405 |
-
#: includes/class-freemius.php:
|
406 |
msgid "Your %s Add-on plan was successfully upgraded."
|
407 |
msgstr ""
|
408 |
|
409 |
-
#: includes/class-freemius.php:
|
410 |
msgid "%s Add-on was successfully purchased."
|
411 |
msgstr ""
|
412 |
|
413 |
-
#: includes/class-freemius.php:
|
414 |
msgid "Download the latest version"
|
415 |
msgstr ""
|
416 |
|
417 |
-
#: includes/class-freemius.php:
|
418 |
msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
|
419 |
msgstr ""
|
420 |
|
421 |
-
#: includes/class-freemius.php:
|
422 |
msgid "Error received from the server:"
|
423 |
msgstr ""
|
424 |
|
425 |
-
#: includes/class-freemius.php:
|
426 |
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
427 |
msgstr ""
|
428 |
|
429 |
-
#: includes/class-freemius.php:
|
430 |
msgctxt "something somebody says when they are thinking about what you have just said."
|
431 |
msgid "Hmm"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: includes/class-freemius.php:
|
435 |
msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: includes/class-freemius.php:
|
439 |
msgctxt "trial period"
|
440 |
msgid "Trial"
|
441 |
msgstr ""
|
442 |
|
443 |
-
#: includes/class-freemius.php:
|
444 |
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
445 |
msgstr ""
|
446 |
|
447 |
-
#: includes/class-freemius.php:
|
448 |
msgid "Please contact us here"
|
449 |
msgstr ""
|
450 |
|
451 |
-
#: includes/class-freemius.php:
|
452 |
msgid "Your plan was successfully activated."
|
453 |
msgstr ""
|
454 |
|
455 |
-
#: includes/class-freemius.php:
|
456 |
msgid "Your plan was successfully upgraded."
|
457 |
msgstr ""
|
458 |
|
459 |
-
#: includes/class-freemius.php:
|
460 |
msgid "Your plan was successfully changed to %s."
|
461 |
msgstr ""
|
462 |
|
463 |
-
#: includes/class-freemius.php:
|
464 |
msgid "Your license has expired. You can still continue using the free %s forever."
|
465 |
msgstr ""
|
466 |
|
467 |
-
#: includes/class-freemius.php:
|
468 |
msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
469 |
msgstr ""
|
470 |
|
471 |
-
#: includes/class-freemius.php:
|
472 |
msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
|
473 |
msgstr ""
|
474 |
|
475 |
-
#: includes/class-freemius.php:
|
476 |
msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
|
477 |
msgstr ""
|
478 |
|
479 |
-
#: includes/class-freemius.php:
|
480 |
msgid "Your free trial has expired. You can still continue using all our free features."
|
481 |
msgstr ""
|
482 |
|
483 |
-
#: includes/class-freemius.php:
|
484 |
msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
485 |
msgstr ""
|
486 |
|
487 |
-
#: includes/class-freemius.php:
|
488 |
msgid "It looks like the license could not be activated."
|
489 |
msgstr ""
|
490 |
|
491 |
-
#: includes/class-freemius.php:
|
492 |
msgid "Your license was successfully activated."
|
493 |
msgstr ""
|
494 |
|
495 |
-
#: includes/class-freemius.php:
|
496 |
msgid "It looks like your site currently doesn't have an active license."
|
497 |
msgstr ""
|
498 |
|
499 |
-
#: includes/class-freemius.php:
|
500 |
msgid "It looks like the license deactivation failed."
|
501 |
msgstr ""
|
502 |
|
503 |
-
#: includes/class-freemius.php:
|
504 |
msgid "Your %s license was successfully deactivated."
|
505 |
msgstr ""
|
506 |
|
507 |
-
#: includes/class-freemius.php:
|
508 |
msgid "Your license was successfully deactivated, you are back to the %s plan."
|
509 |
msgstr ""
|
510 |
|
511 |
-
#: includes/class-freemius.php:
|
512 |
msgid "O.K"
|
513 |
msgstr ""
|
514 |
|
515 |
-
#: includes/class-freemius.php:
|
516 |
msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
517 |
msgstr ""
|
518 |
|
519 |
-
#: includes/class-freemius.php:
|
520 |
msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
521 |
msgstr ""
|
522 |
|
523 |
-
#: includes/class-freemius.php:
|
524 |
msgid "You are already running the %s in a trial mode."
|
525 |
msgstr ""
|
526 |
|
527 |
-
#: includes/class-freemius.php:
|
528 |
msgid "You already utilized a trial before."
|
529 |
msgstr ""
|
530 |
|
531 |
-
#: includes/class-freemius.php:
|
532 |
msgid "Plan %s do not exist, therefore, can't start a trial."
|
533 |
msgstr ""
|
534 |
|
535 |
-
#: includes/class-freemius.php:
|
536 |
msgid "Plan %s does not support a trial period."
|
537 |
msgstr ""
|
538 |
|
539 |
-
#: includes/class-freemius.php:
|
540 |
msgid "None of the %s's plans supports a trial period."
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: includes/class-freemius.php:
|
544 |
msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: includes/class-freemius.php:
|
548 |
msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: includes/class-freemius.php:
|
552 |
msgid "Your %s free trial was successfully cancelled."
|
553 |
msgstr ""
|
554 |
|
555 |
-
#: includes/class-freemius.php:
|
556 |
msgid "Version %s was released."
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: includes/class-freemius.php:
|
560 |
msgid "Please download %s."
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: includes/class-freemius.php:
|
564 |
msgid "the latest %s version here"
|
565 |
msgstr ""
|
566 |
|
567 |
-
#: includes/class-freemius.php:
|
568 |
msgid "New"
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: includes/class-freemius.php:
|
572 |
msgid "Seems like you got the latest release."
|
573 |
msgstr ""
|
574 |
|
575 |
-
#: includes/class-freemius.php:
|
576 |
msgid "You are all good!"
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: includes/class-freemius.php:
|
580 |
msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
581 |
msgstr ""
|
582 |
|
583 |
-
#: includes/class-freemius.php:
|
584 |
msgid "Site successfully opted in."
|
585 |
msgstr ""
|
586 |
|
587 |
-
#: includes/class-freemius.php:
|
588 |
msgid "Awesome"
|
589 |
msgstr ""
|
590 |
|
591 |
-
#: includes/class-freemius.php:
|
592 |
msgid "We appreciate your help in making the %s better by letting us track some usage data."
|
593 |
msgstr ""
|
594 |
|
595 |
-
#: includes/class-freemius.php:
|
596 |
msgid "Thank you!"
|
597 |
msgstr ""
|
598 |
|
599 |
-
#: includes/class-freemius.php:
|
600 |
msgid "We will no longer be sending any usage data of %s on %s to %s."
|
601 |
msgstr ""
|
602 |
|
603 |
-
#: includes/class-freemius.php:
|
604 |
-
msgid "
|
|
|
|
|
|
|
|
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: includes/class-freemius.php:
|
608 |
msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
|
609 |
msgstr ""
|
610 |
|
611 |
-
#: includes/class-freemius.php:
|
612 |
msgid "%s is the new owner of the account."
|
613 |
msgstr ""
|
614 |
|
615 |
-
#: includes/class-freemius.php:
|
616 |
msgctxt "as congratulations"
|
617 |
msgid "Congrats"
|
618 |
msgstr ""
|
619 |
|
620 |
-
#: includes/class-freemius.php:
|
621 |
-
msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
|
622 |
-
msgstr ""
|
623 |
-
|
624 |
-
#: includes/class-freemius.php:22287
|
625 |
msgid "Please provide your full name."
|
626 |
msgstr ""
|
627 |
|
628 |
-
#: includes/class-freemius.php:
|
629 |
msgid "Your name was successfully updated."
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: includes/class-freemius.php:
|
633 |
msgid "You have successfully updated your %s."
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: includes/class-freemius.php:
|
637 |
msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
|
638 |
msgstr ""
|
639 |
|
640 |
-
#: includes/class-freemius.php:
|
641 |
msgid "Click here"
|
642 |
msgstr ""
|
643 |
|
644 |
-
#: includes/class-freemius.php:
|
645 |
msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
646 |
msgstr ""
|
647 |
|
648 |
-
#: includes/class-freemius.php:
|
649 |
msgctxt "advance notice of something that will need attention."
|
650 |
msgid "Heads up"
|
651 |
msgstr ""
|
652 |
|
653 |
-
#: includes/class-freemius.php:
|
654 |
msgctxt "exclamation"
|
655 |
msgid "Hey"
|
656 |
msgstr ""
|
657 |
|
658 |
-
#: includes/class-freemius.php:
|
659 |
msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
|
660 |
msgstr ""
|
661 |
|
662 |
-
#: includes/class-freemius.php:
|
663 |
msgid "No commitment for %s days - cancel anytime!"
|
664 |
msgstr ""
|
665 |
|
666 |
-
#: includes/class-freemius.php:
|
667 |
msgid "No credit card required"
|
668 |
msgstr ""
|
669 |
|
670 |
-
#: includes/class-freemius.php:
|
671 |
msgctxt "call to action"
|
672 |
msgid "Start free trial"
|
673 |
msgstr ""
|
674 |
|
675 |
-
#: includes/class-freemius.php:
|
676 |
msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
|
677 |
msgstr ""
|
678 |
|
679 |
-
#: includes/class-freemius.php:
|
680 |
msgid "Learn more"
|
681 |
msgstr ""
|
682 |
|
683 |
-
#: includes/class-freemius.php:
|
684 |
msgid "Activate License"
|
685 |
msgstr ""
|
686 |
|
687 |
-
#: includes/class-freemius.php:
|
688 |
msgid "Change License"
|
689 |
msgstr ""
|
690 |
|
691 |
-
#: includes/class-freemius.php:
|
692 |
msgid "Opt Out"
|
693 |
msgstr ""
|
694 |
|
695 |
-
#: includes/class-freemius.php:
|
696 |
msgid "Opt In"
|
697 |
msgstr ""
|
698 |
|
699 |
-
#: includes/class-freemius.php:
|
700 |
msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
701 |
msgstr ""
|
702 |
|
703 |
-
#: includes/class-freemius.php:
|
704 |
msgid "Activate %s features"
|
705 |
msgstr ""
|
706 |
|
707 |
-
#: includes/class-freemius.php:
|
708 |
msgid "Please follow these steps to complete the upgrade"
|
709 |
msgstr ""
|
710 |
|
711 |
-
#: includes/class-freemius.php:
|
712 |
msgid "Download the latest %s version"
|
713 |
msgstr ""
|
714 |
|
715 |
-
#: includes/class-freemius.php:
|
716 |
msgid "Upload and activate the downloaded version"
|
717 |
msgstr ""
|
718 |
|
719 |
-
#: includes/class-freemius.php:
|
720 |
msgid "How to upload and activate?"
|
721 |
msgstr ""
|
722 |
|
723 |
-
#: includes/class-freemius.php:
|
724 |
msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
|
725 |
msgstr ""
|
726 |
|
727 |
-
#: includes/class-freemius.php:
|
728 |
msgid "Auto installation only works for opted-in users."
|
729 |
msgstr ""
|
730 |
|
731 |
-
#: includes/class-freemius.php:
|
732 |
msgid "Invalid module ID."
|
733 |
msgstr ""
|
734 |
|
735 |
-
#: includes/class-freemius.php:
|
736 |
msgid "Premium version already active."
|
737 |
msgstr ""
|
738 |
|
739 |
-
#: includes/class-freemius.php:
|
740 |
msgid "You do not have a valid license to access the premium version."
|
741 |
msgstr ""
|
742 |
|
743 |
-
#: includes/class-freemius.php:
|
744 |
msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
745 |
msgstr ""
|
746 |
|
747 |
-
#: includes/class-freemius.php:
|
748 |
msgid "Premium add-on version already installed."
|
749 |
msgstr ""
|
750 |
|
751 |
-
#: includes/class-freemius.php:
|
752 |
msgid "View paid features"
|
753 |
msgstr ""
|
754 |
|
755 |
-
#: includes/class-freemius.php:
|
756 |
msgid "Thank you so much for using %s and its add-ons!"
|
757 |
msgstr ""
|
758 |
|
759 |
-
#: includes/class-freemius.php:
|
760 |
msgid "Thank you so much for using %s!"
|
761 |
msgstr ""
|
762 |
|
763 |
-
#: includes/class-freemius.php:
|
764 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
765 |
msgstr ""
|
766 |
|
767 |
-
#: includes/class-freemius.php:
|
768 |
msgid "Thank you so much for using our products!"
|
769 |
msgstr ""
|
770 |
|
771 |
-
#: includes/class-freemius.php:
|
772 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
773 |
msgstr ""
|
774 |
|
775 |
-
#: includes/class-freemius.php:
|
776 |
msgid "%s and its add-ons"
|
777 |
msgstr ""
|
778 |
|
779 |
-
#: includes/class-freemius.php:
|
780 |
msgid "Products"
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: includes/class-freemius.php:
|
784 |
msgid "Yes"
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: includes/class-freemius.php:
|
788 |
msgid "send me security & feature updates, educational content and offers."
|
789 |
msgstr ""
|
790 |
|
791 |
-
#: includes/class-freemius.php:
|
792 |
msgid "No"
|
793 |
msgstr ""
|
794 |
|
795 |
-
#: includes/class-freemius.php:
|
796 |
msgid "do %sNOT%s send me security & feature updates, educational content and offers."
|
797 |
msgstr ""
|
798 |
|
799 |
-
#: includes/class-freemius.php:
|
800 |
msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
|
801 |
msgstr ""
|
802 |
|
803 |
-
#: includes/class-freemius.php:
|
804 |
msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
805 |
msgstr ""
|
806 |
|
807 |
-
#: includes/class-freemius.php:
|
808 |
msgid "License key is empty."
|
809 |
msgstr ""
|
810 |
|
@@ -816,31 +824,31 @@ msgstr ""
|
|
816 |
msgid "Buy license"
|
817 |
msgstr ""
|
818 |
|
819 |
-
#: includes/class-fs-plugin-updater.php:
|
820 |
msgid "There is a %s of %s available."
|
821 |
msgstr ""
|
822 |
|
823 |
-
#: includes/class-fs-plugin-updater.php:
|
824 |
msgid "new Beta version"
|
825 |
msgstr ""
|
826 |
|
827 |
-
#: includes/class-fs-plugin-updater.php:
|
828 |
msgid "new version"
|
829 |
msgstr ""
|
830 |
|
831 |
-
#: includes/class-fs-plugin-updater.php:
|
832 |
msgid "Important Upgrade Notice:"
|
833 |
msgstr ""
|
834 |
|
835 |
-
#: includes/class-fs-plugin-updater.php:
|
836 |
msgid "Installing plugin: %s"
|
837 |
msgstr ""
|
838 |
|
839 |
-
#: includes/class-fs-plugin-updater.php:
|
840 |
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
841 |
msgstr ""
|
842 |
|
843 |
-
#: includes/class-fs-plugin-updater.php:
|
844 |
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
845 |
msgstr ""
|
846 |
|
@@ -861,7 +869,7 @@ msgstr ""
|
|
861 |
msgid "Install Free Version Update Now"
|
862 |
msgstr ""
|
863 |
|
864 |
-
#: includes/fs-plugin-info-dialog.php:745, templates/account.php:
|
865 |
msgid "Install Update Now"
|
866 |
msgstr ""
|
867 |
|
@@ -878,7 +886,7 @@ msgctxt "as download latest version"
|
|
878 |
msgid "Download Latest Free Version"
|
879 |
msgstr ""
|
880 |
|
881 |
-
#: includes/fs-plugin-info-dialog.php:772, templates/account.php:
|
882 |
msgctxt "as download latest version"
|
883 |
msgid "Download Latest"
|
884 |
msgstr ""
|
@@ -887,11 +895,11 @@ msgstr ""
|
|
887 |
msgid "Activate this add-on"
|
888 |
msgstr ""
|
889 |
|
890 |
-
#: includes/fs-plugin-info-dialog.php:789, templates/connect.php:
|
891 |
msgid "Activate Free Version"
|
892 |
msgstr ""
|
893 |
|
894 |
-
#: includes/fs-plugin-info-dialog.php:790, templates/account.php:
|
895 |
msgid "Activate"
|
896 |
msgstr ""
|
897 |
|
@@ -1020,7 +1028,7 @@ msgstr ""
|
|
1020 |
msgid "Details"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
-
#: includes/fs-plugin-info-dialog.php:1318, templates/account.php:
|
1024 |
msgctxt "product version"
|
1025 |
msgid "Version"
|
1026 |
msgstr ""
|
@@ -1034,7 +1042,7 @@ msgstr ""
|
|
1034 |
msgid "Last Updated"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
-
#: includes/fs-plugin-info-dialog.php:1337, templates/account.php:
|
1038 |
msgctxt "x-ago"
|
1039 |
msgid "%s ago"
|
1040 |
msgstr ""
|
@@ -1143,293 +1151,293 @@ msgstr ""
|
|
1143 |
msgid "Latest Free Version Installed"
|
1144 |
msgstr ""
|
1145 |
|
1146 |
-
#: templates/account.php:
|
1147 |
msgid "Downgrading your plan"
|
1148 |
msgstr ""
|
1149 |
|
1150 |
-
#: templates/account.php:
|
1151 |
msgid "Cancelling the subscription"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
1155 |
-
#: templates/account.php:
|
1156 |
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#: templates/account.php:
|
1160 |
msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
|
1161 |
msgstr ""
|
1162 |
|
1163 |
-
#: templates/account.php:
|
1164 |
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1165 |
msgstr ""
|
1166 |
|
1167 |
-
#: templates/account.php:
|
1168 |
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1169 |
msgstr ""
|
1170 |
|
1171 |
-
#: templates/account.php:
|
1172 |
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1173 |
msgstr ""
|
1174 |
|
1175 |
#. translators: %s: Plan title (e.g. "Professional")
|
1176 |
-
#: templates/account.php:
|
1177 |
msgid "Activate %s Plan"
|
1178 |
msgstr ""
|
1179 |
|
1180 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1181 |
-
#: templates/account.php:
|
1182 |
msgid "Auto renews in %s"
|
1183 |
msgstr ""
|
1184 |
|
1185 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1186 |
-
#: templates/account.php:
|
1187 |
msgid "Expires in %s"
|
1188 |
msgstr ""
|
1189 |
|
1190 |
-
#: templates/account.php:
|
1191 |
msgctxt "as synchronize license"
|
1192 |
msgid "Sync License"
|
1193 |
msgstr ""
|
1194 |
|
1195 |
-
#: templates/account.php:
|
1196 |
msgid "Cancel Trial"
|
1197 |
msgstr ""
|
1198 |
|
1199 |
-
#: templates/account.php:
|
1200 |
msgid "Change Plan"
|
1201 |
msgstr ""
|
1202 |
|
1203 |
-
#: templates/account.php:
|
1204 |
msgctxt "verb"
|
1205 |
msgid "Upgrade"
|
1206 |
msgstr ""
|
1207 |
|
1208 |
-
#: templates/account.php:
|
1209 |
msgctxt "verb"
|
1210 |
msgid "Downgrade"
|
1211 |
msgstr ""
|
1212 |
|
1213 |
-
#: templates/account.php:
|
1214 |
msgid "Free"
|
1215 |
msgstr ""
|
1216 |
|
1217 |
-
#: templates/account.php:
|
1218 |
msgctxt "as product pricing plan"
|
1219 |
msgid "Plan"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
-
#: templates/account.php:
|
1223 |
msgid "Bundle Plan"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
-
#: templates/account.php:
|
1227 |
msgid "Free Trial"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
-
#: templates/account.php:
|
1231 |
msgid "Account Details"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
-
#: templates/account.php:
|
1235 |
msgid "Start Debug"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
-
#: templates/account.php:
|
1239 |
msgid "Stop Debug"
|
1240 |
msgstr ""
|
1241 |
|
1242 |
-
#: templates/account.php:
|
1243 |
msgid "Billing & Invoices"
|
1244 |
msgstr ""
|
1245 |
|
1246 |
-
#: templates/account.php:
|
1247 |
msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
-
#: templates/account.php:
|
1251 |
msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
|
1252 |
msgstr ""
|
1253 |
|
1254 |
-
#: templates/account.php:
|
1255 |
msgid "Delete Account"
|
1256 |
msgstr ""
|
1257 |
|
1258 |
-
#: templates/account.php:
|
1259 |
msgid "Deactivate License"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
-
#: templates/account.php:
|
1263 |
msgid "Are you sure you want to proceed?"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
-
#: templates/account.php:
|
1267 |
msgid "Cancel Subscription"
|
1268 |
msgstr ""
|
1269 |
|
1270 |
-
#: templates/account.php:
|
1271 |
msgctxt "as synchronize"
|
1272 |
msgid "Sync"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
-
#: templates/account.php:
|
1276 |
msgid "Name"
|
1277 |
msgstr ""
|
1278 |
|
1279 |
-
#: templates/account.php:
|
1280 |
msgid "Email"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
-
#: templates/account.php:
|
1284 |
msgid "User ID"
|
1285 |
msgstr ""
|
1286 |
|
1287 |
-
#: templates/account.php:
|
1288 |
msgid "ID"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
-
#: templates/account.php:
|
1292 |
msgid "Site ID"
|
1293 |
msgstr ""
|
1294 |
|
1295 |
-
#: templates/account.php:
|
1296 |
msgid "No ID"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
-
#: templates/account.php:
|
1300 |
msgid "Public Key"
|
1301 |
msgstr ""
|
1302 |
|
1303 |
-
#: templates/account.php:
|
1304 |
msgid "Secret Key"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
-
#: templates/account.php:
|
1308 |
msgctxt "as secret encryption key missing"
|
1309 |
msgid "No Secret"
|
1310 |
msgstr ""
|
1311 |
|
1312 |
-
#: templates/account.php:
|
1313 |
msgid "Trial"
|
1314 |
msgstr ""
|
1315 |
|
1316 |
-
#: templates/account.php:
|
1317 |
msgid "License Key"
|
1318 |
msgstr ""
|
1319 |
|
1320 |
-
#: templates/account.php:
|
1321 |
msgid "Join the Beta program"
|
1322 |
msgstr ""
|
1323 |
|
1324 |
-
#: templates/account.php:
|
1325 |
msgid "not verified"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
-
#: templates/account.php:
|
1329 |
msgid "Expired"
|
1330 |
msgstr ""
|
1331 |
|
1332 |
-
#: templates/account.php:
|
1333 |
msgid "Premium version"
|
1334 |
msgstr ""
|
1335 |
|
1336 |
-
#: templates/account.php:
|
1337 |
msgid "Free version"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
-
#: templates/account.php:
|
1341 |
msgid "Verify Email"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
-
#: templates/account.php:
|
1345 |
msgid "Download %s Version"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
-
#: templates/account.php:
|
1349 |
msgid "Download Paid Version"
|
1350 |
msgstr ""
|
1351 |
|
1352 |
-
#: templates/account.php:
|
1353 |
msgctxt "verb"
|
1354 |
msgid "Show"
|
1355 |
msgstr ""
|
1356 |
|
1357 |
-
#: templates/account.php:
|
1358 |
msgid "What is your %s?"
|
1359 |
msgstr ""
|
1360 |
|
1361 |
-
#: templates/account.php:
|
1362 |
msgctxt "verb"
|
1363 |
msgid "Edit"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
-
#: templates/account.php:
|
1367 |
msgid "Change User"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
-
#: templates/account.php:
|
1371 |
msgid "Sites"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
-
#: templates/account.php:
|
1375 |
msgid "Search by address"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
-
#: templates/account.php:
|
1379 |
msgid "Address"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
-
#: templates/account.php:
|
1383 |
msgid "License"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
-
#: templates/account.php:
|
1387 |
msgid "Plan"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
-
#: templates/account.php:
|
1391 |
msgctxt "as software license"
|
1392 |
msgid "License"
|
1393 |
msgstr ""
|
1394 |
|
1395 |
-
#: templates/account.php:
|
1396 |
msgctxt "verb"
|
1397 |
msgid "Hide"
|
1398 |
msgstr ""
|
1399 |
|
1400 |
-
#: templates/account.php:
|
1401 |
msgid "Processing"
|
1402 |
msgstr ""
|
1403 |
|
1404 |
-
#: templates/account.php:
|
1405 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
1406 |
msgstr ""
|
1407 |
|
1408 |
-
#: templates/account.php:
|
1409 |
msgid "Cancelling %s"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
-
#: templates/account.php:
|
1413 |
msgid "trial"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
-
#: templates/account.php:
|
1417 |
msgid "Cancelling %s..."
|
1418 |
msgstr ""
|
1419 |
|
1420 |
-
#: templates/account.php:
|
1421 |
msgid "subscription"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
-
#: templates/account.php:
|
1425 |
msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
-
#: templates/account.php:
|
1429 |
msgid "Disabling white-label mode"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
-
#: templates/account.php:
|
1433 |
msgid "Enabling white-label mode"
|
1434 |
msgstr ""
|
1435 |
|
@@ -1455,7 +1463,7 @@ msgctxt "installed add-on"
|
|
1455 |
msgid "Installed"
|
1456 |
msgstr ""
|
1457 |
|
1458 |
-
#: templates/admin-notice.php:13, templates/forms/license-activation.php:
|
1459 |
msgctxt "as close a window"
|
1460 |
msgid "Dismiss"
|
1461 |
msgstr ""
|
@@ -1489,198 +1497,198 @@ msgid "PCI compliant"
|
|
1489 |
msgstr ""
|
1490 |
|
1491 |
#. translators: %s: name (e.g. Hey John,)
|
1492 |
-
#: templates/connect.php:
|
1493 |
msgctxt "greeting"
|
1494 |
msgid "Hey %s,"
|
1495 |
msgstr ""
|
1496 |
|
1497 |
-
#: templates/connect.php:
|
1498 |
msgid "Allow & Continue"
|
1499 |
msgstr ""
|
1500 |
|
1501 |
-
#: templates/connect.php:
|
1502 |
msgid "Re-send activation email"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
-
#: templates/connect.php:
|
1506 |
msgid "Thanks %s!"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
-
#: templates/connect.php:
|
1510 |
msgid "Agree & Activate License"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
-
#: templates/connect.php:
|
1514 |
msgid "Welcome to %s! To get started, please enter your license key:"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
-
#: templates/connect.php:
|
1518 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
|
1519 |
msgstr ""
|
1520 |
|
1521 |
-
#: templates/connect.php:
|
1522 |
msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
|
1523 |
msgstr ""
|
1524 |
|
1525 |
-
#: templates/connect.php:
|
1526 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1527 |
msgstr ""
|
1528 |
|
1529 |
-
#: templates/connect.php:
|
1530 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1531 |
msgstr ""
|
1532 |
|
1533 |
-
#: templates/connect.php:
|
1534 |
msgid "We're excited to introduce the Freemius network-level integration."
|
1535 |
msgstr ""
|
1536 |
|
1537 |
-
#: templates/connect.php:
|
1538 |
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1539 |
msgstr ""
|
1540 |
|
1541 |
-
#: templates/connect.php:
|
1542 |
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1543 |
msgstr ""
|
1544 |
|
1545 |
-
#: templates/connect.php:
|
1546 |
msgid "%s's paid features"
|
1547 |
msgstr ""
|
1548 |
|
1549 |
-
#: templates/connect.php:
|
1550 |
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1551 |
msgstr ""
|
1552 |
|
1553 |
-
#: templates/connect.php:
|
1554 |
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1555 |
msgstr ""
|
1556 |
|
1557 |
-
#: templates/connect.php:
|
1558 |
msgid "License key"
|
1559 |
msgstr ""
|
1560 |
|
1561 |
-
#: templates/connect.php:
|
1562 |
msgid "Can't find your license key?"
|
1563 |
msgstr ""
|
1564 |
|
1565 |
-
#: templates/connect.php:
|
1566 |
msgctxt "verb"
|
1567 |
msgid "Skip"
|
1568 |
msgstr ""
|
1569 |
|
1570 |
-
#: templates/connect.php:
|
1571 |
msgid "Delegate to Site Admins"
|
1572 |
msgstr ""
|
1573 |
|
1574 |
-
#: templates/connect.php:
|
1575 |
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1576 |
msgstr ""
|
1577 |
|
1578 |
-
#: templates/connect.php:
|
1579 |
msgid "License issues?"
|
1580 |
msgstr ""
|
1581 |
|
1582 |
-
#: templates/connect.php:
|
1583 |
msgid "Your Profile Overview"
|
1584 |
msgstr ""
|
1585 |
|
1586 |
-
#: templates/connect.php:
|
1587 |
msgid "Name and email address"
|
1588 |
msgstr ""
|
1589 |
|
1590 |
-
#: templates/connect.php:
|
1591 |
msgid "So you can manage and control your license remotely from the User Dashboard."
|
1592 |
msgstr ""
|
1593 |
|
1594 |
-
#: templates/connect.php:
|
1595 |
msgid "Your Site Overview"
|
1596 |
msgstr ""
|
1597 |
|
1598 |
-
#: templates/connect.php:
|
1599 |
msgid "Site URL, WP version, PHP info"
|
1600 |
msgstr ""
|
1601 |
|
1602 |
-
#: templates/connect.php:
|
1603 |
msgid "Admin Notices"
|
1604 |
msgstr ""
|
1605 |
|
1606 |
-
#: templates/connect.php:
|
1607 |
msgid "Updates, announcements, marketing, no spam"
|
1608 |
msgstr ""
|
1609 |
|
1610 |
-
#: templates/connect.php:
|
1611 |
msgid "So you can reuse the license when the %s is no longer active."
|
1612 |
msgstr ""
|
1613 |
|
1614 |
-
#: templates/connect.php:
|
1615 |
msgid "Current %s Status"
|
1616 |
msgstr ""
|
1617 |
|
1618 |
-
#: templates/connect.php:
|
1619 |
msgid "Active, deactivated, or uninstalled"
|
1620 |
msgstr ""
|
1621 |
|
1622 |
-
#: templates/connect.php:
|
1623 |
msgid "Newsletter"
|
1624 |
msgstr ""
|
1625 |
|
1626 |
-
#: templates/connect.php:
|
1627 |
msgid "Plugins & Themes"
|
1628 |
msgstr ""
|
1629 |
|
1630 |
-
#: templates/connect.php:
|
1631 |
msgid "optional"
|
1632 |
msgstr ""
|
1633 |
|
1634 |
-
#: templates/connect.php:
|
1635 |
msgid "To help us troubleshoot any potential issues that may arise from other plugin or theme conflicts."
|
1636 |
msgstr ""
|
1637 |
|
1638 |
-
#: templates/connect.php:
|
1639 |
msgid "Title, slug, version, and is active"
|
1640 |
msgstr ""
|
1641 |
|
1642 |
-
#: templates/connect.php:
|
1643 |
msgid "The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management."
|
1644 |
msgstr ""
|
1645 |
|
1646 |
-
#: templates/connect.php:
|
1647 |
msgid "diagnostic data"
|
1648 |
msgstr ""
|
1649 |
|
1650 |
-
#: templates/connect.php:
|
1651 |
msgid "Freemius is our licensing and software updates engine"
|
1652 |
msgstr ""
|
1653 |
|
1654 |
-
#: templates/connect.php:
|
1655 |
msgid "What permissions are being granted?"
|
1656 |
msgstr ""
|
1657 |
|
1658 |
-
#: templates/connect.php:
|
1659 |
msgid "Don't have a license key?"
|
1660 |
msgstr ""
|
1661 |
|
1662 |
-
#: templates/connect.php:
|
1663 |
msgid "Have a license key?"
|
1664 |
msgstr ""
|
1665 |
|
1666 |
-
#: templates/connect.php:
|
1667 |
msgid "Privacy Policy"
|
1668 |
msgstr ""
|
1669 |
|
1670 |
-
#: templates/connect.php:
|
1671 |
msgid "License Agreement"
|
1672 |
msgstr ""
|
1673 |
|
1674 |
-
#: templates/connect.php:
|
1675 |
msgid "Terms of Service"
|
1676 |
msgstr ""
|
1677 |
|
1678 |
-
#: templates/connect.php:
|
1679 |
msgctxt "as in the process of sending an email"
|
1680 |
msgid "Sending email"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
-
#: templates/connect.php:
|
1684 |
msgctxt "as activating plugin"
|
1685 |
msgid "Activating"
|
1686 |
msgstr ""
|
@@ -1708,7 +1716,7 @@ msgctxt "as code debugging"
|
|
1708 |
msgid "Debugging"
|
1709 |
msgstr ""
|
1710 |
|
1711 |
-
#: templates/debug.php:52, templates/debug.php:
|
1712 |
msgid "Actions"
|
1713 |
msgstr ""
|
1714 |
|
@@ -1728,206 +1736,210 @@ msgstr ""
|
|
1728 |
msgid "Clear Updates Transients"
|
1729 |
msgstr ""
|
1730 |
|
1731 |
-
#: templates/debug.php:
|
|
|
|
|
|
|
|
|
1732 |
msgid "Sync Data From Server"
|
1733 |
msgstr ""
|
1734 |
|
1735 |
-
#: templates/debug.php:
|
1736 |
msgid "Migrate Options to Network"
|
1737 |
msgstr ""
|
1738 |
|
1739 |
-
#: templates/debug.php:
|
1740 |
msgid "Load DB Option"
|
1741 |
msgstr ""
|
1742 |
|
1743 |
-
#: templates/debug.php:
|
1744 |
msgid "Set DB Option"
|
1745 |
msgstr ""
|
1746 |
|
1747 |
-
#: templates/debug.php:
|
1748 |
msgid "Key"
|
1749 |
msgstr ""
|
1750 |
|
1751 |
-
#: templates/debug.php:
|
1752 |
msgid "Value"
|
1753 |
msgstr ""
|
1754 |
|
1755 |
-
#: templates/debug.php:
|
1756 |
msgctxt "as software development kit versions"
|
1757 |
msgid "SDK Versions"
|
1758 |
msgstr ""
|
1759 |
|
1760 |
-
#: templates/debug.php:
|
1761 |
msgid "SDK Path"
|
1762 |
msgstr ""
|
1763 |
|
1764 |
-
#: templates/debug.php:
|
1765 |
msgid "Module Path"
|
1766 |
msgstr ""
|
1767 |
|
1768 |
-
#: templates/debug.php:
|
1769 |
msgid "Is Active"
|
1770 |
msgstr ""
|
1771 |
|
1772 |
-
#: templates/debug.php:
|
1773 |
msgid "Plugins"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
-
#: templates/debug.php:
|
1777 |
msgid "Themes"
|
1778 |
msgstr ""
|
1779 |
|
1780 |
-
#: templates/debug.php:
|
1781 |
msgid "Slug"
|
1782 |
msgstr ""
|
1783 |
|
1784 |
-
#: templates/debug.php:
|
1785 |
msgid "Title"
|
1786 |
msgstr ""
|
1787 |
|
1788 |
-
#: templates/debug.php:
|
1789 |
msgctxt "as application program interface"
|
1790 |
msgid "API"
|
1791 |
msgstr ""
|
1792 |
|
1793 |
-
#: templates/debug.php:
|
1794 |
msgid "Freemius State"
|
1795 |
msgstr ""
|
1796 |
|
1797 |
-
#: templates/debug.php:
|
1798 |
msgid "Network Blog"
|
1799 |
msgstr ""
|
1800 |
|
1801 |
-
#: templates/debug.php:
|
1802 |
msgid "Network User"
|
1803 |
msgstr ""
|
1804 |
|
1805 |
-
#: templates/debug.php:
|
1806 |
msgctxt "as connection was successful"
|
1807 |
msgid "Connected"
|
1808 |
msgstr ""
|
1809 |
|
1810 |
-
#: templates/debug.php:
|
1811 |
msgctxt "as connection blocked"
|
1812 |
msgid "Blocked"
|
1813 |
msgstr ""
|
1814 |
|
1815 |
-
#: templates/debug.php:
|
1816 |
msgid "Simulate Trial Promotion"
|
1817 |
msgstr ""
|
1818 |
|
1819 |
-
#: templates/debug.php:
|
1820 |
msgid "Simulate Network Upgrade"
|
1821 |
msgstr ""
|
1822 |
|
1823 |
-
#: templates/debug.php:
|
1824 |
msgid "%s Installs"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
-
#: templates/debug.php:
|
1828 |
msgctxt "like websites"
|
1829 |
msgid "Sites"
|
1830 |
msgstr ""
|
1831 |
|
1832 |
-
#: templates/debug.php:
|
1833 |
msgid "Blog ID"
|
1834 |
msgstr ""
|
1835 |
|
1836 |
-
#: templates/debug.php:
|
1837 |
msgid "License ID"
|
1838 |
msgstr ""
|
1839 |
|
1840 |
-
#: templates/debug.php:
|
1841 |
msgctxt "verb"
|
1842 |
msgid "Delete"
|
1843 |
msgstr ""
|
1844 |
|
1845 |
-
#: templates/debug.php:
|
1846 |
msgid "Add Ons of module %s"
|
1847 |
msgstr ""
|
1848 |
|
1849 |
-
#: templates/debug.php:
|
1850 |
msgid "Users"
|
1851 |
msgstr ""
|
1852 |
|
1853 |
-
#: templates/debug.php:
|
1854 |
msgid "Verified"
|
1855 |
msgstr ""
|
1856 |
|
1857 |
-
#: templates/debug.php:
|
1858 |
msgid "%s Licenses"
|
1859 |
msgstr ""
|
1860 |
|
1861 |
-
#: templates/debug.php:
|
1862 |
msgid "Plugin ID"
|
1863 |
msgstr ""
|
1864 |
|
1865 |
-
#: templates/debug.php:
|
1866 |
msgid "Plan ID"
|
1867 |
msgstr ""
|
1868 |
|
1869 |
-
#: templates/debug.php:
|
1870 |
msgid "Quota"
|
1871 |
msgstr ""
|
1872 |
|
1873 |
-
#: templates/debug.php:
|
1874 |
msgid "Activated"
|
1875 |
msgstr ""
|
1876 |
|
1877 |
-
#: templates/debug.php:
|
1878 |
msgid "Blocking"
|
1879 |
msgstr ""
|
1880 |
|
1881 |
-
#: templates/debug.php:
|
1882 |
msgid "Type"
|
1883 |
msgstr ""
|
1884 |
|
1885 |
-
#: templates/debug.php:
|
1886 |
msgctxt "as expiration date"
|
1887 |
msgid "Expiration"
|
1888 |
msgstr ""
|
1889 |
|
1890 |
-
#: templates/debug.php:
|
1891 |
msgid "Debug Log"
|
1892 |
msgstr ""
|
1893 |
|
1894 |
-
#: templates/debug.php:
|
1895 |
msgid "All Types"
|
1896 |
msgstr ""
|
1897 |
|
1898 |
-
#: templates/debug.php:
|
1899 |
msgid "All Requests"
|
1900 |
msgstr ""
|
1901 |
|
1902 |
-
#: templates/debug.php:
|
1903 |
msgid "File"
|
1904 |
msgstr ""
|
1905 |
|
1906 |
-
#: templates/debug.php:
|
1907 |
msgid "Function"
|
1908 |
msgstr ""
|
1909 |
|
1910 |
-
#: templates/debug.php:
|
1911 |
msgid "Process ID"
|
1912 |
msgstr ""
|
1913 |
|
1914 |
-
#: templates/debug.php:
|
1915 |
msgid "Logger"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
-
#: templates/debug.php:
|
1919 |
msgid "Message"
|
1920 |
msgstr ""
|
1921 |
|
1922 |
-
#: templates/debug.php:
|
1923 |
msgid "Filter"
|
1924 |
msgstr ""
|
1925 |
|
1926 |
-
#: templates/debug.php:
|
1927 |
msgid "Download"
|
1928 |
msgstr ""
|
1929 |
|
1930 |
-
#: templates/debug.php:
|
1931 |
msgid "Timestamp"
|
1932 |
msgstr ""
|
1933 |
|
@@ -1952,6 +1964,120 @@ msgstr ""
|
|
1952 |
msgid "Requests"
|
1953 |
msgstr ""
|
1954 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1955 |
#: templates/account/billing.php:22
|
1956 |
msgctxt "verb"
|
1957 |
msgid "Update"
|
@@ -2261,6 +2387,51 @@ msgstr ""
|
|
2261 |
msgid "User key"
|
2262 |
msgstr ""
|
2263 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2264 |
#: templates/forms/license-activation.php:23
|
2265 |
msgid "Please enter the license key that you received in the email right after the purchase:"
|
2266 |
msgstr ""
|
@@ -2273,7 +2444,7 @@ msgstr ""
|
|
2273 |
msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
|
2274 |
msgstr ""
|
2275 |
|
2276 |
-
#: templates/forms/license-activation.php:
|
2277 |
msgid "Associate with the license owner's account."
|
2278 |
msgstr ""
|
2279 |
|
@@ -2356,10 +2527,6 @@ msgstr ""
|
|
2356 |
msgid "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
|
2357 |
msgstr ""
|
2358 |
|
2359 |
-
#: templates/forms/subscription-cancellation.php:52
|
2360 |
-
msgid "license"
|
2361 |
-
msgstr ""
|
2362 |
-
|
2363 |
#: templates/forms/subscription-cancellation.php:57
|
2364 |
msgid "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
|
2365 |
msgstr ""
|
@@ -2380,7 +2547,7 @@ msgstr ""
|
|
2380 |
msgid "Proceed"
|
2381 |
msgstr ""
|
2382 |
|
2383 |
-
#: templates/forms/subscription-cancellation.php:191, templates/forms/deactivation/form.php:
|
2384 |
msgid "Cancel %s & Proceed"
|
2385 |
msgstr ""
|
2386 |
|
@@ -2404,11 +2571,6 @@ msgstr ""
|
|
2404 |
msgid "Enter email address"
|
2405 |
msgstr ""
|
2406 |
|
2407 |
-
#: templates/forms/user-change.php:81
|
2408 |
-
msgctxt "close window"
|
2409 |
-
msgid "Dismiss"
|
2410 |
-
msgstr ""
|
2411 |
-
|
2412 |
#: templates/js/style-premium-theme.php:39
|
2413 |
msgid "Premium"
|
2414 |
msgstr ""
|
@@ -2503,47 +2665,63 @@ msgstr ""
|
|
2503 |
msgid "Contact Support"
|
2504 |
msgstr ""
|
2505 |
|
2506 |
-
#: templates/forms/deactivation/form.php:
|
2507 |
msgid "Anonymous feedback"
|
2508 |
msgstr ""
|
2509 |
|
2510 |
-
#: templates/forms/deactivation/form.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2511 |
msgid "Deactivate"
|
2512 |
msgstr ""
|
2513 |
|
2514 |
-
#: templates/forms/deactivation/form.php:
|
2515 |
msgid "Activate %s"
|
2516 |
msgstr ""
|
2517 |
|
2518 |
-
#: templates/forms/deactivation/form.php:
|
|
|
|
|
|
|
|
|
2519 |
msgid "Quick Feedback"
|
2520 |
msgstr ""
|
2521 |
|
2522 |
-
#: templates/forms/deactivation/form.php:
|
2523 |
msgid "If you have a moment, please let us know why you are %s"
|
2524 |
msgstr ""
|
2525 |
|
2526 |
-
#: templates/forms/deactivation/form.php:
|
2527 |
msgid "deactivating"
|
2528 |
msgstr ""
|
2529 |
|
2530 |
-
#: templates/forms/deactivation/form.php:
|
2531 |
msgid "switching"
|
2532 |
msgstr ""
|
2533 |
|
2534 |
-
#: templates/forms/deactivation/form.php:
|
2535 |
-
msgid "
|
2536 |
msgstr ""
|
2537 |
|
2538 |
-
#: templates/forms/deactivation/form.php:
|
2539 |
-
msgid "
|
2540 |
msgstr ""
|
2541 |
|
2542 |
-
#: templates/forms/deactivation/form.php:
|
2543 |
msgid "Yes - %s"
|
2544 |
msgstr ""
|
2545 |
|
2546 |
-
#: templates/forms/deactivation/form.php:
|
2547 |
msgid "Skip & %s"
|
2548 |
msgstr ""
|
2549 |
|
1 |
+
# Copyright (C) 2022 freemius
|
2 |
# This file is distributed under the same license as the freemius package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
|
19 |
+
#: includes/class-freemius.php:1932, templates/account.php:941
|
20 |
msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
|
21 |
msgstr ""
|
22 |
|
23 |
+
#: includes/class-freemius.php:1939
|
24 |
msgid "Would you like to proceed with the update?"
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: includes/class-freemius.php:2158
|
28 |
msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: includes/class-freemius.php:2160
|
32 |
msgid "Error"
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: includes/class-freemius.php:2606
|
36 |
msgid "I found a better %s"
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: includes/class-freemius.php:2608
|
40 |
msgid "What's the %s's name?"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: includes/class-freemius.php:2614
|
44 |
+
msgid "It's a temporary %s - I'm troubleshooting an issue"
|
45 |
msgstr ""
|
46 |
|
47 |
+
#: includes/class-freemius.php:2616
|
48 |
msgid "Deactivation"
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: includes/class-freemius.php:2617
|
52 |
msgid "Theme Switch"
|
53 |
msgstr ""
|
54 |
|
55 |
+
#: includes/class-freemius.php:2626, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
|
56 |
msgid "Other"
|
57 |
msgstr ""
|
58 |
|
59 |
+
#: includes/class-freemius.php:2634
|
60 |
msgid "I no longer need the %s"
|
61 |
msgstr ""
|
62 |
|
63 |
+
#: includes/class-freemius.php:2641
|
64 |
msgid "I only needed the %s for a short period"
|
65 |
msgstr ""
|
66 |
|
67 |
+
#: includes/class-freemius.php:2647
|
68 |
msgid "The %s broke my site"
|
69 |
msgstr ""
|
70 |
|
71 |
+
#: includes/class-freemius.php:2654
|
72 |
msgid "The %s suddenly stopped working"
|
73 |
msgstr ""
|
74 |
|
75 |
+
#: includes/class-freemius.php:2664
|
76 |
msgid "I can't pay for it anymore"
|
77 |
msgstr ""
|
78 |
|
79 |
+
#: includes/class-freemius.php:2666
|
80 |
msgid "What price would you feel comfortable paying?"
|
81 |
msgstr ""
|
82 |
|
83 |
+
#: includes/class-freemius.php:2672
|
84 |
msgid "I don't like to share my information with you"
|
85 |
msgstr ""
|
86 |
|
87 |
+
#: includes/class-freemius.php:2693
|
88 |
msgid "The %s didn't work"
|
89 |
msgstr ""
|
90 |
|
91 |
+
#: includes/class-freemius.php:2703
|
92 |
msgid "I couldn't understand how to make it work"
|
93 |
msgstr ""
|
94 |
|
95 |
+
#: includes/class-freemius.php:2711
|
96 |
msgid "The %s is great, but I need specific feature that you don't support"
|
97 |
msgstr ""
|
98 |
|
99 |
+
#: includes/class-freemius.php:2713
|
100 |
msgid "What feature?"
|
101 |
msgstr ""
|
102 |
|
103 |
+
#: includes/class-freemius.php:2717
|
104 |
msgid "The %s is not working"
|
105 |
msgstr ""
|
106 |
|
107 |
+
#: includes/class-freemius.php:2719
|
108 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
109 |
msgstr ""
|
110 |
|
111 |
+
#: includes/class-freemius.php:2723
|
112 |
msgid "It's not what I was looking for"
|
113 |
msgstr ""
|
114 |
|
115 |
+
#: includes/class-freemius.php:2725
|
116 |
msgid "What you've been looking for?"
|
117 |
msgstr ""
|
118 |
|
119 |
+
#: includes/class-freemius.php:2729
|
120 |
msgid "The %s didn't work as expected"
|
121 |
msgstr ""
|
122 |
|
123 |
+
#: includes/class-freemius.php:2731
|
124 |
msgid "What did you expect?"
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: includes/class-freemius.php:3751, templates/debug.php:20
|
128 |
msgid "Freemius Debug"
|
129 |
msgstr ""
|
130 |
|
131 |
+
#: includes/class-freemius.php:4538
|
132 |
msgid "I don't know what is cURL or how to install it, help me!"
|
133 |
msgstr ""
|
134 |
|
135 |
+
#: includes/class-freemius.php:4540
|
136 |
msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
|
137 |
msgstr ""
|
138 |
|
139 |
+
#: includes/class-freemius.php:4547
|
140 |
msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: includes/class-freemius.php:4652
|
144 |
msgid "Yes - do your thing"
|
145 |
msgstr ""
|
146 |
|
147 |
+
#: includes/class-freemius.php:4657
|
148 |
msgid "No - just deactivate"
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: includes/class-freemius.php:4702, includes/class-freemius.php:5218, includes/class-freemius.php:6480, includes/class-freemius.php:13907, includes/class-freemius.php:14649, includes/class-freemius.php:18176, includes/class-freemius.php:18281, includes/class-freemius.php:18458, includes/class-freemius.php:20718, includes/class-freemius.php:21096, includes/class-freemius.php:21110, includes/class-freemius.php:21798, includes/class-freemius.php:22810, includes/class-freemius.php:22943, includes/class-freemius.php:23073, templates/add-ons.php:57
|
152 |
msgctxt "exclamation"
|
153 |
msgid "Oops"
|
154 |
msgstr ""
|
155 |
|
156 |
+
#: includes/class-freemius.php:4771
|
157 |
msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: includes/class-freemius.php:5187
|
161 |
+
msgid "You have purchased a %s license."
|
162 |
+
msgstr ""
|
163 |
+
|
164 |
+
#: includes/class-freemius.php:5191
|
165 |
+
msgid " The %s's %sdownload link%s, license key, and installation instructions have been sent to %s. If you can't find the email after 5 min, please check your spam box."
|
166 |
+
msgstr ""
|
167 |
+
|
168 |
+
#: includes/class-freemius.php:5201, includes/class-freemius.php:6177, includes/class-freemius.php:17574, includes/class-freemius.php:17585, includes/class-freemius.php:20987, includes/class-freemius.php:21378, includes/class-freemius.php:21447, includes/class-freemius.php:21619
|
169 |
+
msgctxt "interjection expressing joy or exuberance"
|
170 |
+
msgid "Yee-haw"
|
171 |
+
msgstr ""
|
172 |
+
|
173 |
+
#: includes/class-freemius.php:5215
|
174 |
msgctxt "addonX cannot run without pluginY"
|
175 |
msgid "%s cannot run without %s."
|
176 |
msgstr ""
|
177 |
|
178 |
+
#: includes/class-freemius.php:5216
|
179 |
msgctxt "addonX cannot run..."
|
180 |
msgid "%s cannot run without the plugin."
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: includes/class-freemius.php:5416, includes/class-freemius.php:5441, includes/class-freemius.php:21869
|
184 |
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: includes/class-freemius.php:6146
|
188 |
msgid "Premium %s version was successfully activated."
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: includes/class-freemius.php:6158, includes/class-freemius.php:8104
|
192 |
msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
|
193 |
msgid "W00t"
|
194 |
msgstr ""
|
195 |
|
196 |
+
#: includes/class-freemius.php:6173
|
197 |
msgid "You have a %s license."
|
198 |
msgstr ""
|
199 |
|
200 |
+
#: includes/class-freemius.php:6463
|
|
|
|
|
|
|
|
|
|
|
201 |
msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
|
202 |
msgstr ""
|
203 |
|
204 |
+
#: includes/class-freemius.php:6467
|
205 |
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
206 |
msgstr ""
|
207 |
|
208 |
+
#: includes/class-freemius.php:6476, templates/add-ons.php:186, templates/account/partials/addon.php:381
|
209 |
msgid "More information about %s"
|
210 |
msgstr ""
|
211 |
|
212 |
+
#: includes/class-freemius.php:6477
|
213 |
msgid "Purchase License"
|
214 |
msgstr ""
|
215 |
|
216 |
+
#: includes/class-freemius.php:7443, templates/connect.php:180
|
217 |
msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
|
218 |
msgstr ""
|
219 |
|
220 |
+
#: includes/class-freemius.php:7447
|
221 |
msgid "start the trial"
|
222 |
msgstr ""
|
223 |
|
224 |
+
#: includes/class-freemius.php:7448, templates/connect.php:184
|
225 |
msgid "complete the install"
|
226 |
msgstr ""
|
227 |
|
228 |
+
#: includes/class-freemius.php:7581
|
229 |
msgid "You are just one step away - %s"
|
230 |
msgstr ""
|
231 |
|
232 |
+
#: includes/class-freemius.php:7584
|
233 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
234 |
msgid "Complete \"%s\" Activation Now"
|
235 |
msgstr ""
|
236 |
|
237 |
+
#: includes/class-freemius.php:7666
|
238 |
msgid "We made a few tweaks to the %s, %s"
|
239 |
msgstr ""
|
240 |
|
241 |
+
#: includes/class-freemius.php:7670
|
242 |
msgid "Opt in to make \"%s\" better!"
|
243 |
msgstr ""
|
244 |
|
245 |
+
#: includes/class-freemius.php:8103
|
246 |
msgid "The upgrade of %s was successfully completed."
|
247 |
msgstr ""
|
248 |
|
249 |
+
#: includes/class-freemius.php:10669, includes/class-fs-plugin-updater.php:1089, includes/class-fs-plugin-updater.php:1284, includes/class-fs-plugin-updater.php:1291, templates/auto-installation.php:32
|
250 |
msgid "Add-On"
|
251 |
msgstr ""
|
252 |
|
253 |
+
#: includes/class-freemius.php:10671, templates/account.php:403, templates/account.php:411, templates/debug.php:368, templates/debug.php:566
|
254 |
msgid "Plugin"
|
255 |
msgstr ""
|
256 |
|
257 |
+
#: includes/class-freemius.php:10672, templates/account.php:404, templates/account.php:412, templates/debug.php:368, templates/debug.php:566, templates/forms/deactivation/form.php:107
|
258 |
msgid "Theme"
|
259 |
msgstr ""
|
260 |
|
261 |
+
#: includes/class-freemius.php:13727
|
262 |
msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
|
263 |
msgstr ""
|
264 |
|
265 |
+
#: includes/class-freemius.php:13741
|
266 |
msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
|
267 |
msgstr ""
|
268 |
|
269 |
+
#: includes/class-freemius.php:13746
|
270 |
msgid "User Dashboard"
|
271 |
msgstr ""
|
272 |
|
273 |
+
#: includes/class-freemius.php:13747
|
274 |
msgid "revert it now"
|
275 |
msgstr ""
|
276 |
|
277 |
+
#: includes/class-freemius.php:13805
|
278 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
279 |
msgstr ""
|
280 |
|
281 |
+
#: includes/class-freemius.php:13878
|
282 |
msgid "Invalid new user ID or email address."
|
283 |
msgstr ""
|
284 |
|
285 |
+
#: includes/class-freemius.php:13908
|
286 |
msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
|
287 |
msgstr ""
|
288 |
|
289 |
+
#: includes/class-freemius.php:13909
|
290 |
msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
291 |
msgstr ""
|
292 |
|
293 |
+
#: includes/class-freemius.php:13916
|
294 |
msgid "Change Ownership"
|
295 |
msgstr ""
|
296 |
|
297 |
+
#: includes/class-freemius.php:14516
|
298 |
msgid "Invalid site details collection."
|
299 |
msgstr ""
|
300 |
|
301 |
+
#: includes/class-freemius.php:14636
|
302 |
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
303 |
msgstr ""
|
304 |
|
305 |
+
#: includes/class-freemius.php:14638
|
306 |
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
307 |
msgstr ""
|
308 |
|
309 |
+
#: includes/class-freemius.php:14912
|
310 |
msgid "Account is pending activation."
|
311 |
msgstr ""
|
312 |
|
313 |
+
#: includes/class-freemius.php:15024, templates/forms/premium-versions-upgrade-handler.php:47
|
314 |
msgid "Buy a license now"
|
315 |
msgstr ""
|
316 |
|
317 |
+
#: includes/class-freemius.php:15036, templates/forms/premium-versions-upgrade-handler.php:46
|
318 |
msgid "Renew your license now"
|
319 |
msgstr ""
|
320 |
|
321 |
+
#: includes/class-freemius.php:15040
|
322 |
msgid "%s to access version %s security & feature updates, and support."
|
323 |
msgstr ""
|
324 |
|
325 |
+
#: includes/class-freemius.php:17556
|
326 |
msgid "%s activation was successfully completed."
|
327 |
msgstr ""
|
328 |
|
329 |
+
#: includes/class-freemius.php:17570
|
330 |
msgid "Your account was successfully activated with the %s plan."
|
331 |
msgstr ""
|
332 |
|
333 |
+
#: includes/class-freemius.php:17581, includes/class-freemius.php:21443
|
334 |
msgid "Your trial has been successfully started."
|
335 |
msgstr ""
|
336 |
|
337 |
+
#: includes/class-freemius.php:18174, includes/class-freemius.php:18279, includes/class-freemius.php:18456
|
338 |
msgid "Couldn't activate %s."
|
339 |
msgstr ""
|
340 |
|
341 |
+
#: includes/class-freemius.php:18175, includes/class-freemius.php:18280, includes/class-freemius.php:18457
|
342 |
msgid "Please contact us with the following message:"
|
343 |
msgstr ""
|
344 |
|
345 |
+
#: includes/class-freemius.php:18276, templates/forms/data-debug-mode.php:162
|
346 |
msgid "An unknown error has occurred."
|
347 |
msgstr ""
|
348 |
|
349 |
+
#: includes/class-freemius.php:18818, includes/class-freemius.php:24152
|
350 |
msgid "Upgrade"
|
351 |
msgstr ""
|
352 |
|
353 |
+
#: includes/class-freemius.php:18824
|
354 |
msgid "Start Trial"
|
355 |
msgstr ""
|
356 |
|
357 |
+
#: includes/class-freemius.php:18826
|
358 |
msgid "Pricing"
|
359 |
msgstr ""
|
360 |
|
361 |
+
#: includes/class-freemius.php:18906, includes/class-freemius.php:18908
|
362 |
msgid "Affiliation"
|
363 |
msgstr ""
|
364 |
|
365 |
+
#: includes/class-freemius.php:18936, includes/class-freemius.php:18938, templates/account.php:251, templates/debug.php:334
|
366 |
msgid "Account"
|
367 |
msgstr ""
|
368 |
|
369 |
+
#: includes/class-freemius.php:18952, includes/class-freemius.php:18954, includes/customizer/class-fs-customizer-support-section.php:60
|
370 |
msgid "Contact Us"
|
371 |
msgstr ""
|
372 |
|
373 |
+
#: includes/class-freemius.php:18965, includes/class-freemius.php:18967, includes/class-freemius.php:24166, templates/account.php:129, templates/account/partials/addon.php:44
|
374 |
msgid "Add-Ons"
|
375 |
msgstr ""
|
376 |
|
377 |
+
#: includes/class-freemius.php:19001
|
378 |
msgctxt "ASCII arrow left icon"
|
379 |
msgid "←"
|
380 |
msgstr ""
|
381 |
|
382 |
+
#: includes/class-freemius.php:19001
|
383 |
msgctxt "ASCII arrow right icon"
|
384 |
msgid "➤"
|
385 |
msgstr ""
|
386 |
|
387 |
+
#: includes/class-freemius.php:19003, templates/pricing.php:109
|
388 |
msgctxt "noun"
|
389 |
msgid "Pricing"
|
390 |
msgstr ""
|
391 |
|
392 |
+
#: includes/class-freemius.php:19216, includes/customizer/class-fs-customizer-support-section.php:67
|
393 |
msgid "Support Forum"
|
394 |
msgstr ""
|
395 |
|
396 |
+
#: includes/class-freemius.php:20212
|
397 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
398 |
msgstr ""
|
399 |
|
400 |
+
#: includes/class-freemius.php:20213
|
401 |
msgctxt "a positive response"
|
402 |
msgid "Right on"
|
403 |
msgstr ""
|
404 |
|
405 |
+
#: includes/class-freemius.php:20719
|
406 |
msgid "seems like the key you entered doesn't match our records."
|
407 |
msgstr ""
|
408 |
|
409 |
+
#: includes/class-freemius.php:20743
|
410 |
msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
|
411 |
msgstr ""
|
412 |
|
413 |
+
#: includes/class-freemius.php:20978
|
414 |
msgid "Your %s Add-on plan was successfully upgraded."
|
415 |
msgstr ""
|
416 |
|
417 |
+
#: includes/class-freemius.php:20980
|
418 |
msgid "%s Add-on was successfully purchased."
|
419 |
msgstr ""
|
420 |
|
421 |
+
#: includes/class-freemius.php:20983
|
422 |
msgid "Download the latest version"
|
423 |
msgstr ""
|
424 |
|
425 |
+
#: includes/class-freemius.php:21089
|
426 |
msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
|
427 |
msgstr ""
|
428 |
|
429 |
+
#: includes/class-freemius.php:21095, includes/class-freemius.php:21109, includes/class-freemius.php:21578, includes/class-freemius.php:21667
|
430 |
msgid "Error received from the server:"
|
431 |
msgstr ""
|
432 |
|
433 |
+
#: includes/class-freemius.php:21109
|
434 |
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
435 |
msgstr ""
|
436 |
|
437 |
+
#: includes/class-freemius.php:21340, includes/class-freemius.php:21583, includes/class-freemius.php:21638, includes/class-freemius.php:21745
|
438 |
msgctxt "something somebody says when they are thinking about what you have just said."
|
439 |
msgid "Hmm"
|
440 |
msgstr ""
|
441 |
|
442 |
+
#: includes/class-freemius.php:21353
|
443 |
msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
|
444 |
msgstr ""
|
445 |
|
446 |
+
#: includes/class-freemius.php:21354, templates/account.php:131, templates/add-ons.php:250, templates/account/partials/addon.php:46
|
447 |
msgctxt "trial period"
|
448 |
msgid "Trial"
|
449 |
msgstr ""
|
450 |
|
451 |
+
#: includes/class-freemius.php:21359
|
452 |
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
453 |
msgstr ""
|
454 |
|
455 |
+
#: includes/class-freemius.php:21363, includes/class-freemius.php:21422
|
456 |
msgid "Please contact us here"
|
457 |
msgstr ""
|
458 |
|
459 |
+
#: includes/class-freemius.php:21374
|
460 |
msgid "Your plan was successfully activated."
|
461 |
msgstr ""
|
462 |
|
463 |
+
#: includes/class-freemius.php:21375
|
464 |
msgid "Your plan was successfully upgraded."
|
465 |
msgstr ""
|
466 |
|
467 |
+
#: includes/class-freemius.php:21392
|
468 |
msgid "Your plan was successfully changed to %s."
|
469 |
msgstr ""
|
470 |
|
471 |
+
#: includes/class-freemius.php:21408
|
472 |
msgid "Your license has expired. You can still continue using the free %s forever."
|
473 |
msgstr ""
|
474 |
|
475 |
+
#: includes/class-freemius.php:21410
|
476 |
msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
477 |
msgstr ""
|
478 |
|
479 |
+
#: includes/class-freemius.php:21418
|
480 |
msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
|
481 |
msgstr ""
|
482 |
|
483 |
+
#: includes/class-freemius.php:21431
|
484 |
msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
|
485 |
msgstr ""
|
486 |
|
487 |
+
#: includes/class-freemius.php:21457
|
488 |
msgid "Your free trial has expired. You can still continue using all our free features."
|
489 |
msgstr ""
|
490 |
|
491 |
+
#: includes/class-freemius.php:21459
|
492 |
msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
493 |
msgstr ""
|
494 |
|
495 |
+
#: includes/class-freemius.php:21574
|
496 |
msgid "It looks like the license could not be activated."
|
497 |
msgstr ""
|
498 |
|
499 |
+
#: includes/class-freemius.php:21616
|
500 |
msgid "Your license was successfully activated."
|
501 |
msgstr ""
|
502 |
|
503 |
+
#: includes/class-freemius.php:21642
|
504 |
msgid "It looks like your site currently doesn't have an active license."
|
505 |
msgstr ""
|
506 |
|
507 |
+
#: includes/class-freemius.php:21666
|
508 |
msgid "It looks like the license deactivation failed."
|
509 |
msgstr ""
|
510 |
|
511 |
+
#: includes/class-freemius.php:21695
|
512 |
msgid "Your %s license was successfully deactivated."
|
513 |
msgstr ""
|
514 |
|
515 |
+
#: includes/class-freemius.php:21696
|
516 |
msgid "Your license was successfully deactivated, you are back to the %s plan."
|
517 |
msgstr ""
|
518 |
|
519 |
+
#: includes/class-freemius.php:21699
|
520 |
msgid "O.K"
|
521 |
msgstr ""
|
522 |
|
523 |
+
#: includes/class-freemius.php:21752
|
524 |
msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
525 |
msgstr ""
|
526 |
|
527 |
+
#: includes/class-freemius.php:21761
|
528 |
msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
529 |
msgstr ""
|
530 |
|
531 |
+
#: includes/class-freemius.php:21803
|
532 |
msgid "You are already running the %s in a trial mode."
|
533 |
msgstr ""
|
534 |
|
535 |
+
#: includes/class-freemius.php:21814
|
536 |
msgid "You already utilized a trial before."
|
537 |
msgstr ""
|
538 |
|
539 |
+
#: includes/class-freemius.php:21828
|
540 |
msgid "Plan %s do not exist, therefore, can't start a trial."
|
541 |
msgstr ""
|
542 |
|
543 |
+
#: includes/class-freemius.php:21839
|
544 |
msgid "Plan %s does not support a trial period."
|
545 |
msgstr ""
|
546 |
|
547 |
+
#: includes/class-freemius.php:21850
|
548 |
msgid "None of the %s's plans supports a trial period."
|
549 |
msgstr ""
|
550 |
|
551 |
+
#: includes/class-freemius.php:21900
|
552 |
msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
|
553 |
msgstr ""
|
554 |
|
555 |
+
#: includes/class-freemius.php:21936
|
556 |
msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
557 |
msgstr ""
|
558 |
|
559 |
+
#: includes/class-freemius.php:21955
|
560 |
msgid "Your %s free trial was successfully cancelled."
|
561 |
msgstr ""
|
562 |
|
563 |
+
#: includes/class-freemius.php:22277
|
564 |
msgid "Version %s was released."
|
565 |
msgstr ""
|
566 |
|
567 |
+
#: includes/class-freemius.php:22277
|
568 |
msgid "Please download %s."
|
569 |
msgstr ""
|
570 |
|
571 |
+
#: includes/class-freemius.php:22284
|
572 |
msgid "the latest %s version here"
|
573 |
msgstr ""
|
574 |
|
575 |
+
#: includes/class-freemius.php:22289
|
576 |
msgid "New"
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: includes/class-freemius.php:22294
|
580 |
msgid "Seems like you got the latest release."
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: includes/class-freemius.php:22295
|
584 |
msgid "You are all good!"
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: includes/class-freemius.php:22698
|
588 |
msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
589 |
msgstr ""
|
590 |
|
591 |
+
#: includes/class-freemius.php:22838
|
592 |
msgid "Site successfully opted in."
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: includes/class-freemius.php:22839, includes/class-freemius.php:23862
|
596 |
msgid "Awesome"
|
597 |
msgstr ""
|
598 |
|
599 |
+
#: includes/class-freemius.php:22855, templates/forms/optout.php:41
|
600 |
msgid "We appreciate your help in making the %s better by letting us track some usage data."
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: includes/class-freemius.php:22856
|
604 |
msgid "Thank you!"
|
605 |
msgstr ""
|
606 |
|
607 |
+
#: includes/class-freemius.php:22863
|
608 |
msgid "We will no longer be sending any usage data of %s on %s to %s."
|
609 |
msgstr ""
|
610 |
|
611 |
+
#: includes/class-freemius.php:23023
|
612 |
+
msgid "A confirmation email was just sent to %s. The email owner must confirm the update within the next 4 hours."
|
613 |
+
msgstr ""
|
614 |
+
|
615 |
+
#: includes/class-freemius.php:23025
|
616 |
+
msgid "A confirmation email was just sent to %s. You must confirm the update within the next 4 hours. If you cannot find the email, please check your spam folder."
|
617 |
msgstr ""
|
618 |
|
619 |
+
#: includes/class-freemius.php:23032
|
620 |
msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
|
621 |
msgstr ""
|
622 |
|
623 |
+
#: includes/class-freemius.php:23037
|
624 |
msgid "%s is the new owner of the account."
|
625 |
msgstr ""
|
626 |
|
627 |
+
#: includes/class-freemius.php:23039
|
628 |
msgctxt "as congratulations"
|
629 |
msgid "Congrats"
|
630 |
msgstr ""
|
631 |
|
632 |
+
#: includes/class-freemius.php:23056
|
|
|
|
|
|
|
|
|
633 |
msgid "Please provide your full name."
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: includes/class-freemius.php:23061
|
637 |
msgid "Your name was successfully updated."
|
638 |
msgstr ""
|
639 |
|
640 |
+
#: includes/class-freemius.php:23122
|
641 |
msgid "You have successfully updated your %s."
|
642 |
msgstr ""
|
643 |
|
644 |
+
#: includes/class-freemius.php:23181
|
645 |
msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: includes/class-freemius.php:23184
|
649 |
msgid "Click here"
|
650 |
msgstr ""
|
651 |
|
652 |
+
#: includes/class-freemius.php:23282
|
653 |
msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
654 |
msgstr ""
|
655 |
|
656 |
+
#: includes/class-freemius.php:23283
|
657 |
msgctxt "advance notice of something that will need attention."
|
658 |
msgid "Heads up"
|
659 |
msgstr ""
|
660 |
|
661 |
+
#: includes/class-freemius.php:23902
|
662 |
msgctxt "exclamation"
|
663 |
msgid "Hey"
|
664 |
msgstr ""
|
665 |
|
666 |
+
#: includes/class-freemius.php:23902
|
667 |
msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
|
668 |
msgstr ""
|
669 |
|
670 |
+
#: includes/class-freemius.php:23910
|
671 |
msgid "No commitment for %s days - cancel anytime!"
|
672 |
msgstr ""
|
673 |
|
674 |
+
#: includes/class-freemius.php:23911
|
675 |
msgid "No credit card required"
|
676 |
msgstr ""
|
677 |
|
678 |
+
#: includes/class-freemius.php:23918, templates/forms/trial-start.php:53
|
679 |
msgctxt "call to action"
|
680 |
msgid "Start free trial"
|
681 |
msgstr ""
|
682 |
|
683 |
+
#: includes/class-freemius.php:23995
|
684 |
msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
|
685 |
msgstr ""
|
686 |
|
687 |
+
#: includes/class-freemius.php:24004
|
688 |
msgid "Learn more"
|
689 |
msgstr ""
|
690 |
|
691 |
+
#: includes/class-freemius.php:24190, templates/account.php:567, templates/account.php:719, templates/connect.php:188, templates/connect.php:465, includes/managers/class-fs-clone-manager.php:1123, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
|
692 |
msgid "Activate License"
|
693 |
msgstr ""
|
694 |
|
695 |
+
#: includes/class-freemius.php:24191, templates/account.php:661, templates/account.php:718, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
|
696 |
msgid "Change License"
|
697 |
msgstr ""
|
698 |
|
699 |
+
#: includes/class-freemius.php:24315, templates/account/partials/site.php:169
|
700 |
msgid "Opt Out"
|
701 |
msgstr ""
|
702 |
|
703 |
+
#: includes/class-freemius.php:24317, includes/class-freemius.php:24323, templates/account/partials/site.php:49, templates/account/partials/site.php:169
|
704 |
msgid "Opt In"
|
705 |
msgstr ""
|
706 |
|
707 |
+
#: includes/class-freemius.php:24553
|
708 |
msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
709 |
msgstr ""
|
710 |
|
711 |
+
#: includes/class-freemius.php:24561
|
712 |
msgid "Activate %s features"
|
713 |
msgstr ""
|
714 |
|
715 |
+
#: includes/class-freemius.php:24574
|
716 |
msgid "Please follow these steps to complete the upgrade"
|
717 |
msgstr ""
|
718 |
|
719 |
+
#: includes/class-freemius.php:24578
|
720 |
msgid "Download the latest %s version"
|
721 |
msgstr ""
|
722 |
|
723 |
+
#: includes/class-freemius.php:24582
|
724 |
msgid "Upload and activate the downloaded version"
|
725 |
msgstr ""
|
726 |
|
727 |
+
#: includes/class-freemius.php:24584
|
728 |
msgid "How to upload and activate?"
|
729 |
msgstr ""
|
730 |
|
731 |
+
#: includes/class-freemius.php:24718
|
732 |
msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
|
733 |
msgstr ""
|
734 |
|
735 |
+
#: includes/class-freemius.php:24887
|
736 |
msgid "Auto installation only works for opted-in users."
|
737 |
msgstr ""
|
738 |
|
739 |
+
#: includes/class-freemius.php:24897, includes/class-freemius.php:24930, includes/class-fs-plugin-updater.php:1263, includes/class-fs-plugin-updater.php:1277
|
740 |
msgid "Invalid module ID."
|
741 |
msgstr ""
|
742 |
|
743 |
+
#: includes/class-freemius.php:24906, includes/class-fs-plugin-updater.php:1299
|
744 |
msgid "Premium version already active."
|
745 |
msgstr ""
|
746 |
|
747 |
+
#: includes/class-freemius.php:24913
|
748 |
msgid "You do not have a valid license to access the premium version."
|
749 |
msgstr ""
|
750 |
|
751 |
+
#: includes/class-freemius.php:24920
|
752 |
msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
753 |
msgstr ""
|
754 |
|
755 |
+
#: includes/class-freemius.php:24938, includes/class-fs-plugin-updater.php:1298
|
756 |
msgid "Premium add-on version already installed."
|
757 |
msgstr ""
|
758 |
|
759 |
+
#: includes/class-freemius.php:25288
|
760 |
msgid "View paid features"
|
761 |
msgstr ""
|
762 |
|
763 |
+
#: includes/class-freemius.php:25610
|
764 |
msgid "Thank you so much for using %s and its add-ons!"
|
765 |
msgstr ""
|
766 |
|
767 |
+
#: includes/class-freemius.php:25611
|
768 |
msgid "Thank you so much for using %s!"
|
769 |
msgstr ""
|
770 |
|
771 |
+
#: includes/class-freemius.php:25617
|
772 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
773 |
msgstr ""
|
774 |
|
775 |
+
#: includes/class-freemius.php:25621
|
776 |
msgid "Thank you so much for using our products!"
|
777 |
msgstr ""
|
778 |
|
779 |
+
#: includes/class-freemius.php:25622
|
780 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
781 |
msgstr ""
|
782 |
|
783 |
+
#: includes/class-freemius.php:25641
|
784 |
msgid "%s and its add-ons"
|
785 |
msgstr ""
|
786 |
|
787 |
+
#: includes/class-freemius.php:25650
|
788 |
msgid "Products"
|
789 |
msgstr ""
|
790 |
|
791 |
+
#: includes/class-freemius.php:25657, templates/connect.php:279
|
792 |
msgid "Yes"
|
793 |
msgstr ""
|
794 |
|
795 |
+
#: includes/class-freemius.php:25658, templates/connect.php:280
|
796 |
msgid "send me security & feature updates, educational content and offers."
|
797 |
msgstr ""
|
798 |
|
799 |
+
#: includes/class-freemius.php:25659, templates/connect.php:285
|
800 |
msgid "No"
|
801 |
msgstr ""
|
802 |
|
803 |
+
#: includes/class-freemius.php:25661, templates/connect.php:287
|
804 |
msgid "do %sNOT%s send me security & feature updates, educational content and offers."
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: includes/class-freemius.php:25671
|
808 |
msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
|
809 |
msgstr ""
|
810 |
|
811 |
+
#: includes/class-freemius.php:25673, templates/connect.php:294
|
812 |
msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
813 |
msgstr ""
|
814 |
|
815 |
+
#: includes/class-freemius.php:25955
|
816 |
msgid "License key is empty."
|
817 |
msgstr ""
|
818 |
|
824 |
msgid "Buy license"
|
825 |
msgstr ""
|
826 |
|
827 |
+
#: includes/class-fs-plugin-updater.php:331, includes/class-fs-plugin-updater.php:364
|
828 |
msgid "There is a %s of %s available."
|
829 |
msgstr ""
|
830 |
|
831 |
+
#: includes/class-fs-plugin-updater.php:333, includes/class-fs-plugin-updater.php:369
|
832 |
msgid "new Beta version"
|
833 |
msgstr ""
|
834 |
|
835 |
+
#: includes/class-fs-plugin-updater.php:334, includes/class-fs-plugin-updater.php:370
|
836 |
msgid "new version"
|
837 |
msgstr ""
|
838 |
|
839 |
+
#: includes/class-fs-plugin-updater.php:393
|
840 |
msgid "Important Upgrade Notice:"
|
841 |
msgstr ""
|
842 |
|
843 |
+
#: includes/class-fs-plugin-updater.php:1328
|
844 |
msgid "Installing plugin: %s"
|
845 |
msgstr ""
|
846 |
|
847 |
+
#: includes/class-fs-plugin-updater.php:1369
|
848 |
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
849 |
msgstr ""
|
850 |
|
851 |
+
#: includes/class-fs-plugin-updater.php:1551
|
852 |
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
853 |
msgstr ""
|
854 |
|
869 |
msgid "Install Free Version Update Now"
|
870 |
msgstr ""
|
871 |
|
872 |
+
#: includes/fs-plugin-info-dialog.php:745, templates/account.php:650
|
873 |
msgid "Install Update Now"
|
874 |
msgstr ""
|
875 |
|
886 |
msgid "Download Latest Free Version"
|
887 |
msgstr ""
|
888 |
|
889 |
+
#: includes/fs-plugin-info-dialog.php:772, templates/account.php:109, templates/add-ons.php:37, templates/account/partials/addon.php:25
|
890 |
msgctxt "as download latest version"
|
891 |
msgid "Download Latest"
|
892 |
msgstr ""
|
895 |
msgid "Activate this add-on"
|
896 |
msgstr ""
|
897 |
|
898 |
+
#: includes/fs-plugin-info-dialog.php:789, templates/connect.php:462
|
899 |
msgid "Activate Free Version"
|
900 |
msgstr ""
|
901 |
|
902 |
+
#: includes/fs-plugin-info-dialog.php:790, templates/account.php:133, templates/add-ons.php:330, templates/account/partials/addon.php:48
|
903 |
msgid "Activate"
|
904 |
msgstr ""
|
905 |
|
1028 |
msgid "Details"
|
1029 |
msgstr ""
|
1030 |
|
1031 |
+
#: includes/fs-plugin-info-dialog.php:1318, templates/account.php:120, templates/debug.php:211, templates/debug.php:248, templates/debug.php:465, templates/account/partials/addon.php:36
|
1032 |
msgctxt "product version"
|
1033 |
msgid "Version"
|
1034 |
msgstr ""
|
1042 |
msgid "Last Updated"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
+
#: includes/fs-plugin-info-dialog.php:1337, templates/account.php:536
|
1046 |
msgctxt "x-ago"
|
1047 |
msgid "%s ago"
|
1048 |
msgstr ""
|
1151 |
msgid "Latest Free Version Installed"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
+
#: templates/account.php:110, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:26, templates/account/partials/site.php:311
|
1155 |
msgid "Downgrading your plan"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
+
#: templates/account.php:111, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:27, templates/account/partials/site.php:312
|
1159 |
msgid "Cancelling the subscription"
|
1160 |
msgstr ""
|
1161 |
|
1162 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
1163 |
+
#: templates/account.php:113, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:314
|
1164 |
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1165 |
msgstr ""
|
1166 |
|
1167 |
+
#: templates/account.php:114, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:30, templates/account/partials/site.php:315
|
1168 |
msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
|
1169 |
msgstr ""
|
1170 |
|
1171 |
+
#: templates/account.php:115, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:31
|
1172 |
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
+
#: templates/account.php:116, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:32, templates/account/partials/site.php:316
|
1176 |
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1177 |
msgstr ""
|
1178 |
|
1179 |
+
#: templates/account.php:117, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:33, templates/account/partials/site.php:317
|
1180 |
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1181 |
msgstr ""
|
1182 |
|
1183 |
#. translators: %s: Plan title (e.g. "Professional")
|
1184 |
+
#: templates/account.php:119, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:35
|
1185 |
msgid "Activate %s Plan"
|
1186 |
msgstr ""
|
1187 |
|
1188 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1189 |
+
#: templates/account.php:122, templates/account/partials/addon.php:38, templates/account/partials/site.php:291
|
1190 |
msgid "Auto renews in %s"
|
1191 |
msgstr ""
|
1192 |
|
1193 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1194 |
+
#: templates/account.php:124, templates/account/partials/addon.php:40, templates/account/partials/site.php:293
|
1195 |
msgid "Expires in %s"
|
1196 |
msgstr ""
|
1197 |
|
1198 |
+
#: templates/account.php:125
|
1199 |
msgctxt "as synchronize license"
|
1200 |
msgid "Sync License"
|
1201 |
msgstr ""
|
1202 |
|
1203 |
+
#: templates/account.php:126, templates/account/partials/addon.php:41
|
1204 |
msgid "Cancel Trial"
|
1205 |
msgstr ""
|
1206 |
|
1207 |
+
#: templates/account.php:127, templates/account/partials/addon.php:42
|
1208 |
msgid "Change Plan"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
+
#: templates/account.php:128, templates/account/partials/addon.php:43
|
1212 |
msgctxt "verb"
|
1213 |
msgid "Upgrade"
|
1214 |
msgstr ""
|
1215 |
|
1216 |
+
#: templates/account.php:130, templates/account/partials/addon.php:45, templates/account/partials/site.php:318
|
1217 |
msgctxt "verb"
|
1218 |
msgid "Downgrade"
|
1219 |
msgstr ""
|
1220 |
|
1221 |
+
#: templates/account.php:132, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:47, templates/account/partials/site.php:33
|
1222 |
msgid "Free"
|
1223 |
msgstr ""
|
1224 |
|
1225 |
+
#: templates/account.php:134, templates/debug.php:381, includes/customizer/class-fs-customizer-upsell-control.php:110, templates/account/partials/addon.php:49
|
1226 |
msgctxt "as product pricing plan"
|
1227 |
msgid "Plan"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
+
#: templates/account.php:135
|
1231 |
msgid "Bundle Plan"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
+
#: templates/account.php:259
|
1235 |
msgid "Free Trial"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
+
#: templates/account.php:270
|
1239 |
msgid "Account Details"
|
1240 |
msgstr ""
|
1241 |
|
1242 |
+
#: templates/account.php:277, templates/forms/data-debug-mode.php:33
|
1243 |
msgid "Start Debug"
|
1244 |
msgstr ""
|
1245 |
|
1246 |
+
#: templates/account.php:279
|
1247 |
msgid "Stop Debug"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
+
#: templates/account.php:286
|
1251 |
msgid "Billing & Invoices"
|
1252 |
msgstr ""
|
1253 |
|
1254 |
+
#: templates/account.php:297
|
1255 |
msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
|
1256 |
msgstr ""
|
1257 |
|
1258 |
+
#: templates/account.php:299
|
1259 |
msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
+
#: templates/account.php:302
|
1263 |
msgid "Delete Account"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
+
#: templates/account.php:314, templates/account/partials/addon.php:231, templates/account/partials/deactivate-license-button.php:35
|
1267 |
msgid "Deactivate License"
|
1268 |
msgstr ""
|
1269 |
|
1270 |
+
#: templates/account.php:337, templates/forms/subscription-cancellation.php:125
|
1271 |
msgid "Are you sure you want to proceed?"
|
1272 |
msgstr ""
|
1273 |
|
1274 |
+
#: templates/account.php:337, templates/account/partials/addon.php:255
|
1275 |
msgid "Cancel Subscription"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
+
#: templates/account.php:366, templates/account/partials/addon.php:340
|
1279 |
msgctxt "as synchronize"
|
1280 |
msgid "Sync"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
+
#: templates/account.php:381, templates/debug.php:522
|
1284 |
msgid "Name"
|
1285 |
msgstr ""
|
1286 |
|
1287 |
+
#: templates/account.php:387, templates/debug.php:523
|
1288 |
msgid "Email"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
+
#: templates/account.php:394, templates/debug.php:379, templates/debug.php:572
|
1292 |
msgid "User ID"
|
1293 |
msgstr ""
|
1294 |
|
1295 |
+
#: templates/account.php:412, templates/account.php:732, templates/account.php:783, templates/debug.php:246, templates/debug.php:373, templates/debug.php:462, templates/debug.php:521, templates/debug.php:570, templates/debug.php:649, templates/account/payments.php:35, templates/debug/logger.php:21
|
1296 |
msgid "ID"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
+
#: templates/account.php:419
|
1300 |
msgid "Site ID"
|
1301 |
msgstr ""
|
1302 |
|
1303 |
+
#: templates/account.php:422
|
1304 |
msgid "No ID"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
+
#: templates/account.php:427, templates/debug.php:253, templates/debug.php:382, templates/debug.php:466, templates/debug.php:525, templates/account/partials/site.php:227
|
1308 |
msgid "Public Key"
|
1309 |
msgstr ""
|
1310 |
|
1311 |
+
#: templates/account.php:433, templates/debug.php:383, templates/debug.php:467, templates/debug.php:526, templates/account/partials/site.php:239
|
1312 |
msgid "Secret Key"
|
1313 |
msgstr ""
|
1314 |
|
1315 |
+
#: templates/account.php:436
|
1316 |
msgctxt "as secret encryption key missing"
|
1317 |
msgid "No Secret"
|
1318 |
msgstr ""
|
1319 |
|
1320 |
+
#: templates/account.php:463, templates/account/partials/site.php:120, templates/account/partials/site.php:122
|
1321 |
msgid "Trial"
|
1322 |
msgstr ""
|
1323 |
|
1324 |
+
#: templates/account.php:490, templates/debug.php:578, templates/account/partials/site.php:260
|
1325 |
msgid "License Key"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
+
#: templates/account.php:521
|
1329 |
msgid "Join the Beta program"
|
1330 |
msgstr ""
|
1331 |
|
1332 |
+
#: templates/account.php:527
|
1333 |
msgid "not verified"
|
1334 |
msgstr ""
|
1335 |
|
1336 |
+
#: templates/account.php:536, templates/account/partials/addon.php:190
|
1337 |
msgid "Expired"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
+
#: templates/account.php:596
|
1341 |
msgid "Premium version"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
+
#: templates/account.php:598
|
1345 |
msgid "Free version"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
+
#: templates/account.php:610
|
1349 |
msgid "Verify Email"
|
1350 |
msgstr ""
|
1351 |
|
1352 |
+
#: templates/account.php:624
|
1353 |
msgid "Download %s Version"
|
1354 |
msgstr ""
|
1355 |
|
1356 |
+
#: templates/account.php:640
|
1357 |
msgid "Download Paid Version"
|
1358 |
msgstr ""
|
1359 |
|
1360 |
+
#: templates/account.php:658, templates/account.php:921, templates/account/partials/site.php:248, templates/account/partials/site.php:270
|
1361 |
msgctxt "verb"
|
1362 |
msgid "Show"
|
1363 |
msgstr ""
|
1364 |
|
1365 |
+
#: templates/account.php:674
|
1366 |
msgid "What is your %s?"
|
1367 |
msgstr ""
|
1368 |
|
1369 |
+
#: templates/account.php:682, templates/account/billing.php:21
|
1370 |
msgctxt "verb"
|
1371 |
msgid "Edit"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
+
#: templates/account.php:687, templates/forms/user-change.php:27
|
1375 |
msgid "Change User"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: templates/account.php:711
|
1379 |
msgid "Sites"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
+
#: templates/account.php:724
|
1383 |
msgid "Search by address"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
+
#: templates/account.php:733, templates/debug.php:376
|
1387 |
msgid "Address"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
+
#: templates/account.php:734
|
1391 |
msgid "License"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
+
#: templates/account.php:735
|
1395 |
msgid "Plan"
|
1396 |
msgstr ""
|
1397 |
|
1398 |
+
#: templates/account.php:786
|
1399 |
msgctxt "as software license"
|
1400 |
msgid "License"
|
1401 |
msgstr ""
|
1402 |
|
1403 |
+
#: templates/account.php:915
|
1404 |
msgctxt "verb"
|
1405 |
msgid "Hide"
|
1406 |
msgstr ""
|
1407 |
|
1408 |
+
#: templates/account.php:937, templates/forms/data-debug-mode.php:31, templates/forms/deactivation/form.php:358, templates/forms/deactivation/form.php:389
|
1409 |
msgid "Processing"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
+
#: templates/account.php:940
|
1413 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
1414 |
msgstr ""
|
1415 |
|
1416 |
+
#: templates/account.php:998
|
1417 |
msgid "Cancelling %s"
|
1418 |
msgstr ""
|
1419 |
|
1420 |
+
#: templates/account.php:998, templates/account.php:1015, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:178
|
1421 |
msgid "trial"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
+
#: templates/account.php:1013, templates/forms/deactivation/form.php:195
|
1425 |
msgid "Cancelling %s..."
|
1426 |
msgstr ""
|
1427 |
|
1428 |
+
#: templates/account.php:1016, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:179
|
1429 |
msgid "subscription"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
+
#: templates/account.php:1030
|
1433 |
msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
+
#: templates/account.php:1104
|
1437 |
msgid "Disabling white-label mode"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
+
#: templates/account.php:1105
|
1441 |
msgid "Enabling white-label mode"
|
1442 |
msgstr ""
|
1443 |
|
1463 |
msgid "Installed"
|
1464 |
msgstr ""
|
1465 |
|
1466 |
+
#: templates/admin-notice.php:13, templates/forms/license-activation.php:250, templates/forms/resend-key.php:77
|
1467 |
msgctxt "as close a window"
|
1468 |
msgid "Dismiss"
|
1469 |
msgstr ""
|
1497 |
msgstr ""
|
1498 |
|
1499 |
#. translators: %s: name (e.g. Hey John,)
|
1500 |
+
#: templates/connect.php:121
|
1501 |
msgctxt "greeting"
|
1502 |
msgid "Hey %s,"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
+
#: templates/connect.php:171
|
1506 |
msgid "Allow & Continue"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
+
#: templates/connect.php:175
|
1510 |
msgid "Re-send activation email"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
+
#: templates/connect.php:179
|
1514 |
msgid "Thanks %s!"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
+
#: templates/connect.php:189, templates/forms/license-activation.php:46
|
1518 |
msgid "Agree & Activate License"
|
1519 |
msgstr ""
|
1520 |
|
1521 |
+
#: templates/connect.php:193
|
1522 |
msgid "Welcome to %s! To get started, please enter your license key:"
|
1523 |
msgstr ""
|
1524 |
|
1525 |
+
#: templates/connect.php:200
|
1526 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
|
1527 |
msgstr ""
|
1528 |
|
1529 |
+
#: templates/connect.php:201
|
1530 |
msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
|
1531 |
msgstr ""
|
1532 |
|
1533 |
+
#: templates/connect.php:207
|
1534 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1535 |
msgstr ""
|
1536 |
|
1537 |
+
#: templates/connect.php:208
|
1538 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1539 |
msgstr ""
|
1540 |
|
1541 |
+
#: templates/connect.php:237
|
1542 |
msgid "We're excited to introduce the Freemius network-level integration."
|
1543 |
msgstr ""
|
1544 |
|
1545 |
+
#: templates/connect.php:240
|
1546 |
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1547 |
msgstr ""
|
1548 |
|
1549 |
+
#: templates/connect.php:242
|
1550 |
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1551 |
msgstr ""
|
1552 |
|
1553 |
+
#: templates/connect.php:244
|
1554 |
msgid "%s's paid features"
|
1555 |
msgstr ""
|
1556 |
|
1557 |
+
#: templates/connect.php:249
|
1558 |
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1559 |
msgstr ""
|
1560 |
|
1561 |
+
#: templates/connect.php:251
|
1562 |
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1563 |
msgstr ""
|
1564 |
|
1565 |
+
#: templates/connect.php:260, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:49
|
1566 |
msgid "License key"
|
1567 |
msgstr ""
|
1568 |
|
1569 |
+
#: templates/connect.php:263, templates/forms/license-activation.php:22
|
1570 |
msgid "Can't find your license key?"
|
1571 |
msgstr ""
|
1572 |
|
1573 |
+
#: templates/connect.php:322, templates/connect.php:709, templates/forms/deactivation/retry-skip.php:20
|
1574 |
msgctxt "verb"
|
1575 |
msgid "Skip"
|
1576 |
msgstr ""
|
1577 |
|
1578 |
+
#: templates/connect.php:325
|
1579 |
msgid "Delegate to Site Admins"
|
1580 |
msgstr ""
|
1581 |
|
1582 |
+
#: templates/connect.php:325
|
1583 |
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1584 |
msgstr ""
|
1585 |
|
1586 |
+
#: templates/connect.php:350
|
1587 |
msgid "License issues?"
|
1588 |
msgstr ""
|
1589 |
|
1590 |
+
#: templates/connect.php:366
|
1591 |
msgid "Your Profile Overview"
|
1592 |
msgstr ""
|
1593 |
|
1594 |
+
#: templates/connect.php:367
|
1595 |
msgid "Name and email address"
|
1596 |
msgstr ""
|
1597 |
|
1598 |
+
#: templates/connect.php:374
|
1599 |
msgid "So you can manage and control your license remotely from the User Dashboard."
|
1600 |
msgstr ""
|
1601 |
|
1602 |
+
#: templates/connect.php:375
|
1603 |
msgid "Your Site Overview"
|
1604 |
msgstr ""
|
1605 |
|
1606 |
+
#: templates/connect.php:376
|
1607 |
msgid "Site URL, WP version, PHP info"
|
1608 |
msgstr ""
|
1609 |
|
1610 |
+
#: templates/connect.php:383
|
1611 |
msgid "Admin Notices"
|
1612 |
msgstr ""
|
1613 |
|
1614 |
+
#: templates/connect.php:384, templates/connect.php:402
|
1615 |
msgid "Updates, announcements, marketing, no spam"
|
1616 |
msgstr ""
|
1617 |
|
1618 |
+
#: templates/connect.php:391
|
1619 |
msgid "So you can reuse the license when the %s is no longer active."
|
1620 |
msgstr ""
|
1621 |
|
1622 |
+
#: templates/connect.php:392
|
1623 |
msgid "Current %s Status"
|
1624 |
msgstr ""
|
1625 |
|
1626 |
+
#: templates/connect.php:393
|
1627 |
msgid "Active, deactivated, or uninstalled"
|
1628 |
msgstr ""
|
1629 |
|
1630 |
+
#: templates/connect.php:401
|
1631 |
msgid "Newsletter"
|
1632 |
msgstr ""
|
1633 |
|
1634 |
+
#: templates/connect.php:409
|
1635 |
msgid "Plugins & Themes"
|
1636 |
msgstr ""
|
1637 |
|
1638 |
+
#: templates/connect.php:409
|
1639 |
msgid "optional"
|
1640 |
msgstr ""
|
1641 |
|
1642 |
+
#: templates/connect.php:410
|
1643 |
msgid "To help us troubleshoot any potential issues that may arise from other plugin or theme conflicts."
|
1644 |
msgstr ""
|
1645 |
|
1646 |
+
#: templates/connect.php:411
|
1647 |
msgid "Title, slug, version, and is active"
|
1648 |
msgstr ""
|
1649 |
|
1650 |
+
#: templates/connect.php:428
|
1651 |
msgid "The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management."
|
1652 |
msgstr ""
|
1653 |
|
1654 |
+
#: templates/connect.php:430
|
1655 |
msgid "diagnostic data"
|
1656 |
msgstr ""
|
1657 |
|
1658 |
+
#: templates/connect.php:431
|
1659 |
msgid "Freemius is our licensing and software updates engine"
|
1660 |
msgstr ""
|
1661 |
|
1662 |
+
#: templates/connect.php:434
|
1663 |
msgid "What permissions are being granted?"
|
1664 |
msgstr ""
|
1665 |
|
1666 |
+
#: templates/connect.php:461
|
1667 |
msgid "Don't have a license key?"
|
1668 |
msgstr ""
|
1669 |
|
1670 |
+
#: templates/connect.php:464
|
1671 |
msgid "Have a license key?"
|
1672 |
msgstr ""
|
1673 |
|
1674 |
+
#: templates/connect.php:472
|
1675 |
msgid "Privacy Policy"
|
1676 |
msgstr ""
|
1677 |
|
1678 |
+
#: templates/connect.php:474
|
1679 |
msgid "License Agreement"
|
1680 |
msgstr ""
|
1681 |
|
1682 |
+
#: templates/connect.php:474
|
1683 |
msgid "Terms of Service"
|
1684 |
msgstr ""
|
1685 |
|
1686 |
+
#: templates/connect.php:875
|
1687 |
msgctxt "as in the process of sending an email"
|
1688 |
msgid "Sending email"
|
1689 |
msgstr ""
|
1690 |
|
1691 |
+
#: templates/connect.php:876
|
1692 |
msgctxt "as activating plugin"
|
1693 |
msgid "Activating"
|
1694 |
msgstr ""
|
1716 |
msgid "Debugging"
|
1717 |
msgstr ""
|
1718 |
|
1719 |
+
#: templates/debug.php:52, templates/debug.php:258, templates/debug.php:384, templates/debug.php:527
|
1720 |
msgid "Actions"
|
1721 |
msgstr ""
|
1722 |
|
1736 |
msgid "Clear Updates Transients"
|
1737 |
msgstr ""
|
1738 |
|
1739 |
+
#: templates/debug.php:86
|
1740 |
+
msgid "Reset Deactivation Snoozing"
|
1741 |
+
msgstr ""
|
1742 |
+
|
1743 |
+
#: templates/debug.php:94
|
1744 |
msgid "Sync Data From Server"
|
1745 |
msgstr ""
|
1746 |
|
1747 |
+
#: templates/debug.php:103
|
1748 |
msgid "Migrate Options to Network"
|
1749 |
msgstr ""
|
1750 |
|
1751 |
+
#: templates/debug.php:108
|
1752 |
msgid "Load DB Option"
|
1753 |
msgstr ""
|
1754 |
|
1755 |
+
#: templates/debug.php:111
|
1756 |
msgid "Set DB Option"
|
1757 |
msgstr ""
|
1758 |
|
1759 |
+
#: templates/debug.php:190
|
1760 |
msgid "Key"
|
1761 |
msgstr ""
|
1762 |
|
1763 |
+
#: templates/debug.php:191
|
1764 |
msgid "Value"
|
1765 |
msgstr ""
|
1766 |
|
1767 |
+
#: templates/debug.php:207
|
1768 |
msgctxt "as software development kit versions"
|
1769 |
msgid "SDK Versions"
|
1770 |
msgstr ""
|
1771 |
|
1772 |
+
#: templates/debug.php:212
|
1773 |
msgid "SDK Path"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
+
#: templates/debug.php:213, templates/debug.php:252
|
1777 |
msgid "Module Path"
|
1778 |
msgstr ""
|
1779 |
|
1780 |
+
#: templates/debug.php:214
|
1781 |
msgid "Is Active"
|
1782 |
msgstr ""
|
1783 |
|
1784 |
+
#: templates/debug.php:242, templates/debug/plugins-themes-sync.php:35
|
1785 |
msgid "Plugins"
|
1786 |
msgstr ""
|
1787 |
|
1788 |
+
#: templates/debug.php:242, templates/debug/plugins-themes-sync.php:56
|
1789 |
msgid "Themes"
|
1790 |
msgstr ""
|
1791 |
|
1792 |
+
#: templates/debug.php:247, templates/debug.php:378, templates/debug.php:464, templates/debug/scheduled-crons.php:80
|
1793 |
msgid "Slug"
|
1794 |
msgstr ""
|
1795 |
|
1796 |
+
#: templates/debug.php:249, templates/debug.php:463
|
1797 |
msgid "Title"
|
1798 |
msgstr ""
|
1799 |
|
1800 |
+
#: templates/debug.php:250
|
1801 |
msgctxt "as application program interface"
|
1802 |
msgid "API"
|
1803 |
msgstr ""
|
1804 |
|
1805 |
+
#: templates/debug.php:251
|
1806 |
msgid "Freemius State"
|
1807 |
msgstr ""
|
1808 |
|
1809 |
+
#: templates/debug.php:255
|
1810 |
msgid "Network Blog"
|
1811 |
msgstr ""
|
1812 |
|
1813 |
+
#: templates/debug.php:256
|
1814 |
msgid "Network User"
|
1815 |
msgstr ""
|
1816 |
|
1817 |
+
#: templates/debug.php:293
|
1818 |
msgctxt "as connection was successful"
|
1819 |
msgid "Connected"
|
1820 |
msgstr ""
|
1821 |
|
1822 |
+
#: templates/debug.php:294
|
1823 |
msgctxt "as connection blocked"
|
1824 |
msgid "Blocked"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
+
#: templates/debug.php:330
|
1828 |
msgid "Simulate Trial Promotion"
|
1829 |
msgstr ""
|
1830 |
|
1831 |
+
#: templates/debug.php:342
|
1832 |
msgid "Simulate Network Upgrade"
|
1833 |
msgstr ""
|
1834 |
|
1835 |
+
#: templates/debug.php:367
|
1836 |
msgid "%s Installs"
|
1837 |
msgstr ""
|
1838 |
|
1839 |
+
#: templates/debug.php:369
|
1840 |
msgctxt "like websites"
|
1841 |
msgid "Sites"
|
1842 |
msgstr ""
|
1843 |
|
1844 |
+
#: templates/debug.php:375, templates/account/partials/site.php:156
|
1845 |
msgid "Blog ID"
|
1846 |
msgstr ""
|
1847 |
|
1848 |
+
#: templates/debug.php:380
|
1849 |
msgid "License ID"
|
1850 |
msgstr ""
|
1851 |
|
1852 |
+
#: templates/debug.php:444, templates/debug.php:550, templates/account/partials/addon.php:435
|
1853 |
msgctxt "verb"
|
1854 |
msgid "Delete"
|
1855 |
msgstr ""
|
1856 |
|
1857 |
+
#: templates/debug.php:458
|
1858 |
msgid "Add Ons of module %s"
|
1859 |
msgstr ""
|
1860 |
|
1861 |
+
#: templates/debug.php:517
|
1862 |
msgid "Users"
|
1863 |
msgstr ""
|
1864 |
|
1865 |
+
#: templates/debug.php:524
|
1866 |
msgid "Verified"
|
1867 |
msgstr ""
|
1868 |
|
1869 |
+
#: templates/debug.php:566
|
1870 |
msgid "%s Licenses"
|
1871 |
msgstr ""
|
1872 |
|
1873 |
+
#: templates/debug.php:571
|
1874 |
msgid "Plugin ID"
|
1875 |
msgstr ""
|
1876 |
|
1877 |
+
#: templates/debug.php:573
|
1878 |
msgid "Plan ID"
|
1879 |
msgstr ""
|
1880 |
|
1881 |
+
#: templates/debug.php:574
|
1882 |
msgid "Quota"
|
1883 |
msgstr ""
|
1884 |
|
1885 |
+
#: templates/debug.php:575
|
1886 |
msgid "Activated"
|
1887 |
msgstr ""
|
1888 |
|
1889 |
+
#: templates/debug.php:576
|
1890 |
msgid "Blocking"
|
1891 |
msgstr ""
|
1892 |
|
1893 |
+
#: templates/debug.php:577, templates/debug.php:648, templates/debug/logger.php:22
|
1894 |
msgid "Type"
|
1895 |
msgstr ""
|
1896 |
|
1897 |
+
#: templates/debug.php:579
|
1898 |
msgctxt "as expiration date"
|
1899 |
msgid "Expiration"
|
1900 |
msgstr ""
|
1901 |
|
1902 |
+
#: templates/debug.php:607
|
1903 |
msgid "Debug Log"
|
1904 |
msgstr ""
|
1905 |
|
1906 |
+
#: templates/debug.php:611
|
1907 |
msgid "All Types"
|
1908 |
msgstr ""
|
1909 |
|
1910 |
+
#: templates/debug.php:618
|
1911 |
msgid "All Requests"
|
1912 |
msgstr ""
|
1913 |
|
1914 |
+
#: templates/debug.php:623, templates/debug.php:652, templates/debug/logger.php:25
|
1915 |
msgid "File"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
+
#: templates/debug.php:624, templates/debug.php:650, templates/debug/logger.php:23
|
1919 |
msgid "Function"
|
1920 |
msgstr ""
|
1921 |
|
1922 |
+
#: templates/debug.php:625
|
1923 |
msgid "Process ID"
|
1924 |
msgstr ""
|
1925 |
|
1926 |
+
#: templates/debug.php:626
|
1927 |
msgid "Logger"
|
1928 |
msgstr ""
|
1929 |
|
1930 |
+
#: templates/debug.php:627, templates/debug.php:651, templates/debug/logger.php:24
|
1931 |
msgid "Message"
|
1932 |
msgstr ""
|
1933 |
|
1934 |
+
#: templates/debug.php:629
|
1935 |
msgid "Filter"
|
1936 |
msgstr ""
|
1937 |
|
1938 |
+
#: templates/debug.php:637
|
1939 |
msgid "Download"
|
1940 |
msgstr ""
|
1941 |
|
1942 |
+
#: templates/debug.php:653, templates/debug/logger.php:26
|
1943 |
msgid "Timestamp"
|
1944 |
msgstr ""
|
1945 |
|
1964 |
msgid "Requests"
|
1965 |
msgstr ""
|
1966 |
|
1967 |
+
#: includes/managers/class-fs-clone-manager.php:703
|
1968 |
+
msgid "Invalid clone resolution action."
|
1969 |
+
msgstr ""
|
1970 |
+
|
1971 |
+
#: includes/managers/class-fs-clone-manager.php:851
|
1972 |
+
msgid "products"
|
1973 |
+
msgstr ""
|
1974 |
+
|
1975 |
+
#: includes/managers/class-fs-clone-manager.php:1033
|
1976 |
+
msgid "%1$s has been placed into safe mode because we noticed that %2$s is an exact copy of %3$s."
|
1977 |
+
msgstr ""
|
1978 |
+
|
1979 |
+
#: includes/managers/class-fs-clone-manager.php:1039
|
1980 |
+
msgid "The products below have been placed into safe mode because we noticed that %2$s is an exact copy of %3$s:%1$s"
|
1981 |
+
msgstr ""
|
1982 |
+
|
1983 |
+
#: includes/managers/class-fs-clone-manager.php:1040
|
1984 |
+
msgid "The products below have been placed into safe mode because we noticed that %2$s is an exact copy of these sites:%3$s%1$s"
|
1985 |
+
msgstr ""
|
1986 |
+
|
1987 |
+
#: includes/managers/class-fs-clone-manager.php:1066
|
1988 |
+
msgid "the above-mentioned sites"
|
1989 |
+
msgstr ""
|
1990 |
+
|
1991 |
+
#: includes/managers/class-fs-clone-manager.php:1079
|
1992 |
+
msgid "Is %2$s a duplicate of %4$s?"
|
1993 |
+
msgstr ""
|
1994 |
+
|
1995 |
+
#: includes/managers/class-fs-clone-manager.php:1080
|
1996 |
+
msgid "Yes, %2$s is a duplicate of %4$s for the purpose of testing, staging, or development."
|
1997 |
+
msgstr ""
|
1998 |
+
|
1999 |
+
#: includes/managers/class-fs-clone-manager.php:1085
|
2000 |
+
msgid "Long-Term Duplicate"
|
2001 |
+
msgstr ""
|
2002 |
+
|
2003 |
+
#: includes/managers/class-fs-clone-manager.php:1090
|
2004 |
+
msgid "Duplicate Website"
|
2005 |
+
msgstr ""
|
2006 |
+
|
2007 |
+
#: includes/managers/class-fs-clone-manager.php:1096
|
2008 |
+
msgid "Is %2$s the new home of %4$s?"
|
2009 |
+
msgstr ""
|
2010 |
+
|
2011 |
+
#: includes/managers/class-fs-clone-manager.php:1098
|
2012 |
+
msgid "Yes, %%2$s is replacing %%4$s. I would like to migrate my %s from %%4$s to %%2$s."
|
2013 |
+
msgstr ""
|
2014 |
+
|
2015 |
+
#: includes/managers/class-fs-clone-manager.php:1099, templates/forms/subscription-cancellation.php:52
|
2016 |
+
msgid "license"
|
2017 |
+
msgstr ""
|
2018 |
+
|
2019 |
+
#: includes/managers/class-fs-clone-manager.php:1099
|
2020 |
+
msgid "data"
|
2021 |
+
msgstr ""
|
2022 |
+
|
2023 |
+
#: includes/managers/class-fs-clone-manager.php:1105
|
2024 |
+
msgid "Migrate License"
|
2025 |
+
msgstr ""
|
2026 |
+
|
2027 |
+
#: includes/managers/class-fs-clone-manager.php:1106
|
2028 |
+
msgid "Migrate"
|
2029 |
+
msgstr ""
|
2030 |
+
|
2031 |
+
#: includes/managers/class-fs-clone-manager.php:1112
|
2032 |
+
msgid "Is %2$s a new website?"
|
2033 |
+
msgstr ""
|
2034 |
+
|
2035 |
+
#: includes/managers/class-fs-clone-manager.php:1113
|
2036 |
+
msgid "Yes, %2$s is a new and different website that is separate from %4$s."
|
2037 |
+
msgstr ""
|
2038 |
+
|
2039 |
+
#: includes/managers/class-fs-clone-manager.php:1115
|
2040 |
+
msgid "It requires license activation."
|
2041 |
+
msgstr ""
|
2042 |
+
|
2043 |
+
#: includes/managers/class-fs-clone-manager.php:1122
|
2044 |
+
msgid "New Website"
|
2045 |
+
msgstr ""
|
2046 |
+
|
2047 |
+
#: includes/managers/class-fs-clone-manager.php:1145
|
2048 |
+
msgctxt "Clone resolution admin notice products list label"
|
2049 |
+
msgid "Products"
|
2050 |
+
msgstr ""
|
2051 |
+
|
2052 |
+
#: includes/managers/class-fs-clone-manager.php:1230
|
2053 |
+
msgid "You marked this website, %s, as a temporary duplicate of %s."
|
2054 |
+
msgstr ""
|
2055 |
+
|
2056 |
+
#: includes/managers/class-fs-clone-manager.php:1231
|
2057 |
+
msgid "You marked this website, %s, as a temporary duplicate of these sites"
|
2058 |
+
msgstr ""
|
2059 |
+
|
2060 |
+
#: includes/managers/class-fs-clone-manager.php:1245
|
2061 |
+
msgid "%s automatic security & feature updates and paid functionality will keep working without interruptions until %s (or when your license expires, whatever comes first)."
|
2062 |
+
msgstr ""
|
2063 |
+
|
2064 |
+
#: includes/managers/class-fs-clone-manager.php:1248
|
2065 |
+
msgctxt "\"The <product_label>\", e.g.: \"The plugin\""
|
2066 |
+
msgid "The %s's"
|
2067 |
+
msgstr ""
|
2068 |
+
|
2069 |
+
#: includes/managers/class-fs-clone-manager.php:1251
|
2070 |
+
msgid "The following products'"
|
2071 |
+
msgstr ""
|
2072 |
+
|
2073 |
+
#: includes/managers/class-fs-clone-manager.php:1259
|
2074 |
+
msgid "If this is a long term duplicate, to keep automatic updates and paid functionality after %s, please %s."
|
2075 |
+
msgstr ""
|
2076 |
+
|
2077 |
+
#: includes/managers/class-fs-clone-manager.php:1261
|
2078 |
+
msgid "activate a license here"
|
2079 |
+
msgstr ""
|
2080 |
+
|
2081 |
#: templates/account/billing.php:22
|
2082 |
msgctxt "verb"
|
2083 |
msgid "Update"
|
2387 |
msgid "User key"
|
2388 |
msgstr ""
|
2389 |
|
2390 |
+
#: templates/forms/email-address-update.php:32
|
2391 |
+
msgid "Email address update"
|
2392 |
+
msgstr ""
|
2393 |
+
|
2394 |
+
#: templates/forms/email-address-update.php:33, templates/forms/user-change.php:81
|
2395 |
+
msgctxt "close window"
|
2396 |
+
msgid "Dismiss"
|
2397 |
+
msgstr ""
|
2398 |
+
|
2399 |
+
#: templates/forms/email-address-update.php:38
|
2400 |
+
msgid "Enter the new email address"
|
2401 |
+
msgstr ""
|
2402 |
+
|
2403 |
+
#: templates/forms/email-address-update.php:42
|
2404 |
+
msgid "Are both %s and %s your email addresses?"
|
2405 |
+
msgstr ""
|
2406 |
+
|
2407 |
+
#: templates/forms/email-address-update.php:50
|
2408 |
+
msgid "Yes - both addresses are mine"
|
2409 |
+
msgstr ""
|
2410 |
+
|
2411 |
+
#: templates/forms/email-address-update.php:57
|
2412 |
+
msgid "%s is my client's email address"
|
2413 |
+
msgstr ""
|
2414 |
+
|
2415 |
+
#: templates/forms/email-address-update.php:66
|
2416 |
+
msgid "%s is my email address"
|
2417 |
+
msgstr ""
|
2418 |
+
|
2419 |
+
#: templates/forms/email-address-update.php:75
|
2420 |
+
msgid "Would you like to merge %s into %s?"
|
2421 |
+
msgstr ""
|
2422 |
+
|
2423 |
+
#: templates/forms/email-address-update.php:84
|
2424 |
+
msgid "Yes - move all my data and assets from %s to %s"
|
2425 |
+
msgstr ""
|
2426 |
+
|
2427 |
+
#: templates/forms/email-address-update.php:94
|
2428 |
+
msgid "No - only move this site's data to %s"
|
2429 |
+
msgstr ""
|
2430 |
+
|
2431 |
+
#: templates/forms/email-address-update.php:292, templates/forms/email-address-update.php:298
|
2432 |
+
msgid "Update"
|
2433 |
+
msgstr ""
|
2434 |
+
|
2435 |
#: templates/forms/license-activation.php:23
|
2436 |
msgid "Please enter the license key that you received in the email right after the purchase:"
|
2437 |
msgstr ""
|
2444 |
msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
|
2445 |
msgstr ""
|
2446 |
|
2447 |
+
#: templates/forms/license-activation.php:211
|
2448 |
msgid "Associate with the license owner's account."
|
2449 |
msgstr ""
|
2450 |
|
2527 |
msgid "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
|
2528 |
msgstr ""
|
2529 |
|
|
|
|
|
|
|
|
|
2530 |
#: templates/forms/subscription-cancellation.php:57
|
2531 |
msgid "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
|
2532 |
msgstr ""
|
2547 |
msgid "Proceed"
|
2548 |
msgstr ""
|
2549 |
|
2550 |
+
#: templates/forms/subscription-cancellation.php:191, templates/forms/deactivation/form.php:216
|
2551 |
msgid "Cancel %s & Proceed"
|
2552 |
msgstr ""
|
2553 |
|
2571 |
msgid "Enter email address"
|
2572 |
msgstr ""
|
2573 |
|
|
|
|
|
|
|
|
|
|
|
2574 |
#: templates/js/style-premium-theme.php:39
|
2575 |
msgid "Premium"
|
2576 |
msgstr ""
|
2665 |
msgid "Contact Support"
|
2666 |
msgstr ""
|
2667 |
|
2668 |
+
#: templates/forms/deactivation/form.php:65
|
2669 |
msgid "Anonymous feedback"
|
2670 |
msgstr ""
|
2671 |
|
2672 |
+
#: templates/forms/deactivation/form.php:71
|
2673 |
+
msgid "hour"
|
2674 |
+
msgstr ""
|
2675 |
+
|
2676 |
+
#: templates/forms/deactivation/form.php:76
|
2677 |
+
msgid "hours"
|
2678 |
+
msgstr ""
|
2679 |
+
|
2680 |
+
#: templates/forms/deactivation/form.php:81, templates/forms/deactivation/form.php:86
|
2681 |
+
msgid "days"
|
2682 |
+
msgstr ""
|
2683 |
+
|
2684 |
+
#: templates/forms/deactivation/form.php:106
|
2685 |
msgid "Deactivate"
|
2686 |
msgstr ""
|
2687 |
|
2688 |
+
#: templates/forms/deactivation/form.php:108
|
2689 |
msgid "Activate %s"
|
2690 |
msgstr ""
|
2691 |
|
2692 |
+
#: templates/forms/deactivation/form.php:111
|
2693 |
+
msgid "Submit & %s"
|
2694 |
+
msgstr ""
|
2695 |
+
|
2696 |
+
#: templates/forms/deactivation/form.php:130
|
2697 |
msgid "Quick Feedback"
|
2698 |
msgstr ""
|
2699 |
|
2700 |
+
#: templates/forms/deactivation/form.php:134
|
2701 |
msgid "If you have a moment, please let us know why you are %s"
|
2702 |
msgstr ""
|
2703 |
|
2704 |
+
#: templates/forms/deactivation/form.php:134
|
2705 |
msgid "deactivating"
|
2706 |
msgstr ""
|
2707 |
|
2708 |
+
#: templates/forms/deactivation/form.php:134
|
2709 |
msgid "switching"
|
2710 |
msgstr ""
|
2711 |
|
2712 |
+
#: templates/forms/deactivation/form.php:448
|
2713 |
+
msgid "Kindly tell us the reason so we can improve."
|
2714 |
msgstr ""
|
2715 |
|
2716 |
+
#: templates/forms/deactivation/form.php:478
|
2717 |
+
msgid "Snooze & %s"
|
2718 |
msgstr ""
|
2719 |
|
2720 |
+
#: templates/forms/deactivation/form.php:638
|
2721 |
msgid "Yes - %s"
|
2722 |
msgstr ""
|
2723 |
|
2724 |
+
#: templates/forms/deactivation/form.php:645
|
2725 |
msgid "Skip & %s"
|
2726 |
msgstr ""
|
2727 |
|
freemius/require.php
CHANGED
@@ -6,6 +6,10 @@
|
|
6 |
* @since 1.1.9
|
7 |
*/
|
8 |
|
|
|
|
|
|
|
|
|
9 |
// Configuration should be loaded first.
|
10 |
require_once dirname( __FILE__ ) . '/config.php';
|
11 |
require_once WP_FS__DIR_INCLUDES . '/fs-core-functions.php';
|
@@ -17,6 +21,7 @@
|
|
17 |
// require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php';
|
18 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
|
19 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-gdpr-manager.php';
|
|
|
20 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
|
21 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
|
22 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
|
@@ -46,4 +51,4 @@
|
|
46 |
require_once WP_FS__DIR_INCLUDES . '/class-fs-admin-notices.php';
|
47 |
require_once WP_FS__DIR_INCLUDES . '/class-freemius-abstract.php';
|
48 |
require_once WP_FS__DIR_INCLUDES . '/sdk/Exceptions/Exception.php';
|
49 |
-
require_once WP_FS__DIR_INCLUDES . '/class-freemius.php';
|
6 |
* @since 1.1.9
|
7 |
*/
|
8 |
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
// Configuration should be loaded first.
|
14 |
require_once dirname( __FILE__ ) . '/config.php';
|
15 |
require_once WP_FS__DIR_INCLUDES . '/fs-core-functions.php';
|
21 |
// require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php';
|
22 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
|
23 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-gdpr-manager.php';
|
24 |
+
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-clone-manager.php';
|
25 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
|
26 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
|
27 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
|
51 |
require_once WP_FS__DIR_INCLUDES . '/class-fs-admin-notices.php';
|
52 |
require_once WP_FS__DIR_INCLUDES . '/class-freemius-abstract.php';
|
53 |
require_once WP_FS__DIR_INCLUDES . '/sdk/Exceptions/Exception.php';
|
54 |
+
require_once WP_FS__DIR_INCLUDES . '/class-freemius.php';
|
freemius/start.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
-
$this_sdk_version = '2.
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
+
$this_sdk_version = '2.5.0.1';
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
freemius/templates/account.php
CHANGED
@@ -46,6 +46,7 @@
|
|
46 |
$site = $fs->get_site();
|
47 |
$name = $user->get_name();
|
48 |
$license = $fs->_get_license();
|
|
|
49 |
$is_data_debug_mode = $fs->is_data_debug_mode();
|
50 |
$is_whitelabeled = $fs->is_whitelabeled();
|
51 |
$subscription = ( is_object( $license ) ?
|
@@ -62,6 +63,10 @@
|
|
62 |
$fs->_add_license_activation_dialog_box();
|
63 |
}
|
64 |
|
|
|
|
|
|
|
|
|
65 |
$ids_of_installs_activated_with_foreign_licenses = $fs->should_handle_user_change() ?
|
66 |
$fs->get_installs_ids_with_foreign_licenses() :
|
67 |
array();
|
@@ -86,12 +91,15 @@
|
|
86 |
) );
|
87 |
}
|
88 |
|
89 |
-
|
|
|
|
|
90 |
|
91 |
-
|
|
|
92 |
|
93 |
|
94 |
-
|
95 |
|
96 |
if ( $has_tabs ) {
|
97 |
$query_params['tabs'] = 'true';
|
@@ -140,6 +148,7 @@
|
|
140 |
$install = $fs->get_install_by_blog_id( $site_info['blog_id'] );
|
141 |
$view_params = array(
|
142 |
'freemius' => $fs,
|
|
|
143 |
'license' => $license,
|
144 |
'site' => $site_info,
|
145 |
'install' => $install,
|
@@ -366,7 +375,7 @@
|
|
366 |
|
367 |
$profile = array();
|
368 |
|
369 |
-
|
370 |
$profile[] = array(
|
371 |
'id' => 'user_name',
|
372 |
'title' => fs_text_inline( 'Name', 'name', $slug ),
|
@@ -645,7 +654,7 @@
|
|
645 |
<?php endif ?>
|
646 |
<?php
|
647 |
elseif ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
|
648 |
-
<?php if ( ! $is_whitelabeled ) : ?>
|
649 |
<button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
|
650 |
<?php endif ?>
|
651 |
<?php if ('license_key' === $p['id']) : ?>
|
@@ -658,6 +667,7 @@
|
|
658 |
'user_name'
|
659 |
) ) )
|
660 |
) : ?>
|
|
|
661 |
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST"
|
662 |
onsubmit="var val = prompt('<?php echo esc_attr( sprintf(
|
663 |
/* translators: %s: User's account property (e.g. name, email) */
|
@@ -668,9 +678,10 @@
|
|
668 |
<input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $fs->get_unique_affix() ?>"
|
669 |
value="">
|
670 |
<?php wp_nonce_field( 'update_' . $p['id'] ) ?>
|
671 |
-
<input type="submit" class="button button-small"
|
672 |
value="<?php echo fs_esc_attr_x_inline( 'Edit', 'verb', 'edit', $slug ) ?>">
|
673 |
</form>
|
|
|
674 |
<?php elseif ( 'user_id' === $p['id'] && ! empty( $ids_of_installs_activated_with_foreign_licenses ) ) : ?>
|
675 |
<input id="fs_change_user" type="submit" class="button button-small"
|
676 |
value="<?php echo fs_esc_attr_inline( 'Change User', 'change-user', $slug ) ?>">
|
@@ -730,12 +741,30 @@
|
|
730 |
<div class="fs-table-body">
|
731 |
<table class="widefat">
|
732 |
<?php
|
|
|
|
|
733 |
foreach ( $site_view_params as $view_params ) {
|
734 |
fs_require_template(
|
735 |
'account/partials/site.php',
|
736 |
$view_params
|
737 |
);
|
738 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
739 |
</table>
|
740 |
</div>
|
741 |
</div>
|
@@ -839,7 +868,7 @@
|
|
839 |
|
840 |
<?php
|
841 |
if ( $show_billing ) {
|
842 |
-
$view_params = array( 'id' => $VARS['id'] );
|
843 |
fs_require_once_template( 'account/billing.php', $view_params );
|
844 |
fs_require_once_template( 'account/payments.php', $view_params );
|
845 |
}
|
@@ -1095,4 +1124,4 @@
|
|
1095 |
'module_slug' => $slug,
|
1096 |
'module_version' => $fs->get_plugin_version(),
|
1097 |
);
|
1098 |
-
|
46 |
$site = $fs->get_site();
|
47 |
$name = $user->get_name();
|
48 |
$license = $fs->_get_license();
|
49 |
+
$is_license_foreign = ( is_object( $license ) && $user->id != $license->user_id );
|
50 |
$is_data_debug_mode = $fs->is_data_debug_mode();
|
51 |
$is_whitelabeled = $fs->is_whitelabeled();
|
52 |
$subscription = ( is_object( $license ) ?
|
63 |
$fs->_add_license_activation_dialog_box();
|
64 |
}
|
65 |
|
66 |
+
if ( $fs->should_handle_user_change() ) {
|
67 |
+
$fs->_add_email_address_update_dialog_box();
|
68 |
+
}
|
69 |
+
|
70 |
$ids_of_installs_activated_with_foreign_licenses = $fs->should_handle_user_change() ?
|
71 |
$fs->get_installs_ids_with_foreign_licenses() :
|
72 |
array();
|
91 |
) );
|
92 |
}
|
93 |
|
94 |
+
$show_billing = ( ! $is_whitelabeled && ! $fs->apply_filters( 'hide_billing_and_payments_info', false ) );
|
95 |
+
if ( $show_billing ) {
|
96 |
+
$payments = $fs->_fetch_payments();
|
97 |
|
98 |
+
$show_billing = ( is_array( $payments ) && 0 < count( $payments ) );
|
99 |
+
}
|
100 |
|
101 |
|
102 |
+
$has_tabs = $fs->_add_tabs_before_content();
|
103 |
|
104 |
if ( $has_tabs ) {
|
105 |
$query_params['tabs'] = 'true';
|
148 |
$install = $fs->get_install_by_blog_id( $site_info['blog_id'] );
|
149 |
$view_params = array(
|
150 |
'freemius' => $fs,
|
151 |
+
'user' => $fs->get_user(),
|
152 |
'license' => $license,
|
153 |
'site' => $site_info,
|
154 |
'install' => $install,
|
375 |
|
376 |
$profile = array();
|
377 |
|
378 |
+
if ( ! $is_whitelabeled ) {
|
379 |
$profile[] = array(
|
380 |
'id' => 'user_name',
|
381 |
'title' => fs_text_inline( 'Name', 'name', $slug ),
|
654 |
<?php endif ?>
|
655 |
<?php
|
656 |
elseif ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
|
657 |
+
<?php if ( ! $is_whitelabeled && ( 'site_secret_key' === $p['id'] || ! $is_license_foreign ) ) : ?>
|
658 |
<button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
|
659 |
<?php endif ?>
|
660 |
<?php if ('license_key' === $p['id']) : ?>
|
667 |
'user_name'
|
668 |
) ) )
|
669 |
) : ?>
|
670 |
+
<?php if ( 'email' !== $p['id'] || ! fs_is_network_admin() ) : ?>
|
671 |
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST"
|
672 |
onsubmit="var val = prompt('<?php echo esc_attr( sprintf(
|
673 |
/* translators: %s: User's account property (e.g. name, email) */
|
678 |
<input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $fs->get_unique_affix() ?>"
|
679 |
value="">
|
680 |
<?php wp_nonce_field( 'update_' . $p['id'] ) ?>
|
681 |
+
<input type="submit" class="button button-small <?php if ( 'email' === $p['id'] ) echo 'button-edit-email-address' ?>"
|
682 |
value="<?php echo fs_esc_attr_x_inline( 'Edit', 'verb', 'edit', $slug ) ?>">
|
683 |
</form>
|
684 |
+
<?php endif ?>
|
685 |
<?php elseif ( 'user_id' === $p['id'] && ! empty( $ids_of_installs_activated_with_foreign_licenses ) ) : ?>
|
686 |
<input id="fs_change_user" type="submit" class="button button-small"
|
687 |
value="<?php echo fs_esc_attr_inline( 'Change User', 'change-user', $slug ) ?>">
|
741 |
<div class="fs-table-body">
|
742 |
<table class="widefat">
|
743 |
<?php
|
744 |
+
$current_blog_id = get_current_blog_id();
|
745 |
+
|
746 |
foreach ( $site_view_params as $view_params ) {
|
747 |
fs_require_template(
|
748 |
'account/partials/site.php',
|
749 |
$view_params
|
750 |
);
|
751 |
+
}
|
752 |
+
|
753 |
+
/**
|
754 |
+
* It's possible for the `Freemius::switch_to_blog()` method to be called within the `site.php` template and this changes the Freemius instance's context, so this check is for restoring the previous context based on the previously retrieved site.
|
755 |
+
*
|
756 |
+
* @author Leo Fajardo (@leorw)
|
757 |
+
* @since 2.5.0
|
758 |
+
*/
|
759 |
+
$current_install = $fs->get_site();
|
760 |
+
|
761 |
+
if (
|
762 |
+
is_object( $site ) &&
|
763 |
+
( ! is_object( $current_install ) || $current_install->id != $site->id )
|
764 |
+
) {
|
765 |
+
$fs->switch_to_blog( $current_blog_id, $site, true );
|
766 |
+
}
|
767 |
+
?>
|
768 |
</table>
|
769 |
</div>
|
770 |
</div>
|
868 |
|
869 |
<?php
|
870 |
if ( $show_billing ) {
|
871 |
+
$view_params = array( 'id' => $VARS['id'], 'payments' => $payments );
|
872 |
fs_require_once_template( 'account/billing.php', $view_params );
|
873 |
fs_require_once_template( 'account/payments.php', $view_params );
|
874 |
}
|
1124 |
'module_slug' => $slug,
|
1125 |
'module_version' => $fs->get_plugin_version(),
|
1126 |
);
|
1127 |
+
fs_require_template( 'powered-by.php', $params );
|
freemius/templates/account/partials/addon.php
CHANGED
@@ -1,4 +1,9 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
/**
|
3 |
* @var array $VARS
|
4 |
* @var Freemius $fs
|
@@ -443,4 +448,4 @@
|
|
443 |
</td>
|
444 |
<!--/ Optional Delete Action -->
|
445 |
<?php endif ?>
|
446 |
-
</tr>
|
1 |
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
/**
|
8 |
* @var array $VARS
|
9 |
* @var Freemius $fs
|
448 |
</td>
|
449 |
<!--/ Optional Delete Action -->
|
450 |
<?php endif ?>
|
451 |
+
</tr>
|
freemius/templates/account/partials/site.php
CHANGED
@@ -23,7 +23,7 @@
|
|
23 |
$is_whitelabeled = $fs->is_whitelabeled();
|
24 |
$has_paid_plan = $fs->has_paid_plan();
|
25 |
$is_premium = $fs->is_premium();
|
26 |
-
$main_user = $
|
27 |
$blog_id = $site['blog_id'];
|
28 |
|
29 |
$install = $VARS['install'];
|
@@ -32,7 +32,7 @@
|
|
32 |
$trial_plan = $fs->get_trial_plan();
|
33 |
$free_text = fs_text_inline( 'Free', 'free', $slug );
|
34 |
|
35 |
-
if ( $is_whitelabeled && $fs->is_delegated_connection( $blog_id ) ) {
|
36 |
$is_whitelabeled = $fs->is_whitelabeled( true, $blog_id );
|
37 |
}
|
38 |
?>
|
@@ -174,7 +174,7 @@
|
|
174 |
<?php $row_index ++ ?>
|
175 |
<!--/ Blog ID -->
|
176 |
|
177 |
-
<?php if ( $
|
178 |
<?php
|
179 |
/**
|
180 |
* @var FS_User $user
|
23 |
$is_whitelabeled = $fs->is_whitelabeled();
|
24 |
$has_paid_plan = $fs->has_paid_plan();
|
25 |
$is_premium = $fs->is_premium();
|
26 |
+
$main_user = $VARS['user'];
|
27 |
$blog_id = $site['blog_id'];
|
28 |
|
29 |
$install = $VARS['install'];
|
32 |
$trial_plan = $fs->get_trial_plan();
|
33 |
$free_text = fs_text_inline( 'Free', 'free', $slug );
|
34 |
|
35 |
+
if ( $is_whitelabeled && is_object( $install ) && $fs->is_delegated_connection( $blog_id ) ) {
|
36 |
$is_whitelabeled = $fs->is_whitelabeled( true, $blog_id );
|
37 |
}
|
38 |
?>
|
174 |
<?php $row_index ++ ?>
|
175 |
<!--/ Blog ID -->
|
176 |
|
177 |
+
<?php if ( $install->user_id != $main_user->id ) : ?>
|
178 |
<?php
|
179 |
/**
|
180 |
* @var FS_User $user
|
freemius/templates/account/payments.php
CHANGED
@@ -10,19 +10,19 @@
|
|
10 |
exit;
|
11 |
}
|
12 |
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
|
19 |
-
|
|
|
|
|
|
|
20 |
|
21 |
-
$
|
22 |
-
|
23 |
-
$show_payments = ( is_array( $payments ) && 0 < count( $payments ) );
|
24 |
|
25 |
-
if ( $show_payments ) :
|
26 |
?>
|
27 |
<div class="postbox">
|
28 |
<div id="fs_payments">
|
@@ -56,4 +56,3 @@
|
|
56 |
</div>
|
57 |
</div>
|
58 |
<?php
|
59 |
-
endif;
|
10 |
exit;
|
11 |
}
|
12 |
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
* @var Freemius $fs
|
16 |
+
*/
|
17 |
+
$fs = freemius( $VARS['id'] );
|
18 |
|
19 |
+
/**
|
20 |
+
* @var FS_Payment[] $payments
|
21 |
+
*/
|
22 |
+
$payments = $VARS['payments'];
|
23 |
|
24 |
+
$slug = $fs->get_slug();
|
|
|
|
|
25 |
|
|
|
26 |
?>
|
27 |
<div class="postbox">
|
28 |
<div id="fs_payments">
|
56 |
</div>
|
57 |
</div>
|
58 |
<?php
|
|
freemius/templates/admin-notice.php
CHANGED
@@ -45,6 +45,9 @@
|
|
45 |
case 'promotion':
|
46 |
echo 'updated promotion';
|
47 |
break;
|
|
|
|
|
|
|
48 |
case 'update':
|
49 |
// echo 'update-nag update';
|
50 |
// break;
|
@@ -64,7 +67,7 @@
|
|
64 |
} ?>"><?php if ( ! empty( $VARS['plugin'] ) ) : ?>
|
65 |
<label class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label>
|
66 |
<?php endif ?>
|
67 |
-
<?php if ( ! empty( $VARS['sticky'] ) ) : ?>
|
68 |
<div class="fs-close"><i class="dashicons dashicons-no"
|
69 |
title="<?php echo esc_attr( $dismiss_text ) ?>"></i> <span><?php echo esc_html( $dismiss_text ) ?></span>
|
70 |
</div>
|
45 |
case 'promotion':
|
46 |
echo 'updated promotion';
|
47 |
break;
|
48 |
+
case 'warn':
|
49 |
+
echo 'notice notice-warning';
|
50 |
+
break;
|
51 |
case 'update':
|
52 |
// echo 'update-nag update';
|
53 |
// break;
|
67 |
} ?>"><?php if ( ! empty( $VARS['plugin'] ) ) : ?>
|
68 |
<label class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label>
|
69 |
<?php endif ?>
|
70 |
+
<?php if ( ! empty( $VARS['sticky'] ) && ( ! isset( $VARS['dismissible'] ) || false !== $VARS['dismissible'] ) ) : ?>
|
71 |
<div class="fs-close"><i class="dashicons dashicons-no"
|
72 |
title="<?php echo esc_attr( $dismiss_text ) ?>"></i> <span><?php echo esc_html( $dismiss_text ) ?></span>
|
73 |
</div>
|
freemius/templates/ajax-loader.php
CHANGED
@@ -1 +1,6 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit;
|
4 |
+
}
|
5 |
+
?>
|
6 |
+
<div class="fs-ajax-loader" style="display: none"><?php for ( $i = 1; $i <= 8; $i ++ ) : ?><div class="fs-ajax-loader-bar fs-ajax-loader-bar-<?php echo $i ?>"></div><?php endfor ?></div>
|
freemius/templates/clone-resolution-js.php
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @since 2.5.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
?>
|
13 |
+
<script type="text/javascript">
|
14 |
+
( function( $ ) {
|
15 |
+
var $errorMessage = null;
|
16 |
+
|
17 |
+
$( document ).ready( function() {
|
18 |
+
var $cloneResolutionNotice = $( 'div[data-id="clone_resolution_options_notice"], div[data-id="temporary_duplicate_notice"]' );
|
19 |
+
|
20 |
+
if ( 0 === $cloneResolutionNotice.length ) {
|
21 |
+
return;
|
22 |
+
}
|
23 |
+
|
24 |
+
$errorMessage = $cloneResolutionNotice.find( '#fs_clone_resolution_error_message' );
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Triggers an AJAX request when the license activation link or any of the buttons on the clone resolution options notice is clicked. The AJAX request will then handle the action the user has chosen.
|
28 |
+
*/
|
29 |
+
$cloneResolutionNotice.on( 'click', '.button, #fs_temporary_duplicate_license_activation_link', function( evt ) {
|
30 |
+
evt.preventDefault();
|
31 |
+
|
32 |
+
var $this = $( this ),
|
33 |
+
$body = $( 'body' ),
|
34 |
+
cursor = $body.css( 'cursor' );
|
35 |
+
|
36 |
+
if ( $this.hasClass( 'disabled' ) ) {
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
+
var beforeUnload = function() {
|
41 |
+
return '<?php fs_esc_js_echo_inline( 'Please wait', 'please-wait' ) ?>';
|
42 |
+
};
|
43 |
+
|
44 |
+
$.ajax( {
|
45 |
+
// Get the parent options container from the child as `$cloneResolutionNotice` can have different AJAX URLs if both the manual clone resolution options and temporary duplicate notices are shown (for different subsites in a multisite network).
|
46 |
+
url : $this.parents( '.fs-clone-resolution-options-container' ).data( 'ajax-url' ),
|
47 |
+
method : 'POST',
|
48 |
+
data : {
|
49 |
+
action : '<?php echo $VARS['ajax_action'] ?>',
|
50 |
+
security : '<?php echo wp_create_nonce( $VARS['ajax_action'] ) ?>',
|
51 |
+
clone_action: $this.data( 'clone-action' )
|
52 |
+
},
|
53 |
+
beforeSend: function() {
|
54 |
+
$body.css( { cursor: 'wait' } );
|
55 |
+
|
56 |
+
$cloneResolutionNotice.find( '.button' ).addClass( 'disabled' );
|
57 |
+
|
58 |
+
$( window ).on( 'beforeunload', beforeUnload );
|
59 |
+
},
|
60 |
+
success : function( resultObj ) {
|
61 |
+
$( window ).off( 'beforeunload', beforeUnload );
|
62 |
+
|
63 |
+
if ( resultObj.data.redirect_url && '' !== resultObj.data.redirect_url ) {
|
64 |
+
window.location = resultObj.data.redirect_url;
|
65 |
+
} else {
|
66 |
+
window.location.reload();
|
67 |
+
}
|
68 |
+
},
|
69 |
+
error : function() {
|
70 |
+
$body.css( { cursor: cursor } );
|
71 |
+
$cloneResolutionNotice.find( '.button' ).removeClass( 'disabled' );
|
72 |
+
}
|
73 |
+
} );
|
74 |
+
} );
|
75 |
+
} );
|
76 |
+
} )( jQuery );
|
77 |
+
</script>
|
freemius/templates/connect.php
CHANGED
@@ -25,6 +25,15 @@
|
|
25 |
|
26 |
$fs->_enqueue_connect_essentials();
|
27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
$current_user = Freemius::_get_current_wp_user();
|
29 |
|
30 |
$first_name = $current_user->user_firstname;
|
@@ -152,11 +161,11 @@
|
|
152 |
fs_require_once_template( 'plugin-icon.php', $vars );
|
153 |
?>
|
154 |
<i class="dashicons dashicons-plus fs-second"></i>
|
155 |
-
<img class="fs-connect-logo" width="80" height="80" src="//img.freemius.com/connect
|
156 |
</div>
|
157 |
<div class="fs-content">
|
158 |
<?php if ( ! empty( $error ) ) : ?>
|
159 |
-
<p class="fs-error"><?php echo esc_html( $error ) ?></p>
|
160 |
<?php endif ?>
|
161 |
<p><?php
|
162 |
$button_label = fs_text_inline( 'Allow & Continue', 'opt-in-connect', $slug );
|
@@ -208,11 +217,6 @@
|
|
208 |
|
209 |
$message = $fs->apply_filters(
|
210 |
$filter,
|
211 |
-
($is_network_upgrade_mode ?
|
212 |
-
'' :
|
213 |
-
/* translators: %s: name (e.g. Hey John,) */
|
214 |
-
$hey_x_text . '<br>'
|
215 |
-
) .
|
216 |
sprintf(
|
217 |
esc_html( $default_optin_message ),
|
218 |
'<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
|
@@ -369,7 +373,7 @@
|
|
369 |
'icon-class' => 'dashicons dashicons-admin-settings',
|
370 |
'tooltip' => ( $require_license_key ? sprintf( $fs->get_text_inline( 'So you can manage and control your license remotely from the User Dashboard.', 'permissions-site_tooltip' ), $fs->get_module_type() ) : '' ),
|
371 |
'label' => $fs->get_text_inline( 'Your Site Overview', 'permissions-site' ),
|
372 |
-
'desc' => $fs->get_text_inline( 'Site URL, WP version, PHP
|
373 |
'priority' => 10,
|
374 |
);
|
375 |
|
@@ -431,11 +435,12 @@
|
|
431 |
<?php endif ?>
|
432 |
<ul><?php
|
433 |
foreach ( $permissions as $id => $permission ) : ?>
|
|
|
434 |
<li id="fs-permission-<?php echo esc_attr( $id ); ?>"
|
435 |
-
class="fs-permission fs-<?php echo esc_attr( $id ); ?>">
|
436 |
<i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
|
437 |
<?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?>
|
438 |
-
<div class="fs-switch fs-small fs-round fs-<?php echo
|
439 |
<div class="fs-toggle"></div>
|
440 |
</div>
|
441 |
<?php endif ?>
|
@@ -601,6 +606,11 @@
|
|
601 |
updatePrimaryCtaText( actionType );
|
602 |
});
|
603 |
|
|
|
|
|
|
|
|
|
|
|
604 |
$sitesListContainer.delegate( '.action', 'click', function( evt ) {
|
605 |
var $this = $( evt.target );
|
606 |
if ( $this.hasClass( 'selected' ) ) {
|
@@ -878,6 +888,8 @@
|
|
878 |
$(this)
|
879 |
.toggleClass( 'fs-on' )
|
880 |
.toggleClass( 'fs-off' );
|
|
|
|
|
881 |
});
|
882 |
|
883 |
if (requireLicenseKey) {
|
25 |
|
26 |
$fs->_enqueue_connect_essentials();
|
27 |
|
28 |
+
/**
|
29 |
+
* Enqueueing the styles in `_enqueue_connect_essentials()` is too late, as we need them in the HEADER. Therefore, inject the styles inline to avoid FOUC.
|
30 |
+
*
|
31 |
+
* @author Vova Feldman (@svovaf)
|
32 |
+
*/
|
33 |
+
echo "<style>\n";
|
34 |
+
include WP_FS__DIR_CSS . '/admin/connect.css';
|
35 |
+
echo "</style>\n";
|
36 |
+
|
37 |
$current_user = Freemius::_get_current_wp_user();
|
38 |
|
39 |
$first_name = $current_user->user_firstname;
|
161 |
fs_require_once_template( 'plugin-icon.php', $vars );
|
162 |
?>
|
163 |
<i class="dashicons dashicons-plus fs-second"></i>
|
164 |
+
<img class="fs-connect-logo" width="80" height="80" src="//img.freemius.com/logo/connect.svg"/>
|
165 |
</div>
|
166 |
<div class="fs-content">
|
167 |
<?php if ( ! empty( $error ) ) : ?>
|
168 |
+
<p class="fs-error"><?php echo $fs->apply_filters( 'connect_error_esc_html', esc_html( $error ) ) ?></p>
|
169 |
<?php endif ?>
|
170 |
<p><?php
|
171 |
$button_label = fs_text_inline( 'Allow & Continue', 'opt-in-connect', $slug );
|
217 |
|
218 |
$message = $fs->apply_filters(
|
219 |
$filter,
|
|
|
|
|
|
|
|
|
|
|
220 |
sprintf(
|
221 |
esc_html( $default_optin_message ),
|
222 |
'<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
|
373 |
'icon-class' => 'dashicons dashicons-admin-settings',
|
374 |
'tooltip' => ( $require_license_key ? sprintf( $fs->get_text_inline( 'So you can manage and control your license remotely from the User Dashboard.', 'permissions-site_tooltip' ), $fs->get_module_type() ) : '' ),
|
375 |
'label' => $fs->get_text_inline( 'Your Site Overview', 'permissions-site' ),
|
376 |
+
'desc' => $fs->get_text_inline( 'Site URL, WP version, PHP version', 'permissions-site_desc' ),
|
377 |
'priority' => 10,
|
378 |
);
|
379 |
|
435 |
<?php endif ?>
|
436 |
<ul><?php
|
437 |
foreach ( $permissions as $id => $permission ) : ?>
|
438 |
+
<?php $is_permission_on = ( ! isset( $permission['default'] ) || true === $permission['default'] ); ?>
|
439 |
<li id="fs-permission-<?php echo esc_attr( $id ); ?>"
|
440 |
+
class="fs-permission fs-<?php echo esc_attr( $id ); ?><?php echo ( ! $is_permission_on ) ? ' fs-disabled' : ''; ?>">
|
441 |
<i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
|
442 |
<?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?>
|
443 |
+
<div class="fs-switch fs-small fs-round fs-<?php echo $is_permission_on ? 'on' : 'off' ?>">
|
444 |
<div class="fs-toggle"></div>
|
445 |
</div>
|
446 |
<?php endif ?>
|
606 |
updatePrimaryCtaText( actionType );
|
607 |
});
|
608 |
|
609 |
+
$sitesListContainer.delegate( 'td:not(:first-child)', 'click', function() {
|
610 |
+
// If a site row is clicked, trigger a click on the checkbox.
|
611 |
+
$( this ).parent().find( 'td:first-child input' ).click();
|
612 |
+
} );
|
613 |
+
|
614 |
$sitesListContainer.delegate( '.action', 'click', function( evt ) {
|
615 |
var $this = $( evt.target );
|
616 |
if ( $this.hasClass( 'selected' ) ) {
|
888 |
$(this)
|
889 |
.toggleClass( 'fs-on' )
|
890 |
.toggleClass( 'fs-off' );
|
891 |
+
|
892 |
+
$( this ).parent().toggleClass( 'fs-disabled' );
|
893 |
});
|
894 |
|
895 |
if (requireLicenseKey) {
|
freemius/templates/debug.php
CHANGED
@@ -37,6 +37,8 @@
|
|
37 |
|
38 |
$.post( ajaxurl, {
|
39 |
action: 'fs_toggle_debug_mode',
|
|
|
|
|
40 |
is_on : ($(this).hasClass( 'fs-on' ) ? 1 : 0)
|
41 |
}, function ( response ) {
|
42 |
if ( 1 == response ) {
|
@@ -77,6 +79,16 @@
|
|
77 |
<button class="button"><?php fs_esc_html_echo_inline( 'Clear Updates Transients' ) ?></button>
|
78 |
</form>
|
79 |
</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
<td>
|
81 |
<!-- Sync Data with Server -->
|
82 |
<form action="" method="POST">
|
@@ -111,7 +123,8 @@
|
|
111 |
if (optionName) {
|
112 |
$.post(ajaxurl, {
|
113 |
action : 'fs_get_db_option',
|
114 |
-
|
|
|
115 |
option_name: optionName
|
116 |
}, function (response) {
|
117 |
if (response.data.value)
|
@@ -131,7 +144,8 @@
|
|
131 |
if (optionValue) {
|
132 |
$.post(ajaxurl, {
|
133 |
action : 'fs_set_db_option',
|
134 |
-
|
|
|
135 |
option_name : optionName,
|
136 |
option_value: optionValue
|
137 |
}, function () {
|
@@ -376,9 +390,6 @@
|
|
376 |
</thead>
|
377 |
<tbody>
|
378 |
<?php foreach ( $sites_map as $slug => $sites ) : ?>
|
379 |
-
<?php if ( ! is_array( $sites ) ) {
|
380 |
-
$sites = array( $sites );
|
381 |
-
} ?>
|
382 |
<?php foreach ( $sites as $site ) : ?>
|
383 |
<tr>
|
384 |
<td><?php echo $site->id ?></td>
|
@@ -480,8 +491,15 @@
|
|
480 |
* @var FS_User[] $users
|
481 |
*/
|
482 |
$users = $VARS['users'];
|
|
|
483 |
$users_with_developer_license_by_id = array();
|
484 |
|
|
|
|
|
|
|
|
|
|
|
|
|
485 |
foreach ( $module_types as $module_type ) {
|
486 |
/**
|
487 |
* @var FS_Plugin_License[] $licenses
|
@@ -574,7 +592,7 @@
|
|
574 |
<td><?php echo $license->is_block_features ? 'Blocking' : 'Flexible' ?></td>
|
575 |
<td><?php echo $license->is_whitelabeled ? 'Whitelabeled' : 'Normal' ?></td>
|
576 |
<td><?php
|
577 |
-
echo $license->is_whitelabeled ?
|
578 |
$license->get_html_escaped_masked_secret_key() :
|
579 |
esc_html( $license->secret_key );
|
580 |
?></td>
|
@@ -724,6 +742,8 @@
|
|
724 |
|
725 |
$.post(ajaxurl, {
|
726 |
action : 'fs_get_debug_log',
|
|
|
|
|
727 |
filters: filters,
|
728 |
offset : offset,
|
729 |
limit : limit
|
37 |
|
38 |
$.post( ajaxurl, {
|
39 |
action: 'fs_toggle_debug_mode',
|
40 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
41 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_toggle_debug_mode' ) ); ?>,
|
42 |
is_on : ($(this).hasClass( 'fs-on' ) ? 1 : 0)
|
43 |
}, function ( response ) {
|
44 |
if ( 1 == response ) {
|
79 |
<button class="button"><?php fs_esc_html_echo_inline( 'Clear Updates Transients' ) ?></button>
|
80 |
</form>
|
81 |
</td>
|
82 |
+
<?php if ( Freemius::is_deactivation_snoozed() ) : ?>
|
83 |
+
<td>
|
84 |
+
<!-- Reset Deactivation Snoozing -->
|
85 |
+
<form action="" method="POST">
|
86 |
+
<input type="hidden" name="fs_action" value="reset_deactivation_snoozing">
|
87 |
+
<?php wp_nonce_field( 'reset_deactivation_snoozing' ) ?>
|
88 |
+
<button class="button"><?php fs_esc_html_echo_inline( 'Reset Deactivation Snoozing' ) ?> (Expires in <?php echo ( Freemius::deactivation_snooze_expires_at() - time() ) ?> sec)</button>
|
89 |
+
</form>
|
90 |
+
</td>
|
91 |
+
<?php endif ?>
|
92 |
<td>
|
93 |
<!-- Sync Data with Server -->
|
94 |
<form action="" method="POST">
|
123 |
if (optionName) {
|
124 |
$.post(ajaxurl, {
|
125 |
action : 'fs_get_db_option',
|
126 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
127 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_get_db_option' ) ); ?>,
|
128 |
option_name: optionName
|
129 |
}, function (response) {
|
130 |
if (response.data.value)
|
144 |
if (optionValue) {
|
145 |
$.post(ajaxurl, {
|
146 |
action : 'fs_set_db_option',
|
147 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
148 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_set_db_option' ) ); ?>,
|
149 |
option_name : optionName,
|
150 |
option_value: optionValue
|
151 |
}, function () {
|
390 |
</thead>
|
391 |
<tbody>
|
392 |
<?php foreach ( $sites_map as $slug => $sites ) : ?>
|
|
|
|
|
|
|
393 |
<?php foreach ( $sites as $site ) : ?>
|
394 |
<tr>
|
395 |
<td><?php echo $site->id ?></td>
|
491 |
* @var FS_User[] $users
|
492 |
*/
|
493 |
$users = $VARS['users'];
|
494 |
+
$user_ids_map = array();
|
495 |
$users_with_developer_license_by_id = array();
|
496 |
|
497 |
+
if ( is_array( $users ) && ! empty( $users ) ) {
|
498 |
+
foreach ( $users as $user ) {
|
499 |
+
$user_ids_map[ $user->id ] = true;
|
500 |
+
}
|
501 |
+
}
|
502 |
+
|
503 |
foreach ( $module_types as $module_type ) {
|
504 |
/**
|
505 |
* @var FS_Plugin_License[] $licenses
|
592 |
<td><?php echo $license->is_block_features ? 'Blocking' : 'Flexible' ?></td>
|
593 |
<td><?php echo $license->is_whitelabeled ? 'Whitelabeled' : 'Normal' ?></td>
|
594 |
<td><?php
|
595 |
+
echo ( $license->is_whitelabeled || ! isset( $user_ids_map[ $license->user_id ] ) ) ?
|
596 |
$license->get_html_escaped_masked_secret_key() :
|
597 |
esc_html( $license->secret_key );
|
598 |
?></td>
|
742 |
|
743 |
$.post(ajaxurl, {
|
744 |
action : 'fs_get_debug_log',
|
745 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
746 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_get_debug_log' ) ); ?>,
|
747 |
filters: filters,
|
748 |
offset : offset,
|
749 |
limit : limit
|
freemius/templates/firewall-issues-js.php
CHANGED
@@ -22,10 +22,12 @@
|
|
22 |
notice = $( this ).parents( '.fs-notice' ),
|
23 |
ajaxActionSuffix = notice.attr( 'data-manager-id' ).replace( ':', '-' );
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
|
|
|
|
29 |
|
30 |
if ( 'squid' === error_type ) {
|
31 |
data.hosting_company = prompt( 'What is the name or URL of your hosting company?' );
|
@@ -39,7 +41,9 @@
|
|
39 |
}
|
40 |
|
41 |
if ( 'retry_ping' === error_type ) {
|
42 |
-
|
|
|
|
|
43 |
}
|
44 |
|
45 |
$( this ).css({'cursor': 'wait'});
|
@@ -56,4 +60,4 @@
|
|
56 |
});
|
57 |
});
|
58 |
});
|
59 |
-
</script>
|
22 |
notice = $( this ).parents( '.fs-notice' ),
|
23 |
ajaxActionSuffix = notice.attr( 'data-manager-id' ).replace( ':', '-' );
|
24 |
|
25 |
+
var data = {
|
26 |
+
action : 'fs_resolve_firewall_issues_' + ajaxActionSuffix,
|
27 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
28 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_resolve_firewall_issues' ) ); ?>,
|
29 |
+
error_type: error_type
|
30 |
+
};
|
31 |
|
32 |
if ( 'squid' === error_type ) {
|
33 |
data.hosting_company = prompt( 'What is the name or URL of your hosting company?' );
|
41 |
}
|
42 |
|
43 |
if ( 'retry_ping' === error_type ) {
|
44 |
+
data.action = 'fs_retry_connectivity_test_' + ajaxActionSuffix;
|
45 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
46 |
+
data._wpnonce = <?php echo wp_json_encode( wp_create_nonce( 'fs_retry_connectivity_test' ) ); ?>;
|
47 |
}
|
48 |
|
49 |
$( this ).css({'cursor': 'wait'});
|
60 |
});
|
61 |
});
|
62 |
});
|
63 |
+
</script>
|
freemius/templates/forms/deactivation/form.php
CHANGED
@@ -1,543 +1,666 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @package Freemius
|
4 |
-
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
-
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
-
* @since 1.1.2
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
/**
|
14 |
-
* @var array $VARS
|
15 |
-
*/
|
16 |
-
$fs = freemius( $VARS['id'] );
|
17 |
-
$slug = $fs->get_slug();
|
18 |
-
|
19 |
-
$subscription_cancellation_dialog_box_template_params = $VARS['subscription_cancellation_dialog_box_template_params'];
|
20 |
-
$show_deactivation_feedback_form = $VARS['show_deactivation_feedback_form'];
|
21 |
-
$confirmation_message = $VARS['uninstall_confirmation_message'];
|
22 |
-
|
23 |
-
$is_anonymous = ( ! $fs->is_registered() );
|
24 |
-
$anonymous_feedback_checkbox_html = '';
|
25 |
-
|
26 |
-
$reasons_list_items_html = '';
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
$
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
$
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
data-input-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
(
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
var
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
$modal.
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
return $
|
532 |
-
}
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @since 1.1.2
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
*/
|
16 |
+
$fs = freemius( $VARS['id'] );
|
17 |
+
$slug = $fs->get_slug();
|
18 |
+
|
19 |
+
$subscription_cancellation_dialog_box_template_params = $VARS['subscription_cancellation_dialog_box_template_params'];
|
20 |
+
$show_deactivation_feedback_form = $VARS['show_deactivation_feedback_form'];
|
21 |
+
$confirmation_message = $VARS['uninstall_confirmation_message'];
|
22 |
+
|
23 |
+
$is_anonymous = ( ! $fs->is_registered() );
|
24 |
+
$anonymous_feedback_checkbox_html = '';
|
25 |
+
|
26 |
+
$reasons_list_items_html = '';
|
27 |
+
$snooze_select_html = '';
|
28 |
+
|
29 |
+
if ( $show_deactivation_feedback_form ) {
|
30 |
+
$reasons = $VARS['reasons'];
|
31 |
+
|
32 |
+
foreach ( $reasons as $reason ) {
|
33 |
+
$list_item_classes = 'reason' . ( ! empty( $reason['input_type'] ) ? ' has-input' : '' );
|
34 |
+
|
35 |
+
if ( isset( $reason['internal_message'] ) && ! empty( $reason['internal_message'] ) ) {
|
36 |
+
$list_item_classes .= ' has-internal-message';
|
37 |
+
$reason_internal_message = $reason['internal_message'];
|
38 |
+
} else {
|
39 |
+
$reason_internal_message = '';
|
40 |
+
}
|
41 |
+
|
42 |
+
$reason_input_type = ( ! empty( $reason['input_type'] ) ? $reason['input_type'] : '' );
|
43 |
+
$reason_input_placeholder = ( ! empty( $reason['input_placeholder'] ) ? $reason['input_placeholder'] : '' );
|
44 |
+
|
45 |
+
$reason_list_item_html = <<< HTML
|
46 |
+
<li class="{$list_item_classes}"
|
47 |
+
data-input-type="{$reason_input_type}"
|
48 |
+
data-input-placeholder="{$reason_input_placeholder}">
|
49 |
+
<label>
|
50 |
+
<span>
|
51 |
+
<input type="radio" name="selected-reason" value="{$reason['id']}"/>
|
52 |
+
</span>
|
53 |
+
<span>{$reason['text']}</span>
|
54 |
+
</label>
|
55 |
+
<div class="internal-message">{$reason_internal_message}</div>
|
56 |
+
</li>
|
57 |
+
HTML;
|
58 |
+
|
59 |
+
$reasons_list_items_html .= $reason_list_item_html;
|
60 |
+
}
|
61 |
+
|
62 |
+
if ( $is_anonymous ) {
|
63 |
+
$anonymous_feedback_checkbox_html = sprintf(
|
64 |
+
'<label class="anonymous-feedback-label"><input type="checkbox" class="anonymous-feedback-checkbox"> %s</label>',
|
65 |
+
fs_esc_html_inline( 'Anonymous feedback', 'anonymous-feedback', $slug )
|
66 |
+
);
|
67 |
+
}
|
68 |
+
|
69 |
+
$snooze_periods = array(
|
70 |
+
array(
|
71 |
+
'increment' => fs_text_inline( 'hour', $slug ),
|
72 |
+
'quantity' => number_format_i18n(1),
|
73 |
+
'value' => 6 * WP_FS__TIME_10_MIN_IN_SEC,
|
74 |
+
),
|
75 |
+
array(
|
76 |
+
'increment' => fs_text_inline( 'hours', $slug ),
|
77 |
+
'quantity' => number_format_i18n(24),
|
78 |
+
'value' => WP_FS__TIME_24_HOURS_IN_SEC,
|
79 |
+
),
|
80 |
+
array(
|
81 |
+
'increment' => fs_text_inline( 'days', $slug ),
|
82 |
+
'quantity' => number_format_i18n(7),
|
83 |
+
'value' => WP_FS__TIME_WEEK_IN_SEC,
|
84 |
+
),
|
85 |
+
array(
|
86 |
+
'increment' => fs_text_inline( 'days', $slug ),
|
87 |
+
'quantity' => number_format_i18n(30),
|
88 |
+
'value' => 30 * WP_FS__TIME_24_HOURS_IN_SEC,
|
89 |
+
),
|
90 |
+
);
|
91 |
+
|
92 |
+
$snooze_select_html = '<select>';
|
93 |
+
foreach ($snooze_periods as $period) {
|
94 |
+
$snooze_select_html .= sprintf(
|
95 |
+
'<option value="%s">%s %s</option>',
|
96 |
+
$period['value'],
|
97 |
+
$period['quantity'],
|
98 |
+
$period['increment']
|
99 |
+
);
|
100 |
+
}
|
101 |
+
|
102 |
+
$snooze_select_html .= '</select>';
|
103 |
+
}
|
104 |
+
|
105 |
+
// Aliases.
|
106 |
+
$deactivate_text = fs_text_inline( 'Deactivate', 'deactivate', $slug );
|
107 |
+
$theme_text = fs_text_inline( 'Theme', 'theme', $slug );
|
108 |
+
$activate_x_text = fs_text_inline( 'Activate %s', 'activate-x', $slug );
|
109 |
+
|
110 |
+
$submit_deactivate_text = sprintf(
|
111 |
+
fs_text_inline( 'Submit & %s', 'deactivation-modal-button-submit', $slug ),
|
112 |
+
$fs->is_plugin() ?
|
113 |
+
$deactivate_text :
|
114 |
+
sprintf( $activate_x_text, $theme_text )
|
115 |
+
);
|
116 |
+
|
117 |
+
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
118 |
+
|
119 |
+
if ( ! empty( $subscription_cancellation_dialog_box_template_params ) ) {
|
120 |
+
fs_require_template( 'forms/subscription-cancellation.php', $subscription_cancellation_dialog_box_template_params );
|
121 |
+
}
|
122 |
+
?>
|
123 |
+
<script type="text/javascript">
|
124 |
+
(function ($) {
|
125 |
+
var reasonsHtml = <?php echo json_encode( $reasons_list_items_html ) ?>,
|
126 |
+
modalHtml =
|
127 |
+
'<div class="fs-modal fs-modal-deactivation-feedback<?php echo empty( $confirmation_message ) ? ' no-confirmation-message' : ''; ?>">'
|
128 |
+
+ ' <div class="fs-modal-dialog">'
|
129 |
+
+ ' <div class="fs-modal-header">'
|
130 |
+
+ ' <h4><?php fs_esc_attr_echo_inline( 'Quick Feedback', 'quick-feedback' , $slug ) ?></h4>'
|
131 |
+
+ ' </div>'
|
132 |
+
+ ' <div class="fs-modal-body">'
|
133 |
+
+ ' <div class="fs-modal-panel" data-panel-id="confirm"><p><?php echo $confirmation_message; ?></p></div>'
|
134 |
+
+ ' <div class="fs-modal-panel active" data-panel-id="reasons"><h3><strong><?php echo esc_js( sprintf( fs_text_inline( 'If you have a moment, please let us know why you are %s', 'deactivation-share-reason' , $slug ), ( $fs->is_plugin() ? fs_text_inline( 'deactivating', 'deactivating', $slug ) : fs_text_inline( 'switching', 'switching', $slug ) ) ) ) ?>:</strong></h3><ul id="reasons-list">' + reasonsHtml + '</ul></div>'
|
135 |
+
+ ' </div>'
|
136 |
+
+ ' <div class="fs-modal-footer">'
|
137 |
+
+ ' <?php echo $anonymous_feedback_checkbox_html ?>'
|
138 |
+
+ ' <label style="display: none" class="feedback-from-snooze-label"><input type="checkbox" class="feedback-from-snooze-checkbox"> <span><?php fs_esc_js_echo_inline( 'Snooze this panel during troubleshooting', 'snooze-panel-during-troubleshooting', $slug ) ?></span><span style="display: none"><?php fs_esc_js_echo_inline( 'Snooze this panel for', 'snooze-panel-for', $slug ) ?> <?php echo $snooze_select_html ?></span></label>'
|
139 |
+
+ ' <a href="#" class="button button-secondary button-deactivate"></a>'
|
140 |
+
+ ' <a href="#" class="button button-secondary button-close"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>'
|
141 |
+
+ ' </div>'
|
142 |
+
+ ' </div>'
|
143 |
+
+ '</div>',
|
144 |
+
$modal = $(modalHtml),
|
145 |
+
selectedReasonID = false,
|
146 |
+
redirectLink = '',
|
147 |
+
$anonymousFeedback = $modal.find( '.anonymous-feedback-label' ),
|
148 |
+
$feedbackSnooze = $modal.find( '.feedback-from-snooze-label' ),
|
149 |
+
isAnonymous = <?php echo ( $is_anonymous ? 'true' : 'false' ); ?>,
|
150 |
+
otherReasonID = <?php echo Freemius::REASON_OTHER; ?>,
|
151 |
+
dontShareDataReasonID = <?php echo Freemius::REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION; ?>,
|
152 |
+
deleteThemeUpdateData = <?php echo $fs->is_theme() && $fs->is_premium() && ! $fs->has_any_active_valid_license() ? 'true' : 'false' ?>,
|
153 |
+
$subscriptionCancellationModal = $( '.fs-modal-subscription-cancellation-<?php echo $fs->get_id() ?>' ),
|
154 |
+
showDeactivationFeedbackForm = <?php echo ( $show_deactivation_feedback_form ? 'true' : 'false' ) ?>,
|
155 |
+
$body = $( 'body' );
|
156 |
+
|
157 |
+
$modal.appendTo( $body );
|
158 |
+
|
159 |
+
if ( 0 !== $subscriptionCancellationModal.length ) {
|
160 |
+
$subscriptionCancellationModal.on( '<?php echo $fs->get_action_tag( 'subscription_cancellation_action' ) ?>', function( evt, cancelSubscription ) {
|
161 |
+
var shouldDeactivateModule = ( $modal.hasClass( 'no-confirmation-message' ) && ! showDeactivationFeedbackForm );
|
162 |
+
|
163 |
+
if ( false === cancelSubscription ) {
|
164 |
+
if ( ! shouldDeactivateModule ) {
|
165 |
+
showModal();
|
166 |
+
}
|
167 |
+
|
168 |
+
$subscriptionCancellationModal.trigger( 'closeModal' );
|
169 |
+
|
170 |
+
if ( shouldDeactivateModule ) {
|
171 |
+
deactivateModule();
|
172 |
+
}
|
173 |
+
} else {
|
174 |
+
var $errorMessage = $subscriptionCancellationModal.find( '.notice-error' );
|
175 |
+
|
176 |
+
<?php
|
177 |
+
$subscription_cancellation_context = $fs->is_paid_trial() ?
|
178 |
+
fs_text_inline( 'trial', 'trial', $slug ) :
|
179 |
+
fs_text_inline( 'subscription', 'subscription', $slug );
|
180 |
+
?>
|
181 |
+
|
182 |
+
$.ajax({
|
183 |
+
url : ajaxurl,
|
184 |
+
method : 'POST',
|
185 |
+
data : {
|
186 |
+
action : '<?php echo $fs->get_ajax_action( 'cancel_subscription_or_trial' ) ?>',
|
187 |
+
security : '<?php echo $fs->get_ajax_security( 'cancel_subscription_or_trial' ) ?>',
|
188 |
+
module_id: '<?php echo $fs->get_id() ?>'
|
189 |
+
},
|
190 |
+
beforeSend: function() {
|
191 |
+
$errorMessage.hide();
|
192 |
+
|
193 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button' ).addClass( 'disabled' );
|
194 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).text( '<?php echo esc_js(
|
195 |
+
sprintf( fs_text_inline( 'Cancelling %s...', 'cancelling-x' , $slug ), $subscription_cancellation_context )
|
196 |
+
) ?>' );
|
197 |
+
},
|
198 |
+
success: function( result ) {
|
199 |
+
if ( result.success ) {
|
200 |
+
$subscriptionCancellationModal.removeClass( 'has-subscription-actions' );
|
201 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).removeClass( 'warn' );
|
202 |
+
|
203 |
+
$subscriptionCancellationModal.remove();
|
204 |
+
|
205 |
+
if ( ! shouldDeactivateModule ) {
|
206 |
+
showModal();
|
207 |
+
} else {
|
208 |
+
deactivateModule();
|
209 |
+
}
|
210 |
+
} else {
|
211 |
+
$errorMessage.find( '> p' ).html( result.error );
|
212 |
+
$errorMessage.show();
|
213 |
+
|
214 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button' ).removeClass( 'disabled' );
|
215 |
+
$subscriptionCancellationModal.find( '.fs-modal-footer .button-primary' ).html( <?php echo json_encode( sprintf(
|
216 |
+
fs_text_inline( 'Cancel %s & Proceed', 'cancel-x-and-proceed', $slug ),
|
217 |
+
ucfirst( $subscription_cancellation_context )
|
218 |
+
) ) ?> );
|
219 |
+
}
|
220 |
+
}
|
221 |
+
});
|
222 |
+
}
|
223 |
+
});
|
224 |
+
}
|
225 |
+
|
226 |
+
registerEventHandlers();
|
227 |
+
|
228 |
+
function registerEventHandlers() {
|
229 |
+
$body.on( 'click', '#the-list .deactivate > a', function ( evt ) {
|
230 |
+
if ( 0 === $( this ).next( '[data-module-id=<?php echo $fs->get_id() ?>].fs-module-id' ).length ) {
|
231 |
+
return true;
|
232 |
+
}
|
233 |
+
|
234 |
+
evt.preventDefault();
|
235 |
+
|
236 |
+
redirectLink = $(this).attr('href');
|
237 |
+
|
238 |
+
if ( 0 == $subscriptionCancellationModal.length ) {
|
239 |
+
showModal();
|
240 |
+
} else {
|
241 |
+
$subscriptionCancellationModal.trigger( 'showModal' );
|
242 |
+
}
|
243 |
+
});
|
244 |
+
|
245 |
+
<?php
|
246 |
+
if ( ! $fs->is_plugin() ) {
|
247 |
+
/**
|
248 |
+
* For "theme" module type, the modal is shown when the current user clicks on
|
249 |
+
* the "Activate" button of any other theme. The "Activate" button is actually
|
250 |
+
* a link to the "Themes" page (/wp-admin/themes.php) containing query params
|
251 |
+
* that tell WordPress to deactivate the current theme and activate a different theme.
|
252 |
+
*
|
253 |
+
* @author Leo Fajardo (@leorw)
|
254 |
+
* @since 1.2.2
|
255 |
+
*
|
256 |
+
* @since 1.2.2.7 Don't trigger the deactivation feedback form if activating the premium version of the theme.
|
257 |
+
*/
|
258 |
+
?>
|
259 |
+
$('body').on('click', '.theme-browser .theme:not([data-slug=<?php echo $fs->get_premium_slug() ?>]) .theme-actions .button.activate', function (evt) {
|
260 |
+
evt.preventDefault();
|
261 |
+
|
262 |
+
redirectLink = $(this).attr('href');
|
263 |
+
|
264 |
+
if ( 0 != $subscriptionCancellationModal.length ) {
|
265 |
+
$subscriptionCancellationModal.trigger( 'showModal' );
|
266 |
+
} else {
|
267 |
+
if ( $modal.hasClass( 'no-confirmation-message' ) && ! showDeactivationFeedbackForm ) {
|
268 |
+
deactivateModule();
|
269 |
+
} else {
|
270 |
+
showModal();
|
271 |
+
}
|
272 |
+
}
|
273 |
+
});
|
274 |
+
<?php
|
275 |
+
} ?>
|
276 |
+
|
277 |
+
$modal.on('input propertychange', '.reason-input input', function () {
|
278 |
+
var reason = $(this).val().trim();
|
279 |
+
|
280 |
+
/**
|
281 |
+
* If reason is not empty, remove the error-message class of the message container
|
282 |
+
* to change the message color back to default.
|
283 |
+
*/
|
284 |
+
if (reason.length > 0) {
|
285 |
+
$('.message').removeClass('error-message');
|
286 |
+
}
|
287 |
+
|
288 |
+
toggleDeactivationButtonPrimary( reason.length > 0 );
|
289 |
+
|
290 |
+
changeDeactivateButtonText();
|
291 |
+
});
|
292 |
+
|
293 |
+
$modal.on('blur', '.reason-input input', function () {
|
294 |
+
var $userReason = $(this);
|
295 |
+
|
296 |
+
setTimeout(function () {
|
297 |
+
if (!isOtherReasonSelected()) {
|
298 |
+
return;
|
299 |
+
}
|
300 |
+
|
301 |
+
/**
|
302 |
+
* If reason is empty, add the error-message class to the message container
|
303 |
+
* to change the message color to red.
|
304 |
+
*/
|
305 |
+
if (0 === $userReason.val().trim().length) {
|
306 |
+
$('.message').addClass('error-message');
|
307 |
+
changeDeactivateButtonText();
|
308 |
+
}
|
309 |
+
}, 150);
|
310 |
+
});
|
311 |
+
|
312 |
+
$modal.on('click', '.fs-modal-footer .button', function (evt) {
|
313 |
+
evt.preventDefault();
|
314 |
+
|
315 |
+
if ($(this).hasClass('disabled')) {
|
316 |
+
return;
|
317 |
+
}
|
318 |
+
|
319 |
+
var _parent = $(this).parents('.fs-modal:first');
|
320 |
+
var _this = $(this);
|
321 |
+
|
322 |
+
if (_this.hasClass('allow-deactivate')) {
|
323 |
+
var
|
324 |
+
$radio = $modal.find('input[type="radio"]:checked'),
|
325 |
+
isReasonSelected = (0 < $radio.length),
|
326 |
+
userReason = '';
|
327 |
+
|
328 |
+
if ( isReasonSelected ) {
|
329 |
+
var $selectedReason = $radio.parents('li:first'),
|
330 |
+
$reasonInput = $selectedReason.find('textarea, input[type="text"]');
|
331 |
+
|
332 |
+
if ( 0 < $reasonInput.length ) {
|
333 |
+
userReason = $reasonInput.val().trim();
|
334 |
+
}
|
335 |
+
}
|
336 |
+
|
337 |
+
if ( otherReasonID == selectedReasonID && '' === userReason ) {
|
338 |
+
// If the 'Other' is selected and a reason is not provided (aka it's empty), treat it as if a reason wasn't selected at all.
|
339 |
+
isReasonSelected = false;
|
340 |
+
}
|
341 |
+
|
342 |
+
_parent.find( '.fs-modal-footer .button' ).addClass( 'disabled' );
|
343 |
+
|
344 |
+
if ( ! isReasonSelected ) {
|
345 |
+
if ( ! deleteThemeUpdateData ) {
|
346 |
+
// If no selected reason, just deactivate the plugin.
|
347 |
+
window.location.href = redirectLink;
|
348 |
+
} else {
|
349 |
+
$.ajax({
|
350 |
+
url : ajaxurl,
|
351 |
+
method : 'POST',
|
352 |
+
data : {
|
353 |
+
action : '<?php echo $fs->get_ajax_action( 'delete_theme_update_data' ) ?>',
|
354 |
+
security : '<?php echo $fs->get_ajax_security( 'delete_theme_update_data' ) ?>',
|
355 |
+
module_id: '<?php echo $fs->get_id() ?>'
|
356 |
+
},
|
357 |
+
beforeSend: function() {
|
358 |
+
_parent.find( '.fs-modal-footer .button-deactivate' ).text( '<?php echo esc_js( fs_text_inline( 'Processing', 'processing', $slug ) ) ?>...' );
|
359 |
+
},
|
360 |
+
complete : function() {
|
361 |
+
window.location.href = redirectLink;
|
362 |
+
}
|
363 |
+
});
|
364 |
+
}
|
365 |
+
|
366 |
+
return;
|
367 |
+
}
|
368 |
+
|
369 |
+
var snoozePeriod = 0;
|
370 |
+
|
371 |
+
if ( <?php echo Freemius::REASON_TEMPORARY_DEACTIVATION ?> == selectedReasonID ) {
|
372 |
+
snoozePeriod = parseInt($feedbackSnooze.find('select').val(), 10);
|
373 |
+
}
|
374 |
+
|
375 |
+
|
376 |
+
$.ajax({
|
377 |
+
url : ajaxurl,
|
378 |
+
method : 'POST',
|
379 |
+
data : {
|
380 |
+
action : '<?php echo $fs->get_ajax_action( 'submit_uninstall_reason' ) ?>',
|
381 |
+
security : '<?php echo $fs->get_ajax_security( 'submit_uninstall_reason' ) ?>',
|
382 |
+
module_id : '<?php echo $fs->get_id() ?>',
|
383 |
+
reason_id : $radio.val(),
|
384 |
+
reason_info : userReason,
|
385 |
+
is_anonymous : isAnonymousFeedback(),
|
386 |
+
snooze_period: snoozePeriod
|
387 |
+
},
|
388 |
+
beforeSend: function () {
|
389 |
+
_parent.find('.fs-modal-footer .button-deactivate').text('<?php echo esc_js( fs_text_inline( 'Processing', 'processing', $slug ) ) ?>...');
|
390 |
+
},
|
391 |
+
complete : function () {
|
392 |
+
// Do not show the dialog box, deactivate the plugin.
|
393 |
+
window.location.href = redirectLink;
|
394 |
+
}
|
395 |
+
});
|
396 |
+
} else if (_this.hasClass('button-deactivate')) {
|
397 |
+
// Change the Deactivate button's text and show the reasons panel.
|
398 |
+
_parent.find('.button-deactivate').addClass('allow-deactivate');
|
399 |
+
|
400 |
+
if ( showDeactivationFeedbackForm ) {
|
401 |
+
showPanel('reasons');
|
402 |
+
} else {
|
403 |
+
deactivateModule();
|
404 |
+
}
|
405 |
+
}
|
406 |
+
});
|
407 |
+
|
408 |
+
$modal.on('click', 'input[type="radio"]', function () {
|
409 |
+
var $selectedReasonOption = $( this );
|
410 |
+
|
411 |
+
// If the selection has not changed, do not proceed.
|
412 |
+
if (selectedReasonID === $selectedReasonOption.val())
|
413 |
+
return;
|
414 |
+
|
415 |
+
selectedReasonID = $selectedReasonOption.val();
|
416 |
+
|
417 |
+
if ( isAnonymous ) {
|
418 |
+
if ( isReasonSelected( dontShareDataReasonID ) ) {
|
419 |
+
$anonymousFeedback.hide();
|
420 |
+
} else {
|
421 |
+
$anonymousFeedback.show();
|
422 |
+
}
|
423 |
+
}
|
424 |
+
|
425 |
+
var _parent = $(this).parents('li:first');
|
426 |
+
|
427 |
+
$modal.find('.reason-input').remove();
|
428 |
+
$modal.find( '.internal-message' ).hide();
|
429 |
+
$modal.find('.button-deactivate').html('<?php echo esc_js( $submit_deactivate_text ) ?>');
|
430 |
+
|
431 |
+
if ( _parent.hasClass( 'has-internal-message' ) ) {
|
432 |
+
_parent.find( '.internal-message' ).show();
|
433 |
+
}
|
434 |
+
|
435 |
+
if ( ! _parent.hasClass('has-input') ) {
|
436 |
+
toggleDeactivationButtonPrimary( true );
|
437 |
+
} else {
|
438 |
+
toggleDeactivationButtonPrimary( false );
|
439 |
+
|
440 |
+
var inputType = _parent.data('input-type'),
|
441 |
+
inputPlaceholder = _parent.data('input-placeholder'),
|
442 |
+
reasonInputHtml = '<div class="reason-input"><span class="message"></span>' + ( ( 'textfield' === inputType ) ? '<input type="text" maxlength="128" />' : '<textarea rows="5" maxlength="128"></textarea>' ) + '</div>';
|
443 |
+
|
444 |
+
_parent.append($(reasonInputHtml));
|
445 |
+
_parent.find('input, textarea').attr('placeholder', inputPlaceholder).focus();
|
446 |
+
|
447 |
+
if (isOtherReasonSelected()) {
|
448 |
+
showMessage('<?php echo esc_js( fs_text_inline( 'Kindly tell us the reason so we can improve.', 'ask-for-reason-message' , $slug ) ); ?>');
|
449 |
+
changeDeactivateButtonText();
|
450 |
+
}
|
451 |
+
}
|
452 |
+
|
453 |
+
$anonymousFeedback.toggle( <?php echo Freemius::REASON_TEMPORARY_DEACTIVATION ?> != selectedReasonID );
|
454 |
+
$feedbackSnooze.toggle( <?php echo Freemius::REASON_TEMPORARY_DEACTIVATION ?> == selectedReasonID );
|
455 |
+
|
456 |
+
if ( <?php echo Freemius::REASON_TEMPORARY_DEACTIVATION ?> == selectedReasonID ) {
|
457 |
+
updateDeactivationButtonOnTrouble();
|
458 |
+
}
|
459 |
+
});
|
460 |
+
|
461 |
+
var toggleDeactivationButtonPrimary = function ( isPrimary ) {
|
462 |
+
if ( isPrimary ) {
|
463 |
+
$modal.find('.button-deactivate')
|
464 |
+
.removeClass( 'button-secondary' )
|
465 |
+
.addClass( 'button-primary' );
|
466 |
+
} else {
|
467 |
+
$modal.find('.button-deactivate')
|
468 |
+
.addClass( 'button-secondary' )
|
469 |
+
.removeClass( 'button-primary' );
|
470 |
+
}
|
471 |
+
};
|
472 |
+
|
473 |
+
var snooze = false;
|
474 |
+
|
475 |
+
var updateDeactivationButtonOnTrouble = function () {
|
476 |
+
if ( snooze ) {
|
477 |
+
$modal.find('.button-deactivate').html('<?php echo esc_js( sprintf(
|
478 |
+
fs_text_inline( 'Snooze & %s', 'snooze-modal-button-submit' , $slug ),
|
479 |
+
$fs->is_plugin() ?
|
480 |
+
$deactivate_text :
|
481 |
+
sprintf( $activate_x_text, $theme_text )
|
482 |
+
) ) ?>');
|
483 |
+
} else {
|
484 |
+
$modal.find('.button-deactivate').html('<?php echo esc_js(
|
485 |
+
$fs->is_plugin() ?
|
486 |
+
$deactivate_text :
|
487 |
+
sprintf( $activate_x_text, $theme_text )
|
488 |
+
) ?>');
|
489 |
+
}
|
490 |
+
};
|
491 |
+
|
492 |
+
$feedbackSnooze.on( 'click', 'input', function () {
|
493 |
+
var $spans = $feedbackSnooze.find( 'span' );
|
494 |
+
|
495 |
+
snooze = ( ! snooze );
|
496 |
+
|
497 |
+
$( $spans[0] ).toggle();
|
498 |
+
$( $spans[1] ).toggle();
|
499 |
+
|
500 |
+
updateDeactivationButtonOnTrouble();
|
501 |
+
});
|
502 |
+
|
503 |
+
// If the user has clicked outside the window, cancel it.
|
504 |
+
$modal.on('click', function (evt) {
|
505 |
+
var $target = $(evt.target);
|
506 |
+
|
507 |
+
// If the user has clicked anywhere in the modal dialog, just return.
|
508 |
+
if ($target.hasClass('fs-modal-body') || $target.hasClass('fs-modal-footer')) {
|
509 |
+
return;
|
510 |
+
}
|
511 |
+
|
512 |
+
// If the user has not clicked the close button and the clicked element is inside the modal dialog, just return.
|
513 |
+
if (
|
514 |
+
! $target.hasClass( 'button-close' ) &&
|
515 |
+
( $target.parents( '.fs-modal-body' ).length > 0 || $target.parents( '.fs-modal-footer' ).length > 0 )
|
516 |
+
) {
|
517 |
+
return;
|
518 |
+
}
|
519 |
+
|
520 |
+
closeModal();
|
521 |
+
|
522 |
+
return false;
|
523 |
+
});
|
524 |
+
}
|
525 |
+
|
526 |
+
function isAnonymousFeedback() {
|
527 |
+
if ( ! isAnonymous ) {
|
528 |
+
return false;
|
529 |
+
}
|
530 |
+
|
531 |
+
return ( isReasonSelected( dontShareDataReasonID ) || $anonymousFeedback.find( 'input' ).prop( 'checked' ) );
|
532 |
+
}
|
533 |
+
|
534 |
+
function isReasonSelected( reasonID ) {
|
535 |
+
// Get the selected radio input element.
|
536 |
+
var $selectedReasonOption = $modal.find('input[type="radio"]:checked');
|
537 |
+
|
538 |
+
return ( reasonID == $selectedReasonOption.val() );
|
539 |
+
}
|
540 |
+
|
541 |
+
function isOtherReasonSelected() {
|
542 |
+
return isReasonSelected( otherReasonID );
|
543 |
+
}
|
544 |
+
|
545 |
+
function showModal() {
|
546 |
+
resetModal();
|
547 |
+
|
548 |
+
// Display the dialog box.
|
549 |
+
$modal.addClass('active');
|
550 |
+
|
551 |
+
$('body').addClass('has-fs-modal');
|
552 |
+
}
|
553 |
+
|
554 |
+
function closeModal() {
|
555 |
+
$modal.removeClass('active');
|
556 |
+
|
557 |
+
$('body').removeClass('has-fs-modal');
|
558 |
+
}
|
559 |
+
|
560 |
+
function resetModal() {
|
561 |
+
selectedReasonID = false;
|
562 |
+
|
563 |
+
// Uncheck all radio buttons.
|
564 |
+
$modal.find('input[type="radio"]').prop('checked', false);
|
565 |
+
|
566 |
+
// Remove all input fields ( textfield, textarea ).
|
567 |
+
$modal.find('.reason-input').remove();
|
568 |
+
|
569 |
+
$modal.find('.message').hide();
|
570 |
+
|
571 |
+
if ( isAnonymous ) {
|
572 |
+
$anonymousFeedback.find( 'input' ).prop( 'checked', <?php echo $fs->apply_filters( 'default_to_anonymous_feedback', false ) ? 'true' : 'false' ?> );
|
573 |
+
|
574 |
+
// Hide, since by default there is no selected reason.
|
575 |
+
$anonymousFeedback.hide();
|
576 |
+
}
|
577 |
+
|
578 |
+
var $deactivateButton = $modal.find('.button-deactivate');
|
579 |
+
|
580 |
+
/*
|
581 |
+
* If the modal dialog has no confirmation message, that is, it has only one panel, then ensure
|
582 |
+
* that clicking the deactivate button will actually deactivate the plugin.
|
583 |
+
*/
|
584 |
+
if ( $modal.hasClass( 'no-confirmation-message' ) ) {
|
585 |
+
$deactivateButton.addClass( 'allow-deactivate' );
|
586 |
+
|
587 |
+
showPanel( 'reasons' );
|
588 |
+
} else {
|
589 |
+
$deactivateButton.removeClass( 'allow-deactivate' );
|
590 |
+
|
591 |
+
showPanel( 'confirm' );
|
592 |
+
}
|
593 |
+
}
|
594 |
+
|
595 |
+
function showMessage(message) {
|
596 |
+
$modal.find('.message').text(message).show();
|
597 |
+
}
|
598 |
+
|
599 |
+
/**
|
600 |
+
* @author Xiaheng Chen (@xhchen)
|
601 |
+
*
|
602 |
+
* @since 2.4.2
|
603 |
+
*/
|
604 |
+
function changeDeactivateButtonText() {
|
605 |
+
if ( ! isOtherReasonSelected()) {
|
606 |
+
return;
|
607 |
+
}
|
608 |
+
|
609 |
+
var
|
610 |
+
$userReason = $modal.find('.reason-input input'),
|
611 |
+
$deactivateButton = $modal.find('.button-deactivate');
|
612 |
+
|
613 |
+
if (0 === $userReason.val().trim().length) {
|
614 |
+
// If the reason is empty, just change the text to 'Deactivate' (plugin) or 'Activate themeX' (theme).
|
615 |
+
$deactivateButton.html('<?php echo
|
616 |
+
$fs->is_plugin() ?
|
617 |
+
$deactivate_text :
|
618 |
+
sprintf( $activate_x_text, $theme_text )
|
619 |
+
?>');
|
620 |
+
} else {
|
621 |
+
$deactivateButton.html('<?php echo esc_js( $submit_deactivate_text ) ?>');
|
622 |
+
}
|
623 |
+
}
|
624 |
+
|
625 |
+
function showPanel(panelType) {
|
626 |
+
$modal.find( '.fs-modal-panel' ).removeClass( 'active' );
|
627 |
+
$modal.find( '[data-panel-id="' + panelType + '"]' ).addClass( 'active' );
|
628 |
+
|
629 |
+
updateButtonLabels();
|
630 |
+
}
|
631 |
+
|
632 |
+
function updateButtonLabels() {
|
633 |
+
var $deactivateButton = $modal.find( '.button-deactivate' );
|
634 |
+
|
635 |
+
// Reset the deactivate button's text.
|
636 |
+
if ( 'confirm' === getCurrentPanel() ) {
|
637 |
+
$deactivateButton.text( <?php echo json_encode( sprintf(
|
638 |
+
fs_text_inline( 'Yes - %s', 'deactivation-modal-button-confirm', $slug ),
|
639 |
+
$fs->is_plugin() ?
|
640 |
+
$deactivate_text :
|
641 |
+
sprintf( $activate_x_text, $theme_text )
|
642 |
+
) ) ?> );
|
643 |
+
} else {
|
644 |
+
$deactivateButton.html( <?php echo json_encode( sprintf(
|
645 |
+
fs_text_inline('Skip & %s', 'skip-and-x', $slug ),
|
646 |
+
$fs->is_plugin() ?
|
647 |
+
$deactivate_text :
|
648 |
+
sprintf( $activate_x_text, $theme_text )
|
649 |
+
) ) ?> );
|
650 |
+
}
|
651 |
+
}
|
652 |
+
|
653 |
+
function getCurrentPanel() {
|
654 |
+
return $modal.find('.fs-modal-panel.active').attr('data-panel-id');
|
655 |
+
}
|
656 |
+
|
657 |
+
/**
|
658 |
+
* @author Leo Fajardo (@leorw)
|
659 |
+
*
|
660 |
+
* @since 2.3.0
|
661 |
+
*/
|
662 |
+
function deactivateModule() {
|
663 |
+
window.location.href = redirectLink;
|
664 |
+
}
|
665 |
+
})(jQuery);
|
666 |
+
</script>
|
freemius/templates/forms/email-address-update.php
ADDED
@@ -0,0 +1,347 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2015, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
*
|
7 |
+
* @author Leo Fajardo (@leorw)
|
8 |
+
* @since 2.5.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
12 |
+
exit;
|
13 |
+
}
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var array $VARS
|
17 |
+
*/
|
18 |
+
$fs = freemius( $VARS['id'] );
|
19 |
+
$slug = $fs->get_slug();
|
20 |
+
|
21 |
+
$user = $fs->get_user();
|
22 |
+
$current_email_address = $user->email;
|
23 |
+
|
24 |
+
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
25 |
+
?>
|
26 |
+
<script type="text/javascript">
|
27 |
+
( function ( $ ) {
|
28 |
+
var modalHtml =
|
29 |
+
'<div class="fs-modal fs-modal-email-address-update">'
|
30 |
+
+ ' <div class="fs-modal-dialog">'
|
31 |
+
+ ' <div class="fs-modal-header">'
|
32 |
+
+ ' <h4><?php fs_esc_attr_echo_inline( 'Email address update', 'email-address-update', $slug ) ?></h4>'
|
33 |
+
+ ' <a href="!#" class="fs-close"><i class="dashicons dashicons-no" title="<?php echo esc_js( fs_text_x_inline( 'Dismiss', 'close window', 'dismiss', $slug ) ) ?>"></i></a>'
|
34 |
+
+ ' </div>'
|
35 |
+
+ ' <div class="fs-modal-body">'
|
36 |
+
+ ' <div class="fs-modal-panel active">'
|
37 |
+
+ ' <div class="notice notice-error inline fs-update-error-message"><p></p></div>'
|
38 |
+
+ ' <p><?php fs_echo_inline( 'Enter the new email address', 'enter-new-email-address' , $slug ) ?>:</p>'
|
39 |
+
+ ' <input type="text" class="fs-new-email-address-input" />'
|
40 |
+
+ ' <div class="fs-email-addresses-ownership-options" style="display: none">'
|
41 |
+
+ ' <p><?php echo sprintf(
|
42 |
+
fs_esc_html_inline( 'Are both %s and %s your email addresses?', 'email-addresses-ownership-confirmation' , $slug ),
|
43 |
+
sprintf( '<strong>%s</strong>', $current_email_address ),
|
44 |
+
'<strong class="fs-new-email-address"></strong>'
|
45 |
+
) ?></p>'
|
46 |
+
+ ' <ul>'
|
47 |
+
+ ' <li>'
|
48 |
+
+ ' <label>'
|
49 |
+
+ ' <span><input type="radio" name="email-addresses-ownership" value="both"/></span>'
|
50 |
+
+ ' <span><?php fs_echo_inline( 'Yes - both addresses are mine', 'both-addresses-are-mine', $slug ); ?></span>'
|
51 |
+
+ ' </label>'
|
52 |
+
+ ' </li>'
|
53 |
+
+ ' <li>'
|
54 |
+
+ ' <label>'
|
55 |
+
+ ' <span><input type="radio" name="email-addresses-ownership" value="current"/></span>'
|
56 |
+
+ ' <div><?php echo sprintf(
|
57 |
+
fs_esc_html_inline( "%s is my client's email address", 'client-email-address-confirmation', $slug ),
|
58 |
+
'<strong class="fs-new-email-address"></strong>'
|
59 |
+
) ?></span>'
|
60 |
+
+ ' </label>'
|
61 |
+
+ ' </li>'
|
62 |
+
+ ' <li>'
|
63 |
+
+ ' <label>'
|
64 |
+
+ ' <span><input type="radio" name="email-addresses-ownership" value="new"/></span>'
|
65 |
+
+ ' <div><?php echo sprintf(
|
66 |
+
fs_esc_html_inline( "%s is my email address", 'email-address-ownership-confirmation', $slug ),
|
67 |
+
'<strong class="fs-new-email-address"></strong>'
|
68 |
+
) ?></span>'
|
69 |
+
+ ' </label>'
|
70 |
+
+ ' </li>'
|
71 |
+
+ ' </ul>'
|
72 |
+
+ ' </div>'
|
73 |
+
+ ' <div class="fs-assets-transfership-options" style="display: none">'
|
74 |
+
+ ' <p><?php echo sprintf(
|
75 |
+
fs_esc_html_inline( 'Would you like to merge %s into %s?', 'accounts-merge-confirmation' , $slug ),
|
76 |
+
sprintf( '<strong>%s</strong>', $current_email_address ),
|
77 |
+
'<strong class="fs-new-email-address"></strong>'
|
78 |
+
) ?></p>'
|
79 |
+
+ ' <ul>'
|
80 |
+
+ ' <li>'
|
81 |
+
+ ' <label>'
|
82 |
+
+ ' <span><input type="radio" name="assets-transfer-type" value="all" /></span>'
|
83 |
+
+ ' <span><?php echo sprintf(
|
84 |
+
fs_esc_html_inline( 'Yes - move all my data and assets from %s to %s', 'move-all-data-and-assets-into-new-account', $slug ),
|
85 |
+
sprintf( '<strong>%s</strong>', $current_email_address ),
|
86 |
+
'<strong class="fs-new-email-address"></strong>'
|
87 |
+
) ?></span>'
|
88 |
+
+ ' </label>'
|
89 |
+
+ ' </li>'
|
90 |
+
+ ' <li>'
|
91 |
+
+ ' <label>'
|
92 |
+
+ ' <span><input type="radio" name="assets-transfer-type" value="plugin" /></span>'
|
93 |
+
+ ' <span><?php echo sprintf(
|
94 |
+
fs_esc_html_inline( "No - only move this site's data to %s", 'move-only-plugin-data-into-new-account', $slug ),
|
95 |
+
'<strong class="fs-new-email-address"></strong>'
|
96 |
+
) ?></span>'
|
97 |
+
+ ' </label>'
|
98 |
+
+ ' </li>'
|
99 |
+
+ ' </ul>'
|
100 |
+
+ ' </div>'
|
101 |
+
+ ' </div>'
|
102 |
+
+ ' </div>'
|
103 |
+
+ ' <div class="fs-modal-footer">'
|
104 |
+
+ ' <button class="button button-primary button-update" disabled><?php fs_esc_js_echo_inline( 'Update', 'update-email-address', $slug ) ?></button>'
|
105 |
+
+ ' <button class="button button-secondary button-close"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></button>'
|
106 |
+
+ ' </div>'
|
107 |
+
+ ' </div>'
|
108 |
+
+ '</div>',
|
109 |
+
$modal = $( modalHtml ),
|
110 |
+
$updateButton = $modal.find( '.button-update' ),
|
111 |
+
$updateResultMessage = $modal.find( '.fs-update-error-message' ),
|
112 |
+
selectedEmailAddressesOwnershipOption = null,
|
113 |
+
selectedAssetsTransfershipOption = null,
|
114 |
+
previousEmailAddress = '',
|
115 |
+
$body = $( 'body' );
|
116 |
+
|
117 |
+
$modal.appendTo( $body );
|
118 |
+
|
119 |
+
registerEventHandlers();
|
120 |
+
|
121 |
+
function registerEventHandlers() {
|
122 |
+
$body.on( 'click', '#fs_account_details .button-edit-email-address', function ( evt ) {
|
123 |
+
evt.preventDefault();
|
124 |
+
|
125 |
+
showModal( evt );
|
126 |
+
} );
|
127 |
+
|
128 |
+
$modal.on( 'input propertychange keyup paste delete cut', '.fs-new-email-address-input', function () {
|
129 |
+
var emailAddress = $( this ).val().trim();
|
130 |
+
|
131 |
+
if ( emailAddress === previousEmailAddress ) {
|
132 |
+
return;
|
133 |
+
}
|
134 |
+
|
135 |
+
var isValidEmailAddressInput = isValidEmailAddress( emailAddress );
|
136 |
+
|
137 |
+
toggleOptions( isValidEmailAddressInput );
|
138 |
+
|
139 |
+
if ( ! isValidEmailAddressInput ) {
|
140 |
+
disableUpdateButton();
|
141 |
+
} else {
|
142 |
+
$modal.find( '.fs-new-email-address').text( emailAddress );
|
143 |
+
|
144 |
+
maybeEnableUpdateButton();
|
145 |
+
}
|
146 |
+
|
147 |
+
previousEmailAddress = emailAddress;
|
148 |
+
} );
|
149 |
+
|
150 |
+
$modal.on( 'blur', '.fs-new-email-address-input', function() {
|
151 |
+
var emailAddress = $( this ).val().trim(),
|
152 |
+
isValidEmailAddressInput = isValidEmailAddress( emailAddress );
|
153 |
+
|
154 |
+
toggleOptions( isValidEmailAddressInput );
|
155 |
+
|
156 |
+
if ( ! isValidEmailAddressInput ) {
|
157 |
+
disableUpdateButton();
|
158 |
+
}
|
159 |
+
} );
|
160 |
+
|
161 |
+
$modal.on( 'click', '.fs-close, .button-secondary', function () {
|
162 |
+
closeModal();
|
163 |
+
return false;
|
164 |
+
} );
|
165 |
+
|
166 |
+
$modal.on( 'click', '.fs-modal-footer .button-update', function ( evt ) {
|
167 |
+
if ( ! isValidEmailAddress( previousEmailAddress ) ) {
|
168 |
+
return;
|
169 |
+
}
|
170 |
+
|
171 |
+
if ( previousEmailAddress === '<?php echo $current_email_address ?>' ) {
|
172 |
+
closeModal();
|
173 |
+
return;
|
174 |
+
}
|
175 |
+
|
176 |
+
var transferType = 'transfer';
|
177 |
+
|
178 |
+
if ( 'current' === selectedEmailAddressesOwnershipOption ) {
|
179 |
+
transferType = 'transfer_to_client';
|
180 |
+
} else if (
|
181 |
+
'both' === selectedEmailAddressesOwnershipOption &&
|
182 |
+
'all' === selectedAssetsTransfershipOption
|
183 |
+
) {
|
184 |
+
transferType = 'merge';
|
185 |
+
}
|
186 |
+
|
187 |
+
$.ajax( {
|
188 |
+
url : ajaxurl,
|
189 |
+
method : 'POST',
|
190 |
+
data : {
|
191 |
+
action : '<?php echo $fs->get_ajax_action( 'update_email_address' ) ?>',
|
192 |
+
security : '<?php echo $fs->get_ajax_security( 'update_email_address' ) ?>',
|
193 |
+
module_id : '<?php echo $fs->get_id() ?>',
|
194 |
+
transfer_type: transferType,
|
195 |
+
email_address: previousEmailAddress
|
196 |
+
},
|
197 |
+
beforeSend: function () {
|
198 |
+
disableUpdateButton();
|
199 |
+
|
200 |
+
$updateButton.find( '.fs-modal-footer .button' ).prop( 'disabled', true );
|
201 |
+
$updateButton.text( 'Processing...' );
|
202 |
+
},
|
203 |
+
success : function( result ) {
|
204 |
+
if ( result.success ) {
|
205 |
+
// Redirect to the "Account" page.
|
206 |
+
window.location.reload();
|
207 |
+
} else {
|
208 |
+
if ('change_ownership' === result.error.code) {
|
209 |
+
window.location = result.error.url;
|
210 |
+
} else {
|
211 |
+
showError(result.error.message ? result.error.message : result.error);
|
212 |
+
resetUpdateButton();
|
213 |
+
}
|
214 |
+
}
|
215 |
+
},
|
216 |
+
error : function () {
|
217 |
+
showError( '<?php fs_esc_js_echo_inline( 'Unexpected error, try again in 5 minutes. If the error persists, please contact support.', 'unexpected-error', $slug ) ?>' );
|
218 |
+
|
219 |
+
resetUpdateButton();
|
220 |
+
}
|
221 |
+
} );
|
222 |
+
} );
|
223 |
+
|
224 |
+
$modal.on( 'click', 'input[type="radio"]', function () {
|
225 |
+
var $selectedOption = $( this ),
|
226 |
+
selectedOptionValue = $selectedOption.val();
|
227 |
+
|
228 |
+
// If the selection has not changed, do not proceed.
|
229 |
+
if (
|
230 |
+
selectedEmailAddressesOwnershipOption === selectedOptionValue ||
|
231 |
+
selectedAssetsTransfershipOption === selectedOptionValue
|
232 |
+
) {
|
233 |
+
return;
|
234 |
+
}
|
235 |
+
|
236 |
+
if ( 'assets-transfer-type' === $selectedOption.attr( 'name' ) ) {
|
237 |
+
selectedAssetsTransfershipOption = selectedOptionValue;
|
238 |
+
} else {
|
239 |
+
selectedEmailAddressesOwnershipOption = selectedOptionValue;
|
240 |
+
|
241 |
+
if ( 'both' !== selectedEmailAddressesOwnershipOption ) {
|
242 |
+
$modal.find( '.fs-assets-transfership-options' ).hide();
|
243 |
+
} else {
|
244 |
+
$modal.find( '.fs-assets-transfership-options' ).show();
|
245 |
+
$modal.find( '.fs-assets-transfership-options input[type="radio"]' ).prop('checked', false);
|
246 |
+
|
247 |
+
selectedAssetsTransfershipOption = null;
|
248 |
+
|
249 |
+
disableUpdateButton();
|
250 |
+
}
|
251 |
+
}
|
252 |
+
|
253 |
+
if ( isValidEmailAddress( $( '.fs-new-email-address-input' ).val().trim() ) ) {
|
254 |
+
maybeEnableUpdateButton();
|
255 |
+
}
|
256 |
+
});
|
257 |
+
}
|
258 |
+
|
259 |
+
function showModal() {
|
260 |
+
resetModal();
|
261 |
+
|
262 |
+
// Display the dialog box.
|
263 |
+
$modal.addClass( 'active' );
|
264 |
+
$modal.find( '.fs-new-email-address-input' ).focus();
|
265 |
+
|
266 |
+
$( 'body' ).addClass( 'has-fs-modal' );
|
267 |
+
}
|
268 |
+
|
269 |
+
function closeModal() {
|
270 |
+
selectedEmailAddressesOwnershipOption = null;
|
271 |
+
|
272 |
+
disableUpdateButton();
|
273 |
+
|
274 |
+
$modal.removeClass( 'active' );
|
275 |
+
|
276 |
+
$( 'body' ).removeClass( 'has-fs-modal' );
|
277 |
+
}
|
278 |
+
|
279 |
+
function resetModal() {
|
280 |
+
hideError();
|
281 |
+
|
282 |
+
// Deselect all radio buttons.
|
283 |
+
$modal.find( 'input[type="radio"]' ).prop( 'checked', false );
|
284 |
+
|
285 |
+
// Clear the value of the email address text field.
|
286 |
+
$modal.find( 'input[type="text"]' ).val( '' );
|
287 |
+
|
288 |
+
toggleOptions( false );
|
289 |
+
|
290 |
+
disableUpdateButton();
|
291 |
+
|
292 |
+
$updateButton.text( <?php echo json_encode( fs_text_inline( 'Update', 'update-email-address', $slug ) ) ?> );
|
293 |
+
}
|
294 |
+
|
295 |
+
function resetUpdateButton() {
|
296 |
+
maybeEnableUpdateButton();
|
297 |
+
|
298 |
+
$updateButton.text( <?php echo json_encode( fs_text_inline( 'Update', 'update-email-address', $slug ) ) ?> );
|
299 |
+
}
|
300 |
+
|
301 |
+
function maybeEnableUpdateButton() {
|
302 |
+
if ( null === selectedEmailAddressesOwnershipOption ) {
|
303 |
+
return;
|
304 |
+
}
|
305 |
+
|
306 |
+
if (
|
307 |
+
'both' === selectedEmailAddressesOwnershipOption &&
|
308 |
+
null === selectedAssetsTransfershipOption
|
309 |
+
) {
|
310 |
+
return;
|
311 |
+
}
|
312 |
+
|
313 |
+
$updateButton.prop( 'disabled', false );
|
314 |
+
}
|
315 |
+
|
316 |
+
function disableUpdateButton() {
|
317 |
+
$updateButton.prop( 'disabled', true );
|
318 |
+
}
|
319 |
+
|
320 |
+
function hideError() {
|
321 |
+
$updateResultMessage.hide();
|
322 |
+
}
|
323 |
+
|
324 |
+
function showError( msg ) {
|
325 |
+
$updateResultMessage.find( ' > p' ).html( msg );
|
326 |
+
$updateResultMessage.show();
|
327 |
+
}
|
328 |
+
|
329 |
+
function isValidEmailAddress( emailAddress ) {
|
330 |
+
if ( '' === emailAddress ) {
|
331 |
+
return false;
|
332 |
+
}
|
333 |
+
|
334 |
+
return /[0-9a-zA-Z][a-zA-Z\+0-9\.\_\-]*@[0-9a-zA-Z\-]+(\.[a-zA-Z]{2,24}){1,3}/.test( emailAddress );
|
335 |
+
}
|
336 |
+
|
337 |
+
function toggleOptions( show ) {
|
338 |
+
$modal.find( '.fs-email-addresses-ownership-options' ).toggle( show );
|
339 |
+
|
340 |
+
if ( ! show ) {
|
341 |
+
$modal.find( '.fs-assets-transfership-options' ).hide();
|
342 |
+
} else if ( 'both' === selectedEmailAddressesOwnershipOption ) {
|
343 |
+
$modal.find( '.fs-assets-transfership-options' ).show();
|
344 |
+
}
|
345 |
+
}
|
346 |
+
} )( jQuery );
|
347 |
+
</script>
|
freemius/templates/forms/license-activation.php
CHANGED
@@ -59,23 +59,51 @@
|
|
59 |
if ( $is_network_activation ) {
|
60 |
$all_sites = Freemius::get_sites();
|
61 |
|
|
|
|
|
|
|
62 |
foreach ( $all_sites as $site ) {
|
63 |
$site_details = $fs->get_site_info( $site );
|
64 |
|
|
|
|
|
|
|
|
|
65 |
$blog_id = Freemius::get_site_blog_id( $site );
|
66 |
$install = $fs->get_install_by_blog_id($blog_id);
|
67 |
|
68 |
-
if ( is_object( $install )
|
69 |
-
$
|
70 |
-
|
|
|
71 |
|
72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
}
|
74 |
|
75 |
if ( $is_network_activation ) {
|
76 |
$vars = array(
|
77 |
'id' => $fs->get_id(),
|
78 |
-
'sites' => $
|
79 |
'require_license_key' => true
|
80 |
);
|
81 |
|
59 |
if ( $is_network_activation ) {
|
60 |
$all_sites = Freemius::get_sites();
|
61 |
|
62 |
+
$subsite_data_by_install_id = array();
|
63 |
+
$install_url_by_install_id = array();
|
64 |
+
|
65 |
foreach ( $all_sites as $site ) {
|
66 |
$site_details = $fs->get_site_info( $site );
|
67 |
|
68 |
+
if ( FS_Clone_Manager::instance()->is_temporary_duplicate_by_blog_id( $site_details['blog_id'] ) ) {
|
69 |
+
continue;
|
70 |
+
}
|
71 |
+
|
72 |
$blog_id = Freemius::get_site_blog_id( $site );
|
73 |
$install = $fs->get_install_by_blog_id($blog_id);
|
74 |
|
75 |
+
if ( is_object( $install ) ) {
|
76 |
+
if ( isset( $subsite_data_by_install_id[ $install->id ] ) ) {
|
77 |
+
$clone_subsite_data = $subsite_data_by_install_id[ $install->id ];
|
78 |
+
$clone_install_url = $install_url_by_install_id[ $install->id ];
|
79 |
|
80 |
+
if (
|
81 |
+
/**
|
82 |
+
* If we already have an install with the same URL as the subsite it's stored in, skip the current subsite. Otherwise, replace the existing install's data with the current subsite's install's data if the URLs match.
|
83 |
+
*
|
84 |
+
* @author Leo Fajardo (@leorw)
|
85 |
+
* @since 2.5.0
|
86 |
+
*/
|
87 |
+
fs_strip_url_protocol( untrailingslashit( $clone_install_url ) ) === fs_strip_url_protocol( untrailingslashit( $clone_subsite_data['url'] ) ) ||
|
88 |
+
fs_strip_url_protocol( untrailingslashit( $install->url ) ) !== fs_strip_url_protocol( untrailingslashit( $site_details['url'] ) )
|
89 |
+
) {
|
90 |
+
continue;
|
91 |
+
}
|
92 |
+
}
|
93 |
+
|
94 |
+
if ( FS_Plugin_License::is_valid_id( $install->license_id ) ) {
|
95 |
+
$site_details['license_id'] = $install->license_id;
|
96 |
+
}
|
97 |
+
|
98 |
+
$subsite_data_by_install_id[ $install->id ] = $site_details;
|
99 |
+
$install_url_by_install_id[ $install->id ] = $install->url;
|
100 |
+
}
|
101 |
}
|
102 |
|
103 |
if ( $is_network_activation ) {
|
104 |
$vars = array(
|
105 |
'id' => $fs->get_id(),
|
106 |
+
'sites' => array_values( $subsite_data_by_install_id ),
|
107 |
'require_license_key' => true
|
108 |
);
|
109 |
|
freemius/templates/partials/network-activation.php
CHANGED
@@ -1,4 +1,9 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
2 |
/**
|
3 |
* @var array $VARS
|
4 |
* @var Freemius $fs
|
@@ -86,4 +91,4 @@
|
|
86 |
</tbody>
|
87 |
</table>
|
88 |
</div>
|
89 |
-
</div>
|
1 |
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
/**
|
8 |
* @var array $VARS
|
9 |
* @var Freemius $fs
|
91 |
</tbody>
|
92 |
</table>
|
93 |
</div>
|
94 |
+
</div>
|
freemius/templates/plugin-info/features.php
CHANGED
@@ -43,7 +43,7 @@
|
|
43 |
$support_feature->title = fs_text_inline( 'Support', $plugin->slug );
|
44 |
$features_plan_map[ $support_feature->id ] = array( 'feature' => $support_feature, 'plans' => array() );
|
45 |
} else {
|
46 |
-
|
47 |
}
|
48 |
|
49 |
$features_plan_map[ $support_feature->id ]['plans'][ $plan->id ] = $support_feature;
|
43 |
$support_feature->title = fs_text_inline( 'Support', $plugin->slug );
|
44 |
$features_plan_map[ $support_feature->id ] = array( 'feature' => $support_feature, 'plans' => array() );
|
45 |
} else {
|
46 |
+
$support_feature = $features_plan_map['support']['feature'];
|
47 |
}
|
48 |
|
49 |
$features_plan_map[ $support_feature->id ]['plans'][ $plan->id ] = $support_feature;
|
freemius/templates/powered-by.php
CHANGED
@@ -33,12 +33,12 @@
|
|
33 |
|
34 |
$fs = freemius( $VARS['module_id'] );
|
35 |
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
<div id="pframe"></div>
|
43 |
<script type="text/javascript">
|
44 |
(function ($) {
|
@@ -58,4 +58,4 @@
|
|
58 |
});
|
59 |
})(jQuery);
|
60 |
</script>
|
61 |
-
<?php
|
33 |
|
34 |
$fs = freemius( $VARS['module_id'] );
|
35 |
|
36 |
+
if ( ! $fs->is_whitelabeled() && ! $fs->apply_filters( 'hide_freemius_powered_by', false ) ) {
|
37 |
+
wp_enqueue_script( 'jquery' );
|
38 |
+
wp_enqueue_script( 'json2' );
|
39 |
+
fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
|
40 |
+
fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
|
41 |
+
?>
|
42 |
<div id="pframe"></div>
|
43 |
<script type="text/javascript">
|
44 |
(function ($) {
|
58 |
});
|
59 |
})(jQuery);
|
60 |
</script>
|
61 |
+
<?php } ?>
|
freemius/templates/pricing.php
CHANGED
@@ -122,21 +122,22 @@
|
|
122 |
<div id="fs_pricing_wrapper" data-public-url="<?php echo trailingslashit( dirname( $pricing_js_url ) ) ?>"></div>
|
123 |
<?php
|
124 |
$pricing_config = array_merge( array(
|
125 |
-
'contact_url'
|
126 |
-
'is_network_admin'
|
127 |
-
'is_production'
|
128 |
-
'menu_slug'
|
129 |
-
'mode'
|
130 |
-
'fs_wp_endpoint_url'
|
131 |
-
'request_handler_url'
|
132 |
'admin-ajax.php?' . http_build_query( array(
|
133 |
'module_id' => $fs->get_id(),
|
134 |
'action' => $fs->get_ajax_action( 'pricing_ajax_action' ),
|
135 |
'security' => $fs->get_ajax_security( 'pricing_ajax_action' )
|
136 |
) )
|
137 |
),
|
138 |
-
'selector'
|
139 |
-
'unique_affix'
|
|
|
140 |
), $query_params );
|
141 |
|
142 |
wp_add_inline_script( 'freemius-pricing', 'Freemius.pricing.new( ' . json_encode( $pricing_config ) . ' )' );
|
@@ -206,4 +207,4 @@
|
|
206 |
'module_slug' => $slug,
|
207 |
'module_version' => $fs->get_plugin_version(),
|
208 |
);
|
209 |
-
fs_require_template( 'powered-by.php', $params );
|
122 |
<div id="fs_pricing_wrapper" data-public-url="<?php echo trailingslashit( dirname( $pricing_js_url ) ) ?>"></div>
|
123 |
<?php
|
124 |
$pricing_config = array_merge( array(
|
125 |
+
'contact_url' => $fs->contact_url(),
|
126 |
+
'is_network_admin' => fs_is_network_admin(),
|
127 |
+
'is_production' => ( defined( 'WP_FS__IS_PRODUCTION_MODE' ) ? WP_FS__IS_PRODUCTION_MODE : null ),
|
128 |
+
'menu_slug' => $fs->get_menu_slug(),
|
129 |
+
'mode' => 'dashboard',
|
130 |
+
'fs_wp_endpoint_url' => WP_FS__ADDRESS,
|
131 |
+
'request_handler_url' => admin_url(
|
132 |
'admin-ajax.php?' . http_build_query( array(
|
133 |
'module_id' => $fs->get_id(),
|
134 |
'action' => $fs->get_ajax_action( 'pricing_ajax_action' ),
|
135 |
'security' => $fs->get_ajax_security( 'pricing_ajax_action' )
|
136 |
) )
|
137 |
),
|
138 |
+
'selector' => '#fs_pricing_wrapper',
|
139 |
+
'unique_affix' => $fs->get_unique_affix(),
|
140 |
+
'show_annual_in_monthly' => $fs->apply_filters( 'pricing/show_annual_in_monthly', true ),
|
141 |
), $query_params );
|
142 |
|
143 |
wp_add_inline_script( 'freemius-pricing', 'Freemius.pricing.new( ' . json_encode( $pricing_config ) . ' )' );
|
207 |
'module_slug' => $slug,
|
208 |
'module_version' => $fs->get_plugin_version(),
|
209 |
);
|
210 |
+
fs_require_template( 'powered-by.php', $params );
|
freemius/templates/sticky-admin-notice-js.php
CHANGED
@@ -23,7 +23,9 @@
|
|
23 |
|
24 |
notice.fadeOut( 'fast', function() {
|
25 |
var data = {
|
26 |
-
action
|
|
|
|
|
27 |
message_id: id
|
28 |
};
|
29 |
|
@@ -36,4 +38,4 @@
|
|
36 |
});
|
37 |
});
|
38 |
});
|
39 |
-
</script>
|
23 |
|
24 |
notice.fadeOut( 'fast', function() {
|
25 |
var data = {
|
26 |
+
action : 'fs_dismiss_notice_action_' + ajaxActionSuffix,
|
27 |
+
// As such we don't need to use `wp_json_encode` method but using it to follow wp.org guideline.
|
28 |
+
_wpnonce : <?php echo wp_json_encode( wp_create_nonce( 'fs_dismiss_notice_action' ) ); ?>,
|
29 |
message_id: id
|
30 |
};
|
31 |
|
38 |
});
|
39 |
});
|
40 |
});
|
41 |
+
</script>
|
includes/admin-feeds.php
CHANGED
@@ -20,7 +20,7 @@ class Prime_Slider_Admin_Feeds {
|
|
20 |
*/
|
21 |
|
22 |
public function bdthemes_prime_slider_register_rss_feeds() {
|
23 |
-
wp_add_dashboard_widget('bdt-ps-dashboard-overview', esc_html__('Prime Slider News & Updates', 'bdthemes-prime-slider'), [$this, 'bdthemes_prime_slider_rss_feeds_content_data']);
|
24 |
}
|
25 |
|
26 |
/**
|
20 |
*/
|
21 |
|
22 |
public function bdthemes_prime_slider_register_rss_feeds() {
|
23 |
+
wp_add_dashboard_widget('bdt-ps-dashboard-overview', esc_html__('Prime Slider News & Updates', 'bdthemes-prime-slider'), [$this, 'bdthemes_prime_slider_rss_feeds_content_data'], null, null, 'column4', 'core');
|
24 |
}
|
25 |
|
26 |
/**
|
includes/admin-settings.php
CHANGED
@@ -128,6 +128,18 @@ class PrimeSlider_Admin_Settings
|
|
128 |
'video_url' => 'https://youtu.be/Ayo1oEALF_8',
|
129 |
];
|
130 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
if ( ps_is_dragon_enabled() ) {
|
132 |
$settings_fields['prime_slider_active_modules'][] = [
|
133 |
'name' => 'dragon',
|
@@ -406,6 +418,18 @@ class PrimeSlider_Admin_Settings
|
|
406 |
'video_url' => 'https://youtu.be/6Wkk2EMN2ps',
|
407 |
];
|
408 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
409 |
if ( ps_is_wooexpand_enabled() ) {
|
410 |
$settings_fields['prime_slider_active_modules'][] = [
|
411 |
'name' => 'wooexpand',
|
128 |
'video_url' => 'https://youtu.be/Ayo1oEALF_8',
|
129 |
];
|
130 |
}
|
131 |
+
// if ( ps_is_diagonal_enabled() ) {
|
132 |
+
// $settings_fields['prime_slider_active_modules'][] = [
|
133 |
+
// 'name' => 'diagonal',
|
134 |
+
// 'label' => esc_html__( 'Diagonal', 'bdthemes-prime-slider' ),
|
135 |
+
// 'type' => 'checkbox',
|
136 |
+
// 'default' => "off",
|
137 |
+
// 'widget_type' => 'pro',
|
138 |
+
// 'content_type' => 'Custom carousel new',
|
139 |
+
// 'demo_url' => 'https://primeslider.pro/demo/diagonal/',
|
140 |
+
// 'video_url' => '',
|
141 |
+
// ];
|
142 |
+
// }
|
143 |
if ( ps_is_dragon_enabled() ) {
|
144 |
$settings_fields['prime_slider_active_modules'][] = [
|
145 |
'name' => 'dragon',
|
418 |
'video_url' => 'https://youtu.be/6Wkk2EMN2ps',
|
419 |
];
|
420 |
}
|
421 |
+
if ( ps_is_woocircle_enabled() ) {
|
422 |
+
$settings_fields['prime_slider_active_modules'][] = [
|
423 |
+
'name' => 'woocircle',
|
424 |
+
'label' => esc_html__( 'Woocircle', 'bdthemes-prime-slider' ),
|
425 |
+
'type' => 'checkbox',
|
426 |
+
'default' => "off",
|
427 |
+
'widget_type' => 'free',
|
428 |
+
'content_type' => 'ecommerce new',
|
429 |
+
'demo_url' => 'https://primeslider.pro/demo/woocircle/',
|
430 |
+
'video_url' => '',
|
431 |
+
];
|
432 |
+
}
|
433 |
if ( ps_is_wooexpand_enabled() ) {
|
434 |
$settings_fields['prime_slider_active_modules'][] = [
|
435 |
'name' => 'wooexpand',
|
includes/modules-manager.php
CHANGED
@@ -102,6 +102,9 @@ final class Manager
|
|
102 |
if ( ps_is_reveal_enabled() ) {
|
103 |
$modules[] = 'reveal';
|
104 |
}
|
|
|
|
|
|
|
105 |
if ( ps_is_rubix_enabled() ) {
|
106 |
$modules[] = 'rubix';
|
107 |
}
|
@@ -117,6 +120,9 @@ final class Manager
|
|
117 |
if ( is_plugin_active( 'woocommerce/woocommerce.php' ) and ps_is_woocommerce_enabled() ) {
|
118 |
$modules[] = 'woocommerce';
|
119 |
}
|
|
|
|
|
|
|
120 |
if ( is_plugin_active( 'woocommerce/woocommerce.php' ) and ps_is_woolamp_enabled() ) {
|
121 |
$modules[] = 'woolamp';
|
122 |
}
|
102 |
if ( ps_is_reveal_enabled() ) {
|
103 |
$modules[] = 'reveal';
|
104 |
}
|
105 |
+
// if ( ps_is_diagonal_enabled() ) {
|
106 |
+
// $modules[] = 'diagonal';
|
107 |
+
// }
|
108 |
if ( ps_is_rubix_enabled() ) {
|
109 |
$modules[] = 'rubix';
|
110 |
}
|
120 |
if ( is_plugin_active( 'woocommerce/woocommerce.php' ) and ps_is_woocommerce_enabled() ) {
|
121 |
$modules[] = 'woocommerce';
|
122 |
}
|
123 |
+
if ( is_plugin_active( 'woocommerce/woocommerce.php' ) and ps_is_woocircle_enabled() ) {
|
124 |
+
$modules[] = 'woocircle';
|
125 |
+
}
|
126 |
if ( is_plugin_active( 'woocommerce/woocommerce.php' ) and ps_is_woolamp_enabled() ) {
|
127 |
$modules[] = 'woolamp';
|
128 |
}
|
includes/prime-slider-filters.php
CHANGED
@@ -183,6 +183,12 @@
|
|
183 |
return apply_filters( 'primeslider/widgets/wooexpand', true );
|
184 |
}
|
185 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
|
187 |
if ( !function_exists( 'ps_is_storker_enabled' ) ) {
|
188 |
function ps_is_storker_enabled() {
|
@@ -249,3 +255,9 @@
|
|
249 |
return apply_filters( 'primeslider/widgets/reveal', true );
|
250 |
}
|
251 |
}
|
|
|
|
|
|
|
|
|
|
|
|
183 |
return apply_filters( 'primeslider/widgets/wooexpand', true );
|
184 |
}
|
185 |
}
|
186 |
+
|
187 |
+
if ( !function_exists( 'ps_is_woocircle_enabled' ) ) {
|
188 |
+
function ps_is_woocircle_enabled() {
|
189 |
+
return apply_filters( 'primeslider/widgets/woocircle', true );
|
190 |
+
}
|
191 |
+
}
|
192 |
|
193 |
if ( !function_exists( 'ps_is_storker_enabled' ) ) {
|
194 |
function ps_is_storker_enabled() {
|
255 |
return apply_filters( 'primeslider/widgets/reveal', true );
|
256 |
}
|
257 |
}
|
258 |
+
|
259 |
+
// if ( !function_exists( 'ps_is_diagonal_enabled' ) ) {
|
260 |
+
// function ps_is_diagonal_enabled() {
|
261 |
+
// return apply_filters( 'primeslider/widgets/diagonal', true );
|
262 |
+
// }
|
263 |
+
// }
|
loader.php
CHANGED
@@ -175,9 +175,17 @@ class Prime_Slider_Loader {
|
|
175 |
wp_register_script('easings', BDTPS_ASSETS_URL . 'vendor/js/jquery.easings' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
176 |
wp_register_script('mThumbnailScroller', BDTPS_ASSETS_URL . 'vendor/js/jquery.mThumbnailScroller' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
177 |
wp_register_script('goodshare', BDTPS_ASSETS_URL . 'vendor/js/goodshare' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
|
|
178 |
wp_register_script('anime', BDTPS_ASSETS_URL . 'vendor/js/anime' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
|
|
|
|
|
|
179 |
wp_register_script('charming', BDTPS_ASSETS_URL . 'vendor/js/charming' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
180 |
|
|
|
|
|
|
|
|
|
181 |
wp_register_script('gsap', BDTPS_ASSETS_URL . 'vendor/js/gsap' . $suffix . '.js', [], '3.3.0', true);
|
182 |
wp_register_script('split-text', BDTPS_ASSETS_URL . 'vendor/js/SplitText' . $suffix . '.js', ['gsap'], '3.3.0', true);
|
183 |
|
175 |
wp_register_script('easings', BDTPS_ASSETS_URL . 'vendor/js/jquery.easings' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
176 |
wp_register_script('mThumbnailScroller', BDTPS_ASSETS_URL . 'vendor/js/jquery.mThumbnailScroller' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
177 |
wp_register_script('goodshare', BDTPS_ASSETS_URL . 'vendor/js/goodshare' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
178 |
+
|
179 |
wp_register_script('anime', BDTPS_ASSETS_URL . 'vendor/js/anime' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
180 |
+
|
181 |
+
wp_register_script('tweenmax', BDTPS_ASSETS_URL . 'vendor/js/tweenmax' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
182 |
+
|
183 |
wp_register_script('charming', BDTPS_ASSETS_URL . 'vendor/js/charming' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true);
|
184 |
|
185 |
+
wp_register_script( 'classie', BDTPS_ASSETS_URL . 'vendor/js/classie' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true );
|
186 |
+
|
187 |
+
wp_register_script( 'dynamics', BDTPS_ASSETS_URL . 'vendor/js/dynamics' . $suffix . '.js', ['jquery', 'elementor-frontend'], BDTPS_VER, true );
|
188 |
+
|
189 |
wp_register_script('gsap', BDTPS_ASSETS_URL . 'vendor/js/gsap' . $suffix . '.js', [], '3.3.0', true);
|
190 |
wp_register_script('split-text', BDTPS_ASSETS_URL . 'vendor/js/SplitText' . $suffix . '.js', ['gsap'], '3.3.0', true);
|
191 |
|
modules/blog/widgets/blog.php
CHANGED
@@ -70,7 +70,7 @@ class Blog extends Widget_Base
|
|
70 |
return 'https://youtu.be/G32YlydUcHg';
|
71 |
}
|
72 |
|
73 |
-
public function
|
74 |
{
|
75 |
$this->add_skin( new Skins\Skin_Coral( $this ) );
|
76 |
$this->add_skin( new Skins\Skin_Zinest( $this ) );
|
70 |
return 'https://youtu.be/G32YlydUcHg';
|
71 |
}
|
72 |
|
73 |
+
public function register_skins()
|
74 |
{
|
75 |
$this->add_skin( new Skins\Skin_Coral( $this ) );
|
76 |
$this->add_skin( new Skins\Skin_Zinest( $this ) );
|
modules/general/widgets/general.php
CHANGED
@@ -71,7 +71,7 @@ class General extends Widget_Base
|
|
71 |
$this->register_query_section_controls();
|
72 |
}
|
73 |
|
74 |
-
public function
|
75 |
{
|
76 |
$this->add_skin( new Skins\Skin_Slide( $this ) );
|
77 |
$this->add_skin( new Skins\Skin_Crelly( $this ) );
|
71 |
$this->register_query_section_controls();
|
72 |
}
|
73 |
|
74 |
+
public function register_skins()
|
75 |
{
|
76 |
$this->add_skin( new Skins\Skin_Slide( $this ) );
|
77 |
$this->add_skin( new Skins\Skin_Crelly( $this ) );
|
modules/isolate/widgets/isolate.php
CHANGED
@@ -65,7 +65,7 @@ class Isolate extends Widget_Base
|
|
65 |
return 'https://youtu.be/8wlCWhSMQno';
|
66 |
}
|
67 |
|
68 |
-
public function
|
69 |
{
|
70 |
$this->add_skin( new Skins\Skin_Locate( $this ) );
|
71 |
$this->add_skin( new Skins\Skin_Slice( $this ) );
|
65 |
return 'https://youtu.be/8wlCWhSMQno';
|
66 |
}
|
67 |
|
68 |
+
public function register_skins()
|
69 |
{
|
70 |
$this->add_skin( new Skins\Skin_Locate( $this ) );
|
71 |
$this->add_skin( new Skins\Skin_Slice( $this ) );
|
modules/pagepiling/widgets/pagepiling.php
CHANGED
@@ -355,7 +355,7 @@ class Pagepiling extends Widget_Base {
|
|
355 |
$this->add_control(
|
356 |
'show_social_icon',
|
357 |
[
|
358 |
-
'label' => esc_html__('Show Social
|
359 |
'type' => Controls_Manager::SWITCHER,
|
360 |
'default' => 'yes',
|
361 |
]
|
@@ -455,7 +455,7 @@ class Pagepiling extends Widget_Base {
|
|
455 |
$this->start_controls_section(
|
456 |
'section_content_social_link',
|
457 |
[
|
458 |
-
'label' => __('Social
|
459 |
'condition' => [
|
460 |
'show_social_icon' => 'yes',
|
461 |
],
|
@@ -969,7 +969,7 @@ class Pagepiling extends Widget_Base {
|
|
969 |
$this->start_controls_section(
|
970 |
'section_style_social_icon',
|
971 |
[
|
972 |
-
'label' => esc_html__('Social
|
973 |
'tab' => Controls_Manager::TAB_STYLE,
|
974 |
'condition' => [
|
975 |
'show_social_icon' => 'yes',
|
355 |
$this->add_control(
|
356 |
'show_social_icon',
|
357 |
[
|
358 |
+
'label' => esc_html__('Show Social Icon', 'bdthemes-prime-slider'),
|
359 |
'type' => Controls_Manager::SWITCHER,
|
360 |
'default' => 'yes',
|
361 |
]
|
455 |
$this->start_controls_section(
|
456 |
'section_content_social_link',
|
457 |
[
|
458 |
+
'label' => __('Social Icon', 'bdthemes-prime-slider'),
|
459 |
'condition' => [
|
460 |
'show_social_icon' => 'yes',
|
461 |
],
|
969 |
$this->start_controls_section(
|
970 |
'section_style_social_icon',
|
971 |
[
|
972 |
+
'label' => esc_html__('Social Icon', 'bdthemes-prime-slider'),
|
973 |
'tab' => Controls_Manager::TAB_STYLE,
|
974 |
'condition' => [
|
975 |
'show_social_icon' => 'yes',
|
modules/reveal/widgets/reveal.php
CHANGED
@@ -1037,7 +1037,7 @@ class Reveal extends Widget_Base {
|
|
1037 |
'label' => esc_html__('Color', 'bdthemes-prime-slider'),
|
1038 |
'type' => Controls_Manager::COLOR,
|
1039 |
'selectors' => [
|
1040 |
-
'{{WRAPPER}} .bdt-reveal-slider .
|
1041 |
],
|
1042 |
]
|
1043 |
);
|
@@ -1049,7 +1049,7 @@ class Reveal extends Widget_Base {
|
|
1049 |
'type' => Controls_Manager::DIMENSIONS,
|
1050 |
'size_units' => ['px', 'em', '%'],
|
1051 |
'selectors' => [
|
1052 |
-
'{{WRAPPER}} .bdt-reveal-slider .
|
1053 |
],
|
1054 |
]
|
1055 |
);
|
@@ -1058,7 +1058,7 @@ class Reveal extends Widget_Base {
|
|
1058 |
Group_Control_Typography::get_type(),
|
1059 |
[
|
1060 |
'name' => 'head_content_title_typography',
|
1061 |
-
'selector' => '{{WRAPPER}} .bdt-reveal-slider .
|
1062 |
]
|
1063 |
);
|
1064 |
|
@@ -1067,7 +1067,7 @@ class Reveal extends Widget_Base {
|
|
1067 |
[
|
1068 |
'name' => 'head_content_title_text_shadow',
|
1069 |
'label' => __( 'Text Shadow', 'bdthemes-prime-slider'),
|
1070 |
-
'selector' => '{{WRAPPER}} .bdt-reveal-slider .
|
1071 |
]
|
1072 |
);
|
1073 |
|
@@ -1075,7 +1075,7 @@ class Reveal extends Widget_Base {
|
|
1075 |
Group_Control_Text_Stroke::get_type(),
|
1076 |
[
|
1077 |
'name' => 'head_content_title_text_stroke',
|
1078 |
-
'selector' => '{{WRAPPER}} .bdt-reveal-slider .
|
1079 |
]
|
1080 |
);
|
1081 |
|
@@ -1178,8 +1178,8 @@ class Reveal extends Widget_Base {
|
|
1178 |
<div <?php $this->print_render_attribute_string( 'ps-reveal' ); ?>>
|
1179 |
<?php if($settings['show_head_static_content']) : ?>
|
1180 |
<div class="content content--fixed">
|
1181 |
-
<header class="
|
1182 |
-
<h1 class="
|
1183 |
<?php echo esc_html($settings['head_static_content_title']); ?>
|
1184 |
</h1>
|
1185 |
<span class="info"><?php echo wp_kses_post($settings['head_static_content_text']); ?></span>
|
1037 |
'label' => esc_html__('Color', 'bdthemes-prime-slider'),
|
1038 |
'type' => Controls_Manager::COLOR,
|
1039 |
'selectors' => [
|
1040 |
+
'{{WRAPPER}} .bdt-reveal-slider .reveal-header__title' => 'color: {{VALUE}}',
|
1041 |
],
|
1042 |
]
|
1043 |
);
|
1049 |
'type' => Controls_Manager::DIMENSIONS,
|
1050 |
'size_units' => ['px', 'em', '%'],
|
1051 |
'selectors' => [
|
1052 |
+
'{{WRAPPER}} .bdt-reveal-slider .reveal-header__title' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
1053 |
],
|
1054 |
]
|
1055 |
);
|
1058 |
Group_Control_Typography::get_type(),
|
1059 |
[
|
1060 |
'name' => 'head_content_title_typography',
|
1061 |
+
'selector' => '{{WRAPPER}} .bdt-reveal-slider .reveal-header__title',
|
1062 |
]
|
1063 |
);
|
1064 |
|
1067 |
[
|
1068 |
'name' => 'head_content_title_text_shadow',
|
1069 |
'label' => __( 'Text Shadow', 'bdthemes-prime-slider'),
|
1070 |
+
'selector' => '{{WRAPPER}} .bdt-reveal-slider .reveal-header__title',
|
1071 |
]
|
1072 |
);
|
1073 |
|
1075 |
Group_Control_Text_Stroke::get_type(),
|
1076 |
[
|
1077 |
'name' => 'head_content_title_text_stroke',
|
1078 |
+
'selector' => '{{WRAPPER}} .bdt-reveal-slider .reveal-header__title',
|
1079 |
]
|
1080 |
);
|
1081 |
|
1178 |
<div <?php $this->print_render_attribute_string( 'ps-reveal' ); ?>>
|
1179 |
<?php if($settings['show_head_static_content']) : ?>
|
1180 |
<div class="content content--fixed">
|
1181 |
+
<header class="reveal-header">
|
1182 |
+
<h1 class="reveal-header__title">
|
1183 |
<?php echo esc_html($settings['head_static_content_title']); ?>
|
1184 |
</h1>
|
1185 |
<span class="info"><?php echo wp_kses_post($settings['head_static_content_text']); ?></span>
|
modules/woocircle/module.info.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
3 |
+
|
4 |
+
return [
|
5 |
+
'title' => esc_html__( 'Woocircle', 'bdthemes-prime-slider' ),
|
6 |
+
'required' => true,
|
7 |
+
'default_activation' => false,
|
8 |
+
'has_style' => true,
|
9 |
+
'has_script' => true,
|
10 |
+
];
|
modules/woocircle/module.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace PrimeSlider\Modules\Woocircle;
|
3 |
+
|
4 |
+
use PrimeSlider\Base\Prime_Slider_Module_Base;
|
5 |
+
|
6 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
7 |
+
|
8 |
+
class Module extends Prime_Slider_Module_Base {
|
9 |
+
|
10 |
+
public function get_name() {
|
11 |
+
return 'woocircle';
|
12 |
+
}
|
13 |
+
|
14 |
+
public function get_widgets() {
|
15 |
+
$widgets = [
|
16 |
+
'Woocircle',
|
17 |
+
];
|
18 |
+
|
19 |
+
return $widgets;
|
20 |
+
}
|
21 |
+
}
|
modules/woocircle/widgets/woocircle.php
ADDED
@@ -0,0 +1,1588 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace PrimeSlider\Modules\Woocircle\Widgets;
|
4 |
+
|
5 |
+
use Elementor\Widget_Base;
|
6 |
+
use Elementor\Controls_Manager;
|
7 |
+
use Elementor\Group_Control_Typography;
|
8 |
+
use Elementor\Group_Control_Text_Stroke;
|
9 |
+
use Elementor\Group_Control_Text_Shadow;
|
10 |
+
use Elementor\Group_Control_Border;
|
11 |
+
use Elementor\Group_Control_Background;
|
12 |
+
use Elementor\Group_Control_Box_Shadow;
|
13 |
+
use Elementor\Group_Control_Image_Size;
|
14 |
+
use PrimeSlider\Utils;
|
15 |
+
|
16 |
+
use PrimeSlider\Traits\Global_Widget_Controls;
|
17 |
+
use PrimeSlider\Traits\QueryControls\GroupQuery\Group_Control_Query;
|
18 |
+
use WP_Query;
|
19 |
+
|
20 |
+
if (!defined('ABSPATH')) exit; // Exit if accessed directly
|
21 |
+
|
22 |
+
class Woocircle extends Widget_Base
|
23 |
+
{
|
24 |
+
use Group_Control_Query;
|
25 |
+
use Global_Widget_Controls;
|
26 |
+
|
27 |
+
public function get_name()
|
28 |
+
{
|
29 |
+
return 'prime-slider-woocircle';
|
30 |
+
}
|
31 |
+
|
32 |
+
public function get_title()
|
33 |
+
{
|
34 |
+
return BDTPS . esc_html__('Woocircle', 'bdthemes-prime-slider');
|
35 |
+
}
|
36 |
+
|
37 |
+
public function get_icon()
|
38 |
+
{
|
39 |
+
return 'bdt-widget-icon ps-wi-woocircle bdt-new';
|
40 |
+
}
|
41 |
+
|
42 |
+
public function get_categories()
|
43 |
+
{
|
44 |
+
return ['prime-slider'];
|
45 |
+
}
|
46 |
+
|
47 |
+
public function get_keywords()
|
48 |
+
{
|
49 |
+
return ['prime slider', 'slider', 'woocircle', 'prime', 'wc slider', 'woocommerce'];
|
50 |
+
}
|
51 |
+
|
52 |
+
public function get_style_depends()
|
53 |
+
{
|
54 |
+
return ['ps-woocircle'];
|
55 |
+
}
|
56 |
+
|
57 |
+
public function get_script_depends()
|
58 |
+
{
|
59 |
+
return ['classie', 'dynamics', 'ps-woocircle'];
|
60 |
+
}
|
61 |
+
|
62 |
+
// public function get_custom_help_url() {
|
63 |
+
// return 'https://youtu.be/cBhYGPhiye4';
|
64 |
+
// }
|
65 |
+
|
66 |
+
protected function _register_controls()
|
67 |
+
{
|
68 |
+
|
69 |
+
$this->start_controls_section(
|
70 |
+
'section_content_layout',
|
71 |
+
[
|
72 |
+
'label' => esc_html__('Layout', 'bdthemes-prime-slider'),
|
73 |
+
]
|
74 |
+
);
|
75 |
+
|
76 |
+
$this->add_responsive_control(
|
77 |
+
'slider_item_height',
|
78 |
+
[
|
79 |
+
'label' => esc_html__('Height(vh)', 'bdthemes-prime-slider'),
|
80 |
+
'type' => Controls_Manager::SLIDER,
|
81 |
+
'selectors' => [
|
82 |
+
'{{WRAPPER}} .bdt-elastic-slider' => 'height: {{SIZE}}vh;',
|
83 |
+
],
|
84 |
+
]
|
85 |
+
);
|
86 |
+
|
87 |
+
$this->add_responsive_control(
|
88 |
+
'content_alignment',
|
89 |
+
[
|
90 |
+
'label' => esc_html__('Alignment', 'bdthemes-prime-slider'),
|
91 |
+
'type' => Controls_Manager::CHOOSE,
|
92 |
+
'options' => [
|
93 |
+
'left' => [
|
94 |
+
'title' => esc_html__('Left', 'bdthemes-prime-slider'),
|
95 |
+
'icon' => 'eicon-text-align-left',
|
96 |
+
],
|
97 |
+
'center' => [
|
98 |
+
'title' => esc_html__('Center', 'bdthemes-prime-slider'),
|
99 |
+
'icon' => 'eicon-text-align-center',
|
100 |
+
],
|
101 |
+
'right' => [
|
102 |
+
'title' => esc_html__('Right', 'bdthemes-prime-slider'),
|
103 |
+
'icon' => 'eicon-text-align-right',
|
104 |
+
],
|
105 |
+
],
|
106 |
+
'selectors' => [
|
107 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content' => 'text-align: {{VALUE}};',
|
108 |
+
]
|
109 |
+
]
|
110 |
+
);
|
111 |
+
|
112 |
+
$this->add_group_control(
|
113 |
+
Group_Control_Image_Size::get_type(),
|
114 |
+
[
|
115 |
+
'name' => 'thumbnail_size',
|
116 |
+
'label' => esc_html__('Image Size', 'bdthemes-prime-slider'),
|
117 |
+
'exclude' => ['custom'],
|
118 |
+
'default' => 'medium',
|
119 |
+
]
|
120 |
+
);
|
121 |
+
|
122 |
+
$this->add_control(
|
123 |
+
'show_title',
|
124 |
+
[
|
125 |
+
'label' => esc_html__('Show Title', 'bdthemes-prime-slider'),
|
126 |
+
'type' => Controls_Manager::SWITCHER,
|
127 |
+
'default' => 'yes',
|
128 |
+
'separator' => 'before',
|
129 |
+
]
|
130 |
+
);
|
131 |
+
|
132 |
+
$this->add_control(
|
133 |
+
'title_html_tag',
|
134 |
+
[
|
135 |
+
'label' => __('Title HTML Tag', 'bdthemes-prime-slider'),
|
136 |
+
'type' => Controls_Manager::SELECT,
|
137 |
+
'default' => 'h1',
|
138 |
+
'options' => prime_slider_title_tags(),
|
139 |
+
'condition' => [
|
140 |
+
'show_title' => 'yes'
|
141 |
+
]
|
142 |
+
]
|
143 |
+
);
|
144 |
+
|
145 |
+
$this->add_control(
|
146 |
+
'show_excerpt',
|
147 |
+
[
|
148 |
+
'label' => esc_html__('Show Excerpt', 'bdthemes-prime-slider'),
|
149 |
+
'type' => Controls_Manager::SWITCHER,
|
150 |
+
'default' => 'yes',
|
151 |
+
'separator' => 'before',
|
152 |
+
]
|
153 |
+
);
|
154 |
+
|
155 |
+
$this->add_control(
|
156 |
+
'show_price',
|
157 |
+
[
|
158 |
+
'label' => __('Price', 'bdthemes-prime-slider'),
|
159 |
+
'type' => Controls_Manager::SWITCHER,
|
160 |
+
'default' => 'yes',
|
161 |
+
]
|
162 |
+
);
|
163 |
+
|
164 |
+
$this->add_control(
|
165 |
+
'show_cart',
|
166 |
+
[
|
167 |
+
'label' => __('Add to Cart', 'bdthemes-prime-slider'),
|
168 |
+
'type' => Controls_Manager::SWITCHER,
|
169 |
+
'default' => 'yes',
|
170 |
+
]
|
171 |
+
);
|
172 |
+
|
173 |
+
$this->end_controls_section();
|
174 |
+
|
175 |
+
|
176 |
+
//New Query Builder Settings
|
177 |
+
$this->start_controls_section(
|
178 |
+
'section_post_query_builder',
|
179 |
+
[
|
180 |
+
'label' => esc_html__('Query', 'bdthemes-prime-slider') . BDTPS_NC,
|
181 |
+
'tab' => Controls_Manager::TAB_CONTENT,
|
182 |
+
]
|
183 |
+
);
|
184 |
+
|
185 |
+
$this->register_query_builder_controls();
|
186 |
+
|
187 |
+
$this->update_control(
|
188 |
+
'posts_source',
|
189 |
+
[
|
190 |
+
'type' => Controls_Manager::SELECT,
|
191 |
+
'default' => 'product',
|
192 |
+
'options' => [
|
193 |
+
'product' => esc_html__('Product', 'bdthemes-prime-slider'),
|
194 |
+
'manual_selection' => esc_html__('Manual Selection', 'bdthemes-prime-slider'),
|
195 |
+
'current_query' => esc_html__('Current Query', 'bdthemes-prime-slider'),
|
196 |
+
'_related_post_type' => esc_html__('Related', 'bdthemes-prime-slider'),
|
197 |
+
],
|
198 |
+
'condition' => [
|
199 |
+
'is_replaced_deprecated_query' => 'yes',
|
200 |
+
]
|
201 |
+
]
|
202 |
+
);
|
203 |
+
$this->update_control(
|
204 |
+
'posts_limit',
|
205 |
+
[
|
206 |
+
'label' => esc_html__('Limit', 'bdthemes-prime-slider'),
|
207 |
+
'type' => Controls_Manager::NUMBER,
|
208 |
+
'default' => 3,
|
209 |
+
'condition' => [
|
210 |
+
'is_replaced_deprecated_query' => 'yes',
|
211 |
+
]
|
212 |
+
]
|
213 |
+
);
|
214 |
+
$this->end_controls_section();
|
215 |
+
|
216 |
+
$this->start_controls_section(
|
217 |
+
'section_content_query',
|
218 |
+
[
|
219 |
+
'label' => __('Query (Deprecated)', 'bdthemes-prime-slider'),
|
220 |
+
'condition' => [
|
221 |
+
'is_replaced_deprecated_query!' => 'yes'
|
222 |
+
]
|
223 |
+
]
|
224 |
+
);
|
225 |
+
|
226 |
+
$this->add_control(
|
227 |
+
'source',
|
228 |
+
[
|
229 |
+
'label' => _x('Source', 'Posts Query Control', 'bdthemes-prime-slider'),
|
230 |
+
'type' => Controls_Manager::SELECT,
|
231 |
+
'options' => [
|
232 |
+
'' => __('Show All', 'bdthemes-prime-slider'),
|
233 |
+
'by_name' => __('Manual Selection', 'bdthemes-prime-slider'),
|
234 |
+
],
|
235 |
+
'label_block' => true,
|
236 |
+
]
|
237 |
+
);
|
238 |
+
|
239 |
+
|
240 |
+
$product_categories = get_terms('product_cat');
|
241 |
+
|
242 |
+
$options = [];
|
243 |
+
foreach ($product_categories as $category) {
|
244 |
+
$options[$category->slug] = $category->name;
|
245 |
+
}
|
246 |
+
|
247 |
+
$this->add_control(
|
248 |
+
'product_categories',
|
249 |
+
[
|
250 |
+
'label' => __('Categories', 'bdthemes-prime-slider'),
|
251 |
+
'type' => Controls_Manager::SELECT2,
|
252 |
+
'options' => $options,
|
253 |
+
'default' => [],
|
254 |
+
'label_block' => true,
|
255 |
+
'multiple' => true,
|
256 |
+
'condition' => [
|
257 |
+
'source' => 'by_name',
|
258 |
+
],
|
259 |
+
]
|
260 |
+
);
|
261 |
+
|
262 |
+
$this->add_control(
|
263 |
+
'exclude_products',
|
264 |
+
[
|
265 |
+
'label' => esc_html__('Exclude Product(s)', 'bdthemes-prime-slider'),
|
266 |
+
'type' => Controls_Manager::TEXT,
|
267 |
+
'placeholder' => 'product_id',
|
268 |
+
'label_block' => true,
|
269 |
+
'description' => __('Write product id here, if you want to exclude multiple products so use comma as separator. Such as 1 , 2', ''),
|
270 |
+
]
|
271 |
+
);
|
272 |
+
|
273 |
+
$this->add_control(
|
274 |
+
'posts',
|
275 |
+
[
|
276 |
+
'label' => __('Product Limit', 'bdthemes-prime-slider'),
|
277 |
+
'type' => Controls_Manager::NUMBER,
|
278 |
+
'default' => 3,
|
279 |
+
]
|
280 |
+
);
|
281 |
+
|
282 |
+
$this->add_control(
|
283 |
+
'show_product_type',
|
284 |
+
[
|
285 |
+
'label' => esc_html__('Show Product', 'bdthemes-prime-slider'),
|
286 |
+
'type' => Controls_Manager::SELECT,
|
287 |
+
'default' => 'all',
|
288 |
+
'options' => [
|
289 |
+
'all' => esc_html__('All Products', 'bdthemes-prime-slider'),
|
290 |
+
'onsale' => esc_html__('On Sale', 'bdthemes-prime-slider'),
|
291 |
+
'featured' => esc_html__('Featured', 'bdthemes-prime-slider'),
|
292 |
+
],
|
293 |
+
]
|
294 |
+
);
|
295 |
+
|
296 |
+
$this->add_control(
|
297 |
+
'hide_free',
|
298 |
+
[
|
299 |
+
'label' => esc_html__('Hide Free', 'bdthemes-prime-slider'),
|
300 |
+
'type' => Controls_Manager::SWITCHER,
|
301 |
+
]
|
302 |
+
);
|
303 |
+
|
304 |
+
$this->add_control(
|
305 |
+
'hide_out_stock',
|
306 |
+
[
|
307 |
+
'label' => esc_html__('Hide Out of Stock', 'bdthemes-prime-slider'),
|
308 |
+
'type' => Controls_Manager::SWITCHER,
|
309 |
+
]
|
310 |
+
);
|
311 |
+
|
312 |
+
$this->add_control(
|
313 |
+
'orderby',
|
314 |
+
[
|
315 |
+
'label' => esc_html__('Order by', 'bdthemes-prime-slider'),
|
316 |
+
'type' => Controls_Manager::SELECT,
|
317 |
+
'default' => 'date',
|
318 |
+
'options' => [
|
319 |
+
'date' => esc_html__('Date', 'bdthemes-prime-slider'),
|
320 |
+
'price' => esc_html__('Price', 'bdthemes-prime-slider'),
|
321 |
+
'sales' => esc_html__('Sales', 'bdthemes-prime-slider'),
|
322 |
+
'rand' => esc_html__('Random', 'bdthemes-prime-slider'),
|
323 |
+
],
|
324 |
+
]
|
325 |
+
);
|
326 |
+
|
327 |
+
$this->add_control(
|
328 |
+
'order',
|
329 |
+
[
|
330 |
+
'label' => esc_html__('Order', 'bdthemes-prime-slider'),
|
331 |
+
'type' => Controls_Manager::SELECT,
|
332 |
+
'default' => 'DESC',
|
333 |
+
'options' => [
|
334 |
+
'DESC' => esc_html__('Descending', 'bdthemes-prime-slider'),
|
335 |
+
'ASC' => esc_html__('Ascending', 'bdthemes-prime-slider'),
|
336 |
+
],
|
337 |
+
]
|
338 |
+
);
|
339 |
+
|
340 |
+
$this->end_controls_section();
|
341 |
+
|
342 |
+
//Style Start
|
343 |
+
$this->start_controls_section(
|
344 |
+
'section_style_slider_items',
|
345 |
+
[
|
346 |
+
'label' => esc_html__('Slider', 'bdthemes-prime-slider'),
|
347 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
348 |
+
]
|
349 |
+
);
|
350 |
+
|
351 |
+
$this->start_controls_tabs(
|
352 |
+
'slider_style_tabs'
|
353 |
+
);
|
354 |
+
|
355 |
+
// slider item
|
356 |
+
$this->start_controls_tab(
|
357 |
+
'style_slider_item_tab',
|
358 |
+
[
|
359 |
+
'label' => esc_html__('Item', 'bdthemes-prime-slider'),
|
360 |
+
]
|
361 |
+
);
|
362 |
+
|
363 |
+
$this->add_control(
|
364 |
+
'active_circle_color',
|
365 |
+
[
|
366 |
+
'label' => esc_html__('Circle Color', 'bdthemes-prime-slider'),
|
367 |
+
'type' => Controls_Manager::COLOR,
|
368 |
+
'selectors' => [
|
369 |
+
'{{WRAPPER}} .bdt-elastic-slider .deco--circle, {{WRAPPER}} .bdt-elastic-slider .scrollable' => 'background: {{VALUE}};',
|
370 |
+
]
|
371 |
+
]
|
372 |
+
);
|
373 |
+
|
374 |
+
$this->end_controls_tab();
|
375 |
+
|
376 |
+
// slider priview title
|
377 |
+
$this->start_controls_tab(
|
378 |
+
'style_slider_title_tab',
|
379 |
+
[
|
380 |
+
'label' => esc_html__('Title', 'bdthemes-prime-slider'),
|
381 |
+
]
|
382 |
+
);
|
383 |
+
|
384 |
+
$this->add_control(
|
385 |
+
'title_color',
|
386 |
+
[
|
387 |
+
'label' => esc_html__('Color', 'bdthemes-prime-slider'),
|
388 |
+
'type' => Controls_Manager::COLOR,
|
389 |
+
'selectors' => [
|
390 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title-preview' => 'color: {{VALUE}};',
|
391 |
+
]
|
392 |
+
]
|
393 |
+
);
|
394 |
+
|
395 |
+
$this->add_group_control(
|
396 |
+
Group_Control_Text_Stroke::get_type(),
|
397 |
+
[
|
398 |
+
'name' => 'title_stroke',
|
399 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title-preview',
|
400 |
+
]
|
401 |
+
);
|
402 |
+
|
403 |
+
$this->add_group_control(
|
404 |
+
Group_Control_Text_Shadow::get_type(),
|
405 |
+
[
|
406 |
+
'name' => 'title_shadow',
|
407 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title-preview',
|
408 |
+
]
|
409 |
+
);
|
410 |
+
|
411 |
+
$this->add_group_control(
|
412 |
+
Group_Control_Typography::get_type(),
|
413 |
+
[
|
414 |
+
'name' => 'title_typography',
|
415 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title-preview',
|
416 |
+
]
|
417 |
+
);
|
418 |
+
|
419 |
+
$this->add_responsive_control(
|
420 |
+
'title_margin',
|
421 |
+
[
|
422 |
+
'label' => esc_html__('Margin', 'bdthemes-prime-slider'),
|
423 |
+
'type' => Controls_Manager::DIMENSIONS,
|
424 |
+
'size_units' => ['px', 'em', '%'],
|
425 |
+
'selectors' => [
|
426 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title-preview' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
427 |
+
],
|
428 |
+
]
|
429 |
+
);
|
430 |
+
|
431 |
+
$this->end_controls_tab();
|
432 |
+
|
433 |
+
// slider price priview
|
434 |
+
|
435 |
+
$this->start_controls_tab(
|
436 |
+
'style_slider_price_tab',
|
437 |
+
[
|
438 |
+
'label' => esc_html__('Price', 'bdthemes-prime-slider'),
|
439 |
+
]
|
440 |
+
);
|
441 |
+
|
442 |
+
$this->add_control(
|
443 |
+
'old_price_heading',
|
444 |
+
[
|
445 |
+
'label' => __('Old Price', 'bdthemes-prime-slider'),
|
446 |
+
'type' => Controls_Manager::HEADING,
|
447 |
+
]
|
448 |
+
);
|
449 |
+
|
450 |
+
$this->add_control(
|
451 |
+
'old_price_color',
|
452 |
+
[
|
453 |
+
'label' => __('Color', 'bdthemes-prime-slider'),
|
454 |
+
'type' => Controls_Manager::COLOR,
|
455 |
+
'selectors' => [
|
456 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price del span' => 'color: {{VALUE}};',
|
457 |
+
],
|
458 |
+
]
|
459 |
+
);
|
460 |
+
|
461 |
+
$this->add_responsive_control(
|
462 |
+
'old_price_margin',
|
463 |
+
[
|
464 |
+
'label' => __('Margin', 'bdthemes-prime-slider'),
|
465 |
+
'type' => Controls_Manager::DIMENSIONS,
|
466 |
+
'size_units' => ['px', '%'],
|
467 |
+
'selectors' => [
|
468 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price del > span' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
469 |
+
],
|
470 |
+
]
|
471 |
+
);
|
472 |
+
|
473 |
+
$this->add_group_control(
|
474 |
+
Group_Control_Typography::get_type(),
|
475 |
+
[
|
476 |
+
'name' => 'old_price_typography',
|
477 |
+
'label' => __('Typography', 'bdthemes-prime-slider'),
|
478 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price del span',
|
479 |
+
]
|
480 |
+
);
|
481 |
+
|
482 |
+
$this->add_control(
|
483 |
+
'sale_price_heading',
|
484 |
+
[
|
485 |
+
'label' => __('Sale Price', 'bdthemes-prime-slider'),
|
486 |
+
'type' => Controls_Manager::HEADING,
|
487 |
+
'separator' => 'before',
|
488 |
+
]
|
489 |
+
);
|
490 |
+
|
491 |
+
$this->add_control(
|
492 |
+
'sale_price_color',
|
493 |
+
[
|
494 |
+
'label' => __('Color', 'bdthemes-prime-slider'),
|
495 |
+
'type' => Controls_Manager::COLOR,
|
496 |
+
'selectors' => [
|
497 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price ins, {{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price > span' => 'color: {{VALUE}};',
|
498 |
+
],
|
499 |
+
]
|
500 |
+
);
|
501 |
+
|
502 |
+
$this->add_control(
|
503 |
+
'sale_price_background',
|
504 |
+
[
|
505 |
+
'label' => __('Background', 'bdthemes-prime-slider'),
|
506 |
+
'type' => Controls_Manager::COLOR,
|
507 |
+
'selectors' => [
|
508 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price ins' => 'background: {{VALUE}};',
|
509 |
+
],
|
510 |
+
]
|
511 |
+
);
|
512 |
+
|
513 |
+
$this->add_responsive_control(
|
514 |
+
'sale_price_margin',
|
515 |
+
[
|
516 |
+
'label' => __('Margin', 'bdthemes-prime-slider'),
|
517 |
+
'type' => Controls_Manager::DIMENSIONS,
|
518 |
+
'size_units' => ['px', '%'],
|
519 |
+
'selectors' => [
|
520 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price ins, {{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price > span' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
521 |
+
],
|
522 |
+
]
|
523 |
+
);
|
524 |
+
|
525 |
+
$this->add_group_control(
|
526 |
+
Group_Control_Typography::get_type(),
|
527 |
+
[
|
528 |
+
'name' => 'sale_price_typography',
|
529 |
+
'label' => __('Typography', 'bdthemes-prime-slider'),
|
530 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price ins, {{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price > span',
|
531 |
+
]
|
532 |
+
);
|
533 |
+
|
534 |
+
$this->add_responsive_control(
|
535 |
+
'sale_price_spacing',
|
536 |
+
[
|
537 |
+
'label' => __('Spacing', 'bdthemes-prime-slider'),
|
538 |
+
'type' => Controls_Manager::SLIDER,
|
539 |
+
'size_units' => ['px', '%'],
|
540 |
+
'selectors' => [
|
541 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-slide-content .bdt-elastic-price .price' => 'grid-column-gap: {{SIZE}}{{UNIT}};',
|
542 |
+
],
|
543 |
+
]
|
544 |
+
);
|
545 |
+
|
546 |
+
$this->end_controls_tab();
|
547 |
+
|
548 |
+
// open/close button
|
549 |
+
|
550 |
+
$this->start_controls_tab(
|
551 |
+
'style_slider_modal_open_button_tab',
|
552 |
+
[
|
553 |
+
'label' => esc_html__('Open', 'bdthemes-prime-slider'),
|
554 |
+
]
|
555 |
+
);
|
556 |
+
|
557 |
+
$this->add_control(
|
558 |
+
'open_button_color',
|
559 |
+
[
|
560 |
+
'label' => esc_html__('Color', 'bdthemes-element-pack'),
|
561 |
+
'type' => Controls_Manager::COLOR,
|
562 |
+
'selectors' => [
|
563 |
+
'{{WRAPPER}} .bdt-elastic-action--open' => 'color: {{VALUE}};',
|
564 |
+
],
|
565 |
+
]
|
566 |
+
);
|
567 |
+
|
568 |
+
$this->add_group_control(
|
569 |
+
Group_Control_Background::get_type(),
|
570 |
+
[
|
571 |
+
'name' => 'open_button_background',
|
572 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--open',
|
573 |
+
]
|
574 |
+
);
|
575 |
+
|
576 |
+
$this->add_group_control(
|
577 |
+
Group_Control_Border::get_type(),
|
578 |
+
[
|
579 |
+
'name' => 'open_button_border',
|
580 |
+
'label' => esc_html__('Border', 'bdthemes-element-pack'),
|
581 |
+
'placeholder' => '1px',
|
582 |
+
'default' => '1px',
|
583 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--open',
|
584 |
+
'separator' => 'before',
|
585 |
+
]
|
586 |
+
);
|
587 |
+
|
588 |
+
$this->add_responsive_control(
|
589 |
+
'open_button_radius',
|
590 |
+
[
|
591 |
+
'label' => esc_html__('Border Radius', 'bdthemes-element-pack'),
|
592 |
+
'type' => Controls_Manager::DIMENSIONS,
|
593 |
+
'size_units' => ['px', '%'],
|
594 |
+
'selectors' => [
|
595 |
+
'{{WRAPPER}} .bdt-elastic-action--open' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
596 |
+
],
|
597 |
+
]
|
598 |
+
);
|
599 |
+
|
600 |
+
$this->add_responsive_control(
|
601 |
+
'open_button_padding',
|
602 |
+
[
|
603 |
+
'label' => esc_html__('Padding', 'bdthemes-element-pack'),
|
604 |
+
'type' => Controls_Manager::DIMENSIONS,
|
605 |
+
'size_units' => ['px', 'em', '%'],
|
606 |
+
'selectors' => [
|
607 |
+
'{{WRAPPER}} .bdt-elastic-action--open' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
608 |
+
],
|
609 |
+
]
|
610 |
+
);
|
611 |
+
|
612 |
+
$this->add_responsive_control(
|
613 |
+
'open_button_margin',
|
614 |
+
[
|
615 |
+
'label' => esc_html__('Margin', 'bdthemes-element-pack'),
|
616 |
+
'type' => Controls_Manager::DIMENSIONS,
|
617 |
+
'size_units' => ['px', 'em', '%'],
|
618 |
+
'selectors' => [
|
619 |
+
'{{WRAPPER}} .bdt-elastic-action--open' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
620 |
+
],
|
621 |
+
]
|
622 |
+
);
|
623 |
+
|
624 |
+
$this->add_group_control(
|
625 |
+
Group_Control_Box_Shadow::get_type(),
|
626 |
+
[
|
627 |
+
'name' => 'open_button_box_shadow',
|
628 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--open',
|
629 |
+
]
|
630 |
+
);
|
631 |
+
|
632 |
+
$this->add_group_control(
|
633 |
+
Group_Control_Typography::get_type(),
|
634 |
+
[
|
635 |
+
'name' => 'open_button_typography',
|
636 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--open',
|
637 |
+
]
|
638 |
+
);
|
639 |
+
|
640 |
+
// hover
|
641 |
+
|
642 |
+
$this->add_control(
|
643 |
+
'slider_modal_open_button_heading',
|
644 |
+
[
|
645 |
+
'label' => __('Hover', 'bdthemes-prime-slider'),
|
646 |
+
'type' => Controls_Manager::HEADING,
|
647 |
+
]
|
648 |
+
);
|
649 |
+
|
650 |
+
$this->add_control(
|
651 |
+
'open_button_hover_color',
|
652 |
+
[
|
653 |
+
'label' => esc_html__('Color', 'bdthemes-element-pack'),
|
654 |
+
'type' => Controls_Manager::COLOR,
|
655 |
+
'selectors' => [
|
656 |
+
'{{WRAPPER}} .bdt-elastic-action--open:focus,
|
657 |
+
{{WRAPPER}} .bdt-elastic-action--open:hover' => 'color: {{VALUE}};',
|
658 |
+
],
|
659 |
+
]
|
660 |
+
);
|
661 |
+
|
662 |
+
$this->add_group_control(
|
663 |
+
Group_Control_Background::get_type(),
|
664 |
+
[
|
665 |
+
'name' => 'open_button_hover_background',
|
666 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--open:focus, {{WRAPPER}} .bdt-elastic-action--open:hover',
|
667 |
+
]
|
668 |
+
);
|
669 |
+
|
670 |
+
$this->add_control(
|
671 |
+
'open_button_hover_border_color',
|
672 |
+
[
|
673 |
+
'label' => esc_html__('Border Color', 'bdthemes-element-pack'),
|
674 |
+
'type' => Controls_Manager::COLOR,
|
675 |
+
'condition' => [
|
676 |
+
'close_button_border_border!' => '',
|
677 |
+
],
|
678 |
+
'selectors' => [
|
679 |
+
'{{WRAPPER}} .bdt-elastic-action--open:focus, {{WRAPPER}} .bdt-elastic-action--open:hover' => 'border-color: {{VALUE}};',
|
680 |
+
],
|
681 |
+
]
|
682 |
+
);
|
683 |
+
|
684 |
+
$this->end_controls_tab();
|
685 |
+
|
686 |
+
$this->end_controls_tabs();
|
687 |
+
|
688 |
+
$this->end_controls_section();
|
689 |
+
|
690 |
+
// slider modal start
|
691 |
+
$this->start_controls_section(
|
692 |
+
'section_style_slider_modal',
|
693 |
+
[
|
694 |
+
'label' => esc_html__('Modal', 'bdthemes-prime-slider'),
|
695 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
696 |
+
]
|
697 |
+
);
|
698 |
+
|
699 |
+
$this->add_control(
|
700 |
+
'modal_contnet_max_width',
|
701 |
+
[
|
702 |
+
'label' => __('Content Max Width', 'bdthemes-prime-slider'),
|
703 |
+
'type' => Controls_Manager::HEADING,
|
704 |
+
]
|
705 |
+
);
|
706 |
+
|
707 |
+
$this->add_responsive_control(
|
708 |
+
'modal_text__max_width',
|
709 |
+
[
|
710 |
+
'label' => esc_html__('Max Width', 'bdthemes-prime-slider'),
|
711 |
+
'type' => Controls_Manager::SLIDER,
|
712 |
+
'size_units' => [ 'px', '%' ],
|
713 |
+
'default' => [
|
714 |
+
'unit' => '%',
|
715 |
+
],
|
716 |
+
'range' => [
|
717 |
+
'px' => [
|
718 |
+
'min' => 200,
|
719 |
+
'max' => 1200,
|
720 |
+
],
|
721 |
+
'%' => [
|
722 |
+
'min' => 10,
|
723 |
+
'max' => 100,
|
724 |
+
],
|
725 |
+
],
|
726 |
+
'selectors' => [
|
727 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-modal-details' => 'max-width: {{SIZE}}{{UNIT}};',
|
728 |
+
],
|
729 |
+
'render_type' => 'template'
|
730 |
+
]
|
731 |
+
);
|
732 |
+
|
733 |
+
$this->start_controls_tabs(
|
734 |
+
'slider_modal_style_tabs'
|
735 |
+
);
|
736 |
+
|
737 |
+
// slider Modal title
|
738 |
+
$this->start_controls_tab(
|
739 |
+
'style_slider_modal_title_tab',
|
740 |
+
[
|
741 |
+
'label' => esc_html__('Title', 'bdthemes-prime-slider'),
|
742 |
+
]
|
743 |
+
);
|
744 |
+
|
745 |
+
$this->add_control(
|
746 |
+
'modal_title_color',
|
747 |
+
[
|
748 |
+
'label' => esc_html__('Color', 'bdthemes-prime-slider'),
|
749 |
+
'type' => Controls_Manager::COLOR,
|
750 |
+
'selectors' => [
|
751 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title--main' => 'color: {{VALUE}};',
|
752 |
+
]
|
753 |
+
]
|
754 |
+
);
|
755 |
+
|
756 |
+
$this->add_group_control(
|
757 |
+
Group_Control_Text_Stroke::get_type(),
|
758 |
+
[
|
759 |
+
'name' => 'modal_title_stroke',
|
760 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title--main',
|
761 |
+
]
|
762 |
+
);
|
763 |
+
|
764 |
+
$this->add_group_control(
|
765 |
+
Group_Control_Text_Shadow::get_type(),
|
766 |
+
[
|
767 |
+
'name' => 'modal_title_shadow',
|
768 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title--main',
|
769 |
+
]
|
770 |
+
);
|
771 |
+
|
772 |
+
$this->add_group_control(
|
773 |
+
Group_Control_Typography::get_type(),
|
774 |
+
[
|
775 |
+
'name' => 'modal_title_typography',
|
776 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title--main',
|
777 |
+
]
|
778 |
+
);
|
779 |
+
|
780 |
+
$this->add_responsive_control(
|
781 |
+
'modal_title_margin',
|
782 |
+
[
|
783 |
+
'label' => esc_html__('Margin', 'bdthemes-prime-slider'),
|
784 |
+
'type' => Controls_Manager::DIMENSIONS,
|
785 |
+
'size_units' => ['px', 'em', '%'],
|
786 |
+
'selectors' => [
|
787 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-title--main' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
788 |
+
],
|
789 |
+
]
|
790 |
+
);
|
791 |
+
|
792 |
+
$this->end_controls_tab();
|
793 |
+
|
794 |
+
// slider price modal
|
795 |
+
|
796 |
+
$this->start_controls_tab(
|
797 |
+
'style_slider_modal_price_tab',
|
798 |
+
[
|
799 |
+
'label' => esc_html__('Price', 'bdthemes-prime-slider'),
|
800 |
+
]
|
801 |
+
);
|
802 |
+
|
803 |
+
$this->add_control(
|
804 |
+
'modal_old_price_heading',
|
805 |
+
[
|
806 |
+
'label' => __('Old Price', 'bdthemes-prime-slider'),
|
807 |
+
'type' => Controls_Manager::HEADING,
|
808 |
+
]
|
809 |
+
);
|
810 |
+
|
811 |
+
$this->add_control(
|
812 |
+
'modal_old_price_color',
|
813 |
+
[
|
814 |
+
'label' => __('Color', 'bdthemes-prime-slider'),
|
815 |
+
'type' => Controls_Manager::COLOR,
|
816 |
+
'selectors' => [
|
817 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price del span' => 'color: {{VALUE}};',
|
818 |
+
],
|
819 |
+
]
|
820 |
+
);
|
821 |
+
|
822 |
+
$this->add_responsive_control(
|
823 |
+
'modal_old_price_margin',
|
824 |
+
[
|
825 |
+
'label' => __('Margin', 'bdthemes-prime-slider'),
|
826 |
+
'type' => Controls_Manager::DIMENSIONS,
|
827 |
+
'size_units' => ['px', '%'],
|
828 |
+
'selectors' => [
|
829 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price del > span' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
830 |
+
],
|
831 |
+
]
|
832 |
+
);
|
833 |
+
|
834 |
+
$this->add_group_control(
|
835 |
+
Group_Control_Typography::get_type(),
|
836 |
+
[
|
837 |
+
'name' => 'modal_old_price_typography',
|
838 |
+
'label' => __('Typography', 'bdthemes-prime-slider'),
|
839 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price del span',
|
840 |
+
]
|
841 |
+
);
|
842 |
+
|
843 |
+
$this->add_control(
|
844 |
+
'modal_sale_price_heading',
|
845 |
+
[
|
846 |
+
'label' => __('Sale Price', 'bdthemes-prime-slider'),
|
847 |
+
'type' => Controls_Manager::HEADING,
|
848 |
+
'separator' => 'before',
|
849 |
+
]
|
850 |
+
);
|
851 |
+
|
852 |
+
$this->add_control(
|
853 |
+
'modal_sale_price_color',
|
854 |
+
[
|
855 |
+
'label' => __('Color', 'bdthemes-prime-slider'),
|
856 |
+
'type' => Controls_Manager::COLOR,
|
857 |
+
'selectors' => [
|
858 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price ins, {{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price > span' => 'color: {{VALUE}};',
|
859 |
+
],
|
860 |
+
]
|
861 |
+
);
|
862 |
+
|
863 |
+
$this->add_control(
|
864 |
+
'modal_sale_price_background',
|
865 |
+
[
|
866 |
+
'label' => __('Background', 'bdthemes-prime-slider'),
|
867 |
+
'type' => Controls_Manager::COLOR,
|
868 |
+
'selectors' => [
|
869 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price ins' => 'background: {{VALUE}};',
|
870 |
+
],
|
871 |
+
]
|
872 |
+
);
|
873 |
+
|
874 |
+
$this->add_responsive_control(
|
875 |
+
'modal_sale_price_margin',
|
876 |
+
[
|
877 |
+
'label' => __('Margin', 'bdthemes-prime-slider'),
|
878 |
+
'type' => Controls_Manager::DIMENSIONS,
|
879 |
+
'size_units' => ['px', '%'],
|
880 |
+
'selectors' => [
|
881 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price ins, {{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price > span' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
882 |
+
],
|
883 |
+
]
|
884 |
+
);
|
885 |
+
|
886 |
+
$this->add_group_control(
|
887 |
+
Group_Control_Typography::get_type(),
|
888 |
+
[
|
889 |
+
'name' => 'modal_sale_price_typography',
|
890 |
+
'label' => __('Typography', 'bdthemes-prime-slider'),
|
891 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price ins, {{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price > span',
|
892 |
+
]
|
893 |
+
);
|
894 |
+
|
895 |
+
$this->add_responsive_control(
|
896 |
+
'modal_sale_price_spacing',
|
897 |
+
[
|
898 |
+
'label' => __('Spacing', 'bdthemes-prime-slider'),
|
899 |
+
'type' => Controls_Manager::SLIDER,
|
900 |
+
'size_units' => ['px', '%'],
|
901 |
+
'selectors' => [
|
902 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-price.bdt-elastic-price--large .price' => 'grid-column-gap: {{SIZE}}{{UNIT}};',
|
903 |
+
],
|
904 |
+
]
|
905 |
+
);
|
906 |
+
|
907 |
+
$this->end_controls_tab();
|
908 |
+
|
909 |
+
// modal text
|
910 |
+
|
911 |
+
$this->start_controls_tab(
|
912 |
+
'style_slider_modal_text_tab',
|
913 |
+
[
|
914 |
+
'label' => esc_html__('Text', 'bdthemes-prime-slider'),
|
915 |
+
]
|
916 |
+
);
|
917 |
+
|
918 |
+
$this->add_control(
|
919 |
+
'excerpt_color',
|
920 |
+
[
|
921 |
+
'label' => esc_html__('Color', 'bdthemes-prime-slider'),
|
922 |
+
'type' => Controls_Manager::COLOR,
|
923 |
+
'selectors' => [
|
924 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-description' => 'color: {{VALUE}};',
|
925 |
+
],
|
926 |
+
]
|
927 |
+
);
|
928 |
+
|
929 |
+
$this->add_group_control(
|
930 |
+
Group_Control_Typography::get_type(),
|
931 |
+
[
|
932 |
+
'name' => 'excerpt_typography',
|
933 |
+
'label' => esc_html__('Typography', 'bdthemes-prime-slider'),
|
934 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-description',
|
935 |
+
]
|
936 |
+
);
|
937 |
+
|
938 |
+
$this->add_responsive_control(
|
939 |
+
'text_margin',
|
940 |
+
[
|
941 |
+
'label' => esc_html__('Margin', 'bdthemes-prime-slider'),
|
942 |
+
'type' => Controls_Manager::DIMENSIONS,
|
943 |
+
'size_units' => ['px', 'em', '%'],
|
944 |
+
'selectors' => [
|
945 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-description' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
946 |
+
],
|
947 |
+
]
|
948 |
+
);
|
949 |
+
|
950 |
+
$this->end_controls_tab();
|
951 |
+
|
952 |
+
// close button
|
953 |
+
|
954 |
+
$this->start_controls_tab(
|
955 |
+
'style_slider_modal_close/open_button_tab',
|
956 |
+
[
|
957 |
+
'label' => esc_html__('Close', 'bdthemes-prime-slider'),
|
958 |
+
]
|
959 |
+
);
|
960 |
+
|
961 |
+
$this->add_control(
|
962 |
+
'close_button_color',
|
963 |
+
[
|
964 |
+
'label' => esc_html__('Color', 'bdthemes-element-pack'),
|
965 |
+
'type' => Controls_Manager::COLOR,
|
966 |
+
'selectors' => [
|
967 |
+
'{{WRAPPER}} .bdt-elastic-action--close' => 'color: {{VALUE}};',
|
968 |
+
],
|
969 |
+
]
|
970 |
+
);
|
971 |
+
|
972 |
+
$this->add_group_control(
|
973 |
+
Group_Control_Background::get_type(),
|
974 |
+
[
|
975 |
+
'name' => 'close_button_background',
|
976 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--close',
|
977 |
+
]
|
978 |
+
);
|
979 |
+
|
980 |
+
$this->add_group_control(
|
981 |
+
Group_Control_Border::get_type(),
|
982 |
+
[
|
983 |
+
'name' => 'close_button_border',
|
984 |
+
'label' => esc_html__('Border', 'bdthemes-element-pack'),
|
985 |
+
'placeholder' => '1px',
|
986 |
+
'default' => '1px',
|
987 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--close',
|
988 |
+
'separator' => 'before',
|
989 |
+
]
|
990 |
+
);
|
991 |
+
|
992 |
+
$this->add_responsive_control(
|
993 |
+
'close_button_radius',
|
994 |
+
[
|
995 |
+
'label' => esc_html__('Border Radius', 'bdthemes-element-pack'),
|
996 |
+
'type' => Controls_Manager::DIMENSIONS,
|
997 |
+
'size_units' => ['px', '%'],
|
998 |
+
'selectors' => [
|
999 |
+
'{{WRAPPER}} .bdt-elastic-action--close' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
1000 |
+
],
|
1001 |
+
]
|
1002 |
+
);
|
1003 |
+
|
1004 |
+
$this->add_responsive_control(
|
1005 |
+
'close_button_padding',
|
1006 |
+
[
|
1007 |
+
'label' => esc_html__('Padding', 'bdthemes-element-pack'),
|
1008 |
+
'type' => Controls_Manager::DIMENSIONS,
|
1009 |
+
'size_units' => ['px', 'em', '%'],
|
1010 |
+
'selectors' => [
|
1011 |
+
'{{WRAPPER}} .bdt-elastic-action--close' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
1012 |
+
],
|
1013 |
+
]
|
1014 |
+
);
|
1015 |
+
|
1016 |
+
$this->add_responsive_control(
|
1017 |
+
'close_button_margin',
|
1018 |
+
[
|
1019 |
+
'label' => esc_html__('Margin', 'bdthemes-element-pack'),
|
1020 |
+
'type' => Controls_Manager::DIMENSIONS,
|
1021 |
+
'size_units' => ['px', 'em', '%'],
|
1022 |
+
'selectors' => [
|
1023 |
+
'{{WRAPPER}} .bdt-elastic-action--close' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
1024 |
+
],
|
1025 |
+
]
|
1026 |
+
);
|
1027 |
+
|
1028 |
+
$this->add_group_control(
|
1029 |
+
Group_Control_Box_Shadow::get_type(),
|
1030 |
+
[
|
1031 |
+
'name' => 'close_button_box_shadow',
|
1032 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--close',
|
1033 |
+
]
|
1034 |
+
);
|
1035 |
+
|
1036 |
+
$this->add_group_control(
|
1037 |
+
Group_Control_Typography::get_type(),
|
1038 |
+
[
|
1039 |
+
'name' => 'close_button_typography',
|
1040 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--close',
|
1041 |
+
]
|
1042 |
+
);
|
1043 |
+
|
1044 |
+
// hover
|
1045 |
+
|
1046 |
+
$this->add_control(
|
1047 |
+
'slider_modal_close/open_button_heading',
|
1048 |
+
[
|
1049 |
+
'label' => __('Hover', 'bdthemes-prime-slider'),
|
1050 |
+
'type' => Controls_Manager::HEADING,
|
1051 |
+
]
|
1052 |
+
);
|
1053 |
+
|
1054 |
+
$this->add_control(
|
1055 |
+
'close_button_hover_color',
|
1056 |
+
[
|
1057 |
+
'label' => esc_html__('Color', 'bdthemes-element-pack'),
|
1058 |
+
'type' => Controls_Manager::COLOR,
|
1059 |
+
'selectors' => [
|
1060 |
+
'{{WRAPPER}} .bdt-elastic-action--close:hover' => 'color: {{VALUE}};',
|
1061 |
+
],
|
1062 |
+
]
|
1063 |
+
);
|
1064 |
+
|
1065 |
+
$this->add_group_control(
|
1066 |
+
Group_Control_Background::get_type(),
|
1067 |
+
[
|
1068 |
+
'name' => 'close_button_hover_background',
|
1069 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-action--close:hover',
|
1070 |
+
]
|
1071 |
+
);
|
1072 |
+
|
1073 |
+
$this->add_control(
|
1074 |
+
'close_button_hover_border_color',
|
1075 |
+
[
|
1076 |
+
'label' => esc_html__('Border Color', 'bdthemes-element-pack'),
|
1077 |
+
'type' => Controls_Manager::COLOR,
|
1078 |
+
// 'condition' => [
|
1079 |
+
// 'close_button_border_border!' => '',
|
1080 |
+
// ],
|
1081 |
+
'selectors' => [
|
1082 |
+
'{{WRAPPER}} .bdt-elastic-action--close:hover' => 'border-color: {{VALUE}};',
|
1083 |
+
],
|
1084 |
+
]
|
1085 |
+
);
|
1086 |
+
|
1087 |
+
|
1088 |
+
$this->end_controls_tab();
|
1089 |
+
|
1090 |
+
$this->end_controls_tabs();
|
1091 |
+
|
1092 |
+
$this->add_control(
|
1093 |
+
'slider_modal_add_to_cart_button_heading',
|
1094 |
+
[
|
1095 |
+
'label' => __('Add to Cart Button', 'bdthemes-prime-slider'),
|
1096 |
+
'type' => Controls_Manager::HEADING,
|
1097 |
+
'separator' => 'before',
|
1098 |
+
]
|
1099 |
+
);
|
1100 |
+
|
1101 |
+
$this->start_controls_tabs('tabs_button_style');
|
1102 |
+
|
1103 |
+
$this->start_controls_tab(
|
1104 |
+
'tab_button_normal',
|
1105 |
+
[
|
1106 |
+
'label' => __('Normal', 'bdthemes-prime-slider'),
|
1107 |
+
]
|
1108 |
+
);
|
1109 |
+
|
1110 |
+
$this->add_control(
|
1111 |
+
'button_color',
|
1112 |
+
[
|
1113 |
+
'label' => __('Color', 'bdthemes-prime-slider'),
|
1114 |
+
'type' => Controls_Manager::COLOR,
|
1115 |
+
'selectors' => [
|
1116 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button' => 'color: {{VALUE}};',
|
1117 |
+
],
|
1118 |
+
]
|
1119 |
+
);
|
1120 |
+
|
1121 |
+
$this->add_control(
|
1122 |
+
'button_background',
|
1123 |
+
[
|
1124 |
+
'label' => __('Background', 'bdthemes-prime-slider'),
|
1125 |
+
'type' => Controls_Manager::COLOR,
|
1126 |
+
'selectors' => [
|
1127 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button' => 'background-color: {{VALUE}};',
|
1128 |
+
],
|
1129 |
+
]
|
1130 |
+
);
|
1131 |
+
|
1132 |
+
$this->add_group_control(
|
1133 |
+
Group_Control_Border::get_type(),
|
1134 |
+
[
|
1135 |
+
'name' => 'button_border',
|
1136 |
+
'label' => __('Border', 'bdthemes-prime-slider'),
|
1137 |
+
'placeholder' => '1px',
|
1138 |
+
'default' => '1px',
|
1139 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button',
|
1140 |
+
]
|
1141 |
+
);
|
1142 |
+
|
1143 |
+
$this->add_responsive_control(
|
1144 |
+
'button_radius',
|
1145 |
+
[
|
1146 |
+
'label' => __('Border Radius', 'bdthemes-prime-slider'),
|
1147 |
+
'type' => Controls_Manager::DIMENSIONS,
|
1148 |
+
'size_units' => ['px', '%'],
|
1149 |
+
'selectors' => [
|
1150 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
1151 |
+
],
|
1152 |
+
]
|
1153 |
+
);
|
1154 |
+
|
1155 |
+
$this->add_responsive_control(
|
1156 |
+
'button_padding',
|
1157 |
+
[
|
1158 |
+
'label' => __('Padding', 'bdthemes-prime-slider'),
|
1159 |
+
'type' => Controls_Manager::DIMENSIONS,
|
1160 |
+
'size_units' => ['px', 'em', '%'],
|
1161 |
+
'selectors' => [
|
1162 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
1163 |
+
],
|
1164 |
+
]
|
1165 |
+
);
|
1166 |
+
|
1167 |
+
$this->add_group_control(
|
1168 |
+
Group_Control_Box_Shadow::get_type(),
|
1169 |
+
[
|
1170 |
+
'name' => 'button_shadow',
|
1171 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button',
|
1172 |
+
]
|
1173 |
+
);
|
1174 |
+
|
1175 |
+
$this->add_group_control(
|
1176 |
+
Group_Control_Typography::get_type(),
|
1177 |
+
[
|
1178 |
+
'name' => 'button_typography',
|
1179 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button',
|
1180 |
+
]
|
1181 |
+
);
|
1182 |
+
|
1183 |
+
$this->end_controls_tab();
|
1184 |
+
|
1185 |
+
$this->start_controls_tab(
|
1186 |
+
'tab_button_hover',
|
1187 |
+
[
|
1188 |
+
'label' => __('Hover', 'bdthemes-prime-slider'),
|
1189 |
+
]
|
1190 |
+
);
|
1191 |
+
|
1192 |
+
$this->add_control(
|
1193 |
+
'button_hover_color',
|
1194 |
+
[
|
1195 |
+
'label' => __('Color', 'bdthemes-prime-slider'),
|
1196 |
+
'type' => Controls_Manager::COLOR,
|
1197 |
+
'selectors' => [
|
1198 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button:hover' => 'color: {{VALUE}};',
|
1199 |
+
],
|
1200 |
+
]
|
1201 |
+
);
|
1202 |
+
|
1203 |
+
$this->add_control(
|
1204 |
+
'button_hover_background',
|
1205 |
+
[
|
1206 |
+
'label' => __('Background', 'bdthemes-prime-slider'),
|
1207 |
+
'type' => Controls_Manager::COLOR,
|
1208 |
+
'selectors' => [
|
1209 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button::before' => 'background-color: {{VALUE}};',
|
1210 |
+
],
|
1211 |
+
]
|
1212 |
+
);
|
1213 |
+
|
1214 |
+
$this->add_control(
|
1215 |
+
'button_hover_border_color',
|
1216 |
+
[
|
1217 |
+
'label' => __('Border Color', 'bdthemes-prime-slider'),
|
1218 |
+
'type' => Controls_Manager::COLOR,
|
1219 |
+
'condition' => [
|
1220 |
+
'button_border_border!' => '',
|
1221 |
+
],
|
1222 |
+
'selectors' => [
|
1223 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .button:hover' => 'border-color: {{VALUE}};',
|
1224 |
+
],
|
1225 |
+
]
|
1226 |
+
);
|
1227 |
+
|
1228 |
+
$this->end_controls_tab();
|
1229 |
+
|
1230 |
+
$this->start_controls_tab(
|
1231 |
+
'tab_button_quantity',
|
1232 |
+
[
|
1233 |
+
'label' => __('Quantity', 'bdthemes-prime-slider'),
|
1234 |
+
]
|
1235 |
+
);
|
1236 |
+
|
1237 |
+
$this->add_control(
|
1238 |
+
'quantity_button_color',
|
1239 |
+
[
|
1240 |
+
'label' => __('Color', 'bdthemes-prime-slider'),
|
1241 |
+
'type' => Controls_Manager::COLOR,
|
1242 |
+
'selectors' => [
|
1243 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .input-text' => 'color: {{VALUE}};',
|
1244 |
+
],
|
1245 |
+
]
|
1246 |
+
);
|
1247 |
+
|
1248 |
+
$this->add_control(
|
1249 |
+
'quantity_button_background',
|
1250 |
+
[
|
1251 |
+
'label' => __('Background', 'bdthemes-prime-slider'),
|
1252 |
+
'type' => Controls_Manager::COLOR,
|
1253 |
+
'selectors' => [
|
1254 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .input-text' => 'background-color: {{VALUE}};',
|
1255 |
+
],
|
1256 |
+
]
|
1257 |
+
);
|
1258 |
+
|
1259 |
+
$this->add_group_control(
|
1260 |
+
Group_Control_Border::get_type(),
|
1261 |
+
[
|
1262 |
+
'name' => 'quantity_button_border',
|
1263 |
+
'placeholder' => '1px',
|
1264 |
+
'default' => '1px',
|
1265 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .input-text',
|
1266 |
+
]
|
1267 |
+
);
|
1268 |
+
|
1269 |
+
$this->add_responsive_control(
|
1270 |
+
'quantity_button_radius',
|
1271 |
+
[
|
1272 |
+
'label' => __('Border Radius', 'bdthemes-prime-slider'),
|
1273 |
+
'type' => Controls_Manager::DIMENSIONS,
|
1274 |
+
'size_units' => ['px', '%'],
|
1275 |
+
'selectors' => [
|
1276 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .input-text' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
1277 |
+
],
|
1278 |
+
]
|
1279 |
+
);
|
1280 |
+
|
1281 |
+
$this->add_responsive_control(
|
1282 |
+
'quantity_button_padding',
|
1283 |
+
[
|
1284 |
+
'label' => __('Padding', 'bdthemes-prime-slider'),
|
1285 |
+
'type' => Controls_Manager::DIMENSIONS,
|
1286 |
+
'size_units' => ['px', 'em', '%'],
|
1287 |
+
'selectors' => [
|
1288 |
+
'{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .input-text' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
|
1289 |
+
],
|
1290 |
+
]
|
1291 |
+
);
|
1292 |
+
|
1293 |
+
$this->add_group_control(
|
1294 |
+
Group_Control_Box_Shadow::get_type(),
|
1295 |
+
[
|
1296 |
+
'name' => 'quantity_button_shadow',
|
1297 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .input-text',
|
1298 |
+
]
|
1299 |
+
);
|
1300 |
+
|
1301 |
+
$this->add_group_control(
|
1302 |
+
Group_Control_Typography::get_type(),
|
1303 |
+
[
|
1304 |
+
'name' => 'quantity_button_typography',
|
1305 |
+
'selector' => '{{WRAPPER}} .bdt-elastic-slider .bdt-elastic-button--buy .input-text',
|
1306 |
+
]
|
1307 |
+
);
|
1308 |
+
|
1309 |
+
$this->end_controls_tab();
|
1310 |
+
|
1311 |
+
$this->end_controls_tabs();
|
1312 |
+
|
1313 |
+
$this->end_controls_section();
|
1314 |
+
|
1315 |
+
// slider modal end
|
1316 |
+
|
1317 |
+
$this->start_controls_section(
|
1318 |
+
'section_style_navigation',
|
1319 |
+
[
|
1320 |
+
'label' => __('Navigation', 'bdthemes-prime-slider'),
|
1321 |
+
'tab' => Controls_Manager::TAB_STYLE,
|
1322 |
+
]
|
1323 |
+
);
|
1324 |
+
|
1325 |
+
$this->add_control(
|
1326 |
+
'arrows_number_color',
|
1327 |
+
[
|
1328 |
+
'label' => __('Color', 'bdthemes-prime-slider'),
|
1329 |
+
'type' => Controls_Manager::COLOR,
|
1330 |
+
'selectors' => [
|
1331 |
+
'{{WRAPPER}} .bdt-elastic-slider .navbutton .navbutton__line' => 'stroke: {{VALUE}}',
|
1332 |
+
],
|
1333 |
+
]
|
1334 |
+
);
|
1335 |
+
|
1336 |
+
$this->add_control(
|
1337 |
+
'arrows_hover_color',
|
1338 |
+
[
|
1339 |
+
'label' => __('Hover Color', 'bdthemes-prime-slider'),
|
1340 |
+
'type' => Controls_Manager::COLOR,
|
1341 |
+
'selectors' => [
|
1342 |
+
'{{WRAPPER}} .bdt-elastic-slider .navbutton:hover .navbutton__line' => 'stroke: {{VALUE}}',
|
1343 |
+
],
|
1344 |
+
]
|
1345 |
+
);
|
1346 |
+
|
1347 |
+
$this->add_responsive_control(
|
1348 |
+
'arrows_size',
|
1349 |
+
[
|
1350 |
+
'label' => esc_html__('Size', 'bdthemes-prime-slider'),
|
1351 |
+
'type' => Controls_Manager::SLIDER,
|
1352 |
+
'selectors' => [
|
1353 |
+
'{{WRAPPER}} .bdt-elastic-slider .navbutton' => 'width: {{SIZE}}{{UNIT}};',
|
1354 |
+
],
|
1355 |
+
]
|
1356 |
+
);
|
1357 |
+
|
1358 |
+
$this->end_controls_section();
|
1359 |
+
}
|
1360 |
+
|
1361 |
+
public function render_query()
|
1362 |
+
{
|
1363 |
+
$settings = $this->get_settings_for_display();
|
1364 |
+
$default = $this->getGroupControlQueryArgs();
|
1365 |
+
$exclude_products = ($settings['exclude_products']) ? explode(',', $settings['exclude_products']) : [];
|
1366 |
+
|
1367 |
+
$query_args = array(
|
1368 |
+
'post_type' => 'product',
|
1369 |
+
'post_status' => 'publish',
|
1370 |
+
'ignore_sticky_posts' => 1,
|
1371 |
+
'posts_per_page' => $settings['posts'],
|
1372 |
+
'no_found_rows' => true,
|
1373 |
+
'meta_query' => [],
|
1374 |
+
'tax_query' => ['relation' => 'AND'],
|
1375 |
+
'order' => $settings['order'],
|
1376 |
+
'post__not_in' => $exclude_products,
|
1377 |
+
);
|
1378 |
+
|
1379 |
+
$product_visibility_term_ids = wc_get_product_visibility_term_ids();
|
1380 |
+
|
1381 |
+
if ('by_name' === $settings['source'] and !empty($settings['product_categories'])) {
|
1382 |
+
$query_args['tax_query'][] = array(
|
1383 |
+
'taxonomy' => 'product_cat',
|
1384 |
+
'field' => 'slug',
|
1385 |
+
'terms' => $settings['product_categories'],
|
1386 |
+
'post__not_in' => $exclude_products,
|
1387 |
+
);
|
1388 |
+
}
|
1389 |
+
|
1390 |
+
if ('yes' == $settings['hide_free']) {
|
1391 |
+
$query_args['meta_query'][] = array(
|
1392 |
+
'key' => '_price',
|
1393 |
+
'value' => 0,
|
1394 |
+
'compare' => '>',
|
1395 |
+
'type' => 'DECIMAL',
|
1396 |
+
);
|
1397 |
+
}
|
1398 |
+
|
1399 |
+
if ('yes' == $settings['hide_out_stock']) {
|
1400 |
+
$query_args['tax_query'][] = array(
|
1401 |
+
array(
|
1402 |
+
'taxonomy' => 'product_visibility',
|
1403 |
+
'field' => 'term_taxonomy_id',
|
1404 |
+
'terms' => $product_visibility_term_ids['outofstock'],
|
1405 |
+
'operator' => 'NOT IN',
|
1406 |
+
),
|
1407 |
+
); // WPCS: slow query ok.
|
1408 |
+
}
|
1409 |
+
|
1410 |
+
switch ($settings['show_product_type']) {
|
1411 |
+
case 'featured':
|
1412 |
+
$query_args['tax_query'][] = array(
|
1413 |
+
'taxonomy' => 'product_visibility',
|
1414 |
+
'field' => 'term_taxonomy_id',
|
1415 |
+
'terms' => $product_visibility_term_ids['featured'],
|
1416 |
+
);
|
1417 |
+
break;
|
1418 |
+
case 'onsale':
|
1419 |
+
$product_ids_on_sale = wc_get_product_ids_on_sale();
|
1420 |
+
$product_ids_on_sale[] = 0;
|
1421 |
+
$query_args['post__in'] = $product_ids_on_sale;
|
1422 |
+
break;
|
1423 |
+
}
|
1424 |
+
|
1425 |
+
switch ($settings['orderby']) {
|
1426 |
+
case 'price':
|
1427 |
+
$query_args['meta_key'] = '_price'; // WPCS: slow query ok.
|
1428 |
+
$query_args['orderby'] = 'meta_value_num';
|
1429 |
+
break;
|
1430 |
+
case 'rand':
|
1431 |
+
$query_args['orderby'] = 'rand';
|
1432 |
+
break;
|
1433 |
+
case 'sales':
|
1434 |
+
$query_args['meta_key'] = 'total_sales'; // WPCS: slow query ok.
|
1435 |
+
$query_args['orderby'] = 'meta_value_num';
|
1436 |
+
break;
|
1437 |
+
default:
|
1438 |
+
$query_args['orderby'] = 'date';
|
1439 |
+
}
|
1440 |
+
|
1441 |
+
if (
|
1442 |
+
isset($settings['is_replaced_deprecated_query']) &&
|
1443 |
+
$settings['is_replaced_deprecated_query'] == 'yes'
|
1444 |
+
) {
|
1445 |
+
$wp_query = new WP_Query($default);
|
1446 |
+
} else {
|
1447 |
+
|
1448 |
+
$wp_query = new WP_Query($query_args);
|
1449 |
+
}
|
1450 |
+
|
1451 |
+
return $wp_query;
|
1452 |
+
}
|
1453 |
+
|
1454 |
+
public function render_header()
|
1455 |
+
{
|
1456 |
+
$settings = $this->get_settings_for_display();
|
1457 |
+
$id = 'bdt-elastic-slider-' . $this->get_id();
|
1458 |
+
|
1459 |
+
$this->add_render_attribute('slider', 'class', 'bdt-elastic-slider');
|
1460 |
+
|
1461 |
+
$this->add_render_attribute(
|
1462 |
+
[
|
1463 |
+
'elastic-slider' => [
|
1464 |
+
'id' => $id,
|
1465 |
+
'class' => ['bdt-elastic-slideshow'],
|
1466 |
+
'data-settings' => [
|
1467 |
+
wp_json_encode(
|
1468 |
+
array_filter([
|
1469 |
+
"id" => '#' . $id,
|
1470 |
+
])
|
1471 |
+
),
|
1472 |
+
],
|
1473 |
+
],
|
1474 |
+
]
|
1475 |
+
);
|
1476 |
+
|
1477 |
+
?>
|
1478 |
+
<div class="bdt-prime-slider">
|
1479 |
+
<div <?php $this->print_render_attribute_string('slider'); ?>>
|
1480 |
+
<div <?php $this->print_render_attribute_string('elastic-slider'); ?>>
|
1481 |
+
<?php
|
1482 |
+
}
|
1483 |
+
|
1484 |
+
public function render_footer()
|
1485 |
+
{
|
1486 |
+
?>
|
1487 |
+
<button class="bdt-elastic-action bdt-elastic-action--close" aria-label="Close">
|
1488 |
+
<i class="eicon-close"></i>
|
1489 |
+
</button>
|
1490 |
+
</div>
|
1491 |
+
</div>
|
1492 |
+
</div>
|
1493 |
+
<?php
|
1494 |
+
}
|
1495 |
+
|
1496 |
+
public function render_item_content()
|
1497 |
+
{
|
1498 |
+
$settings = $this->get_settings_for_display();
|
1499 |
+
|
1500 |
+
$placeholder_image_src = Utils::get_placeholder_image_src();
|
1501 |
+
$image_src = Group_Control_Image_Size::get_attachment_image_src(get_post_thumbnail_id(), 'thumbnail_size', $settings);
|
1502 |
+
|
1503 |
+
if ($image_src) {
|
1504 |
+
$image_final_src = $image_src;
|
1505 |
+
} elseif ($placeholder_image_src) {
|
1506 |
+
$image_final_src = $placeholder_image_src;
|
1507 |
+
} else {
|
1508 |
+
return;
|
1509 |
+
}
|
1510 |
+
|
1511 |
+
?>
|
1512 |
+
<div class="bdt-elastic-slide-item">
|
1513 |
+
<div class="bdt-elastic-slide-content">
|
1514 |
+
|
1515 |
+
<?php if ($settings['show_title']) : ?>
|
1516 |
+
<<?php echo Utils::get_valid_html_tag($settings['title_html_tag']); ?> class="bdt-elastic-title-preview">
|
1517 |
+
<?php the_title(); ?>
|
1518 |
+
</<?php echo Utils::get_valid_html_tag($settings['title_html_tag']); ?>>
|
1519 |
+
<?php endif; ?>
|
1520 |
+
|
1521 |
+
<?php if ($settings['show_price']) : ?>
|
1522 |
+
<span class="bdt-elastic-price"><?php woocommerce_template_single_price(); ?></span>
|
1523 |
+
<?php endif; ?>
|
1524 |
+
|
1525 |
+
</div>
|
1526 |
+
<div class="bdt-elastic-image-action-btn">
|
1527 |
+
<div class="bdt-elastic-image-action__inner">
|
1528 |
+
|
1529 |
+
<img class="bdt-elastic-img bdt-elastic-img-small" src="<?php echo esc_url($image_final_src); ?>" alt="<?php echo get_the_title(); ?>">
|
1530 |
+
|
1531 |
+
<button class="bdt-elastic-action bdt-elastic-action--open" aria-label="View details"><i class="eicon-plus"></i></button>
|
1532 |
+
</div>
|
1533 |
+
</div>
|
1534 |
+
<div class="bdt-elastic-modal-wrap">
|
1535 |
+
<div class="bdt-elastic-content-scroller">
|
1536 |
+
<img class="bdt-elastic-img bdt-elastic-img-large" src="<?php echo esc_url($image_final_src); ?>" alt="<?php echo get_the_title(); ?>">
|
1537 |
+
|
1538 |
+
<div class="bdt-elastic-modal-details">
|
1539 |
+
|
1540 |
+
<?php if ($settings['show_title']) : ?>
|
1541 |
+
<<?php echo Utils::get_valid_html_tag($settings['title_html_tag']); ?> class="bdt-elastic-title--main">
|
1542 |
+
<?php the_title(); ?>
|
1543 |
+
</<?php echo Utils::get_valid_html_tag($settings['title_html_tag']); ?>>
|
1544 |
+
<?php endif; ?>
|
1545 |
+
|
1546 |
+
<?php if ($settings['show_excerpt']) : ?>
|
1547 |
+
<div class="bdt-elastic-description"><?php the_excerpt(); ?></div>
|
1548 |
+
<?php endif; ?>
|
1549 |
+
|
1550 |
+
<div class="bdt-elastic-price-buy-btn">
|
1551 |
+
<?php if ($settings['show_price']) : ?>
|
1552 |
+
<div class="bdt-elastic-price bdt-elastic-price--large"><?php woocommerce_template_single_price(); ?></div>
|
1553 |
+
<?php endif; ?>
|
1554 |
+
|
1555 |
+
<?php if ($settings['show_cart']) : ?>
|
1556 |
+
<div class="bdt-elastic-button--buy">
|
1557 |
+
<?php woocommerce_template_single_add_to_cart(); ?>
|
1558 |
+
</div>
|
1559 |
+
<?php endif; ?>
|
1560 |
+
</div>
|
1561 |
+
</div>
|
1562 |
+
|
1563 |
+
</div>
|
1564 |
+
</div>
|
1565 |
+
</div>
|
1566 |
+
<?php
|
1567 |
+
}
|
1568 |
+
|
1569 |
+
public function render_slides_loop()
|
1570 |
+
{
|
1571 |
+
|
1572 |
+
$wp_query = $this->render_query();
|
1573 |
+
while ($wp_query->have_posts()) : $wp_query->the_post();
|
1574 |
+
global $product;
|
1575 |
+
|
1576 |
+
$this->render_item_content();
|
1577 |
+
|
1578 |
+
endwhile;
|
1579 |
+
wp_reset_postdata();
|
1580 |
+
}
|
1581 |
+
|
1582 |
+
public function render()
|
1583 |
+
{
|
1584 |
+
$this->render_header();
|
1585 |
+
$this->render_slides_loop();
|
1586 |
+
$this->render_footer();
|
1587 |
+
}
|
1588 |
+
}
|
readme.txt
CHANGED
@@ -3,13 +3,13 @@ Contributors: bdthemes, selimmw, mohammaadfarid, bdkoder, abutalib, maudud, soha
|
|
3 |
Donate link: http://bdthemes.com/
|
4 |
Tags: elementor, prime slider, modern slider, slider addons, elementor addons, dynamic slider, woocommerce slider, multiscroll
|
5 |
Requires at least: 5.0.0
|
6 |
-
Tested up to: 5.9
|
7 |
Requires PHP: 5.6.42
|
8 |
-
Stable tag: 2.
|
9 |
License: GPL3
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
Elementor requires at least: 3.0.0
|
12 |
-
Elementor tested up to: 3.5.
|
13 |
|
14 |
Best Addon for Elementor WordPress Plugin with 35+ Awesome slider design that you can use your modern website with elementor page builder.
|
15 |
|
@@ -57,6 +57,7 @@ social share buttons, slider number and navigation with heading and sub heading
|
|
57 |
25. [Pacific](https://primeslider.pro/demo/pacific/) - Pacific Slider lets you add a responsive slider widget to your blog. It has several cool features. Not only does this make the slider look unique but it also makes it more eye-catching and dynamic than other sliders on the market. See the demo
|
58 |
26. [Paranoia](https://primeslider.pro/demo/paranoia/) - Up for an eccentric post layout for your blogging website? The Paranoia slider widget is a totally unique concept for blogs with a fun and interesting post layout animation to boost your user experience. See the demo
|
59 |
27. [Reveal](https://primeslider.pro/demo/reveal/) - Now make robust and dynamic hero page with morphed slider background using our Prime Slider reveal widget. See the demo
|
|
|
60 |
|
61 |
= Pro Version =
|
62 |
|
@@ -72,7 +73,6 @@ social share buttons, slider number and navigation with heading and sub heading
|
|
72 |
10. [Astoria](https://primeslider.pro/demo/astoria/) - Astoria is a wonderful slider widget for decorating your hero page with the perfect and elegant looking slide. Equipped with social share buttons, the slider can easily catch your visitor's eyes, enough to boost the first impression to the maximum. See the demo
|
73 |
11. [Crossroad](https://primeslider.pro/demo/crossroad/) - Looking for something fun? The Crossroad Slider widget is the craziest looking slider you will ever find owned by the Prime Slider plugin. Now you can display slider posts in a marveled way using a totally new concept of art. See the demo
|
74 |
|
75 |
-
|
76 |
WPTuts:
|
77 |
https://youtu.be/KwDq6wiS6go
|
78 |
Paul Charlton, a renowned WordPress influencer, has featured Prime Slider in WPTuts. He found PS for creative, responsive, and dynamic slider solution plugins.
|
@@ -105,6 +105,16 @@ e.g.
|
|
105 |
|
106 |
== Changelog ==
|
107 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
= 2.6.2 =
|
109 |
|
110 |
* Added: Active Item option added in Wooexpand Widget
|
3 |
Donate link: http://bdthemes.com/
|
4 |
Tags: elementor, prime slider, modern slider, slider addons, elementor addons, dynamic slider, woocommerce slider, multiscroll
|
5 |
Requires at least: 5.0.0
|
6 |
+
Tested up to: 5.9.1
|
7 |
Requires PHP: 5.6.42
|
8 |
+
Stable tag: 2.7.1
|
9 |
License: GPL3
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
Elementor requires at least: 3.0.0
|
12 |
+
Elementor tested up to: 3.5.6
|
13 |
|
14 |
Best Addon for Elementor WordPress Plugin with 35+ Awesome slider design that you can use your modern website with elementor page builder.
|
15 |
|
57 |
25. [Pacific](https://primeslider.pro/demo/pacific/) - Pacific Slider lets you add a responsive slider widget to your blog. It has several cool features. Not only does this make the slider look unique but it also makes it more eye-catching and dynamic than other sliders on the market. See the demo
|
58 |
26. [Paranoia](https://primeslider.pro/demo/paranoia/) - Up for an eccentric post layout for your blogging website? The Paranoia slider widget is a totally unique concept for blogs with a fun and interesting post layout animation to boost your user experience. See the demo
|
59 |
27. [Reveal](https://primeslider.pro/demo/reveal/) - Now make robust and dynamic hero page with morphed slider background using our Prime Slider reveal widget. See the demo
|
60 |
+
28. [Woocircle](https://primeslider.pro/demo/woocircle/) - Do you want to display products in circles? Then Woocircle is the perfect widget to put you products on the price list and let customers enjoy a nice view.
|
61 |
|
62 |
= Pro Version =
|
63 |
|
73 |
10. [Astoria](https://primeslider.pro/demo/astoria/) - Astoria is a wonderful slider widget for decorating your hero page with the perfect and elegant looking slide. Equipped with social share buttons, the slider can easily catch your visitor's eyes, enough to boost the first impression to the maximum. See the demo
|
74 |
11. [Crossroad](https://primeslider.pro/demo/crossroad/) - Looking for something fun? The Crossroad Slider widget is the craziest looking slider you will ever find owned by the Prime Slider plugin. Now you can display slider posts in a marveled way using a totally new concept of art. See the demo
|
75 |
|
|
|
76 |
WPTuts:
|
77 |
https://youtu.be/KwDq6wiS6go
|
78 |
Paul Charlton, a renowned WordPress influencer, has featured Prime Slider in WPTuts. He found PS for creative, responsive, and dynamic slider solution plugins.
|
105 |
|
106 |
== Changelog ==
|
107 |
|
108 |
+
= 2.7.1 =
|
109 |
+
|
110 |
+
* Fixed: Woocircle Widget not showing issue fixed
|
111 |
+
|
112 |
+
= 2.7.0 =
|
113 |
+
|
114 |
+
* Added: Woocircle Widget Added
|
115 |
+
* Fixed: Deprecated issue fixed in Blog, General, Isolate Slider Widgets (Thanks to BeautyMed Co)
|
116 |
+
* Security: Freemius ajax call security issue fixed.
|
117 |
+
|
118 |
= 2.6.2 =
|
119 |
|
120 |
* Added: Active Item option added in Wooexpand Widget
|