Version Description
(31.05.2021) = * Fixed: Bug https://wordpress.org/support/topic/pagespeed-api-quote-exceeded/ * Fixed: Bug https://wordpress.org/support/topic/random-fatal-error/ * Fixed: Bug https://wordpress.org/support/topic/php-fatal-error-254/ * Fixed: Minor bugs.
Download this release
Release Info
Developer | alexkovalevv |
Plugin | Clearfy – WordPress optimization plugin and disable ultimate tweaker |
Version | 1.9.3 |
Comparing to | |
See all releases |
Code changes from version 1.8.9 to 1.9.3
- admin/activation.php +33 -4
- admin/ajax/configurate.php +54 -54
- admin/ajax/google-page-speed.php +39 -0
- admin/ajax/import-settings.php +2 -2
- admin/assets/css/general.css +309 -93
- admin/assets/css/general.css.map +1 -1
- admin/assets/img/g-audit-preloader2.gif +0 -0
- admin/assets/js/general.js +18 -30
- admin/assets/js/google-page-speed-audit.js +148 -0
- admin/assets/js/license-manager.js +4 -4
- admin/boot.php +7 -7
- admin/includes/compatibility.php +4 -4
- admin/includes/options.php +385 -394
- admin/pages/class-page.php +44 -8
- admin/pages/class-pages-advanced.php +100 -1
- admin/pages/class-pages-clearfy-settings.php +1 -27
- admin/pages/class-pages-components-license.php +8 -8
- admin/pages/class-pages-components.php +1 -1
- admin/pages/class-pages-defence-titan.php +3 -3
- admin/pages/class-pages-defence.php +2 -2
- admin/pages/class-pages-hide-login-page.php +3 -3
- admin/pages/class-pages-image-optimization.php +3 -3
- admin/pages/class-pages-license.php +3 -3
- admin/pages/class-pages-performance-cache.php +112 -105
- admin/pages/class-pages-performance-google.php +3 -3
- admin/pages/class-pages-performance.php +84 -107
- admin/pages/class-pages-quick-start.php +18 -10
- admin/pages/class-pages-seo-double-pages.php +1 -1
- admin/pages/class-pages-seo.php +1 -1
- admin/pages/class-pages-widgets.php +1 -1
- admin/pages/setup/class-pages-setup.php +4 -4
- admin/pages/setup/steps/class-step-congratulation.php +2 -2
- admin/pages/setup/steps/class-step-default.php +5 -5
- admin/pages/setup/steps/class-step-google-page-speed-after.php +2 -2
- admin/pages/setup/steps/class-step-google-page-speed-before.php +2 -2
- admin/pages/setup/steps/class-step-optimize-images.php +4 -4
- admin/pages/setup/steps/class-step-plugins.php +2 -2
- admin/pages/setup/steps/class-step-setting-seo-optimize.php +1 -1
- admin/pages/setup/steps/class-step-setting-speed-optimize.php +1 -1
- clearfy.php +12 -10
- components/assets-manager/admin/activation.php +2 -2
- components/assets-manager/admin/ajax/save-settings.php +1 -1
- components/assets-manager/admin/boot.php +2 -2
- components/assets-manager/admin/pages/class-pages-more-features.php +1 -1
- components/assets-manager/admin/pages/class-pages-settings.php +4 -4
- components/assets-manager/gonzales.php +7 -7
- components/assets-manager/includes/class-plugin.php +3 -3
- components/assets-manager/includes/classes/class-assets-manager-global.php +6 -6
- components/assets-manager/includes/classes/class-views.php +4 -4
- components/assets-manager/migrations/010100.php +1 -1
- components/assets-manager/migrations/010108.php +1 -1
- components/assets-manager/migrations/020005.php +1 -1
- components/assets-manager/mu-plugins/assets-manager.php +1 -1
- components/comments-plus/admin/boot.php +1 -1
- components/comments-plus/admin/pages/class-page-comments.php +3 -3
- components/comments-plus/admin/pages/class-page-delete-comments.php +6 -6
- components/comments-plus/admin/pages/class-page-more-features.php +1 -1
- components/comments-plus/comments-plus.php +7 -7
- components/comments-plus/includes/class-plugin.php +3 -3
- components/comments-plus/includes/classes/class-configurate-comments.php +3 -3
- components/cyrlitera/admin/activation.php +2 -2
- components/cyrlitera/admin/boot.php +1 -1
- components/cyrlitera/admin/pages/class-page-cyrlitera.php +4 -4
- components/cyrlitera/admin/pages/class-page-more-features.php +1 -1
- components/cyrlitera/cyrlitera.php +7 -7
- components/cyrlitera/includes/class-plugin.php +3 -3
- components/cyrlitera/includes/classes/class-configurate-cyrlitera.php +2 -2
- components/cyrlitera/migrations/010004.php +1 -1
- components/disable-admin-notices/admin/boot.php +1 -1
- components/disable-admin-notices/admin/class-page-basic.php +4 -4
- components/disable-admin-notices/admin/options.php +2 -2
- components/disable-admin-notices/admin/pages/class-pages-edit-admin-bar.php +3 -3
- components/disable-admin-notices/admin/pages/class-pages-edit-redirects.php +3 -3
- components/disable-admin-notices/admin/pages/class-pages-license.php +3 -3
- components/disable-admin-notices/admin/pages/class-pages-notices.php +3 -3
- components/disable-admin-notices/admin/pages/class-pages-settings.php +6 -6
- components/disable-admin-notices/disable-admin-notices.php +9 -9
- components/disable-admin-notices/includes/class-plugin.php +4 -4
- components/disable-admin-notices/includes/classes/class-configurate-notices.php +1 -1
- components/disable-admin-notices/migrations/010007.php +1 -1
- components/ga-cache/admin/activation.php +2 -2
- components/ga-cache/admin/boot.php +2 -2
- components/ga-cache/admin/options.php +86 -61
- components/ga-cache/admin/pages/class-pages-general-settings.php +3 -3
- components/ga-cache/admin/pages/class-pages-more-features.php +1 -1
- components/ga-cache/clearfy.php +21 -17
- components/ga-cache/includes/3rd-party/class-clearfy-plugin.php +28 -18
- components/ga-cache/includes/class-plugin.php +37 -28
- components/ga-cache/includes/classes/class-abstract-cache.php +562 -0
- components/ga-cache/includes/classes/class-configurate-ga.php +1 -1
- components/ga-cache/includes/classes/class-facebook-cache.php +1061 -0
- components/ga-cache/includes/classes/class-facebook-sdk.php +555 -0
- components/ga-cache/includes/classes/class-google-analytics-cache.php +162 -0
- components/ga-cache/includes/classes/class-google-tag-manager-cache.php +156 -0
- components/ga-cache/includes/classes/class-scheduler.php +193 -0
- components/ga-cache/migrations/030002.php +1 -1
- components/ga-cache/simple_google_analytics.php +8 -7
- components/html-minify/admin/boot.php +48 -46
- components/html-minify/admin/pages/class-pages-settings.php +3 -3
- components/html-minify/html-minify.php +7 -7
- components/html-minify/includes/class-plugin.php +3 -3
- components/html-minify/includes/classes/class-main.php +233 -239
- components/minify-and-combine/admin/boot.php +4 -4
- components/minify-and-combine/admin/pages/class-pages-settings.php +252 -191
- components/minify-and-combine/includes/class-plugin.php +3 -3
- components/minify-and-combine/includes/classes/class-cache.php +1 -1
- components/minify-and-combine/includes/classes/class-main.php +5 -0
- components/minify-and-combine/minify-and-combine.php +7 -7
- components/updates-manager/admin/activation.php +2 -2
- components/updates-manager/admin/assets/js/ajax-components.js +4 -4
- components/updates-manager/admin/boot.php +1 -1
- components/updates-manager/admin/includes/class-abstract-filters.php +1 -1
- components/updates-manager/admin/pages/class-page-advanced.php +5 -5
- components/updates-manager/admin/pages/class-page-more-features.php +1 -1
- components/updates-manager/admin/pages/class-page-plugins.php +5 -5
- components/updates-manager/admin/pages/class-page-themes.php +4 -4
- components/updates-manager/admin/pages/class-page-updates.php +5 -5
- components/updates-manager/includes/class-plugin.php +3 -3
- components/updates-manager/includes/classes/class-configurate-updates.php +1 -1
- components/updates-manager/migrations/010008.php +1 -1
- components/updates-manager/webcraftic-updates-manager.php +7 -7
- includes/boot.php +25 -1
- includes/class.plugin.php +7 -7
- includes/classes/3rd-party/boot.php +1 -1
- includes/classes/3rd-party/class-form-entity.php +3 -3
- includes/classes/class.configurate-advanced.php +1 -1
- includes/classes/class.configurate-google-performance.php +1 -1
- includes/classes/class.configurate-performance.php +1 -1
- includes/classes/class.configurate-privacy.php +1 -1
- includes/classes/class.configurate-security.php +1 -1
- includes/classes/class.configurate-seo.php +1 -1
- includes/helpers.php +54 -2
- libs/factory/adverts/boot.php +12 -12
- libs/factory/adverts/includes/class-base.php +6 -6
- libs/factory/adverts/includes/class-dashboard-widget.php +4 -4
- libs/factory/adverts/includes/class-rest-request.php +4 -4
- libs/factory/adverts/langs/{wbcr_factory_adverts_124-ru_RU.mo → wbcr_factory_adverts_126-ru_RU.mo} +0 -0
- libs/factory/adverts/langs/{wbcr_factory_adverts_124-ru_RU.po → wbcr_factory_adverts_126-ru_RU.po} +0 -0
- libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css +2 -2
- libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/bootstrap.sunrise.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/control.checkbox.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/control.dropdown.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css +1 -1
- libs/factory/bootstrap/assets/css-min/holder.more-link.min.css +1 -1
- libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js +1 -1
- libs/factory/bootstrap/assets/js-min/control.checkbox.min.js +1 -1
- libs/factory/bootstrap/assets/js-min/control.dropdown.min.js +1 -1
- libs/factory/bootstrap/assets/js-min/control.list.min.js +1 -1
- libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js +1 -1
- libs/factory/bootstrap/assets/js-min/holder.more-link.min.js +10 -0
- libs/factory/bootstrap/boot.php +9 -9
- libs/factory/bootstrap/includes/functions.php +74 -68
- libs/factory/clearfy/assets/css/clearfy-base.css +25 -25
- libs/factory/clearfy/assets/css/components.css +24 -24
- libs/factory/clearfy/assets/css/libs/autocomplete.css +40 -27
- libs/factory/clearfy/assets/css/libs/autocomplete.css.map +1 -1
- libs/factory/clearfy/assets/css/libs/autocomplete.less +4 -0
- libs/factory/clearfy/assets/css/page-setup.css +102 -102
- libs/factory/clearfy/assets/js/clearfy-globals.js +26 -26
- libs/factory/clearfy/assets/js/clearfy-license-manager.js +4 -4
- libs/factory/clearfy/assets/js/clearfy-search-options.js +13 -2
- libs/factory/clearfy/assets/js/clearfy-widgets.js +4 -4
- libs/factory/clearfy/assets/js/libs/jquery.autocomplete.min.js +1 -1
- libs/factory/clearfy/boot.php +30 -30
- libs/factory/clearfy/includes/ajax-handlers.php +13 -13
- libs/factory/clearfy/includes/class-configurate.php +3 -3
- libs/factory/clearfy/includes/class-helpers.php +1 -1
- libs/factory/clearfy/includes/class-search-options.php +1 -1
- libs/factory/clearfy/langs/{wbcr_factory_clearfy_237-ru_RU.mo → wbcr_factory_clearfy_240-ru_RU.mo} +0 -0
- libs/factory/clearfy/langs/{wbcr_factory_clearfy_237-ru_RU.po → wbcr_factory_clearfy_240-ru_RU.po} +0 -0
- libs/factory/clearfy/pages/class-page-license.php +33 -33
- libs/factory/clearfy/pages/class-page-more-features.php +23 -23
- libs/factory/clearfy/pages/class-page-setup.php +18 -18
- libs/factory/clearfy/pages/class-pages-components.php +19 -19
- libs/factory/clearfy/pages/class-pages.php +72 -62
- libs/factory/clearfy/pages/setup-parts/class-step-custom.php +7 -7
- libs/factory/clearfy/pages/setup-parts/class-step-form.php +14 -12
- libs/factory/clearfy/pages/setup-parts/class-step.php +5 -5
- libs/factory/core/ajax/install-addons.php +10 -10
- libs/factory/core/assets/js/core-components.js +14 -14
- libs/factory/core/assets/js/core-general.js +6 -6
- libs/factory/core/boot.php +33 -33
- libs/factory/core/includes/activation/class-factory-activator.php +3 -3
- libs/factory/core/includes/activation/class-factory-update.php +3 -3
- libs/factory/core/includes/assets-managment/class-factory-assets-list.php +4 -4
- libs/factory/core/includes/assets-managment/class-factory-script-list.php +2 -2
- libs/factory/core/includes/assets-managment/class-factory-style-list.php +1 -1
- libs/factory/core/includes/class-check-compatibility.php +3 -3
- libs/factory/core/includes/class-factory-migrations.php +13 -13
- libs/factory/core/includes/class-factory-notices.php +5 -5
- libs/factory/core/includes/class-factory-options.php +2 -2
- libs/factory/core/includes/class-factory-plugin-abstract.php +72 -72
- libs/factory/core/includes/class-factory-plugin-base.php +25 -25
- libs/factory/core/includes/class-factory-requests.php +1 -1
- libs/factory/core/includes/class-factory-requirements.php +6 -6
- libs/factory/core/includes/components/class-delete-component-button.php +1 -1
- libs/factory/core/includes/components/class-install-component-button.php +11 -11
- libs/factory/core/includes/entities/class-factory-paths.php +1 -1
- libs/factory/core/includes/entities/class-factory-support.php +1 -1
- libs/factory/core/includes/functions.php +7 -7
- libs/factory/core/includes/premium/class-factory-license-interface.php +1 -1
- libs/factory/core/includes/premium/class-factory-manager.php +10 -10
- libs/factory/core/includes/premium/class-factory-provider-abstract.php +6 -6
- libs/factory/core/includes/updates/class-factory-premium-upgrader.php +11 -11
- libs/factory/core/includes/updates/class-factory-upgrader.php +10 -10
- libs/factory/core/includes/updates/repositories/class-factory-github.php +5 -5
- libs/factory/core/includes/updates/repositories/class-factory-repository-abstract.php +5 -5
- libs/factory/core/includes/updates/repositories/class-factory-wordpress.php +4 -4
- libs/factory/core/langs/{wbcr_factory_446-ru_RU.mo → wbcr_factory_448-ru_RU.mo} +0 -0
- libs/factory/core/langs/{wbcr_factory_446-ru_RU.po → wbcr_factory_448-ru_RU.po} +0 -0
- libs/factory/forms/boot.php +95 -95
- libs/factory/forms/controls/checkbox.php +4 -4
- libs/factory/forms/controls/color-and-opacity.php +4 -4
- libs/factory/forms/controls/color.php +2 -2
- libs/factory/forms/controls/customs/html.php +2 -2
- libs/factory/forms/controls/customs/separator.php +2 -2
- libs/factory/forms/controls/datepicker-range.php +4 -4
- libs/factory/forms/controls/dropdown-and-colors.php +6 -6
- libs/factory/forms/controls/dropdown.php +5 -5
- libs/factory/forms/controls/font.php +11 -11
- libs/factory/forms/controls/google-font.php +8 -8
- libs/factory/forms/controls/gradient.php +4 -4
- libs/factory/forms/controls/hidden.php +2 -2
- libs/factory/forms/controls/holders/accordion-item.php +2 -2
- libs/factory/forms/controls/holders/accordion.php +2 -2
- libs/factory/forms/controls/holders/columns.php +2 -2
- libs/factory/forms/controls/holders/control-group-item.php +2 -2
- libs/factory/forms/controls/holders/control-group.php +3 -3
- libs/factory/forms/controls/holders/div.php +2 -2
- libs/factory/forms/controls/holders/form-group.php +2 -2
- libs/factory/forms/controls/holders/more-link.php +55 -57
- libs/factory/forms/controls/holders/tab-item.php +2 -2
- libs/factory/forms/controls/holders/tab.php +4 -4
- libs/factory/forms/controls/integer.php +2 -2
- libs/factory/forms/controls/list.php +4 -4
- libs/factory/forms/controls/multiple-textbox.php +3 -3
- libs/factory/forms/controls/paddings-editor.php +3 -3
- libs/factory/forms/controls/pattern.php +9 -9
- libs/factory/forms/controls/radio-colors.php +2 -2
- libs/factory/forms/controls/radio.php +2 -2
- libs/factory/forms/controls/textarea.php +2 -2
- libs/factory/forms/controls/textbox.php +2 -2
- libs/factory/forms/controls/url.php +3 -3
- libs/factory/forms/controls/wp-editor.php +3 -3
- libs/factory/forms/includes/complex-control.class.php +4 -4
- libs/factory/forms/includes/control-holder.class.php +5 -5
- libs/factory/forms/includes/control.class.php +2 -2
admin/activation.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
*
|
5 |
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
* @copyright (c) 09.09.2017, Webcraftic
|
7 |
-
* @see
|
8 |
* @version 1.0
|
9 |
*/
|
10 |
|
@@ -13,7 +13,7 @@ if( !defined('ABSPATH') ) {
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
-
class WCL_Activation extends
|
17 |
|
18 |
/**
|
19 |
* Runs activation actions.
|
@@ -61,7 +61,28 @@ class WCL_Activation extends Wbcr_Factory446_Activator {
|
|
61 |
WCL_Plugin::app()->deactivateComponent('cyrlitera');
|
62 |
}
|
63 |
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
/**
|
67 |
* @since 1.4.1
|
@@ -76,7 +97,15 @@ class WCL_Activation extends Wbcr_Factory446_Activator {
|
|
76 |
*/
|
77 |
public function deactivate()
|
78 |
{
|
79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
/*$dependent = 'clearfy_package/clearfy-package.php';
|
81 |
|
82 |
require_once ABSPATH . '/wp-admin/includes/plugin.php';
|
4 |
*
|
5 |
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
* @copyright (c) 09.09.2017, Webcraftic
|
7 |
+
* @see Factory448_Activator
|
8 |
* @version 1.0
|
9 |
*/
|
10 |
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
class WCL_Activation extends Wbcr_Factory448_Activator {
|
17 |
|
18 |
/**
|
19 |
* Runs activation actions.
|
61 |
WCL_Plugin::app()->deactivateComponent('cyrlitera');
|
62 |
}
|
63 |
|
64 |
+
if( !WCL_Plugin::app()->getPopulateOption('deactivated_unused_modules') ) {
|
65 |
+
if( !WCL_Plugin::app()->getPopulateOption('disable_comments') || "enable_comments" == WCL_Plugin::app()->getPopulateOption('disable_comments') ) {
|
66 |
+
WCL_Plugin::app()->deactivateComponent('comments_tools');
|
67 |
+
}
|
68 |
+
|
69 |
+
$plugin_updates = !WCL_Plugin::app()->getPopulateOption('plugin_updates') || "enable_plugin_monual_updates" == WCL_Plugin::app()->getPopulateOption('plugin_updates');
|
70 |
+
$theme_updates = !WCL_Plugin::app()->getPopulateOption('theme_updates') || "enable_theme_monual_updates" == WCL_Plugin::app()->getPopulateOption('theme_updates');
|
71 |
+
|
72 |
+
if( $plugin_updates || $theme_updates ) {
|
73 |
+
WCL_Plugin::app()->deactivateComponent('updates_manager');
|
74 |
+
}
|
75 |
+
WCL_Plugin::app()->updatePopulateOption('deactivated_unused_modules', 1);
|
76 |
+
}
|
77 |
+
|
78 |
+
if( !get_option($this->plugin->getOptionName('plugin_activated'), false) ) {
|
79 |
+
//WCL_Plugin::app()->updatePopulateOption('start_first_google_page_speed_audit', 1);
|
80 |
+
update_option($this->plugin->getOptionName('setup_wizard'), 1);
|
81 |
+
}
|
82 |
+
|
83 |
+
/*if( !wp_next_scheduled('wclearfy/google_page_speed_audit') ) {
|
84 |
+
wp_schedule_event(time(), 'daily', 'wclearfy/google_page_speed_audit');
|
85 |
+
}*/
|
86 |
|
87 |
/**
|
88 |
* @since 1.4.1
|
97 |
*/
|
98 |
public function deactivate()
|
99 |
{
|
100 |
+
|
101 |
+
if( wp_next_scheduled('wclearfy/google_page_speed_audit') ) {
|
102 |
+
wp_clear_scheduled_hook('wclearfy/google_page_speed_audit');
|
103 |
+
}
|
104 |
+
|
105 |
+
if( wp_next_scheduled('wclearfy/google_page_speed_audit') ) {
|
106 |
+
wp_clear_scheduled_hook('wclearfy/google_page_speed_audit');
|
107 |
+
}
|
108 |
+
|
109 |
/*$dependent = 'clearfy_package/clearfy-package.php';
|
110 |
|
111 |
require_once ABSPATH . '/wp-admin/includes/plugin.php';
|
admin/ajax/configurate.php
CHANGED
@@ -1,74 +1,74 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
}
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
check_ajax_referer('wbcr_clearfy_ajax_quick_start_nonce', 'security');
|
17 |
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
|
22 |
-
|
23 |
-
$
|
|
|
24 |
|
25 |
-
if( empty($
|
26 |
wp_send_json(array('error' => __('Undefinded mode.', 'clearfy')));
|
27 |
}
|
28 |
|
29 |
-
|
30 |
-
$
|
31 |
-
$mode_options = $group->getOptions();
|
32 |
-
|
33 |
-
if( empty($mode_options) ) {
|
34 |
-
wp_send_json(array('error' => __('Undefinded mode.', 'clearfy')));
|
35 |
-
}
|
36 |
-
|
37 |
-
foreach($mode_options as $option) {
|
38 |
-
$set_value = 1;
|
39 |
-
|
40 |
-
$option_name = $option->getName();
|
41 |
-
$option_value = $option->getValue($mode_name);
|
42 |
|
43 |
-
|
44 |
-
|
45 |
-
}
|
46 |
|
47 |
-
|
|
|
48 |
}
|
49 |
-
} else {
|
50 |
-
$all_options = WCL_Option::getAllOptions();
|
51 |
|
52 |
-
|
53 |
-
foreach($all_options as $option) {
|
54 |
-
WCL_Plugin::app()->deletePopulateOption($option->getName());
|
55 |
-
}
|
56 |
-
}
|
57 |
}
|
|
|
|
|
58 |
|
59 |
-
if(
|
60 |
-
|
|
|
|
|
61 |
}
|
|
|
62 |
|
63 |
-
|
64 |
-
|
65 |
-
// wbcr_clearfy/configurate_quick_mode_success_args
|
66 |
-
// @since 1.3.188
|
67 |
-
wp_send_json(apply_filters('wbcr_clearfy/configurate_quick_mode_success_args', array(
|
68 |
-
'status' => 'success',
|
69 |
-
'export_options' => WCL_Helper::getExportOptions()
|
70 |
-
), $mode_name));
|
71 |
}
|
72 |
|
73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Ajax plugin configuration
|
4 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
5 |
+
* @copyright (c) 2017 Webraftic Ltd
|
6 |
+
* @version 1.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
// Exit if accessed directly
|
10 |
+
if( !defined('ABSPATH') ) {
|
11 |
+
exit;
|
12 |
+
}
|
13 |
+
|
14 |
+
function wbcr_clearfy_configurate_plugin()
|
15 |
+
{
|
16 |
+
check_ajax_referer('wbcr_clearfy_ajax_quick_start_nonce', 'security');
|
17 |
+
|
18 |
+
if( !WCL_Plugin::app()->currentUserCan() ) {
|
19 |
+
wp_send_json(array('error' => __('You don\'t have enough capability to edit this information.', 'clearfy')));
|
20 |
}
|
21 |
|
22 |
+
$mode_name = WCL_Plugin::app()->request->post('mode', false, true);
|
23 |
+
$flush_redirect = WCL_Plugin::app()->request->post('flush_redirect', false, true);
|
|
|
24 |
|
25 |
+
if( empty($mode_name) ) {
|
26 |
+
wp_send_json(array('error' => __('Undefinded mode.', 'clearfy')));
|
27 |
+
}
|
28 |
|
29 |
+
if( $mode_name != 'reset' ) {
|
30 |
+
$group = WCL_Group::getInstance($mode_name);
|
31 |
+
$mode_options = $group->getOptions();
|
32 |
|
33 |
+
if( empty($mode_options) ) {
|
34 |
wp_send_json(array('error' => __('Undefinded mode.', 'clearfy')));
|
35 |
}
|
36 |
|
37 |
+
foreach($mode_options as $option) {
|
38 |
+
$set_value = 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
+
$option_name = $option->getName();
|
41 |
+
$option_value = $option->getValue($mode_name);
|
|
|
42 |
|
43 |
+
if( !empty($option_value) ) {
|
44 |
+
$set_value = $option_value;
|
45 |
}
|
|
|
|
|
46 |
|
47 |
+
WCL_Plugin::app()->updatePopulateOption($option_name, $set_value);
|
|
|
|
|
|
|
|
|
48 |
}
|
49 |
+
} else {
|
50 |
+
$all_options = WCL_Option::getAllOptions();
|
51 |
|
52 |
+
if( !empty($all_options) ) {
|
53 |
+
foreach($all_options as $option) {
|
54 |
+
WCL_Plugin::app()->deletePopulateOption($option->getName());
|
55 |
+
}
|
56 |
}
|
57 |
+
}
|
58 |
|
59 |
+
if( !$flush_redirect ) {
|
60 |
+
WbcrFactoryClearfy240_Helpers::flushPageCache();
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
}
|
62 |
|
63 |
+
do_action('wbcr_clearfy_configurated_quick_mode', $mode_name);
|
64 |
+
|
65 |
+
// wbcr_clearfy/configurate_quick_mode_success_args
|
66 |
+
// @since 1.3.188
|
67 |
+
wp_send_json(apply_filters('wbcr_clearfy/configurate_quick_mode_success_args', array(
|
68 |
+
'status' => 'success',
|
69 |
+
'export_options' => WCL_Helper::getExportOptions()
|
70 |
+
), $mode_name));
|
71 |
+
}
|
72 |
+
|
73 |
+
add_action('wp_ajax_wbcr_clearfy_configurate', 'wbcr_clearfy_configurate_plugin');
|
74 |
|
admin/ajax/google-page-speed.php
CHANGED
@@ -83,3 +83,42 @@ add_action('wp_ajax_wclearfy-fetch-google-pagespeed-audit', function () {
|
|
83 |
wp_send_json_success($results);
|
84 |
});
|
85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
wp_send_json_success($results);
|
84 |
});
|
85 |
|
86 |
+
add_action('wp_ajax_wclearfy-google-pagespeed-audit-results', function () {
|
87 |
+
$get_before_audit_results = WCL_Plugin::app()->getPopulateOption('google_page_speed_audit_before');
|
88 |
+
$get_after_audit_results = WCL_Plugin::app()->getPopulateOption('google_page_speed_audit_after');
|
89 |
+
|
90 |
+
$results = [
|
91 |
+
'before' => !empty($get_before_audit_results) ? $get_before_audit_results : [
|
92 |
+
'fake' => 1,
|
93 |
+
'desktop' => [
|
94 |
+
'performance_score' => 0,
|
95 |
+
'first_contentful_paint' => '??',
|
96 |
+
'speed_index' => '??',
|
97 |
+
'interactive' => '??'
|
98 |
+
],
|
99 |
+
'mobile' => [
|
100 |
+
'performance_score' => 0,
|
101 |
+
'first_contentful_paint' => '??',
|
102 |
+
'speed_index' => '??',
|
103 |
+
'interactive' => '??'
|
104 |
+
],
|
105 |
+
],
|
106 |
+
'after' => !empty($get_after_audit_results) ? $get_after_audit_results : [
|
107 |
+
'fake' => 1,
|
108 |
+
'desktop' => [
|
109 |
+
'performance_score' => 0,
|
110 |
+
'first_contentful_paint' => '??',
|
111 |
+
'speed_index' => '??',
|
112 |
+
'interactive' => '??'
|
113 |
+
],
|
114 |
+
'mobile' => [
|
115 |
+
'performance_score' => 0,
|
116 |
+
'first_contentful_paint' => '??',
|
117 |
+
'speed_index' => '??',
|
118 |
+
'interactive' => '??'
|
119 |
+
]
|
120 |
+
]
|
121 |
+
];
|
122 |
+
wp_send_json_success($results);
|
123 |
+
});
|
124 |
+
|
admin/ajax/import-settings.php
CHANGED
@@ -62,7 +62,7 @@
|
|
62 |
}
|
63 |
|
64 |
if( is_array($option_value) || is_object($option_value) ) {
|
65 |
-
$option_value =
|
66 |
$option_value = maybe_serialize($option_value);
|
67 |
} else {
|
68 |
$option_value = wp_kses_post($option_value);
|
@@ -140,7 +140,7 @@
|
|
140 |
//$send_data['update_notice'] = $package_plugin->getUpdateNotice();
|
141 |
|
142 |
// Сбрасываем кеш для кеширующих плагинов
|
143 |
-
|
144 |
|
145 |
do_action('wbcr_clearfy_imported_settings');
|
146 |
|
62 |
}
|
63 |
|
64 |
if( is_array($option_value) || is_object($option_value) ) {
|
65 |
+
$option_value = WbcrFactoryClearfy240_Helpers::recursiveSanitizeArray($option_value, 'wp_kses_post');
|
66 |
$option_value = maybe_serialize($option_value);
|
67 |
} else {
|
68 |
$option_value = wp_kses_post($option_value);
|
140 |
//$send_data['update_notice'] = $package_plugin->getUpdateNotice();
|
141 |
|
142 |
// Сбрасываем кеш для кеширующих плагинов
|
143 |
+
WbcrFactoryClearfy240_Helpers::flushPageCache();
|
144 |
|
145 |
do_action('wbcr_clearfy_imported_settings');
|
146 |
|
admin/assets/css/general.css
CHANGED
@@ -33,10 +33,10 @@
|
|
33 |
//float: right;
|
34 |
}*/
|
35 |
}
|
36 |
-
#WBCR .wbcr-factory-pages-
|
37 |
height: 80px !important;
|
38 |
}
|
39 |
-
#WBCR .wbcr-factory-pages-
|
40 |
display: inline-block !important;
|
41 |
}
|
42 |
#WBCR .row {
|
@@ -154,52 +154,30 @@
|
|
154 |
color: #8c8888;
|
155 |
font-size: 12px;
|
156 |
}
|
157 |
-
#WBCR
|
158 |
-
|
|
|
159 |
}
|
160 |
-
#WBCR .
|
|
|
161 |
position: relative;
|
162 |
-
|
163 |
-
|
|
|
164 |
}
|
165 |
-
#WBCR .
|
166 |
-
|
167 |
position: absolute;
|
168 |
-
|
169 |
-
left:
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
text-align: center;
|
176 |
-
line-height: 3;
|
177 |
-
background: #fdd599 !important;
|
178 |
-
color: #a57b3c !important;
|
179 |
-
text-decoration: none !important;
|
180 |
-
text-shadow: none !important;
|
181 |
-
box-shadow: none !important;
|
182 |
-
border: 1px solid #e0c08f !important;
|
183 |
-
border-radius: 3px;
|
184 |
-
outline: none;
|
185 |
-
-webkit-transition: opacity 1000ms;
|
186 |
-
-moz-transition: opacity 1000ms;
|
187 |
-
-o-transition: opacity 1000ms;
|
188 |
-
transition: opacity 1000ms;
|
189 |
-
}
|
190 |
-
#WBCR .wbcr-clearfy-fake-image-optimizer-board .wbcr-clearfy-fake-widget:hover .wbcr-clr-proccess-button {
|
191 |
-
display: block;
|
192 |
-
opacity: 1;
|
193 |
-
}
|
194 |
-
#WBCR .wbcr-clearfy-fake-image-optimizer-board .wbcr-clearfy-fake-widget:hover .wbcr-clearfy-widget-overlay img {
|
195 |
-
opacity: 0.2;
|
196 |
}
|
197 |
-
#WBCR
|
198 |
-
|
199 |
-
-webkit-transition: opacity 500ms;
|
200 |
-
-moz-transition: opacity 500ms;
|
201 |
-
-o-transition: opacity 500ms;
|
202 |
-
transition: opacity 500ms;
|
203 |
}
|
204 |
#WBCR .wbcr-clearfy-switch-success-message,
|
205 |
#WBCR .wbcr-clearfy-switch-error-message {
|
@@ -253,6 +231,74 @@
|
|
253 |
display: inline-block;
|
254 |
margin-top: 10px;
|
255 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
#WBCR #wbcr-clearfy-quick-mode-board {
|
257 |
padding: 20px;
|
258 |
}
|
@@ -304,7 +350,6 @@
|
|
304 |
/*.fa, .dashicons:before {
|
305 |
color: #8bc34a;
|
306 |
}
|
307 |
-
|
308 |
& .wbcr-clearfy-button-activate-mode {
|
309 |
display: none !important;
|
310 |
}
|
@@ -399,73 +444,244 @@
|
|
399 |
color: #ffffff;
|
400 |
margin-top: 10px;
|
401 |
}
|
402 |
-
#WBCR .
|
403 |
-
display:
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
415 |
}
|
416 |
-
#WBCR .
|
417 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
418 |
text-align: center;
|
|
|
419 |
font-weight: bold;
|
420 |
-
|
|
|
|
|
421 |
}
|
422 |
-
#WBCR .
|
423 |
-
|
424 |
-
text-align: center;
|
425 |
}
|
426 |
-
#WBCR .
|
427 |
-
|
428 |
-
|
429 |
-
overflow-y: auto;
|
430 |
-
overflow-x: hidden;
|
431 |
-
padding-left: 40px;
|
432 |
-
list-style: decimal;
|
433 |
-
margin: 20px 0;
|
434 |
}
|
435 |
-
#WBCR .
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
436 |
display: block;
|
|
|
|
|
|
|
437 |
}
|
438 |
-
#WBCR .
|
439 |
-
|
440 |
-
|
|
|
|
|
|
|
441 |
}
|
442 |
-
#WBCR .
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
443 |
display: block;
|
444 |
-
margin:
|
|
|
445 |
}
|
446 |
-
#WBCR .
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
447 |
text-align: center;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
448 |
padding: 10px;
|
|
|
|
|
449 |
}
|
450 |
-
#WBCR .
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
|
|
|
|
|
|
455 |
font-weight: bold;
|
456 |
}
|
457 |
-
#WBCR .
|
458 |
-
|
459 |
-
outline: 0 !important;
|
460 |
-
box-shadow: none !important;
|
461 |
}
|
462 |
-
#WBCR .
|
463 |
-
|
464 |
-
|
|
|
|
|
|
|
|
|
465 |
}
|
466 |
-
#WBCR .
|
467 |
-
|
468 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
469 |
}
|
470 |
@media screen and (max-width: 1380px) {
|
471 |
#WBCR #wbcr-clearfy-quick-mode-board {
|
33 |
//float: right;
|
34 |
}*/
|
35 |
}
|
36 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-page-header {
|
37 |
height: 80px !important;
|
38 |
}
|
39 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-page-header .wbcr-factory-header-logo span {
|
40 |
display: inline-block !important;
|
41 |
}
|
42 |
#WBCR .row {
|
154 |
color: #8c8888;
|
155 |
font-size: 12px;
|
156 |
}
|
157 |
+
#WBCR .factory-more-link-content {
|
158 |
+
padding-top: 10px;
|
159 |
+
background: #fbfafa;
|
160 |
}
|
161 |
+
#WBCR .factory-more-link-hide {
|
162 |
+
display: block;
|
163 |
position: relative;
|
164 |
+
margin-left: 25px;
|
165 |
+
margin-bottom: 30px;
|
166 |
+
color: rgb(255 69 0);
|
167 |
}
|
168 |
+
#WBCR .factory-more-link-hide:before {
|
169 |
+
content: '';
|
170 |
position: absolute;
|
171 |
+
width: 0;
|
172 |
+
left: -15px;
|
173 |
+
top: 6px;
|
174 |
+
height: 0;
|
175 |
+
border-style: solid;
|
176 |
+
border-width: 0 5px 8px 5px;
|
177 |
+
border-color: transparent transparent #ff4500 transparent;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
}
|
179 |
+
#WBCR #wbcr-clearfy-quick-mode-board h4 {
|
180 |
+
margin-top: 30px;
|
|
|
|
|
|
|
|
|
181 |
}
|
182 |
#WBCR .wbcr-clearfy-switch-success-message,
|
183 |
#WBCR .wbcr-clearfy-switch-error-message {
|
231 |
display: inline-block;
|
232 |
margin-top: 10px;
|
233 |
}
|
234 |
+
#WBCR .wbcr-clearfy-confirm-popup {
|
235 |
+
display: none;
|
236 |
+
position: fixed;
|
237 |
+
top: 50%;
|
238 |
+
left: 50%;
|
239 |
+
width: 500px;
|
240 |
+
height: 400px;
|
241 |
+
margin: -200px 0 0 -250px;
|
242 |
+
padding: 20px;
|
243 |
+
background: rgba(255, 255, 255, 0.82);
|
244 |
+
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
|
245 |
+
border: 4px solid rgba(216, 210, 171, 0.44);
|
246 |
+
z-index: 99;
|
247 |
+
}
|
248 |
+
#WBCR .wbcr-clearfy-confirm-popup h3 {
|
249 |
+
font-size: 17px;
|
250 |
+
text-align: center;
|
251 |
+
font-weight: bold;
|
252 |
+
margin: 5px 0 0;
|
253 |
+
}
|
254 |
+
#WBCR .wbcr-clearfy-confirm-popup .wbcr-clearfy-reset-warning-message {
|
255 |
+
display: none;
|
256 |
+
text-align: center;
|
257 |
+
}
|
258 |
+
#WBCR .wbcr-clearfy-confirm-popup .wbcr-clearfy-list-options {
|
259 |
+
display: none;
|
260 |
+
height: 230px;
|
261 |
+
overflow-y: auto;
|
262 |
+
overflow-x: hidden;
|
263 |
+
padding-left: 40px;
|
264 |
+
list-style: decimal;
|
265 |
+
margin: 20px 0;
|
266 |
+
}
|
267 |
+
#WBCR .wbcr-clearfy-confirm-popup.wbcr-clearfy-default-warning-options .wbcr-clearfy-list-options {
|
268 |
+
display: block;
|
269 |
+
}
|
270 |
+
#WBCR .wbcr-clearfy-confirm-popup.wbcr-clearfy-reset-warning-options {
|
271 |
+
height: 200px;
|
272 |
+
margin: -100px 0 0 -250px;
|
273 |
+
}
|
274 |
+
#WBCR .wbcr-clearfy-confirm-popup.wbcr-clearfy-reset-warning-options .wbcr-clearfy-reset-warning-message {
|
275 |
+
display: block;
|
276 |
+
margin: 10px 0;
|
277 |
+
}
|
278 |
+
#WBCR .wbcr-clearfy-confirm-popup .wbcr-clearfy-popup-buttons {
|
279 |
+
text-align: center;
|
280 |
+
padding: 10px;
|
281 |
+
}
|
282 |
+
#WBCR .wbcr-clearfy-confirm-popup .wbcr-clearfy-popup-buttons button {
|
283 |
+
display: inline-block;
|
284 |
+
padding: 7px 25px;
|
285 |
+
box-shadow: none;
|
286 |
+
border: 0;
|
287 |
+
font-weight: bold;
|
288 |
+
}
|
289 |
+
#WBCR .wbcr-clearfy-confirm-popup .wbcr-clearfy-popup-buttons button,
|
290 |
+
#WBCR .wbcr-clearfy-confirm-popup .wbcr-clearfy-popup-buttons button:focus {
|
291 |
+
outline: 0 !important;
|
292 |
+
box-shadow: none !important;
|
293 |
+
}
|
294 |
+
#WBCR .wbcr-clearfy-confirm-popup .wbcr-clearfy-popup-buttons button.wbcr-clearfy-popup-button-ok {
|
295 |
+
background: #FFEB3B;
|
296 |
+
color: #564f0d;
|
297 |
+
}
|
298 |
+
#WBCR .wbcr-clearfy-confirm-popup .wbcr-clearfy-popup-buttons button.wbcr-clearfy-cancel-mode {
|
299 |
+
background: #d6d6d6;
|
300 |
+
color: #5f5d5d;
|
301 |
+
}
|
302 |
#WBCR #wbcr-clearfy-quick-mode-board {
|
303 |
padding: 20px;
|
304 |
}
|
350 |
/*.fa, .dashicons:before {
|
351 |
color: #8bc34a;
|
352 |
}
|
|
|
353 |
& .wbcr-clearfy-button-activate-mode {
|
354 |
display: none !important;
|
355 |
}
|
444 |
color: #ffffff;
|
445 |
margin-top: 10px;
|
446 |
}
|
447 |
+
#WBCR .wclearfy-quick-start {
|
448 |
+
display: flex;
|
449 |
+
/*.wclearfy-gogle-page-speed-audit__errors {
|
450 |
+
display: none;
|
451 |
+
padding: 15px;
|
452 |
+
background: #fddfdf;
|
453 |
+
}*/
|
454 |
+
/*&__g-audit-start-button {
|
455 |
+
position: absolute;
|
456 |
+
display: block;
|
457 |
+
top: 50%;
|
458 |
+
left: 50%;
|
459 |
+
//padding: 15px 40px;
|
460 |
+
line-height: 4.3;
|
461 |
+
height: 50px;
|
462 |
+
width: 200px;
|
463 |
+
margin: -25px 0 0 -100px;
|
464 |
+
font-size: 12px;
|
465 |
+
text-transform: uppercase;
|
466 |
+
text-decoration: none;
|
467 |
+
text-align: center;
|
468 |
+
color: #a57b3c;
|
469 |
+
background-color: #fdd599;
|
470 |
+
font-weight: bold;
|
471 |
+
border-radius: 5px;
|
472 |
+
margin-top: 10px;
|
473 |
+
box-shadow: 0 1px 1px rgb(0 0 0%);
|
474 |
+
}*/
|
475 |
+
}
|
476 |
+
#WBCR .wclearfy-quick-start__left-column,
|
477 |
+
#WBCR .wclearfy-quick-start__right-column {
|
478 |
+
text-align: center;
|
479 |
+
padding: 15px;
|
480 |
+
box-sizing: border-box;
|
481 |
+
width: 25%;
|
482 |
+
display: flex;
|
483 |
+
flex-wrap: nowrap;
|
484 |
}
|
485 |
+
#WBCR .wclearfy-quick-start__left-column ul {
|
486 |
+
margin: 0 auto;
|
487 |
+
}
|
488 |
+
#WBCR .wclearfy-quick-start__left-column ul .wclearfy-quick-start__license-details {
|
489 |
+
text-align: left;
|
490 |
+
padding: 15px 15px 15px 0;
|
491 |
+
}
|
492 |
+
#WBCR .wclearfy-quick-start__left-column ul .wclearfy-quick-start__license-details-inner-wrap {
|
493 |
+
border-radius: 5px;
|
494 |
+
background: #efefef;
|
495 |
+
padding: 15px;
|
496 |
+
}
|
497 |
+
#WBCR .wclearfy-quick-start__right-column {
|
498 |
+
width: 75%;
|
499 |
+
}
|
500 |
+
#WBCR .wclearfy-quick-start__button {
|
501 |
+
display: block;
|
502 |
+
padding: 15px 40px;
|
503 |
+
margin-right: 20px;
|
504 |
+
font-size: 12px;
|
505 |
+
text-transform: uppercase;
|
506 |
+
text-decoration: none;
|
507 |
+
background: #eeeeee;
|
508 |
text-align: center;
|
509 |
+
color: #6d6d6d;
|
510 |
font-weight: bold;
|
511 |
+
border-radius: 5px;
|
512 |
+
margin-top: 10px;
|
513 |
+
box-shadow: 0 1px 1px rgb(0 0 0%);
|
514 |
}
|
515 |
+
#WBCR .wclearfy-quick-start__button:hover {
|
516 |
+
background: #f1f1f1;
|
|
|
517 |
}
|
518 |
+
#WBCR .wclearfy-quick-start__button--green {
|
519 |
+
color: #586549;
|
520 |
+
background-color: #c9deb2;
|
|
|
|
|
|
|
|
|
|
|
521 |
}
|
522 |
+
#WBCR .wclearfy-quick-start__button--green:hover {
|
523 |
+
background-color: #d1e3bd;
|
524 |
+
}
|
525 |
+
#WBCR .wclearfy-quick-start__button--orange {
|
526 |
+
color: #a57b3c;
|
527 |
+
background-color: #fdd599;
|
528 |
+
}
|
529 |
+
#WBCR .wclearfy-quick-start__button--orange:hover {
|
530 |
+
background-color: #fddba8;
|
531 |
+
}
|
532 |
+
#WBCR .wclearfy-quick-start__google-page-speed-preloader {
|
533 |
display: block;
|
534 |
+
width: 100%;
|
535 |
+
height: 100px;
|
536 |
+
background: url("../img/setup-preloader-124x124.gif") center no-repeat;
|
537 |
}
|
538 |
+
#WBCR .wclearfy-quick-start__g-audit {
|
539 |
+
position: relative;
|
540 |
+
width: 100%;
|
541 |
+
background: #ffffff;
|
542 |
+
margin: 10px 5px;
|
543 |
+
border-radius: 5px;
|
544 |
}
|
545 |
+
#WBCR .wclearfy-quick-start__g-audit a {
|
546 |
+
outline: 0;
|
547 |
+
text-decoration: none;
|
548 |
+
}
|
549 |
+
#WBCR .wclearfy-quick-start__g-audit-after-h2 {
|
550 |
+
font-size: 18px;
|
551 |
+
color: #87a76e;
|
552 |
+
}
|
553 |
+
#WBCR .wclearfy-quick-start__g-audit-before-h2 {
|
554 |
+
font-size: 18px;
|
555 |
+
color: #e49d7f;
|
556 |
+
}
|
557 |
+
#WBCR .wclearfy-quick-start__g-audit-score {
|
558 |
+
padding: 20px;
|
559 |
+
text-align: center;
|
560 |
+
}
|
561 |
+
#WBCR .wclearfy-quick-start__g-audit-desktop-score,
|
562 |
+
#WBCR .wclearfy-quick-start__g-audit-mobile-score {
|
563 |
+
display: inline-block;
|
564 |
+
width: 150px;
|
565 |
+
padding-left: 20px;
|
566 |
+
padding-right: 20px;
|
567 |
+
}
|
568 |
+
#WBCR .wclearfy-quick-start__g-audit-desktop-score h3,
|
569 |
+
#WBCR .wclearfy-quick-start__g-audit-mobile-score h3 {
|
570 |
+
font-size: 16px;
|
571 |
+
}
|
572 |
+
#WBCR .wclearfy-quick-start__g-audit-score-circle {
|
573 |
+
position: relative;
|
574 |
+
margin: 0 auto;
|
575 |
+
}
|
576 |
+
#WBCR .wclearfy-quick-start__g-audit-warging-text {
|
577 |
+
z-index: 2;
|
578 |
+
vertical-align: middle;
|
579 |
+
}
|
580 |
+
#WBCR .wclearfy-quick-start__g-audit-warging-text span {
|
581 |
display: block;
|
582 |
+
margin-top: 200px;
|
583 |
+
padding: 20px;
|
584 |
}
|
585 |
+
#WBCR .wclearfy-quick-start__g-audit-preloader,
|
586 |
+
#WBCR .wclearfy-quick-start__g-audit-overlay,
|
587 |
+
#WBCR .wclearfy-quick-start__g-audit-warging-text {
|
588 |
+
position: absolute;
|
589 |
+
top: 0;
|
590 |
+
left: 0;
|
591 |
+
right: 0;
|
592 |
+
bottom: 0;
|
593 |
+
}
|
594 |
+
#WBCR .wclearfy-quick-start__g-audit-preloader {
|
595 |
+
background: url("../img/g-audit-preloader2.gif") center no-repeat;
|
596 |
+
z-index: 3;
|
597 |
+
}
|
598 |
+
#WBCR .wclearfy-quick-start__g-audit-overlay {
|
599 |
+
background: rgba(255, 255, 255, 0.9);
|
600 |
+
z-index: 1;
|
601 |
+
text-align: center;
|
602 |
+
}
|
603 |
+
#WBCR .wclearfy-quick-start .wclearfy-status-circle-text {
|
604 |
+
position: absolute;
|
605 |
+
left: 50%;
|
606 |
+
top: 50%;
|
607 |
+
padding: 0;
|
608 |
+
margin: 0;
|
609 |
+
transform: translate(-50%, -50%);
|
610 |
+
color: #aaa;
|
611 |
+
font-family: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif;
|
612 |
+
font-size: 1.3125rem;
|
613 |
+
font-weight: 300;
|
614 |
+
line-height: 1.5;
|
615 |
+
}
|
616 |
+
#WBCR .wclearfy-quick-start .wclearfy-score-circle .wclearfy-status-overlay-text {
|
617 |
+
position: absolute;
|
618 |
+
left: 50%;
|
619 |
+
top: 50%;
|
620 |
+
padding: 0;
|
621 |
+
margin: 0;
|
622 |
+
width: 200%;
|
623 |
text-align: center;
|
624 |
+
transform: translate(-50%, -50%);
|
625 |
+
font-family: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif;
|
626 |
+
font-size: 0.875rem;
|
627 |
+
font-weight: normal;
|
628 |
+
line-height: 1.3125;
|
629 |
+
opacity: 0;
|
630 |
+
color: #777;
|
631 |
+
}
|
632 |
+
#WBCR .wclearfy-quick-start__g-audit-statistic {
|
633 |
padding: 10px;
|
634 |
+
font-family: Roboto, Helvetica, Arial, sans-serif;
|
635 |
+
font-size: 14px;
|
636 |
}
|
637 |
+
#WBCR .wclearfy-quick-start__g-audit-statistic-line {
|
638 |
+
border-bottom: 1px solid #ebebeb;
|
639 |
+
display: flex;
|
640 |
+
justify-content: space-between;
|
641 |
+
padding: 8px;
|
642 |
+
}
|
643 |
+
#WBCR .wclearfy-quick-start__g-audit-statistic-results {
|
644 |
+
padding-right: 5px;
|
645 |
font-weight: bold;
|
646 |
}
|
647 |
+
#WBCR .wclearfy-quick-start-docs {
|
648 |
+
display: flex;
|
|
|
|
|
649 |
}
|
650 |
+
#WBCR .wclearfy-quick-start-docs__column {
|
651 |
+
text-align: center;
|
652 |
+
padding: 0 15px 15px 15px;
|
653 |
+
box-sizing: border-box;
|
654 |
+
width: 33.3333%;
|
655 |
+
display: flex;
|
656 |
+
flex-wrap: nowrap;
|
657 |
}
|
658 |
+
#WBCR .wclearfy-quick-start-docs__column-inner-wrap {
|
659 |
+
width: 100%;
|
660 |
+
padding: 15px;
|
661 |
+
box-sizing: border-box;
|
662 |
+
background: #eeeeee;
|
663 |
+
}
|
664 |
+
#WBCR .wclearfy-quick-start-docs__column-inner-wrap ul {
|
665 |
+
margin: 0;
|
666 |
+
padding-left: 20px;
|
667 |
+
}
|
668 |
+
#WBCR .wclearfy-quick-start-docs__column-inner-wrap ul li {
|
669 |
+
text-align: left;
|
670 |
+
list-style: square;
|
671 |
+
}
|
672 |
+
#WBCR .wclearfy-quick-start-docs__column-inner-wrap ul li a {
|
673 |
+
color: #a8a8a8;
|
674 |
+
}
|
675 |
+
#WBCR .wclearfy-quick-start-docs__column-inner-wrap ul li a:hover {
|
676 |
+
color: #979696;
|
677 |
+
}
|
678 |
+
#WBCR .wbcr-factory-page-quick_start #wbcr-factory-clearfy-240__autocomplete {
|
679 |
+
width: 100%;
|
680 |
+
padding: 15px;
|
681 |
+
border-radius: 4px;
|
682 |
+
font-size: 20px;
|
683 |
+
box-sizing: border-box;
|
684 |
+
border-color: #d6d4d4;
|
685 |
}
|
686 |
@media screen and (max-width: 1380px) {
|
687 |
#WBCR #wbcr-clearfy-quick-mode-board {
|
admin/assets/css/general.css.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sources":["general.less"],"names":[],"mappings":";;;;;AAMA;EACE,aAAA;EACA,kBAAA;EACA,MAAA;EACA,WAAA;EACA,QAAA;EACA,SAAA;EACA,oCAAA;EACA,UAAA;;AAGF;;;;;;;;;;;;;;;;;;;;AAAA,KAGE,iDACE;EACE,uBAAA;;AALN,KAGE,iDACE,0BAGE,0BACE;EACE,qBAAA;;AATV,KAkBE;EACE,yBAAA;EACA,sBAAA;EACA,6BAAA;;AAEA,KALF,KAKI;EACA,yBAAA;EACA,qBAAA;;AAzBN,KA6BE;EACE,kBAAA;EACA,mBAAA;EACA,kBAAA;EACA,2CAAA;EACA,8CAAA;;AAEA,KAPF,qBAOG;EACC,SAAS,EAAT;EACA,cAAA;EACA,kBAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,YAAA;EACA,6EAAA;;AAGF,KAlBF,qBAkBG;EACC,cAAA;EACA,yBAAA;;AAGF,KAvBF,qBAuBG;EACC,cAAA;EACA,yBAAA;;AAtDN,KA0DE;AA1DF,KA0DyB;EACrB,qBAAA;EACA,mBAAA;;AA5DJ,KA+DE;EACE,WAAA;;AAhEJ,KA4EE,+BACE;EACE,kBAAA;EACA,qBAAA;EACA,iBAAA;EACA,mBAAA;EACA,UAAA;EACA,kBAAA;EACA,aAAA;EACA,gBAAA;EACA,2BAAA;;AAEA,KAZJ,+BACE,2BAWI;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;;AA3FR,KAoGE,kCACE;EACE,8BAAA;;AAtGN,KAoGE,kCAKE;EACE,8BAAA;;AA1GN,KAoGE,kCASE,yBACE;EACE,oBAAA;EACA,WAAA;;AAEA,KAdN,kCASE,yBACE,0BAII;EACA,WAAA;;AAnHV,KAyHE;EACE,kBAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EACA,kBAAA;;AAEA,KAPF,6BAOG;AAAQ,KAPX,6BAOY;EACR,YAAA;EACA,UAAA;EACA,yBAAA;EACA,SAAS,GAAT;EACA,SAAA;EACA,QAAA;EACA,kBAAA;EACA,oBAAA;;AAGF,KAlBF,6BAkBG;EACC,oCAAA;EACA,4BAAA;EACA,kBAAA;;AAGF,KAxBF,6BAwBG;EACC,oCAAA;EACA,4BAAA;EACA,kBAAA;;AApJN,KAwJE;EACE,mBAAA;EACA,yBAAA;EACA,cAAA;EACA,sCAAA;;AAEA,KANF,2BAMG;EACC,aAAA;;AA/JN,KAwJE,2BAUE;EACE,eAAA;;AAnKN,KAwJE,2BAcE;EACE,cAAA;EACA,eAAA;;AAxKN,
|
1 |
+
{"version":3,"sources":["general.less"],"names":[],"mappings":";;;;;AAMA;EACE,aAAA;EACA,kBAAA;EACA,MAAA;EACA,WAAA;EACA,QAAA;EACA,SAAA;EACA,oCAAA;EACA,UAAA;;AAGF;;;;;;;;;;;;;;;;;;;;AAAA,KAGE,iDACE;EACE,uBAAA;;AALN,KAGE,iDACE,0BAGE,0BACE;EACE,qBAAA;;AATV,KAkBE;EACE,yBAAA;EACA,sBAAA;EACA,6BAAA;;AAEA,KALF,KAKI;EACA,yBAAA;EACA,qBAAA;;AAzBN,KA6BE;EACE,kBAAA;EACA,mBAAA;EACA,kBAAA;EACA,2CAAA;EACA,8CAAA;;AAEA,KAPF,qBAOG;EACC,SAAS,EAAT;EACA,cAAA;EACA,kBAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,YAAA;EACA,6EAAA;;AAGF,KAlBF,qBAkBG;EACC,cAAA;EACA,yBAAA;;AAGF,KAvBF,qBAuBG;EACC,cAAA;EACA,yBAAA;;AAtDN,KA0DE;AA1DF,KA0DyB;EACrB,qBAAA;EACA,mBAAA;;AA5DJ,KA+DE;EACE,WAAA;;AAhEJ,KA4EE,+BACE;EACE,kBAAA;EACA,qBAAA;EACA,iBAAA;EACA,mBAAA;EACA,UAAA;EACA,kBAAA;EACA,aAAA;EACA,gBAAA;EACA,2BAAA;;AAEA,KAZJ,+BACE,2BAWI;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;;AA3FR,KAoGE,kCACE;EACE,8BAAA;;AAtGN,KAoGE,kCAKE;EACE,8BAAA;;AA1GN,KAoGE,kCASE,yBACE;EACE,oBAAA;EACA,WAAA;;AAEA,KAdN,kCASE,yBACE,0BAII;EACA,WAAA;;AAnHV,KAyHE;EACE,kBAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EACA,kBAAA;;AAEA,KAPF,6BAOG;AAAQ,KAPX,6BAOY;EACR,YAAA;EACA,UAAA;EACA,yBAAA;EACA,SAAS,GAAT;EACA,SAAA;EACA,QAAA;EACA,kBAAA;EACA,oBAAA;;AAGF,KAlBF,6BAkBG;EACC,oCAAA;EACA,4BAAA;EACA,kBAAA;;AAGF,KAxBF,6BAwBG;EACC,oCAAA;EACA,4BAAA;EACA,kBAAA;;AApJN,KAwJE;EACE,mBAAA;EACA,yBAAA;EACA,cAAA;EACA,sCAAA;;AAEA,KANF,2BAMG;EACC,aAAA;;AA/JN,KAwJE,2BAUE;EACE,eAAA;;AAnKN,KAwJE,2BAcE;EACE,cAAA;EACA,eAAA;;AAxKN,KA4KE;EACE,iBAAA;EACA,mBAAA;;AA9KJ,KAiLE;EACE,cAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,OAAO,aAAP;;AAEA,KAPF,wBAOG;EACC,SAAS,EAAT;EACA,kBAAA;EACA,QAAA;EACA,WAAA;EACA,QAAA;EACA,SAAA;EACA,mBAAA;EACA,2BAAA;EACA,yDAAA;;AAjMN,KA8ME,+BAEE;EACE,gBAAA;;AAjNN,KAqNE;AArNF,KAqNwC;EACpC,aAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;;AA3NJ,KA8NE;EACE,mBAAA;EACA,gCAAA;EACA,cAAA;;AAjOJ,KAoOE;EACE,mBAAA;EACA,gCAAA;EACA,cAAA;;AAvOJ,KA0OE;EACE,oBAAA;;AA3OJ,KA8OE;EACE,eAAA;EACA,iBAAA;;AAhPJ,KA8OE,4BAIE;EACE,cAAA;EACA,WAAA;EACA,gBAAA;EACA,cAAA;;AAtPN,KA8OE,4BAWE;EACE,WAAA;EACA,sBAAA;EACA,aAAA;EACA,oBAAA;EACA,SAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;EACA,yBAAA;EACA,WAAA;EACA,6BAAA;EACA,wBAAA;;AAvQN,KA8OE,4BA4BE;EACE,qBAAA;EACA,gBAAA;;AA5QN,KAiRE;EACE,aAAA;EACA,eAAA;EACA,QAAA;EACA,SAAA;EACA,YAAA;EACA,aAAA;EACA,yBAAA;EACA,aAAA;EACA,qCAAA;EACA,sCAAA;EACA,2CAAA;EACA,WAAA;;AA7RJ,KAiRE,4BAcE;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,eAAA;;AAnSN,KAiRE,4BAqBE;EACE,aAAA;EACA,kBAAA;;AAxSN,KAiRE,4BA0BE;EACE,aAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,mBAAA;EACA,cAAA;;AAOF,KAxCF,4BAwCG,qCACC;EACE,cAAA;;AAIJ,KA9CF,4BA8CG;EACC,aAAA;EACA,yBAAA;;AAFF,KA9CF,4BA8CG,mCAIC;EACE,cAAA;EACA,cAAA;;AArUR,KAiRE,4BAwDE;EACE,kBAAA;EACA,aAAA;;AA3UN,KAiRE,4BAwDE,4BAIE;EACE,qBAAA;EACA,iBAAA;EACA,gBAAA;EACA,SAAA;EACA,iBAAA;;AAEA,KAnEN,4BAwDE,4BAIE;AAOK,KAnET,4BAwDE,4BAIE,OAOM;EACF,qBAAA;EACA,2BAAA;;AAGF,KAxEN,4BAwDE,4BAIE,OAYG;EACC,mBAAA;EACA,cAAA;;AAGF,KA7EN,4BAwDE,4BAIE,OAiBG;EACC,mBAAA;EACA,cAAA;;AAhWV,KAwWE;EAEE,aAAA;;AA1WJ,KAwWE,+BAIE;EACE,kBAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,yBAAA;EACA,mBAAA;EACA,cAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,wCAAA;EAEA,qCAAA;EACA,kCAAA;EACA,gCAAA;EACA,6BAAA;;;;;;;;;;;AAEA,KAvBJ,+BAIE,qBAmBG;EACC,cAAA;EACA,WAAA;;AAjYR,KAwWE,+BAIE,qBAwBE;AApYN,KAwWE,+BAIE,qBAwBO;EAEH,eAAA;;AAtYR,KAwWE,+BAIE,qBA6BE;AAzYN,KAwWE,+BAIE,qBA6BO;AAzYX,KAwWE,+BAIE,qBA6BmB;EACf,qBAAA;;AA1YR,KAwWE,+BAIE,qBAiCE;EACE,iBAAA;EACA,eAAA;;AAGF,KA1CJ,+BAIE,qBAsCG;;;;;;;;;;;AAAD,KA1CJ,+BAIE,qBAsCG,oBAWC;EACE,yBAAA;EACA,cAAA;EACA,eAAA;;AAIJ,KA5DJ,+BAIE,qBAwDG,+BACC;EACE,YAAA;;AAFJ,KA5DJ,+BAIE,qBAwDG,+BACC,kCAGE;EACE,YAAA;EACA,yBAAA;EACA,cAAA;;AAEA,KArEV,+BAIE,qBAwDG,+BACC,kCAGE,mCAKG;EACC,yBAAA;;AAMR,KA5EJ,+BAIE,qBAwEG,qCACC;AADF,KA5EJ,+BAIE,qBAwEG,qCACM,WAAU;EACb,cAAA;;AAFJ,KA5EJ,+BAIE,qBAwEG,qCAKC;EACE,yBAAA;EACA,cAAA;;AAEA,KArFR,+BAIE,qBAwEG,qCAKC,mCAIG;EACC,yBAAA;;AAeN,KArGJ,+BAIE,qBAiGG,qBACC,kCACE;EACE,gBAAgB,wDAAhB;EACA,yBAAA;EACA,YAAA;EACA,0BAAA;;AAndZ,KAwWE,+BAIE,qBA4GE;EACE,kBAAA;EAGA,MAAA;EACA,WAAA;EACA,SAAA;EACA,YAAA;EAEA,iBAAA;EACA,qCAAA;EACA,kCAAA;EACA,gCAAA;EACA,6BAAA;;AAreR,KAwWE,+BAIE,qBA4GE,kCAeE;EACE,qBAAA;EACA,YAAA;EACA,gBAAA;EACA,SAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;EACA,kBAAA;EACA,aAAA;EACA,yBAAA;EACA,cAAA;;;;;;;;;;;;;;;;;;AAEA,KA7IR,+BAIE,qBA4GE,kCAeE,OAcG;EACC,yBAAA;;AAoBF,KAlKR,+BAIE,qBA4GE,kCAeE,OAmCG;EACC,8CAAA;;AA3gBZ,KAwWE,+BAIE,qBA4GE,kCAuDE;EACE,YAAA;EACA,yBAAA;EACA,cAAA;EACA,gBAAA;;AAnhBV,KAyhBE;EACE,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,KAHF,sBAGG;AAAe,KAHlB,sBAGmB;EACf,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;EACA,iBAAA;;AAGF,KAZF,sBAYG,aACC;EACE,cAAA;;AAFJ,KAZF,sBAYG,aACC,GAGE;EACE,gBAAA;EACA,yBAAA;;AAEA,KApBR,sBAYG,aACC,GAGE,uCAIG;EACC,kBAAA;EACA,mBAAA;EACA,aAAA;;AAMR,KA7BF,sBA6BG;EACC,UAAA;;AAGF,KAjCF,sBAiCG;EACC,cAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,yBAAA;EACA,qBAAA;EACA,mBAAA;EACA,kBAAA;EACA,cAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,sBAAsB,WAAtB;;AAEA,KAhDJ,sBAiCG,QAeE;EACC,mBAAA;;AAGF,KApDJ,sBAiCG,QAmBE;EACC,cAAA;EACA,yBAAA;;AAEA,KAxDN,sBAiCG,QAmBE,OAIE;EACC,yBAAA;;AAIJ,KA7DJ,sBAiCG,QA4BE;EACC,cAAA;EACA,yBAAA;;AAEA,KAjEN,sBAiCG,QA4BE,QAIE;EACC,yBAAA;;AAKN,KAvEF,sBAuEG;EACC,cAAA;EACA,WAAA;EACA,aAAA;EACA,gBAAgB,sDAAhB;;AASF,KApFF,sBAoFG;EACC,kBAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;;AALF,KApFF,sBAoFG,SAOC;EACE,UAAA;EACA,qBAAA;;AAIF,KAjGJ,sBAoFG,SAaE;EACC,eAAA;EACA,cAAA;;AAGF,KAtGJ,sBAoFG,SAkBE;EACC,eAAA;EACA,cAAA;;AAIJ,KA5GF,sBA4GG;EACC,aAAA;EACA,kBAAA;;AAGF,KAjHF,sBAiHG;AAAyB,KAjH5B,sBAiH6B;EACzB,qBAAA;EACA,YAAA;EACA,kBAAA;EACA,mBAAA;;AAJF,KAjHF,sBAiHG,uBAOC;AAPwB,KAjH5B,sBAiH6B,sBAOzB;EACE,eAAA;;AAIJ,KA7HF,sBA6HG;EACC,kBAAA;EACA,cAAA;;AAyBF,KAxJF,sBAwJG;EACC,UAAA;EACA,sBAAA;;AAFF,KAxJF,sBAwJG,sBAIC;EACE,cAAA;EACA,iBAAA;EACA,aAAA;;AAIJ,KAnKF,sBAmKG;AACD,KApKF,sBAoKG;AACD,KArKF,sBAqKG;EACC,kBAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;;AAGF,KA7KF,sBA6KG;EACC,gBAAgB,iDAAhB;EACA,UAAA;;AAGF,KAlLF,sBAkLG;EAEC,oCAAA;EACA,UAAA;EACA,kBAAA;;AA/sBN,KAyhBE,sBA0LE;EACE,kBAAA;EACA,SAAA;EACA,QAAA;EACA,UAAA;EACA,SAAA;EACA,WAAW,qBAAX;EACA,WAAA;EACA,qBAAqB,8CAArB;EACA,oBAAA;EACA,gBAAA;EACA,gBAAA;;AA9tBN,KAyhBE,sBAwME,uBAAuB;EACrB,kBAAA;EACA,SAAA;EACA,QAAA;EACA,UAAA;EACA,SAAA;EACA,WAAA;EACA,kBAAA;EACA,WAAW,qBAAX;EACA,qBAAqB,8CAArB;EACA,mBAAA;EACA,mBAAA;EACA,mBAAA;EACA,UAAA;EACA,WAAA;;AAGF,KAzNF,sBAyNG;EACC,aAAA;EACA,iDAAA;EACA,eAAA;;AAEA,KA9NJ,sBAyNG,mBAKE;EACC,gCAAA;EACA,aAAA;EACA,8BAAA;EACA,YAAA;;AAGF,KArOJ,sBAyNG,mBAYE;EACC,kBAAA;EACA,iBAAA;;AAhwBR,KAqwBE;EACE,aAAA;;AAEA,KAHF,2BAGG;EACC,kBAAA;EACA,yBAAA;EACA,sBAAA;EACA,eAAA;EACA,aAAA;EACA,iBAAA;;AAGF,KAZF,2BAYG;EACC,WAAA;EACA,aAAA;EACA,sBAAA;EACA,mBAAA;;AAJF,KAZF,2BAYG,mBAMC;EACE,SAAA;EACA,kBAAA;;AARJ,KAZF,2BAYG,mBAMC,GAIE;EACE,gBAAA;EACA,kBAAA;;AAZN,KAZF,2BAYG,mBAMC,GAIE,GAIE;EACE,cAAA;;AAEA,KA7BV,2BAYG,mBAMC,GAIE,GAIE,EAGG;EACC,cAAA;;AAnyBd,KA2yBE,+BACE;EACE,WAAA;EACA,aAAA;EACA,kBAAA;EACA,eAAA;EACA,sBAAA;EACA,qBAAA;;AAKN,mBAAsC;EACpC,KACE;IACE,gBAAA;IACA,gBAAA;;EAHJ,KAME;EANF,KAMyB;IACrB,WAAA;;EAPJ,KAUE;IACE,gBAAA;;;AAKN,mBAAqC;EACnC,KACE;IACE,eAAA;;EAFJ,KAKE;EALF,KAKyB;IACrB,WAAA;;EANJ,KASE;IACE,WAAA;IACA,eAAA;;;AAKN,mBAAqC;EACnC,KACE,+BACE,qBAAqB;IACnB,uBAAA","file":"general.css"}
|
admin/assets/img/g-audit-preloader2.gif
ADDED
Binary file
|
admin/assets/js/general.js
CHANGED
@@ -13,32 +13,28 @@
|
|
13 |
this.qickStartAssistent();
|
14 |
this.importOptions();
|
15 |
|
16 |
-
/*$.
|
17 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
18 |
if( !$('#WBCR').length ) {
|
19 |
return false;
|
20 |
}
|
21 |
-
|
22 |
if( button.closest('.wbcr-clr-new-component').length ) {
|
23 |
button.closest('.wbcr-clr-new-component').remove();
|
24 |
}
|
25 |
-
|
26 |
if( button.closest('.wbcr-clearfy-fake-image-optimizer-board').length ) {
|
27 |
button.remove();
|
28 |
window.location.reload();
|
29 |
}
|
30 |
});*/
|
31 |
|
32 |
-
/*$.
|
33 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
34 |
-
if( !($('#WBCR').length && $.
|
35 |
return false;
|
36 |
}
|
37 |
-
|
38 |
if( response.data.need_rewrite_rules && !$('.wbcr-clr-need-rewrite-rules-message').length ) {
|
39 |
-
$.
|
40 |
}
|
41 |
-
|
42 |
});*/
|
43 |
},
|
44 |
qickStartAssistent: function() {
|
@@ -66,20 +62,16 @@
|
|
66 |
var $this = $(this),
|
67 |
switcher = $(this).closest('.wbcr-clearfy-switch'),
|
68 |
modeName = switcher.data('mode');
|
69 |
-
|
70 |
if( switcher.hasClass('wbcr-clearfy-loading') ) {
|
71 |
return false;
|
72 |
}
|
73 |
-
|
74 |
switcher.addClass('wbcr-clearfy-loading');
|
75 |
-
|
76 |
self.sendRequest({
|
77 |
action: 'wbcr_clearfy_configurate',
|
78 |
mode: modeName,
|
79 |
cancel_mode: true
|
80 |
}, function(data) {
|
81 |
switcher.removeClass('wbcr-clearfy-loading');
|
82 |
-
|
83 |
if( data && data.export_options ) {
|
84 |
$('#wbcr-clearfy-import-export').html(data.export_options);
|
85 |
}
|
@@ -115,13 +107,13 @@
|
|
115 |
* Хук выполняет проивольную функцию, после того как получен ajax ответ о том, что в
|
116 |
* результате конфигурации произошла ошибка Реализация системы фильтров и хуков в файле
|
117 |
* libs/clearfy/admin/assests/js/global.js Пример регистрации хука
|
118 |
-
* $.
|
119 |
* function(noticeId) {});
|
120 |
* @param {string} modeName - имя режима конфигурации
|
121 |
* @param {object} data
|
122 |
*/
|
123 |
|
124 |
-
$.
|
125 |
modeName,
|
126 |
data
|
127 |
]);
|
@@ -138,12 +130,12 @@
|
|
138 |
* Хук выполняет проивольную функцию, после того как получен ajax ответ об успешном выполнении
|
139 |
* конфигурации Реализация системы фильтров и хуков в файле
|
140 |
* libs/clearfy/admin/assests/js/global.js Пример регистрации хука
|
141 |
-
* $.
|
142 |
* {});
|
143 |
* @param {string} modeName - имя режима конфигурации
|
144 |
* @param {object} data
|
145 |
*/
|
146 |
-
$.
|
147 |
|
148 |
if( modeName !== 'reset' ) {
|
149 |
switcher.addClass('wbcr-clearfy-active');
|
@@ -211,12 +203,12 @@
|
|
211 |
$this = $(this);
|
212 |
|
213 |
if( !settings ) {
|
214 |
-
$.
|
215 |
return false;
|
216 |
}
|
217 |
|
218 |
if( void 0 === wbcr_clearfy_ajax || !wbcr_clearfy_ajax.import_options_nonce ) {
|
219 |
-
$.
|
220 |
return false;
|
221 |
}
|
222 |
|
@@ -231,7 +223,7 @@
|
|
231 |
|
232 |
if( response.data.update_notice ) {
|
233 |
if( !$('.wbcr-clr-update-package').length ) {
|
234 |
-
$.
|
235 |
}
|
236 |
} else {
|
237 |
if( $('.wbcr-clr-update-package').length ) {
|
@@ -268,15 +260,15 @@
|
|
268 |
console.log(data);
|
269 |
|
270 |
if( data ) {
|
271 |
-
noticeId = $.
|
272 |
} else {
|
273 |
if( void 0 !== wbcr_clearfy_ajax ) {
|
274 |
-
noticeId = $.
|
275 |
}
|
276 |
}
|
277 |
|
278 |
setTimeout(function() {
|
279 |
-
$.
|
280 |
}, 5000);
|
281 |
return;
|
282 |
}
|
@@ -285,10 +277,10 @@
|
|
285 |
|
286 |
if( !request_data.flush_redirect ) {
|
287 |
if( void 0 !== wbcr_clearfy_ajax ) {
|
288 |
-
noticeId = $.
|
289 |
|
290 |
setTimeout(function() {
|
291 |
-
$.
|
292 |
}, 5000);
|
293 |
}
|
294 |
return;
|
@@ -303,18 +295,14 @@
|
|
303 |
console.log(xhr.responseText);
|
304 |
console.log(thrownError);
|
305 |
|
306 |
-
var noticeId = $.
|
307 |
}
|
308 |
});
|
309 |
}
|
310 |
};
|
311 |
|
312 |
-
|
313 |
$(document).ready(function() {
|
314 |
general.init();
|
315 |
});
|
316 |
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
})(jQuery);
|
13 |
this.qickStartAssistent();
|
14 |
this.importOptions();
|
15 |
|
16 |
+
/*$.wfactory_448.hooks.add('core/components/pre_activate', function(button) {
|
17 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
18 |
if( !$('#WBCR').length ) {
|
19 |
return false;
|
20 |
}
|
|
|
21 |
if( button.closest('.wbcr-clr-new-component').length ) {
|
22 |
button.closest('.wbcr-clr-new-component').remove();
|
23 |
}
|
|
|
24 |
if( button.closest('.wbcr-clearfy-fake-image-optimizer-board').length ) {
|
25 |
button.remove();
|
26 |
window.location.reload();
|
27 |
}
|
28 |
});*/
|
29 |
|
30 |
+
/*$.wfactory_448.hooks.add('core/components/updated', function(button, data, response) {
|
31 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
32 |
+
if( !($('#WBCR').length && $.wbcr_factory_clearfy_240) ) {
|
33 |
return false;
|
34 |
}
|
|
|
35 |
if( response.data.need_rewrite_rules && !$('.wbcr-clr-need-rewrite-rules-message').length ) {
|
36 |
+
$.wbcr_factory_clearfy_240.app.showNotice(response.data.need_rewrite_rules, 'warning');
|
37 |
}
|
|
|
38 |
});*/
|
39 |
},
|
40 |
qickStartAssistent: function() {
|
62 |
var $this = $(this),
|
63 |
switcher = $(this).closest('.wbcr-clearfy-switch'),
|
64 |
modeName = switcher.data('mode');
|
|
|
65 |
if( switcher.hasClass('wbcr-clearfy-loading') ) {
|
66 |
return false;
|
67 |
}
|
|
|
68 |
switcher.addClass('wbcr-clearfy-loading');
|
|
|
69 |
self.sendRequest({
|
70 |
action: 'wbcr_clearfy_configurate',
|
71 |
mode: modeName,
|
72 |
cancel_mode: true
|
73 |
}, function(data) {
|
74 |
switcher.removeClass('wbcr-clearfy-loading');
|
|
|
75 |
if( data && data.export_options ) {
|
76 |
$('#wbcr-clearfy-import-export').html(data.export_options);
|
77 |
}
|
107 |
* Хук выполняет проивольную функцию, после того как получен ajax ответ о том, что в
|
108 |
* результате конфигурации произошла ошибка Реализация системы фильтров и хуков в файле
|
109 |
* libs/clearfy/admin/assests/js/global.js Пример регистрации хука
|
110 |
+
* $.wbcr_factory_clearfy_240.hooks.add('wbcr/factory_clearfy_240/updated',
|
111 |
* function(noticeId) {});
|
112 |
* @param {string} modeName - имя режима конфигурации
|
113 |
* @param {object} data
|
114 |
*/
|
115 |
|
116 |
+
$.wbcr_factory_clearfy_240.hooks.run('clearfy/quick_start/configurated_error', [
|
117 |
modeName,
|
118 |
data
|
119 |
]);
|
130 |
* Хук выполняет проивольную функцию, после того как получен ajax ответ об успешном выполнении
|
131 |
* конфигурации Реализация системы фильтров и хуков в файле
|
132 |
* libs/clearfy/admin/assests/js/global.js Пример регистрации хука
|
133 |
+
* $.wbcr_factory_clearfy_240.hooks.add('wbcr/factory_clearfy_240/updated', function(noticeId)
|
134 |
* {});
|
135 |
* @param {string} modeName - имя режима конфигурации
|
136 |
* @param {object} data
|
137 |
*/
|
138 |
+
$.wbcr_factory_clearfy_240.hooks.run('clearfy/quick_start/configurated', [modeName, data]);
|
139 |
|
140 |
if( modeName !== 'reset' ) {
|
141 |
switcher.addClass('wbcr-clearfy-active');
|
203 |
$this = $(this);
|
204 |
|
205 |
if( !settings ) {
|
206 |
+
$.wbcr_factory_clearfy_240.app.showNotice('Import options is empty!', 'danger');
|
207 |
return false;
|
208 |
}
|
209 |
|
210 |
if( void 0 === wbcr_clearfy_ajax || !wbcr_clearfy_ajax.import_options_nonce ) {
|
211 |
+
$.wbcr_factory_clearfy_240.app.showNotice('Unknown Javascript error, most likely the wbcr_clearfy_ajax variable does not exist!', 'danger');
|
212 |
return false;
|
213 |
}
|
214 |
|
223 |
|
224 |
if( response.data.update_notice ) {
|
225 |
if( !$('.wbcr-clr-update-package').length ) {
|
226 |
+
$.wbcr_factory_clearfy_240.app.showNotice(response.data.update_notice);
|
227 |
}
|
228 |
} else {
|
229 |
if( $('.wbcr-clr-update-package').length ) {
|
260 |
console.log(data);
|
261 |
|
262 |
if( data ) {
|
263 |
+
noticeId = $.wbcr_factory_clearfy_240.app.showNotice(data.error_message, 'danger');
|
264 |
} else {
|
265 |
if( void 0 !== wbcr_clearfy_ajax ) {
|
266 |
+
noticeId = $.wbcr_factory_clearfy_240.app.showNotice(wbcr_clearfy_ajax.i18n.unknown_error, 'danger');
|
267 |
}
|
268 |
}
|
269 |
|
270 |
setTimeout(function() {
|
271 |
+
$.wbcr_factory_clearfy_240.app.hideNotice(noticeId);
|
272 |
}, 5000);
|
273 |
return;
|
274 |
}
|
277 |
|
278 |
if( !request_data.flush_redirect ) {
|
279 |
if( void 0 !== wbcr_clearfy_ajax ) {
|
280 |
+
noticeId = $.wbcr_factory_clearfy_240.app.showNotice(wbcr_clearfy_ajax.i18n.success_update_settings, 'success');
|
281 |
|
282 |
setTimeout(function() {
|
283 |
+
$.wbcr_factory_clearfy_240.app.hideNotice(noticeId);
|
284 |
}, 5000);
|
285 |
}
|
286 |
return;
|
295 |
console.log(xhr.responseText);
|
296 |
console.log(thrownError);
|
297 |
|
298 |
+
var noticeId = $.wbcr_factory_clearfy_240.app.showNotice('Error: [' + thrownError + '] Status: [' + xhr.status + '] Error massage: [' + xhr.responseText + ']', 'danger');
|
299 |
}
|
300 |
});
|
301 |
}
|
302 |
};
|
303 |
|
|
|
304 |
$(document).ready(function() {
|
305 |
general.init();
|
306 |
});
|
307 |
|
308 |
+
})(jQuery);
|
|
|
|
|
|
admin/assets/js/google-page-speed-audit.js
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Setup master
|
3 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
4 |
+
* @copyright (c) 12.08.2020, Webcraftic
|
5 |
+
* @version 1.0
|
6 |
+
*/
|
7 |
+
|
8 |
+
(function($) {
|
9 |
+
'use strict';
|
10 |
+
|
11 |
+
window.wclearfy_fetch_google_pagespeed_audit = function(nonce, flush_cache) {
|
12 |
+
|
13 |
+
let data = {
|
14 |
+
action: 'wclearfy-google-pagespeed-audit-results',
|
15 |
+
flush_cache: flush_cache,
|
16 |
+
_wpnonce: nonce,
|
17 |
+
};
|
18 |
+
|
19 |
+
$.ajax(ajaxurl, {
|
20 |
+
type: 'post',
|
21 |
+
dataType: 'json',
|
22 |
+
data: data,
|
23 |
+
success: function(response) {
|
24 |
+
console.log(response);
|
25 |
+
|
26 |
+
if( !response || !response.success ) {
|
27 |
+
if( response.data ) {
|
28 |
+
console.log(response.data.error);
|
29 |
+
$('.wclearfy-gogle-page-speed-audit__errors').text(response.data.error).show();
|
30 |
+
} else {
|
31 |
+
console.log(response);
|
32 |
+
}
|
33 |
+
return;
|
34 |
+
}
|
35 |
+
|
36 |
+
//$('.wclearfy-quick-start__google-page-speed-audit').show();
|
37 |
+
|
38 |
+
if( response.data ) {
|
39 |
+
if( response.data.before ) {
|
40 |
+
if( !response.data.before.fake ) {
|
41 |
+
$('.wclearfy-quick-start__g-audit-overlay', '#wclearfy-quick-start__g-audit-before').hide();
|
42 |
+
$('.wclearfy-quick-start__g-audit-preloader', '#wclearfy-quick-start__g-audit-before').hide();
|
43 |
+
} //else {
|
44 |
+
//$('#wclearfy-quick-start__g-audit-warging-text-1').show();
|
45 |
+
//$('.wclearfy-quick-start__g-audit-preloader', '#wclearfy-quick-start__g-audit-after').hide();
|
46 |
+
//}
|
47 |
+
|
48 |
+
$('.wclearfy-quick-start__g-audit-desktop-score-circle', '#wclearfy-quick-start__g-audit-before').wfCircularProgress({
|
49 |
+
endPercent: (response.data.before.desktop.performance_score / 100),
|
50 |
+
color: get_color(response.data.before.desktop.performance_score),
|
51 |
+
inactiveColor: '#ececec',
|
52 |
+
strokeWidth: 3,
|
53 |
+
diameter: 100,
|
54 |
+
});
|
55 |
+
|
56 |
+
$('.wclearfy-quick-start__g-audit-mobile-score-circle', '#wclearfy-quick-start__g-audit-before').wfCircularProgress({
|
57 |
+
endPercent: (response.data.before.mobile.performance_score / 100),
|
58 |
+
color: get_color(response.data.before.mobile.performance_score),
|
59 |
+
inactiveColor: '#ececec',
|
60 |
+
strokeWidth: 3,
|
61 |
+
diameter: 100,
|
62 |
+
});
|
63 |
+
|
64 |
+
// DESKTOP
|
65 |
+
$('.wclearfy-quick-start__g-audit-statistic--desktop-first-contentful-paint', '#wclearfy-quick-start__g-audit-before')
|
66 |
+
.text(response.data.before.desktop.performance_score);
|
67 |
+
$('.wclearfy-quick-start__g-audit-statistic--desktop-speed-index', '#wclearfy-quick-start__g-audit-before')
|
68 |
+
.text(response.data.before.desktop.speed_index);
|
69 |
+
$('.wclearfy-quick-start__g-audit-statistic--desktop-interactive', '#wclearfy-quick-start__g-audit-before')
|
70 |
+
.text(response.data.before.desktop.interactive);
|
71 |
+
|
72 |
+
// MOBILE
|
73 |
+
$('.wclearfy-quick-start__g-audit-statistic--mobile-first-contentful-paint', '#wclearfy-quick-start__g-audit-before')
|
74 |
+
.text(response.data.before.mobile.performance_score);
|
75 |
+
$('.wclearfy-quick-start__g-audit-statistic--mobile-speed-index', '#wclearfy-quick-start__g-audit-before')
|
76 |
+
.text(response.data.before.mobile.speed_index);
|
77 |
+
$('.wclearfy-quick-start__g-audit-statistic--mobile-interactive', '#wclearfy-quick-start__g-audit-before')
|
78 |
+
.text(response.data.before.mobile.interactive);
|
79 |
+
}
|
80 |
+
if( response.data.after ) {
|
81 |
+
if( !response.data.after.fake ) {
|
82 |
+
$('.wclearfy-quick-start__g-audit-overlay', '#wclearfy-quick-start__g-audit-after').hide();
|
83 |
+
$('.wclearfy-quick-start__g-audit-preloader', '#wclearfy-quick-start__g-audit-after').hide();
|
84 |
+
} //else {
|
85 |
+
//$('#wclearfy-quick-start__g-audit-warging-text-2').show();
|
86 |
+
//$('.wclearfy-quick-start__g-audit-preloader', '#wclearfy-quick-start__g-audit-after').hide();
|
87 |
+
//}
|
88 |
+
|
89 |
+
$('.wclearfy-quick-start__g-audit-desktop-score-circle', '#wclearfy-quick-start__g-audit-after').wfCircularProgress({
|
90 |
+
endPercent: (response.data.after.desktop.performance_score / 100),
|
91 |
+
color: get_color(response.data.after.desktop.performance_score),
|
92 |
+
inactiveColor: '#ececec',
|
93 |
+
strokeWidth: 3,
|
94 |
+
diameter: 100,
|
95 |
+
});
|
96 |
+
|
97 |
+
$('.wclearfy-quick-start__g-audit-mobile-score-circle', '#wclearfy-quick-start__g-audit-after').wfCircularProgress({
|
98 |
+
endPercent: (response.data.after.mobile.performance_score / 100),
|
99 |
+
color: get_color(response.data.after.mobile.performance_score),
|
100 |
+
inactiveColor: '#ececec',
|
101 |
+
strokeWidth: 3,
|
102 |
+
diameter: 100,
|
103 |
+
});
|
104 |
+
|
105 |
+
// DESKTOP
|
106 |
+
$('.wclearfy-quick-start__g-audit-statistic--desktop-first-contentful-paint', '#wclearfy-quick-start__g-audit-after')
|
107 |
+
.text(response.data.after.desktop.performance_score);
|
108 |
+
$('.wclearfy-quick-start__g-audit-statistic--desktop-speed-index', '#wclearfy-quick-start__g-audit-after')
|
109 |
+
.text(response.data.after.desktop.speed_index);
|
110 |
+
$('.wclearfy-quick-start__g-audit-statistic--desktop-interactive', '#wclearfy-quick-start__g-audit-after')
|
111 |
+
.text(response.data.after.desktop.interactive);
|
112 |
+
// MOBILE
|
113 |
+
$('.wclearfy-quick-start__g-audit-statistic--mobile-first-contentful-paint', '#wclearfy-quick-start__g-audit-after')
|
114 |
+
.text(response.data.after.mobile.performance_score);
|
115 |
+
$('.wclearfy-quick-start__g-audit-statistic--mobile-speed-index', '#wclearfy-quick-start__g-audit-after')
|
116 |
+
.text(response.data.after.mobile.speed_index);
|
117 |
+
$('.wclearfy-quick-start__g-audit-statistic--mobile-interactive', '#wclearfy-quick-start__g-audit-after')
|
118 |
+
.text(response.data.after.mobile.interactive);
|
119 |
+
}
|
120 |
+
}
|
121 |
+
},
|
122 |
+
error: function(xhr, ajaxOptions, thrownError) {
|
123 |
+
|
124 |
+
$('.wclearfy-gogle-page-speed-audit__preloader').hide();
|
125 |
+
|
126 |
+
console.log(xhr.status);
|
127 |
+
console.log(xhr.responseText);
|
128 |
+
console.log(thrownError);
|
129 |
+
|
130 |
+
$('.wclearfy-gogle-page-speed-audit__errors').text('Status: ' + xhr.status + 'Error:' + xhr.responseText).show();
|
131 |
+
}
|
132 |
+
});
|
133 |
+
|
134 |
+
function get_color(score) {
|
135 |
+
let desktopColor;
|
136 |
+
|
137 |
+
if( score > 70 ) {
|
138 |
+
desktopColor = '#a8d207';
|
139 |
+
} else if( score > 40 ) {
|
140 |
+
desktopColor = '#f18727';
|
141 |
+
} else {
|
142 |
+
desktopColor = '#cd2727';
|
143 |
+
}
|
144 |
+
|
145 |
+
return desktopColor;
|
146 |
+
}
|
147 |
+
}
|
148 |
+
})(jQuery);
|
admin/assets/js/license-manager.js
CHANGED
@@ -20,7 +20,7 @@ jQuery(function($) {
|
|
20 |
// Глобальные уведомления не трогаем
|
21 |
|
22 |
for( i = 0; i < allNotices.length; i++ ) {
|
23 |
-
$.
|
24 |
}
|
25 |
|
26 |
$('.wcl-control-btn').hide();
|
@@ -55,7 +55,7 @@ jQuery(function($) {
|
|
55 |
|
56 |
if( response.data ) {
|
57 |
console.log(response.data.error_message);
|
58 |
-
noticeId = $.
|
59 |
allNotices.push(noticeId);
|
60 |
} else {
|
61 |
console.log(response);
|
@@ -65,7 +65,7 @@ jQuery(function($) {
|
|
65 |
}
|
66 |
|
67 |
if( response.data && response.data.message ) {
|
68 |
-
noticeId = $.
|
69 |
allNotices.push(noticeId);
|
70 |
|
71 |
// todo: доработать генерацию формы, вместо перезагрузки страницы
|
@@ -82,7 +82,7 @@ jQuery(function($) {
|
|
82 |
console.log(xhr.responseText);
|
83 |
console.log(thrownError);
|
84 |
|
85 |
-
var noticeId = $.
|
86 |
|
87 |
allNotices.push(noticeId);
|
88 |
}
|
20 |
// Глобальные уведомления не трогаем
|
21 |
|
22 |
for( i = 0; i < allNotices.length; i++ ) {
|
23 |
+
$.wbcr_factory_clearfy_240.app.hideNotice(allNotices[i]);
|
24 |
}
|
25 |
|
26 |
$('.wcl-control-btn').hide();
|
55 |
|
56 |
if( response.data ) {
|
57 |
console.log(response.data.error_message);
|
58 |
+
noticeId = $.wbcr_factory_clearfy_240.app.showNotice('Error: [' + response.data.error_message + ']', 'danger');
|
59 |
allNotices.push(noticeId);
|
60 |
} else {
|
61 |
console.log(response);
|
65 |
}
|
66 |
|
67 |
if( response.data && response.data.message ) {
|
68 |
+
noticeId = $.wbcr_factory_clearfy_240.app.showNotice(response.data.message, 'success');
|
69 |
allNotices.push(noticeId);
|
70 |
|
71 |
// todo: доработать генерацию формы, вместо перезагрузки страницы
|
82 |
console.log(xhr.responseText);
|
83 |
console.log(thrownError);
|
84 |
|
85 |
+
var noticeId = $.wbcr_factory_clearfy_240.app.showNotice('Error: [' + thrownError + '] Status: [' + xhr.status + '] Error massage: [' + xhr.responseText + ']', 'danger');
|
86 |
|
87 |
allNotices.push(noticeId);
|
88 |
}
|
admin/boot.php
CHANGED
@@ -21,7 +21,7 @@ if( !defined('ABSPATH') ) {
|
|
21 |
* Уведомление будет показано на всех страницах Clearfy и его компонентах.
|
22 |
*
|
23 |
* @param WCL_Plugin $plugin
|
24 |
-
* @param
|
25 |
*/
|
26 |
|
27 |
add_action('wbcr/factory/pages/impressive/print_all_notices', function ($plugin, $obj) {
|
@@ -50,7 +50,7 @@ add_action('admin_init', function () {
|
|
50 |
if( WCL_Helper::is_need_show_setup_page() ) {
|
51 |
try {
|
52 |
$redirect_url = '';
|
53 |
-
if( class_exists('
|
54 |
$redirect_url = WCL_Plugin::app()->getPluginPageUrl('setup', ['wclearfy_setup_page_viewed' => 1]);
|
55 |
}
|
56 |
if( $redirect_url ) {
|
@@ -84,8 +84,8 @@ add_action('wbcr/factory/pages/impressive/header', function ($plugin_name) {
|
|
84 |
|
85 |
/**
|
86 |
* @param $form
|
87 |
-
* @param
|
88 |
-
* @param
|
89 |
*/
|
90 |
function wbcr_clearfy_multisite_before_save($form, $plugin, $obj)
|
91 |
{
|
@@ -127,7 +127,7 @@ add_action('wbcr/factory/pages/impressive/plugin_title', 'wbcr_clearfy_branding'
|
|
127 |
wp_enqueue_style('wbcr-clearfy-install-components', WCL_PLUGIN_URL . '/admin/assets/css/install-addons.css', [], WCL_Plugin::app()->getPluginVersion());
|
128 |
wp_enqueue_script('wbcr-clearfy-install-components', WCL_PLUGIN_URL . '/admin/assets/js/install-addons.js', [
|
129 |
'jquery',
|
130 |
-
'wbcr-factory-clearfy-
|
131 |
], WCL_Plugin::app()->getPluginVersion());
|
132 |
});*/
|
133 |
|
@@ -147,7 +147,7 @@ add_filter('flush_rewrite_rules_hard', 'wbcr_clearfy_flush_rewrite_rules');
|
|
147 |
* Обновить постоынные ссылки, после выполнения быстрых настроек
|
148 |
*
|
149 |
* @param WHM_Plugin $plugin
|
150 |
-
* @param
|
151 |
*/
|
152 |
function wbcr_clearfy_after_form_save($plugin, $obj)
|
153 |
{
|
@@ -170,7 +170,7 @@ add_action('wbcr/factory/pages/impressive/after_form_save', 'wbcr_clearfy_after_
|
|
170 |
*
|
171 |
* @param array $widgets
|
172 |
* @param string $position
|
173 |
-
* @param
|
174 |
*/
|
175 |
|
176 |
add_filter('wbcr/factory/pages/impressive/widgets', function ($widgets, $position, $plugin) {
|
21 |
* Уведомление будет показано на всех страницах Clearfy и его компонентах.
|
22 |
*
|
23 |
* @param WCL_Plugin $plugin
|
24 |
+
* @param Wbcr_FactoryPages447_ImpressiveThemplate $obj
|
25 |
*/
|
26 |
|
27 |
add_action('wbcr/factory/pages/impressive/print_all_notices', function ($plugin, $obj) {
|
50 |
if( WCL_Helper::is_need_show_setup_page() ) {
|
51 |
try {
|
52 |
$redirect_url = '';
|
53 |
+
if( class_exists('Wbcr_FactoryPages447') ) {
|
54 |
$redirect_url = WCL_Plugin::app()->getPluginPageUrl('setup', ['wclearfy_setup_page_viewed' => 1]);
|
55 |
}
|
56 |
if( $redirect_url ) {
|
84 |
|
85 |
/**
|
86 |
* @param $form
|
87 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
88 |
+
* @param Wbcr_FactoryPages447_ImpressiveThemplate $obj
|
89 |
*/
|
90 |
function wbcr_clearfy_multisite_before_save($form, $plugin, $obj)
|
91 |
{
|
127 |
wp_enqueue_style('wbcr-clearfy-install-components', WCL_PLUGIN_URL . '/admin/assets/css/install-addons.css', [], WCL_Plugin::app()->getPluginVersion());
|
128 |
wp_enqueue_script('wbcr-clearfy-install-components', WCL_PLUGIN_URL . '/admin/assets/js/install-addons.js', [
|
129 |
'jquery',
|
130 |
+
'wbcr-factory-clearfy-240-global'
|
131 |
], WCL_Plugin::app()->getPluginVersion());
|
132 |
});*/
|
133 |
|
147 |
* Обновить постоынные ссылки, после выполнения быстрых настроек
|
148 |
*
|
149 |
* @param WHM_Plugin $plugin
|
150 |
+
* @param Wbcr_FactoryPages447_ImpressiveThemplate $obj
|
151 |
*/
|
152 |
function wbcr_clearfy_after_form_save($plugin, $obj)
|
153 |
{
|
170 |
*
|
171 |
* @param array $widgets
|
172 |
* @param string $position
|
173 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
174 |
*/
|
175 |
|
176 |
add_filter('wbcr/factory/pages/impressive/widgets', function ($widgets, $position, $plugin) {
|
admin/includes/compatibility.php
CHANGED
@@ -22,8 +22,8 @@ add_action( 'plugins_loaded', function () {
|
|
22 |
* Это необходимо, чтоб напомнить пользователю обновить конфигурацию компонентов плагина,
|
23 |
* иначе вновь активированные компоненты не будет зайдествованы в работе плагина.
|
24 |
*
|
25 |
-
* @param
|
26 |
-
* @param
|
27 |
*
|
28 |
* @return bool
|
29 |
*/
|
@@ -52,8 +52,8 @@ add_action( 'plugins_loaded', function () {
|
|
52 |
* Это необходимо, чтоб напомнить пользователю обновить конфигурацию компонентов плагина,
|
53 |
* иначе вновь активированные компоненты не будет зайдествованы в работе плагина.
|
54 |
*
|
55 |
-
* @param
|
56 |
-
* @param
|
57 |
*
|
58 |
* @return bool
|
59 |
*/
|
22 |
* Это необходимо, чтоб напомнить пользователю обновить конфигурацию компонентов плагина,
|
23 |
* иначе вновь активированные компоненты не будет зайдествованы в работе плагина.
|
24 |
*
|
25 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
26 |
+
* @param Wbcr_FactoryPages447_ImpressiveThemplate $obj
|
27 |
*
|
28 |
* @return bool
|
29 |
*/
|
52 |
* Это необходимо, чтоб напомнить пользователю обновить конфигурацию компонентов плагина,
|
53 |
* иначе вновь активированные компоненты не будет зайдествованы в работе плагина.
|
54 |
*
|
55 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
56 |
+
* @param Wbcr_FactoryPages447_ImpressiveThemplate $obj
|
57 |
*
|
58 |
* @return bool
|
59 |
*/
|
admin/includes/options.php
CHANGED
@@ -1,398 +1,389 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
array(
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
)
|
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 |
-
'name' => 'remove_rsd_link',
|
81 |
-
'title' => __('Remove RSD Link', 'clearfy'),
|
82 |
-
'tags' => array('clear_code', 'hide_my_wp')
|
83 |
-
),
|
84 |
-
array(
|
85 |
-
'name' => 'remove_wlw_link',
|
86 |
-
'title' => __('Remove wlwmanifest Link', 'clearfy'),
|
87 |
-
'tags' => array('clear_code', 'hide_my_wp')
|
88 |
-
),
|
89 |
-
array(
|
90 |
-
'name' => 'remove_shortlink_link',
|
91 |
-
'title' => __('Remove Shortlink', 'clearfy'),
|
92 |
-
'tags' => array('clear_code', 'hide_my_wp')
|
93 |
-
),
|
94 |
-
array(
|
95 |
-
'name' => 'remove_adjacent_posts_link',
|
96 |
-
'title' => __('Remove links to previous, next post', 'clearfy'),
|
97 |
-
'tags' => array('clear_code', 'hide_my_wp')
|
98 |
-
),
|
99 |
-
array(
|
100 |
-
'name' => 'remove_recent_comments_style',
|
101 |
-
'title' => __('Remove .recentcomments styles', 'clearfy'),
|
102 |
-
'tags' => array('clear_code', 'hide_my_wp')
|
103 |
-
),
|
104 |
-
/** ------------------------ End Performance page ----------------------------- */
|
105 |
-
array(
|
106 |
-
'name' => 'content_image_auto_alt',
|
107 |
-
'title' => __('Automatically set the alt attribute', 'clearfy'),
|
108 |
-
'tags' => array('seo_optimize')
|
109 |
-
),
|
110 |
-
array(
|
111 |
-
'name' => 'set_last_modified_headers',
|
112 |
-
'title' => __('Automatically insert the Last Modified header', 'clearfy'),
|
113 |
-
'tags' => array('seo_optimize')
|
114 |
-
),
|
115 |
-
array(
|
116 |
-
'name' => 'if_modified_since_headers',
|
117 |
-
'title' => __('Return an If-Modified-Since responce', 'clearfy'),
|
118 |
-
'tags' => array('seo_optimize')
|
119 |
-
),
|
120 |
-
array(
|
121 |
-
'name' => 'remove_last_item_breadcrumb_yoast',
|
122 |
-
'title' => __('Remove duplicate names in breadcrumbs WP SEO by Yoast', 'clearfy'),
|
123 |
-
'tags' => array('seo_optimize')
|
124 |
-
),
|
125 |
-
array(
|
126 |
-
'name' => 'yoast_remove_image_from_xml_sitemap',
|
127 |
-
'title' => sprintf(__('Remove the tag %s from XML site map', 'clearfy'), 'image:image'),
|
128 |
-
'tags' => get_locale() == 'ru_RU' ? array('clear_code') : array()
|
129 |
-
),
|
130 |
-
array(
|
131 |
-
'name' => 'yoast_remove_json_ld_search',
|
132 |
-
'title' => __('Disable JSON-LD sitelinks searchbox', 'clearfy'),
|
133 |
-
'tags' => array()
|
134 |
-
),
|
135 |
-
array(
|
136 |
-
'name' => 'yoast_remove_json_ld_output',
|
137 |
-
'title' => __('Disable Yoast Structured Data', 'clearfy'),
|
138 |
-
'tags' => array()
|
139 |
-
),
|
140 |
-
array(
|
141 |
-
'name' => 'yoast_remove_head_comment',
|
142 |
-
'title' => sprintf(__('Remove comment from %s section', 'clearfy'), 'head'),
|
143 |
-
'tags' => array('clear_code')
|
144 |
-
),
|
145 |
-
array(
|
146 |
-
'name' => 'redirect_archives_date',
|
147 |
-
'title' => __('Remove archives date', 'clearfy'),
|
148 |
-
'tags' => array('seo_optimize')
|
149 |
-
),
|
150 |
-
array(
|
151 |
-
'name' => 'redirect_archives_author',
|
152 |
-
'title' => __('Remove author archives ', 'clearfy'),
|
153 |
-
'tags' => array('seo_optimize')
|
154 |
-
),
|
155 |
-
array(
|
156 |
-
'name' => 'redirect_archives_tag',
|
157 |
-
'title' => __('Remove archives tag', 'clearfy'),
|
158 |
-
'tags' => array()
|
159 |
-
),
|
160 |
-
array(
|
161 |
-
'name' => 'attachment_pages_redirect',
|
162 |
-
'title' => __('Remove attachment pages', 'clearfy'),
|
163 |
-
'tags' => array('seo_optimize')
|
164 |
-
),
|
165 |
-
array(
|
166 |
-
'name' => 'remove_single_pagination_duplicate',
|
167 |
-
'title' => __('Remove post pagination', 'clearfy'),
|
168 |
-
'tags' => array('recommended')
|
169 |
-
),
|
170 |
-
array(
|
171 |
-
'name' => 'remove_replytocom',
|
172 |
-
'title' => __('Remove ?replytocom', 'clearfy'),
|
173 |
-
'tags' => array('seo_optimize')
|
174 |
-
),
|
175 |
-
array(
|
176 |
-
'name' => 'remove_meta_generator',
|
177 |
-
'title' => __('Remove meta generator', 'clearfy'),
|
178 |
-
'tags' => array('clear_code', 'defence', 'hide_my_wp')
|
179 |
-
),
|
180 |
-
array(
|
181 |
-
'name' => 'protect_author_get',
|
182 |
-
'title' => __('Hide author login', 'clearfy'),
|
183 |
-
'tags' => array('defence', 'hide_my_wp')
|
184 |
-
),
|
185 |
-
array(
|
186 |
-
'name' => 'change_login_errors',
|
187 |
-
'title' => __('Hide errors when logging into the site', 'clearfy', 'hide_my_wp'),
|
188 |
-
'tags' => array('defence', 'hide_my_wp')
|
189 |
-
),
|
190 |
-
array(
|
191 |
-
'name' => 'remove_style_version',
|
192 |
-
'title' => __('Remove Version from Stylesheet', 'clearfy', 'hide_my_wp'),
|
193 |
-
'tags' => array('clear_code', 'defence', 'hide_my_wp')
|
194 |
-
),
|
195 |
-
array(
|
196 |
-
'name' => 'remove_js_version',
|
197 |
-
'title' => __('Remove Version from Script', 'clearfy'),
|
198 |
-
'tags' => array('clear_code', 'defence', 'hide_my_wp')
|
199 |
-
),
|
200 |
-
array(
|
201 |
-
'name' => 'remove_unneeded_widget_page',
|
202 |
-
'title' => __('Remove the "Pages" widget', 'clearfy'),
|
203 |
-
'tags' => array('remove_default_widgets')
|
204 |
-
),
|
205 |
-
array(
|
206 |
-
'name' => 'remove_unneeded_widget_calendar',
|
207 |
-
'title' => __('Remove calendar widget', 'clearfy'),
|
208 |
-
'tags' => array('remove_default_widgets')
|
209 |
-
),
|
210 |
-
array(
|
211 |
-
'name' => 'remove_unneeded_widget_tag_cloud',
|
212 |
-
'title' => __('Remove the "Cloud of tags" widget', 'clearfy'),
|
213 |
-
'tags' => array('remove_default_widgets')
|
214 |
-
),
|
215 |
-
array(
|
216 |
-
'name' => 'remove_unneeded_widget_archives',
|
217 |
-
'title' => __('Remove the "Archives" widget', 'clearfy'),
|
218 |
-
'tags' => array('remove_default_widgets')
|
219 |
-
),
|
220 |
-
array(
|
221 |
-
'name' => 'remove_unneeded_widget_links',
|
222 |
-
'title' => __('Remove the "Links" widget', 'clearfy'),
|
223 |
-
'tags' => array('remove_default_widgets')
|
224 |
-
),
|
225 |
-
array(
|
226 |
-
'name' => 'remove_unneeded_widget_meta',
|
227 |
-
'title' => __('Remove the "Meta" widget', 'clearfy'),
|
228 |
-
'tags' => array('remove_default_widgets')
|
229 |
-
),
|
230 |
-
array(
|
231 |
-
'name' => 'remove_unneeded_widget_search',
|
232 |
-
'title' => __('Remove the "Search" widget', 'clearfy'),
|
233 |
-
'tags' => array('remove_default_widgets')
|
234 |
-
),
|
235 |
-
array(
|
236 |
-
'name' => 'remove_unneeded_widget_text',
|
237 |
-
'title' => __('Remove the "Text" widget', 'clearfy'),
|
238 |
-
'tags' => array('remove_default_widgets')
|
239 |
-
),
|
240 |
-
array(
|
241 |
-
'name' => 'remove_unneeded_widget_categories',
|
242 |
-
'title' => __('Remove the "Categories" widget', 'clearfy'),
|
243 |
-
'tags' => array('remove_default_widgets')
|
244 |
-
),
|
245 |
-
array(
|
246 |
-
'name' => 'remove_unneeded_widget_recent_posts',
|
247 |
-
'title' => __('Remove the "Recent Posts" widget', 'clearfy'),
|
248 |
-
'tags' => array('remove_default_widgets')
|
249 |
-
),
|
250 |
-
array(
|
251 |
-
'name' => 'remove_unneeded_widget_recent_comments',
|
252 |
-
'title' => __('Remove the "Recent Comments" widget', 'clearfy'),
|
253 |
-
'tags' => array('remove_default_widgets')
|
254 |
-
),
|
255 |
-
array(
|
256 |
-
'name' => 'remove_unneeded_widget_text',
|
257 |
-
'title' => __('Remove the "Text" widget', 'clearfy'),
|
258 |
-
'tags' => array('remove_default_widgets')
|
259 |
-
),
|
260 |
-
array(
|
261 |
-
'name' => 'remove_unneeded_widget_rss',
|
262 |
-
'title' => __('Remove the "RSS" widget', 'clearfy'),
|
263 |
-
'tags' => array('remove_default_widgets')
|
264 |
-
),
|
265 |
-
array(
|
266 |
-
'name' => 'remove_unneeded_widget_menu',
|
267 |
-
'title' => __('Remove the "Menu" widget', 'clearfy'),
|
268 |
-
'tags' => array('remove_default_widgets')
|
269 |
-
),
|
270 |
-
array(
|
271 |
-
'name' => 'remove_unneeded_widget_twenty_eleven_ephemera',
|
272 |
-
'title' => __('Remove the "Twenty Eleven Ephemera" widget', 'clearfy'),
|
273 |
-
'tags' => array('remove_default_widgets')
|
274 |
-
),
|
275 |
-
array('name' => 'revisions_disable', 'title' => __('Disable revision', 'clearfy'), 'tags' => array()),
|
276 |
-
array('name' => 'revision_limit', 'title' => __('Limit Post Revisions', 'clearfy'), 'tags' => array()),
|
277 |
-
array('name' => 'last_modified_exclude', 'title' => __('Exclude pages:', 'clearfy'), 'tags' => array()),
|
278 |
-
array(
|
279 |
-
'name' => 'right_robots_txt',
|
280 |
-
'title' => __('Create right robots.txt', 'clearfy'),
|
281 |
-
'tags' => array()
|
282 |
-
),
|
283 |
-
array(
|
284 |
-
'name' => 'robots_txt_text',
|
285 |
-
'title' => __('You can edit the robots.txt file in the box below:', 'clearfy'),
|
286 |
-
'tags' => array()
|
287 |
-
),
|
288 |
-
array('name' => 'quick_modes', 'title' => __('Quick mode', 'clearfy'), 'tags' => array()),
|
289 |
-
array(
|
290 |
-
'name' => 'remove_jquery_migrate',
|
291 |
-
'title' => __('Remove jQuery Migrate', 'clearfy'),
|
292 |
-
'tags' => array()
|
293 |
-
),
|
294 |
-
array('name' => 'disable_embeds', 'title' => __('Disable Embeds', 'clearfy'), 'tags' => array()),
|
295 |
-
array('name' => 'disable_feed', 'title' => __('Disable RSS feeds', 'clearfy'), 'tags' => array()),
|
296 |
-
array(
|
297 |
-
'name' => 'remove_unnecessary_link_admin_bar',
|
298 |
-
'title' => __('Removes links to wordpress.org site from the admin bar', 'clearfy'),
|
299 |
-
'tags' => array()
|
300 |
-
),
|
301 |
-
array(
|
302 |
-
'name' => 'remove_style_version',
|
303 |
-
'title' => __('Remove Version from Stylesheet', 'clearfy'),
|
304 |
-
'tags' => array('hide_my_wp')
|
305 |
-
),
|
306 |
-
array(
|
307 |
-
'name' => 'remove_js_version',
|
308 |
-
'title' => __('Remove Version from Script', 'clearfy'),
|
309 |
-
'tags' => array('hide_my_wp')
|
310 |
-
),
|
311 |
-
array(
|
312 |
-
'name' => 'remove_version_exclude',
|
313 |
-
'title' => __('Eclude stylesheet/script file names', 'clearfy'),
|
314 |
-
'tags' => array()
|
315 |
-
),
|
316 |
-
array(
|
317 |
-
'name' => 'enable_wordpres_sanitize',
|
318 |
-
'title' => __('Enable Sanitization of WordPress', 'clearfy'),
|
319 |
-
'tags' => array()
|
320 |
-
),
|
321 |
-
array(
|
322 |
-
'name' => 'disable_admin_bar',
|
323 |
-
'title' => __('Disable admin top bar', 'clearfy'),
|
324 |
-
'tags' => array()
|
325 |
-
),
|
326 |
-
array(
|
327 |
-
'name' => 'disable_admin_bar_logo',
|
328 |
-
'title' => __('Remove admin bar WP logo', 'clearfy'),
|
329 |
-
'tags' => array()
|
330 |
-
),
|
331 |
-
array(
|
332 |
-
'name' => 'replace_howdy_welcome',
|
333 |
-
'title' => __('Replace "Howdy" text with "Welcome"', 'clearfy'),
|
334 |
-
'tags' => array()
|
335 |
-
),
|
336 |
-
array(
|
337 |
-
'name' => 'revisions_disable',
|
338 |
-
'title' => __('Disable revision', 'clearfy'),
|
339 |
-
'tags' => array()
|
340 |
-
),
|
341 |
-
array(
|
342 |
-
'name' => 'revision_limit',
|
343 |
-
'title' => __('Limit Post Revisions', 'update-services'),
|
344 |
-
'tags' => array()
|
345 |
-
),
|
346 |
-
array(
|
347 |
-
'name' => 'disable_post_autosave',
|
348 |
-
'title' => __('Disable autosave', 'clearfy'),
|
349 |
-
'tags' => array()
|
350 |
-
),
|
351 |
-
array(
|
352 |
-
'name' => 'disable_texturization',
|
353 |
-
'title' => __('Disable Texturization - Smart Quotes', 'clearfy'),
|
354 |
-
'tags' => array()
|
355 |
-
),
|
356 |
-
array(
|
357 |
-
'name' => 'disable_auto_correct_dangit',
|
358 |
-
'title' => __('Disable capitalization in Wordpress branding', 'clearfy'),
|
359 |
-
'tags' => array()
|
360 |
-
),
|
361 |
-
array(
|
362 |
-
'name' => 'disable_auto_paragraph',
|
363 |
-
'title' => __('Disable auto inserted paragraphs (i.e. p tags)', 'clearfy'),
|
364 |
-
'tags' => array()
|
365 |
-
),
|
366 |
-
array(
|
367 |
-
'name' => 'disable_heartbeat',
|
368 |
-
'title' => __('Disable Heartbeat', 'update-services'),
|
369 |
-
'tags' => array()
|
370 |
-
),
|
371 |
-
array(
|
372 |
-
'name' => 'heartbeat_frequency',
|
373 |
-
'title' => __('Heartbeat frequency', 'update-services'),
|
374 |
-
'tags' => array()
|
375 |
-
),
|
376 |
-
array(
|
377 |
-
'name' => 'remove_html_comments',
|
378 |
-
'title' => __('Remove html comments', 'clearfy'),
|
379 |
-
'tags' => array()
|
380 |
-
),
|
381 |
-
array(
|
382 |
-
'name' => 'deactive_preinstall_components',
|
383 |
-
'title' => __('Deactivate preinstall components', 'clearfy'),
|
384 |
-
'tags' => array()
|
385 |
-
),
|
386 |
-
array(
|
387 |
-
'name' => 'freemius_activated_addons',
|
388 |
-
'title' => __('Freemius activated addons', 'clearfy'),
|
389 |
-
'tags' => array()
|
390 |
-
),
|
391 |
-
/** ------------------------ Clearfy settings ----------------------------- */
|
392 |
-
array(
|
393 |
-
'name' => 'disable_clearfy_extra_menu',
|
394 |
-
'title' => __('Disable menu in adminbar', 'clearfy'),
|
395 |
-
'tags' => array()
|
396 |
-
)
|
397 |
-
|
398 |
-
));
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* * This file groups the settings for quick setup
|
4 |
+
* @author Webcraftic <wordpress.webraftic@gmail.com>
|
5 |
+
* @copyright (c) 18.09.2017, Webcraftic
|
6 |
+
* @version 1.0
|
7 |
+
*/
|
8 |
|
9 |
+
// Exit if accessed directly
|
10 |
+
if( !defined('ABSPATH') ) {
|
11 |
+
exit;
|
12 |
+
}
|
13 |
|
14 |
+
return apply_filters('wbcr_clearfy_group_options', array(
|
15 |
+
/** ------------------------ Google services ----------------------------- */ array(
|
16 |
+
'name' => 'lazy_load_google_fonts',
|
17 |
+
'title' => __('Google Fonts asynchronous', 'clearfy'),
|
18 |
+
'tags' => array('optimize_performance')
|
19 |
+
),
|
20 |
+
array(
|
21 |
+
'name' => 'disable_google_fonts',
|
22 |
+
'title' => __('Disable Google Fonts', 'clearfy'),
|
23 |
+
'tags' => array()
|
24 |
+
),
|
25 |
+
array(
|
26 |
+
'name' => 'remove_iframe_google_maps',
|
27 |
+
'title' => __('Remove iframe Google maps', 'clearfy'),
|
28 |
+
'tags' => array()
|
29 |
+
),
|
30 |
+
array(
|
31 |
+
'name' => 'exclude_from_disable_google_maps',
|
32 |
+
'title' => __('Exclude pages from Disable Google Maps filter', 'clearfy'),
|
33 |
+
'tags' => array()
|
34 |
+
),
|
35 |
+
/** ------------------------ End google services ----------------------------- */ array(
|
36 |
+
'name' => 'disable_google_maps',
|
37 |
+
'title' => __('Disable Google maps', 'clearfy'),
|
38 |
+
'tags' => array()
|
39 |
+
),
|
40 |
+
/** ------------------------ Performance page ----------------------------- */ /*array(
|
41 |
+
'name' => 'remove_xfn_link',
|
42 |
+
'title' => __('Removing XFN (XHTML Friends Network) Profile Link', 'clearfy'),
|
43 |
+
'tags' => array()
|
44 |
+
),*/ array(
|
45 |
+
'name' => 'lazy_load_font_awesome',
|
46 |
+
'title' => __('Font Awesome asynchronous', 'clearfy'),
|
47 |
+
'tags' => array()
|
48 |
+
),
|
49 |
+
array(
|
50 |
+
'name' => 'disable_dashicons',
|
51 |
+
'title' => __('Disable Dashicons', 'clearfy'),
|
52 |
+
'tags' => array('hide_my_wp')
|
53 |
+
),
|
54 |
+
array(
|
55 |
+
'name' => 'disable_gravatars',
|
56 |
+
'title' => __('Disable gravatars', 'clearfy'),
|
57 |
+
'tags' => array()
|
58 |
+
),
|
59 |
+
/*array(
|
60 |
+
'name' => 'disable_json_rest_api',
|
61 |
+
'title' => __('Remove REST API Links', 'clearfy'),
|
62 |
+
'tags' => array()
|
63 |
+
),*/ array(
|
64 |
+
'name' => 'disable_emoji',
|
65 |
+
'title' => __('Disable Emojis', 'clearfy'),
|
66 |
+
'tags' => array('optimize_performance', 'clear_code', 'hide_my_wp')
|
67 |
+
),
|
68 |
+
array(
|
69 |
+
'name' => 'remove_bloat',
|
70 |
+
'title' => __('Remove bloat in head', 'clearfy'),
|
71 |
+
'tags' => array('optimize_performance', 'clear_code', 'hide_my_wp')
|
72 |
+
),
|
73 |
+
/*array(
|
74 |
+
'name' => 'remove_rsd_link',
|
75 |
+
'title' => __('Remove RSD Link', 'clearfy'),
|
76 |
+
'tags' => array('optimize_performance', 'clear_code', 'hide_my_wp')
|
77 |
+
),
|
78 |
+
array(
|
79 |
+
'name' => 'remove_wlw_link',
|
80 |
+
'title' => __('Remove wlwmanifest Link', 'clearfy'),
|
81 |
+
'tags' => array('optimize_performance', 'clear_code', 'hide_my_wp')
|
82 |
+
),
|
83 |
+
array(
|
84 |
+
'name' => 'remove_shortlink_link',
|
85 |
+
'title' => __('Remove Shortlink', 'clearfy'),
|
86 |
+
'tags' => array('optimize_performance', 'clear_code', 'hide_my_wp')
|
87 |
+
),
|
88 |
+
array(
|
89 |
+
'name' => 'remove_adjacent_posts_link',
|
90 |
+
'title' => __('Remove links to previous, next post', 'clearfy'),
|
91 |
+
'tags' => array('optimize_performance', 'clear_code', 'hide_my_wp')
|
92 |
+
),
|
93 |
+
array(
|
94 |
+
'name' => 'remove_recent_comments_style',
|
95 |
+
'title' => __('Remove .recentcomments styles', 'clearfy'),
|
96 |
+
'tags' => array('optimize_performance', 'clear_code', 'hide_my_wp')
|
97 |
+
),*/ /** ------------------------ End Performance page ----------------------------- */ array(
|
98 |
+
'name' => 'content_image_auto_alt',
|
99 |
+
'title' => __('Automatically set the alt attribute', 'clearfy'),
|
100 |
+
'tags' => array('seo_optimize')
|
101 |
+
),
|
102 |
+
array(
|
103 |
+
'name' => 'set_last_modified_headers',
|
104 |
+
'title' => __('Automatically insert the Last Modified header', 'clearfy'),
|
105 |
+
'tags' => array('seo_optimize')
|
106 |
+
),
|
107 |
+
array(
|
108 |
+
'name' => 'if_modified_since_headers',
|
109 |
+
'title' => __('Return an If-Modified-Since responce', 'clearfy'),
|
110 |
+
'tags' => array('seo_optimize')
|
111 |
+
),
|
112 |
+
array(
|
113 |
+
'name' => 'remove_last_item_breadcrumb_yoast',
|
114 |
+
'title' => __('Remove duplicate names in breadcrumbs WP SEO by Yoast', 'clearfy'),
|
115 |
+
'tags' => array('seo_optimize')
|
116 |
+
),
|
117 |
+
array(
|
118 |
+
'name' => 'yoast_remove_image_from_xml_sitemap',
|
119 |
+
'title' => sprintf(__('Remove the tag %s from XML site map', 'clearfy'), 'image:image'),
|
120 |
+
'tags' => get_locale() == 'ru_RU' ? array('clear_code') : array()
|
121 |
+
),
|
122 |
+
array(
|
123 |
+
'name' => 'yoast_remove_json_ld_search',
|
124 |
+
'title' => __('Disable JSON-LD sitelinks searchbox', 'clearfy'),
|
125 |
+
'tags' => array()
|
126 |
+
),
|
127 |
+
array(
|
128 |
+
'name' => 'yoast_remove_json_ld_output',
|
129 |
+
'title' => __('Disable Yoast Structured Data', 'clearfy'),
|
130 |
+
'tags' => array()
|
131 |
+
),
|
132 |
+
array(
|
133 |
+
'name' => 'yoast_remove_head_comment',
|
134 |
+
'title' => sprintf(__('Remove comment from %s section', 'clearfy'), 'head'),
|
135 |
+
'tags' => array('clear_code')
|
136 |
+
),
|
137 |
+
array(
|
138 |
+
'name' => 'redirect_archives_date',
|
139 |
+
'title' => __('Remove archives date', 'clearfy'),
|
140 |
+
'tags' => array('seo_optimize')
|
141 |
+
),
|
142 |
+
array(
|
143 |
+
'name' => 'redirect_archives_author',
|
144 |
+
'title' => __('Remove author archives ', 'clearfy'),
|
145 |
+
'tags' => array('seo_optimize')
|
146 |
+
),
|
147 |
+
array(
|
148 |
+
'name' => 'redirect_archives_tag',
|
149 |
+
'title' => __('Remove archives tag', 'clearfy'),
|
150 |
+
'tags' => array()
|
151 |
+
),
|
152 |
+
array(
|
153 |
+
'name' => 'attachment_pages_redirect',
|
154 |
+
'title' => __('Remove attachment pages', 'clearfy'),
|
155 |
+
'tags' => array('seo_optimize')
|
156 |
+
),
|
157 |
+
array(
|
158 |
+
'name' => 'remove_single_pagination_duplicate',
|
159 |
+
'title' => __('Remove post pagination', 'clearfy'),
|
160 |
+
'tags' => array('recommended')
|
161 |
+
),
|
162 |
+
array(
|
163 |
+
'name' => 'remove_replytocom',
|
164 |
+
'title' => __('Remove ?replytocom', 'clearfy'),
|
165 |
+
'tags' => array('seo_optimize')
|
166 |
+
),
|
167 |
+
array(
|
168 |
+
'name' => 'remove_meta_generator',
|
169 |
+
'title' => __('Remove meta generator', 'clearfy'),
|
170 |
+
'tags' => array('clear_code', 'defence', 'hide_my_wp')
|
171 |
+
),
|
172 |
+
array(
|
173 |
+
'name' => 'protect_author_get',
|
174 |
+
'title' => __('Hide author login', 'clearfy'),
|
175 |
+
'tags' => array('defence', 'hide_my_wp')
|
176 |
+
),
|
177 |
+
array(
|
178 |
+
'name' => 'change_login_errors',
|
179 |
+
'title' => __('Hide errors when logging into the site', 'clearfy', 'hide_my_wp'),
|
180 |
+
'tags' => array('defence', 'hide_my_wp')
|
181 |
+
),
|
182 |
+
array(
|
183 |
+
'name' => 'remove_style_version',
|
184 |
+
'title' => __('Remove Version from Stylesheet', 'clearfy', 'hide_my_wp'),
|
185 |
+
'tags' => array('optimize_performance', 'clear_code', 'defence', 'hide_my_wp')
|
186 |
+
),
|
187 |
+
array(
|
188 |
+
'name' => 'remove_js_version',
|
189 |
+
'title' => __('Remove Version from Script', 'clearfy'),
|
190 |
+
'tags' => array('optimize_performance', 'clear_code', 'defence', 'hide_my_wp')
|
191 |
+
),
|
192 |
+
array(
|
193 |
+
'name' => 'remove_unneeded_widget_page',
|
194 |
+
'title' => __('Remove the "Pages" widget', 'clearfy'),
|
195 |
+
'tags' => array('remove_default_widgets')
|
196 |
+
),
|
197 |
+
array(
|
198 |
+
'name' => 'remove_unneeded_widget_calendar',
|
199 |
+
'title' => __('Remove calendar widget', 'clearfy'),
|
200 |
+
'tags' => array('remove_default_widgets')
|
201 |
+
),
|
202 |
+
array(
|
203 |
+
'name' => 'remove_unneeded_widget_tag_cloud',
|
204 |
+
'title' => __('Remove the "Cloud of tags" widget', 'clearfy'),
|
205 |
+
'tags' => array('remove_default_widgets')
|
206 |
+
),
|
207 |
+
array(
|
208 |
+
'name' => 'remove_unneeded_widget_archives',
|
209 |
+
'title' => __('Remove the "Archives" widget', 'clearfy'),
|
210 |
+
'tags' => array('remove_default_widgets')
|
211 |
+
),
|
212 |
+
array(
|
213 |
+
'name' => 'remove_unneeded_widget_links',
|
214 |
+
'title' => __('Remove the "Links" widget', 'clearfy'),
|
215 |
+
'tags' => array('remove_default_widgets')
|
216 |
+
),
|
217 |
+
array(
|
218 |
+
'name' => 'remove_unneeded_widget_meta',
|
219 |
+
'title' => __('Remove the "Meta" widget', 'clearfy'),
|
220 |
+
'tags' => array('remove_default_widgets')
|
221 |
+
),
|
222 |
+
array(
|
223 |
+
'name' => 'remove_unneeded_widget_search',
|
224 |
+
'title' => __('Remove the "Search" widget', 'clearfy'),
|
225 |
+
'tags' => array('remove_default_widgets')
|
226 |
+
),
|
227 |
+
array(
|
228 |
+
'name' => 'remove_unneeded_widget_text',
|
229 |
+
'title' => __('Remove the "Text" widget', 'clearfy'),
|
230 |
+
'tags' => array('remove_default_widgets')
|
231 |
+
),
|
232 |
+
array(
|
233 |
+
'name' => 'remove_unneeded_widget_categories',
|
234 |
+
'title' => __('Remove the "Categories" widget', 'clearfy'),
|
235 |
+
'tags' => array('remove_default_widgets')
|
236 |
+
),
|
237 |
+
array(
|
238 |
+
'name' => 'remove_unneeded_widget_recent_posts',
|
239 |
+
'title' => __('Remove the "Recent Posts" widget', 'clearfy'),
|
240 |
+
'tags' => array('remove_default_widgets')
|
241 |
+
),
|
242 |
+
array(
|
243 |
+
'name' => 'remove_unneeded_widget_recent_comments',
|
244 |
+
'title' => __('Remove the "Recent Comments" widget', 'clearfy'),
|
245 |
+
'tags' => array('remove_default_widgets')
|
246 |
+
),
|
247 |
+
array(
|
248 |
+
'name' => 'remove_unneeded_widget_text',
|
249 |
+
'title' => __('Remove the "Text" widget', 'clearfy'),
|
250 |
+
'tags' => array('remove_default_widgets')
|
251 |
+
),
|
252 |
+
array(
|
253 |
+
'name' => 'remove_unneeded_widget_rss',
|
254 |
+
'title' => __('Remove the "RSS" widget', 'clearfy'),
|
255 |
+
'tags' => array('remove_default_widgets')
|
256 |
+
),
|
257 |
+
array(
|
258 |
+
'name' => 'remove_unneeded_widget_menu',
|
259 |
+
'title' => __('Remove the "Menu" widget', 'clearfy'),
|
260 |
+
'tags' => array('remove_default_widgets')
|
261 |
+
),
|
262 |
+
array(
|
263 |
+
'name' => 'remove_unneeded_widget_twenty_eleven_ephemera',
|
264 |
+
'title' => __('Remove the "Twenty Eleven Ephemera" widget', 'clearfy'),
|
265 |
+
'tags' => array('remove_default_widgets')
|
266 |
+
),
|
267 |
+
array('name' => 'revisions_disable', 'title' => __('Disable revision', 'clearfy'), 'tags' => array()),
|
268 |
+
array('name' => 'revision_limit', 'title' => __('Limit Post Revisions', 'clearfy'), 'tags' => array()),
|
269 |
+
array('name' => 'last_modified_exclude', 'title' => __('Exclude pages:', 'clearfy'), 'tags' => array()),
|
270 |
+
array(
|
271 |
+
'name' => 'right_robots_txt',
|
272 |
+
'title' => __('Create right robots.txt', 'clearfy'),
|
273 |
+
'tags' => array()
|
274 |
+
),
|
275 |
+
array(
|
276 |
+
'name' => 'robots_txt_text',
|
277 |
+
'title' => __('You can edit the robots.txt file in the box below:', 'clearfy'),
|
278 |
+
'tags' => array()
|
279 |
+
),
|
280 |
+
array('name' => 'quick_modes', 'title' => __('Quick mode', 'clearfy'), 'tags' => array()),
|
281 |
+
array(
|
282 |
+
'name' => 'remove_jquery_migrate',
|
283 |
+
'title' => __('Remove jQuery Migrate', 'clearfy'),
|
284 |
+
'tags' => array()
|
285 |
+
),
|
286 |
+
array('name' => 'disable_embeds', 'title' => __('Disable Embeds', 'clearfy'), 'tags' => array()),
|
287 |
+
array('name' => 'disable_feed', 'title' => __('Disable RSS feeds', 'clearfy'), 'tags' => array()),
|
288 |
+
array(
|
289 |
+
'name' => 'remove_unnecessary_link_admin_bar',
|
290 |
+
'title' => __('Removes links to wordpress.org site from the admin bar', 'clearfy'),
|
291 |
+
'tags' => array()
|
292 |
+
),
|
293 |
+
array(
|
294 |
+
'name' => 'remove_style_version',
|
295 |
+
'title' => __('Remove Version from Stylesheet', 'clearfy'),
|
296 |
+
'tags' => array('hide_my_wp')
|
297 |
+
),
|
298 |
+
array(
|
299 |
+
'name' => 'remove_js_version',
|
300 |
+
'title' => __('Remove Version from Script', 'clearfy'),
|
301 |
+
'tags' => array('hide_my_wp')
|
302 |
+
),
|
303 |
+
array(
|
304 |
+
'name' => 'remove_version_exclude',
|
305 |
+
'title' => __('Eclude stylesheet/script file names', 'clearfy'),
|
306 |
+
'tags' => array()
|
307 |
+
),
|
308 |
+
array(
|
309 |
+
'name' => 'enable_wordpres_sanitize',
|
310 |
+
'title' => __('Enable Sanitization of WordPress', 'clearfy'),
|
311 |
+
'tags' => array()
|
312 |
+
),
|
313 |
+
array(
|
314 |
+
'name' => 'disable_admin_bar',
|
315 |
+
'title' => __('Disable admin top bar', 'clearfy'),
|
316 |
+
'tags' => array()
|
317 |
+
),
|
318 |
+
array(
|
319 |
+
'name' => 'disable_admin_bar_logo',
|
320 |
+
'title' => __('Remove admin bar WP logo', 'clearfy'),
|
321 |
+
'tags' => array()
|
322 |
+
),
|
323 |
+
array(
|
324 |
+
'name' => 'replace_howdy_welcome',
|
325 |
+
'title' => __('Replace "Howdy" text with "Welcome"', 'clearfy'),
|
326 |
+
'tags' => array()
|
327 |
+
),
|
328 |
+
array(
|
329 |
+
'name' => 'revisions_disable',
|
330 |
+
'title' => __('Disable revision', 'clearfy'),
|
331 |
+
'tags' => array()
|
332 |
+
),
|
333 |
+
array(
|
334 |
+
'name' => 'revision_limit',
|
335 |
+
'title' => __('Limit Post Revisions', 'update-services'),
|
336 |
+
'tags' => array()
|
337 |
+
),
|
338 |
+
array(
|
339 |
+
'name' => 'disable_post_autosave',
|
340 |
+
'title' => __('Disable autosave', 'clearfy'),
|
341 |
+
'tags' => array()
|
342 |
+
),
|
343 |
+
array(
|
344 |
+
'name' => 'disable_texturization',
|
345 |
+
'title' => __('Disable Texturization - Smart Quotes', 'clearfy'),
|
346 |
+
'tags' => array()
|
347 |
+
),
|
348 |
+
array(
|
349 |
+
'name' => 'disable_auto_correct_dangit',
|
350 |
+
'title' => __('Disable capitalization in Wordpress branding', 'clearfy'),
|
351 |
+
'tags' => array()
|
352 |
+
),
|
353 |
+
array(
|
354 |
+
'name' => 'disable_auto_paragraph',
|
355 |
+
'title' => __('Disable auto inserted paragraphs (i.e. p tags)', 'clearfy'),
|
356 |
+
'tags' => array()
|
357 |
+
),
|
358 |
+
array(
|
359 |
+
'name' => 'disable_heartbeat',
|
360 |
+
'title' => __('Disable Heartbeat', 'update-services'),
|
361 |
+
'tags' => array()
|
362 |
+
),
|
363 |
+
array(
|
364 |
+
'name' => 'heartbeat_frequency',
|
365 |
+
'title' => __('Heartbeat frequency', 'update-services'),
|
366 |
+
'tags' => array()
|
367 |
+
),
|
368 |
+
array(
|
369 |
+
'name' => 'remove_html_comments',
|
370 |
+
'title' => __('Remove html comments', 'clearfy'),
|
371 |
+
'tags' => array()
|
372 |
+
),
|
373 |
+
array(
|
374 |
+
'name' => 'deactive_preinstall_components',
|
375 |
+
'title' => __('Deactivate preinstall components', 'clearfy'),
|
376 |
+
'tags' => array()
|
377 |
+
),
|
378 |
+
array(
|
379 |
+
'name' => 'freemius_activated_addons',
|
380 |
+
'title' => __('Freemius activated addons', 'clearfy'),
|
381 |
+
'tags' => array()
|
382 |
+
),
|
383 |
+
/** ------------------------ Clearfy settings ----------------------------- */ array(
|
384 |
+
'name' => 'disable_clearfy_extra_menu',
|
385 |
+
'title' => __('Disable menu in adminbar', 'clearfy'),
|
386 |
+
'tags' => array()
|
387 |
+
)
|
388 |
|
389 |
+
));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/pages/class-page.php
CHANGED
@@ -7,7 +7,43 @@
|
|
7 |
* @version 1.0
|
8 |
*/
|
9 |
|
10 |
-
class WCL_Page extends
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
/**
|
13 |
* Действие выполняется для всех страниц Clearfy и его компонентах.
|
@@ -20,15 +56,15 @@ class WCL_Page extends Wbcr_FactoryClearfy237_PageBase {
|
|
20 |
$license_page_url = $this->getBaseUrl('clearfy_license');
|
21 |
$upgrade_url = $this->plugin->get_support()->get_pricing_url(true, 'multisite_save_settings');
|
22 |
|
23 |
-
$html = '<div class="wbcr-factory-clearfy-
|
24 |
$html .= '<div class="wbcr-factory-inner-contanier">';
|
25 |
-
$html .= '<h3>' . __('Upgrade to Clearfy Business', '
|
26 |
-
$html .= '<p>' . __('Oops... Sorry for the inconvenience caused!', '
|
27 |
-
$html .= '<p>' . __('Complete multisite support is available in Clearfy Business and Clearfy Business Revolution packages only!', '
|
28 |
-
$html .= '<p>' . __('You can activate the plugin on each website and use it with zero limitations. But you can’t save the plugin’s settings under the Super Administrator role!', '
|
29 |
$html .= '<p style="margin-top:20px">';
|
30 |
-
$html .= '<a href="' . $license_page_url . '" class="wbcr-factory-activate-premium" rel="noopener">' . __('Activate license ', '
|
31 |
-
$html .= '<a href="' . $upgrade_url . '" class="wbcr-factory-purchase-premium" target="_blank" rel="noopener">' . __('Upgrade to Clearfy Business', '
|
32 |
$html .= '</p>';
|
33 |
$html .= '</div>';
|
34 |
$html .= '</div>';
|
7 |
* @version 1.0
|
8 |
*/
|
9 |
|
10 |
+
class WCL_Page extends Wbcr_FactoryClearfy240_PageBase {
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Requests assets (js and css) for the page.
|
14 |
+
*
|
15 |
+
* @return void
|
16 |
+
* @since 1.0.0
|
17 |
+
* @see FactoryPages447_AdminPage
|
18 |
+
*
|
19 |
+
*/
|
20 |
+
public function assets($scripts, $styles)
|
21 |
+
{
|
22 |
+
parent::assets($scripts, $styles);
|
23 |
+
|
24 |
+
$this->styles->add(WCL_PLUGIN_URL . '/admin/assets/css/components.css');
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Подгружаем стили для вижета оптимизации изображений, если не установли плагин оптимизации изображений
|
28 |
+
*/
|
29 |
+
if( !defined('WIO_PLUGIN_ACTIVE') ) {
|
30 |
+
$styles->add(WCL_PLUGIN_URL . '/admin/assets/css/base-statistic.css');
|
31 |
+
}
|
32 |
+
|
33 |
+
$this->scripts->add(WCL_PLUGIN_URL . '/admin/assets/js/general.js', [], 'wclearfy-general');
|
34 |
+
|
35 |
+
$params = array(
|
36 |
+
//'ajaxurl' => admin_url('admin-ajax.php'),
|
37 |
+
'flush_cache_url' => $this->getActionUrl('flush-cache-and-rules', array('_wpnonce' => wp_create_nonce('wbcr_factory_' . $this->getResultId() . '_flush_action'))),
|
38 |
+
'ajax_nonce' => wp_create_nonce('wbcr_clearfy_ajax_quick_start_nonce'),
|
39 |
+
'import_options_nonce' => wp_create_nonce('wbcr_clearfy_import_options'),
|
40 |
+
'i18n' => array(
|
41 |
+
'success_update_settings' => __('Settings successfully updated!', 'clearfy'),
|
42 |
+
'unknown_error' => __('During the setup, an unknown error occurred, please try again or contact the plugin support.', 'clearfy')
|
43 |
+
)
|
44 |
+
);
|
45 |
+
$this->scripts->localize('wbcr_clearfy_ajax', $params);
|
46 |
+
}
|
47 |
|
48 |
/**
|
49 |
* Действие выполняется для всех страниц Clearfy и его компонентах.
|
56 |
$license_page_url = $this->getBaseUrl('clearfy_license');
|
57 |
$upgrade_url = $this->plugin->get_support()->get_pricing_url(true, 'multisite_save_settings');
|
58 |
|
59 |
+
$html = '<div class="wbcr-factory-clearfy-240-multisite-suggetion">';
|
60 |
$html .= '<div class="wbcr-factory-inner-contanier">';
|
61 |
+
$html .= '<h3>' . __('Upgrade to Clearfy Business', 'wbcr_factory_clearfy_240') . '</h3>';
|
62 |
+
$html .= '<p>' . __('Oops... Sorry for the inconvenience caused!', 'wbcr_factory_clearfy_240') . '</p>';
|
63 |
+
$html .= '<p>' . __('Complete multisite support is available in Clearfy Business and Clearfy Business Revolution packages only!', 'wbcr_factory_clearfy_240') . '</p>';
|
64 |
+
$html .= '<p>' . __('You can activate the plugin on each website and use it with zero limitations. But you can’t save the plugin’s settings under the Super Administrator role!', 'wbcr_factory_clearfy_240') . '</p>';
|
65 |
$html .= '<p style="margin-top:20px">';
|
66 |
+
$html .= '<a href="' . $license_page_url . '" class="wbcr-factory-activate-premium" rel="noopener">' . __('Activate license ', 'wbcr_factory_clearfy_240') . '</a> ';
|
67 |
+
$html .= '<a href="' . $upgrade_url . '" class="wbcr-factory-purchase-premium" target="_blank" rel="noopener">' . __('Upgrade to Clearfy Business', 'wbcr_factory_clearfy_240') . '</a>';
|
68 |
$html .= '</p>';
|
69 |
$html .= '</div>';
|
70 |
$html .= '</div>';
|
admin/pages/class-pages-advanced.php
CHANGED
@@ -17,7 +17,7 @@ class WCL_AdvancedPage extends WCL_Page {
|
|
17 |
* The id of the page in the admin menu.
|
18 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
-
* @see
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
* @var string
|
@@ -54,6 +54,41 @@ class WCL_AdvancedPage extends WCL_Page {
|
|
54 |
|
55 |
$options = array();
|
56 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
//============================================================
|
58 |
// ADMINBAR MANAGER COMPONENT
|
59 |
//============================================================
|
@@ -83,6 +118,70 @@ class WCL_AdvancedPage extends WCL_Page {
|
|
83 |
);
|
84 |
}
|
85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
$formOptions = array();
|
87 |
|
88 |
$formOptions[] = array(
|
17 |
* The id of the page in the admin menu.
|
18 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
+
* @see FactoryPages447_AdminPage
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
* @var string
|
54 |
|
55 |
$options = array();
|
56 |
|
57 |
+
$options[] = array(
|
58 |
+
'type' => 'html',
|
59 |
+
'html' => '<div class="wbcr-clearfy-group-header">' . '<strong>' . __('Other', 'clearfy') . '</strong>' . '<p>' . __('In this group of settings, you can manage the adminbar.', 'clearfy') . '</p>' . '</div>'
|
60 |
+
);
|
61 |
+
|
62 |
+
$options[] = [
|
63 |
+
'type' => 'checkbox',
|
64 |
+
'way' => 'buttons',
|
65 |
+
'name' => 'disable_feed',
|
66 |
+
'title' => __('Disable RSS feeds', 'clearfy'),
|
67 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
68 |
+
'hint' => __('By default, WordPress generates all types of different RSS feeds for your site. While RSS feeds can be useful if you are running a blog, businesses might not always utilize these. Not every site out there has a blog.', 'clearfy') . '<br><b>Clearfy: </b>' . sprintf(__('Removes a link to the RSS-feed from the %s section, closes and puts the redirect from all RSS-feeds.', 'clearfy'), '<head>'),
|
69 |
+
'default' => false,
|
70 |
+
'eventsOn' => [
|
71 |
+
'show' => '.factory-control-disabled_feed_behaviour'
|
72 |
+
],
|
73 |
+
'eventsOff' => [
|
74 |
+
'hide' => '.factory-control-disabled_feed_behaviour'
|
75 |
+
]
|
76 |
+
];
|
77 |
+
|
78 |
+
$options[] = [
|
79 |
+
'type' => 'dropdown',
|
80 |
+
'way' => 'buttons',
|
81 |
+
'name' => 'disabled_feed_behaviour',
|
82 |
+
'data' => [
|
83 |
+
['redirect_301', __('Redirect 301', 'clearfy')],
|
84 |
+
['redirect_404', __('Page 404', 'clearfy')],
|
85 |
+
],
|
86 |
+
'title' => __('Redirect feed requests', 'clearfy'),
|
87 |
+
'hint' => __('Forward all requests to page 404 or to the main page through 301 redirects.', 'clearfy'),
|
88 |
+
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
89 |
+
'default' => 'redirect_301'
|
90 |
+
];
|
91 |
+
|
92 |
//============================================================
|
93 |
// ADMINBAR MANAGER COMPONENT
|
94 |
//============================================================
|
118 |
);
|
119 |
}
|
120 |
|
121 |
+
$options[] = [
|
122 |
+
'type' => 'html',
|
123 |
+
'html' => '<div class="wbcr-clearfy-group-header">' . '<strong>' . __('Classic editor and Gutenberg', 'clearfy') . '</strong>' . '<p>' . __('In this group of options, you can manage revisions and post autosave.', 'clearfy') . '</p>' . '</div>'
|
124 |
+
];
|
125 |
+
|
126 |
+
$options[] = [
|
127 |
+
'type' => 'checkbox',
|
128 |
+
'way' => 'buttons',
|
129 |
+
'name' => 'revisions_disable',
|
130 |
+
'title' => __('Disable revision', 'clearfy'),
|
131 |
+
'default' => false,
|
132 |
+
'eventsOn' => [
|
133 |
+
'hide' => '.factory-control-revision_limit'
|
134 |
+
],
|
135 |
+
'eventsOff' => [
|
136 |
+
'show' => '.factory-control-revision_limit'
|
137 |
+
],
|
138 |
+
];
|
139 |
+
|
140 |
+
$options[] = [
|
141 |
+
'type' => 'dropdown',
|
142 |
+
'name' => 'revision_limit',
|
143 |
+
'title' => __('Limit Post Revisions', 'clearfy'),
|
144 |
+
'data' => [
|
145 |
+
['default', __('Wordpress default', 'clearfy')],
|
146 |
+
['15', '15 ' . __('revisions', 'clearfy')],
|
147 |
+
['20', '20 ' . __('revisions', 'clearfy')],
|
148 |
+
['25', '25 ' . __('revisions', 'clearfy')],
|
149 |
+
['30', '30 ' . __('revisions', 'clearfy')],
|
150 |
+
['35', '35 ' . __('revisions', 'clearfy')],
|
151 |
+
['40', '40 ' . __('revisions', 'clearfy')],
|
152 |
+
['45', '45 ' . __('revisions', 'clearfy')],
|
153 |
+
['50', '50 ' . __('revisions', 'clearfy')],
|
154 |
+
['55', '55 ' . __('revisions', 'clearfy')],
|
155 |
+
['60', '60 ' . __('revisions', 'clearfy')]
|
156 |
+
],
|
157 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
158 |
+
'hint' => __('WordPress automatically saves revisions when you are working on posts and pages. These can begin to add up pretty quick. By default, there is no limit in place. We have seen posts with over 1,000 revisions. Multiply this by 50 pages and suddenly you have over 50,000 revisions sitting in your database. The problem with this is that you will most likely never use them and they can start slowing down your database as well as using disk space.
|
159 |
+
So we recommend either disabling or limiting your revisions. ', 'clearfy'),
|
160 |
+
'default' => 'default'
|
161 |
+
];
|
162 |
+
|
163 |
+
if( version_compare(get_bloginfo('version'), '5.0', '>=') ) {
|
164 |
+
$options[] = [
|
165 |
+
'type' => 'checkbox',
|
166 |
+
'way' => 'buttons',
|
167 |
+
'name' => 'gutenberg_autosave_control',
|
168 |
+
'title' => __('Gutenberg autosave control', 'clearfy'),
|
169 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
170 |
+
'hint' => __('By activating this option autosave feature in the Gutenberg editor will be disabled. Alternatively it also provides options in the editor to select a longer autosave interval time than the default 10 seconds.', 'clearfy'),
|
171 |
+
'default' => false
|
172 |
+
];
|
173 |
+
} else {
|
174 |
+
$options[] = [
|
175 |
+
'type' => 'checkbox',
|
176 |
+
'way' => 'buttons',
|
177 |
+
'name' => 'disable_post_autosave',
|
178 |
+
'title' => __('Disable autosave', 'clearfy'),
|
179 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
180 |
+
'hint' => __('WordPress by default automatically saves a draft every 60 seconds (1 minute). There are reasons why you might want to change this.', 'clearfy') . '<br><b>Clearfy</b>: ' . __('Disables automatic saving of drafts.', 'clearfy'),
|
181 |
+
'default' => false
|
182 |
+
];
|
183 |
+
}
|
184 |
+
|
185 |
$formOptions = array();
|
186 |
|
187 |
$formOptions[] = array(
|
admin/pages/class-pages-clearfy-settings.php
CHANGED
@@ -19,7 +19,7 @@ class WCL_ClearfySettingsPage extends WCL_Page {
|
|
19 |
* Mainly used to navigate between pages.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
-
* @see
|
23 |
*
|
24 |
* @var string
|
25 |
*/
|
@@ -53,32 +53,6 @@ class WCL_ClearfySettingsPage extends WCL_Page {
|
|
53 |
$this->plugin = $plugin;
|
54 |
}
|
55 |
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Requests assets (js and css) for the page.
|
59 |
-
*
|
60 |
-
* @return void
|
61 |
-
* @since 1.0.0
|
62 |
-
* @see FactoryPages445_AdminPage
|
63 |
-
*
|
64 |
-
*/
|
65 |
-
public function assets($scripts, $styles)
|
66 |
-
{
|
67 |
-
parent::assets($scripts, $styles);
|
68 |
-
|
69 |
-
$this->scripts->add(WCL_PLUGIN_URL . '/admin/assets/js/general.js');
|
70 |
-
|
71 |
-
$params = [
|
72 |
-
'import_options_nonce' => wp_create_nonce('wbcr_clearfy_import_options'),
|
73 |
-
'i18n' => [
|
74 |
-
'success_update_settings' => __('Settings successfully updated!', 'clearfy'),
|
75 |
-
'unknown_error' => __('During the setup, an unknown error occurred, please try again or contact the plugin support.', 'clearfy'),
|
76 |
-
]
|
77 |
-
];
|
78 |
-
|
79 |
-
$this->scripts->localize('wbcr_clearfy_ajax', $params);
|
80 |
-
}
|
81 |
-
|
82 |
/**
|
83 |
* Permalinks options.
|
84 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
+
* @see FactoryPages447_AdminPage
|
23 |
*
|
24 |
* @var string
|
25 |
*/
|
53 |
$this->plugin = $plugin;
|
54 |
}
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
/**
|
57 |
* Permalinks options.
|
58 |
*
|
admin/pages/class-pages-components-license.php
CHANGED
@@ -55,12 +55,12 @@ class WCL_ComponentsLicensePage extends WCL_Page {
|
|
55 |
/**
|
56 |
* WCL_LicensePage constructor.
|
57 |
*
|
58 |
-
* @param \
|
59 |
*
|
60 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
61 |
*
|
62 |
*/
|
63 |
-
public function __construct(
|
64 |
{
|
65 |
$this->menu_title = __('License', 'robin-image-optimizer');
|
66 |
$this->page_menu_short_description = __('Product activation', 'robin-image-optimizer');
|
@@ -74,24 +74,24 @@ class WCL_ComponentsLicensePage extends WCL_Page {
|
|
74 |
*
|
75 |
* @return void
|
76 |
* @since 1.0.0
|
77 |
-
* @see
|
78 |
*
|
79 |
*/
|
80 |
-
public function assets($scripts, $styles)
|
81 |
{
|
82 |
parent::assets($scripts, $styles);
|
83 |
|
84 |
$this->styles->add(WCL_PLUGIN_URL . '/admin/assets/css/components.css');
|
85 |
|
86 |
/**
|
87 |
-
* @param
|
88 |
-
* @param
|
89 |
*
|
90 |
* @since 1.4.0
|
91 |
*
|
92 |
*/
|
93 |
-
do_action('wbcr/clearfy/components/page_assets', $scripts, $styles);
|
94 |
-
}
|
95 |
|
96 |
/**
|
97 |
* This method simply show contents of the component page.
|
55 |
/**
|
56 |
* WCL_LicensePage constructor.
|
57 |
*
|
58 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
59 |
*
|
60 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
61 |
*
|
62 |
*/
|
63 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
64 |
{
|
65 |
$this->menu_title = __('License', 'robin-image-optimizer');
|
66 |
$this->page_menu_short_description = __('Product activation', 'robin-image-optimizer');
|
74 |
*
|
75 |
* @return void
|
76 |
* @since 1.0.0
|
77 |
+
* @see FactoryPages447_AdminPage
|
78 |
*
|
79 |
*/
|
80 |
+
/*public function assets($scripts, $styles)
|
81 |
{
|
82 |
parent::assets($scripts, $styles);
|
83 |
|
84 |
$this->styles->add(WCL_PLUGIN_URL . '/admin/assets/css/components.css');
|
85 |
|
86 |
/**
|
87 |
+
* @param Wbcr_Factory448_StyleList $styles
|
88 |
+
* @param Wbcr_Factory448_ScriptList $scripts
|
89 |
*
|
90 |
* @since 1.4.0
|
91 |
*
|
92 |
*/
|
93 |
+
/*do_action('wbcr/clearfy/components/page_assets', $scripts, $styles);
|
94 |
+
}*/
|
95 |
|
96 |
/**
|
97 |
* This method simply show contents of the component page.
|
admin/pages/class-pages-components.php
CHANGED
@@ -13,7 +13,7 @@ if( !defined('ABSPATH') ) {
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
-
class WCL_ComponentsPage extends \WBCR\
|
17 |
|
18 |
public function get_components()
|
19 |
{
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
class WCL_ComponentsPage extends \WBCR\FactoryClearfy240\Pages\Components {
|
17 |
|
18 |
public function get_components()
|
19 |
{
|
admin/pages/class-pages-defence-titan.php
CHANGED
@@ -19,7 +19,7 @@ class WCL_TitanSecurityPage extends WCL_Page {
|
|
19 |
* Mainly used to navigate between pages.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
-
* @see
|
23 |
*
|
24 |
* @var string
|
25 |
*/
|
@@ -83,7 +83,7 @@ class WCL_TitanSecurityPage extends WCL_Page {
|
|
83 |
?>
|
84 |
<script>
|
85 |
jQuery(document).ready(function($) {
|
86 |
-
$.
|
87 |
if( component_name.plugin_action === 'install' ) {
|
88 |
button.removeClass('wbcr-factory-purchase-premium');
|
89 |
button.addClass('wbcr-factory-activate-premium');
|
@@ -96,7 +96,7 @@ class WCL_TitanSecurityPage extends WCL_Page {
|
|
96 |
});
|
97 |
});
|
98 |
</script>
|
99 |
-
<div class="wbcr-factory-clearfy-
|
100 |
<div class="wbcr-factory-inner-contanier">
|
101 |
<h3>
|
102 |
<a href="https://wordpress.org/plugins/anti-spam" target="_blank"><?php _e('Install Firewall and Malware scanner (Titan sucurity) component', 'clearfy') ?></a>
|
19 |
* Mainly used to navigate between pages.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
+
* @see FactoryPages447_AdminPage
|
23 |
*
|
24 |
* @var string
|
25 |
*/
|
83 |
?>
|
84 |
<script>
|
85 |
jQuery(document).ready(function($) {
|
86 |
+
$.wfactory_448.hooks.add('core/components/updated', function(button, component_name) {
|
87 |
if( component_name.plugin_action === 'install' ) {
|
88 |
button.removeClass('wbcr-factory-purchase-premium');
|
89 |
button.addClass('wbcr-factory-activate-premium');
|
96 |
});
|
97 |
});
|
98 |
</script>
|
99 |
+
<div class="wbcr-factory-clearfy-240-multisite-suggetion">
|
100 |
<div class="wbcr-factory-inner-contanier">
|
101 |
<h3>
|
102 |
<a href="https://wordpress.org/plugins/anti-spam" target="_blank"><?php _e('Install Firewall and Malware scanner (Titan sucurity) component', 'clearfy') ?></a>
|
admin/pages/class-pages-defence.php
CHANGED
@@ -17,7 +17,7 @@ class WCL_DefencePage extends WCL_Page {
|
|
17 |
* The id of the page in the admin menu.
|
18 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
-
* @see
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
* @var string
|
@@ -132,7 +132,7 @@ class WCL_DefencePage extends WCL_Page {
|
|
132 |
//'cssClass' => 'postbox'
|
133 |
);
|
134 |
|
135 |
-
return
|
136 |
$form_options,
|
137 |
$this
|
138 |
), '1.3.1', 'wbcr_clearfy_defence_form_options' );
|
17 |
* The id of the page in the admin menu.
|
18 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
+
* @see FactoryPages447_AdminPage
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
* @var string
|
132 |
//'cssClass' => 'postbox'
|
133 |
);
|
134 |
|
135 |
+
return wbcr_factory_448_apply_filters_deprecated( 'wbcr_clr_defence_form_options', array(
|
136 |
$form_options,
|
137 |
$this
|
138 |
), '1.3.1', 'wbcr_clearfy_defence_form_options' );
|
admin/pages/class-pages-hide-login-page.php
CHANGED
@@ -17,7 +17,7 @@ class WCL_HideLoginPage extends WCL_Page {
|
|
17 |
* The id of the page in the admin menu.
|
18 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
-
* @see
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
* @var string
|
@@ -78,7 +78,7 @@ class WCL_HideLoginPage extends WCL_Page {
|
|
78 |
?>
|
79 |
<script>
|
80 |
jQuery(document).ready(function($) {
|
81 |
-
$.
|
82 |
if( component_name.plugin_action === 'install' ) {
|
83 |
button.removeClass('wbcr-factory-purchase-premium');
|
84 |
button.addClass('wbcr-factory-activate-premium');
|
@@ -91,7 +91,7 @@ class WCL_HideLoginPage extends WCL_Page {
|
|
91 |
});
|
92 |
});
|
93 |
</script>
|
94 |
-
<div class="wbcr-factory-clearfy-
|
95 |
<div class="wbcr-factory-inner-contanier">
|
96 |
<h3><?php _e('Install Hide login page component', 'clearfy') ?></h3>
|
97 |
|
17 |
* The id of the page in the admin menu.
|
18 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
+
* @see FactoryPages447_AdminPage
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
* @var string
|
78 |
?>
|
79 |
<script>
|
80 |
jQuery(document).ready(function($) {
|
81 |
+
$.wfactory_448.hooks.add('core/components/updated', function(button, component_name) {
|
82 |
if( component_name.plugin_action === 'install' ) {
|
83 |
button.removeClass('wbcr-factory-purchase-premium');
|
84 |
button.addClass('wbcr-factory-activate-premium');
|
91 |
});
|
92 |
});
|
93 |
</script>
|
94 |
+
<div class="wbcr-factory-clearfy-240-multisite-suggetion">
|
95 |
<div class="wbcr-factory-inner-contanier">
|
96 |
<h3><?php _e('Install Hide login page component', 'clearfy') ?></h3>
|
97 |
|
admin/pages/class-pages-image-optimization.php
CHANGED
@@ -19,7 +19,7 @@ class WCL_ImageOptimizationPage extends WCL_Page {
|
|
19 |
* Mainly used to navigate between pages.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
-
* @see
|
23 |
*
|
24 |
* @var string
|
25 |
*/
|
@@ -79,7 +79,7 @@ class WCL_ImageOptimizationPage extends WCL_Page {
|
|
79 |
?>
|
80 |
<script>
|
81 |
jQuery(document).ready(function($) {
|
82 |
-
$.
|
83 |
if( component_name.plugin_action === 'install' ) {
|
84 |
button.removeClass('wbcr-factory-purchase-premium');
|
85 |
button.addClass('wbcr-factory-activate-premium');
|
@@ -92,7 +92,7 @@ class WCL_ImageOptimizationPage extends WCL_Page {
|
|
92 |
});
|
93 |
});
|
94 |
</script>
|
95 |
-
<div class="wbcr-factory-clearfy-
|
96 |
<div class="wbcr-factory-inner-contanier">
|
97 |
<h3><?php _e( 'Install Robin Image Optimizer component', 'clearfy' ) ?></h3>
|
98 |
<p><?php _e( 'To start optimizing images, you need to install the additional component Robin image optimizer!', 'clearfy' ) ?></p>
|
19 |
* Mainly used to navigate between pages.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
+
* @see FactoryPages447_AdminPage
|
23 |
*
|
24 |
* @var string
|
25 |
*/
|
79 |
?>
|
80 |
<script>
|
81 |
jQuery(document).ready(function($) {
|
82 |
+
$.wfactory_448.hooks.add('core/components/updated', function(button, component_name) {
|
83 |
if( component_name.plugin_action === 'install' ) {
|
84 |
button.removeClass('wbcr-factory-purchase-premium');
|
85 |
button.addClass('wbcr-factory-activate-premium');
|
92 |
});
|
93 |
});
|
94 |
</script>
|
95 |
+
<div class="wbcr-factory-clearfy-240-multisite-suggetion">
|
96 |
<div class="wbcr-factory-inner-contanier">
|
97 |
<h3><?php _e( 'Install Robin Image Optimizer component', 'clearfy' ) ?></h3>
|
98 |
<p><?php _e( 'To start optimizing images, you need to install the additional component Robin image optimizer!', 'clearfy' ) ?></p>
|
admin/pages/class-pages-license.php
CHANGED
@@ -13,7 +13,7 @@
|
|
13 |
*
|
14 |
* @copyright (c) 2018 Webraftic Ltd
|
15 |
*/
|
16 |
-
class WCL_LicensePage extends
|
17 |
|
18 |
/**
|
19 |
* {@inheritdoc}
|
@@ -36,12 +36,12 @@
|
|
36 |
/**
|
37 |
* WCL_LicensePage constructor.
|
38 |
*
|
39 |
-
* @param \
|
40 |
*
|
41 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
42 |
*
|
43 |
*/
|
44 |
-
public function __construct(
|
45 |
$this->menu_title = __( 'License', 'robin-image-optimizer' );
|
46 |
$this->page_menu_short_description = __( 'Product activation', 'robin-image-optimizer' );
|
47 |
$this->plan_name = __( 'Clearfy Business', 'robin-image-optimizer' );
|
13 |
*
|
14 |
* @copyright (c) 2018 Webraftic Ltd
|
15 |
*/
|
16 |
+
class WCL_LicensePage extends Wbcr_FactoryClearfy240_LicensePage {
|
17 |
|
18 |
/**
|
19 |
* {@inheritdoc}
|
36 |
/**
|
37 |
* WCL_LicensePage constructor.
|
38 |
*
|
39 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
40 |
*
|
41 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
42 |
*
|
43 |
*/
|
44 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
45 |
$this->menu_title = __( 'License', 'robin-image-optimizer' );
|
46 |
$this->page_menu_short_description = __( 'Product activation', 'robin-image-optimizer' );
|
47 |
$this->plan_name = __( 'Clearfy Business', 'robin-image-optimizer' );
|
admin/pages/class-pages-performance-cache.php
CHANGED
@@ -88,58 +88,6 @@ class WCL_CachePage extends WCL_Page {
|
|
88 |
'default' => false
|
89 |
];
|
90 |
|
91 |
-
$options[] = [
|
92 |
-
'type' => 'checkbox',
|
93 |
-
'way' => 'buttons',
|
94 |
-
'name' => 'cache_mobile',
|
95 |
-
'title' => __('Mobile', 'clearfy'),
|
96 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
97 |
-
'hint' => __("Don't show the cached version for desktop to mobile devices", 'clearfy'),
|
98 |
-
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
99 |
-
'default' => false
|
100 |
-
];
|
101 |
-
|
102 |
-
$options[] = [
|
103 |
-
'type' => 'checkbox',
|
104 |
-
'way' => 'buttons',
|
105 |
-
'name' => 'cache_mobile_theme',
|
106 |
-
'title' => __('Create cache for mobile theme', 'clearfy'),
|
107 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
108 |
-
'hint' => __('If you use a mobile theme, you should enable both “Mobile” and “Create cache for mobile theme” options. If you use a responsive theme, no need to use the mobile cache feature. You should disable “Mobile” and “Create cache for mobile theme” options.', 'clearfy'),
|
109 |
-
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
110 |
-
'default' => false,
|
111 |
-
];
|
112 |
-
|
113 |
-
$options[] = [
|
114 |
-
'type' => 'checkbox',
|
115 |
-
'way' => 'buttons',
|
116 |
-
'name' => 'widget_cache',
|
117 |
-
'title' => __('Widget Cache', 'clearfy'),
|
118 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
119 |
-
'hint' => __('You can reduce the number of sql queries with this feature.
|
120 |
-
|
121 |
-
When “Cache System” is enabled, the page is saved as a static html file, thus PHP and MySQL does not work for the page which has been cached. MySQL and PHP work to generate the html of the other pages which have not been cached yet.
|
122 |
-
|
123 |
-
Every time before the cache is created, the same widgets are generated again and again. This feature avoids generating the widgets again and again to reduce the sql queries.', 'clearfy'),
|
124 |
-
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
125 |
-
'default' => false,
|
126 |
-
];
|
127 |
-
|
128 |
-
$options[] = [
|
129 |
-
'type' => 'checkbox',
|
130 |
-
'way' => 'buttons',
|
131 |
-
'name' => 'preload_cache',
|
132 |
-
'title' => __('Preload cache', 'clearfy'),
|
133 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
134 |
-
'hint' => __('The preload feature stars to work after delete cache.
|
135 |
-
|
136 |
-
When the Preload feature calls the urls, the cache of urls are created automatically. When all the pages are cached, the preload stops working. When the cache is clear, it starts working again.
|
137 |
-
|
138 |
-
The Preload runs every 5 minutes. If you want set a specific interval. Note: The preload feature works with the WP_CRON system.', 'clearfy'),
|
139 |
-
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
140 |
-
'default' => false
|
141 |
-
];
|
142 |
-
|
143 |
$options[] = [
|
144 |
'type' => 'checkbox',
|
145 |
'way' => 'buttons',
|
@@ -151,28 +99,6 @@ The Preload runs every 5 minutes. If you want set a specific interval. Note: The
|
|
151 |
'default' => false
|
152 |
];
|
153 |
|
154 |
-
$options[] = [
|
155 |
-
'type' => 'checkbox',
|
156 |
-
'way' => 'buttons',
|
157 |
-
'name' => 'clear_cache_for_newpost',
|
158 |
-
'title' => __('Clear cache for new post', 'clearfy'),
|
159 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
160 |
-
'hint' => __('Clear cache files when a post or page is published', 'clearfy'),
|
161 |
-
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
162 |
-
'default' => false
|
163 |
-
];
|
164 |
-
|
165 |
-
$options[] = [
|
166 |
-
'type' => 'checkbox',
|
167 |
-
'way' => 'buttons',
|
168 |
-
'name' => 'clear_cache_for_updated_post',
|
169 |
-
'title' => __('Clear cache for updated Post', 'clearfy'),
|
170 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
171 |
-
'hint' => __('Clear cache files when a post or page is updated', 'clearfy'),
|
172 |
-
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
173 |
-
'default' => false
|
174 |
-
];
|
175 |
-
|
176 |
$options[] = [
|
177 |
'type' => 'checkbox',
|
178 |
'way' => 'buttons',
|
@@ -201,33 +127,6 @@ If the commonly used files are cached by browser, the visitors’ browsers do no
|
|
201 |
'default' => false
|
202 |
];
|
203 |
|
204 |
-
$options[] = [
|
205 |
-
'type' => 'textarea',
|
206 |
-
'name' => 'exclude_files',
|
207 |
-
'title' => __('Filenames that can be cached', 'clearfy'),
|
208 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
209 |
-
'hint' => __('Add here those filenames that can be cached, even if they match one of the rejected substring specified above.', 'clearfy'),
|
210 |
-
'htmlAttrs' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['disabled' => 'disabled'] : [],
|
211 |
-
'default' => 'wp-comments-popup.php
|
212 |
-
wp-links-opml.php
|
213 |
-
wp-locations.php
|
214 |
-
'
|
215 |
-
];
|
216 |
-
$options[] = [
|
217 |
-
'type' => 'textarea',
|
218 |
-
'name' => 'exclude_pages',
|
219 |
-
'title' => __('Rejected User Agents', 'clearfy'),
|
220 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
221 |
-
'hint' => __('Strings in the HTTP ’User Agent’ header that prevent WP-Cache from caching bot, spiders, and crawlers’ requests. Note that super cached files are still sent to these agents if they already exists.', 'clearfy'),
|
222 |
-
'htmlAttrs' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['disabled' => 'disabled'] : [],
|
223 |
-
'default' => 'bot
|
224 |
-
ia_archive
|
225 |
-
slurp
|
226 |
-
crawl
|
227 |
-
spider
|
228 |
-
Yandex
|
229 |
-
'
|
230 |
-
];
|
231 |
$options[] = [
|
232 |
'type' => 'textarea',
|
233 |
'name' => 'cache_reject_uri',
|
@@ -241,6 +140,114 @@ Use (.*) wildcards to address multiple URLs under a given path.', 'clearfy'),
|
|
241 |
] : ['placeholder' => '/members/(.*)'],
|
242 |
];
|
243 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
$form_options = [];
|
245 |
|
246 |
if( !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ) {
|
@@ -257,7 +264,7 @@ Use (.*) wildcards to address multiple URLs under a given path.', 'clearfy'),
|
|
257 |
//'cssClass' => 'postbox'
|
258 |
];
|
259 |
|
260 |
-
return apply_filters('
|
261 |
}
|
262 |
|
263 |
|
@@ -272,7 +279,7 @@ Use (.*) wildcards to address multiple URLs under a given path.', 'clearfy'),
|
|
272 |
?>
|
273 |
<script>
|
274 |
jQuery(document).ready(function($) {
|
275 |
-
$.
|
276 |
console.log(data);
|
277 |
|
278 |
if( data.plugin_action === 'install' ) {
|
@@ -282,14 +289,14 @@ Use (.*) wildcards to address multiple URLs under a given path.', 'clearfy'),
|
|
282 |
|
283 |
});
|
284 |
|
285 |
-
$.
|
286 |
button.remove();
|
287 |
window.location.href = '<?php echo $this->getBaseUrl('clearfy_cache'); ?>';
|
288 |
|
289 |
});
|
290 |
});
|
291 |
</script>
|
292 |
-
<div class="wbcr-factory-clearfy-
|
293 |
<div class="wbcr-factory-inner-contanier">
|
294 |
<h3><?php _e('Install Page Cache component', 'clearfy') ?></h3>
|
295 |
<p><?php _e('To start page caching, you need to install the additional component Cache!', 'clearfy') ?></p>
|
88 |
'default' => false
|
89 |
];
|
90 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
$options[] = [
|
92 |
'type' => 'checkbox',
|
93 |
'way' => 'buttons',
|
99 |
'default' => false
|
100 |
];
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
$options[] = [
|
103 |
'type' => 'checkbox',
|
104 |
'way' => 'buttons',
|
127 |
'default' => false
|
128 |
];
|
129 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
$options[] = [
|
131 |
'type' => 'textarea',
|
132 |
'name' => 'cache_reject_uri',
|
140 |
] : ['placeholder' => '/members/(.*)'],
|
141 |
];
|
142 |
|
143 |
+
$options[] = [
|
144 |
+
'type' => 'more-link',
|
145 |
+
'name' => 'cache-group',
|
146 |
+
'title' => __('Advanced options', 'clearfy'),
|
147 |
+
'count' => 8,
|
148 |
+
'items' => [
|
149 |
+
[
|
150 |
+
'type' => 'checkbox',
|
151 |
+
'way' => 'buttons',
|
152 |
+
'name' => 'cache_mobile',
|
153 |
+
'title' => __('Mobile', 'clearfy'),
|
154 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
155 |
+
'hint' => __("Don't show the cached version for desktop to mobile devices", 'clearfy'),
|
156 |
+
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
157 |
+
'default' => false
|
158 |
+
],
|
159 |
+
|
160 |
+
[
|
161 |
+
'type' => 'checkbox',
|
162 |
+
'way' => 'buttons',
|
163 |
+
'name' => 'cache_mobile_theme',
|
164 |
+
'title' => __('Create cache for mobile theme', 'clearfy'),
|
165 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
166 |
+
'hint' => __('If you use a mobile theme, you should enable both “Mobile” and “Create cache for mobile theme” options. If you use a responsive theme, no need to use the mobile cache feature. You should disable “Mobile” and “Create cache for mobile theme” options.', 'clearfy'),
|
167 |
+
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
168 |
+
'default' => false,
|
169 |
+
],
|
170 |
+
|
171 |
+
[
|
172 |
+
'type' => 'checkbox',
|
173 |
+
'way' => 'buttons',
|
174 |
+
'name' => 'widget_cache',
|
175 |
+
'title' => __('Widget Cache', 'clearfy'),
|
176 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
177 |
+
'hint' => __('You can reduce the number of sql queries with this feature.
|
178 |
+
|
179 |
+
When “Cache System” is enabled, the page is saved as a static html file, thus PHP and MySQL does not work for the page which has been cached. MySQL and PHP work to generate the html of the other pages which have not been cached yet.
|
180 |
+
|
181 |
+
Every time before the cache is created, the same widgets are generated again and again. This feature avoids generating the widgets again and again to reduce the sql queries.', 'clearfy'),
|
182 |
+
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
183 |
+
'default' => true,
|
184 |
+
],
|
185 |
+
|
186 |
+
[
|
187 |
+
'type' => 'checkbox',
|
188 |
+
'way' => 'buttons',
|
189 |
+
'name' => 'preload_cache',
|
190 |
+
'title' => __('Preload cache', 'clearfy'),
|
191 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
192 |
+
'hint' => __('The preload feature stars to work after delete cache.
|
193 |
+
|
194 |
+
When the Preload feature calls the urls, the cache of urls are created automatically. When all the pages are cached, the preload stops working. When the cache is clear, it starts working again.
|
195 |
+
|
196 |
+
The Preload runs every 5 minutes. If you want set a specific interval. Note: The preload feature works with the WP_CRON system.', 'clearfy'),
|
197 |
+
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
198 |
+
'default' => false
|
199 |
+
],
|
200 |
+
[
|
201 |
+
'type' => 'checkbox',
|
202 |
+
'way' => 'buttons',
|
203 |
+
'name' => 'clear_cache_for_newpost',
|
204 |
+
'title' => __('Clear cache for new post', 'clearfy'),
|
205 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
206 |
+
'hint' => __('Clear cache files when a post or page is published', 'clearfy'),
|
207 |
+
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
208 |
+
'default' => true
|
209 |
+
],
|
210 |
+
|
211 |
+
[
|
212 |
+
'type' => 'checkbox',
|
213 |
+
'way' => 'buttons',
|
214 |
+
'name' => 'clear_cache_for_updated_post',
|
215 |
+
'title' => __('Clear cache for updated Post', 'clearfy'),
|
216 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
217 |
+
'hint' => __('Clear cache files when a post or page is updated', 'clearfy'),
|
218 |
+
'cssClass' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'] : [],
|
219 |
+
'default' => true
|
220 |
+
],
|
221 |
+
[
|
222 |
+
'type' => 'textarea',
|
223 |
+
'name' => 'exclude_files',
|
224 |
+
'title' => __('Filenames that can be cached', 'clearfy'),
|
225 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
226 |
+
'hint' => __('Add here those filenames that can be cached, even if they match one of the rejected substring specified above.', 'clearfy'),
|
227 |
+
'htmlAttrs' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['disabled' => 'disabled'] : [],
|
228 |
+
'default' => 'wp-comments-popup.php
|
229 |
+
wp-links-opml.php
|
230 |
+
wp-locations.php
|
231 |
+
'
|
232 |
+
],
|
233 |
+
[
|
234 |
+
'type' => 'textarea',
|
235 |
+
'name' => 'exclude_pages',
|
236 |
+
'title' => __('Rejected User Agents', 'clearfy'),
|
237 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
238 |
+
'hint' => __('Strings in the HTTP ’User Agent’ header that prevent WP-Cache from caching bot, spiders, and crawlers’ requests. Note that super cached files are still sent to these agents if they already exists.', 'clearfy'),
|
239 |
+
'htmlAttrs' => !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ? ['disabled' => 'disabled'] : [],
|
240 |
+
'default' => 'bot
|
241 |
+
ia_archive
|
242 |
+
slurp
|
243 |
+
crawl
|
244 |
+
spider
|
245 |
+
Yandex
|
246 |
+
'
|
247 |
+
]
|
248 |
+
]
|
249 |
+
];
|
250 |
+
|
251 |
$form_options = [];
|
252 |
|
253 |
if( !defined('WCLEARFY_CACHEPRO_PLUGIN_ACTIVE') ) {
|
264 |
//'cssClass' => 'postbox'
|
265 |
];
|
266 |
|
267 |
+
return apply_filters('wclearfy_cache_form_options', $form_options, $this);
|
268 |
}
|
269 |
|
270 |
|
279 |
?>
|
280 |
<script>
|
281 |
jQuery(document).ready(function($) {
|
282 |
+
$.wfactory_448.hooks.add('core/components/updated', function(button, data) {
|
283 |
console.log(data);
|
284 |
|
285 |
if( data.plugin_action === 'install' ) {
|
289 |
|
290 |
});
|
291 |
|
292 |
+
$.wfactory_448.hooks.add('core/components/activated', function(button, data) {
|
293 |
button.remove();
|
294 |
window.location.href = '<?php echo $this->getBaseUrl('clearfy_cache'); ?>';
|
295 |
|
296 |
});
|
297 |
});
|
298 |
</script>
|
299 |
+
<div class="wbcr-factory-clearfy-240-multisite-suggetion">
|
300 |
<div class="wbcr-factory-inner-contanier">
|
301 |
<h3><?php _e('Install Page Cache component', 'clearfy') ?></h3>
|
302 |
<p><?php _e('To start page caching, you need to install the additional component Cache!', 'clearfy') ?></p>
|
admin/pages/class-pages-performance-google.php
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
* The id of the page in the admin menu.
|
17 |
*
|
18 |
* Mainly used to navigate between pages.
|
19 |
-
* @see
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
* @var string
|
@@ -82,7 +82,7 @@
|
|
82 |
{
|
83 |
$options = array();
|
84 |
|
85 |
-
|
86 |
'type' => 'html',
|
87 |
'html' => '<div class="wbcr-factory-page-group-header">' . __('<strong>Fonts and Maps</strong>.', 'clearfy') . '<p>' . __('Google Fonts and Maps strongly affect your website loading speed. Use settings below to disable or optimize Google fonts and Maps.', 'clearfy') . '</p></div>'
|
88 |
);
|
@@ -141,7 +141,7 @@ Reasons for not using Google Maps might be privacy and security, local developme
|
|
141 |
'name' => 'exclude_from_disable_google_maps',
|
142 |
'title' => __('Exclude pages from Disable Google Maps filter', 'clearfy'),
|
143 |
'hint' => __('Posts or Pages IDs separated by a ,', 'clearfy')
|
144 |
-
)
|
145 |
|
146 |
$form_options = array();
|
147 |
|
16 |
* The id of the page in the admin menu.
|
17 |
*
|
18 |
* Mainly used to navigate between pages.
|
19 |
+
* @see FactoryPages447_AdminPage
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
* @var string
|
82 |
{
|
83 |
$options = array();
|
84 |
|
85 |
+
/*$options[] = array(
|
86 |
'type' => 'html',
|
87 |
'html' => '<div class="wbcr-factory-page-group-header">' . __('<strong>Fonts and Maps</strong>.', 'clearfy') . '<p>' . __('Google Fonts and Maps strongly affect your website loading speed. Use settings below to disable or optimize Google fonts and Maps.', 'clearfy') . '</p></div>'
|
88 |
);
|
141 |
'name' => 'exclude_from_disable_google_maps',
|
142 |
'title' => __('Exclude pages from Disable Google Maps filter', 'clearfy'),
|
143 |
'hint' => __('Posts or Pages IDs separated by a ,', 'clearfy')
|
144 |
+
);*/
|
145 |
|
146 |
$form_options = array();
|
147 |
|
admin/pages/class-pages-performance.php
CHANGED
@@ -86,37 +86,7 @@ class WCL_PerformancePage extends WCL_Page {
|
|
86 |
'html' => '<div class="wbcr-factory-page-group-header">' . __('<strong>Clear the unnecessary scripts</strong>', 'clearfy') . '<p>' . __('This set of settings will help you remove unnecessary links and code from the head section, as well as reduce your website\'s pages weight.', 'clearfy') . '</p></div>'
|
87 |
];
|
88 |
|
89 |
-
|
90 |
-
'type' => 'checkbox',
|
91 |
-
'way' => 'buttons',
|
92 |
-
'name' => 'disable_feed',
|
93 |
-
'title' => __('Disable RSS feeds', 'clearfy'),
|
94 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
95 |
-
'hint' => __('By default, WordPress generates all types of different RSS feeds for your site. While RSS feeds can be useful if you are running a blog, businesses might not always utilize these. Not every site out there has a blog.', 'clearfy') . '<br><b>Clearfy: </b>' . sprintf(__('Removes a link to the RSS-feed from the %s section, closes and puts the redirect from all RSS-feeds.', 'clearfy'), '<head>'),
|
96 |
-
'default' => false,
|
97 |
-
'eventsOn' => [
|
98 |
-
'show' => '.factory-control-disabled_feed_behaviour'
|
99 |
-
],
|
100 |
-
'eventsOff' => [
|
101 |
-
'hide' => '.factory-control-disabled_feed_behaviour'
|
102 |
-
]
|
103 |
-
];
|
104 |
-
|
105 |
-
$options[] = [
|
106 |
-
'type' => 'dropdown',
|
107 |
-
'way' => 'buttons',
|
108 |
-
'name' => 'disabled_feed_behaviour',
|
109 |
-
'data' => [
|
110 |
-
['redirect_301', __('Redirect 301', 'clearfy')],
|
111 |
-
['redirect_404', __('Page 404', 'clearfy')],
|
112 |
-
],
|
113 |
-
'title' => __('Redirect feed requests', 'clearfy'),
|
114 |
-
'hint' => __('Forward all requests to page 404 or to the main page through 301 redirects.', 'clearfy'),
|
115 |
-
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
116 |
-
'default' => 'redirect_301'
|
117 |
-
];
|
118 |
-
|
119 |
-
$options[] = [
|
120 |
'type' => 'checkbox',
|
121 |
'way' => 'buttons',
|
122 |
'name' => 'disable_json_rest_api',
|
@@ -135,7 +105,7 @@ class WCL_PerformancePage extends WCL_Page {
|
|
135 |
$options[] = [
|
136 |
'type' => 'html',
|
137 |
'html' => [$this, 'restApiDangerMessage']
|
138 |
-
]
|
139 |
|
140 |
$options[] = [
|
141 |
'type' => 'checkbox',
|
@@ -147,7 +117,7 @@ class WCL_PerformancePage extends WCL_Page {
|
|
147 |
'default' => false
|
148 |
];
|
149 |
|
150 |
-
|
151 |
'type' => 'checkbox',
|
152 |
'way' => 'buttons',
|
153 |
'name' => 'remove_jquery_migrate',
|
@@ -155,7 +125,7 @@ class WCL_PerformancePage extends WCL_Page {
|
|
155 |
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'red'],
|
156 |
'hint' => __('They started adding jQuery migrate in WordPress 3.6. Most up-to-date frontend code and plugins don’t require jquery-migrate.min.js. In most cases, this simply adds unnecessary load to your site. You can see this running if you launch Chrome Devtools console.', 'clearfy') . '<br><br><b>Clearfy: </b>' . __('Removes jQuery Migrate JavaScript file (jquery-migrate.min.js).', 'clearfy') . '<br>--<br><span class="wbcr-factory-light-orange-color">' . __('Warning! If there is a broke on your site, disable this option!', 'clearfy') . '</span>',
|
157 |
'default' => false
|
158 |
-
]
|
159 |
|
160 |
$options[] = [
|
161 |
'type' => 'checkbox',
|
@@ -167,6 +137,16 @@ class WCL_PerformancePage extends WCL_Page {
|
|
167 |
'default' => false
|
168 |
];
|
169 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
170 |
/*$options[] = array(
|
171 |
'type' => 'checkbox',
|
172 |
'way' => 'buttons',
|
@@ -176,7 +156,7 @@ class WCL_PerformancePage extends WCL_Page {
|
|
176 |
'hint' => sprintf(__('Since version 4.6.1 in WordPress there are new links in the section %s this type of: ', 'clearfy'), 'head') . ' <code>link rel="dns-prefetch" href="//s.w.org"</code><br><br><b>Clearfy: </b>' . sprintf(__('Removes dns-prefetch links from the %s section', 'clearfy'), 'head'),
|
177 |
'default' => false
|
178 |
);*/
|
179 |
-
|
180 |
'type' => 'checkbox',
|
181 |
'way' => 'buttons',
|
182 |
'name' => 'remove_rsd_link',
|
@@ -235,8 +215,25 @@ In particular, the profile is used for the XFN microformat (XHTML Friends Networ
|
|
235 |
'layout' => ['hint-type' => 'icon'],
|
236 |
'hint' => __('WP by default for the widget "recent comments" prescribes in the code styles that are almost impossible to change, because to them apply! important.', 'clearfy') . '<br><br><b>Clearfy: </b>' . __('Removes .recentcomments styles from head section.', 'clearfy'),
|
237 |
'default' => false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
];
|
239 |
|
|
|
|
|
|
|
|
|
|
|
240 |
$options[] = [
|
241 |
'type' => 'checkbox',
|
242 |
'way' => 'buttons',
|
@@ -257,88 +254,68 @@ In particular, the profile is used for the XFN microformat (XHTML Friends Networ
|
|
257 |
'default' => false
|
258 |
];
|
259 |
|
260 |
-
$options[] =
|
261 |
'type' => 'checkbox',
|
262 |
'way' => 'buttons',
|
263 |
-
'name' => '
|
264 |
-
'title' => __('
|
265 |
-
'layout' =>
|
266 |
-
'hint' => __('
|
267 |
-
If you’re using Identicons or any other generated default avatar, the user should keep a consistent avatar unless they change their registered email.
|
268 |
-
', 'clearfy'),
|
269 |
'default' => false
|
270 |
-
|
271 |
|
272 |
-
$options[] =
|
273 |
-
'type' => '
|
274 |
-
'
|
275 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
276 |
|
277 |
-
$options[] =
|
278 |
'type' => 'checkbox',
|
279 |
'way' => 'buttons',
|
280 |
-
'name' => '
|
281 |
-
'title' => __('Disable
|
|
|
|
|
|
|
282 |
'default' => false,
|
283 |
-
'eventsOn' =>
|
284 |
-
'
|
285 |
-
|
286 |
-
'eventsOff' =>
|
287 |
-
'
|
288 |
-
|
289 |
-
|
290 |
|
291 |
-
$options[] =
|
292 |
-
'type' => '
|
293 |
-
'
|
294 |
-
'
|
295 |
-
'
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
['30', '30 ' . __('revisions', 'clearfy')],
|
301 |
-
['35', '35 ' . __('revisions', 'clearfy')],
|
302 |
-
['40', '40 ' . __('revisions', 'clearfy')],
|
303 |
-
['45', '45 ' . __('revisions', 'clearfy')],
|
304 |
-
['50', '50 ' . __('revisions', 'clearfy')],
|
305 |
-
['55', '55 ' . __('revisions', 'clearfy')],
|
306 |
-
['60', '60 ' . __('revisions', 'clearfy')]
|
307 |
-
],
|
308 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
309 |
-
'hint' => __('WordPress automatically saves revisions when you are working on posts and pages. These can begin to add up pretty quick. By default, there is no limit in place. We have seen posts with over 1,000 revisions. Multiply this by 50 pages and suddenly you have over 50,000 revisions sitting in your database. The problem with this is that you will most likely never use them and they can start slowing down your database as well as using disk space.
|
310 |
-
So we recommend either disabling or limiting your revisions. ', 'clearfy'),
|
311 |
-
'default' => 'default'
|
312 |
-
];
|
313 |
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
'hint' => __('By activating this option autosave feature in the Gutenberg editor will be disabled. Alternatively it also provides options in the editor to select a longer autosave interval time than the default 10 seconds.', 'clearfy'),
|
322 |
-
'default' => false
|
323 |
-
];
|
324 |
-
} else {
|
325 |
-
$options[] = [
|
326 |
-
'type' => 'checkbox',
|
327 |
-
'way' => 'buttons',
|
328 |
-
'name' => 'disable_post_autosave',
|
329 |
-
'title' => __('Disable autosave', 'clearfy'),
|
330 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
331 |
-
'hint' => __('WordPress by default automatically saves a draft every 60 seconds (1 minute). There are reasons why you might want to change this.', 'clearfy') . '<br><b>Clearfy</b>: ' . __('Disables automatic saving of drafts.', 'clearfy'),
|
332 |
-
'default' => false
|
333 |
-
];
|
334 |
-
}
|
335 |
|
336 |
-
|
337 |
'type' => 'html',
|
338 |
'html' => '<div class="wbcr-clearfy-group-header">' . '<strong>' . __('Remove query strings from static resources', 'clearfy') . '</strong>' . '<p>' . __('This funcitons will remove query strings from static resources like CSS & JS files inside the HTML <head> element to improve your speed scores in services like Pingdom, GTmetrix, PageSpeed and YSlow. <b style="color:#ff5722">Important:</b> This does not work for authorized users. To avoid problems after plugins update!', 'clearfy') . '</p>' . '</div>'
|
339 |
-
]
|
340 |
|
341 |
-
|
342 |
'type' => 'checkbox',
|
343 |
'way' => 'buttons',
|
344 |
'name' => 'remove_js_version',
|
@@ -363,8 +340,8 @@ So we recommend either disabling or limiting your revisions. ', 'clearfy'),
|
|
363 |
),
|
364 |
'eventsOff' => array(
|
365 |
'hide' => '.factory-control-disable_remove_style_version_for_auth_users'
|
366 |
-
)
|
367 |
-
]
|
368 |
|
369 |
/*$options[] = array(
|
370 |
'type' => 'checkbox',
|
@@ -375,14 +352,14 @@ So we recommend either disabling or limiting your revisions. ', 'clearfy'),
|
|
375 |
'default' => false
|
376 |
);*/
|
377 |
|
378 |
-
|
379 |
'type' => 'textarea',
|
380 |
'name' => 'remove_version_exclude',
|
381 |
'height' => '120',
|
382 |
'title' => __('Exclude stylesheet/script file names', 'clearfy'),
|
383 |
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
384 |
'hint' => __('Enter Stylesheet/Script file names to exclude from version removal (each exclude file starts with a new line)', 'clearfy') . '<br><br><b>' . __('Example', 'clearfy') . ':</b>' . ' http://testwp.dev/wp-includes/js/jquery/jquery.js',
|
385 |
-
]
|
386 |
|
387 |
$options[] = [
|
388 |
'type' => 'html',
|
86 |
'html' => '<div class="wbcr-factory-page-group-header">' . __('<strong>Clear the unnecessary scripts</strong>', 'clearfy') . '<p>' . __('This set of settings will help you remove unnecessary links and code from the head section, as well as reduce your website\'s pages weight.', 'clearfy') . '</p></div>'
|
87 |
];
|
88 |
|
89 |
+
/*$options[] = [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
'type' => 'checkbox',
|
91 |
'way' => 'buttons',
|
92 |
'name' => 'disable_json_rest_api',
|
105 |
$options[] = [
|
106 |
'type' => 'html',
|
107 |
'html' => [$this, 'restApiDangerMessage']
|
108 |
+
];*/
|
109 |
|
110 |
$options[] = [
|
111 |
'type' => 'checkbox',
|
117 |
'default' => false
|
118 |
];
|
119 |
|
120 |
+
/*$options[] = [
|
121 |
'type' => 'checkbox',
|
122 |
'way' => 'buttons',
|
123 |
'name' => 'remove_jquery_migrate',
|
125 |
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'red'],
|
126 |
'hint' => __('They started adding jQuery migrate in WordPress 3.6. Most up-to-date frontend code and plugins don’t require jquery-migrate.min.js. In most cases, this simply adds unnecessary load to your site. You can see this running if you launch Chrome Devtools console.', 'clearfy') . '<br><br><b>Clearfy: </b>' . __('Removes jQuery Migrate JavaScript file (jquery-migrate.min.js).', 'clearfy') . '<br>--<br><span class="wbcr-factory-light-orange-color">' . __('Warning! If there is a broke on your site, disable this option!', 'clearfy') . '</span>',
|
127 |
'default' => false
|
128 |
+
];*/
|
129 |
|
130 |
$options[] = [
|
131 |
'type' => 'checkbox',
|
137 |
'default' => false
|
138 |
];
|
139 |
|
140 |
+
$options[] = [
|
141 |
+
'type' => 'checkbox',
|
142 |
+
'way' => 'buttons',
|
143 |
+
'name' => 'remove_bloat',
|
144 |
+
'title' => __('Remove bloat in head', 'clearfy'),
|
145 |
+
'layout' => ['hint-type' => 'icon'],
|
146 |
+
'hint' => __('Remove RSD Link, XFN (XHTML Friends Network) Profile Link, wlwmanifest Link, Shortlink, Remove links to previous, next post, .recentcomments styles', 'clearfy') . '<br><code>link rel="EditURI" type="application/rsd+xml" title="RSD"</code><br><br><b>Clearfy: </b>' . __('Remove RSD (Real Simple Discovery) link tag.', 'clearfy'),
|
147 |
+
'default' => false
|
148 |
+
];
|
149 |
+
|
150 |
/*$options[] = array(
|
151 |
'type' => 'checkbox',
|
152 |
'way' => 'buttons',
|
156 |
'hint' => sprintf(__('Since version 4.6.1 in WordPress there are new links in the section %s this type of: ', 'clearfy'), 'head') . ' <code>link rel="dns-prefetch" href="//s.w.org"</code><br><br><b>Clearfy: </b>' . sprintf(__('Removes dns-prefetch links from the %s section', 'clearfy'), 'head'),
|
157 |
'default' => false
|
158 |
);*/
|
159 |
+
/*$options[] = [
|
160 |
'type' => 'checkbox',
|
161 |
'way' => 'buttons',
|
162 |
'name' => 'remove_rsd_link',
|
215 |
'layout' => ['hint-type' => 'icon'],
|
216 |
'hint' => __('WP by default for the widget "recent comments" prescribes in the code styles that are almost impossible to change, because to them apply! important.', 'clearfy') . '<br><br><b>Clearfy: </b>' . __('Removes .recentcomments styles from head section.', 'clearfy'),
|
217 |
'default' => false
|
218 |
+
];*/
|
219 |
+
|
220 |
+
$options[] = [
|
221 |
+
'type' => 'checkbox',
|
222 |
+
'way' => 'buttons',
|
223 |
+
'name' => 'disable_gravatars',
|
224 |
+
'title' => __('Disable gravatars', 'clearfy'),
|
225 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
226 |
+
'hint' => __('This function that prevents the user’s gravatar being automatically obtained from gravatar.com based on their registered email. This would be useful for sites where users require an extra layer of privacy, or if you just want to prevent potentially silly or embarrasing avatar accidents.
|
227 |
+
If you’re using Identicons or any other generated default avatar, the user should keep a consistent avatar unless they change their registered email.
|
228 |
+
', 'clearfy'),
|
229 |
+
'default' => false
|
230 |
];
|
231 |
|
232 |
+
$options[] = array(
|
233 |
+
'type' => 'html',
|
234 |
+
'html' => '<div class="wbcr-factory-page-group-header">' . __('<strong>Fonts and Maps</strong>.', 'clearfy') . '<p>' . __('Google Fonts and Maps strongly affect your website loading speed. Use settings below to disable or optimize Google fonts and Maps.', 'clearfy') . '</p></div>'
|
235 |
+
);
|
236 |
+
|
237 |
$options[] = [
|
238 |
'type' => 'checkbox',
|
239 |
'way' => 'buttons',
|
254 |
'default' => false
|
255 |
];
|
256 |
|
257 |
+
$options[] = array(
|
258 |
'type' => 'checkbox',
|
259 |
'way' => 'buttons',
|
260 |
+
'name' => 'lazy_load_google_fonts',
|
261 |
+
'title' => __('Google Fonts asynchronous', 'clearfy'),
|
262 |
+
'layout' => array('hint-type' => 'icon'),
|
263 |
+
'hint' => __('By default, WordPress loads Google fonts synchronously, that is, your page will not be fully loaded until Google Fonts are loaded. This algorithm slows down the loading of your page and leads to errors when checking the site in Google Page Speed. Using this option, your Google Fonts will be loaded after your page is fully loaded. This method has a negative — you and visitors of your site will see how the font changes while loading a page, from the system to the downloadable one.', 'clearfy'),
|
|
|
|
|
264 |
'default' => false
|
265 |
+
);
|
266 |
|
267 |
+
$options[] = array(
|
268 |
+
'type' => 'checkbox',
|
269 |
+
'way' => 'buttons',
|
270 |
+
'name' => 'disable_google_fonts',
|
271 |
+
'title' => __('Disable Google Fonts', 'clearfy'),
|
272 |
+
'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
273 |
+
'hint' => __('This function stops loading of Open Sans and other fonts used by WordPress and bundled themes (Twenty Twelve, Twenty Thirteen, Twenty Fourteen, Twenty Fifteen, Twenty Sixteen, Twenty Seventeen) from Google Fonts.
|
274 |
+
Reasons for not using Google Fonts might be privacy and security, local development or production, blocking of Google’s servers, characters not supported by font, performance.', 'clearfy'),
|
275 |
+
'default' => false
|
276 |
+
);
|
277 |
|
278 |
+
$options[] = array(
|
279 |
'type' => 'checkbox',
|
280 |
'way' => 'buttons',
|
281 |
+
'name' => 'disable_google_maps',
|
282 |
+
'title' => __('Disable Google maps', 'clearfy'),
|
283 |
+
'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
284 |
+
'hint' => __('This function stops loading of Google Maps used by some themes or plugins.
|
285 |
+
Reasons for not using Google Maps might be privacy and security, local development or production, blocking of Google’s servers, performance, not necessary, etc.', 'clearfy'),
|
286 |
'default' => false,
|
287 |
+
'eventsOn' => array(
|
288 |
+
'show' => '.factory-control-exclude_from_disable_google_maps,.factory-control-remove_iframe_google_maps'
|
289 |
+
),
|
290 |
+
'eventsOff' => array(
|
291 |
+
'hide' => '.factory-control-exclude_from_disable_google_maps,.factory-control-remove_iframe_google_maps'
|
292 |
+
)
|
293 |
+
);
|
294 |
|
295 |
+
$options[] = array(
|
296 |
+
'type' => 'checkbox',
|
297 |
+
'way' => 'buttons',
|
298 |
+
'name' => 'remove_iframe_google_maps',
|
299 |
+
'title' => __('Remove iframe Google maps', 'clearfy'),
|
300 |
+
'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
301 |
+
'hint' => __('By default, the "Disable Google Maps" option removes maps inserted with the SCRIPT tag from the page source code. However, you can also cut out all maps inserted via the iframe by enabling this option.', 'clearfy'),
|
302 |
+
'default' => false
|
303 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
304 |
|
305 |
+
$options[] = array(
|
306 |
+
'type' => 'textbox',
|
307 |
+
'way' => 'buttons',
|
308 |
+
'name' => 'exclude_from_disable_google_maps',
|
309 |
+
'title' => __('Exclude pages from Disable Google Maps filter', 'clearfy'),
|
310 |
+
'hint' => __('Posts or Pages IDs separated by a ,', 'clearfy')
|
311 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
312 |
|
313 |
+
/*$options[] = [
|
314 |
'type' => 'html',
|
315 |
'html' => '<div class="wbcr-clearfy-group-header">' . '<strong>' . __('Remove query strings from static resources', 'clearfy') . '</strong>' . '<p>' . __('This funcitons will remove query strings from static resources like CSS & JS files inside the HTML <head> element to improve your speed scores in services like Pingdom, GTmetrix, PageSpeed and YSlow. <b style="color:#ff5722">Important:</b> This does not work for authorized users. To avoid problems after plugins update!', 'clearfy') . '</p>' . '</div>'
|
316 |
+
];*/
|
317 |
|
318 |
+
/*$options[] = [
|
319 |
'type' => 'checkbox',
|
320 |
'way' => 'buttons',
|
321 |
'name' => 'remove_js_version',
|
340 |
),
|
341 |
'eventsOff' => array(
|
342 |
'hide' => '.factory-control-disable_remove_style_version_for_auth_users'
|
343 |
+
)
|
344 |
+
];*/
|
345 |
|
346 |
/*$options[] = array(
|
347 |
'type' => 'checkbox',
|
352 |
'default' => false
|
353 |
);*/
|
354 |
|
355 |
+
/*$options[] = [
|
356 |
'type' => 'textarea',
|
357 |
'name' => 'remove_version_exclude',
|
358 |
'height' => '120',
|
359 |
'title' => __('Exclude stylesheet/script file names', 'clearfy'),
|
360 |
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
361 |
'hint' => __('Enter Stylesheet/Script file names to exclude from version removal (each exclude file starts with a new line)', 'clearfy') . '<br><br><b>' . __('Example', 'clearfy') . ':</b>' . ' http://testwp.dev/wp-includes/js/jquery/jquery.js',
|
362 |
+
];*/
|
363 |
|
364 |
$options[] = [
|
365 |
'type' => 'html',
|
admin/pages/class-pages-quick-start.php
CHANGED
@@ -17,7 +17,7 @@ class WCL_QuickStartPage extends WCL_Page {
|
|
17 |
* The id of the page in the admin menu.
|
18 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
-
* @see
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
* @var string
|
@@ -57,6 +57,14 @@ class WCL_QuickStartPage extends WCL_Page {
|
|
57 |
|
58 |
public $available_for_multisite = true;
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
/**
|
62 |
* @param WCL_Plugin $plugin
|
@@ -81,7 +89,7 @@ class WCL_QuickStartPage extends WCL_Page {
|
|
81 |
*
|
82 |
* @return void
|
83 |
* @since 1.0.0
|
84 |
-
* @see
|
85 |
*
|
86 |
*/
|
87 |
public function assets($scripts, $styles)
|
@@ -151,7 +159,7 @@ class WCL_QuickStartPage extends WCL_Page {
|
|
151 |
?>
|
152 |
<div class="wbcr-clearfy-confirm-popup">
|
153 |
<h3><?php _e('Are you sure you want to enable the this options?', 'clearfy') ?></h3>
|
154 |
-
|
155 |
<div class="wbcr-clearfy-reset-warning-message">
|
156 |
<?php _e('After confirmation, all the settings of the plug-in will return to the default state. Make backup settings by copying data from the export field.', 'clearfy') ?>
|
157 |
</div>
|
@@ -161,19 +169,19 @@ class WCL_QuickStartPage extends WCL_Page {
|
|
161 |
<button class="wbcr-clearfy-popup-button-cancel"><?php _e('Cancel', 'clearfy') ?></button>
|
162 |
</div>
|
163 |
</div>
|
164 |
-
|
165 |
<div class="wbcr-content-section">
|
166 |
<div class="wbcr-factory-page-group-header" style="margin:0"><?php _e('<strong>Quick start</strong>.', 'clearfy') ?>
|
167 |
<p><?php _e('These are quick optimization options for your website. You can activate the groups of necessary settings in one click. With the fast optimization mode, we are enable the only safe settings that do not break your website. That is why we recommend you to look at each setting of the plugin individually. The settings with grey and red question mark will not be active, until you do it yourself.', 'clearfy') ?></p>
|
168 |
</div>
|
169 |
|
170 |
<?php do_action('wbcr_clearfy_quick_boards'); ?>
|
171 |
-
|
172 |
<div id="wbcr-clearfy-quick-mode-board">
|
173 |
<h4 style="margin-top:10px;"><?php _e('Select what you need to do', 'clearfy') ?></h4>
|
174 |
-
|
175 |
<p style="color:#9e9e9e"><?php _e('After selecting any optimization case, the plugin will automatically enable the necessary settings in safe mode and one click.', 'clearfy') ?></p>
|
176 |
-
|
177 |
<ul>
|
178 |
<?php foreach($allow_mods as $mode_name => $mode): ?>
|
179 |
<?php
|
@@ -187,7 +195,7 @@ class WCL_QuickStartPage extends WCL_Page {
|
|
187 |
$mode_args = isset($mode['args']) && is_array($mode['args']) ? WCL_Helper::getEscapeJson($mode['args']) : '';
|
188 |
}
|
189 |
?>
|
190 |
-
|
191 |
<li>
|
192 |
<?php
|
193 |
$group = WCL_Group::getInstance($mode_name);
|
@@ -209,7 +217,7 @@ class WCL_QuickStartPage extends WCL_Page {
|
|
209 |
<i class="dashicons <?= $mode_icon; ?>"></i>
|
210 |
<?php endif; ?>
|
211 |
<span><?= $mode_title ?></span>
|
212 |
-
|
213 |
<div class="wbcr-clearfy-switch-confirmation">
|
214 |
<button class="wbcr-clearfy-button-activate-mode">
|
215 |
<?php if( $mode_name == 'reset' ): ?>
|
@@ -238,4 +246,4 @@ class WCL_QuickStartPage extends WCL_Page {
|
|
238 |
|
239 |
<?php
|
240 |
}
|
241 |
-
}
|
17 |
* The id of the page in the admin menu.
|
18 |
*
|
19 |
* Mainly used to navigate between pages.
|
20 |
+
* @see FactoryPages447_AdminPage
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
* @var string
|
57 |
|
58 |
public $available_for_multisite = true;
|
59 |
|
60 |
+
/**
|
61 |
+
* Show on the page a search form for search options of plugin?
|
62 |
+
*
|
63 |
+
* @since 2.2.0 - Added
|
64 |
+
* @var bool - true show, false hide
|
65 |
+
*/
|
66 |
+
public $show_search_options_form = true;
|
67 |
+
|
68 |
|
69 |
/**
|
70 |
* @param WCL_Plugin $plugin
|
89 |
*
|
90 |
* @return void
|
91 |
* @since 1.0.0
|
92 |
+
* @see FactoryPages447_AdminPage
|
93 |
*
|
94 |
*/
|
95 |
public function assets($scripts, $styles)
|
159 |
?>
|
160 |
<div class="wbcr-clearfy-confirm-popup">
|
161 |
<h3><?php _e('Are you sure you want to enable the this options?', 'clearfy') ?></h3>
|
162 |
+
|
163 |
<div class="wbcr-clearfy-reset-warning-message">
|
164 |
<?php _e('After confirmation, all the settings of the plug-in will return to the default state. Make backup settings by copying data from the export field.', 'clearfy') ?>
|
165 |
</div>
|
169 |
<button class="wbcr-clearfy-popup-button-cancel"><?php _e('Cancel', 'clearfy') ?></button>
|
170 |
</div>
|
171 |
</div>
|
172 |
+
|
173 |
<div class="wbcr-content-section">
|
174 |
<div class="wbcr-factory-page-group-header" style="margin:0"><?php _e('<strong>Quick start</strong>.', 'clearfy') ?>
|
175 |
<p><?php _e('These are quick optimization options for your website. You can activate the groups of necessary settings in one click. With the fast optimization mode, we are enable the only safe settings that do not break your website. That is why we recommend you to look at each setting of the plugin individually. The settings with grey and red question mark will not be active, until you do it yourself.', 'clearfy') ?></p>
|
176 |
</div>
|
177 |
|
178 |
<?php do_action('wbcr_clearfy_quick_boards'); ?>
|
179 |
+
|
180 |
<div id="wbcr-clearfy-quick-mode-board">
|
181 |
<h4 style="margin-top:10px;"><?php _e('Select what you need to do', 'clearfy') ?></h4>
|
182 |
+
|
183 |
<p style="color:#9e9e9e"><?php _e('After selecting any optimization case, the plugin will automatically enable the necessary settings in safe mode and one click.', 'clearfy') ?></p>
|
184 |
+
|
185 |
<ul>
|
186 |
<?php foreach($allow_mods as $mode_name => $mode): ?>
|
187 |
<?php
|
195 |
$mode_args = isset($mode['args']) && is_array($mode['args']) ? WCL_Helper::getEscapeJson($mode['args']) : '';
|
196 |
}
|
197 |
?>
|
198 |
+
|
199 |
<li>
|
200 |
<?php
|
201 |
$group = WCL_Group::getInstance($mode_name);
|
217 |
<i class="dashicons <?= $mode_icon; ?>"></i>
|
218 |
<?php endif; ?>
|
219 |
<span><?= $mode_title ?></span>
|
220 |
+
|
221 |
<div class="wbcr-clearfy-switch-confirmation">
|
222 |
<button class="wbcr-clearfy-button-activate-mode">
|
223 |
<?php if( $mode_name == 'reset' ): ?>
|
246 |
|
247 |
<?php
|
248 |
}
|
249 |
+
}
|
admin/pages/class-pages-seo-double-pages.php
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
* The id of the page in the admin menu.
|
17 |
*
|
18 |
* Mainly used to navigate between pages.
|
19 |
-
* @see
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
* @var string
|
16 |
* The id of the page in the admin menu.
|
17 |
*
|
18 |
* Mainly used to navigate between pages.
|
19 |
+
* @see FactoryPages447_AdminPage
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
* @var string
|
admin/pages/class-pages-seo.php
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
* The id of the page in the admin menu.
|
17 |
*
|
18 |
* Mainly used to navigate between pages.
|
19 |
-
* @see
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
* @var string
|
16 |
* The id of the page in the admin menu.
|
17 |
*
|
18 |
* Mainly used to navigate between pages.
|
19 |
+
* @see FactoryPages447_AdminPage
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
* @var string
|
admin/pages/class-pages-widgets.php
CHANGED
@@ -16,7 +16,7 @@ class WCL_WidgetsPage extends WCL_Page {
|
|
16 |
* The id of the page in the admin menu.
|
17 |
*
|
18 |
* Mainly used to navigate between pages.
|
19 |
-
* @see
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
* @var string
|
16 |
* The id of the page in the admin menu.
|
17 |
*
|
18 |
* Mainly used to navigate between pages.
|
19 |
+
* @see FactoryPages447_AdminPage
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
* @var string
|
admin/pages/setup/class-pages-setup.php
CHANGED
@@ -11,12 +11,12 @@ if( !defined('ABSPATH') ) {
|
|
11 |
exit;
|
12 |
}
|
13 |
|
14 |
-
class WCL_Setup extends WBCR\
|
15 |
|
16 |
/**
|
17 |
-
* @param \
|
18 |
*/
|
19 |
-
public function __construct(\
|
20 |
{
|
21 |
parent::__construct($plugin);
|
22 |
|
@@ -53,7 +53,7 @@ class WCL_Setup extends WBCR\FactoryClearfy237\Pages\Setup {
|
|
53 |
*
|
54 |
* @return void
|
55 |
* @since 1.0.0
|
56 |
-
* @see
|
57 |
*
|
58 |
*/
|
59 |
public function assets($scripts, $styles)
|
11 |
exit;
|
12 |
}
|
13 |
|
14 |
+
class WCL_Setup extends WBCR\FactoryClearfy240\Pages\Setup {
|
15 |
|
16 |
/**
|
17 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
18 |
*/
|
19 |
+
public function __construct(\Wbcr_Factory448_Plugin $plugin)
|
20 |
{
|
21 |
parent::__construct($plugin);
|
22 |
|
53 |
*
|
54 |
* @return void
|
55 |
* @since 1.0.0
|
56 |
+
* @see FactoryPages447_AdminPage
|
57 |
*
|
58 |
*/
|
59 |
public function assets($scripts, $styles)
|
admin/pages/setup/steps/class-step-congratulation.php
CHANGED
@@ -8,7 +8,7 @@ namespace WBCR\Clearfy\Pages;
|
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
-
class Step_Congratulation extends \WBCR\
|
12 |
|
13 |
protected $prev_id = 'step6';
|
14 |
protected $id = 'step7';
|
@@ -24,7 +24,7 @@ class Step_Congratulation extends \WBCR\FactoryClearfy237\Pages\Step_Custom {
|
|
24 |
{
|
25 |
$pricing_page_url = $this->plugin->get_support()->get_pricing_url(true, 'setup_wizard');
|
26 |
?>
|
27 |
-
<div class="w-factory-clearfy-
|
28 |
<h3><?php echo __("Congratulations, the plugin configuration is complete!", "clearfy"); ?></h3>
|
29 |
<p style="text-align: left;">
|
30 |
<?php _e('You have successfully completed the basic plugin setup! You can go to the general plugin settings to enable other options that we did not offer you.', 'clearfy'); ?>
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
+
class Step_Congratulation extends \WBCR\FactoryClearfy240\Pages\Step_Custom {
|
12 |
|
13 |
protected $prev_id = 'step6';
|
14 |
protected $id = 'step7';
|
24 |
{
|
25 |
$pricing_page_url = $this->plugin->get_support()->get_pricing_url(true, 'setup_wizard');
|
26 |
?>
|
27 |
+
<div class="w-factory-clearfy-240-setup__inner-wrap">
|
28 |
<h3><?php echo __("Congratulations, the plugin configuration is complete!", "clearfy"); ?></h3>
|
29 |
<p style="text-align: left;">
|
30 |
<?php _e('You have successfully completed the basic plugin setup! You can go to the general plugin settings to enable other options that we did not offer you.', 'clearfy'); ?>
|
admin/pages/setup/steps/class-step-default.php
CHANGED
@@ -8,7 +8,7 @@ namespace WBCR\Clearfy\Pages;
|
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
-
class Step_Default extends \WBCR\
|
12 |
|
13 |
protected $id = 'step0';
|
14 |
protected $next_id = 'step1';
|
@@ -21,10 +21,10 @@ class Step_Default extends \WBCR\FactoryClearfy237\Pages\Step_Custom {
|
|
21 |
public function html()
|
22 |
{
|
23 |
?>
|
24 |
-
<div class="w-factory-clearfy-
|
25 |
-
<div class="w-factory-clearfy-
|
26 |
-
<p class="w-factory-clearfy-
|
27 |
-
<h1 class="w-factory-clearfy-
|
28 |
<img src="<?php echo WCL_PLUGIN_URL ?>/admin/assets/img/clearfylogo-768x300.png" alt="Clearfy">
|
29 |
</h1>
|
30 |
<p><?php _e('Optimize your site even faster using the setup wizard!', 'clearfy') ?></p>
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
+
class Step_Default extends \WBCR\FactoryClearfy240\Pages\Step_Custom {
|
12 |
|
13 |
protected $id = 'step0';
|
14 |
protected $next_id = 'step1';
|
21 |
public function html()
|
22 |
{
|
23 |
?>
|
24 |
+
<div class="w-factory-clearfy-240-setup__inner-wrap">
|
25 |
+
<div class="w-factory-clearfy-240-setup-step__new_onboarding-wrapper">
|
26 |
+
<p class="w-factory-clearfy-240-setup-step__new_onboarding-welcome">Welcome to</p>
|
27 |
+
<h1 class="w-factory-clearfy-240-logo">
|
28 |
<img src="<?php echo WCL_PLUGIN_URL ?>/admin/assets/img/clearfylogo-768x300.png" alt="Clearfy">
|
29 |
</h1>
|
30 |
<p><?php _e('Optimize your site even faster using the setup wizard!', 'clearfy') ?></p>
|
admin/pages/setup/steps/class-step-google-page-speed-after.php
CHANGED
@@ -8,7 +8,7 @@ namespace WBCR\Clearfy\Pages;
|
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
-
class Step_Google_Page_Speed_After extends \WBCR\
|
12 |
|
13 |
protected $prev_id = 'step5';
|
14 |
protected $id = 'step6';
|
@@ -28,7 +28,7 @@ class Step_Google_Page_Speed_After extends \WBCR\FactoryClearfy237\Pages\Step_Cu
|
|
28 |
wclearfy_fetch_google_pagespeed_audit("<?php echo wp_create_nonce('fetch_google_page_speed_audit') ?>", true);
|
29 |
});
|
30 |
</script>
|
31 |
-
<div class="w-factory-clearfy-
|
32 |
<h3>Google Page Speed</h3>
|
33 |
<p style="text-align: left;">
|
34 |
We analyzed your site on the Google Page Speed service. You can see the test results below. Our plugin
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
+
class Step_Google_Page_Speed_After extends \WBCR\FactoryClearfy240\Pages\Step_Custom {
|
12 |
|
13 |
protected $prev_id = 'step5';
|
14 |
protected $id = 'step6';
|
28 |
wclearfy_fetch_google_pagespeed_audit("<?php echo wp_create_nonce('fetch_google_page_speed_audit') ?>", true);
|
29 |
});
|
30 |
</script>
|
31 |
+
<div class="w-factory-clearfy-240-setup__inner-wrap">
|
32 |
<h3>Google Page Speed</h3>
|
33 |
<p style="text-align: left;">
|
34 |
We analyzed your site on the Google Page Speed service. You can see the test results below. Our plugin
|
admin/pages/setup/steps/class-step-google-page-speed-before.php
CHANGED
@@ -8,7 +8,7 @@ namespace WBCR\Clearfy\Pages;
|
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
-
class Step_Google_Page_Speed_Before extends \WBCR\
|
12 |
|
13 |
protected $prev_id = 'step0';
|
14 |
protected $id = 'step1';
|
@@ -27,7 +27,7 @@ class Step_Google_Page_Speed_Before extends \WBCR\FactoryClearfy237\Pages\Step_C
|
|
27 |
wclearfy_fetch_google_pagespeed_audit("<?php echo wp_create_nonce('fetch_google_page_speed_audit') ?>");
|
28 |
});
|
29 |
</script>
|
30 |
-
<div class="w-factory-clearfy-
|
31 |
<h3><?php _e('Google Page Speed', 'clearfy') ?></h3>
|
32 |
<p style="text-align: left;">
|
33 |
<?php _e('We analyzed your site on the Google Page Speed service. You can see the test results below. Our plugin
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
+
class Step_Google_Page_Speed_Before extends \WBCR\FactoryClearfy240\Pages\Step_Custom {
|
12 |
|
13 |
protected $prev_id = 'step0';
|
14 |
protected $id = 'step1';
|
27 |
wclearfy_fetch_google_pagespeed_audit("<?php echo wp_create_nonce('fetch_google_page_speed_audit') ?>");
|
28 |
});
|
29 |
</script>
|
30 |
+
<div class="w-factory-clearfy-240-setup__inner-wrap">
|
31 |
<h3><?php _e('Google Page Speed', 'clearfy') ?></h3>
|
32 |
<p style="text-align: left;">
|
33 |
<?php _e('We analyzed your site on the Google Page Speed service. You can see the test results below. Our plugin
|
admin/pages/setup/steps/class-step-optimize-images.php
CHANGED
@@ -8,13 +8,13 @@ namespace WBCR\Clearfy\Pages;
|
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
-
class Step_Optimize_Images extends \WBCR\
|
12 |
|
13 |
protected $prev_id = 'step4';
|
14 |
protected $id = 'step5';
|
15 |
protected $next_id = 'step6';
|
16 |
|
17 |
-
public function __construct(\WBCR\
|
18 |
{
|
19 |
parent::__construct($page);
|
20 |
}
|
@@ -58,7 +58,7 @@ class Step_Optimize_Images extends \WBCR\FactoryClearfy237\Pages\Step_Custom {
|
|
58 |
];
|
59 |
?>
|
60 |
|
61 |
-
<div class="w-factory-clearfy-
|
62 |
<h3><?php _e("Optimize images", "clearfy") ?></h3>
|
63 |
<p style="text-align: left;">
|
64 |
<?php _e("We found unoptimized images in your media library. You can run background image optimization with the Robin image optimizer component of the Clearfy plugin. Background optimization is a long process, your images will be optimized after some time, so you won't be able to immediately see the improvement in Google Page Speed, but when the images are fully optimized you will see a score increase in Google Page Speed.", "clearfy"); ?>
|
@@ -165,7 +165,7 @@ class Step_Optimize_Images extends \WBCR\FactoryClearfy237\Pages\Step_Custom {
|
|
165 |
$install_robin_plugin_btn->add_class('wclearfy-setup__install-component-button');
|
166 |
|
167 |
?>
|
168 |
-
<div class="w-factory-clearfy-
|
169 |
<h3><?php _e("Optimize images", "clearfy") ?></h3>
|
170 |
<p style="text-align: left;">
|
171 |
<?php _e("Robin Image optimizer plugin isn't installed or activated, you need to install or activate it to optimize your images.", "clearfy"); ?>
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
+
class Step_Optimize_Images extends \WBCR\FactoryClearfy240\Pages\Step_Custom {
|
12 |
|
13 |
protected $prev_id = 'step4';
|
14 |
protected $id = 'step5';
|
15 |
protected $next_id = 'step6';
|
16 |
|
17 |
+
public function __construct(\WBCR\FactoryClearfy240\Pages\Setup $page)
|
18 |
{
|
19 |
parent::__construct($page);
|
20 |
}
|
58 |
];
|
59 |
?>
|
60 |
|
61 |
+
<div class="w-factory-clearfy-240-setup__inner-wrap">
|
62 |
<h3><?php _e("Optimize images", "clearfy") ?></h3>
|
63 |
<p style="text-align: left;">
|
64 |
<?php _e("We found unoptimized images in your media library. You can run background image optimization with the Robin image optimizer component of the Clearfy plugin. Background optimization is a long process, your images will be optimized after some time, so you won't be able to immediately see the improvement in Google Page Speed, but when the images are fully optimized you will see a score increase in Google Page Speed.", "clearfy"); ?>
|
165 |
$install_robin_plugin_btn->add_class('wclearfy-setup__install-component-button');
|
166 |
|
167 |
?>
|
168 |
+
<div class="w-factory-clearfy-240-setup__inner-wrap">
|
169 |
<h3><?php _e("Optimize images", "clearfy") ?></h3>
|
170 |
<p style="text-align: left;">
|
171 |
<?php _e("Robin Image optimizer plugin isn't installed or activated, you need to install or activate it to optimize your images.", "clearfy"); ?>
|
admin/pages/setup/steps/class-step-plugins.php
CHANGED
@@ -8,7 +8,7 @@ namespace WBCR\Clearfy\Pages;
|
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
-
class Step_Plugins extends \WBCR\
|
12 |
|
13 |
protected $prev_id = 'step1';
|
14 |
protected $id = 'step2';
|
@@ -26,7 +26,7 @@ class Step_Plugins extends \WBCR\FactoryClearfy237\Pages\Step_Custom {
|
|
26 |
$install_assets_manager_component_btn = $this->plugin->get_install_component_button('internal', 'assets_manager');
|
27 |
$install_minify_and_combine_component_btn = $this->plugin->get_install_component_button('internal', 'minify_and_combine');
|
28 |
?>
|
29 |
-
<div class="w-factory-clearfy-
|
30 |
<h3><?php _e('Installing plugins', 'clearfy') ?></h3>
|
31 |
<p style="text-align: left;"><?php _e('We analyzed your site and decided that in order to get the maximum result in
|
32 |
optimizing your site, you will need to install additional plugins.', 'clearfy') ?></p>
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
+
class Step_Plugins extends \WBCR\FactoryClearfy240\Pages\Step_Custom {
|
12 |
|
13 |
protected $prev_id = 'step1';
|
14 |
protected $id = 'step2';
|
26 |
$install_assets_manager_component_btn = $this->plugin->get_install_component_button('internal', 'assets_manager');
|
27 |
$install_minify_and_combine_component_btn = $this->plugin->get_install_component_button('internal', 'minify_and_combine');
|
28 |
?>
|
29 |
+
<div class="w-factory-clearfy-240-setup__inner-wrap">
|
30 |
<h3><?php _e('Installing plugins', 'clearfy') ?></h3>
|
31 |
<p style="text-align: left;"><?php _e('We analyzed your site and decided that in order to get the maximum result in
|
32 |
optimizing your site, you will need to install additional plugins.', 'clearfy') ?></p>
|
admin/pages/setup/steps/class-step-setting-seo-optimize.php
CHANGED
@@ -8,7 +8,7 @@ namespace WBCR\Clearfy\Pages;
|
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
-
class Step_Setting_Seo extends \WBCR\
|
12 |
|
13 |
protected $prev_id = 'step3';
|
14 |
protected $id = 'step4';
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
+
class Step_Setting_Seo extends \WBCR\FactoryClearfy240\Pages\Step_Form {
|
12 |
|
13 |
protected $prev_id = 'step3';
|
14 |
protected $id = 'step4';
|
admin/pages/setup/steps/class-step-setting-speed-optimize.php
CHANGED
@@ -8,7 +8,7 @@ namespace WBCR\Clearfy\Pages;
|
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
-
class Step_Setting_Speed_Optimize extends \WBCR\
|
12 |
|
13 |
protected $prev_id = 'step2';
|
14 |
protected $id = 'step3';
|
8 |
* @copyright (c) 23.07.2020, Webcraftic
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
+
class Step_Setting_Speed_Optimize extends \WBCR\FactoryClearfy240\Pages\Step_Form {
|
12 |
|
13 |
protected $prev_id = 'step2';
|
14 |
protected $id = 'step3';
|
clearfy.php
CHANGED
@@ -4,11 +4,11 @@
|
|
4 |
* Plugin URI: https://clearfy.pro
|
5 |
* Description: Disables unused Wordpress features, improves performance and increases SEO rankings, using Clearfy, which makes WordPress very easy.
|
6 |
* Author: Creative Motion <info@cm-wp.com>
|
7 |
-
* Version: 1.
|
8 |
* Text Domain: clearfy
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://cm-wp.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
@@ -89,12 +89,14 @@ $plugin_info = array(
|
|
89 |
),
|
90 |
// FRAMEWORK MODULES
|
91 |
'load_factory_modules' => array(
|
92 |
-
array('libs/factory/bootstrap', '
|
93 |
-
array('libs/factory/forms', '
|
94 |
-
array('libs/factory/pages', '
|
95 |
-
array('libs/factory/clearfy', '
|
96 |
-
array('libs/factory/freemius', '
|
97 |
-
array('libs/factory/adverts', '
|
|
|
|
|
98 |
),
|
99 |
'load_plugin_components' => array(
|
100 |
'disable_notices' => array(
|
@@ -134,7 +136,7 @@ $plugin_info = array(
|
|
134 |
|
135 |
|
136 |
|
137 |
-
$clearfy_compatibility = new
|
138 |
'plugin_already_activate' => defined('WCL_PLUGIN_ACTIVE'),
|
139 |
'required_php_version' => '7.0',
|
140 |
'required_wp_version' => '5.2.0',
|
@@ -165,7 +167,7 @@ define('WBCR_CLEARFY_PLUGIN_ACTIVE', true);
|
|
165 |
|
166 |
// Plugin version
|
167 |
define('WCL_PLUGIN_VERSION', $clearfy_compatibility->get_plugin_version());
|
168 |
-
define('WCL_FRAMEWORK_VER', '
|
169 |
|
170 |
define('WCL_PLUGIN_DIR', dirname(__FILE__));
|
171 |
define('WCL_PLUGIN_BASE', plugin_basename(__FILE__));
|
4 |
* Plugin URI: https://clearfy.pro
|
5 |
* Description: Disables unused Wordpress features, improves performance and increases SEO rankings, using Clearfy, which makes WordPress very easy.
|
6 |
* Author: Creative Motion <info@cm-wp.com>
|
7 |
+
* Version: 1.9.3
|
8 |
* Text Domain: clearfy
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://cm-wp.com
|
11 |
+
* Framework Version: FACTORY_448_VERSION
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
89 |
),
|
90 |
// FRAMEWORK MODULES
|
91 |
'load_factory_modules' => array(
|
92 |
+
array('libs/factory/bootstrap', 'factory_bootstrap_448', 'admin'),
|
93 |
+
array('libs/factory/forms', 'factory_forms_445', 'admin'),
|
94 |
+
array('libs/factory/pages', 'factory_pages_447', 'admin'),
|
95 |
+
array('libs/factory/clearfy', 'factory_clearfy_240', 'all'),
|
96 |
+
array('libs/factory/freemius', 'factory_freemius_136', 'all'),
|
97 |
+
array('libs/factory/adverts', 'factory_adverts_126', 'admin'),
|
98 |
+
array('libs/factory/logger', 'factory_logger_113', 'all'),
|
99 |
+
|
100 |
),
|
101 |
'load_plugin_components' => array(
|
102 |
'disable_notices' => array(
|
136 |
|
137 |
|
138 |
|
139 |
+
$clearfy_compatibility = new Wbcr_Factory448_Requirements(__FILE__, array_merge($plugin_info, array(
|
140 |
'plugin_already_activate' => defined('WCL_PLUGIN_ACTIVE'),
|
141 |
'required_php_version' => '7.0',
|
142 |
'required_wp_version' => '5.2.0',
|
167 |
|
168 |
// Plugin version
|
169 |
define('WCL_PLUGIN_VERSION', $clearfy_compatibility->get_plugin_version());
|
170 |
+
define('WCL_FRAMEWORK_VER', 'FACTORY_448_VERSION');
|
171 |
|
172 |
define('WCL_PLUGIN_DIR', dirname(__FILE__));
|
173 |
define('WCL_PLUGIN_BASE', plugin_basename(__FILE__));
|
components/assets-manager/admin/activation.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
*
|
6 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 09.03.2018, Webcraftic
|
8 |
-
* @see
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
|
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
class WGNZ_Activation extends
|
18 |
|
19 |
/**
|
20 |
* Runs activation actions.
|
5 |
*
|
6 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 09.03.2018, Webcraftic
|
8 |
+
* @see Wbcr_Factory448_Activator
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
class WGNZ_Activation extends Wbcr_Factory448_Activator {
|
18 |
|
19 |
/**
|
20 |
* Runs activation actions.
|
components/assets-manager/admin/ajax/save-settings.php
CHANGED
@@ -96,7 +96,7 @@ function wam_save_settings_action()
|
|
96 |
wbcr_gnz_deploy_mu_plugin();
|
97 |
|
98 |
// Flush cache for all cache plugins
|
99 |
-
|
100 |
}
|
101 |
|
102 |
wp_send_json_success([
|
96 |
wbcr_gnz_deploy_mu_plugin();
|
97 |
|
98 |
// Flush cache for all cache plugins
|
99 |
+
WbcrFactoryClearfy240_Helpers::flushPageCache();
|
100 |
}
|
101 |
|
102 |
wp_send_json_success([
|
components/assets-manager/admin/boot.php
CHANGED
@@ -147,7 +147,7 @@ if( defined('LOADING_ASSETS_MANAGER_AS_ADDON') ) {
|
|
147 |
*
|
148 |
* @param array $widgets
|
149 |
* @param string $position
|
150 |
-
* @param
|
151 |
*/
|
152 |
add_filter('wbcr/factory/pages/impressive/widgets', function ($widgets, $position, $plugin) {
|
153 |
if( $plugin->getPluginName() == WGZ_Plugin::app()->getPluginName() ) {
|
@@ -207,5 +207,5 @@ if( defined('LOADING_ASSETS_MANAGER_AS_ADDON') ) {
|
|
207 |
return $page_url;
|
208 |
}
|
209 |
|
210 |
-
add_filter('
|
211 |
}
|
147 |
*
|
148 |
* @param array $widgets
|
149 |
* @param string $position
|
150 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
151 |
*/
|
152 |
add_filter('wbcr/factory/pages/impressive/widgets', function ($widgets, $position, $plugin) {
|
153 |
if( $plugin->getPluginName() == WGZ_Plugin::app()->getPluginName() ) {
|
207 |
return $page_url;
|
208 |
}
|
209 |
|
210 |
+
add_filter('wbcr_factory_pages_447_imppage_rating_widget_url', 'wbcr_gnz_rating_widget_url', 10, 2);
|
211 |
}
|
components/assets-manager/admin/pages/class-pages-more-features.php
CHANGED
@@ -17,6 +17,6 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
17 |
*
|
18 |
* @copyright (c) 2018 Webraftic Ltd
|
19 |
*/
|
20 |
-
class WGZ_MoreFeaturesPage extends
|
21 |
|
22 |
}
|
17 |
*
|
18 |
* @copyright (c) 2018 Webraftic Ltd
|
19 |
*/
|
20 |
+
class WGZ_MoreFeaturesPage extends Wbcr_FactoryClearfy240_MoreFeaturesPage {
|
21 |
|
22 |
}
|
components/assets-manager/admin/pages/class-pages-settings.php
CHANGED
@@ -16,7 +16,7 @@ if( !defined('ABSPATH') ) {
|
|
16 |
*
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
-
class WGZ_AssetsManagerPage extends
|
20 |
|
21 |
/**
|
22 |
* The id of the page in the admin menu.
|
@@ -24,7 +24,7 @@ class WGZ_AssetsManagerPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
24 |
* Mainly used to navigate between pages.
|
25 |
*
|
26 |
* @since 1.0.0
|
27 |
-
* @see
|
28 |
*
|
29 |
* @var string
|
30 |
*/
|
@@ -48,9 +48,9 @@ class WGZ_AssetsManagerPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
48 |
public $available_for_multisite = true;
|
49 |
|
50 |
/**
|
51 |
-
* @param
|
52 |
*/
|
53 |
-
public function __construct(
|
54 |
{
|
55 |
$this->menu_title = __('Assets manager', 'gonzales');
|
56 |
|
16 |
*
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
+
class WGZ_AssetsManagerPage extends Wbcr_FactoryClearfy240_PageBase {
|
20 |
|
21 |
/**
|
22 |
* The id of the page in the admin menu.
|
24 |
* Mainly used to navigate between pages.
|
25 |
*
|
26 |
* @since 1.0.0
|
27 |
+
* @see FactoryPages447_AdminPage
|
28 |
*
|
29 |
* @var string
|
30 |
*/
|
48 |
public $available_for_multisite = true;
|
49 |
|
50 |
/**
|
51 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
52 |
*/
|
53 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
54 |
{
|
55 |
$this->menu_title = __('Assets manager', 'gonzales');
|
56 |
|
components/assets-manager/gonzales.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* Text Domain: gonzales
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
@@ -68,15 +68,15 @@ $wgnz_plugin_info = array(
|
|
68 |
|
69 |
// FRAMEWORK MODULES
|
70 |
'load_factory_modules' => array(
|
71 |
-
array('libs/factory/bootstrap', '
|
72 |
-
array('libs/factory/forms', '
|
73 |
-
array('libs/factory/pages', '
|
74 |
-
array('libs/factory/clearfy', '
|
75 |
-
array('libs/factory/adverts', '
|
76 |
)
|
77 |
);
|
78 |
|
79 |
-
$wgnz_compatibility = new
|
80 |
'plugin_already_activate' => defined('WGZ_PLUGIN_ACTIVE'),
|
81 |
'required_php_version' => '5.4',
|
82 |
'required_wp_version' => '4.2.0',
|
8 |
* Text Domain: gonzales
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_448_VERSION
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
68 |
|
69 |
// FRAMEWORK MODULES
|
70 |
'load_factory_modules' => array(
|
71 |
+
array('libs/factory/bootstrap', 'factory_bootstrap_448', 'admin'),
|
72 |
+
array('libs/factory/forms', 'factory_forms_445', 'admin'),
|
73 |
+
array('libs/factory/pages', 'factory_pages_447', 'admin'),
|
74 |
+
array('libs/factory/clearfy', 'factory_clearfy_240', 'all'),
|
75 |
+
array('libs/factory/adverts', 'factory_adverts_126', 'admin')
|
76 |
)
|
77 |
);
|
78 |
|
79 |
+
$wgnz_compatibility = new Wbcr_Factory448_Requirements(__FILE__, array_merge($wgnz_plugin_info, array(
|
80 |
'plugin_already_activate' => defined('WGZ_PLUGIN_ACTIVE'),
|
81 |
'required_php_version' => '5.4',
|
82 |
'required_wp_version' => '4.2.0',
|
components/assets-manager/includes/class-plugin.php
CHANGED
@@ -11,11 +11,11 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
* @version 1.0
|
13 |
*/
|
14 |
-
class WGZ_Plugin extends
|
15 |
|
16 |
/**
|
17 |
* @see self::app()
|
18 |
-
* @var
|
19 |
*/
|
20 |
private static $app;
|
21 |
|
@@ -53,7 +53,7 @@ class WGZ_Plugin extends Wbcr_Factory446_Plugin {
|
|
53 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
54 |
* классам.
|
55 |
*
|
56 |
-
* @return \
|
57 |
*/
|
58 |
public static function app() {
|
59 |
return self::$app;
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
* @version 1.0
|
13 |
*/
|
14 |
+
class WGZ_Plugin extends Wbcr_Factory448_Plugin {
|
15 |
|
16 |
/**
|
17 |
* @see self::app()
|
18 |
+
* @var Wbcr_Factory448_Plugin
|
19 |
*/
|
20 |
private static $app;
|
21 |
|
53 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
54 |
* классам.
|
55 |
*
|
56 |
+
* @return \Wbcr_Factory448_Plugin|\WGZ_Plugin
|
57 |
*/
|
58 |
public static function app() {
|
59 |
return self::$app;
|
components/assets-manager/includes/classes/class-assets-manager-global.php
CHANGED
@@ -25,9 +25,9 @@ class WGZ_Assets_Manager_Public {
|
|
25 |
private $deregistered = [];
|
26 |
|
27 |
/**
|
28 |
-
* @param
|
29 |
*/
|
30 |
-
public function __construct(
|
31 |
{
|
32 |
$this->plugin = $plugin;
|
33 |
|
@@ -140,8 +140,8 @@ class WGZ_Assets_Manager_Public {
|
|
140 |
$this->stop_caching_and_script_optimize();
|
141 |
|
142 |
// Disable autoptimize on Assets manager page
|
143 |
-
add_filter('autoptimize_filter_noptimize', [$this, 'autoptimize_noptimize'], 10,
|
144 |
-
add_filter('wmac_filter_noptimize', [$this, 'autoptimize_noptimize'], 10,
|
145 |
|
146 |
if( wp_doing_ajax() ) {
|
147 |
require_once WGZ_PLUGIN_DIR . '/admin/ajax/save-settings.php';
|
@@ -331,10 +331,10 @@ class WGZ_Assets_Manager_Public {
|
|
331 |
* @since 1.0.8
|
332 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
333 |
*/
|
334 |
-
public function autoptimize_noptimize()
|
335 |
{
|
336 |
if( !isset($_GET['wbcr_assets_manager']) ) {
|
337 |
-
return
|
338 |
}
|
339 |
|
340 |
return true;
|
25 |
private $deregistered = [];
|
26 |
|
27 |
/**
|
28 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
29 |
*/
|
30 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
31 |
{
|
32 |
$this->plugin = $plugin;
|
33 |
|
140 |
$this->stop_caching_and_script_optimize();
|
141 |
|
142 |
// Disable autoptimize on Assets manager page
|
143 |
+
add_filter('autoptimize_filter_noptimize', [$this, 'autoptimize_noptimize'], 10, 1);
|
144 |
+
add_filter('wmac_filter_noptimize', [$this, 'autoptimize_noptimize'], 10, 1);
|
145 |
|
146 |
if( wp_doing_ajax() ) {
|
147 |
require_once WGZ_PLUGIN_DIR . '/admin/ajax/save-settings.php';
|
331 |
* @since 1.0.8
|
332 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
333 |
*/
|
334 |
+
public function autoptimize_noptimize($result)
|
335 |
{
|
336 |
if( !isset($_GET['wbcr_assets_manager']) ) {
|
337 |
+
return $result;
|
338 |
}
|
339 |
|
340 |
return true;
|
components/assets-manager/includes/classes/class-views.php
CHANGED
@@ -63,11 +63,11 @@ class WGZ_Views {
|
|
63 |
*
|
64 |
* @param string $template The template name.
|
65 |
* @param mixed $data Some data to pass to the template.
|
66 |
-
* @param
|
67 |
*
|
68 |
* @return bool|string The page contents. False if the template doesn't exist.
|
69 |
*/
|
70 |
-
public function get_template( $template, $data = [],
|
71 |
$template = str_replace( '_', '-', $template );
|
72 |
$path = $this->plugin_dir . '/views/' . $template . '.php';
|
73 |
|
@@ -92,9 +92,9 @@ class WGZ_Views {
|
|
92 |
*
|
93 |
* @param string $template The template name.
|
94 |
* @param mixed $data Some data to pass to the template.
|
95 |
-
* @param
|
96 |
*/
|
97 |
-
public function print_template( $template, $data = [],
|
98 |
echo $this->get_template( $template, $data, $page );
|
99 |
}
|
100 |
}
|
63 |
*
|
64 |
* @param string $template The template name.
|
65 |
* @param mixed $data Some data to pass to the template.
|
66 |
+
* @param Wbcr_FactoryClearfy240_PageBase $page
|
67 |
*
|
68 |
* @return bool|string The page contents. False if the template doesn't exist.
|
69 |
*/
|
70 |
+
public function get_template( $template, $data = [], Wbcr_FactoryClearfy240_PageBase $page = null ) {
|
71 |
$template = str_replace( '_', '-', $template );
|
72 |
$path = $this->plugin_dir . '/views/' . $template . '.php';
|
73 |
|
92 |
*
|
93 |
* @param string $template The template name.
|
94 |
* @param mixed $data Some data to pass to the template.
|
95 |
+
* @param Wbcr_FactoryClearfy240_PageBase $page
|
96 |
*/
|
97 |
+
public function print_template( $template, $data = [], Wbcr_FactoryClearfy240_PageBase $page = null ) {
|
98 |
echo $this->get_template( $template, $data, $page );
|
99 |
}
|
100 |
}
|
components/assets-manager/migrations/010100.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
-
class WGZUpdate010100 extends
|
8 |
|
9 |
public function install()
|
10 |
{
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
+
class WGZUpdate010100 extends Wbcr_Factory448_Update {
|
8 |
|
9 |
public function install()
|
10 |
{
|
components/assets-manager/migrations/010108.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
-
class WGZUpdate010108 extends
|
8 |
|
9 |
/**
|
10 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
+
class WGZUpdate010108 extends Wbcr_Factory448_Update {
|
8 |
|
9 |
/**
|
10 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
components/assets-manager/migrations/020005.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
-
class WGZUpdate020005 extends
|
8 |
|
9 |
public function install() {
|
10 |
$settings = get_option( $this->plugin->getPrefix() . 'assets_states', [] );
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
+
class WGZUpdate020005 extends Wbcr_Factory448_Update {
|
8 |
|
9 |
public function install() {
|
10 |
$settings = get_option( $this->plugin->getPrefix() . 'assets_states', [] );
|
components/assets-manager/mu-plugins/assets-manager.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Webcraftic AM plugin load filter
|
4 |
* Dynamically activated only plugins that you have selected in each page. [Note] Webcraftic AM has been automatically installed/deleted by Activate/Deactivate of "load filter plugin".
|
5 |
* Version: 1.1.2
|
6 |
-
* Framework Version:
|
7 |
*/
|
8 |
|
9 |
// todo: проверить, как работает кеширование
|
3 |
* Webcraftic AM plugin load filter
|
4 |
* Dynamically activated only plugins that you have selected in each page. [Note] Webcraftic AM has been automatically installed/deleted by Activate/Deactivate of "load filter plugin".
|
5 |
* Version: 1.1.2
|
6 |
+
* Framework Version: FACTORY_448_VERSION
|
7 |
*/
|
8 |
|
9 |
// todo: проверить, как работает кеширование
|
components/comments-plus/admin/boot.php
CHANGED
@@ -101,7 +101,7 @@ if ( ! defined( 'LOADING_COMMENTS_PLUS_AS_ADDON' ) ) {
|
|
101 |
return $page_url;
|
102 |
}
|
103 |
|
104 |
-
add_filter( '
|
105 |
|
106 |
/**
|
107 |
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
101 |
return $page_url;
|
102 |
}
|
103 |
|
104 |
+
add_filter( 'wbcr_factory_pages_447_imppage_rating_widget_url', 'wbcr_cmp_rating_widget_url', 10, 2 );
|
105 |
|
106 |
/**
|
107 |
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
components/comments-plus/admin/pages/class-page-comments.php
CHANGED
@@ -16,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
*
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
-
class WbcrCmp_CommentsPage extends
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
@@ -52,9 +52,9 @@ class WbcrCmp_CommentsPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
52 |
*
|
53 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
54 |
*
|
55 |
-
* @param \
|
56 |
*/
|
57 |
-
public function __construct(
|
58 |
$this->menu_title = __( 'Disable comments', 'comments-plus' );
|
59 |
$this->page_menu_short_description = __( 'Manage site comments', 'comments-plus' );
|
60 |
|
16 |
*
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
+
class WbcrCmp_CommentsPage extends Wbcr_FactoryClearfy240_PageBase {
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
52 |
*
|
53 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
54 |
*
|
55 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
56 |
*/
|
57 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
58 |
$this->menu_title = __( 'Disable comments', 'comments-plus' );
|
59 |
$this->page_menu_short_description = __( 'Manage site comments', 'comments-plus' );
|
60 |
|
components/comments-plus/admin/pages/class-page-delete-comments.php
CHANGED
@@ -16,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
*
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
-
class WbcrCmp_DeleteCommentsPage extends
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
@@ -66,9 +66,9 @@ class WbcrCmp_DeleteCommentsPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
66 |
*
|
67 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
68 |
*
|
69 |
-
* @param \
|
70 |
*/
|
71 |
-
public function __construct(
|
72 |
$this->menu_title = __( 'Comments cleaner', 'comments-plus' );
|
73 |
|
74 |
parent::__construct( $plugin );
|
@@ -78,10 +78,10 @@ class WbcrCmp_DeleteCommentsPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
78 |
* {@inheritDoc}
|
79 |
*
|
80 |
* @param $notices
|
81 |
-
* @param
|
82 |
*
|
83 |
* @return array
|
84 |
-
* @see libs\factory\pages\themplates\
|
85 |
*/
|
86 |
public function getActionNotices( $notices ) {
|
87 |
|
@@ -200,7 +200,7 @@ class WbcrCmp_DeleteCommentsPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
200 |
/**
|
201 |
* Prints the content of the page
|
202 |
*
|
203 |
-
* @see libs\factory\pages\themplates\
|
204 |
*/
|
205 |
public function showPageContent() {
|
206 |
$stats = $this->getStats();
|
16 |
*
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
+
class WbcrCmp_DeleteCommentsPage extends Wbcr_FactoryClearfy240_PageBase {
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
66 |
*
|
67 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
68 |
*
|
69 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
70 |
*/
|
71 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
72 |
$this->menu_title = __( 'Comments cleaner', 'comments-plus' );
|
73 |
|
74 |
parent::__construct( $plugin );
|
78 |
* {@inheritDoc}
|
79 |
*
|
80 |
* @param $notices
|
81 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
82 |
*
|
83 |
* @return array
|
84 |
+
* @see libs\factory\pages\themplates\FactoryPages447_ImpressiveThemplate
|
85 |
*/
|
86 |
public function getActionNotices( $notices ) {
|
87 |
|
200 |
/**
|
201 |
* Prints the content of the page
|
202 |
*
|
203 |
+
* @see libs\factory\pages\themplates\FactoryPages447_ImpressiveThemplate
|
204 |
*/
|
205 |
public function showPageContent() {
|
206 |
$stats = $this->getStats();
|
components/comments-plus/admin/pages/class-page-more-features.php
CHANGED
@@ -19,6 +19,6 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
19 |
*
|
20 |
* @copyright (c) 2018 Webraftic Ltd
|
21 |
*/
|
22 |
-
class WbcrCmp_MoreFeaturesPage extends
|
23 |
|
24 |
}
|
19 |
*
|
20 |
* @copyright (c) 2018 Webraftic Ltd
|
21 |
*/
|
22 |
+
class WbcrCmp_MoreFeaturesPage extends Wbcr_FactoryClearfy240_MoreFeaturesPage {
|
23 |
|
24 |
}
|
components/comments-plus/comments-plus.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* Text Domain: comments-plus
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
@@ -68,15 +68,15 @@ $wcm_plugin_info = array(
|
|
68 |
|
69 |
// FRAMEWORK MODULES
|
70 |
'load_factory_modules' => array(
|
71 |
-
array('libs/factory/bootstrap', '
|
72 |
-
array('libs/factory/forms', '
|
73 |
-
array('libs/factory/pages', '
|
74 |
-
array('libs/factory/clearfy', '
|
75 |
-
array('libs/factory/adverts', '
|
76 |
)
|
77 |
);
|
78 |
|
79 |
-
$wcm_compatibility = new
|
80 |
'plugin_already_activate' => defined('WCM_PLUGIN_ACTIVE'),
|
81 |
'required_php_version' => '5.4',
|
82 |
'required_wp_version' => '4.2.0',
|
8 |
* Text Domain: comments-plus
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_448_VERSION
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
68 |
|
69 |
// FRAMEWORK MODULES
|
70 |
'load_factory_modules' => array(
|
71 |
+
array('libs/factory/bootstrap', 'factory_bootstrap_448', 'admin'),
|
72 |
+
array('libs/factory/forms', 'factory_forms_445', 'admin'),
|
73 |
+
array('libs/factory/pages', 'factory_pages_447', 'admin'),
|
74 |
+
array('libs/factory/clearfy', 'factory_clearfy_240', 'all'),
|
75 |
+
array('libs/factory/adverts', 'factory_adverts_126', 'admin')
|
76 |
)
|
77 |
);
|
78 |
|
79 |
+
$wcm_compatibility = new Wbcr_Factory448_Requirements(__FILE__, array_merge($wcm_plugin_info, array(
|
80 |
'plugin_already_activate' => defined('WCM_PLUGIN_ACTIVE'),
|
81 |
'required_php_version' => '5.4',
|
82 |
'required_wp_version' => '4.2.0',
|
components/comments-plus/includes/class-plugin.php
CHANGED
@@ -10,11 +10,11 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
10 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
*/
|
13 |
-
class WCM_Plugin extends
|
14 |
|
15 |
/**
|
16 |
* @see self::app()
|
17 |
-
* @var
|
18 |
*/
|
19 |
private static $app;
|
20 |
|
@@ -59,7 +59,7 @@ class WCM_Plugin extends Wbcr_Factory446_Plugin {
|
|
59 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
60 |
* классам.
|
61 |
*
|
62 |
-
* @return \
|
63 |
*/
|
64 |
public static function app() {
|
65 |
return self::$app;
|
10 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
*/
|
13 |
+
class WCM_Plugin extends Wbcr_Factory448_Plugin {
|
14 |
|
15 |
/**
|
16 |
* @see self::app()
|
17 |
+
* @var Wbcr_Factory448_Plugin
|
18 |
*/
|
19 |
private static $app;
|
20 |
|
59 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
60 |
* классам.
|
61 |
*
|
62 |
+
* @return \Wbcr_Factory448_Plugin|\WCM_Plugin
|
63 |
*/
|
64 |
public static function app() {
|
65 |
return self::$app;
|
components/comments-plus/includes/classes/class-configurate-comments.php
CHANGED
@@ -12,14 +12,14 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
12 |
*
|
13 |
* @copyright (c) 2017 Webraftic Ltd
|
14 |
*/
|
15 |
-
class WbcrCmp_ConfigComments extends
|
16 |
|
17 |
private $modified_types = [];
|
18 |
|
19 |
/**
|
20 |
-
* @param
|
21 |
*/
|
22 |
-
public function __construct(
|
23 |
parent::__construct( $plugin );
|
24 |
$this->plugin = $plugin;
|
25 |
}
|
12 |
*
|
13 |
* @copyright (c) 2017 Webraftic Ltd
|
14 |
*/
|
15 |
+
class WbcrCmp_ConfigComments extends Wbcr_FactoryClearfy240_Configurate {
|
16 |
|
17 |
private $modified_types = [];
|
18 |
|
19 |
/**
|
20 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
21 |
*/
|
22 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
23 |
parent::__construct( $plugin );
|
24 |
$this->plugin = $plugin;
|
25 |
}
|
components/cyrlitera/admin/activation.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
*
|
6 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 09.03.2018, Webcraftic
|
8 |
-
* @see
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
|
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
class WCTR_Activation extends
|
18 |
|
19 |
/**
|
20 |
* Runs activation actions.
|
5 |
*
|
6 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 09.03.2018, Webcraftic
|
8 |
+
* @see Wbcr_Factory448_Activator
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
class WCTR_Activation extends Wbcr_Factory448_Activator {
|
18 |
|
19 |
/**
|
20 |
* Runs activation actions.
|
components/cyrlitera/admin/boot.php
CHANGED
@@ -135,7 +135,7 @@ if ( ! defined( 'LOADING_CYRLITERA_AS_ADDON' ) ) {
|
|
135 |
return $page_url;
|
136 |
}
|
137 |
|
138 |
-
add_filter( '
|
139 |
|
140 |
/**
|
141 |
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
135 |
return $page_url;
|
136 |
}
|
137 |
|
138 |
+
add_filter( 'wbcr_factory_pages_447_imppage_rating_widget_url', 'wbcr_cyrlitera_rating_widget_url', 10, 2 );
|
139 |
|
140 |
/**
|
141 |
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
components/cyrlitera/admin/pages/class-page-cyrlitera.php
CHANGED
@@ -16,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
* @copyright (c) 2018 Webraftic Ltd
|
17 |
* @version 1.0
|
18 |
*/
|
19 |
-
class WCTR_CyrliteraPage extends
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
@@ -59,9 +59,9 @@ class WCTR_CyrliteraPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
59 |
*
|
60 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
61 |
*
|
62 |
-
* @param \
|
63 |
*/
|
64 |
-
public function __construct(
|
65 |
$this->menu_title = __( 'Cyrlitera', 'cyrlitera' );
|
66 |
|
67 |
if ( ! defined( 'LOADING_CYRLITERA_AS_ADDON' ) ) {
|
@@ -203,7 +203,7 @@ class WCTR_CyrliteraPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
203 |
}
|
204 |
|
205 |
/**
|
206 |
-
* @param $html_builder
|
207 |
*/
|
208 |
public function rollbackButton( $html_builder ) {
|
209 |
$form_name = $html_builder->getFormName();
|
16 |
* @copyright (c) 2018 Webraftic Ltd
|
17 |
* @version 1.0
|
18 |
*/
|
19 |
+
class WCTR_CyrliteraPage extends Wbcr_FactoryClearfy240_PageBase {
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
59 |
*
|
60 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
61 |
*
|
62 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
63 |
*/
|
64 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
65 |
$this->menu_title = __( 'Cyrlitera', 'cyrlitera' );
|
66 |
|
67 |
if ( ! defined( 'LOADING_CYRLITERA_AS_ADDON' ) ) {
|
203 |
}
|
204 |
|
205 |
/**
|
206 |
+
* @param $html_builder Wbcr_FactoryForms445_Html
|
207 |
*/
|
208 |
public function rollbackButton( $html_builder ) {
|
209 |
$form_name = $html_builder->getFormName();
|
components/cyrlitera/admin/pages/class-page-more-features.php
CHANGED
@@ -18,6 +18,6 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
18 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
19 |
* @copyright (c) 2018 Webraftic Ltd
|
20 |
*/
|
21 |
-
class WCTR_MoreFeaturesPage extends
|
22 |
|
23 |
}
|
18 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
19 |
* @copyright (c) 2018 Webraftic Ltd
|
20 |
*/
|
21 |
+
class WCTR_MoreFeaturesPage extends Wbcr_FactoryClearfy240_MoreFeaturesPage {
|
22 |
|
23 |
}
|
components/cyrlitera/cyrlitera.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* Text Domain: cyrlitera
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
@@ -68,15 +68,15 @@ $wctr_plugin_info = array(
|
|
68 |
|
69 |
// FRAMEWORK MODULES
|
70 |
'load_factory_modules' => array(
|
71 |
-
array('libs/factory/bootstrap', '
|
72 |
-
array('libs/factory/forms', '
|
73 |
-
array('libs/factory/pages', '
|
74 |
-
array('libs/factory/clearfy', '
|
75 |
-
array('libs/factory/adverts', '
|
76 |
)
|
77 |
);
|
78 |
|
79 |
-
$wctr_compatibility = new
|
80 |
'plugin_already_activate' => defined('WCTR_PLUGIN_ACTIVE'),
|
81 |
'required_php_version' => '5.4',
|
82 |
'required_wp_version' => '4.2.0',
|
8 |
* Text Domain: cyrlitera
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_448_VERSION
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
68 |
|
69 |
// FRAMEWORK MODULES
|
70 |
'load_factory_modules' => array(
|
71 |
+
array('libs/factory/bootstrap', 'factory_bootstrap_448', 'admin'),
|
72 |
+
array('libs/factory/forms', 'factory_forms_445', 'admin'),
|
73 |
+
array('libs/factory/pages', 'factory_pages_447', 'admin'),
|
74 |
+
array('libs/factory/clearfy', 'factory_clearfy_240', 'all'),
|
75 |
+
array('libs/factory/adverts', 'factory_adverts_126', 'admin')
|
76 |
)
|
77 |
);
|
78 |
|
79 |
+
$wctr_compatibility = new Wbcr_Factory448_Requirements(__FILE__, array_merge($wctr_plugin_info, array(
|
80 |
'plugin_already_activate' => defined('WCTR_PLUGIN_ACTIVE'),
|
81 |
'required_php_version' => '5.4',
|
82 |
'required_wp_version' => '4.2.0',
|
components/cyrlitera/includes/class-plugin.php
CHANGED
@@ -10,11 +10,11 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
10 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
*/
|
13 |
-
class WCTR_Plugin extends
|
14 |
|
15 |
/**
|
16 |
* @see self::app()
|
17 |
-
* @var
|
18 |
*/
|
19 |
private static $app;
|
20 |
|
@@ -57,7 +57,7 @@ class WCTR_Plugin extends Wbcr_Factory446_Plugin {
|
|
57 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
58 |
* классам.
|
59 |
*
|
60 |
-
* @return \
|
61 |
*/
|
62 |
public static function app() {
|
63 |
return self::$app;
|
10 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
*/
|
13 |
+
class WCTR_Plugin extends Wbcr_Factory448_Plugin {
|
14 |
|
15 |
/**
|
16 |
* @see self::app()
|
17 |
+
* @var Wbcr_Factory448_Plugin
|
18 |
*/
|
19 |
private static $app;
|
20 |
|
57 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
58 |
* классам.
|
59 |
*
|
60 |
+
* @return \Wbcr_Factory448_Plugin|\WCTR_Plugin
|
61 |
*/
|
62 |
public static function app() {
|
63 |
return self::$app;
|
components/cyrlitera/includes/classes/class-configurate-cyrlitera.php
CHANGED
@@ -12,7 +12,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
-
class WCTR_ConfigurateCyrlitera extends
|
16 |
|
17 |
public function registerActionsAndFilters() {
|
18 |
|
@@ -235,7 +235,7 @@ class WCTR_ConfigurateCyrlitera extends Wbcr_FactoryClearfy237_Configurate {
|
|
235 |
* Перенаправление со старых url, которые были уже преобразованы
|
236 |
*/
|
237 |
public function redirectFromOldUrls() {
|
238 |
-
if ( !
|
239 |
return;
|
240 |
}
|
241 |
$is404 = is_404();
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
+
class WCTR_ConfigurateCyrlitera extends Wbcr_FactoryClearfy240_Configurate {
|
16 |
|
17 |
public function registerActionsAndFilters() {
|
18 |
|
235 |
* Перенаправление со старых url, которые были уже преобразованы
|
236 |
*/
|
237 |
public function redirectFromOldUrls() {
|
238 |
+
if ( ! WbcrFactoryClearfy240_Helpers::isPermalink() ) {
|
239 |
return;
|
240 |
}
|
241 |
$is404 = is_404();
|
components/cyrlitera/migrations/010004.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
-
class WCTR_Update010004 extends
|
8 |
|
9 |
public function install() {
|
10 |
WCTR_Plugin::app()->deletePopulateOption( 'custom_symbols_pack' );
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
+
class WCTR_Update010004 extends Wbcr_Factory448_Update {
|
8 |
|
9 |
public function install() {
|
10 |
WCTR_Plugin::app()->deletePopulateOption( 'custom_symbols_pack' );
|
components/disable-admin-notices/admin/boot.php
CHANGED
@@ -44,7 +44,7 @@ if ( ! defined( 'LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON' ) ) {
|
|
44 |
*
|
45 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
46 |
*/
|
47 |
-
add_filter( '
|
48 |
if ( $plugin_name == WDN_Plugin::app()->getPluginName() ) {
|
49 |
return 'https://goo.gl/68ucHp';
|
50 |
}
|
44 |
*
|
45 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
46 |
*/
|
47 |
+
add_filter( 'wbcr_factory_pages_447_imppage_rating_widget_url', function ( $page_url, $plugin_name ) {
|
48 |
if ( $plugin_name == WDN_Plugin::app()->getPluginName() ) {
|
49 |
return 'https://goo.gl/68ucHp';
|
50 |
}
|
components/disable-admin-notices/admin/class-page-basic.php
CHANGED
@@ -19,16 +19,16 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
19 |
exit;
|
20 |
}
|
21 |
|
22 |
-
class WDN_Page extends
|
23 |
|
24 |
/**
|
25 |
* Requests assets (js and css) for the page.
|
26 |
*
|
27 |
-
* @param
|
28 |
-
* @param
|
29 |
*
|
30 |
* @return void
|
31 |
-
* @see
|
32 |
*
|
33 |
*/
|
34 |
public function assets( $scripts, $styles ) {
|
19 |
exit;
|
20 |
}
|
21 |
|
22 |
+
class WDN_Page extends Wbcr_FactoryClearfy240_PageBase {
|
23 |
|
24 |
/**
|
25 |
* Requests assets (js and css) for the page.
|
26 |
*
|
27 |
+
* @param Wbcr_Factory448_ScriptList $scripts
|
28 |
+
* @param Wbcr_Factory448_StyleList $styles
|
29 |
*
|
30 |
* @return void
|
31 |
+
* @see Wbcr_FactoryPages447_AdminPage
|
32 |
*
|
33 |
*/
|
34 |
public function assets( $scripts, $styles ) {
|
components/disable-admin-notices/admin/options.php
CHANGED
@@ -176,7 +176,7 @@ function wbcr_dan_is_active_clearfy_component() {
|
|
176 |
* с настройками этого плагина, потому что это ухудшает юзабилити.
|
177 |
*
|
178 |
* @param array $form Массив с группой настроек, страницы "Дополнительно" в плагине Clearfy
|
179 |
-
* @param
|
180 |
*
|
181 |
* @return mixed Отсортированный массив с группой опций
|
182 |
*/
|
@@ -203,7 +203,7 @@ add_filter( 'wbcr_clr_additionally_form_options', 'wbcr_dan_additionally_form_op
|
|
203 |
* Эта модикация является не стандартной, поэтому мы не можете реалировать ее
|
204 |
* через фреймворк.
|
205 |
*
|
206 |
-
* @param @param $html_builder
|
207 |
*
|
208 |
* @since 1.0
|
209 |
*
|
176 |
* с настройками этого плагина, потому что это ухудшает юзабилити.
|
177 |
*
|
178 |
* @param array $form Массив с группой настроек, страницы "Дополнительно" в плагине Clearfy
|
179 |
+
* @param Wbcr_FactoryPages447_ImpressiveThemplate $page Экземпляр страницы
|
180 |
*
|
181 |
* @return mixed Отсортированный массив с группой опций
|
182 |
*/
|
203 |
* Эта модикация является не стандартной, поэтому мы не можете реалировать ее
|
204 |
* через фреймворк.
|
205 |
*
|
206 |
+
* @param @param $html_builder Wbcr_FactoryForms445_Html
|
207 |
*
|
208 |
* @since 1.0
|
209 |
*
|
components/disable-admin-notices/admin/pages/class-pages-edit-admin-bar.php
CHANGED
@@ -63,11 +63,11 @@ class WDAN_Edit_Admin_Bar extends WDN_Page {
|
|
63 |
/**
|
64 |
* Requests assets (js and css) for the page.
|
65 |
*
|
66 |
-
* @param
|
67 |
-
* @param
|
68 |
*
|
69 |
* @return void
|
70 |
-
* @see
|
71 |
*
|
72 |
*/
|
73 |
public function assets( $scripts, $styles ) {
|
63 |
/**
|
64 |
* Requests assets (js and css) for the page.
|
65 |
*
|
66 |
+
* @param Wbcr_Factory448_ScriptList $scripts
|
67 |
+
* @param Wbcr_Factory448_StyleList $styles
|
68 |
*
|
69 |
* @return void
|
70 |
+
* @see Wbcr_FactoryPages447_AdminPage
|
71 |
*
|
72 |
*/
|
73 |
public function assets( $scripts, $styles ) {
|
components/disable-admin-notices/admin/pages/class-pages-edit-redirects.php
CHANGED
@@ -61,11 +61,11 @@ class WDAN_Block_Ad_Redirects extends WDN_Page {
|
|
61 |
/**
|
62 |
* Requests assets (js and css) for the page.
|
63 |
*
|
64 |
-
* @param
|
65 |
-
* @param
|
66 |
*
|
67 |
* @return void
|
68 |
-
* @see
|
69 |
*
|
70 |
*/
|
71 |
public function assets( $scripts, $styles ) {
|
61 |
/**
|
62 |
* Requests assets (js and css) for the page.
|
63 |
*
|
64 |
+
* @param Wbcr_Factory448_ScriptList $scripts
|
65 |
+
* @param Wbcr_Factory448_StyleList $styles
|
66 |
*
|
67 |
* @return void
|
68 |
+
* @see Wbcr_FactoryPages447_AdminPage
|
69 |
*
|
70 |
*/
|
71 |
public function assets( $scripts, $styles ) {
|
components/disable-admin-notices/admin/pages/class-pages-license.php
CHANGED
@@ -13,7 +13,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
13 |
*
|
14 |
* @copyright (c) 2018 Webraftic Ltd
|
15 |
*/
|
16 |
-
class WDN_LicensePage extends
|
17 |
|
18 |
/**
|
19 |
* {@inheritdoc}
|
@@ -36,12 +36,12 @@ class WDN_LicensePage extends Wbcr_FactoryClearfy237_LicensePage {
|
|
36 |
/**
|
37 |
* WCL_LicensePage constructor.
|
38 |
*
|
39 |
-
* @param \
|
40 |
*
|
41 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
42 |
*
|
43 |
*/
|
44 |
-
public function __construct(
|
45 |
$this->menu_title = __( 'License', 'robin-image-optimizer' );
|
46 |
$this->page_menu_short_description = __( 'Product activation', 'robin-image-optimizer' );
|
47 |
$this->plan_name = __( 'Disable admin notices premium', 'robin-image-optimizer' );
|
13 |
*
|
14 |
* @copyright (c) 2018 Webraftic Ltd
|
15 |
*/
|
16 |
+
class WDN_LicensePage extends Wbcr_FactoryClearfy240_LicensePage {
|
17 |
|
18 |
/**
|
19 |
* {@inheritdoc}
|
36 |
/**
|
37 |
* WCL_LicensePage constructor.
|
38 |
*
|
39 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
40 |
*
|
41 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
42 |
*
|
43 |
*/
|
44 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
45 |
$this->menu_title = __( 'License', 'robin-image-optimizer' );
|
46 |
$this->page_menu_short_description = __( 'Product activation', 'robin-image-optimizer' );
|
47 |
$this->plan_name = __( 'Disable admin notices premium', 'robin-image-optimizer' );
|
components/disable-admin-notices/admin/pages/class-pages-notices.php
CHANGED
@@ -59,11 +59,11 @@ class WDAN_Notices extends WDN_Page {
|
|
59 |
/**
|
60 |
* Requests assets (js and css) for the page.
|
61 |
*
|
62 |
-
* @param
|
63 |
-
* @param
|
64 |
*
|
65 |
* @return void
|
66 |
-
* @see
|
67 |
*
|
68 |
*/
|
69 |
public function assets( $scripts, $styles ) {
|
59 |
/**
|
60 |
* Requests assets (js and css) for the page.
|
61 |
*
|
62 |
+
* @param Wbcr_Factory448_ScriptList $scripts
|
63 |
+
* @param Wbcr_Factory448_StyleList $styles
|
64 |
*
|
65 |
* @return void
|
66 |
+
* @see Wbcr_FactoryPages447_AdminPage
|
67 |
*
|
68 |
*/
|
69 |
public function assets( $scripts, $styles ) {
|
components/disable-admin-notices/admin/pages/class-pages-settings.php
CHANGED
@@ -66,9 +66,9 @@ class WDN_Settings_Page extends WDN_Page {
|
|
66 |
|
67 |
|
68 |
/**
|
69 |
-
* @param
|
70 |
*/
|
71 |
-
public function __construct(
|
72 |
$this->menu_title = __( 'Hide admin notices', 'disable-admin-notices' );
|
73 |
$this->page_menu_short_description = __( 'General settings', 'disable-admin-notices' );
|
74 |
|
@@ -88,11 +88,11 @@ class WDN_Settings_Page extends WDN_Page {
|
|
88 |
/**
|
89 |
* Requests assets (js and css) for the page.
|
90 |
*
|
91 |
-
* @param
|
92 |
-
* @param
|
93 |
*
|
94 |
* @return void
|
95 |
-
* @see
|
96 |
*
|
97 |
*/
|
98 |
public function assets( $scripts, $styles ) {
|
@@ -122,7 +122,7 @@ class WDN_Settings_Page extends WDN_Page {
|
|
122 |
'wbcr_dan_code' => 'interal_error'
|
123 |
),
|
124 |
'type' => 'danger',
|
125 |
-
'message' => __('An error occurred while trying to delete comments. Internal error occured. Please try again later.', '
|
126 |
);*/
|
127 |
|
128 |
return $notices;
|
66 |
|
67 |
|
68 |
/**
|
69 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
70 |
*/
|
71 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
72 |
$this->menu_title = __( 'Hide admin notices', 'disable-admin-notices' );
|
73 |
$this->page_menu_short_description = __( 'General settings', 'disable-admin-notices' );
|
74 |
|
88 |
/**
|
89 |
* Requests assets (js and css) for the page.
|
90 |
*
|
91 |
+
* @param Wbcr_Factory448_ScriptList $scripts
|
92 |
+
* @param Wbcr_Factory448_StyleList $styles
|
93 |
*
|
94 |
* @return void
|
95 |
+
* @see Wbcr_FactoryPages447_AdminPage
|
96 |
*
|
97 |
*/
|
98 |
public function assets( $scripts, $styles ) {
|
122 |
'wbcr_dan_code' => 'interal_error'
|
123 |
),
|
124 |
'type' => 'danger',
|
125 |
+
'message' => __('An error occurred while trying to delete comments. Internal error occured. Please try again later.', 'factory_pages_447')
|
126 |
);*/
|
127 |
|
128 |
return $notices;
|
components/disable-admin-notices/disable-admin-notices.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* Text Domain: disable-admin-notices
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
/**
|
@@ -85,17 +85,17 @@ $wdan_plugin_info = array(
|
|
85 |
|
86 |
// FRAMEWORK MODULES
|
87 |
'load_factory_modules' => array(
|
88 |
-
array('libs/factory/bootstrap', '
|
89 |
-
array('libs/factory/forms', '
|
90 |
-
array('libs/factory/pages', '
|
91 |
-
array('libs/factory/clearfy', '
|
92 |
-
array('libs/factory/freemius', '
|
93 |
-
array('libs/factory/adverts', '
|
94 |
-
//array('libs/factory/logger', '
|
95 |
)
|
96 |
);
|
97 |
|
98 |
-
$wdan_compatibility = new
|
99 |
'plugin_already_activate' => defined('WDN_PLUGIN_ACTIVE'),
|
100 |
'required_php_version' => '5.4',
|
101 |
'required_wp_version' => '4.2.0',
|
8 |
* Text Domain: disable-admin-notices
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_448_VERSION
|
12 |
*/
|
13 |
|
14 |
/**
|
85 |
|
86 |
// FRAMEWORK MODULES
|
87 |
'load_factory_modules' => array(
|
88 |
+
array('libs/factory/bootstrap', 'factory_bootstrap_448', 'admin'),
|
89 |
+
array('libs/factory/forms', 'factory_forms_445', 'admin'),
|
90 |
+
array('libs/factory/pages', 'factory_pages_447', 'admin'),
|
91 |
+
array('libs/factory/clearfy', 'factory_clearfy_240', 'all'),
|
92 |
+
array('libs/factory/freemius', 'factory_freemius_136', 'all'),
|
93 |
+
array('libs/factory/adverts', 'factory_adverts_126', 'admin'),
|
94 |
+
//array('libs/factory/logger', 'factory_logger_113', 'all')
|
95 |
)
|
96 |
);
|
97 |
|
98 |
+
$wdan_compatibility = new Wbcr_Factory448_Requirements(__FILE__, array_merge($wdan_plugin_info, array(
|
99 |
'plugin_already_activate' => defined('WDN_PLUGIN_ACTIVE'),
|
100 |
'required_php_version' => '5.4',
|
101 |
'required_wp_version' => '4.2.0',
|
components/disable-admin-notices/includes/class-plugin.php
CHANGED
@@ -9,16 +9,16 @@
|
|
9 |
*/
|
10 |
|
11 |
// Exit if accessed directly
|
12 |
-
//use WBCR\
|
13 |
|
14 |
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
-
class WDN_Plugin extends
|
19 |
|
20 |
/**
|
21 |
-
* @var
|
22 |
*/
|
23 |
private static $app;
|
24 |
private $plugin_data;
|
@@ -44,7 +44,7 @@ class WDN_Plugin extends Wbcr_Factory446_Plugin {
|
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
-
* @return
|
48 |
*/
|
49 |
public static function app() {
|
50 |
return self::$app;
|
9 |
*/
|
10 |
|
11 |
// Exit if accessed directly
|
12 |
+
//use WBCR\Factory_Adverts_126\Base;
|
13 |
|
14 |
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
+
class WDN_Plugin extends Wbcr_Factory448_Plugin {
|
19 |
|
20 |
/**
|
21 |
+
* @var Wbcr_Factory448_Plugin
|
22 |
*/
|
23 |
private static $app;
|
24 |
private $plugin_data;
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
+
* @return Wbcr_Factory448_Plugin
|
48 |
*/
|
49 |
public static function app() {
|
50 |
return self::$app;
|
components/disable-admin-notices/includes/classes/class-configurate-notices.php
CHANGED
@@ -15,7 +15,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
-
class WDN_ConfigHideNotices extends
|
19 |
|
20 |
public function registerActionsAndFilters() {
|
21 |
if ( is_admin() ) {
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
+
class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy240_Configurate {
|
19 |
|
20 |
public function registerActionsAndFilters() {
|
21 |
if ( is_admin() ) {
|
components/disable-admin-notices/migrations/010007.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
-
class WDNUpdate010007 extends
|
8 |
|
9 |
public function install()
|
10 |
{
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
+
class WDNUpdate010007 extends Wbcr_Factory448_Update {
|
8 |
|
9 |
public function install()
|
10 |
{
|
components/ga-cache/admin/activation.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
*
|
6 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 09.09.2017, Webcraftic
|
8 |
-
* @see
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
|
@@ -14,7 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
class WGA_Activation extends
|
18 |
|
19 |
/**
|
20 |
* Runs activation actions.
|
5 |
*
|
6 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 09.09.2017, Webcraftic
|
8 |
+
* @see Factory448_Activator
|
9 |
* @version 1.0
|
10 |
*/
|
11 |
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
class WGA_Activation extends Wbcr_Factory448_Activator {
|
18 |
|
19 |
/**
|
20 |
* Runs activation actions.
|
components/ga-cache/admin/boot.php
CHANGED
@@ -21,9 +21,9 @@ if( !defined('ABSPATH') ) {
|
|
21 |
* options for analytic caching are enabled or not. If enabled,
|
22 |
* add cron task.
|
23 |
*
|
24 |
-
* @param
|
25 |
*
|
26 |
-
* @param
|
27 |
*
|
28 |
* @return void
|
29 |
* @since 3.0.1
|
21 |
* options for analytic caching are enabled or not. If enabled,
|
22 |
* add cron task.
|
23 |
*
|
24 |
+
* @param Wbcr_FactoryPages447_ImpressiveThemplate $page
|
25 |
*
|
26 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
27 |
*
|
28 |
* @return void
|
29 |
* @since 3.0.1
|
components/ga-cache/admin/options.php
CHANGED
@@ -8,30 +8,53 @@
|
|
8 |
*/
|
9 |
|
10 |
// Exit if accessed directly
|
11 |
-
if
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
/**
|
16 |
* @return array
|
17 |
*/
|
18 |
-
function wbcr_ga_get_plugin_options()
|
|
|
19 |
$options = [];
|
20 |
|
21 |
$options[] = [
|
22 |
'type' => 'html',
|
23 |
-
'html' => '<div class="wbcr-factory-page-group-header">' . __(
|
24 |
];
|
25 |
|
26 |
$options[] = [
|
27 |
-
'type'
|
28 |
-
'way'
|
29 |
-
'name'
|
30 |
-
'title'
|
31 |
-
'layout'
|
32 |
-
'hint'
|
33 |
-
'default'
|
34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
'show' => '#wbcr-clearfy-performance-ga-block'
|
36 |
],
|
37 |
'eventsOff' => [
|
@@ -39,74 +62,75 @@ function wbcr_ga_get_plugin_options() {
|
|
39 |
]
|
40 |
|
41 |
];
|
|
|
42 |
$options[] = [
|
43 |
-
'type'
|
44 |
-
'id'
|
45 |
'items' => [
|
46 |
[
|
47 |
-
'type'
|
48 |
-
'way'
|
49 |
-
'name'
|
50 |
-
'title'
|
51 |
-
'layout'
|
52 |
-
'hint'
|
53 |
'placeholder' => 'UA-XXXXX-Y'
|
54 |
],
|
55 |
[
|
56 |
-
'type'
|
57 |
-
'way'
|
58 |
-
'name'
|
59 |
-
'data'
|
60 |
-
[
|
61 |
-
[
|
62 |
],
|
63 |
-
'title'
|
64 |
-
'hint'
|
65 |
-
'layout'
|
66 |
'default' => 'footer'
|
67 |
],
|
68 |
[
|
69 |
-
'type'
|
70 |
-
'name'
|
71 |
-
'title'
|
72 |
'default' => 0,
|
73 |
-
'layout'
|
74 |
-
'hint'
|
75 |
],
|
76 |
[
|
77 |
-
'type'
|
78 |
-
'way'
|
79 |
-
'name'
|
80 |
-
'title'
|
81 |
'default' => 0,
|
82 |
-
'layout'
|
83 |
-
'hint'
|
84 |
],
|
85 |
[
|
86 |
-
'type'
|
87 |
-
'way'
|
88 |
-
'name'
|
89 |
-
'title'
|
90 |
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
91 |
-
'hint'
|
92 |
'default' => false
|
93 |
],
|
94 |
[
|
95 |
-
'type'
|
96 |
-
'way'
|
97 |
-
'name'
|
98 |
-
'title'
|
99 |
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
100 |
-
'hint'
|
101 |
'default' => false
|
102 |
],
|
103 |
[
|
104 |
-
'type'
|
105 |
-
'way'
|
106 |
-
'name'
|
107 |
-
'title'
|
108 |
-
'layout'
|
109 |
-
'hint'
|
110 |
'default' => false
|
111 |
]
|
112 |
]
|
@@ -117,23 +141,24 @@ function wbcr_ga_get_plugin_options() {
|
|
117 |
|
118 |
/**
|
119 |
* @param $form
|
120 |
-
* @param $page
|
121 |
*
|
122 |
* @return mixed
|
123 |
*/
|
124 |
-
function wbcr_ga_additionally_form_options(
|
125 |
-
|
|
|
126 |
return $form;
|
127 |
}
|
128 |
|
129 |
$options = wbcr_ga_get_plugin_options();
|
130 |
|
131 |
-
foreach
|
132 |
-
|
133 |
}
|
134 |
|
135 |
return $form;
|
136 |
}
|
137 |
|
138 |
-
add_filter(
|
139 |
|
8 |
*/
|
9 |
|
10 |
// Exit if accessed directly
|
11 |
+
if( !defined('ABSPATH') ) {
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
/**
|
16 |
* @return array
|
17 |
*/
|
18 |
+
function wbcr_ga_get_plugin_options()
|
19 |
+
{
|
20 |
$options = [];
|
21 |
|
22 |
$options[] = [
|
23 |
'type' => 'html',
|
24 |
+
'html' => '<div class="wbcr-factory-page-group-header">' . __('<strong>Improve browser caching for 3rd-party services</strong>.', 'simple-google-analytics') . '<p>' . __('To improve Google Page Speed indicators Analytics caching is needed. However, it can also slightly increase your website loading speed, because Analytics js files will load locally. The second case that you might need these settings is the usual Google Analytics connection to your website. You do not need to do this with other plugins or insert the tracking code into your theme.', 'simple-google-analytics') . '</p></div>'
|
25 |
];
|
26 |
|
27 |
$options[] = [
|
28 |
+
'type' => 'checkbox',
|
29 |
+
'way' => 'buttons',
|
30 |
+
'name' => 'facebook_cache',
|
31 |
+
'title' => __('Improve browser caching for Facebook Pixel', 'simple-google-analytics'),
|
32 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
33 |
+
'hint' => __('Clearfy will host these Facebook Pixels locally on your server to help satisfy the PageSpeed recommendation for Leverage browser caching.', 'simple-google-analytics') . '<br>--<br><span class="wbcr-factory-light-orange-color">' . __('ATTENTION! Before using this option, remove the previously installed Google Analytics code inside your theme or plugins associated with this feature!', 'simple-google-analytics') . '</span>',
|
34 |
+
'default' => false
|
35 |
+
];
|
36 |
+
|
37 |
+
$options[] = [
|
38 |
+
'type' => 'checkbox',
|
39 |
+
'way' => 'buttons',
|
40 |
+
'name' => 'google_analytics_cache',
|
41 |
+
'title' => __('Improve browser caching for Google Analytics', 'simple-google-analytics'),
|
42 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
43 |
+
'hint' => __('Clearfy will host these Google scripts locally on your server to help satisfy the PageSpeed recommendation for Leverage browser caching.', 'simple-google-analytics') . (WGA_Plugin::app()->getPopulateOption('ga_cache') ? '<br>--<br><span class="wbcr-factory-light-orange-color">' . __('ATTENTION! Before using this option, please disable the option "Add Google Analytics code and Cache"!', 'simple-google-analytics') . '</span>' : ''),
|
44 |
+
'cssClass' => WGA_Plugin::app()->getPopulateOption('ga_cache') ? ['factory-checkbox-disabled'] : [],
|
45 |
+
'default' => false
|
46 |
+
];
|
47 |
+
|
48 |
+
$options[] = [
|
49 |
+
'type' => 'checkbox',
|
50 |
+
'way' => 'buttons',
|
51 |
+
'name' => 'ga_cache',
|
52 |
+
'title' => __('Add Google Analytics code and Cache', 'simple-google-analytics'),
|
53 |
+
//'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
54 |
+
'hint' => __('If you enable this option, the plugin will begin to save a local copy of Google Analytics to speed up the loading of your website and improve Google Page Speed.', 'simple-google-analytics') . '<br>--<br><span class="wbcr-factory-red-color">' . __('ATTENTION! This option is deprecated and cannot be used since plugin version 1.9.0! Use the new option "Improve browser caching for Google Analytics", you will have to insert the google analytics code yourself without the Clearfy plugin.', 'simple-google-analytics') . '</span>',
|
55 |
+
'default' => false,
|
56 |
+
'cssClass' => !WGA_Plugin::app()->getPopulateOption('ga_cache') ? ['factory-checkbox-disabled'] : [],
|
57 |
+
'eventsOn' => [
|
58 |
'show' => '#wbcr-clearfy-performance-ga-block'
|
59 |
],
|
60 |
'eventsOff' => [
|
62 |
]
|
63 |
|
64 |
];
|
65 |
+
|
66 |
$options[] = [
|
67 |
+
'type' => 'div',
|
68 |
+
'id' => 'wbcr-clearfy-performance-ga-block',
|
69 |
'items' => [
|
70 |
[
|
71 |
+
'type' => 'textbox',
|
72 |
+
'way' => 'buttons',
|
73 |
+
'name' => 'ga_tracking_id',
|
74 |
+
'title' => __('Google analytic Code', 'simple-google-analytics'),
|
75 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
76 |
+
'hint' => __('Set the Google Analytics tracking code.', 'simple-google-analytics'),
|
77 |
'placeholder' => 'UA-XXXXX-Y'
|
78 |
],
|
79 |
[
|
80 |
+
'type' => 'dropdown',
|
81 |
+
'way' => 'buttons',
|
82 |
+
'name' => 'ga_script_position',
|
83 |
+
'data' => [
|
84 |
+
['header', 'Header'],
|
85 |
+
['footer', 'Footer'],
|
86 |
],
|
87 |
+
'title' => __('Save GA in', 'simple-google-analytics'),
|
88 |
+
'hint' => __('Select location for the Google Analytics code.', 'simple-google-analytics'),
|
89 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
90 |
'default' => 'footer'
|
91 |
],
|
92 |
[
|
93 |
+
'type' => 'integer',
|
94 |
+
'name' => 'ga_adjusted_bounce_rate',
|
95 |
+
'title' => __('Use adjusted bounce rate?', 'simple-google-analytics'),
|
96 |
'default' => 0,
|
97 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
98 |
+
'hint' => __('Essentially, you set up an event which is triggered after a user spends a certain amount of time on the landing page, telling Google Analytics not to count these users as bounces. A user may come to your website, find all of the information they need (a phone number, for example) and then leave the site without visiting another page. Without adjusted bounce rate, such a user would be considered a bounce, even though they had a successful experience. By defining a time limit after which you can consider a user to be "engaged," that user would no longer count as a bounce, and you\'d get a more accurate idea of whether they found what they were looking for.', 'simple-google-analytics')
|
99 |
],
|
100 |
[
|
101 |
+
'type' => 'integer',
|
102 |
+
'way' => 'buttons',
|
103 |
+
'name' => 'ga_enqueue_order',
|
104 |
+
'title' => __('Change enqueue order?', 'simple-google-analytics'),
|
105 |
'default' => 0,
|
106 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
107 |
+
'hint' => __('By default, Google Analytics code is loaded before other scripts and javasscript code, but if you set the value to 100, the GA code will be loaded after all other scripts. By changing the priority, you can set code position on the page.', 'simple-google-analytics')
|
108 |
],
|
109 |
[
|
110 |
+
'type' => 'checkbox',
|
111 |
+
'way' => 'buttons',
|
112 |
+
'name' => 'ga_disable_display_features',
|
113 |
+
'title' => __('Disable all display features functionality?', 'simple-google-analytics'),
|
114 |
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
115 |
+
'hint' => sprintf(__('Disable all <a href="%s">display features functionality?</a>', 'simple-google-analytics'), 'https://developers.google.com/analytics/devguides/collection/analyticsjs/display-features'),
|
116 |
'default' => false
|
117 |
],
|
118 |
[
|
119 |
+
'type' => 'checkbox',
|
120 |
+
'way' => 'buttons',
|
121 |
+
'name' => 'ga_anonymize_ip',
|
122 |
+
'title' => __('Use Anonymize IP? (Required by law for some countries)', 'simple-google-analytics'),
|
123 |
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
124 |
+
'hint' => sprintf(__('Use <a href="%s">Anonymize IP?</a> (Required by law for some countries)', 'simple-google-analytics'), 'https://support.google.com/analytics/answer/2763052'),
|
125 |
'default' => false
|
126 |
],
|
127 |
[
|
128 |
+
'type' => 'checkbox',
|
129 |
+
'way' => 'buttons',
|
130 |
+
'name' => 'ga_track_admin',
|
131 |
+
'title' => __('Track logged in Administrators?', 'simple-google-analytics'),
|
132 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
133 |
+
'hint' => __('Track logged in Administrators?', 'simple-google-analytics'),
|
134 |
'default' => false
|
135 |
]
|
136 |
]
|
141 |
|
142 |
/**
|
143 |
* @param $form
|
144 |
+
* @param $page Wbcr_FactoryPages447_ImpressiveThemplate
|
145 |
*
|
146 |
* @return mixed
|
147 |
*/
|
148 |
+
function wbcr_ga_additionally_form_options($form, $page)
|
149 |
+
{
|
150 |
+
if( empty($form) ) {
|
151 |
return $form;
|
152 |
}
|
153 |
|
154 |
$options = wbcr_ga_get_plugin_options();
|
155 |
|
156 |
+
foreach($options as $option) {
|
157 |
+
$form[0]['items'][] = $option;
|
158 |
}
|
159 |
|
160 |
return $form;
|
161 |
}
|
162 |
|
163 |
+
add_filter('wbcr_clr_code_clean_form_options', 'wbcr_ga_additionally_form_options', 10, 2);
|
164 |
|
components/ga-cache/admin/pages/class-pages-general-settings.php
CHANGED
@@ -16,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
* @copyright (c) 2018 Webraftic Ltd
|
17 |
* @version 1.0
|
18 |
*/
|
19 |
-
class WGA_CachePage extends
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
@@ -48,9 +48,9 @@ class WGA_CachePage extends Wbcr_FactoryClearfy237_PageBase {
|
|
48 |
public $show_right_sidebar_in_options = true;
|
49 |
|
50 |
/**
|
51 |
-
* @param
|
52 |
*/
|
53 |
-
public function __construct(
|
54 |
$this->menu_title = __( 'Local Google Analytics', 'simple-google-analytics' );
|
55 |
|
56 |
if ( ! defined( 'LOADING_GA_CACHE_AS_ADDON' ) ) {
|
16 |
* @copyright (c) 2018 Webraftic Ltd
|
17 |
* @version 1.0
|
18 |
*/
|
19 |
+
class WGA_CachePage extends Wbcr_FactoryClearfy240_PageBase {
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
48 |
public $show_right_sidebar_in_options = true;
|
49 |
|
50 |
/**
|
51 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
52 |
*/
|
53 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
54 |
$this->menu_title = __( 'Local Google Analytics', 'simple-google-analytics' );
|
55 |
|
56 |
if ( ! defined( 'LOADING_GA_CACHE_AS_ADDON' ) ) {
|
components/ga-cache/admin/pages/class-pages-more-features.php
CHANGED
@@ -16,6 +16,6 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
-
class WGA_MoreFeaturesPage extends
|
20 |
|
21 |
}
|
16 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
+
class WGA_MoreFeaturesPage extends Wbcr_FactoryClearfy240_MoreFeaturesPage {
|
20 |
|
21 |
}
|
components/ga-cache/clearfy.php
CHANGED
@@ -10,42 +10,46 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if
|
18 |
-
define(
|
19 |
-
define(
|
20 |
-
define(
|
21 |
|
22 |
// Этот плагин загружен, как аддон для плагина Clearfy
|
23 |
-
define(
|
24 |
|
25 |
-
if
|
26 |
-
define(
|
27 |
}
|
28 |
|
29 |
-
if
|
30 |
-
define(
|
31 |
}
|
32 |
|
33 |
-
if
|
34 |
-
define(
|
|
|
|
|
|
|
|
|
35 |
}
|
36 |
|
37 |
try {
|
38 |
// Global scripts
|
39 |
-
require_once(
|
40 |
new WGA_Plugin();
|
41 |
} catch( Exception $e ) {
|
42 |
-
$wga_plugin_error_func = function () use (
|
43 |
-
$error = sprintf(
|
44 |
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
|
45 |
};
|
46 |
|
47 |
-
add_action(
|
48 |
-
add_action(
|
49 |
}
|
50 |
}
|
51 |
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !defined('WGA_PLUGIN_ACTIVE') ) {
|
18 |
+
define('WGA_PLUGIN_VERSION', '3.1.1');
|
19 |
+
define('WGA_TEXT_DOMAIN', 'simple-google-analytics');
|
20 |
+
define('WGA_PLUGIN_ACTIVE', true);
|
21 |
|
22 |
// Этот плагин загружен, как аддон для плагина Clearfy
|
23 |
+
define('LOADING_GA_CACHE_AS_ADDON', true);
|
24 |
|
25 |
+
if( !defined('WGA_PLUGIN_DIR') ) {
|
26 |
+
define('WGA_PLUGIN_DIR', dirname(__FILE__));
|
27 |
}
|
28 |
|
29 |
+
if( !defined('WGA_PLUGIN_BASE') ) {
|
30 |
+
define('WGA_PLUGIN_BASE', plugin_basename(__FILE__));
|
31 |
}
|
32 |
|
33 |
+
if( !defined('WGA_PLUGIN_URL') ) {
|
34 |
+
define('WGA_PLUGIN_URL', plugins_url(null, __FILE__));
|
35 |
+
}
|
36 |
+
|
37 |
+
if( !defined('WGA_PLUGIN_CACHE_FOLDER') ) {
|
38 |
+
define('WGA_PLUGIN_CACHE_FOLDER', 'wga-cache');
|
39 |
}
|
40 |
|
41 |
try {
|
42 |
// Global scripts
|
43 |
+
require_once(WGA_PLUGIN_DIR . '/includes/3rd-party/class-clearfy-plugin.php');
|
44 |
new WGA_Plugin();
|
45 |
} catch( Exception $e ) {
|
46 |
+
$wga_plugin_error_func = function () use ($e) {
|
47 |
+
$error = sprintf("The %s plugin has stopped. <b>Error:</b> %s Code: %s", 'Webcraftic Local Google Analytic', $e->getMessage(), $e->getCode());
|
48 |
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
|
49 |
};
|
50 |
|
51 |
+
add_action('admin_notices', $wga_plugin_error_func);
|
52 |
+
add_action('network_admin_notices', $wga_plugin_error_func);
|
53 |
}
|
54 |
}
|
55 |
|
components/ga-cache/includes/3rd-party/class-clearfy-plugin.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
// Exit if accessed directly
|
3 |
-
if
|
4 |
exit;
|
5 |
}
|
6 |
|
@@ -26,20 +26,21 @@ class WGA_Plugin {
|
|
26 |
* Подробнее о свойстве $app см. self::app()
|
27 |
*
|
28 |
* @param string $plugin_path
|
29 |
-
* @param array
|
30 |
*
|
31 |
* @throws Exception
|
32 |
*/
|
33 |
-
public function __construct()
|
34 |
-
|
35 |
-
|
|
|
36 |
}
|
37 |
|
38 |
self::$app = WCL_Plugin::app();
|
39 |
|
40 |
$this->global_scripts();
|
41 |
|
42 |
-
if
|
43 |
$this->init_activation();
|
44 |
$this->admin_scripts();
|
45 |
}
|
@@ -56,7 +57,8 @@ class WGA_Plugin {
|
|
56 |
*
|
57 |
* @return WCL_Plugin
|
58 |
*/
|
59 |
-
public static function app()
|
|
|
60 |
return self::$app;
|
61 |
}
|
62 |
|
@@ -64,27 +66,35 @@ class WGA_Plugin {
|
|
64 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
65 |
* @since 3.0.0
|
66 |
*/
|
67 |
-
private function init_activation()
|
68 |
-
|
69 |
-
|
|
|
70 |
}
|
71 |
|
72 |
/**
|
73 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
74 |
-
* @since 3.0.0
|
75 |
* @throws \Exception
|
|
|
|
|
76 |
*/
|
77 |
-
private function admin_scripts()
|
78 |
-
|
79 |
-
require(
|
|
|
80 |
}
|
81 |
|
82 |
/**
|
83 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
84 |
* @since 3.0.0
|
85 |
*/
|
86 |
-
private function global_scripts()
|
87 |
-
|
88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
90 |
}
|
1 |
<?php
|
2 |
// Exit if accessed directly
|
3 |
+
if( !defined('ABSPATH') ) {
|
4 |
exit;
|
5 |
}
|
6 |
|
26 |
* Подробнее о свойстве $app см. self::app()
|
27 |
*
|
28 |
* @param string $plugin_path
|
29 |
+
* @param array $data
|
30 |
*
|
31 |
* @throws Exception
|
32 |
*/
|
33 |
+
public function __construct()
|
34 |
+
{
|
35 |
+
if( !class_exists('WCL_Plugin') ) {
|
36 |
+
throw new Exception('Plugin Clearfy is not installed!');
|
37 |
}
|
38 |
|
39 |
self::$app = WCL_Plugin::app();
|
40 |
|
41 |
$this->global_scripts();
|
42 |
|
43 |
+
if( is_admin() ) {
|
44 |
$this->init_activation();
|
45 |
$this->admin_scripts();
|
46 |
}
|
57 |
*
|
58 |
* @return WCL_Plugin
|
59 |
*/
|
60 |
+
public static function app()
|
61 |
+
{
|
62 |
return self::$app;
|
63 |
}
|
64 |
|
66 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
67 |
* @since 3.0.0
|
68 |
*/
|
69 |
+
private function init_activation()
|
70 |
+
{
|
71 |
+
require_once(WGA_PLUGIN_DIR . '/admin/activation.php');
|
72 |
+
self::app()->registerActivation('WGA_Activation');
|
73 |
}
|
74 |
|
75 |
/**
|
|
|
|
|
76 |
* @throws \Exception
|
77 |
+
* @since 3.0.0
|
78 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
79 |
*/
|
80 |
+
private function admin_scripts()
|
81 |
+
{
|
82 |
+
require(WGA_PLUGIN_DIR . '/admin/options.php');
|
83 |
+
require(WGA_PLUGIN_DIR . '/admin/boot.php');
|
84 |
}
|
85 |
|
86 |
/**
|
87 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
88 |
* @since 3.0.0
|
89 |
*/
|
90 |
+
private function global_scripts()
|
91 |
+
{
|
92 |
+
require(WGA_PLUGIN_DIR . '/includes/classes/class-configurate-ga.php');
|
93 |
+
new WGA_ConfigGACache(self::$app);
|
94 |
+
|
95 |
+
add_action('plugins_loaded', function () {
|
96 |
+
require(WGA_PLUGIN_DIR . '/includes/classes/class-scheduler.php');
|
97 |
+
new \WGA\Busting\Sheduller();
|
98 |
+
});
|
99 |
}
|
100 |
}
|
components/ga-cache/includes/class-plugin.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
// Exit if accessed directly
|
3 |
-
if
|
4 |
exit;
|
5 |
}
|
6 |
|
@@ -10,11 +10,11 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
10 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
*/
|
13 |
-
class WGA_Plugin extends
|
14 |
|
15 |
/**
|
16 |
* @see self::app()
|
17 |
-
* @var
|
18 |
*/
|
19 |
private static $app;
|
20 |
|
@@ -31,19 +31,20 @@ class WGA_Plugin extends Wbcr_Factory446_Plugin {
|
|
31 |
* Подробнее о свойстве $app см. self::app()
|
32 |
*
|
33 |
* @param string $plugin_path
|
34 |
-
* @param array
|
35 |
*
|
36 |
* @throws Exception
|
37 |
*/
|
38 |
-
public function __construct(
|
39 |
-
|
|
|
40 |
|
41 |
-
self::$app
|
42 |
$this->plugin_data = $data;
|
43 |
|
44 |
$this->global_scripts();
|
45 |
|
46 |
-
if
|
47 |
$this->init_activation();
|
48 |
$this->admin_scripts();
|
49 |
}
|
@@ -58,9 +59,10 @@ class WGA_Plugin extends Wbcr_Factory446_Plugin {
|
|
58 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
59 |
* классам.
|
60 |
*
|
61 |
-
* @return \
|
62 |
*/
|
63 |
-
public static function app()
|
|
|
64 |
return self::$app;
|
65 |
}
|
66 |
|
@@ -68,9 +70,10 @@ class WGA_Plugin extends Wbcr_Factory446_Plugin {
|
|
68 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
69 |
* @since 3.0.0
|
70 |
*/
|
71 |
-
private function init_activation()
|
72 |
-
|
73 |
-
|
|
|
74 |
}
|
75 |
|
76 |
/**
|
@@ -81,30 +84,32 @@ class WGA_Plugin extends Wbcr_Factory446_Plugin {
|
|
81 |
* и в меню боковой панели администратора. Регистрируемые страницы будут связаны с текущим плагином
|
82 |
* все операции выполняемые внутри классов страниц, имеют отношение только текущему плагину.
|
83 |
*
|
84 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
85 |
-
* @since 3.0.0
|
86 |
* @throws \Exception
|
|
|
|
|
87 |
*/
|
88 |
-
private function register_pages()
|
89 |
-
|
|
|
90 |
return;
|
91 |
}
|
92 |
|
93 |
-
if
|
94 |
return;
|
95 |
}
|
96 |
-
self::app()->registerPage(
|
97 |
-
self::app()->registerPage(
|
98 |
}
|
99 |
|
100 |
/**
|
101 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
102 |
-
* @since 3.1.0
|
103 |
* @throws \Exception
|
|
|
|
|
104 |
*/
|
105 |
-
private function admin_scripts()
|
106 |
-
|
107 |
-
require(
|
|
|
108 |
|
109 |
$this->register_pages();
|
110 |
}
|
@@ -113,9 +118,13 @@ class WGA_Plugin extends Wbcr_Factory446_Plugin {
|
|
113 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
114 |
* @since 3.0.0
|
115 |
*/
|
116 |
-
private function global_scripts()
|
117 |
-
|
118 |
-
|
|
|
|
|
|
|
|
|
119 |
}
|
120 |
}
|
121 |
|
1 |
<?php
|
2 |
// Exit if accessed directly
|
3 |
+
if( !defined('ABSPATH') ) {
|
4 |
exit;
|
5 |
}
|
6 |
|
10 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
*/
|
13 |
+
class WGA_Plugin extends Wbcr_Factory448_Plugin {
|
14 |
|
15 |
/**
|
16 |
* @see self::app()
|
17 |
+
* @var Wbcr_Factory448_Plugin
|
18 |
*/
|
19 |
private static $app;
|
20 |
|
31 |
* Подробнее о свойстве $app см. self::app()
|
32 |
*
|
33 |
* @param string $plugin_path
|
34 |
+
* @param array $data
|
35 |
*
|
36 |
* @throws Exception
|
37 |
*/
|
38 |
+
public function __construct($plugin_path, $data)
|
39 |
+
{
|
40 |
+
parent::__construct($plugin_path, $data);
|
41 |
|
42 |
+
self::$app = $this;
|
43 |
$this->plugin_data = $data;
|
44 |
|
45 |
$this->global_scripts();
|
46 |
|
47 |
+
if( is_admin() ) {
|
48 |
$this->init_activation();
|
49 |
$this->admin_scripts();
|
50 |
}
|
59 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
60 |
* классам.
|
61 |
*
|
62 |
+
* @return \Wbcr_Factory448_Plugin|\WGA_Plugin
|
63 |
*/
|
64 |
+
public static function app()
|
65 |
+
{
|
66 |
return self::$app;
|
67 |
}
|
68 |
|
70 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
71 |
* @since 3.0.0
|
72 |
*/
|
73 |
+
private function init_activation()
|
74 |
+
{
|
75 |
+
require_once(WGA_PLUGIN_DIR . '/admin/activation.php');
|
76 |
+
self::app()->registerActivation('WGA_Activation');
|
77 |
}
|
78 |
|
79 |
/**
|
84 |
* и в меню боковой панели администратора. Регистрируемые страницы будут связаны с текущим плагином
|
85 |
* все операции выполняемые внутри классов страниц, имеют отношение только текущему плагину.
|
86 |
*
|
|
|
|
|
87 |
* @throws \Exception
|
88 |
+
* @since 3.0.0
|
89 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
90 |
*/
|
91 |
+
private function register_pages()
|
92 |
+
{
|
93 |
+
if( $this->as_addon ) {
|
94 |
return;
|
95 |
}
|
96 |
|
97 |
+
if( $this->isNetworkActive() and !is_network_admin() ) {
|
98 |
return;
|
99 |
}
|
100 |
+
self::app()->registerPage('WGA_CachePage', WGA_PLUGIN_DIR . '/admin/pages/class-pages-general-settings.php');
|
101 |
+
self::app()->registerPage('WGA_MoreFeaturesPage', WGA_PLUGIN_DIR . '/admin/pages/class-pages-more-features.php');
|
102 |
}
|
103 |
|
104 |
/**
|
|
|
|
|
105 |
* @throws \Exception
|
106 |
+
* @since 3.1.0
|
107 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
108 |
*/
|
109 |
+
private function admin_scripts()
|
110 |
+
{
|
111 |
+
require(WGA_PLUGIN_DIR . '/admin/options.php');
|
112 |
+
require(WGA_PLUGIN_DIR . '/admin/boot.php');
|
113 |
|
114 |
$this->register_pages();
|
115 |
}
|
118 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
119 |
* @since 3.0.0
|
120 |
*/
|
121 |
+
private function global_scripts()
|
122 |
+
{
|
123 |
+
require(WGA_PLUGIN_DIR . '/includes/classes/class-configurate-ga.php');
|
124 |
+
new WGA_ConfigGACache(self::$app);
|
125 |
+
|
126 |
+
require(WGA_PLUGIN_DIR . '/includes/classes/class-scheduler.php');
|
127 |
+
new \WGA\Busting\Sheduller();
|
128 |
}
|
129 |
}
|
130 |
|
components/ga-cache/includes/classes/class-abstract-cache.php
ADDED
@@ -0,0 +1,562 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WGA\Busting;
|
4 |
+
|
5 |
+
use FilesystemIterator;
|
6 |
+
use IteratorIterator;
|
7 |
+
use RegexIterator;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* This class configures the google analytics cache
|
11 |
+
*
|
12 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
13 |
+
* @copyright (c) 2020 CreativeMotion Ltd
|
14 |
+
* @version 1.0
|
15 |
+
*/
|
16 |
+
|
17 |
+
// Exit if accessed directly
|
18 |
+
if( !defined('ABSPATH') ) {
|
19 |
+
exit;
|
20 |
+
}
|
21 |
+
|
22 |
+
abstract class Abstract_Cache {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Cache busting files base path
|
26 |
+
*
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
protected $busting_path;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Cache busting base URL
|
33 |
+
*
|
34 |
+
* @var string
|
35 |
+
*/
|
36 |
+
protected $busting_url;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Filename for the cache busting file.
|
40 |
+
*
|
41 |
+
* @var string
|
42 |
+
*/
|
43 |
+
protected $filename;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Filesystem object.
|
47 |
+
*
|
48 |
+
* @var object
|
49 |
+
* @since 3.2.0
|
50 |
+
*/
|
51 |
+
protected $filesystem = false;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Constructor.
|
55 |
+
*
|
56 |
+
* @param string $busting_path Path to the busting directory.
|
57 |
+
* @param string $busting_url URL of the busting directory.
|
58 |
+
* @since 3.2.0
|
59 |
+
*/
|
60 |
+
public function __construct($busting_path, $busting_url)
|
61 |
+
{
|
62 |
+
/*
|
63 |
+
* Define the timeouts for the connections. Only available after the constructor is called
|
64 |
+
* to allow for per-transport overriding of the default.
|
65 |
+
*/
|
66 |
+
if( !defined('FS_CONNECT_TIMEOUT') ) {
|
67 |
+
define('FS_CONNECT_TIMEOUT', 30);
|
68 |
+
}
|
69 |
+
if( !defined('FS_TIMEOUT') ) {
|
70 |
+
define('FS_TIMEOUT', 30);
|
71 |
+
}
|
72 |
+
|
73 |
+
// Set the permission constants if not already set.
|
74 |
+
if( !defined('FS_CHMOD_DIR') ) {
|
75 |
+
define('FS_CHMOD_DIR', (fileperms(ABSPATH) & 0777 | 0755));
|
76 |
+
}
|
77 |
+
if( !defined('FS_CHMOD_FILE') ) {
|
78 |
+
define('FS_CHMOD_FILE', (fileperms(ABSPATH . 'index.php') & 0777 | 0644));
|
79 |
+
}
|
80 |
+
|
81 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
|
82 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
|
83 |
+
$this->filesystem = new \WP_Filesystem_Direct(new \StdClass());
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Tell if the cache busting should happen.
|
88 |
+
*
|
89 |
+
* @return bool
|
90 |
+
* @since 3.2.0
|
91 |
+
*
|
92 |
+
*/
|
93 |
+
private function is_allowed()
|
94 |
+
{
|
95 |
+
//if( defined('DONOTROCKETOPTIMIZE') && DONOTROCKETOPTIMIZE ) {
|
96 |
+
//return false;
|
97 |
+
//}
|
98 |
+
|
99 |
+
return true;
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Saves the content of the URL to bust to the busting file.
|
104 |
+
*
|
105 |
+
* @param string $url URL to get the content from.
|
106 |
+
* @return bool
|
107 |
+
* @since 3.2.0
|
108 |
+
*/
|
109 |
+
public function refresh_save($url)
|
110 |
+
{
|
111 |
+
// Before doing anything, make sure the busting file can be created.
|
112 |
+
if( !$this->is_busting_dir_writable() ) {
|
113 |
+
return false;
|
114 |
+
}
|
115 |
+
|
116 |
+
// Get remote content.
|
117 |
+
$content = $this->get_remote_contents($url);
|
118 |
+
|
119 |
+
if( !$content ) {
|
120 |
+
// Could not get the remote contents.
|
121 |
+
return false;
|
122 |
+
}
|
123 |
+
|
124 |
+
$version = md5($content);
|
125 |
+
$path = $this->get_busting_file_path($version);
|
126 |
+
|
127 |
+
return $this->update_file_contents($path, $content);
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Performs the replacement process.
|
133 |
+
*
|
134 |
+
* @param string $html HTML content.
|
135 |
+
* @return string
|
136 |
+
* @since 3.2.0
|
137 |
+
*/
|
138 |
+
abstract public function replace_url($html);
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Searches for element(s) in the DOM
|
142 |
+
*
|
143 |
+
* @param string $pattern Pattern to match.
|
144 |
+
* @param string $html HTML content.
|
145 |
+
* @return string
|
146 |
+
* @since 3.2.0
|
147 |
+
*/
|
148 |
+
abstract protected function find($pattern, $html);
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Saves the content of the URL to bust to the busting file if it doesn't exist yet.
|
152 |
+
*
|
153 |
+
* @param string $url URL to get the content from.
|
154 |
+
* @return bool
|
155 |
+
* @since 3.2.0
|
156 |
+
*/
|
157 |
+
public function save($url)
|
158 |
+
{
|
159 |
+
if( $this->get_busting_version() ) {
|
160 |
+
// We have a local copy.
|
161 |
+
\WGA_Plugin::app()->logger->info('Found local file. Busting path ' . $this->get_busting_path());
|
162 |
+
|
163 |
+
return true;
|
164 |
+
}
|
165 |
+
|
166 |
+
if( $this->refresh_save($url) ) {
|
167 |
+
// We downloaded a fresh copy.
|
168 |
+
\WGA_Plugin::app()->logger->info('New copy downloaded. Busting path ' . $this->get_busting_path());
|
169 |
+
|
170 |
+
return true;
|
171 |
+
}
|
172 |
+
|
173 |
+
return false;
|
174 |
+
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Deletes the busting file.
|
178 |
+
*
|
179 |
+
* @return bool True on success. False on failure.
|
180 |
+
* @since 3.2.0
|
181 |
+
*/
|
182 |
+
public function delete()
|
183 |
+
{
|
184 |
+
$files = $this->get_all_files();
|
185 |
+
|
186 |
+
if( false === $files ) {
|
187 |
+
// Error.
|
188 |
+
return false;
|
189 |
+
}
|
190 |
+
|
191 |
+
$this->file_version = null;
|
192 |
+
|
193 |
+
if( !$files ) {
|
194 |
+
// No local files yet.
|
195 |
+
return true;
|
196 |
+
}
|
197 |
+
|
198 |
+
return $this->delete_files(array_keys($files));
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Get the version of the current busting file.
|
203 |
+
*
|
204 |
+
* @return string|bool Version of the file. False if the file does not exist.
|
205 |
+
*
|
206 |
+
*
|
207 |
+
* @since 3.2.0
|
208 |
+
*/
|
209 |
+
protected function get_busting_version()
|
210 |
+
{
|
211 |
+
if( !empty($this->file_version) ) {
|
212 |
+
return $this->file_version;
|
213 |
+
}
|
214 |
+
|
215 |
+
$files = $this->get_all_files();
|
216 |
+
|
217 |
+
if( !$files ) {
|
218 |
+
return false;
|
219 |
+
}
|
220 |
+
|
221 |
+
$this->file_version = reset($files);
|
222 |
+
|
223 |
+
return $this->file_version;
|
224 |
+
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Get all cached files in the directory.
|
228 |
+
* In a perfect world, there should be only one.
|
229 |
+
*
|
230 |
+
* @return bool|array A list of file names (as array keys) and versions (as array values). False on failure.
|
231 |
+
* @since 3.2.0
|
232 |
+
* @access private
|
233 |
+
*
|
234 |
+
*/
|
235 |
+
private function get_all_files()
|
236 |
+
{
|
237 |
+
$dir_path = rtrim($this->busting_path, '\\/');
|
238 |
+
|
239 |
+
if( !$this->filesystem->exists($dir_path) ) {
|
240 |
+
return [];
|
241 |
+
}
|
242 |
+
|
243 |
+
if( !$this->filesystem->is_readable($dir_path) ) {
|
244 |
+
\WGA_Plugin::app()->logger->error('Directory is not readable. Path ' . $dir_path);
|
245 |
+
|
246 |
+
return false;
|
247 |
+
}
|
248 |
+
|
249 |
+
$pattern = '/' . sprintf($this->escape_file_name($this->filename_pattern), '([a-f0-9]{32}|local)') . '/';
|
250 |
+
|
251 |
+
$entries = $this->get_dir_files_by_regex($dir_path, $pattern);
|
252 |
+
|
253 |
+
$list = [];
|
254 |
+
foreach($entries as $entry) {
|
255 |
+
$filename = $entry->getFilename();
|
256 |
+
|
257 |
+
preg_match($pattern, $filename, $file_details_match);
|
258 |
+
if( !empty($file_details_match[1]) ) {
|
259 |
+
$list[$filename] = $file_details_match[1];
|
260 |
+
}
|
261 |
+
}
|
262 |
+
|
263 |
+
return $list;
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Get the final URL for the current cache busting file.
|
268 |
+
*
|
269 |
+
* @return string|bool URL of the file. False if the file does not exist.
|
270 |
+
* @since 3.2.0
|
271 |
+
* @access protected
|
272 |
+
*
|
273 |
+
*/
|
274 |
+
public function get_busting_url()
|
275 |
+
{
|
276 |
+
return $this->get_busting_file_url($this->get_busting_version());
|
277 |
+
}
|
278 |
+
|
279 |
+
/**
|
280 |
+
* Get the path to the current cache busting file.
|
281 |
+
*
|
282 |
+
* @return string|bool URL of the file. False if the file does not exist.
|
283 |
+
*
|
284 |
+
*
|
285 |
+
* @since 3.2.0
|
286 |
+
* @access protected
|
287 |
+
*/
|
288 |
+
protected function get_busting_path()
|
289 |
+
{
|
290 |
+
return $this->get_busting_file_path($this->get_busting_version());
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* Get the final URL for a cache busting file.
|
295 |
+
*
|
296 |
+
* @param string $version The file version.
|
297 |
+
* @return string|bool URL of the file with this version. False if no versions are provided.
|
298 |
+
* @since 3.2.0
|
299 |
+
* @access private
|
300 |
+
*
|
301 |
+
*
|
302 |
+
*/
|
303 |
+
private function get_busting_file_url($version)
|
304 |
+
{
|
305 |
+
if( !$version ) {
|
306 |
+
return false;
|
307 |
+
}
|
308 |
+
|
309 |
+
$filename = $this->get_busting_file_name($version);
|
310 |
+
|
311 |
+
return $this->busting_url . $filename;
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* Get the local file name.
|
316 |
+
*
|
317 |
+
* @param string $version The file version.
|
318 |
+
* @return string|bool The name of the file with this version. False if no versions are provided.
|
319 |
+
* @since 3.2.0
|
320 |
+
* @access private
|
321 |
+
*/
|
322 |
+
private function get_busting_file_name($version)
|
323 |
+
{
|
324 |
+
if( !$version ) {
|
325 |
+
return false;
|
326 |
+
}
|
327 |
+
|
328 |
+
return sprintf($this->filename_pattern, $version);
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Get the local file path.
|
333 |
+
*
|
334 |
+
* @param string $version The file version.
|
335 |
+
* @return string|bool Path to the file with this version. False if no versions are provided.
|
336 |
+
* @since 3.2.0
|
337 |
+
* @access private
|
338 |
+
*/
|
339 |
+
private function get_busting_file_path($version)
|
340 |
+
{
|
341 |
+
if( !$version ) {
|
342 |
+
return false;
|
343 |
+
}
|
344 |
+
|
345 |
+
return $this->busting_path . $this->get_busting_file_name($version);
|
346 |
+
}
|
347 |
+
|
348 |
+
/**
|
349 |
+
* Escape a file name, to be used in a regex pattern (delimiter is `/`).
|
350 |
+
* `%s` conversion specifications are protected.
|
351 |
+
*
|
352 |
+
* @param string $filename_pattern The file name.
|
353 |
+
* @return string
|
354 |
+
* @since 3.2.0
|
355 |
+
* @access private
|
356 |
+
*
|
357 |
+
*/
|
358 |
+
private function escape_file_name($filename_pattern)
|
359 |
+
{
|
360 |
+
return preg_quote($filename_pattern, '/');
|
361 |
+
}
|
362 |
+
|
363 |
+
/**
|
364 |
+
* Delete busting files.
|
365 |
+
*
|
366 |
+
* @param array $files A list of file names.
|
367 |
+
* @return bool True if files have been deleted (or no files have been provided). False on failure.
|
368 |
+
* @since 3.2.0
|
369 |
+
*/
|
370 |
+
private function delete_files($files)
|
371 |
+
{
|
372 |
+
if( !$files ) {
|
373 |
+
return true;
|
374 |
+
}
|
375 |
+
|
376 |
+
$has_deleted = false;
|
377 |
+
$error_paths = [];
|
378 |
+
|
379 |
+
foreach($files as $file_name) {
|
380 |
+
if( !$this->filesystem->delete($this->busting_path . $file_name, false, 'f') ) {
|
381 |
+
$error_paths[] = $this->busting_path . $file_name;
|
382 |
+
} else {
|
383 |
+
$has_deleted = true;
|
384 |
+
}
|
385 |
+
}
|
386 |
+
|
387 |
+
if( $error_paths ) {
|
388 |
+
\WGA_Plugin::app()->logger->error('Local file(s) could not be deleted. Path ' . $error_paths);
|
389 |
+
}
|
390 |
+
|
391 |
+
return $has_deleted;
|
392 |
+
}
|
393 |
+
|
394 |
+
/**
|
395 |
+
* Add new contents to a file. If the file doesn't exist, it is created.
|
396 |
+
*
|
397 |
+
* @param string $file_path Path to the file to update.
|
398 |
+
* @param string $file_contents New contents.
|
399 |
+
* @return string|bool The file contents on success. False on failure.
|
400 |
+
*
|
401 |
+
*
|
402 |
+
* @since 3.2.0
|
403 |
+
* @access private
|
404 |
+
*/
|
405 |
+
private function update_file_contents($file_path, $file_contents)
|
406 |
+
{
|
407 |
+
if( !$this->is_busting_dir_writable() ) {
|
408 |
+
return false;
|
409 |
+
}
|
410 |
+
|
411 |
+
if( !$this->filesystem->put_contents($file_path, $file_contents) ) {
|
412 |
+
\WGA_Plugin::app()->logger->error('Contents could not be written into file. Path ' . $file_path);
|
413 |
+
|
414 |
+
return false;
|
415 |
+
}
|
416 |
+
|
417 |
+
return $file_contents;
|
418 |
+
}
|
419 |
+
|
420 |
+
/**
|
421 |
+
* Tell if the directory containing the busting file is writable.
|
422 |
+
*
|
423 |
+
* @return bool
|
424 |
+
*
|
425 |
+
*
|
426 |
+
* @since 3.2
|
427 |
+
* @access private
|
428 |
+
*/
|
429 |
+
private function is_busting_dir_writable()
|
430 |
+
{
|
431 |
+
if( !$this->filesystem->exists($this->busting_path) ) {
|
432 |
+
wp_mkdir_p($this->busting_path);
|
433 |
+
}
|
434 |
+
|
435 |
+
if( !$this->filesystem->is_writable($this->busting_path) ) {
|
436 |
+
\WGA_Plugin::app()->logger->error('Directory is not writable. Paths ' . $this->busting_path);
|
437 |
+
|
438 |
+
return false;
|
439 |
+
}
|
440 |
+
|
441 |
+
return true;
|
442 |
+
}
|
443 |
+
|
444 |
+
/** ----------------------------------------------------------------------------------------- */
|
445 |
+
/** GET LOCAL/REMOTE CONTENTS =============================================================== */
|
446 |
+
/** ----------------------------------------------------------------------------------------- */
|
447 |
+
|
448 |
+
/**
|
449 |
+
* Get a file contents. If the file doesn't exist, new contents are fetched remotely.
|
450 |
+
*
|
451 |
+
* @param string $file_path Path to the file.
|
452 |
+
* @param string $file_url URL to the remote file.
|
453 |
+
* @return string|bool The contents on success, false on failure.
|
454 |
+
*
|
455 |
+
* @since 3.2.0
|
456 |
+
*/
|
457 |
+
private function get_file_or_remote_contents($file_path, $file_url)
|
458 |
+
{
|
459 |
+
$content = $this->get_file_contents($file_path);
|
460 |
+
|
461 |
+
if( $content ) {
|
462 |
+
// We have a local file.
|
463 |
+
return $content;
|
464 |
+
}
|
465 |
+
|
466 |
+
return $this->get_remote_contents($file_url);
|
467 |
+
}
|
468 |
+
|
469 |
+
/**
|
470 |
+
* Get a file contents.
|
471 |
+
*
|
472 |
+
* @param string $file_path Path to the file.
|
473 |
+
* @return string|bool The contents on success, false on failure.
|
474 |
+
* @since 3.2.0
|
475 |
+
* @access private
|
476 |
+
*
|
477 |
+
*
|
478 |
+
*/
|
479 |
+
private function get_file_contents($file_path)
|
480 |
+
{
|
481 |
+
if( !$this->filesystem->exists($file_path) ) {
|
482 |
+
\WGA_Plugin::app()->logger->error('Local file does not exist. Path ' . $file_path);
|
483 |
+
|
484 |
+
return false;
|
485 |
+
}
|
486 |
+
|
487 |
+
if( !$this->filesystem->is_readable($file_path) ) {
|
488 |
+
\WGA_Plugin::app()->logger->error('Local file is not readable. Path' . $file_path);
|
489 |
+
|
490 |
+
return false;
|
491 |
+
}
|
492 |
+
|
493 |
+
$content = $this->filesystem->get_contents($file_path);
|
494 |
+
|
495 |
+
if( !$content ) {
|
496 |
+
\WGA_Plugin::app()->logger->error('Local file is empty. Path' . $file_path);
|
497 |
+
|
498 |
+
return false;
|
499 |
+
}
|
500 |
+
|
501 |
+
return $content;
|
502 |
+
}
|
503 |
+
|
504 |
+
/**
|
505 |
+
* Get the contents of a URL.
|
506 |
+
*
|
507 |
+
* @param string $url The URL to request.
|
508 |
+
* @return string|bool The contents on success. False on failure.
|
509 |
+
* @since 3.2.0
|
510 |
+
* @access private
|
511 |
+
*
|
512 |
+
*
|
513 |
+
*/
|
514 |
+
private function get_remote_contents($url)
|
515 |
+
{
|
516 |
+
try {
|
517 |
+
$response = wp_remote_get($url);
|
518 |
+
} catch( \Exception $e ) {
|
519 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $e->getMessage());
|
520 |
+
|
521 |
+
return false;
|
522 |
+
}
|
523 |
+
|
524 |
+
if( is_wp_error($response) ) {
|
525 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $response->get_error_message());
|
526 |
+
|
527 |
+
return false;
|
528 |
+
}
|
529 |
+
|
530 |
+
$contents = wp_remote_retrieve_body($response);
|
531 |
+
|
532 |
+
if( !$contents ) {
|
533 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $response->get_error_message());
|
534 |
+
|
535 |
+
return false;
|
536 |
+
}
|
537 |
+
|
538 |
+
return $contents;
|
539 |
+
}
|
540 |
+
|
541 |
+
/**
|
542 |
+
* Gets Directory files matches regex.
|
543 |
+
*
|
544 |
+
* @param string $dir Directory to search for files inside it.
|
545 |
+
* @param string $regex Regular expression for files need to be searched for.
|
546 |
+
*
|
547 |
+
* @return array|RegexIterator List of files matches this regular expression.
|
548 |
+
* @since 3.6.3
|
549 |
+
* @access private
|
550 |
+
*
|
551 |
+
*/
|
552 |
+
function get_dir_files_by_regex($dir, $regex)
|
553 |
+
{ // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound
|
554 |
+
try {
|
555 |
+
$iterator = new IteratorIterator(new FilesystemIterator($dir));
|
556 |
+
|
557 |
+
return new RegexIterator($iterator, $regex);
|
558 |
+
} catch( \Exception $e ) {
|
559 |
+
return [];
|
560 |
+
}
|
561 |
+
}
|
562 |
+
}
|
components/ga-cache/includes/classes/class-configurate-ga.php
CHANGED
@@ -12,7 +12,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
-
class WGA_ConfigGACache extends
|
16 |
|
17 |
|
18 |
public function registerActionsAndFilters() {
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
+
class WGA_ConfigGACache extends Wbcr_FactoryClearfy240_Configurate {
|
16 |
|
17 |
|
18 |
public function registerActionsAndFilters() {
|
components/ga-cache/includes/classes/class-facebook-cache.php
ADDED
@@ -0,0 +1,1061 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WGA\Busting;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class configures the google analytics cache
|
7 |
+
*
|
8 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
9 |
+
* @copyright (c) 2017 Webraftic Ltd
|
10 |
+
* @version 1.0
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
class Facebook_Pixel_Cache {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Regex pattern to capture a locale.
|
22 |
+
*
|
23 |
+
* @var string
|
24 |
+
* @since 3.2
|
25 |
+
*/
|
26 |
+
const LOCALE_CAPTURE = '(?<locale>[a-zA-Z_-]+)';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Regex pattern to capture a version.
|
30 |
+
*
|
31 |
+
* @var string
|
32 |
+
* @since 3.2
|
33 |
+
*/
|
34 |
+
const VERSION_CAPTURE = '(?<version>[\d\.]+)';
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Regex pattern to capture an app ID.
|
38 |
+
*
|
39 |
+
* @var string
|
40 |
+
* @since 3.2
|
41 |
+
*/
|
42 |
+
const APP_ID_CAPTURE = '(?<app_id>\d+)';
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Cache busting files base path.
|
46 |
+
*
|
47 |
+
* @var string
|
48 |
+
* @since 3.2
|
49 |
+
*/
|
50 |
+
private $busting_path;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Cache busting base URL.
|
54 |
+
*
|
55 |
+
* @var string
|
56 |
+
* @since 3.2
|
57 |
+
*/
|
58 |
+
private $busting_url;
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Main file URL (remote).
|
62 |
+
* %s is a locale like "en_US".
|
63 |
+
*
|
64 |
+
* @var string
|
65 |
+
* @since 3.2
|
66 |
+
*/
|
67 |
+
private $main_file_url = 'https://connect.facebook.net/%s/fbevents.js';
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Main file name (local).
|
71 |
+
* %s is like "{{locale}}-{{version}}".
|
72 |
+
*
|
73 |
+
* @var string
|
74 |
+
* @since 3.2
|
75 |
+
*/
|
76 |
+
private $main_file_name = 'fbpix-events-%s.js';
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Config file URL (remote).
|
80 |
+
* %d is an app ID (a number), %s is a version like "2.8.30".
|
81 |
+
* The "r" argument is the release segment: it is considered "stable".
|
82 |
+
*
|
83 |
+
* @var string
|
84 |
+
* @since 3.2
|
85 |
+
*/
|
86 |
+
private $config_file_url = 'https://connect.facebook.net/signals/config/%s?v=%s&r=stable';
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Config file name (local).
|
90 |
+
* %s is like "{{app_id}}-{{version}}".
|
91 |
+
*
|
92 |
+
* @var string
|
93 |
+
* @since 3.2
|
94 |
+
*/
|
95 |
+
private $config_file_name = 'fbpix-config-%s.js';
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Plugins file URL (remote).
|
99 |
+
* 1st %s is a plugin name like "identity", 2nd %s is a version like "2.8.30".
|
100 |
+
*
|
101 |
+
* @var string
|
102 |
+
* @since 3.2
|
103 |
+
*/
|
104 |
+
private $plugins_file_url = 'https://connect.facebook.net/signals/plugins/%s?v=%s';
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Plugins file name (local).
|
108 |
+
* %s is like "{{plugin_name}}-{{version}}".
|
109 |
+
*
|
110 |
+
* @var string
|
111 |
+
* @since 3.2
|
112 |
+
*/
|
113 |
+
private $plugins_file_name = 'fbpix-plugin-%s.js';
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Flag to track the replacement.
|
117 |
+
*
|
118 |
+
* @var bool
|
119 |
+
* @since 3.2
|
120 |
+
*/
|
121 |
+
private $is_replaced = false;
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Filesystem object.
|
125 |
+
*
|
126 |
+
* @var object
|
127 |
+
* @since 3.2.0
|
128 |
+
*/
|
129 |
+
protected $filesystem = false;
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Constructor.
|
133 |
+
*
|
134 |
+
* @param string $busting_path Path to the busting directory.
|
135 |
+
* @param string $busting_url URL of the busting directory.
|
136 |
+
* @since 3.2
|
137 |
+
*
|
138 |
+
*/
|
139 |
+
public function __construct($busting_path, $busting_url)
|
140 |
+
{
|
141 |
+
/** Warning: all file names and script URLs are dynamic, and must be run through sprintf(). */
|
142 |
+
$this->busting_path = $busting_path . 'facebook-tracking/';
|
143 |
+
$this->busting_url = $busting_url . 'facebook-tracking/';
|
144 |
+
|
145 |
+
/*
|
146 |
+
* Define the timeouts for the connections. Only available after the constructor is called
|
147 |
+
* to allow for per-transport overriding of the default.
|
148 |
+
*/
|
149 |
+
if( !defined('FS_CONNECT_TIMEOUT') ) {
|
150 |
+
define('FS_CONNECT_TIMEOUT', 30);
|
151 |
+
}
|
152 |
+
if( !defined('FS_TIMEOUT') ) {
|
153 |
+
define('FS_TIMEOUT', 30);
|
154 |
+
}
|
155 |
+
|
156 |
+
// Set the permission constants if not already set.
|
157 |
+
if( !defined('FS_CHMOD_DIR') ) {
|
158 |
+
define('FS_CHMOD_DIR', (fileperms(ABSPATH) & 0777 | 0755));
|
159 |
+
}
|
160 |
+
if( !defined('FS_CHMOD_FILE') ) {
|
161 |
+
define('FS_CHMOD_FILE', (fileperms(ABSPATH . 'index.php') & 0777 | 0644));
|
162 |
+
}
|
163 |
+
|
164 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
|
165 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
|
166 |
+
$this->filesystem = new \WP_Filesystem_Direct(new \StdClass());
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Perform the URL replacement process.
|
171 |
+
*
|
172 |
+
* @param string $html HTML contents.
|
173 |
+
* @return string HTML contents.
|
174 |
+
* @since 3.2
|
175 |
+
*
|
176 |
+
*/
|
177 |
+
public function replace_url($html)
|
178 |
+
{
|
179 |
+
$this->is_replaced = false;
|
180 |
+
|
181 |
+
$tags = $this->find_tags($html);
|
182 |
+
|
183 |
+
if( !$tags ) {
|
184 |
+
return $html;
|
185 |
+
}
|
186 |
+
|
187 |
+
\WGA_Plugin::app()->logger->info('FACEBOOK PIXEL CACHING PROCESS STARTED. Tag ' . $tags['tag_to_search']);
|
188 |
+
|
189 |
+
$all_files = [];
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Fetch the main file: https://connect.facebook.net/{{locale}}/fbevents.js.
|
193 |
+
*/
|
194 |
+
$version = $this->get_most_recent_local_version();
|
195 |
+
$locale = $this->get_locale_from_url($tags['tag_to_search']);
|
196 |
+
$main_file_url = $this->get_main_file_url($locale);
|
197 |
+
|
198 |
+
if( $version ) {
|
199 |
+
// At least 1 main file exists locally (but maybe not in the right locale).
|
200 |
+
$main_file_path = $this->get_busting_file_path($locale, $version);
|
201 |
+
$main_file_contents = $this->get_file_contents($main_file_path, $main_file_url);
|
202 |
+
} else {
|
203 |
+
// No cached files yet.
|
204 |
+
$main_file_contents = $this->get_remote_contents($main_file_url);
|
205 |
+
}
|
206 |
+
|
207 |
+
if( !$main_file_contents ) {
|
208 |
+
return $html;
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Grab some data from the main file and the inline tag: app_id and version.
|
213 |
+
*/
|
214 |
+
$variables = $this->get_variables($main_file_contents, $tags['tag_to_search']);
|
215 |
+
|
216 |
+
if( !$variables ) {
|
217 |
+
return $html;
|
218 |
+
}
|
219 |
+
|
220 |
+
if( !$version ) {
|
221 |
+
// The local file doesn't exist yet, so we couldn't get its version (and so, can't know its path yet) until we fetch a fresh copy.
|
222 |
+
$main_file_path = $this->get_busting_file_path($locale, $variables['version']);
|
223 |
+
}
|
224 |
+
|
225 |
+
$all_files[] = $main_file_path;
|
226 |
+
unset($version);
|
227 |
+
|
228 |
+
/**
|
229 |
+
* Fetch the config file: https://connect.facebook.net/signals/config/{{app_id}}?v={{version}}&r={{release_segment}}.
|
230 |
+
*/
|
231 |
+
$config_file_path = $this->get_config_file_path($variables);
|
232 |
+
|
233 |
+
if( !$config_file_path ) {
|
234 |
+
return $html;
|
235 |
+
}
|
236 |
+
|
237 |
+
$all_files[] = $config_file_path;
|
238 |
+
|
239 |
+
/**
|
240 |
+
* Fetch all plugin files: https://connect.facebook.net/signals/plugins/{{pluginName}}.js?v={{version}}.
|
241 |
+
*/
|
242 |
+
$plugin_file_paths = $this->get_plugin_file_paths($variables);
|
243 |
+
|
244 |
+
if( !$plugin_file_paths ) {
|
245 |
+
return $html;
|
246 |
+
}
|
247 |
+
|
248 |
+
$all_files = array_merge($all_files, $plugin_file_paths);
|
249 |
+
|
250 |
+
/**
|
251 |
+
* Modify the main file contents.
|
252 |
+
*/
|
253 |
+
$busting_file_url = $this->get_busting_file_url($locale, $variables['version']);
|
254 |
+
$busting_dir_url = dirname($busting_file_url) . '/';
|
255 |
+
$main_file_contents = $this->replace_main_file_contents($main_file_contents, $busting_dir_url);
|
256 |
+
|
257 |
+
if( !$main_file_contents ) {
|
258 |
+
return $html;
|
259 |
+
}
|
260 |
+
|
261 |
+
/**
|
262 |
+
* Save all the changes to the main file.
|
263 |
+
*/
|
264 |
+
$updated = $this->update_file_contents($main_file_path, $main_file_contents);
|
265 |
+
|
266 |
+
if( !$updated ) {
|
267 |
+
return $html;
|
268 |
+
}
|
269 |
+
|
270 |
+
/**
|
271 |
+
* Finally, replace the main file URL by the local one in the inline script tag.
|
272 |
+
*/
|
273 |
+
$replace_tag = preg_replace('@(?:https?:)?//connect\.facebook\.net/[a-zA-Z_-]+/fbevents\.js@i', $busting_file_url, $tags['tag_to_replace'], -1, $count);
|
274 |
+
|
275 |
+
if( !$count || false === strpos($html, $tags['tag_to_replace']) ) {
|
276 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: The local file URL could not be replaced in the page contents.');
|
277 |
+
|
278 |
+
return $html;
|
279 |
+
}
|
280 |
+
|
281 |
+
$html = str_replace($tags['tag_to_replace'], $replace_tag, $html);
|
282 |
+
|
283 |
+
$this->is_replaced = true;
|
284 |
+
|
285 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: Facebook pixel caching process succeeded. Files ' . $all_files);
|
286 |
+
|
287 |
+
return $html;
|
288 |
+
}
|
289 |
+
|
290 |
+
/**
|
291 |
+
* Tell if the replacement was sucessful or not.
|
292 |
+
*
|
293 |
+
* @return bool
|
294 |
+
* @since 3.2
|
295 |
+
* @access public
|
296 |
+
*
|
297 |
+
*/
|
298 |
+
public function is_replaced()
|
299 |
+
{
|
300 |
+
return $this->is_replaced;
|
301 |
+
}
|
302 |
+
|
303 |
+
/**
|
304 |
+
* Search for elements in the DOM.
|
305 |
+
*
|
306 |
+
* @param string $html HTML contents.
|
307 |
+
* @return array|bool {
|
308 |
+
* An array on success, described as below. False if nothing is found.
|
309 |
+
*
|
310 |
+
* @type string $tag_to_replace The script tag that contains the facebook.net URL: this is the tag that will be replaced in the page HTML.
|
311 |
+
* @type string $tag_to_search It contains both app ID and facebook.net URL: this is what will be searched in for this data.
|
312 |
+
*
|
313 |
+
* When the app ID and the URL are in the same tag, $tag_to_replace and $tag_to_search are the same.
|
314 |
+
* }
|
315 |
+
* @since 3.2
|
316 |
+
*
|
317 |
+
*/
|
318 |
+
private function find_tags($html)
|
319 |
+
{
|
320 |
+
preg_match_all('@<script[^>]*?>(.*)</script>@Umsi', $html, $matches, PREG_SET_ORDER);
|
321 |
+
|
322 |
+
if( empty($matches) ) {
|
323 |
+
return false;
|
324 |
+
}
|
325 |
+
|
326 |
+
$tags = [
|
327 |
+
'app_id' => [],
|
328 |
+
'url' => [],
|
329 |
+
'both' => [],
|
330 |
+
];
|
331 |
+
|
332 |
+
foreach($matches as $match) {
|
333 |
+
list($tag, $script) = $match;
|
334 |
+
|
335 |
+
if( !trim($script) ) {
|
336 |
+
continue;
|
337 |
+
}
|
338 |
+
|
339 |
+
$has_app_id = false;
|
340 |
+
$has_url = false;
|
341 |
+
|
342 |
+
if( preg_match('@fbq\s*\(\s*["\']init["\']\s*,\s*["\']' . self::APP_ID_CAPTURE . '["\']@', $script, $matches_init) ) {
|
343 |
+
if( (int)$matches_init['app_id'] > 0 ) {
|
344 |
+
$has_app_id = true;
|
345 |
+
}
|
346 |
+
}
|
347 |
+
|
348 |
+
$has_url = (bool)$this->get_locale_from_url($script);
|
349 |
+
|
350 |
+
if( $has_app_id && $has_url ) {
|
351 |
+
// OK we have both.
|
352 |
+
$tags['both'] = $tag;
|
353 |
+
break;
|
354 |
+
}
|
355 |
+
|
356 |
+
if( $has_app_id ) {
|
357 |
+
$tags['app_id'] = $tag;
|
358 |
+
|
359 |
+
if( $tags['url'] ) {
|
360 |
+
// OK we have both.
|
361 |
+
break;
|
362 |
+
}
|
363 |
+
} elseif( $has_url ) {
|
364 |
+
$tags['url'] = $tag;
|
365 |
+
|
366 |
+
if( $tags['app_id'] ) {
|
367 |
+
// OK we have both.
|
368 |
+
break;
|
369 |
+
}
|
370 |
+
}
|
371 |
+
}
|
372 |
+
|
373 |
+
if( !empty($tags['both']) ) {
|
374 |
+
return [
|
375 |
+
'tag_to_replace' => $tags['both'],
|
376 |
+
'tag_to_search' => $tags['both'],
|
377 |
+
];
|
378 |
+
}
|
379 |
+
|
380 |
+
if( !empty($tags['app_id']) && !empty($tags['url']) ) {
|
381 |
+
return [
|
382 |
+
'tag_to_replace' => $tags['url'],
|
383 |
+
'tag_to_search' => $tags['url'] . $tags['app_id'],
|
384 |
+
];
|
385 |
+
}
|
386 |
+
|
387 |
+
return false;
|
388 |
+
}
|
389 |
+
|
390 |
+
/**
|
391 |
+
* Get some values from the main file and the inline script contents.
|
392 |
+
*
|
393 |
+
* @param string $main_file_contents Main file contents.
|
394 |
+
* @param string $tag_contents Inline script contents.
|
395 |
+
* @return array|bool {
|
396 |
+
* An array of values. False on failure.
|
397 |
+
*
|
398 |
+
* @type string $app_id The app ID.
|
399 |
+
* @type string $version The file version.
|
400 |
+
* }
|
401 |
+
* @since 3.2
|
402 |
+
*
|
403 |
+
*/
|
404 |
+
private function get_variables($main_file_contents = null, $tag_contents = null)
|
405 |
+
{
|
406 |
+
$variables = [];
|
407 |
+
|
408 |
+
if( isset($tag_contents) ) {
|
409 |
+
// Retrieve the app ID from the tag contents.
|
410 |
+
preg_match('@fbq\s*\(\s*["\']init["\']\s*,\s*["\']' . self::APP_ID_CAPTURE . '["\']@', $tag_contents, $matches);
|
411 |
+
|
412 |
+
if( empty($matches['app_id']) ) {
|
413 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: The app ID could not be retrieved from the inline script contents.');
|
414 |
+
|
415 |
+
return false;
|
416 |
+
}
|
417 |
+
|
418 |
+
$variables['app_id'] = $matches['app_id'];
|
419 |
+
}
|
420 |
+
|
421 |
+
if( isset($main_file_contents) ) {
|
422 |
+
// Retrieve the version from the main file contents.
|
423 |
+
preg_match('@fbq\.version\s*=\s*["\']' . self::VERSION_CAPTURE . '["\']\s*;@', $main_file_contents, $matches);
|
424 |
+
|
425 |
+
if( empty($matches['version']) ) {
|
426 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: The version could not be retrieved from the main file contents.');
|
427 |
+
|
428 |
+
return false;
|
429 |
+
}
|
430 |
+
|
431 |
+
$variables['version'] = $matches['version'];
|
432 |
+
}
|
433 |
+
|
434 |
+
return $variables;
|
435 |
+
}
|
436 |
+
|
437 |
+
/**
|
438 |
+
* Perform some replacements in the main file contents. Will be replaced:
|
439 |
+
* - the CDN_BASE_URL value,
|
440 |
+
* - the config file URL,
|
441 |
+
* - the plugins file URL.
|
442 |
+
*
|
443 |
+
* @param string $main_file_contents The file contents.
|
444 |
+
* @param string $busting_dir_url URL of the folder containing the files.
|
445 |
+
* @return string|bool The new contents on success. False on failure.
|
446 |
+
* @since 3.2
|
447 |
+
*
|
448 |
+
*/
|
449 |
+
private function replace_main_file_contents($main_file_contents, $busting_dir_url)
|
450 |
+
{
|
451 |
+
/**
|
452 |
+
* Replace the CDN_BASE_URL value.
|
453 |
+
* From: CDN_BASE_URL:"https://connect.facebook.net/"
|
454 |
+
* To: CDN_BASE_URL:"https://example.com/wp-content/cache/busting/facebook-tracking/"
|
455 |
+
*/
|
456 |
+
$replacement = 'CDN_BASE_URL:"' . $busting_dir_url . '"';
|
457 |
+
|
458 |
+
if( !strpos($main_file_contents, $replacement) ) {
|
459 |
+
$main_file_contents = preg_replace('@CDN_BASE_URL\s*:\s*["\'][^"\']+["\']@', $replacement, $main_file_contents, -1, $count);
|
460 |
+
|
461 |
+
if( !$count ) {
|
462 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: The CDN_BASE_URL could not be replaced in the main file contents.');
|
463 |
+
|
464 |
+
return false;
|
465 |
+
}
|
466 |
+
}
|
467 |
+
|
468 |
+
/**
|
469 |
+
* Replace the config file URL (https://connect.facebook.net/signals/config/{{app_id}}?v={{version}}&r={{release_segment}}).
|
470 |
+
* From: CDN_BASE_URL+"signals/config/"+a+"?v="+b+"&r="+c
|
471 |
+
* To: CDN_BASE_URL+"fbpix-config-"+a+"-"+b+".js" (the release segment is not taken into account, we consider it "stable")
|
472 |
+
*/
|
473 |
+
$replacement_pattern = $this->escape_file_name($this->config_file_name);
|
474 |
+
$replacement_pattern = sprintf($replacement_pattern, '"\+[a-zA-Z._]+\+"\-"\+[a-zA-Z._]+\+"');
|
475 |
+
$replacement_pattern = 'CDN_BASE_URL\+"' . $replacement_pattern . '"';
|
476 |
+
|
477 |
+
if( !preg_match('/' . $replacement_pattern . '/', $main_file_contents) ) {
|
478 |
+
$pattern = '@CDN_BASE_URL\s*\+\s*["\']signals/config/["\']\s*\+\s*([a-zA-Z._]+)\s*\+\s*["\']\?v=["\']\s*\+\s*([a-zA-Z._]+)\s*\+\s*["\']&r=["\']\s*\+\s*[a-zA-Z._]+@';
|
479 |
+
$replacement = 'CDN_BASE_URL+"' . sprintf($this->config_file_name, '"+$1+"-"+$2+"') . '"';
|
480 |
+
$main_file_contents = preg_replace($pattern, $replacement, $main_file_contents, -1, $count);
|
481 |
+
|
482 |
+
if( !$count ) {
|
483 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: The config file URL could not be replaced in the main file contents.');
|
484 |
+
|
485 |
+
return false;
|
486 |
+
}
|
487 |
+
}
|
488 |
+
|
489 |
+
/**
|
490 |
+
* Replace the plugins file URL (https://connect.facebook.net/signals/plugins/{{plugin_name}}.js?v={{version}}).
|
491 |
+
* From: CDN_BASE_URL+"signals/plugins/"+b+".js?v="+a.version
|
492 |
+
* To : CDN_BASE_URL+"fbpix-plugin-"+b+"-"+a.version+".js"
|
493 |
+
*/
|
494 |
+
$replacement_pattern = $this->escape_file_name($this->plugins_file_name);
|
495 |
+
$replacement_pattern = sprintf($replacement_pattern, '"\+[a-zA-Z._]+\+"-"\+[a-zA-Z._]+\+"');
|
496 |
+
$replacement_pattern = 'CDN_BASE_URL\+"' . $replacement_pattern . '"';
|
497 |
+
|
498 |
+
if( !preg_match('/' . $replacement_pattern . '/', $main_file_contents) ) {
|
499 |
+
$pattern = '@CDN_BASE_URL\s*\+\s*["\']signals/plugins/["\']\s*\+\s*([a-zA-Z._]+)\s*\+\s*["\']\.js\?v=["\']\s*\+\s*([a-zA-Z._]+)@';
|
500 |
+
$replacement = 'CDN_BASE_URL+"' . sprintf($this->plugins_file_name, '"+$1+"-"+$2+"') . '"';
|
501 |
+
$main_file_contents = preg_replace($pattern, $replacement, $main_file_contents, -1, $count);
|
502 |
+
|
503 |
+
if( !$count ) {
|
504 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: The plugins file URL could not be replaced in the main file contents.');
|
505 |
+
|
506 |
+
return false;
|
507 |
+
}
|
508 |
+
}
|
509 |
+
|
510 |
+
return $main_file_contents;
|
511 |
+
}
|
512 |
+
|
513 |
+
/**
|
514 |
+
* Save the contents of a URL into a local file if it doesn't exist yet.
|
515 |
+
*
|
516 |
+
* @param string $url URL to get the contents from.
|
517 |
+
* @param string $path Path to the file that will store the URL contents.
|
518 |
+
* @return bool True on success. False on failure.
|
519 |
+
* @since 3.2
|
520 |
+
*
|
521 |
+
*/
|
522 |
+
private function maybe_save($url, $path)
|
523 |
+
{
|
524 |
+
$filesystem = $this->filesystem;
|
525 |
+
|
526 |
+
if( $filesystem->exists($path) ) {
|
527 |
+
// If a previous version is present, keep it.
|
528 |
+
return true;
|
529 |
+
}
|
530 |
+
|
531 |
+
return (bool)$this->save($url, $path);
|
532 |
+
}
|
533 |
+
|
534 |
+
/**
|
535 |
+
* Save the contents of a URL into a local file.
|
536 |
+
*
|
537 |
+
* @param string $url URL to get the contents from.
|
538 |
+
* @param string $path Path to the file that will store the URL contents.
|
539 |
+
* @return string|bool The file contents on success. False on failure.
|
540 |
+
* @since 3.2
|
541 |
+
*
|
542 |
+
*/
|
543 |
+
private function save($url, $path)
|
544 |
+
{
|
545 |
+
$contents = $this->get_remote_contents($url);
|
546 |
+
|
547 |
+
if( !$contents ) {
|
548 |
+
// Error, we couldn't fetch the file contents.
|
549 |
+
return false;
|
550 |
+
}
|
551 |
+
|
552 |
+
return $this->update_file_contents($path, $contents);
|
553 |
+
}
|
554 |
+
|
555 |
+
/**
|
556 |
+
* Add new contents to a file. If the file doesn't exist, it is created.
|
557 |
+
*
|
558 |
+
* @param string $file_path Path to the file to update.
|
559 |
+
* @param string $file_contents New contents.
|
560 |
+
* @return string|bool The file contents on success. False on failure.
|
561 |
+
* @since 3.2
|
562 |
+
*
|
563 |
+
*/
|
564 |
+
private function update_file_contents($file_path, $file_contents)
|
565 |
+
{
|
566 |
+
if( !$this->filesystem->exists($this->busting_path) ) {
|
567 |
+
wp_mkdir_p($this->busting_path);
|
568 |
+
}
|
569 |
+
|
570 |
+
if( !$this->filesystem->put_contents($file_path, $file_contents) ) {
|
571 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: Contents could not be written into file. Paths ' . $file_path);
|
572 |
+
|
573 |
+
return false;
|
574 |
+
}
|
575 |
+
|
576 |
+
return $file_contents;
|
577 |
+
}
|
578 |
+
|
579 |
+
/**
|
580 |
+
* Look for existing local files and update their contents if there's a new version available.
|
581 |
+
* Actually, if a more recent version exists on the FB side, it will delete all local files and hit the home page to recreate them.
|
582 |
+
*
|
583 |
+
* @return bool True on success. False on failure.
|
584 |
+
* @since 3.2
|
585 |
+
*
|
586 |
+
*/
|
587 |
+
public function refresh_all()
|
588 |
+
{
|
589 |
+
// Get all local main files.
|
590 |
+
$main_files = $this->get_all_main_files();
|
591 |
+
|
592 |
+
if( !$main_files ) {
|
593 |
+
// No files (or there's an error).
|
594 |
+
return false !== $main_files;
|
595 |
+
}
|
596 |
+
|
597 |
+
$updated = false;
|
598 |
+
|
599 |
+
foreach($main_files as $local_main_file) {
|
600 |
+
$remote_file_contents = $this->get_remote_contents($this->get_main_file_url($local_main_file['locale']));
|
601 |
+
|
602 |
+
if( !$remote_file_contents ) {
|
603 |
+
continue;
|
604 |
+
}
|
605 |
+
|
606 |
+
$variables = $this->get_variables($remote_file_contents);
|
607 |
+
|
608 |
+
if( !$variables ) {
|
609 |
+
unset($remote_file_contents, $variables);
|
610 |
+
continue;
|
611 |
+
}
|
612 |
+
|
613 |
+
if( version_compare($local_main_file['version'], $variables['version']) >= 0 ) {
|
614 |
+
unset($remote_file_contents, $variables);
|
615 |
+
continue;
|
616 |
+
}
|
617 |
+
|
618 |
+
unset($remote_file_contents);
|
619 |
+
$updated = true;
|
620 |
+
break;
|
621 |
+
}
|
622 |
+
|
623 |
+
if( !$updated ) {
|
624 |
+
return true;
|
625 |
+
}
|
626 |
+
|
627 |
+
// Delete all local files.
|
628 |
+
$this->delete_all();
|
629 |
+
|
630 |
+
return true;
|
631 |
+
}
|
632 |
+
|
633 |
+
/**
|
634 |
+
* Delete all Facebook Pixel busting files.
|
635 |
+
*
|
636 |
+
* @return bool True on success. False on failure.
|
637 |
+
* @since 3.2
|
638 |
+
* @access public
|
639 |
+
*
|
640 |
+
*/
|
641 |
+
public function delete_all()
|
642 |
+
{
|
643 |
+
$filesystem = $this->filesystem;
|
644 |
+
$files = $this->get_all_files();
|
645 |
+
|
646 |
+
if( !$files ) {
|
647 |
+
// No files (or there's an error).
|
648 |
+
return false !== $files;
|
649 |
+
}
|
650 |
+
|
651 |
+
$error_paths = [];
|
652 |
+
|
653 |
+
foreach($files as $file_name) {
|
654 |
+
if( !$filesystem->delete($this->busting_path . $file_name, false, 'f') ) {
|
655 |
+
$error_paths[] = $this->busting_path . $file_name;
|
656 |
+
}
|
657 |
+
}
|
658 |
+
|
659 |
+
if( $error_paths ) {
|
660 |
+
\WGA_Plugin::app()->logger->error('Local file(s) could not be deleted. Paths ' . $error_paths);
|
661 |
+
}
|
662 |
+
|
663 |
+
return !$error_paths;
|
664 |
+
}
|
665 |
+
|
666 |
+
/**
|
667 |
+
* Get all cached files in the directory.
|
668 |
+
*
|
669 |
+
* @return array|bool A list of file names. False on failure.
|
670 |
+
* @since 3.2
|
671 |
+
*
|
672 |
+
*/
|
673 |
+
private function get_all_files()
|
674 |
+
{
|
675 |
+
$filesystem = $this->filesystem;
|
676 |
+
$dir_path = rtrim($this->busting_path, '\\/');
|
677 |
+
|
678 |
+
if( !$filesystem->exists($dir_path) ) {
|
679 |
+
return [];
|
680 |
+
}
|
681 |
+
|
682 |
+
if( !$filesystem->is_writable($dir_path) ) {
|
683 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: Directory is not writable. Path ' . $dir_path);
|
684 |
+
|
685 |
+
return false;
|
686 |
+
}
|
687 |
+
|
688 |
+
$dir = $filesystem->dirlist($dir_path);
|
689 |
+
|
690 |
+
if( false === $dir ) {
|
691 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: could not get the directory contents. Path ' . $dir_path);
|
692 |
+
|
693 |
+
return false;
|
694 |
+
}
|
695 |
+
|
696 |
+
if( !$dir ) {
|
697 |
+
return [];
|
698 |
+
}
|
699 |
+
|
700 |
+
$list = [];
|
701 |
+
|
702 |
+
foreach($dir as $entry) {
|
703 |
+
if( 'f' !== $entry['type'] ) {
|
704 |
+
continue;
|
705 |
+
}
|
706 |
+
if( preg_match('@^fbpix-(?:config|events|plugin)-.+\.js$@', $entry['name'], $matches) ) {
|
707 |
+
$list[$entry['name']] = $entry['name'];
|
708 |
+
}
|
709 |
+
}
|
710 |
+
|
711 |
+
return $list;
|
712 |
+
}
|
713 |
+
|
714 |
+
/**
|
715 |
+
* Get all main files in the directory.
|
716 |
+
*
|
717 |
+
* @return array|bool {
|
718 |
+
* An array of file names (array keys) with following data as values. False on failure.
|
719 |
+
*
|
720 |
+
* @type string $locale The locale, like "en_US".
|
721 |
+
* @type string $version The file version.
|
722 |
+
* }
|
723 |
+
* @since 3.2
|
724 |
+
*
|
725 |
+
*/
|
726 |
+
private function get_all_main_files()
|
727 |
+
{
|
728 |
+
$filesystem = $this->filesystem;
|
729 |
+
$dir_path = rtrim($this->busting_path, '\\/');
|
730 |
+
|
731 |
+
if( !$filesystem->exists($dir_path) ) {
|
732 |
+
return [];
|
733 |
+
}
|
734 |
+
|
735 |
+
if( !$filesystem->is_writable($dir_path) ) {
|
736 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: Directory is not writable. Path ' . $dir_path);
|
737 |
+
|
738 |
+
return false;
|
739 |
+
}
|
740 |
+
|
741 |
+
$dir = $filesystem->dirlist($dir_path);
|
742 |
+
|
743 |
+
if( false === $dir ) {
|
744 |
+
\WGA_Plugin::app()->logger->error('Fb pixel: could not get the directory contents. Path ' . $dir_path);
|
745 |
+
|
746 |
+
return false;
|
747 |
+
}
|
748 |
+
|
749 |
+
if( !$dir ) {
|
750 |
+
return [];
|
751 |
+
}
|
752 |
+
|
753 |
+
$list = [];
|
754 |
+
$pattern = $this->escape_file_name($this->main_file_name);
|
755 |
+
$pattern = sprintf($pattern, self::LOCALE_CAPTURE . '-' . self::VERSION_CAPTURE);
|
756 |
+
|
757 |
+
foreach($dir as $entry) {
|
758 |
+
if( 'f' !== $entry['type'] ) {
|
759 |
+
continue;
|
760 |
+
}
|
761 |
+
if( preg_match('@^' . $pattern . '$@', $entry['name'], $matches) ) {
|
762 |
+
unset($matches[0]);
|
763 |
+
$list[$entry['name']] = $matches;
|
764 |
+
}
|
765 |
+
}
|
766 |
+
|
767 |
+
return $list;
|
768 |
+
}
|
769 |
+
|
770 |
+
/**
|
771 |
+
* Get the most recent "version" of the main file cached locally.
|
772 |
+
*
|
773 |
+
* @return string|bool The version on success. False on failure.
|
774 |
+
* @since 3.2
|
775 |
+
*
|
776 |
+
*/
|
777 |
+
private function get_most_recent_local_version()
|
778 |
+
{
|
779 |
+
$main_files = $this->get_all_main_files();
|
780 |
+
|
781 |
+
if( !$main_files ) {
|
782 |
+
return false;
|
783 |
+
}
|
784 |
+
|
785 |
+
$version = false;
|
786 |
+
|
787 |
+
foreach($main_files as $file_name => $data) {
|
788 |
+
if( !$version || version_compare($data['version'], $version) > 0 ) {
|
789 |
+
$version = $data['version'];
|
790 |
+
}
|
791 |
+
}
|
792 |
+
|
793 |
+
return $version;
|
794 |
+
}
|
795 |
+
|
796 |
+
/**
|
797 |
+
* Get the oldest "version" of the main file cached locally.
|
798 |
+
*
|
799 |
+
* @return string|bool The version on success. False on failure.
|
800 |
+
* @since 3.2
|
801 |
+
*
|
802 |
+
*/
|
803 |
+
private function get_oldest_local_version()
|
804 |
+
{
|
805 |
+
$main_files = $this->get_all_main_files();
|
806 |
+
|
807 |
+
if( !$main_files ) {
|
808 |
+
return false;
|
809 |
+
}
|
810 |
+
|
811 |
+
$version = false;
|
812 |
+
|
813 |
+
foreach($main_files as $file_name => $data) {
|
814 |
+
if( !$version || version_compare($data['version'], $version) < 0 ) {
|
815 |
+
$version = $data['version'];
|
816 |
+
}
|
817 |
+
}
|
818 |
+
|
819 |
+
return $version;
|
820 |
+
}
|
821 |
+
|
822 |
+
/**
|
823 |
+
* Get the remote Facebook Pixel URL.
|
824 |
+
*
|
825 |
+
* @param string $locale A locale string, like 'en_US'.
|
826 |
+
* @return string
|
827 |
+
* @since 3.2
|
828 |
+
*
|
829 |
+
*/
|
830 |
+
public function get_main_file_url($locale)
|
831 |
+
{
|
832 |
+
return sprintf($this->main_file_url, $locale);
|
833 |
+
}
|
834 |
+
|
835 |
+
/**
|
836 |
+
* Extract the locale from a URL to bust.
|
837 |
+
*
|
838 |
+
* @param string $url Any string containing the URL to bust.
|
839 |
+
* @return string|bool The locale on success. False on failure.
|
840 |
+
* @since 3.2
|
841 |
+
*
|
842 |
+
*/
|
843 |
+
private function get_locale_from_url($url)
|
844 |
+
{
|
845 |
+
$pattern = '@//connect\.facebook\.net/' . self::LOCALE_CAPTURE . '/fbevents\.js@i';
|
846 |
+
|
847 |
+
if( !preg_match($pattern, $url, $matches) ) {
|
848 |
+
return false;
|
849 |
+
}
|
850 |
+
|
851 |
+
return $matches['locale'];
|
852 |
+
}
|
853 |
+
|
854 |
+
/** ----------------------------------------------------------------------------------------- */
|
855 |
+
/** BUSTING FILE (aka: cached copy of the main file) ======================================== */
|
856 |
+
/** ----------------------------------------------------------------------------------------- */
|
857 |
+
|
858 |
+
/**
|
859 |
+
* Get the local Facebook Pixel URL (the "main" file).
|
860 |
+
*
|
861 |
+
* @param string $locale A locale string, like 'en_US'.
|
862 |
+
* @param string $version The script version.
|
863 |
+
* @return string
|
864 |
+
* @since 3.2
|
865 |
+
*
|
866 |
+
*/
|
867 |
+
private function get_busting_file_url($locale, $version)
|
868 |
+
{
|
869 |
+
$filename = $this->get_busting_file_name($locale, $version);
|
870 |
+
|
871 |
+
// This filter is documented in inc/functions/minify.php.
|
872 |
+
return $this->busting_url . $filename;
|
873 |
+
}
|
874 |
+
|
875 |
+
/**
|
876 |
+
* Get the local Facebook Pixel file name.
|
877 |
+
*
|
878 |
+
* @param string $locale A locale string, like 'en_US'.
|
879 |
+
* @param string $version The script version.
|
880 |
+
* @return string
|
881 |
+
* @since 3.2
|
882 |
+
*
|
883 |
+
*/
|
884 |
+
private function get_busting_file_name($locale, $version)
|
885 |
+
{
|
886 |
+
return sprintf($this->main_file_name, $locale . '-' . $version);
|
887 |
+
}
|
888 |
+
|
889 |
+
/**
|
890 |
+
* Get the local Facebook Pixel file path.
|
891 |
+
*
|
892 |
+
* @param string $locale A locale string, like 'en_US'.
|
893 |
+
* @param string $version The script version.
|
894 |
+
* @return string
|
895 |
+
* @since 3.2
|
896 |
+
*
|
897 |
+
*/
|
898 |
+
private function get_busting_file_path($locale, $version)
|
899 |
+
{
|
900 |
+
return $this->busting_path . $this->get_busting_file_name($locale, $version);
|
901 |
+
}
|
902 |
+
|
903 |
+
/** ----------------------------------------------------------------------------------------- */
|
904 |
+
/** CONFIG FILE ============================================================================= */
|
905 |
+
/** ----------------------------------------------------------------------------------------- */
|
906 |
+
|
907 |
+
/**
|
908 |
+
* Get the path to the local "config" file. If the file doesn't exist, it is created by fetching its contents remotely, then saved locally.
|
909 |
+
*
|
910 |
+
* @param array $variables {
|
911 |
+
* An array of variable values.
|
912 |
+
*
|
913 |
+
* @type int $app_id The app ID.
|
914 |
+
* @type string $version The file version.
|
915 |
+
* }
|
916 |
+
* @return string|bool The file path on success. False on failure.
|
917 |
+
* @since 3.2
|
918 |
+
* @access private
|
919 |
+
* @see $this->get_variables()
|
920 |
+
*
|
921 |
+
*/
|
922 |
+
private function get_config_file_path($variables)
|
923 |
+
{
|
924 |
+
$config_file_url = sprintf($this->config_file_url, $variables['app_id'], $variables['version']);
|
925 |
+
$config_file_name = sprintf($this->config_file_name, $variables['app_id'] . '-' . $variables['version']);
|
926 |
+
$config_file_path = $this->busting_path . $config_file_name;
|
927 |
+
|
928 |
+
if( !$this->maybe_save($config_file_url, $config_file_path) ) {
|
929 |
+
return false;
|
930 |
+
}
|
931 |
+
|
932 |
+
return $config_file_path;
|
933 |
+
}
|
934 |
+
|
935 |
+
/**
|
936 |
+
* Get the paths to all local "plugin" files. If the files don't exist, they are created by fetching their contents remotely, then saved locally.
|
937 |
+
*
|
938 |
+
* @param array $variables {
|
939 |
+
* An array of variable values.
|
940 |
+
*
|
941 |
+
* @type string $app_id The app ID.
|
942 |
+
* @type string $version The file version.
|
943 |
+
* }
|
944 |
+
* @return array|bool An array of file paths on success. False on failure.
|
945 |
+
* @since 3.2
|
946 |
+
* @see $this->get_variables()
|
947 |
+
*
|
948 |
+
*/
|
949 |
+
private function get_plugin_file_paths($variables)
|
950 |
+
{
|
951 |
+
$paths = [];
|
952 |
+
$plugin_names = [
|
953 |
+
'identity',
|
954 |
+
'microdata',
|
955 |
+
'inferredEvents',
|
956 |
+
'dwell',
|
957 |
+
'sessions',
|
958 |
+
'timespent',
|
959 |
+
'ga2fbq',
|
960 |
+
];
|
961 |
+
|
962 |
+
foreach($plugin_names as $plugin_name) {
|
963 |
+
$plugin_file_url = sprintf($this->plugins_file_url, $plugin_name, $variables['version']);
|
964 |
+
$plugin_file_name = sprintf($this->plugins_file_name, $plugin_name . '-' . $variables['version']);
|
965 |
+
$plugin_file_path = $this->busting_path . $plugin_file_name;
|
966 |
+
|
967 |
+
if( !$this->maybe_save($plugin_file_url, $plugin_file_path) ) {
|
968 |
+
return false;
|
969 |
+
}
|
970 |
+
|
971 |
+
$paths[] = $plugin_file_path;
|
972 |
+
}
|
973 |
+
|
974 |
+
return $paths;
|
975 |
+
}
|
976 |
+
|
977 |
+
/**
|
978 |
+
* Get a file contents. If the file doesn't exist or is not writtable, new contents are fetched remotely.
|
979 |
+
*
|
980 |
+
* @param string $file_path Path to the file.
|
981 |
+
* @param string $file_url URL to the remote file.
|
982 |
+
* @return string|bool The contents on success, false on failure.
|
983 |
+
* @since 3.2
|
984 |
+
* @access private
|
985 |
+
*
|
986 |
+
*/
|
987 |
+
private function get_file_contents($file_path, $file_url = false)
|
988 |
+
{
|
989 |
+
$filesystem = $this->filesystem;
|
990 |
+
|
991 |
+
if( $filesystem->is_writable($file_path) ) {
|
992 |
+
// If a previous version is present, return its contents.
|
993 |
+
$contents = $filesystem->get_contents($file_path);
|
994 |
+
|
995 |
+
if( $contents ) {
|
996 |
+
return $contents;
|
997 |
+
}
|
998 |
+
// In case the file is empty or we could not get its contents, try to get a fresh copy from remote location.
|
999 |
+
}
|
1000 |
+
|
1001 |
+
if( !$file_url ) {
|
1002 |
+
return false;
|
1003 |
+
}
|
1004 |
+
|
1005 |
+
return $this->get_remote_contents($file_url);
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
/**
|
1009 |
+
* Get the contents of a URL.
|
1010 |
+
*
|
1011 |
+
* @param string $url The URL to request.
|
1012 |
+
* @return string|bool The contents on success. False on failure.
|
1013 |
+
* @since 3.2
|
1014 |
+
*
|
1015 |
+
*/
|
1016 |
+
private function get_remote_contents($url)
|
1017 |
+
{
|
1018 |
+
try {
|
1019 |
+
$response = wp_remote_get($url);
|
1020 |
+
} catch( \Exception $e ) {
|
1021 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $e->getMessage());
|
1022 |
+
|
1023 |
+
return false;
|
1024 |
+
}
|
1025 |
+
|
1026 |
+
if( is_wp_error($response) ) {
|
1027 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $response->get_error_message());
|
1028 |
+
|
1029 |
+
return false;
|
1030 |
+
}
|
1031 |
+
|
1032 |
+
$contents = wp_remote_retrieve_body($response);
|
1033 |
+
|
1034 |
+
if( !$contents ) {
|
1035 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $response->get_error_message());
|
1036 |
+
|
1037 |
+
return false;
|
1038 |
+
}
|
1039 |
+
|
1040 |
+
return $contents;
|
1041 |
+
}
|
1042 |
+
|
1043 |
+
/**
|
1044 |
+
* Escape a file name, to be used in a regex pattern (delimiter is `/`).
|
1045 |
+
* `%s` conversion specifications are protected.
|
1046 |
+
*
|
1047 |
+
* @param string $file_name The file name.
|
1048 |
+
* @return string
|
1049 |
+
* @since 3.2
|
1050 |
+
* @access private
|
1051 |
+
* @author Grégory Viguier
|
1052 |
+
*
|
1053 |
+
*/
|
1054 |
+
private function escape_file_name($file_name)
|
1055 |
+
{
|
1056 |
+
$file_name = explode('%s', $file_name);
|
1057 |
+
$file_name = array_map('preg_quote', $file_name);
|
1058 |
+
|
1059 |
+
return implode('%s', $file_name);
|
1060 |
+
}
|
1061 |
+
}
|
components/ga-cache/includes/classes/class-facebook-sdk.php
ADDED
@@ -0,0 +1,555 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WGA\Busting;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class configures the google analytics cache
|
7 |
+
*
|
8 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
9 |
+
* @copyright (c) 2017 Webraftic Ltd
|
10 |
+
* @version 1.0
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
class Facebook_SDK {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Facebook SDK URL.
|
22 |
+
* %s is a locale like "en_US".
|
23 |
+
*
|
24 |
+
* @var string
|
25 |
+
* @since 3.2.0
|
26 |
+
*/
|
27 |
+
protected $url = 'https://connect.facebook.net/%s/sdk.js';
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Filename for the cache busting file.
|
31 |
+
* %s is a locale like "en_US".
|
32 |
+
*
|
33 |
+
* @var string
|
34 |
+
* @since 3.2.0
|
35 |
+
*/
|
36 |
+
protected $filename = 'fbsdk-%s.js';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Flag to track the replacement.
|
40 |
+
*
|
41 |
+
* @var bool
|
42 |
+
* @since 3.2.0
|
43 |
+
*/
|
44 |
+
protected $is_replaced = false;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Filesystem object.
|
48 |
+
*
|
49 |
+
* @var object
|
50 |
+
* @since 3.2.0
|
51 |
+
*/
|
52 |
+
protected $filesystem = false;
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Constructor.
|
56 |
+
*
|
57 |
+
* @param string $busting_path Path to the busting directory.
|
58 |
+
* @param string $busting_url URL of the busting directory.
|
59 |
+
* @since 3.2.0
|
60 |
+
*
|
61 |
+
*/
|
62 |
+
public function __construct($busting_path, $busting_url)
|
63 |
+
{
|
64 |
+
/** Warning: the file name and script URL are dynamic, and must be run through sprintf(). */
|
65 |
+
$this->busting_path = $busting_path . 'facebook-tracking/';
|
66 |
+
$this->busting_url = $busting_url . 'facebook-tracking/';
|
67 |
+
|
68 |
+
/*
|
69 |
+
* Define the timeouts for the connections. Only available after the constructor is called
|
70 |
+
* to allow for per-transport overriding of the default.
|
71 |
+
*/
|
72 |
+
if( !defined('FS_CONNECT_TIMEOUT') ) {
|
73 |
+
define('FS_CONNECT_TIMEOUT', 30);
|
74 |
+
}
|
75 |
+
if( !defined('FS_TIMEOUT') ) {
|
76 |
+
define('FS_TIMEOUT', 30);
|
77 |
+
}
|
78 |
+
|
79 |
+
// Set the permission constants if not already set.
|
80 |
+
if( !defined('FS_CHMOD_DIR') ) {
|
81 |
+
define('FS_CHMOD_DIR', (fileperms(ABSPATH) & 0777 | 0755));
|
82 |
+
}
|
83 |
+
if( !defined('FS_CHMOD_FILE') ) {
|
84 |
+
define('FS_CHMOD_FILE', (fileperms(ABSPATH . 'index.php') & 0777 | 0644));
|
85 |
+
}
|
86 |
+
|
87 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
|
88 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
|
89 |
+
$this->filesystem = new \WP_Filesystem_Direct(new \StdClass());
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Perform the URL replacement process.
|
94 |
+
*
|
95 |
+
* @param string $html HTML contents.
|
96 |
+
* @return string HTML contents.
|
97 |
+
* @since 3.2.0
|
98 |
+
*
|
99 |
+
*/
|
100 |
+
public function replace_url($html)
|
101 |
+
{
|
102 |
+
$this->is_replaced = false;
|
103 |
+
|
104 |
+
$tag = $this->find('<script[^>]*?>(.*)<\/script>', $html);
|
105 |
+
|
106 |
+
if( !$tag ) {
|
107 |
+
return $html;
|
108 |
+
}
|
109 |
+
|
110 |
+
\WGA_Plugin::app()->logger->info('FACEBOOK SDK CACHING PROCESS STARTED. Tag ' . $tag);
|
111 |
+
|
112 |
+
$locale = $this->get_locale_from_url($tag);
|
113 |
+
$remote_url = $this->get_url($locale);
|
114 |
+
|
115 |
+
if( !$this->save($remote_url) ) {
|
116 |
+
return $html;
|
117 |
+
}
|
118 |
+
|
119 |
+
$file_url = $this->get_busting_file_url($locale);
|
120 |
+
$replace_tag = preg_replace('@(?:https?:)?//connect\.facebook\.net/[a-zA-Z_-]+/sdk\.js@i', $file_url, $tag, -1, $count);
|
121 |
+
|
122 |
+
if( !$count || false === strpos($html, $tag) ) {
|
123 |
+
\WGA_Plugin::app()->logger->error('The facebook sdk local file URL could not be replaced in the page contents.');
|
124 |
+
|
125 |
+
return $html;
|
126 |
+
}
|
127 |
+
|
128 |
+
$html = str_replace($tag, $replace_tag, $html);
|
129 |
+
$file_path = $this->get_busting_file_path($locale);
|
130 |
+
$xfbml = $this->get_xfbml_from_url($tag); // Default value should be set to false.
|
131 |
+
$app_id = $this->get_appId_from_url($tag); // APP_ID is the only required value.
|
132 |
+
$url_version = $this->get_version_from_url($tag);
|
133 |
+
$version = false === $url_version ? 'v5.0' : $url_version; // If version is not available set it to the latest: v.5.0.
|
134 |
+
|
135 |
+
if( false !== $app_id ) {
|
136 |
+
// Add FB async init.
|
137 |
+
$fb_async_script = '<script>window.fbAsyncInit = function fbAsyncInit () {FB.init({appId: \'' . $app_id . '\',xfbml: ' . $xfbml . ',version: \'' . $version . '\'})}</script>';
|
138 |
+
$html = str_replace('</body>', $fb_async_script . '</body>', $html);
|
139 |
+
}
|
140 |
+
|
141 |
+
$this->is_replaced = true;
|
142 |
+
|
143 |
+
\WGA_Plugin::app()->logger->info('Facebook SDK caching process succeeded. File ' . $file_path);
|
144 |
+
|
145 |
+
return $html;
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Tell if the replacement was sucessful or not.
|
150 |
+
*
|
151 |
+
* @return bool
|
152 |
+
* @since 3.2.0
|
153 |
+
*
|
154 |
+
*/
|
155 |
+
public function is_replaced()
|
156 |
+
{
|
157 |
+
return $this->is_replaced;
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Search for an element in the DOM.
|
162 |
+
*
|
163 |
+
* @param string $pattern Pattern to match.
|
164 |
+
* @param string $html HTML contents.
|
165 |
+
* @return string|bool The matched HTML on success. False if nothing is found.
|
166 |
+
* @since 3.2.0
|
167 |
+
*
|
168 |
+
*/
|
169 |
+
protected function find($pattern, $html)
|
170 |
+
{
|
171 |
+
preg_match_all('/' . $pattern . '/Umsi', $html, $matches, PREG_SET_ORDER);
|
172 |
+
|
173 |
+
if( empty($matches) ) {
|
174 |
+
return false;
|
175 |
+
}
|
176 |
+
|
177 |
+
foreach($matches as $match) {
|
178 |
+
if( trim($match[1]) && preg_match('@//connect\.facebook\.net/[a-zA-Z_-]+/sdk\.js@i', $match[1]) ) {
|
179 |
+
return $match[0];
|
180 |
+
}
|
181 |
+
}
|
182 |
+
|
183 |
+
return false;
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Save the contents of a URL into a local file if it doesn't exist yet.
|
188 |
+
*
|
189 |
+
* @param string $url URL to get the contents from.
|
190 |
+
* @return bool True on success. False on failure.
|
191 |
+
* @since 3.2.0
|
192 |
+
*
|
193 |
+
*/
|
194 |
+
public function save($url)
|
195 |
+
{
|
196 |
+
$locale = $this->get_locale_from_url($url);
|
197 |
+
$path = $this->get_busting_file_path($locale);
|
198 |
+
|
199 |
+
if( $this->filesystem->exists($path) ) {
|
200 |
+
// If a previous version is present, keep it.
|
201 |
+
return true;
|
202 |
+
}
|
203 |
+
|
204 |
+
return $this->refresh_save($url);
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Save the contents of a URL into a local file.
|
209 |
+
*
|
210 |
+
* @param string $url URL to get the contents from.
|
211 |
+
* @return bool True on success. False on failure.
|
212 |
+
* @since 3.2.0
|
213 |
+
*
|
214 |
+
*/
|
215 |
+
public function refresh_save($url)
|
216 |
+
{
|
217 |
+
$content = $this->get_file_content($url);
|
218 |
+
|
219 |
+
if( !$content ) {
|
220 |
+
// Error, we couldn't fetch the file contents.
|
221 |
+
return false;
|
222 |
+
}
|
223 |
+
|
224 |
+
$locale = $this->get_locale_from_url($url);
|
225 |
+
$path = $this->get_busting_file_path($locale);
|
226 |
+
|
227 |
+
return (bool)$this->update_file_contents($path, $content);
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Add new contents to a file. If the file doesn't exist, it is created.
|
232 |
+
*
|
233 |
+
* @param string $file_path Path to the file to update.
|
234 |
+
* @param string $file_contents New contents.
|
235 |
+
* @return string|bool The file contents on success. False on failure.
|
236 |
+
* @since 3.2.0
|
237 |
+
*
|
238 |
+
*/
|
239 |
+
private function update_file_contents($file_path, $file_contents)
|
240 |
+
{
|
241 |
+
if( !$this->filesystem->exists($this->busting_path) ) {
|
242 |
+
\rocket_mkdir_p($this->busting_path);
|
243 |
+
}
|
244 |
+
|
245 |
+
if( !\rocket_put_content($file_path, $file_contents) ) {
|
246 |
+
\WGA_Plugin::app()->logger->error('Contents could not be written into file. File path ' . $file_path);
|
247 |
+
|
248 |
+
return false;
|
249 |
+
}
|
250 |
+
|
251 |
+
return $file_contents;
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Look for existing local files and update their contents if there's a new version available.
|
256 |
+
* Actually, if a more recent version exists on the FB side, it will delete all local files and hit the home page to recreate them.
|
257 |
+
*
|
258 |
+
* @return bool True on success. False on failure.
|
259 |
+
* @since 3.2.0
|
260 |
+
*
|
261 |
+
*/
|
262 |
+
public function refresh()
|
263 |
+
{
|
264 |
+
$files = $this->get_files();
|
265 |
+
|
266 |
+
if( !$files ) {
|
267 |
+
// No files (or there's an error).
|
268 |
+
return false !== $files;
|
269 |
+
}
|
270 |
+
|
271 |
+
$error_paths = [];
|
272 |
+
$pattern = $this->escape_file_name($this->filename);
|
273 |
+
$pattern = sprintf($pattern, '(?<locale>[a-zA-Z_-]+)');
|
274 |
+
|
275 |
+
foreach($files as $file) {
|
276 |
+
preg_match('/^' . $pattern . '$/', $file, $matches);
|
277 |
+
|
278 |
+
$remote_url = $this->get_url($matches['locale']);
|
279 |
+
|
280 |
+
if( !$this->refresh_save($remote_url) ) {
|
281 |
+
$error_paths[] = $this->get_busting_file_path($matches['locale']);
|
282 |
+
}
|
283 |
+
}
|
284 |
+
|
285 |
+
if( $error_paths ) {
|
286 |
+
\WGA_Plugin::app()->logger->error('Local file(s) could not be updated. Paths ' . $error_paths);
|
287 |
+
}
|
288 |
+
|
289 |
+
return !$error_paths;
|
290 |
+
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Delete all Facebook SDK busting files.
|
294 |
+
*
|
295 |
+
* @return bool True on success. False on failure.
|
296 |
+
* @since 3.2.0
|
297 |
+
*
|
298 |
+
*/
|
299 |
+
public function delete()
|
300 |
+
{
|
301 |
+
$filesystem = $this->filesystem;
|
302 |
+
$files = $this->get_files();
|
303 |
+
|
304 |
+
if( !$files ) {
|
305 |
+
// No files (or there's an error).
|
306 |
+
return false !== $files;
|
307 |
+
}
|
308 |
+
|
309 |
+
$error_paths = [];
|
310 |
+
|
311 |
+
foreach($files as $file_name) {
|
312 |
+
if( !$filesystem->delete($this->busting_path . $file_name, false, 'f') ) {
|
313 |
+
$error_paths[] = $this->busting_path . $file_name;
|
314 |
+
}
|
315 |
+
}
|
316 |
+
|
317 |
+
if( $error_paths ) {
|
318 |
+
\WGA_Plugin::app()->logger->error('Local file(s) could not be deleted. Paths ' . $error_paths);
|
319 |
+
}
|
320 |
+
|
321 |
+
return !$error_paths;
|
322 |
+
}
|
323 |
+
|
324 |
+
/**
|
325 |
+
* Get all cached files in the directory.
|
326 |
+
*
|
327 |
+
* @return array|bool A list of file names. False on failure.
|
328 |
+
* @since 3.2.0
|
329 |
+
*
|
330 |
+
*/
|
331 |
+
private function get_files()
|
332 |
+
{
|
333 |
+
$filesystem = $this->filesystem;
|
334 |
+
$dir_path = rtrim($this->busting_path, '\\/');
|
335 |
+
|
336 |
+
if( !$filesystem->exists($dir_path) ) {
|
337 |
+
return [];
|
338 |
+
}
|
339 |
+
|
340 |
+
if( !$filesystem->is_writable($dir_path) ) {
|
341 |
+
\WGA_Plugin::app()->logger->error('Facebook sdk: Directory is not writable. Path ' . $dir_path);
|
342 |
+
|
343 |
+
return false;
|
344 |
+
}
|
345 |
+
|
346 |
+
$dir = $filesystem->dirlist($dir_path);
|
347 |
+
|
348 |
+
if( false === $dir ) {
|
349 |
+
\WGA_Plugin::app()->logger->error('Facebook sdk: Could not get the directory contents. Path ' . $dir_path);
|
350 |
+
|
351 |
+
return false;
|
352 |
+
}
|
353 |
+
|
354 |
+
if( !$dir ) {
|
355 |
+
return [];
|
356 |
+
}
|
357 |
+
|
358 |
+
$list = [];
|
359 |
+
$pattern = $this->escape_file_name($this->filename);
|
360 |
+
$pattern = sprintf($pattern, '[a-zA-Z_-]+');
|
361 |
+
|
362 |
+
foreach($dir as $entry) {
|
363 |
+
if( 'f' !== $entry['type'] ) {
|
364 |
+
continue;
|
365 |
+
}
|
366 |
+
if( preg_match('/^' . $pattern . '$/', $entry['name'], $matches) ) {
|
367 |
+
$list[$entry['name']] = $entry['name'];
|
368 |
+
}
|
369 |
+
}
|
370 |
+
|
371 |
+
return $list;
|
372 |
+
}
|
373 |
+
|
374 |
+
/**
|
375 |
+
* Get the remote Facebook SDK URL.
|
376 |
+
*
|
377 |
+
* @param string $locale A locale string, like 'en_US'.
|
378 |
+
* @return string
|
379 |
+
* @since 3.2.0
|
380 |
+
*
|
381 |
+
*/
|
382 |
+
public function get_url($locale)
|
383 |
+
{
|
384 |
+
return sprintf($this->url, $locale);
|
385 |
+
}
|
386 |
+
|
387 |
+
/**
|
388 |
+
* Extract the locale from a URL to bust.
|
389 |
+
*
|
390 |
+
* @param string $url Any string containing the URL to bust.
|
391 |
+
* @return string|bool The locale on success. False on failure.
|
392 |
+
* @since 3.2.0
|
393 |
+
*
|
394 |
+
*/
|
395 |
+
private function get_locale_from_url($url)
|
396 |
+
{
|
397 |
+
$pattern = '@//connect\.facebook\.net/(?<locale>[a-zA-Z_-]+)/sdk\.js@i';
|
398 |
+
|
399 |
+
if( !preg_match($pattern, $url, $matches) ) {
|
400 |
+
return false;
|
401 |
+
}
|
402 |
+
|
403 |
+
return $matches['locale'];
|
404 |
+
}
|
405 |
+
|
406 |
+
/**
|
407 |
+
* Extract XFBML from a URL to bust.
|
408 |
+
*
|
409 |
+
* @param string $url Any string containing the URL to bust.
|
410 |
+
* @return string|bool The XFBML on success. False on failure.
|
411 |
+
* @since 3.4.3
|
412 |
+
*
|
413 |
+
*/
|
414 |
+
private function get_xfbml_from_url($url)
|
415 |
+
{
|
416 |
+
$pattern = '@//connect\.facebook\.net/(?<locale>[a-zA-Z_-]+)/sdk\.js#(?:.+&)?xfbml=(?<xfbml>[0-9]+)@i';
|
417 |
+
|
418 |
+
if( !preg_match($pattern, $url, $matches) ) {
|
419 |
+
return false;
|
420 |
+
}
|
421 |
+
|
422 |
+
return $matches['xfbml'];
|
423 |
+
}
|
424 |
+
|
425 |
+
/**
|
426 |
+
* Extract appId from a URL to bust.
|
427 |
+
*
|
428 |
+
* @param string $url Any string containing the URL to bust.
|
429 |
+
* @return string|bool The appId on success. False on failure.
|
430 |
+
* @since 3.4.3
|
431 |
+
*
|
432 |
+
*/
|
433 |
+
private function get_appId_from_url($url)
|
434 |
+
{
|
435 |
+
$pattern = '@//connect\.facebook\.net/(?<locale>[a-zA-Z_-]+)/sdk\.js#(?:.+&)?appId=(?<appId>[0-9]+)@i';
|
436 |
+
|
437 |
+
if( !preg_match($pattern, $url, $matches) ) {
|
438 |
+
return false;
|
439 |
+
}
|
440 |
+
|
441 |
+
return $matches['appId'];
|
442 |
+
}
|
443 |
+
|
444 |
+
/**
|
445 |
+
* Extract version from a URL to bust.
|
446 |
+
*
|
447 |
+
* @param string $url Any string containing the URL to bust.
|
448 |
+
* @return string|bool The version on success. False on failure.
|
449 |
+
* @since 3.4.3
|
450 |
+
*
|
451 |
+
*/
|
452 |
+
private function get_version_from_url($url)
|
453 |
+
{
|
454 |
+
$pattern = '@//connect\.facebook\.net/(?<locale>[a-zA-Z_-]+)/sdk\.js#(?:.+&)?version=(?<version>[a-zA-Z0-9.]+)@i';
|
455 |
+
|
456 |
+
if( !preg_match($pattern, $url, $matches) ) {
|
457 |
+
return false;
|
458 |
+
}
|
459 |
+
|
460 |
+
return $matches['version'];
|
461 |
+
}
|
462 |
+
|
463 |
+
/**
|
464 |
+
* Get the local Facebook SDK URL.
|
465 |
+
*
|
466 |
+
* @param string $locale A locale string, like 'en_US'.
|
467 |
+
* @return string
|
468 |
+
* @since 3.2.0
|
469 |
+
*
|
470 |
+
*/
|
471 |
+
private function get_busting_file_url($locale)
|
472 |
+
{
|
473 |
+
$filename = $this->get_busting_file_name($locale);
|
474 |
+
|
475 |
+
return $this->busting_url . $filename;
|
476 |
+
}
|
477 |
+
|
478 |
+
/**
|
479 |
+
* Get the local Facebook SDK file name.
|
480 |
+
*
|
481 |
+
* @param string $locale A locale string, like 'en_US'.
|
482 |
+
* @return string
|
483 |
+
* @since 3.2.0
|
484 |
+
*
|
485 |
+
*/
|
486 |
+
private function get_busting_file_name($locale)
|
487 |
+
{
|
488 |
+
return sprintf($this->filename, $locale);
|
489 |
+
}
|
490 |
+
|
491 |
+
/**
|
492 |
+
* Get the local Facebook SDK file path.
|
493 |
+
*
|
494 |
+
* @param string $locale A locale string, like 'en_US'.
|
495 |
+
* @return string
|
496 |
+
* @since 3.2.0
|
497 |
+
*
|
498 |
+
*/
|
499 |
+
private function get_busting_file_path($locale)
|
500 |
+
{
|
501 |
+
return $this->busting_path . $this->get_busting_file_name($locale);
|
502 |
+
}
|
503 |
+
|
504 |
+
/**
|
505 |
+
* Get the contents of a URL.
|
506 |
+
*
|
507 |
+
* @param string $url The URL to request.
|
508 |
+
* @return string|bool The contents on success. False on failure.
|
509 |
+
* @since 3.2.0
|
510 |
+
*
|
511 |
+
*/
|
512 |
+
protected function get_file_content($url)
|
513 |
+
{
|
514 |
+
try {
|
515 |
+
$response = wp_remote_get($url);
|
516 |
+
} catch( \Exception $e ) {
|
517 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $e->getMessage());
|
518 |
+
|
519 |
+
return false;
|
520 |
+
}
|
521 |
+
|
522 |
+
if( is_wp_error($response) ) {
|
523 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $response->get_error_message());
|
524 |
+
|
525 |
+
return false;
|
526 |
+
}
|
527 |
+
|
528 |
+
$contents = wp_remote_retrieve_body($response);
|
529 |
+
|
530 |
+
if( !$contents ) {
|
531 |
+
\WGA_Plugin::app()->logger->error('Remote file could not be fetched. Response ' . $response->get_error_message());
|
532 |
+
|
533 |
+
return false;
|
534 |
+
}
|
535 |
+
|
536 |
+
return $contents;
|
537 |
+
}
|
538 |
+
|
539 |
+
/**
|
540 |
+
* Escape a file name, to be used in a regex pattern (delimiter is `/`).
|
541 |
+
* `%s` conversion specifications are protected.
|
542 |
+
*
|
543 |
+
* @param string $file_name The file name.
|
544 |
+
* @return string
|
545 |
+
* @since 3.2.0
|
546 |
+
*
|
547 |
+
*/
|
548 |
+
private function escape_file_name($file_name)
|
549 |
+
{
|
550 |
+
$file_name = explode('%s', $file_name);
|
551 |
+
$file_name = array_map('preg_quote', $file_name);
|
552 |
+
|
553 |
+
return implode('%s', $file_name);
|
554 |
+
}
|
555 |
+
}
|
components/ga-cache/includes/classes/class-google-analytics-cache.php
ADDED
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WGA\Busting;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class configures the google analytics cache
|
7 |
+
*
|
8 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
9 |
+
* @copyright (c) 2017 Webraftic Ltd
|
10 |
+
* @version 1.0
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
class Google_Analytics_Cache extends Abstract_Cache {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Google Analytics URL.
|
22 |
+
*
|
23 |
+
* @var string
|
24 |
+
* @since 3.2.0
|
25 |
+
*/
|
26 |
+
protected $url = 'https://www.google-analytics.com/analytics.js';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* File name (local).
|
30 |
+
* %s is a "version": a md5 hash of the file contents.
|
31 |
+
*
|
32 |
+
* @var string
|
33 |
+
* @since 3.2.0
|
34 |
+
*/
|
35 |
+
protected $filename_pattern = 'ga-%s.js';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Current file version (local): a md5 hash of the file contents.
|
39 |
+
*
|
40 |
+
* @var string
|
41 |
+
* @since 3.2.0
|
42 |
+
*/
|
43 |
+
protected $file_version;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Flag to track the replacement.
|
47 |
+
*
|
48 |
+
* @var bool
|
49 |
+
* @since 3.2.0
|
50 |
+
*/
|
51 |
+
protected $is_replaced = false;
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Constructor.
|
55 |
+
*
|
56 |
+
* @param string $busting_path Path to the busting directory.
|
57 |
+
* @param string $busting_url URL of the busting directory.
|
58 |
+
* @since 3.1
|
59 |
+
* @access public
|
60 |
+
*
|
61 |
+
*/
|
62 |
+
public function __construct($busting_path, $busting_url)
|
63 |
+
{
|
64 |
+
parent::__construct($busting_path, $busting_url);
|
65 |
+
|
66 |
+
$this->busting_path = $busting_path . 'google-tracking/';
|
67 |
+
$this->busting_url = $busting_url . 'google-tracking/';
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Performs the replacement process.
|
72 |
+
*
|
73 |
+
* @param string $html HTML content.
|
74 |
+
* @return string
|
75 |
+
* @since 3.2.0
|
76 |
+
*
|
77 |
+
*/
|
78 |
+
public function replace_url($html)
|
79 |
+
{
|
80 |
+
$this->is_replaced = false;
|
81 |
+
|
82 |
+
$tag = $this->find('<script\s*(?<attr>[^>]*)?>(?<content>[^<]+)?<\/script>', $html);
|
83 |
+
|
84 |
+
if( !$tag ) {
|
85 |
+
return $html;
|
86 |
+
}
|
87 |
+
|
88 |
+
\WGA_Plugin::app()->logger->info('GOOGLE ANALYTICS CACHING PROCESS STARTED. TAG #' . $tag);
|
89 |
+
|
90 |
+
if( !$this->save($this->url) ) {
|
91 |
+
return $html;
|
92 |
+
}
|
93 |
+
|
94 |
+
$replace_tag = preg_replace('/(?:https?:)?\/\/www\.google-analytics\.com\/analytics\.js/i', $this->get_busting_url(), $tag);
|
95 |
+
$html = str_replace($tag, $replace_tag, $html);
|
96 |
+
|
97 |
+
$this->is_replaced = true;
|
98 |
+
|
99 |
+
\WGA_Plugin::app()->logger->info('Google Analytics caching process succeeded. Busting path ' . $this->get_busting_path());
|
100 |
+
|
101 |
+
return $html;
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Tell if the replacement was sucessful or not.
|
106 |
+
*
|
107 |
+
* @return bool
|
108 |
+
*
|
109 |
+
* @since 3.2.0
|
110 |
+
*/
|
111 |
+
public function is_replaced()
|
112 |
+
{
|
113 |
+
return $this->is_replaced;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Get the Google Analytics URL.
|
118 |
+
*
|
119 |
+
* @return string
|
120 |
+
* @author Remy Perona
|
121 |
+
*
|
122 |
+
* @since 3.1
|
123 |
+
* @access public
|
124 |
+
*/
|
125 |
+
public function get_url()
|
126 |
+
{
|
127 |
+
return $this->url;
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Searches for element(s) in the DOM.
|
132 |
+
*
|
133 |
+
* @param string $pattern Pattern to match.
|
134 |
+
* @param string $html HTML content.
|
135 |
+
* @return string
|
136 |
+
* @author Remy Perona
|
137 |
+
*
|
138 |
+
* @since 3.1
|
139 |
+
* @access public
|
140 |
+
*/
|
141 |
+
protected function find($pattern, $html)
|
142 |
+
{
|
143 |
+
preg_match_all('/' . $pattern . '/is', $html, $all_matches, PREG_SET_ORDER);
|
144 |
+
|
145 |
+
$matches = array_map(function ($match) {
|
146 |
+
|
147 |
+
if( empty($match['content']) || (!preg_match('/src\s*=\s*[\'"]\s*(?:https?:)?\/\/www\.google-analytics\.com\/analytics\.js\s*[\'"]/i', $match['attr'] . $match['content']) && false === strpos($match['content'], 'GoogleAnalyticsObject')) ) {
|
148 |
+
return;
|
149 |
+
}
|
150 |
+
|
151 |
+
return $match[0];
|
152 |
+
}, $all_matches);
|
153 |
+
|
154 |
+
$matches = array_values(array_filter($matches));
|
155 |
+
|
156 |
+
if( !$matches ) {
|
157 |
+
return false;
|
158 |
+
}
|
159 |
+
|
160 |
+
return $matches[0];
|
161 |
+
}
|
162 |
+
}
|
components/ga-cache/includes/classes/class-google-tag-manager-cache.php
ADDED
@@ -0,0 +1,156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WGA\Busting;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class configures the google analytics cache
|
7 |
+
*
|
8 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
9 |
+
* @copyright (c) 2017 Webraftic Ltd
|
10 |
+
* @version 1.0
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
class Google_Tag_Manager_Cache extends Abstract_Cache {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Context used for the logger.
|
22 |
+
*
|
23 |
+
* @var string
|
24 |
+
* @since 3.2.4
|
25 |
+
*/
|
26 |
+
const LOGGER_CONTEXT = 'gg tag manager';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* File name (local).
|
30 |
+
* %s is a "version": a md5 hash of the file contents.
|
31 |
+
*
|
32 |
+
* @var string
|
33 |
+
* @since 3.2.4
|
34 |
+
* @access protected
|
35 |
+
*/
|
36 |
+
protected $filename_pattern = 'gtm-%s.js';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Current file version (local): a md5 hash of the file contents.
|
40 |
+
*
|
41 |
+
* @var string
|
42 |
+
* @since 3.2.4
|
43 |
+
* @access protected
|
44 |
+
*/
|
45 |
+
protected $file_version;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Filesystem object.
|
49 |
+
*
|
50 |
+
* @var object
|
51 |
+
* @since 3.2.4
|
52 |
+
* @access protected
|
53 |
+
*/
|
54 |
+
protected $filesystem = false;
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Google Analytics object.
|
58 |
+
*
|
59 |
+
* @var object
|
60 |
+
* @since 3.2.4
|
61 |
+
* @access protected
|
62 |
+
*/
|
63 |
+
protected $ga_busting = false;
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Constructor.
|
67 |
+
*
|
68 |
+
* @param string $busting_path Path to the busting directory.
|
69 |
+
* @param string $busting_url URL of the busting directory.
|
70 |
+
* @param Google_Analytics_Cache $ga_busting A GoogleAnalytics instance.
|
71 |
+
* @since 3.1
|
72 |
+
* @access public
|
73 |
+
*
|
74 |
+
*/
|
75 |
+
public function __construct($busting_path, $busting_url, Google_Analytics_Cache $ga_busting)
|
76 |
+
{
|
77 |
+
parent::__construct($busting_path, $busting_url);
|
78 |
+
$blog_id = get_current_blog_id();
|
79 |
+
$this->busting_path = $busting_path . $blog_id . '/';
|
80 |
+
$this->busting_url = $busting_url . $blog_id . '/';
|
81 |
+
$this->ga_busting = $ga_busting;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Performs the replacement process.
|
86 |
+
*
|
87 |
+
* @param string $html HTML content.
|
88 |
+
* @return string
|
89 |
+
* @since 3.1
|
90 |
+
* @access public
|
91 |
+
*
|
92 |
+
*/
|
93 |
+
public function replace_url($html)
|
94 |
+
{
|
95 |
+
$script = $this->find('<script(\s+[^>]+)?\s+src\s*=\s*[\'"]\s*?((?:https?:)?\/\/www\.googletagmanager\.com(?:.+)?)\s*?[\'"]([^>]+)?\/?>', $html);
|
96 |
+
|
97 |
+
if( !$script ) {
|
98 |
+
return $html;
|
99 |
+
}
|
100 |
+
|
101 |
+
// replace relative protocol // with full https://.
|
102 |
+
$gtm_url = preg_replace('/^\/\//', 'https://', $script[2]);
|
103 |
+
|
104 |
+
\WGA_Plugin::app()->logger->info('GOOGLE TAG MANAGER CACHING PROCESS STARTED. Script ' . $script);
|
105 |
+
|
106 |
+
if( !$this->save($gtm_url) ) {
|
107 |
+
return $html;
|
108 |
+
}
|
109 |
+
|
110 |
+
$replace_script = str_replace($script[2], $this->get_busting_url(), $script[0]);
|
111 |
+
$replace_script = str_replace('<script', '<script data-no-minify="1"', $replace_script);
|
112 |
+
$html = str_replace($script[0], $replace_script, $html);
|
113 |
+
|
114 |
+
\WGA_Plugin::app()->logger->info('Google Tag Manager caching process succeeded. Path ' . $this->get_busting_path());
|
115 |
+
|
116 |
+
return $html;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Searches for element(s) in the DOM.
|
121 |
+
*
|
122 |
+
* @param string $pattern Pattern to match.
|
123 |
+
* @param string $html HTML content.
|
124 |
+
* @return string
|
125 |
+
* @since 3.1
|
126 |
+
* @access public
|
127 |
+
*
|
128 |
+
*/
|
129 |
+
protected function find($pattern, $html)
|
130 |
+
{
|
131 |
+
preg_match_all('/' . $pattern . '/Umsi', $html, $matches, PREG_SET_ORDER);
|
132 |
+
|
133 |
+
if( empty($matches) ) {
|
134 |
+
return false;
|
135 |
+
}
|
136 |
+
|
137 |
+
return $matches[0];
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Replaces the Google Analytics URL by the local copy inside the gtm-local.js file content
|
142 |
+
*
|
143 |
+
* @param string $content JavaScript content.
|
144 |
+
* @return string
|
145 |
+
* @since 3.1
|
146 |
+
*
|
147 |
+
*/
|
148 |
+
protected function replace_ga_url($content)
|
149 |
+
{
|
150 |
+
if( !$this->ga_busting->save($this->ga_busting->get_url()) ) {
|
151 |
+
return $content;
|
152 |
+
}
|
153 |
+
|
154 |
+
return str_replace($this->ga_busting->get_url(), $this->ga_busting->get_busting_url(), $content);
|
155 |
+
}
|
156 |
+
}
|
components/ga-cache/includes/classes/class-scheduler.php
ADDED
@@ -0,0 +1,193 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WGA\Busting;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* This class configures the google analytics cache
|
7 |
+
*
|
8 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
9 |
+
* @copyright (c) 2017 Webraftic Ltd
|
10 |
+
* @version 1.0
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
class Sheduller {
|
19 |
+
|
20 |
+
protected $ga_processor;
|
21 |
+
protected $gtm_processor;
|
22 |
+
protected $fbpix_processor;
|
23 |
+
protected $fbsdk_processor;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Constructor
|
27 |
+
*/
|
28 |
+
public function __construct()
|
29 |
+
{
|
30 |
+
require_once WGA_PLUGIN_DIR . '/includes/classes/class-abstract-cache.php';
|
31 |
+
require_once WGA_PLUGIN_DIR . '/includes/classes/class-google-analytics-cache.php';
|
32 |
+
require_once WGA_PLUGIN_DIR . '/includes/classes/class-google-tag-manager-cache.php';
|
33 |
+
require_once WGA_PLUGIN_DIR . '/includes/classes/class-facebook-sdk.php';
|
34 |
+
require_once WGA_PLUGIN_DIR . '/includes/classes/class-facebook-cache.php';
|
35 |
+
|
36 |
+
$uploads_dir = wp_get_upload_dir();
|
37 |
+
|
38 |
+
if( !$uploads_dir ) {
|
39 |
+
return false;
|
40 |
+
}
|
41 |
+
|
42 |
+
$busting_path = trailingslashit($uploads_dir['basedir']) . WGA_PLUGIN_CACHE_FOLDER . '/';
|
43 |
+
$busting_url = trailingslashit($uploads_dir['baseurl']) . WGA_PLUGIN_CACHE_FOLDER . '/';
|
44 |
+
|
45 |
+
if( \WGA_Plugin::app()->getPopulateOption('google_analytics_cache') ) {
|
46 |
+
$this->ga_processor = new Google_Analytics_Cache($busting_path, $busting_url);
|
47 |
+
$this->gtm_processor = new Google_Tag_Manager_Cache($busting_path, $busting_url, $this->ga_processor);
|
48 |
+
}
|
49 |
+
if( \WGA_Plugin::app()->getPopulateOption('facebook_cache') ) {
|
50 |
+
$this->fbpix_processor = new Facebook_Pixel_Cache($busting_path, $busting_url);
|
51 |
+
$this->fbsdk_processor = new Facebook_SDK($busting_path, $busting_url);
|
52 |
+
}
|
53 |
+
|
54 |
+
add_action('cron_schedules', [$this, 'add_schedule']);
|
55 |
+
add_action('wclearfy/google_tracking_cache_update', [$this, 'update_tracking_cache']);
|
56 |
+
add_action('init', [$this, 'schedule_tracking_cache_update']);
|
57 |
+
|
58 |
+
add_action('template_redirect', function () {
|
59 |
+
ob_start([$this, 'cache_busting_google_tracking']);
|
60 |
+
}, 1);
|
61 |
+
|
62 |
+
add_action('wclearfy_delete_cache', [$this, 'delete_tracking_cache']);
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Processes the cache busting on the HTML content
|
67 |
+
*
|
68 |
+
* Google Analytics replacement is performed first, and if no replacement occured, Google Tag Manager replacement is performed.
|
69 |
+
*
|
70 |
+
* @param string $html HTML content.
|
71 |
+
* @return string
|
72 |
+
* @since 3.1
|
73 |
+
*
|
74 |
+
*/
|
75 |
+
public function cache_busting_google_tracking($html)
|
76 |
+
{
|
77 |
+
if( !$this->is_busting_active() ) {
|
78 |
+
return $html;
|
79 |
+
}
|
80 |
+
|
81 |
+
if( \WGA_Plugin::app()->getPopulateOption('google_analytics_cache') ) {
|
82 |
+
$html = $this->ga_processor->replace_url($html);
|
83 |
+
$html = $this->gtm_processor->replace_url($html);
|
84 |
+
}
|
85 |
+
if( \WGA_Plugin::app()->getPopulateOption('facebook_cache') ) {
|
86 |
+
$html = $this->fbpix_processor->replace_url($html);
|
87 |
+
$html = $this->fbsdk_processor->replace_url($html);
|
88 |
+
}
|
89 |
+
|
90 |
+
return $html;
|
91 |
+
}
|
92 |
+
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Adds weekly interval to cron schedules
|
96 |
+
*
|
97 |
+
* @param $schedules array An array of intervals used by cron jobs.
|
98 |
+
* @return []
|
99 |
+
* @since 3.2.0
|
100 |
+
*
|
101 |
+
*/
|
102 |
+
public function add_schedule($schedules)
|
103 |
+
{
|
104 |
+
if( !$this->is_busting_active() ) {
|
105 |
+
return $schedules;
|
106 |
+
}
|
107 |
+
|
108 |
+
$schedules['weekly'] = [
|
109 |
+
'interval' => 604800,
|
110 |
+
'display' => __('weekly', 'rocket'),
|
111 |
+
];
|
112 |
+
|
113 |
+
return $schedules;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Schedules the auto-update of Google Analytics cache busting file
|
118 |
+
*
|
119 |
+
* @return void
|
120 |
+
* @since 3.2.0
|
121 |
+
*/
|
122 |
+
public function schedule_tracking_cache_update()
|
123 |
+
{
|
124 |
+
if( !$this->is_busting_active() ) {
|
125 |
+
return;
|
126 |
+
}
|
127 |
+
|
128 |
+
if( !wp_next_scheduled('wclearfy/google_tracking_cache_update') ) {
|
129 |
+
wp_schedule_event(time(), 'weekly', 'wclearfy/google_tracking_cache_update');
|
130 |
+
}
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Updates Google Analytics cache busting file
|
135 |
+
*
|
136 |
+
* @return bool
|
137 |
+
* @since 3.2.0
|
138 |
+
*/
|
139 |
+
public function update_tracking_cache()
|
140 |
+
{
|
141 |
+
if( !$this->is_busting_active() ) {
|
142 |
+
return false;
|
143 |
+
}
|
144 |
+
|
145 |
+
if( \WGA_Plugin::app()->getPopulateOption('google_analytics_cache') ) {
|
146 |
+
$this->ga_processor->refresh_save($this->ga_processor->get_url());
|
147 |
+
}
|
148 |
+
|
149 |
+
if( \WGA_Plugin::app()->getPopulateOption('facebook_cache') ) {
|
150 |
+
$this->fbsdk_processor->refresh();
|
151 |
+
$this->fbpix_processor->refresh_all();
|
152 |
+
}
|
153 |
+
|
154 |
+
return true;
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Deletes the GA busting file.
|
159 |
+
*
|
160 |
+
* @return bool
|
161 |
+
* @since 3.2.0
|
162 |
+
*/
|
163 |
+
public function delete_tracking_cache()
|
164 |
+
{
|
165 |
+
if( !$this->is_busting_active() ) {
|
166 |
+
return false;
|
167 |
+
}
|
168 |
+
|
169 |
+
$result = false;
|
170 |
+
|
171 |
+
if( \WGA_Plugin::app()->getPopulateOption('facebook_cache') ) {
|
172 |
+
$result = $this->fbsdk_processor->delete() && $this->fbpix_processor->delete_all();
|
173 |
+
}
|
174 |
+
|
175 |
+
if( \WGA_Plugin::app()->getPopulateOption('google_analytics_cache') ) {
|
176 |
+
$result = $result && $this->ga_processor->delete() && $this->gtm_processor->delete();
|
177 |
+
}
|
178 |
+
|
179 |
+
return $result;
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Tell if the cache busting option is active.
|
184 |
+
*
|
185 |
+
* @return bool
|
186 |
+
* @since 3.2.0
|
187 |
+
*
|
188 |
+
*/
|
189 |
+
private function is_busting_active()
|
190 |
+
{
|
191 |
+
return (\WGA_Plugin::app()->getPopulateOption('google_analytics_cache') || \WGA_Plugin::app()->getPopulateOption('facebook_cache'));
|
192 |
+
}
|
193 |
+
}
|
components/ga-cache/migrations/030002.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
-
class WGACUpdate030002 extends
|
8 |
|
9 |
public function install() {
|
10 |
/**
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
+
class WGACUpdate030002 extends Wbcr_Factory448_Update {
|
8 |
|
9 |
public function install() {
|
10 |
/**
|
components/ga-cache/simple_google_analytics.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin URI: https://webcraftic.com
|
5 |
* Description: Old plugin name: Simple Google Analytics. To improve Google Page Speed indicators Analytics caching is needed. However, it can also slightly increase your website loading speed, because Analytics js files will load locally. The second case that you might need these settings is the usual Google Analytics connection to your website. You do not need to do this with other plugins or insert the tracking code into your theme.
|
6 |
* Author: Webcraftic <wordpress.webraftic@gmail.com>
|
7 |
-
* Version: 3.
|
8 |
* Text Domain: simple-google-analytics
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: http://webcraftic.com
|
@@ -67,15 +67,15 @@ $plugin_info = array(
|
|
67 |
|
68 |
// FRAMEWORK MODULES
|
69 |
'load_factory_modules' => array(
|
70 |
-
array('libs/factory/bootstrap', '
|
71 |
-
array('libs/factory/forms', '
|
72 |
-
array('libs/factory/pages', '
|
73 |
-
array('libs/factory/clearfy', '
|
74 |
-
array('libs/factory/adverts', '
|
75 |
)
|
76 |
);
|
77 |
|
78 |
-
$wga_compatibility = new
|
79 |
'plugin_already_activate' => defined('WGA_PLUGIN_ACTIVE'),
|
80 |
'required_php_version' => '5.4',
|
81 |
'required_wp_version' => '4.2.0',
|
@@ -104,6 +104,7 @@ define('WGA_PLUGIN_VERSION', $wga_compatibility->get_plugin_version());
|
|
104 |
define('WGA_PLUGIN_DIR', dirname(__FILE__));
|
105 |
define('WGA_PLUGIN_BASE', plugin_basename(__FILE__));
|
106 |
define('WGA_PLUGIN_URL', plugins_url(null, __FILE__));
|
|
|
107 |
|
108 |
|
109 |
|
4 |
* Plugin URI: https://webcraftic.com
|
5 |
* Description: Old plugin name: Simple Google Analytics. To improve Google Page Speed indicators Analytics caching is needed. However, it can also slightly increase your website loading speed, because Analytics js files will load locally. The second case that you might need these settings is the usual Google Analytics connection to your website. You do not need to do this with other plugins or insert the tracking code into your theme.
|
6 |
* Author: Webcraftic <wordpress.webraftic@gmail.com>
|
7 |
+
* Version: 3.2.0
|
8 |
* Text Domain: simple-google-analytics
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: http://webcraftic.com
|
67 |
|
68 |
// FRAMEWORK MODULES
|
69 |
'load_factory_modules' => array(
|
70 |
+
array('libs/factory/bootstrap', 'factory_bootstrap_448', 'admin'),
|
71 |
+
array('libs/factory/forms', 'factory_forms_445', 'admin'),
|
72 |
+
array('libs/factory/pages', 'factory_pages_447', 'admin'),
|
73 |
+
array('libs/factory/clearfy', 'factory_clearfy_240', 'all'),
|
74 |
+
array('libs/factory/adverts', 'factory_adverts_126', 'admin')
|
75 |
)
|
76 |
);
|
77 |
|
78 |
+
$wga_compatibility = new Wbcr_Factory448_Requirements(__FILE__, array_merge($plugin_info, array(
|
79 |
'plugin_already_activate' => defined('WGA_PLUGIN_ACTIVE'),
|
80 |
'required_php_version' => '5.4',
|
81 |
'required_wp_version' => '4.2.0',
|
104 |
define('WGA_PLUGIN_DIR', dirname(__FILE__));
|
105 |
define('WGA_PLUGIN_BASE', plugin_basename(__FILE__));
|
106 |
define('WGA_PLUGIN_URL', plugins_url(null, __FILE__));
|
107 |
+
define('WGA_PLUGIN_CACHE_FOLDER', 'wga-cache');
|
108 |
|
109 |
|
110 |
|
components/html-minify/admin/boot.php
CHANGED
@@ -8,55 +8,55 @@
|
|
8 |
*/
|
9 |
|
10 |
// Exit if accessed directly
|
11 |
-
if
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
/**
|
16 |
* Печатает ошибки совместимости с похожими плагинами
|
17 |
*/
|
18 |
-
add_action(
|
19 |
-
if
|
20 |
return $notices;
|
21 |
}
|
22 |
|
23 |
-
if
|
24 |
-
$notice_text = __(
|
25 |
|
26 |
-
if
|
27 |
-
$component_button = WCL_Plugin::app()->getInstallComponentsButton(
|
28 |
-
$notice_text
|
29 |
}
|
30 |
|
31 |
$notices[] = [
|
32 |
-
'id'
|
33 |
-
'type'
|
34 |
-
'classes'
|
35 |
-
'dismissible'
|
36 |
'dismiss_expires' => 0,
|
37 |
-
'text'
|
38 |
];
|
39 |
}
|
40 |
|
41 |
return $notices;
|
42 |
-
}, 10, 2
|
43 |
|
44 |
-
add_filter(
|
45 |
$options[] = [
|
46 |
-
'name'
|
47 |
-
'title'
|
48 |
-
'tags'
|
49 |
'values' => []
|
50 |
];
|
51 |
$options[] = [
|
52 |
-
'name'
|
53 |
-
'title'
|
54 |
-
'tags'
|
55 |
'values' => []
|
56 |
];
|
57 |
|
58 |
return $options;
|
59 |
-
}
|
60 |
|
61 |
/**
|
62 |
* Adds a new mode to the Quick Setup page
|
@@ -66,66 +66,68 @@ add_filter( "wbcr_clearfy_group_options", function ( $options ) {
|
|
66 |
* @return mixed
|
67 |
*/
|
68 |
|
69 |
-
add_filter(
|
70 |
-
if
|
71 |
-
$title = __(
|
72 |
} else {
|
73 |
-
$title = __(
|
74 |
}
|
75 |
|
76 |
$mod['optimize_code'] = [
|
77 |
'title' => $title,
|
78 |
-
'icon'
|
79 |
];
|
80 |
|
81 |
return $mod + $mods;
|
82 |
-
}
|
83 |
|
84 |
-
function wbcr_htm_settings_form_options()
|
|
|
85 |
$options = [];
|
86 |
|
87 |
$options[] = [
|
88 |
'type' => 'html',
|
89 |
-
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __(
|
90 |
];
|
91 |
|
92 |
// Переключатель
|
93 |
$options[] = [
|
94 |
-
'type'
|
95 |
-
'way'
|
96 |
-
'name'
|
97 |
-
'title'
|
98 |
-
'layout'
|
|
|
99 |
'default' => false,
|
100 |
];
|
101 |
|
102 |
// Переключатель
|
103 |
$options[] = [
|
104 |
-
'type'
|
105 |
-
'way'
|
106 |
-
'name'
|
107 |
-
'title'
|
108 |
-
'layout'
|
109 |
-
'hint'
|
110 |
'default' => false
|
111 |
];
|
112 |
|
113 |
return $options;
|
114 |
}
|
115 |
|
116 |
-
add_filter(
|
117 |
|
118 |
-
if
|
119 |
return $form;
|
120 |
}
|
121 |
|
122 |
$options = wbcr_htm_settings_form_options();
|
123 |
|
124 |
-
foreach
|
125 |
-
array_unshift(
|
126 |
}
|
127 |
|
128 |
return $form;
|
129 |
-
}
|
130 |
|
131 |
|
8 |
*/
|
9 |
|
10 |
// Exit if accessed directly
|
11 |
+
if( !defined('ABSPATH') ) {
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
/**
|
16 |
* Печатает ошибки совместимости с похожими плагинами
|
17 |
*/
|
18 |
+
add_action('wbcr/factory/admin_notices', function ($notices, $plugin_name) {
|
19 |
+
if( $plugin_name != WHTM_Plugin::app()->getPluginName() ) {
|
20 |
return $notices;
|
21 |
}
|
22 |
|
23 |
+
if( is_plugin_active('autoptimize/autoptimize.php') ) {
|
24 |
+
$notice_text = __('Clearfy: Html minify component is not compatible with the Autoptimize plugin, please do not use them together to avoid conflicts. Please disable the Html minify component', 'html-minify');
|
25 |
|
26 |
+
if( class_exists('WCL_Plugin') ) {
|
27 |
+
$component_button = WCL_Plugin::app()->getInstallComponentsButton('internal', 'html_minify');
|
28 |
+
$notice_text .= ' ' . $component_button->getLink();
|
29 |
}
|
30 |
|
31 |
$notices[] = [
|
32 |
+
'id' => 'mac_plugin_compatibility',
|
33 |
+
'type' => 'error',
|
34 |
+
'classes' => ['wbcr-hide-after-action'],
|
35 |
+
'dismissible' => false,
|
36 |
'dismiss_expires' => 0,
|
37 |
+
'text' => '<p>' . $notice_text . '</p>'
|
38 |
];
|
39 |
}
|
40 |
|
41 |
return $notices;
|
42 |
+
}, 10, 2);
|
43 |
|
44 |
+
add_filter("wbcr_clearfy_group_options", function ($options) {
|
45 |
$options[] = [
|
46 |
+
'name' => 'html_optimize',
|
47 |
+
'title' => __('Optimize HTML Code?', 'html-minify'),
|
48 |
+
'tags' => ['optimize_performance', 'optimize_html', 'optimize_code', 'hide_my_wp'],
|
49 |
'values' => []
|
50 |
];
|
51 |
$options[] = [
|
52 |
+
'name' => 'html_keepcomments',
|
53 |
+
'title' => __('Keep HTML comments?', 'html-minify'),
|
54 |
+
'tags' => [],
|
55 |
'values' => []
|
56 |
];
|
57 |
|
58 |
return $options;
|
59 |
+
});
|
60 |
|
61 |
/**
|
62 |
* Adds a new mode to the Quick Setup page
|
66 |
* @return mixed
|
67 |
*/
|
68 |
|
69 |
+
add_filter("wbcr_clearfy_allow_quick_mods", function ($mods) {
|
70 |
+
if( !defined('WMAC_PLUGIN_ACTIVE') ) {
|
71 |
+
$title = __('One click optimize html code', 'html-minify');
|
72 |
} else {
|
73 |
+
$title = __('One click optimize html code and scripts', 'html-minify');
|
74 |
}
|
75 |
|
76 |
$mod['optimize_code'] = [
|
77 |
'title' => $title,
|
78 |
+
'icon' => 'dashicons-performance'
|
79 |
];
|
80 |
|
81 |
return $mod + $mods;
|
82 |
+
});
|
83 |
|
84 |
+
function wbcr_htm_settings_form_options()
|
85 |
+
{
|
86 |
$options = [];
|
87 |
|
88 |
$options[] = [
|
89 |
'type' => 'html',
|
90 |
+
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('Minify Html code', 'html-minify') . '</strong><p>' . __('Ever look at the HTML markup of your website and notice how sloppy and amateurish it looks? The Minify HTML options cleans up sloppy looking markup and minifies, which also speeds up download.', 'html-minify') . '</p></div>'
|
91 |
];
|
92 |
|
93 |
// Переключатель
|
94 |
$options[] = [
|
95 |
+
'type' => 'checkbox',
|
96 |
+
'way' => 'buttons',
|
97 |
+
'name' => 'html_optimize',
|
98 |
+
'title' => __('Optimize HTML Code?', 'html-minify'),
|
99 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'green'],
|
100 |
+
'hint' => __('Minify html code.', 'html-minify'),
|
101 |
'default' => false,
|
102 |
];
|
103 |
|
104 |
// Переключатель
|
105 |
$options[] = [
|
106 |
+
'type' => 'checkbox',
|
107 |
+
'way' => 'buttons',
|
108 |
+
'name' => 'html_keepcomments',
|
109 |
+
'title' => __('Keep HTML comments?', 'html-minify'),
|
110 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
111 |
+
'hint' => __('Enable this if you want HTML comments to remain in the page.', 'html-minify'),
|
112 |
'default' => false
|
113 |
];
|
114 |
|
115 |
return $options;
|
116 |
}
|
117 |
|
118 |
+
add_filter('wbcr_clr_code_clean_form_options', function ($form) {
|
119 |
|
120 |
+
if( empty($form) ) {
|
121 |
return $form;
|
122 |
}
|
123 |
|
124 |
$options = wbcr_htm_settings_form_options();
|
125 |
|
126 |
+
foreach(array_reverse($options) as $option) {
|
127 |
+
array_unshift($form[0]['items'], $option);
|
128 |
}
|
129 |
|
130 |
return $form;
|
131 |
+
});
|
132 |
|
133 |
|
components/html-minify/admin/pages/class-pages-settings.php
CHANGED
@@ -9,7 +9,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
9 |
*
|
10 |
* @since 1.0.0
|
11 |
*/
|
12 |
-
class WHTM_SettingsPage extends
|
13 |
|
14 |
/**
|
15 |
* {@inheritDoc}
|
@@ -52,9 +52,9 @@ class WHTM_SettingsPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
52 |
*
|
53 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
54 |
*
|
55 |
-
* @param \
|
56 |
*/
|
57 |
-
public function __construct(
|
58 |
// Заголовок страницы
|
59 |
$this->menu_title = __( 'HTML Minify', 'html-minify' );
|
60 |
|
9 |
*
|
10 |
* @since 1.0.0
|
11 |
*/
|
12 |
+
class WHTM_SettingsPage extends Wbcr_FactoryClearfy240_PageBase {
|
13 |
|
14 |
/**
|
15 |
* {@inheritDoc}
|
52 |
*
|
53 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
54 |
*
|
55 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
56 |
*/
|
57 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
58 |
// Заголовок страницы
|
59 |
$this->menu_title = __( 'HTML Minify', 'html-minify' );
|
60 |
|
components/html-minify/html-minify.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* Text Domain: html-minify
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
/*
|
@@ -59,15 +59,15 @@ $whtml_plugin_info = array(
|
|
59 |
|
60 |
// FRAMEWORK MODULES
|
61 |
'load_factory_modules' => array(
|
62 |
-
array( 'libs/factory/bootstrap', '
|
63 |
-
array( 'libs/factory/forms', '
|
64 |
-
array( 'libs/factory/pages', '
|
65 |
-
array( 'libs/factory/clearfy', '
|
66 |
-
array( 'libs/factory/adverts', '
|
67 |
)
|
68 |
);
|
69 |
|
70 |
-
$whtml_compatibility = new
|
71 |
'plugin_already_activate' => defined( 'WHTM_PLUGIN_ACTIVE' ),
|
72 |
'required_php_version' => '5.4',
|
73 |
'required_wp_version' => '4.2.0',
|
8 |
* Text Domain: html-minify
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_448_VERSION
|
12 |
*/
|
13 |
|
14 |
/*
|
59 |
|
60 |
// FRAMEWORK MODULES
|
61 |
'load_factory_modules' => array(
|
62 |
+
array( 'libs/factory/bootstrap', 'factory_bootstrap_448', 'admin' ),
|
63 |
+
array( 'libs/factory/forms', 'factory_forms_445', 'admin' ),
|
64 |
+
array( 'libs/factory/pages', 'factory_pages_447', 'admin' ),
|
65 |
+
array( 'libs/factory/clearfy', 'factory_clearfy_240', 'all' ),
|
66 |
+
array( 'libs/factory/adverts', 'factory_adverts_126', 'admin')
|
67 |
)
|
68 |
);
|
69 |
|
70 |
+
$whtml_compatibility = new Wbcr_Factory448_Requirements( __FILE__, array_merge( $whtml_plugin_info, array(
|
71 |
'plugin_already_activate' => defined( 'WHTM_PLUGIN_ACTIVE' ),
|
72 |
'required_php_version' => '5.4',
|
73 |
'required_wp_version' => '4.2.0',
|
components/html-minify/includes/class-plugin.php
CHANGED
@@ -13,11 +13,11 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
13 |
}
|
14 |
|
15 |
|
16 |
-
class WHTM_Plugin extends
|
17 |
|
18 |
/**
|
19 |
* @see self::app()
|
20 |
-
* @var
|
21 |
*/
|
22 |
private static $app;
|
23 |
|
@@ -53,7 +53,7 @@ class WHTM_Plugin extends Wbcr_Factory446_Plugin {
|
|
53 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
54 |
* классам.
|
55 |
*
|
56 |
-
* @return \
|
57 |
*/
|
58 |
public static function app() {
|
59 |
return self::$app;
|
13 |
}
|
14 |
|
15 |
|
16 |
+
class WHTM_Plugin extends Wbcr_Factory448_Plugin {
|
17 |
|
18 |
/**
|
19 |
* @see self::app()
|
20 |
+
* @var Wbcr_Factory448_Plugin
|
21 |
*/
|
22 |
private static $app;
|
23 |
|
53 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
54 |
* классам.
|
55 |
*
|
56 |
+
* @return \Wbcr_Factory448_Plugin|\WCM_Plugin
|
57 |
*/
|
58 |
public static function app() {
|
59 |
return self::$app;
|
components/html-minify/includes/classes/class-main.php
CHANGED
@@ -6,17 +6,17 @@
|
|
6 |
* @version 1.0
|
7 |
*/
|
8 |
|
9 |
-
if
|
10 |
-
|
11 |
}
|
12 |
|
13 |
/**
|
14 |
* Class WHTM_PluginMain
|
15 |
*/
|
16 |
-
class WHTM_PluginMain
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
|
21 |
/**
|
22 |
* Constructor.
|
@@ -38,244 +38,238 @@ class WHTM_PluginMain
|
|
38 |
/**
|
39 |
* Initialization hooks
|
40 |
*/
|
41 |
-
public function hook()
|
42 |
-
|
43 |
-
|
|
|
44 |
}
|
45 |
}
|
46 |
|
47 |
/**
|
48 |
* Setting the parameters
|
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 |
* Run
|
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 |
-
unset( $instance );
|
273 |
-
}
|
274 |
-
|
275 |
-
$content = apply_filters( 'whm_html_after_minify', $content );
|
276 |
-
|
277 |
-
return $content;
|
278 |
-
}
|
279 |
|
280 |
/**
|
281 |
* Remove Cache Status Messages
|
@@ -283,19 +277,19 @@ class WHTM_PluginMain
|
|
283 |
public function removeCacheMessage()
|
284 |
{
|
285 |
// For WP Super Cache
|
286 |
-
if
|
287 |
global $wp_super_cache_comments;
|
288 |
$wp_super_cache_comments = 0;
|
289 |
}
|
290 |
|
291 |
// For WP Fastest Cache
|
292 |
-
if
|
293 |
-
define(
|
294 |
}
|
295 |
|
296 |
// For WP Total Cache
|
297 |
-
if
|
298 |
-
add_filter(
|
299 |
}
|
300 |
}
|
301 |
|
6 |
* @version 1.0
|
7 |
*/
|
8 |
|
9 |
+
if( !defined('ABSPATH') ) {
|
10 |
+
exit;
|
11 |
}
|
12 |
|
13 |
/**
|
14 |
* Class WHTM_PluginMain
|
15 |
*/
|
16 |
+
class WHTM_PluginMain {
|
17 |
+
|
18 |
+
const INIT_EARLIER_PRIORITY = -1;
|
19 |
+
const DEFAULT_HOOK_PRIORITY = 2;
|
20 |
|
21 |
/**
|
22 |
* Constructor.
|
38 |
/**
|
39 |
* Initialization hooks
|
40 |
*/
|
41 |
+
public function hook()
|
42 |
+
{
|
43 |
+
if( WHTM_Plugin::app()->getPopulateOption('html_optimize') ) {
|
44 |
+
add_action('wp_loaded', array($this, 'removeCacheMessage'));
|
45 |
}
|
46 |
}
|
47 |
|
48 |
/**
|
49 |
* Setting the parameters
|
50 |
*/
|
51 |
+
public function setup()
|
52 |
+
{
|
53 |
+
// These can be overridden by specifying them in wp-config.php or such.
|
54 |
+
if( !defined('WHTM_WP_CONTENT_NAME') ) {
|
55 |
+
define('WHTM_WP_CONTENT_NAME', '/' . wp_basename(WP_CONTENT_DIR));
|
56 |
+
}
|
57 |
+
|
58 |
+
define('WHTM_ROOT_DIR', substr(WP_CONTENT_DIR, 0, strlen(WP_CONTENT_DIR) - strlen(WHTM_WP_CONTENT_NAME)));
|
59 |
+
|
60 |
+
if( !defined('WHTM_WP_SITE_URL') ) {
|
61 |
+
// domain_mapping_siteurl функция из плагина, который позволяет задавать свой домен для подсайта
|
62 |
+
if( function_exists('domain_mapping_siteurl') ) {
|
63 |
+
define('WHTM_WP_SITE_URL', domain_mapping_siteurl(get_current_blog_id()));
|
64 |
+
} else {
|
65 |
+
define('WHTM_WP_SITE_URL', site_url());
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
if( !defined('WHTM_WP_CONTENT_URL') ) {
|
70 |
+
// get_original_url функция из плагина, который позволяет задавать свой домен для подсайта
|
71 |
+
if( function_exists('get_original_url') ) {
|
72 |
+
define('WHTM_WP_CONTENT_URL', str_replace(get_original_url(WHTM_WP_SITE_URL), WHTM_WP_SITE_URL, content_url()));
|
73 |
+
} else {
|
74 |
+
define('WHTM_WP_CONTENT_URL', content_url());
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
if( !defined('WHTM_WP_ROOT_URL') ) {
|
79 |
+
define('WHTM_WP_ROOT_URL', str_replace(WHTM_WP_CONTENT_NAME, '', WHTM_WP_CONTENT_URL));
|
80 |
+
}
|
81 |
+
|
82 |
+
if( !defined('WHTM_HASH') ) {
|
83 |
+
define('WHTM_HASH', wp_hash(time()));
|
84 |
+
}
|
85 |
+
}
|
86 |
|
87 |
/**
|
88 |
* Run
|
89 |
*/
|
90 |
+
public function run()
|
91 |
+
{
|
92 |
+
if( WHTM_Plugin::app()->getPopulateOption('html_optimize') ) {
|
93 |
+
// Hook into WordPress frontend.
|
94 |
+
if( defined('WHTM_INIT_EARLIER') ) {
|
95 |
+
add_action('init', array($this, 'startBuffering'), self::INIT_EARLIER_PRIORITY);
|
96 |
+
} else {
|
97 |
+
if( !defined('WHTM_HOOK_INTO') ) {
|
98 |
+
define('WHTM_HOOK_INTO', 'template_redirect');
|
99 |
+
}
|
100 |
+
add_action(constant('WHTM_HOOK_INTO'), array($this, 'startBuffering'), self::DEFAULT_HOOK_PRIORITY);
|
101 |
+
}
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Setup output buffering if needed.
|
107 |
+
*
|
108 |
+
* @return void
|
109 |
+
*/
|
110 |
+
public function startBuffering()
|
111 |
+
{
|
112 |
+
if( $this->shouldBuffer() ) {
|
113 |
+
|
114 |
+
if( apply_filters('whm_filter_obkiller', false) ) {
|
115 |
+
while( ob_get_level() > 0 ) {
|
116 |
+
ob_end_clean();
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
// Now, start the real thing!
|
121 |
+
ob_start(array($this, 'endBuffering'));
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Returns true if all the conditions to start output buffering are satisfied.
|
127 |
+
*
|
128 |
+
* @param bool $doing_tests Allows overriding the optimization of only
|
129 |
+
* deciding once per request (for use in tests).
|
130 |
+
* @return bool
|
131 |
+
*/
|
132 |
+
public function shouldBuffer($doing_tests = false)
|
133 |
+
{
|
134 |
+
static $do_buffering = null;
|
135 |
+
|
136 |
+
// Only check once in case we're called multiple times by others but
|
137 |
+
// still allows multiple calls when doing tests.
|
138 |
+
if( null === $do_buffering || $doing_tests ) {
|
139 |
+
$whm_noptimize = false;
|
140 |
+
|
141 |
+
// Checking for DONOTMINIFY constant as used by e.g. WooCommerce POS.
|
142 |
+
if( defined('DONOTMINIFY') && (constant('DONOTMINIFY') === true || constant('DONOTMINIFY') === 'true') ) {
|
143 |
+
$whm_noptimize = true;
|
144 |
+
}
|
145 |
+
|
146 |
+
// Skip checking query strings if they're disabled.
|
147 |
+
if( apply_filters('whm_filter_honor_qs_noptimize', true) ) {
|
148 |
+
// Check for `whm_noptimize` (and other) keys in the query string
|
149 |
+
// to get non-optimized page for debugging.
|
150 |
+
$keys = array(
|
151 |
+
'whm_noptimize',
|
152 |
+
'whm_noptirocket',
|
153 |
+
);
|
154 |
+
foreach($keys as $key) {
|
155 |
+
if( array_key_exists($key, $_GET) && '1' === $_GET[$key] ) {
|
156 |
+
$whm_noptimize = true;
|
157 |
+
break;
|
158 |
+
}
|
159 |
+
}
|
160 |
+
}
|
161 |
+
|
162 |
+
// Allows blocking of auto optimization on your own terms regardless of above decisions.
|
163 |
+
$whm_noptimize = (bool)apply_filters('whm_filter_noptimize', $whm_noptimize);
|
164 |
+
|
165 |
+
// Check for site being previewed in the Customizer (available since WP 4.0).
|
166 |
+
$is_customize_preview = false;
|
167 |
+
if( function_exists('is_customize_preview') && is_customize_preview() ) {
|
168 |
+
$is_customize_preview = is_customize_preview();
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* We only buffer the frontend requests (and then only if not a feed
|
173 |
+
* and not turned off explicitly and not when being previewed in Customizer)!
|
174 |
+
* NOTE: Tests throw a notice here due to is_feed() being called
|
175 |
+
* while the main query hasn't been ran yet. Thats why we use
|
176 |
+
* WHTM_INIT_EARLIER in tests.
|
177 |
+
*/
|
178 |
+
$do_buffering = (!is_admin() && !is_feed() && !$whm_noptimize && !$is_customize_preview);
|
179 |
+
}
|
180 |
+
|
181 |
+
return $do_buffering;
|
182 |
+
}
|
183 |
+
|
184 |
+
/**
|
185 |
+
* Returns true if given markup is considered valid/processable/optimizable.
|
186 |
+
*
|
187 |
+
* @param string $content Markup.
|
188 |
+
*
|
189 |
+
* @return bool
|
190 |
+
*/
|
191 |
+
public function isValidBuffer($content)
|
192 |
+
{
|
193 |
+
// Defaults to true.
|
194 |
+
$valid = true;
|
195 |
+
|
196 |
+
$has_no_html_tag = (false === stripos($content, '<html'));
|
197 |
+
$has_xsl_stylesheet = (false !== stripos($content, '<xsl:stylesheet'));
|
198 |
+
$has_html5_doctype = (preg_match('/^<!DOCTYPE.+html>/i', $content) > 0);
|
199 |
+
|
200 |
+
if( $has_no_html_tag ) {
|
201 |
+
// Can't be valid amp markup without an html tag preceding it.
|
202 |
+
$is_amp_markup = false;
|
203 |
+
} else {
|
204 |
+
$is_amp_markup = self::isAmpMarkup($content);
|
205 |
+
}
|
206 |
+
|
207 |
+
// If it's not html, or if it's amp or contains xsl stylesheets we don't touch it.
|
208 |
+
if( $has_no_html_tag && !$has_html5_doctype || $is_amp_markup || $has_xsl_stylesheet ) {
|
209 |
+
$valid = false;
|
210 |
+
}
|
211 |
+
|
212 |
+
return $valid;
|
213 |
+
}
|
214 |
+
|
215 |
+
/**
|
216 |
+
* Returns true if given $content is considered to be AMP markup.
|
217 |
+
* This is far from actual validation against AMP spec, but it'll do for now.
|
218 |
+
*
|
219 |
+
* @param string $content Markup to check.
|
220 |
+
*
|
221 |
+
* @return bool
|
222 |
+
*/
|
223 |
+
public static function isAmpMarkup($content)
|
224 |
+
{
|
225 |
+
$is_amp_markup = preg_match('/<html[^>]*(?:amp|⚡)/i', $content);
|
226 |
+
|
227 |
+
return (bool)$is_amp_markup;
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Processes/optimizes the output-buffered content and returns it.
|
232 |
+
* If the content is not processable, it is returned unmodified.
|
233 |
+
*
|
234 |
+
* @param string $content Buffered content.
|
235 |
+
*
|
236 |
+
* @return string
|
237 |
+
*/
|
238 |
+
public function endBuffering($content)
|
239 |
+
{
|
240 |
+
// Bail early without modifying anything if we can't handle the content.
|
241 |
+
if( !$this->isValidBuffer($content) ) {
|
242 |
+
return $content;
|
243 |
+
}
|
244 |
+
|
245 |
+
// Determine what needs to be ran.
|
246 |
+
$classes = array();
|
247 |
+
if( WHTM_Plugin::app()->getPopulateOption('html_optimize') ) {
|
248 |
+
$classes[] = 'WHTM_PluginHTML';
|
249 |
+
}
|
250 |
+
|
251 |
+
$classoptions = array(
|
252 |
+
'WHTM_PluginHTML' => array(
|
253 |
+
'keepcomments' => WHTM_Plugin::app()->getPopulateOption('html_keepcomments'),
|
254 |
+
),
|
255 |
+
);
|
256 |
+
|
257 |
+
$content = apply_filters('whm_filter_html_before_minify', $content);
|
258 |
+
|
259 |
+
// Run the classes!
|
260 |
+
foreach($classes as $name) {
|
261 |
+
$instance = new $name($content);
|
262 |
+
if( $instance->read($classoptions[$name]) ) {
|
263 |
+
$instance->minify();
|
264 |
+
$content = $instance->getContent();
|
265 |
+
}
|
266 |
+
unset($instance);
|
267 |
+
}
|
268 |
+
|
269 |
+
$content = apply_filters('whm_html_after_minify', $content);
|
270 |
+
|
271 |
+
return $content;
|
272 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
273 |
|
274 |
/**
|
275 |
* Remove Cache Status Messages
|
277 |
public function removeCacheMessage()
|
278 |
{
|
279 |
// For WP Super Cache
|
280 |
+
if( file_exists(WP_CONTENT_DIR . '/wp-cache-config.php') && function_exists('prune_super_cache') ) {
|
281 |
global $wp_super_cache_comments;
|
282 |
$wp_super_cache_comments = 0;
|
283 |
}
|
284 |
|
285 |
// For WP Fastest Cache
|
286 |
+
if( class_exists('WpFastestCache') ) {
|
287 |
+
define('WPFC_REMOVE_FOOTER_COMMENT', true);
|
288 |
}
|
289 |
|
290 |
// For WP Total Cache
|
291 |
+
if( function_exists('w3tc_pgcache_flush') ) {
|
292 |
+
add_filter('w3tc_footer_comment', '__return_empty_array');
|
293 |
}
|
294 |
}
|
295 |
|
components/minify-and-combine/admin/boot.php
CHANGED
@@ -48,12 +48,12 @@ add_filter("wbcr_clearfy_group_options", function ($options) {
|
|
48 |
$options[] = array(
|
49 |
'name' => 'js_optimize',
|
50 |
'title' => __('Optimize JavaScript Code?', 'minify-and-combine'),
|
51 |
-
'tags' => array('optimize_code', 'hide_my_wp')
|
52 |
);
|
53 |
$options[] = array(
|
54 |
'name' => 'js_aggregate',
|
55 |
'title' => __('Aggregate JS-files?', 'minify-and-combine'),
|
56 |
-
'tags' => array('optimize_code')
|
57 |
);
|
58 |
$options[] = array(
|
59 |
'name' => 'js_include_inline',
|
@@ -81,13 +81,13 @@ add_filter("wbcr_clearfy_group_options", function ($options) {
|
|
81 |
$options[] = array(
|
82 |
'name' => 'css_optimize',
|
83 |
'title' => __('Optimize CSS Code?', 'minify-and-combine'),
|
84 |
-
'tags' => array('optimize_code', 'hide_my_wp')
|
85 |
);
|
86 |
|
87 |
$options[] = array(
|
88 |
'name' => 'css_aggregate',
|
89 |
'title' => __('Aggregate CSS-files?', 'minify-and-combine'),
|
90 |
-
'tags' => array()
|
91 |
);
|
92 |
|
93 |
$options[] = array(
|
48 |
$options[] = array(
|
49 |
'name' => 'js_optimize',
|
50 |
'title' => __('Optimize JavaScript Code?', 'minify-and-combine'),
|
51 |
+
'tags' => array('optimize_performance', 'optimize_code', 'hide_my_wp')
|
52 |
);
|
53 |
$options[] = array(
|
54 |
'name' => 'js_aggregate',
|
55 |
'title' => __('Aggregate JS-files?', 'minify-and-combine'),
|
56 |
+
'tags' => array('optimize_performance', 'optimize_code')
|
57 |
);
|
58 |
$options[] = array(
|
59 |
'name' => 'js_include_inline',
|
81 |
$options[] = array(
|
82 |
'name' => 'css_optimize',
|
83 |
'title' => __('Optimize CSS Code?', 'minify-and-combine'),
|
84 |
+
'tags' => array('optimize_performance', 'optimize_code', 'hide_my_wp')
|
85 |
);
|
86 |
|
87 |
$options[] = array(
|
88 |
'name' => 'css_aggregate',
|
89 |
'title' => __('Aggregate CSS-files?', 'minify-and-combine'),
|
90 |
+
'tags' => array('optimize_performance')
|
91 |
);
|
92 |
|
93 |
$options[] = array(
|
components/minify-and-combine/admin/pages/class-pages-settings.php
CHANGED
@@ -9,7 +9,7 @@ if( !defined('ABSPATH') ) {
|
|
9 |
*
|
10 |
* @since 1.0.0
|
11 |
*/
|
12 |
-
class WMAC_MinifyAndCombineSettingsPage extends
|
13 |
|
14 |
/**
|
15 |
* {@inheritDoc}
|
@@ -50,14 +50,15 @@ class WMAC_MinifyAndCombineSettingsPage extends Wbcr_FactoryClearfy237_PageBase
|
|
50 |
/**
|
51 |
* WMAC_MinifyAndCombineSettingsPage constructor.
|
52 |
*
|
53 |
-
* @param \
|
54 |
*
|
55 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
56 |
*
|
57 |
*/
|
58 |
-
public function __construct(
|
59 |
{
|
60 |
-
$this->menu_title = __('
|
|
|
61 |
|
62 |
if( !defined('LOADING_MINIFY_AND_COMBINE_AS_ADDON') ) {
|
63 |
$this->internal = false;
|
@@ -78,17 +79,17 @@ class WMAC_MinifyAndCombineSettingsPage extends Wbcr_FactoryClearfy237_PageBase
|
|
78 |
*/
|
79 |
public function getMenuTitle()
|
80 |
{
|
81 |
-
return defined('LOADING_MINIFY_AND_COMBINE_AS_ADDON') ? __('
|
82 |
}
|
83 |
|
84 |
/**
|
85 |
* Requests assets (js and css) for the page.
|
86 |
*
|
87 |
-
* @param
|
88 |
-
* @param
|
89 |
*
|
90 |
* @return void
|
91 |
-
* @see
|
92 |
*
|
93 |
*/
|
94 |
public function assets($scripts, $styles)
|
@@ -130,299 +131,359 @@ class WMAC_MinifyAndCombineSettingsPage extends Wbcr_FactoryClearfy237_PageBase
|
|
130 |
|
131 |
$options[] = [
|
132 |
'type' => 'html',
|
133 |
-
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('
|
134 |
];
|
135 |
|
136 |
$options[] = [
|
137 |
'type' => 'checkbox',
|
138 |
'way' => 'buttons',
|
139 |
-
'name' => '
|
140 |
-
'title' => __('
|
141 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
142 |
-
'hint' => __('Minify JavaScript removes whitespace and comments to reduce the file size.', 'minify-and-combine'),
|
143 |
-
'default' => false,
|
144 |
-
'eventsOn' => [
|
145 |
-
'show' => '#wbcr-mac-optimize-js-fields,#wbcr-mac-optimization-danger-message-1'
|
146 |
-
],
|
147 |
-
'eventsOff' => [
|
148 |
-
'hide' => '#wbcr-mac-optimize-js-fields,#wbcr-mac-optimization-danger-message-1'
|
149 |
-
]
|
150 |
-
];
|
151 |
-
|
152 |
-
$mtf_checkbox = [
|
153 |
-
'type' => 'checkbox',
|
154 |
-
'way' => 'buttons',
|
155 |
-
'name' => 'move_js_to_footer',
|
156 |
-
'title' => __('Move js to footer?', 'minify-and-combine'),
|
157 |
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
158 |
-
|
159 |
-
'default' => false
|
160 |
-
'eventsOn' => [
|
161 |
-
'show' => '.factory-control-dont_move_jquery_to_footer, .factory-control-excluded_move_to_footer_scripts'
|
162 |
-
],
|
163 |
-
'eventsOff' => [
|
164 |
-
'hide' => '.factory-control-dont_move_jquery_to_footer, .factory-control-excluded_move_to_footer_scripts'
|
165 |
-
]
|
166 |
-
];
|
167 |
-
if( !($this->plugin->has_premium() && $this->plugin->premium->is_activate()) ) {
|
168 |
-
$mtf_checkbox['value'] = false;
|
169 |
-
$mtf_checkbox['cssClass'] = ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'];
|
170 |
-
}
|
171 |
-
|
172 |
-
$options[] = $mtf_checkbox;
|
173 |
-
|
174 |
-
$options[] = [
|
175 |
-
'type' => 'checkbox',
|
176 |
-
'name' => 'dont_move_jquery_to_footer',
|
177 |
-
'title' => "",
|
178 |
-
'hint' => __("Don't move jQuery to footer", 'minify-and-combine'),
|
179 |
-
'default' => true
|
180 |
-
];
|
181 |
-
$options[] = [
|
182 |
-
'type' => 'textarea',
|
183 |
-
'name' => 'excluded_move_to_footer_scripts',
|
184 |
-
'title' => "",
|
185 |
-
'hint' => __("A comma-separated list of scripts you want to exclude from being optimized, for example 'whatever.js, another.js' (without the quotes) to exclude those scripts from being aggregated and minimized by Мinify And Combine.", 'minify-and-combine'),
|
186 |
-
'default' => ''
|
187 |
];
|
188 |
|
189 |
$options[] = [
|
190 |
'type' => 'html',
|
191 |
-
'html' =>
|
192 |
];
|
193 |
|
194 |
-
|
195 |
-
'type' => 'html',
|
196 |
-
'html' => array( $this, 'optimizationDangerMessage1' )
|
197 |
-
);*/
|
198 |
-
|
199 |
-
$js_options[] = [
|
200 |
'type' => 'checkbox',
|
201 |
'way' => 'buttons',
|
202 |
-
'name' => '
|
203 |
-
'title' => __('
|
204 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => '
|
205 |
-
'hint' => __('
|
206 |
'default' => false,
|
207 |
'eventsOn' => [
|
208 |
-
'show' => '#wbcr-
|
209 |
],
|
210 |
'eventsOff' => [
|
211 |
-
'hide' => '#wbcr-
|
212 |
]
|
213 |
];
|
214 |
|
215 |
-
$
|
216 |
-
'type' => 'html',
|
217 |
-
'html' => [$this, 'optimizationDangerMessage2']
|
218 |
-
];
|
219 |
-
|
220 |
-
$js_options[] = [
|
221 |
'type' => 'checkbox',
|
222 |
'way' => 'buttons',
|
223 |
-
'name' => '
|
224 |
-
'title' => __('
|
225 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => '
|
226 |
-
'hint' => __('
|
227 |
'default' => false,
|
228 |
'eventsOn' => [
|
229 |
-
'show' => '#wbcr-mac-optimization-danger-message-
|
230 |
],
|
231 |
'eventsOff' => [
|
232 |
-
'hide' => '#wbcr-mac-optimization-danger-message-
|
233 |
]
|
234 |
];
|
235 |
|
236 |
-
$
|
237 |
'type' => 'html',
|
238 |
-
'html' => [$this, '
|
239 |
];
|
240 |
|
241 |
-
$
|
242 |
'type' => 'checkbox',
|
243 |
'way' => 'buttons',
|
244 |
-
'name' => '
|
245 |
-
'title' => __('
|
246 |
-
'layout' => ['hint-type' => 'icon'
|
247 |
-
'hint' => __('
|
248 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
];
|
250 |
|
251 |
-
$
|
252 |
'type' => 'textarea',
|
253 |
-
'name' => '
|
254 |
-
'title' => __('Exclude
|
255 |
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
256 |
-
'hint' => __('A comma-separated list of
|
257 |
-
'default' => '
|
258 |
-
];
|
259 |
-
|
260 |
-
$js_options[] = [
|
261 |
-
'type' => 'checkbox',
|
262 |
-
'way' => 'buttons',
|
263 |
-
'name' => 'js_trycatch',
|
264 |
-
'title' => __('Add try-catch wrapping?', 'minify-and-combine'),
|
265 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
266 |
-
'hint' => __('If your scripts break because of a JS-error, you might want to try this.', 'minify-and-combine'),
|
267 |
-
'default' => false
|
268 |
];
|
269 |
|
270 |
$options[] = [
|
271 |
-
'type' => '
|
272 |
-
'
|
273 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
274 |
];
|
275 |
|
276 |
$options[] = [
|
277 |
'type' => 'html',
|
278 |
-
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('
|
279 |
];
|
280 |
|
281 |
$options[] = [
|
282 |
'type' => 'checkbox',
|
283 |
'way' => 'buttons',
|
284 |
-
'name' => '
|
285 |
-
'title' => __('Optimize
|
286 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => '
|
287 |
-
'hint' => __('
|
288 |
'default' => false,
|
289 |
'eventsOn' => [
|
290 |
-
'show' => '#wbcr-
|
291 |
],
|
292 |
'eventsOff' => [
|
293 |
-
'hide' => '#wbcr-
|
294 |
]
|
295 |
];
|
296 |
|
297 |
-
$
|
298 |
'type' => 'checkbox',
|
299 |
'way' => 'buttons',
|
300 |
-
'name' => '
|
301 |
-
'title' => __('
|
302 |
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
303 |
-
'hint' => __('
|
304 |
'default' => false,
|
305 |
'eventsOn' => [
|
306 |
-
'show' => '
|
307 |
],
|
308 |
'eventsOff' => [
|
309 |
-
'hide' => '
|
310 |
]
|
311 |
];
|
|
|
|
|
|
|
|
|
312 |
|
313 |
-
|
314 |
'type' => 'html',
|
315 |
-
'html' => [$this, '
|
316 |
-
]
|
317 |
|
318 |
-
|
|
|
|
|
|
|
|
|
|
|
319 |
'type' => 'checkbox',
|
320 |
'way' => 'buttons',
|
321 |
-
'name' => '
|
322 |
-
'title' => __('
|
323 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => '
|
324 |
-
'hint' => __('
|
325 |
'default' => false,
|
326 |
'eventsOn' => [
|
327 |
-
'show' => '#wbcr-mac-optimization-danger-message-
|
328 |
],
|
329 |
'eventsOff' => [
|
330 |
-
'hide' => '#wbcr-mac-optimization-danger-message-
|
331 |
]
|
332 |
];
|
333 |
|
334 |
-
$
|
335 |
'type' => 'html',
|
336 |
-
'html' => [$this, '
|
337 |
-
];
|
338 |
-
|
339 |
-
$css_options[] = [
|
340 |
-
'type' => 'checkbox',
|
341 |
-
'way' => 'buttons',
|
342 |
-
'name' => 'css_datauris',
|
343 |
-
'title' => __('Generate data: URIs for images?', 'minify-and-combine'),
|
344 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
345 |
-
'hint' => __('Enable this to include small background-images in the CSS itself instead of as separate downloads.', 'minify-and-combine'),
|
346 |
-
'default' => false
|
347 |
-
];
|
348 |
-
|
349 |
-
$css_options[] = [
|
350 |
-
'type' => 'checkbox',
|
351 |
-
'way' => 'buttons',
|
352 |
-
'name' => 'css_defer',
|
353 |
-
'title' => __('Inline and Defer CSS?', 'minify-and-combine'),
|
354 |
-
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
355 |
-
'hint' => __('Inline "above the fold CSS" while loading the main auto optimized CSS only after page load. Check the FAQ for more info.
|
356 |
-
This can be fully automated for different types of pages with the Мinify And Combine CriticalCSS Power-Up.', 'minify-and-combine'),
|
357 |
-
'default' => false
|
358 |
];
|
359 |
|
360 |
-
$
|
361 |
'type' => 'checkbox',
|
362 |
'way' => 'buttons',
|
363 |
-
'name' => '
|
364 |
-
'title' => __('
|
365 |
-
'layout' => ['hint-type' => 'icon'
|
366 |
-
'hint' => __('
|
|
|
367 |
'default' => false
|
368 |
];
|
369 |
|
370 |
-
$
|
371 |
'type' => 'textarea',
|
372 |
-
'name' => '
|
373 |
-
'title' => __('Exclude
|
374 |
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
375 |
-
'hint' => __('A comma-separated list of
|
376 |
-
'default' => '
|
377 |
];
|
378 |
|
379 |
-
|
380 |
'type' => 'div',
|
381 |
-
'id' => 'wbcr-
|
382 |
-
'items' => $
|
383 |
-
]
|
384 |
-
|
385 |
-
$options[] = [
|
386 |
-
'type' => 'html',
|
387 |
-
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('Critical CSS', 'minify-and-combine') . '</strong><p></p></div>'
|
388 |
-
];
|
389 |
|
390 |
$options[] = [
|
391 |
-
'type' => '
|
392 |
-
'name' => '
|
393 |
-
'title' => __('
|
394 |
-
'
|
395 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
396 |
];
|
397 |
|
398 |
-
|
399 |
-
'type' => '
|
400 |
-
'
|
401 |
-
'
|
402 |
-
|
403 |
-
'default' => ''
|
404 |
-
];
|
405 |
|
406 |
-
|
407 |
'type' => 'html',
|
408 |
-
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('
|
409 |
-
]
|
410 |
|
411 |
// Произвольный html код
|
412 |
-
|
413 |
'type' => 'html',
|
414 |
'html' => [$this, 'cacheInfo']
|
415 |
-
]
|
416 |
|
417 |
$formOptions = [];
|
418 |
|
419 |
$formOptions[] = [
|
420 |
'type' => 'form-group',
|
421 |
-
'items' => $options,
|
422 |
//'cssClass' => 'postbox'
|
423 |
];
|
424 |
|
425 |
-
|
|
|
|
|
|
|
426 |
}
|
427 |
|
428 |
public function cacheInfo()
|
9 |
*
|
10 |
* @since 1.0.0
|
11 |
*/
|
12 |
+
class WMAC_MinifyAndCombineSettingsPage extends Wbcr_FactoryClearfy240_PageBase {
|
13 |
|
14 |
/**
|
15 |
* {@inheritDoc}
|
50 |
/**
|
51 |
* WMAC_MinifyAndCombineSettingsPage constructor.
|
52 |
*
|
53 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
54 |
*
|
55 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
56 |
*
|
57 |
*/
|
58 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
59 |
{
|
60 |
+
$this->menu_title = __('Optimize CSS & JS', 'minify-and-combine');
|
61 |
+
$this->page_menu_short_description = __('Optimize CSS & JS', 'minify-and-combine');
|
62 |
|
63 |
if( !defined('LOADING_MINIFY_AND_COMBINE_AS_ADDON') ) {
|
64 |
$this->internal = false;
|
79 |
*/
|
80 |
public function getMenuTitle()
|
81 |
{
|
82 |
+
return defined('LOADING_MINIFY_AND_COMBINE_AS_ADDON') ? __('Optimize CSS & JS', 'minify-and-combine') : __('General', 'minify-and-combine');
|
83 |
}
|
84 |
|
85 |
/**
|
86 |
* Requests assets (js and css) for the page.
|
87 |
*
|
88 |
+
* @param Wbcr_Factory448_ScriptList $scripts
|
89 |
+
* @param Wbcr_Factory448_StyleList $styles
|
90 |
*
|
91 |
* @return void
|
92 |
+
* @see Wbcr_FactoryPages447_AdminPage
|
93 |
*
|
94 |
*/
|
95 |
public function assets($scripts, $styles)
|
131 |
|
132 |
$options[] = [
|
133 |
'type' => 'html',
|
134 |
+
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('Misc Options', 'minify-and-combine') . '</strong><p></p></div>'
|
135 |
];
|
136 |
|
137 |
$options[] = [
|
138 |
'type' => 'checkbox',
|
139 |
'way' => 'buttons',
|
140 |
+
'name' => 'optimize_scripts_for_logged',
|
141 |
+
'title' => __('Also optimize JS/CSS for logged in editors/administrators?', 'minify-and-combine'),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
143 |
+
'hint' => __('By default plugin is also active for logged on editors/administrators, uncheck this option if you don\'t want Autoptimize to optimize when logged in e.g. to use a pagebuilder.', 'minify-and-combine'),
|
144 |
+
'default' => false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
];
|
146 |
|
147 |
$options[] = [
|
148 |
'type' => 'html',
|
149 |
+
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('Optimize CSS', 'minify-and-combine') . '</strong><p></p></div>'
|
150 |
];
|
151 |
|
152 |
+
$options[] = [
|
|
|
|
|
|
|
|
|
|
|
153 |
'type' => 'checkbox',
|
154 |
'way' => 'buttons',
|
155 |
+
'name' => 'css_optimize',
|
156 |
+
'title' => __('Optimize CSS Code?', 'minify-and-combine'),
|
157 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'green'],
|
158 |
+
'hint' => __('If your scripts break because of a JS-error, you might want to try this.', 'minify-and-combine'),
|
159 |
'default' => false,
|
160 |
'eventsOn' => [
|
161 |
+
'show' => '#wbcr-clr-optimize-css-fields'
|
162 |
],
|
163 |
'eventsOff' => [
|
164 |
+
'hide' => '#wbcr-clr-optimize-css-fields'
|
165 |
]
|
166 |
];
|
167 |
|
168 |
+
$options[] = [
|
|
|
|
|
|
|
|
|
|
|
169 |
'type' => 'checkbox',
|
170 |
'way' => 'buttons',
|
171 |
+
'name' => 'css_aggregate',
|
172 |
+
'title' => __('Aggregate CSS-files?', 'minify-and-combine'),
|
173 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'red'],
|
174 |
+
'hint' => __('Aggregate all linked CSS-files? If this option is off, the individual CSS-files will remain in place but will be minified.', 'minify-and-combine'),
|
175 |
'default' => false,
|
176 |
'eventsOn' => [
|
177 |
+
'show' => '#wbcr-mac-optimization-danger-message-4'
|
178 |
],
|
179 |
'eventsOff' => [
|
180 |
+
'hide' => '#wbcr-mac-optimization-danger-message-4'
|
181 |
]
|
182 |
];
|
183 |
|
184 |
+
$options[] = [
|
185 |
'type' => 'html',
|
186 |
+
'html' => [$this, 'optimizationDangerMessage4']
|
187 |
];
|
188 |
|
189 |
+
$options[] = [
|
190 |
'type' => 'checkbox',
|
191 |
'way' => 'buttons',
|
192 |
+
'name' => 'remove_style_version',
|
193 |
+
'title' => __('Remove Version from Stylesheet', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
|
194 |
+
'layout' => ['hint-type' => 'icon'],
|
195 |
+
'hint' => __('To make it more difficult for others to hack your website you can remove the WordPress version number from your site, your css and js. Without that number it\'s not possible to see if you run not the current version to exploit bugs from the older versions. <br><br>
|
196 |
+
Additionally it can improve the loading speed of your site, because without query strings in the URL the css and js files can be cached.', 'clearfy') . '<br><br><b>Clearfy: </b>' . __('Removes the wordpress version number from stylesheets (not logged in user only).', 'clearfy'),
|
197 |
+
'default' => false,
|
198 |
+
'eventsOn' => array(
|
199 |
+
'show' => '.factory-control-disable_remove_style_version_for_auth_users'
|
200 |
+
),
|
201 |
+
'eventsOff' => array(
|
202 |
+
'hide' => '.factory-control-disable_remove_style_version_for_auth_users'
|
203 |
+
)
|
204 |
];
|
205 |
|
206 |
+
$options[] = [
|
207 |
'type' => 'textarea',
|
208 |
+
'name' => 'css_exclude',
|
209 |
+
'title' => __('Exclude CSS from Мinify And Combine:', 'minify-and-combine'),
|
210 |
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
211 |
+
'hint' => __('A comma-separated list of CSS you want to exclude from being optimized.', 'minify-and-combine'),
|
212 |
+
'default' => 'wp-content/cache/, wp-content/uploads/, admin-bar.min.css, dashicons.min.css'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
];
|
214 |
|
215 |
$options[] = [
|
216 |
+
'type' => 'more-link',
|
217 |
+
'name' => 'css-group',
|
218 |
+
'title' => __('Advanced options', 'clearfy'),
|
219 |
+
'count' => 6,
|
220 |
+
'items' => [
|
221 |
+
[
|
222 |
+
'type' => 'checkbox',
|
223 |
+
'way' => 'buttons',
|
224 |
+
'name' => 'css_include_inline',
|
225 |
+
'title' => __('Also aggregate inline CSS?', 'minify-and-combine'),
|
226 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
227 |
+
'hint' => __('Check this option for Мinify And Combine to also aggregate CSS in the HTML.', 'minify-and-combine'),
|
228 |
+
'default' => false,
|
229 |
+
'eventsOn' => [
|
230 |
+
'show' => '#wbcr-mac-optimization-danger-message-5'
|
231 |
+
],
|
232 |
+
'eventsOff' => [
|
233 |
+
'hide' => '#wbcr-mac-optimization-danger-message-5'
|
234 |
+
]
|
235 |
+
],
|
236 |
+
|
237 |
+
[
|
238 |
+
'type' => 'html',
|
239 |
+
'html' => [$this, 'optimizationDangerMessage5']
|
240 |
+
],
|
241 |
+
|
242 |
+
[
|
243 |
+
'type' => 'checkbox',
|
244 |
+
'way' => 'buttons',
|
245 |
+
'name' => 'css_datauris',
|
246 |
+
'title' => __('Generate data: URIs for images?', 'minify-and-combine'),
|
247 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
248 |
+
'hint' => __('Enable this to include small background-images in the CSS itself instead of as separate downloads.', 'minify-and-combine'),
|
249 |
+
'default' => false
|
250 |
+
],
|
251 |
+
|
252 |
+
[
|
253 |
+
'type' => 'checkbox',
|
254 |
+
'way' => 'buttons',
|
255 |
+
'name' => 'css_defer',
|
256 |
+
'title' => __('Inline and Defer CSS?', 'minify-and-combine'),
|
257 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
258 |
+
'hint' => __('Inline "above the fold CSS" while loading the main auto optimized CSS only after page load. Check the FAQ for more info.
|
259 |
+
This can be fully automated for different types of pages with the Мinify And Combine CriticalCSS Power-Up.', 'minify-and-combine'),
|
260 |
+
'default' => false
|
261 |
+
],
|
262 |
+
|
263 |
+
[
|
264 |
+
'type' => 'checkbox',
|
265 |
+
'way' => 'buttons',
|
266 |
+
'name' => 'css_inline',
|
267 |
+
'title' => __('Inline all CSS?', 'minify-and-combine'),
|
268 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
269 |
+
'hint' => __('Inlining all CSS can improve performance for sites with a low pageviews/ visitor-rate, but may slow down performance otherwise.', 'minify-and-combine'),
|
270 |
+
'default' => false
|
271 |
+
],
|
272 |
+
|
273 |
+
/*[
|
274 |
+
'type' => 'html',
|
275 |
+
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('Critical CSS', 'minify-and-combine') . '</strong><p></p></div>'
|
276 |
+
],*/
|
277 |
+
|
278 |
+
[
|
279 |
+
'type' => 'textarea',
|
280 |
+
'name' => 'css_critical',
|
281 |
+
'title' => __('Critical CSS files:', 'minify-and-combine'),
|
282 |
+
'hint' => __('A comma-separated list of Critical CSS files. (You can use the * mask in file names. * - these are any characters.)', 'minify-and-combine'),
|
283 |
+
'htmlAttrs' => ['placeholder'=>'style.css, themes/*/style.css, style.min.css, themes/*/style.min.css'],
|
284 |
+
'default' => ''
|
285 |
+
],
|
286 |
+
|
287 |
+
[
|
288 |
+
'type' => 'textarea',
|
289 |
+
'name' => 'css_critical_style',
|
290 |
+
'title' => __('Critical CSS code:', 'minify-and-combine'),
|
291 |
+
'hint' => htmlspecialchars(__('Add critical CSS here. We will insert it into <style> tags in your <head> section of each page.', 'minify-and-combine')),
|
292 |
+
'default' => ''
|
293 |
+
]
|
294 |
+
|
295 |
+
]
|
296 |
];
|
297 |
|
298 |
$options[] = [
|
299 |
'type' => 'html',
|
300 |
+
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('Optimize JavaScript', 'minify-and-combine') . '</strong><p></p></div>'
|
301 |
];
|
302 |
|
303 |
$options[] = [
|
304 |
'type' => 'checkbox',
|
305 |
'way' => 'buttons',
|
306 |
+
'name' => 'js_optimize',
|
307 |
+
'title' => __('Optimize JavaScript Code?', 'minify-and-combine'),
|
308 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'green'],
|
309 |
+
'hint' => __('Minify JavaScript removes whitespace and comments to reduce the file size.', 'minify-and-combine'),
|
310 |
'default' => false,
|
311 |
'eventsOn' => [
|
312 |
+
'show' => '#wbcr-mac-optimize-js-fields,#wbcr-mac-optimization-danger-message-1'
|
313 |
],
|
314 |
'eventsOff' => [
|
315 |
+
'hide' => '#wbcr-mac-optimize-js-fields,#wbcr-mac-optimization-danger-message-1'
|
316 |
]
|
317 |
];
|
318 |
|
319 |
+
$mtf_checkbox = [
|
320 |
'type' => 'checkbox',
|
321 |
'way' => 'buttons',
|
322 |
+
'name' => 'move_js_to_footer',
|
323 |
+
'title' => __('Move js to footer?', 'minify-and-combine'),
|
324 |
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
325 |
+
//'hint' => __('Optimize JavaScript Code.', 'minify-and-combine'),
|
326 |
'default' => false,
|
327 |
'eventsOn' => [
|
328 |
+
'show' => '.factory-control-dont_move_jquery_to_footer, .factory-control-excluded_move_to_footer_scripts'
|
329 |
],
|
330 |
'eventsOff' => [
|
331 |
+
'hide' => '.factory-control-dont_move_jquery_to_footer, .factory-control-excluded_move_to_footer_scripts'
|
332 |
]
|
333 |
];
|
334 |
+
if( !($this->plugin->has_premium() && $this->plugin->premium->is_activate()) ) {
|
335 |
+
$mtf_checkbox['value'] = false;
|
336 |
+
$mtf_checkbox['cssClass'] = ['factory-checkbox-disabled wbcr-factory-clearfy-icon-pro'];
|
337 |
+
}
|
338 |
|
339 |
+
/*$options[] = [
|
340 |
'type' => 'html',
|
341 |
+
'html' => [$this, 'move_to_footer_js_options']
|
342 |
+
];*/
|
343 |
|
344 |
+
/*$options[] = array(
|
345 |
+
'type' => 'html',
|
346 |
+
'html' => array( $this, 'optimizationDangerMessage1' )
|
347 |
+
);*/
|
348 |
+
|
349 |
+
$options[] = [
|
350 |
'type' => 'checkbox',
|
351 |
'way' => 'buttons',
|
352 |
+
'name' => 'js_aggregate',
|
353 |
+
'title' => __('Aggregate JS-files?', 'minify-and-combine'),
|
354 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'red'],
|
355 |
+
'hint' => __('Aggregate all linked JS-files to have them loaded non-render blocking? If this option is off, the individual JS-files will remain in place but will be minified.', 'minify-and-combine'),
|
356 |
'default' => false,
|
357 |
'eventsOn' => [
|
358 |
+
'show' => '#wbcr-mac-optimization-danger-message-2'
|
359 |
],
|
360 |
'eventsOff' => [
|
361 |
+
'hide' => '#wbcr-mac-optimization-danger-message-2'
|
362 |
]
|
363 |
];
|
364 |
|
365 |
+
$options[] = [
|
366 |
'type' => 'html',
|
367 |
+
'html' => [$this, 'optimizationDangerMessage2']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
368 |
];
|
369 |
|
370 |
+
$options[] = [
|
371 |
'type' => 'checkbox',
|
372 |
'way' => 'buttons',
|
373 |
+
'name' => 'remove_js_version',
|
374 |
+
'title' => __('Remove Version from Script', 'clearfy') . ' <span class="wbcr-clearfy-recomended-text">(' . __('Recommended', 'clearfy') . ')</span>',
|
375 |
+
'layout' => ['hint-type' => 'icon'],
|
376 |
+
'hint' => __('To make it more difficult for others to hack your website you can remove the WordPress version number from your site, your css and js. Without that number it\'s not possible to see if you run not the current version to exploit bugs from the older versions. <br><br>
|
377 |
+
Additionally it can improve the loading speed of your site, because without query strings in the URL the css and js files can be cached.', 'clearfy') . '<br><br><b>Clearfy: </b>' . __('Removes wordpress version number from scripts (not logged in user only).', 'clearfy'),
|
378 |
'default' => false
|
379 |
];
|
380 |
|
381 |
+
$options[] = [
|
382 |
'type' => 'textarea',
|
383 |
+
'name' => 'js_exclude',
|
384 |
+
'title' => __('Exclude scripts from Мinify And Combine:', 'minify-and-combine'),
|
385 |
//'layout' => array('hint-type' => 'icon', 'hint-icon-color' => 'grey'),
|
386 |
+
'hint' => __('A comma-separated list of scripts you want to exclude from being optimized, for example \'whatever.js, another.js\' (without the quotes) to exclude those scripts from being aggregated and minimized by Мinify And Combine.', 'minify-and-combine'),
|
387 |
+
'default' => 'seal.js, js/jquery/jquery.js'
|
388 |
];
|
389 |
|
390 |
+
/*$options[] = [
|
391 |
'type' => 'div',
|
392 |
+
'id' => 'wbcr-mac-optimize-js-fields',
|
393 |
+
'items' => $js_options
|
394 |
+
];*/
|
|
|
|
|
|
|
|
|
|
|
395 |
|
396 |
$options[] = [
|
397 |
+
'type' => 'more-link',
|
398 |
+
'name' => 'js-group',
|
399 |
+
'title' => __('Advanced options', 'clearfy'),
|
400 |
+
'count' => 4,
|
401 |
+
'items' => [
|
402 |
+
[
|
403 |
+
'type' => 'checkbox',
|
404 |
+
'way' => 'buttons',
|
405 |
+
'name' => 'js_include_inline',
|
406 |
+
'title' => __('Also aggregate inline JS?', 'minify-and-combine'),
|
407 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
408 |
+
'hint' => __('Let Мinify And Combine also extract JS from the HTML. Warning: this can make Мinify And Combine\'s cache size grow quickly, so only enable this if you know what you\'re doing.', 'minify-and-combine'),
|
409 |
+
'default' => false,
|
410 |
+
'eventsOn' => [
|
411 |
+
'show' => '#wbcr-mac-optimization-danger-message-3'
|
412 |
+
],
|
413 |
+
'eventsOff' => [
|
414 |
+
'hide' => '#wbcr-mac-optimization-danger-message-3'
|
415 |
+
]
|
416 |
+
],
|
417 |
+
|
418 |
+
[
|
419 |
+
'type' => 'html',
|
420 |
+
'html' => [$this, 'optimizationDangerMessage3']
|
421 |
+
],
|
422 |
+
$mtf_checkbox,
|
423 |
+
[
|
424 |
+
'type' => 'checkbox',
|
425 |
+
'name' => 'dont_move_jquery_to_footer',
|
426 |
+
'title' => "",
|
427 |
+
'hint' => __("Don't move jQuery to footer", 'minify-and-combine'),
|
428 |
+
'default' => true
|
429 |
+
],
|
430 |
+
[
|
431 |
+
'type' => 'textarea',
|
432 |
+
'name' => 'excluded_move_to_footer_scripts',
|
433 |
+
'title' => "",
|
434 |
+
'hint' => __("A comma-separated list of scripts you want to exclude from being optimized, for example 'whatever.js, another.js' (without the quotes) to exclude those scripts from being aggregated and minimized by Мinify And Combine.", 'minify-and-combine'),
|
435 |
+
'default' => ''
|
436 |
+
],
|
437 |
+
[
|
438 |
+
'type' => 'checkbox',
|
439 |
+
'way' => 'buttons',
|
440 |
+
'name' => 'js_forcehead',
|
441 |
+
'title' => __('Force JavaScript in <head>?', 'minify-and-combine'),
|
442 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
443 |
+
'hint' => __('Load JavaScript early, this can potentially fix some JS-errors, but makes the JS render blocking.', 'minify-and-combine'),
|
444 |
+
'default' => false
|
445 |
+
],
|
446 |
+
[
|
447 |
+
'type' => 'checkbox',
|
448 |
+
'way' => 'buttons',
|
449 |
+
'name' => 'js_trycatch',
|
450 |
+
'title' => __('Add try-catch wrapping?', 'minify-and-combine'),
|
451 |
+
'layout' => ['hint-type' => 'icon', 'hint-icon-color' => 'grey'],
|
452 |
+
'hint' => __('If your scripts break because of a JS-error, you might want to try this.', 'minify-and-combine'),
|
453 |
+
'default' => false
|
454 |
+
]
|
455 |
+
]
|
456 |
];
|
457 |
|
458 |
+
/*$options[] = [
|
459 |
+
'type' => 'div',
|
460 |
+
'id' => 'wbcr-clr-optimize-css-fields',
|
461 |
+
'items' => $css_options
|
462 |
+
];*/
|
|
|
|
|
463 |
|
464 |
+
/*$options[] = [
|
465 |
'type' => 'html',
|
466 |
+
'html' => '<div class="wbcr-factory-page-group-header"><strong>' . __('JS & CSS files cache details', 'minify-and-combine') . '</strong><p></p></div>'
|
467 |
+
];*/
|
468 |
|
469 |
// Произвольный html код
|
470 |
+
/*$options[] = [
|
471 |
'type' => 'html',
|
472 |
'html' => [$this, 'cacheInfo']
|
473 |
+
];*/
|
474 |
|
475 |
$formOptions = [];
|
476 |
|
477 |
$formOptions[] = [
|
478 |
'type' => 'form-group',
|
479 |
+
'items' => apply_filters('wmac/pages/settings_form_options', $options),
|
480 |
//'cssClass' => 'postbox'
|
481 |
];
|
482 |
|
483 |
+
/**
|
484 |
+
* @since 1.1.1 - является устаревшим
|
485 |
+
*/
|
486 |
+
return wbcr_factory_448_apply_filters_deprecated('wbcr_mac_settings_form_options', [$formOptions], '1.1.1', 'wmac/pages/settings_form_options');
|
487 |
}
|
488 |
|
489 |
public function cacheInfo()
|
components/minify-and-combine/includes/class-plugin.php
CHANGED
@@ -13,11 +13,11 @@ if( !defined('ABSPATH') ) {
|
|
13 |
}
|
14 |
|
15 |
|
16 |
-
class WMAC_Plugin extends
|
17 |
|
18 |
/**
|
19 |
* @see self::app()
|
20 |
-
* @var
|
21 |
*/
|
22 |
private static $app;
|
23 |
|
@@ -56,7 +56,7 @@ class WMAC_Plugin extends Wbcr_Factory446_Plugin {
|
|
56 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
57 |
* классам.
|
58 |
*
|
59 |
-
* @return \
|
60 |
*/
|
61 |
public static function app()
|
62 |
{
|
13 |
}
|
14 |
|
15 |
|
16 |
+
class WMAC_Plugin extends Wbcr_Factory448_Plugin {
|
17 |
|
18 |
/**
|
19 |
* @see self::app()
|
20 |
+
* @var Wbcr_Factory448_Plugin
|
21 |
*/
|
22 |
private static $app;
|
23 |
|
56 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
57 |
* классам.
|
58 |
*
|
59 |
+
* @return \Wbcr_Factory448_Plugin|\WCM_Plugin
|
60 |
*/
|
61 |
public static function app()
|
62 |
{
|
components/minify-and-combine/includes/classes/class-cache.php
CHANGED
@@ -385,7 +385,7 @@ class WMAC_PluginCache {
|
|
385 |
}
|
386 |
}
|
387 |
add_action( 'shutdown', 'wmac_do_cachepurged_action', 11 );
|
388 |
-
add_action( 'wmac_action_cachepurged', [ '
|
389 |
}
|
390 |
|
391 |
// Warm cache (part of speedupper)!
|
385 |
}
|
386 |
}
|
387 |
add_action( 'shutdown', 'wmac_do_cachepurged_action', 11 );
|
388 |
+
add_action( 'wmac_action_cachepurged', [ 'WbcrFactoryClearfy240_Helpers', 'flushPageCache' ], 10, 0 );
|
389 |
}
|
390 |
|
391 |
// Warm cache (part of speedupper)!
|
components/minify-and-combine/includes/classes/class-main.php
CHANGED
@@ -215,6 +215,11 @@ class WMAC_PluginMain {
|
|
215 |
}
|
216 |
}
|
217 |
|
|
|
|
|
|
|
|
|
|
|
218 |
// Allows blocking of auto optimization on your own terms regardless of above decisions.
|
219 |
$wmac_noptimize = (bool) apply_filters( 'wmac_filter_noptimize', $wmac_noptimize );
|
220 |
|
215 |
}
|
216 |
}
|
217 |
|
218 |
+
// If setting says not to optimize logged in user and user is logged in...
|
219 |
+
if( false === $wmac_noptimize && !WMAC_Plugin::app()->getPopulateOption('optimize_scripts_for_logged') && is_user_logged_in() && current_user_can('edit_posts') ) {
|
220 |
+
$wmac_noptimize = true;
|
221 |
+
}
|
222 |
+
|
223 |
// Allows blocking of auto optimization on your own terms regardless of above decisions.
|
224 |
$wmac_noptimize = (bool) apply_filters( 'wmac_filter_noptimize', $wmac_noptimize );
|
225 |
|
components/minify-and-combine/minify-and-combine.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* Text Domain: minify-and-combine
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
/*
|
@@ -59,15 +59,15 @@ $wmac_plugin_info = array(
|
|
59 |
|
60 |
// FRAMEWORK MODULES
|
61 |
'load_factory_modules' => array(
|
62 |
-
array( 'libs/factory/bootstrap', '
|
63 |
-
array( 'libs/factory/forms', '
|
64 |
-
array( 'libs/factory/pages', '
|
65 |
-
array( 'libs/factory/clearfy', '
|
66 |
-
array( 'libs/factory/adverts', '
|
67 |
)
|
68 |
);
|
69 |
|
70 |
-
$wmac_compatibility = new
|
71 |
'plugin_already_activate' => defined( 'WMAC_PLUGIN_ACTIVE' ),
|
72 |
'required_php_version' => '5.4',
|
73 |
'required_wp_version' => '4.2.0',
|
8 |
* Text Domain: minify-and-combine
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_448_VERSION
|
12 |
*/
|
13 |
|
14 |
/*
|
59 |
|
60 |
// FRAMEWORK MODULES
|
61 |
'load_factory_modules' => array(
|
62 |
+
array( 'libs/factory/bootstrap', 'factory_bootstrap_448', 'admin' ),
|
63 |
+
array( 'libs/factory/forms', 'factory_forms_445', 'admin' ),
|
64 |
+
array( 'libs/factory/pages', 'factory_pages_447', 'admin' ),
|
65 |
+
array( 'libs/factory/clearfy', 'factory_clearfy_240', 'all' ),
|
66 |
+
array( 'libs/factory/adverts', 'factory_adverts_126', 'admin')
|
67 |
)
|
68 |
);
|
69 |
|
70 |
+
$wmac_compatibility = new Wbcr_Factory448_Requirements( __FILE__, array_merge( $wmac_plugin_info, array(
|
71 |
'plugin_already_activate' => defined( 'WMAC_PLUGIN_ACTIVE' ),
|
72 |
'required_php_version' => '5.4',
|
73 |
'required_wp_version' => '4.2.0',
|
components/updates-manager/admin/activation.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
*
|
6 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 09.09.2017, Webcraftic
|
8 |
-
* @see
|
9 |
*/
|
10 |
|
11 |
// Exit if accessed directly
|
@@ -13,7 +13,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
-
class WUPM_Activation extends
|
17 |
|
18 |
/**
|
19 |
* Runs activation actions.
|
5 |
*
|
6 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 09.09.2017, Webcraftic
|
8 |
+
* @see Factory448_Activator
|
9 |
*/
|
10 |
|
11 |
// Exit if accessed directly
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
class WUPM_Activation extends Wbcr_Factory448_Activator {
|
17 |
|
18 |
/**
|
19 |
* Runs activation actions.
|
components/updates-manager/admin/assets/js/ajax-components.js
CHANGED
@@ -59,15 +59,15 @@ jQuery(function($) {
|
|
59 |
|
60 |
if( !response || !response.success ) {
|
61 |
if( response.data.error_message ) {
|
62 |
-
$.
|
63 |
}
|
64 |
return false;
|
65 |
}
|
66 |
|
67 |
-
/*var noticeId = $.
|
68 |
|
69 |
setTimeout(function() {
|
70 |
-
$.
|
71 |
}, 5000);*/
|
72 |
},
|
73 |
error: function(xhr, ajaxOptions, thrownError) {
|
@@ -75,7 +75,7 @@ jQuery(function($) {
|
|
75 |
console.log(xhr.responseText);
|
76 |
console.log(thrownError);
|
77 |
|
78 |
-
$.
|
79 |
}
|
80 |
});
|
81 |
});
|
59 |
|
60 |
if( !response || !response.success ) {
|
61 |
if( response.data.error_message ) {
|
62 |
+
$.wbcr_factory_clearfy_240.app.showNotice('Error: [' + response.data.error_message + ']', 'danger');
|
63 |
}
|
64 |
return false;
|
65 |
}
|
66 |
|
67 |
+
/*var noticeId = $.wbcr_factory_clearfy_240.app.showNotice('Settings successfully updated', 'success');
|
68 |
|
69 |
setTimeout(function() {
|
70 |
+
$.wbcr_factory_clearfy_240.app.hideNotice(noticeId);
|
71 |
}, 5000);*/
|
72 |
},
|
73 |
error: function(xhr, ajaxOptions, thrownError) {
|
75 |
console.log(xhr.responseText);
|
76 |
console.log(thrownError);
|
77 |
|
78 |
+
$.wbcr_factory_clearfy_240.app.showNotice('Error: [' + thrownError + '] Status: [' + xhr.status + '] Error massage: [' + xhr.responseText + ']', 'danger');
|
79 |
}
|
80 |
});
|
81 |
});
|
components/updates-manager/admin/boot.php
CHANGED
@@ -48,7 +48,7 @@ if ( ! defined( 'LOADING_UPDATES_MANAGER_AS_ADDON' ) ) {
|
|
48 |
return $page_url;
|
49 |
}
|
50 |
|
51 |
-
add_filter( '
|
52 |
|
53 |
/**
|
54 |
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
48 |
return $page_url;
|
49 |
}
|
50 |
|
51 |
+
add_filter( 'wbcr_factory_pages_447_imppage_rating_widget_url', 'wbcr_upm_rating_widget_url', 10, 2 );
|
52 |
|
53 |
/**
|
54 |
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
components/updates-manager/admin/includes/class-abstract-filters.php
CHANGED
@@ -14,7 +14,7 @@ abstract class WUPM_AbstractFilters {
|
|
14 |
protected $is_disable_translation_updates;
|
15 |
|
16 |
|
17 |
-
function __construct(
|
18 |
$this->plugin = $plugin;
|
19 |
$this->load();
|
20 |
}
|
14 |
protected $is_disable_translation_updates;
|
15 |
|
16 |
|
17 |
+
function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
18 |
$this->plugin = $plugin;
|
19 |
$this->load();
|
20 |
}
|
components/updates-manager/admin/pages/class-page-advanced.php
CHANGED
@@ -16,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
-
class WUPM_AdvancedPage extends
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
@@ -66,9 +66,9 @@ class WUPM_AdvancedPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
66 |
*
|
67 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
68 |
*
|
69 |
-
* @param \
|
70 |
*/
|
71 |
-
public function __construct(
|
72 |
$this->menu_title = __( 'Advanced', 'webcraftic-updates-manager' );
|
73 |
|
74 |
parent::__construct( $plugin );
|
@@ -79,8 +79,8 @@ class WUPM_AdvancedPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
79 |
*
|
80 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
81 |
*
|
82 |
-
* @param \
|
83 |
-
* @param \
|
84 |
*/
|
85 |
public function assets( $scripts, $styles ) {
|
86 |
parent::assets( $scripts, $styles );
|
16 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
+
class WUPM_AdvancedPage extends Wbcr_FactoryClearfy240_PageBase {
|
20 |
|
21 |
/**
|
22 |
* {@inheritDoc}
|
66 |
*
|
67 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
68 |
*
|
69 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
70 |
*/
|
71 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
72 |
$this->menu_title = __( 'Advanced', 'webcraftic-updates-manager' );
|
73 |
|
74 |
parent::__construct( $plugin );
|
79 |
*
|
80 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
81 |
*
|
82 |
+
* @param \Wbcr_Factory448_ScriptList $scripts
|
83 |
+
* @param \Wbcr_Factory448_StyleList $styles
|
84 |
*/
|
85 |
public function assets( $scripts, $styles ) {
|
86 |
parent::assets( $scripts, $styles );
|
components/updates-manager/admin/pages/class-page-more-features.php
CHANGED
@@ -16,6 +16,6 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
-
class WUPM_MoreFeaturesPage extends
|
20 |
|
21 |
}
|
16 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
+
class WUPM_MoreFeaturesPage extends Wbcr_FactoryClearfy240_MoreFeaturesPage {
|
20 |
|
21 |
}
|
components/updates-manager/admin/pages/class-page-plugins.php
CHANGED
@@ -16,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
16 |
*
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
-
class WUPM_PluginsPage extends
|
20 |
|
21 |
/**
|
22 |
*{@inheritDoc}
|
@@ -83,9 +83,9 @@ class WUPM_PluginsPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
83 |
*
|
84 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
85 |
*
|
86 |
-
* @param \
|
87 |
*/
|
88 |
-
public function __construct(
|
89 |
$this->menu_title = __( 'Plugins', 'webcraftic-updates-manager' );
|
90 |
|
91 |
parent::__construct( $plugin );
|
@@ -121,8 +121,8 @@ class WUPM_PluginsPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
121 |
*
|
122 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
123 |
*
|
124 |
-
* @param \
|
125 |
-
* @param \
|
126 |
*/
|
127 |
public function assets( $scripts, $styles ) {
|
128 |
parent::assets( $scripts, $styles );
|
16 |
*
|
17 |
* @copyright (c) 2018 Webraftic Ltd
|
18 |
*/
|
19 |
+
class WUPM_PluginsPage extends Wbcr_FactoryClearfy240_PageBase {
|
20 |
|
21 |
/**
|
22 |
*{@inheritDoc}
|
83 |
*
|
84 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
85 |
*
|
86 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
87 |
*/
|
88 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
89 |
$this->menu_title = __( 'Plugins', 'webcraftic-updates-manager' );
|
90 |
|
91 |
parent::__construct( $plugin );
|
121 |
*
|
122 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
123 |
*
|
124 |
+
* @param \Wbcr_Factory448_ScriptList $scripts
|
125 |
+
* @param \Wbcr_Factory448_StyleList $styles
|
126 |
*/
|
127 |
public function assets( $scripts, $styles ) {
|
128 |
parent::assets( $scripts, $styles );
|
components/updates-manager/admin/pages/class-page-themes.php
CHANGED
@@ -15,7 +15,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
15 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
16 |
* @copyright (c) 2018 Webraftic Ltd
|
17 |
*/
|
18 |
-
class WUPM_ThemesPage extends
|
19 |
|
20 |
/**
|
21 |
* {@inheritDoc}
|
@@ -85,9 +85,9 @@ class WUPM_ThemesPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
85 |
private $themes_update_filters = [];
|
86 |
|
87 |
/**
|
88 |
-
* @param
|
89 |
*/
|
90 |
-
public function __construct(
|
91 |
$this->menu_title = __( 'Themes', 'webcraftic-updates-manager' );
|
92 |
|
93 |
parent::__construct( $plugin );
|
@@ -123,7 +123,7 @@ class WUPM_ThemesPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
123 |
*
|
124 |
* @since 1.0.0
|
125 |
* @return void
|
126 |
-
* @see
|
127 |
*
|
128 |
*/
|
129 |
public function assets( $scripts, $styles ) {
|
15 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
16 |
* @copyright (c) 2018 Webraftic Ltd
|
17 |
*/
|
18 |
+
class WUPM_ThemesPage extends Wbcr_FactoryClearfy240_PageBase {
|
19 |
|
20 |
/**
|
21 |
* {@inheritDoc}
|
85 |
private $themes_update_filters = [];
|
86 |
|
87 |
/**
|
88 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
89 |
*/
|
90 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
91 |
$this->menu_title = __( 'Themes', 'webcraftic-updates-manager' );
|
92 |
|
93 |
parent::__construct( $plugin );
|
123 |
*
|
124 |
* @since 1.0.0
|
125 |
* @return void
|
126 |
+
* @see FactoryPages447_AdminPage
|
127 |
*
|
128 |
*/
|
129 |
public function assets( $scripts, $styles ) {
|
components/updates-manager/admin/pages/class-page-updates.php
CHANGED
@@ -15,7 +15,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
15 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
16 |
* @copyright (c) 2018 Webraftic Ltd
|
17 |
*/
|
18 |
-
class WUPM_UpdatesPage extends
|
19 |
|
20 |
/**
|
21 |
* {@inheritDoc}
|
@@ -51,9 +51,9 @@ class WUPM_UpdatesPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
51 |
*
|
52 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
53 |
*
|
54 |
-
* @param \
|
55 |
*/
|
56 |
-
public function __construct(
|
57 |
$this->menu_title = __( 'Updates manager', 'webcraftic-updates-manager' );
|
58 |
$this->page_menu_short_description = __( 'Manage all site updates', 'webcraftic-updates-manager' );
|
59 |
|
@@ -86,8 +86,8 @@ class WUPM_UpdatesPage extends Wbcr_FactoryClearfy237_PageBase {
|
|
86 |
*
|
87 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com> *
|
88 |
*
|
89 |
-
* @param \
|
90 |
-
* @param \
|
91 |
*/
|
92 |
public function assets( $scripts, $styles ) {
|
93 |
parent::assets( $scripts, $styles );
|
15 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
16 |
* @copyright (c) 2018 Webraftic Ltd
|
17 |
*/
|
18 |
+
class WUPM_UpdatesPage extends Wbcr_FactoryClearfy240_PageBase {
|
19 |
|
20 |
/**
|
21 |
* {@inheritDoc}
|
51 |
*
|
52 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
53 |
*
|
54 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
55 |
*/
|
56 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
57 |
$this->menu_title = __( 'Updates manager', 'webcraftic-updates-manager' );
|
58 |
$this->page_menu_short_description = __( 'Manage all site updates', 'webcraftic-updates-manager' );
|
59 |
|
86 |
*
|
87 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com> *
|
88 |
*
|
89 |
+
* @param \Wbcr_Factory448_ScriptList $scripts
|
90 |
+
* @param \Wbcr_Factory448_StyleList $styles
|
91 |
*/
|
92 |
public function assets( $scripts, $styles ) {
|
93 |
parent::assets( $scripts, $styles );
|
components/updates-manager/includes/class-plugin.php
CHANGED
@@ -10,11 +10,11 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
10 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
*/
|
13 |
-
class WUPM_Plugin extends
|
14 |
|
15 |
/**
|
16 |
* @see self::app()
|
17 |
-
* @var
|
18 |
*/
|
19 |
private static $app;
|
20 |
|
@@ -57,7 +57,7 @@ class WUPM_Plugin extends Wbcr_Factory446_Plugin {
|
|
57 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
58 |
* классам.
|
59 |
*
|
60 |
-
* @return \
|
61 |
*/
|
62 |
public static function app() {
|
63 |
return self::$app;
|
10 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
11 |
* @copyright (c) 19.02.2018, Webcraftic
|
12 |
*/
|
13 |
+
class WUPM_Plugin extends Wbcr_Factory448_Plugin {
|
14 |
|
15 |
/**
|
16 |
* @see self::app()
|
17 |
+
* @var Wbcr_Factory448_Plugin
|
18 |
*/
|
19 |
private static $app;
|
20 |
|
57 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
58 |
* классам.
|
59 |
*
|
60 |
+
* @return \Wbcr_Factory448_Plugin|\WUPM_Plugin
|
61 |
*/
|
62 |
public static function app() {
|
63 |
return self::$app;
|
components/updates-manager/includes/classes/class-configurate-updates.php
CHANGED
@@ -12,7 +12,7 @@ require_once WUPM_PLUGIN_DIR . '/admin/includes/class-plugin-filters.php';
|
|
12 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
13 |
* @copyright (c) 2017 Webraftic Ltd
|
14 |
*/
|
15 |
-
class WUPM_ConfigUpdates extends
|
16 |
|
17 |
public function registerActionsAndFilters() {
|
18 |
/**
|
12 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
13 |
* @copyright (c) 2017 Webraftic Ltd
|
14 |
*/
|
15 |
+
class WUPM_ConfigUpdates extends Wbcr_FactoryClearfy240_Configurate {
|
16 |
|
17 |
public function registerActionsAndFilters() {
|
18 |
/**
|
components/updates-manager/migrations/010008.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
-
class WUPMUpdate010008 extends
|
8 |
|
9 |
public function install()
|
10 |
{
|
4 |
* Updates for altering the table used to store statistics data.
|
5 |
* Adds new columns and renames existing ones in order to add support for the new social buttons.
|
6 |
*/
|
7 |
+
class WUPMUpdate010008 extends Wbcr_Factory448_Update {
|
8 |
|
9 |
public function install()
|
10 |
{
|
components/updates-manager/webcraftic-updates-manager.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* Text Domain: webcraftic-updates-manager
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
@@ -68,15 +68,15 @@ $wupm_plugin_info = array(
|
|
68 |
|
69 |
// FRAMEWORK MODULES
|
70 |
'load_factory_modules' => array(
|
71 |
-
array('libs/factory/bootstrap', '
|
72 |
-
array('libs/factory/forms', '
|
73 |
-
array('libs/factory/pages', '
|
74 |
-
array('libs/factory/clearfy', '
|
75 |
-
array('libs/factory/adverts', '
|
76 |
)
|
77 |
);
|
78 |
|
79 |
-
$wupm_compatibility = new
|
80 |
'plugin_already_activate' => defined('WUPM_PLUGIN_ACTIVE'),
|
81 |
'required_php_version' => '5.4',
|
82 |
'required_wp_version' => '4.2.0',
|
8 |
* Text Domain: webcraftic-updates-manager
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_448_VERSION
|
12 |
*/
|
13 |
|
14 |
// Exit if accessed directly
|
68 |
|
69 |
// FRAMEWORK MODULES
|
70 |
'load_factory_modules' => array(
|
71 |
+
array('libs/factory/bootstrap', 'factory_bootstrap_448', 'admin'),
|
72 |
+
array('libs/factory/forms', 'factory_forms_445', 'admin'),
|
73 |
+
array('libs/factory/pages', 'factory_pages_447', 'admin'),
|
74 |
+
array('libs/factory/clearfy', 'factory_clearfy_240', 'all'),
|
75 |
+
array('libs/factory/adverts', 'factory_adverts_126', 'admin')
|
76 |
)
|
77 |
);
|
78 |
|
79 |
+
$wupm_compatibility = new Wbcr_Factory448_Requirements(__FILE__, array_merge($wupm_plugin_info, array(
|
80 |
'plugin_already_activate' => defined('WUPM_PLUGIN_ACTIVE'),
|
81 |
'required_php_version' => '5.4',
|
82 |
'required_wp_version' => '4.2.0',
|
includes/boot.php
CHANGED
@@ -12,6 +12,30 @@ if( !defined('ABSPATH') ) {
|
|
12 |
exit;
|
13 |
}
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
/**
|
16 |
* Подключает скрипты для дополнительного меню Clearfy, на всех страницах сайта.
|
17 |
* Скрипты могут быть добавлены только, если пользователь администратор и в настройках Clearfy
|
@@ -56,7 +80,7 @@ function wbcr_clr_admin_bar_menu($wp_admin_bar)
|
|
56 |
* @since 1.1.3 - добавлен
|
57 |
* @since 1.1.4 - является устаревшим
|
58 |
*/
|
59 |
-
$menu_items =
|
60 |
|
61 |
/**
|
62 |
* @since 1.1.3 - добавлен
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
+
/*add_action('wclearfy/google_page_speed_audit', function () {
|
16 |
+
$results = WCL_Helper::fetch_google_page_speed_audit();
|
17 |
+
|
18 |
+
if( !empty($results) ) {
|
19 |
+
if( WCL_Plugin::app()->getPopulateOption('start_first_google_page_speed_audit') && !WCL_Plugin::app()->getPopulateOption('google_page_speed_audit_before') ) {
|
20 |
+
WCL_Plugin::app()->updatePopulateOption('google_page_speed_audit_before', $results);
|
21 |
+
WCL_Plugin::app()->deletePopulateOption('start_first_google_page_speed_audit');
|
22 |
+
} else if( WCL_Plugin::app()->getPopulateOption('start_second_google_page_speed_audit') ) {
|
23 |
+
WCL_Plugin::app()->updatePopulateOption('google_page_speed_audit_after', $results);
|
24 |
+
}
|
25 |
+
}
|
26 |
+
});*/
|
27 |
+
|
28 |
+
/*function wclearfy_refresh_google_page_widgets()
|
29 |
+
{
|
30 |
+
WCL_Plugin::app()->updatePopulateOption('start_second_google_page_speed_audit', 1);
|
31 |
+
WCL_Plugin::app()->deletePopulateOption('google_page_speed_audit_after');
|
32 |
+
wp_schedule_event(time(), 'daily', 'wclearfy/google_page_speed_audit');
|
33 |
+
}*/
|
34 |
+
|
35 |
+
//add_action('wbcr/factory/clearfy/setup_wizard/saved_options', 'wclearfy_refresh_google_page_widgets');
|
36 |
+
//add_action('wbcr_clearfy_configurated_quick_mode', 'wclearfy_refresh_google_page_widgets');
|
37 |
+
//add_action('wbcr/factory/pages/impressive/after_form_save', 'wclearfy_refresh_google_page_widgets');
|
38 |
+
|
39 |
/**
|
40 |
* Подключает скрипты для дополнительного меню Clearfy, на всех страницах сайта.
|
41 |
* Скрипты могут быть добавлены только, если пользователь администратор и в настройках Clearfy
|
80 |
* @since 1.1.3 - добавлен
|
81 |
* @since 1.1.4 - является устаревшим
|
82 |
*/
|
83 |
+
$menu_items = wbcr_factory_448_apply_filters_deprecated('wbcr_clearfy_admin_bar_menu_items', [$menu_items], '1.4.0', 'wbcr/clearfy/adminbar_menu_items');
|
84 |
|
85 |
/**
|
86 |
* @since 1.1.3 - добавлен
|
includes/class.plugin.php
CHANGED
@@ -12,11 +12,11 @@ if( !defined('ABSPATH') ) {
|
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
-
class WCL_Plugin extends
|
16 |
|
17 |
/**
|
18 |
* @see self::app()
|
19 |
-
* @var
|
20 |
*/
|
21 |
private static $app;
|
22 |
|
@@ -74,7 +74,7 @@ class WCL_Plugin extends Wbcr_Factory446_Plugin {
|
|
74 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
75 |
* классам.
|
76 |
*
|
77 |
-
* @return \
|
78 |
*/
|
79 |
public static function app()
|
80 |
{
|
@@ -187,12 +187,12 @@ class WCL_Plugin extends Wbcr_Factory446_Plugin {
|
|
187 |
$this->registerPage('WCL_QuickStartPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-quick-start.php');
|
188 |
$this->registerPage('WCL_AdvancedPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-advanced.php');
|
189 |
$this->registerPage('WCL_PerformancePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-performance.php');
|
190 |
-
|
191 |
if( !($this->premium->is_activate() && $this->premium->is_install_package() && WCL_Plugin::app()->isActivateComponent('cache')) ) {
|
192 |
$this->registerPage('WCL_CachePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-performance-cache.php');
|
193 |
}
|
194 |
|
195 |
-
|
196 |
$this->registerPage('WCL_ComponentsPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-components.php');
|
197 |
$this->registerPage('WCL_SeoPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-seo.php');
|
198 |
$this->registerPage('WCL_DoublePagesPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-seo-double-pages.php');
|
@@ -312,7 +312,7 @@ class WCL_Plugin extends Wbcr_Factory446_Plugin {
|
|
312 |
* @param $slug
|
313 |
* param $premium
|
314 |
*
|
315 |
-
* @return \WBCR\
|
316 |
*/
|
317 |
public function getInstallComponentsButton($component_type, $slug)
|
318 |
{
|
@@ -325,7 +325,7 @@ class WCL_Plugin extends Wbcr_Factory446_Plugin {
|
|
325 |
* @param $component_type
|
326 |
* @param $slug
|
327 |
*
|
328 |
-
* @return \WBCR\
|
329 |
*/
|
330 |
public function getDeleteComponentsButton($component_type, $slug)
|
331 |
{
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
+
class WCL_Plugin extends Wbcr_Factory448_Plugin {
|
16 |
|
17 |
/**
|
18 |
* @see self::app()
|
19 |
+
* @var Wbcr_Factory448_Plugin
|
20 |
*/
|
21 |
private static $app;
|
22 |
|
74 |
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
|
75 |
* классам.
|
76 |
*
|
77 |
+
* @return \Wbcr_Factory448_Plugin|\WCL_Plugin
|
78 |
*/
|
79 |
public static function app()
|
80 |
{
|
187 |
$this->registerPage('WCL_QuickStartPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-quick-start.php');
|
188 |
$this->registerPage('WCL_AdvancedPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-advanced.php');
|
189 |
$this->registerPage('WCL_PerformancePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-performance.php');
|
190 |
+
|
191 |
if( !($this->premium->is_activate() && $this->premium->is_install_package() && WCL_Plugin::app()->isActivateComponent('cache')) ) {
|
192 |
$this->registerPage('WCL_CachePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-performance-cache.php');
|
193 |
}
|
194 |
|
195 |
+
//$this->registerPage('WCL_PerformanceGooglePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-performance-google.php');
|
196 |
$this->registerPage('WCL_ComponentsPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-components.php');
|
197 |
$this->registerPage('WCL_SeoPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-seo.php');
|
198 |
$this->registerPage('WCL_DoublePagesPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-seo-double-pages.php');
|
312 |
* @param $slug
|
313 |
* param $premium
|
314 |
*
|
315 |
+
* @return \WBCR\Factory_448\Components\Install_Button
|
316 |
*/
|
317 |
public function getInstallComponentsButton($component_type, $slug)
|
318 |
{
|
325 |
* @param $component_type
|
326 |
* @param $slug
|
327 |
*
|
328 |
+
* @return \WBCR\Factory_448\Components\Delete_Button
|
329 |
*/
|
330 |
public function getDeleteComponentsButton($component_type, $slug)
|
331 |
{
|
includes/classes/3rd-party/boot.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
* @version 1.0
|
8 |
*/
|
9 |
|
10 |
-
add_filter('
|
11 |
|
12 |
require_once(WCL_PLUGIN_DIR . '/includes/classes/3rd-party/class-base.php');
|
13 |
require_once(WCL_PLUGIN_DIR . '/includes/classes/3rd-party/plugins/class-wp-rocket.php');
|
7 |
* @version 1.0
|
8 |
*/
|
9 |
|
10 |
+
add_filter('wbcr_factory_448_form_items', function ($forms_groups, $name) {
|
11 |
|
12 |
require_once(WCL_PLUGIN_DIR . '/includes/classes/3rd-party/class-base.php');
|
13 |
require_once(WCL_PLUGIN_DIR . '/includes/classes/3rd-party/plugins/class-wp-rocket.php');
|
includes/classes/3rd-party/class-form-entity.php
CHANGED
@@ -57,7 +57,7 @@ class Form_Entity {
|
|
57 |
|
58 |
protected static function is_control(array $item)
|
59 |
{
|
60 |
-
return isset($item['type']) && isset(\
|
61 |
}
|
62 |
|
63 |
/**
|
@@ -69,7 +69,7 @@ class Form_Entity {
|
|
69 |
*/
|
70 |
protected static function is_control_holder(array $item)
|
71 |
{
|
72 |
-
return isset($item['type']) && isset(\
|
73 |
}
|
74 |
|
75 |
/**
|
@@ -81,7 +81,7 @@ class Form_Entity {
|
|
81 |
*/
|
82 |
protected static function is_custom_element(array $item)
|
83 |
{
|
84 |
-
return isset($item['type']) && isset(\
|
85 |
}
|
86 |
|
87 |
public function make_control_disabled()
|
57 |
|
58 |
protected static function is_control(array $item)
|
59 |
{
|
60 |
+
return isset($item['type']) && isset(\Wbcr_FactoryForms445_Manager::$registered_controls[$item['type']]);
|
61 |
}
|
62 |
|
63 |
/**
|
69 |
*/
|
70 |
protected static function is_control_holder(array $item)
|
71 |
{
|
72 |
+
return isset($item['type']) && isset(\Wbcr_FactoryForms445_Manager::$registered_holders[$item['type']]);
|
73 |
}
|
74 |
|
75 |
/**
|
81 |
*/
|
82 |
protected static function is_custom_element(array $item)
|
83 |
{
|
84 |
+
return isset($item['type']) && isset(\Wbcr_FactoryForms445_Manager::$registered_custom_elements[$item['type']]);
|
85 |
}
|
86 |
|
87 |
public function make_control_disabled()
|
includes/classes/class.configurate-advanced.php
CHANGED
@@ -11,7 +11,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
11 |
exit;
|
12 |
}
|
13 |
|
14 |
-
class WCL_ConfigAdvanced extends
|
15 |
|
16 |
/**
|
17 |
* @param WCL_Plugin $plugin
|
11 |
exit;
|
12 |
}
|
13 |
|
14 |
+
class WCL_ConfigAdvanced extends Wbcr_FactoryClearfy240_Configurate {
|
15 |
|
16 |
/**
|
17 |
* @param WCL_Plugin $plugin
|
includes/classes/class.configurate-google-performance.php
CHANGED
@@ -12,7 +12,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
-
class WCL_ConfigGooglePerformance extends
|
16 |
|
17 |
/**
|
18 |
* @param WCL_Plugin $plugin
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
+
class WCL_ConfigGooglePerformance extends Wbcr_FactoryClearfy240_Configurate {
|
16 |
|
17 |
/**
|
18 |
* @param WCL_Plugin $plugin
|
includes/classes/class.configurate-performance.php
CHANGED
@@ -12,7 +12,7 @@ if( !defined('ABSPATH') ) {
|
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
-
class WCL_ConfigPerformance extends
|
16 |
|
17 |
/**
|
18 |
* @param WCL_Plugin $plugin
|
12 |
exit;
|
13 |
}
|
14 |
|
15 |
+
class WCL_ConfigPerformance extends Wbcr_FactoryClearfy240_Configurate {
|
16 |
|
17 |
/**
|
18 |
* @param WCL_Plugin $plugin
|
includes/classes/class.configurate-privacy.php
CHANGED
@@ -13,7 +13,7 @@ if( !defined('ABSPATH') ) {
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
-
class WCL_ConfigPrivacy extends
|
17 |
|
18 |
/**
|
19 |
* @param WCL_Plugin $plugin
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
class WCL_ConfigPrivacy extends Wbcr_FactoryClearfy240_Configurate {
|
17 |
|
18 |
/**
|
19 |
* @param WCL_Plugin $plugin
|
includes/classes/class.configurate-security.php
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
exit;
|
12 |
}
|
13 |
|
14 |
-
class WCL_ConfigSecurity extends
|
15 |
|
16 |
/**
|
17 |
* @param WCL_Plugin $plugin
|
11 |
exit;
|
12 |
}
|
13 |
|
14 |
+
class WCL_ConfigSecurity extends Wbcr_FactoryClearfy240_Configurate {
|
15 |
|
16 |
/**
|
17 |
* @param WCL_Plugin $plugin
|
includes/classes/class.configurate-seo.php
CHANGED
@@ -13,7 +13,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
-
class WCL_ConfigSeo extends
|
17 |
|
18 |
/**
|
19 |
* @param WCL_Plugin $plugin
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
class WCL_ConfigSeo extends Wbcr_FactoryClearfy240_Configurate {
|
17 |
|
18 |
/**
|
19 |
* @param WCL_Plugin $plugin
|
includes/helpers.php
CHANGED
@@ -16,7 +16,7 @@ class WCL_Helper {
|
|
16 |
|
17 |
public static function array_merge_insert(array $arr, array $inserted, $position = 'bottom', $key = null)
|
18 |
{
|
19 |
-
return
|
20 |
}
|
21 |
|
22 |
/**
|
@@ -25,7 +25,7 @@ class WCL_Helper {
|
|
25 |
public static function flush_cache()
|
26 |
{
|
27 |
// Flush cache for all cache plugins
|
28 |
-
|
29 |
}
|
30 |
|
31 |
/**
|
@@ -333,4 +333,56 @@ class WCL_Helper {
|
|
333 |
|
334 |
return $output;
|
335 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
}
|
16 |
|
17 |
public static function array_merge_insert(array $arr, array $inserted, $position = 'bottom', $key = null)
|
18 |
{
|
19 |
+
return WbcrFactoryClearfy240_Helpers::arrayMergeInsert($arr, $inserted, $position, $key);
|
20 |
}
|
21 |
|
22 |
/**
|
25 |
public static function flush_cache()
|
26 |
{
|
27 |
// Flush cache for all cache plugins
|
28 |
+
WbcrFactoryClearfy240_Helpers::flushPageCache();
|
29 |
}
|
30 |
|
31 |
/**
|
333 |
|
334 |
return $output;
|
335 |
}
|
336 |
+
|
337 |
+
public static function fetch_google_page_speed_audit()
|
338 |
+
{
|
339 |
+
$site_url = get_home_url();
|
340 |
+
|
341 |
+
// Check if plugin is installed in localhost
|
342 |
+
if( substr($_SERVER['REMOTE_ADDR'], 0, 4) == '127.' || $_SERVER['REMOTE_ADDR'] == '::1' ) {
|
343 |
+
$site_url = 'https://cm-wp.com/';
|
344 |
+
}
|
345 |
+
|
346 |
+
$results = [];
|
347 |
+
$strategy_arr = array(1 => 'desktop', 2 => 'mobile');
|
348 |
+
|
349 |
+
foreach($strategy_arr as $strategy_id => $strategy_text) {
|
350 |
+
$google_page_speed_call = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=" . $site_url . "&key=AIzaSyD85-8Tmp_Ixc43AgqyeLpNZNlGP150LbA&strategy=" . $strategy_text;
|
351 |
+
|
352 |
+
//Fetch data from Google PageSpeed API
|
353 |
+
$response = wp_remote_get($google_page_speed_call, array('timeout' => 30));
|
354 |
+
$response_code = wp_remote_retrieve_response_code($response);
|
355 |
+
$response_error = null;
|
356 |
+
if( is_wp_error($response) ) {
|
357 |
+
$response_error = $response->get_error_message();
|
358 |
+
} elseif( 200 !== $response_code ) {
|
359 |
+
$response_error = new WP_Error('api-error', /* translators: %d: Numeric HTTP status code, e.g. 400, 403, 500, 504, etc. */ sprintf(__('Invalid API response code (%d).'), $response_code));
|
360 |
+
}
|
361 |
+
|
362 |
+
$google_ps = json_decode(wp_remote_retrieve_body($response), true);
|
363 |
+
|
364 |
+
if( isset($google_ps['error']) ) {
|
365 |
+
wp_send_json_error([
|
366 |
+
'error' => $google_ps['error']['message'],
|
367 |
+
'code' => $google_ps['error']['code']
|
368 |
+
]);
|
369 |
+
}
|
370 |
+
|
371 |
+
if( is_wp_error($response_error) ) {
|
372 |
+
wp_send_json_error([
|
373 |
+
'error' => $response_error->get_error_message(),
|
374 |
+
'code' => $response_error->get_error_code()
|
375 |
+
]);
|
376 |
+
}
|
377 |
+
|
378 |
+
$results[$strategy_text] = [
|
379 |
+
'performance_score' => ($google_ps['lighthouseResult']['categories']['performance']['score'] * 100),
|
380 |
+
'first_contentful_paint' => $google_ps['lighthouseResult']['audits']['first-contentful-paint']['displayValue'],
|
381 |
+
'speed_index' => $google_ps['lighthouseResult']['audits']['speed-index']['displayValue'],
|
382 |
+
'interactive' => $google_ps['lighthouseResult']['audits']['interactive']['displayValue']
|
383 |
+
];
|
384 |
+
}
|
385 |
+
|
386 |
+
return $results;
|
387 |
+
}
|
388 |
}
|
libs/factory/adverts/boot.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
use WBCR\
|
4 |
|
5 |
/**
|
6 |
* Factory Adverts
|
@@ -20,31 +20,31 @@ if( !defined('ABSPATH') ) {
|
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
if( defined('
|
24 |
return;
|
25 |
}
|
26 |
|
27 |
# Устанавливаем константу, что модуль уже загружен
|
28 |
-
define('
|
29 |
|
30 |
# Устанавливаем версию модуля
|
31 |
-
define(
|
32 |
|
33 |
# Регистрируем тектовый домен, для интернализации интерфейса модуля
|
34 |
-
load_plugin_textdomain('
|
35 |
|
36 |
# Устанавливаем директорию модуля
|
37 |
-
define('
|
38 |
|
39 |
# Устанавливаем url модуля
|
40 |
-
define('
|
41 |
|
42 |
-
require_once(
|
43 |
-
require_once(
|
44 |
|
45 |
/**
|
46 |
-
* @param
|
47 |
*/
|
48 |
-
add_action('
|
49 |
-
$plugin->set_adverts_manager("WBCR\
|
50 |
});
|
1 |
<?php
|
2 |
|
3 |
+
use WBCR\Factory_Adverts_126\Base;
|
4 |
|
5 |
/**
|
6 |
* Factory Adverts
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
+
if( defined('FACTORY_ADVERTS_126_LOADED') || (defined('FACTORY_ADVERTS_BLOCK') && FACTORY_ADVERTS_BLOCK) ) {
|
24 |
return;
|
25 |
}
|
26 |
|
27 |
# Устанавливаем константу, что модуль уже загружен
|
28 |
+
define('FACTORY_ADVERTS_126_LOADED', true);
|
29 |
|
30 |
# Устанавливаем версию модуля
|
31 |
+
define('FACTORY_ADVERTS_126_VERSION', '1.2.6');
|
32 |
|
33 |
# Регистрируем тектовый домен, для интернализации интерфейса модуля
|
34 |
+
load_plugin_textdomain('wbcr_factory_adverts_126', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
35 |
|
36 |
# Устанавливаем директорию модуля
|
37 |
+
define('FACTORY_ADVERTS_126_DIR', dirname(__FILE__));
|
38 |
|
39 |
# Устанавливаем url модуля
|
40 |
+
define('FACTORY_ADVERTS_126_URL', plugins_url(null, __FILE__));
|
41 |
|
42 |
+
require_once(FACTORY_ADVERTS_126_DIR . '/includes/class-rest-request.php');
|
43 |
+
require_once(FACTORY_ADVERTS_126_DIR . '/includes/class-base.php');
|
44 |
|
45 |
/**
|
46 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
47 |
*/
|
48 |
+
add_action('wbcr_factory_adverts_126_plugin_created', function ($plugin) {
|
49 |
+
$plugin->set_adverts_manager("WBCR\Factory_Adverts_126\Base");
|
50 |
});
|
libs/factory/adverts/includes/class-base.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if ( ! defined( 'ABSPATH' ) ) {
|
@@ -28,7 +28,7 @@ class Base {
|
|
28 |
*
|
29 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
30 |
* @since 1.0.1
|
31 |
-
* @var \
|
32 |
*/
|
33 |
private $plugin;
|
34 |
|
@@ -53,7 +53,7 @@ class Base {
|
|
53 |
*
|
54 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
55 |
* @since 1.0.1
|
56 |
-
* @var \WBCR\
|
57 |
*/
|
58 |
private $api;
|
59 |
|
@@ -82,9 +82,9 @@ class Base {
|
|
82 |
*
|
83 |
* @since 1.0.0 Added
|
84 |
*
|
85 |
-
* @param \
|
86 |
*/
|
87 |
-
public function __construct( \
|
88 |
$this->plugin = $plugin;
|
89 |
|
90 |
$this->settings = wp_parse_args( $settings, [
|
@@ -257,7 +257,7 @@ class Base {
|
|
257 |
$content = $this->get_debug_message( 'dashboard_widget' );
|
258 |
}
|
259 |
|
260 |
-
require_once
|
261 |
new Dashboard_Widget( $this->plugin, $content );
|
262 |
}
|
263 |
}
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_Adverts_126;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if ( ! defined( 'ABSPATH' ) ) {
|
28 |
*
|
29 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
30 |
* @since 1.0.1
|
31 |
+
* @var \Wbcr_Factory448_Plugin
|
32 |
*/
|
33 |
private $plugin;
|
34 |
|
53 |
*
|
54 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
55 |
* @since 1.0.1
|
56 |
+
* @var \WBCR\Factory_Adverts_126\Creative_Motion_API
|
57 |
*/
|
58 |
private $api;
|
59 |
|
82 |
*
|
83 |
* @since 1.0.0 Added
|
84 |
*
|
85 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
86 |
*/
|
87 |
+
public function __construct( \Wbcr_Factory448_Plugin $plugin, $settings ) {
|
88 |
$this->plugin = $plugin;
|
89 |
|
90 |
$this->settings = wp_parse_args( $settings, [
|
257 |
$content = $this->get_debug_message( 'dashboard_widget' );
|
258 |
}
|
259 |
|
260 |
+
require_once FACTORY_ADVERTS_126_DIR . '/includes/class-dashboard-widget.php';
|
261 |
new Dashboard_Widget( $this->plugin, $content );
|
262 |
}
|
263 |
}
|
libs/factory/adverts/includes/class-dashboard-widget.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if ( ! defined( 'ABSPATH' ) ) {
|
@@ -35,7 +35,7 @@ class Dashboard_Widget {
|
|
35 |
*
|
36 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
37 |
* @since 1.0.1
|
38 |
-
* @var \
|
39 |
*/
|
40 |
private $plugin;
|
41 |
|
@@ -46,10 +46,10 @@ class Dashboard_Widget {
|
|
46 |
*
|
47 |
* @since 1.0.0 Added
|
48 |
*
|
49 |
-
* @param \
|
50 |
* @param string $content
|
51 |
*/
|
52 |
-
public function __construct( \
|
53 |
|
54 |
$this->plugin = $plugin;
|
55 |
$this->content = $content;
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_Adverts_126;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if ( ! defined( 'ABSPATH' ) ) {
|
35 |
*
|
36 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
37 |
* @since 1.0.1
|
38 |
+
* @var \Wbcr_Factory448_Plugin
|
39 |
*/
|
40 |
private $plugin;
|
41 |
|
46 |
*
|
47 |
* @since 1.0.0 Added
|
48 |
*
|
49 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
50 |
* @param string $content
|
51 |
*/
|
52 |
+
public function __construct( \Wbcr_Factory448_Plugin $plugin, $content ) {
|
53 |
|
54 |
$this->plugin = $plugin;
|
55 |
$this->content = $content;
|
libs/factory/adverts/includes/class-rest-request.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if( !defined('ABSPATH') ) {
|
@@ -65,7 +65,7 @@ class Creative_Motion_API {
|
|
65 |
*
|
66 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
67 |
* @since 1.0.1
|
68 |
-
* @var \
|
69 |
*/
|
70 |
private $plugin;
|
71 |
|
@@ -75,11 +75,11 @@ class Creative_Motion_API {
|
|
75 |
*
|
76 |
* Variable initialization.
|
77 |
*
|
78 |
-
* @param \
|
79 |
* @since 1.0.0 Added
|
80 |
*
|
81 |
*/
|
82 |
-
public function __construct(\
|
83 |
{
|
84 |
$this->plugin = $plugin;
|
85 |
}
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_Adverts_126;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if( !defined('ABSPATH') ) {
|
65 |
*
|
66 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
67 |
* @since 1.0.1
|
68 |
+
* @var \Wbcr_Factory448_Plugin
|
69 |
*/
|
70 |
private $plugin;
|
71 |
|
75 |
*
|
76 |
* Variable initialization.
|
77 |
*
|
78 |
+
* @param \Wbcr_Factory448_Plugin $plugin_name
|
79 |
* @since 1.0.0 Added
|
80 |
*
|
81 |
*/
|
82 |
+
public function __construct(\Wbcr_Factory448_Plugin $plugin)
|
83 |
{
|
84 |
$this->plugin = $plugin;
|
85 |
}
|
libs/factory/adverts/langs/{wbcr_factory_adverts_124-ru_RU.mo → wbcr_factory_adverts_126-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/adverts/langs/{wbcr_factory_adverts_124-ru_RU.po → wbcr_factory_adverts_126-ru_RU.po}
RENAMED
File without changes
|
libs/factory/bootstrap/assets/css-min/bootstrap.accordion.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .factory-accordion{margin:0 0 30px;border-top:1px solid #DDD;border-right:1px solid #DDD;border-left:1px solid #DDD;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.factory-bootstrap-448 .factory-accordion>h3{border-bottom:1px solid #DDD;cursor:pointer;padding:8px 15px;margin:0}.factory-bootstrap-448 .factory-accordion>div{display:none;margin:0;border-bottom:1px solid #DDD}.factory-bootstrap-448 .factory-accordion-item{display:none}.factory-bootstrap-448 .inner-factory-accordion-item{padding:10px 0}.factory-bootstrap-448 .factory-accordion>h3.active:hover{cursor:default}
|
libs/factory/bootstrap/assets/css-min/bootstrap.blue.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .btn-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:active{background:#db9825;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-448 .btn-primary:disabled,.factory-bootstrap-448 .btn-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.factory-bootstrap-448 .btn-group .btn.active.value{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.factory-bootstrap-448 .pagination>.active>a,.factory-bootstrap-448 .pagination>.active>a:focus,.factory-bootstrap-448 .pagination>.active>a:hover,.factory-bootstrap-448 .pagination>.active>span,.factory-bootstrap-448 .pagination>.active>span:focus,.factory-bootstrap-448 .pagination>.active>span:hover{background-color:#e1a948;border-color:#d39323}
|
libs/factory/bootstrap/assets/css-min/bootstrap.coffee.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .btn-primary{background:#c7a589;border-color:#b78a66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:active{background:#ba906d;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-448 .btn-primary:disabled,.factory-bootstrap-448 .btn-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.factory-bootstrap-448 .btn-group .btn.active.value{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.factory-bootstrap-448 .pagination>.active>a,.factory-bootstrap-448 .pagination>.active>a:focus,.factory-bootstrap-448 .pagination>.active>a:hover,.factory-bootstrap-448 .pagination>.active>span,.factory-bootstrap-448 .pagination>.active>span:focus,.factory-bootstrap-448 .pagination>.active>span:hover{background-color:#c7a589;border-color:#b78a66}
|
libs/factory/bootstrap/assets/css-min/bootstrap.core.min.css
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-446 article,.factory-bootstrap-446 aside,.factory-bootstrap-446 details,.factory-bootstrap-446 figcaption,.factory-bootstrap-446 figure,.factory-bootstrap-446 footer,.factory-bootstrap-446 header,.factory-bootstrap-446 hgroup,.factory-bootstrap-446 main,.factory-bootstrap-446 nav,.factory-bootstrap-446 section,.factory-bootstrap-446 summary{display:block}.factory-bootstrap-446 audio,.factory-bootstrap-446 canvas,.factory-bootstrap-446 video{display:inline-block}.factory-bootstrap-446 audio:not([controls]){display:none;height:0}.factory-bootstrap-446 [hidden],.factory-bootstrap-446 template{display:none}.factory-bootstrap-446 body{margin:0}.factory-bootstrap-446 a{background:0 0}.factory-bootstrap-446 a:focus{outline:thin dotted}.factory-bootstrap-446 a:active,.factory-bootstrap-446 a:hover{outline:0}.factory-bootstrap-446 h1{margin:.67em 0}.factory-bootstrap-446 b,.factory-bootstrap-446 strong{font-weight:700}.factory-bootstrap-446 dfn{font-style:italic}.factory-bootstrap-446 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-446 mark{color:#000;background:#ff0}.factory-bootstrap-446 code,.factory-bootstrap-446 kbd,.factory-bootstrap-446 pre,.factory-bootstrap-446 samp{font-size:1em}.factory-bootstrap-446 pre{white-space:pre-wrap}.factory-bootstrap-446 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-446 sub,.factory-bootstrap-446 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-446 sup{top:-.5em}.factory-bootstrap-446 sub{bottom:-.25em}.factory-bootstrap-446 img{border:0}.factory-bootstrap-446 svg:not(:root){overflow:hidden}.factory-bootstrap-446 figure{margin:0}.factory-bootstrap-446 button,.factory-bootstrap-446 input,.factory-bootstrap-446 select,.factory-bootstrap-446 textarea{margin:0}.factory-bootstrap-446 button,.factory-bootstrap-446 select{text-transform:none}.factory-bootstrap-446 select{padding-right:4px!important}.factory-bootstrap-446 button,.factory-bootstrap-446 input[type=reset],.factory-bootstrap-446 input[type=submit],html .factory-bootstrap-446 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-446 button[disabled],html .factory-bootstrap-446 input[disabled]{cursor:default}.factory-bootstrap-446 input[type=checkbox],.factory-bootstrap-446 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-446 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-446 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-446 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-446 button::-moz-focus-inner,.factory-bootstrap-446 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-446 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-446 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-446 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-446 a,.factory-bootstrap-446 a:visited{text-decoration:underline}.factory-bootstrap-446 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-446 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-446 a[href^="javascript:"]:after,.factory-bootstrap-446 a[href^="#"]:after{content:""}.factory-bootstrap-446 blockquote,.factory-bootstrap-446 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-446 thead{display:table-header-group}.factory-bootstrap-446 img,.factory-bootstrap-446 tr{page-break-inside:avoid}.factory-bootstrap-446 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-446 h2,.factory-bootstrap-446 h3,.factory-bootstrap-446 p{orphans:3;widows:3}.factory-bootstrap-446 h2,.factory-bootstrap-446 h3{page-break-after:avoid}.factory-bootstrap-446 select{background:#fff!important}.factory-bootstrap-446 .navbar{display:none}.factory-bootstrap-446 .table td,.factory-bootstrap-446 .table th{background-color:#fff!important}.factory-bootstrap-446 .btn>.caret,.factory-bootstrap-446 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-446 .label{border:1px solid #000}.factory-bootstrap-446 .table{border-collapse:collapse!important}.factory-bootstrap-446 .table-bordered td,.factory-bootstrap-446 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-446 *,.factory-bootstrap-446 :after,.factory-bootstrap-446 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-446{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-446 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-446 button,.factory-bootstrap-446 input,.factory-bootstrap-446 select,.factory-bootstrap-446 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-446 img{vertical-align:middle}.factory-bootstrap-446 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-446 .img-rounded{border-radius:6px}.factory-bootstrap-446 .img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.factory-bootstrap-446 .img-circle{border-radius:50%}.factory-bootstrap-446 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-446 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-446 .h1,.factory-bootstrap-446 .h2,.factory-bootstrap-446 .h3,.factory-bootstrap-446 .h4,.factory-bootstrap-446 .h5,.factory-bootstrap-446 .h6,.factory-bootstrap-446 h1,.factory-bootstrap-446 h2,.factory-bootstrap-446 h3,.factory-bootstrap-446 h4,.factory-bootstrap-446 h5,.factory-bootstrap-446 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-446 .h1 .small,.factory-bootstrap-446 .h1 small,.factory-bootstrap-446 .h2 .small,.factory-bootstrap-446 .h2 small,.factory-bootstrap-446 .h3 .small,.factory-bootstrap-446 .h3 small,.factory-bootstrap-446 .h4 .small,.factory-bootstrap-446 .h4 small,.factory-bootstrap-446 .h5 .small,.factory-bootstrap-446 .h5 small,.factory-bootstrap-446 .h6 .small,.factory-bootstrap-446 .h6 small,.factory-bootstrap-446 h1 .small,.factory-bootstrap-446 h1 small,.factory-bootstrap-446 h2 .small,.factory-bootstrap-446 h2 small,.factory-bootstrap-446 h3 .small,.factory-bootstrap-446 h3 small,.factory-bootstrap-446 h4 .small,.factory-bootstrap-446 h4 small,.factory-bootstrap-446 h5 .small,.factory-bootstrap-446 h5 small,.factory-bootstrap-446 h6 .small,.factory-bootstrap-446 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-446 h1,.factory-bootstrap-446 h2,.factory-bootstrap-446 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-446 h1 .small,.factory-bootstrap-446 h1 small,.factory-bootstrap-446 h2 .small,.factory-bootstrap-446 h2 small,.factory-bootstrap-446 h3 .small,.factory-bootstrap-446 h3 small{font-size:65%}.factory-bootstrap-446 h4,.factory-bootstrap-446 h5,.factory-bootstrap-446 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-446 h4 .small,.factory-bootstrap-446 h4 small,.factory-bootstrap-446 h5 .small,.factory-bootstrap-446 h5 small,.factory-bootstrap-446 h6 .small,.factory-bootstrap-446 h6 small{font-size:75%}.factory-bootstrap-446 .h1,.factory-bootstrap-446 h1{font-size:36px}.factory-bootstrap-446 .h2,.factory-bootstrap-446 h2{font-size:30px}.factory-bootstrap-446 .h3,.factory-bootstrap-446 h3{font-size:24px}.factory-bootstrap-446 .h4,.factory-bootstrap-446 h4{font-size:18px}.factory-bootstrap-446 .h5,.factory-bootstrap-446 h5{font-size:14px}.factory-bootstrap-446 .h6,.factory-bootstrap-446 h6{font-size:12px}.factory-bootstrap-446 p{margin:0 0 10px}.factory-bootstrap-446 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-446 .small,.factory-bootstrap-446 small{font-size:85%}.factory-bootstrap-446 cite{font-style:normal}.factory-bootstrap-446 .text-muted{color:#999}.factory-bootstrap-446 .text-primary{color:#428bca}.factory-bootstrap-446 .text-primary:hover{color:#3071a9}.factory-bootstrap-446 .text-warning{color:#8a6d3b}.factory-bootstrap-446 .text-warning:hover{color:#66512c}.factory-bootstrap-446 .text-danger{color:#a94442}.factory-bootstrap-446 .text-danger:hover{color:#843534}.factory-bootstrap-446 .text-success{color:#3c763d}.factory-bootstrap-446 .text-success:hover{color:#2b542c}.factory-bootstrap-446 .text-info{color:#31708f}.factory-bootstrap-446 .text-info:hover{color:#245269}.factory-bootstrap-446 .text-left{text-align:left}.factory-bootstrap-446 .text-right{text-align:right}.factory-bootstrap-446 .text-center{text-align:center}.factory-bootstrap-446 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-446 ol,.factory-bootstrap-446 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-446 ol ol,.factory-bootstrap-446 ol ul,.factory-bootstrap-446 ul ol,.factory-bootstrap-446 ul ul{margin-bottom:0}.factory-bootstrap-446 .list-inline,.factory-bootstrap-446 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-446 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-446 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-446 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-446 dd,.factory-bootstrap-446 dt{line-height:1.428571429}.factory-bootstrap-446 dt{font-weight:700}.factory-bootstrap-446 dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:after,.dl-horizontal dd:before{display:table;content:" "}.dl-horizontal dd:after{clear:both}}.factory-bootstrap-446 abbr[data-original-title],.factory-bootstrap-446 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-446 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-446 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-446 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-446 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-446 blockquote .small,.factory-bootstrap-446 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-446 blockquote .small:before,.factory-bootstrap-446 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-446 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-446 blockquote.pull-right .small,.factory-bootstrap-446 blockquote.pull-right p,.factory-bootstrap-446 blockquote.pull-right small{text-align:right}.factory-bootstrap-446 blockquote.pull-right .small:before,.factory-bootstrap-446 blockquote.pull-right small:before{content:''}.factory-bootstrap-446 blockquote.pull-right .small:after,.factory-bootstrap-446 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-446 blockquote:after,.factory-bootstrap-446 blockquote:before{content:""}.factory-bootstrap-446 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-446 code,.factory-bootstrap-446 kbd,.factory-bootstrap-446 pre,.factory-bootstrap-446 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-446 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-446 pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.factory-bootstrap-446 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-446 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-446 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-446 .container:after,.factory-bootstrap-446 .container:before{display:table;content:" "}.factory-bootstrap-446 .container:after{clear:both}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.factory-bootstrap-446 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-446 .row:after,.factory-bootstrap-446 .row:before{display:table;content:" "}.factory-bootstrap-446 .row:after{clear:both}.factory-bootstrap-446 .col-lg-1,.factory-bootstrap-446 .col-lg-10,.factory-bootstrap-446 .col-lg-11,.factory-bootstrap-446 .col-lg-12,.factory-bootstrap-446 .col-lg-2,.factory-bootstrap-446 .col-lg-3,.factory-bootstrap-446 .col-lg-4,.factory-bootstrap-446 .col-lg-5,.factory-bootstrap-446 .col-lg-6,.factory-bootstrap-446 .col-lg-7,.factory-bootstrap-446 .col-lg-8,.factory-bootstrap-446 .col-lg-9,.factory-bootstrap-446 .col-md-1,.factory-bootstrap-446 .col-md-10,.factory-bootstrap-446 .col-md-11,.factory-bootstrap-446 .col-md-12,.factory-bootstrap-446 .col-md-2,.factory-bootstrap-446 .col-md-3,.factory-bootstrap-446 .col-md-4,.factory-bootstrap-446 .col-md-5,.factory-bootstrap-446 .col-md-6,.factory-bootstrap-446 .col-md-7,.factory-bootstrap-446 .col-md-8,.factory-bootstrap-446 .col-md-9,.factory-bootstrap-446 .col-sm-1,.factory-bootstrap-446 .col-sm-10,.factory-bootstrap-446 .col-sm-11,.factory-bootstrap-446 .col-sm-12,.factory-bootstrap-446 .col-sm-2,.factory-bootstrap-446 .col-sm-3,.factory-bootstrap-446 .col-sm-4,.factory-bootstrap-446 .col-sm-5,.factory-bootstrap-446 .col-sm-6,.factory-bootstrap-446 .col-sm-7,.factory-bootstrap-446 .col-sm-8,.factory-bootstrap-446 .col-sm-9,.factory-bootstrap-446 .col-xs-1,.factory-bootstrap-446 .col-xs-10,.factory-bootstrap-446 .col-xs-11,.factory-bootstrap-446 .col-xs-12,.factory-bootstrap-446 .col-xs-2,.factory-bootstrap-446 .col-xs-3,.factory-bootstrap-446 .col-xs-4,.factory-bootstrap-446 .col-xs-5,.factory-bootstrap-446 .col-xs-6,.factory-bootstrap-446 .col-xs-7,.factory-bootstrap-446 .col-xs-8,.factory-bootstrap-446 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-446 .col-xs-1,.factory-bootstrap-446 .col-xs-10,.factory-bootstrap-446 .col-xs-11,.factory-bootstrap-446 .col-xs-12,.factory-bootstrap-446 .col-xs-2,.factory-bootstrap-446 .col-xs-3,.factory-bootstrap-446 .col-xs-4,.factory-bootstrap-446 .col-xs-5,.factory-bootstrap-446 .col-xs-6,.factory-bootstrap-446 .col-xs-7,.factory-bootstrap-446 .col-xs-8,.factory-bootstrap-446 .col-xs-9{float:left}.factory-bootstrap-446 .col-xs-12{width:100%}.factory-bootstrap-446 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-446 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-446 .col-xs-9{width:75%}.factory-bootstrap-446 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-446 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-446 .col-xs-6{width:50%}.factory-bootstrap-446 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-446 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-446 .col-xs-3{width:25%}.factory-bootstrap-446 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-446 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-446 .col-xs-pull-12{right:100%}.factory-bootstrap-446 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-446 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-446 .col-xs-pull-9{right:75%}.factory-bootstrap-446 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-446 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-446 .col-xs-pull-6{right:50%}.factory-bootstrap-446 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-446 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-446 .col-xs-pull-3{right:25%}.factory-bootstrap-446 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-446 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-446 .col-xs-pull-0{right:0}.factory-bootstrap-446 .col-xs-push-12{left:100%}.factory-bootstrap-446 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-446 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-446 .col-xs-push-9{left:75%}.factory-bootstrap-446 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-446 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-446 .col-xs-push-6{left:50%}.factory-bootstrap-446 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-446 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-446 .col-xs-push-3{left:25%}.factory-bootstrap-446 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-446 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-446 .col-xs-push-0{left:0}.factory-bootstrap-446 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-446 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-446 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-446 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-446 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-446 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-446 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-446 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-446 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-446 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-446 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-446 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-446 .col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-0{margin-left:0}}.factory-bootstrap-446 table{max-width:100%;background-color:transparent}.factory-bootstrap-446 th{text-align:left}.factory-bootstrap-446 .table{width:100%;margin-bottom:20px}.factory-bootstrap-446 .table>tbody>tr>td,.factory-bootstrap-446 .table>tbody>tr>th,.factory-bootstrap-446 .table>tfoot>tr>td,.factory-bootstrap-446 .table>tfoot>tr>th,.factory-bootstrap-446 .table>thead>tr>td,.factory-bootstrap-446 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-446 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-446 .table>caption+thead>tr:first-child>td,.factory-bootstrap-446 .table>caption+thead>tr:first-child>th,.factory-bootstrap-446 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-446 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-446 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-446 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-446 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-446 .table .table{background-color:#fff}.factory-bootstrap-446 .table-condensed>tbody>tr>td,.factory-bootstrap-446 .table-condensed>tbody>tr>th,.factory-bootstrap-446 .table-condensed>tfoot>tr>td,.factory-bootstrap-446 .table-condensed>tfoot>tr>th,.factory-bootstrap-446 .table-condensed>thead>tr>td,.factory-bootstrap-446 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-446 .table-bordered,.factory-bootstrap-446 .table-bordered>tbody>tr>td,.factory-bootstrap-446 .table-bordered>tbody>tr>th,.factory-bootstrap-446 .table-bordered>tfoot>tr>td,.factory-bootstrap-446 .table-bordered>tfoot>tr>th,.factory-bootstrap-446 .table-bordered>thead>tr>td,.factory-bootstrap-446 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-446 .table-bordered>thead>tr>td,.factory-bootstrap-446 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-446 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-446 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-446 .table-hover>tbody>tr:hover>td,.factory-bootstrap-446 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-446 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-446 table td[class*=col-],.factory-bootstrap-446 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-446 .table>tbody>.active>td,.factory-bootstrap-446 .table>tbody>.active>th,.factory-bootstrap-446 .table>tbody>tr>.active,.factory-bootstrap-446 .table>tfoot>.active>td,.factory-bootstrap-446 .table>tfoot>.active>th,.factory-bootstrap-446 .table>tfoot>tr>.active,.factory-bootstrap-446 .table>thead>.active>td,.factory-bootstrap-446 .table>thead>.active>th,.factory-bootstrap-446 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-446 .table-hover>tbody>.active:hover>td,.factory-bootstrap-446 .table-hover>tbody>.active:hover>th,.factory-bootstrap-446 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-446 .table>tbody>.success>td,.factory-bootstrap-446 .table>tbody>.success>th,.factory-bootstrap-446 .table>tbody>tr>.success,.factory-bootstrap-446 .table>tfoot>.success>td,.factory-bootstrap-446 .table>tfoot>.success>th,.factory-bootstrap-446 .table>tfoot>tr>.success,.factory-bootstrap-446 .table>thead>.success>td,.factory-bootstrap-446 .table>thead>.success>th,.factory-bootstrap-446 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-446 .table-hover>tbody>.success:hover>td,.factory-bootstrap-446 .table-hover>tbody>.success:hover>th,.factory-bootstrap-446 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-446 .table>tbody>.danger>td,.factory-bootstrap-446 .table>tbody>.danger>th,.factory-bootstrap-446 .table>tbody>tr>.danger,.factory-bootstrap-446 .table>tfoot>.danger>td,.factory-bootstrap-446 .table>tfoot>.danger>th,.factory-bootstrap-446 .table>tfoot>tr>.danger,.factory-bootstrap-446 .table>thead>.danger>td,.factory-bootstrap-446 .table>thead>.danger>th,.factory-bootstrap-446 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-446 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-446 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-446 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-446 .table>tbody>.warning>td,.factory-bootstrap-446 .table>tbody>.warning>th,.factory-bootstrap-446 .table>tbody>tr>.warning,.factory-bootstrap-446 .table>tfoot>.warning>td,.factory-bootstrap-446 .table>tfoot>.warning>th,.factory-bootstrap-446 .table>tfoot>tr>.warning,.factory-bootstrap-446 .table>thead>.warning>td,.factory-bootstrap-446 .table>thead>.warning>th,.factory-bootstrap-446 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-446 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-446 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-446 .table-hover>tbody>tr>.warning:hover{background-color:#faf2cc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.factory-bootstrap-446 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-446 legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-446 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-446 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-446 input[type=checkbox],.factory-bootstrap-446 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-446 input[type=file]{display:block}.factory-bootstrap-446 select[multiple],.factory-bootstrap-446 select[size]{height:auto}.factory-bootstrap-446 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-446 input[type=checkbox]:focus,.factory-bootstrap-446 input[type=file]:focus,.factory-bootstrap-446 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-446 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-446 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-446 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-446 .form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.factory-bootstrap-446 .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-446 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-446 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-446 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-446 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-446 .form-control[disabled],.factory-bootstrap-446 .form-control[readonly],.factory-bootstrap-446 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-446 textarea.form-control{height:auto}.factory-bootstrap-446 .form-group{margin-bottom:15px}.factory-bootstrap-446 .checkbox,.factory-bootstrap-446 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-446 .checkbox label,.factory-bootstrap-446 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-446 .checkbox input[type=checkbox],.factory-bootstrap-446 .checkbox-inline input[type=checkbox],.factory-bootstrap-446 .radio input[type=radio],.factory-bootstrap-446 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-446 .checkbox+.checkbox,.factory-bootstrap-446 .radio+.radio{margin-top:-5px}.factory-bootstrap-446 .checkbox-inline,.factory-bootstrap-446 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-446 .checkbox-inline+.checkbox-inline,.factory-bootstrap-446 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-446 .checkbox-inline[disabled],.factory-bootstrap-446 .checkbox[disabled],.factory-bootstrap-446 .radio-inline[disabled],.factory-bootstrap-446 .radio[disabled],.factory-bootstrap-446 fieldset[disabled] .checkbox,.factory-bootstrap-446 fieldset[disabled] .checkbox-inline,.factory-bootstrap-446 fieldset[disabled] .radio,.factory-bootstrap-446 fieldset[disabled] .radio-inline,.factory-bootstrap-446 fieldset[disabled] input[type=checkbox],.factory-bootstrap-446 fieldset[disabled] input[type=radio],.factory-bootstrap-446 input[type=checkbox][disabled],.factory-bootstrap-446 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-446 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-446 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-446 textarea.input-sm{height:auto}.factory-bootstrap-446 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-446 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-446 textarea.input-lg{height:auto}.factory-bootstrap-446 .has-warning .checkbox,.factory-bootstrap-446 .has-warning .checkbox-inline,.factory-bootstrap-446 .has-warning .control-label,.factory-bootstrap-446 .has-warning .help-block,.factory-bootstrap-446 .has-warning .radio,.factory-bootstrap-446 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-446 .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-446 .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.factory-bootstrap-446 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-446 .has-error .checkbox,.factory-bootstrap-446 .has-error .checkbox-inline,.factory-bootstrap-446 .has-error .control-label,.factory-bootstrap-446 .has-error .help-block,.factory-bootstrap-446 .has-error .radio,.factory-bootstrap-446 .has-error .radio-inline{color:#a94442}.factory-bootstrap-446 .controls{display:block}.factory-bootstrap-446 .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-446 .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.factory-bootstrap-446 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-446 .has-success .checkbox,.factory-bootstrap-446 .has-success .checkbox-inline,.factory-bootstrap-446 .has-success .control-label,.factory-bootstrap-446 .has-success .help-block,.factory-bootstrap-446 .has-success .radio,.factory-bootstrap-446 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-446 .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-446 .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.factory-bootstrap-446 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-446 .form-control-static{margin-bottom:0}.factory-bootstrap-446 .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373;font-weight:400}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline select.form-control{width:auto}.form-inline .checkbox,.form-inline .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{float:none;margin-left:0}}.factory-bootstrap-446 .form-horizontal .checkbox,.factory-bootstrap-446 .form-horizontal .checkbox-inline,.factory-bootstrap-446 .form-horizontal .control-label,.factory-bootstrap-446 .form-horizontal .radio,.factory-bootstrap-446 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-446 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-446 .form-horizontal .checkbox,.factory-bootstrap-446 .form-horizontal .radio{min-height:27px}.factory-bootstrap-446 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-446 .form-horizontal .form-group:after,.factory-bootstrap-446 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-446 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-446 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-446 .btn{display:inline-block;padding:5px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.factory-bootstrap-446 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-446 .btn{text-decoration:none}.factory-bootstrap-446 .btn:focus,.factory-bootstrap-446 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-446 .btn.disabled,.factory-bootstrap-446 .btn[disabled],.factory-bootstrap-446 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-446 .btn-default.active,.factory-bootstrap-446 .btn-default:active,.factory-bootstrap-446 .btn-default:focus,.factory-bootstrap-446 .btn-default:hover,.factory-bootstrap-446 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-446 .btn-default.active,.factory-bootstrap-446 .btn-default:active,.factory-bootstrap-446 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-446 .btn-default.disabled,.factory-bootstrap-446 .btn-default.disabled.active,.factory-bootstrap-446 .btn-default.disabled:active,.factory-bootstrap-446 .btn-default.disabled:focus,.factory-bootstrap-446 .btn-default.disabled:hover,.factory-bootstrap-446 .btn-default[disabled],.factory-bootstrap-446 .btn-default[disabled].active,.factory-bootstrap-446 .btn-default[disabled]:active,.factory-bootstrap-446 .btn-default[disabled]:focus,.factory-bootstrap-446 .btn-default[disabled]:hover,.factory-bootstrap-446 fieldset[disabled] .btn-default,.factory-bootstrap-446 fieldset[disabled] .btn-default.active,.factory-bootstrap-446 fieldset[disabled] .btn-default:active,.factory-bootstrap-446 fieldset[disabled] .btn-default:focus,.factory-bootstrap-446 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-446 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-446 .btn-primary.active,.factory-bootstrap-446 .btn-primary:active,.factory-bootstrap-446 .btn-primary:focus,.factory-bootstrap-446 .btn-primary:hover,.factory-bootstrap-446 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-446 .btn-primary.active,.factory-bootstrap-446 .btn-primary:active,.factory-bootstrap-446 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-446 .btn-primary.disabled,.factory-bootstrap-446 .btn-primary.disabled.active,.factory-bootstrap-446 .btn-primary.disabled:active,.factory-bootstrap-446 .btn-primary.disabled:focus,.factory-bootstrap-446 .btn-primary.disabled:hover,.factory-bootstrap-446 .btn-primary[disabled],.factory-bootstrap-446 .btn-primary[disabled].active,.factory-bootstrap-446 .btn-primary[disabled]:active,.factory-bootstrap-446 .btn-primary[disabled]:focus,.factory-bootstrap-446 .btn-primary[disabled]:hover,.factory-bootstrap-446 fieldset[disabled] .btn-primary,.factory-bootstrap-446 fieldset[disabled] .btn-primary.active,.factory-bootstrap-446 fieldset[disabled] .btn-primary:active,.factory-bootstrap-446 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-446 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-446 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-446 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-446 .btn-warning.active,.factory-bootstrap-446 .btn-warning:active,.factory-bootstrap-446 .btn-warning:focus,.factory-bootstrap-446 .btn-warning:hover,.factory-bootstrap-446 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-446 .btn-warning.active,.factory-bootstrap-446 .btn-warning:active,.factory-bootstrap-446 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-446 .btn-warning.disabled,.factory-bootstrap-446 .btn-warning.disabled.active,.factory-bootstrap-446 .btn-warning.disabled:active,.factory-bootstrap-446 .btn-warning.disabled:focus,.factory-bootstrap-446 .btn-warning.disabled:hover,.factory-bootstrap-446 .btn-warning[disabled],.factory-bootstrap-446 .btn-warning[disabled].active,.factory-bootstrap-446 .btn-warning[disabled]:active,.factory-bootstrap-446 .btn-warning[disabled]:focus,.factory-bootstrap-446 .btn-warning[disabled]:hover,.factory-bootstrap-446 fieldset[disabled] .btn-warning,.factory-bootstrap-446 fieldset[disabled] .btn-warning.active,.factory-bootstrap-446 fieldset[disabled] .btn-warning:active,.factory-bootstrap-446 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-446 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-446 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-446 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-446 .btn-success.active,.factory-bootstrap-446 .btn-success:active,.factory-bootstrap-446 .btn-success:focus,.factory-bootstrap-446 .btn-success:hover,.factory-bootstrap-446 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-446 .btn-success.active,.factory-bootstrap-446 .btn-success:active,.factory-bootstrap-446 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-446 .btn-success.disabled,.factory-bootstrap-446 .btn-success.disabled.active,.factory-bootstrap-446 .btn-success.disabled:active,.factory-bootstrap-446 .btn-success.disabled:focus,.factory-bootstrap-446 .btn-success.disabled:hover,.factory-bootstrap-446 .btn-success[disabled],.factory-bootstrap-446 .btn-success[disabled].active,.factory-bootstrap-446 .btn-success[disabled]:active,.factory-bootstrap-446 .btn-success[disabled]:focus,.factory-bootstrap-446 .btn-success[disabled]:hover,.factory-bootstrap-446 fieldset[disabled] .btn-success,.factory-bootstrap-446 fieldset[disabled] .btn-success.active,.factory-bootstrap-446 fieldset[disabled] .btn-success:active,.factory-bootstrap-446 fieldset[disabled] .btn-success:focus,.factory-bootstrap-446 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-446 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-446 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-446 .btn-info.active,.factory-bootstrap-446 .btn-info:active,.factory-bootstrap-446 .btn-info:focus,.factory-bootstrap-446 .btn-info:hover,.factory-bootstrap-446 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-446 .btn-info.active,.factory-bootstrap-446 .btn-info:active,.factory-bootstrap-446 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-446 .btn-info.disabled,.factory-bootstrap-446 .btn-info.disabled.active,.factory-bootstrap-446 .btn-info.disabled:active,.factory-bootstrap-446 .btn-info.disabled:focus,.factory-bootstrap-446 .btn-info.disabled:hover,.factory-bootstrap-446 .btn-info[disabled],.factory-bootstrap-446 .btn-info[disabled].active,.factory-bootstrap-446 .btn-info[disabled]:active,.factory-bootstrap-446 .btn-info[disabled]:focus,.factory-bootstrap-446 .btn-info[disabled]:hover,.factory-bootstrap-446 fieldset[disabled] .btn-info,.factory-bootstrap-446 fieldset[disabled] .btn-info.active,.factory-bootstrap-446 fieldset[disabled] .btn-info:active,.factory-bootstrap-446 fieldset[disabled] .btn-info:focus,.factory-bootstrap-446 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-446 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-446 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-446 .btn-link,.factory-bootstrap-446 .btn-link:active,.factory-bootstrap-446 .btn-link[disabled],.factory-bootstrap-446 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-446 .btn-link,.factory-bootstrap-446 .btn-link:active,.factory-bootstrap-446 .btn-link:focus,.factory-bootstrap-446 .btn-link:hover{border-color:transparent}.factory-bootstrap-446 .btn-link:focus,.factory-bootstrap-446 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-446 .btn-link[disabled]:focus,.factory-bootstrap-446 .btn-link[disabled]:hover,.factory-bootstrap-446 fieldset[disabled] .btn-link:focus,.factory-bootstrap-446 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-446 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-446 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-446 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-446 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-446 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-446 input[type=button].btn-block,.factory-bootstrap-446 input[type=reset].btn-block,.factory-bootstrap-446 input[type=submit].btn-block{width:100%}.factory-bootstrap-446 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-446 .fade.in{opacity:1}.factory-bootstrap-446 .collapse{display:none}.factory-bootstrap-446 .collapse.in{display:block}.factory-bootstrap-446 .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular) format('svg')}.factory-bootstrap-446 .glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.factory-bootstrap-446 .glyphicon:empty{width:1em}.factory-bootstrap-446 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-446 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-446 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-446 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-446 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-446 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-446 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-446 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-446 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-446 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-446 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-446 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-446 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-446 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-446 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-446 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-446 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-446 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-446 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-446 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-446 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-446 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-446 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-446 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-446 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-446 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-446 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-446 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-446 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-446 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-446 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-446 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-446 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-446 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-446 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-446 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-446 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-446 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-446 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-446 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-446 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-446 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-446 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-446 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-446 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-446 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-446 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-446 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-446 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-446 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-446 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-446 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-446 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-446 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-446 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-446 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-446 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-446 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-446 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-446 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-446 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-446 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-446 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-446 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-446 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-446 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-446 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-446 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-446 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-446 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-446 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-446 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-446 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-446 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-446 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-446 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-446 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-446 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-446 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-446 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-446 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-446 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-446 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-446 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-446 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-446 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-446 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-446 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-446 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-446 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-446 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-446 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-446 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-446 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-446 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-446 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-446 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-446 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-446 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-446 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-446 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-446 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-446 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-446 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-446 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-446 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-446 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-446 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-446 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-446 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-446 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-446 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-446 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-446 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-446 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-446 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-446 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-446 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-446 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-446 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-446 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-446 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-446 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-446 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-446 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-446 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-446 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-446 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-446 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-446 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-446 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-446 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-446 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-446 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-446 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-446 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-446 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-446 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-446 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-446 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-446 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-446 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-446 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-446 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-446 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-446 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-446 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-446 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-446 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-446 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-446 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-446 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-446 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-446 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-446 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-446 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-446 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-446 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-446 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-446 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-446 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-446 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-446 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-446 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-446 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-446 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-446 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-446 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-446 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-446 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-446 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-446 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-446 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-446 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-446 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-446 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-446 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-446 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-446 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-446 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-446 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-446 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-446 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-446 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-446 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-446 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-446 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-446 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-446 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-446 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-446 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-446 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-446 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-446 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-446 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-446 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-446 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-446 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-446 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-446 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-446 .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.factory-bootstrap-446 .dropdown{position:relative}.factory-bootstrap-446 .dropdown-toggle:focus{outline:0}.factory-bootstrap-446 .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.factory-bootstrap-446 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-446 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-446 .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:nowrap}.factory-bootstrap-446 .dropdown-menu>li>a:focus,.factory-bootstrap-446 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-446 .dropdown-menu>.active>a,.factory-bootstrap-446 .dropdown-menu>.active>a:focus,.factory-bootstrap-446 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-446 .dropdown-menu>.disabled>a,.factory-bootstrap-446 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-446 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-446 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-446 .dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-446 .open>.dropdown-menu{display:block}.factory-bootstrap-446 .open>a{outline:0}.factory-bootstrap-446 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-446 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-446 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-446 .dropup .caret,.factory-bootstrap-446 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-446 .dropup .dropdown-menu,.factory-bootstrap-446 .navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.factory-bootstrap-446 .btn-group,.factory-bootstrap-446 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-446 .btn-group-vertical>.btn,.factory-bootstrap-446 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-446 .btn-group-vertical>.btn.active,.factory-bootstrap-446 .btn-group-vertical>.btn:active,.factory-bootstrap-446 .btn-group-vertical>.btn:focus,.factory-bootstrap-446 .btn-group-vertical>.btn:hover,.factory-bootstrap-446 .btn-group>.btn.active,.factory-bootstrap-446 .btn-group>.btn:active,.factory-bootstrap-446 .btn-group>.btn:focus,.factory-bootstrap-446 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-446 .btn-group-vertical>.btn:focus,.factory-bootstrap-446 .btn-group>.btn:focus{outline:0}.factory-bootstrap-446 .btn-group .btn+.btn,.factory-bootstrap-446 .btn-group .btn+.btn-group,.factory-bootstrap-446 .btn-group .btn-group+.btn,.factory-bootstrap-446 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-446 .btn-toolbar:after,.factory-bootstrap-446 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-446 .btn-toolbar:after{clear:both}.factory-bootstrap-446 .btn-toolbar .btn-group{float:left}.factory-bootstrap-446 .btn-toolbar>.btn+.btn,.factory-bootstrap-446 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-446 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-446 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-446 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-446 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-446 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-446 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-446 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-446 .btn-group>.btn-group{float:left}.factory-bootstrap-446 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-446 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-446 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-446 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-446 .btn-group .dropdown-toggle:active,.factory-bootstrap-446 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-446 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-446 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-446 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-446 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-446 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-446 .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.factory-bootstrap-446 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-446 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-446 .btn-group .btn.active.value{text-shadow:none;color:#fff;background-color:#33aad5;-webkit-box-shadow:inset 0 1px 1px #0074a2;box-shadow:inset 0 1px 3px #0074a2;border-top:1px solid #0074a2;border-bottom:1px solid #0074a2;border-left:1px solid #0074a2}.factory-bootstrap-446 .btn .caret{margin-left:0}.factory-bootstrap-446 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-446 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-446 .btn-group-vertical>.btn,.factory-bootstrap-446 .btn-group-vertical>.btn-group,.factory-bootstrap-446 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-446 .btn-group-vertical>.btn-group:after,.factory-bootstrap-446 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-446 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-446 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-446 .btn-group-vertical>.btn+.btn,.factory-bootstrap-446 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-446 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-446 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-446 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-446 .btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-446 .btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.factory-bootstrap-446 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-446 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-446 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-446 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-446 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-446 .btn-group-justified>.btn,.factory-bootstrap-446 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-446 .btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=checkbox],[data-toggle=buttons]>.btn>input[type=radio]{display:none}.factory-bootstrap-446 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-446 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-446 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-446 .input-group-lg>.form-control,.factory-bootstrap-446 .input-group-lg>.input-group-addon,.factory-bootstrap-446 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-446 select.input-group-lg>.form-control,.factory-bootstrap-446 select.input-group-lg>.input-group-addon,.factory-bootstrap-446 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-446 textarea.input-group-lg>.form-control,.factory-bootstrap-446 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-446 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-446 .input-group-sm>.form-control,.factory-bootstrap-446 .input-group-sm>.input-group-addon,.factory-bootstrap-446 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-446 select.input-group-sm>.form-control,.factory-bootstrap-446 select.input-group-sm>.input-group-addon,.factory-bootstrap-446 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-446 textarea.input-group-sm>.form-control,.factory-bootstrap-446 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-446 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-446 .input-group .form-control,.factory-bootstrap-446 .input-group-addon,.factory-bootstrap-446 .input-group-btn{display:table-cell}.factory-bootstrap-446 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-446 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-446 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-446 .input-group-addon,.factory-bootstrap-446 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-446 .input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.factory-bootstrap-446 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-446 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-446 .input-group-addon input[type=checkbox],.factory-bootstrap-446 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-446 .input-group .form-control:first-child,.factory-bootstrap-446 .input-group-addon:first-child,.factory-bootstrap-446 .input-group-btn:first-child>.btn,.factory-bootstrap-446 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-446 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-446 .input-group-addon:first-child{border-right:0}.factory-bootstrap-446 .input-group .form-control:last-child,.factory-bootstrap-446 .input-group-addon:last-child,.factory-bootstrap-446 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-446 .input-group-btn:last-child>.btn,.factory-bootstrap-446 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-446 .input-group-addon:last-child{border-left:0}.factory-bootstrap-446 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-446 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-446 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-446 .input-group-btn>.btn{position:relative}.factory-bootstrap-446 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-446 .input-group-btn>.btn:active,.factory-bootstrap-446 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-446 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-446 .nav:after,.factory-bootstrap-446 .nav:before{display:table;content:" "}.factory-bootstrap-446 .nav:after{clear:both}.factory-bootstrap-446 .nav>li{position:relative;display:block}.factory-bootstrap-446 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-446 .nav>li>a:focus,.factory-bootstrap-446 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-446 .nav>li.disabled>a{color:#999}.factory-bootstrap-446 .nav>li.disabled>a:focus,.factory-bootstrap-446 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-446 .nav .open>a,.factory-bootstrap-446 .nav .open>a:focus,.factory-bootstrap-446 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-446 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-446 .nav>li>a>img{max-width:none}.factory-bootstrap-446 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-446 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-446 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-446 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-446 .nav-tabs>li.active>a,.factory-bootstrap-446 .nav-tabs>li.active>a:focus,.factory-bootstrap-446 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-446 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-446 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-446 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-446 .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.factory-bootstrap-446 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-446 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-446 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-446 .nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.factory-bootstrap-446 .nav-pills>li{float:left}.factory-bootstrap-446 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-446 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-446 .nav-pills>li.active>a,.factory-bootstrap-446 .nav-pills>li.active>a:focus,.factory-bootstrap-446 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-446 .nav-stacked>li{float:none}.factory-bootstrap-446 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-446 .nav-justified{width:100%}.factory-bootstrap-446 .nav-justified>li{float:none}.factory-bootstrap-446 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-446 .nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.factory-bootstrap-446 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-446 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-446 .nav-tabs-justified>.active>a,.factory-bootstrap-446 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-446 .nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.factory-bootstrap-446 .tab-content>.tab-pane{display:none}.factory-bootstrap-446 .tab-content>.active{display:block}.factory-bootstrap-446 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-446 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-446 .navbar:after,.factory-bootstrap-446 .navbar:before{display:table;content:" "}.factory-bootstrap-446 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-446 .navbar-header:after,.factory-bootstrap-446 .navbar-header:before{display:table;content:" "}.factory-bootstrap-446 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-446 .navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.factory-bootstrap-446 .navbar-collapse:after,.factory-bootstrap-446 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-446 .navbar-collapse:after{clear:both}.factory-bootstrap-446 .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.factory-bootstrap-446 .container>.navbar-collapse,.factory-bootstrap-446 .container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.factory-bootstrap-446 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-446 .navbar-fixed-bottom,.factory-bootstrap-446 .navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.factory-bootstrap-446 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-446 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-446 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-446 .navbar-brand:focus,.factory-bootstrap-446 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-446 .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.factory-bootstrap-446 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-446 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-446 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-446 .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.factory-bootstrap-446 .navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form select.form-control{width:auto}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.factory-bootstrap-446 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-446 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-446 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-446 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-446 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-446 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-446 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-446 .navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.factory-bootstrap-446 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-446 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-446 .navbar-default .navbar-brand:focus,.factory-bootstrap-446 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-446 .navbar-default .navbar-nav>li>a,.factory-bootstrap-446 .navbar-default .navbar-text{color:#777}.factory-bootstrap-446 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-446 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-446 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-446 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-446 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-446 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-446 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-446 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-446 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-446 .navbar-default .navbar-toggle:focus,.factory-bootstrap-446 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-446 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-446 .navbar-default .navbar-collapse,.factory-bootstrap-446 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-446 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-446 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-446 .navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.factory-bootstrap-446 .navbar-default .navbar-link{color:#777}.factory-bootstrap-446 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-446 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-446 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-446 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-446 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-446 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-446 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-446 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-446 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-446 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-446 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-446 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-446 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-446 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-446 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-446 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-446 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-446 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-446 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-446 .navbar-inverse .navbar-collapse,.factory-bootstrap-446 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-446 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-446 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-446 .navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.factory-bootstrap-446 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-446 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-446 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-446 .breadcrumb>li{display:inline-block}.factory-bootstrap-446 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-446 .breadcrumb>.active{color:#999}.factory-bootstrap-446 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-446 .pagination>li{display:inline}.factory-bootstrap-446 .pagination>li>a,.factory-bootstrap-446 .pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-446 .pagination>li:first-child>a,.factory-bootstrap-446 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-446 .pagination>li:last-child>a,.factory-bootstrap-446 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-446 .pagination>li>a:focus,.factory-bootstrap-446 .pagination>li>a:hover,.factory-bootstrap-446 .pagination>li>span:focus,.factory-bootstrap-446 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-446 .pagination>.active>a,.factory-bootstrap-446 .pagination>.active>a:focus,.factory-bootstrap-446 .pagination>.active>a:hover,.factory-bootstrap-446 .pagination>.active>span,.factory-bootstrap-446 .pagination>.active>span:focus,.factory-bootstrap-446 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-446 .pagination>.disabled>a,.factory-bootstrap-446 .pagination>.disabled>a:focus,.factory-bootstrap-446 .pagination>.disabled>a:hover,.factory-bootstrap-446 .pagination>.disabled>span,.factory-bootstrap-446 .pagination>.disabled>span:focus,.factory-bootstrap-446 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-446 .pagination-lg>li>a,.factory-bootstrap-446 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-446 .pagination-lg>li:first-child>a,.factory-bootstrap-446 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-446 .pagination-lg>li:last-child>a,.factory-bootstrap-446 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-446 .pagination-sm>li>a,.factory-bootstrap-446 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-446 .pagination-sm>li:first-child>a,.factory-bootstrap-446 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-446 .pagination-sm>li:last-child>a,.factory-bootstrap-446 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-446 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-446 .pager:after,.factory-bootstrap-446 .pager:before{display:table;content:" "}.factory-bootstrap-446 .pager:after{clear:both}.factory-bootstrap-446 .pager li{display:inline}.factory-bootstrap-446 .pager li>a,.factory-bootstrap-446 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-446 .pager li>a:focus,.factory-bootstrap-446 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-446 .pager .next>a,.factory-bootstrap-446 .pager .next>span{float:right}.factory-bootstrap-446 .pager .previous>a,.factory-bootstrap-446 .pager .previous>span{float:left}.factory-bootstrap-446 .pager .disabled>a,.factory-bootstrap-446 .pager .disabled>a:focus,.factory-bootstrap-446 .pager .disabled>a:hover,.factory-bootstrap-446 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-446 .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.factory-bootstrap-446 .label[href]:focus,.factory-bootstrap-446 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-446 .label:empty{display:none}.factory-bootstrap-446 .btn .label{position:relative;top:-1px}.factory-bootstrap-446 .label-default{background-color:#999}.factory-bootstrap-446 .label-default[href]:focus,.factory-bootstrap-446 .label-default[href]:hover{background-color:gray}.factory-bootstrap-446 .label-primary{background-color:#428bca}.factory-bootstrap-446 .label-primary[href]:focus,.factory-bootstrap-446 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-446 .label-success{background-color:#5cb85c}.factory-bootstrap-446 .label-success[href]:focus,.factory-bootstrap-446 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-446 .label-info{background-color:#5bc0de}.factory-bootstrap-446 .label-info[href]:focus,.factory-bootstrap-446 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-446 .label-warning{background-color:#f0ad4e}.factory-bootstrap-446 .label-warning[href]:focus,.factory-bootstrap-446 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-446 .label-danger{background-color:#d9534f}.factory-bootstrap-446 .label-danger[href]:focus,.factory-bootstrap-446 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-446 .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.factory-bootstrap-446 .badge:empty{display:none}.factory-bootstrap-446 .btn .badge{position:relative;top:-1px}.factory-bootstrap-446 a.badge:focus,.factory-bootstrap-446 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-446 .nav-pills>.active>a>.badge,.factory-bootstrap-446 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-446 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-446 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-446 .jumbotron .h1,.factory-bootstrap-446 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-446 .jumbotron p{line-height:1.4}.factory-bootstrap-446 .container .jumbotron{border-radius:6px}.factory-bootstrap-446 .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.factory-bootstrap-446 .thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.factory-bootstrap-446 .thumbnail a>img,.factory-bootstrap-446 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-446 a.thumbnail.active,.factory-bootstrap-446 a.thumbnail:focus,.factory-bootstrap-446 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-446 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-446 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-446 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-446 .alert .alert-link{font-weight:700}.factory-bootstrap-446 .alert>p,.factory-bootstrap-446 .alert>ul{margin-bottom:0}.factory-bootstrap-446 .alert>p+p{margin-top:5px}.factory-bootstrap-446 .alert-dismissable{padding-right:35px}.factory-bootstrap-446 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-446 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-446 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-446 .alert-info .alert-link{color:#245269}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.factory-bootstrap-446 .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.factory-bootstrap-446 .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#2ea2cc;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.factory-bootstrap-446 .progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.factory-bootstrap-446 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-446 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-446 .progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-446 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-446 .progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-446 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-446 .progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-446 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-446 .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-446 .media,.factory-bootstrap-446 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-446 .media,.factory-bootstrap-446 .media .media{margin-top:15px}.factory-bootstrap-446 .media:first-child{margin-top:0}.factory-bootstrap-446 .media-object{display:block}.factory-bootstrap-446 .media-heading{margin:0 0 5px}.factory-bootstrap-446 .media>.pull-left{margin-right:10px}.factory-bootstrap-446 .media>.pull-right{margin-left:10px}.factory-bootstrap-446 .media-list{padding-left:0;list-style:none}.factory-bootstrap-446 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-446 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-446 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-446 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-446 .list-group-item>.badge{float:right}.factory-bootstrap-446 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-446 a.list-group-item{color:#555}.factory-bootstrap-446 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-446 a.list-group-item:focus,.factory-bootstrap-446 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-446 a.list-group-item.active,.factory-bootstrap-446 a.list-group-item.active:focus,.factory-bootstrap-446 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-446 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-446 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-446 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-446 a.list-group-item.active .list-group-item-text,.factory-bootstrap-446 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-446 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-446 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-446 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-446 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-446 .panel-body{padding:15px}.factory-bootstrap-446 .panel-body:after,.factory-bootstrap-446 .panel-body:before{display:table;content:" "}.factory-bootstrap-446 .panel-body:after{clear:both}.factory-bootstrap-446 .panel>.list-group{margin-bottom:0}.factory-bootstrap-446 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-446 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-446 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-446 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-446 .panel>.table,.factory-bootstrap-446 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-446 .panel>.panel-body+.table,.factory-bootstrap-446 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-446 .panel>.table>tbody:first-child td,.factory-bootstrap-446 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-446 .panel>.table-bordered,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-446 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-446 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-446 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-446 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-446 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-446 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-446 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-446 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-446 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-446 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-446 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-446 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-446 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-446 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-446 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-446 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-446 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-446 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-446 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-446 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-446 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-446 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-446 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-446 .panel-title>a{color:inherit}.factory-bootstrap-446 .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.factory-bootstrap-446 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-446 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-446 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-446 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-446 .panel-group .panel-footer{border-top:0}.factory-bootstrap-446 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-446 .panel-default{border-color:#ddd}.factory-bootstrap-446 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-446 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-446 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-446 .panel-primary{border-color:#428bca}.factory-bootstrap-446 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-446 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-446 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-446 .panel-success{border-color:#d6e9c6}.factory-bootstrap-446 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-446 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-446 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-446 .panel-warning{border-color:#faebcc}.factory-bootstrap-446 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-446 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-446 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-446 .panel-danger{border-color:#ebccd1}.factory-bootstrap-446 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-446 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-446 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-446 .panel-info{border-color:#bce8f1}.factory-bootstrap-446 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-446 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-446 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-446 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-446 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-446 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-446 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-446 .close{float:right;font-size:14px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.3;filter:alpha(opacity=30)}.factory-bootstrap-446 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-446 .close:focus,.factory-bootstrap-446 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-446 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-446 .modal-open{overflow:hidden}.factory-bootstrap-446 .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll;width:auto;margin-left:0;background-color:transparent;border:0}.factory-bootstrap-446 .modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.factory-bootstrap-446 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-446 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-446 .modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box}.factory-bootstrap-446 .modal-backdrop,.factory-bootstrap-446-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-446 .modal-backdrop.fade,.factory-bootstrap-446-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-446 .modal-backdrop.in,.factory-bootstrap-446-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-446 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-446 .modal-header .close{margin-top:-2px}.factory-bootstrap-446 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-446 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-446 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-446 .modal-footer:after,.factory-bootstrap-446 .modal-footer:before{display:table;content:" "}.factory-bootstrap-446 .modal-footer:after{clear:both}.factory-bootstrap-446 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-446 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-446 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-446 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-446 .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}}.factory-bootstrap-446 .tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.factory-bootstrap-446 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-446 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-446 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-446 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-446 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-446 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-446 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-446 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-446 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-446 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-446 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-446 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-446 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-446 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-446 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-446 .popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);background-clip:padding-box}.factory-bootstrap-446 .popover.top{margin-top:-10px}.factory-bootstrap-446 .popover.right{margin-left:10px}.factory-bootstrap-446 .popover.bottom{margin-top:10px}.factory-bootstrap-446 .popover.left{margin-left:-10px}.factory-bootstrap-446 .popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.factory-bootstrap-446 .popover-content{padding:9px 14px}.factory-bootstrap-446 .popover .arrow,.factory-bootstrap-446 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-446 .popover .arrow{border-width:11px}.factory-bootstrap-446 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-446 .popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.factory-bootstrap-446 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-446 .popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.factory-bootstrap-446 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-446 .popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0}.factory-bootstrap-446 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-446 .popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,.25);border-right-width:0}.factory-bootstrap-446 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-446 .carousel{position:relative}.factory-bootstrap-446 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-446 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-446 .carousel-inner>.item>a>img,.factory-bootstrap-446 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-446 .carousel-inner>.active,.factory-bootstrap-446 .carousel-inner>.next,.factory-bootstrap-446 .carousel-inner>.prev{display:block}.factory-bootstrap-446 .carousel-inner>.active{left:0}.factory-bootstrap-446 .carousel-inner>.next,.factory-bootstrap-446 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-446 .carousel-inner>.next{left:100%}.factory-bootstrap-446 .carousel-inner>.prev{left:-100%}.factory-bootstrap-446 .carousel-inner>.next.left,.factory-bootstrap-446 .carousel-inner>.prev.right{left:0}.factory-bootstrap-446 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-446 .carousel-inner>.active.right{left:100%}.factory-bootstrap-446 .carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-446 .carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.factory-bootstrap-446 .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.factory-bootstrap-446 .carousel-control:focus,.factory-bootstrap-446 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-446 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-446 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-446 .carousel-control .icon-next,.factory-bootstrap-446 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-446 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-446 .carousel-control .icon-prev{left:50%}.factory-bootstrap-446 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-446 .carousel-control .icon-next{right:50%}.factory-bootstrap-446 .carousel-control .icon-next,.factory-bootstrap-446 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-446 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-446 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-446 .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.factory-bootstrap-446 .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.factory-bootstrap-446 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-446 .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.factory-bootstrap-446 .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.factory-bootstrap-446 .clearfix:after,.factory-bootstrap-446 .clearfix:before{display:table;content:" "}.factory-bootstrap-446 .clearfix:after{clear:both}.factory-bootstrap-446 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-446 .pull-right{float:right!important}.factory-bootstrap-446 .pull-left{float:left!important}.factory-bootstrap-446 .hide{display:none!important}.factory-bootstrap-446 .show{display:block!important}.factory-bootstrap-446 .invisible{visibility:hidden}.factory-bootstrap-446 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-446 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-446 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-446 .visible-lg,.factory-bootstrap-446 .visible-md,.factory-bootstrap-446 .visible-sm,.factory-bootstrap-446 .visible-xs,.factory-bootstrap-446 td.visible-lg,.factory-bootstrap-446 td.visible-md,.factory-bootstrap-446 td.visible-sm,.factory-bootstrap-446 td.visible-xs,.factory-bootstrap-446 th.visible-lg,.factory-bootstrap-446 th.visible-md,.factory-bootstrap-446 th.visible-sm,.factory-bootstrap-446 th.visible-xs,.factory-bootstrap-446 tr.visible-lg,.factory-bootstrap-446 tr.visible-md,.factory-bootstrap-446 tr.visible-sm,.factory-bootstrap-446 tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}table.visible-xs.visible-sm{display:table}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}table.visible-xs.visible-md{display:table}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-xs.visible-lg{display:block!important}table.visible-xs.visible-lg{display:table}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}table.visible-sm.visible-xs{display:table}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}table.visible-sm.visible-md{display:table}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-sm.visible-lg{display:block!important}table.visible-sm.visible-lg{display:table}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-md.visible-xs{display:block!important}table.visible-md.visible-xs{display:table}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}table.visible-md.visible-sm{display:table}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-md.visible-lg{display:block!important}table.visible-md.visible-lg{display:table}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}table.visible-lg.visible-xs{display:table}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}table.visible-lg.visible-sm{display:table}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}table.visible-lg.visible-md{display:table}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.factory-bootstrap-446 .hidden-xs{display:block!important}.factory-bootstrap-446 table.hidden-xs{display:table}.factory-bootstrap-446 tr.hidden-xs{display:table-row!important}.factory-bootstrap-446 td.hidden-xs,.factory-bootstrap-446 th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.factory-bootstrap-446 .hidden-sm{display:block!important}.factory-bootstrap-446 table.hidden-sm{display:table}.factory-bootstrap-446 tr.hidden-sm{display:table-row!important}.factory-bootstrap-446 td.hidden-sm,.factory-bootstrap-446 th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.factory-bootstrap-446 .hidden-md{display:block!important}.factory-bootstrap-446 table.hidden-md{display:table}.factory-bootstrap-446 tr.hidden-md{display:table-row!important}.factory-bootstrap-446 td.hidden-md,.factory-bootstrap-446 th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.factory-bootstrap-446 .hidden-lg{display:block!important}.factory-bootstrap-446 table.hidden-lg{display:table}.factory-bootstrap-446 tr.hidden-lg{display:table-row!important}.factory-bootstrap-446 td.hidden-lg,.factory-bootstrap-446 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-446 .hidden-lg.hidden-xs,.factory-bootstrap-446 td.hidden-lg.hidden-xs,.factory-bootstrap-446 th.hidden-lg.hidden-xs,.factory-bootstrap-446 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-446 .hidden-lg.hidden-sm,.factory-bootstrap-446 td.hidden-lg.hidden-sm,.factory-bootstrap-446 th.hidden-lg.hidden-sm,.factory-bootstrap-446 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-446 .hidden-lg.hidden-md,.factory-bootstrap-446 td.hidden-lg.hidden-md,.factory-bootstrap-446 th.hidden-lg.hidden-md,.factory-bootstrap-446 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-446 .hidden-lg,.factory-bootstrap-446 td.hidden-lg,.factory-bootstrap-446 th.hidden-lg,.factory-bootstrap-446 tr.hidden-lg{display:none!important}}.factory-bootstrap-446 .visible-print,.factory-bootstrap-446 td.visible-print,.factory-bootstrap-446 th.visible-print,.factory-bootstrap-446 tr.visible-print{display:none!important}@media print{.factory-bootstrap-446 .visible-print{display:block!important}.factory-bootstrap-446 table.visible-print{display:table}.factory-bootstrap-446 tr.visible-print{display:table-row!important}.factory-bootstrap-446 td.visible-print,.factory-bootstrap-446 th.visible-print{display:table-cell!important}.factory-bootstrap-446 .hidden-print,.factory-bootstrap-446 td.hidden-print,.factory-bootstrap-446 th.hidden-print,.factory-bootstrap-446 tr.hidden-print{display:none!important}}/*!
|
12 |
* Factory Default Bootstrap Theme
|
13 |
*
|
14 |
* The code is based on Bootstrap v2.1.1
|
@@ -22,4 +22,4 @@
|
|
22 |
*
|
23 |
* @package factory-bootstrap
|
24 |
* @since 1.0.0
|
25 |
-
*/.factory-bootstrap-446 .btn-danger,.factory-bootstrap-446 .btn-default,.factory-bootstrap-446 .btn-info,.factory-bootstrap-446 .btn-primary,.factory-bootstrap-446 .btn-success,.factory-bootstrap-446 .btn-warning{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-446 .btn-danger.active,.factory-bootstrap-446 .btn-danger:active,.factory-bootstrap-446 .btn-default.active,.factory-bootstrap-446 .btn-default:active,.factory-bootstrap-446 .btn-info.active,.factory-bootstrap-446 .btn-info:active,.factory-bootstrap-446 .btn-primary.active,.factory-bootstrap-446 .btn-primary:active,.factory-bootstrap-446 .btn-success.active,.factory-bootstrap-446 .btn-success:active,.factory-bootstrap-446 .btn-warning.active,.factory-bootstrap-446 .btn-warning:active{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.factory-bootstrap-446 .btn.active,.factory-bootstrap-446 .btn:active{background-image:none}.factory-bootstrap-446 .btn-default{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.factory-bootstrap-446 .btn-default.active,.factory-bootstrap-446 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-446 .btn-gold{font-weight:700;padding:7px 12px;cursor:pointer;line-height:16px;display:inline-block;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;box-shadow:#e3e3e3 0 1px 1px;-moz-box-shadow:0 1px 1px rgba(000,000,000,.1),inset 0 1px 1px rgba(255,255,255,.7);-webkit-box-shadow:0 1px 1px rgba(000,000,000,.1),inset 0 1px 1px rgba(255,255,255,.7);text-shadow:1px 1px 0 #ffe8b2;color:#7c5d1b;border:1px solid #d6a437;background:#feeb80}.factory-bootstrap-446 .btn-gold:focus,.factory-bootstrap-446 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-446 .btn-gold.active,.factory-bootstrap-446 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-446 .btn-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.factory-bootstrap-446 .btn-primary:focus,.factory-bootstrap-446 .btn-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.factory-bootstrap-446 .btn-primary.active,.factory-bootstrap-446 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-446 .btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);background-repeat:repeat-x;border-color:#3e8f3e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-446 .btn-success:focus,.factory-bootstrap-446 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-446 .btn-success.active,.factory-bootstrap-446 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-446 .btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);background-repeat:repeat-x;border-color:#e38d13;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-446 .btn-warning:focus,.factory-bootstrap-446 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-446 .btn-warning.active,.factory-bootstrap-446 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-446 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-446 .btn-danger.active,.factory-bootstrap-446 .btn-danger:active,.factory-bootstrap-446 .btn-danger:focus,.factory-bootstrap-446 .btn-danger:hover,.factory-bootstrap-446 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-446 .btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);background-repeat:repeat-x;border-color:#28a4c9;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-446 .btn-info:focus,.factory-bootstrap-446 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-446 .btn-info.active,.factory-bootstrap-446 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-446 .img-thumbnail,.factory-bootstrap-446 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-446 .dropdown-menu>li>a:focus,.factory-bootstrap-446 .dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.factory-bootstrap-446 .dropdown-menu>.active>a,.factory-bootstrap-446 .dropdown-menu>.active>a:focus,.factory-bootstrap-446 .dropdown-menu>.active>a:hover{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.factory-bootstrap-446 .navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.factory-bootstrap-446 .navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.factory-bootstrap-446 .navbar-brand,.factory-bootstrap-446 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-446 .navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-446 .navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.factory-bootstrap-446 .navbar-inverse .navbar-brand,.factory-bootstrap-446 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-446 .navbar-fixed-bottom,.factory-bootstrap-446 .navbar-fixed-top,.factory-bootstrap-446 .navbar-static-top{border-radius:0}.factory-bootstrap-446 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-446 .alert .actions{padding-top:10px}.factory-bootstrap-446 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-446 .alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0)}.factory-bootstrap-446 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-446 .alert-normal,.factory-bootstrap-446 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-446 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-446 .alert-danger a:not(.btn),.factory-bootstrap-446 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-446 .progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.factory-bootstrap-446 .progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.factory-bootstrap-446 .progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.factory-bootstrap-446 .progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.factory-bootstrap-446 .progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.factory-bootstrap-446 .progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.factory-bootstrap-446 .list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-446 .list-group-item.active,.factory-bootstrap-446 .list-group-item.active:focus,.factory-bootstrap-446 .list-group-item.active:hover{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0)}.factory-bootstrap-446 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-446 .panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.factory-bootstrap-446 .panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.factory-bootstrap-446 .panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.factory-bootstrap-446 .panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.factory-bootstrap-446 .panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.factory-bootstrap-446 .panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.factory-bootstrap-446 .well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}.factory-bootstrap-446 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-446 .factory-hidden{display:none}.factory-bootstrap-446 .factory-ajax-loader{width:25px;height:25px;background:url(../assets/images/loader-sm-tr.gif)}.factory-control-error{background-color:rgba(0,0,0,.8);white-space:normal;z-index:10;font-weight:400;line-height:150%;border-radius:4px;color:#fff;font-size:13px;margin-top:5px;padding:4px 10px 3px;max-width:500px;display:inline-block}.factory-control-error i{margin:0 7px 0 1px}
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 article,.factory-bootstrap-448 aside,.factory-bootstrap-448 details,.factory-bootstrap-448 figcaption,.factory-bootstrap-448 figure,.factory-bootstrap-448 footer,.factory-bootstrap-448 header,.factory-bootstrap-448 hgroup,.factory-bootstrap-448 main,.factory-bootstrap-448 nav,.factory-bootstrap-448 section,.factory-bootstrap-448 summary{display:block}.factory-bootstrap-448 audio,.factory-bootstrap-448 canvas,.factory-bootstrap-448 video{display:inline-block}.factory-bootstrap-448 audio:not([controls]){display:none;height:0}.factory-bootstrap-448 [hidden],.factory-bootstrap-448 template{display:none}.factory-bootstrap-448 body{margin:0}.factory-bootstrap-448 a{background:0 0}.factory-bootstrap-448 a:focus{outline:thin dotted}.factory-bootstrap-448 a:active,.factory-bootstrap-448 a:hover{outline:0}.factory-bootstrap-448 h1{margin:.67em 0}.factory-bootstrap-448 b,.factory-bootstrap-448 strong{font-weight:700}.factory-bootstrap-448 dfn{font-style:italic}.factory-bootstrap-448 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-448 mark{color:#000;background:#ff0}.factory-bootstrap-448 code,.factory-bootstrap-448 kbd,.factory-bootstrap-448 pre,.factory-bootstrap-448 samp{font-size:1em}.factory-bootstrap-448 pre{white-space:pre-wrap}.factory-bootstrap-448 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-448 sub,.factory-bootstrap-448 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-448 sup{top:-.5em}.factory-bootstrap-448 sub{bottom:-.25em}.factory-bootstrap-448 img{border:0}.factory-bootstrap-448 svg:not(:root){overflow:hidden}.factory-bootstrap-448 figure{margin:0}.factory-bootstrap-448 button,.factory-bootstrap-448 input,.factory-bootstrap-448 select,.factory-bootstrap-448 textarea{margin:0}.factory-bootstrap-448 button,.factory-bootstrap-448 select{text-transform:none}.factory-bootstrap-448 select{padding-right:4px!important}.factory-bootstrap-448 button,.factory-bootstrap-448 input[type=reset],.factory-bootstrap-448 input[type=submit],html .factory-bootstrap-448 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-448 button[disabled],html .factory-bootstrap-448 input[disabled]{cursor:default}.factory-bootstrap-448 input[type=checkbox],.factory-bootstrap-448 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-448 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-448 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-448 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-448 button::-moz-focus-inner,.factory-bootstrap-448 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-448 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-448 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-448 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-448 a,.factory-bootstrap-448 a:visited{text-decoration:underline}.factory-bootstrap-448 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-448 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-448 a[href^="javascript:"]:after,.factory-bootstrap-448 a[href^="#"]:after{content:""}.factory-bootstrap-448 blockquote,.factory-bootstrap-448 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-448 thead{display:table-header-group}.factory-bootstrap-448 img,.factory-bootstrap-448 tr{page-break-inside:avoid}.factory-bootstrap-448 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-448 h2,.factory-bootstrap-448 h3,.factory-bootstrap-448 p{orphans:3;widows:3}.factory-bootstrap-448 h2,.factory-bootstrap-448 h3{page-break-after:avoid}.factory-bootstrap-448 select{background:#fff!important}.factory-bootstrap-448 .navbar{display:none}.factory-bootstrap-448 .table td,.factory-bootstrap-448 .table th{background-color:#fff!important}.factory-bootstrap-448 .btn>.caret,.factory-bootstrap-448 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-448 .label{border:1px solid #000}.factory-bootstrap-448 .table{border-collapse:collapse!important}.factory-bootstrap-448 .table-bordered td,.factory-bootstrap-448 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-448 *,.factory-bootstrap-448 :after,.factory-bootstrap-448 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-448{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-448 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-448 button,.factory-bootstrap-448 input,.factory-bootstrap-448 select,.factory-bootstrap-448 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-448 img{vertical-align:middle}.factory-bootstrap-448 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-448 .img-rounded{border-radius:6px}.factory-bootstrap-448 .img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.factory-bootstrap-448 .img-circle{border-radius:50%}.factory-bootstrap-448 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-448 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-448 .h1,.factory-bootstrap-448 .h2,.factory-bootstrap-448 .h3,.factory-bootstrap-448 .h4,.factory-bootstrap-448 .h5,.factory-bootstrap-448 .h6,.factory-bootstrap-448 h1,.factory-bootstrap-448 h2,.factory-bootstrap-448 h3,.factory-bootstrap-448 h4,.factory-bootstrap-448 h5,.factory-bootstrap-448 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-448 .h1 .small,.factory-bootstrap-448 .h1 small,.factory-bootstrap-448 .h2 .small,.factory-bootstrap-448 .h2 small,.factory-bootstrap-448 .h3 .small,.factory-bootstrap-448 .h3 small,.factory-bootstrap-448 .h4 .small,.factory-bootstrap-448 .h4 small,.factory-bootstrap-448 .h5 .small,.factory-bootstrap-448 .h5 small,.factory-bootstrap-448 .h6 .small,.factory-bootstrap-448 .h6 small,.factory-bootstrap-448 h1 .small,.factory-bootstrap-448 h1 small,.factory-bootstrap-448 h2 .small,.factory-bootstrap-448 h2 small,.factory-bootstrap-448 h3 .small,.factory-bootstrap-448 h3 small,.factory-bootstrap-448 h4 .small,.factory-bootstrap-448 h4 small,.factory-bootstrap-448 h5 .small,.factory-bootstrap-448 h5 small,.factory-bootstrap-448 h6 .small,.factory-bootstrap-448 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-448 h1,.factory-bootstrap-448 h2,.factory-bootstrap-448 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-448 h1 .small,.factory-bootstrap-448 h1 small,.factory-bootstrap-448 h2 .small,.factory-bootstrap-448 h2 small,.factory-bootstrap-448 h3 .small,.factory-bootstrap-448 h3 small{font-size:65%}.factory-bootstrap-448 h4,.factory-bootstrap-448 h5,.factory-bootstrap-448 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-448 h4 .small,.factory-bootstrap-448 h4 small,.factory-bootstrap-448 h5 .small,.factory-bootstrap-448 h5 small,.factory-bootstrap-448 h6 .small,.factory-bootstrap-448 h6 small{font-size:75%}.factory-bootstrap-448 .h1,.factory-bootstrap-448 h1{font-size:36px}.factory-bootstrap-448 .h2,.factory-bootstrap-448 h2{font-size:30px}.factory-bootstrap-448 .h3,.factory-bootstrap-448 h3{font-size:24px}.factory-bootstrap-448 .h4,.factory-bootstrap-448 h4{font-size:18px}.factory-bootstrap-448 .h5,.factory-bootstrap-448 h5{font-size:14px}.factory-bootstrap-448 .h6,.factory-bootstrap-448 h6{font-size:12px}.factory-bootstrap-448 p{margin:0 0 10px}.factory-bootstrap-448 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-448 .small,.factory-bootstrap-448 small{font-size:85%}.factory-bootstrap-448 cite{font-style:normal}.factory-bootstrap-448 .text-muted{color:#999}.factory-bootstrap-448 .text-primary{color:#428bca}.factory-bootstrap-448 .text-primary:hover{color:#3071a9}.factory-bootstrap-448 .text-warning{color:#8a6d3b}.factory-bootstrap-448 .text-warning:hover{color:#66512c}.factory-bootstrap-448 .text-danger{color:#a94442}.factory-bootstrap-448 .text-danger:hover{color:#843534}.factory-bootstrap-448 .text-success{color:#3c763d}.factory-bootstrap-448 .text-success:hover{color:#2b542c}.factory-bootstrap-448 .text-info{color:#31708f}.factory-bootstrap-448 .text-info:hover{color:#245269}.factory-bootstrap-448 .text-left{text-align:left}.factory-bootstrap-448 .text-right{text-align:right}.factory-bootstrap-448 .text-center{text-align:center}.factory-bootstrap-448 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-448 ol,.factory-bootstrap-448 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-448 ol ol,.factory-bootstrap-448 ol ul,.factory-bootstrap-448 ul ol,.factory-bootstrap-448 ul ul{margin-bottom:0}.factory-bootstrap-448 .list-inline,.factory-bootstrap-448 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-448 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-448 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-448 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-448 dd,.factory-bootstrap-448 dt{line-height:1.428571429}.factory-bootstrap-448 dt{font-weight:700}.factory-bootstrap-448 dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:after,.dl-horizontal dd:before{display:table;content:" "}.dl-horizontal dd:after{clear:both}}.factory-bootstrap-448 abbr[data-original-title],.factory-bootstrap-448 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-448 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-448 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-448 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-448 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-448 blockquote .small,.factory-bootstrap-448 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-448 blockquote .small:before,.factory-bootstrap-448 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-448 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-448 blockquote.pull-right .small,.factory-bootstrap-448 blockquote.pull-right p,.factory-bootstrap-448 blockquote.pull-right small{text-align:right}.factory-bootstrap-448 blockquote.pull-right .small:before,.factory-bootstrap-448 blockquote.pull-right small:before{content:''}.factory-bootstrap-448 blockquote.pull-right .small:after,.factory-bootstrap-448 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-448 blockquote:after,.factory-bootstrap-448 blockquote:before{content:""}.factory-bootstrap-448 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-448 code,.factory-bootstrap-448 kbd,.factory-bootstrap-448 pre,.factory-bootstrap-448 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-448 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-448 pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.factory-bootstrap-448 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-448 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-448 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-448 .container:after,.factory-bootstrap-448 .container:before{display:table;content:" "}.factory-bootstrap-448 .container:after{clear:both}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.factory-bootstrap-448 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-448 .row:after,.factory-bootstrap-448 .row:before{display:table;content:" "}.factory-bootstrap-448 .row:after{clear:both}.factory-bootstrap-448 .col-lg-1,.factory-bootstrap-448 .col-lg-10,.factory-bootstrap-448 .col-lg-11,.factory-bootstrap-448 .col-lg-12,.factory-bootstrap-448 .col-lg-2,.factory-bootstrap-448 .col-lg-3,.factory-bootstrap-448 .col-lg-4,.factory-bootstrap-448 .col-lg-5,.factory-bootstrap-448 .col-lg-6,.factory-bootstrap-448 .col-lg-7,.factory-bootstrap-448 .col-lg-8,.factory-bootstrap-448 .col-lg-9,.factory-bootstrap-448 .col-md-1,.factory-bootstrap-448 .col-md-10,.factory-bootstrap-448 .col-md-11,.factory-bootstrap-448 .col-md-12,.factory-bootstrap-448 .col-md-2,.factory-bootstrap-448 .col-md-3,.factory-bootstrap-448 .col-md-4,.factory-bootstrap-448 .col-md-5,.factory-bootstrap-448 .col-md-6,.factory-bootstrap-448 .col-md-7,.factory-bootstrap-448 .col-md-8,.factory-bootstrap-448 .col-md-9,.factory-bootstrap-448 .col-sm-1,.factory-bootstrap-448 .col-sm-10,.factory-bootstrap-448 .col-sm-11,.factory-bootstrap-448 .col-sm-12,.factory-bootstrap-448 .col-sm-2,.factory-bootstrap-448 .col-sm-3,.factory-bootstrap-448 .col-sm-4,.factory-bootstrap-448 .col-sm-5,.factory-bootstrap-448 .col-sm-6,.factory-bootstrap-448 .col-sm-7,.factory-bootstrap-448 .col-sm-8,.factory-bootstrap-448 .col-sm-9,.factory-bootstrap-448 .col-xs-1,.factory-bootstrap-448 .col-xs-10,.factory-bootstrap-448 .col-xs-11,.factory-bootstrap-448 .col-xs-12,.factory-bootstrap-448 .col-xs-2,.factory-bootstrap-448 .col-xs-3,.factory-bootstrap-448 .col-xs-4,.factory-bootstrap-448 .col-xs-5,.factory-bootstrap-448 .col-xs-6,.factory-bootstrap-448 .col-xs-7,.factory-bootstrap-448 .col-xs-8,.factory-bootstrap-448 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-448 .col-xs-1,.factory-bootstrap-448 .col-xs-10,.factory-bootstrap-448 .col-xs-11,.factory-bootstrap-448 .col-xs-12,.factory-bootstrap-448 .col-xs-2,.factory-bootstrap-448 .col-xs-3,.factory-bootstrap-448 .col-xs-4,.factory-bootstrap-448 .col-xs-5,.factory-bootstrap-448 .col-xs-6,.factory-bootstrap-448 .col-xs-7,.factory-bootstrap-448 .col-xs-8,.factory-bootstrap-448 .col-xs-9{float:left}.factory-bootstrap-448 .col-xs-12{width:100%}.factory-bootstrap-448 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-448 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-448 .col-xs-9{width:75%}.factory-bootstrap-448 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-448 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-448 .col-xs-6{width:50%}.factory-bootstrap-448 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-448 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-448 .col-xs-3{width:25%}.factory-bootstrap-448 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-448 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-448 .col-xs-pull-12{right:100%}.factory-bootstrap-448 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-448 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-448 .col-xs-pull-9{right:75%}.factory-bootstrap-448 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-448 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-448 .col-xs-pull-6{right:50%}.factory-bootstrap-448 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-448 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-448 .col-xs-pull-3{right:25%}.factory-bootstrap-448 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-448 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-448 .col-xs-pull-0{right:0}.factory-bootstrap-448 .col-xs-push-12{left:100%}.factory-bootstrap-448 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-448 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-448 .col-xs-push-9{left:75%}.factory-bootstrap-448 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-448 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-448 .col-xs-push-6{left:50%}.factory-bootstrap-448 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-448 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-448 .col-xs-push-3{left:25%}.factory-bootstrap-448 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-448 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-448 .col-xs-push-0{left:0}.factory-bootstrap-448 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-448 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-448 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-448 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-448 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-448 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-448 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-448 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-448 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-448 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-448 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-448 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-448 .col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-0{margin-left:0}}.factory-bootstrap-448 table{max-width:100%;background-color:transparent}.factory-bootstrap-448 th{text-align:left}.factory-bootstrap-448 .table{width:100%;margin-bottom:20px}.factory-bootstrap-448 .table>tbody>tr>td,.factory-bootstrap-448 .table>tbody>tr>th,.factory-bootstrap-448 .table>tfoot>tr>td,.factory-bootstrap-448 .table>tfoot>tr>th,.factory-bootstrap-448 .table>thead>tr>td,.factory-bootstrap-448 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-448 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-448 .table>caption+thead>tr:first-child>td,.factory-bootstrap-448 .table>caption+thead>tr:first-child>th,.factory-bootstrap-448 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-448 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-448 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-448 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-448 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-448 .table .table{background-color:#fff}.factory-bootstrap-448 .table-condensed>tbody>tr>td,.factory-bootstrap-448 .table-condensed>tbody>tr>th,.factory-bootstrap-448 .table-condensed>tfoot>tr>td,.factory-bootstrap-448 .table-condensed>tfoot>tr>th,.factory-bootstrap-448 .table-condensed>thead>tr>td,.factory-bootstrap-448 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-448 .table-bordered,.factory-bootstrap-448 .table-bordered>tbody>tr>td,.factory-bootstrap-448 .table-bordered>tbody>tr>th,.factory-bootstrap-448 .table-bordered>tfoot>tr>td,.factory-bootstrap-448 .table-bordered>tfoot>tr>th,.factory-bootstrap-448 .table-bordered>thead>tr>td,.factory-bootstrap-448 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-448 .table-bordered>thead>tr>td,.factory-bootstrap-448 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-448 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-448 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-448 .table-hover>tbody>tr:hover>td,.factory-bootstrap-448 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-448 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-448 table td[class*=col-],.factory-bootstrap-448 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-448 .table>tbody>.active>td,.factory-bootstrap-448 .table>tbody>.active>th,.factory-bootstrap-448 .table>tbody>tr>.active,.factory-bootstrap-448 .table>tfoot>.active>td,.factory-bootstrap-448 .table>tfoot>.active>th,.factory-bootstrap-448 .table>tfoot>tr>.active,.factory-bootstrap-448 .table>thead>.active>td,.factory-bootstrap-448 .table>thead>.active>th,.factory-bootstrap-448 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-448 .table-hover>tbody>.active:hover>td,.factory-bootstrap-448 .table-hover>tbody>.active:hover>th,.factory-bootstrap-448 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-448 .table>tbody>.success>td,.factory-bootstrap-448 .table>tbody>.success>th,.factory-bootstrap-448 .table>tbody>tr>.success,.factory-bootstrap-448 .table>tfoot>.success>td,.factory-bootstrap-448 .table>tfoot>.success>th,.factory-bootstrap-448 .table>tfoot>tr>.success,.factory-bootstrap-448 .table>thead>.success>td,.factory-bootstrap-448 .table>thead>.success>th,.factory-bootstrap-448 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-448 .table-hover>tbody>.success:hover>td,.factory-bootstrap-448 .table-hover>tbody>.success:hover>th,.factory-bootstrap-448 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-448 .table>tbody>.danger>td,.factory-bootstrap-448 .table>tbody>.danger>th,.factory-bootstrap-448 .table>tbody>tr>.danger,.factory-bootstrap-448 .table>tfoot>.danger>td,.factory-bootstrap-448 .table>tfoot>.danger>th,.factory-bootstrap-448 .table>tfoot>tr>.danger,.factory-bootstrap-448 .table>thead>.danger>td,.factory-bootstrap-448 .table>thead>.danger>th,.factory-bootstrap-448 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-448 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-448 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-448 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-448 .table>tbody>.warning>td,.factory-bootstrap-448 .table>tbody>.warning>th,.factory-bootstrap-448 .table>tbody>tr>.warning,.factory-bootstrap-448 .table>tfoot>.warning>td,.factory-bootstrap-448 .table>tfoot>.warning>th,.factory-bootstrap-448 .table>tfoot>tr>.warning,.factory-bootstrap-448 .table>thead>.warning>td,.factory-bootstrap-448 .table>thead>.warning>th,.factory-bootstrap-448 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-448 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-448 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-448 .table-hover>tbody>tr>.warning:hover{background-color:#faf2cc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.factory-bootstrap-448 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-448 legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-448 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-448 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-448 input[type=checkbox],.factory-bootstrap-448 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-448 input[type=file]{display:block}.factory-bootstrap-448 select[multiple],.factory-bootstrap-448 select[size]{height:auto}.factory-bootstrap-448 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-448 input[type=checkbox]:focus,.factory-bootstrap-448 input[type=file]:focus,.factory-bootstrap-448 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-448 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-448 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-448 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-448 .form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.factory-bootstrap-448 .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-448 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-448 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-448 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-448 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-448 .form-control[disabled],.factory-bootstrap-448 .form-control[readonly],.factory-bootstrap-448 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-448 textarea.form-control{height:auto}.factory-bootstrap-448 .form-group{margin-bottom:15px}.factory-bootstrap-448 .checkbox,.factory-bootstrap-448 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-448 .checkbox label,.factory-bootstrap-448 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-448 .checkbox input[type=checkbox],.factory-bootstrap-448 .checkbox-inline input[type=checkbox],.factory-bootstrap-448 .radio input[type=radio],.factory-bootstrap-448 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-448 .checkbox+.checkbox,.factory-bootstrap-448 .radio+.radio{margin-top:-5px}.factory-bootstrap-448 .checkbox-inline,.factory-bootstrap-448 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-448 .checkbox-inline+.checkbox-inline,.factory-bootstrap-448 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-448 .checkbox-inline[disabled],.factory-bootstrap-448 .checkbox[disabled],.factory-bootstrap-448 .radio-inline[disabled],.factory-bootstrap-448 .radio[disabled],.factory-bootstrap-448 fieldset[disabled] .checkbox,.factory-bootstrap-448 fieldset[disabled] .checkbox-inline,.factory-bootstrap-448 fieldset[disabled] .radio,.factory-bootstrap-448 fieldset[disabled] .radio-inline,.factory-bootstrap-448 fieldset[disabled] input[type=checkbox],.factory-bootstrap-448 fieldset[disabled] input[type=radio],.factory-bootstrap-448 input[type=checkbox][disabled],.factory-bootstrap-448 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-448 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-448 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-448 textarea.input-sm{height:auto}.factory-bootstrap-448 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-448 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-448 textarea.input-lg{height:auto}.factory-bootstrap-448 .has-warning .checkbox,.factory-bootstrap-448 .has-warning .checkbox-inline,.factory-bootstrap-448 .has-warning .control-label,.factory-bootstrap-448 .has-warning .help-block,.factory-bootstrap-448 .has-warning .radio,.factory-bootstrap-448 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-448 .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-448 .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.factory-bootstrap-448 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-448 .has-error .checkbox,.factory-bootstrap-448 .has-error .checkbox-inline,.factory-bootstrap-448 .has-error .control-label,.factory-bootstrap-448 .has-error .help-block,.factory-bootstrap-448 .has-error .radio,.factory-bootstrap-448 .has-error .radio-inline{color:#a94442}.factory-bootstrap-448 .controls{display:block}.factory-bootstrap-448 .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-448 .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.factory-bootstrap-448 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-448 .has-success .checkbox,.factory-bootstrap-448 .has-success .checkbox-inline,.factory-bootstrap-448 .has-success .control-label,.factory-bootstrap-448 .has-success .help-block,.factory-bootstrap-448 .has-success .radio,.factory-bootstrap-448 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-448 .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-448 .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.factory-bootstrap-448 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-448 .form-control-static{margin-bottom:0}.factory-bootstrap-448 .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373;font-weight:400}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline select.form-control{width:auto}.form-inline .checkbox,.form-inline .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{float:none;margin-left:0}}.factory-bootstrap-448 .form-horizontal .checkbox,.factory-bootstrap-448 .form-horizontal .checkbox-inline,.factory-bootstrap-448 .form-horizontal .control-label,.factory-bootstrap-448 .form-horizontal .radio,.factory-bootstrap-448 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-448 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-448 .form-horizontal .checkbox,.factory-bootstrap-448 .form-horizontal .radio{min-height:27px}.factory-bootstrap-448 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-448 .form-horizontal .form-group:after,.factory-bootstrap-448 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-448 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-448 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-448 .btn{display:inline-block;padding:5px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.factory-bootstrap-448 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-448 .btn{text-decoration:none}.factory-bootstrap-448 .btn:focus,.factory-bootstrap-448 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-448 .btn.disabled,.factory-bootstrap-448 .btn[disabled],.factory-bootstrap-448 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-448 .btn-default.active,.factory-bootstrap-448 .btn-default:active,.factory-bootstrap-448 .btn-default:focus,.factory-bootstrap-448 .btn-default:hover,.factory-bootstrap-448 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-448 .btn-default.active,.factory-bootstrap-448 .btn-default:active,.factory-bootstrap-448 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-448 .btn-default.disabled,.factory-bootstrap-448 .btn-default.disabled.active,.factory-bootstrap-448 .btn-default.disabled:active,.factory-bootstrap-448 .btn-default.disabled:focus,.factory-bootstrap-448 .btn-default.disabled:hover,.factory-bootstrap-448 .btn-default[disabled],.factory-bootstrap-448 .btn-default[disabled].active,.factory-bootstrap-448 .btn-default[disabled]:active,.factory-bootstrap-448 .btn-default[disabled]:focus,.factory-bootstrap-448 .btn-default[disabled]:hover,.factory-bootstrap-448 fieldset[disabled] .btn-default,.factory-bootstrap-448 fieldset[disabled] .btn-default.active,.factory-bootstrap-448 fieldset[disabled] .btn-default:active,.factory-bootstrap-448 fieldset[disabled] .btn-default:focus,.factory-bootstrap-448 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-448 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-448 .btn-primary.active,.factory-bootstrap-448 .btn-primary:active,.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover,.factory-bootstrap-448 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-448 .btn-primary.active,.factory-bootstrap-448 .btn-primary:active,.factory-bootstrap-448 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-448 .btn-primary.disabled,.factory-bootstrap-448 .btn-primary.disabled.active,.factory-bootstrap-448 .btn-primary.disabled:active,.factory-bootstrap-448 .btn-primary.disabled:focus,.factory-bootstrap-448 .btn-primary.disabled:hover,.factory-bootstrap-448 .btn-primary[disabled],.factory-bootstrap-448 .btn-primary[disabled].active,.factory-bootstrap-448 .btn-primary[disabled]:active,.factory-bootstrap-448 .btn-primary[disabled]:focus,.factory-bootstrap-448 .btn-primary[disabled]:hover,.factory-bootstrap-448 fieldset[disabled] .btn-primary,.factory-bootstrap-448 fieldset[disabled] .btn-primary.active,.factory-bootstrap-448 fieldset[disabled] .btn-primary:active,.factory-bootstrap-448 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-448 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-448 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-448 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-448 .btn-warning.active,.factory-bootstrap-448 .btn-warning:active,.factory-bootstrap-448 .btn-warning:focus,.factory-bootstrap-448 .btn-warning:hover,.factory-bootstrap-448 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-448 .btn-warning.active,.factory-bootstrap-448 .btn-warning:active,.factory-bootstrap-448 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-448 .btn-warning.disabled,.factory-bootstrap-448 .btn-warning.disabled.active,.factory-bootstrap-448 .btn-warning.disabled:active,.factory-bootstrap-448 .btn-warning.disabled:focus,.factory-bootstrap-448 .btn-warning.disabled:hover,.factory-bootstrap-448 .btn-warning[disabled],.factory-bootstrap-448 .btn-warning[disabled].active,.factory-bootstrap-448 .btn-warning[disabled]:active,.factory-bootstrap-448 .btn-warning[disabled]:focus,.factory-bootstrap-448 .btn-warning[disabled]:hover,.factory-bootstrap-448 fieldset[disabled] .btn-warning,.factory-bootstrap-448 fieldset[disabled] .btn-warning.active,.factory-bootstrap-448 fieldset[disabled] .btn-warning:active,.factory-bootstrap-448 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-448 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-448 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-448 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-448 .btn-success.active,.factory-bootstrap-448 .btn-success:active,.factory-bootstrap-448 .btn-success:focus,.factory-bootstrap-448 .btn-success:hover,.factory-bootstrap-448 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-448 .btn-success.active,.factory-bootstrap-448 .btn-success:active,.factory-bootstrap-448 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-448 .btn-success.disabled,.factory-bootstrap-448 .btn-success.disabled.active,.factory-bootstrap-448 .btn-success.disabled:active,.factory-bootstrap-448 .btn-success.disabled:focus,.factory-bootstrap-448 .btn-success.disabled:hover,.factory-bootstrap-448 .btn-success[disabled],.factory-bootstrap-448 .btn-success[disabled].active,.factory-bootstrap-448 .btn-success[disabled]:active,.factory-bootstrap-448 .btn-success[disabled]:focus,.factory-bootstrap-448 .btn-success[disabled]:hover,.factory-bootstrap-448 fieldset[disabled] .btn-success,.factory-bootstrap-448 fieldset[disabled] .btn-success.active,.factory-bootstrap-448 fieldset[disabled] .btn-success:active,.factory-bootstrap-448 fieldset[disabled] .btn-success:focus,.factory-bootstrap-448 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-448 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-448 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-448 .btn-info.active,.factory-bootstrap-448 .btn-info:active,.factory-bootstrap-448 .btn-info:focus,.factory-bootstrap-448 .btn-info:hover,.factory-bootstrap-448 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-448 .btn-info.active,.factory-bootstrap-448 .btn-info:active,.factory-bootstrap-448 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-448 .btn-info.disabled,.factory-bootstrap-448 .btn-info.disabled.active,.factory-bootstrap-448 .btn-info.disabled:active,.factory-bootstrap-448 .btn-info.disabled:focus,.factory-bootstrap-448 .btn-info.disabled:hover,.factory-bootstrap-448 .btn-info[disabled],.factory-bootstrap-448 .btn-info[disabled].active,.factory-bootstrap-448 .btn-info[disabled]:active,.factory-bootstrap-448 .btn-info[disabled]:focus,.factory-bootstrap-448 .btn-info[disabled]:hover,.factory-bootstrap-448 fieldset[disabled] .btn-info,.factory-bootstrap-448 fieldset[disabled] .btn-info.active,.factory-bootstrap-448 fieldset[disabled] .btn-info:active,.factory-bootstrap-448 fieldset[disabled] .btn-info:focus,.factory-bootstrap-448 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-448 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-448 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-448 .btn-link,.factory-bootstrap-448 .btn-link:active,.factory-bootstrap-448 .btn-link[disabled],.factory-bootstrap-448 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-448 .btn-link,.factory-bootstrap-448 .btn-link:active,.factory-bootstrap-448 .btn-link:focus,.factory-bootstrap-448 .btn-link:hover{border-color:transparent}.factory-bootstrap-448 .btn-link:focus,.factory-bootstrap-448 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-448 .btn-link[disabled]:focus,.factory-bootstrap-448 .btn-link[disabled]:hover,.factory-bootstrap-448 fieldset[disabled] .btn-link:focus,.factory-bootstrap-448 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-448 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-448 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-448 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-448 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-448 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-448 input[type=button].btn-block,.factory-bootstrap-448 input[type=reset].btn-block,.factory-bootstrap-448 input[type=submit].btn-block{width:100%}.factory-bootstrap-448 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-448 .fade.in{opacity:1}.factory-bootstrap-448 .collapse{display:none}.factory-bootstrap-448 .collapse.in{display:block}.factory-bootstrap-448 .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular) format('svg')}.factory-bootstrap-448 .glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.factory-bootstrap-448 .glyphicon:empty{width:1em}.factory-bootstrap-448 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-448 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-448 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-448 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-448 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-448 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-448 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-448 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-448 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-448 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-448 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-448 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-448 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-448 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-448 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-448 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-448 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-448 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-448 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-448 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-448 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-448 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-448 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-448 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-448 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-448 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-448 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-448 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-448 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-448 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-448 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-448 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-448 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-448 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-448 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-448 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-448 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-448 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-448 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-448 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-448 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-448 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-448 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-448 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-448 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-448 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-448 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-448 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-448 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-448 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-448 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-448 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-448 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-448 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-448 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-448 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-448 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-448 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-448 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-448 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-448 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-448 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-448 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-448 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-448 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-448 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-448 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-448 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-448 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-448 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-448 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-448 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-448 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-448 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-448 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-448 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-448 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-448 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-448 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-448 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-448 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-448 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-448 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-448 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-448 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-448 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-448 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-448 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-448 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-448 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-448 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-448 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-448 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-448 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-448 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-448 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-448 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-448 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-448 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-448 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-448 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-448 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-448 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-448 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-448 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-448 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-448 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-448 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-448 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-448 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-448 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-448 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-448 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-448 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-448 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-448 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-448 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-448 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-448 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-448 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-448 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-448 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-448 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-448 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-448 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-448 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-448 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-448 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-448 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-448 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-448 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-448 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-448 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-448 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-448 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-448 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-448 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-448 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-448 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-448 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-448 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-448 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-448 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-448 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-448 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-448 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-448 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-448 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-448 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-448 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-448 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-448 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-448 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-448 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-448 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-448 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-448 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-448 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-448 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-448 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-448 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-448 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-448 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-448 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-448 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-448 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-448 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-448 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-448 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-448 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-448 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-448 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-448 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-448 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-448 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-448 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-448 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-448 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-448 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-448 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-448 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-448 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-448 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-448 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-448 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-448 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-448 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-448 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-448 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-448 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-448 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-448 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-448 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-448 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-448 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-448 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-448 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-448 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-448 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-448 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-448 .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.factory-bootstrap-448 .dropdown{position:relative}.factory-bootstrap-448 .dropdown-toggle:focus{outline:0}.factory-bootstrap-448 .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.factory-bootstrap-448 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-448 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-448 .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:nowrap}.factory-bootstrap-448 .dropdown-menu>li>a:focus,.factory-bootstrap-448 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-448 .dropdown-menu>.active>a,.factory-bootstrap-448 .dropdown-menu>.active>a:focus,.factory-bootstrap-448 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-448 .dropdown-menu>.disabled>a,.factory-bootstrap-448 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-448 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-448 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-448 .dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-448 .open>.dropdown-menu{display:block}.factory-bootstrap-448 .open>a{outline:0}.factory-bootstrap-448 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-448 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-448 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-448 .dropup .caret,.factory-bootstrap-448 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-448 .dropup .dropdown-menu,.factory-bootstrap-448 .navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.factory-bootstrap-448 .btn-group,.factory-bootstrap-448 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-448 .btn-group-vertical>.btn,.factory-bootstrap-448 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-448 .btn-group-vertical>.btn.active,.factory-bootstrap-448 .btn-group-vertical>.btn:active,.factory-bootstrap-448 .btn-group-vertical>.btn:focus,.factory-bootstrap-448 .btn-group-vertical>.btn:hover,.factory-bootstrap-448 .btn-group>.btn.active,.factory-bootstrap-448 .btn-group>.btn:active,.factory-bootstrap-448 .btn-group>.btn:focus,.factory-bootstrap-448 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-448 .btn-group-vertical>.btn:focus,.factory-bootstrap-448 .btn-group>.btn:focus{outline:0}.factory-bootstrap-448 .btn-group .btn+.btn,.factory-bootstrap-448 .btn-group .btn+.btn-group,.factory-bootstrap-448 .btn-group .btn-group+.btn,.factory-bootstrap-448 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-448 .btn-toolbar:after,.factory-bootstrap-448 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-448 .btn-toolbar:after{clear:both}.factory-bootstrap-448 .btn-toolbar .btn-group{float:left}.factory-bootstrap-448 .btn-toolbar>.btn+.btn,.factory-bootstrap-448 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-448 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-448 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-448 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-448 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-448 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-448 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-448 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-448 .btn-group>.btn-group{float:left}.factory-bootstrap-448 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-448 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-448 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-448 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-448 .btn-group .dropdown-toggle:active,.factory-bootstrap-448 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-448 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-448 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-448 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-448 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-448 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-448 .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.factory-bootstrap-448 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-448 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-448 .btn-group .btn.active.value{text-shadow:none;color:#fff;background-color:#33aad5;-webkit-box-shadow:inset 0 1px 1px #0074a2;box-shadow:inset 0 1px 3px #0074a2;border-top:1px solid #0074a2;border-bottom:1px solid #0074a2;border-left:1px solid #0074a2}.factory-bootstrap-448 .btn .caret{margin-left:0}.factory-bootstrap-448 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-448 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-448 .btn-group-vertical>.btn,.factory-bootstrap-448 .btn-group-vertical>.btn-group,.factory-bootstrap-448 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-448 .btn-group-vertical>.btn-group:after,.factory-bootstrap-448 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-448 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-448 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-448 .btn-group-vertical>.btn+.btn,.factory-bootstrap-448 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-448 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-448 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-448 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-448 .btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-448 .btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.factory-bootstrap-448 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-448 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-448 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-448 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-448 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-448 .btn-group-justified>.btn,.factory-bootstrap-448 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-448 .btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=checkbox],[data-toggle=buttons]>.btn>input[type=radio]{display:none}.factory-bootstrap-448 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-448 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-448 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-448 .input-group-lg>.form-control,.factory-bootstrap-448 .input-group-lg>.input-group-addon,.factory-bootstrap-448 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-448 select.input-group-lg>.form-control,.factory-bootstrap-448 select.input-group-lg>.input-group-addon,.factory-bootstrap-448 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-448 textarea.input-group-lg>.form-control,.factory-bootstrap-448 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-448 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-448 .input-group-sm>.form-control,.factory-bootstrap-448 .input-group-sm>.input-group-addon,.factory-bootstrap-448 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-448 select.input-group-sm>.form-control,.factory-bootstrap-448 select.input-group-sm>.input-group-addon,.factory-bootstrap-448 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-448 textarea.input-group-sm>.form-control,.factory-bootstrap-448 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-448 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-448 .input-group .form-control,.factory-bootstrap-448 .input-group-addon,.factory-bootstrap-448 .input-group-btn{display:table-cell}.factory-bootstrap-448 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-448 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-448 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-448 .input-group-addon,.factory-bootstrap-448 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-448 .input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.factory-bootstrap-448 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-448 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-448 .input-group-addon input[type=checkbox],.factory-bootstrap-448 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-448 .input-group .form-control:first-child,.factory-bootstrap-448 .input-group-addon:first-child,.factory-bootstrap-448 .input-group-btn:first-child>.btn,.factory-bootstrap-448 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-448 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-448 .input-group-addon:first-child{border-right:0}.factory-bootstrap-448 .input-group .form-control:last-child,.factory-bootstrap-448 .input-group-addon:last-child,.factory-bootstrap-448 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-448 .input-group-btn:last-child>.btn,.factory-bootstrap-448 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-448 .input-group-addon:last-child{border-left:0}.factory-bootstrap-448 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-448 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-448 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-448 .input-group-btn>.btn{position:relative}.factory-bootstrap-448 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-448 .input-group-btn>.btn:active,.factory-bootstrap-448 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-448 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-448 .nav:after,.factory-bootstrap-448 .nav:before{display:table;content:" "}.factory-bootstrap-448 .nav:after{clear:both}.factory-bootstrap-448 .nav>li{position:relative;display:block}.factory-bootstrap-448 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-448 .nav>li>a:focus,.factory-bootstrap-448 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-448 .nav>li.disabled>a{color:#999}.factory-bootstrap-448 .nav>li.disabled>a:focus,.factory-bootstrap-448 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-448 .nav .open>a,.factory-bootstrap-448 .nav .open>a:focus,.factory-bootstrap-448 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-448 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-448 .nav>li>a>img{max-width:none}.factory-bootstrap-448 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-448 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-448 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-448 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-448 .nav-tabs>li.active>a,.factory-bootstrap-448 .nav-tabs>li.active>a:focus,.factory-bootstrap-448 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-448 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-448 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-448 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-448 .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.factory-bootstrap-448 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-448 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-448 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-448 .nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.factory-bootstrap-448 .nav-pills>li{float:left}.factory-bootstrap-448 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-448 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-448 .nav-pills>li.active>a,.factory-bootstrap-448 .nav-pills>li.active>a:focus,.factory-bootstrap-448 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-448 .nav-stacked>li{float:none}.factory-bootstrap-448 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-448 .nav-justified{width:100%}.factory-bootstrap-448 .nav-justified>li{float:none}.factory-bootstrap-448 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-448 .nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.factory-bootstrap-448 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-448 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-448 .nav-tabs-justified>.active>a,.factory-bootstrap-448 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-448 .nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.factory-bootstrap-448 .tab-content>.tab-pane{display:none}.factory-bootstrap-448 .tab-content>.active{display:block}.factory-bootstrap-448 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-448 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-448 .navbar:after,.factory-bootstrap-448 .navbar:before{display:table;content:" "}.factory-bootstrap-448 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-448 .navbar-header:after,.factory-bootstrap-448 .navbar-header:before{display:table;content:" "}.factory-bootstrap-448 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-448 .navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.factory-bootstrap-448 .navbar-collapse:after,.factory-bootstrap-448 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-448 .navbar-collapse:after{clear:both}.factory-bootstrap-448 .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.factory-bootstrap-448 .container>.navbar-collapse,.factory-bootstrap-448 .container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.factory-bootstrap-448 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-448 .navbar-fixed-bottom,.factory-bootstrap-448 .navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.factory-bootstrap-448 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-448 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-448 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-448 .navbar-brand:focus,.factory-bootstrap-448 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-448 .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.factory-bootstrap-448 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-448 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-448 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-448 .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.factory-bootstrap-448 .navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form select.form-control{width:auto}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.factory-bootstrap-448 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-448 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-448 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-448 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-448 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-448 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-448 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-448 .navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.factory-bootstrap-448 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-448 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-448 .navbar-default .navbar-brand:focus,.factory-bootstrap-448 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-448 .navbar-default .navbar-nav>li>a,.factory-bootstrap-448 .navbar-default .navbar-text{color:#777}.factory-bootstrap-448 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-448 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-448 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-448 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-448 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-448 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-448 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-448 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-448 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-448 .navbar-default .navbar-toggle:focus,.factory-bootstrap-448 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-448 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-448 .navbar-default .navbar-collapse,.factory-bootstrap-448 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-448 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-448 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-448 .navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.factory-bootstrap-448 .navbar-default .navbar-link{color:#777}.factory-bootstrap-448 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-448 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-448 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-448 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-448 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-448 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-448 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-448 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-448 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-448 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-448 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-448 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-448 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-448 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-448 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-448 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-448 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-448 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-448 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-448 .navbar-inverse .navbar-collapse,.factory-bootstrap-448 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-448 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-448 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-448 .navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.factory-bootstrap-448 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-448 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-448 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-448 .breadcrumb>li{display:inline-block}.factory-bootstrap-448 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-448 .breadcrumb>.active{color:#999}.factory-bootstrap-448 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-448 .pagination>li{display:inline}.factory-bootstrap-448 .pagination>li>a,.factory-bootstrap-448 .pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-448 .pagination>li:first-child>a,.factory-bootstrap-448 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-448 .pagination>li:last-child>a,.factory-bootstrap-448 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-448 .pagination>li>a:focus,.factory-bootstrap-448 .pagination>li>a:hover,.factory-bootstrap-448 .pagination>li>span:focus,.factory-bootstrap-448 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-448 .pagination>.active>a,.factory-bootstrap-448 .pagination>.active>a:focus,.factory-bootstrap-448 .pagination>.active>a:hover,.factory-bootstrap-448 .pagination>.active>span,.factory-bootstrap-448 .pagination>.active>span:focus,.factory-bootstrap-448 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-448 .pagination>.disabled>a,.factory-bootstrap-448 .pagination>.disabled>a:focus,.factory-bootstrap-448 .pagination>.disabled>a:hover,.factory-bootstrap-448 .pagination>.disabled>span,.factory-bootstrap-448 .pagination>.disabled>span:focus,.factory-bootstrap-448 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-448 .pagination-lg>li>a,.factory-bootstrap-448 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-448 .pagination-lg>li:first-child>a,.factory-bootstrap-448 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-448 .pagination-lg>li:last-child>a,.factory-bootstrap-448 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-448 .pagination-sm>li>a,.factory-bootstrap-448 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-448 .pagination-sm>li:first-child>a,.factory-bootstrap-448 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-448 .pagination-sm>li:last-child>a,.factory-bootstrap-448 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-448 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-448 .pager:after,.factory-bootstrap-448 .pager:before{display:table;content:" "}.factory-bootstrap-448 .pager:after{clear:both}.factory-bootstrap-448 .pager li{display:inline}.factory-bootstrap-448 .pager li>a,.factory-bootstrap-448 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-448 .pager li>a:focus,.factory-bootstrap-448 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-448 .pager .next>a,.factory-bootstrap-448 .pager .next>span{float:right}.factory-bootstrap-448 .pager .previous>a,.factory-bootstrap-448 .pager .previous>span{float:left}.factory-bootstrap-448 .pager .disabled>a,.factory-bootstrap-448 .pager .disabled>a:focus,.factory-bootstrap-448 .pager .disabled>a:hover,.factory-bootstrap-448 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-448 .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.factory-bootstrap-448 .label[href]:focus,.factory-bootstrap-448 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-448 .label:empty{display:none}.factory-bootstrap-448 .btn .label{position:relative;top:-1px}.factory-bootstrap-448 .label-default{background-color:#999}.factory-bootstrap-448 .label-default[href]:focus,.factory-bootstrap-448 .label-default[href]:hover{background-color:gray}.factory-bootstrap-448 .label-primary{background-color:#428bca}.factory-bootstrap-448 .label-primary[href]:focus,.factory-bootstrap-448 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-448 .label-success{background-color:#5cb85c}.factory-bootstrap-448 .label-success[href]:focus,.factory-bootstrap-448 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-448 .label-info{background-color:#5bc0de}.factory-bootstrap-448 .label-info[href]:focus,.factory-bootstrap-448 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-448 .label-warning{background-color:#f0ad4e}.factory-bootstrap-448 .label-warning[href]:focus,.factory-bootstrap-448 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-448 .label-danger{background-color:#d9534f}.factory-bootstrap-448 .label-danger[href]:focus,.factory-bootstrap-448 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-448 .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.factory-bootstrap-448 .badge:empty{display:none}.factory-bootstrap-448 .btn .badge{position:relative;top:-1px}.factory-bootstrap-448 a.badge:focus,.factory-bootstrap-448 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-448 .nav-pills>.active>a>.badge,.factory-bootstrap-448 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-448 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-448 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-448 .jumbotron .h1,.factory-bootstrap-448 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-448 .jumbotron p{line-height:1.4}.factory-bootstrap-448 .container .jumbotron{border-radius:6px}.factory-bootstrap-448 .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.factory-bootstrap-448 .thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.factory-bootstrap-448 .thumbnail a>img,.factory-bootstrap-448 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-448 a.thumbnail.active,.factory-bootstrap-448 a.thumbnail:focus,.factory-bootstrap-448 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-448 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-448 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-448 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-448 .alert .alert-link{font-weight:700}.factory-bootstrap-448 .alert>p,.factory-bootstrap-448 .alert>ul{margin-bottom:0}.factory-bootstrap-448 .alert>p+p{margin-top:5px}.factory-bootstrap-448 .alert-dismissable{padding-right:35px}.factory-bootstrap-448 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-448 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-448 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-448 .alert-info .alert-link{color:#245269}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.factory-bootstrap-448 .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.factory-bootstrap-448 .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#2ea2cc;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.factory-bootstrap-448 .progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.factory-bootstrap-448 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-448 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-448 .progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-448 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-448 .progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-448 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-448 .progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-448 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-448 .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.factory-bootstrap-448 .media,.factory-bootstrap-448 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-448 .media,.factory-bootstrap-448 .media .media{margin-top:15px}.factory-bootstrap-448 .media:first-child{margin-top:0}.factory-bootstrap-448 .media-object{display:block}.factory-bootstrap-448 .media-heading{margin:0 0 5px}.factory-bootstrap-448 .media>.pull-left{margin-right:10px}.factory-bootstrap-448 .media>.pull-right{margin-left:10px}.factory-bootstrap-448 .media-list{padding-left:0;list-style:none}.factory-bootstrap-448 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-448 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-448 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-448 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-448 .list-group-item>.badge{float:right}.factory-bootstrap-448 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-448 a.list-group-item{color:#555}.factory-bootstrap-448 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-448 a.list-group-item:focus,.factory-bootstrap-448 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-448 a.list-group-item.active,.factory-bootstrap-448 a.list-group-item.active:focus,.factory-bootstrap-448 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-448 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-448 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-448 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-448 a.list-group-item.active .list-group-item-text,.factory-bootstrap-448 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-448 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-448 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-448 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-448 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-448 .panel-body{padding:15px}.factory-bootstrap-448 .panel-body:after,.factory-bootstrap-448 .panel-body:before{display:table;content:" "}.factory-bootstrap-448 .panel-body:after{clear:both}.factory-bootstrap-448 .panel>.list-group{margin-bottom:0}.factory-bootstrap-448 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-448 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-448 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-448 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-448 .panel>.table,.factory-bootstrap-448 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-448 .panel>.panel-body+.table,.factory-bootstrap-448 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-448 .panel>.table>tbody:first-child td,.factory-bootstrap-448 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-448 .panel>.table-bordered,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-448 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-448 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-448 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-448 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-448 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-448 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-448 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-448 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-448 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-448 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-448 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-448 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-448 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-448 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-448 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-448 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-448 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-448 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-448 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-448 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-448 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-448 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-448 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-448 .panel-title>a{color:inherit}.factory-bootstrap-448 .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.factory-bootstrap-448 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-448 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-448 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-448 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-448 .panel-group .panel-footer{border-top:0}.factory-bootstrap-448 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-448 .panel-default{border-color:#ddd}.factory-bootstrap-448 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-448 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-448 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-448 .panel-primary{border-color:#428bca}.factory-bootstrap-448 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-448 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-448 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-448 .panel-success{border-color:#d6e9c6}.factory-bootstrap-448 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-448 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-448 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-448 .panel-warning{border-color:#faebcc}.factory-bootstrap-448 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-448 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-448 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-448 .panel-danger{border-color:#ebccd1}.factory-bootstrap-448 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-448 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-448 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-448 .panel-info{border-color:#bce8f1}.factory-bootstrap-448 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-448 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-448 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-448 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-448 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-448 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-448 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-448 .close{float:right;font-size:14px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.3;filter:alpha(opacity=30)}.factory-bootstrap-448 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-448 .close:focus,.factory-bootstrap-448 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-448 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-448 .modal-open{overflow:hidden}.factory-bootstrap-448 .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll;width:auto;margin-left:0;background-color:transparent;border:0}.factory-bootstrap-448 .modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.factory-bootstrap-448 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-448 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-448 .modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box}.factory-bootstrap-448 .modal-backdrop,.factory-bootstrap-448-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-448 .modal-backdrop.fade,.factory-bootstrap-448-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-448 .modal-backdrop.in,.factory-bootstrap-448-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-448 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-448 .modal-header .close{margin-top:-2px}.factory-bootstrap-448 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-448 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-448 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-448 .modal-footer:after,.factory-bootstrap-448 .modal-footer:before{display:table;content:" "}.factory-bootstrap-448 .modal-footer:after{clear:both}.factory-bootstrap-448 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-448 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-448 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-448 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-448 .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}}.factory-bootstrap-448 .tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.factory-bootstrap-448 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-448 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-448 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-448 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-448 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-448 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-448 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-448 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-448 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-448 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-448 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-448 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-448 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-448 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-448 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-448 .popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);background-clip:padding-box}.factory-bootstrap-448 .popover.top{margin-top:-10px}.factory-bootstrap-448 .popover.right{margin-left:10px}.factory-bootstrap-448 .popover.bottom{margin-top:10px}.factory-bootstrap-448 .popover.left{margin-left:-10px}.factory-bootstrap-448 .popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.factory-bootstrap-448 .popover-content{padding:9px 14px}.factory-bootstrap-448 .popover .arrow,.factory-bootstrap-448 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-448 .popover .arrow{border-width:11px}.factory-bootstrap-448 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-448 .popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.factory-bootstrap-448 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-448 .popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.factory-bootstrap-448 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-448 .popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0}.factory-bootstrap-448 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-448 .popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,.25);border-right-width:0}.factory-bootstrap-448 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-448 .carousel{position:relative}.factory-bootstrap-448 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-448 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-448 .carousel-inner>.item>a>img,.factory-bootstrap-448 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-448 .carousel-inner>.active,.factory-bootstrap-448 .carousel-inner>.next,.factory-bootstrap-448 .carousel-inner>.prev{display:block}.factory-bootstrap-448 .carousel-inner>.active{left:0}.factory-bootstrap-448 .carousel-inner>.next,.factory-bootstrap-448 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-448 .carousel-inner>.next{left:100%}.factory-bootstrap-448 .carousel-inner>.prev{left:-100%}.factory-bootstrap-448 .carousel-inner>.next.left,.factory-bootstrap-448 .carousel-inner>.prev.right{left:0}.factory-bootstrap-448 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-448 .carousel-inner>.active.right{left:100%}.factory-bootstrap-448 .carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-448 .carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.factory-bootstrap-448 .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.factory-bootstrap-448 .carousel-control:focus,.factory-bootstrap-448 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-448 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-448 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-448 .carousel-control .icon-next,.factory-bootstrap-448 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-448 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-448 .carousel-control .icon-prev{left:50%}.factory-bootstrap-448 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-448 .carousel-control .icon-next{right:50%}.factory-bootstrap-448 .carousel-control .icon-next,.factory-bootstrap-448 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-448 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-448 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-448 .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.factory-bootstrap-448 .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.factory-bootstrap-448 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-448 .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.factory-bootstrap-448 .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.factory-bootstrap-448 .clearfix:after,.factory-bootstrap-448 .clearfix:before{display:table;content:" "}.factory-bootstrap-448 .clearfix:after{clear:both}.factory-bootstrap-448 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-448 .pull-right{float:right!important}.factory-bootstrap-448 .pull-left{float:left!important}.factory-bootstrap-448 .hide{display:none!important}.factory-bootstrap-448 .show{display:block!important}.factory-bootstrap-448 .invisible{visibility:hidden}.factory-bootstrap-448 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-448 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-448 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-448 .visible-lg,.factory-bootstrap-448 .visible-md,.factory-bootstrap-448 .visible-sm,.factory-bootstrap-448 .visible-xs,.factory-bootstrap-448 td.visible-lg,.factory-bootstrap-448 td.visible-md,.factory-bootstrap-448 td.visible-sm,.factory-bootstrap-448 td.visible-xs,.factory-bootstrap-448 th.visible-lg,.factory-bootstrap-448 th.visible-md,.factory-bootstrap-448 th.visible-sm,.factory-bootstrap-448 th.visible-xs,.factory-bootstrap-448 tr.visible-lg,.factory-bootstrap-448 tr.visible-md,.factory-bootstrap-448 tr.visible-sm,.factory-bootstrap-448 tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}table.visible-xs.visible-sm{display:table}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}table.visible-xs.visible-md{display:table}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-xs.visible-lg{display:block!important}table.visible-xs.visible-lg{display:table}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}table.visible-sm.visible-xs{display:table}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}table.visible-sm.visible-md{display:table}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-sm.visible-lg{display:block!important}table.visible-sm.visible-lg{display:table}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-md.visible-xs{display:block!important}table.visible-md.visible-xs{display:table}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}table.visible-md.visible-sm{display:table}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-md.visible-lg{display:block!important}table.visible-md.visible-lg{display:table}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}table.visible-lg.visible-xs{display:table}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}table.visible-lg.visible-sm{display:table}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}table.visible-lg.visible-md{display:table}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.factory-bootstrap-448 .hidden-xs{display:block!important}.factory-bootstrap-448 table.hidden-xs{display:table}.factory-bootstrap-448 tr.hidden-xs{display:table-row!important}.factory-bootstrap-448 td.hidden-xs,.factory-bootstrap-448 th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.factory-bootstrap-448 .hidden-sm{display:block!important}.factory-bootstrap-448 table.hidden-sm{display:table}.factory-bootstrap-448 tr.hidden-sm{display:table-row!important}.factory-bootstrap-448 td.hidden-sm,.factory-bootstrap-448 th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.factory-bootstrap-448 .hidden-md{display:block!important}.factory-bootstrap-448 table.hidden-md{display:table}.factory-bootstrap-448 tr.hidden-md{display:table-row!important}.factory-bootstrap-448 td.hidden-md,.factory-bootstrap-448 th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.factory-bootstrap-448 .hidden-lg{display:block!important}.factory-bootstrap-448 table.hidden-lg{display:table}.factory-bootstrap-448 tr.hidden-lg{display:table-row!important}.factory-bootstrap-448 td.hidden-lg,.factory-bootstrap-448 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-448 .hidden-lg.hidden-xs,.factory-bootstrap-448 td.hidden-lg.hidden-xs,.factory-bootstrap-448 th.hidden-lg.hidden-xs,.factory-bootstrap-448 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-448 .hidden-lg.hidden-sm,.factory-bootstrap-448 td.hidden-lg.hidden-sm,.factory-bootstrap-448 th.hidden-lg.hidden-sm,.factory-bootstrap-448 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-448 .hidden-lg.hidden-md,.factory-bootstrap-448 td.hidden-lg.hidden-md,.factory-bootstrap-448 th.hidden-lg.hidden-md,.factory-bootstrap-448 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-448 .hidden-lg,.factory-bootstrap-448 td.hidden-lg,.factory-bootstrap-448 th.hidden-lg,.factory-bootstrap-448 tr.hidden-lg{display:none!important}}.factory-bootstrap-448 .visible-print,.factory-bootstrap-448 td.visible-print,.factory-bootstrap-448 th.visible-print,.factory-bootstrap-448 tr.visible-print{display:none!important}@media print{.factory-bootstrap-448 .visible-print{display:block!important}.factory-bootstrap-448 table.visible-print{display:table}.factory-bootstrap-448 tr.visible-print{display:table-row!important}.factory-bootstrap-448 td.visible-print,.factory-bootstrap-448 th.visible-print{display:table-cell!important}.factory-bootstrap-448 .hidden-print,.factory-bootstrap-448 td.hidden-print,.factory-bootstrap-448 th.hidden-print,.factory-bootstrap-448 tr.hidden-print{display:none!important}}/*!
|
12 |
* Factory Default Bootstrap Theme
|
13 |
*
|
14 |
* The code is based on Bootstrap v2.1.1
|
22 |
*
|
23 |
* @package factory-bootstrap
|
24 |
* @since 1.0.0
|
25 |
+
*/.factory-bootstrap-448 .btn-danger,.factory-bootstrap-448 .btn-default,.factory-bootstrap-448 .btn-info,.factory-bootstrap-448 .btn-primary,.factory-bootstrap-448 .btn-success,.factory-bootstrap-448 .btn-warning{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.factory-bootstrap-448 .btn-danger.active,.factory-bootstrap-448 .btn-danger:active,.factory-bootstrap-448 .btn-default.active,.factory-bootstrap-448 .btn-default:active,.factory-bootstrap-448 .btn-info.active,.factory-bootstrap-448 .btn-info:active,.factory-bootstrap-448 .btn-primary.active,.factory-bootstrap-448 .btn-primary:active,.factory-bootstrap-448 .btn-success.active,.factory-bootstrap-448 .btn-success:active,.factory-bootstrap-448 .btn-warning.active,.factory-bootstrap-448 .btn-warning:active{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.factory-bootstrap-448 .btn.active,.factory-bootstrap-448 .btn:active{background-image:none}.factory-bootstrap-448 .btn-default{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.factory-bootstrap-448 .btn-default.active,.factory-bootstrap-448 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-448 .btn-gold{font-weight:700;padding:7px 12px;cursor:pointer;line-height:16px;display:inline-block;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;box-shadow:#e3e3e3 0 1px 1px;-moz-box-shadow:0 1px 1px rgba(000,000,000,.1),inset 0 1px 1px rgba(255,255,255,.7);-webkit-box-shadow:0 1px 1px rgba(000,000,000,.1),inset 0 1px 1px rgba(255,255,255,.7);text-shadow:1px 1px 0 #ffe8b2;color:#7c5d1b;border:1px solid #d6a437;background:#feeb80}.factory-bootstrap-448 .btn-gold:focus,.factory-bootstrap-448 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-448 .btn-gold.active,.factory-bootstrap-448 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-448 .btn-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.factory-bootstrap-448 .btn-primary.active,.factory-bootstrap-448 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-448 .btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);background-repeat:repeat-x;border-color:#3e8f3e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-448 .btn-success:focus,.factory-bootstrap-448 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-448 .btn-success.active,.factory-bootstrap-448 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-448 .btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);background-repeat:repeat-x;border-color:#e38d13;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-448 .btn-warning:focus,.factory-bootstrap-448 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-448 .btn-warning.active,.factory-bootstrap-448 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-448 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-448 .btn-danger.active,.factory-bootstrap-448 .btn-danger:active,.factory-bootstrap-448 .btn-danger:focus,.factory-bootstrap-448 .btn-danger:hover,.factory-bootstrap-448 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-448 .btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);background-repeat:repeat-x;border-color:#28a4c9;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-448 .btn-info:focus,.factory-bootstrap-448 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-448 .btn-info.active,.factory-bootstrap-448 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-448 .img-thumbnail,.factory-bootstrap-448 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-448 .dropdown-menu>li>a:focus,.factory-bootstrap-448 .dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.factory-bootstrap-448 .dropdown-menu>.active>a,.factory-bootstrap-448 .dropdown-menu>.active>a:focus,.factory-bootstrap-448 .dropdown-menu>.active>a:hover{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.factory-bootstrap-448 .navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.factory-bootstrap-448 .navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.factory-bootstrap-448 .navbar-brand,.factory-bootstrap-448 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-448 .navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.factory-bootstrap-448 .navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.factory-bootstrap-448 .navbar-inverse .navbar-brand,.factory-bootstrap-448 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-448 .navbar-fixed-bottom,.factory-bootstrap-448 .navbar-fixed-top,.factory-bootstrap-448 .navbar-static-top{border-radius:0}.factory-bootstrap-448 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-448 .alert .actions{padding-top:10px}.factory-bootstrap-448 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-448 .alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0)}.factory-bootstrap-448 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-448 .alert-normal,.factory-bootstrap-448 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-448 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-448 .alert-danger a:not(.btn),.factory-bootstrap-448 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-448 .progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.factory-bootstrap-448 .progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.factory-bootstrap-448 .progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.factory-bootstrap-448 .progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.factory-bootstrap-448 .progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.factory-bootstrap-448 .progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.factory-bootstrap-448 .list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-448 .list-group-item.active,.factory-bootstrap-448 .list-group-item.active:focus,.factory-bootstrap-448 .list-group-item.active:hover{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0)}.factory-bootstrap-448 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-448 .panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.factory-bootstrap-448 .panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.factory-bootstrap-448 .panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.factory-bootstrap-448 .panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.factory-bootstrap-448 .panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.factory-bootstrap-448 .panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.factory-bootstrap-448 .well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}.factory-bootstrap-448 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-448 .factory-hidden{display:none}.factory-bootstrap-448 .factory-ajax-loader{width:25px;height:25px;background:url(../assets/images/loader-sm-tr.gif)}.factory-control-error{background-color:rgba(0,0,0,.8);white-space:normal;z-index:10;font-weight:400;line-height:150%;border-radius:4px;color:#fff;font-size:13px;margin-top:5px;padding:4px 10px 3px;max-width:500px;display:inline-block}.factory-control-error i{margin:0 7px 0 1px}
|
libs/factory/bootstrap/assets/css-min/bootstrap.ectoplasm.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .btn-primary{background:#a3b745;border-color:#839237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:active{background:#89993a;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-448 .btn-primary:disabled,.factory-bootstrap-448 .btn-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.factory-bootstrap-448 .btn-group .btn.active.value{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.factory-bootstrap-448 .pagination>.active>a,.factory-bootstrap-448 .pagination>.active>a:focus,.factory-bootstrap-448 .pagination>.active>a:hover,.factory-bootstrap-448 .pagination>.active>span,.factory-bootstrap-448 .pagination>.active>span:focus,.factory-bootstrap-448 .pagination>.active>span:hover{background-color:#a3b745;border-color:#839237}
|
libs/factory/bootstrap/assets/css-min/bootstrap.form-group.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .factory-form-group .factory-legend{padding:9px 12px;background-color:#f9f9f9}.factory-bootstrap-448 .factory-form-group .factory-title{font-weight:700;font-size:14px;line-height:14px;color:#555;margin:0}.factory-bootstrap-448 .factory-form-group .factory-hint-icon{display:block;width:16px;height:16px;line-height:13px;padding:0;font-size:11px;text-align:center;position:absolute;top:-5px;right:-3px;color:#fff;background:#E91E63;border-radius:3px}.factory-bootstrap-448 .factory-form-group .factory-hint-icon.factory-hint-icon-green{background:#8bc34a}.factory-bootstrap-448 .factory-form-group .factory-hint-icon.factory-hint-icon-grey{background:#9e9e9e}.factory-bootstrap-448 .factory-form-group .factory-hint-icon.factory-hint-icon-red{background:#E91E63}.factory-bootstrap-448 .factory-form-group .factory-hint{margin:0;font-size:12px;line-height:16px;margin-top:6px}.factory-bootstrap-448 .factory-form-group+.factory-form-group{margin-top:30px}.factory-bootstrap-448 .factory-form-group legend+.control-group{margin-top:0}
|
libs/factory/bootstrap/assets/css-min/bootstrap.light.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .btn-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:active{background:#0384a4;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-448 .btn-primary:disabled,.factory-bootstrap-448 .btn-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.factory-bootstrap-448 .btn-group .btn.active.value{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.factory-bootstrap-448 .pagination>.active>a,.factory-bootstrap-448 .pagination>.active>a:focus,.factory-bootstrap-448 .pagination>.active>a:hover,.factory-bootstrap-448 .pagination>.active>span,.factory-bootstrap-448 .pagination>.active>span:focus,.factory-bootstrap-448 .pagination>.active>span:hover{background-color:#04a4cc;border-color:#037c9a}
|
libs/factory/bootstrap/assets/css-min/bootstrap.midnight.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .btn-primary{background:#e14d43;border-color:#d02a21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:active{background:#d92c23;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-448 .btn-primary:disabled,.factory-bootstrap-448 .btn-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.factory-bootstrap-448 .btn-group .btn.active.value{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.factory-bootstrap-448 .pagination>.active>a,.factory-bootstrap-448 .pagination>.active>a:focus,.factory-bootstrap-448 .pagination>.active>a:hover,.factory-bootstrap-448 .pagination>.active>span,.factory-bootstrap-448 .pagination>.active>span:focus,.factory-bootstrap-448 .pagination>.active>span:hover{background-color:#e14d43;border-color:#d02a21}
|
libs/factory/bootstrap/assets/css-min/bootstrap.ocean.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .btn-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:active{background:#86a988;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-448 .btn-primary:disabled,.factory-bootstrap-448 .btn-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.factory-bootstrap-448 .btn-group .btn.active.value{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.factory-bootstrap-448 .pagination>.active>a,.factory-bootstrap-448 .pagination>.active>a:focus,.factory-bootstrap-448 .pagination>.active>a:hover,.factory-bootstrap-448 .pagination>.active>span,.factory-bootstrap-448 .pagination>.active>span:focus,.factory-bootstrap-448 .pagination>.active>span:hover{background-color:#9ebaa0;border-color:#80a583}
|
libs/factory/bootstrap/assets/css-min/bootstrap.separator.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .factory-separator{border-bottom:1px solid #f9f9f9;border-top:1px solid #d1d1d1;margin-bottom:25px}
|
libs/factory/bootstrap/assets/css-min/bootstrap.sunrise.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .btn-primary{background:#dd823b;border-color:#c36822;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:focus,.factory-bootstrap-448 .btn-primary:hover{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15)}.factory-bootstrap-448 .btn-primary:active{background:#cc6c23;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.factory-bootstrap-448 .btn-primary:disabled,.factory-bootstrap-448 .btn-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.factory-bootstrap-448 .btn-group .btn.active.value{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}.factory-bootstrap-448 .pagination>.active>a,.factory-bootstrap-448 .pagination>.active>a:focus,.factory-bootstrap-448 .pagination>.active>a:hover,.factory-bootstrap-448 .pagination>.active>span,.factory-bootstrap-448 .pagination>.active>span:focus,.factory-bootstrap-448 .pagination>.active>span:hover{background-color:#dd823b;border-color:#c36822}
|
libs/factory/bootstrap/assets/css-min/control.checkbox.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
#side-sortables .factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
#side-sortables .factory-bootstrap-448 .factory-buttons-way{float:right;position:relative;top:-25px;left:5px;border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-448 .factory-checkbox-disabled button,.factory-bootstrap-448 .factory-checkbox-disabled input{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-448 .factory-buttons-way{border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-448 .factory-buttons-way button{padding-left:10px;padding-right:10px}.factory-bootstrap-448 .factory-buttons-way .factory-on.active{text-shadow:none;color:#fff;background-color:#33aad5;-webkit-box-shadow:inset 0 1px 1px #0074a2;box-shadow:inset 0 1px 3px #0074a2;border-top:1px solid #0074a2;border-bottom:1px solid #0074a2;border-left:1px solid #0074a2}.factory-bootstrap-448 .factory-checkbox-tumbler-hint{margin-top:5px}.factory-bootstrap-448 .factory-checkbox-tumbler-hint .factory-tumbler-content{display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-448 .factory-buttons-way .factory-on.active{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.admin-color-blue .factory-bootstrap-448 .factory-buttons-way .factory-on.active{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.admin-color-coffee .factory-bootstrap-448 .factory-buttons-way .factory-on.active{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.admin-color-ectoplasm .factory-bootstrap-448 .factory-buttons-way .factory-on.active{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.admin-color-midnight .factory-bootstrap-448 .factory-buttons-way .factory-on.active{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.admin-color-ocean .factory-bootstrap-448 .factory-buttons-way .factory-on.active{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.admin-color-sunrise .factory-bootstrap-448 .factory-buttons-way .factory-on.active{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}
|
libs/factory/bootstrap/assets/css-min/control.dropdown.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .factory-dropdown.factory-buttons-way .fa{margin-right:6px;position:relative}.factory-bootstrap-448 .factory-dropdown.factory-buttons-way{border:0;border-radius:0}.factory-bootstrap-448 .factory-hints .factory-hint{margin-top:5px;display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-448 .factory-dropdown.factory-buttons-way .active{background-color:#04a4cc;-webkit-box-shadow:inset 0 1px 2px #037c9a;box-shadow:inset 0 1px 2px #037c9a;border-top:1px solid #037c9a;border-bottom:1px solid #037c9a;border-left:1px solid #037c9a}.admin-color-blue .factory-bootstrap-448 .factory-dropdown.factory-buttons-way .active{background-color:#e1a948;-webkit-box-shadow:inset 0 1px 2px #d39323;box-shadow:inset 0 1px 2px #d39323;border-top:1px solid #d39323;border-bottom:1px solid #d39323;border-left:1px solid #d39323}.admin-color-coffee .factory-bootstrap-448 .factory-dropdown.factory-buttons-way .active{background-color:#c7a589;-webkit-box-shadow:inset 0 1px 2px #b78a66;box-shadow:inset 0 1px 2px #b78a66;border-top:1px solid #b78a66;border-bottom:1px solid #b78a66;border-left:1px solid #b78a66}.admin-color-ectoplasm .factory-bootstrap-448 .factory-dropdown.factory-buttons-way .active{background-color:#a3b745;-webkit-box-shadow:inset 0 1px 2px #839237;box-shadow:inset 0 1px 2px #839237;border-top:1px solid #839237;border-bottom:1px solid #839237;border-left:1px solid #839237}.admin-color-midnight .factory-bootstrap-448 .factory-dropdown.factory-buttons-way .active{background-color:#e14d43;-webkit-box-shadow:inset 0 1px 2px #d02a21;box-shadow:inset 0 1px 2px #d02a21;border-top:1px solid #d02a21;border-bottom:1px solid #d02a21;border-left:1px solid #d02a21}.admin-color-ocean .factory-bootstrap-448 .factory-dropdown.factory-buttons-way .active{background-color:#9ebaa0;-webkit-box-shadow:inset 0 1px 2px #80a583;box-shadow:inset 0 1px 2px #80a583;border-top:1px solid #80a583;border-bottom:1px solid #80a583;border-left:1px solid #80a583}.admin-color-sunrise .factory-bootstrap-448 .factory-dropdown.factory-buttons-way .active{background-color:#dd823b;-webkit-box-shadow:inset 0 1px 2px #c36822;box-shadow:inset 0 1px 2px #c36822;border-top:1px solid #c36822;border-bottom:1px solid #c36822;border-left:1px solid #c36822}.factory-bootstrap-448 .factory-dropdown.factory-ddslick-way .dd-select{background-color:#fff!important}.factory-bootstrap-448 .factory-dropdown.factory-ddslick-way label{margin-bottom:1px}.factory-bootstrap-448 .factory-dropdown.factory-ddslick-way .dd-option,.factory-bootstrap-448 .factory-dropdown.factory-ddslick-way .dd-selected{padding:8px 12px 8px 11px!important}
|
libs/factory/bootstrap/assets/css-min/control.multiple-textbox.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .factory-mtextbox-item{position:relative;margin-bottom:5px}.factory-bootstrap-448 .factory-mtextbox-item input,.factory-mtextbox-remove-item{display:inline-block}.factory-bootstrap-448 .factory-mtextbox-item .factory-mtextbox-remove-item{position:absolute;top:0;right:0;bottom:0;width:40px;border-radius:0 3px 3px 0;outline:0}.factory-bootstrap-448 .factory-mtextbox-item .factory-mtextbox-remove-item:focus,.factory-bootstrap-448 .factory-mtextbox-item .factory-mtextbox-remove-item:hover{box-shadow:none;outline:0}.factory-bootstrap-448 .factory-mtextbox-add-item{display:block;margin-top:10px}
|
libs/factory/bootstrap/assets/css-min/holder.more-link.min.css
CHANGED
@@ -8,4 +8,4 @@
|
|
8 |
*/
|
9 |
|
10 |
|
11 |
-
.factory-bootstrap-
|
8 |
*/
|
9 |
|
10 |
|
11 |
+
.factory-bootstrap-448 .factory-more-link-content{border-top:1px dashed #DDD;padding-top:25px;width:100%;padding-right:20px;position:relative}.factory-bootstrap-448 .factory-tab .factory-more-link-show{display:inline-block;text-decoration:none;border-bottom:1px dotted #21759b;position:relative}.factory-bootstrap-448 .factory-tab .factory-more-link-show:hover{border-color:#d54e21}.factory-bootstrap-448 .factory-tab .factory-more-link-hide{position:absolute;margin-top:-35px;background-color:#fff;padding:0 5px;right:20px;color:#bbb;text-decoration:none}.factory-bootstrap-448 .factory-tab .factory-more-link-hide:hover{color:#999}
|
libs/factory/bootstrap/assets/js-min/bootstrap.dropdown.min.js
CHANGED
@@ -7,4 +7,4 @@
|
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
-
+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=factory-dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}},a.fn.
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
+
+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=factory-dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}},a.fn.factoryBootstrap448_dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.factoryBootstrap448_dropdown.Constructor=f,a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(jQuery);
|
libs/factory/bootstrap/assets/js-min/control.checkbox.min.js
CHANGED
@@ -7,4 +7,4 @@
|
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
-
!function(a){var b=function(b){var c=this;this.$element=a(b),this.$result=this.$element.find(".factory-result"),this.$on=this.$element.find(".factory-on"),this.$off=this.$element.find(".factory-off");var d=this.$element.is(".factory-tumbler"),e=this.$element.is(".factory-has-tumbler-hint"),f=this.$element.data("tumbler-function"),g=this.$element.data("tumbler-delay");g||(g=3e3),this.callByPath=function(a,b){for(var c=a.split("."),d=window,e=0;e<c.length;e++)d=d[c[e]];d.apply(d,b)},this.$on.click(function(){return c.$off.removeClass("active"),c.$on.addClass("active"),d?setTimeout(function(){c.$on.removeClass("active"),c.$off.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!0),c.$result.val(1),c.$result.trigger("change")),!1}),this.$off.click(function(){return c.$on.removeClass("active"),c.$off.addClass("active"),d?setTimeout(function(){c.$off.removeClass("active"),c.$on.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!1),c.$result.val(0),c.$result.trigger("change")),!1}),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){(void 0!==window.__factory_checkbox_control_events_off_data||void 0!==window.__factory_checkbox_control_events_on_data)&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.prop("checked"),f=window.__factory_checkbox_control_events_on_data[d],g=window.__factory_checkbox_control_events_off_data[d];if(f||g){var h,i;void 0===window.__factory_checkbox_control_detach_elements&&(window.__factory_checkbox_control_detach_elements={}),h=window.__factory_checkbox_control_detach_elements,i=e?f:g;for(var j in i)if(i.hasOwnProperty(j)){var k,l=i[j];a.isArray(l)||(k=c.hashCode(d+l));var m;switch(j){case"hide":"string"==typeof l&&a(l).hide(0);break;case"show":"string"==typeof l&&a(l).fadeIn(200);break;case"detach":"string"==typeof l&&a(l).each(function(b){h[k]||(h[k]={}),h[k][b]||(h[k][b]={}),h[k][b].recovery_contanier=a(this).parent(),h[k][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(h[k]){for(var n in h[k])h[k].hasOwnProperty(n)&&h[k][n].recovery_contanier&&h[k][n].element&&h[k][n].recovery_contanier.append(h[k][n].element);delete h[k]}break;case"removeClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).removeClass(l[m]);break;case"addClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).addClass(l[m]);break;case"setValue":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&void 0!==l[m]&&null!==l[m]&&a(m).val(l[m])}}}},this.executeEvents(this.$result)};a.fn.
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
+
!function(a){var b=function(b){var c=this;this.$element=a(b),this.$result=this.$element.find(".factory-result"),this.$on=this.$element.find(".factory-on"),this.$off=this.$element.find(".factory-off");var d=this.$element.is(".factory-tumbler"),e=this.$element.is(".factory-has-tumbler-hint"),f=this.$element.data("tumbler-function"),g=this.$element.data("tumbler-delay");g||(g=3e3),this.callByPath=function(a,b){for(var c=a.split("."),d=window,e=0;e<c.length;e++)d=d[c[e]];d.apply(d,b)},this.$on.click(function(){return c.$off.removeClass("active"),c.$on.addClass("active"),d?setTimeout(function(){c.$on.removeClass("active"),c.$off.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!0),c.$result.val(1),c.$result.trigger("change")),!1}),this.$off.click(function(){return c.$on.removeClass("active"),c.$off.addClass("active"),d?setTimeout(function(){c.$off.removeClass("active"),c.$on.addClass("active");var a=e?c.$element.next():null;f?c.callByPath(f,[c.$element,a]):e&&(c.$element.next().fadeIn(300),setTimeout(function(){c.$element.next().fadeOut(500)},g))},300):(c.$result.prop("checked",!1),c.$result.val(0),c.$result.trigger("change")),!1}),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){(void 0!==window.__factory_checkbox_control_events_off_data||void 0!==window.__factory_checkbox_control_events_on_data)&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.prop("checked"),f=window.__factory_checkbox_control_events_on_data[d],g=window.__factory_checkbox_control_events_off_data[d];if(f||g){var h,i;void 0===window.__factory_checkbox_control_detach_elements&&(window.__factory_checkbox_control_detach_elements={}),h=window.__factory_checkbox_control_detach_elements,i=e?f:g;for(var j in i)if(i.hasOwnProperty(j)){var k,l=i[j];a.isArray(l)||(k=c.hashCode(d+l));var m;switch(j){case"hide":"string"==typeof l&&a(l).hide(0);break;case"show":"string"==typeof l&&a(l).fadeIn(200);break;case"detach":"string"==typeof l&&a(l).each(function(b){h[k]||(h[k]={}),h[k][b]||(h[k][b]={}),h[k][b].recovery_contanier=a(this).parent(),h[k][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(h[k]){for(var n in h[k])h[k].hasOwnProperty(n)&&h[k][n].recovery_contanier&&h[k][n].element&&h[k][n].recovery_contanier.append(h[k][n].element);delete h[k]}break;case"removeClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).removeClass(l[m]);break;case"addClasses":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&l[m]&&a(m).addClass(l[m]);break;case"setValue":if("object"==typeof l)for(m in l)l.hasOwnProperty(m)&&void 0!==l[m]&&null!==l[m]&&a(m).val(l[m])}}}},this.executeEvents(this.$result)};a.fn.factoryBootstrap448_checkboxControl=function(c){if("string"==typeof c){var d=a(this).data("factory.checkbox.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.checkbox.control");d||c.data("factory.checkbox.control",d=new b(this))})},a.fn.factoryBootstrap448_checkboxControl.Constructor=b,a(function(){a(".factory-bootstrap-448 .factory-checkbox.factory-buttons-way").factoryBootstrap448_checkboxControl(),a(".factory-bootstrap-448 .factory-checkbox").not(".factory-buttons-way").click(function(){a(this).prop("checked")?a(this).val(1):a(this).val(0)})})}(jQuery);
|
libs/factory/bootstrap/assets/js-min/control.dropdown.min.js
CHANGED
@@ -7,4 +7,4 @@
|
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
-
!function(a){var b=function(b){var c=this;if(this.$element=a(b),this.way=this.$element.data("way"),this.name=this.$element.data("name")||this.$element.attr("name"),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){void 0!==window.factory_dropdown_control_events_data&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.val(),f=window.factory_dropdown_control_events_data[d];if(f&&f[e]){var g;void 0===window.__factory_dropdown_control_detach_elements&&(window.__factory_dropdown_control_detach_elements={}),g=window.__factory_dropdown_control_detach_elements;for(var h in f[e])if(f[e].hasOwnProperty(h)){var i,j=f[e][h];switch(a.isArray(j)||(i=c.hashCode(d+j)),h){case"hide":"string"==typeof j&&a(j).hide(0);break;case"show":"string"==typeof j&&a(j).fadeIn(200);break;case"detach":"string"==typeof j&&a(j).each(function(b){g[i]||(g[i]={}),g[i][b]||(g[i][b]={}),g[i][b].recovery_contanier=a(this).parent(),g[i][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(g[i]){for(var k in g[i])g[i].hasOwnProperty(k)&&g[i][k].recovery_contanier&&g[i][k].element&&g[i][k].recovery_contanier.append(g[i][k].element);delete g[i]}break;case"removeClasses":if("object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&j[l]&&a(l).removeClass(j[l]);break;case"addClasses":if("object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&j[l]&&a(l).addClass(j[l])}}}},"buttons"===this.way)this.$result=this.$element.find(".factory-result"),this.$hints=this.$element.find(".factory-hints"),this.$buttons=this.$element.find(".btn"),c.executeEvents(this.$result),this.$buttons.click(function(){var b=a(this).data("value");return c.$buttons.removeClass("active"),a(this).addClass("active"),c.$hints.find(".factory-hint").hide(),c.$hints.find(".factory-hint-"+b).fadeIn(),c.$result.val(b),c.$result.trigger("change"),!1});else if("ddslick"===this.way){c.executeEvents(c.$element.find(".factory-result"));var d=window["factory_"+this.name+"_data"],e=this.$element.find(".factory-ddslick"),f=this.$element.data("width")||300,g=this.$element.data("align")||"right";a(d).each(function(){return this.imageHoverSrc?void(a("<img/>")[0].src=this.imageHoverSrc):!0}),e.ddslick({data:d,width:f,imagePosition:g,selectText:"- select -",onSelected:function(a){a.selectedData.imageHoverSrc&&c.$element.find(".dd-selected-image").attr("src",a.selectedData.imageHoverSrc);var b=c.$element.find(".factory-result").val(a.selectedData.value);b.change()}})}else{c.executeEvents(this.$element),this.$hints=this.$element.next(),this.$hints.hasClass("factory-hints")&&(this.$element.change(function(){return c.updateHints(),!1}),this.updateHints=function(){var a=c.$element.val();c.$hints.find(".factory-hint").hide(),c.$hints.find(".factory-hint-"+a).show()},c.updateHints()),this.getAjaxData=function(){var a=c.$element.data("ajax-data-id");return window[a]},this.loadData=function(){var b=c.getAjaxData();a.ajax({url:b.url,data:b.data,dataType:"json",success:function(a){return a.error?c.showError(a.error):void c.fill(a.items)},error:function(a){console&&console.log&&console.log(a.responseText),c.showError("Unexpected error occurred during the ajax request.")},complete:function(){c.removeLoader()}})},this.fill=function(a){this.clearList();var b=c.getAjaxData();if(a&&a.length)for(var d in a){var e=a[d];c.addListItem(e)}else this.$element.append("<option>"+b.emptyList+"</li>");this.$element.trigger("factory-loaded")},this.clearList=function(){this.$element.html("")},this.addListItem=function(b){var d=a("<option />").attr("value",b.value).text(b.title).appendTo(this.$element),e=c.getAjaxData();e.selected&&e.selected==b.value&&d.attr("selected","selected")},this.showError=function(b){this.clearList();var d=a("<div class='factory-control-error'></div>").append(a("<i class='fa fa-exclamation-triangle'></i>")).append(b),e=c.getAjaxData();this.$element.append("<option>"+e.emptyList+"</li>"),this.$element.after(d),this.$element.addClass("factory-has-error")},this.removeLoader=function(){this.$element.removeClass("factory-hidden");var b=c.getAjaxData();a(b.loader).remove()};var h=this.$element.data("ajax");h&&this.loadData()}};a.fn.
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
+
!function(a){var b=function(b){var c=this;if(this.$element=a(b),this.way=this.$element.data("way"),this.name=this.$element.data("name")||this.$element.attr("name"),this.hashCode=function(a){var b=0;if(!a||0===a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b=b.toString(16),b=b.replace("-","")},this.executeEvents=function(a){void 0!==window.factory_dropdown_control_events_data&&(a.change(function(){c.eventsProcess(a)}),c.eventsProcess(a))},this.eventsProcess=function(b){var d=b.attr("name"),e=b.val(),f=window.factory_dropdown_control_events_data[d];if(f&&f[e]){var g;void 0===window.__factory_dropdown_control_detach_elements&&(window.__factory_dropdown_control_detach_elements={}),g=window.__factory_dropdown_control_detach_elements;for(var h in f[e])if(f[e].hasOwnProperty(h)){var i,j=f[e][h];switch(a.isArray(j)||(i=c.hashCode(d+j)),h){case"hide":"string"==typeof j&&a(j).hide(0);break;case"show":"string"==typeof j&&a(j).fadeIn(200);break;case"detach":"string"==typeof j&&a(j).each(function(b){g[i]||(g[i]={}),g[i][b]||(g[i][b]={}),g[i][b].recovery_contanier=a(this).parent(),g[i][b].element=a(this).clone(!0),a(this).remove()});break;case"recovery":if(g[i]){for(var k in g[i])g[i].hasOwnProperty(k)&&g[i][k].recovery_contanier&&g[i][k].element&&g[i][k].recovery_contanier.append(g[i][k].element);delete g[i]}break;case"removeClasses":if("object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&j[l]&&a(l).removeClass(j[l]);break;case"addClasses":if("object"==typeof j)for(var l in j)j.hasOwnProperty(l)&&j[l]&&a(l).addClass(j[l])}}}},"buttons"===this.way)this.$result=this.$element.find(".factory-result"),this.$hints=this.$element.find(".factory-hints"),this.$buttons=this.$element.find(".btn"),c.executeEvents(this.$result),this.$buttons.click(function(){var b=a(this).data("value");return c.$buttons.removeClass("active"),a(this).addClass("active"),c.$hints.find(".factory-hint").hide(),c.$hints.find(".factory-hint-"+b).fadeIn(),c.$result.val(b),c.$result.trigger("change"),!1});else if("ddslick"===this.way){c.executeEvents(c.$element.find(".factory-result"));var d=window["factory_"+this.name+"_data"],e=this.$element.find(".factory-ddslick"),f=this.$element.data("width")||300,g=this.$element.data("align")||"right";a(d).each(function(){return this.imageHoverSrc?void(a("<img/>")[0].src=this.imageHoverSrc):!0}),e.ddslick({data:d,width:f,imagePosition:g,selectText:"- select -",onSelected:function(a){a.selectedData.imageHoverSrc&&c.$element.find(".dd-selected-image").attr("src",a.selectedData.imageHoverSrc);var b=c.$element.find(".factory-result").val(a.selectedData.value);b.change()}})}else{c.executeEvents(this.$element),this.$hints=this.$element.next(),this.$hints.hasClass("factory-hints")&&(this.$element.change(function(){return c.updateHints(),!1}),this.updateHints=function(){var a=c.$element.val();c.$hints.find(".factory-hint").hide(),c.$hints.find(".factory-hint-"+a).show()},c.updateHints()),this.getAjaxData=function(){var a=c.$element.data("ajax-data-id");return window[a]},this.loadData=function(){var b=c.getAjaxData();a.ajax({url:b.url,data:b.data,dataType:"json",success:function(a){return a.error?c.showError(a.error):void c.fill(a.items)},error:function(a){console&&console.log&&console.log(a.responseText),c.showError("Unexpected error occurred during the ajax request.")},complete:function(){c.removeLoader()}})},this.fill=function(a){this.clearList();var b=c.getAjaxData();if(a&&a.length)for(var d in a){var e=a[d];c.addListItem(e)}else this.$element.append("<option>"+b.emptyList+"</li>");this.$element.trigger("factory-loaded")},this.clearList=function(){this.$element.html("")},this.addListItem=function(b){var d=a("<option />").attr("value",b.value).text(b.title).appendTo(this.$element),e=c.getAjaxData();e.selected&&e.selected==b.value&&d.attr("selected","selected")},this.showError=function(b){this.clearList();var d=a("<div class='factory-control-error'></div>").append(a("<i class='fa fa-exclamation-triangle'></i>")).append(b),e=c.getAjaxData();this.$element.append("<option>"+e.emptyList+"</li>"),this.$element.after(d),this.$element.addClass("factory-has-error")},this.removeLoader=function(){this.$element.removeClass("factory-hidden");var b=c.getAjaxData();a(b.loader).remove()};var h=this.$element.data("ajax");h&&this.loadData()}};a.fn.factoryBootstrap448_dropdownControl=function(c){if("string"==typeof c){var d=a(this).data("factory.dropdown.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.dropdown.control");d||c.data("factory.dropdown.control",d=new b(this))})},a.fn.factoryBootstrap448_dropdownControl.Constructor=b,a(function(){a(".factory-bootstrap-448 .factory-dropdown").factoryBootstrap448_dropdownControl()})}(jQuery);
|
libs/factory/bootstrap/assets/js-min/control.list.min.js
CHANGED
@@ -7,4 +7,4 @@
|
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
-
!function(a){var b=function(b){var c=this;if(this.$element=a(b),this.way=this.$element.data("way"),this.name=this.$element.data("name"),"checklist"===this.way){this.getAjaxData=function(){var a=c.$element.data("ajax-data-id");return window[a]},this.loadData=function(){var b=c.getAjaxData();a.ajax({url:b.url,data:b.data,dataType:"json",success:function(a){return a.error?c.showError(a.error):void c.fill(a.items)},error:function(){c.showError("Unexpected error occurred during the ajax request.")},complete:function(){c.removeLoader()}})},this.fill=function(a){this.clearList();var b=c.getAjaxData();if(a&&a.length){this.$element.removeClass("factory-empty");for(var d in a){var e=a[d];c.addListItem(e)}}else this.$element.addClass("factory-empty"),this.$element.append("<li>"+b.emptyList+"</li>")},this.clearList=function(){this.$element.html("")},this.addListItem=function(b){var d=a("<li>"),e=a("<label>").attr("for","factory-checklist-"+c.name+"-"+b.value).appendTo(d),f=a("<span>").appendTo(e),g=a("<input />").attr("type","checkbox").attr("name",c.name+"[]").val(b.value).attr("id","factory-checklist-"+c.name+"-"+b.value).appendTo(f),h=(a("<span>"+b.title+"</span>").appendTo(e),c.getAjaxData());h.selected.length&&a.inArray(b.value,h.selected)>=0&&g.attr("checked","checked"),this.$element.append(d)},this.showError=function(b){this.$element.html("").append(a("<i class='fa fa-exclamation-triangle'></i>")).append(b),this.$element.addClass("factory-list-error")},this.removeLoader=function(){this.$element.removeClass("factory-hidden");var b=c.getAjaxData();a(b.loader).remove()};var d=this.$element.data("ajax");d&&this.loadData()}};a.fn.
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
+
!function(a){var b=function(b){var c=this;if(this.$element=a(b),this.way=this.$element.data("way"),this.name=this.$element.data("name"),"checklist"===this.way){this.getAjaxData=function(){var a=c.$element.data("ajax-data-id");return window[a]},this.loadData=function(){var b=c.getAjaxData();a.ajax({url:b.url,data:b.data,dataType:"json",success:function(a){return a.error?c.showError(a.error):void c.fill(a.items)},error:function(){c.showError("Unexpected error occurred during the ajax request.")},complete:function(){c.removeLoader()}})},this.fill=function(a){this.clearList();var b=c.getAjaxData();if(a&&a.length){this.$element.removeClass("factory-empty");for(var d in a){var e=a[d];c.addListItem(e)}}else this.$element.addClass("factory-empty"),this.$element.append("<li>"+b.emptyList+"</li>")},this.clearList=function(){this.$element.html("")},this.addListItem=function(b){var d=a("<li>"),e=a("<label>").attr("for","factory-checklist-"+c.name+"-"+b.value).appendTo(d),f=a("<span>").appendTo(e),g=a("<input />").attr("type","checkbox").attr("name",c.name+"[]").val(b.value).attr("id","factory-checklist-"+c.name+"-"+b.value).appendTo(f),h=(a("<span>"+b.title+"</span>").appendTo(e),c.getAjaxData());h.selected.length&&a.inArray(b.value,h.selected)>=0&&g.attr("checked","checked"),this.$element.append(d)},this.showError=function(b){this.$element.html("").append(a("<i class='fa fa-exclamation-triangle'></i>")).append(b),this.$element.addClass("factory-list-error")},this.removeLoader=function(){this.$element.removeClass("factory-hidden");var b=c.getAjaxData();a(b.loader).remove()};var d=this.$element.data("ajax");d&&this.loadData()}};a.fn.factoryBootstrap448_listControl=function(c){if("string"==typeof c){var d=a(this).data("factory.list.control");return d?d[c]():null}return this.each(function(){var c=a(this),d=c.data("factory.list.control");d||c.data("factory.list.control",d=new b(this))})},a.fn.factoryBootstrap448_listControl.Constructor=b,a(function(){a(".factory-bootstrap-448 .factory-list").factoryBootstrap448_listControl()})}(jQuery);
|
libs/factory/bootstrap/assets/js-min/control.multiple-textbox.min.js
CHANGED
@@ -7,4 +7,4 @@
|
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
-
!function(a){"use strict";var b=function(b){this.$element=a(b);var c=a(".factory-mtextbox-item",this.$element).eq(0).clone(!0);a(".factory-mtextbox-add-item",this.$element).on("click",function(){var b=a(this).closest(".factory-multiple-textbox-group").find(".factory-mtextbox-items"),d=c.clone(!0),e=a('<button class="btn btn-default btn-small factory-mtextbox-remove-item"><i class="fa fa-times" aria-hidden="true"></i></button>');return b.append(d.append(e)),d.find('input[type="text"]').val("").focus(),!1}),a(document).on("click",".factory-mtextbox-remove-item",function(){return a(this).closest(".factory-mtextbox-item").remove(),!1})};a.fn.
|
7 |
* Support: http://webcraftic.com/contact-us/
|
8 |
*/
|
9 |
|
10 |
+
!function(a){"use strict";var b=function(b){this.$element=a(b);var c=a(".factory-mtextbox-item",this.$element).eq(0).clone(!0);a(".factory-mtextbox-add-item",this.$element).on("click",function(){var b=a(this).closest(".factory-multiple-textbox-group").find(".factory-mtextbox-items"),d=c.clone(!0),e=a('<button class="btn btn-default btn-small factory-mtextbox-remove-item"><i class="fa fa-times" aria-hidden="true"></i></button>');return b.append(d.append(e)),d.find('input[type="text"]').val("").focus(),!1}),a(document).on("click",".factory-mtextbox-remove-item",function(){return a(this).closest(".factory-mtextbox-item").remove(),!1})};a.fn.factoryBootstrap448_MultipleTextboxControl=function(){return this.each(function(){new b(this)})},a(function(){a(".factory-bootstrap-448 .factory-multiple-textbox-group").factoryBootstrap448_MultipleTextboxControl()})}(jQuery);
|
libs/factory/bootstrap/assets/js-min/holder.more-link.min.js
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap generator - v1.0.1, 2021-02-04
|
3 |
+
* Webcraftic factory build
|
4 |
+
*
|
5 |
+
* Copyright 2018, Alex Kovalev <alex.kovalevv@gmail.com>, Webcraftic <wordpress.webraftic@gmail.com>
|
6 |
+
* Site: http://webcraftic.com
|
7 |
+
* Support: http://webcraftic.com/contact-us/
|
8 |
+
*/
|
9 |
+
|
10 |
+
!function(a,b,c,d){"use strict";var e="factoryBootstrap448_moreLink";a.fn[e]=function(b,c){return this.each(function(){var b=a(this);b.find(".factory-more-link-show").click(function(){return a(a(this).attr("href")).fadeIn(),a(this).hide(),!1}),b.find(".factory-more-link-hide").click(function(){var b=a(a(this).attr("href"));return b.fadeOut(300,function(){b.parents(".factory-more-link").find(".factory-more-link-show").show()}),!1})})},a(function(){a(".factory-bootstrap-448 .factory-more-link").factoryBootstrap448_moreLink()})}(jQuery,window,document);
|
libs/factory/bootstrap/boot.php
CHANGED
@@ -19,27 +19,27 @@ if( !is_admin() ) {
|
|
19 |
return;
|
20 |
}
|
21 |
|
22 |
-
if( defined('
|
23 |
return;
|
24 |
}
|
25 |
|
26 |
-
define(
|
27 |
-
define(
|
28 |
|
29 |
if( !defined('FACTORY_FLAT_ADMIN') ) {
|
30 |
define('FACTORY_FLAT_ADMIN', true);
|
31 |
}
|
32 |
|
33 |
-
define('
|
34 |
-
define('
|
35 |
|
36 |
-
require_once(
|
37 |
|
38 |
/**
|
39 |
-
* @param
|
40 |
*/
|
41 |
-
add_action('
|
42 |
-
$manager = new
|
43 |
$plugin->setBootstap($manager);
|
44 |
});
|
45 |
|
19 |
return;
|
20 |
}
|
21 |
|
22 |
+
if( defined('FACTORY_BOOTSTRAP_448_LOADED') ) {
|
23 |
return;
|
24 |
}
|
25 |
|
26 |
+
define('FACTORY_BOOTSTRAP_448_VERSION', '4.4.8');
|
27 |
+
define('FACTORY_BOOTSTRAP_448_LOADED', true);
|
28 |
|
29 |
if( !defined('FACTORY_FLAT_ADMIN') ) {
|
30 |
define('FACTORY_FLAT_ADMIN', true);
|
31 |
}
|
32 |
|
33 |
+
define('FACTORY_BOOTSTRAP_448_DIR', dirname(__FILE__));
|
34 |
+
define('FACTORY_BOOTSTRAP_448_URL', plugins_url(null, __FILE__));
|
35 |
|
36 |
+
require_once(FACTORY_BOOTSTRAP_448_DIR . '/includes/functions.php');
|
37 |
|
38 |
/**
|
39 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
40 |
*/
|
41 |
+
add_action('wbcr_factory_bootstrap_448_plugin_created', function ($plugin) {
|
42 |
+
$manager = new Wbcr_FactoryBootstrap448_Manager($plugin);
|
43 |
$plugin->setBootstap($manager);
|
44 |
});
|
45 |
|
libs/factory/bootstrap/includes/functions.php
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
*/
|
12 |
|
13 |
// Exit if accessed directly
|
14 |
-
if
|
15 |
exit;
|
16 |
}
|
17 |
|
@@ -20,13 +20,13 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
20 |
*
|
21 |
* @since 3.2.0
|
22 |
*/
|
23 |
-
class
|
24 |
|
25 |
/**
|
26 |
* A plugin for which the manager was created.
|
27 |
*
|
28 |
* @since 3.2.0
|
29 |
-
* @var
|
30 |
*/
|
31 |
public $plugin;
|
32 |
|
@@ -51,29 +51,31 @@ class Wbcr_FactoryBootstrap446_Manager {
|
|
51 |
*
|
52 |
* @since 1.0.0
|
53 |
*/
|
54 |
-
public function __construct(
|
|
|
55 |
$this->plugin = $plugin;
|
56 |
|
57 |
-
add_action(
|
58 |
-
add_filter(
|
59 |
}
|
60 |
|
61 |
/**
|
62 |
* Includes the Bootstrap scripts.
|
63 |
*
|
|
|
64 |
* @since 3.2.0
|
65 |
*
|
66 |
-
* @param array|string $scripts
|
67 |
*/
|
68 |
-
public function enqueueScript(
|
69 |
-
|
70 |
-
|
71 |
-
|
|
|
72 |
$this->scripts[] = $script;
|
73 |
}
|
74 |
}
|
75 |
} else {
|
76 |
-
if
|
77 |
$this->scripts[] = $scripts;
|
78 |
}
|
79 |
}
|
@@ -82,20 +84,21 @@ class Wbcr_FactoryBootstrap446_Manager {
|
|
82 |
/**
|
83 |
* * Includes the Bootstrap styles.
|
84 |
*
|
|
|
85 |
* @since 3.2.0
|
86 |
*
|
87 |
-
* @param array|string $styles
|
88 |
*/
|
89 |
-
public function enqueueStyle(
|
|
|
90 |
|
91 |
-
if
|
92 |
-
foreach
|
93 |
-
if
|
94 |
$this->styles[] = $style;
|
95 |
}
|
96 |
}
|
97 |
} else {
|
98 |
-
if
|
99 |
$this->styles[] = $styles;
|
100 |
}
|
101 |
}
|
@@ -104,25 +107,26 @@ class Wbcr_FactoryBootstrap446_Manager {
|
|
104 |
/**
|
105 |
* Loads Bootstrap assets.
|
106 |
*
|
107 |
-
* @since 3.2.0
|
108 |
* @return void
|
|
|
109 |
* @see admin_enqueue_scripts
|
110 |
*
|
111 |
*/
|
112 |
-
public function loadAssets(
|
|
|
113 |
|
114 |
-
do_action(
|
115 |
-
do_action(
|
116 |
|
117 |
$dependencies = [];
|
118 |
-
if
|
119 |
$dependencies[] = 'jquery';
|
120 |
$dependencies[] = 'jquery-ui-core';
|
121 |
$dependencies[] = 'jquery-ui-widget';
|
122 |
}
|
123 |
|
124 |
-
foreach
|
125 |
-
switch
|
126 |
case 'plugin.iris':
|
127 |
$dependencies[] = 'jquery-ui-widget';
|
128 |
$dependencies[] = 'jquery-ui-slider';
|
@@ -131,20 +135,21 @@ class Wbcr_FactoryBootstrap446_Manager {
|
|
131 |
}
|
132 |
}
|
133 |
|
134 |
-
if
|
135 |
-
$this->enqueueScripts(
|
136 |
}
|
137 |
-
if
|
138 |
-
$this->enqueueScripts(
|
139 |
}
|
140 |
}
|
141 |
|
142 |
/**
|
143 |
-
* @param array
|
144 |
* @param string $type
|
145 |
-
* @param array
|
146 |
*/
|
147 |
-
protected function enqueueScripts(
|
|
|
148 |
|
149 |
$is_first = true;
|
150 |
|
@@ -153,66 +158,66 @@ class Wbcr_FactoryBootstrap446_Manager {
|
|
153 |
*
|
154 |
* @since 4.1.0
|
155 |
*/
|
156 |
-
$cache_enable = apply_filters(
|
157 |
|
158 |
-
$cache_id
|
159 |
-
$cache_dir_path =
|
160 |
-
$cache_dir_url
|
161 |
|
162 |
$cache_filepath = $cache_dir_path . $cache_id . ".min." . $type;
|
163 |
-
$cache_fileurl
|
164 |
|
165 |
-
if
|
166 |
-
if
|
167 |
-
wp_enqueue_script(
|
168 |
} else {
|
169 |
-
wp_enqueue_style(
|
170 |
}
|
171 |
} else {
|
172 |
$cache_dir_exists = false;
|
173 |
-
if
|
174 |
-
if
|
175 |
$cache_dir_exists = true;
|
176 |
}
|
177 |
} else {
|
178 |
-
if
|
179 |
$cache_dir_exists = true;
|
180 |
}
|
181 |
}
|
182 |
|
183 |
$concat_files = [];
|
184 |
-
foreach
|
185 |
-
$script_to_load = sanitize_text_field(
|
186 |
-
if
|
187 |
-
$fname =
|
188 |
-
if
|
189 |
-
$f
|
190 |
-
$concat_files[] = @fread(
|
191 |
-
@fclose(
|
192 |
}
|
193 |
} else {
|
194 |
-
if
|
195 |
-
wp_enqueue_script(
|
196 |
} else {
|
197 |
-
wp_enqueue_style(
|
198 |
}
|
199 |
$is_first = false;
|
200 |
}
|
201 |
}
|
202 |
|
203 |
-
if
|
204 |
|
205 |
-
$cf
|
206 |
-
$write_content = implode(
|
207 |
-
@fwrite(
|
208 |
-
@fclose(
|
209 |
-
chmod(
|
210 |
|
211 |
-
if
|
212 |
-
if
|
213 |
-
wp_enqueue_script(
|
214 |
} else {
|
215 |
-
wp_enqueue_style(
|
216 |
}
|
217 |
}
|
218 |
}
|
@@ -222,13 +227,14 @@ class Wbcr_FactoryBootstrap446_Manager {
|
|
222 |
/**
|
223 |
* Adds the body classes: 'factory-flat or 'factory-volumetric'.
|
224 |
*
|
225 |
-
* @since 3.2.0
|
226 |
-
*
|
227 |
* @param string $classes
|
228 |
*
|
229 |
* @return string
|
|
|
|
|
230 |
*/
|
231 |
-
public function adminBodyClass(
|
|
|
232 |
$classes .= FACTORY_FLAT_ADMIN ? ' factory-flat ' : ' factory-volumetric ';
|
233 |
|
234 |
return $classes;
|
11 |
*/
|
12 |
|
13 |
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
exit;
|
16 |
}
|
17 |
|
20 |
*
|
21 |
* @since 3.2.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryBootstrap448_Manager {
|
24 |
|
25 |
/**
|
26 |
* A plugin for which the manager was created.
|
27 |
*
|
28 |
* @since 3.2.0
|
29 |
+
* @var Wbcr_Factory448_Plugin
|
30 |
*/
|
31 |
public $plugin;
|
32 |
|
51 |
*
|
52 |
* @since 1.0.0
|
53 |
*/
|
54 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
55 |
+
{
|
56 |
$this->plugin = $plugin;
|
57 |
|
58 |
+
add_action('admin_enqueue_scripts', [$this, 'loadAssets']);
|
59 |
+
add_filter('admin_body_class', [$this, 'adminBodyClass']);
|
60 |
}
|
61 |
|
62 |
/**
|
63 |
* Includes the Bootstrap scripts.
|
64 |
*
|
65 |
+
* @param array|string $scripts
|
66 |
* @since 3.2.0
|
67 |
*
|
|
|
68 |
*/
|
69 |
+
public function enqueueScript($scripts)
|
70 |
+
{
|
71 |
+
if( is_array($scripts) ) {
|
72 |
+
foreach($scripts as $script) {
|
73 |
+
if( !in_array($script, $this->scripts) ) {
|
74 |
$this->scripts[] = $script;
|
75 |
}
|
76 |
}
|
77 |
} else {
|
78 |
+
if( !in_array($scripts, $this->scripts) ) {
|
79 |
$this->scripts[] = $scripts;
|
80 |
}
|
81 |
}
|
84 |
/**
|
85 |
* * Includes the Bootstrap styles.
|
86 |
*
|
87 |
+
* @param array|string $styles
|
88 |
* @since 3.2.0
|
89 |
*
|
|
|
90 |
*/
|
91 |
+
public function enqueueStyle($styles)
|
92 |
+
{
|
93 |
|
94 |
+
if( is_array($styles) ) {
|
95 |
+
foreach($styles as $style) {
|
96 |
+
if( !in_array($style, $this->styles) ) {
|
97 |
$this->styles[] = $style;
|
98 |
}
|
99 |
}
|
100 |
} else {
|
101 |
+
if( !in_array($styles, $this->styles) ) {
|
102 |
$this->styles[] = $styles;
|
103 |
}
|
104 |
}
|
107 |
/**
|
108 |
* Loads Bootstrap assets.
|
109 |
*
|
|
|
110 |
* @return void
|
111 |
+
* @since 3.2.0
|
112 |
* @see admin_enqueue_scripts
|
113 |
*
|
114 |
*/
|
115 |
+
public function loadAssets($hook)
|
116 |
+
{
|
117 |
|
118 |
+
do_action('wbcr_factory_448_bootstrap_enqueue_scripts', $hook);
|
119 |
+
do_action('wbcr_factory_448_bootstrap_enqueue_scripts_' . $this->plugin->getPluginName(), $hook);
|
120 |
|
121 |
$dependencies = [];
|
122 |
+
if( !empty($this->scripts) ) {
|
123 |
$dependencies[] = 'jquery';
|
124 |
$dependencies[] = 'jquery-ui-core';
|
125 |
$dependencies[] = 'jquery-ui-widget';
|
126 |
}
|
127 |
|
128 |
+
foreach($this->scripts as $script) {
|
129 |
+
switch( $script ) {
|
130 |
case 'plugin.iris':
|
131 |
$dependencies[] = 'jquery-ui-widget';
|
132 |
$dependencies[] = 'jquery-ui-slider';
|
135 |
}
|
136 |
}
|
137 |
|
138 |
+
if( !empty($this->scripts) ) {
|
139 |
+
$this->enqueueScripts($this->scripts, 'js', $dependencies);
|
140 |
}
|
141 |
+
if( !empty($this->styles) ) {
|
142 |
+
$this->enqueueScripts($this->styles, 'css', $dependencies);
|
143 |
}
|
144 |
}
|
145 |
|
146 |
/**
|
147 |
+
* @param array $scripts
|
148 |
* @param string $type
|
149 |
+
* @param array $dependencies
|
150 |
*/
|
151 |
+
protected function enqueueScripts(array $scripts, $type, array $dependencies)
|
152 |
+
{
|
153 |
|
154 |
$is_first = true;
|
155 |
|
158 |
*
|
159 |
* @since 4.1.0
|
160 |
*/
|
161 |
+
$cache_enable = apply_filters('wbcr/factory/bootstrap/cache_enable', true);
|
162 |
|
163 |
+
$cache_id = md5(implode(',', $this->scripts) . $type . $this->plugin->getPluginVersion());
|
164 |
+
$cache_dir_path = FACTORY_BOOTSTRAP_448_DIR . '/assets/cache/';
|
165 |
+
$cache_dir_url = FACTORY_BOOTSTRAP_448_URL . '/assets/cache/';
|
166 |
|
167 |
$cache_filepath = $cache_dir_path . $cache_id . ".min." . $type;
|
168 |
+
$cache_fileurl = $cache_dir_url . $cache_id . ".min." . $type;
|
169 |
|
170 |
+
if( $cache_enable && file_exists($cache_filepath) ) {
|
171 |
+
if( $type == 'js' ) {
|
172 |
+
wp_enqueue_script('wbcr-factory-bootstrap-cached', $cache_fileurl, $dependencies, $this->plugin->getPluginVersion());
|
173 |
} else {
|
174 |
+
wp_enqueue_style('wbcr-factory-bootstrap-cached', $cache_fileurl, [], $this->plugin->getPluginVersion());
|
175 |
}
|
176 |
} else {
|
177 |
$cache_dir_exists = false;
|
178 |
+
if( !file_exists($cache_dir_path) ) {
|
179 |
+
if( @mkdir($cache_dir_path, 0755) && wp_is_writable($cache_dir_path) ) {
|
180 |
$cache_dir_exists = true;
|
181 |
}
|
182 |
} else {
|
183 |
+
if( wp_is_writable($cache_dir_path) ) {
|
184 |
$cache_dir_exists = true;
|
185 |
}
|
186 |
}
|
187 |
|
188 |
$concat_files = [];
|
189 |
+
foreach($scripts as $script_to_load) {
|
190 |
+
$script_to_load = sanitize_text_field($script_to_load);
|
191 |
+
if( $cache_enable && $cache_dir_exists ) {
|
192 |
+
$fname = FACTORY_BOOTSTRAP_448_DIR . "/assets/$type-min/$script_to_load.min." . $type;
|
193 |
+
if( file_exists($fname) ) {
|
194 |
+
$f = @fopen($fname, 'r');
|
195 |
+
$concat_files[] = @fread($f, filesize($fname));
|
196 |
+
@fclose($f);
|
197 |
}
|
198 |
} else {
|
199 |
+
if( $type == 'js' ) {
|
200 |
+
wp_enqueue_script(md5($script_to_load), FACTORY_BOOTSTRAP_448_URL . "/assets/$type-min/$script_to_load.min." . $type, $is_first ? $dependencies : false, $this->plugin->getPluginVersion());
|
201 |
} else {
|
202 |
+
wp_enqueue_style(md5($script_to_load), FACTORY_BOOTSTRAP_448_URL . "/assets/$type-min/$script_to_load.min." . $type, [], $this->plugin->getPluginVersion());
|
203 |
}
|
204 |
$is_first = false;
|
205 |
}
|
206 |
}
|
207 |
|
208 |
+
if( $cache_enable && $cache_dir_exists && !empty($concat_files) ) {
|
209 |
|
210 |
+
$cf = @fopen($cache_filepath, 'w');
|
211 |
+
$write_content = implode(PHP_EOL, $concat_files);
|
212 |
+
@fwrite($cf, $write_content);
|
213 |
+
@fclose($cf);
|
214 |
+
chmod($cache_filepath, 0755);
|
215 |
|
216 |
+
if( file_exists($cache_filepath) ) {
|
217 |
+
if( $type == 'js' ) {
|
218 |
+
wp_enqueue_script('wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, $dependencies, $this->plugin->getPluginVersion());
|
219 |
} else {
|
220 |
+
wp_enqueue_style('wbcr-factory-bootstrap-' . $cache_id, $cache_fileurl, [], $this->plugin->getPluginVersion());
|
221 |
}
|
222 |
}
|
223 |
}
|
227 |
/**
|
228 |
* Adds the body classes: 'factory-flat or 'factory-volumetric'.
|
229 |
*
|
|
|
|
|
230 |
* @param string $classes
|
231 |
*
|
232 |
* @return string
|
233 |
+
* @since 3.2.0
|
234 |
+
*
|
235 |
*/
|
236 |
+
public function adminBodyClass($classes)
|
237 |
+
{
|
238 |
$classes .= FACTORY_FLAT_ADMIN ? ' factory-flat ' : ' factory-volumetric ';
|
239 |
|
240 |
return $classes;
|
libs/factory/clearfy/assets/css/clearfy-base.css
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
#WBCR {
|
9 |
/* subscribe widget */
|
10 |
}
|
11 |
-
#WBCR .wbcr-factory-pages-
|
12 |
display: inline-block;
|
13 |
position: relative;
|
14 |
content: 'PRO';
|
@@ -26,18 +26,18 @@
|
|
26 |
right: auto;
|
27 |
z-index: 11;
|
28 |
}
|
29 |
-
#WBCR .wbcr-factory-pages-
|
30 |
padding: 30px 80px;
|
31 |
}
|
32 |
-
#WBCR .wbcr-factory-pages-
|
33 |
margin: 0 0 20px;
|
34 |
}
|
35 |
-
#WBCR .wbcr-factory-pages-
|
36 |
border: 2px dashed #8bc34a;
|
37 |
background: #fff;
|
38 |
padding: 20px;
|
39 |
}
|
40 |
-
#WBCR .wbcr-factory-pages-
|
41 |
display: inline-block;
|
42 |
cursor: pointer;
|
43 |
line-height: 16px;
|
@@ -56,16 +56,16 @@
|
|
56 |
-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
57 |
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
58 |
}
|
59 |
-
#WBCR .wbcr-factory-pages-
|
60 |
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
61 |
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
62 |
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
63 |
}
|
64 |
-
#WBCR .wbcr-factory-pages-
|
65 |
outline: none;
|
66 |
border: 0;
|
67 |
}
|
68 |
-
#WBCR .wbcr-factory-pages-
|
69 |
display: inline-block;
|
70 |
cursor: pointer;
|
71 |
line-height: 16px;
|
@@ -84,22 +84,22 @@
|
|
84 |
-moz-box-shadow: 0 1px 0 rgba(60, 45, 2, 0.31);
|
85 |
-webkit-box-shadow: 0 1px 0 rgba(60, 45, 2, 0.31);
|
86 |
}
|
87 |
-
#WBCR .wbcr-factory-pages-
|
88 |
box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
89 |
-moz-box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
90 |
-webkit-box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
91 |
}
|
92 |
-
#WBCR .wbcr-factory-pages-
|
93 |
outline: none;
|
94 |
border: 0;
|
95 |
}
|
96 |
-
#WBCR .wbcr-factory-pages-
|
97 |
background: #fff;
|
98 |
color: #353535;
|
99 |
font-weight: 600;
|
100 |
border: 2px dashed #8bc34a;
|
101 |
}
|
102 |
-
#WBCR .wbcr-factory-pages-
|
103 |
margin: 0 0 20px;
|
104 |
padding: 10px 0;
|
105 |
text-align: center;
|
@@ -110,16 +110,16 @@
|
|
110 |
vertical-align: middle;
|
111 |
text-transform: uppercase;
|
112 |
}
|
113 |
-
#WBCR .wbcr-factory-pages-
|
114 |
position: relative;
|
115 |
margin-bottom: 20px;
|
116 |
}
|
117 |
-
#WBCR .wbcr-factory-pages-
|
118 |
font-size: 15px;
|
119 |
padding: 7px;
|
120 |
padding-left: 20px;
|
121 |
}
|
122 |
-
#WBCR .wbcr-factory-pages-
|
123 |
content: " ";
|
124 |
display: inline-block;
|
125 |
width: 0.4em;
|
@@ -133,7 +133,7 @@
|
|
133 |
-o-transform: rotate(45deg);
|
134 |
transform: rotate(45deg);
|
135 |
}
|
136 |
-
#WBCR .wbcr-factory-pages-
|
137 |
display: block;
|
138 |
cursor: pointer;
|
139 |
line-height: 16px;
|
@@ -152,12 +152,12 @@
|
|
152 |
-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
153 |
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
154 |
}
|
155 |
-
#WBCR .wbcr-factory-pages-
|
156 |
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
157 |
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
158 |
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
159 |
}
|
160 |
-
#WBCR .wbcr-factory-pages-
|
161 |
outline: none;
|
162 |
border: 0;
|
163 |
}
|
@@ -220,34 +220,34 @@
|
|
220 |
font-size: 12px;
|
221 |
}
|
222 |
@media screen and (max-width: 1550px) {
|
223 |
-
#WBCR .wbcr-factory-pages-
|
224 |
padding: 10px 80px;
|
225 |
}
|
226 |
-
#WBCR .wbcr-factory-pages-
|
227 |
padding: 10px;
|
228 |
}
|
229 |
-
#WBCR .wbcr-factory-pages-
|
230 |
margin: 0 0 20px;
|
231 |
padding: 10px 0;
|
232 |
font-size: 13px;
|
233 |
font-weight: 600;
|
234 |
}
|
235 |
-
#WBCR .wbcr-factory-pages-
|
236 |
margin-bottom: 20px;
|
237 |
}
|
238 |
-
#WBCR .wbcr-factory-pages-
|
239 |
font-size: 13px;
|
240 |
padding: 2px;
|
241 |
padding-left: 10px;
|
242 |
}
|
243 |
-
#WBCR .wbcr-factory-pages-
|
244 |
width: 0.4em;
|
245 |
height: 0.7em;
|
246 |
border-width: 0 0.2em 0.2em 0;
|
247 |
left: 0;
|
248 |
margin-right: 10px;
|
249 |
}
|
250 |
-
#WBCR .wbcr-factory-pages-
|
251 |
font-weight: 700;
|
252 |
line-height: 16px;
|
253 |
font-size: 12px;
|
8 |
#WBCR {
|
9 |
/* subscribe widget */
|
10 |
}
|
11 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .factory-checkbox.wbcr-factory-clearfy-icon-pro:after {
|
12 |
display: inline-block;
|
13 |
position: relative;
|
14 |
content: 'PRO';
|
26 |
right: auto;
|
27 |
z-index: 11;
|
28 |
}
|
29 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion {
|
30 |
padding: 30px 80px;
|
31 |
}
|
32 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion h3 {
|
33 |
margin: 0 0 20px;
|
34 |
}
|
35 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion .wbcr-factory-inner-contanier {
|
36 |
border: 2px dashed #8bc34a;
|
37 |
background: #fff;
|
38 |
padding: 20px;
|
39 |
}
|
40 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion .wbcr-factory-activate-premium {
|
41 |
display: inline-block;
|
42 |
cursor: pointer;
|
43 |
line-height: 16px;
|
56 |
-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
57 |
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
58 |
}
|
59 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion .wbcr-factory-activate-premium:active {
|
60 |
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
61 |
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
62 |
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
63 |
}
|
64 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion .wbcr-factory-activate-premium:focus {
|
65 |
outline: none;
|
66 |
border: 0;
|
67 |
}
|
68 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion .wbcr-factory-purchase-premium {
|
69 |
display: inline-block;
|
70 |
cursor: pointer;
|
71 |
line-height: 16px;
|
84 |
-moz-box-shadow: 0 1px 0 rgba(60, 45, 2, 0.31);
|
85 |
-webkit-box-shadow: 0 1px 0 rgba(60, 45, 2, 0.31);
|
86 |
}
|
87 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion .wbcr-factory-purchase-premium:active {
|
88 |
box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
89 |
-moz-box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
90 |
-webkit-box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
91 |
}
|
92 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-suggetion .wbcr-factory-purchase-premium:focus {
|
93 |
outline: none;
|
94 |
border: 0;
|
95 |
}
|
96 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion {
|
97 |
background: #fff;
|
98 |
color: #353535;
|
99 |
font-weight: 600;
|
100 |
border: 2px dashed #8bc34a;
|
101 |
}
|
102 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion h3 {
|
103 |
margin: 0 0 20px;
|
104 |
padding: 10px 0;
|
105 |
text-align: center;
|
110 |
vertical-align: middle;
|
111 |
text-transform: uppercase;
|
112 |
}
|
113 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion ul {
|
114 |
position: relative;
|
115 |
margin-bottom: 20px;
|
116 |
}
|
117 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion ul li {
|
118 |
font-size: 15px;
|
119 |
padding: 7px;
|
120 |
padding-left: 20px;
|
121 |
}
|
122 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion ul li:before {
|
123 |
content: " ";
|
124 |
display: inline-block;
|
125 |
width: 0.4em;
|
133 |
-o-transform: rotate(45deg);
|
134 |
transform: rotate(45deg);
|
135 |
}
|
136 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion .wbcr-factory-purchase-premium {
|
137 |
display: block;
|
138 |
cursor: pointer;
|
139 |
line-height: 16px;
|
152 |
-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
153 |
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
154 |
}
|
155 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion .wbcr-factory-purchase-premium:active {
|
156 |
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
157 |
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
158 |
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
159 |
}
|
160 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion .wbcr-factory-purchase-premium:focus {
|
161 |
outline: none;
|
162 |
border: 0;
|
163 |
}
|
220 |
font-size: 12px;
|
221 |
}
|
222 |
@media screen and (max-width: 1550px) {
|
223 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-clearfy-240-multisite-pro-suggetion {
|
224 |
padding: 10px 80px;
|
225 |
}
|
226 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion {
|
227 |
padding: 10px;
|
228 |
}
|
229 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion h3 {
|
230 |
margin: 0 0 20px;
|
231 |
padding: 10px 0;
|
232 |
font-size: 13px;
|
233 |
font-weight: 600;
|
234 |
}
|
235 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion ul {
|
236 |
margin-bottom: 20px;
|
237 |
}
|
238 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion ul li {
|
239 |
font-size: 13px;
|
240 |
padding: 2px;
|
241 |
padding-left: 10px;
|
242 |
}
|
243 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion ul li:before {
|
244 |
width: 0.4em;
|
245 |
height: 0.7em;
|
246 |
border-width: 0 0.2em 0.2em 0;
|
247 |
left: 0;
|
248 |
margin-right: 10px;
|
249 |
}
|
250 |
+
#WBCR .wbcr-factory-pages-447-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-240-pro-suggettion .wbcr-factory-purchase-premium {
|
251 |
font-weight: 700;
|
252 |
line-height: 16px;
|
253 |
font-size: 12px;
|
libs/factory/clearfy/assets/css/components.css
CHANGED
@@ -3,11 +3,11 @@
|
|
3 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
4 |
* @copyright Alex Kovalev 30.09.2017
|
5 |
*/
|
6 |
-
#WBCR .wbc-factory-clearfy-
|
7 |
padding: 0 20px 20px;
|
8 |
text-align: center;
|
9 |
}
|
10 |
-
#WBCR .wbc-factory-clearfy-
|
11 |
position: relative;
|
12 |
display: inline-block;
|
13 |
width: 32.7%;
|
@@ -18,46 +18,46 @@
|
|
18 |
float: none;
|
19 |
vertical-align: top;
|
20 |
}
|
21 |
-
#WBCR .wbc-factory-clearfy-
|
22 |
margin-left: 0;
|
23 |
}
|
24 |
-
#WBCR .wbc-factory-clearfy-
|
25 |
position: absolute;
|
26 |
bottom: 0;
|
27 |
right: 0;
|
28 |
left: 0;
|
29 |
}
|
30 |
-
#WBCR .wbc-factory-clearfy-
|
31 |
min-height: 163px;
|
32 |
}
|
33 |
-
#WBCR .wbc-factory-clearfy-
|
34 |
-
#WBCR .wbc-factory-clearfy-
|
35 |
margin-right: 0 !important;
|
36 |
}
|
37 |
-
#WBCR .wbc-factory-clearfy-
|
38 |
font-size: 17px;
|
39 |
margin-top: 0 !important;
|
40 |
}
|
41 |
-
#WBCR .wbc-factory-clearfy-
|
42 |
float: right;
|
43 |
}
|
44 |
-
#WBCR .wbc-factory-clearfy-
|
45 |
float: right;
|
46 |
margin-left: 5px;
|
47 |
}
|
48 |
-
#WBCR .wbc-factory-clearfy-
|
49 |
-
#WBCR .wbc-factory-clearfy-
|
50 |
font-size: 16px !important;
|
51 |
line-height: 1.5 !important;
|
52 |
color: #62696f;
|
53 |
}
|
54 |
-
#WBCR .wbc-factory-clearfy-
|
55 |
color: #5c5d5f;
|
56 |
text-decoration: none;
|
57 |
font-weight: 600;
|
58 |
font-size: 15px;
|
59 |
}
|
60 |
-
#WBCR .wbc-factory-clearfy-
|
61 |
position: absolute;
|
62 |
bottom: 60px;
|
63 |
right: 0;
|
@@ -73,7 +73,7 @@
|
|
73 |
text-transform: uppercase;
|
74 |
z-index: 1;
|
75 |
}
|
76 |
-
#WBCR .wbc-factory-clearfy-
|
77 |
position: absolute;
|
78 |
bottom: 60px;
|
79 |
right: 0;
|
@@ -89,7 +89,7 @@
|
|
89 |
text-transform: uppercase;
|
90 |
z-index: 1;
|
91 |
}
|
92 |
-
#WBCR .wbc-factory-clearfy-
|
93 |
position: absolute;
|
94 |
bottom: 60px;
|
95 |
right: 0;
|
@@ -105,35 +105,35 @@
|
|
105 |
text-transform: uppercase;
|
106 |
z-index: 1;
|
107 |
}
|
108 |
-
#WBCR .wbc-factory-clearfy-
|
109 |
border-color: #e8d7b2;
|
110 |
background-color: #fff9eb;
|
111 |
}
|
112 |
-
#WBCR .wbc-factory-clearfy-
|
113 |
background-color: #f1f1f1;
|
114 |
}
|
115 |
-
#WBCR .wbc-factory-clearfy-
|
116 |
color: #ababab;
|
117 |
text-decoration: none;
|
118 |
font-weight: 600;
|
119 |
font-size: 15px;
|
120 |
}
|
121 |
-
#WBCR .wbc-factory-clearfy-
|
122 |
opacity: 0.3;
|
123 |
}
|
124 |
-
#WBCR .wbc-factory-clearfy-
|
125 |
color: #afafaf;
|
126 |
}
|
127 |
-
#WBCR .wbc-factory-clearfy-
|
128 |
background-color: #f9f2f1;
|
129 |
}
|
130 |
@media screen and (max-width: 1750px) {
|
131 |
-
#WBCR .wbc-factory-clearfy-
|
132 |
width: 49%;
|
133 |
}
|
134 |
}
|
135 |
@media screen and (max-width: 1350px) {
|
136 |
-
#WBCR .wbc-factory-clearfy-
|
137 |
width: 100%;
|
138 |
}
|
139 |
}
|
3 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
4 |
* @copyright Alex Kovalev 30.09.2017
|
5 |
*/
|
6 |
+
#WBCR .wbc-factory-clearfy-240-components {
|
7 |
padding: 0 20px 20px;
|
8 |
text-align: center;
|
9 |
}
|
10 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card {
|
11 |
position: relative;
|
12 |
display: inline-block;
|
13 |
width: 32.7%;
|
18 |
float: none;
|
19 |
vertical-align: top;
|
20 |
}
|
21 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card:first-child {
|
22 |
margin-left: 0;
|
23 |
}
|
24 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .plugin-card-bottom {
|
25 |
position: absolute;
|
26 |
bottom: 0;
|
27 |
right: 0;
|
28 |
left: 0;
|
29 |
}
|
30 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .plugin-card-top {
|
31 |
min-height: 163px;
|
32 |
}
|
33 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .desc,
|
34 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .name {
|
35 |
margin-right: 0 !important;
|
36 |
}
|
37 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .name h3 {
|
38 |
font-size: 17px;
|
39 |
margin-top: 0 !important;
|
40 |
}
|
41 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .install-now {
|
42 |
float: right;
|
43 |
}
|
44 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .delete-now {
|
45 |
float: right;
|
46 |
margin-left: 5px;
|
47 |
}
|
48 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .delete-now .dashicons,
|
49 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .delete-now .dashicons-before:before {
|
50 |
font-size: 16px !important;
|
51 |
line-height: 1.5 !important;
|
52 |
color: #62696f;
|
53 |
}
|
54 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card a.open-plugin-details-modal {
|
55 |
color: #5c5d5f;
|
56 |
text-decoration: none;
|
57 |
font-weight: 600;
|
58 |
font-size: 15px;
|
59 |
}
|
60 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .plugin-card-premium-ribbon {
|
61 |
position: absolute;
|
62 |
bottom: 60px;
|
63 |
right: 0;
|
73 |
text-transform: uppercase;
|
74 |
z-index: 1;
|
75 |
}
|
76 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .plugin-card-free-ribbon {
|
77 |
position: absolute;
|
78 |
bottom: 60px;
|
79 |
right: 0;
|
89 |
text-transform: uppercase;
|
90 |
z-index: 1;
|
91 |
}
|
92 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card .plugin-card-freemium-ribbon {
|
93 |
position: absolute;
|
94 |
bottom: 60px;
|
95 |
right: 0;
|
105 |
text-transform: uppercase;
|
106 |
z-index: 1;
|
107 |
}
|
108 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card.premium {
|
109 |
border-color: #e8d7b2;
|
110 |
background-color: #fff9eb;
|
111 |
}
|
112 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card.plugin-status-deactive {
|
113 |
background-color: #f1f1f1;
|
114 |
}
|
115 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card.plugin-status-deactive a.open-plugin-details-modal {
|
116 |
color: #ababab;
|
117 |
text-decoration: none;
|
118 |
font-weight: 600;
|
119 |
font-size: 15px;
|
120 |
}
|
121 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card.plugin-status-deactive .plugin-icon {
|
122 |
opacity: 0.3;
|
123 |
}
|
124 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card.plugin-status-deactive .desc {
|
125 |
color: #afafaf;
|
126 |
}
|
127 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card.plugin-status-deactive.premium {
|
128 |
background-color: #f9f2f1;
|
129 |
}
|
130 |
@media screen and (max-width: 1750px) {
|
131 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card {
|
132 |
width: 49%;
|
133 |
}
|
134 |
}
|
135 |
@media screen and (max-width: 1350px) {
|
136 |
+
#WBCR .wbc-factory-clearfy-240-components .plugin-card {
|
137 |
width: 100%;
|
138 |
}
|
139 |
}
|
libs/factory/clearfy/assets/css/libs/autocomplete.css
CHANGED
@@ -5,40 +5,53 @@
|
|
5 |
*
|
6 |
* @since 2.2.0
|
7 |
*/
|
8 |
-
#wbcr-factory-clearfy-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
}
|
13 |
-
|
14 |
-
|
|
|
15 |
}
|
16 |
-
|
17 |
-
|
|
|
18 |
}
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
overflow: auto;
|
23 |
}
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
}
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
32 |
}
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
}
|
37 |
-
|
38 |
-
|
|
|
|
|
39 |
}
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
/*# sourceMappingURL=autocomplete.css.map */
|
5 |
*
|
6 |
* @since 2.2.0
|
7 |
*/
|
8 |
+
#wbcr-factory-clearfy-240__search_options_form #wbcr-factory-clearfy-240__autocomplete {
|
9 |
+
width: 100%;
|
10 |
+
box-sizing: border-box;
|
11 |
+
border-color: #d6d4d4;
|
12 |
}
|
13 |
+
|
14 |
+
#wbcr-factory-clearfy-240__search_options_form #wbcr-factory-clearfy-240__autocomplete::placeholder {
|
15 |
+
color: #eae9e9;
|
16 |
}
|
17 |
+
|
18 |
+
#wbcr-factory-clearfy-240__search_options_form.wbcr-factory-clearfy-240__autocomplete-wrap {
|
19 |
+
padding: 10px;
|
20 |
}
|
21 |
+
|
22 |
+
#wbcr-factory-clearfy-240__search_options_form .wbcr-factory-clearfy-240__autocomplete-label {
|
23 |
+
display: block !important;
|
|
|
24 |
}
|
25 |
+
|
26 |
+
.wbcr-factory-clearfy-240__autocomplete-suggestions {
|
27 |
+
border: 1px solid #999;
|
28 |
+
background: #FFF;
|
29 |
+
overflow: auto;
|
30 |
}
|
31 |
+
|
32 |
+
.wbcr-factory-clearfy-240__autocomplete-suggestion {
|
33 |
+
padding: 2px 5px;
|
34 |
+
white-space: nowrap;
|
35 |
+
overflow: hidden;
|
36 |
+
cursor: pointer;
|
37 |
}
|
38 |
+
|
39 |
+
.wbcr-factory-clearfy-240__autocomplete-selected {
|
40 |
+
background: #F0F0F0;
|
41 |
}
|
42 |
+
|
43 |
+
.wbcr-factory-clearfy-240__autocomplete-suggestions strong {
|
44 |
+
font-weight: normal;
|
45 |
+
color: #3399FF;
|
46 |
}
|
47 |
+
|
48 |
+
.wbcr-factory-clearfy-240__autocomplete-group {
|
49 |
+
padding: 2px 5px;
|
50 |
}
|
51 |
+
|
52 |
+
.wbcr-factory-clearfy-240__autocomplete-group strong {
|
53 |
+
display: block;
|
54 |
+
border-bottom: 1px solid #000;
|
55 |
+
}
|
56 |
+
|
57 |
/*# sourceMappingURL=autocomplete.css.map */
|
libs/factory/clearfy/assets/css/libs/autocomplete.css.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sources":["autocomplete.less"],"names":[],"mappings":";;;;;;;AAUA,8CAVC;EAYG,WAAA;EACA,sBAAA;EACA,qBAAA;;
|
1 |
+
{"version":3,"sources":["autocomplete.less"],"names":[],"mappings":";;;;;;;AAUA,8CAVC;EAYG,WAAA;EACA,sBAAA;EACA,qBAAA;;AAEA,8CAhBH,wCAgBI;AAAe,8CAhBnB,wCAgBoB;AAAoB,8CAhBxC,wCAgByC;EACpC,cAAA;;AAjBL,8CAAC;EAsBE,aAAA;;AAZJ,8CAVC;EA0BG,yBAAA;;AA1BH;EA+BC,sBAAA;EACA,gBAAA;EACA,cAAA;;AAjCD;EAqCC,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,eAAA;;AAxCD;EA4CC,mBAAA;;AA5CD,mDAGM;EA6CL,mBAAA;EACA,cAAA;;AAjDD;EAqDC,gBAAA;;AArDD,6CAGA;EAsDC,cAAA;EACA,6BAAA","file":"autocomplete.css"}
|
libs/factory/clearfy/assets/css/libs/autocomplete.less
CHANGED
@@ -13,6 +13,10 @@
|
|
13 |
width: 100%;
|
14 |
box-sizing: border-box;
|
15 |
border-color: #d6d4d4;
|
|
|
|
|
|
|
|
|
16 |
}
|
17 |
|
18 |
&.@{prefix}autocomplete-wrap {
|
13 |
width: 100%;
|
14 |
box-sizing: border-box;
|
15 |
border-color: #d6d4d4;
|
16 |
+
|
17 |
+
&::placeholder, &::-moz-placeholder, &::-webkit-input-placeholder {
|
18 |
+
color: #eae9e9;
|
19 |
+
}
|
20 |
}
|
21 |
|
22 |
&.@{prefix}autocomplete-wrap {
|
libs/factory/clearfy/assets/css/page-setup.css
CHANGED
@@ -2,13 +2,13 @@
|
|
2 |
margin: 0;
|
3 |
padding: 0;
|
4 |
}
|
5 |
-
.w-factory-clearfy-
|
6 |
text-align: right;
|
7 |
padding: 10px;
|
8 |
background: #f7f7f7;
|
9 |
border-top: 1px solid #e8e8e8;
|
10 |
}
|
11 |
-
.w-factory-clearfy-
|
12 |
background-color: #e7e7e7;
|
13 |
border-color: #e7e7e7;
|
14 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #e7e7e7;
|
@@ -16,29 +16,29 @@
|
|
16 |
margin: 0;
|
17 |
color: #8a8a8a;
|
18 |
}
|
19 |
-
.w-factory-clearfy-
|
20 |
-
.w-factory-clearfy-
|
21 |
-
.w-factory-clearfy-
|
22 |
background: #dddddd;
|
23 |
border-color: #dddddd;
|
24 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #dddddd;
|
25 |
color: #8a8a8a;
|
26 |
}
|
27 |
-
.w-factory-clearfy-
|
28 |
background-color: #f57d4f;
|
29 |
border-color: #f77d50;
|
30 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #f77d50;
|
31 |
text-shadow: 0 -1px 1px #f77d50, 1px 0 1px #f77d50, 0 1px 1px #f77d50, -1px 0 1px #f77d50;
|
32 |
margin: 0;
|
33 |
}
|
34 |
-
.w-factory-clearfy-
|
35 |
-
.w-factory-clearfy-
|
36 |
-
.w-factory-clearfy-
|
37 |
background: #f86b3b;
|
38 |
border-color: #f86b3b;
|
39 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #f86b3b;
|
40 |
}
|
41 |
-
.w-factory-clearfy-
|
42 |
text-align: center;
|
43 |
max-width: 900px;
|
44 |
margin: 65px auto 24px;
|
@@ -46,11 +46,11 @@
|
|
46 |
background: #f1f1f1;
|
47 |
padding: 0;
|
48 |
}
|
49 |
-
.w-factory-clearfy-
|
50 |
-
.w-factory-clearfy-
|
51 |
padding: 30px;
|
52 |
}
|
53 |
-
.w-factory-clearfy-
|
54 |
padding: 0 0 24px;
|
55 |
margin: 0;
|
56 |
list-style: none outside;
|
@@ -60,7 +60,7 @@
|
|
60 |
display: -webkit-inline-box;
|
61 |
display: inline-flex;
|
62 |
}
|
63 |
-
.w-factory-clearfy-
|
64 |
width: 100%;
|
65 |
float: left;
|
66 |
padding: 0 0 0.8em;
|
@@ -70,7 +70,7 @@
|
|
70 |
border-bottom: 4px solid #ccc;
|
71 |
line-height: 1.4;
|
72 |
}
|
73 |
-
.w-factory-clearfy-
|
74 |
content: "";
|
75 |
border: 4px solid #ccc;
|
76 |
border-radius: 100%;
|
@@ -83,15 +83,15 @@
|
|
83 |
margin-bottom: -8px;
|
84 |
background: #fff;
|
85 |
}
|
86 |
-
.w-factory-clearfy-
|
87 |
border-color: #ff1c40 !important;
|
88 |
color: #222;
|
89 |
font-weight: 700;
|
90 |
}
|
91 |
-
.w-factory-clearfy-
|
92 |
border-color: #ff1c40 !important;
|
93 |
}
|
94 |
-
.w-factory-clearfy-
|
95 |
color: #a16696;
|
96 |
text-decoration: none;
|
97 |
padding: 1.5em;
|
@@ -99,67 +99,67 @@
|
|
99 |
position: relative;
|
100 |
z-index: 1;
|
101 |
}
|
102 |
-
.w-factory-clearfy-
|
103 |
-
.w-factory-clearfy-
|
104 |
color: #111;
|
105 |
text-decoration: underline;
|
106 |
}
|
107 |
-
/*.w-factory-clearfy-
|
108 |
border-color: #f57d4f;
|
109 |
color: #f57d4f
|
110 |
}
|
111 |
|
112 |
-
.w-factory-clearfy-
|
113 |
border-color: #f57d4f;
|
114 |
background: #f57d4f
|
115 |
}*/
|
116 |
-
.w-factory-clearfy-
|
117 |
overflow: hidden;
|
118 |
margin: 20px 0 0;
|
119 |
position: relative;
|
120 |
}
|
121 |
-
.w-factory-clearfy-
|
122 |
margin-bottom: 0;
|
123 |
}
|
124 |
-
.w-factory-clearfy-
|
125 |
margin-top: 0;
|
126 |
}
|
127 |
-
.w-factory-clearfy-
|
128 |
font-size: 0.85em;
|
129 |
color: #7b7b7b;
|
130 |
margin: 1.18em auto;
|
131 |
display: inline-block;
|
132 |
text-align: center;
|
133 |
}
|
134 |
-
.w-factory-clearfy-
|
135 |
text-align: center;
|
136 |
}
|
137 |
-
.w-factory-clearfy-
|
138 |
max-width: 250px;
|
139 |
}
|
140 |
-
.w-factory-clearfy-
|
141 |
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
|
142 |
margin: 0 0 20px;
|
143 |
background: #fff;
|
144 |
zoom: 1;
|
145 |
text-align: left;
|
146 |
}
|
147 |
-
.w-factory-clearfy-
|
148 |
font-size: 1em;
|
149 |
line-height: 1.75;
|
150 |
color: #666;
|
151 |
}
|
152 |
-
.w-factory-clearfy-
|
153 |
background: #f1f1f1;
|
154 |
}
|
155 |
-
.w-factory-clearfy-
|
156 |
-
.w-factory-clearfy-
|
157 |
padding: 10px 15px;
|
158 |
}
|
159 |
-
.w-factory-clearfy-
|
160 |
-
.w-factory-clearfy-
|
161 |
-
.w-factory-clearfy-
|
162 |
-
.w-factory-clearfy-
|
163 |
margin: 0 0 20px;
|
164 |
border: 0;
|
165 |
padding: 0;
|
@@ -167,40 +167,40 @@
|
|
167 |
clear: none;
|
168 |
font-weight: 500;
|
169 |
}
|
170 |
-
.w-factory-clearfy-
|
171 |
margin: 20px 0;
|
172 |
font-size: 1.15em;
|
173 |
line-height: 1.75;
|
174 |
color: #666;
|
175 |
text-align: center;
|
176 |
}
|
177 |
-
.w-factory-clearfy-
|
178 |
font-size: 22px !important;
|
179 |
}
|
180 |
-
.w-factory-clearfy-
|
181 |
color: #f57d4f;
|
182 |
}
|
183 |
-
.w-factory-clearfy-
|
184 |
-
.w-factory-clearfy-
|
185 |
color: #111;
|
186 |
}
|
187 |
-
.w-factory-clearfy-
|
188 |
width: 100%;
|
189 |
font-size: 0.92em;
|
190 |
}
|
191 |
-
.w-factory-clearfy-
|
192 |
padding: 0;
|
193 |
text-align: center;
|
194 |
width: auto;
|
195 |
vertical-align: middle;
|
196 |
}
|
197 |
-
.w-factory-clearfy-
|
198 |
border: 1px solid #f5f5f5;
|
199 |
padding: 6px;
|
200 |
text-align: center;
|
201 |
vertical-align: middle;
|
202 |
}
|
203 |
-
.w-factory-clearfy-
|
204 |
outline: 0;
|
205 |
border: 0;
|
206 |
padding: 0;
|
@@ -208,18 +208,18 @@
|
|
208 |
text-align: center;
|
209 |
width: 100%;
|
210 |
}
|
211 |
-
.w-factory-clearfy-
|
212 |
cursor: move;
|
213 |
color: #ccc;
|
214 |
}
|
215 |
-
.w-factory-clearfy-
|
216 |
content: "\f333";
|
217 |
font-family: dashicons;
|
218 |
}
|
219 |
-
.w-factory-clearfy-
|
220 |
background: #f5f5f5;
|
221 |
}
|
222 |
-
.w-factory-clearfy-
|
223 |
padding: 1em 0 0 1em;
|
224 |
line-height: 1;
|
225 |
font-size: 1em;
|
@@ -230,14 +230,14 @@
|
|
230 |
position: relative;
|
231 |
display: inline-block;
|
232 |
}
|
233 |
-
.w-factory-clearfy-
|
234 |
content: "\f502";
|
235 |
font-family: dashicons;
|
236 |
position: absolute;
|
237 |
left: 0;
|
238 |
top: 0;
|
239 |
}
|
240 |
-
.w-factory-clearfy-
|
241 |
padding: 1em 0 0 1em;
|
242 |
line-height: 1;
|
243 |
font-size: 1em;
|
@@ -248,87 +248,87 @@
|
|
248 |
position: relative;
|
249 |
display: inline-block;
|
250 |
}
|
251 |
-
.w-factory-clearfy-
|
252 |
content: "\f182";
|
253 |
font-family: dashicons;
|
254 |
position: absolute;
|
255 |
left: 0;
|
256 |
top: 0;
|
257 |
}
|
258 |
-
.w-factory-clearfy-
|
259 |
width: 100%;
|
260 |
border-top: 1px solid #eee;
|
261 |
}
|
262 |
-
.w-factory-clearfy-
|
263 |
display: none;
|
264 |
}
|
265 |
-
.w-factory-clearfy-
|
266 |
width: 30%;
|
267 |
font-weight: 700;
|
268 |
}
|
269 |
-
.w-factory-clearfy-
|
270 |
-
.w-factory-clearfy-
|
271 |
padding: 14px 0;
|
272 |
border-bottom: 1px solid #eee;
|
273 |
}
|
274 |
-
.w-factory-clearfy-
|
275 |
-
.w-factory-clearfy-
|
276 |
padding-right: 9px;
|
277 |
}
|
278 |
-
.w-factory-clearfy-
|
279 |
padding-top: 0;
|
280 |
}
|
281 |
-
.w-factory-clearfy-
|
282 |
color: #777;
|
283 |
margin: 6px 0 0 24px;
|
284 |
line-height: 1.75;
|
285 |
}
|
286 |
-
.w-factory-clearfy-
|
287 |
vertical-align: middle;
|
288 |
margin: 1px 0 0;
|
289 |
height: 1.75em;
|
290 |
width: 1.75em;
|
291 |
line-height: 1.75;
|
292 |
}
|
293 |
-
.w-factory-clearfy-
|
294 |
line-height: 1;
|
295 |
}
|
296 |
@media screen and (max-width: 782px) {
|
297 |
-
.w-factory-clearfy-
|
298 |
width: auto;
|
299 |
}
|
300 |
}
|
301 |
-
.w-factory-clearfy-
|
302 |
float: right;
|
303 |
}
|
304 |
-
.w-factory-clearfy-
|
305 |
overflow: hidden;
|
306 |
margin: 0 0 24px;
|
307 |
padding-bottom: 2px;
|
308 |
}
|
309 |
-
.w-factory-clearfy-
|
310 |
margin-bottom: 12px;
|
311 |
}
|
312 |
-
.w-factory-clearfy-
|
313 |
float: left;
|
314 |
width: 50%;
|
315 |
box-sizing: border-box;
|
316 |
}
|
317 |
-
.w-factory-clearfy-
|
318 |
float: right;
|
319 |
width: 50%;
|
320 |
box-sizing: border-box;
|
321 |
}
|
322 |
-
.w-factory-clearfy-
|
323 |
padding: 0 2em 0 0;
|
324 |
list-style: none outside;
|
325 |
margin: 0;
|
326 |
}
|
327 |
-
.w-factory-clearfy-
|
328 |
display: block;
|
329 |
padding: 0 0 0.75em;
|
330 |
}
|
331 |
-
.w-factory-clearfy-
|
332 |
background-color: #f7f7f7;
|
333 |
border-color: #ccc;
|
334 |
color: #23282d;
|
@@ -342,28 +342,28 @@
|
|
342 |
padding: 1em;
|
343 |
text-align: center;
|
344 |
}
|
345 |
-
.w-factory-clearfy-
|
346 |
-
.w-factory-clearfy-
|
347 |
-
.w-factory-clearfy-
|
348 |
background: #f5f5f5;
|
349 |
border-color: #aaa;
|
350 |
}
|
351 |
-
.w-factory-clearfy-
|
352 |
color: #fff;
|
353 |
background-color: #f19570;
|
354 |
border-color: #f77d50;
|
355 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #f77d50;
|
356 |
text-shadow: 0 -1px 1px #f77d50, 1px 0 1px #f77d50, 0 1px 1px #f77d50, -1px 0 1px #f77d50;
|
357 |
}
|
358 |
-
.w-factory-clearfy-
|
359 |
-
.w-factory-clearfy-
|
360 |
-
.w-factory-clearfy-
|
361 |
color: #fff;
|
362 |
background: #f77d50;
|
363 |
border-color: #f77d50;
|
364 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #f77d50;
|
365 |
}
|
366 |
-
.w-factory-clearfy-
|
367 |
color: #82878c;
|
368 |
font: 400 20px/1 dashicons;
|
369 |
speak: none;
|
@@ -374,50 +374,50 @@
|
|
374 |
text-decoration: none !important;
|
375 |
vertical-align: top;
|
376 |
}
|
377 |
-
.w-factory-clearfy-
|
378 |
content: "\f105";
|
379 |
}
|
380 |
-
.w-factory-clearfy-
|
381 |
content: "\f126";
|
382 |
}
|
383 |
-
.w-factory-clearfy-
|
384 |
content: "\f465";
|
385 |
}
|
386 |
-
.w-factory-clearfy-
|
387 |
-
.w-factory-clearfy-
|
388 |
padding: 24px 24px 0;
|
389 |
margin: 0 0 24px;
|
390 |
overflow: hidden;
|
391 |
background: #f5f5f5;
|
392 |
}
|
393 |
-
.w-factory-clearfy-
|
394 |
-
.w-factory-clearfy-
|
395 |
padding: 0;
|
396 |
margin: 0 0 12px;
|
397 |
}
|
398 |
-
.w-factory-clearfy-
|
399 |
-
.w-factory-clearfy-
|
400 |
-
.w-factory-clearfy-
|
401 |
-
.w-factory-clearfy-
|
402 |
margin: 0 0 24px;
|
403 |
}
|
404 |
-
.w-factory-clearfy-
|
405 |
opacity: 0;
|
406 |
position: absolute;
|
407 |
left: -9999px;
|
408 |
}
|
409 |
-
.w-factory-clearfy-
|
410 |
position: relative;
|
411 |
display: inline-block;
|
412 |
padding-left: 28px;
|
413 |
}
|
414 |
-
.w-factory-clearfy-
|
415 |
-
.w-factory-clearfy-
|
416 |
position: absolute;
|
417 |
content: "";
|
418 |
display: inline-block;
|
419 |
}
|
420 |
-
.w-factory-clearfy-
|
421 |
height: 16px;
|
422 |
width: 16px;
|
423 |
left: 0;
|
@@ -426,7 +426,7 @@
|
|
426 |
background-color: #fff;
|
427 |
border-radius: 3px;
|
428 |
}
|
429 |
-
.w-factory-clearfy-
|
430 |
height: 5px;
|
431 |
width: 9px;
|
432 |
border-left: 2px solid;
|
@@ -438,16 +438,16 @@
|
|
438 |
top: 7px;
|
439 |
color: #fff;
|
440 |
}
|
441 |
-
.w-factory-clearfy-
|
442 |
content: none;
|
443 |
}
|
444 |
-
.w-factory-clearfy-
|
445 |
content: "";
|
446 |
}
|
447 |
-
.w-factory-clearfy-
|
448 |
outline: #3b99fc auto 5px;
|
449 |
}
|
450 |
-
.w-factory-clearfy-
|
451 |
background: #935687;
|
452 |
border-color: #935687;
|
453 |
}
|
2 |
margin: 0;
|
3 |
padding: 0;
|
4 |
}
|
5 |
+
.w-factory-clearfy-240__form-buttons {
|
6 |
text-align: right;
|
7 |
padding: 10px;
|
8 |
background: #f7f7f7;
|
9 |
border-top: 1px solid #e8e8e8;
|
10 |
}
|
11 |
+
.w-factory-clearfy-240__form-buttons .w-factory-clearfy-240__skip-button {
|
12 |
background-color: #e7e7e7;
|
13 |
border-color: #e7e7e7;
|
14 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #e7e7e7;
|
16 |
margin: 0;
|
17 |
color: #8a8a8a;
|
18 |
}
|
19 |
+
.w-factory-clearfy-240__form-buttons .w-factory-clearfy-240__skip-button:active,
|
20 |
+
.w-factory-clearfy-240__form-buttons .w-factory-clearfy-240__skip-button:hover,
|
21 |
+
.w-factory-clearfy-240__form-buttons .w-factory-clearfy-240__skip-button:focus {
|
22 |
background: #dddddd;
|
23 |
border-color: #dddddd;
|
24 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #dddddd;
|
25 |
color: #8a8a8a;
|
26 |
}
|
27 |
+
.w-factory-clearfy-240__form-buttons .w-factory-clearfy-240__continue-button {
|
28 |
background-color: #f57d4f;
|
29 |
border-color: #f77d50;
|
30 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #f77d50;
|
31 |
text-shadow: 0 -1px 1px #f77d50, 1px 0 1px #f77d50, 0 1px 1px #f77d50, -1px 0 1px #f77d50;
|
32 |
margin: 0;
|
33 |
}
|
34 |
+
.w-factory-clearfy-240__form-buttons .w-factory-clearfy-240__continue-button:active,
|
35 |
+
.w-factory-clearfy-240__form-buttons .w-factory-clearfy-240__continue-button:hover,
|
36 |
+
.w-factory-clearfy-240__form-buttons .w-factory-clearfy-240__continue-button:focus {
|
37 |
background: #f86b3b;
|
38 |
border-color: #f86b3b;
|
39 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #f86b3b;
|
40 |
}
|
41 |
+
.w-factory-clearfy-240-setup {
|
42 |
text-align: center;
|
43 |
max-width: 900px;
|
44 |
margin: 65px auto 24px;
|
46 |
background: #f1f1f1;
|
47 |
padding: 0;
|
48 |
}
|
49 |
+
.w-factory-clearfy-240-setup__inner-wrap,
|
50 |
+
.w-factory-clearfy-240__setup-form .factory-form-layout {
|
51 |
padding: 30px;
|
52 |
}
|
53 |
+
.w-factory-clearfy-240-setup-steps {
|
54 |
padding: 0 0 24px;
|
55 |
margin: 0;
|
56 |
list-style: none outside;
|
60 |
display: -webkit-inline-box;
|
61 |
display: inline-flex;
|
62 |
}
|
63 |
+
.w-factory-clearfy-240-setup-steps li {
|
64 |
width: 100%;
|
65 |
float: left;
|
66 |
padding: 0 0 0.8em;
|
70 |
border-bottom: 4px solid #ccc;
|
71 |
line-height: 1.4;
|
72 |
}
|
73 |
+
.w-factory-clearfy-240-setup-steps li::before {
|
74 |
content: "";
|
75 |
border: 4px solid #ccc;
|
76 |
border-radius: 100%;
|
83 |
margin-bottom: -8px;
|
84 |
background: #fff;
|
85 |
}
|
86 |
+
.w-factory-clearfy-240-setup-steps li.active {
|
87 |
border-color: #ff1c40 !important;
|
88 |
color: #222;
|
89 |
font-weight: 700;
|
90 |
}
|
91 |
+
.w-factory-clearfy-240-setup-steps li.active::before {
|
92 |
border-color: #ff1c40 !important;
|
93 |
}
|
94 |
+
.w-factory-clearfy-240-setup-steps li a {
|
95 |
color: #a16696;
|
96 |
text-decoration: none;
|
97 |
padding: 1.5em;
|
99 |
position: relative;
|
100 |
z-index: 1;
|
101 |
}
|
102 |
+
.w-factory-clearfy-240-setup-steps li a:focus,
|
103 |
+
.w-factory-clearfy-240-setup-steps li a:hover {
|
104 |
color: #111;
|
105 |
text-decoration: underline;
|
106 |
}
|
107 |
+
/*.w-factory-clearfy-240-setup-steps li.done {
|
108 |
border-color: #f57d4f;
|
109 |
color: #f57d4f
|
110 |
}
|
111 |
|
112 |
+
.w-factory-clearfy-240-setup-steps li.done::before {
|
113 |
border-color: #f57d4f;
|
114 |
background: #f57d4f
|
115 |
}*/
|
116 |
+
.w-factory-clearfy-240-setup .w-factory-clearfy-240-setup-actions {
|
117 |
overflow: hidden;
|
118 |
margin: 20px 0 0;
|
119 |
position: relative;
|
120 |
}
|
121 |
+
.w-factory-clearfy-240-setup-content p:last-child {
|
122 |
margin-bottom: 0;
|
123 |
}
|
124 |
+
.w-factory-clearfy-240-setup-content p.store-setup {
|
125 |
margin-top: 0;
|
126 |
}
|
127 |
+
.w-factory-clearfy-240-setup-footer-links {
|
128 |
font-size: 0.85em;
|
129 |
color: #7b7b7b;
|
130 |
margin: 1.18em auto;
|
131 |
display: inline-block;
|
132 |
text-align: center;
|
133 |
}
|
134 |
+
.w-factory-clearfy-240-logo {
|
135 |
text-align: center;
|
136 |
}
|
137 |
+
.w-factory-clearfy-240-logo img {
|
138 |
max-width: 250px;
|
139 |
}
|
140 |
+
.w-factory-clearfy-240-setup-content {
|
141 |
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
|
142 |
margin: 0 0 20px;
|
143 |
background: #fff;
|
144 |
zoom: 1;
|
145 |
text-align: left;
|
146 |
}
|
147 |
+
.w-factory-clearfy-240-setup-content table {
|
148 |
font-size: 1em;
|
149 |
line-height: 1.75;
|
150 |
color: #666;
|
151 |
}
|
152 |
+
.w-factory-clearfy-240-setup-content table thead {
|
153 |
background: #f1f1f1;
|
154 |
}
|
155 |
+
.w-factory-clearfy-240-setup-content table th,
|
156 |
+
.w-factory-clearfy-240-setup-content table td {
|
157 |
padding: 10px 15px;
|
158 |
}
|
159 |
+
.w-factory-clearfy-240-setup-content h1,
|
160 |
+
.w-factory-clearfy-240-setup-content h2,
|
161 |
+
.w-factory-clearfy-240-setup-content h3,
|
162 |
+
.w-factory-clearfy-240-setup-content table {
|
163 |
margin: 0 0 20px;
|
164 |
border: 0;
|
165 |
padding: 0;
|
167 |
clear: none;
|
168 |
font-weight: 500;
|
169 |
}
|
170 |
+
.w-factory-clearfy-240-setup-content p {
|
171 |
margin: 20px 0;
|
172 |
font-size: 1.15em;
|
173 |
line-height: 1.75;
|
174 |
color: #666;
|
175 |
text-align: center;
|
176 |
}
|
177 |
+
.w-factory-clearfy-240-setup-step__new_onboarding-welcome {
|
178 |
font-size: 22px !important;
|
179 |
}
|
180 |
+
.w-factory-clearfy-240-setup-content a {
|
181 |
color: #f57d4f;
|
182 |
}
|
183 |
+
.w-factory-clearfy-240-setup-content a:focus,
|
184 |
+
.w-factory-clearfy-240-setup-content a:hover {
|
185 |
color: #111;
|
186 |
}
|
187 |
+
.w-factory-clearfy-240-setup-content table.tax-rates {
|
188 |
width: 100%;
|
189 |
font-size: 0.92em;
|
190 |
}
|
191 |
+
.w-factory-clearfy-240-setup-content table.tax-rates th {
|
192 |
padding: 0;
|
193 |
text-align: center;
|
194 |
width: auto;
|
195 |
vertical-align: middle;
|
196 |
}
|
197 |
+
.w-factory-clearfy-240-setup-content table.tax-rates td {
|
198 |
border: 1px solid #f5f5f5;
|
199 |
padding: 6px;
|
200 |
text-align: center;
|
201 |
vertical-align: middle;
|
202 |
}
|
203 |
+
.w-factory-clearfy-240-setup-content table.tax-rates td input {
|
204 |
outline: 0;
|
205 |
border: 0;
|
206 |
padding: 0;
|
208 |
text-align: center;
|
209 |
width: 100%;
|
210 |
}
|
211 |
+
.w-factory-clearfy-240-setup-content table.tax-rates td.sort {
|
212 |
cursor: move;
|
213 |
color: #ccc;
|
214 |
}
|
215 |
+
.w-factory-clearfy-240-setup-content table.tax-rates td.sort::before {
|
216 |
content: "\f333";
|
217 |
font-family: dashicons;
|
218 |
}
|
219 |
+
.w-factory-clearfy-240-setup-content table.tax-rates td.readonly {
|
220 |
background: #f5f5f5;
|
221 |
}
|
222 |
+
.w-factory-clearfy-240-setup-content table.tax-rates .add {
|
223 |
padding: 1em 0 0 1em;
|
224 |
line-height: 1;
|
225 |
font-size: 1em;
|
230 |
position: relative;
|
231 |
display: inline-block;
|
232 |
}
|
233 |
+
.w-factory-clearfy-240-setup-content table.tax-rates .add::before {
|
234 |
content: "\f502";
|
235 |
font-family: dashicons;
|
236 |
position: absolute;
|
237 |
left: 0;
|
238 |
top: 0;
|
239 |
}
|
240 |
+
.w-factory-clearfy-240-setup-content table.tax-rates .remove {
|
241 |
padding: 1em 0 0 1em;
|
242 |
line-height: 1;
|
243 |
font-size: 1em;
|
248 |
position: relative;
|
249 |
display: inline-block;
|
250 |
}
|
251 |
+
.w-factory-clearfy-240-setup-content table.tax-rates .remove::before {
|
252 |
content: "\f182";
|
253 |
font-family: dashicons;
|
254 |
position: absolute;
|
255 |
left: 0;
|
256 |
top: 0;
|
257 |
}
|
258 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages {
|
259 |
width: 100%;
|
260 |
border-top: 1px solid #eee;
|
261 |
}
|
262 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages thead th {
|
263 |
display: none;
|
264 |
}
|
265 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages .page-name {
|
266 |
width: 30%;
|
267 |
font-weight: 700;
|
268 |
}
|
269 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages td,
|
270 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages th {
|
271 |
padding: 14px 0;
|
272 |
border-bottom: 1px solid #eee;
|
273 |
}
|
274 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages td:first-child,
|
275 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages th:first-child {
|
276 |
padding-right: 9px;
|
277 |
}
|
278 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages th {
|
279 |
padding-top: 0;
|
280 |
}
|
281 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages .page-options p {
|
282 |
color: #777;
|
283 |
margin: 6px 0 0 24px;
|
284 |
line-height: 1.75;
|
285 |
}
|
286 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages .page-options p input {
|
287 |
vertical-align: middle;
|
288 |
margin: 1px 0 0;
|
289 |
height: 1.75em;
|
290 |
width: 1.75em;
|
291 |
line-height: 1.75;
|
292 |
}
|
293 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-pages .page-options p label {
|
294 |
line-height: 1;
|
295 |
}
|
296 |
@media screen and (max-width: 782px) {
|
297 |
+
.w-factory-clearfy-240-setup-content .form-table tbody th {
|
298 |
width: auto;
|
299 |
}
|
300 |
}
|
301 |
+
.w-factory-clearfy-240-setup-content .twitter-share-button {
|
302 |
float: right;
|
303 |
}
|
304 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps {
|
305 |
overflow: hidden;
|
306 |
margin: 0 0 24px;
|
307 |
padding-bottom: 2px;
|
308 |
}
|
309 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps h2 {
|
310 |
margin-bottom: 12px;
|
311 |
}
|
312 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps .w-factory-clearfy-240-setup-next-steps-first {
|
313 |
float: left;
|
314 |
width: 50%;
|
315 |
box-sizing: border-box;
|
316 |
}
|
317 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps .w-factory-clearfy-240-setup-next-steps-last {
|
318 |
float: right;
|
319 |
width: 50%;
|
320 |
box-sizing: border-box;
|
321 |
}
|
322 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul {
|
323 |
padding: 0 2em 0 0;
|
324 |
list-style: none outside;
|
325 |
margin: 0;
|
326 |
}
|
327 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul li a {
|
328 |
display: block;
|
329 |
padding: 0 0 0.75em;
|
330 |
}
|
331 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .setup-product a.button {
|
332 |
background-color: #f7f7f7;
|
333 |
border-color: #ccc;
|
334 |
color: #23282d;
|
342 |
padding: 1em;
|
343 |
text-align: center;
|
344 |
}
|
345 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .setup-product a.button:active,
|
346 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .setup-product a.button:focus,
|
347 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .setup-product a.button:hover {
|
348 |
background: #f5f5f5;
|
349 |
border-color: #aaa;
|
350 |
}
|
351 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .setup-product a.button-primary {
|
352 |
color: #fff;
|
353 |
background-color: #f19570;
|
354 |
border-color: #f77d50;
|
355 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #f77d50;
|
356 |
text-shadow: 0 -1px 1px #f77d50, 1px 0 1px #f77d50, 0 1px 1px #f77d50, -1px 0 1px #f77d50;
|
357 |
}
|
358 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .setup-product a.button-primary:active,
|
359 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .setup-product a.button-primary:focus,
|
360 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .setup-product a.button-primary:hover {
|
361 |
color: #fff;
|
362 |
background: #f77d50;
|
363 |
border-color: #f77d50;
|
364 |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #f77d50;
|
365 |
}
|
366 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul li a::before {
|
367 |
color: #82878c;
|
368 |
font: 400 20px/1 dashicons;
|
369 |
speak: none;
|
374 |
text-decoration: none !important;
|
375 |
vertical-align: top;
|
376 |
}
|
377 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .learn-more a::before {
|
378 |
content: "\f105";
|
379 |
}
|
380 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .video-walkthrough a::before {
|
381 |
content: "\f126";
|
382 |
}
|
383 |
+
.w-factory-clearfy-240-setup-content .w-factory-clearfy-240-setup-next-steps ul .newsletter a::before {
|
384 |
content: "\f465";
|
385 |
}
|
386 |
+
.w-factory-clearfy-240-setup-content .updated,
|
387 |
+
.w-factory-clearfy-240-setup-content .woocommerce-newsletter {
|
388 |
padding: 24px 24px 0;
|
389 |
margin: 0 0 24px;
|
390 |
overflow: hidden;
|
391 |
background: #f5f5f5;
|
392 |
}
|
393 |
+
.w-factory-clearfy-240-setup-content .updated p,
|
394 |
+
.w-factory-clearfy-240-setup-content .woocommerce-newsletter p {
|
395 |
padding: 0;
|
396 |
margin: 0 0 12px;
|
397 |
}
|
398 |
+
.w-factory-clearfy-240-setup-content .updated form,
|
399 |
+
.w-factory-clearfy-240-setup-content .updated p:last-child,
|
400 |
+
.w-factory-clearfy-240-setup-content .woocommerce-newsletter form,
|
401 |
+
.w-factory-clearfy-240-setup-content .woocommerce-newsletter p:last-child {
|
402 |
margin: 0 0 24px;
|
403 |
}
|
404 |
+
.w-factory-clearfy-240-setup-content .checkbox input[type=checkbox] {
|
405 |
opacity: 0;
|
406 |
position: absolute;
|
407 |
left: -9999px;
|
408 |
}
|
409 |
+
.w-factory-clearfy-240-setup-content .checkbox label {
|
410 |
position: relative;
|
411 |
display: inline-block;
|
412 |
padding-left: 28px;
|
413 |
}
|
414 |
+
.w-factory-clearfy-240-setup-content .checkbox label::after,
|
415 |
+
.w-factory-clearfy-240-setup-content .checkbox label::before {
|
416 |
position: absolute;
|
417 |
content: "";
|
418 |
display: inline-block;
|
419 |
}
|
420 |
+
.w-factory-clearfy-240-setup-content .checkbox label::before {
|
421 |
height: 16px;
|
422 |
width: 16px;
|
423 |
left: 0;
|
426 |
background-color: #fff;
|
427 |
border-radius: 3px;
|
428 |
}
|
429 |
+
.w-factory-clearfy-240-setup-content .checkbox label::after {
|
430 |
height: 5px;
|
431 |
width: 9px;
|
432 |
border-left: 2px solid;
|
438 |
top: 7px;
|
439 |
color: #fff;
|
440 |
}
|
441 |
+
.w-factory-clearfy-240-setup-content .checkbox input[type=checkbox] + label::after {
|
442 |
content: none;
|
443 |
}
|
444 |
+
.w-factory-clearfy-240-setup-content .checkbox input[type=checkbox]:checked + label::after {
|
445 |
content: "";
|
446 |
}
|
447 |
+
.w-factory-clearfy-240-setup-content .checkbox input[type=checkbox]:focus + label::before {
|
448 |
outline: #3b99fc auto 5px;
|
449 |
}
|
450 |
+
.w-factory-clearfy-240-setup-content .checkbox input[type=checkbox]:checked + label::before {
|
451 |
background: #935687;
|
452 |
border-color: #935687;
|
453 |
}
|
libs/factory/clearfy/assets/js/clearfy-globals.js
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
* Глобальный JS файл, который регистрирует глобальные переменные с общими методами для всех компонентов Clearfy
|
3 |
* и самого Clearfy.
|
4 |
*
|
5 |
-
* $.
|
6 |
-
* $.
|
7 |
*
|
8 |
* Copyright 2018, Webcraftic, http://webcraftic.com
|
9 |
*
|
@@ -13,16 +13,16 @@
|
|
13 |
(function($) {
|
14 |
'use strict';
|
15 |
|
16 |
-
if( !$.
|
17 |
-
$.
|
18 |
}
|
19 |
|
20 |
//todo: Переопредление для совместимости со старыми версиями плагинов.
|
21 |
-
$.
|
22 |
//todo: Переопредление для совместимости со старыми версиями плагинов.
|
23 |
-
$.
|
24 |
|
25 |
-
$.
|
26 |
/**
|
27 |
* Создает и показывает уведомление внутри интерфейса Clearfy
|
28 |
*
|
@@ -68,12 +68,12 @@
|
|
68 |
/**
|
69 |
* Хук выполняет проивольную функцию, после того как уведомление отображено
|
70 |
* Реализация системы фильтров и хуков в файле libs/clearfy/admin/assests/js/global.js
|
71 |
-
* Пример регистрации хука $.
|
72 |
* function(noticeId) {});
|
73 |
* @param {string} noticeId - id уведомления
|
74 |
*/
|
75 |
-
$.
|
76 |
-
$.
|
77 |
});
|
78 |
|
79 |
return noticeId;
|
@@ -98,13 +98,13 @@
|
|
98 |
/**
|
99 |
* Хук выполняет проивольную функцию, после того как уведомление скрыто
|
100 |
* Реализация системы фильтров и хуков в файле libs/clearfy/admin/assests/js/global.js
|
101 |
-
* Пример регистрации хука $.
|
102 |
* function(noticeId)
|
103 |
* {});
|
104 |
* @param {string} noticeId - id уведомления
|
105 |
*/
|
106 |
-
$.
|
107 |
-
$.
|
108 |
});
|
109 |
},
|
110 |
|
@@ -121,7 +121,7 @@
|
|
121 |
|
122 |
};
|
123 |
|
124 |
-
$.
|
125 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
126 |
if( !$('#WBCR').length ) {
|
127 |
return false;
|
@@ -137,7 +137,7 @@
|
|
137 |
}
|
138 |
});
|
139 |
|
140 |
-
$.
|
141 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
142 |
if( !$('#WBCR').length ) {
|
143 |
return false;
|
@@ -156,7 +156,7 @@
|
|
156 |
}
|
157 |
});
|
158 |
|
159 |
-
$.
|
160 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
161 |
if( !$('#WBCR').length ) {
|
162 |
return false;
|
@@ -175,32 +175,32 @@
|
|
175 |
}
|
176 |
});
|
177 |
|
178 |
-
$.
|
179 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
180 |
-
if( !($('#WBCR').length && $.
|
181 |
return false;
|
182 |
}
|
183 |
|
184 |
button.closest('.plugin-card').addClass('plugin-status-deactive');
|
185 |
|
186 |
if( response.data && response.data.error_message ) {
|
187 |
-
$.
|
188 |
}
|
189 |
});
|
190 |
|
191 |
-
$.
|
192 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
193 |
-
if( !($('#WBCR').length && $.
|
194 |
return false;
|
195 |
}
|
196 |
|
197 |
if( response.data && response.data.error_message ) {
|
198 |
-
$.
|
199 |
}
|
200 |
|
201 |
});
|
202 |
|
203 |
-
$.
|
204 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
205 |
if( !$('#WBCR').length ) {
|
206 |
return false;
|
@@ -209,13 +209,13 @@
|
|
209 |
button.closest('.plugin-card').removeClass('plugin-status-deactive');
|
210 |
});
|
211 |
|
212 |
-
$.
|
213 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
214 |
-
if( !($('#WBCR').length && $.
|
215 |
return false;
|
216 |
}
|
217 |
|
218 |
-
$.
|
219 |
});
|
220 |
|
221 |
})(jQuery);
|
2 |
* Глобальный JS файл, который регистрирует глобальные переменные с общими методами для всех компонентов Clearfy
|
3 |
* и самого Clearfy.
|
4 |
*
|
5 |
+
* $.wbcr_factory_clearfy_240.app - методы для работы с приложением. Скрыть, показать уведомления.
|
6 |
+
* $.wbcr_factory_clearfy_240.hooks - это иммитация хуков и фильтров аналогично тем, что используются в Wordpress
|
7 |
*
|
8 |
* Copyright 2018, Webcraftic, http://webcraftic.com
|
9 |
*
|
13 |
(function($) {
|
14 |
'use strict';
|
15 |
|
16 |
+
if( !$.wbcr_factory_clearfy_240 ) {
|
17 |
+
$.wbcr_factory_clearfy_240 = {};
|
18 |
}
|
19 |
|
20 |
//todo: Переопредление для совместимости со старыми версиями плагинов.
|
21 |
+
$.wbcr_factory_clearfy_240.filters = $.wbcr_factory_clearfy_240.filters || $.wfactory_448.filters;
|
22 |
//todo: Переопредление для совместимости со старыми версиями плагинов.
|
23 |
+
$.wbcr_factory_clearfy_240.hooks = $.wbcr_factory_clearfy_240.hooks || $.wfactory_448.hooks;
|
24 |
|
25 |
+
$.wbcr_factory_clearfy_240.app = $.wbcr_factory_clearfy_240.app || {
|
26 |
/**
|
27 |
* Создает и показывает уведомление внутри интерфейса Clearfy
|
28 |
*
|
68 |
/**
|
69 |
* Хук выполняет проивольную функцию, после того как уведомление отображено
|
70 |
* Реализация системы фильтров и хуков в файле libs/clearfy/admin/assests/js/global.js
|
71 |
+
* Пример регистрации хука $.wfactory_448.hooks.add('wbcr/factory_clearfy_240/updated',
|
72 |
* function(noticeId) {});
|
73 |
* @param {string} noticeId - id уведомления
|
74 |
*/
|
75 |
+
$.wfactory_448.hooks.run('wbcr/factory_clearfy_240/showed_notice', [noticeId]);
|
76 |
+
$.wfactory_448.hooks.run('wbcr/clearfy/showed_notice', [noticeId]);
|
77 |
});
|
78 |
|
79 |
return noticeId;
|
98 |
/**
|
99 |
* Хук выполняет проивольную функцию, после того как уведомление скрыто
|
100 |
* Реализация системы фильтров и хуков в файле libs/clearfy/admin/assests/js/global.js
|
101 |
+
* Пример регистрации хука $.wfactory_448.hooks.add('wbcr/factory_clearfy_240/updated',
|
102 |
* function(noticeId)
|
103 |
* {});
|
104 |
* @param {string} noticeId - id уведомления
|
105 |
*/
|
106 |
+
$.wfactory_448.hooks.run('wbcr/factory_clearfy_240/hidded_notice', [noticeId]);
|
107 |
+
$.wfactory_448.hooks.run('wbcr/clearfy/hidded_notice', [noticeId]);
|
108 |
});
|
109 |
},
|
110 |
|
121 |
|
122 |
};
|
123 |
|
124 |
+
$.wfactory_448.hooks.add('core/components/pre_activate', function(button) {
|
125 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
126 |
if( !$('#WBCR').length ) {
|
127 |
return false;
|
137 |
}
|
138 |
});
|
139 |
|
140 |
+
$.wfactory_448.hooks.add('core/components/deactivated', function(button, data, response) {
|
141 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
142 |
if( !$('#WBCR').length ) {
|
143 |
return false;
|
156 |
}
|
157 |
});
|
158 |
|
159 |
+
$.wfactory_448.hooks.add('core/components/deleted', function(button) {
|
160 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
161 |
if( !$('#WBCR').length ) {
|
162 |
return false;
|
175 |
}
|
176 |
});
|
177 |
|
178 |
+
$.wfactory_448.hooks.add('core/components/activation_error', function(plugin, button, response) {
|
179 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
180 |
+
if( !($('#WBCR').length && $.wbcr_factory_clearfy_240) ) {
|
181 |
return false;
|
182 |
}
|
183 |
|
184 |
button.closest('.plugin-card').addClass('plugin-status-deactive');
|
185 |
|
186 |
if( response.data && response.data.error_message ) {
|
187 |
+
$.wbcr_factory_clearfy_240.app.showNotice(response.data.error_message, 'danger');
|
188 |
}
|
189 |
});
|
190 |
|
191 |
+
$.wfactory_448.hooks.add('core/components/update_error', function(button, data, response) {
|
192 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
193 |
+
if( !($('#WBCR').length && $.wbcr_factory_clearfy_240) ) {
|
194 |
return false;
|
195 |
}
|
196 |
|
197 |
if( response.data && response.data.error_message ) {
|
198 |
+
$.wbcr_factory_clearfy_240.app.showNotice(response.data.error_message, 'danger');
|
199 |
}
|
200 |
|
201 |
});
|
202 |
|
203 |
+
$.wfactory_448.hooks.add('core/components/activated', function(button, data, response) {
|
204 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
205 |
if( !$('#WBCR').length ) {
|
206 |
return false;
|
209 |
button.closest('.plugin-card').removeClass('plugin-status-deactive');
|
210 |
});
|
211 |
|
212 |
+
$.wfactory_448.hooks.add('core/components/ajax_error', function(xhr, ajaxOptions, thrownError) {
|
213 |
// Выполняем код ниже, только на страницах плагина с интерфейсом Clearfy
|
214 |
+
if( !($('#WBCR').length && $.wbcr_factory_clearfy_240) ) {
|
215 |
return false;
|
216 |
}
|
217 |
|
218 |
+
$.wbcr_factory_clearfy_240.app.showNotice('Error: [' + thrownError + '] Status: [' + xhr.status + '] Error massage: [' + xhr.responseText + ']', 'danger');
|
219 |
});
|
220 |
|
221 |
})(jQuery);
|
libs/factory/clearfy/assets/js/clearfy-license-manager.js
CHANGED
@@ -20,7 +20,7 @@ jQuery(function($) {
|
|
20 |
licenseAction = $(this).data('action');
|
21 |
|
22 |
for( i = 0; i < allNotices.length; i++ ) {
|
23 |
-
$.
|
24 |
}
|
25 |
|
26 |
$('.wcl-control-btn').hide();
|
@@ -53,7 +53,7 @@ jQuery(function($) {
|
|
53 |
|
54 |
if( response.data ) {
|
55 |
console.log(response.data.error_message);
|
56 |
-
noticeId = $.
|
57 |
allNotices.push(noticeId);
|
58 |
} else {
|
59 |
console.log(response);
|
@@ -63,7 +63,7 @@ jQuery(function($) {
|
|
63 |
}
|
64 |
|
65 |
if( response.data && response.data.message ) {
|
66 |
-
noticeId = $.
|
67 |
allNotices.push(noticeId);
|
68 |
|
69 |
// todo: доработать генерацию формы, вместо перезагрузки страницы
|
@@ -80,7 +80,7 @@ jQuery(function($) {
|
|
80 |
console.log(xhr.responseText);
|
81 |
console.log(thrownError);
|
82 |
|
83 |
-
var noticeId = $.
|
84 |
|
85 |
allNotices.push(noticeId);
|
86 |
}
|
20 |
licenseAction = $(this).data('action');
|
21 |
|
22 |
for( i = 0; i < allNotices.length; i++ ) {
|
23 |
+
$.wbcr_factory_clearfy_240.app.hideNotice(allNotices[i]);
|
24 |
}
|
25 |
|
26 |
$('.wcl-control-btn').hide();
|
53 |
|
54 |
if( response.data ) {
|
55 |
console.log(response.data.error_message);
|
56 |
+
noticeId = $.wbcr_factory_clearfy_240.app.showNotice('Error: [' + response.data.error_message + ']', 'danger');
|
57 |
allNotices.push(noticeId);
|
58 |
} else {
|
59 |
console.log(response);
|
63 |
}
|
64 |
|
65 |
if( response.data && response.data.message ) {
|
66 |
+
noticeId = $.wbcr_factory_clearfy_240.app.showNotice(response.data.message, 'success');
|
67 |
allNotices.push(noticeId);
|
68 |
|
69 |
// todo: доработать генерацию формы, вместо перезагрузки страницы
|
80 |
console.log(xhr.responseText);
|
81 |
console.log(thrownError);
|
82 |
|
83 |
+
var noticeId = $.wbcr_factory_clearfy_240.app.showNotice('Error: [' + thrownError + '] Status: [' + xhr.status + '] Error massage: [' + xhr.responseText + ']', 'danger');
|
84 |
|
85 |
allNotices.push(noticeId);
|
86 |
}
|
libs/factory/clearfy/assets/js/clearfy-search-options.js
CHANGED
@@ -6,10 +6,19 @@
|
|
6 |
let controlClass = window.location.hash.replace('#', ''),
|
7 |
controlEl = $('.' + controlClass);
|
8 |
|
|
|
9 |
if( controlEl.closest('.factory-div').length && !controlEl.is(':visible') ) {
|
10 |
controlEl.closest('.factory-div').fadeIn();
|
11 |
}
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
$([document.documentElement, document.body]).animate({
|
14 |
scrollTop: controlEl.offset().top - 150
|
15 |
}, 500, function() {
|
@@ -19,6 +28,8 @@
|
|
19 |
fontWeight: 'bold'
|
20 |
});
|
21 |
|
|
|
|
|
22 |
history.pushState("", document.title, window.location.pathname
|
23 |
+ window.location.search);
|
24 |
});
|
@@ -28,10 +39,10 @@
|
|
28 |
throw new Error('Global var {wfactory_clearfy_search_options} is not declared.');
|
29 |
}
|
30 |
|
31 |
-
$('#wbcr-factory-clearfy-
|
32 |
lookup: wfactory_clearfy_search_options,
|
33 |
onSelect: function(suggestion) {
|
34 |
-
$('#wbcr-factory-clearfy-
|
35 |
window.location.href = suggestion.data.page_url;
|
36 |
}
|
37 |
});
|
6 |
let controlClass = window.location.hash.replace('#', ''),
|
7 |
controlEl = $('.' + controlClass);
|
8 |
|
9 |
+
// If the option is hidden in a container that becomes visible only with certain logic of actions.
|
10 |
if( controlEl.closest('.factory-div').length && !controlEl.is(':visible') ) {
|
11 |
controlEl.closest('.factory-div').fadeIn();
|
12 |
}
|
13 |
|
14 |
+
// If the option is hidden in a container as an additional
|
15 |
+
if( controlEl.closest('.factory-more-link-content').length && !controlEl.is(':visible') ) {
|
16 |
+
controlEl.closest('.factory-more-link-content').fadeIn(100, function() {
|
17 |
+
controlEl.closest('.factory-more-link-content').find('.factory-more-link-hide').show();
|
18 |
+
});
|
19 |
+
$('a[href="#' + controlEl.closest('.factory-more-link-content').attr('id') + '"]').hide();
|
20 |
+
}
|
21 |
+
|
22 |
$([document.documentElement, document.body]).animate({
|
23 |
scrollTop: controlEl.offset().top - 150
|
24 |
}, 500, function() {
|
28 |
fontWeight: 'bold'
|
29 |
});
|
30 |
|
31 |
+
controlEl.closest('.factory-more-link-content').find('.factory-more-link-hide').css('display', 'block');
|
32 |
+
|
33 |
history.pushState("", document.title, window.location.pathname
|
34 |
+ window.location.search);
|
35 |
});
|
39 |
throw new Error('Global var {wfactory_clearfy_search_options} is not declared.');
|
40 |
}
|
41 |
|
42 |
+
$('#wbcr-factory-clearfy-240__autocomplete').wfactory_clearfy_autocomplete({
|
43 |
lookup: wfactory_clearfy_search_options,
|
44 |
onSelect: function(suggestion) {
|
45 |
+
$('#wbcr-factory-clearfy-240__autocomplete').prop("disabled", true);
|
46 |
window.location.href = suggestion.data.page_url;
|
47 |
}
|
48 |
});
|
libs/factory/clearfy/assets/js/clearfy-widgets.js
CHANGED
@@ -25,9 +25,9 @@ jQuery(function($) {
|
|
25 |
if( !response || !response.success ) {
|
26 |
if( response.data ) {
|
27 |
console.log(response.data.error_message);
|
28 |
-
noticeId = $.
|
29 |
setTimeout(function() {
|
30 |
-
$.
|
31 |
}, 5000);
|
32 |
} else {
|
33 |
console.log(response);
|
@@ -52,9 +52,9 @@ jQuery(function($) {
|
|
52 |
console.log(xhr.responseText);
|
53 |
console.log(thrownError);
|
54 |
|
55 |
-
var noticeId = $.
|
56 |
setTimeout(function() {
|
57 |
-
$.
|
58 |
}, 5000);
|
59 |
}
|
60 |
});
|
25 |
if( !response || !response.success ) {
|
26 |
if( response.data ) {
|
27 |
console.log(response.data.error_message);
|
28 |
+
noticeId = $.wbcr_factory_clearfy_240.app.showNotice('Error: [' + response.data.error_message + ']', 'danger');
|
29 |
setTimeout(function() {
|
30 |
+
$.wbcr_factory_clearfy_240.app.hideNotice(noticeId);
|
31 |
}, 5000);
|
32 |
} else {
|
33 |
console.log(response);
|
52 |
console.log(xhr.responseText);
|
53 |
console.log(thrownError);
|
54 |
|
55 |
+
var noticeId = $.wbcr_factory_clearfy_240.app.showNotice('Error: [' + thrownError + '] Status: [' + xhr.status + '] Error massage: [' + xhr.responseText + ']', 'danger');
|
56 |
setTimeout(function() {
|
57 |
+
$.wbcr_factory_clearfy_240.app.hideNotice(noticeId);
|
58 |
}, 5000);
|
59 |
}
|
60 |
});
|
libs/factory/clearfy/assets/js/libs/jquery.autocomplete.min.js
CHANGED
@@ -5,4 +5,4 @@
|
|
5 |
* Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.
|
6 |
* For details, see the web site: https://github.com/devbridge/jQuery-Autocomplete
|
7 |
*/
|
8 |
-
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports&&"function"==typeof require?require("jquery"):jQuery)}(function(a){"use strict";function b(c,d){var e=this;e.element=c,e.el=a(c),e.suggestions=[],e.badQueries=[],e.selectedIndex=-1,e.currentValue=e.element.value,e.timeoutId=null,e.cachedResponse={},e.onChangeTimeout=null,e.onChange=null,e.isLocal=!1,e.suggestionsContainer=null,e.noSuggestionsContainer=null,e.options=a.extend(!0,{},b.defaults,d),e.classes={selected:"wbcr-factory-clearfy-237__autocomplete-selected",suggestion:"wbcr-factory-clearfy-237__autocomplete-suggestion"},e.hint=null,e.hintValue="",e.selection=null,e.initialize(),e.setOptions(d)}function c(a,b,c){return a.value.toLowerCase().indexOf(c)!==-1}function d(b){return"string"==typeof b?a.parseJSON(b):b}function e(a,b){if(!b)return a.value;var c="("+g.escapeRegExChars(b)+")";return a.value.replace(new RegExp(c,"gi"),"<strong>$1</strong>").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/<(\/?strong)>/g,"<$1>")}function f(a,b){return'<div class="wbcr-factory-clearfy-237__autocomplete-group">'+b+"</div>"}var g=function(){return{escapeRegExChars:function(a){return a.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},createNode:function(a){var b=document.createElement("div");return b.className=a,b.style.position="absolute",b.style.display="none",b}}}(),h={ESC:27,TAB:9,RETURN:13,LEFT:37,UP:38,RIGHT:39,DOWN:40},i=a.noop;b.utils=g,a.Autocomplete=b,b.defaults={ajaxSettings:{},autoSelectFirst:!1,appendTo:"body",serviceUrl:null,lookup:null,onSelect:null,width:"auto",minChars:1,maxHeight:300,deferRequestBy:0,params:{},formatResult:e,formatGroup:f,delimiter:null,zIndex:9999,type:"GET",noCache:!1,onSearchStart:i,onSearchComplete:i,onSearchError:i,preserveInput:!1,containerClass:"wbcr-factory-clearfy-237__autocomplete-suggestions",tabDisabled:!1,dataType:"text",currentRequest:null,triggerSelectOnValidInput:!0,preventBadQueries:!0,lookupFilter:c,paramName:"query",transformResult:d,showNoSuggestionNotice:!1,noSuggestionNotice:"No results",orientation:"bottom",forceFixPosition:!1},b.prototype={initialize:function(){var c,d=this,e="."+d.classes.suggestion,f=d.classes.selected,g=d.options;d.element.setAttribute("autocomplete","off"),d.noSuggestionsContainer=a('<div class="autocomplete-no-suggestion"></div>').html(this.options.noSuggestionNotice).get(0),d.suggestionsContainer=b.utils.createNode(g.containerClass),c=a(d.suggestionsContainer),c.appendTo(g.appendTo||"body"),"auto"!==g.width&&c.css("width",g.width),c.on("mouseover.autocomplete",e,function(){d.activate(a(this).data("index"))}),c.on("mouseout.autocomplete",function(){d.selectedIndex=-1,c.children("."+f).removeClass(f)}),c.on("click.autocomplete",e,function(){d.select(a(this).data("index"))}),c.on("click.autocomplete",function(){clearTimeout(d.blurTimeoutId)}),d.fixPositionCapture=function(){d.visible&&d.fixPosition()},a(window).on("resize.autocomplete",d.fixPositionCapture),d.el.on("keydown.autocomplete",function(a){d.onKeyPress(a)}),d.el.on("keyup.autocomplete",function(a){d.onKeyUp(a)}),d.el.on("blur.autocomplete",function(){d.onBlur()}),d.el.on("focus.autocomplete",function(){d.onFocus()}),d.el.on("change.autocomplete",function(a){d.onKeyUp(a)}),d.el.on("input.autocomplete",function(a){d.onKeyUp(a)})},onFocus:function(){var a=this;a.disabled||(a.fixPosition(),a.el.val().length>=a.options.minChars&&a.onValueChange())},onBlur:function(){var b=this,c=b.options,d=b.el.val(),e=b.getQuery(d);b.blurTimeoutId=setTimeout(function(){b.hide(),b.selection&&b.currentValue!==e&&(c.onInvalidateSelection||a.noop).call(b.element)},200)},abortAjax:function(){var a=this;a.currentRequest&&(a.currentRequest.abort(),a.currentRequest=null)},setOptions:function(b){var c=this,d=a.extend({},c.options,b);c.isLocal=Array.isArray(d.lookup),c.isLocal&&(d.lookup=c.verifySuggestionsFormat(d.lookup)),d.orientation=c.validateOrientation(d.orientation,"bottom"),a(c.suggestionsContainer).css({"max-height":d.maxHeight+"px",width:d.width+"px","z-index":d.zIndex}),this.options=d},clearCache:function(){this.cachedResponse={},this.badQueries=[]},clear:function(){this.clearCache(),this.currentValue="",this.suggestions=[]},disable:function(){var a=this;a.disabled=!0,clearTimeout(a.onChangeTimeout),a.abortAjax()},enable:function(){this.disabled=!1},fixPosition:function(){var b=this,c=a(b.suggestionsContainer),d=c.parent().get(0);if(d===document.body||b.options.forceFixPosition){var e=b.options.orientation,f=c.outerHeight(),g=b.el.outerHeight(),h=b.el.offset(),i={top:h.top,left:h.left};if("auto"===e){var j=a(window).height(),k=a(window).scrollTop(),l=-k+h.top-f,m=k+j-(h.top+g+f);e=Math.max(l,m)===l?"top":"bottom"}if("top"===e?i.top+=-f:i.top+=g,d!==document.body){var n,o=c.css("opacity");b.visible||c.css("opacity",0).show(),n=c.offsetParent().offset(),i.top-=n.top,i.top+=d.scrollTop,i.left-=n.left,b.visible||c.css("opacity",o).hide()}"auto"===b.options.width&&(i.width=b.el.outerWidth()+"px"),c.css(i)}},isCursorAtEnd:function(){var a,b=this,c=b.el.val().length,d=b.element.selectionStart;return"number"==typeof d?d===c:!document.selection||(a=document.selection.createRange(),a.moveStart("character",-c),c===a.text.length)},onKeyPress:function(a){var b=this;if(!b.disabled&&!b.visible&&a.which===h.DOWN&&b.currentValue)return void b.suggest();if(!b.disabled&&b.visible){switch(a.which){case h.ESC:b.el.val(b.currentValue),b.hide();break;case h.RIGHT:if(b.hint&&b.options.onHint&&b.isCursorAtEnd()){b.selectHint();break}return;case h.TAB:if(b.hint&&b.options.onHint)return void b.selectHint();if(b.selectedIndex===-1)return void b.hide();if(b.select(b.selectedIndex),b.options.tabDisabled===!1)return;break;case h.RETURN:if(b.selectedIndex===-1)return void b.hide();b.select(b.selectedIndex);break;case h.UP:b.moveUp();break;case h.DOWN:b.moveDown();break;default:return}a.stopImmediatePropagation(),a.preventDefault()}},onKeyUp:function(a){var b=this;if(!b.disabled){switch(a.which){case h.UP:case h.DOWN:return}clearTimeout(b.onChangeTimeout),b.currentValue!==b.el.val()&&(b.findBestHint(),b.options.deferRequestBy>0?b.onChangeTimeout=setTimeout(function(){b.onValueChange()},b.options.deferRequestBy):b.onValueChange())}},onValueChange:function(){if(this.ignoreValueChange)return void(this.ignoreValueChange=!1);var b=this,c=b.options,d=b.el.val(),e=b.getQuery(d);return b.selection&&b.currentValue!==e&&(b.selection=null,(c.onInvalidateSelection||a.noop).call(b.element)),clearTimeout(b.onChangeTimeout),b.currentValue=d,b.selectedIndex=-1,c.triggerSelectOnValidInput&&b.isExactMatch(e)?void b.select(0):void(e.length<c.minChars?b.hide():b.getSuggestions(e))},isExactMatch:function(a){var b=this.suggestions;return 1===b.length&&b[0].value.toLowerCase()===a.toLowerCase()},getQuery:function(b){var c,d=this.options.delimiter;return d?(c=b.split(d),a.trim(c[c.length-1])):b},getSuggestionsLocal:function(b){var c,d=this,e=d.options,f=b.toLowerCase(),g=e.lookupFilter,h=parseInt(e.lookupLimit,10);return c={suggestions:a.grep(e.lookup,function(a){return g(a,b,f)})},h&&c.suggestions.length>h&&(c.suggestions=c.suggestions.slice(0,h)),c},getSuggestions:function(b){var c,d,e,f,g=this,h=g.options,i=h.serviceUrl;if(h.params[h.paramName]=b,h.onSearchStart.call(g.element,h.params)!==!1){if(d=h.ignoreParams?null:h.params,a.isFunction(h.lookup))return void h.lookup(b,function(a){g.suggestions=a.suggestions,g.suggest(),h.onSearchComplete.call(g.element,b,a.suggestions)});g.isLocal?c=g.getSuggestionsLocal(b):(a.isFunction(i)&&(i=i.call(g.element,b)),e=i+"?"+a.param(d||{}),c=g.cachedResponse[e]),c&&Array.isArray(c.suggestions)?(g.suggestions=c.suggestions,g.suggest(),h.onSearchComplete.call(g.element,b,c.suggestions)):g.isBadQuery(b)?h.onSearchComplete.call(g.element,b,[]):(g.abortAjax(),f={url:i,data:d,type:h.type,dataType:h.dataType},a.extend(f,h.ajaxSettings),g.currentRequest=a.ajax(f).done(function(a){var c;g.currentRequest=null,c=h.transformResult(a,b),g.processResponse(c,b,e),h.onSearchComplete.call(g.element,b,c.suggestions)}).fail(function(a,c,d){h.onSearchError.call(g.element,b,a,c,d)}))}},isBadQuery:function(a){if(!this.options.preventBadQueries)return!1;for(var b=this.badQueries,c=b.length;c--;)if(0===a.indexOf(b[c]))return!0;return!1},hide:function(){var b=this,c=a(b.suggestionsContainer);a.isFunction(b.options.onHide)&&b.visible&&b.options.onHide.call(b.element,c),b.visible=!1,b.selectedIndex=-1,clearTimeout(b.onChangeTimeout),a(b.suggestionsContainer).hide(),b.signalHint(null)},suggest:function(){if(!this.suggestions.length)return void(this.options.showNoSuggestionNotice?this.noSuggestions():this.hide());var b,c=this,d=c.options,e=d.groupBy,f=d.formatResult,g=c.getQuery(c.currentValue),h=c.classes.suggestion,i=c.classes.selected,j=a(c.suggestionsContainer),k=a(c.noSuggestionsContainer),l=d.beforeRender,m="",n=function(a,c){var f=a.data[e];return b===f?"":(b=f,d.formatGroup(a,b))};return d.triggerSelectOnValidInput&&c.isExactMatch(g)?void c.select(0):(a.each(c.suggestions,function(a,b){e&&(m+=n(b,g,a)),m+='<div class="'+h+'" data-index="'+a+'">'+f(b,g,a)+"</div>"}),this.adjustContainerWidth(),k.detach(),j.html(m),a.isFunction(l)&&l.call(c.element,j,c.suggestions),c.fixPosition(),j.show(),d.autoSelectFirst&&(c.selectedIndex=0,j.scrollTop(0),j.children("."+h).first().addClass(i)),c.visible=!0,void c.findBestHint())},noSuggestions:function(){var b=this,c=b.options.beforeRender,d=a(b.suggestionsContainer),e=a(b.noSuggestionsContainer);this.adjustContainerWidth(),e.detach(),d.empty(),d.append(e),a.isFunction(c)&&c.call(b.element,d,b.suggestions),b.fixPosition(),d.show(),b.visible=!0},adjustContainerWidth:function(){var b,c=this,d=c.options,e=a(c.suggestionsContainer);"auto"===d.width?(b=c.el.outerWidth(),e.css("width",b>0?b:300)):"flex"===d.width&&e.css("width","")},findBestHint:function(){var b=this,c=b.el.val().toLowerCase(),d=null;c&&(a.each(b.suggestions,function(a,b){var e=0===b.value.toLowerCase().indexOf(c);return e&&(d=b),!e}),b.signalHint(d))},signalHint:function(b){var c="",d=this;b&&(c=d.currentValue+b.value.substr(d.currentValue.length)),d.hintValue!==c&&(d.hintValue=c,d.hint=b,(this.options.onHint||a.noop)(c))},verifySuggestionsFormat:function(b){return b.length&&"string"==typeof b[0]?a.map(b,function(a){return{value:a,data:null}}):b},validateOrientation:function(b,c){return b=a.trim(b||"").toLowerCase(),a.inArray(b,["auto","bottom","top"])===-1&&(b=c),b},processResponse:function(a,b,c){var d=this,e=d.options;a.suggestions=d.verifySuggestionsFormat(a.suggestions),e.noCache||(d.cachedResponse[c]=a,e.preventBadQueries&&!a.suggestions.length&&d.badQueries.push(b)),b===d.getQuery(d.currentValue)&&(d.suggestions=a.suggestions,d.suggest())},activate:function(b){var c,d=this,e=d.classes.selected,f=a(d.suggestionsContainer),g=f.find("."+d.classes.suggestion);return f.find("."+e).removeClass(e),d.selectedIndex=b,d.selectedIndex!==-1&&g.length>d.selectedIndex?(c=g.get(d.selectedIndex),a(c).addClass(e),c):null},selectHint:function(){var b=this,c=a.inArray(b.hint,b.suggestions);b.select(c)},select:function(a){var b=this;b.hide(),b.onSelect(a)},moveUp:function(){var b=this;if(b.selectedIndex!==-1)return 0===b.selectedIndex?(a(b.suggestionsContainer).children("."+b.classes.suggestion).first().removeClass(b.classes.selected),b.selectedIndex=-1,b.ignoreValueChange=!1,b.el.val(b.currentValue),void b.findBestHint()):void b.adjustScroll(b.selectedIndex-1)},moveDown:function(){var a=this;a.selectedIndex!==a.suggestions.length-1&&a.adjustScroll(a.selectedIndex+1)},adjustScroll:function(b){var c=this,d=c.activate(b);if(d){var e,f,g,h=a(d).outerHeight();e=d.offsetTop,f=a(c.suggestionsContainer).scrollTop(),g=f+c.options.maxHeight-h,e<f?a(c.suggestionsContainer).scrollTop(e):e>g&&a(c.suggestionsContainer).scrollTop(e-c.options.maxHeight+h),c.options.preserveInput||(c.ignoreValueChange=!0,c.el.val(c.getValue(c.suggestions[b].value))),c.signalHint(null)}},onSelect:function(b){var c=this,d=c.options.onSelect,e=c.suggestions[b];c.currentValue=c.getValue(e.value),c.currentValue===c.el.val()||c.options.preserveInput||c.el.val(c.currentValue),c.signalHint(null),c.suggestions=[],c.selection=e,a.isFunction(d)&&d.call(c.element,e)},getValue:function(a){var b,c,d=this,e=d.options.delimiter;return e?(b=d.currentValue,c=b.split(e),1===c.length?a:b.substr(0,b.length-c[c.length-1].length)+a):a},dispose:function(){var b=this;b.el.off(".autocomplete").removeData("autocomplete"),a(window).off("resize.autocomplete",b.fixPositionCapture),a(b.suggestionsContainer).remove()}},a.fn.devbridgeAutocomplete=function(c,d){var e="autocomplete";return arguments.length?this.each(function(){var f=a(this),g=f.data(e);"string"==typeof c?g&&"function"==typeof g[c]&&g[c](d):(g&&g.dispose&&g.dispose(),g=new b(this,c),f.data(e,g))}):this.first().data(e)},a.fn.wfactory_clearfy_autocomplete||(a.fn.wfactory_clearfy_autocomplete=a.fn.devbridgeAutocomplete)});
|
5 |
* Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.
|
6 |
* For details, see the web site: https://github.com/devbridge/jQuery-Autocomplete
|
7 |
*/
|
8 |
+
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports&&"function"==typeof require?require("jquery"):jQuery)}(function(a){"use strict";function b(c,d){var e=this;e.element=c,e.el=a(c),e.suggestions=[],e.badQueries=[],e.selectedIndex=-1,e.currentValue=e.element.value,e.timeoutId=null,e.cachedResponse={},e.onChangeTimeout=null,e.onChange=null,e.isLocal=!1,e.suggestionsContainer=null,e.noSuggestionsContainer=null,e.options=a.extend(!0,{},b.defaults,d),e.classes={selected:"wbcr-factory-clearfy-240__autocomplete-selected",suggestion:"wbcr-factory-clearfy-240__autocomplete-suggestion"},e.hint=null,e.hintValue="",e.selection=null,e.initialize(),e.setOptions(d)}function c(a,b,c){return a.value.toLowerCase().indexOf(c)!==-1}function d(b){return"string"==typeof b?a.parseJSON(b):b}function e(a,b){if(!b)return a.value;var c="("+g.escapeRegExChars(b)+")";return a.value.replace(new RegExp(c,"gi"),"<strong>$1</strong>").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/<(\/?strong)>/g,"<$1>")}function f(a,b){return'<div class="wbcr-factory-clearfy-240__autocomplete-group">'+b+"</div>"}var g=function(){return{escapeRegExChars:function(a){return a.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},createNode:function(a){var b=document.createElement("div");return b.className=a,b.style.position="absolute",b.style.display="none",b}}}(),h={ESC:27,TAB:9,RETURN:13,LEFT:37,UP:38,RIGHT:39,DOWN:40},i=a.noop;b.utils=g,a.Autocomplete=b,b.defaults={ajaxSettings:{},autoSelectFirst:!1,appendTo:"body",serviceUrl:null,lookup:null,onSelect:null,width:"auto",minChars:1,maxHeight:300,deferRequestBy:0,params:{},formatResult:e,formatGroup:f,delimiter:null,zIndex:9999,type:"GET",noCache:!1,onSearchStart:i,onSearchComplete:i,onSearchError:i,preserveInput:!1,containerClass:"wbcr-factory-clearfy-240__autocomplete-suggestions",tabDisabled:!1,dataType:"text",currentRequest:null,triggerSelectOnValidInput:!0,preventBadQueries:!0,lookupFilter:c,paramName:"query",transformResult:d,showNoSuggestionNotice:!1,noSuggestionNotice:"No results",orientation:"bottom",forceFixPosition:!1},b.prototype={initialize:function(){var c,d=this,e="."+d.classes.suggestion,f=d.classes.selected,g=d.options;d.element.setAttribute("autocomplete","off"),d.noSuggestionsContainer=a('<div class="autocomplete-no-suggestion"></div>').html(this.options.noSuggestionNotice).get(0),d.suggestionsContainer=b.utils.createNode(g.containerClass),c=a(d.suggestionsContainer),c.appendTo(g.appendTo||"body"),"auto"!==g.width&&c.css("width",g.width),c.on("mouseover.autocomplete",e,function(){d.activate(a(this).data("index"))}),c.on("mouseout.autocomplete",function(){d.selectedIndex=-1,c.children("."+f).removeClass(f)}),c.on("click.autocomplete",e,function(){d.select(a(this).data("index"))}),c.on("click.autocomplete",function(){clearTimeout(d.blurTimeoutId)}),d.fixPositionCapture=function(){d.visible&&d.fixPosition()},a(window).on("resize.autocomplete",d.fixPositionCapture),d.el.on("keydown.autocomplete",function(a){d.onKeyPress(a)}),d.el.on("keyup.autocomplete",function(a){d.onKeyUp(a)}),d.el.on("blur.autocomplete",function(){d.onBlur()}),d.el.on("focus.autocomplete",function(){d.onFocus()}),d.el.on("change.autocomplete",function(a){d.onKeyUp(a)}),d.el.on("input.autocomplete",function(a){d.onKeyUp(a)})},onFocus:function(){var a=this;a.disabled||(a.fixPosition(),a.el.val().length>=a.options.minChars&&a.onValueChange())},onBlur:function(){var b=this,c=b.options,d=b.el.val(),e=b.getQuery(d);b.blurTimeoutId=setTimeout(function(){b.hide(),b.selection&&b.currentValue!==e&&(c.onInvalidateSelection||a.noop).call(b.element)},200)},abortAjax:function(){var a=this;a.currentRequest&&(a.currentRequest.abort(),a.currentRequest=null)},setOptions:function(b){var c=this,d=a.extend({},c.options,b);c.isLocal=Array.isArray(d.lookup),c.isLocal&&(d.lookup=c.verifySuggestionsFormat(d.lookup)),d.orientation=c.validateOrientation(d.orientation,"bottom"),a(c.suggestionsContainer).css({"max-height":d.maxHeight+"px",width:d.width+"px","z-index":d.zIndex}),this.options=d},clearCache:function(){this.cachedResponse={},this.badQueries=[]},clear:function(){this.clearCache(),this.currentValue="",this.suggestions=[]},disable:function(){var a=this;a.disabled=!0,clearTimeout(a.onChangeTimeout),a.abortAjax()},enable:function(){this.disabled=!1},fixPosition:function(){var b=this,c=a(b.suggestionsContainer),d=c.parent().get(0);if(d===document.body||b.options.forceFixPosition){var e=b.options.orientation,f=c.outerHeight(),g=b.el.outerHeight(),h=b.el.offset(),i={top:h.top,left:h.left};if("auto"===e){var j=a(window).height(),k=a(window).scrollTop(),l=-k+h.top-f,m=k+j-(h.top+g+f);e=Math.max(l,m)===l?"top":"bottom"}if("top"===e?i.top+=-f:i.top+=g,d!==document.body){var n,o=c.css("opacity");b.visible||c.css("opacity",0).show(),n=c.offsetParent().offset(),i.top-=n.top,i.top+=d.scrollTop,i.left-=n.left,b.visible||c.css("opacity",o).hide()}"auto"===b.options.width&&(i.width=b.el.outerWidth()+"px"),c.css(i)}},isCursorAtEnd:function(){var a,b=this,c=b.el.val().length,d=b.element.selectionStart;return"number"==typeof d?d===c:!document.selection||(a=document.selection.createRange(),a.moveStart("character",-c),c===a.text.length)},onKeyPress:function(a){var b=this;if(!b.disabled&&!b.visible&&a.which===h.DOWN&&b.currentValue)return void b.suggest();if(!b.disabled&&b.visible){switch(a.which){case h.ESC:b.el.val(b.currentValue),b.hide();break;case h.RIGHT:if(b.hint&&b.options.onHint&&b.isCursorAtEnd()){b.selectHint();break}return;case h.TAB:if(b.hint&&b.options.onHint)return void b.selectHint();if(b.selectedIndex===-1)return void b.hide();if(b.select(b.selectedIndex),b.options.tabDisabled===!1)return;break;case h.RETURN:if(b.selectedIndex===-1)return void b.hide();b.select(b.selectedIndex);break;case h.UP:b.moveUp();break;case h.DOWN:b.moveDown();break;default:return}a.stopImmediatePropagation(),a.preventDefault()}},onKeyUp:function(a){var b=this;if(!b.disabled){switch(a.which){case h.UP:case h.DOWN:return}clearTimeout(b.onChangeTimeout),b.currentValue!==b.el.val()&&(b.findBestHint(),b.options.deferRequestBy>0?b.onChangeTimeout=setTimeout(function(){b.onValueChange()},b.options.deferRequestBy):b.onValueChange())}},onValueChange:function(){if(this.ignoreValueChange)return void(this.ignoreValueChange=!1);var b=this,c=b.options,d=b.el.val(),e=b.getQuery(d);return b.selection&&b.currentValue!==e&&(b.selection=null,(c.onInvalidateSelection||a.noop).call(b.element)),clearTimeout(b.onChangeTimeout),b.currentValue=d,b.selectedIndex=-1,c.triggerSelectOnValidInput&&b.isExactMatch(e)?void b.select(0):void(e.length<c.minChars?b.hide():b.getSuggestions(e))},isExactMatch:function(a){var b=this.suggestions;return 1===b.length&&b[0].value.toLowerCase()===a.toLowerCase()},getQuery:function(b){var c,d=this.options.delimiter;return d?(c=b.split(d),a.trim(c[c.length-1])):b},getSuggestionsLocal:function(b){var c,d=this,e=d.options,f=b.toLowerCase(),g=e.lookupFilter,h=parseInt(e.lookupLimit,10);return c={suggestions:a.grep(e.lookup,function(a){return g(a,b,f)})},h&&c.suggestions.length>h&&(c.suggestions=c.suggestions.slice(0,h)),c},getSuggestions:function(b){var c,d,e,f,g=this,h=g.options,i=h.serviceUrl;if(h.params[h.paramName]=b,h.onSearchStart.call(g.element,h.params)!==!1){if(d=h.ignoreParams?null:h.params,a.isFunction(h.lookup))return void h.lookup(b,function(a){g.suggestions=a.suggestions,g.suggest(),h.onSearchComplete.call(g.element,b,a.suggestions)});g.isLocal?c=g.getSuggestionsLocal(b):(a.isFunction(i)&&(i=i.call(g.element,b)),e=i+"?"+a.param(d||{}),c=g.cachedResponse[e]),c&&Array.isArray(c.suggestions)?(g.suggestions=c.suggestions,g.suggest(),h.onSearchComplete.call(g.element,b,c.suggestions)):g.isBadQuery(b)?h.onSearchComplete.call(g.element,b,[]):(g.abortAjax(),f={url:i,data:d,type:h.type,dataType:h.dataType},a.extend(f,h.ajaxSettings),g.currentRequest=a.ajax(f).done(function(a){var c;g.currentRequest=null,c=h.transformResult(a,b),g.processResponse(c,b,e),h.onSearchComplete.call(g.element,b,c.suggestions)}).fail(function(a,c,d){h.onSearchError.call(g.element,b,a,c,d)}))}},isBadQuery:function(a){if(!this.options.preventBadQueries)return!1;for(var b=this.badQueries,c=b.length;c--;)if(0===a.indexOf(b[c]))return!0;return!1},hide:function(){var b=this,c=a(b.suggestionsContainer);a.isFunction(b.options.onHide)&&b.visible&&b.options.onHide.call(b.element,c),b.visible=!1,b.selectedIndex=-1,clearTimeout(b.onChangeTimeout),a(b.suggestionsContainer).hide(),b.signalHint(null)},suggest:function(){if(!this.suggestions.length)return void(this.options.showNoSuggestionNotice?this.noSuggestions():this.hide());var b,c=this,d=c.options,e=d.groupBy,f=d.formatResult,g=c.getQuery(c.currentValue),h=c.classes.suggestion,i=c.classes.selected,j=a(c.suggestionsContainer),k=a(c.noSuggestionsContainer),l=d.beforeRender,m="",n=function(a,c){var f=a.data[e];return b===f?"":(b=f,d.formatGroup(a,b))};return d.triggerSelectOnValidInput&&c.isExactMatch(g)?void c.select(0):(a.each(c.suggestions,function(a,b){e&&(m+=n(b,g,a)),m+='<div class="'+h+'" data-index="'+a+'">'+f(b,g,a)+"</div>"}),this.adjustContainerWidth(),k.detach(),j.html(m),a.isFunction(l)&&l.call(c.element,j,c.suggestions),c.fixPosition(),j.show(),d.autoSelectFirst&&(c.selectedIndex=0,j.scrollTop(0),j.children("."+h).first().addClass(i)),c.visible=!0,void c.findBestHint())},noSuggestions:function(){var b=this,c=b.options.beforeRender,d=a(b.suggestionsContainer),e=a(b.noSuggestionsContainer);this.adjustContainerWidth(),e.detach(),d.empty(),d.append(e),a.isFunction(c)&&c.call(b.element,d,b.suggestions),b.fixPosition(),d.show(),b.visible=!0},adjustContainerWidth:function(){var b,c=this,d=c.options,e=a(c.suggestionsContainer);"auto"===d.width?(b=c.el.outerWidth(),e.css("width",b>0?b:300)):"flex"===d.width&&e.css("width","")},findBestHint:function(){var b=this,c=b.el.val().toLowerCase(),d=null;c&&(a.each(b.suggestions,function(a,b){var e=0===b.value.toLowerCase().indexOf(c);return e&&(d=b),!e}),b.signalHint(d))},signalHint:function(b){var c="",d=this;b&&(c=d.currentValue+b.value.substr(d.currentValue.length)),d.hintValue!==c&&(d.hintValue=c,d.hint=b,(this.options.onHint||a.noop)(c))},verifySuggestionsFormat:function(b){return b.length&&"string"==typeof b[0]?a.map(b,function(a){return{value:a,data:null}}):b},validateOrientation:function(b,c){return b=a.trim(b||"").toLowerCase(),a.inArray(b,["auto","bottom","top"])===-1&&(b=c),b},processResponse:function(a,b,c){var d=this,e=d.options;a.suggestions=d.verifySuggestionsFormat(a.suggestions),e.noCache||(d.cachedResponse[c]=a,e.preventBadQueries&&!a.suggestions.length&&d.badQueries.push(b)),b===d.getQuery(d.currentValue)&&(d.suggestions=a.suggestions,d.suggest())},activate:function(b){var c,d=this,e=d.classes.selected,f=a(d.suggestionsContainer),g=f.find("."+d.classes.suggestion);return f.find("."+e).removeClass(e),d.selectedIndex=b,d.selectedIndex!==-1&&g.length>d.selectedIndex?(c=g.get(d.selectedIndex),a(c).addClass(e),c):null},selectHint:function(){var b=this,c=a.inArray(b.hint,b.suggestions);b.select(c)},select:function(a){var b=this;b.hide(),b.onSelect(a)},moveUp:function(){var b=this;if(b.selectedIndex!==-1)return 0===b.selectedIndex?(a(b.suggestionsContainer).children("."+b.classes.suggestion).first().removeClass(b.classes.selected),b.selectedIndex=-1,b.ignoreValueChange=!1,b.el.val(b.currentValue),void b.findBestHint()):void b.adjustScroll(b.selectedIndex-1)},moveDown:function(){var a=this;a.selectedIndex!==a.suggestions.length-1&&a.adjustScroll(a.selectedIndex+1)},adjustScroll:function(b){var c=this,d=c.activate(b);if(d){var e,f,g,h=a(d).outerHeight();e=d.offsetTop,f=a(c.suggestionsContainer).scrollTop(),g=f+c.options.maxHeight-h,e<f?a(c.suggestionsContainer).scrollTop(e):e>g&&a(c.suggestionsContainer).scrollTop(e-c.options.maxHeight+h),c.options.preserveInput||(c.ignoreValueChange=!0,c.el.val(c.getValue(c.suggestions[b].value))),c.signalHint(null)}},onSelect:function(b){var c=this,d=c.options.onSelect,e=c.suggestions[b];c.currentValue=c.getValue(e.value),c.currentValue===c.el.val()||c.options.preserveInput||c.el.val(c.currentValue),c.signalHint(null),c.suggestions=[],c.selection=e,a.isFunction(d)&&d.call(c.element,e)},getValue:function(a){var b,c,d=this,e=d.options.delimiter;return e?(b=d.currentValue,c=b.split(e),1===c.length?a:b.substr(0,b.length-c[c.length-1].length)+a):a},dispose:function(){var b=this;b.el.off(".autocomplete").removeData("autocomplete"),a(window).off("resize.autocomplete",b.fixPositionCapture),a(b.suggestionsContainer).remove()}},a.fn.devbridgeAutocomplete=function(c,d){var e="autocomplete";return arguments.length?this.each(function(){var f=a(this),g=f.data(e);"string"==typeof c?g&&"function"==typeof g[c]&&g[c](d):(g&&g.dispose&&g.dispose(),g=new b(this,c),f.data(e,g))}):this.first().data(e)},a.fn.wfactory_clearfy_autocomplete||(a.fn.wfactory_clearfy_autocomplete=a.fn.devbridgeAutocomplete)});
|
libs/factory/clearfy/boot.php
CHANGED
@@ -14,22 +14,22 @@ if( !defined('ABSPATH') ) {
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( defined('
|
18 |
return;
|
19 |
}
|
20 |
|
21 |
-
define('
|
22 |
|
23 |
-
define('
|
24 |
|
25 |
-
define('
|
26 |
-
define('
|
27 |
|
28 |
-
load_plugin_textdomain('
|
29 |
|
30 |
-
require(
|
31 |
-
require(
|
32 |
-
require(
|
33 |
|
34 |
// module provides function only for the admin area
|
35 |
if( is_admin() ) {
|
@@ -38,13 +38,13 @@ if( is_admin() ) {
|
|
38 |
* на все страницы админпанели.
|
39 |
*/
|
40 |
add_action('admin_enqueue_scripts', function ($hook) {
|
41 |
-
wp_enqueue_script('wbcr-factory-clearfy-
|
42 |
'jquery',
|
43 |
-
'wfactory-
|
44 |
-
],
|
45 |
|
46 |
-
require_once
|
47 |
-
$all_options = \WBCR\
|
48 |
|
49 |
if( empty($all_options) ) {
|
50 |
return;
|
@@ -54,9 +54,9 @@ if( is_admin() ) {
|
|
54 |
$formated_options = [];
|
55 |
|
56 |
foreach($all_options as $option) {
|
57 |
-
if( !$allow_print_data && isset($_GET['page']) && $option['page_id'] === $_GET['page'] ) {
|
58 |
-
|
59 |
-
}
|
60 |
|
61 |
$formated_options[] = [
|
62 |
'value' => $option['title'],
|
@@ -68,22 +68,22 @@ if( is_admin() ) {
|
|
68 |
];
|
69 |
}
|
70 |
|
71 |
-
if( !$allow_print_data ) {
|
72 |
-
|
73 |
-
}
|
74 |
|
75 |
-
wp_localize_script('wbcr-factory-clearfy-
|
76 |
});
|
77 |
|
78 |
-
if( defined('
|
79 |
-
require(
|
80 |
-
require(
|
81 |
-
require(
|
82 |
-
require(
|
83 |
|
84 |
-
require(
|
85 |
-
require(
|
86 |
-
require(
|
87 |
-
require(
|
88 |
}
|
89 |
}
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( defined('FACTORY_CLEARFY_240_LOADED') ) {
|
18 |
return;
|
19 |
}
|
20 |
|
21 |
+
define('FACTORY_CLEARFY_240_LOADED', true);
|
22 |
|
23 |
+
define('FACTORY_CLEARFY_240', '2.4.0');
|
24 |
|
25 |
+
define('FACTORY_CLEARFY_240_DIR', dirname(__FILE__));
|
26 |
+
define('FACTORY_CLEARFY_240_URL', plugins_url(null, __FILE__));
|
27 |
|
28 |
+
load_plugin_textdomain('wbcr_factory_clearfy_240', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
29 |
|
30 |
+
require(FACTORY_CLEARFY_240_DIR . '/includes/ajax-handlers.php');
|
31 |
+
require(FACTORY_CLEARFY_240_DIR . '/includes/class-helpers.php');
|
32 |
+
require(FACTORY_CLEARFY_240_DIR . '/includes/class-configurate.php');
|
33 |
|
34 |
// module provides function only for the admin area
|
35 |
if( is_admin() ) {
|
38 |
* на все страницы админпанели.
|
39 |
*/
|
40 |
add_action('admin_enqueue_scripts', function ($hook) {
|
41 |
+
wp_enqueue_script('wbcr-factory-clearfy-240-global', FACTORY_CLEARFY_240_URL . '/assets/js/clearfy-globals.js', [
|
42 |
'jquery',
|
43 |
+
'wfactory-448-core-general'
|
44 |
+
], FACTORY_CLEARFY_240);
|
45 |
|
46 |
+
require_once FACTORY_CLEARFY_240_DIR . '/includes/class-search-options.php';
|
47 |
+
$all_options = \WBCR\Factory_Clearfy_240\Search_Options::get_all_options();
|
48 |
|
49 |
if( empty($all_options) ) {
|
50 |
return;
|
54 |
$formated_options = [];
|
55 |
|
56 |
foreach($all_options as $option) {
|
57 |
+
//if( !$allow_print_data && isset($_GET['page']) && $option['page_id'] === $_GET['page'] ) {
|
58 |
+
//$allow_print_data = true;
|
59 |
+
//}
|
60 |
|
61 |
$formated_options[] = [
|
62 |
'value' => $option['title'],
|
68 |
];
|
69 |
}
|
70 |
|
71 |
+
//if( !$allow_print_data ) {
|
72 |
+
//return;
|
73 |
+
//}
|
74 |
|
75 |
+
wp_localize_script('wbcr-factory-clearfy-240-global', 'wfactory_clearfy_search_options', $formated_options);
|
76 |
});
|
77 |
|
78 |
+
if( defined('FACTORY_PAGES_447_LOADED') ) {
|
79 |
+
require(FACTORY_CLEARFY_240_DIR . '/pages/class-pages.php');
|
80 |
+
require(FACTORY_CLEARFY_240_DIR . '/pages/class-page-more-features.php');
|
81 |
+
require(FACTORY_CLEARFY_240_DIR . '/pages/class-page-license.php');
|
82 |
+
require(FACTORY_CLEARFY_240_DIR . '/pages/class-pages-components.php');
|
83 |
|
84 |
+
require(FACTORY_CLEARFY_240_DIR . '/pages/setup-parts/class-step.php');
|
85 |
+
require(FACTORY_CLEARFY_240_DIR . '/pages/setup-parts/class-step-form.php');
|
86 |
+
require(FACTORY_CLEARFY_240_DIR . '/pages/setup-parts/class-step-custom.php');
|
87 |
+
require(FACTORY_CLEARFY_240_DIR . '/pages/class-page-setup.php');
|
88 |
}
|
89 |
}
|
libs/factory/clearfy/includes/ajax-handlers.php
CHANGED
@@ -15,12 +15,12 @@ if( !defined('ABSPATH') ) {
|
|
15 |
/**
|
16 |
* Обработчик ajax запросов для виджета подписки на новости
|
17 |
*
|
18 |
-
* @param
|
19 |
*
|
20 |
* @since 2.3.0
|
21 |
*
|
22 |
*/
|
23 |
-
function
|
24 |
{
|
25 |
$plugin_name = $plugin_instance->request->post('plugin_name', null, true);
|
26 |
|
@@ -34,11 +34,11 @@ function wbcr_factory_clearfy_237_subscribe($plugin_instance)
|
|
34 |
check_admin_referer("clearfy_subscribe_for_{$plugin_name}");
|
35 |
|
36 |
if( empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
|
37 |
-
wp_send_json_error(['error_message' => __('You did not send your email address or it is incorrect!', '
|
38 |
}
|
39 |
|
40 |
if( empty($group_id) ) {
|
41 |
-
wp_send_json_error(['error_message' => __('Group ID is empty!', '
|
42 |
}
|
43 |
|
44 |
$response = wp_remote_post('https://clearfy.pro/wp-json/mailerlite/v1/subscribe/', [
|
@@ -63,7 +63,7 @@ function wbcr_factory_clearfy_237_subscribe($plugin_instance)
|
|
63 |
wp_send_json_success(['subscribed' => $data['subscribed']]);
|
64 |
}
|
65 |
|
66 |
-
wp_send_json_error(['error_message' => __('Unknown error while trying to subscribe to newsletter.', '
|
67 |
|
68 |
die();
|
69 |
}
|
@@ -71,12 +71,12 @@ function wbcr_factory_clearfy_237_subscribe($plugin_instance)
|
|
71 |
/**
|
72 |
* Обработчик ajax запросов для проверки, активации, деактивации лицензионного ключа
|
73 |
*
|
74 |
-
* @param
|
75 |
*
|
76 |
* @since 2.0.7
|
77 |
*
|
78 |
*/
|
79 |
-
function
|
80 |
{
|
81 |
|
82 |
$plugin_name = $plugin_instance->request->post('plugin_name', null, true);
|
@@ -91,7 +91,7 @@ function wbcr_factory_clearfy_237_check_license($plugin_instance)
|
|
91 |
check_admin_referer("clearfy_activate_license_for_{$plugin_name}");
|
92 |
|
93 |
if( empty($action) || !in_array($action, ['activate', 'deactivate', 'sync', 'unsubscribe']) ) {
|
94 |
-
wp_send_json_error(['error_message' => __('Licensing action not passed or this action is prohibited!', '
|
95 |
die();
|
96 |
}
|
97 |
|
@@ -102,23 +102,23 @@ function wbcr_factory_clearfy_237_check_license($plugin_instance)
|
|
102 |
switch( $action ) {
|
103 |
case 'activate':
|
104 |
if( empty($license_key) || strlen($license_key) > 32 ) {
|
105 |
-
wp_send_json_error(['error_message' => __('License key is empty or license key too long (license key is 32 characters long)', '
|
106 |
} else {
|
107 |
$plugin_instance->premium->activate($license_key);
|
108 |
-
$success_message = __('Your license has been successfully activated', '
|
109 |
}
|
110 |
break;
|
111 |
case 'deactivate':
|
112 |
$plugin_instance->premium->deactivate();
|
113 |
-
$success_message = __('The license is deactivated', '
|
114 |
break;
|
115 |
case 'sync':
|
116 |
$plugin_instance->premium->sync();
|
117 |
-
$success_message = __('The license has been updated', '
|
118 |
break;
|
119 |
case 'unsubscribe':
|
120 |
$plugin_instance->premium->cancel_paid_subscription();
|
121 |
-
$success_message = __('Subscription success cancelled', '
|
122 |
break;
|
123 |
}
|
124 |
} catch( Exception $e ) {
|
15 |
/**
|
16 |
* Обработчик ajax запросов для виджета подписки на новости
|
17 |
*
|
18 |
+
* @param Wbcr_Factory448_Plugin $plugin_instance
|
19 |
*
|
20 |
* @since 2.3.0
|
21 |
*
|
22 |
*/
|
23 |
+
function wbcr_factory_clearfy_240_subscribe($plugin_instance)
|
24 |
{
|
25 |
$plugin_name = $plugin_instance->request->post('plugin_name', null, true);
|
26 |
|
34 |
check_admin_referer("clearfy_subscribe_for_{$plugin_name}");
|
35 |
|
36 |
if( empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
|
37 |
+
wp_send_json_error(['error_message' => __('You did not send your email address or it is incorrect!', 'wbcr_factory_clearfy_240')]);
|
38 |
}
|
39 |
|
40 |
if( empty($group_id) ) {
|
41 |
+
wp_send_json_error(['error_message' => __('Group ID is empty!', 'wbcr_factory_clearfy_240')]);
|
42 |
}
|
43 |
|
44 |
$response = wp_remote_post('https://clearfy.pro/wp-json/mailerlite/v1/subscribe/', [
|
63 |
wp_send_json_success(['subscribed' => $data['subscribed']]);
|
64 |
}
|
65 |
|
66 |
+
wp_send_json_error(['error_message' => __('Unknown error while trying to subscribe to newsletter.', 'wbcr_factory_clearfy_240')]);
|
67 |
|
68 |
die();
|
69 |
}
|
71 |
/**
|
72 |
* Обработчик ajax запросов для проверки, активации, деактивации лицензионного ключа
|
73 |
*
|
74 |
+
* @param Wbcr_Factory448_Plugin $plugin_instance
|
75 |
*
|
76 |
* @since 2.0.7
|
77 |
*
|
78 |
*/
|
79 |
+
function wbcr_factory_clearfy_240_check_license($plugin_instance)
|
80 |
{
|
81 |
|
82 |
$plugin_name = $plugin_instance->request->post('plugin_name', null, true);
|
91 |
check_admin_referer("clearfy_activate_license_for_{$plugin_name}");
|
92 |
|
93 |
if( empty($action) || !in_array($action, ['activate', 'deactivate', 'sync', 'unsubscribe']) ) {
|
94 |
+
wp_send_json_error(['error_message' => __('Licensing action not passed or this action is prohibited!', 'wbcr_factory_clearfy_240')]);
|
95 |
die();
|
96 |
}
|
97 |
|
102 |
switch( $action ) {
|
103 |
case 'activate':
|
104 |
if( empty($license_key) || strlen($license_key) > 32 ) {
|
105 |
+
wp_send_json_error(['error_message' => __('License key is empty or license key too long (license key is 32 characters long)', 'wbcr_factory_clearfy_240')]);
|
106 |
} else {
|
107 |
$plugin_instance->premium->activate($license_key);
|
108 |
+
$success_message = __('Your license has been successfully activated', 'wbcr_factory_clearfy_240');
|
109 |
}
|
110 |
break;
|
111 |
case 'deactivate':
|
112 |
$plugin_instance->premium->deactivate();
|
113 |
+
$success_message = __('The license is deactivated', 'wbcr_factory_clearfy_240');
|
114 |
break;
|
115 |
case 'sync':
|
116 |
$plugin_instance->premium->sync();
|
117 |
+
$success_message = __('The license has been updated', 'wbcr_factory_clearfy_240');
|
118 |
break;
|
119 |
case 'unsubscribe':
|
120 |
$plugin_instance->premium->cancel_paid_subscription();
|
121 |
+
$success_message = __('Subscription success cancelled', 'wbcr_factory_clearfy_240');
|
122 |
break;
|
123 |
}
|
124 |
} catch( Exception $e ) {
|
libs/factory/clearfy/includes/class-configurate.php
CHANGED
@@ -13,12 +13,12 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
13 |
* @copyright (c) 2018, Webcraftic Ltd
|
14 |
*
|
15 |
*/
|
16 |
-
abstract class
|
17 |
|
18 |
/**
|
19 |
-
* @param
|
20 |
*/
|
21 |
-
public function __construct(
|
22 |
$this->plugin = $plugin;
|
23 |
$this->registerActionsAndFilters();
|
24 |
}
|
13 |
* @copyright (c) 2018, Webcraftic Ltd
|
14 |
*
|
15 |
*/
|
16 |
+
abstract class Wbcr_FactoryClearfy240_Configurate {
|
17 |
|
18 |
/**
|
19 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
20 |
*/
|
21 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
22 |
$this->plugin = $plugin;
|
23 |
$this->registerActionsAndFilters();
|
24 |
}
|
libs/factory/clearfy/includes/class-helpers.php
CHANGED
@@ -14,7 +14,7 @@ if( !defined('ABSPATH') ) {
|
|
14 |
* @copyright (c) 2018, Webcraftic Ltd
|
15 |
*
|
16 |
*/
|
17 |
-
class
|
18 |
|
19 |
/**
|
20 |
* Recursive sanitation for an array
|
14 |
* @copyright (c) 2018, Webcraftic Ltd
|
15 |
*
|
16 |
*/
|
17 |
+
class WbcrFactoryClearfy240_Helpers {
|
18 |
|
19 |
/**
|
20 |
* Recursive sanitation for an array
|
libs/factory/clearfy/includes/class-search-options.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
/**
|
6 |
* Class Search options
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_Clearfy_240;
|
4 |
|
5 |
/**
|
6 |
* Class Search options
|
libs/factory/clearfy/langs/{wbcr_factory_clearfy_237-ru_RU.mo → wbcr_factory_clearfy_240-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/clearfy/langs/{wbcr_factory_clearfy_237-ru_RU.po → wbcr_factory_clearfy_240-ru_RU.po}
RENAMED
File without changes
|
libs/factory/clearfy/pages/class-page-license.php
CHANGED
@@ -11,7 +11,7 @@ if( !defined('ABSPATH') ) {
|
|
11 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
12 |
* @since 2.0.7
|
13 |
*/
|
14 |
-
class
|
15 |
|
16 |
/**
|
17 |
* {@inheritdoc}
|
@@ -80,7 +80,7 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
80 |
|
81 |
/**
|
82 |
* @since 2.0.7
|
83 |
-
* @var \WBCR\
|
84 |
*/
|
85 |
protected $premium;
|
86 |
|
@@ -98,7 +98,7 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
98 |
|
99 |
/**
|
100 |
* @since 2.0.7
|
101 |
-
* @var \WBCR\
|
102 |
*/
|
103 |
protected $premium_license;
|
104 |
|
@@ -107,9 +107,9 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
107 |
|
108 |
/**
|
109 |
* {@inheritdoc}
|
110 |
-
* @param
|
111 |
*/
|
112 |
-
public function __construct(
|
113 |
{
|
114 |
$this->plugin = $plugin;
|
115 |
|
@@ -136,8 +136,8 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
136 |
{
|
137 |
parent::assets($scripts, $styles);
|
138 |
|
139 |
-
$this->styles->add(
|
140 |
-
$this->scripts->add(
|
141 |
}
|
142 |
|
143 |
/**
|
@@ -147,7 +147,7 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
147 |
*/
|
148 |
public function ajax_handler()
|
149 |
{
|
150 |
-
|
151 |
}
|
152 |
|
153 |
/**
|
@@ -157,7 +157,7 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
157 |
{
|
158 |
?>
|
159 |
<div id="wcl-license-wrapper"
|
160 |
-
data-loader="<?php echo
|
161 |
data-plugin-name="<?php echo esc_attr($this->plugin_name); ?>"
|
162 |
data-nonce="<?php echo wp_create_nonce("clearfy_activate_license_for_{$this->plugin_name}") ?>">
|
163 |
<?php $this->show_license_form(); ?>
|
@@ -263,11 +263,11 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
263 |
if( $this->is_premium ):
|
264 |
?>
|
265 |
<p style="margin-top: 10px;">
|
266 |
-
<?php printf(__('<a href="%s" target="_blank" rel="noopener">Lean more</a> about the premium version and get the license key to activate it now!', '
|
267 |
</p>
|
268 |
<?php else: ?>
|
269 |
<p style="margin-top: 10px;">
|
270 |
-
<?php printf(__('Can’t find your key? Go to <a href="%s" target="_blank" rel="noopener">this page</a> and login using the e-mail address associated with your purchase.', '
|
271 |
</p>
|
272 |
<?php endif;
|
273 |
}
|
@@ -279,16 +279,16 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
279 |
{
|
280 |
?>
|
281 |
<div id="license-manager"
|
282 |
-
class="factory-bootstrap-
|
283 |
<div>
|
284 |
-
<h3><?php printf(__('Activate %s', '
|
285 |
<?php echo $this->get_plan_description() ?>
|
286 |
</div>
|
287 |
<br>
|
288 |
<?php if( is_wp_error($notice) ) : ?>
|
289 |
<div class="license-message <?= $this->get_license_type() ?>-license-message">
|
290 |
<div class="alert <?php echo esc_attr($notice->get_error_code()); ?>">
|
291 |
-
<h4 class="alert-heading"><?php _e($notice->get_error_message(), '
|
292 |
</div>
|
293 |
</div>
|
294 |
<?php endif; ?>
|
@@ -298,20 +298,20 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
298 |
<a href="<?php echo $this->plugin->get_support()->get_pricing_url(true, 'license_page'); ?>"
|
299 |
class="purchase-premium" target="_blank" rel="noopener">
|
300 |
<span class="btn btn-gold btn-inner-wrap">
|
301 |
-
<?php _e('Upgrade to Premium', '
|
302 |
</span>
|
303 |
</a>
|
304 |
-
<p><?php printf(__('Your current license for %1$s:', '
|
305 |
<?php endif; ?>
|
306 |
<div class="license-details-block <?= $this->get_license_type() ?>-details-block">
|
307 |
<?php if( $this->is_premium ): ?>
|
308 |
<a data-action="deactivate" href="#"
|
309 |
class="btn btn-default btn-small license-delete-button wcl-control-btn">
|
310 |
-
<?php _e('Delete Key', '
|
311 |
</a>
|
312 |
<a data-action="sync" href="#"
|
313 |
class="btn btn-default btn-small license-synchronization-button wcl-control-btn">
|
314 |
-
<?php _e('Synchronization', '
|
315 |
</a>
|
316 |
<?php endif; ?>
|
317 |
<h3>
|
@@ -330,19 +330,19 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
330 |
<?php endif; ?>
|
331 |
<div class="license-key-description">
|
332 |
<?php if( !$this->is_premium ): ?>
|
333 |
-
<p><?php _e('Public License is a GPLv3 compatible license allowing you to change and use this version of the plugin for free. Please keep in mind this license covers only free edition of the plugin. Premium versions are distributed with other type of a license.', '
|
334 |
<?php else: ?>
|
335 |
-
<p><?php _e('Сommercial license, only to the premium add-on to this free plugin. You cannot distribute or modify the premium add-on. But free plugin is a GPLv3 compatible license allowing you to change and use this version of the plugin for free.', '
|
336 |
<?php endif; ?>
|
337 |
<?php if( $this->is_premium && $this->premium_has_subscription ): ?>
|
338 |
<p class="activate-trial-hint">
|
339 |
-
<?php _e('You use a paid subscription for the plugin updates. In case you don’t want to receive paid updates, please, click <a data-action="unsubscribe" class="wcl-control-btn" href="#">cancel subscription</a>', '
|
340 |
</p>
|
341 |
<?php endif; ?>
|
342 |
|
343 |
<?php if( $this->get_license_type() == 'trial' ): ?>
|
344 |
<p class="activate-error-hint">
|
345 |
-
<?php printf(__('Your license has expired, please extend the license to get updates and support.', '
|
346 |
</p>
|
347 |
<?php endif; ?>
|
348 |
</div>
|
@@ -350,19 +350,19 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
350 |
<tr>
|
351 |
<!--<td class="license-param license-param-domain">
|
352 |
<span class="license-value"><?php echo esc_attr($_SERVER['SERVER_NAME']); ?></span>
|
353 |
-
<span class="license-value-name"><?php _e('domain', '
|
354 |
</td>-->
|
355 |
<td class="license-param license-param-days">
|
356 |
<span class="license-value"><?= $this->get_plan() ?></span>
|
357 |
-
<span class="license-value-name"><?php _e('plan', '
|
358 |
</td>
|
359 |
<?php if( $this->is_premium ) : ?>
|
360 |
<td class="license-param license-param-sites">
|
361 |
<span class="license-value">
|
362 |
<?php echo esc_attr($this->premium_license->get_count_active_sites()); ?>
|
363 |
-
<?php _e('of', '
|
364 |
<?php echo esc_attr($this->premium_license->get_sites_quota()); ?></span>
|
365 |
-
<span class="license-value-name"><?php _e('active sites', '
|
366 |
</td>
|
367 |
<?php endif; ?>
|
368 |
<td class="license-param license-param-version">
|
@@ -372,8 +372,8 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
372 |
<?php if( $this->is_premium ): ?>
|
373 |
<td class="license-param license-param-days">
|
374 |
<?php if( $this->get_license_type() == 'trial' ): ?>
|
375 |
-
<span class="license-value"><?php _e('EXPIRED!', '
|
376 |
-
<span class="license-value-name"><?php _e('please update the key', '
|
377 |
<?php else: ?>
|
378 |
<span class="license-value">
|
379 |
<?php
|
@@ -383,9 +383,9 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
383 |
echo $this->get_expiration_days();
|
384 |
}
|
385 |
?>
|
386 |
-
<small> <?php _e('day(s)', '
|
387 |
</span>
|
388 |
-
<span class="license-value-name"><?php _e('remained', '
|
389 |
<?php endif; ?>
|
390 |
</td>
|
391 |
<?php endif; ?>
|
@@ -396,14 +396,14 @@ class Wbcr_FactoryClearfy237_LicensePage extends Wbcr_FactoryClearfy237_PageBase
|
|
396 |
<div class="license-input">
|
397 |
<form action="" method="post">
|
398 |
<?php if($this->is_premium): ?>
|
399 |
-
<p><?php _e('Have a key to activate the premium version? Paste it here:', '
|
400 |
<?php else: ?>
|
401 |
-
<p><?php _e('Have a key to activate the plugin? Paste it here:', '
|
402 |
<p>
|
403 |
<?php endif; ?>
|
404 |
<button data-action="activate" class="btn btn-default wcl-control-btn" type="button"
|
405 |
id="license-submit">
|
406 |
-
<?php _e('Submit Key', '
|
407 |
</button>
|
408 |
<div class="license-key-wrap">
|
409 |
<input type="text" id="license-key" name="licensekey" value="" class="form-control"/>
|
11 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
12 |
* @since 2.0.7
|
13 |
*/
|
14 |
+
class Wbcr_FactoryClearfy240_LicensePage extends Wbcr_FactoryClearfy240_PageBase {
|
15 |
|
16 |
/**
|
17 |
* {@inheritdoc}
|
80 |
|
81 |
/**
|
82 |
* @since 2.0.7
|
83 |
+
* @var \WBCR\Factory_448\Premium\Provider
|
84 |
*/
|
85 |
protected $premium;
|
86 |
|
98 |
|
99 |
/**
|
100 |
* @since 2.0.7
|
101 |
+
* @var \WBCR\Factory_448\Premium\Interfaces\License
|
102 |
*/
|
103 |
protected $premium_license;
|
104 |
|
107 |
|
108 |
/**
|
109 |
* {@inheritdoc}
|
110 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
111 |
*/
|
112 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
113 |
{
|
114 |
$this->plugin = $plugin;
|
115 |
|
136 |
{
|
137 |
parent::assets($scripts, $styles);
|
138 |
|
139 |
+
$this->styles->add(FACTORY_CLEARFY_240_URL . '/assets/css/license-manager.css');
|
140 |
+
$this->scripts->add(FACTORY_CLEARFY_240_URL . '/assets/js/clearfy-license-manager.js');
|
141 |
}
|
142 |
|
143 |
/**
|
147 |
*/
|
148 |
public function ajax_handler()
|
149 |
{
|
150 |
+
wbcr_factory_clearfy_240_check_license($this->plugin);
|
151 |
}
|
152 |
|
153 |
/**
|
157 |
{
|
158 |
?>
|
159 |
<div id="wcl-license-wrapper"
|
160 |
+
data-loader="<?php echo FACTORY_CLEARFY_240_URL . '/assets/img/loader.gif'; ?>"
|
161 |
data-plugin-name="<?php echo esc_attr($this->plugin_name); ?>"
|
162 |
data-nonce="<?php echo wp_create_nonce("clearfy_activate_license_for_{$this->plugin_name}") ?>">
|
163 |
<?php $this->show_license_form(); ?>
|
263 |
if( $this->is_premium ):
|
264 |
?>
|
265 |
<p style="margin-top: 10px;">
|
266 |
+
<?php printf(__('<a href="%s" target="_blank" rel="noopener">Lean more</a> about the premium version and get the license key to activate it now!', 'wbcr_factory_clearfy_240'), $this->plugin->get_support()->get_pricing_url(true, 'license_page')); ?>
|
267 |
</p>
|
268 |
<?php else: ?>
|
269 |
<p style="margin-top: 10px;">
|
270 |
+
<?php printf(__('Can’t find your key? Go to <a href="%s" target="_blank" rel="noopener">this page</a> and login using the e-mail address associated with your purchase.', 'wbcr_factory_clearfy_240'), $this->plugin->get_support()->get_contacts_url(true, 'license_page')) ?>
|
271 |
</p>
|
272 |
<?php endif;
|
273 |
}
|
279 |
{
|
280 |
?>
|
281 |
<div id="license-manager"
|
282 |
+
class="factory-bootstrap-448 onp-page-wrap <?= $this->get_license_type() ?>-license-manager-content">
|
283 |
<div>
|
284 |
+
<h3><?php printf(__('Activate %s', 'wbcr_factory_clearfy_240'), $this->plan_name) ?></h3>
|
285 |
<?php echo $this->get_plan_description() ?>
|
286 |
</div>
|
287 |
<br>
|
288 |
<?php if( is_wp_error($notice) ) : ?>
|
289 |
<div class="license-message <?= $this->get_license_type() ?>-license-message">
|
290 |
<div class="alert <?php echo esc_attr($notice->get_error_code()); ?>">
|
291 |
+
<h4 class="alert-heading"><?php _e($notice->get_error_message(), 'wbcr_factory_clearfy_240') ?></h4>
|
292 |
</div>
|
293 |
</div>
|
294 |
<?php endif; ?>
|
298 |
<a href="<?php echo $this->plugin->get_support()->get_pricing_url(true, 'license_page'); ?>"
|
299 |
class="purchase-premium" target="_blank" rel="noopener">
|
300 |
<span class="btn btn-gold btn-inner-wrap">
|
301 |
+
<?php _e('Upgrade to Premium', 'wbcr_factory_clearfy_240') ?>
|
302 |
</span>
|
303 |
</a>
|
304 |
+
<p><?php printf(__('Your current license for %1$s:', 'wbcr_factory_clearfy_240'), $this->plugin->getPluginTitle()) ?></p>
|
305 |
<?php endif; ?>
|
306 |
<div class="license-details-block <?= $this->get_license_type() ?>-details-block">
|
307 |
<?php if( $this->is_premium ): ?>
|
308 |
<a data-action="deactivate" href="#"
|
309 |
class="btn btn-default btn-small license-delete-button wcl-control-btn">
|
310 |
+
<?php _e('Delete Key', 'wbcr_factory_clearfy_240') ?>
|
311 |
</a>
|
312 |
<a data-action="sync" href="#"
|
313 |
class="btn btn-default btn-small license-synchronization-button wcl-control-btn">
|
314 |
+
<?php _e('Synchronization', 'wbcr_factory_clearfy_240') ?>
|
315 |
</a>
|
316 |
<?php endif; ?>
|
317 |
<h3>
|
330 |
<?php endif; ?>
|
331 |
<div class="license-key-description">
|
332 |
<?php if( !$this->is_premium ): ?>
|
333 |
+
<p><?php _e('Public License is a GPLv3 compatible license allowing you to change and use this version of the plugin for free. Please keep in mind this license covers only free edition of the plugin. Premium versions are distributed with other type of a license.', 'wbcr_factory_clearfy_240') ?></p>
|
334 |
<?php else: ?>
|
335 |
+
<p><?php _e('Сommercial license, only to the premium add-on to this free plugin. You cannot distribute or modify the premium add-on. But free plugin is a GPLv3 compatible license allowing you to change and use this version of the plugin for free.', 'wbcr_factory_clearfy_240') ?></p>
|
336 |
<?php endif; ?>
|
337 |
<?php if( $this->is_premium && $this->premium_has_subscription ): ?>
|
338 |
<p class="activate-trial-hint">
|
339 |
+
<?php _e('You use a paid subscription for the plugin updates. In case you don’t want to receive paid updates, please, click <a data-action="unsubscribe" class="wcl-control-btn" href="#">cancel subscription</a>', 'wbcr_factory_clearfy_240') ?>
|
340 |
</p>
|
341 |
<?php endif; ?>
|
342 |
|
343 |
<?php if( $this->get_license_type() == 'trial' ): ?>
|
344 |
<p class="activate-error-hint">
|
345 |
+
<?php printf(__('Your license has expired, please extend the license to get updates and support.', 'wbcr_factory_clearfy_240'), '') ?>
|
346 |
</p>
|
347 |
<?php endif; ?>
|
348 |
</div>
|
350 |
<tr>
|
351 |
<!--<td class="license-param license-param-domain">
|
352 |
<span class="license-value"><?php echo esc_attr($_SERVER['SERVER_NAME']); ?></span>
|
353 |
+
<span class="license-value-name"><?php _e('domain', 'wbcr_factory_clearfy_240') ?></span>
|
354 |
</td>-->
|
355 |
<td class="license-param license-param-days">
|
356 |
<span class="license-value"><?= $this->get_plan() ?></span>
|
357 |
+
<span class="license-value-name"><?php _e('plan', 'wbcr_factory_clearfy_240') ?></span>
|
358 |
</td>
|
359 |
<?php if( $this->is_premium ) : ?>
|
360 |
<td class="license-param license-param-sites">
|
361 |
<span class="license-value">
|
362 |
<?php echo esc_attr($this->premium_license->get_count_active_sites()); ?>
|
363 |
+
<?php _e('of', 'wbcr_factory_clearfy_240') ?>
|
364 |
<?php echo esc_attr($this->premium_license->get_sites_quota()); ?></span>
|
365 |
+
<span class="license-value-name"><?php _e('active sites', 'wbcr_factory_clearfy_240') ?></span>
|
366 |
</td>
|
367 |
<?php endif; ?>
|
368 |
<td class="license-param license-param-version">
|
372 |
<?php if( $this->is_premium ): ?>
|
373 |
<td class="license-param license-param-days">
|
374 |
<?php if( $this->get_license_type() == 'trial' ): ?>
|
375 |
+
<span class="license-value"><?php _e('EXPIRED!', 'wbcr_factory_clearfy_240') ?></span>
|
376 |
+
<span class="license-value-name"><?php _e('please update the key', 'wbcr_factory_clearfy_240') ?></span>
|
377 |
<?php else: ?>
|
378 |
<span class="license-value">
|
379 |
<?php
|
383 |
echo $this->get_expiration_days();
|
384 |
}
|
385 |
?>
|
386 |
+
<small> <?php _e('day(s)', 'wbcr_factory_clearfy_240') ?></small>
|
387 |
</span>
|
388 |
+
<span class="license-value-name"><?php _e('remained', 'wbcr_factory_clearfy_240') ?></span>
|
389 |
<?php endif; ?>
|
390 |
</td>
|
391 |
<?php endif; ?>
|
396 |
<div class="license-input">
|
397 |
<form action="" method="post">
|
398 |
<?php if($this->is_premium): ?>
|
399 |
+
<p><?php _e('Have a key to activate the premium version? Paste it here:', 'wbcr_factory_clearfy_240') ?><p>
|
400 |
<?php else: ?>
|
401 |
+
<p><?php _e('Have a key to activate the plugin? Paste it here:', 'wbcr_factory_clearfy_240') ?>
|
402 |
<p>
|
403 |
<?php endif; ?>
|
404 |
<button data-action="activate" class="btn btn-default wcl-control-btn" type="button"
|
405 |
id="license-submit">
|
406 |
+
<?php _e('Submit Key', 'wbcr_factory_clearfy_240') ?>
|
407 |
</button>
|
408 |
<div class="license-key-wrap">
|
409 |
<input type="text" id="license-key" name="licensekey" value="" class="form-control"/>
|
libs/factory/clearfy/pages/class-page-more-features.php
CHANGED
@@ -15,7 +15,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
15 |
}
|
16 |
|
17 |
|
18 |
-
class
|
19 |
|
20 |
/**
|
21 |
* {@inheritDoc}
|
@@ -60,8 +60,8 @@ class Wbcr_FactoryClearfy237_MoreFeaturesPage extends Wbcr_FactoryPages445_Impre
|
|
60 |
*/
|
61 |
public $internal = true;
|
62 |
|
63 |
-
public function __construct(
|
64 |
-
$this->menu_title = __( 'More features (<b>free</b>)', '
|
65 |
|
66 |
parent::__construct( $plugin );
|
67 |
|
@@ -74,7 +74,7 @@ class Wbcr_FactoryClearfy237_MoreFeaturesPage extends Wbcr_FactoryPages445_Impre
|
|
74 |
* @return string
|
75 |
*/
|
76 |
public function getPageTitle() {
|
77 |
-
return __( 'More features', '
|
78 |
}
|
79 |
|
80 |
/**
|
@@ -88,66 +88,66 @@ class Wbcr_FactoryClearfy237_MoreFeaturesPage extends Wbcr_FactoryPages445_Impre
|
|
88 |
<div class="col-sm-4">
|
89 |
<div class="wbcr-factory-feature-box">
|
90 |
<span class="dashicons dashicons-yes"></span>
|
91 |
-
<h3><?php _e( 'Code cleaning', '
|
92 |
-
<p><?php _e( 'Clears the source code of the page from unused code.', '
|
93 |
</div>
|
94 |
</div>
|
95 |
<div class="col-sm-4">
|
96 |
<div class="wbcr-factory-feature-box">
|
97 |
<span class="dashicons dashicons-chart-bar"></span>
|
98 |
-
<h3><?php _e( 'Improve SEO', '
|
99 |
-
<p><?php _e( 'Removes duplicate pages, closes external links, changes the headers of the server.', '
|
100 |
</div>
|
101 |
</div>
|
102 |
<div class="col-sm-4">
|
103 |
<div class="wbcr-factory-feature-box">
|
104 |
<span class="dashicons dashicons-shield-alt"></span>
|
105 |
-
<h3><?php _e( 'Site protection', '
|
106 |
-
<p><?php _e( 'Enables and disables features that improve the protection of your site.', '
|
107 |
</div>
|
108 |
</div>
|
109 |
<div class="col-sm-4">
|
110 |
<div class="wbcr-factory-feature-box">
|
111 |
<span class="dashicons dashicons-welcome-comments"></span>
|
112 |
-
<h3><?php _e( 'Disable comments', '
|
113 |
-
<p><?php _e( 'Disables comments on the entire site or on specific pages.', '
|
114 |
</div>
|
115 |
</div>
|
116 |
<div class="col-sm-4">
|
117 |
<div class="wbcr-factory-feature-box">
|
118 |
<span class="dashicons dashicons-update"></span>
|
119 |
-
<h3><?php _e( 'Manage updates', '
|
120 |
<p><?php _e( 'Enables or disables automatically updates for plugins, themes and core. It is also possible
|
121 |
-
to disable all updates.', '
|
122 |
</div>
|
123 |
</div>
|
124 |
<div class="col-sm-4">
|
125 |
<div class="wbcr-factory-feature-box">
|
126 |
<span class="dashicons dashicons-admin-plugins"></span>
|
127 |
-
<h3><?php _e( 'Manage widgets', '
|
128 |
-
<p><?php _e( 'Allows you to remove unused widgets.', '
|
129 |
</div>
|
130 |
</div>
|
131 |
<div class="col-sm-4">
|
132 |
<div class="wbcr-factory-feature-box">
|
133 |
<span class="dashicons dashicons-dashboard"></span>
|
134 |
-
<h3><?php _e( 'Speed Optimization', '
|
135 |
-
<p><?php _e( 'Increases performance by disabling unused functions and reducing the number of requests.', '
|
136 |
</div>
|
137 |
</div>
|
138 |
<div class="col-sm-4">
|
139 |
<div class="wbcr-factory-feature-box">
|
140 |
<span class="dashicons dashicons-visibility"></span>
|
141 |
-
<h3><?php _e( 'Site privacy', '
|
142 |
<p><?php _e( 'Allows you to hide the version of the site and plugins. Allows you to hide your
|
143 |
-
WordPress.', '
|
144 |
</div>
|
145 |
</div>
|
146 |
<div class="col-sm-4">
|
147 |
<div class="wbcr-factory-feature-box">
|
148 |
<span class="dashicons dashicons-admin-settings"></span>
|
149 |
-
<h3><?php _e( 'Easy setup', '
|
150 |
-
<p><?php _e( 'In quick mode, you can easily configure the plugin according to your needs.', '
|
151 |
</div>
|
152 |
</div>
|
153 |
</div>
|
@@ -161,7 +161,7 @@ class Wbcr_FactoryClearfy237_MoreFeaturesPage extends Wbcr_FactoryPages445_Impre
|
|
161 |
$url .= '?utm_source=wordpress.org&utm_campaign=' . $this->plugin->getPluginName();
|
162 |
?>
|
163 |
<a href="<?= $url ?>" class="wbcr-factory-premium-button" target="_blank">
|
164 |
-
<?php _e( 'Get the ultimate plugin 100% FREE', '
|
165 |
</a>
|
166 |
</div>
|
167 |
<?php
|
15 |
}
|
16 |
|
17 |
|
18 |
+
class Wbcr_FactoryClearfy240_MoreFeaturesPage extends Wbcr_FactoryPages447_ImpressiveThemplate {
|
19 |
|
20 |
/**
|
21 |
* {@inheritDoc}
|
60 |
*/
|
61 |
public $internal = true;
|
62 |
|
63 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
64 |
+
$this->menu_title = __( 'More features (<b>free</b>)', 'wbcr_factory_clearfy_240' );
|
65 |
|
66 |
parent::__construct( $plugin );
|
67 |
|
74 |
* @return string
|
75 |
*/
|
76 |
public function getPageTitle() {
|
77 |
+
return __( 'More features', 'wbcr_factory_clearfy_240' );
|
78 |
}
|
79 |
|
80 |
/**
|
88 |
<div class="col-sm-4">
|
89 |
<div class="wbcr-factory-feature-box">
|
90 |
<span class="dashicons dashicons-yes"></span>
|
91 |
+
<h3><?php _e( 'Code cleaning', 'wbcr_factory_clearfy_240' ) ?></h3>
|
92 |
+
<p><?php _e( 'Clears the source code of the page from unused code.', 'wbcr_factory_clearfy_240' ) ?></p>
|
93 |
</div>
|
94 |
</div>
|
95 |
<div class="col-sm-4">
|
96 |
<div class="wbcr-factory-feature-box">
|
97 |
<span class="dashicons dashicons-chart-bar"></span>
|
98 |
+
<h3><?php _e( 'Improve SEO', 'wbcr_factory_clearfy_240' ) ?></h3>
|
99 |
+
<p><?php _e( 'Removes duplicate pages, closes external links, changes the headers of the server.', 'wbcr_factory_clearfy_240' ) ?></p>
|
100 |
</div>
|
101 |
</div>
|
102 |
<div class="col-sm-4">
|
103 |
<div class="wbcr-factory-feature-box">
|
104 |
<span class="dashicons dashicons-shield-alt"></span>
|
105 |
+
<h3><?php _e( 'Site protection', 'wbcr_factory_clearfy_240' ) ?></h3>
|
106 |
+
<p><?php _e( 'Enables and disables features that improve the protection of your site.', 'wbcr_factory_clearfy_240' ) ?></p>
|
107 |
</div>
|
108 |
</div>
|
109 |
<div class="col-sm-4">
|
110 |
<div class="wbcr-factory-feature-box">
|
111 |
<span class="dashicons dashicons-welcome-comments"></span>
|
112 |
+
<h3><?php _e( 'Disable comments', 'wbcr_factory_clearfy_240' ) ?></h3>
|
113 |
+
<p><?php _e( 'Disables comments on the entire site or on specific pages.', 'wbcr_factory_clearfy_240' ) ?></p>
|
114 |
</div>
|
115 |
</div>
|
116 |
<div class="col-sm-4">
|
117 |
<div class="wbcr-factory-feature-box">
|
118 |
<span class="dashicons dashicons-update"></span>
|
119 |
+
<h3><?php _e( 'Manage updates', 'wbcr_factory_clearfy_240' ) ?></h3>
|
120 |
<p><?php _e( 'Enables or disables automatically updates for plugins, themes and core. It is also possible
|
121 |
+
to disable all updates.', 'wbcr_factory_clearfy_240' ) ?></p>
|
122 |
</div>
|
123 |
</div>
|
124 |
<div class="col-sm-4">
|
125 |
<div class="wbcr-factory-feature-box">
|
126 |
<span class="dashicons dashicons-admin-plugins"></span>
|
127 |
+
<h3><?php _e( 'Manage widgets', 'wbcr_factory_clearfy_240' ) ?></h3>
|
128 |
+
<p><?php _e( 'Allows you to remove unused widgets.', 'wbcr_factory_clearfy_240' ) ?></p>
|
129 |
</div>
|
130 |
</div>
|
131 |
<div class="col-sm-4">
|
132 |
<div class="wbcr-factory-feature-box">
|
133 |
<span class="dashicons dashicons-dashboard"></span>
|
134 |
+
<h3><?php _e( 'Speed Optimization', 'wbcr_factory_clearfy_240' ) ?></h3>
|
135 |
+
<p><?php _e( 'Increases performance by disabling unused functions and reducing the number of requests.', 'wbcr_factory_clearfy_240' ) ?></p>
|
136 |
</div>
|
137 |
</div>
|
138 |
<div class="col-sm-4">
|
139 |
<div class="wbcr-factory-feature-box">
|
140 |
<span class="dashicons dashicons-visibility"></span>
|
141 |
+
<h3><?php _e( 'Site privacy', 'wbcr_factory_clearfy_240' ) ?></h3>
|
142 |
<p><?php _e( 'Allows you to hide the version of the site and plugins. Allows you to hide your
|
143 |
+
WordPress.', 'wbcr_factory_clearfy_240' ) ?></p>
|
144 |
</div>
|
145 |
</div>
|
146 |
<div class="col-sm-4">
|
147 |
<div class="wbcr-factory-feature-box">
|
148 |
<span class="dashicons dashicons-admin-settings"></span>
|
149 |
+
<h3><?php _e( 'Easy setup', 'wbcr_factory_clearfy_240' ) ?></h3>
|
150 |
+
<p><?php _e( 'In quick mode, you can easily configure the plugin according to your needs.', 'wbcr_factory_clearfy_240' ) ?></p>
|
151 |
</div>
|
152 |
</div>
|
153 |
</div>
|
161 |
$url .= '?utm_source=wordpress.org&utm_campaign=' . $this->plugin->getPluginName();
|
162 |
?>
|
163 |
<a href="<?= $url ?>" class="wbcr-factory-premium-button" target="_blank">
|
164 |
+
<?php _e( 'Get the ultimate plugin 100% FREE', 'wbcr_factory_clearfy_240' ) ?>
|
165 |
</a>
|
166 |
</div>
|
167 |
<?php
|
libs/factory/clearfy/pages/class-page-setup.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if( !defined('ABSPATH') ) {
|
@@ -10,15 +10,15 @@ if( !defined('ABSPATH') ) {
|
|
10 |
/**
|
11 |
* Класс страницы, которая реализует функции мастера установки.
|
12 |
*
|
13 |
-
* Этот класс унаследован от стандартного шаблона страницы \
|
14 |
* поэтому все его инструменты могут быть применены и в этом классе. Но вы должны учитывать, что
|
15 |
* поведение экшенов страницы было изменено. В данной реализации экшены используется для пагинации шагов.
|
16 |
*
|
17 |
-
* @package WBCR\
|
18 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
19 |
* @since 2.2.2
|
20 |
*/
|
21 |
-
class Setup extends \
|
22 |
|
23 |
const DEFAULT_STEP = 'step0';
|
24 |
|
@@ -68,20 +68,20 @@ class Setup extends \Wbcr_FactoryPages445_ImpressiveThemplate {
|
|
68 |
private $steps = [];
|
69 |
|
70 |
/**
|
71 |
-
* @param \
|
72 |
*/
|
73 |
-
public function __construct(\
|
74 |
{
|
75 |
$this->id = 'setup';
|
76 |
|
77 |
-
$this->menu_title = __('Setup master', '
|
78 |
-
$this->page_menu_short_description = __('Setup master', '
|
79 |
parent::__construct($plugin);
|
80 |
}
|
81 |
|
82 |
public function getPageTitle()
|
83 |
{
|
84 |
-
return __('Setup', '
|
85 |
}
|
86 |
|
87 |
public function get_close_wizard_url()
|
@@ -135,18 +135,18 @@ class Setup extends \Wbcr_FactoryPages445_ImpressiveThemplate {
|
|
135 |
/**
|
136 |
* Requests assets (js and css) for the page.
|
137 |
*
|
138 |
-
* @param \
|
139 |
-
* @param \
|
140 |
*
|
141 |
* @return void
|
142 |
-
* @see
|
143 |
*
|
144 |
*/
|
145 |
public function assets($scripts, $styles)
|
146 |
{
|
147 |
parent::assets($scripts, $styles);
|
148 |
|
149 |
-
$this->styles->add(
|
150 |
|
151 |
// Require step assets
|
152 |
if( isset($_GET['action']) && false !== strpos($_GET['action'], 'step') && isset($this->steps[$_GET['action']]) ) {
|
@@ -163,8 +163,8 @@ class Setup extends \Wbcr_FactoryPages445_ImpressiveThemplate {
|
|
163 |
protected function showPage($content = null)
|
164 |
{
|
165 |
?>
|
166 |
-
<div class="w-factory-clearfy-
|
167 |
-
<ol class="w-factory-clearfy-
|
168 |
<?php foreach($this->steps as $step): ?>
|
169 |
<?php if( self::DEFAULT_STEP === $step->get_id() ) {
|
170 |
continue;
|
@@ -172,11 +172,11 @@ class Setup extends \Wbcr_FactoryPages445_ImpressiveThemplate {
|
|
172 |
<li <?php if($this->current_step === $step->get_id()): ?>class="active"<?php endif; ?>><?php echo $step->get_title(); ?></li>
|
173 |
<?php endforeach; ?>
|
174 |
</ol>
|
175 |
-
<div class="w-factory-clearfy-
|
176 |
<?php echo $content; ?>
|
177 |
</div>
|
178 |
-
<a class="w-factory-clearfy-
|
179 |
-
<?php _e('Not now', '
|
180 |
</a>
|
181 |
</div>
|
182 |
<?php
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\FactoryClearfy240\Pages;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if( !defined('ABSPATH') ) {
|
10 |
/**
|
11 |
* Класс страницы, которая реализует функции мастера установки.
|
12 |
*
|
13 |
+
* Этот класс унаследован от стандартного шаблона страницы \Wbcr_FactoryPages447_ImpressiveThemplate,
|
14 |
* поэтому все его инструменты могут быть применены и в этом классе. Но вы должны учитывать, что
|
15 |
* поведение экшенов страницы было изменено. В данной реализации экшены используется для пагинации шагов.
|
16 |
*
|
17 |
+
* @package WBCR\FactoryClearfy240\Pages
|
18 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
19 |
* @since 2.2.2
|
20 |
*/
|
21 |
+
class Setup extends \Wbcr_FactoryPages447_ImpressiveThemplate {
|
22 |
|
23 |
const DEFAULT_STEP = 'step0';
|
24 |
|
68 |
private $steps = [];
|
69 |
|
70 |
/**
|
71 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
72 |
*/
|
73 |
+
public function __construct(\Wbcr_Factory448_Plugin $plugin)
|
74 |
{
|
75 |
$this->id = 'setup';
|
76 |
|
77 |
+
$this->menu_title = __('Setup master', 'wbcr_factory_clearfy_240');
|
78 |
+
$this->page_menu_short_description = __('Setup master', 'wbcr_factory_clearfy_240');
|
79 |
parent::__construct($plugin);
|
80 |
}
|
81 |
|
82 |
public function getPageTitle()
|
83 |
{
|
84 |
+
return __('Setup', 'wbcr_factory_clearfy_240');
|
85 |
}
|
86 |
|
87 |
public function get_close_wizard_url()
|
135 |
/**
|
136 |
* Requests assets (js and css) for the page.
|
137 |
*
|
138 |
+
* @param \Wbcr_Factory448_ScriptList $scripts
|
139 |
+
* @param \Wbcr_Factory448_StyleList $styles
|
140 |
*
|
141 |
* @return void
|
142 |
+
* @see Wbcr_FactoryPages447_AdminPage
|
143 |
*
|
144 |
*/
|
145 |
public function assets($scripts, $styles)
|
146 |
{
|
147 |
parent::assets($scripts, $styles);
|
148 |
|
149 |
+
$this->styles->add(FACTORY_CLEARFY_240_URL . '/assets/css/page-setup.css');
|
150 |
|
151 |
// Require step assets
|
152 |
if( isset($_GET['action']) && false !== strpos($_GET['action'], 'step') && isset($this->steps[$_GET['action']]) ) {
|
163 |
protected function showPage($content = null)
|
164 |
{
|
165 |
?>
|
166 |
+
<div class="w-factory-clearfy-240-setup">
|
167 |
+
<ol class="w-factory-clearfy-240-setup-steps">
|
168 |
<?php foreach($this->steps as $step): ?>
|
169 |
<?php if( self::DEFAULT_STEP === $step->get_id() ) {
|
170 |
continue;
|
172 |
<li <?php if($this->current_step === $step->get_id()): ?>class="active"<?php endif; ?>><?php echo $step->get_title(); ?></li>
|
173 |
<?php endforeach; ?>
|
174 |
</ol>
|
175 |
+
<div class="w-factory-clearfy-240-setup-content">
|
176 |
<?php echo $content; ?>
|
177 |
</div>
|
178 |
+
<a class="w-factory-clearfy-240-setup-footer-links" href="<?php echo esc_url($this->get_close_wizard_url()); ?>">
|
179 |
+
<?php _e('Not now', 'wbcr_factory_clearfy_240') ?>
|
180 |
</a>
|
181 |
</div>
|
182 |
<?php
|
libs/factory/clearfy/pages/class-pages-components.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
/**
|
6 |
* This file is the add-ons page.
|
@@ -16,7 +16,7 @@ if( !defined('ABSPATH') ) {
|
|
16 |
exit;
|
17 |
}
|
18 |
|
19 |
-
class Components extends \
|
20 |
|
21 |
/**
|
22 |
* The id of the page in the admin menu.
|
@@ -24,7 +24,7 @@ class Components extends \Wbcr_FactoryClearfy237_PageBase {
|
|
24 |
* Mainly used to navigate between pages.
|
25 |
*
|
26 |
* @since 1.0.0
|
27 |
-
* @see
|
28 |
*
|
29 |
* @var string
|
30 |
*/
|
@@ -41,12 +41,12 @@ class Components extends \Wbcr_FactoryClearfy237_PageBase {
|
|
41 |
public $available_for_multisite = true;
|
42 |
|
43 |
/**
|
44 |
-
* @param \
|
45 |
*/
|
46 |
-
public function __construct(\
|
47 |
{
|
48 |
-
$this->menu_title = __('Components', '
|
49 |
-
$this->page_menu_short_description = __('More features for plugin', '
|
50 |
|
51 |
parent::__construct($plugin);
|
52 |
|
@@ -58,18 +58,18 @@ class Components extends \Wbcr_FactoryClearfy237_PageBase {
|
|
58 |
*
|
59 |
* @return void
|
60 |
* @since 1.0.0
|
61 |
-
* @see
|
62 |
*
|
63 |
*/
|
64 |
public function assets($scripts, $styles)
|
65 |
{
|
66 |
parent::assets($scripts, $styles);
|
67 |
|
68 |
-
$this->styles->add(
|
69 |
|
70 |
/**
|
71 |
-
* @param \
|
72 |
-
* @param \
|
73 |
* @since 1.4.0
|
74 |
*
|
75 |
*/
|
@@ -80,10 +80,10 @@ class Components extends \Wbcr_FactoryClearfy237_PageBase {
|
|
80 |
* We register notifications for some actions
|
81 |
*
|
82 |
* @param $notices
|
83 |
-
* @param \
|
84 |
*
|
85 |
* @return array
|
86 |
-
* @see libs\factory\pages\themplates\
|
87 |
*/
|
88 |
public function getActionNotices($notices)
|
89 |
{
|
@@ -92,7 +92,7 @@ class Components extends \Wbcr_FactoryClearfy237_PageBase {
|
|
92 |
'wbcr-force-update-components-success' => 1
|
93 |
],
|
94 |
'type' => 'success',
|
95 |
-
'message' => __('Components have been successfully updated to the latest version.', '
|
96 |
];
|
97 |
|
98 |
$notices[] = [
|
@@ -100,7 +100,7 @@ class Components extends \Wbcr_FactoryClearfy237_PageBase {
|
|
100 |
'wbcr-force-update-components-error' => 'inactive_licence'
|
101 |
],
|
102 |
'type' => 'danger',
|
103 |
-
'message' => __('To use premium components, you need activate a license!', '
|
104 |
];
|
105 |
|
106 |
$notices[] = [
|
@@ -173,12 +173,12 @@ class Components extends \Wbcr_FactoryClearfy237_PageBase {
|
|
173 |
$components = apply_filters('wbcr/clearfy/components/items_list', $components);
|
174 |
|
175 |
?>
|
176 |
-
<div class="wbcr-factory-page-group-header"><?php _e('<strong>Plugin Components</strong>.', '
|
177 |
<p>
|
178 |
-
<?php _e('These are components of the plugin bundle. When you activate the plugin, all the components turned on by default. If you don’t need some function, you can easily turn it off on this page.', '
|
179 |
</p>
|
180 |
</div>
|
181 |
-
<div class="wbc-factory-clearfy-
|
182 |
<?php
|
183 |
/**
|
184 |
* @since 1.4.0
|
@@ -229,7 +229,7 @@ class Components extends \Wbcr_FactoryClearfy237_PageBase {
|
|
229 |
<div class="plugin-card-bottom">
|
230 |
<?php if( !(isset($component['disable_button']) && $component['disable_button']) ): ?>
|
231 |
<?php if( 'premium' === $component['build'] && !($this->plugin->premium->is_activate() && $this->plugin->premium->is_install_package()) ): ?>
|
232 |
-
<a target="_blank" href="<?php echo esc_url($component['url']) ?>" class="button button-default install-now"><?php _e('Read more', '
|
233 |
<?php else: ?>
|
234 |
<?php $delete_button->render_button(); ?><?php $install_button->render_button(); ?>
|
235 |
<?php endif; ?>
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\FactoryClearfy240\Pages;
|
4 |
|
5 |
/**
|
6 |
* This file is the add-ons page.
|
16 |
exit;
|
17 |
}
|
18 |
|
19 |
+
class Components extends \Wbcr_FactoryClearfy240_PageBase {
|
20 |
|
21 |
/**
|
22 |
* The id of the page in the admin menu.
|
24 |
* Mainly used to navigate between pages.
|
25 |
*
|
26 |
* @since 1.0.0
|
27 |
+
* @see FactoryPages447_AdminPage
|
28 |
*
|
29 |
* @var string
|
30 |
*/
|
41 |
public $available_for_multisite = true;
|
42 |
|
43 |
/**
|
44 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
45 |
*/
|
46 |
+
public function __construct(\Wbcr_Factory448_Plugin $plugin)
|
47 |
{
|
48 |
+
$this->menu_title = __('Components', 'wbcr_factory_clearfy_240');
|
49 |
+
$this->page_menu_short_description = __('More features for plugin', 'wbcr_factory_clearfy_240');
|
50 |
|
51 |
parent::__construct($plugin);
|
52 |
|
58 |
*
|
59 |
* @return void
|
60 |
* @since 1.0.0
|
61 |
+
* @see FactoryPages447_AdminPage
|
62 |
*
|
63 |
*/
|
64 |
public function assets($scripts, $styles)
|
65 |
{
|
66 |
parent::assets($scripts, $styles);
|
67 |
|
68 |
+
$this->styles->add(FACTORY_CLEARFY_240_URL . '/assets/css/components.css');
|
69 |
|
70 |
/**
|
71 |
+
* @param \Wbcr_Factory448_StyleList $styles
|
72 |
+
* @param \Wbcr_Factory448_ScriptList $scripts
|
73 |
* @since 1.4.0
|
74 |
*
|
75 |
*/
|
80 |
* We register notifications for some actions
|
81 |
*
|
82 |
* @param $notices
|
83 |
+
* @param \Wbcr_Factory448_Plugin $plugin
|
84 |
*
|
85 |
* @return array
|
86 |
+
* @see libs\factory\pages\themplates\FactoryPages447_ImpressiveThemplate
|
87 |
*/
|
88 |
public function getActionNotices($notices)
|
89 |
{
|
92 |
'wbcr-force-update-components-success' => 1
|
93 |
],
|
94 |
'type' => 'success',
|
95 |
+
'message' => __('Components have been successfully updated to the latest version.', 'wbcr_factory_clearfy_240')
|
96 |
];
|
97 |
|
98 |
$notices[] = [
|
100 |
'wbcr-force-update-components-error' => 'inactive_licence'
|
101 |
],
|
102 |
'type' => 'danger',
|
103 |
+
'message' => __('To use premium components, you need activate a license!', 'wbcr_factory_clearfy_240') . '<a href="admin.php?page=license-wbcr_clearfy" class="btn btn-gold">' . __('Activate license', 'wbcr_factory_clearfy_240') . '</a>'
|
104 |
];
|
105 |
|
106 |
$notices[] = [
|
173 |
$components = apply_filters('wbcr/clearfy/components/items_list', $components);
|
174 |
|
175 |
?>
|
176 |
+
<div class="wbcr-factory-page-group-header"><?php _e('<strong>Plugin Components</strong>.', 'wbcr_factory_clearfy_240') ?>
|
177 |
<p>
|
178 |
+
<?php _e('These are components of the plugin bundle. When you activate the plugin, all the components turned on by default. If you don’t need some function, you can easily turn it off on this page.', 'wbcr_factory_clearfy_240') ?>
|
179 |
</p>
|
180 |
</div>
|
181 |
+
<div class="wbc-factory-clearfy-240-components">
|
182 |
<?php
|
183 |
/**
|
184 |
* @since 1.4.0
|
229 |
<div class="plugin-card-bottom">
|
230 |
<?php if( !(isset($component['disable_button']) && $component['disable_button']) ): ?>
|
231 |
<?php if( 'premium' === $component['build'] && !($this->plugin->premium->is_activate() && $this->plugin->premium->is_install_package()) ): ?>
|
232 |
+
<a target="_blank" href="<?php echo esc_url($component['url']) ?>" class="button button-default install-now"><?php _e('Read more', 'wbcr_factory_clearfy_240'); ?></a>
|
233 |
<?php else: ?>
|
234 |
<?php $delete_button->render_button(); ?><?php $install_button->render_button(); ?>
|
235 |
<?php endif; ?>
|
libs/factory/clearfy/pages/class-pages.php
CHANGED
@@ -13,8 +13,10 @@ if( !defined('ABSPATH') ) {
|
|
13 |
exit;
|
14 |
}
|
15 |
|
|
|
|
|
16 |
/**
|
17 |
-
* Class
|
18 |
*
|
19 |
* @method string getInfoWidget() - get widget content information
|
20 |
* @method string getRatingWidget(array $args = []) - get widget content rating
|
@@ -23,7 +25,7 @@ if( !defined('ABSPATH') ) {
|
|
23 |
* @method string getBusinessSuggetionWidget()
|
24 |
* @method string getSupportWidget
|
25 |
*/
|
26 |
-
class
|
27 |
|
28 |
/**
|
29 |
* {@inheritDoc}
|
@@ -55,16 +57,23 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
55 |
* @since 2.2.0 - Added
|
56 |
* @var bool - true show, false hide
|
57 |
*/
|
58 |
-
public $show_search_options_form
|
59 |
|
60 |
/**
|
61 |
-
* @param
|
62 |
*/
|
63 |
-
public function __construct(
|
64 |
{
|
65 |
parent::__construct($plugin);
|
66 |
|
67 |
-
if( $this->show_search_options_form
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
$this->register_options_to_search();
|
69 |
}
|
70 |
|
@@ -72,6 +81,7 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
72 |
$this,
|
73 |
'subsribe_widget_ajax_handler'
|
74 |
]);
|
|
|
75 |
}
|
76 |
|
77 |
/**
|
@@ -101,18 +111,18 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
101 |
/**
|
102 |
* Requests assets (js and css) for the page.
|
103 |
*
|
104 |
-
* @param
|
105 |
-
* @param
|
106 |
*
|
107 |
* @return void
|
108 |
-
* @see
|
109 |
*
|
110 |
*/
|
111 |
public function assets($scripts, $styles)
|
112 |
{
|
113 |
parent::assets($scripts, $styles);
|
114 |
|
115 |
-
$this->styles->add(
|
116 |
|
117 |
// todo: вынести все общие скрипты и стили фреймворка, продумать совместимость с другими плагинами
|
118 |
if( defined('WCL_PLUGIN_URL') ) {
|
@@ -120,19 +130,19 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
120 |
}
|
121 |
|
122 |
if( !($this->plugin->has_premium() && $this->plugin->premium->is_active()) ) {
|
123 |
-
$this->scripts->add(
|
124 |
'jquery',
|
125 |
-
'wfactory-
|
126 |
-
'wbcr-factory-clearfy-
|
127 |
-
], 'wbcr-factory-clearfy-
|
128 |
}
|
129 |
|
130 |
// Script for search form on plugin options
|
131 |
-
if( $this->show_search_options_form
|
132 |
-
$this->styles->add(
|
133 |
|
134 |
-
$this->scripts->add(
|
135 |
-
$this->scripts->add(
|
136 |
}
|
137 |
|
138 |
/**
|
@@ -151,11 +161,11 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
151 |
*/
|
152 |
public function subsribe_widget_ajax_handler()
|
153 |
{
|
154 |
-
|
155 |
}
|
156 |
|
157 |
/**
|
158 |
-
* @return
|
159 |
*/
|
160 |
public function request()
|
161 |
{
|
@@ -254,7 +264,7 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
254 |
/**
|
255 |
* @since 4.0.9 - является устаревшим
|
256 |
*/
|
257 |
-
$widgets =
|
258 |
$widgets,
|
259 |
$position,
|
260 |
$this->plugin,
|
@@ -283,24 +293,24 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
283 |
$purchase_url = $this->plugin->get_support()->get_pricing_url(true, 'right_sidebar_ads');
|
284 |
|
285 |
$default_features = [
|
286 |
-
'4_premium' => __('4 premium components now;', '
|
287 |
-
'40_premium' => __('40 new premium components within a year for the single price;', '
|
288 |
-
'multisite_support' => __('Multisite support;', '
|
289 |
-
'advance_settings' => __('Advanced settings;', '
|
290 |
-
'no_ads' => __('No ads;', '
|
291 |
-
'perfect_support' => __('Perfect support.', '
|
292 |
];
|
293 |
|
294 |
/**
|
295 |
* @since 2.0.8 - added
|
296 |
*/
|
297 |
-
$suggetion_title = __('MORE IN CLEARFY <span>BUSINESS</span>', '
|
298 |
$suggetion_title = apply_filters('wbcr/clearfy/pages/suggetion_title', $suggetion_title, $plugin_name, $this->id);
|
299 |
|
300 |
/**
|
301 |
* @since 2.0.8 - deprecated
|
302 |
*/
|
303 |
-
$suggetion_features =
|
304 |
$default_features,
|
305 |
$this->plugin->getPluginName(),
|
306 |
$this->id
|
@@ -316,7 +326,7 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
316 |
$suggetion_features = $default_features;
|
317 |
}
|
318 |
?>
|
319 |
-
<div class="wbcr-factory-sidebar-widget wbcr-factory-clearfy-
|
320 |
<h3><?php echo $suggetion_title; ?></h3>
|
321 |
<ul>
|
322 |
<?php if( !empty($suggetion_features) ): ?>
|
@@ -327,7 +337,7 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
327 |
</ul>
|
328 |
<a href="<?php echo $purchase_url ?>" class="wbcr-factory-purchase-premium" target="_blank"
|
329 |
rel="noopener">
|
330 |
-
<?php printf(__('Upgrade for $%s', '
|
331 |
</a>
|
332 |
</div>
|
333 |
<?php
|
@@ -349,25 +359,25 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
349 |
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
350 |
alt=""/>
|
351 |
</span>
|
352 |
-
- <?php _e('A neutral setting that can not harm your site, but you must be sure that you need to use it.', '
|
353 |
</li>
|
354 |
<li>
|
355 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-grey">
|
356 |
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
357 |
alt=""/>
|
358 |
</span>
|
359 |
-
- <?php _e('When set this option, you must be careful. Plugins and themes may depend on this function. You must be sure that you can disable this feature for the site.', '
|
360 |
</li>
|
361 |
<li>
|
362 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-green">
|
363 |
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
364 |
alt=""/>
|
365 |
</span>
|
366 |
-
- <?php _e('Absolutely safe setting, We recommend to use.', '
|
367 |
</li>
|
368 |
</ul>
|
369 |
----------<br>
|
370 |
-
<p><?php _e('Hover to the icon to get help for the feature you selected.', '
|
371 |
</div>
|
372 |
<?php
|
373 |
}
|
@@ -389,19 +399,19 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
389 |
$page_url = $args[0];
|
390 |
}
|
391 |
|
392 |
-
$page_url = apply_filters('
|
393 |
|
394 |
?>
|
395 |
<div class="wbcr-factory-sidebar-widget">
|
396 |
<p>
|
397 |
-
<strong><?php _e('Do you want the plugin to improved and update?', '
|
398 |
</p>
|
399 |
-
<p><?php _e('Help the author, leave a review on wordpress.org. Thanks to feedback, I will know that the plugin is really useful to you and is needed.', '
|
400 |
-
<p><?php _e('And also write your ideas on how to extend or improve the plugin.', '
|
401 |
<p>
|
402 |
<i class="wbcr-factory-icon-5stars"></i>
|
403 |
<a href="<?php echo $page_url; ?>" title="Go rate us" target="_blank">
|
404 |
-
<strong><?php _e('Go rate us and push ideas', '
|
405 |
</a>
|
406 |
</p>
|
407 |
</div>
|
@@ -419,7 +429,7 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
419 |
?>
|
420 |
<div class="wbcr-factory-sidebar-widget">
|
421 |
<p>
|
422 |
-
<strong><?php _e('Donation for plugin development', '
|
423 |
</p>
|
424 |
<?php if( get_locale() !== 'ru_RU' ): ?>
|
425 |
<form id="wbcr-factory-paypal-donation-form" action="https://www.paypal.com/cgi-bin/webscr"
|
@@ -427,7 +437,7 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
427 |
<input type="hidden" name="cmd" value="_s-xclick">
|
428 |
<input type="hidden" name="hosted_button_id" value="VDX7JNTQPNPFW">
|
429 |
<div class="wbcr-factory-donation-price">5$</div>
|
430 |
-
<input type="image" src="<?php echo
|
431 |
border="0" name="submit" alt="PayPal – The safer, easier way to pay online!">
|
432 |
</form>
|
433 |
<?php else: ?>
|
@@ -452,19 +462,19 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
452 |
|
453 |
?>
|
454 |
<div id="wbcr-clr-support-widget" class="wbcr-factory-sidebar-widget">
|
455 |
-
<p><strong><?php _e('Having Issues?', '
|
456 |
<div class="wbcr-clr-support-widget-body">
|
457 |
<p>
|
458 |
-
<?php _e('We provide free support for this plugin. If you are pushed with a problem, just create a new ticket. We will definitely help you!', '
|
459 |
</p>
|
460 |
<ul>
|
461 |
<li><span class="dashicons dashicons-sos"></span>
|
462 |
<a href="<?php echo $free_support_url; ?>" target="_blank"
|
463 |
-
rel="noopener"><?php _e('Get starting free support', '
|
464 |
</li>
|
465 |
<li style="margin-top: 15px;background: #fff4f1;padding: 10px;color: #a58074;">
|
466 |
<span class="dashicons dashicons-warning"></span>
|
467 |
-
<?php printf(__('If you find a php error or a vulnerability in plugin, you can <a href="%s" target="_blank" rel="noopener">create ticket</a> in hot support that we responded instantly.', '
|
468 |
</li>
|
469 |
</ul>
|
470 |
</div>
|
@@ -479,27 +489,27 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
479 |
$terms = "https://cm-wp.com/?bizpanda=privacy-policy";
|
480 |
?>
|
481 |
<div id="wbcr-clr-subscribe-widget" class="wbcr-factory-sidebar-widget wbcr-factory-subscribe-widget">
|
482 |
-
<p><strong><?php _e('Subscribe to plugin’s newsletter', '
|
483 |
<div class="wbcr-clr-subscribe-widget-body">
|
484 |
-
|
485 |
<div class="wbcr-factory-subscribe-widget__message-contanier">
|
486 |
<div class="wbcr-factory-subscribe-widget__text wbcr-factory-subscribe-widget__text--success">
|
487 |
-
<?php _e("Thank you, you have successfully subscribed!", '
|
488 |
</div>
|
489 |
<div class="wbcr-factory-subscribe-widget__text wbcr-factory-subscribe-widget__text--success2">
|
490 |
-
<?php _e("Thank you for your subscription, a confirmation email has been sent to you. You need to confirm your subscription to complete this process.", '
|
491 |
</div>
|
492 |
</div>
|
493 |
-
|
494 |
<form id="wbcr-factory-subscribe-widget__subscribe-form" method="post" data-nonce="<?php echo wp_create_nonce('clearfy_subscribe_for_' . $this->plugin->getPluginName()) ?>">
|
495 |
-
<input id="wbcr-factory-subscribe-widget__email" class="wbcr-factory-subscribe-widget__field" type="email" name="email" placeholder="<?php _e('Enter your email address', '
|
496 |
<label class="wbcr-factory-subscribe-widget__checkbox-label">
|
497 |
<input class="wbcr-factory-subscribe-widget__checkbox" type="checkbox" name="agree_terms" required>
|
498 |
-
<?php echo sprintf(__("I confirm to subscribe to the CreativeMotion newsletter to receive the latest news. You can find how we use your information on our %s Privacy Policy %s", '
|
499 |
</label>
|
500 |
<input type="hidden" id="wbcr-factory-subscribe-widget__group-id" value="<?php echo esc_attr($group_id); ?>">
|
501 |
<input type="hidden" id="wbcr-factory-subscribe-widget__plugin-name" value="<?php echo esc_attr($this->plugin->getPluginName()); ?>">
|
502 |
-
<input type="submit" class="btn wbcr-factory-subscribe-widget__button" value="<?php _e('Subscribe', '
|
503 |
</form>
|
504 |
</div>
|
505 |
</div>
|
@@ -514,13 +524,13 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
514 |
*/
|
515 |
public function register_options_to_search()
|
516 |
{
|
517 |
-
require_once
|
518 |
|
519 |
$options = $this->getPageOptions();
|
520 |
$page_url = $this->getBaseUrl();
|
521 |
$page_id = $this->getResultId();
|
522 |
|
523 |
-
\WBCR\
|
524 |
}
|
525 |
|
526 |
/**
|
@@ -530,16 +540,16 @@ class Wbcr_FactoryClearfy237_PageBase extends Wbcr_FactoryPages445_ImpressiveThe
|
|
530 |
{
|
531 |
parent::printAllNotices(); // TODO: Change the autogenerated stub
|
532 |
|
533 |
-
if(
|
534 |
return;
|
535 |
}
|
536 |
?>
|
537 |
-
<div id="wbcr-factory-clearfy-
|
538 |
-
<label for="autocomplete" class="wbcr-factory-clearfy-
|
539 |
-
<?php _e('Can\'t find the settings you need? Use the search by the plugin options:', '
|
540 |
</label>
|
541 |
-
<input type="text" name="country" id="wbcr-factory-clearfy-
|
542 |
-
|
543 |
</div>
|
544 |
<?php
|
545 |
}
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
//global $ssssdfsfsdf;
|
17 |
+
|
18 |
/**
|
19 |
+
* Class Wbcr_FactoryPages447_ImpressiveThemplate
|
20 |
*
|
21 |
* @method string getInfoWidget() - get widget content information
|
22 |
* @method string getRatingWidget(array $args = []) - get widget content rating
|
25 |
* @method string getBusinessSuggetionWidget()
|
26 |
* @method string getSupportWidget
|
27 |
*/
|
28 |
+
class Wbcr_FactoryClearfy240_PageBase extends Wbcr_FactoryPages447_ImpressiveThemplate {
|
29 |
|
30 |
/**
|
31 |
* {@inheritDoc}
|
57 |
* @since 2.2.0 - Added
|
58 |
* @var bool - true show, false hide
|
59 |
*/
|
60 |
+
public $show_search_options_form;
|
61 |
|
62 |
/**
|
63 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
64 |
*/
|
65 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
66 |
{
|
67 |
parent::__construct($plugin);
|
68 |
|
69 |
+
if( is_null($this->show_search_options_form) ) {
|
70 |
+
$this->show_search_options_form = false;
|
71 |
+
if( "options" === $this->type ) {
|
72 |
+
$this->show_search_options_form = true;
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
if( "options" === $this->type && "hide_my_wp" !== $this->id ) {
|
77 |
$this->register_options_to_search();
|
78 |
}
|
79 |
|
81 |
$this,
|
82 |
'subsribe_widget_ajax_handler'
|
83 |
]);
|
84 |
+
|
85 |
}
|
86 |
|
87 |
/**
|
111 |
/**
|
112 |
* Requests assets (js and css) for the page.
|
113 |
*
|
114 |
+
* @param Wbcr_Factory448_ScriptList $scripts
|
115 |
+
* @param Wbcr_Factory448_StyleList $styles
|
116 |
*
|
117 |
* @return void
|
118 |
+
* @see Wbcr_FactoryPages447_AdminPage
|
119 |
*
|
120 |
*/
|
121 |
public function assets($scripts, $styles)
|
122 |
{
|
123 |
parent::assets($scripts, $styles);
|
124 |
|
125 |
+
$this->styles->add(FACTORY_CLEARFY_240_URL . '/assets/css/clearfy-base.css');
|
126 |
|
127 |
// todo: вынести все общие скрипты и стили фреймворка, продумать совместимость с другими плагинами
|
128 |
if( defined('WCL_PLUGIN_URL') ) {
|
130 |
}
|
131 |
|
132 |
if( !($this->plugin->has_premium() && $this->plugin->premium->is_active()) ) {
|
133 |
+
$this->scripts->add(FACTORY_CLEARFY_240_URL . '/assets/js/clearfy-widgets.js', [
|
134 |
'jquery',
|
135 |
+
'wfactory-448-core-general',
|
136 |
+
'wbcr-factory-clearfy-240-global'
|
137 |
+
], 'wbcr-factory-clearfy-240-widgets');
|
138 |
}
|
139 |
|
140 |
// Script for search form on plugin options
|
141 |
+
if( $this->show_search_options_form ) {
|
142 |
+
$this->styles->add(FACTORY_CLEARFY_240_URL . '/assets/css/libs/autocomplete.css');
|
143 |
|
144 |
+
$this->scripts->add(FACTORY_CLEARFY_240_URL . '/assets/js/libs/jquery.autocomplete.min.js');
|
145 |
+
$this->scripts->add(FACTORY_CLEARFY_240_URL . '/assets/js/clearfy-search-options.js');
|
146 |
}
|
147 |
|
148 |
/**
|
161 |
*/
|
162 |
public function subsribe_widget_ajax_handler()
|
163 |
{
|
164 |
+
wbcr_factory_clearfy_240_subscribe($this->plugin);
|
165 |
}
|
166 |
|
167 |
/**
|
168 |
+
* @return Wbcr_Factory448_Request
|
169 |
*/
|
170 |
public function request()
|
171 |
{
|
264 |
/**
|
265 |
* @since 4.0.9 - является устаревшим
|
266 |
*/
|
267 |
+
$widgets = wbcr_factory_448_apply_filters_deprecated('wbcr_factory_pages_447_imppage_get_widgets', [
|
268 |
$widgets,
|
269 |
$position,
|
270 |
$this->plugin,
|
293 |
$purchase_url = $this->plugin->get_support()->get_pricing_url(true, 'right_sidebar_ads');
|
294 |
|
295 |
$default_features = [
|
296 |
+
'4_premium' => __('4 premium components now;', 'wbcr_factory_clearfy_240'),
|
297 |
+
'40_premium' => __('40 new premium components within a year for the single price;', 'wbcr_factory_clearfy_240'),
|
298 |
+
'multisite_support' => __('Multisite support;', 'wbcr_factory_clearfy_240'),
|
299 |
+
'advance_settings' => __('Advanced settings;', 'wbcr_factory_clearfy_240'),
|
300 |
+
'no_ads' => __('No ads;', 'wbcr_factory_clearfy_240'),
|
301 |
+
'perfect_support' => __('Perfect support.', 'wbcr_factory_clearfy_240')
|
302 |
];
|
303 |
|
304 |
/**
|
305 |
* @since 2.0.8 - added
|
306 |
*/
|
307 |
+
$suggetion_title = __('MORE IN CLEARFY <span>BUSINESS</span>', 'wbcr_factory_clearfy_240');
|
308 |
$suggetion_title = apply_filters('wbcr/clearfy/pages/suggetion_title', $suggetion_title, $plugin_name, $this->id);
|
309 |
|
310 |
/**
|
311 |
* @since 2.0.8 - deprecated
|
312 |
*/
|
313 |
+
$suggetion_features = wbcr_factory_448_apply_filters_deprecated('wbcr/clearfy/page_bussines_suggetion_features', [
|
314 |
$default_features,
|
315 |
$this->plugin->getPluginName(),
|
316 |
$this->id
|
326 |
$suggetion_features = $default_features;
|
327 |
}
|
328 |
?>
|
329 |
+
<div class="wbcr-factory-sidebar-widget wbcr-factory-clearfy-240-pro-suggettion">
|
330 |
<h3><?php echo $suggetion_title; ?></h3>
|
331 |
<ul>
|
332 |
<?php if( !empty($suggetion_features) ): ?>
|
337 |
</ul>
|
338 |
<a href="<?php echo $purchase_url ?>" class="wbcr-factory-purchase-premium" target="_blank"
|
339 |
rel="noopener">
|
340 |
+
<?php printf(__('Upgrade for $%s', 'wbcr_factory_clearfy_240'), $upgrade_price) ?>
|
341 |
</a>
|
342 |
</div>
|
343 |
<?php
|
359 |
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
360 |
alt=""/>
|
361 |
</span>
|
362 |
+
- <?php _e('A neutral setting that can not harm your site, but you must be sure that you need to use it.', 'wbcr_factory_clearfy_240'); ?>
|
363 |
</li>
|
364 |
<li>
|
365 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-grey">
|
366 |
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
367 |
alt=""/>
|
368 |
</span>
|
369 |
+
- <?php _e('When set this option, you must be careful. Plugins and themes may depend on this function. You must be sure that you can disable this feature for the site.', 'wbcr_factory_clearfy_240'); ?>
|
370 |
</li>
|
371 |
<li>
|
372 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-green">
|
373 |
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
374 |
alt=""/>
|
375 |
</span>
|
376 |
+
- <?php _e('Absolutely safe setting, We recommend to use.', 'wbcr_factory_clearfy_240'); ?>
|
377 |
</li>
|
378 |
</ul>
|
379 |
----------<br>
|
380 |
+
<p><?php _e('Hover to the icon to get help for the feature you selected.', 'wbcr_factory_clearfy_240'); ?></p>
|
381 |
</div>
|
382 |
<?php
|
383 |
}
|
399 |
$page_url = $args[0];
|
400 |
}
|
401 |
|
402 |
+
$page_url = apply_filters('wbcr_factory_pages_447_imppage_rating_widget_url', $page_url, $this->plugin->getPluginName(), $this->getResultId());
|
403 |
|
404 |
?>
|
405 |
<div class="wbcr-factory-sidebar-widget">
|
406 |
<p>
|
407 |
+
<strong><?php _e('Do you want the plugin to improved and update?', 'wbcr_factory_clearfy_240'); ?></strong>
|
408 |
</p>
|
409 |
+
<p><?php _e('Help the author, leave a review on wordpress.org. Thanks to feedback, I will know that the plugin is really useful to you and is needed.', 'wbcr_factory_clearfy_240'); ?></p>
|
410 |
+
<p><?php _e('And also write your ideas on how to extend or improve the plugin.', 'wbcr_factory_clearfy_240'); ?></p>
|
411 |
<p>
|
412 |
<i class="wbcr-factory-icon-5stars"></i>
|
413 |
<a href="<?php echo $page_url; ?>" title="Go rate us" target="_blank">
|
414 |
+
<strong><?php _e('Go rate us and push ideas', 'wbcr_factory_clearfy_240'); ?></strong>
|
415 |
</a>
|
416 |
</p>
|
417 |
</div>
|
429 |
?>
|
430 |
<div class="wbcr-factory-sidebar-widget">
|
431 |
<p>
|
432 |
+
<strong><?php _e('Donation for plugin development', 'wbcr_factory_clearfy_240'); ?></strong>
|
433 |
</p>
|
434 |
<?php if( get_locale() !== 'ru_RU' ): ?>
|
435 |
<form id="wbcr-factory-paypal-donation-form" action="https://www.paypal.com/cgi-bin/webscr"
|
437 |
<input type="hidden" name="cmd" value="_s-xclick">
|
438 |
<input type="hidden" name="hosted_button_id" value="VDX7JNTQPNPFW">
|
439 |
<div class="wbcr-factory-donation-price">5$</div>
|
440 |
+
<input type="image" src="<?php echo FACTORY_PAGES_447_URL ?>/templates/assets/img/paypal-donate.png"
|
441 |
border="0" name="submit" alt="PayPal – The safer, easier way to pay online!">
|
442 |
</form>
|
443 |
<?php else: ?>
|
462 |
|
463 |
?>
|
464 |
<div id="wbcr-clr-support-widget" class="wbcr-factory-sidebar-widget">
|
465 |
+
<p><strong><?php _e('Having Issues?', 'wbcr_factory_clearfy_240'); ?></strong></p>
|
466 |
<div class="wbcr-clr-support-widget-body">
|
467 |
<p>
|
468 |
+
<?php _e('We provide free support for this plugin. If you are pushed with a problem, just create a new ticket. We will definitely help you!', 'wbcr_factory_clearfy_240'); ?>
|
469 |
</p>
|
470 |
<ul>
|
471 |
<li><span class="dashicons dashicons-sos"></span>
|
472 |
<a href="<?php echo $free_support_url; ?>" target="_blank"
|
473 |
+
rel="noopener"><?php _e('Get starting free support', 'wbcr_factory_clearfy_240'); ?></a>
|
474 |
</li>
|
475 |
<li style="margin-top: 15px;background: #fff4f1;padding: 10px;color: #a58074;">
|
476 |
<span class="dashicons dashicons-warning"></span>
|
477 |
+
<?php printf(__('If you find a php error or a vulnerability in plugin, you can <a href="%s" target="_blank" rel="noopener">create ticket</a> in hot support that we responded instantly.', 'wbcr_factory_clearfy_240'), $hot_support_url); ?>
|
478 |
</li>
|
479 |
</ul>
|
480 |
</div>
|
489 |
$terms = "https://cm-wp.com/?bizpanda=privacy-policy";
|
490 |
?>
|
491 |
<div id="wbcr-clr-subscribe-widget" class="wbcr-factory-sidebar-widget wbcr-factory-subscribe-widget">
|
492 |
+
<p><strong><?php _e('Subscribe to plugin’s newsletter', 'wbcr_factory_clearfy_240'); ?></strong></p>
|
493 |
<div class="wbcr-clr-subscribe-widget-body">
|
494 |
+
|
495 |
<div class="wbcr-factory-subscribe-widget__message-contanier">
|
496 |
<div class="wbcr-factory-subscribe-widget__text wbcr-factory-subscribe-widget__text--success">
|
497 |
+
<?php _e("Thank you, you have successfully subscribed!", 'wbcr_factory_clearfy_240') ?>
|
498 |
</div>
|
499 |
<div class="wbcr-factory-subscribe-widget__text wbcr-factory-subscribe-widget__text--success2">
|
500 |
+
<?php _e("Thank you for your subscription, a confirmation email has been sent to you. You need to confirm your subscription to complete this process.", 'wbcr_factory_clearfy_240'); ?>
|
501 |
</div>
|
502 |
</div>
|
503 |
+
|
504 |
<form id="wbcr-factory-subscribe-widget__subscribe-form" method="post" data-nonce="<?php echo wp_create_nonce('clearfy_subscribe_for_' . $this->plugin->getPluginName()) ?>">
|
505 |
+
<input id="wbcr-factory-subscribe-widget__email" class="wbcr-factory-subscribe-widget__field" type="email" name="email" placeholder="<?php _e('Enter your email address', 'wbcr_factory_clearfy_240'); ?>" required>
|
506 |
<label class="wbcr-factory-subscribe-widget__checkbox-label">
|
507 |
<input class="wbcr-factory-subscribe-widget__checkbox" type="checkbox" name="agree_terms" required>
|
508 |
+
<?php echo sprintf(__("I confirm to subscribe to the CreativeMotion newsletter to receive the latest news. You can find how we use your information on our %s Privacy Policy %s", 'wbcr_factory_clearfy_240'), '<a href="' . $terms . '" target="_blank">', '</a>'); ?>
|
509 |
</label>
|
510 |
<input type="hidden" id="wbcr-factory-subscribe-widget__group-id" value="<?php echo esc_attr($group_id); ?>">
|
511 |
<input type="hidden" id="wbcr-factory-subscribe-widget__plugin-name" value="<?php echo esc_attr($this->plugin->getPluginName()); ?>">
|
512 |
+
<input type="submit" class="btn wbcr-factory-subscribe-widget__button" value="<?php _e('Subscribe', 'wbcr_factory_clearfy_240'); ?>">
|
513 |
</form>
|
514 |
</div>
|
515 |
</div>
|
524 |
*/
|
525 |
public function register_options_to_search()
|
526 |
{
|
527 |
+
require_once FACTORY_CLEARFY_240_DIR . '/includes/class-search-options.php';
|
528 |
|
529 |
$options = $this->getPageOptions();
|
530 |
$page_url = $this->getBaseUrl();
|
531 |
$page_id = $this->getResultId();
|
532 |
|
533 |
+
\WBCR\Factory_Clearfy_240\Search_Options::register_options($options, $page_url, $page_id);
|
534 |
}
|
535 |
|
536 |
/**
|
540 |
{
|
541 |
parent::printAllNotices(); // TODO: Change the autogenerated stub
|
542 |
|
543 |
+
if( !$this->show_search_options_form ) {
|
544 |
return;
|
545 |
}
|
546 |
?>
|
547 |
+
<div id="wbcr-factory-clearfy-240__search_options_form" class="wbcr-factory-clearfy-240__autocomplete-wrap">
|
548 |
+
<label for="autocomplete" class="wbcr-factory-clearfy-240__autocomplete-label">
|
549 |
+
<?php _e('Can\'t find the settings you need? Use the search by the plugin options:', 'wbcr_factory_clearfy_240'); ?>
|
550 |
</label>
|
551 |
+
<input type="text" placeholder="<?php _e('Enter the option name to search...', 'wbcr_factory_clearfy_240'); ?>" name="country" id="wbcr-factory-clearfy-240__autocomplete"/>
|
552 |
+
|
553 |
</div>
|
554 |
<?php
|
555 |
}
|
libs/factory/clearfy/pages/setup-parts/class-step-custom.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
/**
|
6 |
* Step
|
@@ -18,10 +18,10 @@ class Step_Custom extends Step {
|
|
18 |
public function render_button($continue = true, $skip = false, $custom_title = null, $align = 'right')
|
19 |
{
|
20 |
$this->set_button_handler();
|
21 |
-
$button_title = !empty($custom_title) ? $custom_title : __('Continue', '
|
22 |
|
23 |
if( !$this->get_next_id() ) {
|
24 |
-
$button_title = __('Finish', '
|
25 |
}
|
26 |
|
27 |
if( !in_array($align, ['center', 'left', 'right']) ) {
|
@@ -29,13 +29,13 @@ class Step_Custom extends Step {
|
|
29 |
}
|
30 |
|
31 |
?>
|
32 |
-
<form method="post" id="w-factory-clearfy-
|
33 |
-
<div class="w-factory-clearfy-
|
34 |
<?php if( $skip ): ?>
|
35 |
-
<input type="submit" name="skip_button_<?php echo $this->get_id() ?>" class="button-primary button button-large w-factory-clearfy-
|
36 |
<?php endif; ?>
|
37 |
<?php if( $continue ): ?>
|
38 |
-
<input type="submit" name="continue_button_<?php echo $this->get_id() ?>" class="button-primary button button-large w-factory-clearfy-
|
39 |
<?php endif; ?>
|
40 |
</div>
|
41 |
</form>
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\FactoryClearfy240\Pages;
|
4 |
|
5 |
/**
|
6 |
* Step
|
18 |
public function render_button($continue = true, $skip = false, $custom_title = null, $align = 'right')
|
19 |
{
|
20 |
$this->set_button_handler();
|
21 |
+
$button_title = !empty($custom_title) ? $custom_title : __('Continue', 'wbcr_factory_clearfy_240');
|
22 |
|
23 |
if( !$this->get_next_id() ) {
|
24 |
+
$button_title = __('Finish', 'wbcr_factory_clearfy_240');
|
25 |
}
|
26 |
|
27 |
if( !in_array($align, ['center', 'left', 'right']) ) {
|
29 |
}
|
30 |
|
31 |
?>
|
32 |
+
<form method="post" id="w-factory-clearfy-240__setup-form-<?php echo $this->get_id() ?>" class="form-horizontal">
|
33 |
+
<div class="w-factory-clearfy-240__form-buttons" style="text-align: <?php echo esc_attr($align); ?>">
|
34 |
<?php if( $skip ): ?>
|
35 |
+
<input type="submit" name="skip_button_<?php echo $this->get_id() ?>" class="button-primary button button-large w-factory-clearfy-240__skip-button" value="<?php _e('Skip', 'wbcr_factory_clearfy_240') ?>">
|
36 |
<?php endif; ?>
|
37 |
<?php if( $continue ): ?>
|
38 |
+
<input type="submit" name="continue_button_<?php echo $this->get_id() ?>" class="button-primary button button-large w-factory-clearfy-240__continue-button" value="<?php echo $button_title; ?>">
|
39 |
<?php endif; ?>
|
40 |
</div>
|
41 |
</form>
|
libs/factory/clearfy/pages/setup-parts/class-step-form.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
/**
|
6 |
* Step
|
@@ -10,7 +10,7 @@ namespace WBCR\FactoryClearfy237\Pages;
|
|
10 |
*/
|
11 |
class Step_Form extends Step {
|
12 |
|
13 |
-
public function __construct(\WBCR\
|
14 |
{
|
15 |
parent::__construct($page);
|
16 |
}
|
@@ -33,12 +33,12 @@ class Step_Form extends Step {
|
|
33 |
protected function instance_form($options)
|
34 |
{
|
35 |
|
36 |
-
$form = new \
|
37 |
'scope' => rtrim($this->plugin->getPrefix(), '_'),
|
38 |
'name' => $this->page->getResultId() . "-options-" . $this->get_id()
|
39 |
], $this->plugin);
|
40 |
|
41 |
-
$form->setProvider(new \
|
42 |
|
43 |
$form_options = [];
|
44 |
|
@@ -83,27 +83,29 @@ class Step_Form extends Step {
|
|
83 |
return $form;
|
84 |
}
|
85 |
|
86 |
-
protected function render_form(\
|
87 |
{
|
88 |
?>
|
89 |
-
<form method="post" id="w-factory-clearfy-
|
90 |
<?php $form->html(); ?>
|
91 |
-
<div class="w-factory-clearfy-
|
92 |
-
<!--<input type="submit" name="skip_button_<?php /*echo $this->get_id() */ ?>" class="button-primary button button-large w-factory-clearfy-
|
93 |
-
<input type="submit" name="continue_button_<?php echo $this->get_id() ?>" class="button-primary button button-large w-factory-clearfy-
|
94 |
</div>
|
95 |
</form>
|
96 |
<?php
|
97 |
}
|
98 |
|
99 |
-
protected function set_form_handler(\
|
100 |
{
|
101 |
if( isset($_POST['continue_button_' . $this->get_id()]) ) {
|
102 |
$form->save();
|
|
|
103 |
$this->continue_step();
|
104 |
}
|
105 |
|
106 |
if( isset($_POST['skip_button_' . $this->get_id()]) ) {
|
|
|
107 |
$this->skip_step();
|
108 |
}
|
109 |
}
|
@@ -121,8 +123,8 @@ class Step_Form extends Step {
|
|
121 |
$form = $this->instance_form($this->get_form_options());
|
122 |
?>
|
123 |
<div id="WBCR" class="wrap">
|
124 |
-
<div class="wbcr-factory-pages-
|
125 |
-
<div class="w-factory-clearfy-
|
126 |
<h3><?php echo $this->get_title(); ?></h3>
|
127 |
<p style="text-align: left;"><?php echo $this->get_form_description(); ?></p>
|
128 |
</div>
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\FactoryClearfy240\Pages;
|
4 |
|
5 |
/**
|
6 |
* Step
|
10 |
*/
|
11 |
class Step_Form extends Step {
|
12 |
|
13 |
+
public function __construct(\WBCR\FactoryClearfy240\Pages\Setup $page)
|
14 |
{
|
15 |
parent::__construct($page);
|
16 |
}
|
33 |
protected function instance_form($options)
|
34 |
{
|
35 |
|
36 |
+
$form = new \Wbcr_FactoryForms445_Form([
|
37 |
'scope' => rtrim($this->plugin->getPrefix(), '_'),
|
38 |
'name' => $this->page->getResultId() . "-options-" . $this->get_id()
|
39 |
], $this->plugin);
|
40 |
|
41 |
+
$form->setProvider(new \Wbcr_FactoryForms445_OptionsValueProvider($this->plugin));
|
42 |
|
43 |
$form_options = [];
|
44 |
|
83 |
return $form;
|
84 |
}
|
85 |
|
86 |
+
protected function render_form(\Wbcr_FactoryForms445_Form $form)
|
87 |
{
|
88 |
?>
|
89 |
+
<form method="post" id="w-factory-clearfy-240__setup-form-<?php echo $this->get_id() ?>" class="w-factory-clearfy-240__setup-form form-horizontal">
|
90 |
<?php $form->html(); ?>
|
91 |
+
<div class="w-factory-clearfy-240__form-buttons">
|
92 |
+
<!--<input type="submit" name="skip_button_<?php /*echo $this->get_id() */ ?>" class="button-primary button button-large w-factory-clearfy-240__skip-button" value="<?php /*_e('Skip', 'wbcr_factory_clearfy_240') */ ?>">-->
|
93 |
+
<input type="submit" name="continue_button_<?php echo $this->get_id() ?>" class="button-primary button button-large w-factory-clearfy-240__continue-button" value="<?php _e('Continue', 'wbcr_factory_clearfy_240') ?>">
|
94 |
</div>
|
95 |
</form>
|
96 |
<?php
|
97 |
}
|
98 |
|
99 |
+
protected function set_form_handler(\Wbcr_FactoryForms445_Form $form)
|
100 |
{
|
101 |
if( isset($_POST['continue_button_' . $this->get_id()]) ) {
|
102 |
$form->save();
|
103 |
+
do_action('wbcr/factory/clearfy/setup_wizard/saved_options');
|
104 |
$this->continue_step();
|
105 |
}
|
106 |
|
107 |
if( isset($_POST['skip_button_' . $this->get_id()]) ) {
|
108 |
+
|
109 |
$this->skip_step();
|
110 |
}
|
111 |
}
|
123 |
$form = $this->instance_form($this->get_form_options());
|
124 |
?>
|
125 |
<div id="WBCR" class="wrap">
|
126 |
+
<div class="wbcr-factory-pages-447-impressive-page-template factory-bootstrap-448 factory-fontawesome-000">
|
127 |
+
<div class="w-factory-clearfy-240-setup__inner-wrap">
|
128 |
<h3><?php echo $this->get_title(); ?></h3>
|
129 |
<p style="text-align: left;"><?php echo $this->get_form_description(); ?></p>
|
130 |
</div>
|
libs/factory/clearfy/pages/setup-parts/class-step.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
/**
|
6 |
* Step
|
@@ -16,16 +16,16 @@ abstract class Step {
|
|
16 |
protected $next_id = false;
|
17 |
|
18 |
/**
|
19 |
-
* @var \WBCR\
|
20 |
*/
|
21 |
protected $page;
|
22 |
|
23 |
/**
|
24 |
-
* @var \
|
25 |
*/
|
26 |
protected $plugin;
|
27 |
|
28 |
-
public function __construct(\WBCR\
|
29 |
{
|
30 |
$this->page = $page;
|
31 |
$this->plugin = $page->plugin;
|
@@ -51,7 +51,7 @@ abstract class Step {
|
|
51 |
*
|
52 |
* @return void
|
53 |
* @since 1.0.0
|
54 |
-
* @see
|
55 |
*
|
56 |
*/
|
57 |
public function assets($scripts, $styles)
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\FactoryClearfy240\Pages;
|
4 |
|
5 |
/**
|
6 |
* Step
|
16 |
protected $next_id = false;
|
17 |
|
18 |
/**
|
19 |
+
* @var \WBCR\FactoryClearfy240\Pages\Setup
|
20 |
*/
|
21 |
protected $page;
|
22 |
|
23 |
/**
|
24 |
+
* @var \Wbcr_Factory448_Plugin
|
25 |
*/
|
26 |
protected $plugin;
|
27 |
|
28 |
+
public function __construct(\WBCR\FactoryClearfy240\Pages\Setup $page)
|
29 |
{
|
30 |
$this->page = $page;
|
31 |
$this->plugin = $page->plugin;
|
51 |
*
|
52 |
* @return void
|
53 |
* @since 1.0.0
|
54 |
+
* @see FactoryPages447_AdminPage
|
55 |
*
|
56 |
*/
|
57 |
public function assets($scripts, $styles)
|
libs/factory/core/ajax/install-addons.php
CHANGED
@@ -15,7 +15,7 @@ if( !defined('ABSPATH') ) {
|
|
15 |
/**
|
16 |
* This action allows you to process Ajax requests to activate external components Clearfy
|
17 |
*/
|
18 |
-
function
|
19 |
{
|
20 |
check_ajax_referer('updates');
|
21 |
|
@@ -24,11 +24,11 @@ function wfactory_446_install_components($plugin_instance)
|
|
24 |
$storage = $plugin_instance->request->post('storage', null, true);
|
25 |
|
26 |
if( !current_user_can('update_plugins') ) {
|
27 |
-
wp_die(__('You don\'t have enough capability to edit this information.', '
|
28 |
}
|
29 |
|
30 |
if( empty($slug) || empty($action) ) {
|
31 |
-
wp_send_json_error(['error_message' => __('Required attributes are not passed or empty.', '
|
32 |
}
|
33 |
$success = false;
|
34 |
$send_data = [];
|
@@ -44,7 +44,7 @@ function wfactory_446_install_components($plugin_instance)
|
|
44 |
$success = true;
|
45 |
}
|
46 |
} else {
|
47 |
-
wp_send_json_error(['error_message' => __('You are trying to perform an invalid action.', '
|
48 |
}
|
49 |
} else if( $storage == 'wordpress' || $storage == 'creativemotion' ) {
|
50 |
if( !empty($slug) ) {
|
@@ -80,7 +80,7 @@ function wfactory_446_install_components($plugin_instance)
|
|
80 |
/*if ( $action == 'deactivate' ) {
|
81 |
$is_need_rewrite_rules = $plugin_instance->getPopulateOption( 'need_rewrite_rules' );
|
82 |
if ( $is_need_rewrite_rules ) {
|
83 |
-
$send_data['need_rewrite_rules'] = sprintf( '<span class="wbcr-clr-need-rewrite-rules-message">' . __( 'When you deactivate some components, permanent links may work incorrectly. If this happens, please, <a href="%s">update the permalinks</a>, so you could complete the deactivation.', '
|
84 |
}
|
85 |
}*/
|
86 |
|
@@ -94,7 +94,7 @@ function wfactory_446_install_components($plugin_instance)
|
|
94 |
wp_send_json_success($send_data);
|
95 |
}
|
96 |
|
97 |
-
wp_send_json_error(['error_message' => __('An unknown error occurred during the activation of the component.', '
|
98 |
}
|
99 |
|
100 |
/**
|
@@ -102,18 +102,18 @@ function wfactory_446_install_components($plugin_instance)
|
|
102 |
* to get the component to work. Usually this is a call to the installation functions,
|
103 |
* but in some cases, overwriting permanent references or compatibility checks.
|
104 |
*/
|
105 |
-
function
|
106 |
{
|
107 |
check_ajax_referer('updates');
|
108 |
|
109 |
$component_name = $plugin_instance->request->post('plugin', null, true);
|
110 |
|
111 |
if( !current_user_can('update_plugins') ) {
|
112 |
-
wp_send_json_error(['error_message' => __('You don\'t have enough capability to edit this information.', '
|
113 |
}
|
114 |
|
115 |
if( empty($component_name) ) {
|
116 |
-
wp_send_json_error(['error_message' => __('Required attribute [component_name] is empty.', '
|
117 |
}
|
118 |
// todo: для совместимости с плагином Clearfy
|
119 |
if( "wbcr_clearfy" === $plugin_instance->getPluginName() ) {
|
@@ -133,7 +133,7 @@ function wfactory_446_prepare_component($plugin_instance)
|
|
133 |
*
|
134 |
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
135 |
*/
|
136 |
-
function
|
137 |
{
|
138 |
check_ajax_referer('updates');
|
139 |
|
15 |
/**
|
16 |
* This action allows you to process Ajax requests to activate external components Clearfy
|
17 |
*/
|
18 |
+
function wfactory_448_install_components($plugin_instance)
|
19 |
{
|
20 |
check_ajax_referer('updates');
|
21 |
|
24 |
$storage = $plugin_instance->request->post('storage', null, true);
|
25 |
|
26 |
if( !current_user_can('update_plugins') ) {
|
27 |
+
wp_die(__('You don\'t have enough capability to edit this information.', 'wbcr_factory_448'), __('Something went wrong.'), 403);
|
28 |
}
|
29 |
|
30 |
if( empty($slug) || empty($action) ) {
|
31 |
+
wp_send_json_error(['error_message' => __('Required attributes are not passed or empty.', 'wbcr_factory_448')]);
|
32 |
}
|
33 |
$success = false;
|
34 |
$send_data = [];
|
44 |
$success = true;
|
45 |
}
|
46 |
} else {
|
47 |
+
wp_send_json_error(['error_message' => __('You are trying to perform an invalid action.', 'wbcr_factory_448')]);
|
48 |
}
|
49 |
} else if( $storage == 'wordpress' || $storage == 'creativemotion' ) {
|
50 |
if( !empty($slug) ) {
|
80 |
/*if ( $action == 'deactivate' ) {
|
81 |
$is_need_rewrite_rules = $plugin_instance->getPopulateOption( 'need_rewrite_rules' );
|
82 |
if ( $is_need_rewrite_rules ) {
|
83 |
+
$send_data['need_rewrite_rules'] = sprintf( '<span class="wbcr-clr-need-rewrite-rules-message">' . __( 'When you deactivate some components, permanent links may work incorrectly. If this happens, please, <a href="%s">update the permalinks</a>, so you could complete the deactivation.', 'wbcr_factory_448' ), admin_url( 'options-permalink.php' ) . '</span>' );
|
84 |
}
|
85 |
}*/
|
86 |
|
94 |
wp_send_json_success($send_data);
|
95 |
}
|
96 |
|
97 |
+
wp_send_json_error(['error_message' => __('An unknown error occurred during the activation of the component.', 'wbcr_factory_448')]);
|
98 |
}
|
99 |
|
100 |
/**
|
102 |
* to get the component to work. Usually this is a call to the installation functions,
|
103 |
* but in some cases, overwriting permanent references or compatibility checks.
|
104 |
*/
|
105 |
+
function wfactory_448_prepare_component($plugin_instance)
|
106 |
{
|
107 |
check_ajax_referer('updates');
|
108 |
|
109 |
$component_name = $plugin_instance->request->post('plugin', null, true);
|
110 |
|
111 |
if( !current_user_can('update_plugins') ) {
|
112 |
+
wp_send_json_error(['error_message' => __('You don\'t have enough capability to edit this information.', 'wbcr_factory_448')], 403);
|
113 |
}
|
114 |
|
115 |
if( empty($component_name) ) {
|
116 |
+
wp_send_json_error(['error_message' => __('Required attribute [component_name] is empty.', 'wbcr_factory_448')]);
|
117 |
}
|
118 |
// todo: для совместимости с плагином Clearfy
|
119 |
if( "wbcr_clearfy" === $plugin_instance->getPluginName() ) {
|
133 |
*
|
134 |
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
135 |
*/
|
136 |
+
function wfactory_448_creativemotion_install_plugin($plugin_instance)
|
137 |
{
|
138 |
check_ajax_referer('updates');
|
139 |
|
libs/factory/core/assets/js/core-components.js
CHANGED
@@ -20,7 +20,7 @@
|
|
20 |
* This event is intended for installation, removal, activation, deactivation of external add-ons
|
21 |
*/
|
22 |
|
23 |
-
$(document).on('click', '.wfactory-
|
24 |
var $this = $(this),
|
25 |
button_i18n = $(this).data('i18n'),
|
26 |
plugin_slug = $(this).data('slug'),
|
@@ -30,11 +30,11 @@
|
|
30 |
wpnonce = $(this).data('wpnonce');
|
31 |
|
32 |
var action = ('creativemotion' === storage)
|
33 |
-
? 'wfactory-
|
34 |
: 'install-plugin';
|
35 |
|
36 |
if( storage === 'freemius' || ((storage === 'wordpress' || storage === 'creativemotion' || storage === 'internal') && (plugin_action === 'activate' || plugin_action === 'deactivate')) ) {
|
37 |
-
action = 'wfactory-
|
38 |
} else if( storage === 'wordpress' && plugin_action === 'delete' ) {
|
39 |
action = 'delete-plugin';
|
40 |
}
|
@@ -54,11 +54,11 @@
|
|
54 |
|
55 |
$this.addClass('disabled').text(button_i18n.loading);
|
56 |
|
57 |
-
$.
|
58 |
|
59 |
self.sendRequest(data, function(response) {
|
60 |
if( !response || !response.success ) {
|
61 |
-
$.
|
62 |
$this,
|
63 |
data,
|
64 |
response
|
@@ -80,7 +80,7 @@
|
|
80 |
$this.removeClass('button-default').addClass('button-primary');
|
81 |
}
|
82 |
|
83 |
-
$.
|
84 |
$this,
|
85 |
data,
|
86 |
response
|
@@ -96,7 +96,7 @@
|
|
96 |
$this.removeClass('button-primary').addClass('button-default');
|
97 |
}
|
98 |
|
99 |
-
$.
|
100 |
$this,
|
101 |
data,
|
102 |
response
|
@@ -124,7 +124,7 @@
|
|
124 |
$this.removeClass('button-default').addClass('button-primary');
|
125 |
}
|
126 |
|
127 |
-
$.
|
128 |
$this,
|
129 |
data,
|
130 |
response
|
@@ -134,7 +134,7 @@
|
|
134 |
|
135 |
plugin_action = 'install';
|
136 |
|
137 |
-
$.
|
138 |
}
|
139 |
} else {
|
140 |
if( plugin_action === 'install' ) {
|
@@ -144,7 +144,7 @@
|
|
144 |
|
145 |
$this.text(button_i18n[plugin_action]);
|
146 |
|
147 |
-
$.
|
148 |
});
|
149 |
|
150 |
return false;
|
@@ -169,7 +169,7 @@
|
|
169 |
.addClass('disabled')
|
170 |
.text(button_i18n.preparation);
|
171 |
|
172 |
-
sendData.action = 'wfactory-
|
173 |
|
174 |
this.sendRequest(sendData, function(response) {
|
175 |
componentButton.removeClass('disabled');
|
@@ -177,7 +177,7 @@
|
|
177 |
if( !response || !response.success ) {
|
178 |
componentButton.text(button_i18n['activate']);
|
179 |
|
180 |
-
$.
|
181 |
componentButton,
|
182 |
sendData,
|
183 |
response
|
@@ -187,7 +187,7 @@
|
|
187 |
|
188 |
componentButton.removeClass('button-primary').text(button_i18n['deactivate']);
|
189 |
|
190 |
-
$.
|
191 |
componentButton,
|
192 |
sendData,
|
193 |
response
|
@@ -210,7 +210,7 @@
|
|
210 |
console.log(xhr.responseText);
|
211 |
console.log(thrownError);
|
212 |
|
213 |
-
$.
|
214 |
xhr,
|
215 |
ajaxOptions,
|
216 |
thrownError
|
20 |
* This event is intended for installation, removal, activation, deactivation of external add-ons
|
21 |
*/
|
22 |
|
23 |
+
$(document).on('click', '.wfactory-448-process-button', function() {
|
24 |
var $this = $(this),
|
25 |
button_i18n = $(this).data('i18n'),
|
26 |
plugin_slug = $(this).data('slug'),
|
30 |
wpnonce = $(this).data('wpnonce');
|
31 |
|
32 |
var action = ('creativemotion' === storage)
|
33 |
+
? 'wfactory-448-creativemotion-install-plugin'
|
34 |
: 'install-plugin';
|
35 |
|
36 |
if( storage === 'freemius' || ((storage === 'wordpress' || storage === 'creativemotion' || storage === 'internal') && (plugin_action === 'activate' || plugin_action === 'deactivate')) ) {
|
37 |
+
action = 'wfactory-448-intall-component';
|
38 |
} else if( storage === 'wordpress' && plugin_action === 'delete' ) {
|
39 |
action = 'delete-plugin';
|
40 |
}
|
54 |
|
55 |
$this.addClass('disabled').text(button_i18n.loading);
|
56 |
|
57 |
+
$.wfactory_448.hooks.run('core/components/pre_update', [$this, data]);
|
58 |
|
59 |
self.sendRequest(data, function(response) {
|
60 |
if( !response || !response.success ) {
|
61 |
+
$.wfactory_448.hooks.run('core/components/update_error', [
|
62 |
$this,
|
63 |
data,
|
64 |
response
|
80 |
$this.removeClass('button-default').addClass('button-primary');
|
81 |
}
|
82 |
|
83 |
+
$.wfactory_448.hooks.run('core/components/installed', [
|
84 |
$this,
|
85 |
data,
|
86 |
response
|
96 |
$this.removeClass('button-primary').addClass('button-default');
|
97 |
}
|
98 |
|
99 |
+
$.wfactory_448.hooks.run('core/components/pre_activate', [
|
100 |
$this,
|
101 |
data,
|
102 |
response
|
124 |
$this.removeClass('button-default').addClass('button-primary');
|
125 |
}
|
126 |
|
127 |
+
$.wfactory_448.hooks.run('core/components/deactivated', [
|
128 |
$this,
|
129 |
data,
|
130 |
response
|
134 |
|
135 |
plugin_action = 'install';
|
136 |
|
137 |
+
$.wfactory_448.hooks.run('core/components/deleted', [$this, data, response]);
|
138 |
}
|
139 |
} else {
|
140 |
if( plugin_action === 'install' ) {
|
144 |
|
145 |
$this.text(button_i18n[plugin_action]);
|
146 |
|
147 |
+
$.wfactory_448.hooks.run('core/components/updated', [$this, data, response]);
|
148 |
});
|
149 |
|
150 |
return false;
|
169 |
.addClass('disabled')
|
170 |
.text(button_i18n.preparation);
|
171 |
|
172 |
+
sendData.action = 'wfactory-448-prepare-component';
|
173 |
|
174 |
this.sendRequest(sendData, function(response) {
|
175 |
componentButton.removeClass('disabled');
|
177 |
if( !response || !response.success ) {
|
178 |
componentButton.text(button_i18n['activate']);
|
179 |
|
180 |
+
$.wfactory_448.hooks.run('core/components/activation_error', [
|
181 |
componentButton,
|
182 |
sendData,
|
183 |
response
|
187 |
|
188 |
componentButton.removeClass('button-primary').text(button_i18n['deactivate']);
|
189 |
|
190 |
+
$.wfactory_448.hooks.run('core/components/activated', [
|
191 |
componentButton,
|
192 |
sendData,
|
193 |
response
|
210 |
console.log(xhr.responseText);
|
211 |
console.log(thrownError);
|
212 |
|
213 |
+
$.wfactory_448.hooks.run('core/components/ajax_error', [
|
214 |
xhr,
|
215 |
ajaxOptions,
|
216 |
thrownError
|
libs/factory/core/assets/js/core-general.js
CHANGED
@@ -8,11 +8,11 @@
|
|
8 |
(function($) {
|
9 |
'use strict';
|
10 |
|
11 |
-
if( !$.
|
12 |
-
$.
|
13 |
}
|
14 |
|
15 |
-
$.
|
16 |
|
17 |
/**
|
18 |
* A set of registered filters.
|
@@ -79,20 +79,20 @@
|
|
79 |
}
|
80 |
};
|
81 |
|
82 |
-
$.
|
83 |
|
84 |
/**
|
85 |
* Applies filters to a given input value.
|
86 |
*/
|
87 |
run: function(filterName, args) {
|
88 |
-
$.
|
89 |
},
|
90 |
|
91 |
/**
|
92 |
* Registers a new filter.
|
93 |
*/
|
94 |
add: function(filterName, callback, priority) {
|
95 |
-
$.
|
96 |
}
|
97 |
};
|
98 |
|
8 |
(function($) {
|
9 |
'use strict';
|
10 |
|
11 |
+
if( !$.wfactory_448 ) {
|
12 |
+
$.wfactory_448 = {};
|
13 |
}
|
14 |
|
15 |
+
$.wfactory_448.filters = $.wfactory_448.filters || {
|
16 |
|
17 |
/**
|
18 |
* A set of registered filters.
|
79 |
}
|
80 |
};
|
81 |
|
82 |
+
$.wfactory_448.hooks = $.wfactory_448.hooks || {
|
83 |
|
84 |
/**
|
85 |
* Applies filters to a given input value.
|
86 |
*/
|
87 |
run: function(filterName, args) {
|
88 |
+
$.wfactory_448.filters.run(filterName, args);
|
89 |
},
|
90 |
|
91 |
/**
|
92 |
* Registers a new filter.
|
93 |
*/
|
94 |
add: function(filterName, callback, priority) {
|
95 |
+
$.wfactory_448.filters.add(filterName, callback, priority);
|
96 |
}
|
97 |
};
|
98 |
|
libs/factory/core/boot.php
CHANGED
@@ -14,60 +14,60 @@ if( !defined('ABSPATH') ) {
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( defined('
|
18 |
return;
|
19 |
}
|
20 |
|
21 |
-
define('
|
22 |
|
23 |
-
define(
|
24 |
|
25 |
-
define('
|
26 |
-
define('
|
27 |
|
28 |
-
load_plugin_textdomain('
|
29 |
|
30 |
#comp merge
|
31 |
-
require_once(
|
32 |
|
33 |
-
require_once(
|
34 |
-
require_once(
|
35 |
|
36 |
-
require_once(
|
37 |
-
require_once(
|
38 |
-
require_once(
|
39 |
-
require_once(
|
40 |
-
require_once(
|
41 |
|
42 |
// ASSETS
|
43 |
-
require_once(
|
44 |
-
require_once(
|
45 |
-
require_once(
|
46 |
|
47 |
// PREMIUM
|
48 |
-
require_once(
|
49 |
-
require_once(
|
50 |
-
require_once(
|
51 |
|
52 |
// UPDATES
|
53 |
-
require_once(
|
54 |
-
require_once(
|
55 |
-
require_once(
|
56 |
-
require_once(
|
57 |
-
require_once(
|
58 |
|
59 |
-
require_once(
|
60 |
|
61 |
-
require_once(
|
62 |
-
require_once(
|
63 |
#endcomp
|
64 |
|
65 |
add_action('admin_enqueue_scripts', function () {
|
66 |
-
wp_enqueue_script('wfactory-
|
67 |
'jquery'
|
68 |
-
],
|
69 |
-
wp_enqueue_script('wfactory-
|
70 |
'jquery',
|
71 |
-
'wfactory-
|
72 |
-
],
|
73 |
});
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( defined('FACTORY_448_LOADED') ) {
|
18 |
return;
|
19 |
}
|
20 |
|
21 |
+
define('FACTORY_448_LOADED', true);
|
22 |
|
23 |
+
define('FACTORY_448_VERSION', '4.4.8');
|
24 |
|
25 |
+
define('FACTORY_448_DIR', dirname(__FILE__));
|
26 |
+
define('FACTORY_448_URL', plugins_url(null, __FILE__));
|
27 |
|
28 |
+
load_plugin_textdomain('wbcr_factory_448', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
29 |
|
30 |
#comp merge
|
31 |
+
require_once(FACTORY_448_DIR . '/includes/functions.php');
|
32 |
|
33 |
+
require_once(FACTORY_448_DIR . '/includes/entities/class-factory-paths.php');
|
34 |
+
require_once(FACTORY_448_DIR . '/includes/entities/class-factory-support.php');
|
35 |
|
36 |
+
require_once(FACTORY_448_DIR . '/includes/class-factory-requests.php');
|
37 |
+
require_once(FACTORY_448_DIR . '/includes/class-factory-options.php');
|
38 |
+
require_once(FACTORY_448_DIR . '/includes/class-factory-plugin-base.php');
|
39 |
+
require_once(FACTORY_448_DIR . '/includes/class-factory-migrations.php');
|
40 |
+
require_once(FACTORY_448_DIR . '/includes/class-factory-notices.php');
|
41 |
|
42 |
// ASSETS
|
43 |
+
require_once(FACTORY_448_DIR . '/includes/assets-managment/class-factory-assets-list.php');
|
44 |
+
require_once(FACTORY_448_DIR . '/includes/assets-managment/class-factory-script-list.php');
|
45 |
+
require_once(FACTORY_448_DIR . '/includes/assets-managment/class-factory-style-list.php');
|
46 |
|
47 |
// PREMIUM
|
48 |
+
require_once(FACTORY_448_DIR . '/includes/premium/class-factory-license-interface.php');
|
49 |
+
require_once(FACTORY_448_DIR . '/includes/premium/class-factory-provider-abstract.php');
|
50 |
+
require_once(FACTORY_448_DIR . '/includes/premium/class-factory-manager.php');
|
51 |
|
52 |
// UPDATES
|
53 |
+
require_once(FACTORY_448_DIR . '/includes/updates/repositories/class-factory-repository-abstract.php');
|
54 |
+
require_once(FACTORY_448_DIR . '/includes/updates/repositories/class-factory-wordpress.php');
|
55 |
+
require_once(FACTORY_448_DIR . '/includes/updates/repositories/class-factory-github.php');
|
56 |
+
require_once(FACTORY_448_DIR . '/includes/updates/class-factory-upgrader.php');
|
57 |
+
require_once(FACTORY_448_DIR . '/includes/updates/class-factory-premium-upgrader.php');
|
58 |
|
59 |
+
require_once(FACTORY_448_DIR . '/includes/class-factory-plugin-abstract.php');
|
60 |
|
61 |
+
require_once(FACTORY_448_DIR . '/includes/activation/class-factory-activator.php');
|
62 |
+
require_once(FACTORY_448_DIR . '/includes/activation/class-factory-update.php');
|
63 |
#endcomp
|
64 |
|
65 |
add_action('admin_enqueue_scripts', function () {
|
66 |
+
wp_enqueue_script('wfactory-448-core-general', FACTORY_448_URL . '/assets/js/core-general.js', [
|
67 |
'jquery'
|
68 |
+
], FACTORY_448_VERSION);
|
69 |
+
wp_enqueue_script('wfactory-448-core-components', FACTORY_448_URL . '/assets/js/core-components.js', [
|
70 |
'jquery',
|
71 |
+
'wfactory-448-core-general'
|
72 |
+
], FACTORY_448_VERSION);
|
73 |
});
|
libs/factory/core/includes/activation/class-factory-activator.php
CHANGED
@@ -19,16 +19,16 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
-
abstract class
|
23 |
|
24 |
/**
|
25 |
* Curent plugin.
|
26 |
*
|
27 |
-
* @var
|
28 |
*/
|
29 |
public $plugin;
|
30 |
|
31 |
-
public function __construct(
|
32 |
$this->plugin = $plugin;
|
33 |
}
|
34 |
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
+
abstract class Wbcr_Factory448_Activator {
|
23 |
|
24 |
/**
|
25 |
* Curent plugin.
|
26 |
*
|
27 |
+
* @var Wbcr_Factory448_Plugin
|
28 |
*/
|
29 |
public $plugin;
|
30 |
|
31 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
32 |
$this->plugin = $plugin;
|
33 |
}
|
34 |
|
libs/factory/core/includes/activation/class-factory-update.php
CHANGED
@@ -20,16 +20,16 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
abstract class
|
24 |
|
25 |
/**
|
26 |
* Current plugin
|
27 |
*
|
28 |
-
* @var
|
29 |
*/
|
30 |
var $plugin;
|
31 |
|
32 |
-
public function __construct(
|
33 |
$this->plugin = $plugin;
|
34 |
}
|
35 |
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
abstract class Wbcr_Factory448_Update {
|
24 |
|
25 |
/**
|
26 |
* Current plugin
|
27 |
*
|
28 |
+
* @var Wbcr_Factory448_Plugin
|
29 |
*/
|
30 |
var $plugin;
|
31 |
|
32 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
33 |
$this->plugin = $plugin;
|
34 |
}
|
35 |
|
libs/factory/core/includes/assets-managment/class-factory-assets-list.php
CHANGED
@@ -19,7 +19,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
-
class
|
23 |
|
24 |
protected $all = [];
|
25 |
public $header_place = [];
|
@@ -29,15 +29,15 @@ class Wbcr_Factory446_AssetsList {
|
|
29 |
protected $default_place;
|
30 |
|
31 |
/**
|
32 |
-
* @var
|
33 |
*/
|
34 |
protected $plugin;
|
35 |
|
36 |
/**
|
37 |
-
* @param
|
38 |
* @param bool $defaultIsFooter
|
39 |
*/
|
40 |
-
public function __construct(
|
41 |
$this->plugin = $plugin;
|
42 |
|
43 |
if ( $defaultIsFooter ) {
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
+
class Wbcr_Factory448_AssetsList {
|
23 |
|
24 |
protected $all = [];
|
25 |
public $header_place = [];
|
29 |
protected $default_place;
|
30 |
|
31 |
/**
|
32 |
+
* @var Wbcr_Factory448_Plugin
|
33 |
*/
|
34 |
protected $plugin;
|
35 |
|
36 |
/**
|
37 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
38 |
* @param bool $defaultIsFooter
|
39 |
*/
|
40 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin, $defaultIsFooter = true ) {
|
41 |
$this->plugin = $plugin;
|
42 |
|
43 |
if ( $defaultIsFooter ) {
|
libs/factory/core/includes/assets-managment/class-factory-script-list.php
CHANGED
@@ -20,7 +20,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
class
|
24 |
|
25 |
public $localize_data = [];
|
26 |
public $use_ajax = false;
|
@@ -149,7 +149,7 @@ class Wbcr_Factory446_ScriptList extends Wbcr_Factory446_AssetsList {
|
|
149 |
* @param string $varname
|
150 |
* @param array $data
|
151 |
*
|
152 |
-
* @return
|
153 |
*/
|
154 |
public function localize( $varname, $data ) {
|
155 |
$bindTo = count( $this->all ) == 0 ? null : end( $this->all );
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_Factory448_ScriptList extends Wbcr_Factory448_AssetsList {
|
24 |
|
25 |
public $localize_data = [];
|
26 |
public $use_ajax = false;
|
149 |
* @param string $varname
|
150 |
* @param array $data
|
151 |
*
|
152 |
+
* @return Wbcr_Factory448_ScriptList $this
|
153 |
*/
|
154 |
public function localize( $varname, $data ) {
|
155 |
$bindTo = count( $this->all ) == 0 ? null : end( $this->all );
|
libs/factory/core/includes/assets-managment/class-factory-style-list.php
CHANGED
@@ -20,7 +20,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
class
|
24 |
|
25 |
/**
|
26 |
* Adds new items to the collection (default place).
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_Factory448_StyleList extends Wbcr_Factory448_AssetsList {
|
24 |
|
25 |
/**
|
26 |
* Adds new items to the collection (default place).
|
libs/factory/core/includes/class-check-compatibility.php
CHANGED
@@ -75,19 +75,19 @@ if ( ! class_exists( 'Wbcr_Factory_Compatibility' ) ) {
|
|
75 |
$notice_text = $notice_default_text = '';
|
76 |
$notice_default_text .= '<b>' . $this->plugin_title . ' ' . __( 'warning', '' ) . ':</b>' . '<br>';
|
77 |
|
78 |
-
$notice_default_text .= sprintf( __( 'The %s plugin has stopped.', '
|
79 |
$notice_default_text .= __( 'Possible reasons:', '' ) . ' <br>';
|
80 |
|
81 |
$has_one = false;
|
82 |
|
83 |
if ( ! $this->isPhpCompatibility() ) {
|
84 |
$has_one = true;
|
85 |
-
$notice_text .= '- ' . sprintf( __( 'You need to update the PHP version to %s or higher!', '
|
86 |
}
|
87 |
|
88 |
if ( ! $this->isWpCompatibility() ) {
|
89 |
$has_one = true;
|
90 |
-
$notice_text .= '- ' . sprintf( __( 'You need to update WordPress to %s or higher!', '
|
91 |
}
|
92 |
|
93 |
if ( $has_one ) {
|
75 |
$notice_text = $notice_default_text = '';
|
76 |
$notice_default_text .= '<b>' . $this->plugin_title . ' ' . __( 'warning', '' ) . ':</b>' . '<br>';
|
77 |
|
78 |
+
$notice_default_text .= sprintf( __( 'The %s plugin has stopped.', 'wbcr_factory_clearfy_240' ), $this->plugin_title ) . ' ';
|
79 |
$notice_default_text .= __( 'Possible reasons:', '' ) . ' <br>';
|
80 |
|
81 |
$has_one = false;
|
82 |
|
83 |
if ( ! $this->isPhpCompatibility() ) {
|
84 |
$has_one = true;
|
85 |
+
$notice_text .= '- ' . sprintf( __( 'You need to update the PHP version to %s or higher!', 'wbcr_factory_448' ), $this->required_php_version ) . '<br>';
|
86 |
}
|
87 |
|
88 |
if ( ! $this->isWpCompatibility() ) {
|
89 |
$has_one = true;
|
90 |
+
$notice_text .= '- ' . sprintf( __( 'You need to update WordPress to %s or higher!', 'wbcr_factory_448' ), $this->required_wp_version ) . '<br>';
|
91 |
}
|
92 |
|
93 |
if ( $has_one ) {
|
libs/factory/core/includes/class-factory-migrations.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
use Exception;
|
6 |
-
use
|
7 |
|
8 |
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
exit;
|
@@ -35,11 +35,11 @@ class Migrations {
|
|
35 |
/**
|
36 |
* Migrations constructor.
|
37 |
*
|
38 |
-
* @param
|
39 |
*
|
40 |
* @throws Exception
|
41 |
*/
|
42 |
-
public function __construct(
|
43 |
|
44 |
$this->plugin = $plugin;
|
45 |
$plugin_name = $plugin->getPluginName();
|
@@ -129,14 +129,14 @@ class Migrations {
|
|
129 |
$fix_migration_error_url = add_query_arg( 'wbcr_factory_fix_migration_error', 1 );
|
130 |
|
131 |
$notice_text = $migration_error_text;
|
132 |
-
$notice_text .= "<br><br><a href='{$fix_migration_error_url}' class='button button-default'>" . __( 'I fixed, confirm migration', '
|
133 |
|
134 |
$notices[] = [
|
135 |
'id' => 'migration_debug_bar',
|
136 |
'type' => 'error',
|
137 |
'dismissible' => false,
|
138 |
'dismiss_expires' => 0,
|
139 |
-
'text' => '<p><b>' . $this->plugin->getPluginTitle() . ' ' . __( 'migration error', '
|
140 |
];
|
141 |
|
142 |
return $notices;
|
@@ -162,19 +162,19 @@ class Migrations {
|
|
162 |
|
163 |
$migrate_url = add_query_arg( 'wbcr_factory_test_migration', 1 );
|
164 |
|
165 |
-
$notice_text = __( "Plugin activated:", "
|
166 |
|
167 |
-
$notice_text .= __( "Old plugin version (debug):", "
|
168 |
-
$notice_text .= __( "Current plugin version:", "
|
169 |
-
$notice_text .= __( "Need migration:", "
|
170 |
-
$notice_text .= "<a href='{$migrate_url}' class='button button-default'>" . __( "Migrate now", "
|
171 |
|
172 |
$notices[] = [
|
173 |
'id' => 'migration_debug_bar',
|
174 |
'type' => 'warning',
|
175 |
'dismissible' => false,
|
176 |
'dismiss_expires' => 0,
|
177 |
-
'text' => '<p><b style="color:red;">' . $this->plugin->getPluginTitle() . ' ' . __( 'migrations DEBUG bar', '
|
178 |
];
|
179 |
|
180 |
return $notices;
|
@@ -505,7 +505,7 @@ class Migrations {
|
|
505 |
$classes = [];
|
506 |
|
507 |
if ( ! function_exists( 'token_get_all' ) ) {
|
508 |
-
throw new Exception( __( 'There is no PHP Tokenizer extension installed on your server, you cannot use the token_get_all function.', '
|
509 |
}
|
510 |
|
511 |
$tokens = token_get_all( $phpCode );
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448;
|
4 |
|
5 |
use Exception;
|
6 |
+
use Wbcr_Factory448_Plugin;
|
7 |
|
8 |
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
exit;
|
35 |
/**
|
36 |
* Migrations constructor.
|
37 |
*
|
38 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
39 |
*
|
40 |
* @throws Exception
|
41 |
*/
|
42 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin ) {
|
43 |
|
44 |
$this->plugin = $plugin;
|
45 |
$plugin_name = $plugin->getPluginName();
|
129 |
$fix_migration_error_url = add_query_arg( 'wbcr_factory_fix_migration_error', 1 );
|
130 |
|
131 |
$notice_text = $migration_error_text;
|
132 |
+
$notice_text .= "<br><br><a href='{$fix_migration_error_url}' class='button button-default'>" . __( 'I fixed, confirm migration', 'wbcr_factory_448' ) . "</a>";
|
133 |
|
134 |
$notices[] = [
|
135 |
'id' => 'migration_debug_bar',
|
136 |
'type' => 'error',
|
137 |
'dismissible' => false,
|
138 |
'dismiss_expires' => 0,
|
139 |
+
'text' => '<p><b>' . $this->plugin->getPluginTitle() . ' ' . __( 'migration error', 'wbcr_factory_448' ) . '</b><br>' . $notice_text . '</p>'
|
140 |
];
|
141 |
|
142 |
return $notices;
|
162 |
|
163 |
$migrate_url = add_query_arg( 'wbcr_factory_test_migration', 1 );
|
164 |
|
165 |
+
$notice_text = __( "Plugin activated:", "wbcr_factory_448" ) . ' ' . date( "Y-m-d H:i:s", $this->get_plugin_activated_time() ) . "<br>";
|
166 |
|
167 |
+
$notice_text .= __( "Old plugin version (debug):", "wbcr_factory_448" ) . ' ' . $this->get_old_plugin_version() . "<br>";
|
168 |
+
$notice_text .= __( "Current plugin version:", "wbcr_factory_448" ) . ' ' . $this->get_current_plugin_version() . "<br>";
|
169 |
+
$notice_text .= __( "Need migration:", "wbcr_factory_448" ) . ' ' . ( $this->need_migration() ? "true" : "false" ) . "<br><br>";
|
170 |
+
$notice_text .= "<a href='{$migrate_url}' class='button button-default'>" . __( "Migrate now", "wbcr_factory_448" ) . "</a><br>";
|
171 |
|
172 |
$notices[] = [
|
173 |
'id' => 'migration_debug_bar',
|
174 |
'type' => 'warning',
|
175 |
'dismissible' => false,
|
176 |
'dismiss_expires' => 0,
|
177 |
+
'text' => '<p><b style="color:red;">' . $this->plugin->getPluginTitle() . ' ' . __( 'migrations DEBUG bar', 'wbcr_factory_448' ) . '</b><br>' . $notice_text . '</p>'
|
178 |
];
|
179 |
|
180 |
return $notices;
|
505 |
$classes = [];
|
506 |
|
507 |
if ( ! function_exists( 'token_get_all' ) ) {
|
508 |
+
throw new Exception( __( 'There is no PHP Tokenizer extension installed on your server, you cannot use the token_get_all function.', 'wbcr_factory_448' ) );
|
509 |
}
|
510 |
|
511 |
$tokens = token_get_all( $phpCode );
|
libs/factory/core/includes/class-factory-notices.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
-
use
|
6 |
|
7 |
// Exit if accessed directly
|
8 |
if( !defined('ABSPATH') ) {
|
@@ -27,7 +27,7 @@ if( !defined('ABSPATH') ) {
|
|
27 |
class Notices {
|
28 |
|
29 |
/**
|
30 |
-
* @var
|
31 |
*/
|
32 |
protected $plugin;
|
33 |
/**
|
@@ -58,7 +58,7 @@ class Notices {
|
|
58 |
/**
|
59 |
* Инициализируем уведомлений сразу после загрузки модуля уведомлений
|
60 |
*
|
61 |
-
* @param
|
62 |
*/
|
63 |
public function __construct($plugin)
|
64 |
{
|
@@ -86,7 +86,7 @@ class Notices {
|
|
86 |
public function currentScreenAction()
|
87 |
{
|
88 |
/**
|
89 |
-
* @since 2.1.2 - Добавлен, модуль factory_notices_000 был удален. Поэтому в этому хуке мы заменили префикс на
|
90 |
*/
|
91 |
$this->notices = apply_filters('wbcr/factory/admin_notices', $this->notices, $this->plugin->getPluginName());
|
92 |
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448;
|
4 |
|
5 |
+
use Wbcr_Factory448_Plugin;
|
6 |
|
7 |
// Exit if accessed directly
|
8 |
if( !defined('ABSPATH') ) {
|
27 |
class Notices {
|
28 |
|
29 |
/**
|
30 |
+
* @var Wbcr_Factory448_Plugin
|
31 |
*/
|
32 |
protected $plugin;
|
33 |
/**
|
58 |
/**
|
59 |
* Инициализируем уведомлений сразу после загрузки модуля уведомлений
|
60 |
*
|
61 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
62 |
*/
|
63 |
public function __construct($plugin)
|
64 |
{
|
86 |
public function currentScreenAction()
|
87 |
{
|
88 |
/**
|
89 |
+
* @since 2.1.2 - Добавлен, модуль factory_notices_000 был удален. Поэтому в этому хуке мы заменили префикс на factory_448
|
90 |
*/
|
91 |
$this->notices = apply_filters('wbcr/factory/admin_notices', $this->notices, $this->plugin->getPluginName());
|
92 |
|
libs/factory/core/includes/class-factory-options.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
use Exception;
|
@@ -10,7 +10,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
10 |
}
|
11 |
|
12 |
/**
|
13 |
-
* Трейт используется для расширения базового класса плагина
|
14 |
*
|
15 |
* Этот трейт является оберткой для Wordpress функций get_option, get_site_option, update_option, update_site_option,
|
16 |
* delete_option, delete_site_option. Основная задача была получать, обновлять, удалять опции без использования префиксов,
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
use Exception;
|
10 |
}
|
11 |
|
12 |
/**
|
13 |
+
* Трейт используется для расширения базового класса плагина Wbcr_Factory448_Base, позволяя работать с опциями плагина.
|
14 |
*
|
15 |
* Этот трейт является оберткой для Wordpress функций get_option, get_site_option, update_option, update_site_option,
|
16 |
* delete_option, delete_site_option. Основная задача была получать, обновлять, удалять опции без использования префиксов,
|
libs/factory/core/includes/class-factory-plugin-abstract.php
CHANGED
@@ -24,42 +24,42 @@ if( !defined('ABSPATH') ) {
|
|
24 |
* @package factory-core
|
25 |
*
|
26 |
*/
|
27 |
-
abstract class
|
28 |
|
29 |
/**
|
30 |
-
* Instance class
|
31 |
*
|
32 |
* @see https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/390561806
|
33 |
-
* @var
|
34 |
*/
|
35 |
public $request;
|
36 |
|
37 |
/**
|
38 |
* @see https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/393936924
|
39 |
-
* @var \WBCR\
|
40 |
*/
|
41 |
public $premium;
|
42 |
|
43 |
/**
|
44 |
* The Bootstrap Manager class
|
45 |
*
|
46 |
-
* @var
|
47 |
*/
|
48 |
public $bootstrap;
|
49 |
|
50 |
/**
|
51 |
* The Bootstrap Manager class
|
52 |
*
|
53 |
-
* @var
|
54 |
*/
|
55 |
public $forms;
|
56 |
|
57 |
/**
|
58 |
-
* Простой массив со списком зарегистрированных классов унаследованных от
|
59 |
* Классы активации используются для упаковки набора функций, которые нужно выполнить во время
|
60 |
* активации плагина.
|
61 |
*
|
62 |
-
* @var array[]
|
63 |
*/
|
64 |
protected $activator_class = [];
|
65 |
|
@@ -86,7 +86,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
86 |
*
|
87 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
88 |
* @since 4.1.9
|
89 |
-
* @var WBCR\
|
90 |
*/
|
91 |
private $adverts;
|
92 |
|
@@ -95,7 +95,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
95 |
*
|
96 |
* @author Artem Prihodko <webtemyk@yandex.ru>
|
97 |
* @since 4.3.7
|
98 |
-
* @var WBCR\
|
99 |
*/
|
100 |
public $logger;
|
101 |
|
@@ -115,8 +115,8 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
115 |
|
116 |
parent::__construct($plugin_path, $data);
|
117 |
|
118 |
-
$this->request = new
|
119 |
-
//$this->route = new
|
120 |
|
121 |
// INIT PLUGIN FRAMEWORK MODULES
|
122 |
// Framework modules should always be loaded first,
|
@@ -144,15 +144,15 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
144 |
$this->init_plugin_components();
|
145 |
|
146 |
if( wp_doing_ajax() && isset($_REQUEST['action']) ) {
|
147 |
-
if( "wfactory-
|
148 |
-
add_action('wp_ajax_wfactory-
|
149 |
}
|
150 |
|
151 |
-
if( "wfactory-
|
152 |
-
add_action('wp_ajax_wfactory-
|
153 |
}
|
154 |
-
if( "wfactory-
|
155 |
-
add_action('wp_ajax_wfactory-
|
156 |
$this,
|
157 |
'ajax_handler_install_creativemotion_plugins'
|
158 |
]);
|
@@ -165,20 +165,20 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
165 |
|
166 |
public function ajax_handler_install_components()
|
167 |
{
|
168 |
-
require_once
|
169 |
-
|
170 |
}
|
171 |
|
172 |
public function ajax_handler_prepare_component()
|
173 |
{
|
174 |
-
require_once
|
175 |
-
|
176 |
}
|
177 |
|
178 |
public function ajax_handler_install_creativemotion_plugins()
|
179 |
{
|
180 |
-
require_once
|
181 |
-
|
182 |
}
|
183 |
// --------------------------------------------------------
|
184 |
|
@@ -186,9 +186,9 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
186 |
* Устанавливает класс менеджер, которому плагин будет делегировать подключение ресурсов (картинок,
|
187 |
* скриптов, стилей) фреймворка.
|
188 |
*
|
189 |
-
* @param
|
190 |
*/
|
191 |
-
public function setBootstap(
|
192 |
{
|
193 |
$this->bootstrap = $bootstrap;
|
194 |
}
|
@@ -196,9 +196,9 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
196 |
/**
|
197 |
* Устанавливает класс менеджер, которому будет делегирована работа с html формами фреймворка.
|
198 |
*
|
199 |
-
* @param
|
200 |
*/
|
201 |
-
public function setForms(
|
202 |
{
|
203 |
$this->forms = $forms;
|
204 |
}
|
@@ -220,7 +220,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
220 |
* Устанавливает класс менеджер, которому будет делегирована работа с объявлениями в Wordpress
|
221 |
*
|
222 |
* @param string $class_name Logger class name
|
223 |
-
* @param array
|
224 |
*
|
225 |
* @author Artem Prihodko <webtemyk@yandex.ru>
|
226 |
* @since 4.3.7
|
@@ -246,8 +246,8 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
246 |
*/
|
247 |
public function set_license_provider($name, $class_name)
|
248 |
{
|
249 |
-
if( !isset(WBCR\
|
250 |
-
WBCR\
|
251 |
}
|
252 |
}
|
253 |
|
@@ -265,8 +265,8 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
265 |
*/
|
266 |
public function set_update_repository($name, $class_name)
|
267 |
{
|
268 |
-
if( !isset(WBCR\
|
269 |
-
WBCR\
|
270 |
}
|
271 |
}
|
272 |
|
@@ -276,7 +276,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
276 |
* Доступен глобально через метод app(), чаще всего используется для создания точек для ротации
|
277 |
* рекламных объявлений.
|
278 |
*
|
279 |
-
* @return \WBCR\
|
280 |
* @since 1.1
|
281 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
282 |
*/
|
@@ -312,18 +312,18 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
312 |
|
313 |
public function newScriptList()
|
314 |
{
|
315 |
-
return new
|
316 |
}
|
317 |
|
318 |
public function newStyleList()
|
319 |
{
|
320 |
-
return new
|
321 |
}
|
322 |
|
323 |
/**
|
324 |
* Все страницы плагина создаются через специальную обертку, за которую отвечает модуль
|
325 |
* фреймворка pages. Разработчик создает собственный класс, унаследованный от
|
326 |
-
*
|
327 |
* Метод выполняет подключение класса страницы и регистрирует его в модуле фреймворка
|
328 |
* pages.
|
329 |
*
|
@@ -333,7 +333,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
333 |
* @see https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/222887949 - документация по созданию страниц
|
334 |
*
|
335 |
* @param string $class_name Имя регистрируемого класса страницы. Пример: WCL_Page_Name.
|
336 |
-
* Регистрируемый класс должен быть унаследован от класса
|
337 |
* @param string $file_path Абсолютный путь к файлу с классом страницы.
|
338 |
*
|
339 |
* @throws Exception
|
@@ -355,11 +355,11 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
355 |
throw new Exception('A class with this name {' . $class_name . '} does not exist.');
|
356 |
}
|
357 |
|
358 |
-
if( !class_exists('
|
359 |
-
throw new Exception('The
|
360 |
}
|
361 |
|
362 |
-
|
363 |
}
|
364 |
|
365 |
/**
|
@@ -409,16 +409,16 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
409 |
/**
|
410 |
* @since 4.1.1 - change hook name
|
411 |
*/
|
412 |
-
if( apply_filters("wbcr/
|
413 |
return;
|
414 |
}
|
415 |
|
416 |
/**
|
417 |
-
*
|
418 |
*
|
419 |
* @since 4.1.1 - deprecated
|
420 |
*/
|
421 |
-
|
422 |
$this
|
423 |
], '4.1.1', "wbcr/factory/plugin_activation");
|
424 |
|
@@ -427,7 +427,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
427 |
*
|
428 |
* @since 4.1.2 - deprecated
|
429 |
*/
|
430 |
-
|
431 |
$this
|
432 |
], '4.1.2', "wbcr/factory/before_plugin_activation");
|
433 |
|
@@ -443,16 +443,16 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
443 |
*
|
444 |
* @since 4.1.2 - deprecated
|
445 |
*/
|
446 |
-
|
447 |
$this
|
448 |
], '4.1.2', "wbcr/factory/before_plugin_{$this->plugin_name}_activation");
|
449 |
|
450 |
/**
|
451 |
-
*
|
452 |
*
|
453 |
* @since 4.1.1 - deprecated
|
454 |
*/
|
455 |
-
|
456 |
$this
|
457 |
], '4.1.1', "wbcr/factory/before_plugin_{$this->plugin_name}_activation");
|
458 |
|
@@ -493,16 +493,16 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
493 |
/**
|
494 |
* @since 4.1.1 - change hook name
|
495 |
*/
|
496 |
-
if( apply_filters("wbcr/
|
497 |
return;
|
498 |
}
|
499 |
|
500 |
/**
|
501 |
-
*
|
502 |
*
|
503 |
* @since 4.1.1 - deprecated
|
504 |
*/
|
505 |
-
|
506 |
$this
|
507 |
], '4.1.1', "wbcr/factory/plugin_deactivation");
|
508 |
|
@@ -511,7 +511,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
511 |
*
|
512 |
* @since 4.1.2 - deprecated
|
513 |
*/
|
514 |
-
|
515 |
$this
|
516 |
], '4.1.2', "wbcr/factory/before_plugin_deactivation");
|
517 |
|
@@ -523,11 +523,11 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
523 |
do_action('wbcr/factory/plugin_deactivation', $this);
|
524 |
|
525 |
/**
|
526 |
-
*
|
527 |
*
|
528 |
* @since 4.1.1 - deprecated
|
529 |
*/
|
530 |
-
|
531 |
$this
|
532 |
], '4.1.1', "wbcr/factory/before_plugin_{$this->plugin_name}_deactivation");
|
533 |
|
@@ -536,7 +536,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
536 |
*
|
537 |
* @since 4.1.2 - deprecated
|
538 |
*/
|
539 |
-
|
540 |
$this
|
541 |
], '4.1.2', "wbcr/factory/before_plugin_{$this->plugin_name}_deactivation");
|
542 |
|
@@ -574,8 +574,8 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
574 |
*/
|
575 |
public function getPluginPageUrl($page_id, $args = [])
|
576 |
{
|
577 |
-
if( !class_exists('
|
578 |
-
throw new Exception('The
|
579 |
}
|
580 |
|
581 |
if( !is_admin() ) {
|
@@ -584,7 +584,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
584 |
return null;
|
585 |
}
|
586 |
|
587 |
-
return
|
588 |
}
|
589 |
|
590 |
/**
|
@@ -594,13 +594,13 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
594 |
* @param $slug
|
595 |
* param $premium
|
596 |
*
|
597 |
-
* @return \WBCR\
|
598 |
*/
|
599 |
public function get_install_component_button($component_type, $slug)
|
600 |
{
|
601 |
-
require_once
|
602 |
|
603 |
-
return new \WBCR\
|
604 |
}
|
605 |
|
606 |
/**
|
@@ -609,13 +609,13 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
609 |
* @param $component_type
|
610 |
* @param $slug
|
611 |
*
|
612 |
-
* @return \WBCR\
|
613 |
*/
|
614 |
public function get_delete_component_button($component_type, $slug)
|
615 |
{
|
616 |
-
require_once
|
617 |
|
618 |
-
return new WBCR\
|
619 |
}
|
620 |
|
621 |
/**
|
@@ -798,12 +798,12 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
798 |
/**
|
799 |
* @since 4.1.1 - deprecated
|
800 |
*/
|
801 |
-
|
802 |
|
803 |
/**
|
804 |
* @since 4.1.1 - add
|
805 |
*/
|
806 |
-
do_action('wbcr/
|
807 |
}
|
808 |
|
809 |
|
@@ -830,7 +830,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
830 |
});
|
831 |
|
832 |
if( is_admin() ) {
|
833 |
-
add_filter('
|
834 |
|
835 |
register_activation_hook($this->get_paths()->main_file, [$this, 'activation_hook']);
|
836 |
register_deactivation_hook($this->get_paths()->main_file, [$this, 'deactivation_hook']);
|
@@ -846,7 +846,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
846 |
*/
|
847 |
protected function init_plugin_migrations()
|
848 |
{
|
849 |
-
new WBCR\
|
850 |
}
|
851 |
|
852 |
/**
|
@@ -857,7 +857,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
857 |
*/
|
858 |
protected function init_plugin_notices()
|
859 |
{
|
860 |
-
new Wbcr\
|
861 |
}
|
862 |
|
863 |
/**
|
@@ -873,7 +873,7 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
873 |
protected function init_plugin_updates()
|
874 |
{
|
875 |
if( $this->has_updates ) {
|
876 |
-
new WBCR\
|
877 |
}
|
878 |
}
|
879 |
|
@@ -896,11 +896,11 @@ abstract class Wbcr_Factory446_Plugin extends Wbcr_Factory446_Base {
|
|
896 |
}
|
897 |
|
898 |
// Создаем экземляр премиум менеджера, мы сможем к нему обращаться глобально.
|
899 |
-
$this->premium = WBCR\
|
900 |
|
901 |
// Подключаем премиум апгрейдер
|
902 |
if( isset($this->license_settings['has_updates']) && $this->license_settings['has_updates'] ) {
|
903 |
-
new WBCR\
|
904 |
}
|
905 |
}
|
906 |
}
|
24 |
* @package factory-core
|
25 |
*
|
26 |
*/
|
27 |
+
abstract class Wbcr_Factory448_Plugin extends Wbcr_Factory448_Base {
|
28 |
|
29 |
/**
|
30 |
+
* Instance class Wbcr_Factory448_Request, required manages http requests
|
31 |
*
|
32 |
* @see https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/390561806
|
33 |
+
* @var Wbcr_Factory448_Request
|
34 |
*/
|
35 |
public $request;
|
36 |
|
37 |
/**
|
38 |
* @see https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/393936924
|
39 |
+
* @var \WBCR\Factory_448\Premium\Provider
|
40 |
*/
|
41 |
public $premium;
|
42 |
|
43 |
/**
|
44 |
* The Bootstrap Manager class
|
45 |
*
|
46 |
+
* @var Wbcr_FactoryBootstrap448_Manager
|
47 |
*/
|
48 |
public $bootstrap;
|
49 |
|
50 |
/**
|
51 |
* The Bootstrap Manager class
|
52 |
*
|
53 |
+
* @var Wbcr_FactoryForms445_Manager
|
54 |
*/
|
55 |
public $forms;
|
56 |
|
57 |
/**
|
58 |
+
* Простой массив со списком зарегистрированных классов унаследованных от Wbcr_Factory448_Activator.
|
59 |
* Классы активации используются для упаковки набора функций, которые нужно выполнить во время
|
60 |
* активации плагина.
|
61 |
*
|
62 |
+
* @var array[] Wbcr_Factory448_Activator
|
63 |
*/
|
64 |
protected $activator_class = [];
|
65 |
|
86 |
*
|
87 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
88 |
* @since 4.1.9
|
89 |
+
* @var WBCR\Factory_Adverts_126\Base
|
90 |
*/
|
91 |
private $adverts;
|
92 |
|
95 |
*
|
96 |
* @author Artem Prihodko <webtemyk@yandex.ru>
|
97 |
* @since 4.3.7
|
98 |
+
* @var WBCR\Factory_Logger_113\Logger
|
99 |
*/
|
100 |
public $logger;
|
101 |
|
115 |
|
116 |
parent::__construct($plugin_path, $data);
|
117 |
|
118 |
+
$this->request = new Wbcr_Factory448_Request();
|
119 |
+
//$this->route = new Wbcr_Factory448_Route();
|
120 |
|
121 |
// INIT PLUGIN FRAMEWORK MODULES
|
122 |
// Framework modules should always be loaded first,
|
144 |
$this->init_plugin_components();
|
145 |
|
146 |
if( wp_doing_ajax() && isset($_REQUEST['action']) ) {
|
147 |
+
if( "wfactory-448-intall-component" == $_REQUEST['action'] ) {
|
148 |
+
add_action('wp_ajax_wfactory-448-intall-component', [$this, 'ajax_handler_install_components']);
|
149 |
}
|
150 |
|
151 |
+
if( "wfactory-448-prepare-component" == $_REQUEST['action'] ) {
|
152 |
+
add_action('wp_ajax_wfactory-448-prepare-component', [$this, 'ajax_handler_prepare_component']);
|
153 |
}
|
154 |
+
if( "wfactory-448-creativemotion-install-plugin" == $_REQUEST['action'] ) {
|
155 |
+
add_action('wp_ajax_wfactory-448-creativemotion-install-plugin', [
|
156 |
$this,
|
157 |
'ajax_handler_install_creativemotion_plugins'
|
158 |
]);
|
165 |
|
166 |
public function ajax_handler_install_components()
|
167 |
{
|
168 |
+
require_once FACTORY_448_DIR . '/ajax/install-addons.php';
|
169 |
+
wfactory_448_install_components($this);
|
170 |
}
|
171 |
|
172 |
public function ajax_handler_prepare_component()
|
173 |
{
|
174 |
+
require_once FACTORY_448_DIR . '/ajax/install-addons.php';
|
175 |
+
wfactory_448_prepare_component($this);
|
176 |
}
|
177 |
|
178 |
public function ajax_handler_install_creativemotion_plugins()
|
179 |
{
|
180 |
+
require_once FACTORY_448_DIR . '/ajax/install-addons.php';
|
181 |
+
wfactory_448_creativemotion_install_plugin($this);
|
182 |
}
|
183 |
// --------------------------------------------------------
|
184 |
|
186 |
* Устанавливает класс менеджер, которому плагин будет делегировать подключение ресурсов (картинок,
|
187 |
* скриптов, стилей) фреймворка.
|
188 |
*
|
189 |
+
* @param Wbcr_FactoryBootstrap448_Manager $bootstrap
|
190 |
*/
|
191 |
+
public function setBootstap(Wbcr_FactoryBootstrap448_Manager $bootstrap)
|
192 |
{
|
193 |
$this->bootstrap = $bootstrap;
|
194 |
}
|
196 |
/**
|
197 |
* Устанавливает класс менеджер, которому будет делегирована работа с html формами фреймворка.
|
198 |
*
|
199 |
+
* @param Wbcr_FactoryForms445_Manager $forms
|
200 |
*/
|
201 |
+
public function setForms(Wbcr_FactoryForms445_Manager $forms)
|
202 |
{
|
203 |
$this->forms = $forms;
|
204 |
}
|
220 |
* Устанавливает класс менеджер, которому будет делегирована работа с объявлениями в Wordpress
|
221 |
*
|
222 |
* @param string $class_name Logger class name
|
223 |
+
* @param array $settings Logger settings
|
224 |
*
|
225 |
* @author Artem Prihodko <webtemyk@yandex.ru>
|
226 |
* @since 4.3.7
|
246 |
*/
|
247 |
public function set_license_provider($name, $class_name)
|
248 |
{
|
249 |
+
if( !isset(WBCR\Factory_448\Premium\Manager::$providers[$name]) ) {
|
250 |
+
WBCR\Factory_448\Premium\Manager::$providers[$name] = $class_name;
|
251 |
}
|
252 |
}
|
253 |
|
265 |
*/
|
266 |
public function set_update_repository($name, $class_name)
|
267 |
{
|
268 |
+
if( !isset(WBCR\Factory_448\Updates\Upgrader::$repositories[$name]) ) {
|
269 |
+
WBCR\Factory_448\Updates\Upgrader::$repositories[$name] = $class_name;
|
270 |
}
|
271 |
}
|
272 |
|
276 |
* Доступен глобально через метод app(), чаще всего используется для создания точек для ротации
|
277 |
* рекламных объявлений.
|
278 |
*
|
279 |
+
* @return \WBCR\Factory_Adverts_126\Base
|
280 |
* @since 1.1
|
281 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
282 |
*/
|
312 |
|
313 |
public function newScriptList()
|
314 |
{
|
315 |
+
return new Wbcr_Factory448_ScriptList($this);
|
316 |
}
|
317 |
|
318 |
public function newStyleList()
|
319 |
{
|
320 |
+
return new Wbcr_Factory448_StyleList($this);
|
321 |
}
|
322 |
|
323 |
/**
|
324 |
* Все страницы плагина создаются через специальную обертку, за которую отвечает модуль
|
325 |
* фреймворка pages. Разработчик создает собственный класс, унаследованный от
|
326 |
+
* Wbcr_FactoryPages447_AdminPage, а затем регистрирует его через этот метод.
|
327 |
* Метод выполняет подключение класса страницы и регистрирует его в модуле фреймворка
|
328 |
* pages.
|
329 |
*
|
333 |
* @see https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/222887949 - документация по созданию страниц
|
334 |
*
|
335 |
* @param string $class_name Имя регистрируемого класса страницы. Пример: WCL_Page_Name.
|
336 |
+
* Регистрируемый класс должен быть унаследован от класса Wbcr_FactoryPages447_AdminPage.
|
337 |
* @param string $file_path Абсолютный путь к файлу с классом страницы.
|
338 |
*
|
339 |
* @throws Exception
|
355 |
throw new Exception('A class with this name {' . $class_name . '} does not exist.');
|
356 |
}
|
357 |
|
358 |
+
if( !class_exists('Wbcr_FactoryPages447') ) {
|
359 |
+
throw new Exception('The factory_pages_447 module is not included.');
|
360 |
}
|
361 |
|
362 |
+
Wbcr_FactoryPages447::register($this, $class_name);
|
363 |
}
|
364 |
|
365 |
/**
|
409 |
/**
|
410 |
* @since 4.1.1 - change hook name
|
411 |
*/
|
412 |
+
if( apply_filters("wbcr/factory_448/cancel_plugin_activation_{$this->plugin_name}", false) ) {
|
413 |
return;
|
414 |
}
|
415 |
|
416 |
/**
|
417 |
+
* wbcr_factory_448_plugin_activation
|
418 |
*
|
419 |
* @since 4.1.1 - deprecated
|
420 |
*/
|
421 |
+
wbcr_factory_448_do_action_deprecated('wbcr_factory_448_plugin_activation', [
|
422 |
$this
|
423 |
], '4.1.1', "wbcr/factory/plugin_activation");
|
424 |
|
427 |
*
|
428 |
* @since 4.1.2 - deprecated
|
429 |
*/
|
430 |
+
wbcr_factory_448_do_action_deprecated('wbcr/factory/plugin_activation', [
|
431 |
$this
|
432 |
], '4.1.2', "wbcr/factory/before_plugin_activation");
|
433 |
|
443 |
*
|
444 |
* @since 4.1.2 - deprecated
|
445 |
*/
|
446 |
+
wbcr_factory_448_do_action_deprecated("wbcr/factory/plugin_{$this->plugin_name}_activation", [
|
447 |
$this
|
448 |
], '4.1.2', "wbcr/factory/before_plugin_{$this->plugin_name}_activation");
|
449 |
|
450 |
/**
|
451 |
+
* wbcr_factory_448_plugin_activation_' . $this->plugin_name
|
452 |
*
|
453 |
* @since 4.1.1 - deprecated
|
454 |
*/
|
455 |
+
wbcr_factory_448_do_action_deprecated('wbcr_factory_448_plugin_activation_' . $this->plugin_name, [
|
456 |
$this
|
457 |
], '4.1.1', "wbcr/factory/before_plugin_{$this->plugin_name}_activation");
|
458 |
|
493 |
/**
|
494 |
* @since 4.1.1 - change hook name
|
495 |
*/
|
496 |
+
if( apply_filters("wbcr/factory_448/cancel_plugin_deactivation_{$this->plugin_name}", false) ) {
|
497 |
return;
|
498 |
}
|
499 |
|
500 |
/**
|
501 |
+
* wbcr_factory_448_plugin_deactivation
|
502 |
*
|
503 |
* @since 4.1.1 - deprecated
|
504 |
*/
|
505 |
+
wbcr_factory_448_do_action_deprecated('wbcr_factory_448_plugin_deactivation', [
|
506 |
$this
|
507 |
], '4.1.1', "wbcr/factory/plugin_deactivation");
|
508 |
|
511 |
*
|
512 |
* @since 4.1.2 - deprecated
|
513 |
*/
|
514 |
+
wbcr_factory_448_do_action_deprecated('wbcr/factory/plugin_deactivation', [
|
515 |
$this
|
516 |
], '4.1.2', "wbcr/factory/before_plugin_deactivation");
|
517 |
|
523 |
do_action('wbcr/factory/plugin_deactivation', $this);
|
524 |
|
525 |
/**
|
526 |
+
* wbcr_factory_448_plugin_deactivation_ . $this->plugin_name
|
527 |
*
|
528 |
* @since 4.1.1 - deprecated
|
529 |
*/
|
530 |
+
wbcr_factory_448_do_action_deprecated('wbcr_factory_448_plugin_deactivation_' . $this->plugin_name, [
|
531 |
$this
|
532 |
], '4.1.1', "wbcr/factory/before_plugin_{$this->plugin_name}_deactivation");
|
533 |
|
536 |
*
|
537 |
* @since 4.1.2 - deprecated
|
538 |
*/
|
539 |
+
wbcr_factory_448_do_action_deprecated("wbcr/factory/plugin_{$this->plugin_name}_deactivation", [
|
540 |
$this
|
541 |
], '4.1.2', "wbcr/factory/before_plugin_{$this->plugin_name}_deactivation");
|
542 |
|
574 |
*/
|
575 |
public function getPluginPageUrl($page_id, $args = [])
|
576 |
{
|
577 |
+
if( !class_exists('Wbcr_FactoryPages447') ) {
|
578 |
+
throw new Exception('The factory_pages_447 module is not included.');
|
579 |
}
|
580 |
|
581 |
if( !is_admin() ) {
|
584 |
return null;
|
585 |
}
|
586 |
|
587 |
+
return Wbcr_FactoryPages447::getPageUrl($this, $page_id, $args);
|
588 |
}
|
589 |
|
590 |
/**
|
594 |
* @param $slug
|
595 |
* param $premium
|
596 |
*
|
597 |
+
* @return \WBCR\Factory_448\Components\Install_Button
|
598 |
*/
|
599 |
public function get_install_component_button($component_type, $slug)
|
600 |
{
|
601 |
+
require_once FACTORY_448_DIR . '/includes/components/class-install-component-button.php';
|
602 |
|
603 |
+
return new \WBCR\Factory_448\Components\Install_Button($this, $component_type, $slug);
|
604 |
}
|
605 |
|
606 |
/**
|
609 |
* @param $component_type
|
610 |
* @param $slug
|
611 |
*
|
612 |
+
* @return \WBCR\Factory_448\Components\Delete_Button
|
613 |
*/
|
614 |
public function get_delete_component_button($component_type, $slug)
|
615 |
{
|
616 |
+
require_once FACTORY_448_DIR . '/includes/components/class-delete-component-button.php';
|
617 |
|
618 |
+
return new WBCR\Factory_448\Components\Delete_Button($this, $component_type, $slug);
|
619 |
}
|
620 |
|
621 |
/**
|
798 |
/**
|
799 |
* @since 4.1.1 - deprecated
|
800 |
*/
|
801 |
+
wbcr_factory_448_do_action_deprecated('wbcr_factory_448_core_modules_loaded-' . $this->plugin_name, [], '4.1.1', "wbcr/factory_448/modules_loaded-" . $this->plugin_name);
|
802 |
|
803 |
/**
|
804 |
* @since 4.1.1 - add
|
805 |
*/
|
806 |
+
do_action('wbcr/factory_448/modules_loaded-' . $this->plugin_name);
|
807 |
}
|
808 |
|
809 |
|
830 |
});
|
831 |
|
832 |
if( is_admin() ) {
|
833 |
+
add_filter('wbcr_factory_448_core_admin_allow_multisite', '__return_true');
|
834 |
|
835 |
register_activation_hook($this->get_paths()->main_file, [$this, 'activation_hook']);
|
836 |
register_deactivation_hook($this->get_paths()->main_file, [$this, 'deactivation_hook']);
|
846 |
*/
|
847 |
protected function init_plugin_migrations()
|
848 |
{
|
849 |
+
new WBCR\Factory_448\Migrations($this);
|
850 |
}
|
851 |
|
852 |
/**
|
857 |
*/
|
858 |
protected function init_plugin_notices()
|
859 |
{
|
860 |
+
new Wbcr\Factory_448\Notices($this);
|
861 |
}
|
862 |
|
863 |
/**
|
873 |
protected function init_plugin_updates()
|
874 |
{
|
875 |
if( $this->has_updates ) {
|
876 |
+
new WBCR\Factory_448\Updates\Upgrader($this);
|
877 |
}
|
878 |
}
|
879 |
|
896 |
}
|
897 |
|
898 |
// Создаем экземляр премиум менеджера, мы сможем к нему обращаться глобально.
|
899 |
+
$this->premium = WBCR\Factory_448\Premium\Manager::instance($this, $this->license_settings);
|
900 |
|
901 |
// Подключаем премиум апгрейдер
|
902 |
if( isset($this->license_settings['has_updates']) && $this->license_settings['has_updates'] ) {
|
903 |
+
new WBCR\Factory_448\Updates\Premium_Upgrader($this);
|
904 |
}
|
905 |
}
|
906 |
}
|
libs/factory/core/includes/class-factory-plugin-base.php
CHANGED
@@ -5,7 +5,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
5 |
}
|
6 |
|
7 |
/**
|
8 |
-
* Базовый класс для создания нового плагина. Полную реализацию класса смотрите в
|
9 |
*
|
10 |
* Документация по классу: https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/392724484
|
11 |
* Документация по созданию плагина: https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/327828
|
@@ -17,9 +17,9 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
17 |
* @since 1.0.0
|
18 |
* @package factory-core
|
19 |
*/
|
20 |
-
class
|
21 |
|
22 |
-
use WBCR\
|
23 |
|
24 |
/**
|
25 |
* Обязательное свойство. Префикс, используется для создания пространство имен.
|
@@ -81,7 +81,7 @@ class Wbcr_Factory446_Base {
|
|
81 |
* https://robin-image-optimizer.webcraftic.com/premium-features.
|
82 |
*
|
83 |
* Это свойство заполняется для того, чтобы в процессе разработки вы могли использовать
|
84 |
-
* экземпляр класса \WBCR\
|
85 |
* Тем самым вы избавляете себя от жесткого прописывания ссылок на лендинг плагина и
|
86 |
* можете изменить все ссылки в одном месте.
|
87 |
*
|
@@ -127,7 +127,7 @@ class Wbcr_Factory446_Base {
|
|
127 |
* к примеру: freemius, codecanyon, templatemonster, вам нужно указать только настройки для
|
128 |
* взаимодействия с выбранным вами провайдером. Каждая реализация провайдера лицензий может иметь
|
129 |
* индивидуальный настройки, в этом примере приведены настройки для freemius провайдера
|
130 |
-
* WBCR\
|
131 |
*
|
132 |
* На текущий момент существует только реализация для freemius провайдера.
|
133 |
*
|
@@ -177,9 +177,9 @@ class Wbcr_Factory446_Base {
|
|
177 |
* }
|
178 |
*/
|
179 |
protected $load_factory_modules = [
|
180 |
-
[ 'libs/factory/bootstrap', '
|
181 |
-
[ 'libs/factory/forms', '
|
182 |
-
[ 'libs/factory/pages', '
|
183 |
];
|
184 |
|
185 |
/**
|
@@ -209,20 +209,20 @@ class Wbcr_Factory446_Base {
|
|
209 |
|
210 |
|
211 |
/**
|
212 |
-
* Экземпляр класса \WBCR\
|
213 |
* о сайте плагина. Чаще всего используется для получения ссылки на страницу с тарифами или
|
214 |
* ссылки на форму обратной связи. Встроен механизм отслеживания по utm меткам.
|
215 |
*
|
216 |
-
* @var \WBCR\
|
217 |
*/
|
218 |
protected $support;
|
219 |
|
220 |
/**
|
221 |
-
* Экземпляр класса \WBCR\
|
222 |
* путях плагина. Часто используется для получения путей или ссылок на место хранения плагина
|
223 |
* или его входного файла.
|
224 |
*
|
225 |
-
* @var \WBCR\
|
226 |
*/
|
227 |
protected $paths;
|
228 |
|
@@ -270,8 +270,8 @@ class Wbcr_Factory446_Base {
|
|
270 |
throw new Exception( 'One of the required attributes has not been passed (prefix, plugin_title, plugin_name, plugin_version, plugin_text_domain).' );
|
271 |
}
|
272 |
|
273 |
-
$this->support = new \WBCR\
|
274 |
-
$this->paths = new \WBCR\
|
275 |
|
276 |
// used only in the module 'updates'
|
277 |
$this->plugin_slug = ! empty( $this->plugin_name ) ? $this->plugin_name : basename( $plugin_file );
|
@@ -391,7 +391,7 @@ class Wbcr_Factory446_Base {
|
|
391 |
* Проверяет, включен ли премиум для этого плагина или нет.
|
392 |
*
|
393 |
* @return bool Возвращает true, если премиум пакет включен для этого плагина.
|
394 |
-
* См.
|
395 |
*/
|
396 |
public function has_premium() {
|
397 |
return $this->has_premium;
|
@@ -400,7 +400,7 @@ class Wbcr_Factory446_Base {
|
|
400 |
/**
|
401 |
* Позволяет получить заголовок плагина.
|
402 |
*
|
403 |
-
* @return string Возвращает заголовок плагина. См.
|
404 |
*/
|
405 |
public function getPluginTitle() {
|
406 |
return $this->plugin_title;
|
@@ -409,7 +409,7 @@ class Wbcr_Factory446_Base {
|
|
409 |
/**
|
410 |
* Позволяет получить префикс плагина.
|
411 |
*
|
412 |
-
* @return string Возвращает префикс плагина.См.
|
413 |
*/
|
414 |
public function getPrefix() {
|
415 |
return $this->prefix;
|
@@ -418,7 +418,7 @@ class Wbcr_Factory446_Base {
|
|
418 |
/**
|
419 |
* Позволяет получить имя плагина.
|
420 |
*
|
421 |
-
* @return string Возвращает имя плагина. См.
|
422 |
*/
|
423 |
public function getPluginName() {
|
424 |
return $this->plugin_name;
|
@@ -427,7 +427,7 @@ class Wbcr_Factory446_Base {
|
|
427 |
/**
|
428 |
* Позволяет получить версию плагина.
|
429 |
*
|
430 |
-
* @return string Возвращает версию плагина. См.
|
431 |
*/
|
432 |
public function getPluginVersion() {
|
433 |
return $this->plugin_version;
|
@@ -449,7 +449,7 @@ class Wbcr_Factory446_Base {
|
|
449 |
* какие-то данные не описанные в интерфейсе этого плагина.
|
450 |
*
|
451 |
* @param string $attr_name Имя атрибута, который нужно получить. Идентично ключу в массиве
|
452 |
-
*
|
453 |
*
|
454 |
* @return null
|
455 |
*/
|
@@ -462,18 +462,18 @@ class Wbcr_Factory446_Base {
|
|
462 |
}
|
463 |
|
464 |
/**
|
465 |
-
* Предоставляет доступ к экземпляру класса \WBCR\
|
466 |
*
|
467 |
-
* @return \WBCR\
|
468 |
*/
|
469 |
public function get_support() {
|
470 |
return $this->support;
|
471 |
}
|
472 |
|
473 |
/**
|
474 |
-
* Предоставляет доступ к экземпляру класса \WBCR\
|
475 |
*
|
476 |
-
* @return \WBCR\
|
477 |
*/
|
478 |
public function get_paths() {
|
479 |
return $this->paths;
|
@@ -482,7 +482,7 @@ class Wbcr_Factory446_Base {
|
|
482 |
/**
|
483 |
* Позволяет получить сырые данные плагина в виде объекта StdClass.
|
484 |
*
|
485 |
-
* @return object Возвращает объект с сырыми данными плагина. См.
|
486 |
*/
|
487 |
public function getPluginInfo() {
|
488 |
return (object) $this->plugin_data;
|
5 |
}
|
6 |
|
7 |
/**
|
8 |
+
* Базовый класс для создания нового плагина. Полную реализацию класса смотрите в Wbcr_Factory448_Plugin
|
9 |
*
|
10 |
* Документация по классу: https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/392724484
|
11 |
* Документация по созданию плагина: https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/327828
|
17 |
* @since 1.0.0
|
18 |
* @package factory-core
|
19 |
*/
|
20 |
+
class Wbcr_Factory448_Base {
|
21 |
|
22 |
+
use WBCR\Factory_448\Options;
|
23 |
|
24 |
/**
|
25 |
* Обязательное свойство. Префикс, используется для создания пространство имен.
|
81 |
* https://robin-image-optimizer.webcraftic.com/premium-features.
|
82 |
*
|
83 |
* Это свойство заполняется для того, чтобы в процессе разработки вы могли использовать
|
84 |
+
* экземпляр класса \WBCR\Factory_448\Entities\Support, для получения информации о сайте плагина.
|
85 |
* Тем самым вы избавляете себя от жесткого прописывания ссылок на лендинг плагина и
|
86 |
* можете изменить все ссылки в одном месте.
|
87 |
*
|
127 |
* к примеру: freemius, codecanyon, templatemonster, вам нужно указать только настройки для
|
128 |
* взаимодействия с выбранным вами провайдером. Каждая реализация провайдера лицензий может иметь
|
129 |
* индивидуальный настройки, в этом примере приведены настройки для freemius провайдера
|
130 |
+
* WBCR\Factory_448\Premium\Provider > WBCR\Factory_Freemius_136\Premium\Provider
|
131 |
*
|
132 |
* На текущий момент существует только реализация для freemius провайдера.
|
133 |
*
|
177 |
* }
|
178 |
*/
|
179 |
protected $load_factory_modules = [
|
180 |
+
[ 'libs/factory/bootstrap', 'factory_bootstrap_448', 'admin' ],
|
181 |
+
[ 'libs/factory/forms', 'factory_forms_445', 'admin' ],
|
182 |
+
[ 'libs/factory/pages', 'factory_pages_447', 'admin' ],
|
183 |
];
|
184 |
|
185 |
/**
|
209 |
|
210 |
|
211 |
/**
|
212 |
+
* Экземпляр класса \WBCR\Factory_448\Entities\Support используется для получения информации
|
213 |
* о сайте плагина. Чаще всего используется для получения ссылки на страницу с тарифами или
|
214 |
* ссылки на форму обратной связи. Встроен механизм отслеживания по utm меткам.
|
215 |
*
|
216 |
+
* @var \WBCR\Factory_448\Entities\Support
|
217 |
*/
|
218 |
protected $support;
|
219 |
|
220 |
/**
|
221 |
+
* Экземпляр класса \WBCR\Factory_448\Entities\Paths используется для получения информации о
|
222 |
* путях плагина. Часто используется для получения путей или ссылок на место хранения плагина
|
223 |
* или его входного файла.
|
224 |
*
|
225 |
+
* @var \WBCR\Factory_448\Entities\Paths
|
226 |
*/
|
227 |
protected $paths;
|
228 |
|
270 |
throw new Exception( 'One of the required attributes has not been passed (prefix, plugin_title, plugin_name, plugin_version, plugin_text_domain).' );
|
271 |
}
|
272 |
|
273 |
+
$this->support = new \WBCR\Factory_448\Entities\Support( $this->support_details );
|
274 |
+
$this->paths = new \WBCR\Factory_448\Entities\Paths( $plugin_file );
|
275 |
|
276 |
// used only in the module 'updates'
|
277 |
$this->plugin_slug = ! empty( $this->plugin_name ) ? $this->plugin_name : basename( $plugin_file );
|
391 |
* Проверяет, включен ли премиум для этого плагина или нет.
|
392 |
*
|
393 |
* @return bool Возвращает true, если премиум пакет включен для этого плагина.
|
394 |
+
* См. Wbcr_Factory448_Base::has_premium
|
395 |
*/
|
396 |
public function has_premium() {
|
397 |
return $this->has_premium;
|
400 |
/**
|
401 |
* Позволяет получить заголовок плагина.
|
402 |
*
|
403 |
+
* @return string Возвращает заголовок плагина. См. Wbcr_Factory448_Base::plugin_title
|
404 |
*/
|
405 |
public function getPluginTitle() {
|
406 |
return $this->plugin_title;
|
409 |
/**
|
410 |
* Позволяет получить префикс плагина.
|
411 |
*
|
412 |
+
* @return string Возвращает префикс плагина.См. Wbcr_Factory448_Base::prefix
|
413 |
*/
|
414 |
public function getPrefix() {
|
415 |
return $this->prefix;
|
418 |
/**
|
419 |
* Позволяет получить имя плагина.
|
420 |
*
|
421 |
+
* @return string Возвращает имя плагина. См. Wbcr_Factory448_Base::plugin_name
|
422 |
*/
|
423 |
public function getPluginName() {
|
424 |
return $this->plugin_name;
|
427 |
/**
|
428 |
* Позволяет получить версию плагина.
|
429 |
*
|
430 |
+
* @return string Возвращает версию плагина. См. Wbcr_Factory448_Base::plugin_version
|
431 |
*/
|
432 |
public function getPluginVersion() {
|
433 |
return $this->plugin_version;
|
449 |
* какие-то данные не описанные в интерфейсе этого плагина.
|
450 |
*
|
451 |
* @param string $attr_name Имя атрибута, который нужно получить. Идентично ключу в массиве
|
452 |
+
* Wbcr_Factory448_Base::plugin_data
|
453 |
*
|
454 |
* @return null
|
455 |
*/
|
462 |
}
|
463 |
|
464 |
/**
|
465 |
+
* Предоставляет доступ к экземпляру класса \WBCR\Factory_448\Entities\Support.
|
466 |
*
|
467 |
+
* @return \WBCR\Factory_448\Entities\Support
|
468 |
*/
|
469 |
public function get_support() {
|
470 |
return $this->support;
|
471 |
}
|
472 |
|
473 |
/**
|
474 |
+
* Предоставляет доступ к экземпляру класса \WBCR\Factory_448\Entities\Paths.
|
475 |
*
|
476 |
+
* @return \WBCR\Factory_448\Entities\Paths
|
477 |
*/
|
478 |
public function get_paths() {
|
479 |
return $this->paths;
|
482 |
/**
|
483 |
* Позволяет получить сырые данные плагина в виде объекта StdClass.
|
484 |
*
|
485 |
+
* @return object Возвращает объект с сырыми данными плагина. См. Wbcr_Factory448_Base::plugin_data
|
486 |
*/
|
487 |
public function getPluginInfo() {
|
488 |
return (object) $this->plugin_data;
|
libs/factory/core/includes/class-factory-requests.php
CHANGED
@@ -11,7 +11,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
11 |
* @package factory-core
|
12 |
*/
|
13 |
|
14 |
-
class
|
15 |
|
16 |
/**
|
17 |
* @param null $param
|
11 |
* @package factory-core
|
12 |
*/
|
13 |
|
14 |
+
class Wbcr_Factory448_Request {
|
15 |
|
16 |
/**
|
17 |
* @param null $param
|
libs/factory/core/includes/class-factory-requirements.php
CHANGED
@@ -12,8 +12,8 @@
|
|
12 |
* @since 4.0.9
|
13 |
*/
|
14 |
// @formatter:off
|
15 |
-
if ( ! class_exists( '
|
16 |
-
class
|
17 |
|
18 |
/**
|
19 |
* Factory framework version
|
@@ -242,7 +242,7 @@ if ( ! class_exists( 'Wbcr_Factory446_Requirements' ) ) {
|
|
242 |
$notice_text = $notice_default_text = '';
|
243 |
$notice_default_text .= '<b>' . $this->plugin_title . ' ' . __( 'warning', '' ) . ':</b>' . '<br>';
|
244 |
|
245 |
-
$notice_default_text .= sprintf( __( 'The %s plugin has stopped.', '
|
246 |
$notice_default_text .= __( 'Possible reasons:', '' ) . ' <br>';
|
247 |
|
248 |
$has_one = false;
|
@@ -273,21 +273,21 @@ if ( ! class_exists( 'Wbcr_Factory446_Requirements' ) ) {
|
|
273 |
* @return string
|
274 |
*/
|
275 |
protected function get_php_incompat_text() {
|
276 |
-
return sprintf( __( 'You need to update the PHP version to %s or higher!', '
|
277 |
}
|
278 |
|
279 |
/**
|
280 |
* @return string
|
281 |
*/
|
282 |
protected function get_wp_incompat_text() {
|
283 |
-
return sprintf( __( 'You need to update WordPress to %s or higher!', '
|
284 |
}
|
285 |
|
286 |
/**
|
287 |
* @return string
|
288 |
*/
|
289 |
protected function get_plugin_already_activate_text() {
|
290 |
-
return sprintf( __( 'Plugin %s is already activated, you are trying to activate it again.', '
|
291 |
}
|
292 |
}
|
293 |
}
|
12 |
* @since 4.0.9
|
13 |
*/
|
14 |
// @formatter:off
|
15 |
+
if ( ! class_exists( 'Wbcr_Factory448_Requirements' ) ) {
|
16 |
+
class Wbcr_Factory448_Requirements {
|
17 |
|
18 |
/**
|
19 |
* Factory framework version
|
242 |
$notice_text = $notice_default_text = '';
|
243 |
$notice_default_text .= '<b>' . $this->plugin_title . ' ' . __( 'warning', '' ) . ':</b>' . '<br>';
|
244 |
|
245 |
+
$notice_default_text .= sprintf( __( 'The %s plugin has stopped.', 'wbcr_factory_clearfy_240' ), $this->plugin_title ) . ' ';
|
246 |
$notice_default_text .= __( 'Possible reasons:', '' ) . ' <br>';
|
247 |
|
248 |
$has_one = false;
|
273 |
* @return string
|
274 |
*/
|
275 |
protected function get_php_incompat_text() {
|
276 |
+
return sprintf( __( 'You need to update the PHP version to %s or higher!', 'wbcr_factory_448' ), $this->required_php_version );
|
277 |
}
|
278 |
|
279 |
/**
|
280 |
* @return string
|
281 |
*/
|
282 |
protected function get_wp_incompat_text() {
|
283 |
+
return sprintf( __( 'You need to update WordPress to %s or higher!', 'wbcr_factory_448' ), $this->required_wp_version );
|
284 |
}
|
285 |
|
286 |
/**
|
287 |
* @return string
|
288 |
*/
|
289 |
protected function get_plugin_already_activate_text() {
|
290 |
+
return sprintf( __( 'Plugin %s is already activated, you are trying to activate it again.', 'wbcr_factory_448' ), $this->plugin_title );
|
291 |
}
|
292 |
}
|
293 |
}
|
libs/factory/core/includes/components/class-delete-component-button.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
/**
|
6 |
* This file groups the settings for quick setup
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Components;
|
4 |
|
5 |
/**
|
6 |
* This file groups the settings for quick setup
|
libs/factory/core/includes/components/class-install-component-button.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
/**
|
6 |
* This file groups the settings for quick setup
|
@@ -22,7 +22,7 @@ class Install_Button {
|
|
22 |
|
23 |
protected $classes = [
|
24 |
'button',
|
25 |
-
'wfactory-
|
26 |
];
|
27 |
protected $data = [];
|
28 |
protected $base_path;
|
@@ -37,7 +37,7 @@ class Install_Button {
|
|
37 |
* @throws \Exception
|
38 |
* @since 4.3.3
|
39 |
*/
|
40 |
-
public function __construct(\
|
41 |
{
|
42 |
if( empty($type) || !is_string($plugin_slug) ) {
|
43 |
throw new \Exception('Empty type or plugin_slug attribute.');
|
@@ -67,7 +67,7 @@ class Install_Button {
|
|
67 |
|
68 |
// Set default data
|
69 |
$this->add_data('storage', $this->type);
|
70 |
-
$this->add_data('i18n', \
|
71 |
$this->add_data('wpnonce', wp_create_nonce('updates'));
|
72 |
}
|
73 |
|
@@ -420,13 +420,13 @@ class Install_Button {
|
|
420 |
protected function get_i18n()
|
421 |
{
|
422 |
return [
|
423 |
-
'activate' => __('Activate', '
|
424 |
-
'install' => __('Install', '
|
425 |
-
'deactivate' => __('Deactivate', '
|
426 |
-
'delete' => __('Delete', '
|
427 |
-
'loading' => __('Please wait...', '
|
428 |
-
'preparation' => __('Preparation...', '
|
429 |
-
'read' => __('Read more', '
|
430 |
];
|
431 |
}
|
432 |
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Components;
|
4 |
|
5 |
/**
|
6 |
* This file groups the settings for quick setup
|
22 |
|
23 |
protected $classes = [
|
24 |
'button',
|
25 |
+
'wfactory-448-process-button'
|
26 |
];
|
27 |
protected $data = [];
|
28 |
protected $base_path;
|
37 |
* @throws \Exception
|
38 |
* @since 4.3.3
|
39 |
*/
|
40 |
+
public function __construct(\Wbcr_Factory448_Plugin $plugin, $type, $plugin_slug)
|
41 |
{
|
42 |
if( empty($type) || !is_string($plugin_slug) ) {
|
43 |
throw new \Exception('Empty type or plugin_slug attribute.');
|
67 |
|
68 |
// Set default data
|
69 |
$this->add_data('storage', $this->type);
|
70 |
+
$this->add_data('i18n', \WbcrFactoryClearfy240_Helpers::getEscapeJson($this->get_i18n()));
|
71 |
$this->add_data('wpnonce', wp_create_nonce('updates'));
|
72 |
}
|
73 |
|
420 |
protected function get_i18n()
|
421 |
{
|
422 |
return [
|
423 |
+
'activate' => __('Activate', 'wbcr_factory_448'),
|
424 |
+
'install' => __('Install', 'wbcr_factory_448'),
|
425 |
+
'deactivate' => __('Deactivate', 'wbcr_factory_448'),
|
426 |
+
'delete' => __('Delete', 'wbcr_factory_448'),
|
427 |
+
'loading' => __('Please wait...', 'wbcr_factory_448'),
|
428 |
+
'preparation' => __('Preparation...', 'wbcr_factory_448'),
|
429 |
+
'read' => __('Read more', 'wbcr_factory_448')
|
430 |
];
|
431 |
}
|
432 |
|
libs/factory/core/includes/entities/class-factory-paths.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
exit;
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Entities;
|
4 |
|
5 |
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
exit;
|
libs/factory/core/includes/entities/class-factory-support.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
exit;
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Entities;
|
4 |
|
5 |
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
exit;
|
libs/factory/core/includes/functions.php
CHANGED
@@ -53,17 +53,17 @@ if ( ! function_exists( 'get_user_locale' ) ) {
|
|
53 |
* @param string $message Optional. A message regarding the change.
|
54 |
*
|
55 |
* @return mixed
|
56 |
-
* @see
|
57 |
*
|
58 |
*/
|
59 |
-
function
|
60 |
if ( function_exists( 'apply_filters_deprecated' ) ) {
|
61 |
return apply_filters_deprecated( $tag, $args, $version, $replacement, $message );
|
62 |
}
|
63 |
if ( ! has_filter( $tag ) ) {
|
64 |
return $args[0];
|
65 |
}
|
66 |
-
|
67 |
|
68 |
return apply_filters_ref_array( $tag, $args );
|
69 |
}
|
@@ -89,7 +89,7 @@ function wbcr_factory_446_apply_filters_deprecated( $tag, $args, $version, $repl
|
|
89 |
* @see _deprecated_hook()
|
90 |
*
|
91 |
*/
|
92 |
-
function
|
93 |
if ( function_exists( 'do_action_deprecated' ) ) {
|
94 |
do_action_deprecated( $tag, $args, $version, $replacement, $message );
|
95 |
|
@@ -98,14 +98,14 @@ function wbcr_factory_446_do_action_deprecated( $tag, $args, $version, $replacem
|
|
98 |
if ( ! has_action( $tag ) ) {
|
99 |
return;
|
100 |
}
|
101 |
-
|
102 |
do_action_ref_array( $tag, $args );
|
103 |
}
|
104 |
|
105 |
/**
|
106 |
* Marks a deprecated action or filter hook as deprecated and throws a notice.
|
107 |
*
|
108 |
-
* Use the '
|
109 |
* deprecated hook was called.
|
110 |
*
|
111 |
* Default behavior is to trigger a user error if WP_DEBUG is true.
|
@@ -123,7 +123,7 @@ function wbcr_factory_446_do_action_deprecated( $tag, $args, $version, $replacem
|
|
123 |
* @param string $replacement Optional. The hook that should have been used.
|
124 |
* @param string $message Optional. A message regarding the change.
|
125 |
*/
|
126 |
-
function
|
127 |
/**
|
128 |
* Fires when a deprecated hook is called.
|
129 |
*
|
53 |
* @param string $message Optional. A message regarding the change.
|
54 |
*
|
55 |
* @return mixed
|
56 |
+
* @see wbcr_factory_448_deprecated_hook()
|
57 |
*
|
58 |
*/
|
59 |
+
function wbcr_factory_448_apply_filters_deprecated( $tag, $args, $version, $replacement = false, $message = null ) {
|
60 |
if ( function_exists( 'apply_filters_deprecated' ) ) {
|
61 |
return apply_filters_deprecated( $tag, $args, $version, $replacement, $message );
|
62 |
}
|
63 |
if ( ! has_filter( $tag ) ) {
|
64 |
return $args[0];
|
65 |
}
|
66 |
+
wbcr_factory_448_deprecated_hook( $tag, $version, $replacement, $message );
|
67 |
|
68 |
return apply_filters_ref_array( $tag, $args );
|
69 |
}
|
89 |
* @see _deprecated_hook()
|
90 |
*
|
91 |
*/
|
92 |
+
function wbcr_factory_448_do_action_deprecated( $tag, $args, $version, $replacement = false, $message = null ) {
|
93 |
if ( function_exists( 'do_action_deprecated' ) ) {
|
94 |
do_action_deprecated( $tag, $args, $version, $replacement, $message );
|
95 |
|
98 |
if ( ! has_action( $tag ) ) {
|
99 |
return;
|
100 |
}
|
101 |
+
wbcr_factory_448_deprecated_hook( $tag, $version, $replacement, $message );
|
102 |
do_action_ref_array( $tag, $args );
|
103 |
}
|
104 |
|
105 |
/**
|
106 |
* Marks a deprecated action or filter hook as deprecated and throws a notice.
|
107 |
*
|
108 |
+
* Use the 'wbcr_factory_448_deprecated_hook_run' action to get the backtrace describing where the
|
109 |
* deprecated hook was called.
|
110 |
*
|
111 |
* Default behavior is to trigger a user error if WP_DEBUG is true.
|
123 |
* @param string $replacement Optional. The hook that should have been used.
|
124 |
* @param string $message Optional. A message regarding the change.
|
125 |
*/
|
126 |
+
function wbcr_factory_448_deprecated_hook( $hook, $version, $replacement = null, $message = null ) {
|
127 |
/**
|
128 |
* Fires when a deprecated hook is called.
|
129 |
*
|
libs/factory/core/includes/premium/class-factory-license-interface.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if ( ! defined( 'ABSPATH' ) ) {
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Premium\Interfaces;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
if ( ! defined( 'ABSPATH' ) ) {
|
libs/factory/core/includes/premium/class-factory-manager.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
use Exception;
|
6 |
-
use
|
7 |
|
8 |
// Exit if accessed directly
|
9 |
if ( ! defined( 'ABSPATH' ) ) {
|
@@ -24,7 +24,7 @@ class Manager {
|
|
24 |
public static $providers;
|
25 |
|
26 |
/**
|
27 |
-
* @var
|
28 |
*/
|
29 |
protected $plugin;
|
30 |
|
@@ -36,24 +36,24 @@ class Manager {
|
|
36 |
/**
|
37 |
* Manager constructor.
|
38 |
*
|
39 |
-
* @param
|
40 |
* @param array $settings
|
41 |
*
|
42 |
* @throws Exception
|
43 |
*/
|
44 |
-
public function __construct(
|
45 |
$this->plugin = $plugin;
|
46 |
$this->settings = $settings;
|
47 |
}
|
48 |
|
49 |
/**
|
50 |
-
* @param
|
51 |
* @param array $settings
|
52 |
*
|
53 |
-
* @return \WBCR\
|
54 |
* @throws Exception
|
55 |
*/
|
56 |
-
public static function instance(
|
57 |
$premium_manager = new Manager( $plugin, $settings );
|
58 |
|
59 |
return $premium_manager->instance_provider();
|
@@ -62,7 +62,7 @@ class Manager {
|
|
62 |
/**
|
63 |
* @param $provider_name
|
64 |
*
|
65 |
-
* @return \WBCR\
|
66 |
* @throws Exception
|
67 |
*/
|
68 |
public function instance_provider() {
|
@@ -70,7 +70,7 @@ class Manager {
|
|
70 |
|
71 |
if ( isset( self::$providers[ $provider_name ] ) && class_exists( self::$providers[ $provider_name ] ) ) {
|
72 |
if ( self::$providers[ $provider_name ] instanceof Provider ) {
|
73 |
-
throw new Exception( "Provider {$provider_name} must extend the class WBCR\
|
74 |
}
|
75 |
|
76 |
return new self::$providers[ $provider_name ]( $this->plugin, $this->settings );
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Premium;
|
4 |
|
5 |
use Exception;
|
6 |
+
use Wbcr_Factory448_Plugin;
|
7 |
|
8 |
// Exit if accessed directly
|
9 |
if ( ! defined( 'ABSPATH' ) ) {
|
24 |
public static $providers;
|
25 |
|
26 |
/**
|
27 |
+
* @var Wbcr_Factory448_Plugin
|
28 |
*/
|
29 |
protected $plugin;
|
30 |
|
36 |
/**
|
37 |
* Manager constructor.
|
38 |
*
|
39 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
40 |
* @param array $settings
|
41 |
*
|
42 |
* @throws Exception
|
43 |
*/
|
44 |
+
public function __construct( Wbcr_Factory448_Plugin $plugin, array $settings ) {
|
45 |
$this->plugin = $plugin;
|
46 |
$this->settings = $settings;
|
47 |
}
|
48 |
|
49 |
/**
|
50 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
51 |
* @param array $settings
|
52 |
*
|
53 |
+
* @return \WBCR\Factory_Freemius_136\Premium\Provider
|
54 |
* @throws Exception
|
55 |
*/
|
56 |
+
public static function instance( Wbcr_Factory448_Plugin $plugin, array $settings ) {
|
57 |
$premium_manager = new Manager( $plugin, $settings );
|
58 |
|
59 |
return $premium_manager->instance_provider();
|
62 |
/**
|
63 |
* @param $provider_name
|
64 |
*
|
65 |
+
* @return \WBCR\Factory_Freemius_136\Premium\Provider
|
66 |
* @throws Exception
|
67 |
*/
|
68 |
public function instance_provider() {
|
70 |
|
71 |
if ( isset( self::$providers[ $provider_name ] ) && class_exists( self::$providers[ $provider_name ] ) ) {
|
72 |
if ( self::$providers[ $provider_name ] instanceof Provider ) {
|
73 |
+
throw new Exception( "Provider {$provider_name} must extend the class WBCR\Factory_448\Premium\Provider interface!" );
|
74 |
}
|
75 |
|
76 |
return new self::$providers[ $provider_name ]( $this->plugin, $this->settings );
|
libs/factory/core/includes/premium/class-factory-provider-abstract.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
use Exception;
|
6 |
-
use
|
7 |
|
8 |
// Exit if accessed directly
|
9 |
if( !defined('ABSPATH') ) {
|
@@ -21,7 +21,7 @@ if( !defined('ABSPATH') ) {
|
|
21 |
abstract class Provider {
|
22 |
|
23 |
/**
|
24 |
-
* @var
|
25 |
*/
|
26 |
protected $plugin;
|
27 |
|
@@ -38,10 +38,10 @@ abstract class Provider {
|
|
38 |
/**
|
39 |
* Provider constructor.
|
40 |
*
|
41 |
-
* @param
|
42 |
* @param array $settings
|
43 |
*/
|
44 |
-
public function __construct(
|
45 |
{
|
46 |
$this->plugin = $plugin;
|
47 |
$this->settings = $settings;
|
@@ -244,7 +244,7 @@ abstract class Provider {
|
|
244 |
abstract public function get_billing_cycle();
|
245 |
|
246 |
/**
|
247 |
-
* @return \WBCR\
|
248 |
*/
|
249 |
abstract public function get_license();
|
250 |
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Premium;
|
4 |
|
5 |
use Exception;
|
6 |
+
use Wbcr_Factory448_Plugin;
|
7 |
|
8 |
// Exit if accessed directly
|
9 |
if( !defined('ABSPATH') ) {
|
21 |
abstract class Provider {
|
22 |
|
23 |
/**
|
24 |
+
* @var Wbcr_Factory448_Plugin
|
25 |
*/
|
26 |
protected $plugin;
|
27 |
|
38 |
/**
|
39 |
* Provider constructor.
|
40 |
*
|
41 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
42 |
* @param array $settings
|
43 |
*/
|
44 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin, array $settings)
|
45 |
{
|
46 |
$this->plugin = $plugin;
|
47 |
$this->settings = $settings;
|
244 |
abstract public function get_billing_cycle();
|
245 |
|
246 |
/**
|
247 |
+
* @return \WBCR\Factory_448\Premium\Interfaces\License
|
248 |
*/
|
249 |
abstract public function get_license();
|
250 |
|
libs/factory/core/includes/updates/class-factory-premium-upgrader.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
use Exception;
|
6 |
use Plugin_Installer_Skin;
|
7 |
use Plugin_Upgrader;
|
8 |
-
use
|
9 |
-
use
|
10 |
use WP_Filesystem_Base;
|
11 |
use WP_Upgrader;
|
12 |
use WP_Upgrader_Skin;
|
@@ -45,13 +45,13 @@ class Premium_Upgrader extends Upgrader {
|
|
45 |
* @param $args
|
46 |
* @param bool $is_premium
|
47 |
*
|
48 |
-
* @param
|
49 |
*
|
50 |
* @throws Exception
|
51 |
* @since 4.1.1
|
52 |
*
|
53 |
*/
|
54 |
-
public function __construct(
|
55 |
{
|
56 |
parent::__construct($plugin);
|
57 |
|
@@ -242,9 +242,9 @@ class Premium_Upgrader extends Upgrader {
|
|
242 |
/**
|
243 |
* Выводит уведомление внутри интерфейса плагина, на всех страницах плагина.
|
244 |
*
|
245 |
-
* @param
|
246 |
*
|
247 |
-
* @param
|
248 |
*
|
249 |
* @return void
|
250 |
* @since 4.1.1
|
@@ -809,12 +809,12 @@ class Premium_Upgrader extends Upgrader {
|
|
809 |
$cancel_license_url = $this->get_action_url('cancel_license');
|
810 |
|
811 |
$texts = [
|
812 |
-
'need_activate_license' => __('License activation required. A license is required to get premium plugin updates, as well as to get additional services.', '
|
813 |
-
'need_renew_license' => __('Your license has expired. You can no longer get premium plugin updates, premium support and your access to Webcraftic services has been suspended.', '
|
814 |
'please_install_premium' => sprintf(__('Congratulations, you have activated a premium license! Please install premium add-on to use pro features now.
|
815 |
-
<a href="%s">Install</a> premium add-on or <a href="%s">cancel</a> license.', '
|
816 |
'please_activate_premium' => sprintf(__('Congratulations, you have activated a premium license! Please activate premium add-on to use pro features now.
|
817 |
-
<a href="%s">Activate</a> premium add-on or <a href="%s">cancel</a> license.', '
|
818 |
];
|
819 |
|
820 |
if( isset($texts[$type]) ) {
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Updates;
|
4 |
|
5 |
use Exception;
|
6 |
use Plugin_Installer_Skin;
|
7 |
use Plugin_Upgrader;
|
8 |
+
use Wbcr_Factory448_Plugin;
|
9 |
+
use Wbcr_FactoryPages447_ImpressiveThemplate;
|
10 |
use WP_Filesystem_Base;
|
11 |
use WP_Upgrader;
|
12 |
use WP_Upgrader_Skin;
|
45 |
* @param $args
|
46 |
* @param bool $is_premium
|
47 |
*
|
48 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
49 |
*
|
50 |
* @throws Exception
|
51 |
* @since 4.1.1
|
52 |
*
|
53 |
*/
|
54 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
55 |
{
|
56 |
parent::__construct($plugin);
|
57 |
|
242 |
/**
|
243 |
* Выводит уведомление внутри интерфейса плагина, на всех страницах плагина.
|
244 |
*
|
245 |
+
* @param Wbcr_FactoryPages447_ImpressiveThemplate $obj
|
246 |
*
|
247 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
248 |
*
|
249 |
* @return void
|
250 |
* @since 4.1.1
|
809 |
$cancel_license_url = $this->get_action_url('cancel_license');
|
810 |
|
811 |
$texts = [
|
812 |
+
'need_activate_license' => __('License activation required. A license is required to get premium plugin updates, as well as to get additional services.', 'wbcr_factory_448'),
|
813 |
+
'need_renew_license' => __('Your license has expired. You can no longer get premium plugin updates, premium support and your access to Webcraftic services has been suspended.', 'wbcr_factory_448'),
|
814 |
'please_install_premium' => sprintf(__('Congratulations, you have activated a premium license! Please install premium add-on to use pro features now.
|
815 |
+
<a href="%s">Install</a> premium add-on or <a href="%s">cancel</a> license.', 'wbcr_factory_448'), $upgrade_url, $cancel_license_url),
|
816 |
'please_activate_premium' => sprintf(__('Congratulations, you have activated a premium license! Please activate premium add-on to use pro features now.
|
817 |
+
<a href="%s">Activate</a> premium add-on or <a href="%s">cancel</a> license.', 'wbcr_factory_448'), $activate_plugin_url, $cancel_license_url)
|
818 |
];
|
819 |
|
820 |
if( isset($texts[$type]) ) {
|
libs/factory/core/includes/updates/class-factory-upgrader.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
use Exception;
|
6 |
use stdClass;
|
7 |
-
use
|
8 |
|
9 |
// Exit if accessed directly
|
10 |
if( !defined('ABSPATH') ) {
|
@@ -28,8 +28,8 @@ class Upgrader {
|
|
28 |
* @since 4.1.7
|
29 |
* @var array хранит имя репозитория и его имя класса
|
30 |
* [
|
31 |
-
* 'wordpress' => 'WBCR\
|
32 |
-
* 'freemius' => '\WBCR\
|
33 |
* ]
|
34 |
*/
|
35 |
public static $repositories = [];
|
@@ -42,7 +42,7 @@ class Upgrader {
|
|
42 |
protected $type = 'default';
|
43 |
|
44 |
/**
|
45 |
-
* @var
|
46 |
*/
|
47 |
protected $plugin;
|
48 |
|
@@ -88,7 +88,7 @@ class Upgrader {
|
|
88 |
/**
|
89 |
* Manager constructor.
|
90 |
*
|
91 |
-
* @param
|
92 |
* @param $args
|
93 |
* @param bool $is_premium
|
94 |
*
|
@@ -96,7 +96,7 @@ class Upgrader {
|
|
96 |
* @since 4.1.1
|
97 |
*
|
98 |
*/
|
99 |
-
public function __construct(
|
100 |
{
|
101 |
|
102 |
$this->plugin = $plugin;
|
@@ -107,8 +107,8 @@ class Upgrader {
|
|
107 |
$this->is_debug = defined('FACTORY_UPDATES_DEBUG') && FACTORY_UPDATES_DEBUG;
|
108 |
|
109 |
# Добавляем Wordpress репозиторий в список доступных репозиториев по умолчанию
|
110 |
-
self::$repositories['wordpress'] = '\WBCR\
|
111 |
-
self::$repositories['github'] = '\WBCR\
|
112 |
|
113 |
$settings = $this->get_settings();
|
114 |
|
@@ -298,7 +298,7 @@ class Upgrader {
|
|
298 |
|
299 |
if( isset(self::$repositories[$repository_name]) && class_exists(self::$repositories[$repository_name]) ) {
|
300 |
if( self::$repositories[$repository_name] instanceof Repository ) {
|
301 |
-
throw new Exception("Repository {$repository_name} must extend the class WBCR\
|
302 |
}
|
303 |
|
304 |
return new self::$repositories[$repository_name]($this->plugin, $this->get_settings());
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Updates;
|
4 |
|
5 |
use Exception;
|
6 |
use stdClass;
|
7 |
+
use Wbcr_Factory448_Plugin;
|
8 |
|
9 |
// Exit if accessed directly
|
10 |
if( !defined('ABSPATH') ) {
|
28 |
* @since 4.1.7
|
29 |
* @var array хранит имя репозитория и его имя класса
|
30 |
* [
|
31 |
+
* 'wordpress' => 'WBCR\Factory_Freemius_136\Updates\Freemius_Repository',
|
32 |
+
* 'freemius' => '\WBCR\Factory_448\Updates\Wordpress_Repository'
|
33 |
* ]
|
34 |
*/
|
35 |
public static $repositories = [];
|
42 |
protected $type = 'default';
|
43 |
|
44 |
/**
|
45 |
+
* @var Wbcr_Factory448_Plugin
|
46 |
*/
|
47 |
protected $plugin;
|
48 |
|
88 |
/**
|
89 |
* Manager constructor.
|
90 |
*
|
91 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
92 |
* @param $args
|
93 |
* @param bool $is_premium
|
94 |
*
|
96 |
* @since 4.1.1
|
97 |
*
|
98 |
*/
|
99 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin)
|
100 |
{
|
101 |
|
102 |
$this->plugin = $plugin;
|
107 |
$this->is_debug = defined('FACTORY_UPDATES_DEBUG') && FACTORY_UPDATES_DEBUG;
|
108 |
|
109 |
# Добавляем Wordpress репозиторий в список доступных репозиториев по умолчанию
|
110 |
+
self::$repositories['wordpress'] = '\WBCR\Factory_448\Updates\Wordpress_Repository';
|
111 |
+
self::$repositories['github'] = '\WBCR\Factory_448\Updates\Github_Repository';
|
112 |
|
113 |
$settings = $this->get_settings();
|
114 |
|
298 |
|
299 |
if( isset(self::$repositories[$repository_name]) && class_exists(self::$repositories[$repository_name]) ) {
|
300 |
if( self::$repositories[$repository_name] instanceof Repository ) {
|
301 |
+
throw new Exception("Repository {$repository_name} must extend the class WBCR\Factory_448\Updates\Repository interface!");
|
302 |
}
|
303 |
|
304 |
return new self::$repositories[$repository_name]($this->plugin, $this->get_settings());
|
libs/factory/core/includes/updates/repositories/class-factory-github.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
-
use
|
7 |
|
8 |
if( !defined('ABSPATH') ) {
|
9 |
exit;
|
@@ -57,11 +57,11 @@ class Github_Repository extends Repository {
|
|
57 |
/**
|
58 |
* Wordpress constructor.
|
59 |
*
|
60 |
-
* @param
|
61 |
* @param bool $is_premium
|
62 |
* @since 4.4.1
|
63 |
*/
|
64 |
-
public function __construct(
|
65 |
{
|
66 |
$settings = wp_parse_args($settings, [
|
67 |
'github_username' => '',
|
@@ -220,7 +220,7 @@ class Github_Repository extends Repository {
|
|
220 |
$response = wp_remote_get($request_uri);
|
221 |
|
222 |
if( is_wp_error($response) ) {
|
223 |
-
throw new \Exception($response->get_error_message()
|
224 |
}
|
225 |
|
226 |
$data = @json_decode(wp_remote_retrieve_body($response), true); // Get JSON and parse it
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Updates;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
+
use Wbcr_Factory448_Plugin;
|
7 |
|
8 |
if( !defined('ABSPATH') ) {
|
9 |
exit;
|
57 |
/**
|
58 |
* Wordpress constructor.
|
59 |
*
|
60 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
61 |
* @param bool $is_premium
|
62 |
* @since 4.4.1
|
63 |
*/
|
64 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin, array $settings = [])
|
65 |
{
|
66 |
$settings = wp_parse_args($settings, [
|
67 |
'github_username' => '',
|
220 |
$response = wp_remote_get($request_uri);
|
221 |
|
222 |
if( is_wp_error($response) ) {
|
223 |
+
throw new \Exception($response->get_error_message());
|
224 |
}
|
225 |
|
226 |
$data = @json_decode(wp_remote_retrieve_body($response), true); // Get JSON and parse it
|
libs/factory/core/includes/updates/repositories/class-factory-repository-abstract.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
-
use
|
7 |
|
8 |
if( !defined('ABSPATH') ) {
|
9 |
exit;
|
@@ -23,17 +23,17 @@ abstract class Repository {
|
|
23 |
protected $initialized = false;
|
24 |
|
25 |
/**
|
26 |
-
* @var
|
27 |
*/
|
28 |
protected $plugin;
|
29 |
|
30 |
/**
|
31 |
* Repository constructor.
|
32 |
*
|
33 |
-
* @param
|
34 |
* @param array $settings
|
35 |
*/
|
36 |
-
abstract public function __construct(
|
37 |
|
38 |
/**
|
39 |
* @return void
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Updates;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
+
use Wbcr_Factory448_Plugin;
|
7 |
|
8 |
if( !defined('ABSPATH') ) {
|
9 |
exit;
|
23 |
protected $initialized = false;
|
24 |
|
25 |
/**
|
26 |
+
* @var Wbcr_Factory448_Plugin
|
27 |
*/
|
28 |
protected $plugin;
|
29 |
|
30 |
/**
|
31 |
* Repository constructor.
|
32 |
*
|
33 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
34 |
* @param array $settings
|
35 |
*/
|
36 |
+
abstract public function __construct(Wbcr_Factory448_Plugin $plugin, array $settings = []);
|
37 |
|
38 |
/**
|
39 |
* @return void
|
libs/factory/core/includes/updates/repositories/class-factory-wordpress.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
-
use
|
7 |
|
8 |
if( !defined('ABSPATH') ) {
|
9 |
exit;
|
@@ -20,10 +20,10 @@ class Wordpress_Repository extends Repository {
|
|
20 |
/**
|
21 |
* Wordpress constructor.
|
22 |
*
|
23 |
-
* @param
|
24 |
* @param array $settings
|
25 |
*/
|
26 |
-
public function __construct(
|
27 |
{
|
28 |
$this->plugin = $plugin;
|
29 |
}
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_448\Updates;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
+
use Wbcr_Factory448_Plugin;
|
7 |
|
8 |
if( !defined('ABSPATH') ) {
|
9 |
exit;
|
20 |
/**
|
21 |
* Wordpress constructor.
|
22 |
*
|
23 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
24 |
* @param array $settings
|
25 |
*/
|
26 |
+
public function __construct(Wbcr_Factory448_Plugin $plugin, array $settings = [])
|
27 |
{
|
28 |
$this->plugin = $plugin;
|
29 |
}
|
libs/factory/core/langs/{wbcr_factory_446-ru_RU.mo → wbcr_factory_448-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/core/langs/{wbcr_factory_446-ru_RU.po → wbcr_factory_448-ru_RU.po}
RENAMED
File without changes
|
libs/factory/forms/boot.php
CHANGED
@@ -22,175 +22,175 @@ if( !is_admin() ) {
|
|
22 |
|
23 |
// checks if the module is already loaded in order to
|
24 |
// prevent loading the same version of the module twice.
|
25 |
-
if( defined('
|
26 |
return;
|
27 |
}
|
28 |
|
29 |
-
define('
|
30 |
|
31 |
-
define(
|
32 |
|
33 |
// absolute path and URL to the files and resources of the module.
|
34 |
-
define('
|
35 |
-
define('
|
36 |
|
37 |
#comp merge
|
38 |
-
require_once(
|
39 |
-
require_once(
|
40 |
-
require_once(
|
41 |
|
42 |
-
require_once(
|
43 |
#endcomp
|
44 |
|
45 |
-
load_plugin_textdomain('
|
46 |
|
47 |
/**
|
48 |
* We add this code into the hook because all these controls quite heavy. So in order to get better perfomance,
|
49 |
* we load the form controls only on pages where the forms are created.
|
50 |
*
|
51 |
* @since 3.0.7
|
52 |
-
* @see the '
|
53 |
*
|
54 |
*/
|
55 |
-
if( !function_exists('
|
56 |
|
57 |
/**
|
58 |
-
* @param
|
59 |
*
|
60 |
* @throws Exception
|
61 |
*/
|
62 |
-
function
|
63 |
{
|
64 |
|
65 |
if( $plugin && !isset($plugin->forms) ) {
|
66 |
throw new Exception("The module Factory Forms is not loaded for the plugin '{$plugin->getPluginName()}'.");
|
67 |
}
|
68 |
|
69 |
-
require_once(
|
70 |
-
require_once(
|
71 |
-
require_once(
|
72 |
-
require_once(
|
73 |
-
require_once(
|
74 |
-
require_once(
|
75 |
-
require_once(
|
76 |
-
require_once(
|
77 |
|
78 |
// registration of controls
|
79 |
$plugin->forms->registerControls([
|
80 |
[
|
81 |
'type' => 'checkbox',
|
82 |
-
'class' => '
|
83 |
-
'include' =>
|
84 |
],
|
85 |
[
|
86 |
'type' => 'list',
|
87 |
-
'class' => '
|
88 |
-
'include' =>
|
89 |
],
|
90 |
[
|
91 |
'type' => 'dropdown',
|
92 |
-
'class' => '
|
93 |
-
'include' =>
|
94 |
],
|
95 |
[
|
96 |
'type' => 'dropdown-and-colors',
|
97 |
-
'class' => '
|
98 |
-
'include' =>
|
99 |
],
|
100 |
[
|
101 |
'type' => 'hidden',
|
102 |
-
'class' => '
|
103 |
-
'include' =>
|
104 |
],
|
105 |
[
|
106 |
'type' => 'hidden',
|
107 |
-
'class' => '
|
108 |
-
'include' =>
|
109 |
],
|
110 |
[
|
111 |
'type' => 'radio',
|
112 |
-
'class' => '
|
113 |
-
'include' =>
|
114 |
],
|
115 |
[
|
116 |
'type' => 'radio-colors',
|
117 |
-
'class' => '
|
118 |
-
'include' =>
|
119 |
],
|
120 |
[
|
121 |
'type' => 'textarea',
|
122 |
-
'class' => '
|
123 |
-
'include' =>
|
124 |
],
|
125 |
[
|
126 |
'type' => 'textbox',
|
127 |
-
'class' => '
|
128 |
-
'include' =>
|
129 |
],
|
130 |
[
|
131 |
'type' => 'multiple-textbox',
|
132 |
-
'class' => '
|
133 |
-
'include' =>
|
134 |
],
|
135 |
[
|
136 |
'type' => 'datetimepicker-range',
|
137 |
-
'class' => '
|
138 |
-
'include' =>
|
139 |
],
|
140 |
[
|
141 |
'type' => 'url',
|
142 |
-
'class' => '
|
143 |
-
'include' =>
|
144 |
],
|
145 |
[
|
146 |
'type' => 'wp-editor',
|
147 |
-
'class' => '
|
148 |
-
'include' =>
|
149 |
],
|
150 |
[
|
151 |
'type' => 'color',
|
152 |
-
'class' => '
|
153 |
-
'include' =>
|
154 |
],
|
155 |
[
|
156 |
'type' => 'color-and-opacity',
|
157 |
-
'class' => '
|
158 |
-
'include' =>
|
159 |
],
|
160 |
[
|
161 |
'type' => 'gradient',
|
162 |
-
'class' => '
|
163 |
-
'include' =>
|
164 |
],
|
165 |
[
|
166 |
'type' => 'font',
|
167 |
-
'class' => '
|
168 |
-
'include' =>
|
169 |
],
|
170 |
[
|
171 |
'type' => 'google-font',
|
172 |
-
'class' => '
|
173 |
-
'include' =>
|
174 |
],
|
175 |
[
|
176 |
'type' => 'pattern',
|
177 |
-
'class' => '
|
178 |
-
'include' =>
|
179 |
],
|
180 |
[
|
181 |
'type' => 'integer',
|
182 |
-
'class' => '
|
183 |
-
'include' =>
|
184 |
],
|
185 |
[
|
186 |
'type' => 'control-group',
|
187 |
-
'class' => '
|
188 |
-
'include' =>
|
189 |
],
|
190 |
[
|
191 |
'type' => 'paddings-editor',
|
192 |
-
'class' => '
|
193 |
-
'include' =>
|
194 |
],
|
195 |
]);
|
196 |
|
@@ -198,53 +198,53 @@ if( !function_exists('wbcr_factory_forms_443_register_default_controls') ) {
|
|
198 |
$plugin->forms->registerHolders([
|
199 |
[
|
200 |
'type' => 'tab',
|
201 |
-
'class' => '
|
202 |
-
'include' =>
|
203 |
],
|
204 |
[
|
205 |
'type' => 'tab-item',
|
206 |
-
'class' => '
|
207 |
-
'include' =>
|
208 |
],
|
209 |
[
|
210 |
'type' => 'accordion',
|
211 |
-
'class' => '
|
212 |
-
'include' =>
|
213 |
],
|
214 |
[
|
215 |
'type' => 'accordion-item',
|
216 |
-
'class' => '
|
217 |
-
'include' =>
|
218 |
],
|
219 |
[
|
220 |
'type' => 'control-group',
|
221 |
-
'class' => '
|
222 |
-
'include' =>
|
223 |
],
|
224 |
[
|
225 |
'type' => 'control-group-item',
|
226 |
-
'class' => '
|
227 |
-
'include' =>
|
228 |
],
|
229 |
[
|
230 |
'type' => 'form-group',
|
231 |
-
'class' => '
|
232 |
-
'include' =>
|
233 |
],
|
234 |
[
|
235 |
'type' => 'more-link',
|
236 |
-
'class' => '
|
237 |
-
'include' =>
|
238 |
],
|
239 |
[
|
240 |
'type' => 'div',
|
241 |
-
'class' => '
|
242 |
-
'include' =>
|
243 |
],
|
244 |
[
|
245 |
'type' => 'columns',
|
246 |
-
'class' => '
|
247 |
-
'include' =>
|
248 |
]
|
249 |
]);
|
250 |
|
@@ -252,23 +252,23 @@ if( !function_exists('wbcr_factory_forms_443_register_default_controls') ) {
|
|
252 |
$plugin->forms->registerCustomElements([
|
253 |
[
|
254 |
'type' => 'html',
|
255 |
-
'class' => '
|
256 |
-
'include' =>
|
257 |
],
|
258 |
[
|
259 |
'type' => 'separator',
|
260 |
-
'class' => '
|
261 |
-
'include' =>
|
262 |
],
|
263 |
]);
|
264 |
|
265 |
// registration of form layouts
|
266 |
$plugin->forms->registerFormLayout([
|
267 |
'name' => 'bootstrap-3',
|
268 |
-
'class' => '
|
269 |
-
'include' =>
|
270 |
]);
|
271 |
}
|
272 |
|
273 |
-
add_action('
|
274 |
}
|
22 |
|
23 |
// checks if the module is already loaded in order to
|
24 |
// prevent loading the same version of the module twice.
|
25 |
+
if( defined('FACTORY_FORMS_445_LOADED') ) {
|
26 |
return;
|
27 |
}
|
28 |
|
29 |
+
define('FACTORY_FORMS_445_LOADED', true);
|
30 |
|
31 |
+
define('FACTORY_FORMS_445_VERSION', '4.4.5');
|
32 |
|
33 |
// absolute path and URL to the files and resources of the module.
|
34 |
+
define('FACTORY_FORMS_445_DIR', dirname(__FILE__));
|
35 |
+
define('FACTORY_FORMS_445_URL', plugins_url(null, __FILE__));
|
36 |
|
37 |
#comp merge
|
38 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/providers/value-provider.interface.php');
|
39 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/providers/meta-value-provider.class.php');
|
40 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/providers/options-value-provider.class.php');
|
41 |
|
42 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/form.class.php');
|
43 |
#endcomp
|
44 |
|
45 |
+
load_plugin_textdomain('wbcr_factory_forms_445', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
46 |
|
47 |
/**
|
48 |
* We add this code into the hook because all these controls quite heavy. So in order to get better perfomance,
|
49 |
* we load the form controls only on pages where the forms are created.
|
50 |
*
|
51 |
* @since 3.0.7
|
52 |
+
* @see the 'wbcr_factory_forms_445_register_controls' hook
|
53 |
*
|
54 |
*/
|
55 |
+
if( !function_exists('wbcr_factory_forms_445_register_default_controls') ) {
|
56 |
|
57 |
/**
|
58 |
+
* @param Wbcr_Factory448_Plugin $plugin
|
59 |
*
|
60 |
* @throws Exception
|
61 |
*/
|
62 |
+
function wbcr_factory_forms_445_register_default_controls(Wbcr_Factory448_Plugin $plugin)
|
63 |
{
|
64 |
|
65 |
if( $plugin && !isset($plugin->forms) ) {
|
66 |
throw new Exception("The module Factory Forms is not loaded for the plugin '{$plugin->getPluginName()}'.");
|
67 |
}
|
68 |
|
69 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/html-builder.class.php');
|
70 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/form-element.class.php');
|
71 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/control.class.php');
|
72 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/complex-control.class.php');
|
73 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/holder.class.php');
|
74 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/control-holder.class.php');
|
75 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/custom-element.class.php');
|
76 |
+
require_once(FACTORY_FORMS_445_DIR . '/includes/form-layout.class.php');
|
77 |
|
78 |
// registration of controls
|
79 |
$plugin->forms->registerControls([
|
80 |
[
|
81 |
'type' => 'checkbox',
|
82 |
+
'class' => 'Wbcr_FactoryForms445_CheckboxControl',
|
83 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/checkbox.php'
|
84 |
],
|
85 |
[
|
86 |
'type' => 'list',
|
87 |
+
'class' => 'Wbcr_FactoryForms445_ListControl',
|
88 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/list.php'
|
89 |
],
|
90 |
[
|
91 |
'type' => 'dropdown',
|
92 |
+
'class' => 'Wbcr_FactoryForms445_DropdownControl',
|
93 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/dropdown.php'
|
94 |
],
|
95 |
[
|
96 |
'type' => 'dropdown-and-colors',
|
97 |
+
'class' => 'Wbcr_FactoryForms445_DropdownAndColorsControl',
|
98 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/dropdown-and-colors.php'
|
99 |
],
|
100 |
[
|
101 |
'type' => 'hidden',
|
102 |
+
'class' => 'Wbcr_FactoryForms445_HiddenControl',
|
103 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/hidden.php'
|
104 |
],
|
105 |
[
|
106 |
'type' => 'hidden',
|
107 |
+
'class' => 'Wbcr_FactoryForms445_HiddenControl',
|
108 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/hidden.php'
|
109 |
],
|
110 |
[
|
111 |
'type' => 'radio',
|
112 |
+
'class' => 'Wbcr_FactoryForms445_RadioControl',
|
113 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/radio.php'
|
114 |
],
|
115 |
[
|
116 |
'type' => 'radio-colors',
|
117 |
+
'class' => 'Wbcr_FactoryForms445_RadioColorsControl',
|
118 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/radio-colors.php'
|
119 |
],
|
120 |
[
|
121 |
'type' => 'textarea',
|
122 |
+
'class' => 'Wbcr_FactoryForms445_TextareaControl',
|
123 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/textarea.php'
|
124 |
],
|
125 |
[
|
126 |
'type' => 'textbox',
|
127 |
+
'class' => 'Wbcr_FactoryForms445_TextboxControl',
|
128 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/textbox.php'
|
129 |
],
|
130 |
[
|
131 |
'type' => 'multiple-textbox',
|
132 |
+
'class' => 'Wbcr_FactoryForms445_MultipleTextboxControl',
|
133 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/multiple-textbox.php'
|
134 |
],
|
135 |
[
|
136 |
'type' => 'datetimepicker-range',
|
137 |
+
'class' => 'Wbcr_FactoryForms445_DatepickerRangeControl',
|
138 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/datepicker-range.php'
|
139 |
],
|
140 |
[
|
141 |
'type' => 'url',
|
142 |
+
'class' => 'Wbcr_FactoryForms445_UrlControl',
|
143 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/url.php'
|
144 |
],
|
145 |
[
|
146 |
'type' => 'wp-editor',
|
147 |
+
'class' => 'Wbcr_FactoryForms445_WpEditorControl',
|
148 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/wp-editor.php'
|
149 |
],
|
150 |
[
|
151 |
'type' => 'color',
|
152 |
+
'class' => 'Wbcr_FactoryForms445_ColorControl',
|
153 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/color.php'
|
154 |
],
|
155 |
[
|
156 |
'type' => 'color-and-opacity',
|
157 |
+
'class' => 'Wbcr_FactoryForms445_ColorAndOpacityControl',
|
158 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/color-and-opacity.php'
|
159 |
],
|
160 |
[
|
161 |
'type' => 'gradient',
|
162 |
+
'class' => 'Wbcr_FactoryForms445_GradientControl',
|
163 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/gradient.php'
|
164 |
],
|
165 |
[
|
166 |
'type' => 'font',
|
167 |
+
'class' => 'Wbcr_FactoryForms445_FontControl',
|
168 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/font.php'
|
169 |
],
|
170 |
[
|
171 |
'type' => 'google-font',
|
172 |
+
'class' => 'Wbcr_FactoryForms445_GoogleFontControl',
|
173 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/google-font.php'
|
174 |
],
|
175 |
[
|
176 |
'type' => 'pattern',
|
177 |
+
'class' => 'Wbcr_FactoryForms445_PatternControl',
|
178 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/pattern.php'
|
179 |
],
|
180 |
[
|
181 |
'type' => 'integer',
|
182 |
+
'class' => 'Wbcr_FactoryForms445_IntegerControl',
|
183 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/integer.php'
|
184 |
],
|
185 |
[
|
186 |
'type' => 'control-group',
|
187 |
+
'class' => 'Wbcr_FactoryForms445_ControlGroupHolder',
|
188 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/control-group.php'
|
189 |
],
|
190 |
[
|
191 |
'type' => 'paddings-editor',
|
192 |
+
'class' => 'Wbcr_FactoryForms445_PaddingsEditorControl',
|
193 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/paddings-editor.php'
|
194 |
],
|
195 |
]);
|
196 |
|
198 |
$plugin->forms->registerHolders([
|
199 |
[
|
200 |
'type' => 'tab',
|
201 |
+
'class' => 'Wbcr_FactoryForms445_TabHolder',
|
202 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/tab.php'
|
203 |
],
|
204 |
[
|
205 |
'type' => 'tab-item',
|
206 |
+
'class' => 'Wbcr_FactoryForms445_TabItemHolder',
|
207 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/tab-item.php'
|
208 |
],
|
209 |
[
|
210 |
'type' => 'accordion',
|
211 |
+
'class' => 'Wbcr_FactoryForms445_AccordionHolder',
|
212 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/accordion.php'
|
213 |
],
|
214 |
[
|
215 |
'type' => 'accordion-item',
|
216 |
+
'class' => 'Wbcr_FactoryForms445_AccordionItemHolder',
|
217 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/accordion-item.php'
|
218 |
],
|
219 |
[
|
220 |
'type' => 'control-group',
|
221 |
+
'class' => 'Wbcr_FactoryForms445_ControlGroupHolder',
|
222 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/control-group.php'
|
223 |
],
|
224 |
[
|
225 |
'type' => 'control-group-item',
|
226 |
+
'class' => 'Wbcr_FactoryForms445_ControlGroupItem',
|
227 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/control-group-item.php'
|
228 |
],
|
229 |
[
|
230 |
'type' => 'form-group',
|
231 |
+
'class' => 'Wbcr_FactoryForms445_FormGroupHolder',
|
232 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/form-group.php'
|
233 |
],
|
234 |
[
|
235 |
'type' => 'more-link',
|
236 |
+
'class' => 'Wbcr_FactoryForms445_MoreLinkHolder',
|
237 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/more-link.php'
|
238 |
],
|
239 |
[
|
240 |
'type' => 'div',
|
241 |
+
'class' => 'Wbcr_FactoryForms445_DivHolder',
|
242 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/div.php'
|
243 |
],
|
244 |
[
|
245 |
'type' => 'columns',
|
246 |
+
'class' => 'Wbcr_FactoryForms445_ColumnsHolder',
|
247 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/holders/columns.php'
|
248 |
]
|
249 |
]);
|
250 |
|
252 |
$plugin->forms->registerCustomElements([
|
253 |
[
|
254 |
'type' => 'html',
|
255 |
+
'class' => 'Wbcr_FactoryForms445_Html',
|
256 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/customs/html.php',
|
257 |
],
|
258 |
[
|
259 |
'type' => 'separator',
|
260 |
+
'class' => 'Wbcr_FactoryForms445_Separator',
|
261 |
+
'include' => FACTORY_FORMS_445_DIR . '/controls/customs/separator.php',
|
262 |
],
|
263 |
]);
|
264 |
|
265 |
// registration of form layouts
|
266 |
$plugin->forms->registerFormLayout([
|
267 |
'name' => 'bootstrap-3',
|
268 |
+
'class' => 'Wbcr_FactoryForms445_Bootstrap3FormLayout',
|
269 |
+
'include' => FACTORY_FORMS_445_DIR . '/layouts/bootstrap-3/bootstrap-3.php'
|
270 |
]);
|
271 |
}
|
272 |
|
273 |
+
add_action('wbcr_factory_forms_445_register_controls', 'wbcr_factory_forms_445_register_default_controls');
|
274 |
}
|
libs/factory/forms/controls/checkbox.php
CHANGED
@@ -20,9 +20,9 @@
|
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
if( !class_exists('
|
24 |
|
25 |
-
class
|
26 |
|
27 |
public $type = 'checkbox';
|
28 |
|
@@ -130,10 +130,10 @@
|
|
130 |
<div <?php $this->attrs() ?>>
|
131 |
<button type="button" class="btn btn-default btn-small btn-sm factory-on <?php if( $value ) {
|
132 |
echo 'active';
|
133 |
-
} ?>"><?php _e('On', '
|
134 |
<button type="button" class="btn btn-default btn-small btn-sm factory-off <?php if( !$value ) {
|
135 |
echo 'active';
|
136 |
-
} ?>" data-value="0"><?php _e('Off', '
|
137 |
<input type="checkbox" style="display: none" id="<?php echo $name_on_form ?>" class="factory-result" name="<?php echo $name_on_form ?>" value="<?= $value ?>" <?php if( $value ) {
|
138 |
echo 'checked="checked"';
|
139 |
} ?>" />
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
+
if( !class_exists('Wbcr_FactoryForms445_CheckboxControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms445_CheckboxControl extends Wbcr_FactoryForms445_Control {
|
26 |
|
27 |
public $type = 'checkbox';
|
28 |
|
130 |
<div <?php $this->attrs() ?>>
|
131 |
<button type="button" class="btn btn-default btn-small btn-sm factory-on <?php if( $value ) {
|
132 |
echo 'active';
|
133 |
+
} ?>"><?php _e('On', 'wbcr_factory_forms_445') ?></button>
|
134 |
<button type="button" class="btn btn-default btn-small btn-sm factory-off <?php if( !$value ) {
|
135 |
echo 'active';
|
136 |
+
} ?>" data-value="0"><?php _e('Off', 'wbcr_factory_forms_445') ?></button>
|
137 |
<input type="checkbox" style="display: none" id="<?php echo $name_on_form ?>" class="factory-result" name="<?php echo $name_on_form ?>" value="<?= $value ?>" <?php if( $value ) {
|
138 |
echo 'checked="checked"';
|
139 |
} ?>" />
|
libs/factory/forms/controls/color-and-opacity.php
CHANGED
@@ -20,10 +20,10 @@
|
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
if( !class_exists('
|
24 |
}
|
25 |
|
26 |
-
class
|
27 |
|
28 |
public $type = 'color-and-opacity';
|
29 |
|
@@ -57,8 +57,8 @@
|
|
57 |
'way' => 'slider'
|
58 |
));
|
59 |
|
60 |
-
$this->color = new
|
61 |
-
$this->opacity = new
|
62 |
|
63 |
$this->innerControls = array($this->color, $this->opacity);
|
64 |
}
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
+
if( !class_exists('Wbcr_FactoryForms445_ColorAndOpacityControl') ) {
|
24 |
}
|
25 |
|
26 |
+
class Wbcr_FactoryForms445_ColorAndOpacityControl extends Wbcr_FactoryForms445_ComplexControl {
|
27 |
|
28 |
public $type = 'color-and-opacity';
|
29 |
|
57 |
'way' => 'slider'
|
58 |
));
|
59 |
|
60 |
+
$this->color = new Wbcr_FactoryForms445_ColorControl($options['color'], $form, $provider);
|
61 |
+
$this->opacity = new Wbcr_FactoryForms445_IntegerControl($options['opacity'], $form, $provider);
|
62 |
|
63 |
$this->innerControls = array($this->color, $this->opacity);
|
64 |
}
|
libs/factory/forms/controls/color.php
CHANGED
@@ -20,9 +20,9 @@
|
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
if( !class_exists('
|
24 |
|
25 |
-
class
|
26 |
|
27 |
public $type = 'color';
|
28 |
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
+
if( !class_exists('Wbcr_FactoryForms445_ColorControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms445_ColorControl extends Wbcr_FactoryForms445_Control {
|
26 |
|
27 |
public $type = 'color';
|
28 |
|
libs/factory/forms/controls/customs/html.php
CHANGED
@@ -14,9 +14,9 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
-
class
|
20 |
|
21 |
public $type = 'html';
|
22 |
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_Html') ) {
|
18 |
|
19 |
+
class Wbcr_FactoryForms445_Html extends Wbcr_FactoryForms445_CustomElement {
|
20 |
|
21 |
public $type = 'html';
|
22 |
|
libs/factory/forms/controls/customs/separator.php
CHANGED
@@ -14,8 +14,8 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
-
class
|
19 |
|
20 |
public $type = 'separator';
|
21 |
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_Separator') ) {
|
18 |
+
class Wbcr_FactoryForms445_Separator extends Wbcr_FactoryForms445_CustomElement {
|
19 |
|
20 |
public $type = 'separator';
|
21 |
|
libs/factory/forms/controls/datepicker-range.php
CHANGED
@@ -29,9 +29,9 @@
|
|
29 |
exit;
|
30 |
}
|
31 |
|
32 |
-
if( !class_exists('
|
33 |
|
34 |
-
class
|
35 |
|
36 |
public $type = 'datetimepicker-range';
|
37 |
|
@@ -65,8 +65,8 @@
|
|
65 |
'default' => date('Y/m/d H:i', strtotime("+1 month"))
|
66 |
), $options['range_2']);
|
67 |
|
68 |
-
$this->range_1 = new
|
69 |
-
$this->range_2 = new
|
70 |
$this->inner_controls = array($this->range_1, $this->range_2);
|
71 |
|
72 |
foreach($this->inner_controls as $key => $control) {
|
29 |
exit;
|
30 |
}
|
31 |
|
32 |
+
if( !class_exists('Wbcr_FactoryForms445_DatepickerRangeControl') ) {
|
33 |
|
34 |
+
class Wbcr_FactoryForms445_DatepickerRangeControl extends Wbcr_FactoryForms445_ComplexControl {
|
35 |
|
36 |
public $type = 'datetimepicker-range';
|
37 |
|
65 |
'default' => date('Y/m/d H:i', strtotime("+1 month"))
|
66 |
), $options['range_2']);
|
67 |
|
68 |
+
$this->range_1 = new Wbcr_FactoryForms445_TextboxControl($options['range_1'], $form, $provider);
|
69 |
+
$this->range_2 = new Wbcr_FactoryForms445_TextboxControl($options['range_2'], $form, $provider);
|
70 |
$this->inner_controls = array($this->range_1, $this->range_2);
|
71 |
|
72 |
foreach($this->inner_controls as $key => $control) {
|
libs/factory/forms/controls/dropdown-and-colors.php
CHANGED
@@ -5,14 +5,14 @@
|
|
5 |
*
|
6 |
* Main options:
|
7 |
* name => a name of the control
|
8 |
-
* // see
|
9 |
* 'dropdown' => array(
|
10 |
* // a callback to return items or an array of items to select
|
11 |
* 'data' => OPanda_ThemeManager::getThemes(OPanda_Items::getCurrentItemName(), 'dropdown'),
|
12 |
* 'default' => 'default',
|
13 |
* 'value' => 'value' // a value to show in the control
|
14 |
* ),
|
15 |
-
* // see
|
16 |
* 'colors' => array(
|
17 |
* // a callback to return items or an array of items to select
|
18 |
* 'data' => array(
|
@@ -37,9 +37,9 @@
|
|
37 |
exit;
|
38 |
}
|
39 |
|
40 |
-
if( !class_exists('
|
41 |
|
42 |
-
class
|
43 |
|
44 |
public $type = 'dropdown-and-colors';
|
45 |
|
@@ -69,8 +69,8 @@
|
|
69 |
'name' => $this->options['name'] . '__colors',
|
70 |
));
|
71 |
|
72 |
-
$this->dropdown = new
|
73 |
-
$this->colors = new
|
74 |
$this->inner_controls = array($this->dropdown, $this->colors);
|
75 |
|
76 |
$colors = $this->colors->getOption('data');
|
5 |
*
|
6 |
* Main options:
|
7 |
* name => a name of the control
|
8 |
+
* // see FactoryForms445_DropdownControl
|
9 |
* 'dropdown' => array(
|
10 |
* // a callback to return items or an array of items to select
|
11 |
* 'data' => OPanda_ThemeManager::getThemes(OPanda_Items::getCurrentItemName(), 'dropdown'),
|
12 |
* 'default' => 'default',
|
13 |
* 'value' => 'value' // a value to show in the control
|
14 |
* ),
|
15 |
+
* // see FactoryForms445_RadioColorsControl
|
16 |
* 'colors' => array(
|
17 |
* // a callback to return items or an array of items to select
|
18 |
* 'data' => array(
|
37 |
exit;
|
38 |
}
|
39 |
|
40 |
+
if( !class_exists('Wbcr_FactoryForms445_DropdownAndColorsControl') ) {
|
41 |
|
42 |
+
class Wbcr_FactoryForms445_DropdownAndColorsControl extends Wbcr_FactoryForms445_ComplexControl {
|
43 |
|
44 |
public $type = 'dropdown-and-colors';
|
45 |
|
69 |
'name' => $this->options['name'] . '__colors',
|
70 |
));
|
71 |
|
72 |
+
$this->dropdown = new Wbcr_FactoryForms445_DropdownControl($options['dropdown'], $form, $provider);
|
73 |
+
$this->colors = new Wbcr_FactoryForms445_RadioColorsControl($options['colors'], $form, $provider);
|
74 |
$this->inner_controls = array($this->dropdown, $this->colors);
|
75 |
|
76 |
$colors = $this->colors->getOption('data');
|
libs/factory/forms/controls/dropdown.php
CHANGED
@@ -21,9 +21,9 @@
|
|
21 |
exit;
|
22 |
}
|
23 |
|
24 |
-
if ( ! class_exists( '
|
25 |
|
26 |
-
class
|
27 |
|
28 |
public $type = 'dropdown';
|
29 |
|
@@ -123,7 +123,7 @@
|
|
123 |
'url': '<?php echo $data['url'] ?>',
|
124 |
'data': <?php echo json_encode( $data['data'] ) ?>,
|
125 |
'selected': '<?php echo $value ?>',
|
126 |
-
'empty_list': '<?php echo $this->getOption( 'empty', __( 'The list is empty.', '
|
127 |
};
|
128 |
</script>
|
129 |
<?php
|
@@ -268,7 +268,7 @@
|
|
268 |
}
|
269 |
|
270 |
$is_empty = $this->isAjax() || empty( $items );
|
271 |
-
$empty_list = $this->getOption( 'empty', __( '- empty -', '
|
272 |
|
273 |
?>
|
274 |
<select <?php $this->attrs() ?>>
|
@@ -349,7 +349,7 @@
|
|
349 |
}
|
350 |
|
351 |
$value = isset( $item['value'] ) ? $item['value'] : '';
|
352 |
-
$title = isset( $item['title'] ) ? $item['title'] : __( '- empty -', '
|
353 |
|
354 |
$data = isset( $item['data'] ) ? $item['data'] : null;
|
355 |
} else {
|
21 |
exit;
|
22 |
}
|
23 |
|
24 |
+
if ( ! class_exists( 'Wbcr_FactoryForms445_DropdownControl' ) ) {
|
25 |
|
26 |
+
class Wbcr_FactoryForms445_DropdownControl extends Wbcr_FactoryForms445_Control {
|
27 |
|
28 |
public $type = 'dropdown';
|
29 |
|
123 |
'url': '<?php echo $data['url'] ?>',
|
124 |
'data': <?php echo json_encode( $data['data'] ) ?>,
|
125 |
'selected': '<?php echo $value ?>',
|
126 |
+
'empty_list': '<?php echo $this->getOption( 'empty', __( 'The list is empty.', 'wbcr_factory_forms_445' ) ) ?>'
|
127 |
};
|
128 |
</script>
|
129 |
<?php
|
268 |
}
|
269 |
|
270 |
$is_empty = $this->isAjax() || empty( $items );
|
271 |
+
$empty_list = $this->getOption( 'empty', __( '- empty -', 'wbcr_factory_forms_445' ) );
|
272 |
|
273 |
?>
|
274 |
<select <?php $this->attrs() ?>>
|
349 |
}
|
350 |
|
351 |
$value = isset( $item['value'] ) ? $item['value'] : '';
|
352 |
+
$title = isset( $item['title'] ) ? $item['title'] : __( '- empty -', 'wbcr_factory_forms_445' );
|
353 |
|
354 |
$data = isset( $item['data'] ) ? $item['data'] : null;
|
355 |
} else {
|
libs/factory/forms/controls/font.php
CHANGED
@@ -20,9 +20,9 @@
|
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
if( !class_exists('
|
24 |
|
25 |
-
class
|
26 |
|
27 |
public $type = 'font';
|
28 |
|
@@ -54,9 +54,9 @@
|
|
54 |
'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
|
55 |
);
|
56 |
|
57 |
-
$this->size = new
|
58 |
-
$this->family = new
|
59 |
-
$this->color = new
|
60 |
|
61 |
$this->innerControls = array($this->family, $this->size, $this->color);
|
62 |
}
|
@@ -66,8 +66,8 @@
|
|
66 |
|
67 |
$fonts = $this->getDefaultFonts();
|
68 |
|
69 |
-
$fonts = apply_filters('
|
70 |
-
$fonts = apply_filters('
|
71 |
|
72 |
return $fonts;
|
73 |
}
|
@@ -77,10 +77,10 @@
|
|
77 |
|
78 |
$fonts = array(
|
79 |
|
80 |
-
array('inherit', __('(use default website font)', '
|
81 |
array(
|
82 |
'group',
|
83 |
-
__('Sans Serif:', '
|
84 |
array(
|
85 |
array('Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial'),
|
86 |
array('"Arial Black", "Arial Bold", Gadget, sans-serif', 'Arial Black'),
|
@@ -131,7 +131,7 @@
|
|
131 |
),
|
132 |
array(
|
133 |
'group',
|
134 |
-
__('Serif:', '
|
135 |
array(
|
136 |
array(
|
137 |
'Baskerville, "Baskerville Old Face", "Hoefler Text", Garamond, "Times New Roman", serif',
|
@@ -187,7 +187,7 @@
|
|
187 |
),
|
188 |
array(
|
189 |
'group',
|
190 |
-
__('Monospaced:', '
|
191 |
array(
|
192 |
array('"Andale Mono", AndaleMono, monospace', 'Andale Mono'),
|
193 |
array('Consolas, monaco, monospace', 'Consolas'),
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
+
if( !class_exists('Wbcr_FactoryForms445_FontControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms445_FontControl extends Wbcr_FactoryForms445_ComplexControl {
|
26 |
|
27 |
public $type = 'font';
|
28 |
|
54 |
'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
|
55 |
);
|
56 |
|
57 |
+
$this->size = new Wbcr_FactoryForms445_IntegerControl($option_font_size, $form, $provider);
|
58 |
+
$this->family = new Wbcr_FactoryForms445_DropdownControl($option_font_family, $form, $provider);
|
59 |
+
$this->color = new Wbcr_FactoryForms445_ColorControl($optionFontColor, $form, $provider);
|
60 |
|
61 |
$this->innerControls = array($this->family, $this->size, $this->color);
|
62 |
}
|
66 |
|
67 |
$fonts = $this->getDefaultFonts();
|
68 |
|
69 |
+
$fonts = apply_filters('wbcr_factory_forms_445_fonts', $fonts);
|
70 |
+
$fonts = apply_filters('wbcr_factory_forms_445_fonts-' . $this->options['name'], $fonts);
|
71 |
|
72 |
return $fonts;
|
73 |
}
|
77 |
|
78 |
$fonts = array(
|
79 |
|
80 |
+
array('inherit', __('(use default website font)', 'wbcr_factory_forms_445')),
|
81 |
array(
|
82 |
'group',
|
83 |
+
__('Sans Serif:', 'wbcr_factory_forms_445'),
|
84 |
array(
|
85 |
array('Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial'),
|
86 |
array('"Arial Black", "Arial Bold", Gadget, sans-serif', 'Arial Black'),
|
131 |
),
|
132 |
array(
|
133 |
'group',
|
134 |
+
__('Serif:', 'wbcr_factory_forms_445'),
|
135 |
array(
|
136 |
array(
|
137 |
'Baskerville, "Baskerville Old Face", "Hoefler Text", Garamond, "Times New Roman", serif',
|
187 |
),
|
188 |
array(
|
189 |
'group',
|
190 |
+
__('Monospaced:', 'wbcr_factory_forms_445'),
|
191 |
array(
|
192 |
array('"Andale Mono", AndaleMono, monospace', 'Andale Mono'),
|
193 |
array('Consolas, monaco, monospace', 'Consolas'),
|
libs/factory/forms/controls/google-font.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* @package core
|
16 |
* @since 1.0.0
|
17 |
*/
|
18 |
-
class
|
19 |
|
20 |
public $type = 'google-font';
|
21 |
const APIKEY = 'AIzaSyB-3vazYv7Q-5QZA04bmSKFrWcw_VhC40w';
|
@@ -30,7 +30,7 @@
|
|
30 |
'cssClass' => 'factory-google-font-data'
|
31 |
);
|
32 |
|
33 |
-
$this->google_font_data = new
|
34 |
$this->inner_controls[] = $this->google_font_data;
|
35 |
}
|
36 |
|
@@ -49,12 +49,12 @@
|
|
49 |
$google_fonts = $this->getGoogleFonts();
|
50 |
|
51 |
$fonts = array(
|
52 |
-
array('inherit', __('(use default website font)', '
|
53 |
);
|
54 |
|
55 |
$fontsCommon = array(
|
56 |
'group',
|
57 |
-
__('Standard:', '
|
58 |
array(
|
59 |
|
60 |
array('Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial'),
|
@@ -65,7 +65,7 @@
|
|
65 |
)
|
66 |
);
|
67 |
|
68 |
-
$fontsGoogleFonts = array('group', __('Google Fonts:', '
|
69 |
|
70 |
foreach($google_fonts->items as $item) {
|
71 |
|
@@ -115,7 +115,7 @@
|
|
115 |
|
116 |
if( is_wp_error($response) ) {
|
117 |
|
118 |
-
$this->error = __('Unable to retrieve the list of Google Fonts.', '
|
119 |
$this->defailed_error = $response->get_error_message();
|
120 |
|
121 |
return $body;
|
@@ -123,7 +123,7 @@
|
|
123 |
|
124 |
if( !isset($response['body']) ) {
|
125 |
|
126 |
-
$this->error = __('Invalide response from the Google Fonts API.', '
|
127 |
$this->defailed_error = $response['body'];
|
128 |
|
129 |
return $body;
|
@@ -133,7 +133,7 @@
|
|
133 |
|
134 |
if( empty($body->items) ) {
|
135 |
|
136 |
-
$this->error = __('Unexpected error. The list of Google Fonts are empty.', '
|
137 |
|
138 |
return $body;
|
139 |
}
|
15 |
* @package core
|
16 |
* @since 1.0.0
|
17 |
*/
|
18 |
+
class Wbcr_FactoryForms445_GoogleFontControl extends Wbcr_FactoryForms445_FontControl {
|
19 |
|
20 |
public $type = 'google-font';
|
21 |
const APIKEY = 'AIzaSyB-3vazYv7Q-5QZA04bmSKFrWcw_VhC40w';
|
30 |
'cssClass' => 'factory-google-font-data'
|
31 |
);
|
32 |
|
33 |
+
$this->google_font_data = new Wbcr_FactoryForms445_HiddenControl($option_google_font_data, $form, $provider);
|
34 |
$this->inner_controls[] = $this->google_font_data;
|
35 |
}
|
36 |
|
49 |
$google_fonts = $this->getGoogleFonts();
|
50 |
|
51 |
$fonts = array(
|
52 |
+
array('inherit', __('(use default website font)', 'wbcr_factory_forms_445'))
|
53 |
);
|
54 |
|
55 |
$fontsCommon = array(
|
56 |
'group',
|
57 |
+
__('Standard:', 'wbcr_factory_forms_445'),
|
58 |
array(
|
59 |
|
60 |
array('Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial'),
|
65 |
)
|
66 |
);
|
67 |
|
68 |
+
$fontsGoogleFonts = array('group', __('Google Fonts:', 'wbcr_factory_forms_445'), array());
|
69 |
|
70 |
foreach($google_fonts->items as $item) {
|
71 |
|
115 |
|
116 |
if( is_wp_error($response) ) {
|
117 |
|
118 |
+
$this->error = __('Unable to retrieve the list of Google Fonts.', 'wbcr_factory_forms_445');
|
119 |
$this->defailed_error = $response->get_error_message();
|
120 |
|
121 |
return $body;
|
123 |
|
124 |
if( !isset($response['body']) ) {
|
125 |
|
126 |
+
$this->error = __('Invalide response from the Google Fonts API.', 'wbcr_factory_forms_445');
|
127 |
$this->defailed_error = $response['body'];
|
128 |
|
129 |
return $body;
|
133 |
|
134 |
if( empty($body->items) ) {
|
135 |
|
136 |
+
$this->error = __('Unexpected error. The list of Google Fonts are empty.', 'wbcr_factory_forms_445');
|
137 |
|
138 |
return $body;
|
139 |
}
|
libs/factory/forms/controls/gradient.php
CHANGED
@@ -25,8 +25,8 @@
|
|
25 |
exit;
|
26 |
}
|
27 |
|
28 |
-
if( !class_exists('
|
29 |
-
class
|
30 |
|
31 |
public $type = 'gradient';
|
32 |
|
@@ -66,8 +66,8 @@
|
|
66 |
if( !window.factory.res ) {
|
67 |
window.factory.res = {};
|
68 |
}
|
69 |
-
factory.res.resVertical = '<?php _e( 'vertical', '
|
70 |
-
factory.res.resHorizontal = '<?php _e( 'horizontal', '
|
71 |
</script>
|
72 |
<div <?php $this->attrs() ?>>
|
73 |
<div class="factory-gradient-picker">
|
25 |
exit;
|
26 |
}
|
27 |
|
28 |
+
if( !class_exists('Wbcr_FactoryForms445_GradientControl') ) {
|
29 |
+
class Wbcr_FactoryForms445_GradientControl extends Wbcr_FactoryForms445_Control {
|
30 |
|
31 |
public $type = 'gradient';
|
32 |
|
66 |
if( !window.factory.res ) {
|
67 |
window.factory.res = {};
|
68 |
}
|
69 |
+
factory.res.resVertical = '<?php _e( 'vertical', 'wbcr_factory_forms_445' ) ?>';
|
70 |
+
factory.res.resHorizontal = '<?php _e( 'horizontal', 'wbcr_factory_forms_445' ) ?>';
|
71 |
</script>
|
72 |
<div <?php $this->attrs() ?>>
|
73 |
<div class="factory-gradient-picker">
|
libs/factory/forms/controls/hidden.php
CHANGED
@@ -20,9 +20,9 @@
|
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
if( !class_exists('
|
24 |
|
25 |
-
class
|
26 |
|
27 |
public $type = 'hidden';
|
28 |
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
+
if( !class_exists('Wbcr_FactoryForms445_HiddenControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms445_HiddenControl extends Wbcr_FactoryForms445_Control {
|
26 |
|
27 |
public $type = 'hidden';
|
28 |
|
libs/factory/forms/controls/holders/accordion-item.php
CHANGED
@@ -14,14 +14,14 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
-
class
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_AccordionItemHolder') ) {
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms445_AccordionItemHolder extends Wbcr_FactoryForms445_Holder {
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
libs/factory/forms/controls/holders/accordion.php
CHANGED
@@ -13,13 +13,13 @@
|
|
13 |
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
-
if( !class_exists('
|
17 |
/**
|
18 |
* Tab Control Holder
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
-
class
|
23 |
|
24 |
/**
|
25 |
* A holder type.
|
13 |
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
+
if( !class_exists('Wbcr_FactoryForms445_AccordionHolder') ) {
|
17 |
/**
|
18 |
* Tab Control Holder
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
+
class Wbcr_FactoryForms445_AccordionHolder extends Wbcr_FactoryForms445_Holder {
|
23 |
|
24 |
/**
|
25 |
* A holder type.
|
libs/factory/forms/controls/holders/columns.php
CHANGED
@@ -14,13 +14,13 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
/**
|
19 |
* Columns Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
class
|
24 |
|
25 |
/**
|
26 |
* A holder type.
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_ColumnsHolder') ) {
|
18 |
/**
|
19 |
* Columns Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryForms445_ColumnsHolder extends Wbcr_FactoryForms445_Holder {
|
24 |
|
25 |
/**
|
26 |
* A holder type.
|
libs/factory/forms/controls/holders/control-group-item.php
CHANGED
@@ -14,14 +14,14 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
-
class
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_ControlGroupItem') ) {
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms445_ControlGroupItem extends Wbcr_FactoryForms445_Holder {
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
libs/factory/forms/controls/holders/control-group.php
CHANGED
@@ -14,14 +14,14 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
-
class
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
@@ -61,7 +61,7 @@
|
|
61 |
continue;
|
62 |
}
|
63 |
|
64 |
-
$builder = new
|
65 |
|
66 |
$builder->addCssClass('factory-control-group-nav-label');
|
67 |
$builder->addCssClass('factory-control-group-nav-label-' . $element->getOption('name'));
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_ControlGroupHolder') ) {
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms445_ControlGroupHolder extends Wbcr_FactoryForms445_ControlHolder {
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
61 |
continue;
|
62 |
}
|
63 |
|
64 |
+
$builder = new Wbcr_FactoryForms445_HtmlAttributeBuilder();
|
65 |
|
66 |
$builder->addCssClass('factory-control-group-nav-label');
|
67 |
$builder->addCssClass('factory-control-group-nav-label-' . $element->getOption('name'));
|
libs/factory/forms/controls/holders/div.php
CHANGED
@@ -14,13 +14,13 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
/**
|
19 |
* Div Control Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
class
|
24 |
|
25 |
/**
|
26 |
* A holder type.
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_DivHolder') ) {
|
18 |
/**
|
19 |
* Div Control Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryForms445_DivHolder extends Wbcr_FactoryForms445_Holder {
|
24 |
|
25 |
/**
|
26 |
* A holder type.
|
libs/factory/forms/controls/holders/form-group.php
CHANGED
@@ -14,13 +14,13 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
/**
|
19 |
* Group Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
class
|
24 |
|
25 |
/**
|
26 |
* A holder type.
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_FormGroupHolder') ) {
|
18 |
/**
|
19 |
* Group Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryForms445_FormGroupHolder extends Wbcr_FactoryForms445_Holder {
|
24 |
|
25 |
/**
|
26 |
* A holder type.
|
libs/factory/forms/controls/holders/more-link.php
CHANGED
@@ -1,75 +1,73 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
/**
|
3 |
-
*
|
4 |
*
|
5 |
-
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
6 |
-
* @copyright (c) 2018, Webcraftic Ltd
|
7 |
-
*
|
8 |
-
* @package factory-forms
|
9 |
* @since 1.0.0
|
10 |
*/
|
11 |
-
|
12 |
-
// Exit if accessed directly
|
13 |
-
if( !defined('ABSPATH') ) {
|
14 |
-
exit;
|
15 |
-
}
|
16 |
-
|
17 |
-
if( !class_exists('Wbcr_FactoryForms443_MoreLinkHolder') ) {
|
18 |
|
19 |
/**
|
20 |
-
*
|
21 |
*
|
22 |
* @since 1.0.0
|
|
|
23 |
*/
|
24 |
-
|
25 |
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
* Here we should render a beginning html of the tab.
|
36 |
-
*
|
37 |
-
* @since 1.0.0
|
38 |
-
* @return void
|
39 |
-
*/
|
40 |
-
public function beforeRendering()
|
41 |
-
{
|
42 |
-
$count = isset($this->options['count'])
|
43 |
-
? $this->options['count']
|
44 |
-
: 0;
|
45 |
|
46 |
-
|
47 |
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
</div>
|
56 |
</div>
|
57 |
-
|
58 |
-
|
|
|
59 |
<?php
|
60 |
-
|
61 |
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
<?php
|
73 |
-
}
|
74 |
}
|
75 |
-
}
|
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* The file contains the class of More Link Holder.
|
4 |
+
*
|
5 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
6 |
+
* @copyright (c) 2018, Webcraftic Ltd
|
7 |
+
*
|
8 |
+
* @package factory-forms
|
9 |
+
* @since 1.0.0
|
10 |
+
*/
|
11 |
+
|
12 |
+
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
+
exit;
|
15 |
+
}
|
16 |
+
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_MoreLinkHolder') ) {
|
18 |
+
|
19 |
/**
|
20 |
+
* Collapsed Group Holder
|
21 |
*
|
|
|
|
|
|
|
|
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms445_MoreLinkHolder extends Wbcr_FactoryForms445_Holder {
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
|
26 |
/**
|
27 |
+
* A holder type.
|
28 |
*
|
29 |
* @since 1.0.0
|
30 |
+
* @var string
|
31 |
*/
|
32 |
+
public $type = 'more-link';
|
33 |
|
34 |
+
/**
|
35 |
+
* Here we should render a beginning html of the tab.
|
36 |
+
*
|
37 |
+
* @return void
|
38 |
+
* @since 1.0.0
|
39 |
+
*/
|
40 |
+
public function beforeRendering()
|
41 |
+
{
|
42 |
+
$count = isset($this->options['count']) ? $this->options['count'] : 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
+
$id = 'factory-more-link-' . $this->getName();
|
45 |
|
46 |
+
?>
|
47 |
+
<div <?php $this->attrs() ?>>
|
48 |
+
<div class="form-group">
|
49 |
+
<div class="control-label col-sm-4"></div>
|
50 |
+
<div class="control-group col-sm-8">
|
51 |
+
<a href="#<?php echo $id ?>" class="factory-more-link-show btn btn-default"><?php $this->title() ?>
|
52 |
+
(<?php echo $count ?>)</a>
|
|
|
53 |
</div>
|
54 |
+
</div>
|
55 |
+
<div class='factory-more-link-content' id="<?php echo $id ?>" style="display: none;">
|
56 |
+
<a href="#<?php echo $id ?>" class='factory-more-link-hide'><?php _e('hide extra options', 'factory'); ?></a>
|
57 |
<?php
|
58 |
+
}
|
59 |
|
60 |
+
/**
|
61 |
+
* Here we should render an end html of the tab.
|
62 |
+
*
|
63 |
+
* @return void
|
64 |
+
* @since 1.0.0
|
65 |
+
*/
|
66 |
+
public function afterRendering()
|
67 |
+
{
|
68 |
+
?>
|
69 |
+
</div></div>
|
70 |
<?php
|
|
|
71 |
}
|
72 |
+
}
|
73 |
+
}
|
libs/factory/forms/controls/holders/tab-item.php
CHANGED
@@ -13,13 +13,13 @@
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
-
if( !class_exists('
|
17 |
/**
|
18 |
* Tab Item Control Holder
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
-
class
|
23 |
|
24 |
/**
|
25 |
* A holder type.
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
if( !class_exists('Wbcr_FactoryForms445_TabItemHolder') ) {
|
17 |
/**
|
18 |
* Tab Item Control Holder
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
+
class Wbcr_FactoryForms445_TabItemHolder extends Wbcr_FactoryForms445_Holder {
|
23 |
|
24 |
/**
|
25 |
* A holder type.
|
libs/factory/forms/controls/holders/tab.php
CHANGED
@@ -14,14 +14,14 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
-
class
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
@@ -44,7 +44,7 @@
|
|
44 |
*
|
45 |
* @since 1.0.0
|
46 |
* @param mixed[] $options A holder options.
|
47 |
-
* @param
|
48 |
*/
|
49 |
public function __construct($options, $form)
|
50 |
{
|
@@ -88,7 +88,7 @@
|
|
88 |
$tab_icon = $element->options['icon'];
|
89 |
}
|
90 |
|
91 |
-
$builder = new
|
92 |
|
93 |
$builder->addCssClass('factory-tab-item-header');
|
94 |
$builder->addCssClass('factory-tab-item-header-' . $element->getName());
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_TabHolder') ) {
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms445_TabHolder extends Wbcr_FactoryForms445_Holder {
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
44 |
*
|
45 |
* @since 1.0.0
|
46 |
* @param mixed[] $options A holder options.
|
47 |
+
* @param FactoryForms445_Form $form A parent form.
|
48 |
*/
|
49 |
public function __construct($options, $form)
|
50 |
{
|
88 |
$tab_icon = $element->options['icon'];
|
89 |
}
|
90 |
|
91 |
+
$builder = new Wbcr_FactoryForms445_HtmlAttributeBuilder();
|
92 |
|
93 |
$builder->addCssClass('factory-tab-item-header');
|
94 |
$builder->addCssClass('factory-tab-item-header-' . $element->getName());
|
libs/factory/forms/controls/integer.php
CHANGED
@@ -32,9 +32,9 @@
|
|
32 |
exit;
|
33 |
}
|
34 |
|
35 |
-
if( !class_exists('
|
36 |
|
37 |
-
class
|
38 |
|
39 |
public $type = 'integer';
|
40 |
|
32 |
exit;
|
33 |
}
|
34 |
|
35 |
+
if( !class_exists('Wbcr_FactoryForms445_IntegerControl') ) {
|
36 |
|
37 |
+
class Wbcr_FactoryForms445_IntegerControl extends Wbcr_FactoryForms445_Control {
|
38 |
|
39 |
public $type = 'integer';
|
40 |
|
libs/factory/forms/controls/list.php
CHANGED
@@ -21,9 +21,9 @@
|
|
21 |
exit;
|
22 |
}
|
23 |
|
24 |
-
if( !class_exists('
|
25 |
|
26 |
-
class
|
27 |
|
28 |
public $type = 'list';
|
29 |
|
@@ -93,7 +93,7 @@
|
|
93 |
'url': '<?php echo $data['url'] ?>',
|
94 |
'data': <?php echo json_encode( $data['data'] ) ?>,
|
95 |
'selected': <?php echo json_encode( $value ) ?>,
|
96 |
-
'emptyList': '<?php echo $this->getOption('empty', __('The list is empty.', '
|
97 |
};
|
98 |
</script>
|
99 |
<?php
|
@@ -136,7 +136,7 @@
|
|
136 |
: array();
|
137 |
|
138 |
$is_empty = $this->isAjax() || empty($items);
|
139 |
-
$emptyList = $this->getOption('empty', __('The list is empty.', '
|
140 |
|
141 |
if( $is_empty ) {
|
142 |
$this->addCssClass('factory-empty');
|
21 |
exit;
|
22 |
}
|
23 |
|
24 |
+
if( !class_exists('Wbcr_FactoryForms445_ListControl') ) {
|
25 |
|
26 |
+
class Wbcr_FactoryForms445_ListControl extends Wbcr_FactoryForms445_Control {
|
27 |
|
28 |
public $type = 'list';
|
29 |
|
93 |
'url': '<?php echo $data['url'] ?>',
|
94 |
'data': <?php echo json_encode( $data['data'] ) ?>,
|
95 |
'selected': <?php echo json_encode( $value ) ?>,
|
96 |
+
'emptyList': '<?php echo $this->getOption('empty', __('The list is empty.', 'wbcr_factory_forms_445') ) ?>'
|
97 |
};
|
98 |
</script>
|
99 |
<?php
|
136 |
: array();
|
137 |
|
138 |
$is_empty = $this->isAjax() || empty($items);
|
139 |
+
$emptyList = $this->getOption('empty', __('The list is empty.', 'wbcr_factory_forms_445'));
|
140 |
|
141 |
if( $is_empty ) {
|
142 |
$this->addCssClass('factory-empty');
|
libs/factory/forms/controls/multiple-textbox.php
CHANGED
@@ -15,9 +15,9 @@
|
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
-
if( !class_exists('
|
19 |
|
20 |
-
class
|
21 |
|
22 |
public $type = 'multiple-textbox';
|
23 |
|
@@ -86,7 +86,7 @@
|
|
86 |
<?php endif; ?>
|
87 |
</div>
|
88 |
<button class="btn btn-default btn-small factory-mtextbox-add-item">
|
89 |
-
<i class="fa fa-plus" aria-hidden="true"></i> <?php _e('Add new', '
|
90 |
</button>
|
91 |
</div>
|
92 |
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
+
if( !class_exists('Wbcr_FactoryForms445_MultipleTextboxControl') ) {
|
19 |
|
20 |
+
class Wbcr_FactoryForms445_MultipleTextboxControl extends Wbcr_FactoryForms445_Control {
|
21 |
|
22 |
public $type = 'multiple-textbox';
|
23 |
|
86 |
<?php endif; ?>
|
87 |
</div>
|
88 |
<button class="btn btn-default btn-small factory-mtextbox-add-item">
|
89 |
+
<i class="fa fa-plus" aria-hidden="true"></i> <?php _e('Add new', 'wbcr_factory_forms_445') ?>
|
90 |
</button>
|
91 |
</div>
|
92 |
|
libs/factory/forms/controls/paddings-editor.php
CHANGED
@@ -14,9 +14,9 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
-
class
|
20 |
|
21 |
public $type = 'paddings-editor';
|
22 |
|
@@ -67,7 +67,7 @@
|
|
67 |
</div>
|
68 |
<div class="factory-slider-container">
|
69 |
<label class="factory-title">
|
70 |
-
<?php _e('Select a side and move the slider to set up:', '
|
71 |
</label>
|
72 |
|
73 |
<div class="factory-slider">
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_PaddingsEditorControl') ) {
|
18 |
|
19 |
+
class Wbcr_FactoryForms445_PaddingsEditorControl extends Wbcr_FactoryForms445_Control {
|
20 |
|
21 |
public $type = 'paddings-editor';
|
22 |
|
67 |
</div>
|
68 |
<div class="factory-slider-container">
|
69 |
<label class="factory-title">
|
70 |
+
<?php _e('Select a side and move the slider to set up:', 'wbcr_factory_forms_445') ?>
|
71 |
</label>
|
72 |
|
73 |
<div class="factory-slider">
|
libs/factory/forms/controls/pattern.php
CHANGED
@@ -15,9 +15,9 @@
|
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
-
if( !class_exists('
|
19 |
|
20 |
-
class
|
21 |
|
22 |
public $type = 'pattern';
|
23 |
|
@@ -52,12 +52,12 @@
|
|
52 |
$name = $this->getOption('name');
|
53 |
|
54 |
// filters to get available patterns for the given background contols
|
55 |
-
$this->patterns = apply_filters('
|
56 |
-
$this->patterns = apply_filters('
|
57 |
|
58 |
$this->custom_patterns = $this->getOption('patterns', array());
|
59 |
|
60 |
-
$this->color = new
|
61 |
}
|
62 |
|
63 |
/**
|
@@ -102,19 +102,19 @@
|
|
102 |
</div>
|
103 |
<a href="#" class="button button-default factory-button factory-change-color-btn <?php if( $hasColor ) {
|
104 |
echo 'button-active';
|
105 |
-
} ?>" title="<?php _e('Change color', '
|
106 |
<i class="fa fa-flask"></i>
|
107 |
-
<span><?php _e('re-color', '
|
108 |
</a>
|
109 |
<input type="hidden" id="<?php echo $name[0]; ?>" name="<?php echo $name[0]; ?>" value="<?php echo esc_url($values['url']); ?>" class="factory-pattern-result">
|
110 |
<input type="hidden" id="<?php echo $name[1]; ?>" name="<?php echo $name[1]; ?>" value="<?php echo esc_attr($values['color']); ?>" class="factory-color-result">
|
111 |
</div>
|
112 |
<div class="factory-color-panel">
|
113 |
<div class="factory-color-wrap">
|
114 |
-
<span class="factory-color-label"><?php _e('Select color:', '
|
115 |
<?php $this->color->html() ?>
|
116 |
<div class="factory-hint">
|
117 |
-
<i><?php _e('Changing the color may takes a minute or more. Please be patient.', '
|
118 |
</div>
|
119 |
</div>
|
120 |
<div class="factory-picker-target"></div>
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
+
if( !class_exists('Wbcr_FactoryForms445_PatternControl') ) {
|
19 |
|
20 |
+
class Wbcr_FactoryForms445_PatternControl extends Wbcr_FactoryForms445_Control {
|
21 |
|
22 |
public $type = 'pattern';
|
23 |
|
52 |
$name = $this->getOption('name');
|
53 |
|
54 |
// filters to get available patterns for the given background contols
|
55 |
+
$this->patterns = apply_filters('wbcr_factory_forms_445_patterns', array());
|
56 |
+
$this->patterns = apply_filters('wbcr_factory_forms_445_patterns-' . $name, $this->patterns);
|
57 |
|
58 |
$this->custom_patterns = $this->getOption('patterns', array());
|
59 |
|
60 |
+
$this->color = new Wbcr_FactoryForms445_ColorControl($options['color'], $form, $provider);
|
61 |
}
|
62 |
|
63 |
/**
|
102 |
</div>
|
103 |
<a href="#" class="button button-default factory-button factory-change-color-btn <?php if( $hasColor ) {
|
104 |
echo 'button-active';
|
105 |
+
} ?>" title="<?php _e('Change color', 'wbcr_factory_forms_445') ?>">
|
106 |
<i class="fa fa-flask"></i>
|
107 |
+
<span><?php _e('re-color', 'wbcr_factory_forms_445') ?></span>
|
108 |
</a>
|
109 |
<input type="hidden" id="<?php echo $name[0]; ?>" name="<?php echo $name[0]; ?>" value="<?php echo esc_url($values['url']); ?>" class="factory-pattern-result">
|
110 |
<input type="hidden" id="<?php echo $name[1]; ?>" name="<?php echo $name[1]; ?>" value="<?php echo esc_attr($values['color']); ?>" class="factory-color-result">
|
111 |
</div>
|
112 |
<div class="factory-color-panel">
|
113 |
<div class="factory-color-wrap">
|
114 |
+
<span class="factory-color-label"><?php _e('Select color:', 'wbcr_factory_forms_445') ?></span>
|
115 |
<?php $this->color->html() ?>
|
116 |
<div class="factory-hint">
|
117 |
+
<i><?php _e('Changing the color may takes a minute or more. Please be patient.', 'wbcr_factory_forms_445') ?></i>
|
118 |
</div>
|
119 |
</div>
|
120 |
<div class="factory-picker-target"></div>
|
libs/factory/forms/controls/radio-colors.php
CHANGED
@@ -27,9 +27,9 @@
|
|
27 |
exit;
|
28 |
}
|
29 |
|
30 |
-
if( !class_exists('
|
31 |
|
32 |
-
class
|
33 |
|
34 |
public $type = 'radio-color';
|
35 |
|
27 |
exit;
|
28 |
}
|
29 |
|
30 |
+
if( !class_exists('Wbcr_FactoryForms445_RadioColorsControl') ) {
|
31 |
|
32 |
+
class Wbcr_FactoryForms445_RadioColorsControl extends Wbcr_FactoryForms445_Control {
|
33 |
|
34 |
public $type = 'radio-color';
|
35 |
|
libs/factory/forms/controls/radio.php
CHANGED
@@ -21,9 +21,9 @@
|
|
21 |
exit;
|
22 |
}
|
23 |
|
24 |
-
if( !class_exists('
|
25 |
|
26 |
-
class
|
27 |
|
28 |
public $type = 'radio';
|
29 |
|
21 |
exit;
|
22 |
}
|
23 |
|
24 |
+
if( !class_exists('Wbcr_FactoryForms445_RadioControl') ) {
|
25 |
|
26 |
+
class Wbcr_FactoryForms445_RadioControl extends Wbcr_FactoryForms445_Control {
|
27 |
|
28 |
public $type = 'radio';
|
29 |
|
libs/factory/forms/controls/textarea.php
CHANGED
@@ -20,9 +20,9 @@
|
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
if( !class_exists('
|
24 |
|
25 |
-
class
|
26 |
|
27 |
public $type = 'textarea';
|
28 |
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
+
if( !class_exists('Wbcr_FactoryForms445_TextareaControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms445_TextareaControl extends Wbcr_FactoryForms445_Control {
|
26 |
|
27 |
public $type = 'textarea';
|
28 |
|
libs/factory/forms/controls/textbox.php
CHANGED
@@ -29,9 +29,9 @@
|
|
29 |
exit;
|
30 |
}
|
31 |
|
32 |
-
if( !class_exists('
|
33 |
|
34 |
-
class
|
35 |
|
36 |
public $type = 'textbox';
|
37 |
|
29 |
exit;
|
30 |
}
|
31 |
|
32 |
+
if( !class_exists('Wbcr_FactoryForms445_TextboxControl') ) {
|
33 |
|
34 |
+
class Wbcr_FactoryForms445_TextboxControl extends Wbcr_FactoryForms445_Control {
|
35 |
|
36 |
public $type = 'textbox';
|
37 |
|
libs/factory/forms/controls/url.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Url Control
|
5 |
*
|
6 |
* Main options:
|
7 |
-
* @see
|
8 |
*
|
9 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
10 |
* @copyright (c) 2018, Webcraftic Ltd
|
@@ -18,9 +18,9 @@
|
|
18 |
exit;
|
19 |
}
|
20 |
|
21 |
-
if( !class_exists('
|
22 |
|
23 |
-
class
|
24 |
|
25 |
public $type = 'url';
|
26 |
|
4 |
* Url Control
|
5 |
*
|
6 |
* Main options:
|
7 |
+
* @see FactoryForms445_TextboxControl
|
8 |
*
|
9 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>
|
10 |
* @copyright (c) 2018, Webcraftic Ltd
|
18 |
exit;
|
19 |
}
|
20 |
|
21 |
+
if( !class_exists('Wbcr_FactoryForms445_UrlControl') ) {
|
22 |
|
23 |
+
class Wbcr_FactoryForms445_UrlControl extends Wbcr_FactoryForms445_TextboxControl {
|
24 |
|
25 |
public $type = 'url';
|
26 |
|
libs/factory/forms/controls/wp-editor.php
CHANGED
@@ -22,9 +22,9 @@
|
|
22 |
exit;
|
23 |
}
|
24 |
|
25 |
-
if( !class_exists('
|
26 |
|
27 |
-
class
|
28 |
|
29 |
public $type = 'wp-editor';
|
30 |
|
@@ -42,7 +42,7 @@
|
|
42 |
}
|
43 |
|
44 |
if( !isset($this->options['tinymce']['content_css']) ) {
|
45 |
-
$this->options['tinymce']['content_css'] =
|
46 |
}
|
47 |
}
|
48 |
|
22 |
exit;
|
23 |
}
|
24 |
|
25 |
+
if( !class_exists('Wbcr_FactoryForms445_WpEditorControl') ) {
|
26 |
|
27 |
+
class Wbcr_FactoryForms445_WpEditorControl extends Wbcr_FactoryForms445_Control {
|
28 |
|
29 |
public $type = 'wp-editor';
|
30 |
|
42 |
}
|
43 |
|
44 |
if( !isset($this->options['tinymce']['content_css']) ) {
|
45 |
+
$this->options['tinymce']['content_css'] = FACTORY_FORMS_445_URL . '/assets/css/editor.css';
|
46 |
}
|
47 |
}
|
48 |
|
libs/factory/forms/includes/complex-control.class.php
CHANGED
@@ -13,13 +13,13 @@
|
|
13 |
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
-
if( !class_exists('
|
17 |
/**
|
18 |
* The base class for all controls.
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
-
abstract class
|
23 |
|
24 |
/**
|
25 |
* Is this element a complex control?
|
@@ -33,7 +33,7 @@
|
|
33 |
* Contains a set of internal controls.
|
34 |
*
|
35 |
* @since 1.0.0
|
36 |
-
* @var
|
37 |
*/
|
38 |
public $inner_controls = array();
|
39 |
|
@@ -41,7 +41,7 @@
|
|
41 |
* Sets a provider for the control.
|
42 |
*
|
43 |
* @since 1.0.0
|
44 |
-
* @param
|
45 |
* @return void
|
46 |
*/
|
47 |
public function setProvider($provider)
|
13 |
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
+
if( !class_exists('Wbcr_FactoryForms445_ComplexControl') ) {
|
17 |
/**
|
18 |
* The base class for all controls.
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
+
abstract class Wbcr_FactoryForms445_ComplexControl extends Wbcr_FactoryForms445_Control {
|
23 |
|
24 |
/**
|
25 |
* Is this element a complex control?
|
33 |
* Contains a set of internal controls.
|
34 |
*
|
35 |
* @since 1.0.0
|
36 |
+
* @var Wbcr_FactoryForms445_Control[]
|
37 |
*/
|
38 |
public $inner_controls = array();
|
39 |
|
41 |
* Sets a provider for the control.
|
42 |
*
|
43 |
* @since 1.0.0
|
44 |
+
* @param Wbcr_IFactoryForms445_ValueProvider $provider
|
45 |
* @return void
|
46 |
*/
|
47 |
public function setProvider($provider)
|
libs/factory/forms/includes/control-holder.class.php
CHANGED
@@ -14,19 +14,19 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
/**
|
19 |
* The base class for control holders.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
abstract class
|
24 |
|
25 |
/**
|
26 |
* Holder Elements.
|
27 |
*
|
28 |
* @since 1.0.0
|
29 |
-
* @var
|
30 |
*/
|
31 |
protected $elements = array();
|
32 |
|
@@ -43,7 +43,7 @@
|
|
43 |
*
|
44 |
* @since 1.0.0
|
45 |
* @param mixed[] $options A holder options.
|
46 |
-
* @param
|
47 |
*/
|
48 |
public function __construct($options, $form)
|
49 |
{
|
@@ -60,7 +60,7 @@
|
|
60 |
* Returns holder elements.
|
61 |
*
|
62 |
* @since 1.0.0
|
63 |
-
* @return
|
64 |
*/
|
65 |
public function getElements()
|
66 |
{
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_ControlHolder') ) {
|
18 |
/**
|
19 |
* The base class for control holders.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
abstract class Wbcr_FactoryForms445_ControlHolder extends Wbcr_FactoryForms445_Control {
|
24 |
|
25 |
/**
|
26 |
* Holder Elements.
|
27 |
*
|
28 |
* @since 1.0.0
|
29 |
+
* @var Wbcr_FactoryForms445_Control[]
|
30 |
*/
|
31 |
protected $elements = array();
|
32 |
|
43 |
*
|
44 |
* @since 1.0.0
|
45 |
* @param mixed[] $options A holder options.
|
46 |
+
* @param Wbcr_FactoryForms445_Form $form A parent form.
|
47 |
*/
|
48 |
public function __construct($options, $form)
|
49 |
{
|
60 |
* Returns holder elements.
|
61 |
*
|
62 |
* @since 1.0.0
|
63 |
+
* @return Wbcr_FactoryForms445_FormElement[].
|
64 |
*/
|
65 |
public function getElements()
|
66 |
{
|
libs/factory/forms/includes/control.class.php
CHANGED
@@ -14,14 +14,14 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* The base class for all controls.
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
-
abstract class
|
25 |
|
26 |
/**
|
27 |
* Is this element a control?
|
@@ -43,7 +43,7 @@
|
|
43 |
* A provi
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms445_Control') ) {
|
18 |
|
19 |
/**
|
20 |
* The base class for all controls.
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
abstract class Wbcr_FactoryForms445_Control extends Wbcr_FactoryForms445_FormElement {
|
25 |
|
26 |
/**
|
27 |
* Is this element a control?
|
43 |
* A provi
|