Version Description
(01.07.2020) = * Removed: Ads notices and dashboard widget * Fixed: Minor bugs
Download this release
Release Info
Developer | alexkovalevv |
Plugin | Disable admin notices individually |
Version | 1.1.3 |
Comparing to | |
See all releases |
Code changes from version 1.1.1 to 1.1.3
- admin/boot.php +55 -29
- admin/options.php +2 -2
- admin/pages/class-pages-more-features.php +1 -1
- admin/pages/class-pages-notices.php +4 -4
- clearfy.php +2 -1
- disable-admin-notices.php +41 -43
- includes/class-plugin.php +4 -4
- includes/classes/class-configurate-notices.php +170 -161
- libs/factory/adverts/boot.php +14 -14
- 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 +65 -45
- libs/factory/adverts/langs/{wbcr_factory_adverts_102-ru_RU.mo → wbcr_factory_adverts_109-ru_RU.mo} +0 -0
- libs/factory/adverts/langs/{wbcr_factory_adverts_102-ru_RU.po → wbcr_factory_adverts_109-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/boot.php +15 -15
- libs/factory/bootstrap/includes/functions.php +13 -63
- libs/factory/clearfy/assets/css/clearfy-base.css +24 -24
- libs/factory/clearfy/assets/css/clearfy-base.css.map +1 -0
- libs/factory/clearfy/assets/css/libs/autocomplete.css +44 -0
- libs/factory/clearfy/assets/css/libs/autocomplete.css.map +1 -0
- libs/factory/clearfy/assets/css/libs/autocomplete.less +57 -0
- libs/factory/clearfy/assets/js/globals.js +15 -15
- libs/factory/clearfy/assets/js/libs/jquery.autocomplete.min.js +8 -0
- libs/factory/clearfy/assets/js/license-manager.js +14 -18
- libs/factory/clearfy/assets/js/search-options.js +40 -0
- libs/factory/clearfy/boot.php +50 -19
- libs/factory/clearfy/includes/ajax-handlers.php +22 -13
- libs/factory/clearfy/includes/class-configurate.php +3 -3
- libs/factory/clearfy/includes/class-helpers.php +1 -97
- libs/factory/clearfy/includes/class-search-options.php +87 -0
- libs/factory/clearfy/langs/{wbcr_factory_clearfy_212-ru_RU.mo → wbcr_factory_clearfy_221-ru_RU.mo} +0 -0
- libs/factory/clearfy/langs/{wbcr_factory_clearfy_212-ru_RU.po → wbcr_factory_clearfy_221-ru_RU.po} +0 -0
- libs/factory/clearfy/pages/class-page-license.php +207 -154
- libs/factory/clearfy/pages/class-page-more-features.php +23 -23
- libs/factory/clearfy/pages/class-pages.php +227 -182
- libs/factory/core/boot.php +28 -28
- 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 +4 -3
- 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 +91 -86
- libs/factory/core/includes/class-factory-options.php +2 -2
- libs/factory/core/includes/class-factory-plugin-abstract.php +241 -184
- libs/factory/core/includes/class-factory-plugin-base.php +84 -30
- libs/factory/core/includes/class-factory-requests.php +1 -1
- libs/factory/core/includes/class-factory-requirements.php +16 -15
- 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 +8 -8
- libs/factory/core/includes/premium/class-factory-provider-abstract.php +123 -75
- libs/factory/core/includes/updates/class-factory-premium-upgrader.php +347 -308
- libs/factory/core/includes/updates/class-factory-upgrader.php +8 -8
- 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_420-ru_RU.mo → wbcr_factory_429-ru_RU.mo} +0 -0
- libs/factory/core/langs/{wbcr_factory_420-ru_RU.po → wbcr_factory_429-ru_RU.po} +0 -0
- libs/factory/forms/boot.php +144 -143
- 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 +2 -2
- 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 +5 -5
- libs/factory/forms/includes/custom-element.class.php +2 -2
- libs/factory/forms/includes/form-element.class.php +7 -7
- libs/factory/forms/includes/form-layout.class.php +5 -5
- libs/factory/forms/includes/form.class.php +39 -39
- libs/factory/forms/includes/holder.class.php +6 -6
- libs/factory/forms/includes/html-builder.class.php +2 -2
- libs/factory/forms/includes/providers/meta-value-provider.class.php +2 -2
- libs/factory/forms/includes/providers/options-value-provider.class.php +3 -3
- libs/factory/forms/includes/providers/value-provider.interface.php +2 -2
- libs/factory/forms/langs/{wbcr_factory_forms_418-ru_RU.mo → wbcr_factory_forms_427-ru_RU.mo} +0 -0
- libs/factory/forms/langs/{wbcr_factory_forms_418-ru_RU.po → wbcr_factory_forms_427-ru_RU.po} +0 -0
- libs/factory/forms/layouts/bootstrap-3/bootstrap-3.php +7 -7
- libs/factory/pages/boot.php +14 -14
- libs/factory/pages/includes/admin-page.class.php +145 -130
- libs/factory/pages/includes/page.class.php +7 -7
- libs/factory/pages/langs/{wbcr_factory_pages_420-fr_FR.mo → wbcr_factory_pages_429-fr_FR.mo} +0 -0
- libs/factory/pages/langs/{wbcr_factory_pages_420-fr_FR.po → wbcr_factory_pages_429-fr_FR.po} +0 -0
- libs/factory/pages/langs/{wbcr_factory_pages_420-ru_RU.mo → wbcr_factory_pages_429-ru_RU.mo} +0 -0
- libs/factory/pages/langs/{wbcr_factory_pages_420-ru_RU.po → wbcr_factory_pages_429-ru_RU.po} +0 -0
- libs/factory/pages/pages.php +11 -11
- libs/factory/pages/templates/assets/css/impressive.page.template.css +160 -117
- libs/factory/pages/templates/assets/css/impressive.page.template.less +98 -1
- libs/factory/pages/templates/impressive-page.class.php +404 -320
- migrations/010007.php +1 -1
- readme.txt +11 -3
admin/boot.php
CHANGED
@@ -11,24 +11,24 @@
|
|
11 |
*/
|
12 |
|
13 |
// Exit if accessed directly
|
14 |
-
if
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
-
if
|
19 |
-
add_filter(
|
20 |
-
if
|
21 |
$url = 'https://clearfy.pro';
|
22 |
|
23 |
-
if
|
24 |
$url = 'https://ru.clearfy.pro';
|
25 |
}
|
26 |
-
$url
|
27 |
-
$links[] = '<a href="' . $url . '" style="color: #FF5722;font-weight: bold;" target="_blank">' . __(
|
28 |
}
|
29 |
|
30 |
return $links;
|
31 |
-
}, 10, 2
|
32 |
|
33 |
/**
|
34 |
* Изменяем ссылку по умолчанию на собственную в виджете "Голосу за нас".
|
@@ -36,21 +36,21 @@ if ( ! defined( 'LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON' ) ) {
|
|
36 |
* Ссылка ведет на страницу рейтинга в репозитори Wordpress.org
|
37 |
* https://wordpress.org/support/plugin/disable-admin-notices/reviews/
|
38 |
*
|
39 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
40 |
-
* @since 1.0
|
41 |
-
*
|
42 |
* @param string $page_url
|
43 |
* @param string $plugin_name
|
44 |
*
|
45 |
* @return string
|
|
|
|
|
|
|
46 |
*/
|
47 |
-
add_filter(
|
48 |
-
if
|
49 |
return 'https://goo.gl/68ucHp';
|
50 |
}
|
51 |
|
52 |
return $page_url;
|
53 |
-
}, 10, 2
|
54 |
|
55 |
/**
|
56 |
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
@@ -59,15 +59,15 @@ if ( ! defined( 'LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON' ) ) {
|
|
59 |
* - Виджет с рейтингом
|
60 |
* - Виджет с маркерами информации
|
61 |
*/
|
62 |
-
add_filter(
|
63 |
-
if
|
64 |
-
unset(
|
65 |
-
unset(
|
66 |
-
unset(
|
67 |
}
|
68 |
|
69 |
return $widgets;
|
70 |
-
}, 20, 3
|
71 |
} else {
|
72 |
/**
|
73 |
* Регистрируем опции плагина в Clearfy, чтобы тот мог совершать манипуляции с опциями этого плагина.
|
@@ -76,19 +76,45 @@ if ( ! defined( 'LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON' ) ) {
|
|
76 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
77 |
* @since 1.0
|
78 |
*/
|
79 |
-
add_filter(
|
80 |
$options[] = [
|
81 |
-
'name'
|
82 |
-
'title'
|
83 |
-
'tags'
|
84 |
-
'values' => [
|
85 |
];
|
86 |
$options[] = [
|
87 |
-
'name'
|
88 |
-
'title' => __(
|
89 |
-
'tags'
|
90 |
];
|
91 |
|
92 |
return $options;
|
93 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
}
|
11 |
*/
|
12 |
|
13 |
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
+
if( !defined('LOADING_DISABLE_ADMIN_NOTICES_AS_ADDON') ) {
|
19 |
+
add_filter('plugin_row_meta', function ($links, $file) {
|
20 |
+
if( $file == WDN_PLUGIN_BASE ) {
|
21 |
$url = 'https://clearfy.pro';
|
22 |
|
23 |
+
if( get_locale() == 'ru_RU' ) {
|
24 |
$url = 'https://ru.clearfy.pro';
|
25 |
}
|
26 |
+
$url .= '?utm_source=wordpress.org&utm_campaign=' . WDN_Plugin::app()->getPluginName();
|
27 |
+
$links[] = '<a href="' . $url . '" style="color: #FF5722;font-weight: bold;" target="_blank">' . __('Get ultimate plugin free', 'disable-admin-notices') . '</a>';
|
28 |
}
|
29 |
|
30 |
return $links;
|
31 |
+
}, 10, 2);
|
32 |
|
33 |
/**
|
34 |
* Изменяем ссылку по умолчанию на собственную в виджете "Голосу за нас".
|
36 |
* Ссылка ведет на страницу рейтинга в репозитори Wordpress.org
|
37 |
* https://wordpress.org/support/plugin/disable-admin-notices/reviews/
|
38 |
*
|
|
|
|
|
|
|
39 |
* @param string $page_url
|
40 |
* @param string $plugin_name
|
41 |
*
|
42 |
* @return string
|
43 |
+
* @since 1.0
|
44 |
+
*
|
45 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
46 |
*/
|
47 |
+
add_filter('wbcr_factory_pages_429_imppage_rating_widget_url', function ($page_url, $plugin_name) {
|
48 |
+
if( $plugin_name == WDN_Plugin::app()->getPluginName() ) {
|
49 |
return 'https://goo.gl/68ucHp';
|
50 |
}
|
51 |
|
52 |
return $page_url;
|
53 |
+
}, 10, 2);
|
54 |
|
55 |
/**
|
56 |
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
|
59 |
* - Виджет с рейтингом
|
60 |
* - Виджет с маркерами информации
|
61 |
*/
|
62 |
+
add_filter('wbcr/factory/pages/impressive/widgets', function ($widgets, $position, $plugin) {
|
63 |
+
if( WDN_Plugin::app()->getPluginName() == $plugin->getPluginName() && 'right' == $position ) {
|
64 |
+
unset($widgets['business_suggetion']);
|
65 |
+
unset($widgets['rating_widget']);
|
66 |
+
unset($widgets['info_widget']);
|
67 |
}
|
68 |
|
69 |
return $widgets;
|
70 |
+
}, 20, 3);
|
71 |
} else {
|
72 |
/**
|
73 |
* Регистрируем опции плагина в Clearfy, чтобы тот мог совершать манипуляции с опциями этого плагина.
|
76 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
77 |
* @since 1.0
|
78 |
*/
|
79 |
+
add_filter("wbcr_clearfy_group_options", function ($options) {
|
80 |
$options[] = [
|
81 |
+
'name' => 'hide_admin_notices',
|
82 |
+
'title' => __('Hide admin notices', 'disable-admin-notices'),
|
83 |
+
'tags' => [],
|
84 |
+
'values' => ['hide_admin_notices' => 'only_selected']
|
85 |
];
|
86 |
$options[] = [
|
87 |
+
'name' => 'show_notices_in_adminbar',
|
88 |
+
'title' => __('Enable hidden notices in adminbar', 'disable-admin-notices'),
|
89 |
+
'tags' => []
|
90 |
];
|
91 |
|
92 |
return $options;
|
93 |
+
});
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Print admin notice: "Would you like to send them for spam checking?"
|
97 |
+
*
|
98 |
+
* If user clicked button "Yes, do it", plugin will exec action,
|
99 |
+
* that put all unapproved comments to spam check queue.
|
100 |
+
*/
|
101 |
+
/*add_action('wbcr/factory/admin_notices', function ($notices, $plugin_name) {
|
102 |
+
if( $plugin_name != WDN_Plugin::app()->getPluginName() ) {
|
103 |
+
return $notices;
|
104 |
+
}
|
105 |
+
|
106 |
+
$page_url = 'https://wordpress.org/support/plugin/disable-admin-notices/reviews/';
|
107 |
+
|
108 |
+
$notice_text = sprintf(__('Hey, You’ve using Disable admin notices – that’s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress? Just to help us spread the word and boost our motivation! <a href="%s">Review</a>', "titan-security"), $page_url);
|
109 |
+
|
110 |
+
$notices[] = [
|
111 |
+
'id' => 'wdan_got_5star_rating',
|
112 |
+
'type' => 'success',
|
113 |
+
'dismissible' => true,
|
114 |
+
'dismiss_expires' => 0,
|
115 |
+
'text' => '<p><strong>Disable Admin Notices Individually:</strong><br>' . $notice_text . '</p>'
|
116 |
+
];
|
117 |
+
|
118 |
+
return $notices;
|
119 |
+
}, 10, 2);*/
|
120 |
}
|
admin/options.php
CHANGED
@@ -131,7 +131,7 @@ function wbcr_dan_get_plugin_options() {
|
|
131 |
* с настройками этого плагина, потому что это ухудшает юзабилити.
|
132 |
*
|
133 |
* @param array $form Массив с группой настроек, страницы "Дополнительно" в плагине Clearfy
|
134 |
-
* @param
|
135 |
*
|
136 |
* @return mixed Отсортированный массив с группой опций
|
137 |
*/
|
@@ -161,7 +161,7 @@ add_filter( 'wbcr_clr_additionally_form_options', 'wbcr_dan_additionally_form_op
|
|
161 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
162 |
* @since 1.0
|
163 |
*
|
164 |
-
* @param @param $html_builder
|
165 |
*/
|
166 |
function wbcr_dan_reset_notices_button( $html_builder ) {
|
167 |
global $wpdb;
|
131 |
* с настройками этого плагина, потому что это ухудшает юзабилити.
|
132 |
*
|
133 |
* @param array $form Массив с группой настроек, страницы "Дополнительно" в плагине Clearfy
|
134 |
+
* @param Wbcr_FactoryPages429_ImpressiveThemplate $page Экземпляр страницы
|
135 |
*
|
136 |
* @return mixed Отсортированный массив с группой опций
|
137 |
*/
|
161 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
162 |
* @since 1.0
|
163 |
*
|
164 |
+
* @param @param $html_builder Wbcr_FactoryForms427_Html
|
165 |
*/
|
166 |
function wbcr_dan_reset_notices_button( $html_builder ) {
|
167 |
global $wpdb;
|
admin/pages/class-pages-more-features.php
CHANGED
@@ -22,6 +22,6 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
22 |
exit;
|
23 |
}
|
24 |
|
25 |
-
class WDN_MoreFeaturesPage extends
|
26 |
|
27 |
}
|
22 |
exit;
|
23 |
}
|
24 |
|
25 |
+
class WDN_MoreFeaturesPage extends Wbcr_FactoryClearfy221_MoreFeaturesPage {
|
26 |
|
27 |
}
|
admin/pages/class-pages-notices.php
CHANGED
@@ -19,7 +19,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
19 |
exit;
|
20 |
}
|
21 |
|
22 |
-
class WDN_NoticesPage extends
|
23 |
|
24 |
/**
|
25 |
* {@inheritDoc}
|
@@ -52,9 +52,9 @@ class WDN_NoticesPage extends Wbcr_FactoryClearfy212_PageBase {
|
|
52 |
|
53 |
|
54 |
/**
|
55 |
-
* @param
|
56 |
*/
|
57 |
-
public function __construct(
|
58 |
$this->menu_title = __( 'Hide admin notices', 'disable-admin-notices' );
|
59 |
|
60 |
$this->internal = false;
|
@@ -86,7 +86,7 @@ class WDN_NoticesPage extends Wbcr_FactoryClearfy212_PageBase {
|
|
86 |
'wbcr_dan_code' => 'interal_error'
|
87 |
),
|
88 |
'type' => 'danger',
|
89 |
-
'message' => __('An error occurred while trying to delete comments. Internal error occured. Please try again later.', '
|
90 |
);*/
|
91 |
|
92 |
return $notices;
|
19 |
exit;
|
20 |
}
|
21 |
|
22 |
+
class WDN_NoticesPage extends Wbcr_FactoryClearfy221_PageBase {
|
23 |
|
24 |
/**
|
25 |
* {@inheritDoc}
|
52 |
|
53 |
|
54 |
/**
|
55 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
56 |
*/
|
57 |
+
public function __construct( Wbcr_Factory429_Plugin $plugin ) {
|
58 |
$this->menu_title = __( 'Hide admin notices', 'disable-admin-notices' );
|
59 |
|
60 |
$this->internal = false;
|
86 |
'wbcr_dan_code' => 'interal_error'
|
87 |
),
|
88 |
'type' => 'danger',
|
89 |
+
'message' => __('An error occurred while trying to delete comments. Internal error occured. Please try again later.', 'factory_pages_429')
|
90 |
);*/
|
91 |
|
92 |
return $notices;
|
clearfy.php
CHANGED
@@ -18,7 +18,8 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
18 |
}
|
19 |
|
20 |
if ( ! defined( 'WDN_PLUGIN_ACTIVE' ) ) {
|
21 |
-
define( 'WDN_PLUGIN_VERSION', '1.1.
|
|
|
22 |
define( 'WDN_PLUGIN_ACTIVE', true );
|
23 |
|
24 |
// Этот плагин загружен, как аддон для плагина Clearfy
|
18 |
}
|
19 |
|
20 |
if ( ! defined( 'WDN_PLUGIN_ACTIVE' ) ) {
|
21 |
+
define( 'WDN_PLUGIN_VERSION', '1.1.2' );
|
22 |
+
define( 'WDN_TEXT_DOMAIN', 'disable-admin-notices' );
|
23 |
define( 'WDN_PLUGIN_ACTIVE', true );
|
24 |
|
25 |
// Этот плагин загружен, как аддон для плагина Clearfy
|
disable-admin-notices.php
CHANGED
@@ -4,11 +4,11 @@
|
|
4 |
* Plugin URI: https://webcraftic.com
|
5 |
* Description: Disable admin notices plugin gives you the option to hide updates warnings and inline notices in the admin panel.
|
6 |
* Author: Webcraftic <wordpress.webraftic@gmail.com>
|
7 |
-
* Version: 1.1.
|
8 |
* Text Domain: disable-admin-notices
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
-
* Framework Version:
|
12 |
*/
|
13 |
|
14 |
/**
|
@@ -25,7 +25,7 @@
|
|
25 |
*/
|
26 |
|
27 |
// Exit if accessed directly
|
28 |
-
if
|
29 |
exit;
|
30 |
}
|
31 |
|
@@ -37,54 +37,53 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
37 |
* -----------------------------------------------------------------------------
|
38 |
*/
|
39 |
|
40 |
-
require_once(
|
41 |
|
42 |
// @formatter:off
|
43 |
$wdan_plugin_info = array(
|
44 |
-
'prefix'
|
45 |
-
'plugin_name'
|
46 |
-
'plugin_title'
|
47 |
|
48 |
// PLUGIN SUPPORT
|
49 |
-
'support_details'
|
50 |
-
'url'
|
51 |
'pages_map' => array(
|
52 |
-
'support'
|
53 |
-
'docs'
|
54 |
)
|
55 |
),
|
56 |
|
57 |
// PLUGIN ADVERTS
|
58 |
'render_adverts' => true,
|
59 |
-
'adverts_settings'
|
60 |
-
'dashboard_widget' =>
|
61 |
-
'right_sidebar'
|
62 |
-
'notice'
|
63 |
),
|
64 |
|
65 |
// FRAMEWORK MODULES
|
66 |
'load_factory_modules' => array(
|
67 |
-
array(
|
68 |
-
array(
|
69 |
-
array(
|
70 |
-
array(
|
71 |
-
array(
|
72 |
)
|
73 |
);
|
74 |
|
75 |
-
$wdan_compatibility = new
|
76 |
-
'plugin_already_activate'
|
77 |
-
'required_php_version'
|
78 |
-
'required_wp_version'
|
79 |
'required_clearfy_check_component' => false
|
80 |
-
)
|
81 |
-
|
82 |
|
83 |
/**
|
84 |
* If the plugin is compatible, then it will continue its work, otherwise it will be stopped,
|
85 |
* and the user will throw a warning.
|
86 |
*/
|
87 |
-
if
|
88 |
return;
|
89 |
}
|
90 |
|
@@ -97,12 +96,11 @@ if ( ! $wdan_compatibility->check() ) {
|
|
97 |
*/
|
98 |
|
99 |
// This plugin is activated
|
100 |
-
define(
|
101 |
-
define(
|
102 |
-
define(
|
103 |
-
define(
|
104 |
-
define(
|
105 |
-
|
106 |
|
107 |
|
108 |
|
@@ -112,24 +110,24 @@ define( 'WDN_PLUGIN_URL', plugins_url( null, __FILE__ ) );
|
|
112 |
* -----------------------------------------------------------------------------
|
113 |
*/
|
114 |
|
115 |
-
require_once(
|
116 |
-
require_once(
|
117 |
|
118 |
try {
|
119 |
-
new WDN_Plugin(
|
120 |
-
'plugin_version'
|
121 |
'plugin_text_domain' => $wdan_compatibility->get_text_domain(),
|
122 |
-
)
|
123 |
} catch( Exception $e ) {
|
124 |
// Plugin wasn't initialized due to an error
|
125 |
-
define(
|
126 |
|
127 |
-
$wdan_plugin_error_func = function () use (
|
128 |
-
$error = sprintf(
|
129 |
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
|
130 |
};
|
131 |
|
132 |
-
add_action(
|
133 |
-
add_action(
|
134 |
}
|
135 |
// @formatter:on
|
4 |
* Plugin URI: https://webcraftic.com
|
5 |
* Description: Disable admin notices plugin gives you the option to hide updates warnings and inline notices in the admin panel.
|
6 |
* Author: Webcraftic <wordpress.webraftic@gmail.com>
|
7 |
+
* Version: 1.1.3
|
8 |
* Text Domain: disable-admin-notices
|
9 |
* Domain Path: /languages/
|
10 |
* Author URI: https://webcraftic.com
|
11 |
+
* Framework Version: FACTORY_429_VERSION
|
12 |
*/
|
13 |
|
14 |
/**
|
25 |
*/
|
26 |
|
27 |
// Exit if accessed directly
|
28 |
+
if( !defined('ABSPATH') ) {
|
29 |
exit;
|
30 |
}
|
31 |
|
37 |
* -----------------------------------------------------------------------------
|
38 |
*/
|
39 |
|
40 |
+
require_once(dirname(__FILE__) . '/libs/factory/core/includes/class-factory-requirements.php');
|
41 |
|
42 |
// @formatter:off
|
43 |
$wdan_plugin_info = array(
|
44 |
+
'prefix' => 'wbcr_dan_',
|
45 |
+
'plugin_name' => 'wbcr_dan',
|
46 |
+
'plugin_title' => __('Webcraftic disable admin notices', 'disable-admin-notices'),
|
47 |
|
48 |
// PLUGIN SUPPORT
|
49 |
+
'support_details' => array(
|
50 |
+
'url' => 'https://webcraftic.com',
|
51 |
'pages_map' => array(
|
52 |
+
'support' => 'support', // {site}/support
|
53 |
+
'docs' => 'docs' // {site}/docs
|
54 |
)
|
55 |
),
|
56 |
|
57 |
// PLUGIN ADVERTS
|
58 |
'render_adverts' => true,
|
59 |
+
'adverts_settings' => array(
|
60 |
+
'dashboard_widget' => false, // show dashboard widget (default: false)
|
61 |
+
'right_sidebar' => true, // show adverts sidebar (default: false)
|
62 |
+
'notice' => false, // show notice message (default: false)
|
63 |
),
|
64 |
|
65 |
// FRAMEWORK MODULES
|
66 |
'load_factory_modules' => array(
|
67 |
+
array('libs/factory/bootstrap', 'factory_bootstrap_430', 'admin'),
|
68 |
+
array('libs/factory/forms', 'factory_forms_427', 'admin'),
|
69 |
+
array('libs/factory/pages', 'factory_pages_429', 'admin'),
|
70 |
+
array('libs/factory/clearfy', 'factory_clearfy_221', 'all'),
|
71 |
+
array('libs/factory/adverts', 'factory_adverts_109', 'admin')
|
72 |
)
|
73 |
);
|
74 |
|
75 |
+
$wdan_compatibility = new Wbcr_Factory429_Requirements(__FILE__, array_merge($wdan_plugin_info, array(
|
76 |
+
'plugin_already_activate' => defined('WDN_PLUGIN_ACTIVE'),
|
77 |
+
'required_php_version' => '5.4',
|
78 |
+
'required_wp_version' => '4.2.0',
|
79 |
'required_clearfy_check_component' => false
|
80 |
+
)));
|
|
|
81 |
|
82 |
/**
|
83 |
* If the plugin is compatible, then it will continue its work, otherwise it will be stopped,
|
84 |
* and the user will throw a warning.
|
85 |
*/
|
86 |
+
if( !$wdan_compatibility->check() ) {
|
87 |
return;
|
88 |
}
|
89 |
|
96 |
*/
|
97 |
|
98 |
// This plugin is activated
|
99 |
+
define('WDN_PLUGIN_ACTIVE', true);
|
100 |
+
define('WDN_PLUGIN_VERSION', $wdan_compatibility->get_plugin_version());
|
101 |
+
define('WDN_PLUGIN_DIR', dirname(__FILE__));
|
102 |
+
define('WDN_PLUGIN_BASE', plugin_basename(__FILE__));
|
103 |
+
define('WDN_PLUGIN_URL', plugins_url(null, __FILE__));
|
|
|
104 |
|
105 |
|
106 |
|
110 |
* -----------------------------------------------------------------------------
|
111 |
*/
|
112 |
|
113 |
+
require_once(WDN_PLUGIN_DIR . '/libs/factory/core/boot.php');
|
114 |
+
require_once(WDN_PLUGIN_DIR . '/includes/class-plugin.php');
|
115 |
|
116 |
try {
|
117 |
+
new WDN_Plugin(__FILE__, array_merge($wdan_plugin_info, array(
|
118 |
+
'plugin_version' => WDN_PLUGIN_VERSION,
|
119 |
'plugin_text_domain' => $wdan_compatibility->get_text_domain(),
|
120 |
+
)));
|
121 |
} catch( Exception $e ) {
|
122 |
// Plugin wasn't initialized due to an error
|
123 |
+
define('WDN_PLUGIN_THROW_ERROR', true);
|
124 |
|
125 |
+
$wdan_plugin_error_func = function () use ($e) {
|
126 |
+
$error = sprintf("The %s plugin has stopped. <b>Error:</b> %s Code: %s", 'Webcraftic Disable Admin Notices', $e->getMessage(), $e->getCode());
|
127 |
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
|
128 |
};
|
129 |
|
130 |
+
add_action('admin_notices', $wdan_plugin_error_func);
|
131 |
+
add_action('network_admin_notices', $wdan_plugin_error_func);
|
132 |
}
|
133 |
// @formatter:on
|
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_Factory420_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_109\Base;
|
13 |
|
14 |
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
+
class WDN_Plugin extends Wbcr_Factory429_Plugin {
|
19 |
|
20 |
/**
|
21 |
+
* @var Wbcr_Factory429_Plugin
|
22 |
*/
|
23 |
private static $app;
|
24 |
private $plugin_data;
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
+
* @return Wbcr_Factory429_Plugin
|
48 |
*/
|
49 |
public static function app() {
|
50 |
return self::$app;
|
includes/classes/class-configurate-notices.php
CHANGED
@@ -11,138 +11,143 @@
|
|
11 |
*/
|
12 |
|
13 |
// Exit if accessed directly
|
14 |
-
if
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
-
class WDN_ConfigHideNotices extends
|
19 |
|
20 |
-
public function registerActionsAndFilters()
|
21 |
-
|
22 |
-
|
|
|
23 |
|
24 |
-
if
|
25 |
-
add_action(
|
26 |
|
27 |
-
if
|
28 |
-
add_action(
|
29 |
}
|
30 |
|
31 |
-
if
|
32 |
-
add_action(
|
33 |
-
add_action(
|
34 |
}
|
35 |
}
|
36 |
}
|
37 |
}
|
38 |
|
39 |
-
public function printNotices()
|
40 |
-
|
41 |
-
|
|
|
42 |
} else {
|
43 |
-
add_action(
|
44 |
}
|
45 |
}
|
46 |
|
47 |
|
48 |
-
public function notificationsPanelStyles()
|
49 |
-
|
|
|
50 |
return;
|
51 |
}
|
52 |
|
53 |
-
wp_enqueue_style(
|
54 |
-
wp_enqueue_script(
|
55 |
}
|
56 |
|
57 |
-
public function notificationsPanel(
|
58 |
-
|
|
|
59 |
return;
|
60 |
}
|
61 |
|
62 |
-
if
|
63 |
$titles = [];
|
64 |
|
65 |
-
$notifications = get_user_meta(
|
66 |
|
67 |
-
if
|
68 |
return;
|
69 |
}
|
70 |
|
71 |
-
$cont_notifications = sizeof(
|
72 |
|
73 |
// Add top menu
|
74 |
-
$wp_admin_bar->add_menu(
|
75 |
-
'id'
|
76 |
'parent' => 'top-secondary',
|
77 |
-
'title'
|
78 |
-
'href'
|
79 |
-
]
|
80 |
|
81 |
// loop
|
82 |
-
if
|
83 |
$i = 0;
|
84 |
-
foreach
|
85 |
-
$message = $this->getExcerpt(
|
86 |
$message .= '<div class="wbcr-han-panel-restore-notify-line">';
|
87 |
-
$message .= '<a href="#" data-nonce="' . wp_create_nonce(
|
88 |
-
$message .= '" data-notice-id="' . esc_attr(
|
89 |
-
$message .= __(
|
90 |
$message .= '</a></div>';
|
91 |
|
92 |
-
$wp_admin_bar->add_menu(
|
93 |
-
'id'
|
94 |
'parent' => 'wbcr-han-notify-panel',
|
95 |
-
'title'
|
96 |
-
'href'
|
97 |
-
'meta'
|
98 |
'class' => ''
|
99 |
]
|
100 |
-
]
|
101 |
|
102 |
-
$i
|
103 |
}
|
104 |
}
|
105 |
}
|
106 |
}
|
107 |
|
108 |
-
public function noticesCollection()
|
|
|
109 |
global $wbcr_dan_plugin_all_notices;
|
110 |
|
111 |
-
if
|
112 |
return;
|
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 |
jQuery(document).ready(function($) {
|
147 |
$(document).on('click', '.wbcr-dan-hide-notice-link', function() {
|
148 |
var self = $(this),
|
@@ -194,21 +199,22 @@ class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy212_Configurate {
|
|
194 |
return false;
|
195 |
});
|
196 |
});
|
197 |
-
|
198 |
<?php
|
199 |
-
foreach
|
200 |
echo $val;
|
201 |
}
|
202 |
}
|
203 |
|
204 |
-
public function catchNotices()
|
|
|
205 |
global $wbcr_dan_plugin_all_notices;
|
206 |
|
207 |
try {
|
208 |
-
if
|
209 |
-
$wp_filter_admin_notices = &$this->getWPFilter(
|
210 |
} else {
|
211 |
-
$wp_filter_admin_notices = &$this->getWPFilter(
|
212 |
}
|
213 |
//todo: Доработать all admin notices
|
214 |
|
@@ -216,16 +222,16 @@ class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy212_Configurate {
|
|
216 |
$wp_filter_admin_notices = null;
|
217 |
}
|
218 |
|
219 |
-
$hide_notices_type = $this->getPopulateOption(
|
220 |
|
221 |
-
if
|
222 |
-
$get_hidden_notices = get_user_meta(
|
223 |
|
224 |
$content = [];
|
225 |
-
foreach
|
226 |
-
foreach
|
227 |
|
228 |
-
if
|
229 |
continue;
|
230 |
}
|
231 |
|
@@ -233,68 +239,69 @@ class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy212_Configurate {
|
|
233 |
|
234 |
// #CLRF-140 fix bug for php7
|
235 |
// when the developers forgot to delete the argument in the function of implementing the notification.
|
236 |
-
$args
|
237 |
-
$accepted_args = isset(
|
238 |
|
239 |
-
if
|
240 |
-
for
|
241 |
$args[] = null;
|
242 |
}
|
243 |
}
|
244 |
//===========
|
245 |
|
246 |
-
call_user_func_array(
|
247 |
$cont = ob_get_clean();
|
248 |
|
249 |
-
if
|
250 |
continue;
|
251 |
}
|
252 |
|
253 |
-
$salt
|
254 |
-
$uniq_id1 = md5(
|
255 |
-
$uniq_id2 = md5(
|
256 |
|
257 |
-
if
|
258 |
$class = $callback['function'][0];
|
259 |
-
if
|
260 |
-
$class_name
|
261 |
$method_name = $callback['function'][1];
|
262 |
-
$uniq_id2
|
263 |
}
|
264 |
}
|
|
|
265 |
//838339d1a188e17fec838c2df3058603
|
266 |
//838339d1a188e17fec838c2df3058603
|
267 |
-
if
|
268 |
|
269 |
$skip_notice = true;
|
270 |
-
foreach
|
271 |
-
$splited_notice_id = explode(
|
272 |
-
if
|
273 |
continue;
|
274 |
}
|
275 |
$compare_notice_id_1 = $splited_notice_id[0];
|
276 |
$compare_notice_id_2 = $splited_notice_id[1];
|
277 |
|
278 |
-
if
|
279 |
$skip_notice = false;
|
280 |
}
|
281 |
}
|
282 |
|
283 |
-
if
|
284 |
continue;
|
285 |
}
|
286 |
}
|
287 |
|
288 |
-
$hide_link = '<a href="#" data-nonce="' . wp_create_nonce(
|
289 |
|
290 |
// Fix for Woocommerce membership
|
291 |
-
if
|
292 |
-
$cont = preg_replace(
|
293 |
-
$cont = rtrim(
|
294 |
-
$cont = preg_replace(
|
295 |
}
|
296 |
|
297 |
-
if
|
298 |
continue;
|
299 |
}
|
300 |
$content[] = $cont;
|
@@ -305,83 +312,83 @@ class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy212_Configurate {
|
|
305 |
}
|
306 |
|
307 |
try {
|
308 |
-
$wp_filter_user_admin_notices = &$this->getWPFilter(
|
309 |
} catch( Exception $e ) {
|
310 |
$wp_filter_user_admin_notices = null;
|
311 |
}
|
312 |
|
313 |
try {
|
314 |
-
$wp_filter_network_admin_notices = &$this->getWPFilter(
|
315 |
} catch( Exception $e ) {
|
316 |
$wp_filter_network_admin_notices = null;
|
317 |
}
|
318 |
|
319 |
-
if
|
320 |
$wp_filter_user_admin_notices = null;
|
321 |
-
} else if
|
322 |
//unset($wp_filter['network_admin_notices']);
|
323 |
-
foreach
|
324 |
-
foreach
|
325 |
-
if
|
326 |
$class = $clback['function'][0];
|
327 |
-
if
|
328 |
-
$class_name = get_class(
|
329 |
}
|
330 |
}
|
331 |
|
332 |
-
unset(
|
333 |
}
|
334 |
}
|
335 |
-
} else if
|
336 |
-
foreach
|
337 |
-
foreach
|
338 |
-
if
|
339 |
$class = $clback['function'][0];
|
340 |
-
if
|
341 |
-
$class_name = get_class(
|
342 |
}
|
343 |
}
|
344 |
|
345 |
-
unset(
|
346 |
}
|
347 |
}
|
348 |
|
349 |
-
unset(
|
350 |
-
unset(
|
351 |
}
|
352 |
|
353 |
try {
|
354 |
-
$wp_filter_all_admin_notices = &$this->getWPfilter(
|
355 |
} catch( Exception $e ) {
|
356 |
$wp_filter_all_admin_notices = null;
|
357 |
}
|
358 |
|
359 |
-
if
|
360 |
-
foreach
|
361 |
-
foreach
|
362 |
-
if
|
363 |
$class = $clback['function'][0];
|
364 |
-
if
|
365 |
-
$class_name = get_class(
|
366 |
|
367 |
-
#Fix for Learn dash && Woocommerce membership
|
368 |
-
if
|
369 |
continue;
|
370 |
}
|
371 |
}
|
372 |
}
|
373 |
|
374 |
#Fix for Divi theme
|
375 |
-
if
|
376 |
continue;
|
377 |
}
|
378 |
|
379 |
-
unset(
|
380 |
}
|
381 |
}
|
382 |
|
383 |
-
unset(
|
384 |
-
unset(
|
385 |
}
|
386 |
}
|
387 |
|
@@ -389,18 +396,19 @@ class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy212_Configurate {
|
|
389 |
/**
|
390 |
* Get excerpt from string
|
391 |
*
|
392 |
-
* @param String
|
393 |
-
* @param Integer $startPos
|
394 |
-
* @param Integer $maxLength
|
395 |
*
|
396 |
* @return String excerpt
|
397 |
*/
|
398 |
-
public function getExcerpt(
|
399 |
-
|
400 |
-
|
401 |
-
$
|
402 |
-
$
|
403 |
-
$excerpt
|
|
|
404 |
} else {
|
405 |
$excerpt = $str;
|
406 |
}
|
@@ -419,16 +427,17 @@ class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy212_Configurate {
|
|
419 |
* @return array $wp_filter callbacks array by link
|
420 |
* @throws Exception if key not exists
|
421 |
*/
|
422 |
-
private function &getWPFilter(
|
|
|
423 |
global $wp_version, $wp_filter;
|
424 |
|
425 |
-
if
|
426 |
-
throw new Exception(
|
427 |
}
|
428 |
-
if
|
429 |
-
return $wp_filter[
|
430 |
} else {
|
431 |
-
return $wp_filter[
|
432 |
}
|
433 |
}
|
434 |
}
|
11 |
*/
|
12 |
|
13 |
// Exit if accessed directly
|
14 |
+
if( !defined('ABSPATH') ) {
|
15 |
exit;
|
16 |
}
|
17 |
|
18 |
+
class WDN_ConfigHideNotices extends Wbcr_FactoryClearfy221_Configurate {
|
19 |
|
20 |
+
public function registerActionsAndFilters()
|
21 |
+
{
|
22 |
+
if( is_admin() ) {
|
23 |
+
$hide_notices_type = $this->getPopulateOption('hide_admin_notices');
|
24 |
|
25 |
+
if( $hide_notices_type != 'not_hide' ) {
|
26 |
+
add_action('admin_print_scripts', [$this, 'catchNotices'], 999);
|
27 |
|
28 |
+
if( empty($hide_notices_type) || $hide_notices_type == 'only_selected' ) {
|
29 |
+
add_action('admin_head', [$this, 'printNotices'], 999);
|
30 |
}
|
31 |
|
32 |
+
if( !empty($hide_notices_type) ) {
|
33 |
+
add_action('admin_bar_menu', [$this, 'notificationsPanel'], 999);
|
34 |
+
add_action('admin_enqueue_scripts', [$this, 'notificationsPanelStyles']);
|
35 |
}
|
36 |
}
|
37 |
}
|
38 |
}
|
39 |
|
40 |
+
public function printNotices()
|
41 |
+
{
|
42 |
+
if( is_multisite() && is_network_admin() ) {
|
43 |
+
add_action('network_admin_notices', [$this, 'noticesCollection']);
|
44 |
} else {
|
45 |
+
add_action('admin_notices', [$this, 'noticesCollection']);
|
46 |
}
|
47 |
}
|
48 |
|
49 |
|
50 |
+
public function notificationsPanelStyles()
|
51 |
+
{
|
52 |
+
if( !$this->getPopulateOption('show_notices_in_adminbar', false) && current_user_can('manage_network') ) {
|
53 |
return;
|
54 |
}
|
55 |
|
56 |
+
wp_enqueue_style('wbcr-notification-panel-styles', WDN_PLUGIN_URL . '/admin/assets/css/notifications-panel.css', [], $this->plugin->getPluginVersion());
|
57 |
+
wp_enqueue_script('wbcr-notification-panel-scripts', WDN_PLUGIN_URL . '/admin/assets/js/notifications-panel.js', [], $this->plugin->getPluginVersion());
|
58 |
}
|
59 |
|
60 |
+
public function notificationsPanel(&$wp_admin_bar)
|
61 |
+
{
|
62 |
+
if( !$this->getPopulateOption('show_notices_in_adminbar', false) ) {
|
63 |
return;
|
64 |
}
|
65 |
|
66 |
+
if( current_user_can('manage_options') || current_user_can('manage_network') ) {
|
67 |
$titles = [];
|
68 |
|
69 |
+
$notifications = get_user_meta(get_current_user_id(), WDN_Plugin::app()->getOptionName('hidden_notices'), true);
|
70 |
|
71 |
+
if( empty($notifications) ) {
|
72 |
return;
|
73 |
}
|
74 |
|
75 |
+
$cont_notifications = sizeof($notifications);
|
76 |
|
77 |
// Add top menu
|
78 |
+
$wp_admin_bar->add_menu([
|
79 |
+
'id' => 'wbcr-han-notify-panel',
|
80 |
'parent' => 'top-secondary',
|
81 |
+
'title' => sprintf(__('Notifications %s', 'disable-admin-notices'), '<span class="wbcr-han-adminbar-counter">' . $cont_notifications . '</span>'),
|
82 |
+
'href' => false
|
83 |
+
]);
|
84 |
|
85 |
// loop
|
86 |
+
if( !empty($notifications) ) {
|
87 |
$i = 0;
|
88 |
+
foreach($notifications as $notice_id => $message) {
|
89 |
+
$message = $this->getExcerpt(stripslashes($message), 0, 350);
|
90 |
$message .= '<div class="wbcr-han-panel-restore-notify-line">';
|
91 |
+
$message .= '<a href="#" data-nonce="' . wp_create_nonce($this->plugin->getPluginName() . '_ajax_restore_notice_nonce');
|
92 |
+
$message .= '" data-notice-id="' . esc_attr($notice_id) . '" class="wbcr-han-panel-restore-notify-link">';
|
93 |
+
$message .= __('Restore notice', 'clearfy') . (isset($titles[$notice_id]) ? ' (' . $titles[$notice_id] . ')' : '');
|
94 |
$message .= '</a></div>';
|
95 |
|
96 |
+
$wp_admin_bar->add_menu([
|
97 |
+
'id' => 'wbcr-han-notify-panel-item-' . $i,
|
98 |
'parent' => 'wbcr-han-notify-panel',
|
99 |
+
'title' => $message,
|
100 |
+
'href' => false,
|
101 |
+
'meta' => [
|
102 |
'class' => ''
|
103 |
]
|
104 |
+
]);
|
105 |
|
106 |
+
$i++;
|
107 |
}
|
108 |
}
|
109 |
}
|
110 |
}
|
111 |
|
112 |
+
public function noticesCollection()
|
113 |
+
{
|
114 |
global $wbcr_dan_plugin_all_notices;
|
115 |
|
116 |
+
if( empty($wbcr_dan_plugin_all_notices) ) {
|
117 |
return;
|
118 |
}
|
119 |
?>
|
120 |
+
<!-- Disable admin notices plugin (Clearfy tools) -->
|
121 |
+
<style>
|
122 |
+
.wbcr-dan-hide-notices {
|
123 |
+
position: initial;
|
124 |
+
padding: 5px 5px 0;
|
125 |
+
background: transparent;
|
126 |
+
}
|
127 |
+
|
128 |
+
.wbcr-dan-hide-notices > div {
|
129 |
+
margin: 0 !important;
|
130 |
+
}
|
131 |
+
|
132 |
+
.wbcr-dan-hide-notice-link {
|
133 |
+
display: block;
|
134 |
+
text-align: right;
|
135 |
+
margin: 5px 0 5px 5px;
|
136 |
+
font-weight: bold;
|
137 |
+
color: #F44336;
|
138 |
+
}
|
139 |
+
|
140 |
+
.is-dismissible .wbcr-dan-hide-notice-link {
|
141 |
+
margin-right: -30px;
|
142 |
+
}
|
143 |
+
|
144 |
+
.wbcr-dan-hide-notice-link:active, .wbcr-dan-hide-notice-link:focus {
|
145 |
+
box-shadow: none;
|
146 |
+
outline: none;
|
147 |
+
}
|
148 |
+
</style>
|
149 |
+
<!-- Disable admin notices plugin (Clearfy tools) -->
|
150 |
+
<script>
|
151 |
jQuery(document).ready(function($) {
|
152 |
$(document).on('click', '.wbcr-dan-hide-notice-link', function() {
|
153 |
var self = $(this),
|
199 |
return false;
|
200 |
});
|
201 |
});
|
202 |
+
</script>
|
203 |
<?php
|
204 |
+
foreach($wbcr_dan_plugin_all_notices as $val) {
|
205 |
echo $val;
|
206 |
}
|
207 |
}
|
208 |
|
209 |
+
public function catchNotices()
|
210 |
+
{
|
211 |
global $wbcr_dan_plugin_all_notices;
|
212 |
|
213 |
try {
|
214 |
+
if( is_multisite() && is_network_admin() ) {
|
215 |
+
$wp_filter_admin_notices = &$this->getWPFilter('network_admin_notices');
|
216 |
} else {
|
217 |
+
$wp_filter_admin_notices = &$this->getWPFilter('admin_notices');
|
218 |
}
|
219 |
//todo: Доработать all admin notices
|
220 |
|
222 |
$wp_filter_admin_notices = null;
|
223 |
}
|
224 |
|
225 |
+
$hide_notices_type = $this->getPopulateOption('hide_admin_notices');
|
226 |
|
227 |
+
if( empty($hide_notices_type) || $hide_notices_type == 'only_selected' ) {
|
228 |
+
$get_hidden_notices = get_user_meta(get_current_user_id(), WDN_Plugin::app()->getOptionName('hidden_notices'), true);
|
229 |
|
230 |
$content = [];
|
231 |
+
foreach((array)$wp_filter_admin_notices as $filters) {
|
232 |
+
foreach($filters as $callback_name => $callback) {
|
233 |
|
234 |
+
if( 'usof_hide_admin_notices_start' == $callback_name || 'usof_hide_admin_notices_end' == $callback_name ) {
|
235 |
continue;
|
236 |
}
|
237 |
|
239 |
|
240 |
// #CLRF-140 fix bug for php7
|
241 |
// when the developers forgot to delete the argument in the function of implementing the notification.
|
242 |
+
$args = [];
|
243 |
+
$accepted_args = isset($callback['accepted_args']) && !empty($callback['accepted_args']) ? $callback['accepted_args'] : 0;
|
244 |
|
245 |
+
if( $accepted_args > 0 ) {
|
246 |
+
for($i = 0; $i < (int)$accepted_args; $i++) {
|
247 |
$args[] = null;
|
248 |
}
|
249 |
}
|
250 |
//===========
|
251 |
|
252 |
+
call_user_func_array($callback['function'], $args);
|
253 |
$cont = ob_get_clean();
|
254 |
|
255 |
+
if( empty($cont) ) {
|
256 |
continue;
|
257 |
}
|
258 |
|
259 |
+
$salt = is_multisite() ? get_current_blog_id() : '';
|
260 |
+
$uniq_id1 = md5($cont . $salt);
|
261 |
+
$uniq_id2 = md5($callback_name . $salt);
|
262 |
|
263 |
+
if( is_array($callback['function']) && sizeof($callback['function']) == 2 ) {
|
264 |
$class = $callback['function'][0];
|
265 |
+
if( is_object($class) ) {
|
266 |
+
$class_name = get_class($class);
|
267 |
$method_name = $callback['function'][1];
|
268 |
+
$uniq_id2 = md5($class_name . ':' . $method_name);
|
269 |
}
|
270 |
}
|
271 |
+
|
272 |
//838339d1a188e17fec838c2df3058603
|
273 |
//838339d1a188e17fec838c2df3058603
|
274 |
+
if( !empty($get_hidden_notices) ) {
|
275 |
|
276 |
$skip_notice = true;
|
277 |
+
foreach((array)$get_hidden_notices as $key => $notice) {
|
278 |
+
$splited_notice_id = explode('_', $key);
|
279 |
+
if( empty($splited_notice_id) || sizeof($splited_notice_id) < 2 ) {
|
280 |
continue;
|
281 |
}
|
282 |
$compare_notice_id_1 = $splited_notice_id[0];
|
283 |
$compare_notice_id_2 = $splited_notice_id[1];
|
284 |
|
285 |
+
if( $compare_notice_id_1 == $uniq_id1 || $compare_notice_id_2 == $uniq_id2 ) {
|
286 |
$skip_notice = false;
|
287 |
}
|
288 |
}
|
289 |
|
290 |
+
if( !$skip_notice ) {
|
291 |
continue;
|
292 |
}
|
293 |
}
|
294 |
|
295 |
+
$hide_link = '<a href="#" data-nonce="' . wp_create_nonce($this->plugin->getPluginName() . '_ajax_hide_notices_nonce') . '" data-notice-id="' . $uniq_id1 . '_' . $uniq_id2 . '" class="wbcr-dan-hide-notice-link">[' . __('Hide notification forever', 'disable-admin-notices') . ']</a>';
|
296 |
|
297 |
// Fix for Woocommerce membership
|
298 |
+
if( $cont != '<div class="js-wc-memberships-admin-notice-placeholder"></div>' ) {
|
299 |
+
$cont = preg_replace('/<(script|style)([^>]+)?>(.*?)<\/(script|style)>/is', '', $cont);
|
300 |
+
$cont = rtrim(trim($cont));
|
301 |
+
$cont = preg_replace('/^(<div[^>]+>)(.*?)(<\/div>)$/is', '$1<div class="wbcr-dan-hide-notices">$2' . $hide_link . '</div>$3', $cont);
|
302 |
}
|
303 |
|
304 |
+
if( empty($cont) ) {
|
305 |
continue;
|
306 |
}
|
307 |
$content[] = $cont;
|
312 |
}
|
313 |
|
314 |
try {
|
315 |
+
$wp_filter_user_admin_notices = &$this->getWPFilter('user_admin_notices');
|
316 |
} catch( Exception $e ) {
|
317 |
$wp_filter_user_admin_notices = null;
|
318 |
}
|
319 |
|
320 |
try {
|
321 |
+
$wp_filter_network_admin_notices = &$this->getWPFilter('network_admin_notices');
|
322 |
} catch( Exception $e ) {
|
323 |
$wp_filter_network_admin_notices = null;
|
324 |
}
|
325 |
|
326 |
+
if( is_user_admin() && $wp_filter_user_admin_notices !== null ) {
|
327 |
$wp_filter_user_admin_notices = null;
|
328 |
+
} else if( is_network_admin() && $wp_filter_network_admin_notices !== null ) {
|
329 |
//unset($wp_filter['network_admin_notices']);
|
330 |
+
foreach($wp_filter_network_admin_notices as $f_key => $f) {
|
331 |
+
foreach($f as $c_name => $clback) {
|
332 |
+
if( is_array($clback['function']) && sizeof($clback['function']) == 2 ) {
|
333 |
$class = $clback['function'][0];
|
334 |
+
if( is_object($class) ) {
|
335 |
+
$class_name = get_class($class);
|
336 |
}
|
337 |
}
|
338 |
|
339 |
+
unset($wp_filter_network_admin_notices[$f_key][$c_name]);
|
340 |
}
|
341 |
}
|
342 |
+
} else if( $wp_filter_admin_notices !== null ) {
|
343 |
+
foreach($wp_filter_admin_notices as $f_key => $f) {
|
344 |
+
foreach($f as $c_name => $clback) {
|
345 |
+
if( is_array($clback['function']) && sizeof($clback['function']) == 2 ) {
|
346 |
$class = $clback['function'][0];
|
347 |
+
if( is_object($class) ) {
|
348 |
+
$class_name = get_class($class);
|
349 |
}
|
350 |
}
|
351 |
|
352 |
+
unset($wp_filter_admin_notices[$f_key][$c_name]);
|
353 |
}
|
354 |
}
|
355 |
|
356 |
+
unset($f_key);
|
357 |
+
unset($f);
|
358 |
}
|
359 |
|
360 |
try {
|
361 |
+
$wp_filter_all_admin_notices = &$this->getWPfilter('all_admin_notices');
|
362 |
} catch( Exception $e ) {
|
363 |
$wp_filter_all_admin_notices = null;
|
364 |
}
|
365 |
|
366 |
+
if( $wp_filter_all_admin_notices !== null ) {
|
367 |
+
foreach($wp_filter_all_admin_notices as $f_key => $f) {
|
368 |
+
foreach($f as $c_name => $clback) {
|
369 |
+
if( is_array($clback['function']) && sizeof($clback['function']) == 2 ) {
|
370 |
$class = $clback['function'][0];
|
371 |
+
if( is_object($class) ) {
|
372 |
+
$class_name = get_class($class);
|
373 |
|
374 |
+
#Fix for Learn dash && Woocommerce membership && YITH WooCommerce Gift Cards
|
375 |
+
if( $class_name == 'Learndash_Admin_Menus_Tabs' || $class_name == 'WC_Memberships_Admin' || $class_name == 'YIT_Plugin_Panel_WooCommerce' ) {
|
376 |
continue;
|
377 |
}
|
378 |
}
|
379 |
}
|
380 |
|
381 |
#Fix for Divi theme
|
382 |
+
if( $c_name == 'et_pb_export_layouts_interface' ) {
|
383 |
continue;
|
384 |
}
|
385 |
|
386 |
+
unset($wp_filter_all_admin_notices[$f_key][$c_name]);
|
387 |
}
|
388 |
}
|
389 |
|
390 |
+
unset($f_key);
|
391 |
+
unset($f);
|
392 |
}
|
393 |
}
|
394 |
|
396 |
/**
|
397 |
* Get excerpt from string
|
398 |
*
|
399 |
+
* @param String $str String to get an excerpt from
|
400 |
+
* @param Integer $startPos Position int string to start excerpt from
|
401 |
+
* @param Integer $maxLength Maximum length the excerpt may be
|
402 |
*
|
403 |
* @return String excerpt
|
404 |
*/
|
405 |
+
public function getExcerpt($str, $startPos = 0, $maxLength = 100)
|
406 |
+
{
|
407 |
+
if( strlen($str) > $maxLength ) {
|
408 |
+
$excerpt = substr($str, $startPos, $maxLength - 3);
|
409 |
+
$lastSpace = strrpos($excerpt, ' ');
|
410 |
+
$excerpt = substr($excerpt, 0, $lastSpace);
|
411 |
+
$excerpt .= '...';
|
412 |
} else {
|
413 |
$excerpt = $str;
|
414 |
}
|
427 |
* @return array $wp_filter callbacks array by link
|
428 |
* @throws Exception if key not exists
|
429 |
*/
|
430 |
+
private function &getWPFilter($key)
|
431 |
+
{
|
432 |
global $wp_version, $wp_filter;
|
433 |
|
434 |
+
if( !isset($wp_filter[$key]) ) {
|
435 |
+
throw new Exception('key not exists');
|
436 |
}
|
437 |
+
if( version_compare($wp_version, '4.7.0', '>=') ) {
|
438 |
+
return $wp_filter[$key]->callbacks;
|
439 |
} else {
|
440 |
+
return $wp_filter[$key];
|
441 |
}
|
442 |
}
|
443 |
}
|
libs/factory/adverts/boot.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
use WBCR\
|
4 |
|
5 |
/**
|
6 |
* Factory Adverts
|
@@ -16,35 +16,35 @@ use WBCR\Factory_Adverts_102\Base;
|
|
16 |
*/
|
17 |
|
18 |
// Exit if accessed directly
|
19 |
-
if
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
-
if
|
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(
|
50 |
-
}
|
1 |
<?php
|
2 |
|
3 |
+
use WBCR\Factory_Adverts_109\Base;
|
4 |
|
5 |
/**
|
6 |
* Factory Adverts
|
16 |
*/
|
17 |
|
18 |
// Exit if accessed directly
|
19 |
+
if( !defined('ABSPATH') ) {
|
20 |
exit;
|
21 |
}
|
22 |
|
23 |
+
if( defined('FACTORY_ADVERTS_109_LOADED') || (defined('FACTORY_ADVERTS_BLOCK') && FACTORY_ADVERTS_BLOCK) ) {
|
24 |
return;
|
25 |
}
|
26 |
|
27 |
# Устанавливаем константу, что модуль уже загружен
|
28 |
+
define('FACTORY_ADVERTS_109_LOADED', true);
|
29 |
|
30 |
# Устанавливаем версию модуля
|
31 |
+
define('FACTORY_ADVERTS_109_VERSION', '1.0.9');
|
32 |
|
33 |
# Регистрируем тектовый домен, для интернализации интерфейса модуля
|
34 |
+
load_plugin_textdomain('wbcr_factory_adverts_109', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
35 |
|
36 |
# Устанавливаем директорию модуля
|
37 |
+
define('FACTORY_ADVERTS_109_DIR', dirname(__FILE__));
|
38 |
|
39 |
# Устанавливаем url модуля
|
40 |
+
define('FACTORY_ADVERTS_109_URL', plugins_url(null, __FILE__));
|
41 |
|
42 |
+
require_once(FACTORY_ADVERTS_109_DIR . '/includes/class-rest-request.php');
|
43 |
+
require_once(FACTORY_ADVERTS_109_DIR . '/includes/class-base.php');
|
44 |
|
45 |
/**
|
46 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
47 |
*/
|
48 |
+
add_action('wbcr_factory_adverts_109_plugin_created', function ($plugin) {
|
49 |
+
$plugin->set_adverts_manager("WBCR\Factory_Adverts_109\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_109;
|
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_Factory429_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_109\Creative_Motion_API
|
57 |
*/
|
58 |
private $api;
|
59 |
|
82 |
*
|
83 |
* @since 1.0.0 Added
|
84 |
*
|
85 |
+
* @param \Wbcr_Factory429_Plugin $plugin
|
86 |
*/
|
87 |
+
public function __construct( \Wbcr_Factory429_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_109_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_109;
|
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_Factory429_Plugin
|
39 |
*/
|
40 |
private $plugin;
|
41 |
|
46 |
*
|
47 |
* @since 1.0.0 Added
|
48 |
*
|
49 |
+
* @param \Wbcr_Factory429_Plugin $plugin
|
50 |
* @param string $content
|
51 |
*/
|
52 |
+
public function __construct( \Wbcr_Factory429_Plugin $plugin, $content ) {
|
53 |
|
54 |
$this->plugin = $plugin;
|
55 |
$this->content = $content;
|
libs/factory/adverts/includes/class-rest-request.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
-
if
|
7 |
exit;
|
8 |
}
|
9 |
|
@@ -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,32 +75,34 @@ class Creative_Motion_API {
|
|
75 |
*
|
76 |
* Variable initialization.
|
77 |
*
|
|
|
78 |
* @since 1.0.0 Added
|
79 |
*
|
80 |
-
* @param \Wbcr_Factory420_Plugin $plugin_name
|
81 |
*/
|
82 |
-
public function __construct(
|
|
|
83 |
$this->plugin = $plugin;
|
84 |
}
|
85 |
|
86 |
/**
|
87 |
* Get adverts content.
|
88 |
*
|
89 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
90 |
-
* @since 1.0.1
|
91 |
-
*
|
92 |
* @param $position
|
93 |
*
|
94 |
* @return string|\WP_Error
|
|
|
|
|
|
|
95 |
*/
|
96 |
-
public function get_content(
|
97 |
-
|
|
|
98 |
|
99 |
-
if
|
100 |
return $data;
|
101 |
}
|
102 |
|
103 |
-
return strip_tags(
|
104 |
}
|
105 |
|
106 |
/**
|
@@ -108,47 +110,52 @@ class Creative_Motion_API {
|
|
108 |
*
|
109 |
* If data in the cache, not empty and not expired, then get data from cache. Or get data from server.
|
110 |
*
|
111 |
-
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
112 |
-
*
|
113 |
-
* @since 1.0.1 Полностью переписан, с перехватом api ошибок
|
114 |
-
* @since 1.0.0 Added
|
115 |
-
*
|
116 |
* @return mixed array(
|
117 |
* 'plugin' => 'wbcr_insert_php',
|
118 |
* 'content' => '<p></p>',
|
119 |
* 'expires' => 1563542199,
|
120 |
* );
|
|
|
|
|
|
|
|
|
|
|
121 |
*/
|
122 |
-
private function get_cache(
|
|
|
123 |
|
124 |
-
if
|
125 |
-
return $this->do_api_request(
|
126 |
}
|
127 |
|
128 |
-
$key = $this->plugin->getPrefix() . md5(
|
|
|
|
|
|
|
|
|
129 |
|
130 |
-
$cached = get_transient(
|
131 |
|
132 |
-
if
|
133 |
-
if
|
134 |
-
return new \WP_Error(
|
135 |
}
|
136 |
|
137 |
return $cached;
|
138 |
}
|
139 |
|
140 |
-
$data = $this->do_api_request(
|
141 |
|
142 |
-
if
|
143 |
-
set_transient(
|
144 |
-
'error'
|
145 |
'error_code' => $data->get_error_code()
|
146 |
-
], self::SERVER_UNAVAILABLE_INTERVAL * HOUR_IN_SECONDS
|
147 |
|
148 |
return $data;
|
149 |
}
|
150 |
|
151 |
-
set_transient(
|
152 |
|
153 |
return $data;
|
154 |
}
|
@@ -159,39 +166,52 @@ class Creative_Motion_API {
|
|
159 |
* In some case on the server (Apache) in the .htaccess must be set
|
160 |
* RewriteRule ^wp-json/(.*)[?](.*) /?rest_route=/$1&$2 [L]
|
161 |
*
|
162 |
-
* @since 1.0.1 Добавлен перехват ошибок, рефакторинг кода.
|
163 |
-
* @since 1.0.0 Added
|
164 |
-
*
|
165 |
* @return mixed array(
|
166 |
* 'plugin' => 'wbcr_insert_php',
|
167 |
* 'content' => '<p></p>',
|
168 |
* 'expires' => 1563542199,
|
169 |
* );
|
|
|
|
|
|
|
170 |
*/
|
171 |
-
private function do_api_request(
|
|
|
172 |
$default_result = [
|
173 |
'content' => '',
|
174 |
'expires' => self::DEFAULT_REQUESTS_INTERVAL * HOUR_IN_SECONDS,
|
175 |
];
|
176 |
|
177 |
-
$url = untrailingslashit(
|
178 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
|
180 |
-
$response = wp_remote_get(
|
181 |
|
182 |
-
$code = wp_remote_retrieve_response_code(
|
183 |
-
$body = wp_remote_retrieve_body(
|
184 |
|
185 |
-
$data = @json_decode(
|
186 |
|
187 |
-
if
|
188 |
return $response;
|
189 |
}
|
190 |
|
191 |
-
if
|
192 |
-
return new \WP_Error(
|
193 |
}
|
194 |
|
195 |
-
return wp_parse_args(
|
196 |
}
|
197 |
}
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_Adverts_109;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
+
if( !defined('ABSPATH') ) {
|
7 |
exit;
|
8 |
}
|
9 |
|
65 |
*
|
66 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
67 |
* @since 1.0.1
|
68 |
+
* @var \Wbcr_Factory429_Plugin
|
69 |
*/
|
70 |
private $plugin;
|
71 |
|
75 |
*
|
76 |
* Variable initialization.
|
77 |
*
|
78 |
+
* @param \Wbcr_Factory429_Plugin $plugin_name
|
79 |
* @since 1.0.0 Added
|
80 |
*
|
|
|
81 |
*/
|
82 |
+
public function __construct(\Wbcr_Factory429_Plugin $plugin)
|
83 |
+
{
|
84 |
$this->plugin = $plugin;
|
85 |
}
|
86 |
|
87 |
/**
|
88 |
* Get adverts content.
|
89 |
*
|
|
|
|
|
|
|
90 |
* @param $position
|
91 |
*
|
92 |
* @return string|\WP_Error
|
93 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
94 |
+
* @since 1.0.1
|
95 |
+
*
|
96 |
*/
|
97 |
+
public function get_content($position)
|
98 |
+
{
|
99 |
+
$data = $this->get_cache($position);
|
100 |
|
101 |
+
if( is_wp_error($data) ) {
|
102 |
return $data;
|
103 |
}
|
104 |
|
105 |
+
return strip_tags($data['content'], '<b>,<a>,<i>,<strong>,<img>,<ul>,<ol>,<li>');
|
106 |
}
|
107 |
|
108 |
/**
|
110 |
*
|
111 |
* If data in the cache, not empty and not expired, then get data from cache. Or get data from server.
|
112 |
*
|
|
|
|
|
|
|
|
|
|
|
113 |
* @return mixed array(
|
114 |
* 'plugin' => 'wbcr_insert_php',
|
115 |
* 'content' => '<p></p>',
|
116 |
* 'expires' => 1563542199,
|
117 |
* );
|
118 |
+
* @since 1.0.1 Полностью переписан, с перехватом api ошибок
|
119 |
+
* @since 1.0.0 Added
|
120 |
+
*
|
121 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
122 |
+
*
|
123 |
*/
|
124 |
+
private function get_cache($position)
|
125 |
+
{
|
126 |
|
127 |
+
if( defined('FACTORY_ADVERTS_DEBUG') && FACTORY_ADVERTS_DEBUG ) {
|
128 |
+
return $this->do_api_request($position);
|
129 |
}
|
130 |
|
131 |
+
$key = $this->plugin->getPrefix() . md5($position . 'adverts_transient_');
|
132 |
+
|
133 |
+
if( 'ru_RU' === get_locale() ) {
|
134 |
+
$key .= 'ru_';
|
135 |
+
}
|
136 |
|
137 |
+
$cached = get_transient($key);
|
138 |
|
139 |
+
if( $cached !== false ) {
|
140 |
+
if( isset($cached['error_code']) && isset($cached['error']) ) {
|
141 |
+
return new \WP_Error($cached['error_code'], $cached['error']);
|
142 |
}
|
143 |
|
144 |
return $cached;
|
145 |
}
|
146 |
|
147 |
+
$data = $this->do_api_request($position);
|
148 |
|
149 |
+
if( is_wp_error($data) ) {
|
150 |
+
set_transient($key, [
|
151 |
+
'error' => $data->get_error_message(),
|
152 |
'error_code' => $data->get_error_code()
|
153 |
+
], self::SERVER_UNAVAILABLE_INTERVAL * HOUR_IN_SECONDS);
|
154 |
|
155 |
return $data;
|
156 |
}
|
157 |
|
158 |
+
set_transient($key, $data, self::DEFAULT_REQUESTS_INTERVAL * HOUR_IN_SECONDS);
|
159 |
|
160 |
return $data;
|
161 |
}
|
166 |
* In some case on the server (Apache) in the .htaccess must be set
|
167 |
* RewriteRule ^wp-json/(.*)[?](.*) /?rest_route=/$1&$2 [L]
|
168 |
*
|
|
|
|
|
|
|
169 |
* @return mixed array(
|
170 |
* 'plugin' => 'wbcr_insert_php',
|
171 |
* 'content' => '<p></p>',
|
172 |
* 'expires' => 1563542199,
|
173 |
* );
|
174 |
+
* @since 1.0.0 Added
|
175 |
+
*
|
176 |
+
* @since 1.0.1 Добавлен перехват ошибок, рефакторинг кода.
|
177 |
*/
|
178 |
+
private function do_api_request($position)
|
179 |
+
{
|
180 |
$default_result = [
|
181 |
'content' => '',
|
182 |
'expires' => self::DEFAULT_REQUESTS_INTERVAL * HOUR_IN_SECONDS,
|
183 |
];
|
184 |
|
185 |
+
$url = untrailingslashit(self::SERVER_URL) . '/wp-json' . self::REST_ROUTE;
|
186 |
+
|
187 |
+
$ads_ID = $this->plugin->getPluginName();
|
188 |
+
|
189 |
+
if( 'ru_RU' === get_locale() ) {
|
190 |
+
$ads_ID .= '-ru';
|
191 |
+
}
|
192 |
+
|
193 |
+
$url = add_query_arg([
|
194 |
+
'plugin' => $ads_ID,
|
195 |
+
'position' => $position,
|
196 |
+
'plugin_title' => $this->plugin->getPluginTitle(),
|
197 |
+
'lang' => get_locale()
|
198 |
+
], $url);
|
199 |
|
200 |
+
$response = wp_remote_get($url);
|
201 |
|
202 |
+
$code = wp_remote_retrieve_response_code($response);
|
203 |
+
$body = wp_remote_retrieve_body($response);
|
204 |
|
205 |
+
$data = @json_decode($body, true);
|
206 |
|
207 |
+
if( is_wp_error($response) ) {
|
208 |
return $response;
|
209 |
}
|
210 |
|
211 |
+
if( 200 !== $code ) {
|
212 |
+
return new \WP_Error('http_request_error', 'Failed request to the remote server. Code: ' . $code);
|
213 |
}
|
214 |
|
215 |
+
return wp_parse_args($data, $default_result);
|
216 |
}
|
217 |
}
|
libs/factory/adverts/langs/{wbcr_factory_adverts_102-ru_RU.mo → wbcr_factory_adverts_109-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/adverts/langs/{wbcr_factory_adverts_102-ru_RU.po → wbcr_factory_adverts_109-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-430 .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-430 .factory-accordion>h3{border-bottom:1px solid #DDD;cursor:pointer;padding:8px 15px;margin:0}.factory-bootstrap-430 .factory-accordion>div{display:none;margin:0;border-bottom:1px solid #DDD}.factory-bootstrap-430 .factory-accordion-item{display:none}.factory-bootstrap-430 .inner-factory-accordion-item{padding:10px 0}.factory-bootstrap-430 .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-430 .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-430 .btn-primary:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:disabled,.factory-bootstrap-430 .btn-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.factory-bootstrap-430 .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-430 .pagination>.active>a,.factory-bootstrap-430 .pagination>.active>a:focus,.factory-bootstrap-430 .pagination>.active>a:hover,.factory-bootstrap-430 .pagination>.active>span,.factory-bootstrap-430 .pagination>.active>span:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:disabled,.factory-bootstrap-430 .btn-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.factory-bootstrap-430 .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-430 .pagination>.active>a,.factory-bootstrap-430 .pagination>.active>a:focus,.factory-bootstrap-430 .pagination>.active>a:hover,.factory-bootstrap-430 .pagination>.active>span,.factory-bootstrap-430 .pagination>.active>span:focus,.factory-bootstrap-430 .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-421 article,.factory-bootstrap-421 aside,.factory-bootstrap-421 details,.factory-bootstrap-421 figcaption,.factory-bootstrap-421 figure,.factory-bootstrap-421 footer,.factory-bootstrap-421 header,.factory-bootstrap-421 hgroup,.factory-bootstrap-421 main,.factory-bootstrap-421 nav,.factory-bootstrap-421 section,.factory-bootstrap-421 summary{display:block}.factory-bootstrap-421 audio,.factory-bootstrap-421 canvas,.factory-bootstrap-421 video{display:inline-block}.factory-bootstrap-421 audio:not([controls]){display:none;height:0}.factory-bootstrap-421 [hidden],.factory-bootstrap-421 template{display:none}.factory-bootstrap-421 body{margin:0}.factory-bootstrap-421 a{background:0 0}.factory-bootstrap-421 a:focus{outline:thin dotted}.factory-bootstrap-421 a:active,.factory-bootstrap-421 a:hover{outline:0}.factory-bootstrap-421 h1{margin:.67em 0}.factory-bootstrap-421 b,.factory-bootstrap-421 strong{font-weight:700}.factory-bootstrap-421 dfn{font-style:italic}.factory-bootstrap-421 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-421 mark{color:#000;background:#ff0}.factory-bootstrap-421 code,.factory-bootstrap-421 kbd,.factory-bootstrap-421 pre,.factory-bootstrap-421 samp{font-size:1em}.factory-bootstrap-421 pre{white-space:pre-wrap}.factory-bootstrap-421 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-421 sub,.factory-bootstrap-421 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-421 sup{top:-.5em}.factory-bootstrap-421 sub{bottom:-.25em}.factory-bootstrap-421 img{border:0}.factory-bootstrap-421 svg:not(:root){overflow:hidden}.factory-bootstrap-421 figure{margin:0}.factory-bootstrap-421 button,.factory-bootstrap-421 input,.factory-bootstrap-421 select,.factory-bootstrap-421 textarea{margin:0}.factory-bootstrap-421 button,.factory-bootstrap-421 select{text-transform:none}.factory-bootstrap-421 select{padding-right:4px!important}.factory-bootstrap-421 button,.factory-bootstrap-421 input[type=reset],.factory-bootstrap-421 input[type=submit],html .factory-bootstrap-421 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-421 button[disabled],html .factory-bootstrap-421 input[disabled]{cursor:default}.factory-bootstrap-421 input[type=checkbox],.factory-bootstrap-421 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-421 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-421 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-421 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-421 button::-moz-focus-inner,.factory-bootstrap-421 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-421 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-421 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-421 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-421 a,.factory-bootstrap-421 a:visited{text-decoration:underline}.factory-bootstrap-421 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-421 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-421 a[href^="javascript:"]:after,.factory-bootstrap-421 a[href^="#"]:after{content:""}.factory-bootstrap-421 blockquote,.factory-bootstrap-421 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-421 thead{display:table-header-group}.factory-bootstrap-421 img,.factory-bootstrap-421 tr{page-break-inside:avoid}.factory-bootstrap-421 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-421 h2,.factory-bootstrap-421 h3,.factory-bootstrap-421 p{orphans:3;widows:3}.factory-bootstrap-421 h2,.factory-bootstrap-421 h3{page-break-after:avoid}.factory-bootstrap-421 select{background:#fff!important}.factory-bootstrap-421 .navbar{display:none}.factory-bootstrap-421 .table td,.factory-bootstrap-421 .table th{background-color:#fff!important}.factory-bootstrap-421 .btn>.caret,.factory-bootstrap-421 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-421 .label{border:1px solid #000}.factory-bootstrap-421 .table{border-collapse:collapse!important}.factory-bootstrap-421 .table-bordered td,.factory-bootstrap-421 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-421 *,.factory-bootstrap-421 :after,.factory-bootstrap-421 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-421{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-421 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-421 button,.factory-bootstrap-421 input,.factory-bootstrap-421 select,.factory-bootstrap-421 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-421 img{vertical-align:middle}.factory-bootstrap-421 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-421 .img-rounded{border-radius:6px}.factory-bootstrap-421 .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-421 .img-circle{border-radius:50%}.factory-bootstrap-421 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-421 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-421 .h1,.factory-bootstrap-421 .h2,.factory-bootstrap-421 .h3,.factory-bootstrap-421 .h4,.factory-bootstrap-421 .h5,.factory-bootstrap-421 .h6,.factory-bootstrap-421 h1,.factory-bootstrap-421 h2,.factory-bootstrap-421 h3,.factory-bootstrap-421 h4,.factory-bootstrap-421 h5,.factory-bootstrap-421 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-421 .h1 .small,.factory-bootstrap-421 .h1 small,.factory-bootstrap-421 .h2 .small,.factory-bootstrap-421 .h2 small,.factory-bootstrap-421 .h3 .small,.factory-bootstrap-421 .h3 small,.factory-bootstrap-421 .h4 .small,.factory-bootstrap-421 .h4 small,.factory-bootstrap-421 .h5 .small,.factory-bootstrap-421 .h5 small,.factory-bootstrap-421 .h6 .small,.factory-bootstrap-421 .h6 small,.factory-bootstrap-421 h1 .small,.factory-bootstrap-421 h1 small,.factory-bootstrap-421 h2 .small,.factory-bootstrap-421 h2 small,.factory-bootstrap-421 h3 .small,.factory-bootstrap-421 h3 small,.factory-bootstrap-421 h4 .small,.factory-bootstrap-421 h4 small,.factory-bootstrap-421 h5 .small,.factory-bootstrap-421 h5 small,.factory-bootstrap-421 h6 .small,.factory-bootstrap-421 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-421 h1,.factory-bootstrap-421 h2,.factory-bootstrap-421 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-421 h1 .small,.factory-bootstrap-421 h1 small,.factory-bootstrap-421 h2 .small,.factory-bootstrap-421 h2 small,.factory-bootstrap-421 h3 .small,.factory-bootstrap-421 h3 small{font-size:65%}.factory-bootstrap-421 h4,.factory-bootstrap-421 h5,.factory-bootstrap-421 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-421 h4 .small,.factory-bootstrap-421 h4 small,.factory-bootstrap-421 h5 .small,.factory-bootstrap-421 h5 small,.factory-bootstrap-421 h6 .small,.factory-bootstrap-421 h6 small{font-size:75%}.factory-bootstrap-421 .h1,.factory-bootstrap-421 h1{font-size:36px}.factory-bootstrap-421 .h2,.factory-bootstrap-421 h2{font-size:30px}.factory-bootstrap-421 .h3,.factory-bootstrap-421 h3{font-size:24px}.factory-bootstrap-421 .h4,.factory-bootstrap-421 h4{font-size:18px}.factory-bootstrap-421 .h5,.factory-bootstrap-421 h5{font-size:14px}.factory-bootstrap-421 .h6,.factory-bootstrap-421 h6{font-size:12px}.factory-bootstrap-421 p{margin:0 0 10px}.factory-bootstrap-421 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-421 .small,.factory-bootstrap-421 small{font-size:85%}.factory-bootstrap-421 cite{font-style:normal}.factory-bootstrap-421 .text-muted{color:#999}.factory-bootstrap-421 .text-primary{color:#428bca}.factory-bootstrap-421 .text-primary:hover{color:#3071a9}.factory-bootstrap-421 .text-warning{color:#8a6d3b}.factory-bootstrap-421 .text-warning:hover{color:#66512c}.factory-bootstrap-421 .text-danger{color:#a94442}.factory-bootstrap-421 .text-danger:hover{color:#843534}.factory-bootstrap-421 .text-success{color:#3c763d}.factory-bootstrap-421 .text-success:hover{color:#2b542c}.factory-bootstrap-421 .text-info{color:#31708f}.factory-bootstrap-421 .text-info:hover{color:#245269}.factory-bootstrap-421 .text-left{text-align:left}.factory-bootstrap-421 .text-right{text-align:right}.factory-bootstrap-421 .text-center{text-align:center}.factory-bootstrap-421 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-421 ol,.factory-bootstrap-421 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-421 ol ol,.factory-bootstrap-421 ol ul,.factory-bootstrap-421 ul ol,.factory-bootstrap-421 ul ul{margin-bottom:0}.factory-bootstrap-421 .list-inline,.factory-bootstrap-421 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-421 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-421 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-421 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-421 dd,.factory-bootstrap-421 dt{line-height:1.428571429}.factory-bootstrap-421 dt{font-weight:700}.factory-bootstrap-421 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-421 abbr[data-original-title],.factory-bootstrap-421 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-421 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-421 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-421 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-421 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-421 blockquote .small,.factory-bootstrap-421 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-421 blockquote .small:before,.factory-bootstrap-421 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-421 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-421 blockquote.pull-right .small,.factory-bootstrap-421 blockquote.pull-right p,.factory-bootstrap-421 blockquote.pull-right small{text-align:right}.factory-bootstrap-421 blockquote.pull-right .small:before,.factory-bootstrap-421 blockquote.pull-right small:before{content:''}.factory-bootstrap-421 blockquote.pull-right .small:after,.factory-bootstrap-421 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-421 blockquote:after,.factory-bootstrap-421 blockquote:before{content:""}.factory-bootstrap-421 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-421 code,.factory-bootstrap-421 kbd,.factory-bootstrap-421 pre,.factory-bootstrap-421 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-421 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-421 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-421 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-421 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-421 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-421 .container:after,.factory-bootstrap-421 .container:before{display:table;content:" "}.factory-bootstrap-421 .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-421 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-421 .row:after,.factory-bootstrap-421 .row:before{display:table;content:" "}.factory-bootstrap-421 .row:after{clear:both}.factory-bootstrap-421 .col-lg-1,.factory-bootstrap-421 .col-lg-10,.factory-bootstrap-421 .col-lg-11,.factory-bootstrap-421 .col-lg-12,.factory-bootstrap-421 .col-lg-2,.factory-bootstrap-421 .col-lg-3,.factory-bootstrap-421 .col-lg-4,.factory-bootstrap-421 .col-lg-5,.factory-bootstrap-421 .col-lg-6,.factory-bootstrap-421 .col-lg-7,.factory-bootstrap-421 .col-lg-8,.factory-bootstrap-421 .col-lg-9,.factory-bootstrap-421 .col-md-1,.factory-bootstrap-421 .col-md-10,.factory-bootstrap-421 .col-md-11,.factory-bootstrap-421 .col-md-12,.factory-bootstrap-421 .col-md-2,.factory-bootstrap-421 .col-md-3,.factory-bootstrap-421 .col-md-4,.factory-bootstrap-421 .col-md-5,.factory-bootstrap-421 .col-md-6,.factory-bootstrap-421 .col-md-7,.factory-bootstrap-421 .col-md-8,.factory-bootstrap-421 .col-md-9,.factory-bootstrap-421 .col-sm-1,.factory-bootstrap-421 .col-sm-10,.factory-bootstrap-421 .col-sm-11,.factory-bootstrap-421 .col-sm-12,.factory-bootstrap-421 .col-sm-2,.factory-bootstrap-421 .col-sm-3,.factory-bootstrap-421 .col-sm-4,.factory-bootstrap-421 .col-sm-5,.factory-bootstrap-421 .col-sm-6,.factory-bootstrap-421 .col-sm-7,.factory-bootstrap-421 .col-sm-8,.factory-bootstrap-421 .col-sm-9,.factory-bootstrap-421 .col-xs-1,.factory-bootstrap-421 .col-xs-10,.factory-bootstrap-421 .col-xs-11,.factory-bootstrap-421 .col-xs-12,.factory-bootstrap-421 .col-xs-2,.factory-bootstrap-421 .col-xs-3,.factory-bootstrap-421 .col-xs-4,.factory-bootstrap-421 .col-xs-5,.factory-bootstrap-421 .col-xs-6,.factory-bootstrap-421 .col-xs-7,.factory-bootstrap-421 .col-xs-8,.factory-bootstrap-421 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-421 .col-xs-1,.factory-bootstrap-421 .col-xs-10,.factory-bootstrap-421 .col-xs-11,.factory-bootstrap-421 .col-xs-12,.factory-bootstrap-421 .col-xs-2,.factory-bootstrap-421 .col-xs-3,.factory-bootstrap-421 .col-xs-4,.factory-bootstrap-421 .col-xs-5,.factory-bootstrap-421 .col-xs-6,.factory-bootstrap-421 .col-xs-7,.factory-bootstrap-421 .col-xs-8,.factory-bootstrap-421 .col-xs-9{float:left}.factory-bootstrap-421 .col-xs-12{width:100%}.factory-bootstrap-421 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-421 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-421 .col-xs-9{width:75%}.factory-bootstrap-421 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-421 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-421 .col-xs-6{width:50%}.factory-bootstrap-421 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-421 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-421 .col-xs-3{width:25%}.factory-bootstrap-421 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-421 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-421 .col-xs-pull-12{right:100%}.factory-bootstrap-421 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-421 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-421 .col-xs-pull-9{right:75%}.factory-bootstrap-421 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-421 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-421 .col-xs-pull-6{right:50%}.factory-bootstrap-421 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-421 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-421 .col-xs-pull-3{right:25%}.factory-bootstrap-421 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-421 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-421 .col-xs-pull-0{right:0}.factory-bootstrap-421 .col-xs-push-12{left:100%}.factory-bootstrap-421 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-421 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-421 .col-xs-push-9{left:75%}.factory-bootstrap-421 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-421 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-421 .col-xs-push-6{left:50%}.factory-bootstrap-421 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-421 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-421 .col-xs-push-3{left:25%}.factory-bootstrap-421 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-421 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-421 .col-xs-push-0{left:0}.factory-bootstrap-421 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-421 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-421 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-421 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-421 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-421 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-421 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-421 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-421 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-421 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-421 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-421 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-421 .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-421 table{max-width:100%;background-color:transparent}.factory-bootstrap-421 th{text-align:left}.factory-bootstrap-421 .table{width:100%;margin-bottom:20px}.factory-bootstrap-421 .table>tbody>tr>td,.factory-bootstrap-421 .table>tbody>tr>th,.factory-bootstrap-421 .table>tfoot>tr>td,.factory-bootstrap-421 .table>tfoot>tr>th,.factory-bootstrap-421 .table>thead>tr>td,.factory-bootstrap-421 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-421 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-421 .table>caption+thead>tr:first-child>td,.factory-bootstrap-421 .table>caption+thead>tr:first-child>th,.factory-bootstrap-421 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-421 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-421 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-421 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-421 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-421 .table .table{background-color:#fff}.factory-bootstrap-421 .table-condensed>tbody>tr>td,.factory-bootstrap-421 .table-condensed>tbody>tr>th,.factory-bootstrap-421 .table-condensed>tfoot>tr>td,.factory-bootstrap-421 .table-condensed>tfoot>tr>th,.factory-bootstrap-421 .table-condensed>thead>tr>td,.factory-bootstrap-421 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-421 .table-bordered,.factory-bootstrap-421 .table-bordered>tbody>tr>td,.factory-bootstrap-421 .table-bordered>tbody>tr>th,.factory-bootstrap-421 .table-bordered>tfoot>tr>td,.factory-bootstrap-421 .table-bordered>tfoot>tr>th,.factory-bootstrap-421 .table-bordered>thead>tr>td,.factory-bootstrap-421 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-421 .table-bordered>thead>tr>td,.factory-bootstrap-421 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-421 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-421 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-421 .table-hover>tbody>tr:hover>td,.factory-bootstrap-421 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-421 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-421 table td[class*=col-],.factory-bootstrap-421 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-421 .table>tbody>.active>td,.factory-bootstrap-421 .table>tbody>.active>th,.factory-bootstrap-421 .table>tbody>tr>.active,.factory-bootstrap-421 .table>tfoot>.active>td,.factory-bootstrap-421 .table>tfoot>.active>th,.factory-bootstrap-421 .table>tfoot>tr>.active,.factory-bootstrap-421 .table>thead>.active>td,.factory-bootstrap-421 .table>thead>.active>th,.factory-bootstrap-421 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-421 .table-hover>tbody>.active:hover>td,.factory-bootstrap-421 .table-hover>tbody>.active:hover>th,.factory-bootstrap-421 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-421 .table>tbody>.success>td,.factory-bootstrap-421 .table>tbody>.success>th,.factory-bootstrap-421 .table>tbody>tr>.success,.factory-bootstrap-421 .table>tfoot>.success>td,.factory-bootstrap-421 .table>tfoot>.success>th,.factory-bootstrap-421 .table>tfoot>tr>.success,.factory-bootstrap-421 .table>thead>.success>td,.factory-bootstrap-421 .table>thead>.success>th,.factory-bootstrap-421 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-421 .table-hover>tbody>.success:hover>td,.factory-bootstrap-421 .table-hover>tbody>.success:hover>th,.factory-bootstrap-421 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-421 .table>tbody>.danger>td,.factory-bootstrap-421 .table>tbody>.danger>th,.factory-bootstrap-421 .table>tbody>tr>.danger,.factory-bootstrap-421 .table>tfoot>.danger>td,.factory-bootstrap-421 .table>tfoot>.danger>th,.factory-bootstrap-421 .table>tfoot>tr>.danger,.factory-bootstrap-421 .table>thead>.danger>td,.factory-bootstrap-421 .table>thead>.danger>th,.factory-bootstrap-421 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-421 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-421 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-421 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-421 .table>tbody>.warning>td,.factory-bootstrap-421 .table>tbody>.warning>th,.factory-bootstrap-421 .table>tbody>tr>.warning,.factory-bootstrap-421 .table>tfoot>.warning>td,.factory-bootstrap-421 .table>tfoot>.warning>th,.factory-bootstrap-421 .table>tfoot>tr>.warning,.factory-bootstrap-421 .table>thead>.warning>td,.factory-bootstrap-421 .table>thead>.warning>th,.factory-bootstrap-421 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-421 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-421 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-421 .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-421 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-421 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-421 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-421 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-421 input[type=checkbox],.factory-bootstrap-421 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-421 input[type=file]{display:block}.factory-bootstrap-421 select[multiple],.factory-bootstrap-421 select[size]{height:auto}.factory-bootstrap-421 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-421 input[type=checkbox]:focus,.factory-bootstrap-421 input[type=file]:focus,.factory-bootstrap-421 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-421 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-421 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-421 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-421 .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-421 .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-421 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-421 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-421 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-421 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-421 .form-control[disabled],.factory-bootstrap-421 .form-control[readonly],.factory-bootstrap-421 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-421 textarea.form-control{height:auto}.factory-bootstrap-421 .form-group{margin-bottom:15px}.factory-bootstrap-421 .checkbox,.factory-bootstrap-421 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-421 .checkbox label,.factory-bootstrap-421 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-421 .checkbox input[type=checkbox],.factory-bootstrap-421 .checkbox-inline input[type=checkbox],.factory-bootstrap-421 .radio input[type=radio],.factory-bootstrap-421 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-421 .checkbox+.checkbox,.factory-bootstrap-421 .radio+.radio{margin-top:-5px}.factory-bootstrap-421 .checkbox-inline,.factory-bootstrap-421 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-421 .checkbox-inline+.checkbox-inline,.factory-bootstrap-421 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-421 .checkbox-inline[disabled],.factory-bootstrap-421 .checkbox[disabled],.factory-bootstrap-421 .radio-inline[disabled],.factory-bootstrap-421 .radio[disabled],.factory-bootstrap-421 fieldset[disabled] .checkbox,.factory-bootstrap-421 fieldset[disabled] .checkbox-inline,.factory-bootstrap-421 fieldset[disabled] .radio,.factory-bootstrap-421 fieldset[disabled] .radio-inline,.factory-bootstrap-421 fieldset[disabled] input[type=checkbox],.factory-bootstrap-421 fieldset[disabled] input[type=radio],.factory-bootstrap-421 input[type=checkbox][disabled],.factory-bootstrap-421 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-421 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-421 textarea.input-sm{height:auto}.factory-bootstrap-421 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-421 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-421 textarea.input-lg{height:auto}.factory-bootstrap-421 .has-warning .checkbox,.factory-bootstrap-421 .has-warning .checkbox-inline,.factory-bootstrap-421 .has-warning .control-label,.factory-bootstrap-421 .has-warning .help-block,.factory-bootstrap-421 .has-warning .radio,.factory-bootstrap-421 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-421 .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-421 .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-421 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-421 .has-error .checkbox,.factory-bootstrap-421 .has-error .checkbox-inline,.factory-bootstrap-421 .has-error .control-label,.factory-bootstrap-421 .has-error .help-block,.factory-bootstrap-421 .has-error .radio,.factory-bootstrap-421 .has-error .radio-inline{color:#a94442}.factory-bootstrap-421 .controls{display:block}.factory-bootstrap-421 .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-421 .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-421 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-421 .has-success .checkbox,.factory-bootstrap-421 .has-success .checkbox-inline,.factory-bootstrap-421 .has-success .control-label,.factory-bootstrap-421 .has-success .help-block,.factory-bootstrap-421 .has-success .radio,.factory-bootstrap-421 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-421 .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-421 .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-421 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-421 .form-control-static{margin-bottom:0}.factory-bootstrap-421 .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-421 .form-horizontal .checkbox,.factory-bootstrap-421 .form-horizontal .checkbox-inline,.factory-bootstrap-421 .form-horizontal .control-label,.factory-bootstrap-421 .form-horizontal .radio,.factory-bootstrap-421 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-421 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-421 .form-horizontal .checkbox,.factory-bootstrap-421 .form-horizontal .radio{min-height:27px}.factory-bootstrap-421 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-421 .form-horizontal .form-group:after,.factory-bootstrap-421 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-421 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-421 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-421 .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-421 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-421 .btn{text-decoration:none}.factory-bootstrap-421 .btn:focus,.factory-bootstrap-421 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-421 .btn.disabled,.factory-bootstrap-421 .btn[disabled],.factory-bootstrap-421 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-421 .btn-default.active,.factory-bootstrap-421 .btn-default:active,.factory-bootstrap-421 .btn-default:focus,.factory-bootstrap-421 .btn-default:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-421 .btn-default.active,.factory-bootstrap-421 .btn-default:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-421 .btn-default.disabled,.factory-bootstrap-421 .btn-default.disabled.active,.factory-bootstrap-421 .btn-default.disabled:active,.factory-bootstrap-421 .btn-default.disabled:focus,.factory-bootstrap-421 .btn-default.disabled:hover,.factory-bootstrap-421 .btn-default[disabled],.factory-bootstrap-421 .btn-default[disabled].active,.factory-bootstrap-421 .btn-default[disabled]:active,.factory-bootstrap-421 .btn-default[disabled]:focus,.factory-bootstrap-421 .btn-default[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-default,.factory-bootstrap-421 fieldset[disabled] .btn-default.active,.factory-bootstrap-421 fieldset[disabled] .btn-default:active,.factory-bootstrap-421 fieldset[disabled] .btn-default:focus,.factory-bootstrap-421 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-421 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-421 .btn-primary.active,.factory-bootstrap-421 .btn-primary:active,.factory-bootstrap-421 .btn-primary:focus,.factory-bootstrap-421 .btn-primary:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-421 .btn-primary.active,.factory-bootstrap-421 .btn-primary:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-421 .btn-primary.disabled,.factory-bootstrap-421 .btn-primary.disabled.active,.factory-bootstrap-421 .btn-primary.disabled:active,.factory-bootstrap-421 .btn-primary.disabled:focus,.factory-bootstrap-421 .btn-primary.disabled:hover,.factory-bootstrap-421 .btn-primary[disabled],.factory-bootstrap-421 .btn-primary[disabled].active,.factory-bootstrap-421 .btn-primary[disabled]:active,.factory-bootstrap-421 .btn-primary[disabled]:focus,.factory-bootstrap-421 .btn-primary[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-primary,.factory-bootstrap-421 fieldset[disabled] .btn-primary.active,.factory-bootstrap-421 fieldset[disabled] .btn-primary:active,.factory-bootstrap-421 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-421 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-421 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-421 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-421 .btn-warning.active,.factory-bootstrap-421 .btn-warning:active,.factory-bootstrap-421 .btn-warning:focus,.factory-bootstrap-421 .btn-warning:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-421 .btn-warning.active,.factory-bootstrap-421 .btn-warning:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-421 .btn-warning.disabled,.factory-bootstrap-421 .btn-warning.disabled.active,.factory-bootstrap-421 .btn-warning.disabled:active,.factory-bootstrap-421 .btn-warning.disabled:focus,.factory-bootstrap-421 .btn-warning.disabled:hover,.factory-bootstrap-421 .btn-warning[disabled],.factory-bootstrap-421 .btn-warning[disabled].active,.factory-bootstrap-421 .btn-warning[disabled]:active,.factory-bootstrap-421 .btn-warning[disabled]:focus,.factory-bootstrap-421 .btn-warning[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-warning,.factory-bootstrap-421 fieldset[disabled] .btn-warning.active,.factory-bootstrap-421 fieldset[disabled] .btn-warning:active,.factory-bootstrap-421 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-421 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-421 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-421 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-421 .btn-success.active,.factory-bootstrap-421 .btn-success:active,.factory-bootstrap-421 .btn-success:focus,.factory-bootstrap-421 .btn-success:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-421 .btn-success.active,.factory-bootstrap-421 .btn-success:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-421 .btn-success.disabled,.factory-bootstrap-421 .btn-success.disabled.active,.factory-bootstrap-421 .btn-success.disabled:active,.factory-bootstrap-421 .btn-success.disabled:focus,.factory-bootstrap-421 .btn-success.disabled:hover,.factory-bootstrap-421 .btn-success[disabled],.factory-bootstrap-421 .btn-success[disabled].active,.factory-bootstrap-421 .btn-success[disabled]:active,.factory-bootstrap-421 .btn-success[disabled]:focus,.factory-bootstrap-421 .btn-success[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-success,.factory-bootstrap-421 fieldset[disabled] .btn-success.active,.factory-bootstrap-421 fieldset[disabled] .btn-success:active,.factory-bootstrap-421 fieldset[disabled] .btn-success:focus,.factory-bootstrap-421 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-421 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-421 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-421 .btn-info.active,.factory-bootstrap-421 .btn-info:active,.factory-bootstrap-421 .btn-info:focus,.factory-bootstrap-421 .btn-info:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-421 .btn-info.active,.factory-bootstrap-421 .btn-info:active,.factory-bootstrap-421 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-421 .btn-info.disabled,.factory-bootstrap-421 .btn-info.disabled.active,.factory-bootstrap-421 .btn-info.disabled:active,.factory-bootstrap-421 .btn-info.disabled:focus,.factory-bootstrap-421 .btn-info.disabled:hover,.factory-bootstrap-421 .btn-info[disabled],.factory-bootstrap-421 .btn-info[disabled].active,.factory-bootstrap-421 .btn-info[disabled]:active,.factory-bootstrap-421 .btn-info[disabled]:focus,.factory-bootstrap-421 .btn-info[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-info,.factory-bootstrap-421 fieldset[disabled] .btn-info.active,.factory-bootstrap-421 fieldset[disabled] .btn-info:active,.factory-bootstrap-421 fieldset[disabled] .btn-info:focus,.factory-bootstrap-421 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-421 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-421 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-421 .btn-link,.factory-bootstrap-421 .btn-link:active,.factory-bootstrap-421 .btn-link[disabled],.factory-bootstrap-421 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-421 .btn-link,.factory-bootstrap-421 .btn-link:active,.factory-bootstrap-421 .btn-link:focus,.factory-bootstrap-421 .btn-link:hover{border-color:transparent}.factory-bootstrap-421 .btn-link:focus,.factory-bootstrap-421 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-421 .btn-link[disabled]:focus,.factory-bootstrap-421 .btn-link[disabled]:hover,.factory-bootstrap-421 fieldset[disabled] .btn-link:focus,.factory-bootstrap-421 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-421 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-421 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-421 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-421 input[type=button].btn-block,.factory-bootstrap-421 input[type=reset].btn-block,.factory-bootstrap-421 input[type=submit].btn-block{width:100%}.factory-bootstrap-421 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-421 .fade.in{opacity:1}.factory-bootstrap-421 .collapse{display:none}.factory-bootstrap-421 .collapse.in{display:block}.factory-bootstrap-421 .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-421 .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-421 .glyphicon:empty{width:1em}.factory-bootstrap-421 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-421 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-421 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-421 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-421 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-421 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-421 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-421 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-421 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-421 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-421 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-421 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-421 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-421 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-421 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-421 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-421 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-421 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-421 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-421 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-421 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-421 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-421 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-421 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-421 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-421 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-421 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-421 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-421 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-421 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-421 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-421 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-421 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-421 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-421 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-421 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-421 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-421 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-421 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-421 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-421 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-421 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-421 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-421 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-421 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-421 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-421 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-421 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-421 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-421 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-421 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-421 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-421 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-421 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-421 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-421 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-421 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-421 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-421 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-421 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-421 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-421 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-421 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-421 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-421 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-421 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-421 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-421 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-421 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-421 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-421 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-421 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-421 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-421 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-421 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-421 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-421 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-421 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-421 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-421 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-421 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-421 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-421 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-421 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-421 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-421 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-421 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-421 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-421 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-421 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-421 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-421 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-421 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-421 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-421 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-421 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-421 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-421 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-421 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-421 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-421 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-421 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-421 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-421 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-421 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-421 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-421 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-421 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-421 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-421 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-421 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-421 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-421 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-421 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-421 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-421 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-421 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-421 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-421 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-421 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-421 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-421 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-421 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-421 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-421 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-421 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-421 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-421 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-421 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-421 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-421 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-421 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-421 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-421 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-421 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-421 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-421 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-421 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-421 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-421 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-421 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-421 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-421 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-421 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-421 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-421 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-421 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-421 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-421 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-421 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-421 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-421 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-421 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-421 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-421 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-421 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-421 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-421 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-421 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-421 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-421 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-421 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-421 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-421 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-421 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-421 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-421 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-421 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-421 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-421 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-421 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-421 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-421 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-421 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-421 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-421 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-421 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-421 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-421 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-421 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-421 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-421 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-421 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-421 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-421 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-421 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-421 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-421 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-421 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-421 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-421 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-421 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-421 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-421 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-421 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-421 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-421 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-421 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-421 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-421 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-421 .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-421 .dropdown{position:relative}.factory-bootstrap-421 .dropdown-toggle:focus{outline:0}.factory-bootstrap-421 .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-421 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-421 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-421 .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-421 .dropdown-menu>li>a:focus,.factory-bootstrap-421 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-421 .dropdown-menu>.active>a,.factory-bootstrap-421 .dropdown-menu>.active>a:focus,.factory-bootstrap-421 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-421 .dropdown-menu>.disabled>a,.factory-bootstrap-421 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-421 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-421 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-421 .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-421 .open>.dropdown-menu{display:block}.factory-bootstrap-421 .open>a{outline:0}.factory-bootstrap-421 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-421 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-421 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-421 .dropup .caret,.factory-bootstrap-421 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-421 .dropup .dropdown-menu,.factory-bootstrap-421 .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-421 .btn-group,.factory-bootstrap-421 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-421 .btn-group-vertical>.btn,.factory-bootstrap-421 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-421 .btn-group-vertical>.btn.active,.factory-bootstrap-421 .btn-group-vertical>.btn:active,.factory-bootstrap-421 .btn-group-vertical>.btn:focus,.factory-bootstrap-421 .btn-group-vertical>.btn:hover,.factory-bootstrap-421 .btn-group>.btn.active,.factory-bootstrap-421 .btn-group>.btn:active,.factory-bootstrap-421 .btn-group>.btn:focus,.factory-bootstrap-421 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-421 .btn-group-vertical>.btn:focus,.factory-bootstrap-421 .btn-group>.btn:focus{outline:0}.factory-bootstrap-421 .btn-group .btn+.btn,.factory-bootstrap-421 .btn-group .btn+.btn-group,.factory-bootstrap-421 .btn-group .btn-group+.btn,.factory-bootstrap-421 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-421 .btn-toolbar:after,.factory-bootstrap-421 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-421 .btn-toolbar:after{clear:both}.factory-bootstrap-421 .btn-toolbar .btn-group{float:left}.factory-bootstrap-421 .btn-toolbar>.btn+.btn,.factory-bootstrap-421 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-421 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-421 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-421 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-421 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-421 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-421 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-421 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .btn-group>.btn-group{float:left}.factory-bootstrap-421 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-421 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-421 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-421 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .btn-group .dropdown-toggle:active,.factory-bootstrap-421 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-421 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-421 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-421 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-421 .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-421 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-421 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-421 .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-421 .btn .caret{margin-left:0}.factory-bootstrap-421 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-421 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-421 .btn-group-vertical>.btn,.factory-bootstrap-421 .btn-group-vertical>.btn-group,.factory-bootstrap-421 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-421 .btn-group-vertical>.btn-group:after,.factory-bootstrap-421 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-421 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-421 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-421 .btn-group-vertical>.btn+.btn,.factory-bootstrap-421 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-421 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-421 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-421 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-421 .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-421 .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-421 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-421 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-421 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-421 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-421 .btn-group-justified>.btn,.factory-bootstrap-421 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-421 .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-421 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-421 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-421 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-421 .input-group-lg>.form-control,.factory-bootstrap-421 .input-group-lg>.input-group-addon,.factory-bootstrap-421 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-421 select.input-group-lg>.form-control,.factory-bootstrap-421 select.input-group-lg>.input-group-addon,.factory-bootstrap-421 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-421 textarea.input-group-lg>.form-control,.factory-bootstrap-421 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-421 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-421 .input-group-sm>.form-control,.factory-bootstrap-421 .input-group-sm>.input-group-addon,.factory-bootstrap-421 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-421 select.input-group-sm>.form-control,.factory-bootstrap-421 select.input-group-sm>.input-group-addon,.factory-bootstrap-421 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-421 textarea.input-group-sm>.form-control,.factory-bootstrap-421 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-421 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-421 .input-group .form-control,.factory-bootstrap-421 .input-group-addon,.factory-bootstrap-421 .input-group-btn{display:table-cell}.factory-bootstrap-421 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-421 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-421 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-421 .input-group-addon,.factory-bootstrap-421 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-421 .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-421 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-421 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-421 .input-group-addon input[type=checkbox],.factory-bootstrap-421 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-421 .input-group .form-control:first-child,.factory-bootstrap-421 .input-group-addon:first-child,.factory-bootstrap-421 .input-group-btn:first-child>.btn,.factory-bootstrap-421 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-421 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-421 .input-group-addon:first-child{border-right:0}.factory-bootstrap-421 .input-group .form-control:last-child,.factory-bootstrap-421 .input-group-addon:last-child,.factory-bootstrap-421 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-421 .input-group-btn:last-child>.btn,.factory-bootstrap-421 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .input-group-addon:last-child{border-left:0}.factory-bootstrap-421 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-421 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-421 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-421 .input-group-btn>.btn{position:relative}.factory-bootstrap-421 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-421 .input-group-btn>.btn:active,.factory-bootstrap-421 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-421 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-421 .nav:after,.factory-bootstrap-421 .nav:before{display:table;content:" "}.factory-bootstrap-421 .nav:after{clear:both}.factory-bootstrap-421 .nav>li{position:relative;display:block}.factory-bootstrap-421 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-421 .nav>li>a:focus,.factory-bootstrap-421 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-421 .nav>li.disabled>a{color:#999}.factory-bootstrap-421 .nav>li.disabled>a:focus,.factory-bootstrap-421 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-421 .nav .open>a,.factory-bootstrap-421 .nav .open>a:focus,.factory-bootstrap-421 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-421 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-421 .nav>li>a>img{max-width:none}.factory-bootstrap-421 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-421 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-421 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-421 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-421 .nav-tabs>li.active>a,.factory-bootstrap-421 .nav-tabs>li.active>a:focus,.factory-bootstrap-421 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-421 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-421 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-421 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-421 .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-421 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-421 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-421 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-421 .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-421 .nav-pills>li{float:left}.factory-bootstrap-421 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-421 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-421 .nav-pills>li.active>a,.factory-bootstrap-421 .nav-pills>li.active>a:focus,.factory-bootstrap-421 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-421 .nav-stacked>li{float:none}.factory-bootstrap-421 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-421 .nav-justified{width:100%}.factory-bootstrap-421 .nav-justified>li{float:none}.factory-bootstrap-421 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-421 .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-421 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-421 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-421 .nav-tabs-justified>.active>a,.factory-bootstrap-421 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-421 .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-421 .tab-content>.tab-pane{display:none}.factory-bootstrap-421 .tab-content>.active{display:block}.factory-bootstrap-421 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-421 .navbar:after,.factory-bootstrap-421 .navbar:before{display:table;content:" "}.factory-bootstrap-421 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-421 .navbar-header:after,.factory-bootstrap-421 .navbar-header:before{display:table;content:" "}.factory-bootstrap-421 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-421 .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-421 .navbar-collapse:after,.factory-bootstrap-421 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-421 .navbar-collapse:after{clear:both}.factory-bootstrap-421 .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-421 .container>.navbar-collapse,.factory-bootstrap-421 .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-421 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-421 .navbar-fixed-bottom,.factory-bootstrap-421 .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-421 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-421 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-421 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-421 .navbar-brand:focus,.factory-bootstrap-421 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-421 .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-421 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-421 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-421 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-421 .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-421 .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-421 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-421 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-421 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-421 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-421 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-421 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-421 .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-421 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-421 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-421 .navbar-default .navbar-brand:focus,.factory-bootstrap-421 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-421 .navbar-default .navbar-nav>li>a,.factory-bootstrap-421 .navbar-default .navbar-text{color:#777}.factory-bootstrap-421 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-421 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-421 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-421 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-421 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-421 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-421 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-421 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-421 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-421 .navbar-default .navbar-toggle:focus,.factory-bootstrap-421 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-421 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-421 .navbar-default .navbar-collapse,.factory-bootstrap-421 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-421 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-421 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-421 .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-421 .navbar-default .navbar-link{color:#777}.factory-bootstrap-421 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-421 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-421 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-421 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-421 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-421 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-421 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-421 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-421 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-421 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-421 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-421 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-421 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-421 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-421 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-421 .navbar-inverse .navbar-collapse,.factory-bootstrap-421 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-421 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-421 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-421 .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-421 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-421 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-421 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-421 .breadcrumb>li{display:inline-block}.factory-bootstrap-421 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-421 .breadcrumb>.active{color:#999}.factory-bootstrap-421 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-421 .pagination>li{display:inline}.factory-bootstrap-421 .pagination>li>a,.factory-bootstrap-421 .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-421 .pagination>li:first-child>a,.factory-bootstrap-421 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-421 .pagination>li:last-child>a,.factory-bootstrap-421 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-421 .pagination>li>a:focus,.factory-bootstrap-421 .pagination>li>a:hover,.factory-bootstrap-421 .pagination>li>span:focus,.factory-bootstrap-421 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-421 .pagination>.active>a,.factory-bootstrap-421 .pagination>.active>a:focus,.factory-bootstrap-421 .pagination>.active>a:hover,.factory-bootstrap-421 .pagination>.active>span,.factory-bootstrap-421 .pagination>.active>span:focus,.factory-bootstrap-421 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-421 .pagination>.disabled>a,.factory-bootstrap-421 .pagination>.disabled>a:focus,.factory-bootstrap-421 .pagination>.disabled>a:hover,.factory-bootstrap-421 .pagination>.disabled>span,.factory-bootstrap-421 .pagination>.disabled>span:focus,.factory-bootstrap-421 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-421 .pagination-lg>li>a,.factory-bootstrap-421 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-421 .pagination-lg>li:first-child>a,.factory-bootstrap-421 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-421 .pagination-lg>li:last-child>a,.factory-bootstrap-421 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-421 .pagination-sm>li>a,.factory-bootstrap-421 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-421 .pagination-sm>li:first-child>a,.factory-bootstrap-421 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-421 .pagination-sm>li:last-child>a,.factory-bootstrap-421 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-421 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-421 .pager:after,.factory-bootstrap-421 .pager:before{display:table;content:" "}.factory-bootstrap-421 .pager:after{clear:both}.factory-bootstrap-421 .pager li{display:inline}.factory-bootstrap-421 .pager li>a,.factory-bootstrap-421 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-421 .pager li>a:focus,.factory-bootstrap-421 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-421 .pager .next>a,.factory-bootstrap-421 .pager .next>span{float:right}.factory-bootstrap-421 .pager .previous>a,.factory-bootstrap-421 .pager .previous>span{float:left}.factory-bootstrap-421 .pager .disabled>a,.factory-bootstrap-421 .pager .disabled>a:focus,.factory-bootstrap-421 .pager .disabled>a:hover,.factory-bootstrap-421 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-421 .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-421 .label[href]:focus,.factory-bootstrap-421 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-421 .label:empty{display:none}.factory-bootstrap-421 .btn .label{position:relative;top:-1px}.factory-bootstrap-421 .label-default{background-color:#999}.factory-bootstrap-421 .label-default[href]:focus,.factory-bootstrap-421 .label-default[href]:hover{background-color:gray}.factory-bootstrap-421 .label-primary{background-color:#428bca}.factory-bootstrap-421 .label-primary[href]:focus,.factory-bootstrap-421 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-421 .label-success{background-color:#5cb85c}.factory-bootstrap-421 .label-success[href]:focus,.factory-bootstrap-421 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-421 .label-info{background-color:#5bc0de}.factory-bootstrap-421 .label-info[href]:focus,.factory-bootstrap-421 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-421 .label-warning{background-color:#f0ad4e}.factory-bootstrap-421 .label-warning[href]:focus,.factory-bootstrap-421 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-421 .label-danger{background-color:#d9534f}.factory-bootstrap-421 .label-danger[href]:focus,.factory-bootstrap-421 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-421 .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-421 .badge:empty{display:none}.factory-bootstrap-421 .btn .badge{position:relative;top:-1px}.factory-bootstrap-421 a.badge:focus,.factory-bootstrap-421 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-421 .nav-pills>.active>a>.badge,.factory-bootstrap-421 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-421 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-421 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-421 .jumbotron .h1,.factory-bootstrap-421 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-421 .jumbotron p{line-height:1.4}.factory-bootstrap-421 .container .jumbotron{border-radius:6px}.factory-bootstrap-421 .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-421 .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-421 .thumbnail a>img,.factory-bootstrap-421 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-421 a.thumbnail.active,.factory-bootstrap-421 a.thumbnail:focus,.factory-bootstrap-421 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-421 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-421 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-421 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-421 .alert .alert-link{font-weight:700}.factory-bootstrap-421 .alert>p,.factory-bootstrap-421 .alert>ul{margin-bottom:0}.factory-bootstrap-421 .alert>p+p{margin-top:5px}.factory-bootstrap-421 .alert-dismissable{padding-right:35px}.factory-bootstrap-421 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-421 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-421 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-421 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-421 .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-421 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-421 .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-421 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-421 .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-421 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-421 .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-421 .media,.factory-bootstrap-421 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-421 .media,.factory-bootstrap-421 .media .media{margin-top:15px}.factory-bootstrap-421 .media:first-child{margin-top:0}.factory-bootstrap-421 .media-object{display:block}.factory-bootstrap-421 .media-heading{margin:0 0 5px}.factory-bootstrap-421 .media>.pull-left{margin-right:10px}.factory-bootstrap-421 .media>.pull-right{margin-left:10px}.factory-bootstrap-421 .media-list{padding-left:0;list-style:none}.factory-bootstrap-421 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-421 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-421 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-421 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-421 .list-group-item>.badge{float:right}.factory-bootstrap-421 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-421 a.list-group-item{color:#555}.factory-bootstrap-421 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-421 a.list-group-item:focus,.factory-bootstrap-421 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-421 a.list-group-item.active,.factory-bootstrap-421 a.list-group-item.active:focus,.factory-bootstrap-421 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-421 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-421 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-421 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-421 a.list-group-item.active .list-group-item-text,.factory-bootstrap-421 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-421 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-421 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-421 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-421 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-421 .panel-body{padding:15px}.factory-bootstrap-421 .panel-body:after,.factory-bootstrap-421 .panel-body:before{display:table;content:" "}.factory-bootstrap-421 .panel-body:after{clear:both}.factory-bootstrap-421 .panel>.list-group{margin-bottom:0}.factory-bootstrap-421 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-421 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-421 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-421 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-421 .panel>.table,.factory-bootstrap-421 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-421 .panel>.panel-body+.table,.factory-bootstrap-421 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-421 .panel>.table>tbody:first-child td,.factory-bootstrap-421 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-421 .panel>.table-bordered,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-421 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-421 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-421 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-421 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-421 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-421 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-421 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-421 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-421 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-421 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-421 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-421 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-421 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-421 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-421 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-421 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-421 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-421 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-421 .panel-title>a{color:inherit}.factory-bootstrap-421 .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-421 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-421 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-421 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-421 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-421 .panel-group .panel-footer{border-top:0}.factory-bootstrap-421 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-421 .panel-default{border-color:#ddd}.factory-bootstrap-421 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-421 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-421 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-421 .panel-primary{border-color:#428bca}.factory-bootstrap-421 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-421 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-421 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-421 .panel-success{border-color:#d6e9c6}.factory-bootstrap-421 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-421 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-421 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-421 .panel-warning{border-color:#faebcc}.factory-bootstrap-421 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-421 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-421 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-421 .panel-danger{border-color:#ebccd1}.factory-bootstrap-421 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-421 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-421 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-421 .panel-info{border-color:#bce8f1}.factory-bootstrap-421 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-421 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-421 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-421 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-421 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-421 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-421 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-421 .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-421 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-421 .close:focus,.factory-bootstrap-421 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-421 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-421 .modal-open{overflow:hidden}.factory-bootstrap-421 .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-421 .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-421 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-421 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-421 .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-421 .modal-backdrop,.factory-bootstrap-421-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-421 .modal-backdrop.fade,.factory-bootstrap-421-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-421 .modal-backdrop.in,.factory-bootstrap-421-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-421 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-421 .modal-header .close{margin-top:-2px}.factory-bootstrap-421 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-421 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-421 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-421 .modal-footer:after,.factory-bootstrap-421 .modal-footer:before{display:table;content:" "}.factory-bootstrap-421 .modal-footer:after{clear:both}.factory-bootstrap-421 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-421 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-421 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-421 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-421 .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-421 .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-421 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-421 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-421 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-421 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-421 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-421 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-421 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-421 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-421 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-421 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-421 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-421 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-421 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-421 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-421 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-421 .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-421 .popover.top{margin-top:-10px}.factory-bootstrap-421 .popover.right{margin-left:10px}.factory-bootstrap-421 .popover.bottom{margin-top:10px}.factory-bootstrap-421 .popover.left{margin-left:-10px}.factory-bootstrap-421 .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-421 .popover-content{padding:9px 14px}.factory-bootstrap-421 .popover .arrow,.factory-bootstrap-421 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-421 .popover .arrow{border-width:11px}.factory-bootstrap-421 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-421 .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-421 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-421 .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-421 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-421 .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-421 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-421 .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-421 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-421 .carousel{position:relative}.factory-bootstrap-421 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-421 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-421 .carousel-inner>.item>a>img,.factory-bootstrap-421 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-421 .carousel-inner>.active,.factory-bootstrap-421 .carousel-inner>.next,.factory-bootstrap-421 .carousel-inner>.prev{display:block}.factory-bootstrap-421 .carousel-inner>.active{left:0}.factory-bootstrap-421 .carousel-inner>.next,.factory-bootstrap-421 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-421 .carousel-inner>.next{left:100%}.factory-bootstrap-421 .carousel-inner>.prev{left:-100%}.factory-bootstrap-421 .carousel-inner>.next.left,.factory-bootstrap-421 .carousel-inner>.prev.right{left:0}.factory-bootstrap-421 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-421 .carousel-inner>.active.right{left:100%}.factory-bootstrap-421 .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-421 .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-421 .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-421 .carousel-control:focus,.factory-bootstrap-421 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-421 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-421 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-421 .carousel-control .icon-next,.factory-bootstrap-421 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-421 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-421 .carousel-control .icon-prev{left:50%}.factory-bootstrap-421 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-421 .carousel-control .icon-next{right:50%}.factory-bootstrap-421 .carousel-control .icon-next,.factory-bootstrap-421 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-421 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-421 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-421 .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-421 .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-421 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-421 .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-421 .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-421 .clearfix:after,.factory-bootstrap-421 .clearfix:before{display:table;content:" "}.factory-bootstrap-421 .clearfix:after{clear:both}.factory-bootstrap-421 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-421 .pull-right{float:right!important}.factory-bootstrap-421 .pull-left{float:left!important}.factory-bootstrap-421 .hide{display:none!important}.factory-bootstrap-421 .show{display:block!important}.factory-bootstrap-421 .invisible{visibility:hidden}.factory-bootstrap-421 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-421 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-421 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-421 .visible-lg,.factory-bootstrap-421 .visible-md,.factory-bootstrap-421 .visible-sm,.factory-bootstrap-421 .visible-xs,.factory-bootstrap-421 td.visible-lg,.factory-bootstrap-421 td.visible-md,.factory-bootstrap-421 td.visible-sm,.factory-bootstrap-421 td.visible-xs,.factory-bootstrap-421 th.visible-lg,.factory-bootstrap-421 th.visible-md,.factory-bootstrap-421 th.visible-sm,.factory-bootstrap-421 th.visible-xs,.factory-bootstrap-421 tr.visible-lg,.factory-bootstrap-421 tr.visible-md,.factory-bootstrap-421 tr.visible-sm,.factory-bootstrap-421 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-421 .hidden-xs{display:block!important}.factory-bootstrap-421 table.hidden-xs{display:table}.factory-bootstrap-421 tr.hidden-xs{display:table-row!important}.factory-bootstrap-421 td.hidden-xs,.factory-bootstrap-421 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-421 .hidden-sm{display:block!important}.factory-bootstrap-421 table.hidden-sm{display:table}.factory-bootstrap-421 tr.hidden-sm{display:table-row!important}.factory-bootstrap-421 td.hidden-sm,.factory-bootstrap-421 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-421 .hidden-md{display:block!important}.factory-bootstrap-421 table.hidden-md{display:table}.factory-bootstrap-421 tr.hidden-md{display:table-row!important}.factory-bootstrap-421 td.hidden-md,.factory-bootstrap-421 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-421 .hidden-lg{display:block!important}.factory-bootstrap-421 table.hidden-lg{display:table}.factory-bootstrap-421 tr.hidden-lg{display:table-row!important}.factory-bootstrap-421 td.hidden-lg,.factory-bootstrap-421 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-421 .hidden-lg.hidden-xs,.factory-bootstrap-421 td.hidden-lg.hidden-xs,.factory-bootstrap-421 th.hidden-lg.hidden-xs,.factory-bootstrap-421 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-421 .hidden-lg.hidden-sm,.factory-bootstrap-421 td.hidden-lg.hidden-sm,.factory-bootstrap-421 th.hidden-lg.hidden-sm,.factory-bootstrap-421 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-421 .hidden-lg.hidden-md,.factory-bootstrap-421 td.hidden-lg.hidden-md,.factory-bootstrap-421 th.hidden-lg.hidden-md,.factory-bootstrap-421 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-421 .hidden-lg,.factory-bootstrap-421 td.hidden-lg,.factory-bootstrap-421 th.hidden-lg,.factory-bootstrap-421 tr.hidden-lg{display:none!important}}.factory-bootstrap-421 .visible-print,.factory-bootstrap-421 td.visible-print,.factory-bootstrap-421 th.visible-print,.factory-bootstrap-421 tr.visible-print{display:none!important}@media print{.factory-bootstrap-421 .visible-print{display:block!important}.factory-bootstrap-421 table.visible-print{display:table}.factory-bootstrap-421 tr.visible-print{display:table-row!important}.factory-bootstrap-421 td.visible-print,.factory-bootstrap-421 th.visible-print{display:table-cell!important}.factory-bootstrap-421 .hidden-print,.factory-bootstrap-421 td.hidden-print,.factory-bootstrap-421 th.hidden-print,.factory-bootstrap-421 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-421 .btn-danger,.factory-bootstrap-421 .btn-default,.factory-bootstrap-421 .btn-info,.factory-bootstrap-421 .btn-primary,.factory-bootstrap-421 .btn-success,.factory-bootstrap-421 .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-421 .btn-danger.active,.factory-bootstrap-421 .btn-danger:active,.factory-bootstrap-421 .btn-default.active,.factory-bootstrap-421 .btn-default:active,.factory-bootstrap-421 .btn-info.active,.factory-bootstrap-421 .btn-info:active,.factory-bootstrap-421 .btn-primary.active,.factory-bootstrap-421 .btn-primary:active,.factory-bootstrap-421 .btn-success.active,.factory-bootstrap-421 .btn-success:active,.factory-bootstrap-421 .btn-warning.active,.factory-bootstrap-421 .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-421 .btn.active,.factory-bootstrap-421 .btn:active{background-image:none}.factory-bootstrap-421 .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-421 .btn-default.active,.factory-bootstrap-421 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-421 .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-421 .btn-gold:focus,.factory-bootstrap-421 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-421 .btn-gold.active,.factory-bootstrap-421 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-421 .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-421 .btn-primary:focus,.factory-bootstrap-421 .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-421 .btn-primary.active,.factory-bootstrap-421 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-421 .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-421 .btn-success:focus,.factory-bootstrap-421 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-421 .btn-success.active,.factory-bootstrap-421 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-421 .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-421 .btn-warning:focus,.factory-bootstrap-421 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-421 .btn-warning.active,.factory-bootstrap-421 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-421 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-421 .btn-danger.active,.factory-bootstrap-421 .btn-danger:active,.factory-bootstrap-421 .btn-danger:focus,.factory-bootstrap-421 .btn-danger:hover,.factory-bootstrap-421 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-421 .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-421 .btn-info:focus,.factory-bootstrap-421 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-421 .btn-info.active,.factory-bootstrap-421 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-421 .img-thumbnail,.factory-bootstrap-421 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-421 .dropdown-menu>li>a:focus,.factory-bootstrap-421 .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-421 .dropdown-menu>.active>a,.factory-bootstrap-421 .dropdown-menu>.active>a:focus,.factory-bootstrap-421 .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-421 .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-421 .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-421 .navbar-brand,.factory-bootstrap-421 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-421 .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-421 .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-421 .navbar-inverse .navbar-brand,.factory-bootstrap-421 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-421 .navbar-fixed-bottom,.factory-bootstrap-421 .navbar-fixed-top,.factory-bootstrap-421 .navbar-static-top{border-radius:0}.factory-bootstrap-421 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-421 .alert .actions{padding-top:10px}.factory-bootstrap-421 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-421 .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-421 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-421 .alert-normal,.factory-bootstrap-421 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-421 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-421 .alert-danger a:not(.btn),.factory-bootstrap-421 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .list-group-item.active,.factory-bootstrap-421 .list-group-item.active:focus,.factory-bootstrap-421 .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-421 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .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-421 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-421 .factory-hidden{display:none}.factory-bootstrap-421 .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-430 article,.factory-bootstrap-430 aside,.factory-bootstrap-430 details,.factory-bootstrap-430 figcaption,.factory-bootstrap-430 figure,.factory-bootstrap-430 footer,.factory-bootstrap-430 header,.factory-bootstrap-430 hgroup,.factory-bootstrap-430 main,.factory-bootstrap-430 nav,.factory-bootstrap-430 section,.factory-bootstrap-430 summary{display:block}.factory-bootstrap-430 audio,.factory-bootstrap-430 canvas,.factory-bootstrap-430 video{display:inline-block}.factory-bootstrap-430 audio:not([controls]){display:none;height:0}.factory-bootstrap-430 [hidden],.factory-bootstrap-430 template{display:none}.factory-bootstrap-430 body{margin:0}.factory-bootstrap-430 a{background:0 0}.factory-bootstrap-430 a:focus{outline:thin dotted}.factory-bootstrap-430 a:active,.factory-bootstrap-430 a:hover{outline:0}.factory-bootstrap-430 h1{margin:.67em 0}.factory-bootstrap-430 b,.factory-bootstrap-430 strong{font-weight:700}.factory-bootstrap-430 dfn{font-style:italic}.factory-bootstrap-430 hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}.factory-bootstrap-430 mark{color:#000;background:#ff0}.factory-bootstrap-430 code,.factory-bootstrap-430 kbd,.factory-bootstrap-430 pre,.factory-bootstrap-430 samp{font-size:1em}.factory-bootstrap-430 pre{white-space:pre-wrap}.factory-bootstrap-430 q{quotes:"\201C" "\201D" "\2018" "\2019"}.factory-bootstrap-430 sub,.factory-bootstrap-430 sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.factory-bootstrap-430 sup{top:-.5em}.factory-bootstrap-430 sub{bottom:-.25em}.factory-bootstrap-430 img{border:0}.factory-bootstrap-430 svg:not(:root){overflow:hidden}.factory-bootstrap-430 figure{margin:0}.factory-bootstrap-430 button,.factory-bootstrap-430 input,.factory-bootstrap-430 select,.factory-bootstrap-430 textarea{margin:0}.factory-bootstrap-430 button,.factory-bootstrap-430 select{text-transform:none}.factory-bootstrap-430 select{padding-right:4px!important}.factory-bootstrap-430 button,.factory-bootstrap-430 input[type=reset],.factory-bootstrap-430 input[type=submit],html .factory-bootstrap-430 input[type=button]{cursor:pointer;-webkit-appearance:button}.factory-bootstrap-430 button[disabled],html .factory-bootstrap-430 input[disabled]{cursor:default}.factory-bootstrap-430 input[type=checkbox],.factory-bootstrap-430 input[type=radio]{padding:0;box-sizing:border-box}.factory-bootstrap-430 input[type=search]{-webkit-appearance:textfield}.factory-bootstrap-430 input[type=search]::-webkit-search-cancel-button,.factory-bootstrap-430 input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.factory-bootstrap-430 button::-moz-focus-inner,.factory-bootstrap-430 input::-moz-focus-inner{padding:0;border:0}.factory-bootstrap-430 textarea{overflow:auto;vertical-align:top}.factory-bootstrap-430 table{border-collapse:collapse;border-spacing:0}@media print{.factory-bootstrap-430 *{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}.factory-bootstrap-430 a,.factory-bootstrap-430 a:visited{text-decoration:underline}.factory-bootstrap-430 a[href]:after{content:" (" attr(href) ")"}.factory-bootstrap-430 abbr[title]:after{content:" (" attr(title) ")"}.factory-bootstrap-430 a[href^="javascript:"]:after,.factory-bootstrap-430 a[href^="#"]:after{content:""}.factory-bootstrap-430 blockquote,.factory-bootstrap-430 pre{border:1px solid #999;page-break-inside:avoid}.factory-bootstrap-430 thead{display:table-header-group}.factory-bootstrap-430 img,.factory-bootstrap-430 tr{page-break-inside:avoid}.factory-bootstrap-430 img{max-width:100%!important}@page{margin:2cm .5cm}.factory-bootstrap-430 h2,.factory-bootstrap-430 h3,.factory-bootstrap-430 p{orphans:3;widows:3}.factory-bootstrap-430 h2,.factory-bootstrap-430 h3{page-break-after:avoid}.factory-bootstrap-430 select{background:#fff!important}.factory-bootstrap-430 .navbar{display:none}.factory-bootstrap-430 .table td,.factory-bootstrap-430 .table th{background-color:#fff!important}.factory-bootstrap-430 .btn>.caret,.factory-bootstrap-430 .dropup>.btn>.caret{border-top-color:#000!important}.factory-bootstrap-430 .label{border:1px solid #000}.factory-bootstrap-430 .table{border-collapse:collapse!important}.factory-bootstrap-430 .table-bordered td,.factory-bootstrap-430 .table-bordered th{border:1px solid #ddd!important}}.factory-bootstrap-430 *,.factory-bootstrap-430 :after,.factory-bootstrap-430 :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html .factory-bootstrap-430{-webkit-tap-highlight-color:rgba(0,0,0,0)}.factory-bootstrap-430 body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}.factory-bootstrap-430 button,.factory-bootstrap-430 input,.factory-bootstrap-430 select,.factory-bootstrap-430 textarea{font-family:inherit;font-size:inherit;line-height:inherit}.factory-bootstrap-430 img{vertical-align:middle}.factory-bootstrap-430 .img-responsive{display:block;height:auto;max-width:100%}.factory-bootstrap-430 .img-rounded{border-radius:6px}.factory-bootstrap-430 .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-430 .img-circle{border-radius:50%}.factory-bootstrap-430 hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.factory-bootstrap-430 .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.factory-bootstrap-430 .h1,.factory-bootstrap-430 .h2,.factory-bootstrap-430 .h3,.factory-bootstrap-430 .h4,.factory-bootstrap-430 .h5,.factory-bootstrap-430 .h6,.factory-bootstrap-430 h1,.factory-bootstrap-430 h2,.factory-bootstrap-430 h3,.factory-bootstrap-430 h4,.factory-bootstrap-430 h5,.factory-bootstrap-430 h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.factory-bootstrap-430 .h1 .small,.factory-bootstrap-430 .h1 small,.factory-bootstrap-430 .h2 .small,.factory-bootstrap-430 .h2 small,.factory-bootstrap-430 .h3 .small,.factory-bootstrap-430 .h3 small,.factory-bootstrap-430 .h4 .small,.factory-bootstrap-430 .h4 small,.factory-bootstrap-430 .h5 .small,.factory-bootstrap-430 .h5 small,.factory-bootstrap-430 .h6 .small,.factory-bootstrap-430 .h6 small,.factory-bootstrap-430 h1 .small,.factory-bootstrap-430 h1 small,.factory-bootstrap-430 h2 .small,.factory-bootstrap-430 h2 small,.factory-bootstrap-430 h3 .small,.factory-bootstrap-430 h3 small,.factory-bootstrap-430 h4 .small,.factory-bootstrap-430 h4 small,.factory-bootstrap-430 h5 .small,.factory-bootstrap-430 h5 small,.factory-bootstrap-430 h6 .small,.factory-bootstrap-430 h6 small{font-weight:400;line-height:1;color:#999}.factory-bootstrap-430 h1,.factory-bootstrap-430 h2,.factory-bootstrap-430 h3{margin-top:20px;margin-bottom:10px}.factory-bootstrap-430 h1 .small,.factory-bootstrap-430 h1 small,.factory-bootstrap-430 h2 .small,.factory-bootstrap-430 h2 small,.factory-bootstrap-430 h3 .small,.factory-bootstrap-430 h3 small{font-size:65%}.factory-bootstrap-430 h4,.factory-bootstrap-430 h5,.factory-bootstrap-430 h6{margin-top:10px;margin-bottom:10px}.factory-bootstrap-430 h4 .small,.factory-bootstrap-430 h4 small,.factory-bootstrap-430 h5 .small,.factory-bootstrap-430 h5 small,.factory-bootstrap-430 h6 .small,.factory-bootstrap-430 h6 small{font-size:75%}.factory-bootstrap-430 .h1,.factory-bootstrap-430 h1{font-size:36px}.factory-bootstrap-430 .h2,.factory-bootstrap-430 h2{font-size:30px}.factory-bootstrap-430 .h3,.factory-bootstrap-430 h3{font-size:24px}.factory-bootstrap-430 .h4,.factory-bootstrap-430 h4{font-size:18px}.factory-bootstrap-430 .h5,.factory-bootstrap-430 h5{font-size:14px}.factory-bootstrap-430 .h6,.factory-bootstrap-430 h6{font-size:12px}.factory-bootstrap-430 p{margin:0 0 10px}.factory-bootstrap-430 .lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.factory-bootstrap-430 .small,.factory-bootstrap-430 small{font-size:85%}.factory-bootstrap-430 cite{font-style:normal}.factory-bootstrap-430 .text-muted{color:#999}.factory-bootstrap-430 .text-primary{color:#428bca}.factory-bootstrap-430 .text-primary:hover{color:#3071a9}.factory-bootstrap-430 .text-warning{color:#8a6d3b}.factory-bootstrap-430 .text-warning:hover{color:#66512c}.factory-bootstrap-430 .text-danger{color:#a94442}.factory-bootstrap-430 .text-danger:hover{color:#843534}.factory-bootstrap-430 .text-success{color:#3c763d}.factory-bootstrap-430 .text-success:hover{color:#2b542c}.factory-bootstrap-430 .text-info{color:#31708f}.factory-bootstrap-430 .text-info:hover{color:#245269}.factory-bootstrap-430 .text-left{text-align:left}.factory-bootstrap-430 .text-right{text-align:right}.factory-bootstrap-430 .text-center{text-align:center}.factory-bootstrap-430 .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}.factory-bootstrap-430 ol,.factory-bootstrap-430 ul{margin-top:0;margin-bottom:10px}.factory-bootstrap-430 ol ol,.factory-bootstrap-430 ol ul,.factory-bootstrap-430 ul ol,.factory-bootstrap-430 ul ul{margin-bottom:0}.factory-bootstrap-430 .list-inline,.factory-bootstrap-430 .list-unstyled{padding-left:0;list-style:none}.factory-bootstrap-430 .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.factory-bootstrap-430 .list-inline>li:first-child{padding-left:0}.factory-bootstrap-430 dl{margin-top:0;margin-bottom:20px}.factory-bootstrap-430 dd,.factory-bootstrap-430 dt{line-height:1.428571429}.factory-bootstrap-430 dt{font-weight:700}.factory-bootstrap-430 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-430 abbr[data-original-title],.factory-bootstrap-430 abbr[title]{cursor:help;border-bottom:1px dotted #999}.factory-bootstrap-430 .initialism{font-size:90%;text-transform:uppercase}.factory-bootstrap-430 blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}.factory-bootstrap-430 blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}.factory-bootstrap-430 blockquote p:last-child{margin-bottom:0}.factory-bootstrap-430 blockquote .small,.factory-bootstrap-430 blockquote small{display:block;line-height:1.428571429;color:#999}.factory-bootstrap-430 blockquote .small:before,.factory-bootstrap-430 blockquote small:before{content:'\2014 \00A0'}.factory-bootstrap-430 blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}.factory-bootstrap-430 blockquote.pull-right .small,.factory-bootstrap-430 blockquote.pull-right p,.factory-bootstrap-430 blockquote.pull-right small{text-align:right}.factory-bootstrap-430 blockquote.pull-right .small:before,.factory-bootstrap-430 blockquote.pull-right small:before{content:''}.factory-bootstrap-430 blockquote.pull-right .small:after,.factory-bootstrap-430 blockquote.pull-right small:after{content:'\00A0 \2014'}.factory-bootstrap-430 blockquote:after,.factory-bootstrap-430 blockquote:before{content:""}.factory-bootstrap-430 address{margin-bottom:20px;font-style:normal;line-height:1.428571429}.factory-bootstrap-430 code,.factory-bootstrap-430 kbd,.factory-bootstrap-430 pre,.factory-bootstrap-430 samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}.factory-bootstrap-430 code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}.factory-bootstrap-430 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-430 pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.factory-bootstrap-430 .pre-scrollable{max-height:340px;overflow-y:scroll}.factory-bootstrap-430 .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.factory-bootstrap-430 .container:after,.factory-bootstrap-430 .container:before{display:table;content:" "}.factory-bootstrap-430 .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-430 .row{margin-right:-15px;margin-left:-15px}.factory-bootstrap-430 .row:after,.factory-bootstrap-430 .row:before{display:table;content:" "}.factory-bootstrap-430 .row:after{clear:both}.factory-bootstrap-430 .col-lg-1,.factory-bootstrap-430 .col-lg-10,.factory-bootstrap-430 .col-lg-11,.factory-bootstrap-430 .col-lg-12,.factory-bootstrap-430 .col-lg-2,.factory-bootstrap-430 .col-lg-3,.factory-bootstrap-430 .col-lg-4,.factory-bootstrap-430 .col-lg-5,.factory-bootstrap-430 .col-lg-6,.factory-bootstrap-430 .col-lg-7,.factory-bootstrap-430 .col-lg-8,.factory-bootstrap-430 .col-lg-9,.factory-bootstrap-430 .col-md-1,.factory-bootstrap-430 .col-md-10,.factory-bootstrap-430 .col-md-11,.factory-bootstrap-430 .col-md-12,.factory-bootstrap-430 .col-md-2,.factory-bootstrap-430 .col-md-3,.factory-bootstrap-430 .col-md-4,.factory-bootstrap-430 .col-md-5,.factory-bootstrap-430 .col-md-6,.factory-bootstrap-430 .col-md-7,.factory-bootstrap-430 .col-md-8,.factory-bootstrap-430 .col-md-9,.factory-bootstrap-430 .col-sm-1,.factory-bootstrap-430 .col-sm-10,.factory-bootstrap-430 .col-sm-11,.factory-bootstrap-430 .col-sm-12,.factory-bootstrap-430 .col-sm-2,.factory-bootstrap-430 .col-sm-3,.factory-bootstrap-430 .col-sm-4,.factory-bootstrap-430 .col-sm-5,.factory-bootstrap-430 .col-sm-6,.factory-bootstrap-430 .col-sm-7,.factory-bootstrap-430 .col-sm-8,.factory-bootstrap-430 .col-sm-9,.factory-bootstrap-430 .col-xs-1,.factory-bootstrap-430 .col-xs-10,.factory-bootstrap-430 .col-xs-11,.factory-bootstrap-430 .col-xs-12,.factory-bootstrap-430 .col-xs-2,.factory-bootstrap-430 .col-xs-3,.factory-bootstrap-430 .col-xs-4,.factory-bootstrap-430 .col-xs-5,.factory-bootstrap-430 .col-xs-6,.factory-bootstrap-430 .col-xs-7,.factory-bootstrap-430 .col-xs-8,.factory-bootstrap-430 .col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.factory-bootstrap-430 .col-xs-1,.factory-bootstrap-430 .col-xs-10,.factory-bootstrap-430 .col-xs-11,.factory-bootstrap-430 .col-xs-12,.factory-bootstrap-430 .col-xs-2,.factory-bootstrap-430 .col-xs-3,.factory-bootstrap-430 .col-xs-4,.factory-bootstrap-430 .col-xs-5,.factory-bootstrap-430 .col-xs-6,.factory-bootstrap-430 .col-xs-7,.factory-bootstrap-430 .col-xs-8,.factory-bootstrap-430 .col-xs-9{float:left}.factory-bootstrap-430 .col-xs-12{width:100%}.factory-bootstrap-430 .col-xs-11{width:91.66666666666666%}.factory-bootstrap-430 .col-xs-10{width:83.33333333333334%}.factory-bootstrap-430 .col-xs-9{width:75%}.factory-bootstrap-430 .col-xs-8{width:66.66666666666666%}.factory-bootstrap-430 .col-xs-7{width:58.333333333333336%}.factory-bootstrap-430 .col-xs-6{width:50%}.factory-bootstrap-430 .col-xs-5{width:41.66666666666667%}.factory-bootstrap-430 .col-xs-4{width:33.33333333333333%}.factory-bootstrap-430 .col-xs-3{width:25%}.factory-bootstrap-430 .col-xs-2{width:16.666666666666664%}.factory-bootstrap-430 .col-xs-1{width:8.333333333333332%}.factory-bootstrap-430 .col-xs-pull-12{right:100%}.factory-bootstrap-430 .col-xs-pull-11{right:91.66666666666666%}.factory-bootstrap-430 .col-xs-pull-10{right:83.33333333333334%}.factory-bootstrap-430 .col-xs-pull-9{right:75%}.factory-bootstrap-430 .col-xs-pull-8{right:66.66666666666666%}.factory-bootstrap-430 .col-xs-pull-7{right:58.333333333333336%}.factory-bootstrap-430 .col-xs-pull-6{right:50%}.factory-bootstrap-430 .col-xs-pull-5{right:41.66666666666667%}.factory-bootstrap-430 .col-xs-pull-4{right:33.33333333333333%}.factory-bootstrap-430 .col-xs-pull-3{right:25%}.factory-bootstrap-430 .col-xs-pull-2{right:16.666666666666664%}.factory-bootstrap-430 .col-xs-pull-1{right:8.333333333333332%}.factory-bootstrap-430 .col-xs-pull-0{right:0}.factory-bootstrap-430 .col-xs-push-12{left:100%}.factory-bootstrap-430 .col-xs-push-11{left:91.66666666666666%}.factory-bootstrap-430 .col-xs-push-10{left:83.33333333333334%}.factory-bootstrap-430 .col-xs-push-9{left:75%}.factory-bootstrap-430 .col-xs-push-8{left:66.66666666666666%}.factory-bootstrap-430 .col-xs-push-7{left:58.333333333333336%}.factory-bootstrap-430 .col-xs-push-6{left:50%}.factory-bootstrap-430 .col-xs-push-5{left:41.66666666666667%}.factory-bootstrap-430 .col-xs-push-4{left:33.33333333333333%}.factory-bootstrap-430 .col-xs-push-3{left:25%}.factory-bootstrap-430 .col-xs-push-2{left:16.666666666666664%}.factory-bootstrap-430 .col-xs-push-1{left:8.333333333333332%}.factory-bootstrap-430 .col-xs-push-0{left:0}.factory-bootstrap-430 .col-xs-offset-12{margin-left:100%}.factory-bootstrap-430 .col-xs-offset-11{margin-left:91.66666666666666%}.factory-bootstrap-430 .col-xs-offset-10{margin-left:83.33333333333334%}.factory-bootstrap-430 .col-xs-offset-9{margin-left:75%}.factory-bootstrap-430 .col-xs-offset-8{margin-left:66.66666666666666%}.factory-bootstrap-430 .col-xs-offset-7{margin-left:58.333333333333336%}.factory-bootstrap-430 .col-xs-offset-6{margin-left:50%}.factory-bootstrap-430 .col-xs-offset-5{margin-left:41.66666666666667%}.factory-bootstrap-430 .col-xs-offset-4{margin-left:33.33333333333333%}.factory-bootstrap-430 .col-xs-offset-3{margin-left:25%}.factory-bootstrap-430 .col-xs-offset-2{margin-left:16.666666666666664%}.factory-bootstrap-430 .col-xs-offset-1{margin-left:8.333333333333332%}.factory-bootstrap-430 .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-430 table{max-width:100%;background-color:transparent}.factory-bootstrap-430 th{text-align:left}.factory-bootstrap-430 .table{width:100%;margin-bottom:20px}.factory-bootstrap-430 .table>tbody>tr>td,.factory-bootstrap-430 .table>tbody>tr>th,.factory-bootstrap-430 .table>tfoot>tr>td,.factory-bootstrap-430 .table>tfoot>tr>th,.factory-bootstrap-430 .table>thead>tr>td,.factory-bootstrap-430 .table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.factory-bootstrap-430 .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.factory-bootstrap-430 .table>caption+thead>tr:first-child>td,.factory-bootstrap-430 .table>caption+thead>tr:first-child>th,.factory-bootstrap-430 .table>colgroup+thead>tr:first-child>td,.factory-bootstrap-430 .table>colgroup+thead>tr:first-child>th,.factory-bootstrap-430 .table>thead:first-child>tr:first-child>td,.factory-bootstrap-430 .table>thead:first-child>tr:first-child>th{border-top:0}.factory-bootstrap-430 .table>tbody+tbody{border-top:2px solid #ddd}.factory-bootstrap-430 .table .table{background-color:#fff}.factory-bootstrap-430 .table-condensed>tbody>tr>td,.factory-bootstrap-430 .table-condensed>tbody>tr>th,.factory-bootstrap-430 .table-condensed>tfoot>tr>td,.factory-bootstrap-430 .table-condensed>tfoot>tr>th,.factory-bootstrap-430 .table-condensed>thead>tr>td,.factory-bootstrap-430 .table-condensed>thead>tr>th{padding:5px}.factory-bootstrap-430 .table-bordered,.factory-bootstrap-430 .table-bordered>tbody>tr>td,.factory-bootstrap-430 .table-bordered>tbody>tr>th,.factory-bootstrap-430 .table-bordered>tfoot>tr>td,.factory-bootstrap-430 .table-bordered>tfoot>tr>th,.factory-bootstrap-430 .table-bordered>thead>tr>td,.factory-bootstrap-430 .table-bordered>thead>tr>th{border:1px solid #ddd}.factory-bootstrap-430 .table-bordered>thead>tr>td,.factory-bootstrap-430 .table-bordered>thead>tr>th{border-bottom-width:2px}.factory-bootstrap-430 .table-striped>tbody>tr:nth-child(odd)>td,.factory-bootstrap-430 .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.factory-bootstrap-430 .table-hover>tbody>tr:hover>td,.factory-bootstrap-430 .table-hover>tbody>tr:hover>th{background-color:#f5f5f5}.factory-bootstrap-430 table col[class*=col-]{position:static;display:table-column;float:none}.factory-bootstrap-430 table td[class*=col-],.factory-bootstrap-430 table th[class*=col-]{display:table-cell;float:none}.factory-bootstrap-430 .table>tbody>.active>td,.factory-bootstrap-430 .table>tbody>.active>th,.factory-bootstrap-430 .table>tbody>tr>.active,.factory-bootstrap-430 .table>tfoot>.active>td,.factory-bootstrap-430 .table>tfoot>.active>th,.factory-bootstrap-430 .table>tfoot>tr>.active,.factory-bootstrap-430 .table>thead>.active>td,.factory-bootstrap-430 .table>thead>.active>th,.factory-bootstrap-430 .table>thead>tr>.active{background-color:#f5f5f5}.factory-bootstrap-430 .table-hover>tbody>.active:hover>td,.factory-bootstrap-430 .table-hover>tbody>.active:hover>th,.factory-bootstrap-430 .table-hover>tbody>tr>.active:hover{background-color:#e8e8e8}.factory-bootstrap-430 .table>tbody>.success>td,.factory-bootstrap-430 .table>tbody>.success>th,.factory-bootstrap-430 .table>tbody>tr>.success,.factory-bootstrap-430 .table>tfoot>.success>td,.factory-bootstrap-430 .table>tfoot>.success>th,.factory-bootstrap-430 .table>tfoot>tr>.success,.factory-bootstrap-430 .table>thead>.success>td,.factory-bootstrap-430 .table>thead>.success>th,.factory-bootstrap-430 .table>thead>tr>.success{background-color:#dff0d8}.factory-bootstrap-430 .table-hover>tbody>.success:hover>td,.factory-bootstrap-430 .table-hover>tbody>.success:hover>th,.factory-bootstrap-430 .table-hover>tbody>tr>.success:hover{background-color:#d0e9c6}.factory-bootstrap-430 .table>tbody>.danger>td,.factory-bootstrap-430 .table>tbody>.danger>th,.factory-bootstrap-430 .table>tbody>tr>.danger,.factory-bootstrap-430 .table>tfoot>.danger>td,.factory-bootstrap-430 .table>tfoot>.danger>th,.factory-bootstrap-430 .table>tfoot>tr>.danger,.factory-bootstrap-430 .table>thead>.danger>td,.factory-bootstrap-430 .table>thead>.danger>th,.factory-bootstrap-430 .table>thead>tr>.danger{background-color:#f2dede}.factory-bootstrap-430 .table-hover>tbody>.danger:hover>td,.factory-bootstrap-430 .table-hover>tbody>.danger:hover>th,.factory-bootstrap-430 .table-hover>tbody>tr>.danger:hover{background-color:#ebcccc}.factory-bootstrap-430 .table>tbody>.warning>td,.factory-bootstrap-430 .table>tbody>.warning>th,.factory-bootstrap-430 .table>tbody>tr>.warning,.factory-bootstrap-430 .table>tfoot>.warning>td,.factory-bootstrap-430 .table>tfoot>.warning>th,.factory-bootstrap-430 .table>tfoot>tr>.warning,.factory-bootstrap-430 .table>thead>.warning>td,.factory-bootstrap-430 .table>thead>.warning>th,.factory-bootstrap-430 .table>thead>tr>.warning{background-color:#fcf8e3}.factory-bootstrap-430 .table-hover>tbody>.warning:hover>td,.factory-bootstrap-430 .table-hover>tbody>.warning:hover>th,.factory-bootstrap-430 .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-430 fieldset{padding:0;margin:0;border:0}.factory-bootstrap-430 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-430 label{display:inline-block;margin-bottom:5px;font-weight:700}.factory-bootstrap-430 input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.factory-bootstrap-430 input[type=checkbox],.factory-bootstrap-430 input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}.factory-bootstrap-430 input[type=file]{display:block}.factory-bootstrap-430 select[multiple],.factory-bootstrap-430 select[size]{height:auto}.factory-bootstrap-430 select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}.factory-bootstrap-430 input[type=checkbox]:focus,.factory-bootstrap-430 input[type=file]:focus,.factory-bootstrap-430 input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-430 input[type=number]::-webkit-inner-spin-button,.factory-bootstrap-430 input[type=number]::-webkit-outer-spin-button{height:auto}.factory-bootstrap-430 output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.factory-bootstrap-430 .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-430 .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-430 .form-control:-moz-placeholder{color:#999}.factory-bootstrap-430 .form-control::-moz-placeholder{color:#999;opacity:1}.factory-bootstrap-430 .form-control:-ms-input-placeholder{color:#999}.factory-bootstrap-430 .form-control::-webkit-input-placeholder{color:#999}.factory-bootstrap-430 .form-control[disabled],.factory-bootstrap-430 .form-control[readonly],.factory-bootstrap-430 fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.factory-bootstrap-430 textarea.form-control{height:auto}.factory-bootstrap-430 .form-group{margin-bottom:15px}.factory-bootstrap-430 .checkbox,.factory-bootstrap-430 .radio{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.factory-bootstrap-430 .checkbox label,.factory-bootstrap-430 .radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.factory-bootstrap-430 .checkbox input[type=checkbox],.factory-bootstrap-430 .checkbox-inline input[type=checkbox],.factory-bootstrap-430 .radio input[type=radio],.factory-bootstrap-430 .radio-inline input[type=radio]{float:left;margin-left:-20px}.factory-bootstrap-430 .checkbox+.checkbox,.factory-bootstrap-430 .radio+.radio{margin-top:-5px}.factory-bootstrap-430 .checkbox-inline,.factory-bootstrap-430 .radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.factory-bootstrap-430 .checkbox-inline+.checkbox-inline,.factory-bootstrap-430 .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.factory-bootstrap-430 .checkbox-inline[disabled],.factory-bootstrap-430 .checkbox[disabled],.factory-bootstrap-430 .radio-inline[disabled],.factory-bootstrap-430 .radio[disabled],.factory-bootstrap-430 fieldset[disabled] .checkbox,.factory-bootstrap-430 fieldset[disabled] .checkbox-inline,.factory-bootstrap-430 fieldset[disabled] .radio,.factory-bootstrap-430 fieldset[disabled] .radio-inline,.factory-bootstrap-430 fieldset[disabled] input[type=checkbox],.factory-bootstrap-430 fieldset[disabled] input[type=radio],.factory-bootstrap-430 input[type=checkbox][disabled],.factory-bootstrap-430 input[type=radio][disabled]{cursor:not-allowed}.factory-bootstrap-430 .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-430 select.input-sm{height:30px;line-height:30px}.factory-bootstrap-430 textarea.input-sm{height:auto}.factory-bootstrap-430 .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-430 select.input-lg{height:46px;line-height:46px}.factory-bootstrap-430 textarea.input-lg{height:auto}.factory-bootstrap-430 .has-warning .checkbox,.factory-bootstrap-430 .has-warning .checkbox-inline,.factory-bootstrap-430 .has-warning .control-label,.factory-bootstrap-430 .has-warning .help-block,.factory-bootstrap-430 .has-warning .radio,.factory-bootstrap-430 .has-warning .radio-inline{color:#8a6d3b}.factory-bootstrap-430 .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-430 .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-430 .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.factory-bootstrap-430 .has-error .checkbox,.factory-bootstrap-430 .has-error .checkbox-inline,.factory-bootstrap-430 .has-error .control-label,.factory-bootstrap-430 .has-error .help-block,.factory-bootstrap-430 .has-error .radio,.factory-bootstrap-430 .has-error .radio-inline{color:#a94442}.factory-bootstrap-430 .controls{display:block}.factory-bootstrap-430 .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-430 .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-430 .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.factory-bootstrap-430 .has-success .checkbox,.factory-bootstrap-430 .has-success .checkbox-inline,.factory-bootstrap-430 .has-success .control-label,.factory-bootstrap-430 .has-success .help-block,.factory-bootstrap-430 .has-success .radio,.factory-bootstrap-430 .has-success .radio-inline{color:#3c763d}.factory-bootstrap-430 .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-430 .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-430 .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.factory-bootstrap-430 .form-control-static{margin-bottom:0}.factory-bootstrap-430 .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-430 .form-horizontal .checkbox,.factory-bootstrap-430 .form-horizontal .checkbox-inline,.factory-bootstrap-430 .form-horizontal .control-label,.factory-bootstrap-430 .form-horizontal .radio,.factory-bootstrap-430 .form-horizontal .radio-inline{position:relative;padding-top:7px;margin-top:0;margin-bottom:0}.factory-bootstrap-430 .form-horizontal .control-label{max-width:200px}.factory-bootstrap-430 .form-horizontal .checkbox,.factory-bootstrap-430 .form-horizontal .radio{min-height:27px}.factory-bootstrap-430 .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.factory-bootstrap-430 .form-horizontal .form-group:after,.factory-bootstrap-430 .form-horizontal .form-group:before{display:table;content:" "}.factory-bootstrap-430 .form-horizontal .form-group:after{clear:both}.factory-bootstrap-430 .form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.factory-bootstrap-430 .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-430 .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.factory-bootstrap-430 .btn{text-decoration:none}.factory-bootstrap-430 .btn:focus,.factory-bootstrap-430 .btn:hover{color:#333;text-decoration:none}.factory-bootstrap-430 .btn.disabled,.factory-bootstrap-430 .btn[disabled],.factory-bootstrap-430 fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-430 .btn-default.active,.factory-bootstrap-430 .btn-default:active,.factory-bootstrap-430 .btn-default:focus,.factory-bootstrap-430 .btn-default:hover,.factory-bootstrap-430 .open .dropdown-toggle.btn-default{background:#fafafa;border-color:#999;color:#222}.factory-bootstrap-430 .btn-default.active,.factory-bootstrap-430 .btn-default:active,.factory-bootstrap-430 .open .dropdown-toggle.btn-default{background-image:none}.factory-bootstrap-430 .btn-default.disabled,.factory-bootstrap-430 .btn-default.disabled.active,.factory-bootstrap-430 .btn-default.disabled:active,.factory-bootstrap-430 .btn-default.disabled:focus,.factory-bootstrap-430 .btn-default.disabled:hover,.factory-bootstrap-430 .btn-default[disabled],.factory-bootstrap-430 .btn-default[disabled].active,.factory-bootstrap-430 .btn-default[disabled]:active,.factory-bootstrap-430 .btn-default[disabled]:focus,.factory-bootstrap-430 .btn-default[disabled]:hover,.factory-bootstrap-430 fieldset[disabled] .btn-default,.factory-bootstrap-430 fieldset[disabled] .btn-default.active,.factory-bootstrap-430 fieldset[disabled] .btn-default:active,.factory-bootstrap-430 fieldset[disabled] .btn-default:focus,.factory-bootstrap-430 fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.factory-bootstrap-430 .btn-default .badge{color:#fff;background-color:#fff}.factory-bootstrap-430 .btn-primary.active,.factory-bootstrap-430 .btn-primary:active,.factory-bootstrap-430 .btn-primary:focus,.factory-bootstrap-430 .btn-primary:hover,.factory-bootstrap-430 .open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.factory-bootstrap-430 .btn-primary.active,.factory-bootstrap-430 .btn-primary:active,.factory-bootstrap-430 .open .dropdown-toggle.btn-primary{background-image:none}.factory-bootstrap-430 .btn-primary.disabled,.factory-bootstrap-430 .btn-primary.disabled.active,.factory-bootstrap-430 .btn-primary.disabled:active,.factory-bootstrap-430 .btn-primary.disabled:focus,.factory-bootstrap-430 .btn-primary.disabled:hover,.factory-bootstrap-430 .btn-primary[disabled],.factory-bootstrap-430 .btn-primary[disabled].active,.factory-bootstrap-430 .btn-primary[disabled]:active,.factory-bootstrap-430 .btn-primary[disabled]:focus,.factory-bootstrap-430 .btn-primary[disabled]:hover,.factory-bootstrap-430 fieldset[disabled] .btn-primary,.factory-bootstrap-430 fieldset[disabled] .btn-primary.active,.factory-bootstrap-430 fieldset[disabled] .btn-primary:active,.factory-bootstrap-430 fieldset[disabled] .btn-primary:focus,.factory-bootstrap-430 fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.factory-bootstrap-430 .btn-primary .badge{color:#428bca;background-color:#fff}.factory-bootstrap-430 .btn-warning{color:#fff;background-color:#f0ad4e}.factory-bootstrap-430 .btn-warning.active,.factory-bootstrap-430 .btn-warning:active,.factory-bootstrap-430 .btn-warning:focus,.factory-bootstrap-430 .btn-warning:hover,.factory-bootstrap-430 .open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.factory-bootstrap-430 .btn-warning.active,.factory-bootstrap-430 .btn-warning:active,.factory-bootstrap-430 .open .dropdown-toggle.btn-warning{background-image:none}.factory-bootstrap-430 .btn-warning.disabled,.factory-bootstrap-430 .btn-warning.disabled.active,.factory-bootstrap-430 .btn-warning.disabled:active,.factory-bootstrap-430 .btn-warning.disabled:focus,.factory-bootstrap-430 .btn-warning.disabled:hover,.factory-bootstrap-430 .btn-warning[disabled],.factory-bootstrap-430 .btn-warning[disabled].active,.factory-bootstrap-430 .btn-warning[disabled]:active,.factory-bootstrap-430 .btn-warning[disabled]:focus,.factory-bootstrap-430 .btn-warning[disabled]:hover,.factory-bootstrap-430 fieldset[disabled] .btn-warning,.factory-bootstrap-430 fieldset[disabled] .btn-warning.active,.factory-bootstrap-430 fieldset[disabled] .btn-warning:active,.factory-bootstrap-430 fieldset[disabled] .btn-warning:focus,.factory-bootstrap-430 fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.factory-bootstrap-430 .btn-warning .badge{color:#f0ad4e;background-color:#fff}.factory-bootstrap-430 .btn-success{color:#fff;background-color:#5cb85c}.factory-bootstrap-430 .btn-success.active,.factory-bootstrap-430 .btn-success:active,.factory-bootstrap-430 .btn-success:focus,.factory-bootstrap-430 .btn-success:hover,.factory-bootstrap-430 .open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.factory-bootstrap-430 .btn-success.active,.factory-bootstrap-430 .btn-success:active,.factory-bootstrap-430 .open .dropdown-toggle.btn-success{background-image:none}.factory-bootstrap-430 .btn-success.disabled,.factory-bootstrap-430 .btn-success.disabled.active,.factory-bootstrap-430 .btn-success.disabled:active,.factory-bootstrap-430 .btn-success.disabled:focus,.factory-bootstrap-430 .btn-success.disabled:hover,.factory-bootstrap-430 .btn-success[disabled],.factory-bootstrap-430 .btn-success[disabled].active,.factory-bootstrap-430 .btn-success[disabled]:active,.factory-bootstrap-430 .btn-success[disabled]:focus,.factory-bootstrap-430 .btn-success[disabled]:hover,.factory-bootstrap-430 fieldset[disabled] .btn-success,.factory-bootstrap-430 fieldset[disabled] .btn-success.active,.factory-bootstrap-430 fieldset[disabled] .btn-success:active,.factory-bootstrap-430 fieldset[disabled] .btn-success:focus,.factory-bootstrap-430 fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.factory-bootstrap-430 .btn-success .badge{color:#5cb85c;background-color:#fff}.factory-bootstrap-430 .btn-info{color:#fff;background-color:#5bc0de}.factory-bootstrap-430 .btn-info.active,.factory-bootstrap-430 .btn-info:active,.factory-bootstrap-430 .btn-info:focus,.factory-bootstrap-430 .btn-info:hover,.factory-bootstrap-430 .open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.factory-bootstrap-430 .btn-info.active,.factory-bootstrap-430 .btn-info:active,.factory-bootstrap-430 .open .dropdown-toggle.btn-info{background-image:none}.factory-bootstrap-430 .btn-info.disabled,.factory-bootstrap-430 .btn-info.disabled.active,.factory-bootstrap-430 .btn-info.disabled:active,.factory-bootstrap-430 .btn-info.disabled:focus,.factory-bootstrap-430 .btn-info.disabled:hover,.factory-bootstrap-430 .btn-info[disabled],.factory-bootstrap-430 .btn-info[disabled].active,.factory-bootstrap-430 .btn-info[disabled]:active,.factory-bootstrap-430 .btn-info[disabled]:focus,.factory-bootstrap-430 .btn-info[disabled]:hover,.factory-bootstrap-430 fieldset[disabled] .btn-info,.factory-bootstrap-430 fieldset[disabled] .btn-info.active,.factory-bootstrap-430 fieldset[disabled] .btn-info:active,.factory-bootstrap-430 fieldset[disabled] .btn-info:focus,.factory-bootstrap-430 fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.factory-bootstrap-430 .btn-info .badge{color:#5bc0de;background-color:#fff}.factory-bootstrap-430 .btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.factory-bootstrap-430 .btn-link,.factory-bootstrap-430 .btn-link:active,.factory-bootstrap-430 .btn-link[disabled],.factory-bootstrap-430 fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-430 .btn-link,.factory-bootstrap-430 .btn-link:active,.factory-bootstrap-430 .btn-link:focus,.factory-bootstrap-430 .btn-link:hover{border-color:transparent}.factory-bootstrap-430 .btn-link:focus,.factory-bootstrap-430 .btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.factory-bootstrap-430 .btn-link[disabled]:focus,.factory-bootstrap-430 .btn-link[disabled]:hover,.factory-bootstrap-430 fieldset[disabled] .btn-link:focus,.factory-bootstrap-430 fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.factory-bootstrap-430 .btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-430 .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-430 .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-430 .btn-block{display:block;width:100%;padding-right:0;padding-left:0}.factory-bootstrap-430 .btn-block+.btn-block{margin-top:5px}.factory-bootstrap-430 input[type=button].btn-block,.factory-bootstrap-430 input[type=reset].btn-block,.factory-bootstrap-430 input[type=submit].btn-block{width:100%}.factory-bootstrap-430 .fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.factory-bootstrap-430 .fade.in{opacity:1}.factory-bootstrap-430 .collapse{display:none}.factory-bootstrap-430 .collapse.in{display:block}.factory-bootstrap-430 .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-430 .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-430 .glyphicon:empty{width:1em}.factory-bootstrap-430 .glyphicon-asterisk:before{content:"\2a"}.factory-bootstrap-430 .glyphicon-plus:before{content:"\2b"}.factory-bootstrap-430 .glyphicon-euro:before{content:"\20ac"}.factory-bootstrap-430 .glyphicon-minus:before{content:"\2212"}.factory-bootstrap-430 .glyphicon-cloud:before{content:"\2601"}.factory-bootstrap-430 .glyphicon-envelope:before{content:"\2709"}.factory-bootstrap-430 .glyphicon-pencil:before{content:"\270f"}.factory-bootstrap-430 .glyphicon-glass:before{content:"\e001"}.factory-bootstrap-430 .glyphicon-music:before{content:"\e002"}.factory-bootstrap-430 .glyphicon-search:before{content:"\e003"}.factory-bootstrap-430 .glyphicon-heart:before{content:"\e005"}.factory-bootstrap-430 .glyphicon-star:before{content:"\e006"}.factory-bootstrap-430 .glyphicon-star-empty:before{content:"\e007"}.factory-bootstrap-430 .glyphicon-user:before{content:"\e008"}.factory-bootstrap-430 .glyphicon-film:before{content:"\e009"}.factory-bootstrap-430 .glyphicon-th-large:before{content:"\e010"}.factory-bootstrap-430 .glyphicon-th:before{content:"\e011"}.factory-bootstrap-430 .glyphicon-th-list:before{content:"\e012"}.factory-bootstrap-430 .glyphicon-ok:before{content:"\e013"}.factory-bootstrap-430 .glyphicon-remove:before{content:"\e014"}.factory-bootstrap-430 .glyphicon-zoom-in:before{content:"\e015"}.factory-bootstrap-430 .glyphicon-zoom-out:before{content:"\e016"}.factory-bootstrap-430 .glyphicon-off:before{content:"\e017"}.factory-bootstrap-430 .glyphicon-signal:before{content:"\e018"}.factory-bootstrap-430 .glyphicon-cog:before{content:"\e019"}.factory-bootstrap-430 .glyphicon-trash:before{content:"\e020"}.factory-bootstrap-430 .glyphicon-home:before{content:"\e021"}.factory-bootstrap-430 .glyphicon-file:before{content:"\e022"}.factory-bootstrap-430 .glyphicon-time:before{content:"\e023"}.factory-bootstrap-430 .glyphicon-road:before{content:"\e024"}.factory-bootstrap-430 .glyphicon-download-alt:before{content:"\e025"}.factory-bootstrap-430 .glyphicon-download:before{content:"\e026"}.factory-bootstrap-430 .glyphicon-upload:before{content:"\e027"}.factory-bootstrap-430 .glyphicon-inbox:before{content:"\e028"}.factory-bootstrap-430 .glyphicon-play-circle:before{content:"\e029"}.factory-bootstrap-430 .glyphicon-repeat:before{content:"\e030"}.factory-bootstrap-430 .glyphicon-refresh:before{content:"\e031"}.factory-bootstrap-430 .glyphicon-list-alt:before{content:"\e032"}.factory-bootstrap-430 .glyphicon-lock:before{content:"\e033"}.factory-bootstrap-430 .glyphicon-flag:before{content:"\e034"}.factory-bootstrap-430 .glyphicon-headphones:before{content:"\e035"}.factory-bootstrap-430 .glyphicon-volume-off:before{content:"\e036"}.factory-bootstrap-430 .glyphicon-volume-down:before{content:"\e037"}.factory-bootstrap-430 .glyphicon-volume-up:before{content:"\e038"}.factory-bootstrap-430 .glyphicon-qrcode:before{content:"\e039"}.factory-bootstrap-430 .glyphicon-barcode:before{content:"\e040"}.factory-bootstrap-430 .glyphicon-tag:before{content:"\e041"}.factory-bootstrap-430 .glyphicon-tags:before{content:"\e042"}.factory-bootstrap-430 .glyphicon-book:before{content:"\e043"}.factory-bootstrap-430 .glyphicon-bookmark:before{content:"\e044"}.factory-bootstrap-430 .glyphicon-print:before{content:"\e045"}.factory-bootstrap-430 .glyphicon-camera:before{content:"\e046"}.factory-bootstrap-430 .glyphicon-font:before{content:"\e047"}.factory-bootstrap-430 .glyphicon-bold:before{content:"\e048"}.factory-bootstrap-430 .glyphicon-italic:before{content:"\e049"}.factory-bootstrap-430 .glyphicon-text-height:before{content:"\e050"}.factory-bootstrap-430 .glyphicon-text-width:before{content:"\e051"}.factory-bootstrap-430 .glyphicon-align-left:before{content:"\e052"}.factory-bootstrap-430 .glyphicon-align-center:before{content:"\e053"}.factory-bootstrap-430 .glyphicon-align-right:before{content:"\e054"}.factory-bootstrap-430 .glyphicon-align-justify:before{content:"\e055"}.factory-bootstrap-430 .glyphicon-list:before{content:"\e056"}.factory-bootstrap-430 .glyphicon-indent-left:before{content:"\e057"}.factory-bootstrap-430 .glyphicon-indent-right:before{content:"\e058"}.factory-bootstrap-430 .glyphicon-facetime-video:before{content:"\e059"}.factory-bootstrap-430 .glyphicon-picture:before{content:"\e060"}.factory-bootstrap-430 .glyphicon-map-marker:before{content:"\e062"}.factory-bootstrap-430 .glyphicon-adjust:before{content:"\e063"}.factory-bootstrap-430 .glyphicon-tint:before{content:"\e064"}.factory-bootstrap-430 .glyphicon-edit:before{content:"\e065"}.factory-bootstrap-430 .glyphicon-share:before{content:"\e066"}.factory-bootstrap-430 .glyphicon-check:before{content:"\e067"}.factory-bootstrap-430 .glyphicon-move:before{content:"\e068"}.factory-bootstrap-430 .glyphicon-step-backward:before{content:"\e069"}.factory-bootstrap-430 .glyphicon-fast-backward:before{content:"\e070"}.factory-bootstrap-430 .glyphicon-backward:before{content:"\e071"}.factory-bootstrap-430 .glyphicon-play:before{content:"\e072"}.factory-bootstrap-430 .glyphicon-pause:before{content:"\e073"}.factory-bootstrap-430 .glyphicon-stop:before{content:"\e074"}.factory-bootstrap-430 .glyphicon-forward:before{content:"\e075"}.factory-bootstrap-430 .glyphicon-fast-forward:before{content:"\e076"}.factory-bootstrap-430 .glyphicon-step-forward:before{content:"\e077"}.factory-bootstrap-430 .glyphicon-eject:before{content:"\e078"}.factory-bootstrap-430 .glyphicon-chevron-left:before{content:"\e079"}.factory-bootstrap-430 .glyphicon-chevron-right:before{content:"\e080"}.factory-bootstrap-430 .glyphicon-plus-sign:before{content:"\e081"}.factory-bootstrap-430 .glyphicon-minus-sign:before{content:"\e082"}.factory-bootstrap-430 .glyphicon-remove-sign:before{content:"\e083"}.factory-bootstrap-430 .glyphicon-ok-sign:before{content:"\e084"}.factory-bootstrap-430 .glyphicon-question-sign:before{content:"\e085"}.factory-bootstrap-430 .glyphicon-info-sign:before{content:"\e086"}.factory-bootstrap-430 .glyphicon-screenshot:before{content:"\e087"}.factory-bootstrap-430 .glyphicon-remove-circle:before{content:"\e088"}.factory-bootstrap-430 .glyphicon-ok-circle:before{content:"\e089"}.factory-bootstrap-430 .glyphicon-ban-circle:before{content:"\e090"}.factory-bootstrap-430 .glyphicon-arrow-left:before{content:"\e091"}.factory-bootstrap-430 .glyphicon-arrow-right:before{content:"\e092"}.factory-bootstrap-430 .glyphicon-arrow-up:before{content:"\e093"}.factory-bootstrap-430 .glyphicon-arrow-down:before{content:"\e094"}.factory-bootstrap-430 .glyphicon-share-alt:before{content:"\e095"}.factory-bootstrap-430 .glyphicon-resize-full:before{content:"\e096"}.factory-bootstrap-430 .glyphicon-resize-small:before{content:"\e097"}.factory-bootstrap-430 .glyphicon-exclamation-sign:before{content:"\e101"}.factory-bootstrap-430 .glyphicon-gift:before{content:"\e102"}.factory-bootstrap-430 .glyphicon-leaf:before{content:"\e103"}.factory-bootstrap-430 .glyphicon-fire:before{content:"\e104"}.factory-bootstrap-430 .glyphicon-eye-open:before{content:"\e105"}.factory-bootstrap-430 .glyphicon-eye-close:before{content:"\e106"}.factory-bootstrap-430 .glyphicon-warning-sign:before{content:"\e107"}.factory-bootstrap-430 .glyphicon-plane:before{content:"\e108"}.factory-bootstrap-430 .glyphicon-calendar:before{content:"\e109"}.factory-bootstrap-430 .glyphicon-random:before{content:"\e110"}.factory-bootstrap-430 .glyphicon-comment:before{content:"\e111"}.factory-bootstrap-430 .glyphicon-magnet:before{content:"\e112"}.factory-bootstrap-430 .glyphicon-chevron-up:before{content:"\e113"}.factory-bootstrap-430 .glyphicon-chevron-down:before{content:"\e114"}.factory-bootstrap-430 .glyphicon-retweet:before{content:"\e115"}.factory-bootstrap-430 .glyphicon-shopping-cart:before{content:"\e116"}.factory-bootstrap-430 .glyphicon-folder-close:before{content:"\e117"}.factory-bootstrap-430 .glyphicon-folder-open:before{content:"\e118"}.factory-bootstrap-430 .glyphicon-resize-vertical:before{content:"\e119"}.factory-bootstrap-430 .glyphicon-resize-horizontal:before{content:"\e120"}.factory-bootstrap-430 .glyphicon-hdd:before{content:"\e121"}.factory-bootstrap-430 .glyphicon-bullhorn:before{content:"\e122"}.factory-bootstrap-430 .glyphicon-bell:before{content:"\e123"}.factory-bootstrap-430 .glyphicon-certificate:before{content:"\e124"}.factory-bootstrap-430 .glyphicon-thumbs-up:before{content:"\e125"}.factory-bootstrap-430 .glyphicon-thumbs-down:before{content:"\e126"}.factory-bootstrap-430 .glyphicon-hand-right:before{content:"\e127"}.factory-bootstrap-430 .glyphicon-hand-left:before{content:"\e128"}.factory-bootstrap-430 .glyphicon-hand-up:before{content:"\e129"}.factory-bootstrap-430 .glyphicon-hand-down:before{content:"\e130"}.factory-bootstrap-430 .glyphicon-circle-arrow-right:before{content:"\e131"}.factory-bootstrap-430 .glyphicon-circle-arrow-left:before{content:"\e132"}.factory-bootstrap-430 .glyphicon-circle-arrow-up:before{content:"\e133"}.factory-bootstrap-430 .glyphicon-circle-arrow-down:before{content:"\e134"}.factory-bootstrap-430 .glyphicon-globe:before{content:"\e135"}.factory-bootstrap-430 .glyphicon-wrench:before{content:"\e136"}.factory-bootstrap-430 .glyphicon-tasks:before{content:"\e137"}.factory-bootstrap-430 .glyphicon-filter:before{content:"\e138"}.factory-bootstrap-430 .glyphicon-briefcase:before{content:"\e139"}.factory-bootstrap-430 .glyphicon-fullscreen:before{content:"\e140"}.factory-bootstrap-430 .glyphicon-dashboard:before{content:"\e141"}.factory-bootstrap-430 .glyphicon-paperclip:before{content:"\e142"}.factory-bootstrap-430 .glyphicon-heart-empty:before{content:"\e143"}.factory-bootstrap-430 .glyphicon-link:before{content:"\e144"}.factory-bootstrap-430 .glyphicon-phone:before{content:"\e145"}.factory-bootstrap-430 .glyphicon-pushpin:before{content:"\e146"}.factory-bootstrap-430 .glyphicon-usd:before{content:"\e148"}.factory-bootstrap-430 .glyphicon-gbp:before{content:"\e149"}.factory-bootstrap-430 .glyphicon-sort:before{content:"\e150"}.factory-bootstrap-430 .glyphicon-sort-by-alphabet:before{content:"\e151"}.factory-bootstrap-430 .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.factory-bootstrap-430 .glyphicon-sort-by-order:before{content:"\e153"}.factory-bootstrap-430 .glyphicon-sort-by-order-alt:before{content:"\e154"}.factory-bootstrap-430 .glyphicon-sort-by-attributes:before{content:"\e155"}.factory-bootstrap-430 .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.factory-bootstrap-430 .glyphicon-unchecked:before{content:"\e157"}.factory-bootstrap-430 .glyphicon-expand:before{content:"\e158"}.factory-bootstrap-430 .glyphicon-collapse-down:before{content:"\e159"}.factory-bootstrap-430 .glyphicon-collapse-up:before{content:"\e160"}.factory-bootstrap-430 .glyphicon-log-in:before{content:"\e161"}.factory-bootstrap-430 .glyphicon-flash:before{content:"\e162"}.factory-bootstrap-430 .glyphicon-log-out:before{content:"\e163"}.factory-bootstrap-430 .glyphicon-new-window:before{content:"\e164"}.factory-bootstrap-430 .glyphicon-record:before{content:"\e165"}.factory-bootstrap-430 .glyphicon-save:before{content:"\e166"}.factory-bootstrap-430 .glyphicon-open:before{content:"\e167"}.factory-bootstrap-430 .glyphicon-saved:before{content:"\e168"}.factory-bootstrap-430 .glyphicon-import:before{content:"\e169"}.factory-bootstrap-430 .glyphicon-export:before{content:"\e170"}.factory-bootstrap-430 .glyphicon-send:before{content:"\e171"}.factory-bootstrap-430 .glyphicon-floppy-disk:before{content:"\e172"}.factory-bootstrap-430 .glyphicon-floppy-saved:before{content:"\e173"}.factory-bootstrap-430 .glyphicon-floppy-remove:before{content:"\e174"}.factory-bootstrap-430 .glyphicon-floppy-save:before{content:"\e175"}.factory-bootstrap-430 .glyphicon-floppy-open:before{content:"\e176"}.factory-bootstrap-430 .glyphicon-credit-card:before{content:"\e177"}.factory-bootstrap-430 .glyphicon-transfer:before{content:"\e178"}.factory-bootstrap-430 .glyphicon-cutlery:before{content:"\e179"}.factory-bootstrap-430 .glyphicon-header:before{content:"\e180"}.factory-bootstrap-430 .glyphicon-compressed:before{content:"\e181"}.factory-bootstrap-430 .glyphicon-earphone:before{content:"\e182"}.factory-bootstrap-430 .glyphicon-phone-alt:before{content:"\e183"}.factory-bootstrap-430 .glyphicon-tower:before{content:"\e184"}.factory-bootstrap-430 .glyphicon-stats:before{content:"\e185"}.factory-bootstrap-430 .glyphicon-sd-video:before{content:"\e186"}.factory-bootstrap-430 .glyphicon-hd-video:before{content:"\e187"}.factory-bootstrap-430 .glyphicon-subtitles:before{content:"\e188"}.factory-bootstrap-430 .glyphicon-sound-stereo:before{content:"\e189"}.factory-bootstrap-430 .glyphicon-sound-dolby:before{content:"\e190"}.factory-bootstrap-430 .glyphicon-sound-5-1:before{content:"\e191"}.factory-bootstrap-430 .glyphicon-sound-6-1:before{content:"\e192"}.factory-bootstrap-430 .glyphicon-sound-7-1:before{content:"\e193"}.factory-bootstrap-430 .glyphicon-copyright-mark:before{content:"\e194"}.factory-bootstrap-430 .glyphicon-registration-mark:before{content:"\e195"}.factory-bootstrap-430 .glyphicon-cloud-download:before{content:"\e197"}.factory-bootstrap-430 .glyphicon-cloud-upload:before{content:"\e198"}.factory-bootstrap-430 .glyphicon-tree-conifer:before{content:"\e199"}.factory-bootstrap-430 .glyphicon-tree-deciduous:before{content:"\e200"}.factory-bootstrap-430 .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-430 .dropdown{position:relative}.factory-bootstrap-430 .dropdown-toggle:focus{outline:0}.factory-bootstrap-430 .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-430 .dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-430 .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-430 .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-430 .dropdown-menu>li>a:focus,.factory-bootstrap-430 .dropdown-menu>li>a:hover{color:#262626;text-decoration:none}.factory-bootstrap-430 .dropdown-menu>.active>a,.factory-bootstrap-430 .dropdown-menu>.active>a:focus,.factory-bootstrap-430 .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0}.factory-bootstrap-430 .dropdown-menu>.disabled>a,.factory-bootstrap-430 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-430 .dropdown-menu>.disabled>a:hover{color:#999}.factory-bootstrap-430 .dropdown-menu>.disabled>a:focus,.factory-bootstrap-430 .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-430 .open>.dropdown-menu{display:block}.factory-bootstrap-430 .open>a{outline:0}.factory-bootstrap-430 .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.factory-bootstrap-430 .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.factory-bootstrap-430 .pull-right>.dropdown-menu{right:0;left:auto}.factory-bootstrap-430 .dropup .caret,.factory-bootstrap-430 .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.factory-bootstrap-430 .dropup .dropdown-menu,.factory-bootstrap-430 .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-430 .btn-group,.factory-bootstrap-430 .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.factory-bootstrap-430 .btn-group-vertical>.btn,.factory-bootstrap-430 .btn-group>.btn{position:relative;float:left}.factory-bootstrap-430 .btn-group-vertical>.btn.active,.factory-bootstrap-430 .btn-group-vertical>.btn:active,.factory-bootstrap-430 .btn-group-vertical>.btn:focus,.factory-bootstrap-430 .btn-group-vertical>.btn:hover,.factory-bootstrap-430 .btn-group>.btn.active,.factory-bootstrap-430 .btn-group>.btn:active,.factory-bootstrap-430 .btn-group>.btn:focus,.factory-bootstrap-430 .btn-group>.btn:hover{z-index:2}.factory-bootstrap-430 .btn-group-vertical>.btn:focus,.factory-bootstrap-430 .btn-group>.btn:focus{outline:0}.factory-bootstrap-430 .btn-group .btn+.btn,.factory-bootstrap-430 .btn-group .btn+.btn-group,.factory-bootstrap-430 .btn-group .btn-group+.btn,.factory-bootstrap-430 .btn-group .btn-group+.btn-group{margin-left:-1px}.factory-bootstrap-430 .btn-toolbar:after,.factory-bootstrap-430 .btn-toolbar:before{display:table;content:" "}.factory-bootstrap-430 .btn-toolbar:after{clear:both}.factory-bootstrap-430 .btn-toolbar .btn-group{float:left}.factory-bootstrap-430 .btn-toolbar>.btn+.btn,.factory-bootstrap-430 .btn-toolbar>.btn+.btn-group,.factory-bootstrap-430 .btn-toolbar>.btn-group+.btn,.factory-bootstrap-430 .btn-toolbar>.btn-group+.btn-group{margin-left:5px}.factory-bootstrap-430 .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.factory-bootstrap-430 .btn-group>.btn:first-child{margin-left:0}.factory-bootstrap-430 .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-430 .btn-group>.btn:last-child:not(:first-child),.factory-bootstrap-430 .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-430 .btn-group>.btn-group{float:left}.factory-bootstrap-430 .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-430 .btn-group>.btn-group:first-child>.btn:last-child,.factory-bootstrap-430 .btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-430 .btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-430 .btn-group .dropdown-toggle:active,.factory-bootstrap-430 .btn-group.open .dropdown-toggle{outline:0}.factory-bootstrap-430 .btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-430 .btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-430 .btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-430 .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.factory-bootstrap-430 .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.factory-bootstrap-430 .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-430 .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.factory-bootstrap-430 .btn-group{border:4px solid #f9f9f9;border-radius:4px}.factory-bootstrap-430 .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-430 .btn .caret{margin-left:0}.factory-bootstrap-430 .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.factory-bootstrap-430 .dropup .btn-lg .caret{border-width:0 5px 5px}.factory-bootstrap-430 .btn-group-vertical>.btn,.factory-bootstrap-430 .btn-group-vertical>.btn-group,.factory-bootstrap-430 .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.factory-bootstrap-430 .btn-group-vertical>.btn-group:after,.factory-bootstrap-430 .btn-group-vertical>.btn-group:before{display:table;content:" "}.factory-bootstrap-430 .btn-group-vertical>.btn-group:after{clear:both}.factory-bootstrap-430 .btn-group-vertical>.btn-group>.btn{float:none}.factory-bootstrap-430 .btn-group-vertical>.btn+.btn,.factory-bootstrap-430 .btn-group-vertical>.btn+.btn-group,.factory-bootstrap-430 .btn-group-vertical>.btn-group+.btn,.factory-bootstrap-430 .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.factory-bootstrap-430 .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-430 .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-430 .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-430 .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.factory-bootstrap-430 .btn-group-vertical>.btn-group:first-child>.btn:last-child,.factory-bootstrap-430 .btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-430 .btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-430 .btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.factory-bootstrap-430 .btn-group-justified>.btn,.factory-bootstrap-430 .btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.factory-bootstrap-430 .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-430 .input-group{position:relative;display:table;border-collapse:separate}.factory-bootstrap-430 .input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.factory-bootstrap-430 .input-group .form-control{width:100%;margin-bottom:0}.factory-bootstrap-430 .input-group-lg>.form-control,.factory-bootstrap-430 .input-group-lg>.input-group-addon,.factory-bootstrap-430 .input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.factory-bootstrap-430 select.input-group-lg>.form-control,.factory-bootstrap-430 select.input-group-lg>.input-group-addon,.factory-bootstrap-430 select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}.factory-bootstrap-430 textarea.input-group-lg>.form-control,.factory-bootstrap-430 textarea.input-group-lg>.input-group-addon,.factory-bootstrap-430 textarea.input-group-lg>.input-group-btn>.btn{height:auto}.factory-bootstrap-430 .input-group-sm>.form-control,.factory-bootstrap-430 .input-group-sm>.input-group-addon,.factory-bootstrap-430 .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.factory-bootstrap-430 select.input-group-sm>.form-control,.factory-bootstrap-430 select.input-group-sm>.input-group-addon,.factory-bootstrap-430 select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}.factory-bootstrap-430 textarea.input-group-sm>.form-control,.factory-bootstrap-430 textarea.input-group-sm>.input-group-addon,.factory-bootstrap-430 textarea.input-group-sm>.input-group-btn>.btn{height:auto}.factory-bootstrap-430 .input-group .form-control,.factory-bootstrap-430 .input-group-addon,.factory-bootstrap-430 .input-group-btn{display:table-cell}.factory-bootstrap-430 .input-group .form-control:not(:first-child):not(:last-child),.factory-bootstrap-430 .input-group-addon:not(:first-child):not(:last-child),.factory-bootstrap-430 .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.factory-bootstrap-430 .input-group-addon,.factory-bootstrap-430 .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.factory-bootstrap-430 .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-430 .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.factory-bootstrap-430 .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.factory-bootstrap-430 .input-group-addon input[type=checkbox],.factory-bootstrap-430 .input-group-addon input[type=radio]{margin-top:0}.factory-bootstrap-430 .input-group .form-control:first-child,.factory-bootstrap-430 .input-group-addon:first-child,.factory-bootstrap-430 .input-group-btn:first-child>.btn,.factory-bootstrap-430 .input-group-btn:first-child>.dropdown-toggle,.factory-bootstrap-430 .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.factory-bootstrap-430 .input-group-addon:first-child{border-right:0}.factory-bootstrap-430 .input-group .form-control:last-child,.factory-bootstrap-430 .input-group-addon:last-child,.factory-bootstrap-430 .input-group-btn:first-child>.btn:not(:first-child),.factory-bootstrap-430 .input-group-btn:last-child>.btn,.factory-bootstrap-430 .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.factory-bootstrap-430 .input-group-addon:last-child{border-left:0}.factory-bootstrap-430 .input-group-btn{position:relative;white-space:nowrap}.factory-bootstrap-430 .input-group-btn:first-child>.btn{margin-right:-1px}.factory-bootstrap-430 .input-group-btn:last-child>.btn{margin-left:-1px}.factory-bootstrap-430 .input-group-btn>.btn{position:relative}.factory-bootstrap-430 .input-group-btn>.btn+.btn{margin-left:-4px}.factory-bootstrap-430 .input-group-btn>.btn:active,.factory-bootstrap-430 .input-group-btn>.btn:hover{z-index:2}.factory-bootstrap-430 .nav{padding-left:0;margin-bottom:0;list-style:none}.factory-bootstrap-430 .nav:after,.factory-bootstrap-430 .nav:before{display:table;content:" "}.factory-bootstrap-430 .nav:after{clear:both}.factory-bootstrap-430 .nav>li{position:relative;display:block}.factory-bootstrap-430 .nav>li>a{position:relative;display:block;padding:10px 15px}.factory-bootstrap-430 .nav>li>a:focus,.factory-bootstrap-430 .nav>li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-430 .nav>li.disabled>a{color:#999}.factory-bootstrap-430 .nav>li.disabled>a:focus,.factory-bootstrap-430 .nav>li.disabled>a:hover{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.factory-bootstrap-430 .nav .open>a,.factory-bootstrap-430 .nav .open>a:focus,.factory-bootstrap-430 .nav .open>a:hover{background-color:#eee;border-color:#428bca}.factory-bootstrap-430 .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.factory-bootstrap-430 .nav>li>a>img{max-width:none}.factory-bootstrap-430 .nav-tabs{border-bottom:1px solid #ddd}.factory-bootstrap-430 .nav-tabs>li{float:left;margin-bottom:-1px}.factory-bootstrap-430 .nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.factory-bootstrap-430 .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.factory-bootstrap-430 .nav-tabs>li.active>a,.factory-bootstrap-430 .nav-tabs>li.active>a:focus,.factory-bootstrap-430 .nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.factory-bootstrap-430 .nav-tabs.nav-justified{width:100%;border-bottom:0}.factory-bootstrap-430 .nav-tabs.nav-justified>li{float:none}.factory-bootstrap-430 .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-430 .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-430 .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-430 .nav-tabs.nav-justified>.active>a,.factory-bootstrap-430 .nav-tabs.nav-justified>.active>a:focus,.factory-bootstrap-430 .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-430 .nav-pills>li{float:left}.factory-bootstrap-430 .nav-pills>li>a{border-radius:4px}.factory-bootstrap-430 .nav-pills>li+li{margin-left:2px}.factory-bootstrap-430 .nav-pills>li.active>a,.factory-bootstrap-430 .nav-pills>li.active>a:focus,.factory-bootstrap-430 .nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.factory-bootstrap-430 .nav-stacked>li{float:none}.factory-bootstrap-430 .nav-stacked>li+li{margin-top:2px;margin-left:0}.factory-bootstrap-430 .nav-justified{width:100%}.factory-bootstrap-430 .nav-justified>li{float:none}.factory-bootstrap-430 .nav-justified>li>a{margin-bottom:5px;text-align:center}.factory-bootstrap-430 .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-430 .nav-tabs-justified{border-bottom:0}.factory-bootstrap-430 .nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.factory-bootstrap-430 .nav-tabs-justified>.active>a,.factory-bootstrap-430 .nav-tabs-justified>.active>a:focus,.factory-bootstrap-430 .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-430 .tab-content>.tab-pane{display:none}.factory-bootstrap-430 .tab-content>.active{display:block}.factory-bootstrap-430 .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-430 .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.factory-bootstrap-430 .navbar:after,.factory-bootstrap-430 .navbar:before{display:table;content:" "}.factory-bootstrap-430 .navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.factory-bootstrap-430 .navbar-header:after,.factory-bootstrap-430 .navbar-header:before{display:table;content:" "}.factory-bootstrap-430 .navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.factory-bootstrap-430 .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-430 .navbar-collapse:after,.factory-bootstrap-430 .navbar-collapse:before{display:table;content:" "}.factory-bootstrap-430 .navbar-collapse:after{clear:both}.factory-bootstrap-430 .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-430 .container>.navbar-collapse,.factory-bootstrap-430 .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-430 .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.factory-bootstrap-430 .navbar-fixed-bottom,.factory-bootstrap-430 .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-430 .navbar-fixed-top{top:0;border-width:0 0 1px}.factory-bootstrap-430 .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.factory-bootstrap-430 .navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px}.factory-bootstrap-430 .navbar-brand:focus,.factory-bootstrap-430 .navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.factory-bootstrap-430 .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-430 .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.factory-bootstrap-430 .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.factory-bootstrap-430 .navbar-nav{margin:7.5px -15px}.factory-bootstrap-430 .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-430 .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-430 .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-430 .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.factory-bootstrap-430 .navbar-nav.pull-right>li>.dropdown-menu,.factory-bootstrap-430 .navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.factory-bootstrap-430 .navbar-btn{margin-top:8px;margin-bottom:8px}.factory-bootstrap-430 .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.factory-bootstrap-430 .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.factory-bootstrap-430 .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-430 .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.factory-bootstrap-430 .navbar-default .navbar-brand{color:#777}.factory-bootstrap-430 .navbar-default .navbar-brand:focus,.factory-bootstrap-430 .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.factory-bootstrap-430 .navbar-default .navbar-nav>li>a,.factory-bootstrap-430 .navbar-default .navbar-text{color:#777}.factory-bootstrap-430 .navbar-default .navbar-nav>li>a:focus,.factory-bootstrap-430 .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.factory-bootstrap-430 .navbar-default .navbar-nav>.active>a,.factory-bootstrap-430 .navbar-default .navbar-nav>.active>a:focus,.factory-bootstrap-430 .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.factory-bootstrap-430 .navbar-default .navbar-nav>.disabled>a,.factory-bootstrap-430 .navbar-default .navbar-nav>.disabled>a:focus,.factory-bootstrap-430 .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.factory-bootstrap-430 .navbar-default .navbar-toggle{border-color:#ddd}.factory-bootstrap-430 .navbar-default .navbar-toggle:focus,.factory-bootstrap-430 .navbar-default .navbar-toggle:hover{background-color:#ddd}.factory-bootstrap-430 .navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.factory-bootstrap-430 .navbar-default .navbar-collapse,.factory-bootstrap-430 .navbar-default .navbar-form{border-color:#e7e7e7}.factory-bootstrap-430 .navbar-default .navbar-nav>.open>a,.factory-bootstrap-430 .navbar-default .navbar-nav>.open>a:focus,.factory-bootstrap-430 .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-430 .navbar-default .navbar-link{color:#777}.factory-bootstrap-430 .navbar-default .navbar-link:hover{color:#333}.factory-bootstrap-430 .navbar-inverse{background-color:#222;border-color:#080808}.factory-bootstrap-430 .navbar-inverse .navbar-brand{color:#999}.factory-bootstrap-430 .navbar-inverse .navbar-brand:focus,.factory-bootstrap-430 .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.factory-bootstrap-430 .navbar-inverse .navbar-nav>li>a,.factory-bootstrap-430 .navbar-inverse .navbar-text{color:#999}.factory-bootstrap-430 .navbar-inverse .navbar-nav>li>a:focus,.factory-bootstrap-430 .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.factory-bootstrap-430 .navbar-inverse .navbar-nav>.active>a,.factory-bootstrap-430 .navbar-inverse .navbar-nav>.active>a:focus,.factory-bootstrap-430 .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.factory-bootstrap-430 .navbar-inverse .navbar-nav>.disabled>a,.factory-bootstrap-430 .navbar-inverse .navbar-nav>.disabled>a:focus,.factory-bootstrap-430 .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.factory-bootstrap-430 .navbar-inverse .navbar-toggle{border-color:#333}.factory-bootstrap-430 .navbar-inverse .navbar-toggle:focus,.factory-bootstrap-430 .navbar-inverse .navbar-toggle:hover{background-color:#333}.factory-bootstrap-430 .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.factory-bootstrap-430 .navbar-inverse .navbar-collapse,.factory-bootstrap-430 .navbar-inverse .navbar-form{border-color:#101010}.factory-bootstrap-430 .navbar-inverse .navbar-nav>.open>a,.factory-bootstrap-430 .navbar-inverse .navbar-nav>.open>a:focus,.factory-bootstrap-430 .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-430 .navbar-inverse .navbar-link{color:#999}.factory-bootstrap-430 .navbar-inverse .navbar-link:hover{color:#fff}.factory-bootstrap-430 .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.factory-bootstrap-430 .breadcrumb>li{display:inline-block}.factory-bootstrap-430 .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.factory-bootstrap-430 .breadcrumb>.active{color:#999}.factory-bootstrap-430 .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.factory-bootstrap-430 .pagination>li{display:inline}.factory-bootstrap-430 .pagination>li>a,.factory-bootstrap-430 .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-430 .pagination>li:first-child>a,.factory-bootstrap-430 .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.factory-bootstrap-430 .pagination>li:last-child>a,.factory-bootstrap-430 .pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.factory-bootstrap-430 .pagination>li>a:focus,.factory-bootstrap-430 .pagination>li>a:hover,.factory-bootstrap-430 .pagination>li>span:focus,.factory-bootstrap-430 .pagination>li>span:hover{background-color:#eee}.factory-bootstrap-430 .pagination>.active>a,.factory-bootstrap-430 .pagination>.active>a:focus,.factory-bootstrap-430 .pagination>.active>a:hover,.factory-bootstrap-430 .pagination>.active>span,.factory-bootstrap-430 .pagination>.active>span:focus,.factory-bootstrap-430 .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#1e8cbe;border-color:#0074a2}.factory-bootstrap-430 .pagination>.disabled>a,.factory-bootstrap-430 .pagination>.disabled>a:focus,.factory-bootstrap-430 .pagination>.disabled>a:hover,.factory-bootstrap-430 .pagination>.disabled>span,.factory-bootstrap-430 .pagination>.disabled>span:focus,.factory-bootstrap-430 .pagination>.disabled>span:hover{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.factory-bootstrap-430 .pagination-lg>li>a,.factory-bootstrap-430 .pagination-lg>li>span{padding:10px 16px;font-size:18px}.factory-bootstrap-430 .pagination-lg>li:first-child>a,.factory-bootstrap-430 .pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.factory-bootstrap-430 .pagination-lg>li:last-child>a,.factory-bootstrap-430 .pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.factory-bootstrap-430 .pagination-sm>li>a,.factory-bootstrap-430 .pagination-sm>li>span{padding:5px 10px;font-size:12px}.factory-bootstrap-430 .pagination-sm>li:first-child>a,.factory-bootstrap-430 .pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.factory-bootstrap-430 .pagination-sm>li:last-child>a,.factory-bootstrap-430 .pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.factory-bootstrap-430 .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.factory-bootstrap-430 .pager:after,.factory-bootstrap-430 .pager:before{display:table;content:" "}.factory-bootstrap-430 .pager:after{clear:both}.factory-bootstrap-430 .pager li{display:inline}.factory-bootstrap-430 .pager li>a,.factory-bootstrap-430 .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.factory-bootstrap-430 .pager li>a:focus,.factory-bootstrap-430 .pager li>a:hover{text-decoration:none;background-color:#eee}.factory-bootstrap-430 .pager .next>a,.factory-bootstrap-430 .pager .next>span{float:right}.factory-bootstrap-430 .pager .previous>a,.factory-bootstrap-430 .pager .previous>span{float:left}.factory-bootstrap-430 .pager .disabled>a,.factory-bootstrap-430 .pager .disabled>a:focus,.factory-bootstrap-430 .pager .disabled>a:hover,.factory-bootstrap-430 .pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.factory-bootstrap-430 .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-430 .label[href]:focus,.factory-bootstrap-430 .label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-430 .label:empty{display:none}.factory-bootstrap-430 .btn .label{position:relative;top:-1px}.factory-bootstrap-430 .label-default{background-color:#999}.factory-bootstrap-430 .label-default[href]:focus,.factory-bootstrap-430 .label-default[href]:hover{background-color:gray}.factory-bootstrap-430 .label-primary{background-color:#428bca}.factory-bootstrap-430 .label-primary[href]:focus,.factory-bootstrap-430 .label-primary[href]:hover{background-color:#3071a9}.factory-bootstrap-430 .label-success{background-color:#5cb85c}.factory-bootstrap-430 .label-success[href]:focus,.factory-bootstrap-430 .label-success[href]:hover{background-color:#449d44}.factory-bootstrap-430 .label-info{background-color:#5bc0de}.factory-bootstrap-430 .label-info[href]:focus,.factory-bootstrap-430 .label-info[href]:hover{background-color:#31b0d5}.factory-bootstrap-430 .label-warning{background-color:#f0ad4e}.factory-bootstrap-430 .label-warning[href]:focus,.factory-bootstrap-430 .label-warning[href]:hover{background-color:#ec971f}.factory-bootstrap-430 .label-danger{background-color:#d9534f}.factory-bootstrap-430 .label-danger[href]:focus,.factory-bootstrap-430 .label-danger[href]:hover{background-color:#c9302c}.factory-bootstrap-430 .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-430 .badge:empty{display:none}.factory-bootstrap-430 .btn .badge{position:relative;top:-1px}.factory-bootstrap-430 a.badge:focus,.factory-bootstrap-430 a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.factory-bootstrap-430 .nav-pills>.active>a>.badge,.factory-bootstrap-430 a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.factory-bootstrap-430 .nav-pills>li>a>.badge{margin-left:3px}.factory-bootstrap-430 .jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.factory-bootstrap-430 .jumbotron .h1,.factory-bootstrap-430 .jumbotron h1{line-height:1;color:inherit}.factory-bootstrap-430 .jumbotron p{line-height:1.4}.factory-bootstrap-430 .container .jumbotron{border-radius:6px}.factory-bootstrap-430 .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-430 .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-430 .thumbnail a>img,.factory-bootstrap-430 .thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}.factory-bootstrap-430 a.thumbnail.active,.factory-bootstrap-430 a.thumbnail:focus,.factory-bootstrap-430 a.thumbnail:hover{border-color:#428bca}.factory-bootstrap-430 .thumbnail .caption{padding:9px;color:#333}.factory-bootstrap-430 .alert{border:1px solid transparent;border-radius:4px}.factory-bootstrap-430 .alert h4{margin-top:0;color:inherit}.factory-bootstrap-430 .alert .alert-link{font-weight:700}.factory-bootstrap-430 .alert>p,.factory-bootstrap-430 .alert>ul{margin-bottom:0}.factory-bootstrap-430 .alert>p+p{margin-top:5px}.factory-bootstrap-430 .alert-dismissable{padding-right:35px}.factory-bootstrap-430 .alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.factory-bootstrap-430 .alert-info{color:#31708f;background-color:#d9edf7}.factory-bootstrap-430 .alert-info hr{border-top-color:#a6e1ec}.factory-bootstrap-430 .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-430 .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-430 .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-430 .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-430 .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.factory-bootstrap-430 .progress-bar-success{background-color:#5cb85c}.factory-bootstrap-430 .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-430 .progress-bar-info{background-color:#5bc0de}.factory-bootstrap-430 .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-430 .progress-bar-warning{background-color:#f0ad4e}.factory-bootstrap-430 .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-430 .progress-bar-danger{background-color:#d9534f}.factory-bootstrap-430 .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-430 .media,.factory-bootstrap-430 .media-body{overflow:hidden;zoom:1}.factory-bootstrap-430 .media,.factory-bootstrap-430 .media .media{margin-top:15px}.factory-bootstrap-430 .media:first-child{margin-top:0}.factory-bootstrap-430 .media-object{display:block}.factory-bootstrap-430 .media-heading{margin:0 0 5px}.factory-bootstrap-430 .media>.pull-left{margin-right:10px}.factory-bootstrap-430 .media>.pull-right{margin-left:10px}.factory-bootstrap-430 .media-list{padding-left:0;list-style:none}.factory-bootstrap-430 .list-group{padding-left:0;margin-bottom:20px}.factory-bootstrap-430 .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.factory-bootstrap-430 .list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.factory-bootstrap-430 .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.factory-bootstrap-430 .list-group-item>.badge{float:right}.factory-bootstrap-430 .list-group-item>.badge+.badge{margin-right:5px}.factory-bootstrap-430 a.list-group-item{color:#555}.factory-bootstrap-430 a.list-group-item .list-group-item-heading{color:#333}.factory-bootstrap-430 a.list-group-item:focus,.factory-bootstrap-430 a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}.factory-bootstrap-430 a.list-group-item.active,.factory-bootstrap-430 a.list-group-item.active:focus,.factory-bootstrap-430 a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-430 a.list-group-item.active .list-group-item-heading,.factory-bootstrap-430 a.list-group-item.active:focus .list-group-item-heading,.factory-bootstrap-430 a.list-group-item.active:hover .list-group-item-heading{color:inherit}.factory-bootstrap-430 a.list-group-item.active .list-group-item-text,.factory-bootstrap-430 a.list-group-item.active:focus .list-group-item-text,.factory-bootstrap-430 a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.factory-bootstrap-430 .list-group-item-heading{margin-top:0;margin-bottom:5px}.factory-bootstrap-430 .list-group-item-text{margin-bottom:0;line-height:1.3}.factory-bootstrap-430 .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px}.factory-bootstrap-430 .panel-body{padding:15px}.factory-bootstrap-430 .panel-body:after,.factory-bootstrap-430 .panel-body:before{display:table;content:" "}.factory-bootstrap-430 .panel-body:after{clear:both}.factory-bootstrap-430 .panel>.list-group{margin-bottom:0}.factory-bootstrap-430 .panel>.list-group .list-group-item{border-width:1px 0}.factory-bootstrap-430 .panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.factory-bootstrap-430 .panel>.list-group .list-group-item:last-child{border-bottom:0}.factory-bootstrap-430 .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.factory-bootstrap-430 .panel>.table,.factory-bootstrap-430 .panel>.table-responsive>.table{margin-bottom:0}.factory-bootstrap-430 .panel>.panel-body+.table,.factory-bootstrap-430 .panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.factory-bootstrap-430 .panel>.table>tbody:first-child td,.factory-bootstrap-430 .panel>.table>tbody:first-child th{border-top:0}.factory-bootstrap-430 .panel>.table-bordered,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered{border:0}.factory-bootstrap-430 .panel>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-430 .panel>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-430 .panel>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-430 .panel>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-430 .panel>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-430 .panel>.table-bordered>thead>tr>th:first-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.factory-bootstrap-430 .panel>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-430 .panel>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-430 .panel>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-430 .panel>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-430 .panel>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-430 .panel>.table-bordered>thead>tr>th:last-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.factory-bootstrap-430 .panel>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-430 .panel>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-430 .panel>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-430 .panel>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-430 .panel>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-430 .panel>.table-bordered>thead>tr:last-child>th,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.factory-bootstrap-430 .panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.factory-bootstrap-430 .panel>.table-responsive{margin-bottom:0;border:0}.factory-bootstrap-430 .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.factory-bootstrap-430 .panel-heading>.dropdown .dropdown-toggle{color:inherit}.factory-bootstrap-430 .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.factory-bootstrap-430 .panel-title>a{color:inherit}.factory-bootstrap-430 .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-430 .panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.factory-bootstrap-430 .panel-group .panel+.panel{margin-top:5px}.factory-bootstrap-430 .panel-group .panel-heading{border-bottom:0}.factory-bootstrap-430 .panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.factory-bootstrap-430 .panel-group .panel-footer{border-top:0}.factory-bootstrap-430 .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.factory-bootstrap-430 .panel-default{border-color:#ddd}.factory-bootstrap-430 .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.factory-bootstrap-430 .panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.factory-bootstrap-430 .panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.factory-bootstrap-430 .panel-primary{border-color:#428bca}.factory-bootstrap-430 .panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.factory-bootstrap-430 .panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.factory-bootstrap-430 .panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.factory-bootstrap-430 .panel-success{border-color:#d6e9c6}.factory-bootstrap-430 .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.factory-bootstrap-430 .panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.factory-bootstrap-430 .panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.factory-bootstrap-430 .panel-warning{border-color:#faebcc}.factory-bootstrap-430 .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.factory-bootstrap-430 .panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.factory-bootstrap-430 .panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.factory-bootstrap-430 .panel-danger{border-color:#ebccd1}.factory-bootstrap-430 .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.factory-bootstrap-430 .panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.factory-bootstrap-430 .panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.factory-bootstrap-430 .panel-info{border-color:#bce8f1}.factory-bootstrap-430 .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.factory-bootstrap-430 .panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.factory-bootstrap-430 .panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.factory-bootstrap-430 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px}.factory-bootstrap-430 .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.factory-bootstrap-430 .well-lg{padding:24px;border-radius:6px}.factory-bootstrap-430 .well-sm{padding:9px;border-radius:3px}.factory-bootstrap-430 .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-430 .alert .close{position:relative;top:-8px;right:-7px}.factory-bootstrap-430 .close:focus,.factory-bootstrap-430 .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-430 button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.factory-bootstrap-430 .modal-open{overflow:hidden}.factory-bootstrap-430 .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-430 .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-430 .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.factory-bootstrap-430 .modal-dialog{position:relative;z-index:1050;width:auto;margin:10px}.factory-bootstrap-430 .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-430 .modal-backdrop,.factory-bootstrap-430-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.factory-bootstrap-430 .modal-backdrop.fade,.factory-bootstrap-430-modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.factory-bootstrap-430 .modal-backdrop.in,.factory-bootstrap-430-modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.factory-bootstrap-430 .modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.factory-bootstrap-430 .modal-header .close{margin-top:-2px}.factory-bootstrap-430 .modal-title{margin:0;line-height:1.428571429}.factory-bootstrap-430 .modal-body{position:relative;padding:20px;max-height:none}.factory-bootstrap-430 .modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.factory-bootstrap-430 .modal-footer:after,.factory-bootstrap-430 .modal-footer:before{display:table;content:" "}.factory-bootstrap-430 .modal-footer:after{clear:both}.factory-bootstrap-430 .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.factory-bootstrap-430 .modal-footer .btn-group .btn+.btn{margin-left:-1px}.factory-bootstrap-430 .modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.factory-bootstrap-430 .modal-dialog{width:600px;margin:30px auto}.factory-bootstrap-430 .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-430 .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-430 .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-430 .tooltip.top{padding:5px 0;margin-top:-3px}.factory-bootstrap-430 .tooltip.right{padding:0 5px;margin-left:3px}.factory-bootstrap-430 .tooltip.bottom{padding:5px 0;margin-top:3px}.factory-bootstrap-430 .tooltip.left{padding:0 5px;margin-left:-3px}.factory-bootstrap-430 .tooltip-inner{width:400px;padding:15px 20px;color:#fff;text-align:left;text-decoration:none;background-color:#673ab7;border-radius:3px}.factory-bootstrap-430 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-430 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-430 .tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-430 .tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#673ab7;border-width:5px 5px 0}.factory-bootstrap-430 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#673ab7;border-width:5px 5px 5px 0}.factory-bootstrap-430 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#673ab7;border-width:5px 0 5px 5px}.factory-bootstrap-430 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-430 .tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-430 .tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#673ab7;border-width:0 5px 5px}.factory-bootstrap-430 .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-430 .popover.top{margin-top:-10px}.factory-bootstrap-430 .popover.right{margin-left:10px}.factory-bootstrap-430 .popover.bottom{margin-top:10px}.factory-bootstrap-430 .popover.left{margin-left:-10px}.factory-bootstrap-430 .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-430 .popover-content{padding:9px 14px}.factory-bootstrap-430 .popover .arrow,.factory-bootstrap-430 .popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.factory-bootstrap-430 .popover .arrow{border-width:11px}.factory-bootstrap-430 .popover .arrow:after{border-width:10px;content:""}.factory-bootstrap-430 .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-430 .popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.factory-bootstrap-430 .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-430 .popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.factory-bootstrap-430 .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-430 .popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.factory-bootstrap-430 .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-430 .popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.factory-bootstrap-430 .carousel{position:relative}.factory-bootstrap-430 .carousel-inner{position:relative;width:100%;overflow:hidden}.factory-bootstrap-430 .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.factory-bootstrap-430 .carousel-inner>.item>a>img,.factory-bootstrap-430 .carousel-inner>.item>img{display:block;height:auto;max-width:100%;line-height:1}.factory-bootstrap-430 .carousel-inner>.active,.factory-bootstrap-430 .carousel-inner>.next,.factory-bootstrap-430 .carousel-inner>.prev{display:block}.factory-bootstrap-430 .carousel-inner>.active{left:0}.factory-bootstrap-430 .carousel-inner>.next,.factory-bootstrap-430 .carousel-inner>.prev{position:absolute;top:0;width:100%}.factory-bootstrap-430 .carousel-inner>.next{left:100%}.factory-bootstrap-430 .carousel-inner>.prev{left:-100%}.factory-bootstrap-430 .carousel-inner>.next.left,.factory-bootstrap-430 .carousel-inner>.prev.right{left:0}.factory-bootstrap-430 .carousel-inner>.active.left{left:-100%}.factory-bootstrap-430 .carousel-inner>.active.right{left:100%}.factory-bootstrap-430 .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-430 .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-430 .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-430 .carousel-control:focus,.factory-bootstrap-430 .carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9;filter:alpha(opacity=90)}.factory-bootstrap-430 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-430 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-430 .carousel-control .icon-next,.factory-bootstrap-430 .carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.factory-bootstrap-430 .carousel-control .glyphicon-chevron-left,.factory-bootstrap-430 .carousel-control .icon-prev{left:50%}.factory-bootstrap-430 .carousel-control .glyphicon-chevron-right,.factory-bootstrap-430 .carousel-control .icon-next{right:50%}.factory-bootstrap-430 .carousel-control .icon-next,.factory-bootstrap-430 .carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.factory-bootstrap-430 .carousel-control .icon-prev:before{content:'\2039'}.factory-bootstrap-430 .carousel-control .icon-next:before{content:'\203a'}.factory-bootstrap-430 .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-430 .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-430 .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.factory-bootstrap-430 .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-430 .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-430 .clearfix:after,.factory-bootstrap-430 .clearfix:before{display:table;content:" "}.factory-bootstrap-430 .clearfix:after{clear:both}.factory-bootstrap-430 .center-block{display:block;margin-right:auto;margin-left:auto}.factory-bootstrap-430 .pull-right{float:right!important}.factory-bootstrap-430 .pull-left{float:left!important}.factory-bootstrap-430 .hide{display:none!important}.factory-bootstrap-430 .show{display:block!important}.factory-bootstrap-430 .invisible{visibility:hidden}.factory-bootstrap-430 .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.factory-bootstrap-430 .hidden{display:none!important;visibility:hidden!important}.factory-bootstrap-430 .affix{position:fixed}@-ms-viewport{width:device-width}.factory-bootstrap-430 .visible-lg,.factory-bootstrap-430 .visible-md,.factory-bootstrap-430 .visible-sm,.factory-bootstrap-430 .visible-xs,.factory-bootstrap-430 td.visible-lg,.factory-bootstrap-430 td.visible-md,.factory-bootstrap-430 td.visible-sm,.factory-bootstrap-430 td.visible-xs,.factory-bootstrap-430 th.visible-lg,.factory-bootstrap-430 th.visible-md,.factory-bootstrap-430 th.visible-sm,.factory-bootstrap-430 th.visible-xs,.factory-bootstrap-430 tr.visible-lg,.factory-bootstrap-430 tr.visible-md,.factory-bootstrap-430 tr.visible-sm,.factory-bootstrap-430 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-430 .hidden-xs{display:block!important}.factory-bootstrap-430 table.hidden-xs{display:table}.factory-bootstrap-430 tr.hidden-xs{display:table-row!important}.factory-bootstrap-430 td.hidden-xs,.factory-bootstrap-430 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-430 .hidden-sm{display:block!important}.factory-bootstrap-430 table.hidden-sm{display:table}.factory-bootstrap-430 tr.hidden-sm{display:table-row!important}.factory-bootstrap-430 td.hidden-sm,.factory-bootstrap-430 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-430 .hidden-md{display:block!important}.factory-bootstrap-430 table.hidden-md{display:table}.factory-bootstrap-430 tr.hidden-md{display:table-row!important}.factory-bootstrap-430 td.hidden-md,.factory-bootstrap-430 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-430 .hidden-lg{display:block!important}.factory-bootstrap-430 table.hidden-lg{display:table}.factory-bootstrap-430 tr.hidden-lg{display:table-row!important}.factory-bootstrap-430 td.hidden-lg,.factory-bootstrap-430 th.hidden-lg{display:table-cell!important}@media (max-width:767px){.factory-bootstrap-430 .hidden-lg.hidden-xs,.factory-bootstrap-430 td.hidden-lg.hidden-xs,.factory-bootstrap-430 th.hidden-lg.hidden-xs,.factory-bootstrap-430 tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.factory-bootstrap-430 .hidden-lg.hidden-sm,.factory-bootstrap-430 td.hidden-lg.hidden-sm,.factory-bootstrap-430 th.hidden-lg.hidden-sm,.factory-bootstrap-430 tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.factory-bootstrap-430 .hidden-lg.hidden-md,.factory-bootstrap-430 td.hidden-lg.hidden-md,.factory-bootstrap-430 th.hidden-lg.hidden-md,.factory-bootstrap-430 tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.factory-bootstrap-430 .hidden-lg,.factory-bootstrap-430 td.hidden-lg,.factory-bootstrap-430 th.hidden-lg,.factory-bootstrap-430 tr.hidden-lg{display:none!important}}.factory-bootstrap-430 .visible-print,.factory-bootstrap-430 td.visible-print,.factory-bootstrap-430 th.visible-print,.factory-bootstrap-430 tr.visible-print{display:none!important}@media print{.factory-bootstrap-430 .visible-print{display:block!important}.factory-bootstrap-430 table.visible-print{display:table}.factory-bootstrap-430 tr.visible-print{display:table-row!important}.factory-bootstrap-430 td.visible-print,.factory-bootstrap-430 th.visible-print{display:table-cell!important}.factory-bootstrap-430 .hidden-print,.factory-bootstrap-430 td.hidden-print,.factory-bootstrap-430 th.hidden-print,.factory-bootstrap-430 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-430 .btn-danger,.factory-bootstrap-430 .btn-default,.factory-bootstrap-430 .btn-info,.factory-bootstrap-430 .btn-primary,.factory-bootstrap-430 .btn-success,.factory-bootstrap-430 .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-430 .btn-danger.active,.factory-bootstrap-430 .btn-danger:active,.factory-bootstrap-430 .btn-default.active,.factory-bootstrap-430 .btn-default:active,.factory-bootstrap-430 .btn-info.active,.factory-bootstrap-430 .btn-info:active,.factory-bootstrap-430 .btn-primary.active,.factory-bootstrap-430 .btn-primary:active,.factory-bootstrap-430 .btn-success.active,.factory-bootstrap-430 .btn-success:active,.factory-bootstrap-430 .btn-warning.active,.factory-bootstrap-430 .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-430 .btn.active,.factory-bootstrap-430 .btn:active{background-image:none}.factory-bootstrap-430 .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-430 .btn-default.active,.factory-bootstrap-430 .btn-default:active{background-color:#fff;border-color:#dbdbdb}.factory-bootstrap-430 .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-430 .btn-gold:focus,.factory-bootstrap-430 .btn-gold:hover{background:#fef0a1}.factory-bootstrap-430 .btn-gold.active,.factory-bootstrap-430 .btn-gold:active{background:#fef0a1;-webkit-box-shadow:inset 0 3px 8px 0 #f8ba36;box-shadow:inset 0 3px 8px 0 #f8ba36}.factory-bootstrap-430 .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-430 .btn-primary:focus,.factory-bootstrap-430 .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-430 .btn-primary.active,.factory-bootstrap-430 .btn-primary:active{background-color:#2d6ca2;border-color:#2b669a}.factory-bootstrap-430 .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-430 .btn-success:focus,.factory-bootstrap-430 .btn-success:hover{background-color:#419641;background-position:0 -15px}.factory-bootstrap-430 .btn-success.active,.factory-bootstrap-430 .btn-success:active{background-color:#419641;border-color:#3e8f3e}.factory-bootstrap-430 .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-430 .btn-warning:focus,.factory-bootstrap-430 .btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.factory-bootstrap-430 .btn-warning.active,.factory-bootstrap-430 .btn-warning:active{background-color:#eb9316;border-color:#e38d13}.factory-bootstrap-430 .btn-danger{color:#fff;background:#d9534f;border-color:#d43f3a}.factory-bootstrap-430 .btn-danger.active,.factory-bootstrap-430 .btn-danger:active,.factory-bootstrap-430 .btn-danger:focus,.factory-bootstrap-430 .btn-danger:hover,.factory-bootstrap-430 .open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.factory-bootstrap-430 .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-430 .btn-info:focus,.factory-bootstrap-430 .btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.factory-bootstrap-430 .btn-info.active,.factory-bootstrap-430 .btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.factory-bootstrap-430 .img-thumbnail,.factory-bootstrap-430 .thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.factory-bootstrap-430 .dropdown-menu>li>a:focus,.factory-bootstrap-430 .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-430 .dropdown-menu>.active>a,.factory-bootstrap-430 .dropdown-menu>.active>a:focus,.factory-bootstrap-430 .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-430 .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-430 .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-430 .navbar-brand,.factory-bootstrap-430 .navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.factory-bootstrap-430 .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-430 .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-430 .navbar-inverse .navbar-brand,.factory-bootstrap-430 .navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.factory-bootstrap-430 .navbar-fixed-bottom,.factory-bootstrap-430 .navbar-fixed-top,.factory-bootstrap-430 .navbar-static-top{border-radius:0}.factory-bootstrap-430 .alert{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-430 .alert .actions{padding-top:10px}.factory-bootstrap-430 .alert-success{color:#3c763d;background-color:#dff0d8;border-bottom:2px solid #c8e5bc}.factory-bootstrap-430 .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-430 .alert{text-shadow:none;box-shadow:none;margin:0;margin-top:10px;margin-bottom:10px;padding:10px}.factory-bootstrap-430 .alert-normal,.factory-bootstrap-430 .alert-warning{background:#fcf8e3;color:#8a6d3b;border:1px solid #b8823b}.factory-bootstrap-430 .alert-danger{background:#cf4944;color:#fff;border-bottom:2px solid #b23e3a}.factory-bootstrap-430 .alert-danger a:not(.btn),.factory-bootstrap-430 .alert-error a:not(.btn){color:#fff}.factory-bootstrap-430 .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-430 .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-430 .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-430 .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-430 .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-430 .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-430 .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-430 .list-group-item.active,.factory-bootstrap-430 .list-group-item.active:focus,.factory-bootstrap-430 .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-430 .panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.factory-bootstrap-430 .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-430 .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-430 .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-430 .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-430 .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-430 .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-430 .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-430 .factory-after{margin-left:7px;display:inline-block}.factory-bootstrap-430 .factory-hidden{display:none}.factory-bootstrap-430 .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-430 .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-430 .btn-primary:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:disabled,.factory-bootstrap-430 .btn-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.factory-bootstrap-430 .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-430 .pagination>.active>a,.factory-bootstrap-430 .pagination>.active>a:focus,.factory-bootstrap-430 .pagination>.active>a:hover,.factory-bootstrap-430 .pagination>.active>span,.factory-bootstrap-430 .pagination>.active>span:focus,.factory-bootstrap-430 .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-430 .factory-form-group .factory-legend{padding:9px 12px;background-color:#f9f9f9}.factory-bootstrap-430 .factory-form-group .factory-title{font-weight:700;font-size:14px;line-height:14px;color:#555;margin:0}.factory-bootstrap-430 .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-430 .factory-form-group .factory-hint-icon.factory-hint-icon-green{background:#8bc34a}.factory-bootstrap-430 .factory-form-group .factory-hint-icon.factory-hint-icon-grey{background:#9e9e9e}.factory-bootstrap-430 .factory-form-group .factory-hint-icon.factory-hint-icon-red{background:#E91E63}.factory-bootstrap-430 .factory-form-group .factory-hint{margin:0;font-size:12px;line-height:16px;margin-top:6px}.factory-bootstrap-430 .factory-form-group+.factory-form-group{margin-top:30px}.factory-bootstrap-430 .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-430 .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-430 .btn-primary:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:disabled,.factory-bootstrap-430 .btn-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.factory-bootstrap-430 .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-430 .pagination>.active>a,.factory-bootstrap-430 .pagination>.active>a:focus,.factory-bootstrap-430 .pagination>.active>a:hover,.factory-bootstrap-430 .pagination>.active>span,.factory-bootstrap-430 .pagination>.active>span:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:disabled,.factory-bootstrap-430 .btn-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.factory-bootstrap-430 .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-430 .pagination>.active>a,.factory-bootstrap-430 .pagination>.active>a:focus,.factory-bootstrap-430 .pagination>.active>a:hover,.factory-bootstrap-430 .pagination>.active>span,.factory-bootstrap-430 .pagination>.active>span:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:disabled,.factory-bootstrap-430 .btn-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.factory-bootstrap-430 .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-430 .pagination>.active>a,.factory-bootstrap-430 .pagination>.active>a:focus,.factory-bootstrap-430 .pagination>.active>a:hover,.factory-bootstrap-430 .pagination>.active>span,.factory-bootstrap-430 .pagination>.active>span:focus,.factory-bootstrap-430 .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-430 .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-430 .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-430 .btn-primary:focus,.factory-bootstrap-430 .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-430 .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-430 .btn-primary:disabled,.factory-bootstrap-430 .btn-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.factory-bootstrap-430 .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-430 .pagination>.active>a,.factory-bootstrap-430 .pagination>.active>a:focus,.factory-bootstrap-430 .pagination>.active>a:hover,.factory-bootstrap-430 .pagination>.active>span,.factory-bootstrap-430 .pagination>.active>span:focus,.factory-bootstrap-430 .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-430 .factory-buttons-way{float:right;position:relative;top:-25px;left:5px;border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-430 .factory-buttons-way{border:3px solid #f9f9f9;border-radius:4px}.factory-bootstrap-430 .factory-buttons-way button{padding-left:10px;padding-right:10px}.factory-bootstrap-430 .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-430 .factory-checkbox-tumbler-hint{margin-top:5px}.factory-bootstrap-430 .factory-checkbox-tumbler-hint .factory-tumbler-content{display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-430 .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-430 .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-430 .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-430 .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-430 .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-430 .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-430 .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-430 .factory-dropdown.factory-buttons-way .fa{margin-right:6px;position:relative}.factory-bootstrap-430 .factory-dropdown.factory-buttons-way{border:0;border-radius:0}.factory-bootstrap-430 .factory-hints .factory-hint{margin-top:5px;display:inline-block;background-color:#ffd;padding:1px 5px}.admin-color-light .factory-bootstrap-430 .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-430 .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-430 .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-430 .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-430 .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-430 .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-430 .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-430 .factory-dropdown.factory-ddslick-way .dd-select{background-color:#fff!important}.factory-bootstrap-430 .factory-dropdown.factory-ddslick-way label{margin-bottom:1px}.factory-bootstrap-430 .factory-dropdown.factory-ddslick-way .dd-option,.factory-bootstrap-430 .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-430 .factory-mtextbox-item{position:relative;margin-bottom:5px}.factory-bootstrap-430 .factory-mtextbox-item input,.factory-mtextbox-remove-item{display:inline-block}.factory-bootstrap-430 .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-430 .factory-mtextbox-item .factory-mtextbox-remove-item:focus,.factory-bootstrap-430 .factory-mtextbox-item .factory-mtextbox-remove-item:hover{box-shadow:none;outline:0}.factory-bootstrap-430 .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-430 .factory-more-link-content{border-top:1px dashed #DDD;padding-top:25px;width:100%;padding-right:20px;position:relative}.factory-bootstrap-430 .factory-tab .factory-more-link-show{display:inline-block;text-decoration:none;border-bottom:1px dotted #21759b;position:relative}.factory-bootstrap-430 .factory-tab .factory-more-link-show:hover{border-color:#d54e21}.factory-bootstrap-430 .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-430 .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.factoryBootstrap430_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.factoryBootstrap430_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.attr("checked","checked"),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.removeAttr("checked"),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]&&(console.log(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.attr("checked","checked"),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.removeAttr("checked"),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]&&(console.log(l[m]),a(m).val(l[m]))}}}},this.executeEvents(this.$result)};a.fn.factoryBootstrap430_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.factoryBootstrap430_checkboxControl.Constructor=b,a(function(){a(".factory-bootstrap-430 .factory-checkbox.factory-buttons-way").factoryBootstrap430_checkboxControl()})}(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.factoryBootstrap430_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.factoryBootstrap430_dropdownControl.Constructor=b,a(function(){a(".factory-bootstrap-430 .factory-dropdown").factoryBootstrap430_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.factoryBootstrap430_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.factoryBootstrap430_listControl.Constructor=b,a(function(){a(".factory-bootstrap-430 .factory-list").factoryBootstrap430_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.factoryBootstrap430_MultipleTextboxControl=function(){return this.each(function(){new b(this)})},a(function(){a(".factory-bootstrap-430 .factory-multiple-textbox-group").factoryBootstrap430_MultipleTextboxControl()})}(jQuery);
|
libs/factory/bootstrap/boot.php
CHANGED
@@ -10,37 +10,37 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
// module provides function only for the admin area
|
18 |
-
if
|
19 |
return;
|
20 |
}
|
21 |
|
22 |
-
if
|
23 |
return;
|
24 |
}
|
25 |
|
26 |
-
define(
|
27 |
-
define(
|
28 |
|
29 |
-
if
|
30 |
-
define(
|
31 |
}
|
32 |
|
33 |
-
define(
|
34 |
-
define(
|
35 |
|
36 |
-
require_once(
|
37 |
|
38 |
/**
|
39 |
-
* @param
|
40 |
*/
|
41 |
-
add_action(
|
42 |
-
$manager = new
|
43 |
-
$plugin->setBootstap(
|
44 |
-
}
|
45 |
|
46 |
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
// module provides function only for the admin area
|
18 |
+
if( !is_admin() ) {
|
19 |
return;
|
20 |
}
|
21 |
|
22 |
+
if( defined('FACTORY_BOOTSTRAP_430_LOADED') ) {
|
23 |
return;
|
24 |
}
|
25 |
|
26 |
+
define('FACTORY_BOOTSTRAP_430_VERSION', '4.3.0');
|
27 |
+
define('FACTORY_BOOTSTRAP_430_LOADED', true);
|
28 |
|
29 |
+
if( !defined('FACTORY_FLAT_ADMIN') ) {
|
30 |
+
define('FACTORY_FLAT_ADMIN', true);
|
31 |
}
|
32 |
|
33 |
+
define('FACTORY_BOOTSTRAP_430_DIR', dirname(__FILE__));
|
34 |
+
define('FACTORY_BOOTSTRAP_430_URL', plugins_url(null, __FILE__));
|
35 |
|
36 |
+
require_once(FACTORY_BOOTSTRAP_430_DIR . '/includes/functions.php');
|
37 |
|
38 |
/**
|
39 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
40 |
*/
|
41 |
+
add_action('wbcr_factory_bootstrap_430_plugin_created', function ($plugin) {
|
42 |
+
$manager = new Wbcr_FactoryBootstrap430_Manager($plugin);
|
43 |
+
$plugin->setBootstap($manager);
|
44 |
+
});
|
45 |
|
46 |
|
libs/factory/bootstrap/includes/functions.php
CHANGED
@@ -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,7 +51,7 @@ class Wbcr_FactoryBootstrap421_Manager {
|
|
51 |
*
|
52 |
* @since 1.0.0
|
53 |
*/
|
54 |
-
public function __construct(
|
55 |
$this->plugin = $plugin;
|
56 |
|
57 |
add_action( 'admin_enqueue_scripts', [ $this, 'loadAssets' ] );
|
@@ -111,8 +111,8 @@ class Wbcr_FactoryBootstrap421_Manager {
|
|
111 |
*/
|
112 |
public function loadAssets( $hook ) {
|
113 |
|
114 |
-
do_action( '
|
115 |
-
do_action( '
|
116 |
|
117 |
$dependencies = [];
|
118 |
if ( ! empty( $this->scripts ) ) {
|
@@ -137,64 +137,14 @@ class Wbcr_FactoryBootstrap421_Manager {
|
|
137 |
if ( ! empty( $this->styles ) ) {
|
138 |
$this->enqueueScripts( $this->styles, 'css', $dependencies );
|
139 |
}
|
140 |
-
|
141 |
-
$user_id = get_current_user_id();
|
142 |
-
$color_name = get_user_meta( $user_id, 'admin_color', true );
|
143 |
-
|
144 |
-
if ( $color_name !== 'fresh' ) {
|
145 |
-
if ( file_exists( FACTORY_BOOTSTRAP_421_DIR . '/assets/flat/css/bootstrap.' . $color_name . '.css' ) ) {
|
146 |
-
wp_enqueue_style( 'wbcr-factory-bootstrap-421-colors', FACTORY_BOOTSTRAP_421_URL . '/assets/flat/css/bootstrap.' . $color_name . '.css' );
|
147 |
-
}
|
148 |
-
}
|
149 |
-
|
150 |
-
if ( $color_name == 'light' ) {
|
151 |
-
$primary_dark = '#037c9a';
|
152 |
-
$primary_light = '#04a4cc';
|
153 |
-
} else if ( $color_name == 'blue' ) {
|
154 |
-
$primary_dark = '#d39323';
|
155 |
-
$primary_light = '#e1a948';
|
156 |
-
} else if ( $color_name == 'coffee' ) {
|
157 |
-
$primary_dark = '#b78a66';
|
158 |
-
$primary_light = '#c7a589';
|
159 |
-
} else if ( $color_name == 'ectoplasm' ) {
|
160 |
-
$primary_dark = '#839237';
|
161 |
-
$primary_light = '#a3b745';
|
162 |
-
} else if ( $color_name == 'ocean' ) {
|
163 |
-
$primary_dark = '#80a583';
|
164 |
-
$primary_light = '#9ebaa0';
|
165 |
-
} else if ( $color_name == 'midnight' ) {
|
166 |
-
$primary_dark = '#d02a21';
|
167 |
-
$primary_light = '#e14d43';
|
168 |
-
} else if ( $color_name == 'sunrise' ) {
|
169 |
-
$primary_dark = '#c36822';
|
170 |
-
$primary_light = '#dd823b';
|
171 |
-
} else {
|
172 |
-
$primary_dark = '#0074a2';
|
173 |
-
$primary_light = '#2ea2cc';
|
174 |
-
}
|
175 |
-
|
176 |
-
?>
|
177 |
-
<script>
|
178 |
-
if( !window.factory ) {
|
179 |
-
window.factory = {};
|
180 |
-
}
|
181 |
-
if( !window.factory.factoryBootstrap421 ) {
|
182 |
-
window.factory.factoryBootstrap421 = {};
|
183 |
-
}
|
184 |
-
window.factory.factoryBootstrap421.colors = {
|
185 |
-
primaryDark: '<?php echo $primary_dark ?>',
|
186 |
-
primaryLight: '<?php echo $primary_light ?>'
|
187 |
-
};
|
188 |
-
</script>
|
189 |
-
<?php
|
190 |
}
|
191 |
|
192 |
/**
|
193 |
-
* @param array $
|
194 |
* @param string $type
|
195 |
* @param array $dependencies
|
196 |
*/
|
197 |
-
protected function enqueueScripts( array $
|
198 |
|
199 |
$is_first = true;
|
200 |
|
@@ -206,8 +156,8 @@ class Wbcr_FactoryBootstrap421_Manager {
|
|
206 |
$cache_enable = apply_filters( 'wbcr/factory/bootstrap/cache_enable', true );
|
207 |
|
208 |
$cache_id = md5( implode( ',', $this->scripts ) . $type . $this->plugin->getPluginVersion() );
|
209 |
-
$cache_dir_path =
|
210 |
-
$cache_dir_url =
|
211 |
|
212 |
$cache_filepath = $cache_dir_path . $cache_id . ".min." . $type;
|
213 |
$cache_fileurl = $cache_dir_url . $cache_id . ".min." . $type;
|
@@ -231,10 +181,10 @@ class Wbcr_FactoryBootstrap421_Manager {
|
|
231 |
}
|
232 |
|
233 |
$concat_files = [];
|
234 |
-
foreach ( $
|
235 |
$script_to_load = sanitize_text_field( $script_to_load );
|
236 |
if ( $cache_enable && $cache_dir_exists ) {
|
237 |
-
$fname =
|
238 |
if ( file_exists( $fname ) ) {
|
239 |
$f = @fopen( $fname, 'r' );
|
240 |
$concat_files[] = @fread( $f, filesize( $fname ) );
|
@@ -242,9 +192,9 @@ class Wbcr_FactoryBootstrap421_Manager {
|
|
242 |
}
|
243 |
} else {
|
244 |
if ( $type == 'js' ) {
|
245 |
-
wp_enqueue_script( md5( $script_to_load ),
|
246 |
} else {
|
247 |
-
wp_enqueue_style( md5( $script_to_load ),
|
248 |
}
|
249 |
$is_first = false;
|
250 |
}
|
20 |
*
|
21 |
* @since 3.2.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryBootstrap430_Manager {
|
24 |
|
25 |
/**
|
26 |
* A plugin for which the manager was created.
|
27 |
*
|
28 |
* @since 3.2.0
|
29 |
+
* @var Wbcr_Factory429_Plugin
|
30 |
*/
|
31 |
public $plugin;
|
32 |
|
51 |
*
|
52 |
* @since 1.0.0
|
53 |
*/
|
54 |
+
public function __construct( Wbcr_Factory429_Plugin $plugin ) {
|
55 |
$this->plugin = $plugin;
|
56 |
|
57 |
add_action( 'admin_enqueue_scripts', [ $this, 'loadAssets' ] );
|
111 |
*/
|
112 |
public function loadAssets( $hook ) {
|
113 |
|
114 |
+
do_action( 'wbcr_factory_429_bootstrap_enqueue_scripts', $hook );
|
115 |
+
do_action( 'wbcr_factory_429_bootstrap_enqueue_scripts_' . $this->plugin->getPluginName(), $hook );
|
116 |
|
117 |
$dependencies = [];
|
118 |
if ( ! empty( $this->scripts ) ) {
|
137 |
if ( ! empty( $this->styles ) ) {
|
138 |
$this->enqueueScripts( $this->styles, 'css', $dependencies );
|
139 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
}
|
141 |
|
142 |
/**
|
143 |
+
* @param array $scripts
|
144 |
* @param string $type
|
145 |
* @param array $dependencies
|
146 |
*/
|
147 |
+
protected function enqueueScripts( array $scripts, $type, array $dependencies ) {
|
148 |
|
149 |
$is_first = true;
|
150 |
|
156 |
$cache_enable = apply_filters( 'wbcr/factory/bootstrap/cache_enable', true );
|
157 |
|
158 |
$cache_id = md5( implode( ',', $this->scripts ) . $type . $this->plugin->getPluginVersion() );
|
159 |
+
$cache_dir_path = FACTORY_BOOTSTRAP_430_DIR . '/assets/cache/';
|
160 |
+
$cache_dir_url = FACTORY_BOOTSTRAP_430_URL . '/assets/cache/';
|
161 |
|
162 |
$cache_filepath = $cache_dir_path . $cache_id . ".min." . $type;
|
163 |
$cache_fileurl = $cache_dir_url . $cache_id . ".min." . $type;
|
181 |
}
|
182 |
|
183 |
$concat_files = [];
|
184 |
+
foreach ( $scripts as $script_to_load ) {
|
185 |
$script_to_load = sanitize_text_field( $script_to_load );
|
186 |
if ( $cache_enable && $cache_dir_exists ) {
|
187 |
+
$fname = FACTORY_BOOTSTRAP_430_DIR . "/assets/$type-min/$script_to_load.min." . $type;
|
188 |
if ( file_exists( $fname ) ) {
|
189 |
$f = @fopen( $fname, 'r' );
|
190 |
$concat_files[] = @fread( $f, filesize( $fname ) );
|
192 |
}
|
193 |
} else {
|
194 |
if ( $type == 'js' ) {
|
195 |
+
wp_enqueue_script( md5( $script_to_load ), FACTORY_BOOTSTRAP_430_URL . "/assets/$type-min/$script_to_load.min." . $type, $is_first ? $dependencies : false, $this->plugin->getPluginVersion() );
|
196 |
} else {
|
197 |
+
wp_enqueue_style( md5( $script_to_load ), FACTORY_BOOTSTRAP_430_URL . "/assets/$type-min/$script_to_load.min." . $type, [], $this->plugin->getPluginVersion() );
|
198 |
}
|
199 |
$is_first = false;
|
200 |
}
|
libs/factory/clearfy/assets/css/clearfy-base.css
CHANGED
@@ -5,18 +5,18 @@
|
|
5 |
* @copyright Webcraftic 06.10.2018
|
6 |
* @sicne 2.0.5
|
7 |
*/
|
8 |
-
#WBCR .wbcr-factory-pages-
|
9 |
padding: 30px 80px;
|
10 |
}
|
11 |
-
#WBCR .wbcr-factory-pages-
|
12 |
margin: 0 0 20px;
|
13 |
}
|
14 |
-
#WBCR .wbcr-factory-pages-
|
15 |
border: 2px dashed #8bc34a;
|
16 |
background: #fff;
|
17 |
padding: 20px;
|
18 |
}
|
19 |
-
#WBCR .wbcr-factory-pages-
|
20 |
display: inline-block;
|
21 |
cursor: pointer;
|
22 |
line-height: 16px;
|
@@ -35,16 +35,16 @@
|
|
35 |
-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
36 |
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
37 |
}
|
38 |
-
#WBCR .wbcr-factory-pages-
|
39 |
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
40 |
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
41 |
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
42 |
}
|
43 |
-
#WBCR .wbcr-factory-pages-
|
44 |
outline: none;
|
45 |
border: 0;
|
46 |
}
|
47 |
-
#WBCR .wbcr-factory-pages-
|
48 |
display: inline-block;
|
49 |
cursor: pointer;
|
50 |
line-height: 16px;
|
@@ -63,22 +63,22 @@
|
|
63 |
-moz-box-shadow: 0 1px 0 rgba(60, 45, 2, 0.31);
|
64 |
-webkit-box-shadow: 0 1px 0 rgba(60, 45, 2, 0.31);
|
65 |
}
|
66 |
-
#WBCR .wbcr-factory-pages-
|
67 |
box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
68 |
-moz-box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
69 |
-webkit-box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
70 |
}
|
71 |
-
#WBCR .wbcr-factory-pages-
|
72 |
outline: none;
|
73 |
border: 0;
|
74 |
}
|
75 |
-
#WBCR .wbcr-factory-pages-
|
76 |
background: #fff;
|
77 |
color: #353535;
|
78 |
font-weight: 600;
|
79 |
border: 2px dashed #8bc34a;
|
80 |
}
|
81 |
-
#WBCR .wbcr-factory-pages-
|
82 |
margin: 0 0 20px;
|
83 |
padding: 10px 0;
|
84 |
text-align: center;
|
@@ -89,16 +89,16 @@
|
|
89 |
vertical-align: middle;
|
90 |
text-transform: uppercase;
|
91 |
}
|
92 |
-
#WBCR .wbcr-factory-pages-
|
93 |
position: relative;
|
94 |
margin-bottom: 20px;
|
95 |
}
|
96 |
-
#WBCR .wbcr-factory-pages-
|
97 |
font-size: 15px;
|
98 |
padding: 7px;
|
99 |
padding-left: 20px;
|
100 |
}
|
101 |
-
#WBCR .wbcr-factory-pages-
|
102 |
content: " ";
|
103 |
display: inline-block;
|
104 |
width: 0.4em;
|
@@ -112,7 +112,7 @@
|
|
112 |
-o-transform: rotate(45deg);
|
113 |
transform: rotate(45deg);
|
114 |
}
|
115 |
-
#WBCR .wbcr-factory-pages-
|
116 |
display: block;
|
117 |
cursor: pointer;
|
118 |
line-height: 16px;
|
@@ -131,44 +131,44 @@
|
|
131 |
-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
132 |
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
133 |
}
|
134 |
-
#WBCR .wbcr-factory-pages-
|
135 |
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
136 |
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
137 |
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
138 |
}
|
139 |
-
#WBCR .wbcr-factory-pages-
|
140 |
outline: none;
|
141 |
border: 0;
|
142 |
}
|
143 |
@media screen and (max-width: 1550px) {
|
144 |
-
#WBCR .wbcr-factory-pages-
|
145 |
padding: 10px 80px;
|
146 |
}
|
147 |
-
#WBCR .wbcr-factory-pages-
|
148 |
padding: 10px;
|
149 |
}
|
150 |
-
#WBCR .wbcr-factory-pages-
|
151 |
margin: 0 0 20px;
|
152 |
padding: 10px 0;
|
153 |
font-size: 13px;
|
154 |
font-weight: 600;
|
155 |
}
|
156 |
-
#WBCR .wbcr-factory-pages-
|
157 |
margin-bottom: 20px;
|
158 |
}
|
159 |
-
#WBCR .wbcr-factory-pages-
|
160 |
font-size: 13px;
|
161 |
padding: 2px;
|
162 |
padding-left: 10px;
|
163 |
}
|
164 |
-
#WBCR .wbcr-factory-pages-
|
165 |
width: 0.4em;
|
166 |
height: 0.7em;
|
167 |
border-width: 0 0.2em 0.2em 0;
|
168 |
left: 0;
|
169 |
margin-right: 10px;
|
170 |
}
|
171 |
-
#WBCR .wbcr-factory-pages-
|
172 |
font-weight: 700;
|
173 |
line-height: 16px;
|
174 |
font-size: 12px;
|
5 |
* @copyright Webcraftic 06.10.2018
|
6 |
* @sicne 2.0.5
|
7 |
*/
|
8 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion {
|
9 |
padding: 30px 80px;
|
10 |
}
|
11 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion h3 {
|
12 |
margin: 0 0 20px;
|
13 |
}
|
14 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion .wbcr-factory-inner-contanier {
|
15 |
border: 2px dashed #8bc34a;
|
16 |
background: #fff;
|
17 |
padding: 20px;
|
18 |
}
|
19 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion .wbcr-factory-activate-premium {
|
20 |
display: inline-block;
|
21 |
cursor: pointer;
|
22 |
line-height: 16px;
|
35 |
-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
36 |
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
37 |
}
|
38 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion .wbcr-factory-activate-premium:active {
|
39 |
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
40 |
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
41 |
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
42 |
}
|
43 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion .wbcr-factory-activate-premium:focus {
|
44 |
outline: none;
|
45 |
border: 0;
|
46 |
}
|
47 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion .wbcr-factory-purchase-premium {
|
48 |
display: inline-block;
|
49 |
cursor: pointer;
|
50 |
line-height: 16px;
|
63 |
-moz-box-shadow: 0 1px 0 rgba(60, 45, 2, 0.31);
|
64 |
-webkit-box-shadow: 0 1px 0 rgba(60, 45, 2, 0.31);
|
65 |
}
|
66 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion .wbcr-factory-purchase-premium:active {
|
67 |
box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
68 |
-moz-box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
69 |
-webkit-box-shadow: inset 0 1px 0 rgba(60, 45, 2, 0.31);
|
70 |
}
|
71 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-suggetion .wbcr-factory-purchase-premium:focus {
|
72 |
outline: none;
|
73 |
border: 0;
|
74 |
}
|
75 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion {
|
76 |
background: #fff;
|
77 |
color: #353535;
|
78 |
font-weight: 600;
|
79 |
border: 2px dashed #8bc34a;
|
80 |
}
|
81 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion h3 {
|
82 |
margin: 0 0 20px;
|
83 |
padding: 10px 0;
|
84 |
text-align: center;
|
89 |
vertical-align: middle;
|
90 |
text-transform: uppercase;
|
91 |
}
|
92 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion ul {
|
93 |
position: relative;
|
94 |
margin-bottom: 20px;
|
95 |
}
|
96 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion ul li {
|
97 |
font-size: 15px;
|
98 |
padding: 7px;
|
99 |
padding-left: 20px;
|
100 |
}
|
101 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion ul li:before {
|
102 |
content: " ";
|
103 |
display: inline-block;
|
104 |
width: 0.4em;
|
112 |
-o-transform: rotate(45deg);
|
113 |
transform: rotate(45deg);
|
114 |
}
|
115 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion .wbcr-factory-purchase-premium {
|
116 |
display: block;
|
117 |
cursor: pointer;
|
118 |
line-height: 16px;
|
131 |
-moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
132 |
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
133 |
}
|
134 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion .wbcr-factory-purchase-premium:active {
|
135 |
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
136 |
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
137 |
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.2);
|
138 |
}
|
139 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion .wbcr-factory-purchase-premium:focus {
|
140 |
outline: none;
|
141 |
border: 0;
|
142 |
}
|
143 |
@media screen and (max-width: 1550px) {
|
144 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-clearfy-221-multisite-pro-suggetion {
|
145 |
padding: 10px 80px;
|
146 |
}
|
147 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion {
|
148 |
padding: 10px;
|
149 |
}
|
150 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion h3 {
|
151 |
margin: 0 0 20px;
|
152 |
padding: 10px 0;
|
153 |
font-size: 13px;
|
154 |
font-weight: 600;
|
155 |
}
|
156 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion ul {
|
157 |
margin-bottom: 20px;
|
158 |
}
|
159 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion ul li {
|
160 |
font-size: 13px;
|
161 |
padding: 2px;
|
162 |
padding-left: 10px;
|
163 |
}
|
164 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion ul li:before {
|
165 |
width: 0.4em;
|
166 |
height: 0.7em;
|
167 |
border-width: 0 0.2em 0.2em 0;
|
168 |
left: 0;
|
169 |
margin-right: 10px;
|
170 |
}
|
171 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-clearfy-221-pro-suggettion .wbcr-factory-purchase-premium {
|
172 |
font-weight: 700;
|
173 |
line-height: 16px;
|
174 |
font-size: 12px;
|
libs/factory/clearfy/assets/css/clearfy-base.css.map
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
{"version":3,"sources":["clearfy-base.less"],"names":[],"mappings":";;;;;;;AAoCA,KAEE,iDACE;EACE,kBAAA;;AAJN,KAEE,iDACE,8CAGE;EACE,gBAAA;;AAPR,KAEE,iDACE,8CAOE;EACE,0BAAA;EACA,gBAAA;EACA,aAAA;;AAbR,KAEE,iDACE,8CAaE;EACE,qBAAA;EA5CN,eAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,uBAAA;EACA,0BAAA;EACA,cAAA;EACA,mBAAA;EACA,sCAAA;EACA,2CAAA;EACA,8CAAA;;AACA,KAaA,iDACE,8CAaE,+BA3BH;EACC,4CAAA;EACA,iDAAA;EACA,oDAAA;;AAEF,KAQA,iDACE,8CAaE,+BAtBH;EACC,aAAA;EACA,SAAA;;AAIJ,KAEE,iDACE,8CAiBE;EACE,qBAAA;EAhDN,eAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,uBAAA;EACA,0BAAA;EACA,cAAA;EACA,mBAAA;EACA,yCAAA;EACA,8CAAA;EACA,iDAAA;;AACA,KAaA,iDACE,8CAiBE,+BA/BH;EACC,+CAAA;EACA,oDAAA;EACA,uDAAA;;AAEF,KAQA,iDACE,8CAiBE,+BA1BH;EACC,aAAA;EACA,SAAA;;AAIJ,KAEE,iDAwBE,oCACE;EACE,gBAAA;EACA,cAAA;EACA,gBAAA;EACA,0BAAA;;AA/BR,KAEE,iDAwBE,oCACE,yCAME;EACE,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,gCAAA;EACA,cAAA;EACA,eAAA;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;;AA1CV,KAEE,iDAwBE,oCACE,yCAkBE;EAEE,kBAAA;EACA,mBAAA;;AAhDV,KAEE,iDAwBE,oCACE,yCAkBE,GAKE;EACE,eAAA;EACA,YAAA;EACA,kBAAA;;AAIA,KAvDV,iDAwBE,oCACE,yCAkBE,GAKE,GAOG;EACC,SAAS,GAAT;EACA,qBAAA;EACA,YAAA;EACA,aAAA;EACA,qBAAA;EACA,6BAAA;EACA,OAAA;EACA,kBAAA;EACA,mBAAmB,aAAnB;EACA,gBAAgB,aAAhB;EACA,cAAc,aAAd;EACA,WAAW,aAAX;;AArEd,KAEE,iDAwBE,oCACE,yCAgDE;EACE,cAAA;EAvGR,eAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,uBAAA;EACA,0BAAA;EACA,cAAA;EACA,mBAAA;EACA,sCAAA;EACA,2CAAA;EACA,8CAAA;;AACA,KAaA,iDAwBE,oCACE,yCAgDE,+BAtFL;EACC,4CAAA;EACA,iDAAA;EACA,oDAAA;;AAEF,KAQA,iDAwBE,oCACE,yCAgDE,+BAjFL;EACC,aAAA;EACA,SAAA;;AAwFJ,mBAAsC;EACpC,KACE,iDACE;IACE,kBAAA;;EAHN,KACE,iDAKE,oCACE;IACE,aAAA;;EARR,KACE,iDAKE,oCACE,yCAGE;IACE,gBAAA;IACA,eAAA;IACA,eAAA;IACA,gBAAA;;EAdV,KACE,iDAKE,oCACE,yCAUE;IACE,mBAAA;;EAlBV,KACE,iDAKE,oCACE,yCAUE,GAGE;IACE,eAAA;IACA,YAAA;IACA,kBAAA;;EAEA,KAxBV,iDAKE,oCACE,yCAUE,GAGE,GAKG;IACC,YAAA;IACA,aAAA;IACA,6BAAA;IACA,OAAA;IACA,kBAAA;;EA9Bd,KACE,iDAKE,oCACE,yCA4BE;IACE,gBAAA;IACA,iBAAA;IACA,eAAA;IACA,iBAAA;IACA,kBAAA;IACA,uBAAA;IACA,0BAAA","file":"clearfy-base.css"}
|
libs/factory/clearfy/assets/css/libs/autocomplete.css
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Styles for plugin options search form
|
3 |
+
|
4 |
+
* @author Alex Kovlaev <alex.kovalevv@gmail.com>, https://github.com/alexkovalevv
|
5 |
+
*
|
6 |
+
* @since 2.2.0
|
7 |
+
*/
|
8 |
+
#wbcr-factory-clearfy-221__search_options_form #wbcr-factory-clearfy-221__autocomplete {
|
9 |
+
width: 100%;
|
10 |
+
box-sizing: border-box;
|
11 |
+
border-color: #d6d4d4;
|
12 |
+
}
|
13 |
+
#wbcr-factory-clearfy-221__search_options_form.wbcr-factory-clearfy-221__autocomplete-wrap {
|
14 |
+
padding: 10px;
|
15 |
+
}
|
16 |
+
#wbcr-factory-clearfy-221__search_options_form .wbcr-factory-clearfy-221__autocomplete-label {
|
17 |
+
display: block !important;
|
18 |
+
}
|
19 |
+
.wbcr-factory-clearfy-221__autocomplete-suggestions {
|
20 |
+
border: 1px solid #999;
|
21 |
+
background: #FFF;
|
22 |
+
overflow: auto;
|
23 |
+
}
|
24 |
+
.wbcr-factory-clearfy-221__autocomplete-suggestion {
|
25 |
+
padding: 2px 5px;
|
26 |
+
white-space: nowrap;
|
27 |
+
overflow: hidden;
|
28 |
+
cursor: pointer;
|
29 |
+
}
|
30 |
+
.wbcr-factory-clearfy-221__autocomplete-selected {
|
31 |
+
background: #F0F0F0;
|
32 |
+
}
|
33 |
+
.wbcr-factory-clearfy-221__autocomplete-suggestions strong {
|
34 |
+
font-weight: normal;
|
35 |
+
color: #3399FF;
|
36 |
+
}
|
37 |
+
.wbcr-factory-clearfy-221__autocomplete-group {
|
38 |
+
padding: 2px 5px;
|
39 |
+
}
|
40 |
+
.wbcr-factory-clearfy-221__autocomplete-group strong {
|
41 |
+
display: block;
|
42 |
+
border-bottom: 1px solid #000;
|
43 |
+
}
|
44 |
+
/*# sourceMappingURL=autocomplete.css.map */
|
libs/factory/clearfy/assets/css/libs/autocomplete.css.map
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
{"version":3,"sources":["autocomplete.less"],"names":[],"mappings":";;;;;;;AAUA,8CAVC;EAYG,WAAA;EACA,sBAAA;EACA,qBAAA;;AAdH,8CAAC;EAkBE,aAAA;;AARJ,8CAVC;EAsBG,yBAAA;;AAtBH;EA2BC,sBAAA;EACA,gBAAA;EACA,cAAA;;AA7BD;EAiCC,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,eAAA;;AApCD;EAwCC,mBAAA;;AAxCD,mDAGM;EAyCL,mBAAA;EACA,cAAA;;AA7CD;EAiDC,gBAAA;;AAjDD,6CAGA;EAkDC,cAAA;EACA,6BAAA","file":"autocomplete.css"}
|
libs/factory/clearfy/assets/css/libs/autocomplete.less
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Styles for plugin options search form
|
3 |
+
|
4 |
+
* @author Alex Kovlaev <alex.kovalevv@gmail.com>, https://github.com/alexkovalevv
|
5 |
+
*
|
6 |
+
* @since 2.2.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
@prefix: ~'wbcr-factory-clearfy-000__';
|
10 |
+
|
11 |
+
#wbcr-factory-clearfy-000__search_options_form {
|
12 |
+
#@{prefix}autocomplete {
|
13 |
+
width: 100%;
|
14 |
+
box-sizing: border-box;
|
15 |
+
border-color: #d6d4d4;
|
16 |
+
}
|
17 |
+
|
18 |
+
&.@{prefix}autocomplete-wrap {
|
19 |
+
padding: 10px;
|
20 |
+
}
|
21 |
+
|
22 |
+
.@{prefix}autocomplete-label {
|
23 |
+
display: block !important;
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
.@{prefix}autocomplete-suggestions {
|
28 |
+
border: 1px solid #999;
|
29 |
+
background: #FFF;
|
30 |
+
overflow: auto;
|
31 |
+
}
|
32 |
+
|
33 |
+
.@{prefix}autocomplete-suggestion {
|
34 |
+
padding: 2px 5px;
|
35 |
+
white-space: nowrap;
|
36 |
+
overflow: hidden;
|
37 |
+
cursor: pointer;
|
38 |
+
}
|
39 |
+
|
40 |
+
.@{prefix}autocomplete-selected {
|
41 |
+
background: #F0F0F0;
|
42 |
+
}
|
43 |
+
|
44 |
+
.@{prefix}autocomplete-suggestions strong {
|
45 |
+
font-weight: normal;
|
46 |
+
color: #3399FF;
|
47 |
+
}
|
48 |
+
|
49 |
+
.@{prefix}autocomplete-group {
|
50 |
+
padding: 2px 5px;
|
51 |
+
}
|
52 |
+
|
53 |
+
.@{prefix}autocomplete-group strong {
|
54 |
+
display: block;
|
55 |
+
border-bottom: 1px solid #000;
|
56 |
+
}
|
57 |
+
|
libs/factory/clearfy/assets/js/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,11 +13,11 @@
|
|
13 |
(function($) {
|
14 |
'use strict';
|
15 |
|
16 |
-
if( !$.
|
17 |
-
$.
|
18 |
}
|
19 |
|
20 |
-
$.
|
21 |
/**
|
22 |
* Создает и показывает уведомление внутри интерфейса Clearfy
|
23 |
*
|
@@ -63,12 +63,12 @@
|
|
63 |
/**
|
64 |
* Хук выполняет проивольную функцию, после того как уведомление отображено
|
65 |
* Реализация системы фильтров и хуков в файле libs/clearfy/admin/assests/js/global.js
|
66 |
-
* Пример регистрации хука $.
|
67 |
* function(noticeId) {});
|
68 |
* @param {string} noticeId - id уведомления
|
69 |
*/
|
70 |
-
$.
|
71 |
-
$.
|
72 |
});
|
73 |
|
74 |
return noticeId;
|
@@ -93,13 +93,13 @@
|
|
93 |
/**
|
94 |
* Хук выполняет проивольную функцию, после того как уведомление скрыто
|
95 |
* Реализация системы фильтров и хуков в файле libs/clearfy/admin/assests/js/global.js
|
96 |
-
* Пример регистрации хука $.
|
97 |
* function(noticeId)
|
98 |
* {});
|
99 |
* @param {string} noticeId - id уведомления
|
100 |
*/
|
101 |
-
$.
|
102 |
-
$.
|
103 |
});
|
104 |
},
|
105 |
|
@@ -116,7 +116,7 @@
|
|
116 |
|
117 |
};
|
118 |
|
119 |
-
$.
|
120 |
|
121 |
/**
|
122 |
* A set of registered filters.
|
@@ -183,20 +183,20 @@
|
|
183 |
}
|
184 |
};
|
185 |
|
186 |
-
$.
|
187 |
|
188 |
/**
|
189 |
* Applies filters to a given input value.
|
190 |
*/
|
191 |
run: function(filterName, args) {
|
192 |
-
$.
|
193 |
},
|
194 |
|
195 |
/**
|
196 |
* Registers a new filter.
|
197 |
*/
|
198 |
add: function(filterName, callback, priority) {
|
199 |
-
$.
|
200 |
}
|
201 |
};
|
202 |
|
2 |
* Глобальный JS файл, который регистрирует глобальные переменные с общими методами для всех компонентов Clearfy
|
3 |
* и самого Clearfy.
|
4 |
*
|
5 |
+
* $.wbcr_factory_clearfy_221.app - методы для работы с приложением. Скрыть, показать уведомления.
|
6 |
+
* $.wbcr_factory_clearfy_221.hooks - это иммитация хуков и фильтров аналогично тем, что используются в Wordpress
|
7 |
*
|
8 |
* Copyright 2018, Webcraftic, http://webcraftic.com
|
9 |
*
|
13 |
(function($) {
|
14 |
'use strict';
|
15 |
|
16 |
+
if( !$.wbcr_factory_clearfy_221 ) {
|
17 |
+
$.wbcr_factory_clearfy_221 = {};
|
18 |
}
|
19 |
|
20 |
+
$.wbcr_factory_clearfy_221.app = $.wbcr_factory_clearfy_221.app || {
|
21 |
/**
|
22 |
* Создает и показывает уведомление внутри интерфейса Clearfy
|
23 |
*
|
63 |
/**
|
64 |
* Хук выполняет проивольную функцию, после того как уведомление отображено
|
65 |
* Реализация системы фильтров и хуков в файле libs/clearfy/admin/assests/js/global.js
|
66 |
+
* Пример регистрации хука $.wbcr_factory_clearfy_221.hooks.add('wbcr/factory_clearfy_221/updated',
|
67 |
* function(noticeId) {});
|
68 |
* @param {string} noticeId - id уведомления
|
69 |
*/
|
70 |
+
$.wbcr_factory_clearfy_221.hooks.run('wbcr/factory_clearfy_221/showed_notice', [noticeId]);
|
71 |
+
$.wbcr_factory_clearfy_221.hooks.run('wbcr/clearfy/showed_notice', [noticeId]);
|
72 |
});
|
73 |
|
74 |
return noticeId;
|
93 |
/**
|
94 |
* Хук выполняет проивольную функцию, после того как уведомление скрыто
|
95 |
* Реализация системы фильтров и хуков в файле libs/clearfy/admin/assests/js/global.js
|
96 |
+
* Пример регистрации хука $.wbcr_factory_clearfy_221.hooks.add('wbcr/factory_clearfy_221/updated',
|
97 |
* function(noticeId)
|
98 |
* {});
|
99 |
* @param {string} noticeId - id уведомления
|
100 |
*/
|
101 |
+
$.wbcr_factory_clearfy_221.hooks.run('wbcr/factory_clearfy_221/hidded_notice', [noticeId]);
|
102 |
+
$.wbcr_factory_clearfy_221.hooks.run('wbcr/clearfy/hidded_notice', [noticeId]);
|
103 |
});
|
104 |
},
|
105 |
|
116 |
|
117 |
};
|
118 |
|
119 |
+
$.wbcr_factory_clearfy_221.filters = $.wbcr_factory_clearfy_221.filters || {
|
120 |
|
121 |
/**
|
122 |
* A set of registered filters.
|
183 |
}
|
184 |
};
|
185 |
|
186 |
+
$.wbcr_factory_clearfy_221.hooks = $.wbcr_factory_clearfy_221.hooks || {
|
187 |
|
188 |
/**
|
189 |
* Applies filters to a given input value.
|
190 |
*/
|
191 |
run: function(filterName, args) {
|
192 |
+
$.wbcr_factory_clearfy_221.filters.run(filterName, args);
|
193 |
},
|
194 |
|
195 |
/**
|
196 |
* Registers a new filter.
|
197 |
*/
|
198 |
add: function(filterName, callback, priority) {
|
199 |
+
$.wbcr_factory_clearfy_221.filters.add(filterName, callback, priority);
|
200 |
}
|
201 |
};
|
202 |
|
libs/factory/clearfy/assets/js/libs/jquery.autocomplete.min.js
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Ajax Autocomplete for jQuery, version 1.4.11
|
3 |
+
* (c) 2017 Tomas Kirda
|
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-221__autocomplete-selected",suggestion:"wbcr-factory-clearfy-221__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-221__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-221__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/assets/js/license-manager.js
CHANGED
@@ -3,44 +3,40 @@
|
|
3 |
* Его основная роль отправка ajax запросов на проверку, активацию, деактивацию лицензии
|
4 |
* и вывод уведомлений об ошибка или успешно выполнении проверок.
|
5 |
*
|
6 |
-
* @author
|
7 |
* @copyright (c) 05.10.2018, Webcraftic
|
8 |
* @version 1.1
|
9 |
* @since 1.4.0
|
10 |
*/
|
11 |
-
|
12 |
-
|
13 |
jQuery(function($) {
|
14 |
|
15 |
var allNotices = [];
|
16 |
|
17 |
$(document).on('click', '.wcl-control-btn', function() {
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
|
|
21 |
|
22 |
for( i = 0; i < allNotices.length; i++ ) {
|
23 |
-
$.
|
24 |
}
|
25 |
|
26 |
$('.wcl-control-btn').hide();
|
27 |
|
28 |
-
var wrapper = $('#wcl-license-wrapper'),
|
29 |
-
loader = wrapper.data('loader'),
|
30 |
-
pluginClass = wrapper.data('plugin');
|
31 |
-
|
32 |
$(this).after('<img class="wcl-loader" src="' + loader + '">');
|
33 |
|
34 |
var data = {
|
35 |
-
action: 'wbcr-clearfy-activate-license',
|
36 |
-
_wpnonce:
|
37 |
-
|
|
|
38 |
licensekey: ''
|
39 |
};
|
40 |
|
41 |
if( $(this).data('action').trim() === 'activate' ) {
|
42 |
data.licensekey = $('#license-key').val().trim();
|
43 |
-
data.plugin_class = pluginClass;
|
44 |
}
|
45 |
|
46 |
$.ajax(ajaxurl, {
|
@@ -57,7 +53,7 @@ jQuery(function($) {
|
|
57 |
|
58 |
if( response.data ) {
|
59 |
console.log(response.data.error_message);
|
60 |
-
noticeId = $.
|
61 |
allNotices.push(noticeId);
|
62 |
} else {
|
63 |
console.log(response);
|
@@ -67,7 +63,7 @@ jQuery(function($) {
|
|
67 |
}
|
68 |
|
69 |
if( response.data && response.data.message ) {
|
70 |
-
noticeId = $.
|
71 |
allNotices.push(noticeId);
|
72 |
|
73 |
// todo: доработать генерацию формы, вместо перезагрузки страницы
|
@@ -84,7 +80,7 @@ jQuery(function($) {
|
|
84 |
console.log(xhr.responseText);
|
85 |
console.log(thrownError);
|
86 |
|
87 |
-
var noticeId = $.
|
88 |
|
89 |
allNotices.push(noticeId);
|
90 |
}
|
3 |
* Его основная роль отправка ajax запросов на проверку, активацию, деактивацию лицензии
|
4 |
* и вывод уведомлений об ошибка или успешно выполнении проверок.
|
5 |
*
|
6 |
+
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
7 |
* @copyright (c) 05.10.2018, Webcraftic
|
8 |
* @version 1.1
|
9 |
* @since 1.4.0
|
10 |
*/
|
|
|
|
|
11 |
jQuery(function($) {
|
12 |
|
13 |
var allNotices = [];
|
14 |
|
15 |
$(document).on('click', '.wcl-control-btn', function() {
|
16 |
+
var wrapper = $('#wcl-license-wrapper'),
|
17 |
+
loader = wrapper.data('loader'),
|
18 |
+
pluginName = wrapper.data('plugin-name'),
|
19 |
+
wpnonce = wrapper.data('nonce'),
|
20 |
+
licenseAction = $(this).data('action');
|
21 |
|
22 |
for( i = 0; i < allNotices.length; i++ ) {
|
23 |
+
$.wbcr_factory_clearfy_221.app.hideNotice(allNotices[i]);
|
24 |
}
|
25 |
|
26 |
$('.wcl-control-btn').hide();
|
27 |
|
|
|
|
|
|
|
|
|
28 |
$(this).after('<img class="wcl-loader" src="' + loader + '">');
|
29 |
|
30 |
var data = {
|
31 |
+
action: 'wbcr-clearfy-activate-license-for-' + pluginName,
|
32 |
+
_wpnonce: wpnonce,
|
33 |
+
plugin_name: pluginName,
|
34 |
+
license_action: licenseAction,
|
35 |
licensekey: ''
|
36 |
};
|
37 |
|
38 |
if( $(this).data('action').trim() === 'activate' ) {
|
39 |
data.licensekey = $('#license-key').val().trim();
|
|
|
40 |
}
|
41 |
|
42 |
$.ajax(ajaxurl, {
|
53 |
|
54 |
if( response.data ) {
|
55 |
console.log(response.data.error_message);
|
56 |
+
noticeId = $.wbcr_factory_clearfy_221.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_221.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_221.app.showNotice('Error: [' + thrownError + '] Status: [' + xhr.status + '] Error massage: [' + xhr.responseText + ']', 'danger');
|
84 |
|
85 |
allNotices.push(noticeId);
|
86 |
}
|
libs/factory/clearfy/assets/js/search-options.js
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
(function($) {
|
2 |
+
'use strict';
|
3 |
+
|
4 |
+
$(document).ready(function() {
|
5 |
+
if( '' !== window.location.hash && window.location.hash.indexOf('factory-control-') ) {
|
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() {
|
16 |
+
|
17 |
+
controlEl.find('.control-label').css({
|
18 |
+
color: '#ff5722',
|
19 |
+
fontWeight: 'bold'
|
20 |
+
});
|
21 |
+
|
22 |
+
history.pushState("", document.title, window.location.pathname
|
23 |
+
+ window.location.search);
|
24 |
+
});
|
25 |
+
}
|
26 |
+
|
27 |
+
if( undefined === window.wfactory_clearfy_search_options ) {
|
28 |
+
throw new Error('Global var {wfactory_clearfy_search_options} is not declared.');
|
29 |
+
}
|
30 |
+
|
31 |
+
$('#wbcr-factory-clearfy-221__autocomplete').wfactory_clearfy_autocomplete({
|
32 |
+
lookup: wfactory_clearfy_search_options,
|
33 |
+
onSelect: function(suggestion) {
|
34 |
+
$('#wbcr-factory-clearfy-221__autocomplete').prop("disabled", true);
|
35 |
+
window.location.href = suggestion.data.page_url;
|
36 |
+
}
|
37 |
+
});
|
38 |
+
});
|
39 |
+
|
40 |
+
})(jQuery);
|
libs/factory/clearfy/boot.php
CHANGED
@@ -10,40 +10,71 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if
|
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
|
36 |
/**
|
37 |
* Подключаем скрипты для установки компонентов Clearfy
|
38 |
* на все страницы админпанели.
|
39 |
*/
|
40 |
-
add_action(
|
41 |
-
wp_enqueue_script(
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
}
|
49 |
}
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( defined('FACTORY_CLEARFY_221_LOADED') ) {
|
18 |
return;
|
19 |
}
|
20 |
|
21 |
+
define('FACTORY_CLEARFY_221_LOADED', true);
|
22 |
|
23 |
+
define('FACTORY_CLEARFY_221', '2.2.1');
|
24 |
|
25 |
+
define('FACTORY_CLEARFY_221_DIR', dirname(__FILE__));
|
26 |
+
define('FACTORY_CLEARFY_221_URL', plugins_url(null, __FILE__));
|
27 |
|
28 |
+
load_plugin_textdomain('wbcr_factory_clearfy_221', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
29 |
|
30 |
+
require(FACTORY_CLEARFY_221_DIR . '/includes/ajax-handlers.php');
|
31 |
+
require(FACTORY_CLEARFY_221_DIR . '/includes/class-helpers.php');
|
32 |
+
require(FACTORY_CLEARFY_221_DIR . '/includes/class-configurate.php');
|
33 |
|
34 |
// module provides function only for the admin area
|
35 |
+
if( is_admin() ) {
|
36 |
/**
|
37 |
* Подключаем скрипты для установки компонентов Clearfy
|
38 |
* на все страницы админпанели.
|
39 |
*/
|
40 |
+
add_action('admin_enqueue_scripts', function () {
|
41 |
+
wp_enqueue_script('wbcr-factory-clearfy-221-global', FACTORY_CLEARFY_221_URL . '/assets/js/globals.js', ['jquery'], FACTORY_CLEARFY_221);
|
42 |
+
|
43 |
+
require_once FACTORY_CLEARFY_221_DIR . '/includes/class-search-options.php';
|
44 |
+
$all_options = \WBCR\Factory_Clearfy_221\Search_Options::get_all_options();
|
45 |
+
|
46 |
+
if( empty($all_options) ) {
|
47 |
+
return;
|
48 |
+
}
|
49 |
+
|
50 |
+
$allow_print_data = false;
|
51 |
+
$formated_options = [];
|
52 |
+
|
53 |
+
foreach($all_options as $option) {
|
54 |
+
if( !$allow_print_data && isset($_GET['page']) && $option['page_id'] === $_GET['page'] ) {
|
55 |
+
$allow_print_data = true;
|
56 |
+
}
|
57 |
+
|
58 |
+
$formated_options[] = [
|
59 |
+
'value' => $option['title'],
|
60 |
+
'data' => [
|
61 |
+
//'hint' => isset($option['hint']) ? $option['hint'] : '',
|
62 |
+
'page_url' => $option['page_url'],
|
63 |
+
'page_id' => $option['page_id']
|
64 |
+
]
|
65 |
+
];
|
66 |
+
}
|
67 |
+
|
68 |
+
if( !$allow_print_data ) {
|
69 |
+
return;
|
70 |
+
}
|
71 |
+
|
72 |
+
wp_localize_script('jquery', 'wfactory_clearfy_search_options', $formated_options);
|
73 |
+
});
|
74 |
+
|
75 |
+
if( defined('FACTORY_PAGES_429_LOADED') ) {
|
76 |
+
require(FACTORY_CLEARFY_221_DIR . '/pages/class-pages.php');
|
77 |
+
require(FACTORY_CLEARFY_221_DIR . '/pages/class-page-more-features.php');
|
78 |
+
require(FACTORY_CLEARFY_221_DIR . '/pages/class-page-license.php');
|
79 |
}
|
80 |
}
|
libs/factory/clearfy/includes/ajax-handlers.php
CHANGED
@@ -17,17 +17,24 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
17 |
*
|
18 |
* @since 2.0.7
|
19 |
*
|
20 |
-
* @param
|
21 |
*
|
22 |
*/
|
23 |
-
function
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
25 |
|
26 |
$action = $plugin_instance->request->post( 'license_action', false, true );
|
27 |
$license_key = $plugin_instance->request->post( 'licensekey', null );
|
28 |
|
|
|
|
|
29 |
if ( empty( $action ) || ! in_array( $action, [ 'activate', 'deactivate', 'sync', 'unsubscribe' ] ) ) {
|
30 |
-
wp_send_json_error( [ 'error_message' => __( 'Licensing action not passed or this action is prohibited!', '
|
31 |
die();
|
32 |
}
|
33 |
|
@@ -38,30 +45,31 @@ function wbcr_factory_clearfy_212_check_license( $plugin_instance ) {
|
|
38 |
switch ( $action ) {
|
39 |
case 'activate':
|
40 |
if ( empty( $license_key ) || strlen( $license_key ) > 32 ) {
|
41 |
-
wp_send_json_error( [ 'error_message' => __( 'License key is empty or license key too long (license key is 32 characters long)', '
|
42 |
} else {
|
43 |
$plugin_instance->premium->activate( $license_key );
|
44 |
-
$success_message = __( 'Your license has been successfully activated', '
|
45 |
}
|
46 |
break;
|
47 |
case 'deactivate':
|
48 |
$plugin_instance->premium->deactivate();
|
49 |
-
$success_message = __( 'The license is deactivated', '
|
50 |
break;
|
51 |
case 'sync':
|
52 |
$plugin_instance->premium->sync();
|
53 |
-
$success_message = __( 'The license has been updated', '
|
54 |
break;
|
55 |
case 'unsubscribe':
|
56 |
$plugin_instance->premium->cancel_paid_subscription();
|
57 |
-
$success_message = __( 'Subscription success cancelled', '
|
58 |
break;
|
59 |
}
|
60 |
} catch( Exception $e ) {
|
61 |
|
62 |
/**
|
63 |
-
* Экшен
|
64 |
*
|
|
|
65 |
* @since 2.0.7
|
66 |
*
|
67 |
* @param string $license_key
|
@@ -69,22 +77,23 @@ function wbcr_factory_clearfy_212_check_license( $plugin_instance ) {
|
|
69 |
*
|
70 |
* @param string $action
|
71 |
*/
|
72 |
-
do_action(
|
73 |
|
74 |
wp_send_json_error( [ 'error_message' => $e->getMessage() ] );
|
75 |
die();
|
76 |
}
|
77 |
|
78 |
/**
|
79 |
-
* Экшен
|
80 |
*
|
|
|
81 |
* @since 2.0.7
|
82 |
*
|
83 |
* @param string $license_key
|
84 |
*
|
85 |
* @param string $action
|
86 |
*/
|
87 |
-
do_action(
|
88 |
|
89 |
wp_send_json_success( [ 'message' => $success_message ] );
|
90 |
|
17 |
*
|
18 |
* @since 2.0.7
|
19 |
*
|
20 |
+
* @param Wbcr_Factory429_Plugin $plugin_instance
|
21 |
*
|
22 |
*/
|
23 |
+
function wbcr_factory_clearfy_221_check_license( $plugin_instance ) {
|
24 |
+
|
25 |
+
$plugin_name = $plugin_instance->request->post( 'plugin_name', null, true );
|
26 |
+
|
27 |
+
if ( ( $plugin_instance->getPluginName() !== $plugin_name ) || ! $plugin_instance->current_user_can() ) {
|
28 |
+
wp_die( - 1, 403 );
|
29 |
+
}
|
30 |
|
31 |
$action = $plugin_instance->request->post( 'license_action', false, true );
|
32 |
$license_key = $plugin_instance->request->post( 'licensekey', null );
|
33 |
|
34 |
+
check_admin_referer( "clearfy_activate_license_for_{$plugin_name}" );
|
35 |
+
|
36 |
if ( empty( $action ) || ! in_array( $action, [ 'activate', 'deactivate', 'sync', 'unsubscribe' ] ) ) {
|
37 |
+
wp_send_json_error( [ 'error_message' => __( 'Licensing action not passed or this action is prohibited!', 'wbcr_factory_clearfy_221' ) ] );
|
38 |
die();
|
39 |
}
|
40 |
|
45 |
switch ( $action ) {
|
46 |
case 'activate':
|
47 |
if ( empty( $license_key ) || strlen( $license_key ) > 32 ) {
|
48 |
+
wp_send_json_error( [ 'error_message' => __( 'License key is empty or license key too long (license key is 32 characters long)', 'wbcr_factory_clearfy_221' ) ] );
|
49 |
} else {
|
50 |
$plugin_instance->premium->activate( $license_key );
|
51 |
+
$success_message = __( 'Your license has been successfully activated', 'wbcr_factory_clearfy_221' );
|
52 |
}
|
53 |
break;
|
54 |
case 'deactivate':
|
55 |
$plugin_instance->premium->deactivate();
|
56 |
+
$success_message = __( 'The license is deactivated', 'wbcr_factory_clearfy_221' );
|
57 |
break;
|
58 |
case 'sync':
|
59 |
$plugin_instance->premium->sync();
|
60 |
+
$success_message = __( 'The license has been updated', 'wbcr_factory_clearfy_221' );
|
61 |
break;
|
62 |
case 'unsubscribe':
|
63 |
$plugin_instance->premium->cancel_paid_subscription();
|
64 |
+
$success_message = __( 'Subscription success cancelled', 'wbcr_factory_clearfy_221' );
|
65 |
break;
|
66 |
}
|
67 |
} catch( Exception $e ) {
|
68 |
|
69 |
/**
|
70 |
+
* Экшен выполняется, когда проверка лицензии вернула ошибку
|
71 |
*
|
72 |
+
* @since 2.1.2 Переименован в {$plugin_name}/factory/clearfy/check_license_error
|
73 |
* @since 2.0.7
|
74 |
*
|
75 |
* @param string $license_key
|
77 |
*
|
78 |
* @param string $action
|
79 |
*/
|
80 |
+
do_action( "{$plugin_name}/factory/clearfy/check_license_error", $action, $license_key, $e->getMessage() );
|
81 |
|
82 |
wp_send_json_error( [ 'error_message' => $e->getMessage() ] );
|
83 |
die();
|
84 |
}
|
85 |
|
86 |
/**
|
87 |
+
* Экшен выполняется, когда проверка лицензии успешно завершена
|
88 |
*
|
89 |
+
* @since 2.1.2 Переименован в {$plugin_name}/factory/clearfy/check_license_success
|
90 |
* @since 2.0.7
|
91 |
*
|
92 |
* @param string $license_key
|
93 |
*
|
94 |
* @param string $action
|
95 |
*/
|
96 |
+
do_action( "{$plugin_name}/factory/clearfy/check_license_success", $action, $license_key );
|
97 |
|
98 |
wp_send_json_success( [ 'message' => $success_message ] );
|
99 |
|
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_FactoryClearfy221_Configurate {
|
17 |
|
18 |
/**
|
19 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
20 |
*/
|
21 |
+
public function __construct( Wbcr_Factory429_Plugin $plugin ) {
|
22 |
$this->plugin = $plugin;
|
23 |
$this->registerActionsAndFilters();
|
24 |
}
|
libs/factory/clearfy/includes/class-helpers.php
CHANGED
@@ -14,103 +14,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
14 |
* @copyright (c) 2018, Webcraftic Ltd
|
15 |
*
|
16 |
*/
|
17 |
-
class
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Ссылка по умолчанию (анг)
|
21 |
-
*/
|
22 |
-
const WEBCRAFTIC_SITE_URL = 'https://clearfy.pro';
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Русская локализация сайта
|
26 |
-
*/
|
27 |
-
const WEBCRAFTIC_RU_SITE_URL = 'https://ru.clearfy.pro';
|
28 |
-
/**
|
29 |
-
* Украинская локализация сайта
|
30 |
-
*/
|
31 |
-
const WEBCRAFTIC_UA_SITE_URL = 'https://ua.clearfy.pro';
|
32 |
-
/**
|
33 |
-
* Испанская
|
34 |
-
*/
|
35 |
-
const WEBCRAFTIC_ES_SITE_URL = 'https://es.clearfy.pro';
|
36 |
-
/**
|
37 |
-
* Французкая
|
38 |
-
*/
|
39 |
-
const WEBCRAFTIC_DE_SITE_URL = 'https://de.clearfy.pro';
|
40 |
-
|
41 |
-
/**
|
42 |
-
* @since 2.0.5
|
43 |
-
*
|
44 |
-
* @param int $price
|
45 |
-
*
|
46 |
-
* @return int
|
47 |
-
*/
|
48 |
-
public static function getClearfyBusinessPrice( $price = 19 ) {
|
49 |
-
return (int) apply_filters( 'wbcr/clearfy/business_price', $price );
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* @since 2.0.5
|
54 |
-
*
|
55 |
-
* @param int $price
|
56 |
-
*
|
57 |
-
* @return int
|
58 |
-
*/
|
59 |
-
public static function getClearfyBusinessRevPrice( $price = 69 ) {
|
60 |
-
return (int) apply_filters( 'wbcr/clearfy/business_rev_price', $price );
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Get a link to the official website of the developer
|
65 |
-
*
|
66 |
-
* @return string|null
|
67 |
-
*/
|
68 |
-
public static function getWebcrafticSiteUrl() {
|
69 |
-
if ( get_locale() == 'ru_RU' ) {
|
70 |
-
return self::WEBCRAFTIC_RU_SITE_URL;
|
71 |
-
}
|
72 |
-
|
73 |
-
return self::WEBCRAFTIC_SITE_URL;
|
74 |
-
}
|
75 |
-
|
76 |
-
/**
|
77 |
-
* /**
|
78 |
-
* Get a link to the official website of the developer
|
79 |
-
*
|
80 |
-
* @since 2.0.5
|
81 |
-
*
|
82 |
-
* @param string $plugin_name
|
83 |
-
* @param string $page - page address
|
84 |
-
* @param string $utm_content - from which page or part of the plugin user moved to the site
|
85 |
-
* @param string $urm_source
|
86 |
-
*
|
87 |
-
* @return string
|
88 |
-
*/
|
89 |
-
public static function getWebcrafticSitePageUrl( $plugin_name, $page, $utm_content = null, $urm_source = 'wordpress.org' ) {
|
90 |
-
$args = [ 'utm_source' => $urm_source ];
|
91 |
-
|
92 |
-
if ( ! empty( $plugin_name ) ) {
|
93 |
-
$args['utm_campaign'] = $plugin_name;
|
94 |
-
}
|
95 |
-
|
96 |
-
if ( ! empty( $utm_content ) ) {
|
97 |
-
$args['utm_content'] = $utm_content;
|
98 |
-
}
|
99 |
-
|
100 |
-
$raw_url = add_query_arg( $args, self::getWebcrafticSiteUrl() . '/' . $page . '/' );
|
101 |
-
$url = esc_url( $raw_url );
|
102 |
-
|
103 |
-
/**
|
104 |
-
* @param string $url
|
105 |
-
* @param string $raw_url
|
106 |
-
* @param string $plugin_name
|
107 |
-
* @param string $page - page address
|
108 |
-
* @param string $utm_content - from which page or part of the plugin user moved to the site
|
109 |
-
* @param string $urm_source
|
110 |
-
*/
|
111 |
-
|
112 |
-
return apply_filters( 'wbcr/clearfy/webcraftic_site_page_url', $url, $raw_url, $plugin_name, $page, $utm_content, $urm_source );
|
113 |
-
}
|
114 |
|
115 |
/**
|
116 |
* Recursive sanitation for an array
|
14 |
* @copyright (c) 2018, Webcraftic Ltd
|
15 |
*
|
16 |
*/
|
17 |
+
class WbcrFactoryClearfy221_Helpers {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
/**
|
20 |
* Recursive sanitation for an array
|
libs/factory/clearfy/includes/class-search-options.php
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WBCR\Factory_Clearfy_221;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Class Search options
|
7 |
+
*
|
8 |
+
* Allows you to collect all the options from the plugin pages, is a registry of options.
|
9 |
+
*
|
10 |
+
* @author Alex Kovlaev <alex.kovalevv@gmail.com>, https://github.com/alexkovalevv
|
11 |
+
*
|
12 |
+
* @since 2.2.0
|
13 |
+
*/
|
14 |
+
class Search_Options {
|
15 |
+
|
16 |
+
private static $_all_options;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Registers page options in the options registry
|
20 |
+
*
|
21 |
+
* This will allow the user to search all the plugin options.
|
22 |
+
*
|
23 |
+
* @param array $options
|
24 |
+
* @param string $page_url
|
25 |
+
* @param string $page_id
|
26 |
+
* @since 2.2.0
|
27 |
+
*
|
28 |
+
*/
|
29 |
+
public static function register_options($options, $page_url, $page_id)
|
30 |
+
{
|
31 |
+
if( empty($options) || !is_array($options) ) {
|
32 |
+
return;
|
33 |
+
}
|
34 |
+
|
35 |
+
$extracted_options = static::recursive_extraxt_options($options);
|
36 |
+
|
37 |
+
if( !empty($extracted_options) ) {
|
38 |
+
foreach((array)$extracted_options as $option) {
|
39 |
+
if( 'div' === $option['type'] || 'html' === $option['type'] || !isset($option['title']) ) {
|
40 |
+
continue;
|
41 |
+
}
|
42 |
+
|
43 |
+
$formated_option['title'] = $option['title'];
|
44 |
+
|
45 |
+
/*if( isset($option['hint']) ) {
|
46 |
+
$formated_option['hint'] = $option['hint'];
|
47 |
+
}*/
|
48 |
+
|
49 |
+
$formated_option['page_url'] = $page_url . '#factory-control-' . $option['name'];
|
50 |
+
$formated_option['page_id'] = $page_id;
|
51 |
+
|
52 |
+
static::$_all_options[] = $formated_option;
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Extracted options from a nested array
|
59 |
+
* @param array $options
|
60 |
+
* @return array
|
61 |
+
* @since 2.2.0
|
62 |
+
*/
|
63 |
+
protected static function recursive_extraxt_options($options)
|
64 |
+
{
|
65 |
+
$extracted_options = [];
|
66 |
+
|
67 |
+
foreach($options as $option) {
|
68 |
+
if( isset($option['items']) ) {
|
69 |
+
$extracted_options = array_merge($extracted_options, static::recursive_extraxt_options($option['items']));
|
70 |
+
} else {
|
71 |
+
$extracted_options[] = $option;
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
return $extracted_options;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Get all plugin options
|
80 |
+
* @return mixed
|
81 |
+
* @since 2.2.0
|
82 |
+
*/
|
83 |
+
public static function get_all_options()
|
84 |
+
{
|
85 |
+
return static::$_all_options;
|
86 |
+
}
|
87 |
+
}
|
libs/factory/clearfy/langs/{wbcr_factory_clearfy_212-ru_RU.mo → wbcr_factory_clearfy_221-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/clearfy/langs/{wbcr_factory_clearfy_212-ru_RU.po → wbcr_factory_clearfy_221-ru_RU.po}
RENAMED
File without changes
|
libs/factory/clearfy/pages/class-page-license.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
|
3 |
// Exit if accessed directly
|
4 |
-
if
|
5 |
exit;
|
6 |
}
|
7 |
|
@@ -11,33 +11,60 @@ 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}
|
|
|
|
|
|
|
|
|
18 |
*/
|
19 |
public $type = "page";
|
20 |
|
21 |
/**
|
22 |
* {@inheritdoc}
|
|
|
|
|
|
|
|
|
23 |
*/
|
24 |
public $page_menu_dashicon = 'dashicons-admin-network';
|
25 |
|
26 |
/**
|
27 |
* {@inheritdoc}
|
|
|
|
|
|
|
|
|
28 |
*/
|
29 |
public $show_right_sidebar_in_options = false;
|
30 |
|
31 |
/**
|
32 |
* {@inheritdoc}
|
|
|
|
|
|
|
|
|
33 |
*/
|
34 |
public $page_menu_position = 0;
|
35 |
|
36 |
/**
|
37 |
* {@inheritdoc}
|
|
|
|
|
|
|
|
|
38 |
*/
|
39 |
public $available_for_multisite = true;
|
40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
/**
|
42 |
* @var string Name of the paid plan.
|
43 |
*/
|
@@ -53,7 +80,7 @@ class Wbcr_FactoryClearfy212_LicensePage extends Wbcr_FactoryClearfy212_PageBase
|
|
53 |
|
54 |
/**
|
55 |
* @since 2.0.7
|
56 |
-
* @var \WBCR\
|
57 |
*/
|
58 |
protected $premium;
|
59 |
|
@@ -71,7 +98,7 @@ class Wbcr_FactoryClearfy212_LicensePage extends Wbcr_FactoryClearfy212_PageBase
|
|
71 |
|
72 |
/**
|
73 |
* @since 2.0.7
|
74 |
-
* @var \WBCR\
|
75 |
*/
|
76 |
protected $premium_license;
|
77 |
|
@@ -80,33 +107,37 @@ class Wbcr_FactoryClearfy212_LicensePage extends Wbcr_FactoryClearfy212_PageBase
|
|
80 |
|
81 |
/**
|
82 |
* {@inheritdoc}
|
83 |
-
* @param
|
84 |
*/
|
85 |
-
public function __construct(
|
|
|
86 |
$this->plugin = $plugin;
|
87 |
|
88 |
-
parent::__construct(
|
89 |
|
90 |
-
if
|
91 |
$this->id = $this->plugin->getPrefix() . 'license';
|
92 |
}
|
93 |
-
|
94 |
-
$this->
|
95 |
-
$this->
|
|
|
|
|
96 |
$this->premium_has_subscription = $this->premium->has_paid_subscription();
|
97 |
-
$this->premium_license
|
98 |
|
99 |
-
add_action(
|
100 |
}
|
101 |
|
102 |
/**
|
103 |
* [MAGIC] Magic method that configures assets for a page.
|
104 |
*/
|
105 |
-
public function assets(
|
106 |
-
|
|
|
107 |
|
108 |
-
$this->styles->add(
|
109 |
-
$this->scripts->add(
|
110 |
}
|
111 |
|
112 |
/**
|
@@ -114,21 +145,23 @@ class Wbcr_FactoryClearfy212_LicensePage extends Wbcr_FactoryClearfy212_PageBase
|
|
114 |
*
|
115 |
* @since 2.0.7
|
116 |
*/
|
117 |
-
public function ajax_handler()
|
118 |
-
|
|
|
119 |
}
|
120 |
|
121 |
/**
|
122 |
* {@inheritdoc}
|
123 |
*/
|
124 |
-
public function showPageContent()
|
|
|
125 |
?>
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
<?php $this->show_license_form(); ?>
|
131 |
-
|
132 |
<?php
|
133 |
}
|
134 |
|
@@ -137,15 +170,17 @@ class Wbcr_FactoryClearfy212_LicensePage extends Wbcr_FactoryClearfy212_PageBase
|
|
137 |
*
|
138 |
* @return string Before content.
|
139 |
*/
|
140 |
-
protected function get_plan_description()
|
|
|
141 |
return '';
|
142 |
}
|
143 |
|
144 |
/**
|
145 |
* @return string
|
146 |
*/
|
147 |
-
protected function get_hidden_license_key()
|
148 |
-
|
|
|
149 |
return '';
|
150 |
}
|
151 |
|
@@ -155,8 +190,9 @@ class Wbcr_FactoryClearfy212_LicensePage extends Wbcr_FactoryClearfy212_PageBase
|
|
155 |
/**
|
156 |
* @return string
|
157 |
*/
|
158 |
-
protected function get_plan()
|
159 |
-
|
|
|
160 |
return 'free';
|
161 |
}
|
162 |
|
@@ -166,24 +202,30 @@ class Wbcr_FactoryClearfy212_LicensePage extends Wbcr_FactoryClearfy212_PageBase
|
|
166 |
/**
|
167 |
* @return mixed
|
168 |
*/
|
169 |
-
protected function get_expiration_days()
|
170 |
-
|
|
|
|
|
|
|
|
|
|
|
171 |
}
|
172 |
|
173 |
/**
|
174 |
* @return string
|
175 |
*/
|
176 |
-
protected function get_billing_cycle_readable()
|
177 |
-
|
|
|
178 |
return '';
|
179 |
}
|
180 |
|
181 |
$billing_cycle = $this->premium->get_billing_cycle();
|
182 |
-
$billing
|
183 |
|
184 |
-
if
|
185 |
$billing = 'month';
|
186 |
-
} else if
|
187 |
$billing = 'year';
|
188 |
}
|
189 |
|
@@ -199,167 +241,178 @@ class Wbcr_FactoryClearfy212_LicensePage extends Wbcr_FactoryClearfy212_PageBase
|
|
199 |
*
|
200 |
* @return string
|
201 |
*/
|
202 |
-
protected function get_license_type()
|
203 |
-
|
|
|
204 |
return 'free';
|
205 |
}
|
206 |
|
207 |
$license = $this->premium_license;
|
208 |
|
209 |
-
if
|
210 |
return 'gift';
|
211 |
-
} else if
|
212 |
return 'trial';
|
213 |
}
|
214 |
|
215 |
return 'paid';
|
216 |
}
|
217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
218 |
/**
|
219 |
* @param bool|WP_Error $notice
|
220 |
*/
|
221 |
-
public function show_license_form(
|
|
|
222 |
?>
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
<?php echo $this->get_plan_description() ?>
|
228 |
-
|
229 |
-
|
230 |
-
<?php if
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
<?php endif; ?>
|
237 |
-
|
238 |
-
|
239 |
-
<?php if
|
240 |
-
|
241 |
-
|
242 |
<span class="btn btn-gold btn-inner-wrap">
|
243 |
-
<?php
|
244 |
</span>
|
245 |
-
|
246 |
-
|
247 |
<?php endif; ?>
|
248 |
-
|
249 |
-
<?php if
|
250 |
-
|
251 |
-
|
252 |
-
<?php _e(
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
<?php _e(
|
257 |
-
|
258 |
<?php endif; ?>
|
259 |
-
|
260 |
-
<?php echo ucfirst(
|
261 |
|
262 |
-
<?php if
|
263 |
-
|
264 |
-
(<?php printf(
|
265 |
</span>
|
266 |
<?php endif; ?>
|
267 |
-
|
268 |
-
<?php if
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
<?php endif; ?>
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
<?php
|
277 |
-
|
278 |
-
|
279 |
-
|
|
|
|
|
|
|
280 |
<?php endif; ?>
|
281 |
|
282 |
-
<?php if
|
283 |
-
|
284 |
-
<?php printf(
|
285 |
-
|
286 |
<?php endif; ?>
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
<span class="license-value"><?php echo esc_attr(
|
292 |
-
<span class="license-value-name"><?php _e(
|
293 |
</td>-->
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
<?php if
|
299 |
-
|
300 |
<span class="license-value">
|
301 |
-
<?php echo esc_attr(
|
302 |
-
<?php _e(
|
303 |
-
<?php echo esc_attr(
|
304 |
-
|
305 |
-
|
306 |
<?php endif; ?>
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
<?php if
|
312 |
-
|
313 |
-
<?php if
|
314 |
-
|
315 |
-
|
316 |
<?php else: ?>
|
317 |
-
|
318 |
<?php
|
319 |
-
if
|
320 |
echo 'infiniate';
|
321 |
} else {
|
322 |
echo $this->get_expiration_days();
|
323 |
}
|
324 |
?>
|
325 |
-
<small> <?php _e(
|
326 |
</span>
|
327 |
-
|
328 |
<?php endif; ?>
|
329 |
-
|
330 |
<?php endif; ?>
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
<?php if
|
338 |
-
|
339 |
<?php else: ?>
|
340 |
-
|
341 |
-
|
342 |
<?php endif; ?>
|
343 |
-
|
344 |
-
|
345 |
-
<?php _e(
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
<?php
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
<p style="margin-top: 10px;">
|
356 |
-
<?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_212' ), $this->plugin->get_support()->get_contacts_url( true, 'license_page' ) ) ?>
|
357 |
-
</p>
|
358 |
-
<?php endif; ?>
|
359 |
-
</form>
|
360 |
-
</div>
|
361 |
-
</div>
|
362 |
-
</div>
|
363 |
<?php
|
364 |
}
|
365 |
}
|
1 |
<?php
|
2 |
|
3 |
// Exit if accessed directly
|
4 |
+
if( !defined('ABSPATH') ) {
|
5 |
exit;
|
6 |
}
|
7 |
|
11 |
* @author Alex Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
|
12 |
* @since 2.0.7
|
13 |
*/
|
14 |
+
class Wbcr_FactoryClearfy221_LicensePage extends Wbcr_FactoryClearfy221_PageBase {
|
15 |
|
16 |
/**
|
17 |
* {@inheritdoc}
|
18 |
+
*
|
19 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
20 |
+
* @since 2.1.2
|
21 |
+
* @var string
|
22 |
*/
|
23 |
public $type = "page";
|
24 |
|
25 |
/**
|
26 |
* {@inheritdoc}
|
27 |
+
*
|
28 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
29 |
+
* @since 2.1.2
|
30 |
+
* @var string
|
31 |
*/
|
32 |
public $page_menu_dashicon = 'dashicons-admin-network';
|
33 |
|
34 |
/**
|
35 |
* {@inheritdoc}
|
36 |
+
*
|
37 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
38 |
+
* @since 2.1.2
|
39 |
+
* @var bool
|
40 |
*/
|
41 |
public $show_right_sidebar_in_options = false;
|
42 |
|
43 |
/**
|
44 |
* {@inheritdoc}
|
45 |
+
*
|
46 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
47 |
+
* @since 2.1.2
|
48 |
+
* @var int
|
49 |
*/
|
50 |
public $page_menu_position = 0;
|
51 |
|
52 |
/**
|
53 |
* {@inheritdoc}
|
54 |
+
*
|
55 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
56 |
+
* @since 2.1.2
|
57 |
+
* @var bool
|
58 |
*/
|
59 |
public $available_for_multisite = true;
|
60 |
|
61 |
+
/**
|
62 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
63 |
+
* @since 2.1.2
|
64 |
+
* @var string
|
65 |
+
*/
|
66 |
+
public $plugin_name;
|
67 |
+
|
68 |
/**
|
69 |
* @var string Name of the paid plan.
|
70 |
*/
|
80 |
|
81 |
/**
|
82 |
* @since 2.0.7
|
83 |
+
* @var \WBCR\Factory_429\Premium\Provider
|
84 |
*/
|
85 |
protected $premium;
|
86 |
|
98 |
|
99 |
/**
|
100 |
* @since 2.0.7
|
101 |
+
* @var \WBCR\Factory_429\Premium\Interfaces\License
|
102 |
*/
|
103 |
protected $premium_license;
|
104 |
|
107 |
|
108 |
/**
|
109 |
* {@inheritdoc}
|
110 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
111 |
*/
|
112 |
+
public function __construct(Wbcr_Factory429_Plugin $plugin)
|
113 |
+
{
|
114 |
$this->plugin = $plugin;
|
115 |
|
116 |
+
parent::__construct($plugin);
|
117 |
|
118 |
+
if( !$this->id ) {
|
119 |
$this->id = $this->plugin->getPrefix() . 'license';
|
120 |
}
|
121 |
+
|
122 |
+
$this->plugin_name = $this->plugin->getPluginName();
|
123 |
+
$this->premium = $plugin->premium;
|
124 |
+
$this->is_premium = $this->premium->is_activate();
|
125 |
+
$this->is_premium_active = $this->premium->is_active();
|
126 |
$this->premium_has_subscription = $this->premium->has_paid_subscription();
|
127 |
+
$this->premium_license = $this->premium->get_license();
|
128 |
|
129 |
+
add_action("wp_ajax_wbcr-clearfy-activate-license-for-{$this->plugin_name}", [$this, 'ajax_handler']);
|
130 |
}
|
131 |
|
132 |
/**
|
133 |
* [MAGIC] Magic method that configures assets for a page.
|
134 |
*/
|
135 |
+
public function assets($scripts, $styles)
|
136 |
+
{
|
137 |
+
parent::assets($scripts, $styles);
|
138 |
|
139 |
+
$this->styles->add(FACTORY_CLEARFY_221_URL . '/assets/css/license-manager.css');
|
140 |
+
$this->scripts->add(FACTORY_CLEARFY_221_URL . '/assets/js/license-manager.js');
|
141 |
}
|
142 |
|
143 |
/**
|
145 |
*
|
146 |
* @since 2.0.7
|
147 |
*/
|
148 |
+
public function ajax_handler()
|
149 |
+
{
|
150 |
+
wbcr_factory_clearfy_221_check_license($this->plugin);
|
151 |
}
|
152 |
|
153 |
/**
|
154 |
* {@inheritdoc}
|
155 |
*/
|
156 |
+
public function showPageContent()
|
157 |
+
{
|
158 |
?>
|
159 |
+
<div id="wcl-license-wrapper"
|
160 |
+
data-loader="<?php echo FACTORY_CLEARFY_221_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(); ?>
|
164 |
+
</div>
|
165 |
<?php
|
166 |
}
|
167 |
|
170 |
*
|
171 |
* @return string Before content.
|
172 |
*/
|
173 |
+
protected function get_plan_description()
|
174 |
+
{
|
175 |
return '';
|
176 |
}
|
177 |
|
178 |
/**
|
179 |
* @return string
|
180 |
*/
|
181 |
+
protected function get_hidden_license_key()
|
182 |
+
{
|
183 |
+
if( !$this->is_premium ) {
|
184 |
return '';
|
185 |
}
|
186 |
|
190 |
/**
|
191 |
* @return string
|
192 |
*/
|
193 |
+
protected function get_plan()
|
194 |
+
{
|
195 |
+
if( !$this->is_premium ) {
|
196 |
return 'free';
|
197 |
}
|
198 |
|
202 |
/**
|
203 |
* @return mixed
|
204 |
*/
|
205 |
+
protected function get_expiration_days()
|
206 |
+
{
|
207 |
+
if( !$this->is_premium ) {
|
208 |
+
return '';
|
209 |
+
}
|
210 |
+
|
211 |
+
return $this->premium_license->get_expiration_time('days');
|
212 |
}
|
213 |
|
214 |
/**
|
215 |
* @return string
|
216 |
*/
|
217 |
+
protected function get_billing_cycle_readable()
|
218 |
+
{
|
219 |
+
if( !$this->is_premium ) {
|
220 |
return '';
|
221 |
}
|
222 |
|
223 |
$billing_cycle = $this->premium->get_billing_cycle();
|
224 |
+
$billing = 'lifetime';
|
225 |
|
226 |
+
if( 1 == $billing_cycle ) {
|
227 |
$billing = 'month';
|
228 |
+
} else if( 12 == $billing_cycle ) {
|
229 |
$billing = 'year';
|
230 |
}
|
231 |
|
241 |
*
|
242 |
* @return string
|
243 |
*/
|
244 |
+
protected function get_license_type()
|
245 |
+
{
|
246 |
+
if( !$this->is_premium ) {
|
247 |
return 'free';
|
248 |
}
|
249 |
|
250 |
$license = $this->premium_license;
|
251 |
|
252 |
+
if( $license->is_lifetime() ) {
|
253 |
return 'gift';
|
254 |
+
} else if( $license->get_expiration_time('days') < 1 ) {
|
255 |
return 'trial';
|
256 |
}
|
257 |
|
258 |
return 'paid';
|
259 |
}
|
260 |
|
261 |
+
protected function render_learnmore_section()
|
262 |
+
{
|
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_221'), $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_221'), $this->plugin->get_support()->get_contacts_url(true, 'license_page')) ?>
|
271 |
+
</p>
|
272 |
+
<?php endif;
|
273 |
+
}
|
274 |
+
|
275 |
/**
|
276 |
* @param bool|WP_Error $notice
|
277 |
*/
|
278 |
+
public function show_license_form($notice = false)
|
279 |
+
{
|
280 |
?>
|
281 |
+
<div id="license-manager"
|
282 |
+
class="factory-bootstrap-430 onp-page-wrap <?= $this->get_license_type() ?>-license-manager-content">
|
283 |
+
<div>
|
284 |
+
<h3><?php printf(__('Activate %s', 'wbcr_factory_clearfy_221'), $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_221') ?></h4>
|
292 |
+
</div>
|
293 |
+
</div>
|
294 |
<?php endif; ?>
|
295 |
+
<div class="onp-container">
|
296 |
+
<div class="license-details">
|
297 |
+
<?php if( $this->get_license_type() == 'free' ): ?>
|
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_221') ?>
|
302 |
</span>
|
303 |
+
</a>
|
304 |
+
<p><?php printf(__('Your current license for %1$s:', 'wbcr_factory_clearfy_221'), $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_221') ?>
|
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_221') ?>
|
315 |
+
</a>
|
316 |
<?php endif; ?>
|
317 |
+
<h3>
|
318 |
+
<?php echo ucfirst($this->get_plan()); ?>
|
319 |
|
320 |
+
<?php if( $this->is_premium && $this->premium_has_subscription ): ?>
|
321 |
+
<span style="font-size: 15px;">
|
322 |
+
(<?php printf(__('Automatic renewal, every %s', ''), esc_attr($this->get_billing_cycle_readable())); ?>)
|
323 |
</span>
|
324 |
<?php endif; ?>
|
325 |
+
</h3>
|
326 |
+
<?php if( $this->is_premium ): ?>
|
327 |
+
<div class="license-key-identity">
|
328 |
+
<code><?= esc_attr($this->get_hidden_license_key()) ?></code>
|
329 |
+
</div>
|
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_221') ?></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_221') ?></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_221') ?>
|
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_221'), '') ?>
|
346 |
+
</p>
|
347 |
<?php endif; ?>
|
348 |
+
</div>
|
349 |
+
<table class="license-params" colspacing="0" colpadding="0">
|
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_221') ?></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_221') ?></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_221') ?>
|
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_221') ?></span>
|
366 |
+
</td>
|
367 |
<?php endif; ?>
|
368 |
+
<td class="license-param license-param-version">
|
369 |
+
<span class="license-value"><?= $this->plugin->getPluginVersion() ?></span>
|
370 |
+
<span class="license-value-name"><span>version</span></span>
|
371 |
+
</td>
|
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_221') ?></span>
|
376 |
+
<span class="license-value-name"><?php _e('please update the key', 'wbcr_factory_clearfy_221') ?></span>
|
377 |
<?php else: ?>
|
378 |
+
<span class="license-value">
|
379 |
<?php
|
380 |
+
if( $this->premium_license->is_lifetime() ) {
|
381 |
echo 'infiniate';
|
382 |
} else {
|
383 |
echo $this->get_expiration_days();
|
384 |
}
|
385 |
?>
|
386 |
+
<small> <?php _e('day(s)', 'wbcr_factory_clearfy_221') ?></small>
|
387 |
</span>
|
388 |
+
<span class="license-value-name"><?php _e('remained', 'wbcr_factory_clearfy_221') ?></span>
|
389 |
<?php endif; ?>
|
390 |
+
</td>
|
391 |
<?php endif; ?>
|
392 |
+
</tr>
|
393 |
+
</table>
|
394 |
+
</div>
|
395 |
+
</div>
|
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_221') ?><p>
|
400 |
<?php else: ?>
|
401 |
+
<p><?php _e('Have a key to activate the plugin? Paste it here:', 'wbcr_factory_clearfy_221') ?>
|
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_221') ?>
|
407 |
+
</button>
|
408 |
+
<div class="license-key-wrap">
|
409 |
+
<input type="text" id="license-key" name="licensekey" value="" class="form-control"/>
|
410 |
+
</div>
|
411 |
+
<?php $this->render_learnmore_section(); ?>
|
412 |
+
</form>
|
413 |
+
</div>
|
414 |
+
</div>
|
415 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
416 |
<?php
|
417 |
}
|
418 |
}
|
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_FactoryClearfy212_MoreFeaturesPage extends Wbcr_FactoryPages420_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_FactoryClearfy212_MoreFeaturesPage extends Wbcr_FactoryPages420_Impre
|
|
74 |
* @return string
|
75 |
*/
|
76 |
public function getPageTitle() {
|
77 |
-
return __( 'More features', '
|
78 |
}
|
79 |
|
80 |
/**
|
@@ -88,66 +88,66 @@ class Wbcr_FactoryClearfy212_MoreFeaturesPage extends Wbcr_FactoryPages420_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_FactoryClearfy212_MoreFeaturesPage extends Wbcr_FactoryPages420_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_FactoryClearfy221_MoreFeaturesPage extends Wbcr_FactoryPages429_ImpressiveThemplate {
|
19 |
|
20 |
/**
|
21 |
* {@inheritDoc}
|
60 |
*/
|
61 |
public $internal = true;
|
62 |
|
63 |
+
public function __construct( Wbcr_Factory429_Plugin $plugin ) {
|
64 |
+
$this->menu_title = __( 'More features (<b>free</b>)', 'wbcr_factory_clearfy_221' );
|
65 |
|
66 |
parent::__construct( $plugin );
|
67 |
|
74 |
* @return string
|
75 |
*/
|
76 |
public function getPageTitle() {
|
77 |
+
return __( 'More features', 'wbcr_factory_clearfy_221' );
|
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_221' ) ?></h3>
|
92 |
+
<p><?php _e( 'Clears the source code of the page from unused code.', 'wbcr_factory_clearfy_221' ) ?></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_221' ) ?></h3>
|
99 |
+
<p><?php _e( 'Removes duplicate pages, closes external links, changes the headers of the server.', 'wbcr_factory_clearfy_221' ) ?></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_221' ) ?></h3>
|
106 |
+
<p><?php _e( 'Enables and disables features that improve the protection of your site.', 'wbcr_factory_clearfy_221' ) ?></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_221' ) ?></h3>
|
113 |
+
<p><?php _e( 'Disables comments on the entire site or on specific pages.', 'wbcr_factory_clearfy_221' ) ?></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_221' ) ?></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_221' ) ?></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_221' ) ?></h3>
|
128 |
+
<p><?php _e( 'Allows you to remove unused widgets.', 'wbcr_factory_clearfy_221' ) ?></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_221' ) ?></h3>
|
135 |
+
<p><?php _e( 'Increases performance by disabling unused functions and reducing the number of requests.', 'wbcr_factory_clearfy_221' ) ?></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_221' ) ?></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_221' ) ?></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_221' ) ?></h3>
|
150 |
+
<p><?php _e( 'In quick mode, you can easily configure the plugin according to your needs.', 'wbcr_factory_clearfy_221' ) ?></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_221' ) ?>
|
165 |
</a>
|
166 |
</div>
|
167 |
<?php
|
libs/factory/clearfy/pages/class-pages.php
CHANGED
@@ -9,20 +9,20 @@
|
|
9 |
*/
|
10 |
|
11 |
// Exit if accessed directly
|
12 |
-
if
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
/**
|
17 |
-
* Class
|
18 |
*
|
19 |
* @method string getInfoWidget() - get widget content information
|
20 |
-
* @method string getRatingWidget(
|
21 |
* @method string getDonateWidget() - get widget content donate
|
22 |
* @method string getBusinessSuggetionWidget()
|
23 |
* @method string getSupportWidget
|
24 |
*/
|
25 |
-
class
|
26 |
|
27 |
/**
|
28 |
* {@inheritDoc}
|
@@ -49,10 +49,23 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
49 |
public $internal = true;
|
50 |
|
51 |
/**
|
52 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
*/
|
54 |
-
public function __construct(
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
56 |
}
|
57 |
|
58 |
/**
|
@@ -61,13 +74,14 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
61 |
*
|
62 |
* @return null|string
|
63 |
*/
|
64 |
-
public function __call(
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
68 |
ob_start();
|
69 |
|
70 |
-
$this->$called_method_name(
|
71 |
$content = ob_get_contents();
|
72 |
ob_end_clean();
|
73 |
|
@@ -81,28 +95,31 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
81 |
/**
|
82 |
* Requests assets (js and css) for the page.
|
83 |
*
|
84 |
-
* @param
|
85 |
-
* @param
|
86 |
*
|
87 |
* @return void
|
88 |
-
* @see
|
89 |
*
|
90 |
*/
|
91 |
-
public function assets(
|
92 |
-
|
|
|
93 |
|
94 |
-
$this->styles->add(
|
95 |
|
96 |
// todo: вынести все общие скрипты и стили фреймворка, продумать совместимость с другими плагинами
|
97 |
-
if
|
98 |
-
$this->styles->add(
|
99 |
}
|
100 |
|
101 |
-
|
102 |
-
|
103 |
-
$
|
104 |
-
|
105 |
-
|
|
|
|
|
106 |
|
107 |
/**
|
108 |
* Allows you to enqueue scripts to the internal pages of the plugin.
|
@@ -110,26 +127,28 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
110 |
*
|
111 |
* @since 2.0.5
|
112 |
*/
|
113 |
-
do_action(
|
114 |
}
|
115 |
|
116 |
/**
|
117 |
-
* @return
|
118 |
*/
|
119 |
-
public function request()
|
|
|
120 |
return $this->plugin->request;
|
121 |
}
|
122 |
|
123 |
/**
|
124 |
-
* @since 2.0.5
|
125 |
-
*
|
126 |
* @param $option_name
|
127 |
-
* @param bool $default
|
128 |
*
|
129 |
* @return mixed|void
|
|
|
|
|
130 |
*/
|
131 |
-
public function getPopulateOption(
|
132 |
-
|
|
|
133 |
}
|
134 |
|
135 |
/**
|
@@ -138,8 +157,9 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
138 |
*
|
139 |
* @return mixed|void
|
140 |
*/
|
141 |
-
public function getOption(
|
142 |
-
|
|
|
143 |
}
|
144 |
|
145 |
/**
|
@@ -148,8 +168,9 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
148 |
*
|
149 |
* @return void
|
150 |
*/
|
151 |
-
public function updatePopulateOption(
|
152 |
-
|
|
|
153 |
}
|
154 |
|
155 |
/**
|
@@ -158,8 +179,9 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
158 |
*
|
159 |
* @return void
|
160 |
*/
|
161 |
-
public function updateOption(
|
162 |
-
|
|
|
163 |
}
|
164 |
|
165 |
/**
|
@@ -167,8 +189,9 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
167 |
*
|
168 |
* @return void
|
169 |
*/
|
170 |
-
public function deletePopulateOption(
|
171 |
-
|
|
|
172 |
}
|
173 |
|
174 |
/**
|
@@ -176,41 +199,9 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
176 |
*
|
177 |
* @return void
|
178 |
*/
|
179 |
-
public function deleteOption(
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
/**
|
185 |
-
* Действие выполняется для всех страниц Clearfy и его компонентах.
|
186 |
-
* Это простое предложение перейти на PRO версию.
|
187 |
-
*/
|
188 |
-
public function multisiteProAction() {
|
189 |
-
if ( is_multisite() && $this->plugin->isNetworkActive() ) {
|
190 |
-
|
191 |
-
$license_page_url = $this->getBaseUrl( 'license' );
|
192 |
-
$upgrade_url = WbcrFactoryClearfy212_Helpers::getWebcrafticSitePageUrl( $this->plugin->getPluginName(), 'pricing', 'multisite_save_settings' );
|
193 |
-
$upgrade_price = WbcrFactoryClearfy212_Helpers::getClearfyBusinessPrice();
|
194 |
-
|
195 |
-
$html = '<div class="wbcr-factory-clearfy-212-multisite-suggetion">';
|
196 |
-
$html .= '<div class="wbcr-factory-inner-contanier">';
|
197 |
-
$html .= '<h3>' . __( 'Upgrade to Clearfy Business', 'wbcr_factory_clearfy_212' ) . '</h3>';
|
198 |
-
$html .= '<p>' . __( 'Oops... Sorry for the inconvenience caused!', 'wbcr_factory_clearfy_212' ) . '</p>';
|
199 |
-
$html .= '<p>' . __( 'Complete multisite support is available in Clearfy Business and Clearfy Business Revolution packages only!', 'wbcr_factory_clearfy_212' ) . '</p>';
|
200 |
-
$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_212' ) . '</p>';
|
201 |
-
$html .= '<p style="margin-top:20px">';
|
202 |
-
$html .= '<a href="' . $license_page_url . '" class="wbcr-factory-activate-premium" rel="noopener">' . __( 'Activate license ', 'wbcr_factory_clearfy_212' ) . '</a> ';
|
203 |
-
$html .= '<a href="' . $upgrade_url . '" class="wbcr-factory-purchase-premium" target="_blank" rel="noopener">' . sprintf( __( 'Upgrade to Clearfy Business for $%d', 'wbcr_factory_clearfy_212' ), $upgrade_price ) . '</a>';
|
204 |
-
$html .= '</p>';
|
205 |
-
$html .= '</div>';
|
206 |
-
$html .= '</div>';
|
207 |
-
|
208 |
-
$this->showPage( $html );
|
209 |
-
|
210 |
-
return;
|
211 |
-
}
|
212 |
-
|
213 |
-
$this->redirectToAction( 'index' );
|
214 |
}
|
215 |
|
216 |
/**
|
@@ -218,35 +209,36 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
218 |
*
|
219 |
* @return mixed|void
|
220 |
*/
|
221 |
-
protected function getPageWidgets(
|
|
|
222 |
$widgets = [];
|
223 |
|
224 |
-
if
|
225 |
-
$widgets['info_widget']
|
226 |
-
$widgets['rating_widget']
|
227 |
$widgets['support_widget'] = $this->getSupportWidget();
|
228 |
//$widgets['donate_widget'] = $this->getDonateWidget();
|
229 |
-
} else if
|
230 |
$widgets['business_suggetion'] = $this->getBusinessSuggetionWidget();
|
231 |
-
$widgets['info_widget']
|
232 |
-
$widgets['rating_widget']
|
233 |
}
|
234 |
|
235 |
/**
|
236 |
* @since 4.0.9 - является устаревшим
|
237 |
*/
|
238 |
-
$widgets =
|
239 |
$widgets,
|
240 |
$position,
|
241 |
$this->plugin,
|
242 |
$this
|
243 |
-
], '4.0.9', 'wbcr/factory/pages/impressive/widgets'
|
244 |
|
245 |
/**
|
246 |
* @since 4.0.1 - добавлен
|
247 |
* @since 4.0.9 - изменено имя
|
248 |
*/
|
249 |
-
$widgets = apply_filters(
|
250 |
|
251 |
return $widgets;
|
252 |
}
|
@@ -257,58 +249,60 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
257 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
258 |
* @since 2.0.2
|
259 |
*/
|
260 |
-
public function showBusinessSuggetionWidget()
|
261 |
-
|
|
|
262 |
$upgrade_price = $this->plugin->has_premium() ? $this->plugin->premium->get_price() : 0;
|
263 |
-
$purchase_url
|
264 |
|
265 |
$default_features = [
|
266 |
-
'4_premium'
|
267 |
-
'40_premium'
|
268 |
-
'multisite_support' => __(
|
269 |
-
'advance_settings'
|
270 |
-
'no_ads'
|
271 |
-
'perfect_support'
|
272 |
];
|
273 |
|
274 |
/**
|
275 |
* @since 2.0.8 - added
|
276 |
*/
|
277 |
-
$suggetion_title = __(
|
278 |
-
$suggetion_title = apply_filters(
|
279 |
|
280 |
/**
|
281 |
* @since 2.0.8 - deprecated
|
282 |
*/
|
283 |
-
$suggetion_features =
|
284 |
$default_features,
|
285 |
$this->plugin->getPluginName(),
|
286 |
$this->id
|
287 |
-
], '2.0.8', 'wbcr/clearfy/pages/suggetion_features'
|
288 |
|
289 |
/**
|
290 |
* @since 2.0.8 - renamed
|
291 |
* @since 2.0.6
|
292 |
*/
|
293 |
-
$suggetion_features = apply_filters(
|
294 |
|
295 |
-
if
|
296 |
$suggetion_features = $default_features;
|
297 |
}
|
298 |
?>
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
<?php if
|
303 |
-
<?php foreach
|
304 |
-
|
305 |
<?php endforeach; ?>
|
306 |
<?php endif; ?>
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
|
|
312 |
<?php
|
313 |
}
|
314 |
|
@@ -318,66 +312,72 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
318 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
319 |
* @since 2.0.0
|
320 |
*/
|
321 |
-
public function showInfoWidget()
|
|
|
322 |
?>
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-red">
|
327 |
-
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
|
|
328 |
</span>
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-grey">
|
333 |
-
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
|
|
334 |
</span>
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-green">
|
339 |
-
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
|
|
340 |
</span>
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
<?php
|
348 |
}
|
349 |
|
350 |
/**
|
351 |
* Создает html разметку виджета рейтинга
|
352 |
*
|
353 |
-
* @
|
|
|
354 |
* @since 2.0.0
|
355 |
*
|
356 |
-
* @
|
357 |
*/
|
358 |
-
public function showRatingWidget(
|
359 |
-
|
|
|
360 |
$page_url = "https://goo.gl/tETE2X";
|
361 |
} else {
|
362 |
$page_url = $args[0];
|
363 |
}
|
364 |
|
365 |
-
$page_url = apply_filters(
|
366 |
|
367 |
?>
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
<?php
|
382 |
}
|
383 |
|
@@ -387,23 +387,28 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
387 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
388 |
* @since 2.0.0
|
389 |
*/
|
390 |
-
public function showDonateWidget()
|
|
|
391 |
?>
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
<?php if
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
|
|
|
|
403 |
<?php else: ?>
|
404 |
-
|
|
|
|
|
405 |
<?php endif; ?>
|
406 |
-
|
407 |
<?php
|
408 |
}
|
409 |
|
@@ -413,27 +418,67 @@ class Wbcr_FactoryClearfy212_PageBase extends Wbcr_FactoryPages420_ImpressiveThe
|
|
413 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
414 |
* @since 2.0.8
|
415 |
*/
|
416 |
-
public function showSupportWidget()
|
|
|
417 |
$free_support_url = $this->plugin->get_support()->get_contacts_url();
|
418 |
-
$hot_support_url
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
419 |
?>
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
<li><span class="dashicons dashicons-sos"></span>
|
428 |
-
<a href="<?= $free_support_url ?>" target="_blank" rel="noopener"><?php _e( 'Get starting free support', 'clearfy' ); ?></a>
|
429 |
-
</li>
|
430 |
-
<li style="margin-top: 15px;background: #fff4f1;padding: 10px;color: #a58074;">
|
431 |
-
<span class="dashicons dashicons-warning"></span>
|
432 |
-
<?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.', 'clearfy' ), $hot_support_url ); ?>
|
433 |
-
</li>
|
434 |
-
</ul>
|
435 |
-
</div>
|
436 |
-
</div>
|
437 |
<?php
|
438 |
}
|
439 |
}
|
9 |
*/
|
10 |
|
11 |
// Exit if accessed directly
|
12 |
+
if( !defined('ABSPATH') ) {
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
/**
|
17 |
+
* Class Wbcr_FactoryPages429_ImpressiveThemplate
|
18 |
*
|
19 |
* @method string getInfoWidget() - get widget content information
|
20 |
+
* @method string getRatingWidget(array $args = []) - get widget content rating
|
21 |
* @method string getDonateWidget() - get widget content donate
|
22 |
* @method string getBusinessSuggetionWidget()
|
23 |
* @method string getSupportWidget
|
24 |
*/
|
25 |
+
class Wbcr_FactoryClearfy221_PageBase extends Wbcr_FactoryPages429_ImpressiveThemplate {
|
26 |
|
27 |
/**
|
28 |
* {@inheritDoc}
|
49 |
public $internal = true;
|
50 |
|
51 |
/**
|
52 |
+
* Show on the page a search form for search options of plugin?
|
53 |
+
*
|
54 |
+
* @since 2.2.0 - Added
|
55 |
+
* @var bool - true show, false hide
|
56 |
+
*/
|
57 |
+
public $show_search_options_form = true;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
61 |
*/
|
62 |
+
public function __construct(Wbcr_Factory429_Plugin $plugin)
|
63 |
+
{
|
64 |
+
parent::__construct($plugin);
|
65 |
+
|
66 |
+
if( $this->show_search_options_form && "options" === $this->type && "hide_my_wp" !== $this->id ) {
|
67 |
+
$this->register_options_to_search();
|
68 |
+
}
|
69 |
}
|
70 |
|
71 |
/**
|
74 |
*
|
75 |
* @return null|string
|
76 |
*/
|
77 |
+
public function __call($name, $arguments)
|
78 |
+
{
|
79 |
+
if( substr($name, 0, 3) == 'get' ) {
|
80 |
+
$called_method_name = 'show' . substr($name, 3);
|
81 |
+
if( method_exists($this, $called_method_name) ) {
|
82 |
ob_start();
|
83 |
|
84 |
+
$this->$called_method_name($arguments);
|
85 |
$content = ob_get_contents();
|
86 |
ob_end_clean();
|
87 |
|
95 |
/**
|
96 |
* Requests assets (js and css) for the page.
|
97 |
*
|
98 |
+
* @param Wbcr_Factory429_ScriptList $scripts
|
99 |
+
* @param Wbcr_Factory429_StyleList $styles
|
100 |
*
|
101 |
* @return void
|
102 |
+
* @see Wbcr_FactoryPages429_AdminPage
|
103 |
*
|
104 |
*/
|
105 |
+
public function assets($scripts, $styles)
|
106 |
+
{
|
107 |
+
parent::assets($scripts, $styles);
|
108 |
|
109 |
+
$this->styles->add(FACTORY_CLEARFY_221_URL . '/assets/css/clearfy-base.css');
|
110 |
|
111 |
// todo: вынести все общие скрипты и стили фреймворка, продумать совместимость с другими плагинами
|
112 |
+
if( defined('WCL_PLUGIN_URL') ) {
|
113 |
+
$this->styles->add(WCL_PLUGIN_URL . '/admin/assets/css/general.css');
|
114 |
}
|
115 |
|
116 |
+
// Script for search form on plugin options
|
117 |
+
if( $this->show_search_options_form && "options" === $this->type ) {
|
118 |
+
$this->styles->add(FACTORY_CLEARFY_221_URL . '/assets/css/libs/autocomplete.css');
|
119 |
+
|
120 |
+
$this->scripts->add(FACTORY_CLEARFY_221_URL . '/assets/js/libs/jquery.autocomplete.min.js');
|
121 |
+
$this->scripts->add(FACTORY_CLEARFY_221_URL . '/assets/js/search-options.js');
|
122 |
+
}
|
123 |
|
124 |
/**
|
125 |
* Allows you to enqueue scripts to the internal pages of the plugin.
|
127 |
*
|
128 |
* @since 2.0.5
|
129 |
*/
|
130 |
+
do_action('wbcr/clearfy/page_assets', $this->getResultId(), $scripts, $styles);
|
131 |
}
|
132 |
|
133 |
/**
|
134 |
+
* @return Wbcr_Factory429_Request
|
135 |
*/
|
136 |
+
public function request()
|
137 |
+
{
|
138 |
return $this->plugin->request;
|
139 |
}
|
140 |
|
141 |
/**
|
|
|
|
|
142 |
* @param $option_name
|
143 |
+
* @param bool $default *
|
144 |
*
|
145 |
* @return mixed|void
|
146 |
+
* @since 2.0.5
|
147 |
+
*
|
148 |
*/
|
149 |
+
public function getPopulateOption($option_name, $default = false)
|
150 |
+
{
|
151 |
+
return $this->plugin->getPopulateOption($option_name, $default);
|
152 |
}
|
153 |
|
154 |
/**
|
157 |
*
|
158 |
* @return mixed|void
|
159 |
*/
|
160 |
+
public function getOption($option_name, $default = false)
|
161 |
+
{
|
162 |
+
return $this->plugin->getOption($option_name, $default);
|
163 |
}
|
164 |
|
165 |
/**
|
168 |
*
|
169 |
* @return void
|
170 |
*/
|
171 |
+
public function updatePopulateOption($option_name, $value)
|
172 |
+
{
|
173 |
+
$this->plugin->updatePopulateOption($option_name, $value);
|
174 |
}
|
175 |
|
176 |
/**
|
179 |
*
|
180 |
* @return void
|
181 |
*/
|
182 |
+
public function updateOption($option_name, $value)
|
183 |
+
{
|
184 |
+
$this->plugin->updateOption($option_name, $value);
|
185 |
}
|
186 |
|
187 |
/**
|
189 |
*
|
190 |
* @return void
|
191 |
*/
|
192 |
+
public function deletePopulateOption($option_name)
|
193 |
+
{
|
194 |
+
$this->plugin->deletePopulateOption($option_name);
|
195 |
}
|
196 |
|
197 |
/**
|
199 |
*
|
200 |
* @return void
|
201 |
*/
|
202 |
+
public function deleteOption($option_name)
|
203 |
+
{
|
204 |
+
$this->plugin->deleteOption($option_name);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
}
|
206 |
|
207 |
/**
|
209 |
*
|
210 |
* @return mixed|void
|
211 |
*/
|
212 |
+
protected function getPageWidgets($position = 'bottom')
|
213 |
+
{
|
214 |
$widgets = [];
|
215 |
|
216 |
+
if( $position == 'bottom' ) {
|
217 |
+
$widgets['info_widget'] = $this->getInfoWidget();
|
218 |
+
$widgets['rating_widget'] = $this->getRatingWidget();
|
219 |
$widgets['support_widget'] = $this->getSupportWidget();
|
220 |
//$widgets['donate_widget'] = $this->getDonateWidget();
|
221 |
+
} else if( $position == 'right' ) {
|
222 |
$widgets['business_suggetion'] = $this->getBusinessSuggetionWidget();
|
223 |
+
$widgets['info_widget'] = $this->getInfoWidget();
|
224 |
+
$widgets['rating_widget'] = $this->getRatingWidget();
|
225 |
}
|
226 |
|
227 |
/**
|
228 |
* @since 4.0.9 - является устаревшим
|
229 |
*/
|
230 |
+
$widgets = wbcr_factory_429_apply_filters_deprecated('wbcr_factory_pages_429_imppage_get_widgets', [
|
231 |
$widgets,
|
232 |
$position,
|
233 |
$this->plugin,
|
234 |
$this
|
235 |
+
], '4.0.9', 'wbcr/factory/pages/impressive/widgets');
|
236 |
|
237 |
/**
|
238 |
* @since 4.0.1 - добавлен
|
239 |
* @since 4.0.9 - изменено имя
|
240 |
*/
|
241 |
+
$widgets = apply_filters('wbcr/factory/pages/impressive/widgets', $widgets, $position, $this->plugin, $this);
|
242 |
|
243 |
return $widgets;
|
244 |
}
|
249 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
250 |
* @since 2.0.2
|
251 |
*/
|
252 |
+
public function showBusinessSuggetionWidget()
|
253 |
+
{
|
254 |
+
$plugin_name = $this->plugin->getPluginName();
|
255 |
$upgrade_price = $this->plugin->has_premium() ? $this->plugin->premium->get_price() : 0;
|
256 |
+
$purchase_url = $this->plugin->get_support()->get_pricing_url(true, 'right_sidebar_ads');
|
257 |
|
258 |
$default_features = [
|
259 |
+
'4_premium' => __('4 premium components now;', 'wbcr_factory_clearfy_221'),
|
260 |
+
'40_premium' => __('40 new premium components within a year for the single price;', 'wbcr_factory_clearfy_221'),
|
261 |
+
'multisite_support' => __('Multisite support;', 'wbcr_factory_clearfy_221'),
|
262 |
+
'advance_settings' => __('Advanced settings;', 'wbcr_factory_clearfy_221'),
|
263 |
+
'no_ads' => __('No ads;', 'wbcr_factory_clearfy_221'),
|
264 |
+
'perfect_support' => __('Perfect support.', 'wbcr_factory_clearfy_221')
|
265 |
];
|
266 |
|
267 |
/**
|
268 |
* @since 2.0.8 - added
|
269 |
*/
|
270 |
+
$suggetion_title = __('MORE IN CLEARFY <span>BUSINESS</span>', 'wbcr_factory_clearfy_221');
|
271 |
+
$suggetion_title = apply_filters('wbcr/clearfy/pages/suggetion_title', $suggetion_title, $plugin_name, $this->id);
|
272 |
|
273 |
/**
|
274 |
* @since 2.0.8 - deprecated
|
275 |
*/
|
276 |
+
$suggetion_features = wbcr_factory_429_apply_filters_deprecated('wbcr/clearfy/page_bussines_suggetion_features', [
|
277 |
$default_features,
|
278 |
$this->plugin->getPluginName(),
|
279 |
$this->id
|
280 |
+
], '2.0.8', 'wbcr/clearfy/pages/suggetion_features');
|
281 |
|
282 |
/**
|
283 |
* @since 2.0.8 - renamed
|
284 |
* @since 2.0.6
|
285 |
*/
|
286 |
+
$suggetion_features = apply_filters('wbcr/clearfy/pages/suggetion_features', $suggetion_features, $plugin_name, $this->id);
|
287 |
|
288 |
+
if( empty($suggetion_features) ) {
|
289 |
$suggetion_features = $default_features;
|
290 |
}
|
291 |
?>
|
292 |
+
<div class="wbcr-factory-sidebar-widget wbcr-factory-clearfy-221-pro-suggettion">
|
293 |
+
<h3><?php echo $suggetion_title; ?></h3>
|
294 |
+
<ul>
|
295 |
+
<?php if( !empty($suggetion_features) ): ?>
|
296 |
+
<?php foreach($suggetion_features as $feature): ?>
|
297 |
+
<li><?= $feature ?></li>
|
298 |
<?php endforeach; ?>
|
299 |
<?php endif; ?>
|
300 |
+
</ul>
|
301 |
+
<a href="<?php echo $purchase_url ?>" class="wbcr-factory-purchase-premium" target="_blank"
|
302 |
+
rel="noopener">
|
303 |
+
<?php printf(__('Upgrade for $%s', 'wbcr_factory_clearfy_221'), $upgrade_price) ?>
|
304 |
+
</a>
|
305 |
+
</div>
|
306 |
<?php
|
307 |
}
|
308 |
|
312 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
313 |
* @since 2.0.0
|
314 |
*/
|
315 |
+
public function showInfoWidget()
|
316 |
+
{
|
317 |
?>
|
318 |
+
<div class="wbcr-factory-sidebar-widget">
|
319 |
+
<ul>
|
320 |
+
<li>
|
321 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-red">
|
322 |
+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
323 |
+
alt=""/>
|
324 |
</span>
|
325 |
+
- <?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_221'); ?>
|
326 |
+
</li>
|
327 |
+
<li>
|
328 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-grey">
|
329 |
+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
330 |
+
alt=""/>
|
331 |
</span>
|
332 |
+
- <?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_221'); ?>
|
333 |
+
</li>
|
334 |
+
<li>
|
335 |
<span class="wbcr-factory-hint-icon-simple wbcr-factory-simple-green">
|
336 |
+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC"
|
337 |
+
alt=""/>
|
338 |
</span>
|
339 |
+
- <?php _e('Absolutely safe setting, We recommend to use.', 'wbcr_factory_clearfy_221'); ?>
|
340 |
+
</li>
|
341 |
+
</ul>
|
342 |
+
----------<br>
|
343 |
+
<p><?php _e('Hover to the icon to get help for the feature you selected.', 'wbcr_factory_clearfy_221'); ?></p>
|
344 |
+
</div>
|
345 |
<?php
|
346 |
}
|
347 |
|
348 |
/**
|
349 |
* Создает html разметку виджета рейтинга
|
350 |
*
|
351 |
+
* @param array $args
|
352 |
+
*
|
353 |
* @since 2.0.0
|
354 |
*
|
355 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
356 |
*/
|
357 |
+
public function showRatingWidget(array $args)
|
358 |
+
{
|
359 |
+
if( !isset($args[0]) || empty($args[0]) ) {
|
360 |
$page_url = "https://goo.gl/tETE2X";
|
361 |
} else {
|
362 |
$page_url = $args[0];
|
363 |
}
|
364 |
|
365 |
+
$page_url = apply_filters('wbcr_factory_pages_429_imppage_rating_widget_url', $page_url, $this->plugin->getPluginName(), $this->getResultId());
|
366 |
|
367 |
?>
|
368 |
+
<div class="wbcr-factory-sidebar-widget">
|
369 |
+
<p>
|
370 |
+
<strong><?php _e('Do you want the plugin to improved and update?', 'wbcr_factory_clearfy_221'); ?></strong>
|
371 |
+
</p>
|
372 |
+
<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_221'); ?></p>
|
373 |
+
<p><?php _e('And also write your ideas on how to extend or improve the plugin.', 'wbcr_factory_clearfy_221'); ?></p>
|
374 |
+
<p>
|
375 |
+
<i class="wbcr-factory-icon-5stars"></i>
|
376 |
+
<a href="<?= $page_url ?>" title="Go rate us" target="_blank">
|
377 |
+
<strong><?php _e('Go rate us and push ideas', 'wbcr_factory_clearfy_221'); ?></strong>
|
378 |
+
</a>
|
379 |
+
</p>
|
380 |
+
</div>
|
381 |
<?php
|
382 |
}
|
383 |
|
387 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
388 |
* @since 2.0.0
|
389 |
*/
|
390 |
+
public function showDonateWidget()
|
391 |
+
{
|
392 |
?>
|
393 |
+
<div class="wbcr-factory-sidebar-widget">
|
394 |
+
<p>
|
395 |
+
<strong><?php _e('Donation for plugin development', 'wbcr_factory_clearfy_221'); ?></strong>
|
396 |
+
</p>
|
397 |
+
<?php if( get_locale() !== 'ru_RU' ): ?>
|
398 |
+
<form id="wbcr-factory-paypal-donation-form" action="https://www.paypal.com/cgi-bin/webscr"
|
399 |
+
method="post" target="_blank">
|
400 |
+
<input type="hidden" name="cmd" value="_s-xclick">
|
401 |
+
<input type="hidden" name="hosted_button_id" value="VDX7JNTQPNPFW">
|
402 |
+
<div class="wbcr-factory-donation-price">5$</div>
|
403 |
+
<input type="image" src="<?= FACTORY_PAGES_429_URL ?>/templates/assets/img/paypal-donate.png"
|
404 |
+
border="0" name="submit" alt="PayPal – The safer, easier way to pay online!">
|
405 |
+
</form>
|
406 |
<?php else: ?>
|
407 |
+
<iframe frameborder="0" allowtransparency="true" scrolling="no"
|
408 |
+
src="https://money.yandex.ru/embed/donate.xml?account=410011242846510&quickpay=donate&payment-type-choice=on&mobile-payment-type-choice=on&default-sum=300&targets=%D0%9D%D0%B0+%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D1%83+%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0+%D0%B8+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83+%D0%BD%D0%BE%D0%B2%D1%8B%D1%85+%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9.+&target-visibility=on&project-name=Webcraftic&project-site=&button-text=05&comment=on&hint=%D0%9A%D0%B0%D0%BA%D1%83%D1%8E+%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8E+%D0%BD%D1%83%D0%B6%D0%BD%D0%BE+%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C+%D0%B2+%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%3F&mail=on&successURL="
|
409 |
+
width="508" height="187"></iframe>
|
410 |
<?php endif; ?>
|
411 |
+
</div>
|
412 |
<?php
|
413 |
}
|
414 |
|
418 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
419 |
* @since 2.0.8
|
420 |
*/
|
421 |
+
public function showSupportWidget()
|
422 |
+
{
|
423 |
$free_support_url = $this->plugin->get_support()->get_contacts_url();
|
424 |
+
$hot_support_url = $this->plugin->get_support()->get_site_url() . '/other-questions-support';
|
425 |
+
|
426 |
+
?>
|
427 |
+
<div id="wbcr-clr-support-widget" class="wbcr-factory-sidebar-widget">
|
428 |
+
<p><strong><?php _e('Having Issues?', 'clearfy'); ?></strong></p>
|
429 |
+
<div class="wbcr-clr-support-widget-body">
|
430 |
+
<p>
|
431 |
+
<?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!', 'clearfy'); ?>
|
432 |
+
</p>
|
433 |
+
<ul>
|
434 |
+
<li><span class="dashicons dashicons-sos"></span>
|
435 |
+
<a href="<?= $free_support_url ?>" target="_blank"
|
436 |
+
rel="noopener"><?php _e('Get starting free support', 'clearfy'); ?></a>
|
437 |
+
</li>
|
438 |
+
<li style="margin-top: 15px;background: #fff4f1;padding: 10px;color: #a58074;">
|
439 |
+
<span class="dashicons dashicons-warning"></span>
|
440 |
+
<?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.', 'clearfy'), $hot_support_url); ?>
|
441 |
+
</li>
|
442 |
+
</ul>
|
443 |
+
</div>
|
444 |
+
</div>
|
445 |
+
<?php
|
446 |
+
}
|
447 |
+
|
448 |
+
/**
|
449 |
+
* Registers page options in the options registry
|
450 |
+
*
|
451 |
+
* This will allow the user to search all the plugin options.
|
452 |
+
*/
|
453 |
+
public function register_options_to_search()
|
454 |
+
{
|
455 |
+
require_once FACTORY_CLEARFY_221_DIR . '/includes/class-search-options.php';
|
456 |
+
|
457 |
+
$options = $this->getPageOptions();
|
458 |
+
$page_url = $this->getBaseUrl();
|
459 |
+
$page_id = $this->getResultId();
|
460 |
+
|
461 |
+
\WBCR\Factory_Clearfy_221\Search_Options::register_options($options, $page_url, $page_id);
|
462 |
+
}
|
463 |
+
|
464 |
+
/**
|
465 |
+
* Add search plugin options form to each option page
|
466 |
+
*/
|
467 |
+
public function printAllNotices()
|
468 |
+
{
|
469 |
+
parent::printAllNotices(); // TODO: Change the autogenerated stub
|
470 |
+
|
471 |
+
if( 'page' === $this->type || !$this->show_search_options_form ) {
|
472 |
+
return;
|
473 |
+
}
|
474 |
?>
|
475 |
+
<div id="wbcr-factory-clearfy-221__search_options_form" class="wbcr-factory-clearfy-221__autocomplete-wrap">
|
476 |
+
<label for="autocomplete" class="wbcr-factory-clearfy-221__autocomplete-label">
|
477 |
+
<?php _e('Can\'t find the settings you need? Use the search by the plugin options:', 'wbcr_factory_clearfy_221'); ?>
|
478 |
+
</label>
|
479 |
+
<input type="text" name="country" id="wbcr-factory-clearfy-221__autocomplete"/>
|
480 |
+
|
481 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
482 |
<?php
|
483 |
}
|
484 |
}
|
libs/factory/core/boot.php
CHANGED
@@ -10,53 +10,53 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if
|
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 |
|
58 |
-
require_once(
|
59 |
|
60 |
-
require_once(
|
61 |
-
require_once(
|
62 |
#endcomp
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( defined('FACTORY_429_LOADED') ) {
|
18 |
return;
|
19 |
}
|
20 |
|
21 |
+
define('FACTORY_429_LOADED', true);
|
22 |
|
23 |
+
define('FACTORY_429_VERSION', '4.2.9');
|
24 |
|
25 |
+
define('FACTORY_429_DIR', dirname(__FILE__));
|
26 |
+
define('FACTORY_429_URL', plugins_url(null, __FILE__));
|
27 |
|
28 |
+
load_plugin_textdomain('wbcr_factory_429', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
29 |
|
30 |
#comp merge
|
31 |
+
require_once(FACTORY_429_DIR . '/includes/functions.php');
|
32 |
|
33 |
+
require_once(FACTORY_429_DIR . '/includes/entities/class-factory-paths.php');
|
34 |
+
require_once(FACTORY_429_DIR . '/includes/entities/class-factory-support.php');
|
35 |
|
36 |
+
require_once(FACTORY_429_DIR . '/includes/class-factory-requests.php');
|
37 |
+
require_once(FACTORY_429_DIR . '/includes/class-factory-options.php');
|
38 |
+
require_once(FACTORY_429_DIR . '/includes/class-factory-plugin-base.php');
|
39 |
+
require_once(FACTORY_429_DIR . '/includes/class-factory-migrations.php');
|
40 |
+
require_once(FACTORY_429_DIR . '/includes/class-factory-notices.php');
|
41 |
|
42 |
// ASSETS
|
43 |
+
require_once(FACTORY_429_DIR . '/includes/assets-managment/class-factory-assets-list.php');
|
44 |
+
require_once(FACTORY_429_DIR . '/includes/assets-managment/class-factory-script-list.php');
|
45 |
+
require_once(FACTORY_429_DIR . '/includes/assets-managment/class-factory-style-list.php');
|
46 |
|
47 |
// PREMIUM
|
48 |
+
require_once(FACTORY_429_DIR . '/includes/premium/class-factory-license-interface.php');
|
49 |
+
require_once(FACTORY_429_DIR . '/includes/premium/class-factory-provider-abstract.php');
|
50 |
+
require_once(FACTORY_429_DIR . '/includes/premium/class-factory-manager.php');
|
51 |
|
52 |
// UPDATES
|
53 |
+
require_once(FACTORY_429_DIR . '/includes/updates/repositories/class-factory-repository-abstract.php');
|
54 |
+
require_once(FACTORY_429_DIR . '/includes/updates/repositories/class-factory-wordpress.php');
|
55 |
+
require_once(FACTORY_429_DIR . '/includes/updates/class-factory-upgrader.php');
|
56 |
+
require_once(FACTORY_429_DIR . '/includes/updates/class-factory-premium-upgrader.php');
|
57 |
|
58 |
+
require_once(FACTORY_429_DIR . '/includes/class-factory-plugin-abstract.php');
|
59 |
|
60 |
+
require_once(FACTORY_429_DIR . '/includes/activation/class-factory-activator.php');
|
61 |
+
require_once(FACTORY_429_DIR . '/includes/activation/class-factory-update.php');
|
62 |
#endcomp
|
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_Factory429_Activator {
|
23 |
|
24 |
/**
|
25 |
* Curent plugin.
|
26 |
*
|
27 |
+
* @var Wbcr_Factory429_Plugin
|
28 |
*/
|
29 |
public $plugin;
|
30 |
|
31 |
+
public function __construct( Wbcr_Factory429_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_Factory429_Update {
|
24 |
|
25 |
/**
|
26 |
* Current plugin
|
27 |
*
|
28 |
+
* @var Wbcr_Factory429_Plugin
|
29 |
*/
|
30 |
var $plugin;
|
31 |
|
32 |
+
public function __construct( Wbcr_Factory429_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_Factory420_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_Factory429_AssetsList {
|
23 |
|
24 |
protected $all = [];
|
25 |
public $header_place = [];
|
29 |
protected $default_place;
|
30 |
|
31 |
/**
|
32 |
+
* @var Wbcr_Factory429_Plugin
|
33 |
*/
|
34 |
protected $plugin;
|
35 |
|
36 |
/**
|
37 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
38 |
* @param bool $defaultIsFooter
|
39 |
*/
|
40 |
+
public function __construct( Wbcr_Factory429_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_Factory420_ScriptList extends Wbcr_Factory420_AssetsList {
|
|
149 |
* @param string $varname
|
150 |
* @param string $data
|
151 |
*
|
152 |
-
* @return
|
153 |
*/
|
154 |
public function localize( $varname, $data ) {
|
155 |
$bindTo = count( $this->all ) == 0 ? null : end( $this->all );
|
@@ -158,7 +158,8 @@ class Wbcr_Factory420_ScriptList extends Wbcr_Factory420_AssetsList {
|
|
158 |
return $this;
|
159 |
}
|
160 |
|
161 |
-
$
|
|
|
162 |
|
163 |
return $this;
|
164 |
}
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_Factory429_ScriptList extends Wbcr_Factory429_AssetsList {
|
24 |
|
25 |
public $localize_data = [];
|
26 |
public $use_ajax = false;
|
149 |
* @param string $varname
|
150 |
* @param string $data
|
151 |
*
|
152 |
+
* @return Wbcr_Factory429_ScriptList $this
|
153 |
*/
|
154 |
public function localize( $varname, $data ) {
|
155 |
$bindTo = count( $this->all ) == 0 ? null : end( $this->all );
|
158 |
return $this;
|
159 |
}
|
160 |
|
161 |
+
$handle = ! empty( $bindTo['handle'] ) ? $bindTo['handle'] : $bindTo['file_url'];
|
162 |
+
$this->localize_data[ $handle ] = [ $varname, $data ];
|
163 |
|
164 |
return $this;
|
165 |
}
|
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_Factory429_StyleList extends Wbcr_Factory429_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_221' ), $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_429' ), $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_429' ), $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_429;
|
4 |
|
5 |
use Exception;
|
6 |
+
use Wbcr_Factory429_Plugin;
|
7 |
|
8 |
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
exit;
|
35 |
/**
|
36 |
* Migrations constructor.
|
37 |
*
|
38 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
39 |
*
|
40 |
* @throws Exception
|
41 |
*/
|
42 |
+
public function __construct( Wbcr_Factory429_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_429' ) . "</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_429' ) . '</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_429" ) . ' ' . date( "Y-m-d H:i:s", $this->get_plugin_activated_time() ) . "<br>";
|
166 |
|
167 |
+
$notice_text .= __( "Old plugin version (debug):", "wbcr_factory_429" ) . ' ' . $this->get_old_plugin_version() . "<br>";
|
168 |
+
$notice_text .= __( "Current plugin version:", "wbcr_factory_429" ) . ' ' . $this->get_current_plugin_version() . "<br>";
|
169 |
+
$notice_text .= __( "Need migration:", "wbcr_factory_429" ) . ' ' . ( $this->need_migration() ? "true" : "false" ) . "<br><br>";
|
170 |
+
$notice_text .= "<a href='{$migrate_url}' class='button button-default'>" . __( "Migrate now", "wbcr_factory_429" ) . "</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_429' ) . '</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_429' ) );
|
509 |
}
|
510 |
|
511 |
$tokens = token_get_all( $phpCode );
|
libs/factory/core/includes/class-factory-notices.php
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
-
use
|
6 |
|
7 |
// Exit if accessed directly
|
8 |
-
if
|
9 |
exit;
|
10 |
}
|
11 |
|
@@ -27,7 +27,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
27 |
class Notices {
|
28 |
|
29 |
/**
|
30 |
-
* @var
|
31 |
*/
|
32 |
protected $plugin;
|
33 |
/**
|
@@ -58,22 +58,23 @@ class Notices {
|
|
58 |
/**
|
59 |
* Инициализируем уведомлений сразу после загрузки модуля уведомлений
|
60 |
*
|
61 |
-
* @param
|
62 |
*/
|
63 |
-
public function __construct(
|
|
|
64 |
//default notices
|
65 |
//---
|
66 |
|
67 |
-
$this->plugin
|
68 |
-
$this->dissmised_notices = $this->plugin->getPopulateOption(
|
69 |
|
70 |
-
add_action(
|
71 |
|
72 |
-
if
|
73 |
-
add_action(
|
74 |
$this,
|
75 |
'dismiss_notice'
|
76 |
-
]
|
77 |
}
|
78 |
}
|
79 |
|
@@ -82,51 +83,37 @@ class Notices {
|
|
82 |
* Уведомления собираются через фильтр wbcr_factory_admin_notices, если в массиве уведомлений,
|
83 |
* хотя бы одно, соответствует условиям в параметре $notice['where'], то метод печает вспомогательные скрипты и уведомления.
|
84 |
*/
|
85 |
-
public function currentScreenAction()
|
|
|
86 |
/**
|
87 |
-
* @since 2.1.2 -
|
88 |
*/
|
89 |
-
$this->notices =
|
90 |
-
$this->notices,
|
91 |
-
$this->plugin->getPluginName(),
|
92 |
-
], '2.1.2', 'wbcr/factory/admin_notices' );
|
93 |
|
94 |
-
|
95 |
-
* @since 2.1.2 - Добавлен, модуль factory_notices_000 был удален. Поэтому в этому хуке мы заменили префикс на factory_420
|
96 |
-
*/
|
97 |
-
$this->notices = apply_filters( 'wbcr/factory/admin_notices', $this->notices, $this->plugin->getPluginName() );
|
98 |
-
|
99 |
-
if ( count( $this->notices ) == 0 ) {
|
100 |
return;
|
101 |
}
|
102 |
|
103 |
$screen = get_current_screen();
|
104 |
|
105 |
$has_notices = false;
|
106 |
-
foreach
|
107 |
-
if
|
108 |
continue;
|
109 |
}
|
110 |
|
111 |
-
$where = !
|
112 |
|
113 |
-
if
|
114 |
$has_notices = true;
|
115 |
break;
|
116 |
};
|
117 |
}
|
118 |
|
119 |
-
if
|
120 |
-
add_action(
|
121 |
|
122 |
-
|
123 |
-
if ( current_user_can( 'manage_network' ) ) {
|
124 |
-
add_action( 'network_admin_notices', [ $this, 'show_notices' ] );
|
125 |
-
add_action( 'admin_notices', [ $this, 'show_notices' ] );
|
126 |
-
}
|
127 |
-
} else {
|
128 |
-
add_action( 'admin_notices', [ $this, 'show_notices' ] );
|
129 |
-
}
|
130 |
}
|
131 |
}
|
132 |
|
@@ -135,27 +122,41 @@ class Notices {
|
|
135 |
* Уведомления показываются только на определенных страницах через параметр $notice['where'],
|
136 |
* если уведомление ранее было скрыто или не соотвествует правилам $notice['where'], оно не будет показано!
|
137 |
*/
|
138 |
-
public function show_notices()
|
139 |
-
|
|
|
140 |
return;
|
141 |
}
|
142 |
|
143 |
-
if
|
144 |
return;
|
145 |
}
|
146 |
|
147 |
$screen = get_current_screen();
|
148 |
|
149 |
-
foreach
|
150 |
|
151 |
-
if
|
152 |
continue;
|
153 |
}
|
154 |
|
155 |
-
$where = !
|
156 |
-
|
157 |
-
if
|
158 |
-
$this->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
};
|
160 |
}
|
161 |
}
|
@@ -163,7 +164,7 @@ class Notices {
|
|
163 |
/**
|
164 |
* Показывает уведомление, по переданным параметрам
|
165 |
*
|
166 |
-
* @param array $data
|
167 |
* $data['id'] - Индентификатор уведомления
|
168 |
* $data['type'] - Тип уведомления (error, warning, success)
|
169 |
* $notice['where'] - На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
|
@@ -173,36 +174,37 @@ class Notices {
|
|
173 |
* Пример time() + 3600 (1ч), уведомление будет скрыто на 1 час.
|
174 |
* $data['classes'] - Произвольный классы для контейнера уведомления.
|
175 |
*/
|
176 |
-
public function show_notice(
|
177 |
-
|
178 |
-
|
179 |
-
'
|
180 |
-
'
|
181 |
-
'
|
|
|
182 |
'dismiss_expires' => 0,
|
183 |
-
'classes'
|
184 |
-
]
|
185 |
|
186 |
-
if
|
187 |
return;
|
188 |
}
|
189 |
|
190 |
-
$plugin_name = str_replace(
|
191 |
|
192 |
-
$classes = array_merge(
|
193 |
'notice',
|
194 |
'notice-' . $settings['type'],
|
195 |
$plugin_name . '-factory-notice'
|
196 |
-
], $settings['classes']
|
197 |
|
198 |
-
if
|
199 |
$classes[] = 'is-dismissible';
|
200 |
$classes[] = $plugin_name . '-factory-notice-dismiss';
|
201 |
}
|
202 |
?>
|
203 |
-
|
204 |
<?= $data['text'] ?>
|
205 |
-
|
206 |
<?php
|
207 |
}
|
208 |
|
@@ -210,37 +212,38 @@ class Notices {
|
|
210 |
* Когда пользователь нажимает кнопку закрыть уведомление,
|
211 |
* отправляется ajax запрос с вызовом текущего метода
|
212 |
*/
|
213 |
-
public function dismiss_notice()
|
214 |
-
|
215 |
-
|
|
|
216 |
}
|
217 |
|
218 |
-
check_admin_referer(
|
219 |
|
220 |
// Имя уведомления (идентификатор)
|
221 |
-
$name = $this->plugin->request->post(
|
222 |
|
223 |
// Время в Unix timestamp, по истечению, которого уведомление снова будет показано
|
224 |
// Если передан 0, то уведомление будет скрыто навсегда
|
225 |
-
$expires = $this->plugin->request->post(
|
226 |
|
227 |
-
if
|
228 |
-
wp_send_json_error(
|
229 |
}
|
230 |
|
231 |
-
$notices = $this->plugin->getPopulateOption(
|
232 |
|
233 |
-
if
|
234 |
-
foreach
|
235 |
-
if
|
236 |
-
unset(
|
237 |
}
|
238 |
}
|
239 |
}
|
240 |
|
241 |
-
$notices[
|
242 |
|
243 |
-
$this->plugin->updatePopulateOption(
|
244 |
|
245 |
wp_send_json_success();
|
246 |
}
|
@@ -250,11 +253,12 @@ class Notices {
|
|
250 |
* Печает в подвале страницы код, для взаимодействия с сервером через ajax,
|
251 |
* код используется при нажатии на кнопку закрыть уведомление. *
|
252 |
*/
|
253 |
-
public function print_js_code()
|
254 |
-
|
|
|
255 |
|
256 |
?>
|
257 |
-
|
258 |
jQuery(function($) {
|
259 |
|
260 |
$(document).on('click', '.<?php echo $plugin_name; ?>-factory-notice-dismiss .notice-dismiss', function() {
|
@@ -267,7 +271,7 @@ class Notices {
|
|
267 |
});
|
268 |
|
269 |
});
|
270 |
-
|
271 |
<?php
|
272 |
}
|
273 |
|
@@ -275,13 +279,14 @@ class Notices {
|
|
275 |
/**
|
276 |
* Проверяет скрыто уведоление или нет
|
277 |
*
|
278 |
-
* @param string $notice_id
|
279 |
*
|
280 |
* @return bool
|
281 |
*/
|
282 |
-
protected function is_dissmissed(
|
283 |
-
|
284 |
-
|
|
|
285 |
|
286 |
return $expires === 0 || $expires > time();
|
287 |
}
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_429;
|
4 |
|
5 |
+
use Wbcr_Factory429_Plugin;
|
6 |
|
7 |
// Exit if accessed directly
|
8 |
+
if( !defined('ABSPATH') ) {
|
9 |
exit;
|
10 |
}
|
11 |
|
27 |
class Notices {
|
28 |
|
29 |
/**
|
30 |
+
* @var Wbcr_Factory429_Plugin
|
31 |
*/
|
32 |
protected $plugin;
|
33 |
/**
|
58 |
/**
|
59 |
* Инициализируем уведомлений сразу после загрузки модуля уведомлений
|
60 |
*
|
61 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
62 |
*/
|
63 |
+
public function __construct($plugin)
|
64 |
+
{
|
65 |
//default notices
|
66 |
//---
|
67 |
|
68 |
+
$this->plugin = $plugin;
|
69 |
+
$this->dissmised_notices = $this->plugin->getPopulateOption('factory_dismissed_notices', []);
|
70 |
|
71 |
+
add_action('current_screen', [$this, 'currentScreenAction']);
|
72 |
|
73 |
+
if( defined('DOING_AJAX') && DOING_AJAX ) {
|
74 |
+
add_action('wp_ajax_' . $this->plugin->getPluginName() . '_dismiss_notice', [
|
75 |
$this,
|
76 |
'dismiss_notice'
|
77 |
+
]);
|
78 |
}
|
79 |
}
|
80 |
|
83 |
* Уведомления собираются через фильтр wbcr_factory_admin_notices, если в массиве уведомлений,
|
84 |
* хотя бы одно, соответствует условиям в параметре $notice['where'], то метод печает вспомогательные скрипты и уведомления.
|
85 |
*/
|
86 |
+
public function currentScreenAction()
|
87 |
+
{
|
88 |
/**
|
89 |
+
* @since 2.1.2 - Добавлен, модуль factory_notices_000 был удален. Поэтому в этому хуке мы заменили префикс на factory_429
|
90 |
*/
|
91 |
+
$this->notices = apply_filters('wbcr/factory/admin_notices', $this->notices, $this->plugin->getPluginName());
|
|
|
|
|
|
|
92 |
|
93 |
+
if( count($this->notices) == 0 ) {
|
|
|
|
|
|
|
|
|
|
|
94 |
return;
|
95 |
}
|
96 |
|
97 |
$screen = get_current_screen();
|
98 |
|
99 |
$has_notices = false;
|
100 |
+
foreach((array)$this->notices as $notice) {
|
101 |
+
if( !isset($notice['id']) ) {
|
102 |
continue;
|
103 |
}
|
104 |
|
105 |
+
$where = !isset($notice['where']) || empty($notice['where']) ? $this->default_where : $notice['where'];
|
106 |
|
107 |
+
if( in_array($screen->base, $where) && !$this->is_dissmissed($notice['id']) ) {
|
108 |
$has_notices = true;
|
109 |
break;
|
110 |
};
|
111 |
}
|
112 |
|
113 |
+
if( $has_notices ) {
|
114 |
+
add_action('admin_footer', [$this, 'print_js_code']);
|
115 |
|
116 |
+
$this->show_notices();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
}
|
118 |
}
|
119 |
|
122 |
* Уведомления показываются только на определенных страницах через параметр $notice['where'],
|
123 |
* если уведомление ранее было скрыто или не соотвествует правилам $notice['where'], оно не будет показано!
|
124 |
*/
|
125 |
+
public function show_notices()
|
126 |
+
{
|
127 |
+
if( count($this->notices) == 0 ) {
|
128 |
return;
|
129 |
}
|
130 |
|
131 |
+
if( !current_user_can('activate_plugins') || !current_user_can('edit_plugins') || !current_user_can('install_plugins') ) {
|
132 |
return;
|
133 |
}
|
134 |
|
135 |
$screen = get_current_screen();
|
136 |
|
137 |
+
foreach($this->notices as $notice) {
|
138 |
|
139 |
+
if( !isset($notice['id']) ) {
|
140 |
continue;
|
141 |
}
|
142 |
|
143 |
+
$where = !isset($notice['where']) || empty($notice['where']) ? $this->default_where : $notice['where'];
|
144 |
+
|
145 |
+
if( in_array($screen->base, $where) && !$this->is_dissmissed($notice['id']) ) {
|
146 |
+
if( $this->plugin->isNetworkActive() ) {
|
147 |
+
if( current_user_can('manage_network') ) {
|
148 |
+
add_action('network_admin_notices', function () use ($notice) {
|
149 |
+
$this->show_notice($notice);
|
150 |
+
});
|
151 |
+
add_action('admin_notices', function () use ($notice) {
|
152 |
+
$this->show_notice($notice);
|
153 |
+
});
|
154 |
+
}
|
155 |
+
} else {
|
156 |
+
add_action('admin_notices', function () use ($notice) {
|
157 |
+
$this->show_notice($notice);
|
158 |
+
});
|
159 |
+
}
|
160 |
};
|
161 |
}
|
162 |
}
|
164 |
/**
|
165 |
* Показывает уведомление, по переданным параметрам
|
166 |
*
|
167 |
+
* @param array $data - Параметры уведомления
|
168 |
* $data['id'] - Индентификатор уведомления
|
169 |
* $data['type'] - Тип уведомления (error, warning, success)
|
170 |
* $notice['where'] - На каких страницах показывать уведомление ('plugins', 'dashboard', 'edit')
|
174 |
* Пример time() + 3600 (1ч), уведомление будет скрыто на 1 час.
|
175 |
* $data['classes'] - Произвольный классы для контейнера уведомления.
|
176 |
*/
|
177 |
+
public function show_notice($data)
|
178 |
+
{
|
179 |
+
$settings = wp_parse_args($data, [
|
180 |
+
'id' => null,
|
181 |
+
'text' => null,
|
182 |
+
'type' => 'error',
|
183 |
+
'dismissible' => false,
|
184 |
'dismiss_expires' => 0,
|
185 |
+
'classes' => []
|
186 |
+
]);
|
187 |
|
188 |
+
if( empty($settings['id']) || empty($settings['text']) ) {
|
189 |
return;
|
190 |
}
|
191 |
|
192 |
+
$plugin_name = str_replace('_', '-', $this->plugin->getPluginName());
|
193 |
|
194 |
+
$classes = array_merge([
|
195 |
'notice',
|
196 |
'notice-' . $settings['type'],
|
197 |
$plugin_name . '-factory-notice'
|
198 |
+
], $settings['classes']);
|
199 |
|
200 |
+
if( $settings['dismissible'] ) {
|
201 |
$classes[] = 'is-dismissible';
|
202 |
$classes[] = $plugin_name . '-factory-notice-dismiss';
|
203 |
}
|
204 |
?>
|
205 |
+
<div data-name="wbcr_factory_notice_<?php echo esc_attr($data['id']) ?>" data-expires="<?= esc_attr($settings['dismiss_expires']) ?>" data-nonce="<?php echo wp_create_nonce($this->plugin->getPluginName() . '_factory_dismiss_notice'); ?>" class="<?php echo esc_attr(implode(' ', $classes)) ?>">
|
206 |
<?= $data['text'] ?>
|
207 |
+
</div>
|
208 |
<?php
|
209 |
}
|
210 |
|
212 |
* Когда пользователь нажимает кнопку закрыть уведомление,
|
213 |
* отправляется ajax запрос с вызовом текущего метода
|
214 |
*/
|
215 |
+
public function dismiss_notice()
|
216 |
+
{
|
217 |
+
if( !current_user_can('activate_plugins') || !current_user_can('edit_plugins') || !current_user_can('install_plugins') ) {
|
218 |
+
wp_die(-1, 403);
|
219 |
}
|
220 |
|
221 |
+
check_admin_referer($this->plugin->getPluginName() . '_factory_dismiss_notice', 'nonce');
|
222 |
|
223 |
// Имя уведомления (идентификатор)
|
224 |
+
$name = $this->plugin->request->post('name', null, true);
|
225 |
|
226 |
// Время в Unix timestamp, по истечению, которого уведомление снова будет показано
|
227 |
// Если передан 0, то уведомление будет скрыто навсегда
|
228 |
+
$expires = $this->plugin->request->post('expires', 0, 'intval');
|
229 |
|
230 |
+
if( empty($name) ) {
|
231 |
+
wp_send_json_error(['error_message' => 'You must pass the notification "Name"! Action was rejected.']);
|
232 |
}
|
233 |
|
234 |
+
$notices = $this->plugin->getPopulateOption("factory_dismissed_notices", []);
|
235 |
|
236 |
+
if( !empty($notices) ) {
|
237 |
+
foreach((array)$notices as $notice_id => $notice_expires) {
|
238 |
+
if( $notice_expires !== 0 && $notice_expires < time() ) {
|
239 |
+
unset($notices[$notice_id]);
|
240 |
}
|
241 |
}
|
242 |
}
|
243 |
|
244 |
+
$notices[$name] = $expires;
|
245 |
|
246 |
+
$this->plugin->updatePopulateOption('factory_dismissed_notices', $notices);
|
247 |
|
248 |
wp_send_json_success();
|
249 |
}
|
253 |
* Печает в подвале страницы код, для взаимодействия с сервером через ajax,
|
254 |
* код используется при нажатии на кнопку закрыть уведомление. *
|
255 |
*/
|
256 |
+
public function print_js_code()
|
257 |
+
{
|
258 |
+
$plugin_name = str_replace('_', '-', $this->plugin->getPluginName());
|
259 |
|
260 |
?>
|
261 |
+
<script type="text/javascript">
|
262 |
jQuery(function($) {
|
263 |
|
264 |
$(document).on('click', '.<?php echo $plugin_name; ?>-factory-notice-dismiss .notice-dismiss', function() {
|
271 |
});
|
272 |
|
273 |
});
|
274 |
+
</script>
|
275 |
<?php
|
276 |
}
|
277 |
|
279 |
/**
|
280 |
* Проверяет скрыто уведоление или нет
|
281 |
*
|
282 |
+
* @param string $notice_id - имя уведомления
|
283 |
*
|
284 |
* @return bool
|
285 |
*/
|
286 |
+
protected function is_dissmissed($notice_id)
|
287 |
+
{
|
288 |
+
if( !empty($this->dissmised_notices) && isset($this->dissmised_notices['wbcr_factory_notice_' . $notice_id]) ) {
|
289 |
+
$expires = (int)$this->dissmised_notices['wbcr_factory_notice_' . $notice_id];
|
290 |
|
291 |
return $expires === 0 || $expires > time();
|
292 |
}
|
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_429;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
use Exception;
|
10 |
}
|
11 |
|
12 |
/**
|
13 |
+
* Трейт используется для расширения базового класса плагина Wbcr_Factory429_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
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
// Exit if accessed directly
|
3 |
-
if
|
4 |
exit;
|
5 |
}
|
6 |
|
@@ -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 |
|
@@ -75,36 +75,39 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
75 |
* Ассоциативный массив со списком аддонов плагина. Аддоны плагина являются частью одного проекта,
|
76 |
* но не как отдельный плагин.
|
77 |
*
|
78 |
-
* @
|
|
|
|
|
79 |
*/
|
80 |
-
private $
|
81 |
|
82 |
/**
|
83 |
* The Adverts Manager class
|
84 |
*
|
85 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
86 |
* @since 4.1.9
|
87 |
-
* @var WBCR\
|
88 |
*/
|
89 |
private $adverts;
|
90 |
|
91 |
/**
|
92 |
* Инициализирует компоненты фреймворка и плагина.
|
93 |
*
|
94 |
-
* @
|
95 |
-
*
|
96 |
-
* @param array $data A set of plugin data.
|
97 |
*
|
98 |
-
* @param string $plugin_path
|
99 |
*
|
100 |
* @throws Exception
|
|
|
|
|
101 |
*/
|
102 |
-
public function __construct(
|
|
|
103 |
|
104 |
-
parent::__construct(
|
105 |
|
106 |
-
$this->request = new
|
107 |
-
//$this->route = new
|
108 |
|
109 |
// INIT PLUGIN FRAMEWORK MODULES
|
110 |
// Framework modules should always be loaded first,
|
@@ -127,27 +130,29 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
127 |
|
128 |
// init actions
|
129 |
$this->register_plugin_hooks();
|
130 |
-
}
|
131 |
|
132 |
-
|
133 |
-
|
|
|
134 |
|
135 |
/**
|
136 |
* Устанавливает класс менеджер, которому плагин будет делегировать подключение ресурсов (картинок,
|
137 |
* скриптов, стилей) фреймворка.
|
138 |
*
|
139 |
-
* @param
|
140 |
*/
|
141 |
-
public function setBootstap(
|
|
|
142 |
$this->bootstrap = $bootstrap;
|
143 |
}
|
144 |
|
145 |
/**
|
146 |
* Устанавливает класс менеджер, которому будет делегирована работа с html формами фреймворка.
|
147 |
*
|
148 |
-
* @param
|
149 |
*/
|
150 |
-
public function setForms(
|
|
|
151 |
$this->forms = $forms;
|
152 |
}
|
153 |
|
@@ -157,9 +162,10 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
157 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
158 |
* @since 4.1.9
|
159 |
*/
|
160 |
-
public function set_adverts_manager(
|
161 |
-
|
162 |
-
|
|
|
163 |
}
|
164 |
}
|
165 |
|
@@ -169,14 +175,16 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
169 |
* С помощью этого класса, мы проверяем валидность лицензий и получаем дополнительную информацию
|
170 |
* о лицензии и ее покупателе. Класс используется в премиум менеджере.
|
171 |
*
|
|
|
|
|
|
|
172 |
* @since 4.1.6 - Добавлен
|
173 |
*
|
174 |
-
* @param string $name Имя провайдер
|
175 |
-
* @param string $class_name Имя класса провайдера
|
176 |
*/
|
177 |
-
public function set_license_provider(
|
178 |
-
|
179 |
-
|
|
|
180 |
}
|
181 |
}
|
182 |
|
@@ -186,14 +194,16 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
186 |
* С помощью этого класса мы реализиуем доставку и откат обновлений плагина, на сайт пользователя.
|
187 |
* Скачиваение премиум версий происходит по защенному каналу. Класс используется в менеджере обновлений.
|
188 |
*
|
|
|
|
|
|
|
189 |
* @since 4.1.7 - Добавлен
|
190 |
*
|
191 |
-
* @param string $name Имя репозитория
|
192 |
-
* @param string $class_name Имя класса репозитория
|
193 |
*/
|
194 |
-
public function set_update_repository(
|
195 |
-
|
196 |
-
|
|
|
197 |
}
|
198 |
}
|
199 |
|
@@ -203,11 +213,12 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
203 |
* Доступен глобально через метод app(), чаще всего используется для создания точек для ротации
|
204 |
* рекламных объявлений.
|
205 |
*
|
206 |
-
* @
|
207 |
* @since 1.1
|
208 |
-
* @
|
209 |
*/
|
210 |
-
public function get_adverts_manager()
|
|
|
211 |
return $this->adverts;
|
212 |
}
|
213 |
|
@@ -215,29 +226,41 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
215 |
* Устанавливает текстовый домен для плагина. Текстовый домен берется из заголовка входного
|
216 |
* файла плагина.
|
217 |
*
|
|
|
218 |
* @since 4.0.8 - Добавлен
|
219 |
*
|
220 |
* @see https://codex.wordpress.org/I18n_for_WordPress_Developers
|
221 |
* @see https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/327828 - документация по входному файлу
|
222 |
*/
|
223 |
-
|
224 |
-
|
|
|
225 |
return;
|
226 |
}
|
227 |
|
228 |
-
$locale = apply_filters(
|
229 |
|
230 |
-
$mofile = $
|
231 |
|
232 |
-
if
|
233 |
-
load_muplugin_textdomain(
|
234 |
}
|
235 |
}
|
236 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
237 |
/**
|
238 |
* Все страницы плагина создаются через специальную обертку, за которую отвечает модуль
|
239 |
* фреймворка pages. Разработчик создает собственный класс, унаследованный от
|
240 |
-
*
|
241 |
* Метод выполняет подключение класса страницы и регистрирует его в модуле фреймворка
|
242 |
* pages.
|
243 |
*
|
@@ -246,33 +269,34 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
246 |
*
|
247 |
* @see https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/222887949 - документация по созданию страниц
|
248 |
*
|
249 |
-
* @param string $class_name
|
250 |
-
* Регистрируемый класс должен быть унаследован от класса
|
251 |
-
* @param string $file_path
|
252 |
*
|
253 |
* @throws Exception
|
254 |
*/
|
255 |
-
public function registerPage(
|
|
|
256 |
// todo: https://webcraftic.atlassian.net/projects/PCS/issues/PCS-88
|
257 |
// if ( $this->isNetworkActive() && ! is_network_admin() ) {
|
258 |
// return;
|
259 |
// }
|
260 |
|
261 |
-
if
|
262 |
-
throw new Exception(
|
263 |
}
|
264 |
|
265 |
-
require_once(
|
266 |
|
267 |
-
if
|
268 |
-
throw new Exception(
|
269 |
}
|
270 |
|
271 |
-
if
|
272 |
-
throw new Exception(
|
273 |
}
|
274 |
|
275 |
-
|
276 |
}
|
277 |
|
278 |
/**
|
@@ -281,27 +305,29 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
281 |
* Wbcr_FactoryTypes000_Type, а затем регистрирует его через этот метод. Метод выполняет
|
282 |
* подключение класса с новым типом записи и регистрирует его в модуле фреймворка types. *
|
283 |
*
|
284 |
-
* @param string $class_name
|
285 |
* Регистрируемый класс должен быть унаследован от класса Wbcr_FactoryTypes000_Type.
|
286 |
-
* @param string $file_path
|
287 |
*
|
288 |
* @throws Exception
|
289 |
* @deprecated 4.1.7 You cannot use it!
|
290 |
*/
|
291 |
-
public function registerType(
|
292 |
-
|
|
|
293 |
}
|
294 |
|
295 |
/**
|
296 |
* Registers a class to activate the plugin.
|
297 |
*
|
298 |
-
* @
|
299 |
-
*
|
300 |
-
* @param string $className class name of the plugin activator.
|
301 |
*
|
302 |
* @return void
|
|
|
|
|
303 |
*/
|
304 |
-
public function registerActivation(
|
|
|
305 |
$this->activator_class[] = $className;
|
306 |
}
|
307 |
|
@@ -311,71 +337,72 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
311 |
/**
|
312 |
* It's invoked on plugin activation. Don't excite it directly.
|
313 |
*
|
314 |
-
* @since 1.0.0
|
315 |
* @return void
|
|
|
316 |
*/
|
317 |
-
public function activation_hook()
|
|
|
318 |
|
319 |
/**
|
320 |
* @since 4.1.1 - change hook name
|
321 |
*/
|
322 |
-
if
|
323 |
return;
|
324 |
}
|
325 |
|
326 |
/**
|
327 |
-
*
|
328 |
*
|
329 |
* @since 4.1.1 - deprecated
|
330 |
*/
|
331 |
-
|
332 |
$this
|
333 |
-
], '4.1.1', "wbcr/factory/plugin_activation"
|
334 |
|
335 |
/**
|
336 |
* wbcr/factory/plugin_activation
|
337 |
*
|
338 |
* @since 4.1.2 - deprecated
|
339 |
*/
|
340 |
-
|
341 |
$this
|
342 |
-
], '4.1.2', "wbcr/factory/before_plugin_activation"
|
343 |
|
344 |
/**
|
345 |
* wbcr/factory/before_plugin_activation
|
346 |
*
|
347 |
* @since 4.1.2 - added
|
348 |
*/
|
349 |
-
do_action(
|
350 |
|
351 |
/**
|
352 |
* # wbcr/factory/plugin_{$this->plugin_name}_activation
|
353 |
*
|
354 |
* @since 4.1.2 - deprecated
|
355 |
*/
|
356 |
-
|
357 |
$this
|
358 |
-
], '4.1.2', "wbcr/factory/before_plugin_{$this->plugin_name}_activation"
|
359 |
|
360 |
/**
|
361 |
-
*
|
362 |
*
|
363 |
* @since 4.1.1 - deprecated
|
364 |
*/
|
365 |
-
|
366 |
$this
|
367 |
-
], '4.1.1', "wbcr/factory/before_plugin_{$this->plugin_name}_activation"
|
368 |
|
369 |
/**
|
370 |
* wbcr/factory/plugin_{$this->plugin_name}_activation
|
371 |
*
|
372 |
* @since 4.1.2 - added
|
373 |
*/
|
374 |
-
do_action(
|
375 |
|
376 |
-
if
|
377 |
-
foreach
|
378 |
-
$activator = new $activator_class(
|
379 |
$activator->activate();
|
380 |
}
|
381 |
}
|
@@ -383,80 +410,81 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
383 |
/**
|
384 |
* @since 4.1.2 - added
|
385 |
*/
|
386 |
-
do_action(
|
387 |
|
388 |
/**
|
389 |
* @since 4.1.2 - added
|
390 |
*/
|
391 |
-
do_action(
|
392 |
}
|
393 |
|
394 |
/**
|
395 |
* It's invoked on plugin deactionvation. Don't excite it directly.
|
396 |
*
|
397 |
-
* @since 1.0.0
|
398 |
* @return void
|
|
|
399 |
*/
|
400 |
-
public function deactivation_hook()
|
|
|
401 |
|
402 |
/**
|
403 |
* @since 4.1.1 - change hook name
|
404 |
*/
|
405 |
-
if
|
406 |
return;
|
407 |
}
|
408 |
|
409 |
/**
|
410 |
-
*
|
411 |
*
|
412 |
* @since 4.1.1 - deprecated
|
413 |
*/
|
414 |
-
|
415 |
$this
|
416 |
-
], '4.1.1', "wbcr/factory/plugin_deactivation"
|
417 |
|
418 |
/**
|
419 |
* wbcr/factory/plugin_deactivation
|
420 |
*
|
421 |
* @since 4.1.2 - deprecated
|
422 |
*/
|
423 |
-
|
424 |
$this
|
425 |
-
], '4.1.2', "wbcr/factory/before_plugin_deactivation"
|
426 |
|
427 |
/**
|
428 |
* wbcr/factory/plugin_deactivation
|
429 |
*
|
430 |
* @since 4.1.2 - added
|
431 |
*/
|
432 |
-
do_action(
|
433 |
|
434 |
/**
|
435 |
-
*
|
436 |
*
|
437 |
* @since 4.1.1 - deprecated
|
438 |
*/
|
439 |
-
|
440 |
$this
|
441 |
-
], '4.1.1', "wbcr/factory/before_plugin_{$this->plugin_name}_deactivation"
|
442 |
|
443 |
/**
|
444 |
* wbcr/factory/plugin_{$this->plugin_name}_deactivation
|
445 |
*
|
446 |
* @since 4.1.2 - deprecated
|
447 |
*/
|
448 |
-
|
449 |
$this
|
450 |
-
], '4.1.2', "wbcr/factory/before_plugin_{$this->plugin_name}_deactivation"
|
451 |
|
452 |
/**
|
453 |
* @since 4.1.2 - added
|
454 |
*/
|
455 |
-
do_action(
|
456 |
|
457 |
-
if
|
458 |
-
foreach
|
459 |
-
$activator = new $activator_class(
|
460 |
$activator->deactivate();
|
461 |
}
|
462 |
}
|
@@ -464,12 +492,12 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
464 |
/**
|
465 |
* @since 4.1.2 - added
|
466 |
*/
|
467 |
-
do_action(
|
468 |
|
469 |
/**
|
470 |
* @since 4.1.2 - added
|
471 |
*/
|
472 |
-
do_action(
|
473 |
}
|
474 |
|
475 |
/**
|
@@ -481,55 +509,78 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
481 |
* @return string|void
|
482 |
* @throws Exception
|
483 |
*/
|
484 |
-
public function getPluginPageUrl(
|
485 |
-
|
486 |
-
|
|
|
487 |
}
|
488 |
|
489 |
-
if
|
490 |
-
_doing_it_wrong(
|
491 |
|
492 |
return null;
|
493 |
}
|
494 |
|
495 |
-
return
|
496 |
}
|
497 |
|
498 |
-
|
499 |
/**
|
500 |
* Загружает аддоны для плагина, как часть проекта, а не как отдельный плагин
|
|
|
|
|
501 |
*/
|
502 |
-
|
503 |
-
|
|
|
|
|
|
|
|
|
504 |
return;
|
505 |
}
|
506 |
|
507 |
-
foreach
|
508 |
-
if
|
509 |
-
|
510 |
-
// При подключении аддона, мы объявляем константу, что такой аддон уже загружен
|
511 |
-
// $addon_name индентификатор аддона в вверхнем регистре
|
512 |
-
$const_name = strtoupper( 'LOADING_' . str_replace( '-', '_', $addon_name ) . '_AS_ADDON' );
|
513 |
|
514 |
-
if ( !
|
515 |
-
|
516 |
}
|
517 |
|
518 |
-
|
519 |
|
520 |
-
|
521 |
-
|
|
|
522 |
|
523 |
-
|
524 |
-
$plugin_data['as_addon'] = true;
|
525 |
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
|
530 |
-
|
531 |
-
|
532 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
533 |
}
|
534 |
}
|
535 |
}
|
@@ -545,24 +596,25 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
545 |
* @return void
|
546 |
* @throws Exception
|
547 |
*/
|
548 |
-
private function init_framework_modules()
|
|
|
549 |
|
550 |
-
if
|
551 |
-
foreach
|
552 |
-
$scope = isset(
|
553 |
|
554 |
-
if
|
555 |
|
556 |
-
if
|
557 |
-
throw new Exception(
|
558 |
}
|
559 |
|
560 |
$module_boot_file = $this->get_paths()->absolute . '/' . $module[0] . '/boot.php';
|
561 |
require_once $module_boot_file;
|
562 |
|
563 |
-
$this->loaded_factory_modules[
|
564 |
|
565 |
-
do_action(
|
566 |
}
|
567 |
}
|
568 |
}
|
@@ -570,12 +622,12 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
570 |
/**
|
571 |
* @since 4.1.1 - deprecated
|
572 |
*/
|
573 |
-
|
574 |
|
575 |
/**
|
576 |
* @since 4.1.1 - add
|
577 |
*/
|
578 |
-
do_action(
|
579 |
}
|
580 |
|
581 |
|
@@ -584,52 +636,68 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
584 |
*
|
585 |
* @since 1.0.0
|
586 |
*/
|
587 |
-
private function register_plugin_hooks()
|
|
|
588 |
|
589 |
-
add_action(
|
|
|
590 |
|
591 |
-
|
592 |
-
|
|
|
|
|
|
|
593 |
|
594 |
-
|
595 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
596 |
}
|
597 |
}
|
598 |
|
599 |
/**
|
600 |
* Инициализируем миграции плагина
|
601 |
*
|
602 |
-
* @since 4.1.1
|
603 |
* @return void
|
604 |
* @throws Exception
|
|
|
605 |
*/
|
606 |
-
protected function init_plugin_migrations()
|
607 |
-
|
|
|
608 |
}
|
609 |
|
610 |
/**
|
611 |
* Инициализируем уведомления плагина
|
612 |
*
|
613 |
-
* @since 4.1.1
|
614 |
* @return void
|
|
|
615 |
*/
|
616 |
-
protected function init_plugin_notices()
|
617 |
-
|
|
|
618 |
}
|
619 |
|
620 |
/**
|
621 |
* Создает нового рабочего для проверки обновлений и апгрейда текущего плагина.
|
622 |
*
|
623 |
-
* @since 4.1.1
|
624 |
-
*
|
625 |
* @param array $data
|
626 |
*
|
627 |
* @return void
|
628 |
* @throws Exception
|
|
|
|
|
629 |
*/
|
630 |
-
protected function init_plugin_updates()
|
631 |
-
|
632 |
-
|
|
|
633 |
}
|
634 |
}
|
635 |
|
@@ -640,35 +708,24 @@ abstract class Wbcr_Factory420_Plugin extends Wbcr_Factory420_Base {
|
|
640 |
* Дополнительно создает рабочего, чтобы совершить апгрейд до премиум версии
|
641 |
* и запустить проверку обновлений для этого модуля.
|
642 |
*
|
643 |
-
* @since 4.1.1
|
644 |
* @throws Exception
|
|
|
645 |
*/
|
646 |
-
protected function init_plugin_premium_features()
|
647 |
-
|
|
|
648 |
$this->premium = null;
|
649 |
|
650 |
return;
|
651 |
}
|
652 |
|
653 |
// Создаем экземляр премиум менеджера, мы сможем к нему обращаться глобально.
|
654 |
-
$this->premium = WBCR\
|
655 |
|
656 |
// Подключаем премиум апгрейдер
|
657 |
-
if
|
658 |
-
new WBCR\
|
659 |
}
|
660 |
}
|
661 |
-
|
662 |
-
// ----------------------------------------------------------------------
|
663 |
-
// Public methods
|
664 |
-
// ----------------------------------------------------------------------
|
665 |
-
|
666 |
-
public function newScriptList() {
|
667 |
-
return new Wbcr_Factory420_ScriptList( $this );
|
668 |
-
}
|
669 |
-
|
670 |
-
public function newStyleList() {
|
671 |
-
return new Wbcr_Factory420_StyleList( $this );
|
672 |
-
}
|
673 |
}
|
674 |
|
1 |
<?php
|
2 |
// Exit if accessed directly
|
3 |
+
if( !defined('ABSPATH') ) {
|
4 |
exit;
|
5 |
}
|
6 |
|
24 |
* @package factory-core
|
25 |
*
|
26 |
*/
|
27 |
+
abstract class Wbcr_Factory429_Plugin extends Wbcr_Factory429_Base {
|
28 |
|
29 |
/**
|
30 |
+
* Instance class Wbcr_Factory429_Request, required manages http requests
|
31 |
*
|
32 |
* @see https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/390561806
|
33 |
+
* @var Wbcr_Factory429_Request
|
34 |
*/
|
35 |
public $request;
|
36 |
|
37 |
/**
|
38 |
* @see https://webcraftic.atlassian.net/wiki/spaces/FFD/pages/393936924
|
39 |
+
* @var \WBCR\Factory_429\Premium\Provider
|
40 |
*/
|
41 |
public $premium;
|
42 |
|
43 |
/**
|
44 |
* The Bootstrap Manager class
|
45 |
*
|
46 |
+
* @var Wbcr_FactoryBootstrap430_Manager
|
47 |
*/
|
48 |
public $bootstrap;
|
49 |
|
50 |
/**
|
51 |
* The Bootstrap Manager class
|
52 |
*
|
53 |
+
* @var Wbcr_FactoryForms427_Manager
|
54 |
*/
|
55 |
public $forms;
|
56 |
|
57 |
/**
|
58 |
+
* Простой массив со списком зарегистрированных классов унаследованных от Wbcr_Factory429_Activator.
|
59 |
* Классы активации используются для упаковки набора функций, которые нужно выполнить во время
|
60 |
* активации плагина.
|
61 |
*
|
62 |
+
* @var array[] Wbcr_Factory429_Activator
|
63 |
*/
|
64 |
protected $activator_class = [];
|
65 |
|
75 |
* Ассоциативный массив со списком аддонов плагина. Аддоны плагина являются частью одного проекта,
|
76 |
* но не как отдельный плагин.
|
77 |
*
|
78 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
79 |
+
* @since 4.2.0
|
80 |
+
* @var array
|
81 |
*/
|
82 |
+
private $loaded_plugin_components = [];
|
83 |
|
84 |
/**
|
85 |
* The Adverts Manager class
|
86 |
*
|
87 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
88 |
* @since 4.1.9
|
89 |
+
* @var WBCR\Factory_Adverts_109\Base
|
90 |
*/
|
91 |
private $adverts;
|
92 |
|
93 |
/**
|
94 |
* Инициализирует компоненты фреймворка и плагина.
|
95 |
*
|
96 |
+
* @param array $data A set of plugin data.
|
|
|
|
|
97 |
*
|
98 |
+
* @param string $plugin_path A full path to the main plugin file.
|
99 |
*
|
100 |
* @throws Exception
|
101 |
+
* @since 1.0.0
|
102 |
+
*
|
103 |
*/
|
104 |
+
public function __construct($plugin_path, $data)
|
105 |
+
{
|
106 |
|
107 |
+
parent::__construct($plugin_path, $data);
|
108 |
|
109 |
+
$this->request = new Wbcr_Factory429_Request();
|
110 |
+
//$this->route = new Wbcr_Factory429_Route();
|
111 |
|
112 |
// INIT PLUGIN FRAMEWORK MODULES
|
113 |
// Framework modules should always be loaded first,
|
130 |
|
131 |
// init actions
|
132 |
$this->register_plugin_hooks();
|
|
|
133 |
|
134 |
+
// INIT PLUGIN COMPONENTS
|
135 |
+
$this->init_plugin_components();
|
136 |
+
}
|
137 |
|
138 |
/**
|
139 |
* Устанавливает класс менеджер, которому плагин будет делегировать подключение ресурсов (картинок,
|
140 |
* скриптов, стилей) фреймворка.
|
141 |
*
|
142 |
+
* @param Wbcr_FactoryBootstrap430_Manager $bootstrap
|
143 |
*/
|
144 |
+
public function setBootstap(Wbcr_FactoryBootstrap430_Manager $bootstrap)
|
145 |
+
{
|
146 |
$this->bootstrap = $bootstrap;
|
147 |
}
|
148 |
|
149 |
/**
|
150 |
* Устанавливает класс менеджер, которому будет делегирована работа с html формами фреймворка.
|
151 |
*
|
152 |
+
* @param Wbcr_FactoryForms427_Manager $forms
|
153 |
*/
|
154 |
+
public function setForms(Wbcr_FactoryForms427_Manager $forms)
|
155 |
+
{
|
156 |
$this->forms = $forms;
|
157 |
}
|
158 |
|
162 |
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
163 |
* @since 4.1.9
|
164 |
*/
|
165 |
+
public function set_adverts_manager($class_name)
|
166 |
+
{
|
167 |
+
if( empty($this->adverts) && $this->render_adverts ) {
|
168 |
+
$this->adverts = new $class_name($this, $this->adverts_settings);
|
169 |
}
|
170 |
}
|
171 |
|
175 |
* С помощью этого класса, мы проверяем валидность лицензий и получаем дополнительную информацию
|
176 |
* о лицензии и ее покупателе. Класс используется в премиум менеджере.
|
177 |
*
|
178 |
+
* @param string $name Имя провайдер
|
179 |
+
* @param string $class_name Имя класса провайдера
|
180 |
+
*
|
181 |
* @since 4.1.6 - Добавлен
|
182 |
*
|
|
|
|
|
183 |
*/
|
184 |
+
public function set_license_provider($name, $class_name)
|
185 |
+
{
|
186 |
+
if( !isset(WBCR\Factory_429\Premium\Manager::$providers[$name]) ) {
|
187 |
+
WBCR\Factory_429\Premium\Manager::$providers[$name] = $class_name;
|
188 |
}
|
189 |
}
|
190 |
|
194 |
* С помощью этого класса мы реализиуем доставку и откат обновлений плагина, на сайт пользователя.
|
195 |
* Скачиваение премиум версий происходит по защенному каналу. Класс используется в менеджере обновлений.
|
196 |
*
|
197 |
+
* @param string $name Имя репозитория
|
198 |
+
* @param string $class_name Имя класса репозитория
|
199 |
+
*
|
200 |
* @since 4.1.7 - Добавлен
|
201 |
*
|
|
|
|
|
202 |
*/
|
203 |
+
public function set_update_repository($name, $class_name)
|
204 |
+
{
|
205 |
+
if( !isset(WBCR\Factory_429\Updates\Upgrader::$repositories[$name]) ) {
|
206 |
+
WBCR\Factory_429\Updates\Upgrader::$repositories[$name] = $class_name;
|
207 |
}
|
208 |
}
|
209 |
|
213 |
* Доступен глобально через метод app(), чаще всего используется для создания точек для ротации
|
214 |
* рекламных объявлений.
|
215 |
*
|
216 |
+
* @return \WBCR\Factory_Adverts_109\Base
|
217 |
* @since 1.1
|
218 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
219 |
*/
|
220 |
+
public function get_adverts_manager()
|
221 |
+
{
|
222 |
return $this->adverts;
|
223 |
}
|
224 |
|
226 |
* Устанавливает текстовый домен для плагина. Текстовый домен берется из заголовка входного
|
227 |
* файла плагина.
|
228 |
*
|
229 |
+
* @since 4.2.5 - Добавлены 2 аргумента $text_domain, $plugin_dir. Теперь protected
|
230 |
* @since 4.0.8 - Добавлен
|
231 |
*
|
232 |
* @see https://codex.wordpress.org/I18n_for_WordPress_Developers
|
233 |
* @see https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/327828 - документация по входному файлу
|
234 |
*/
|
235 |
+
protected function set_text_domain($text_domain, $plugin_dir)
|
236 |
+
{
|
237 |
+
if( empty($text_domain) || empty($plugin_dir) ) {
|
238 |
return;
|
239 |
}
|
240 |
|
241 |
+
$locale = apply_filters('plugin_locale', is_admin() ? get_user_locale() : get_locale(), $text_domain);
|
242 |
|
243 |
+
$mofile = $text_domain . '-' . $locale . '.mo';
|
244 |
|
245 |
+
if( !load_textdomain($text_domain, $plugin_dir . '/languages/' . $mofile) ) {
|
246 |
+
load_muplugin_textdomain($text_domain);
|
247 |
}
|
248 |
}
|
249 |
|
250 |
+
public function newScriptList()
|
251 |
+
{
|
252 |
+
return new Wbcr_Factory429_ScriptList($this);
|
253 |
+
}
|
254 |
+
|
255 |
+
public function newStyleList()
|
256 |
+
{
|
257 |
+
return new Wbcr_Factory429_StyleList($this);
|
258 |
+
}
|
259 |
+
|
260 |
/**
|
261 |
* Все страницы плагина создаются через специальную обертку, за которую отвечает модуль
|
262 |
* фреймворка pages. Разработчик создает собственный класс, унаследованный от
|
263 |
+
* Wbcr_FactoryPages429_AdminPage, а затем регистрирует его через этот метод.
|
264 |
* Метод выполняет подключение класса страницы и регистрирует его в модуле фреймворка
|
265 |
* pages.
|
266 |
*
|
269 |
*
|
270 |
* @see https://webcraftic.atlassian.net/wiki/spaces/CNCFC/pages/222887949 - документация по созданию страниц
|
271 |
*
|
272 |
+
* @param string $class_name Имя регистрируемого класса страницы. Пример: WCL_Page_Name.
|
273 |
+
* Регистрируемый класс должен быть унаследован от класса Wbcr_FactoryPages429_AdminPage.
|
274 |
+
* @param string $file_path Абсолютный путь к файлу с классом страницы.
|
275 |
*
|
276 |
* @throws Exception
|
277 |
*/
|
278 |
+
public function registerPage($class_name, $file_path)
|
279 |
+
{
|
280 |
// todo: https://webcraftic.atlassian.net/projects/PCS/issues/PCS-88
|
281 |
// if ( $this->isNetworkActive() && ! is_network_admin() ) {
|
282 |
// return;
|
283 |
// }
|
284 |
|
285 |
+
if( !file_exists($file_path) ) {
|
286 |
+
throw new Exception('The page file was not found by the path {' . $file_path . '} you set.');
|
287 |
}
|
288 |
|
289 |
+
require_once($file_path);
|
290 |
|
291 |
+
if( !class_exists($class_name) ) {
|
292 |
+
throw new Exception('A class with this name {' . $class_name . '} does not exist.');
|
293 |
}
|
294 |
|
295 |
+
if( !class_exists('Wbcr_FactoryPages429') ) {
|
296 |
+
throw new Exception('The factory_pages_429 module is not included.');
|
297 |
}
|
298 |
|
299 |
+
Wbcr_FactoryPages429::register($this, $class_name);
|
300 |
}
|
301 |
|
302 |
/**
|
305 |
* Wbcr_FactoryTypes000_Type, а затем регистрирует его через этот метод. Метод выполняет
|
306 |
* подключение класса с новым типом записи и регистрирует его в модуле фреймворка types. *
|
307 |
*
|
308 |
+
* @param string $class_name Имя регистрируемого класса страницы. Пример: WCL_Type_Name.
|
309 |
* Регистрируемый класс должен быть унаследован от класса Wbcr_FactoryTypes000_Type.
|
310 |
+
* @param string $file_path Абсолютный путь к файлу с классом страницы.
|
311 |
*
|
312 |
* @throws Exception
|
313 |
* @deprecated 4.1.7 You cannot use it!
|
314 |
*/
|
315 |
+
public function registerType($class_name, $file_path)
|
316 |
+
{
|
317 |
+
throw new Exception('As of factory core module 4.1.7, the "registerType" method is deprecated. You cannot use it!');
|
318 |
}
|
319 |
|
320 |
/**
|
321 |
* Registers a class to activate the plugin.
|
322 |
*
|
323 |
+
* @param string $className class name of the plugin activator.
|
|
|
|
|
324 |
*
|
325 |
* @return void
|
326 |
+
* @since 1.0.0
|
327 |
+
*
|
328 |
*/
|
329 |
+
public function registerActivation($className)
|
330 |
+
{
|
331 |
$this->activator_class[] = $className;
|
332 |
}
|
333 |
|
337 |
/**
|
338 |
* It's invoked on plugin activation. Don't excite it directly.
|
339 |
*
|
|
|
340 |
* @return void
|
341 |
+
* @since 1.0.0
|
342 |
*/
|
343 |
+
public function activation_hook()
|
344 |
+
{
|
345 |
|
346 |
/**
|
347 |
* @since 4.1.1 - change hook name
|
348 |
*/
|
349 |
+
if( apply_filters("wbcr/factory_429/cancel_plugin_activation_{$this->plugin_name}", false) ) {
|
350 |
return;
|
351 |
}
|
352 |
|
353 |
/**
|
354 |
+
* wbcr_factory_429_plugin_activation
|
355 |
*
|
356 |
* @since 4.1.1 - deprecated
|
357 |
*/
|
358 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_plugin_activation', [
|
359 |
$this
|
360 |
+
], '4.1.1', "wbcr/factory/plugin_activation");
|
361 |
|
362 |
/**
|
363 |
* wbcr/factory/plugin_activation
|
364 |
*
|
365 |
* @since 4.1.2 - deprecated
|
366 |
*/
|
367 |
+
wbcr_factory_429_do_action_deprecated('wbcr/factory/plugin_activation', [
|
368 |
$this
|
369 |
+
], '4.1.2', "wbcr/factory/before_plugin_activation");
|
370 |
|
371 |
/**
|
372 |
* wbcr/factory/before_plugin_activation
|
373 |
*
|
374 |
* @since 4.1.2 - added
|
375 |
*/
|
376 |
+
do_action('wbcr/factory/before_plugin_activation', $this);
|
377 |
|
378 |
/**
|
379 |
* # wbcr/factory/plugin_{$this->plugin_name}_activation
|
380 |
*
|
381 |
* @since 4.1.2 - deprecated
|
382 |
*/
|
383 |
+
wbcr_factory_429_do_action_deprecated("wbcr/factory/plugin_{$this->plugin_name}_activation", [
|
384 |
$this
|
385 |
+
], '4.1.2', "wbcr/factory/before_plugin_{$this->plugin_name}_activation");
|
386 |
|
387 |
/**
|
388 |
+
* wbcr_factory_429_plugin_activation_' . $this->plugin_name
|
389 |
*
|
390 |
* @since 4.1.1 - deprecated
|
391 |
*/
|
392 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_plugin_activation_' . $this->plugin_name, [
|
393 |
$this
|
394 |
+
], '4.1.1', "wbcr/factory/before_plugin_{$this->plugin_name}_activation");
|
395 |
|
396 |
/**
|
397 |
* wbcr/factory/plugin_{$this->plugin_name}_activation
|
398 |
*
|
399 |
* @since 4.1.2 - added
|
400 |
*/
|
401 |
+
do_action("wbcr/factory/plugin_{$this->plugin_name}_activation", $this);
|
402 |
|
403 |
+
if( !empty($this->activator_class) ) {
|
404 |
+
foreach((array)$this->activator_class as $activator_class) {
|
405 |
+
$activator = new $activator_class($this);
|
406 |
$activator->activate();
|
407 |
}
|
408 |
}
|
410 |
/**
|
411 |
* @since 4.1.2 - added
|
412 |
*/
|
413 |
+
do_action('wbcr/factory/plugin_activated', $this);
|
414 |
|
415 |
/**
|
416 |
* @since 4.1.2 - added
|
417 |
*/
|
418 |
+
do_action("wbcr/factory/plugin_{$this->plugin_name}_activated", $this);
|
419 |
}
|
420 |
|
421 |
/**
|
422 |
* It's invoked on plugin deactionvation. Don't excite it directly.
|
423 |
*
|
|
|
424 |
* @return void
|
425 |
+
* @since 1.0.0
|
426 |
*/
|
427 |
+
public function deactivation_hook()
|
428 |
+
{
|
429 |
|
430 |
/**
|
431 |
* @since 4.1.1 - change hook name
|
432 |
*/
|
433 |
+
if( apply_filters("wbcr/factory_429/cancel_plugin_deactivation_{$this->plugin_name}", false) ) {
|
434 |
return;
|
435 |
}
|
436 |
|
437 |
/**
|
438 |
+
* wbcr_factory_429_plugin_deactivation
|
439 |
*
|
440 |
* @since 4.1.1 - deprecated
|
441 |
*/
|
442 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_plugin_deactivation', [
|
443 |
$this
|
444 |
+
], '4.1.1', "wbcr/factory/plugin_deactivation");
|
445 |
|
446 |
/**
|
447 |
* wbcr/factory/plugin_deactivation
|
448 |
*
|
449 |
* @since 4.1.2 - deprecated
|
450 |
*/
|
451 |
+
wbcr_factory_429_do_action_deprecated('wbcr/factory/plugin_deactivation', [
|
452 |
$this
|
453 |
+
], '4.1.2', "wbcr/factory/before_plugin_deactivation");
|
454 |
|
455 |
/**
|
456 |
* wbcr/factory/plugin_deactivation
|
457 |
*
|
458 |
* @since 4.1.2 - added
|
459 |
*/
|
460 |
+
do_action('wbcr/factory/plugin_deactivation', $this);
|
461 |
|
462 |
/**
|
463 |
+
* wbcr_factory_429_plugin_deactivation_ . $this->plugin_name
|
464 |
*
|
465 |
* @since 4.1.1 - deprecated
|
466 |
*/
|
467 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_plugin_deactivation_' . $this->plugin_name, [
|
468 |
$this
|
469 |
+
], '4.1.1', "wbcr/factory/before_plugin_{$this->plugin_name}_deactivation");
|
470 |
|
471 |
/**
|
472 |
* wbcr/factory/plugin_{$this->plugin_name}_deactivation
|
473 |
*
|
474 |
* @since 4.1.2 - deprecated
|
475 |
*/
|
476 |
+
wbcr_factory_429_do_action_deprecated("wbcr/factory/plugin_{$this->plugin_name}_deactivation", [
|
477 |
$this
|
478 |
+
], '4.1.2', "wbcr/factory/before_plugin_{$this->plugin_name}_deactivation");
|
479 |
|
480 |
/**
|
481 |
* @since 4.1.2 - added
|
482 |
*/
|
483 |
+
do_action("wbcr/factory/before_plugin_{$this->plugin_name}_deactivation");
|
484 |
|
485 |
+
if( !empty($this->activator_class) ) {
|
486 |
+
foreach((array)$this->activator_class as $activator_class) {
|
487 |
+
$activator = new $activator_class($this);
|
488 |
$activator->deactivate();
|
489 |
}
|
490 |
}
|
492 |
/**
|
493 |
* @since 4.1.2 - added
|
494 |
*/
|
495 |
+
do_action('wbcr/factory/plugin_deactivated', $this);
|
496 |
|
497 |
/**
|
498 |
* @since 4.1.2 - added
|
499 |
*/
|
500 |
+
do_action("wbcr/factory/plugin_{$this->plugin_name}_deactivated", $this);
|
501 |
}
|
502 |
|
503 |
/**
|
509 |
* @return string|void
|
510 |
* @throws Exception
|
511 |
*/
|
512 |
+
public function getPluginPageUrl($page_id, $args = [])
|
513 |
+
{
|
514 |
+
if( !class_exists('Wbcr_FactoryPages429') ) {
|
515 |
+
throw new Exception('The factory_pages_429 module is not included.');
|
516 |
}
|
517 |
|
518 |
+
if( !is_admin() ) {
|
519 |
+
_doing_it_wrong(__METHOD__, __('You cannot use this feature on the frontend.'), '4.0.8');
|
520 |
|
521 |
return null;
|
522 |
}
|
523 |
|
524 |
+
return Wbcr_FactoryPages429::getPageUrl($this, $page_id, $args);
|
525 |
}
|
526 |
|
|
|
527 |
/**
|
528 |
* Загружает аддоны для плагина, как часть проекта, а не как отдельный плагин
|
529 |
+
*
|
530 |
+
* @throws \Exception
|
531 |
*/
|
532 |
+
private function init_plugin_components()
|
533 |
+
{
|
534 |
+
|
535 |
+
$load_plugin_components = $this->get_load_plugin_components();
|
536 |
+
|
537 |
+
if( empty($load_plugin_components) || !is_array($load_plugin_components) ) {
|
538 |
return;
|
539 |
}
|
540 |
|
541 |
+
foreach($load_plugin_components as $component_ID => $component) {
|
542 |
+
if( !isset($this->loaded_plugin_components[$component_ID]) ) {
|
|
|
|
|
|
|
|
|
543 |
|
544 |
+
if( !isset($component['autoload']) || !isset($component['plugin_prefix']) ) {
|
545 |
+
throw new Exception(sprintf("Component %s cannot be loaded, you must specify the path to the component autoload file and plugin prefix!", $component_ID));
|
546 |
}
|
547 |
|
548 |
+
$prefix = rtrim($component['plugin_prefix'], '_') . '_';
|
549 |
|
550 |
+
if( defined($prefix . 'PLUGIN_ACTIVE') ) {
|
551 |
+
continue;
|
552 |
+
}
|
553 |
|
554 |
+
$autoload_file = trailingslashit($this->get_paths()->absolute) . $component['autoload'];
|
|
|
555 |
|
556 |
+
if( !file_exists($autoload_file) ) {
|
557 |
+
throw new Exception(sprintf("Component %s autoload file not found!", $component_ID));
|
558 |
+
}
|
559 |
|
560 |
+
$plugin_var_name = strtolower($prefix . 'plugin');
|
561 |
+
global $$plugin_var_name;
|
562 |
+
$$plugin_var_name = $this;
|
563 |
+
|
564 |
+
require_once($autoload_file);
|
565 |
+
|
566 |
+
if( defined($prefix . 'PLUGIN_ACTIVE') && class_exists($prefix . 'Plugin') ) {
|
567 |
+
$this->loaded_plugin_components[$component_ID] = [
|
568 |
+
'plugin_dir' => constant($prefix . 'PLUGIN_DIR'),
|
569 |
+
'plugin_url' => constant($prefix . 'PLUGIN_URL'),
|
570 |
+
'plugin_base' => constant($prefix . 'PLUGIN_BASE'),
|
571 |
+
'text_domain' => constant($prefix . 'TEXT_DOMAIN'),
|
572 |
+
'plugin_version' => constant($prefix . 'PLUGIN_VERSION')
|
573 |
+
];
|
574 |
+
|
575 |
+
/**
|
576 |
+
* Оповещает внешние приложения, что компонент плагина был загружен
|
577 |
+
*
|
578 |
+
* @param array $load_plugin_components Информация о загруженном компоненте
|
579 |
+
* @param string $plugin_name Имя плагина
|
580 |
+
*/
|
581 |
+
do_action("wbcr/factory/component_{$component_ID}_loaded", $this->loaded_plugin_components[$component_ID], $this->getPluginName());
|
582 |
+
} else {
|
583 |
+
throw new Exception(sprintf("Сomponent %s does not meet development standards!", $component_ID));
|
584 |
}
|
585 |
}
|
586 |
}
|
596 |
* @return void
|
597 |
* @throws Exception
|
598 |
*/
|
599 |
+
private function init_framework_modules()
|
600 |
+
{
|
601 |
|
602 |
+
if( !empty($this->load_factory_modules) ) {
|
603 |
+
foreach((array)$this->load_factory_modules as $module) {
|
604 |
+
$scope = isset($module[2]) ? $module[2] : 'all';
|
605 |
|
606 |
+
if( $scope == 'all' || (is_admin() && $scope == 'admin') || (!is_admin() && $scope == 'public') ) {
|
607 |
|
608 |
+
if( !file_exists($this->get_paths()->absolute . '/' . $module[0] . '/boot.php') ) {
|
609 |
+
throw new Exception('Module ' . $module[1] . ' is not included.');
|
610 |
}
|
611 |
|
612 |
$module_boot_file = $this->get_paths()->absolute . '/' . $module[0] . '/boot.php';
|
613 |
require_once $module_boot_file;
|
614 |
|
615 |
+
$this->loaded_factory_modules[$module[1]] = $module_boot_file;
|
616 |
|
617 |
+
do_action('wbcr_' . $module[1] . '_plugin_created', $this);
|
618 |
}
|
619 |
}
|
620 |
}
|
622 |
/**
|
623 |
* @since 4.1.1 - deprecated
|
624 |
*/
|
625 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_core_modules_loaded-' . $this->plugin_name, [], '4.1.1', "wbcr/factory_429/modules_loaded-" . $this->plugin_name);
|
626 |
|
627 |
/**
|
628 |
* @since 4.1.1 - add
|
629 |
*/
|
630 |
+
do_action('wbcr/factory_429/modules_loaded-' . $this->plugin_name);
|
631 |
}
|
632 |
|
633 |
|
636 |
*
|
637 |
* @since 1.0.0
|
638 |
*/
|
639 |
+
private function register_plugin_hooks()
|
640 |
+
{
|
641 |
|
642 |
+
add_action('plugins_loaded', function () {
|
643 |
+
$this->set_text_domain($this->plugin_text_domain, $this->paths->absolute);
|
644 |
|
645 |
+
if( !empty($this->loaded_plugin_components) ) {
|
646 |
+
foreach($this->loaded_plugin_components as $component) {
|
647 |
+
if( empty($component['text_domain']) ) {
|
648 |
+
continue;
|
649 |
+
}
|
650 |
|
651 |
+
$this->set_text_domain($component['text_domain'], $component['plugin_dir']);
|
652 |
+
}
|
653 |
+
}
|
654 |
+
});
|
655 |
+
|
656 |
+
if( is_admin() ) {
|
657 |
+
add_filter('wbcr_factory_429_core_admin_allow_multisite', '__return_true');
|
658 |
+
|
659 |
+
register_activation_hook($this->get_paths()->main_file, [$this, 'activation_hook']);
|
660 |
+
register_deactivation_hook($this->get_paths()->main_file, [$this, 'deactivation_hook']);
|
661 |
}
|
662 |
}
|
663 |
|
664 |
/**
|
665 |
* Инициализируем миграции плагина
|
666 |
*
|
|
|
667 |
* @return void
|
668 |
* @throws Exception
|
669 |
+
* @since 4.1.1
|
670 |
*/
|
671 |
+
protected function init_plugin_migrations()
|
672 |
+
{
|
673 |
+
new WBCR\Factory_429\Migrations($this);
|
674 |
}
|
675 |
|
676 |
/**
|
677 |
* Инициализируем уведомления плагина
|
678 |
*
|
|
|
679 |
* @return void
|
680 |
+
* @since 4.1.1
|
681 |
*/
|
682 |
+
protected function init_plugin_notices()
|
683 |
+
{
|
684 |
+
new Wbcr\Factory_429\Notices($this);
|
685 |
}
|
686 |
|
687 |
/**
|
688 |
* Создает нового рабочего для проверки обновлений и апгрейда текущего плагина.
|
689 |
*
|
|
|
|
|
690 |
* @param array $data
|
691 |
*
|
692 |
* @return void
|
693 |
* @throws Exception
|
694 |
+
* @since 4.1.1
|
695 |
+
*
|
696 |
*/
|
697 |
+
protected function init_plugin_updates()
|
698 |
+
{
|
699 |
+
if( $this->has_updates ) {
|
700 |
+
new WBCR\Factory_429\Updates\Upgrader($this);
|
701 |
}
|
702 |
}
|
703 |
|
708 |
* Дополнительно создает рабочего, чтобы совершить апгрейд до премиум версии
|
709 |
* и запустить проверку обновлений для этого модуля.
|
710 |
*
|
|
|
711 |
* @throws Exception
|
712 |
+
* @since 4.1.1
|
713 |
*/
|
714 |
+
protected function init_plugin_premium_features()
|
715 |
+
{
|
716 |
+
if( !$this->has_premium || !$this->license_settings ) {
|
717 |
$this->premium = null;
|
718 |
|
719 |
return;
|
720 |
}
|
721 |
|
722 |
// Создаем экземляр премиум менеджера, мы сможем к нему обращаться глобально.
|
723 |
+
$this->premium = WBCR\Factory_429\Premium\Manager::instance($this, $this->license_settings);
|
724 |
|
725 |
// Подключаем премиум апгрейдер
|
726 |
+
if( isset($this->license_settings['has_updates']) && $this->license_settings['has_updates'] ) {
|
727 |
+
new WBCR\Factory_429\Updates\Premium_Upgrader($this);
|
728 |
}
|
729 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
730 |
}
|
731 |
|
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_Factory420_Base {
|
|
81 |
* https://robin-image-optimizer.webcraftic.com/premium-features.
|
82 |
*
|
83 |
* Это свойство заполняется для того, чтобы в процессе разработки вы могли использовать
|
84 |
-
* экземпляр класса \WBCR\
|
85 |
* Тем самым вы избавляете себя от жесткого прописывания ссылок на лендинг плагина и
|
86 |
* можете изменить все ссылки в одном месте.
|
87 |
*
|
@@ -127,7 +127,7 @@ class Wbcr_Factory420_Base {
|
|
127 |
* к примеру: freemius, codecanyon, templatemonster, вам нужно указать только настройки для
|
128 |
* взаимодействия с выбранным вами провайдером. Каждая реализация провайдера лицензий может иметь
|
129 |
* индивидуальный настройки, в этом примере приведены настройки для freemius провайдера
|
130 |
-
* WBCR\
|
131 |
*
|
132 |
* На текущий момент существует только реализация для freemius провайдера.
|
133 |
*
|
@@ -162,8 +162,9 @@ class Wbcr_Factory420_Base {
|
|
162 |
protected $adverts_settings = [];
|
163 |
|
164 |
/**
|
165 |
-
* Обязательное свойство. Подключаемые модули фреймворка.
|
166 |
-
*
|
|
|
167 |
*
|
168 |
* @var array {
|
169 |
* Array with information about the loadable module
|
@@ -176,27 +177,52 @@ class Wbcr_Factory420_Base {
|
|
176 |
* }
|
177 |
*/
|
178 |
protected $load_factory_modules = [
|
179 |
-
[ 'libs/factory/bootstrap', '
|
180 |
-
[ 'libs/factory/forms', '
|
181 |
-
[ 'libs/factory/pages', '
|
182 |
];
|
183 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
|
185 |
/**
|
186 |
-
* Экземпляр класса \WBCR\
|
187 |
* о сайте плагина. Чаще всего используется для получения ссылки на страницу с тарифами или
|
188 |
* ссылки на форму обратной связи. Встроен механизм отслеживания по utm меткам.
|
189 |
*
|
190 |
-
* @var \WBCR\
|
191 |
*/
|
192 |
protected $support;
|
193 |
|
194 |
/**
|
195 |
-
* Экземпляр класса \WBCR\
|
196 |
* путях плагина. Часто используется для получения путей или ссылок на место хранения плагина
|
197 |
* или его входного файла.
|
198 |
*
|
199 |
-
* @var \WBCR\
|
200 |
*/
|
201 |
protected $paths;
|
202 |
|
@@ -244,8 +270,8 @@ class Wbcr_Factory420_Base {
|
|
244 |
throw new Exception( 'One of the required attributes has not been passed (prefix, plugin_title, plugin_name, plugin_version, plugin_text_domain).' );
|
245 |
}
|
246 |
|
247 |
-
$this->support = new \WBCR\
|
248 |
-
$this->paths = new \WBCR\
|
249 |
|
250 |
// used only in the module 'updates'
|
251 |
$this->plugin_slug = ! empty( $this->plugin_name ) ? $this->plugin_name : basename( $plugin_file );
|
@@ -365,7 +391,7 @@ class Wbcr_Factory420_Base {
|
|
365 |
* Проверяет, включен ли премиум для этого плагина или нет.
|
366 |
*
|
367 |
* @return bool Возвращает true, если премиум пакет включен для этого плагина.
|
368 |
-
* См.
|
369 |
*/
|
370 |
public function has_premium() {
|
371 |
return $this->has_premium;
|
@@ -374,7 +400,7 @@ class Wbcr_Factory420_Base {
|
|
374 |
/**
|
375 |
* Позволяет получить заголовок плагина.
|
376 |
*
|
377 |
-
* @return string Возвращает заголовок плагина. См.
|
378 |
*/
|
379 |
public function getPluginTitle() {
|
380 |
return $this->plugin_title;
|
@@ -383,7 +409,7 @@ class Wbcr_Factory420_Base {
|
|
383 |
/**
|
384 |
* Позволяет получить префикс плагина.
|
385 |
*
|
386 |
-
* @return string Возвращает префикс плагина.См.
|
387 |
*/
|
388 |
public function getPrefix() {
|
389 |
return $this->prefix;
|
@@ -392,7 +418,7 @@ class Wbcr_Factory420_Base {
|
|
392 |
/**
|
393 |
* Позволяет получить имя плагина.
|
394 |
*
|
395 |
-
* @return string Возвращает имя плагина. См.
|
396 |
*/
|
397 |
public function getPluginName() {
|
398 |
return $this->plugin_name;
|
@@ -401,18 +427,29 @@ class Wbcr_Factory420_Base {
|
|
401 |
/**
|
402 |
* Позволяет получить версию плагина.
|
403 |
*
|
404 |
-
* @return string Возвращает версию плагина. См.
|
405 |
*/
|
406 |
public function getPluginVersion() {
|
407 |
return $this->plugin_version;
|
408 |
}
|
409 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
410 |
/**
|
411 |
* Предоставляет доступ к сырым данным плагина. Может быть полезен, если вы хотите получить
|
412 |
* какие-то данные не описанные в интерфейсе этого плагина.
|
413 |
*
|
414 |
* @param string $attr_name Имя атрибута, который нужно получить. Идентично ключу в массиве
|
415 |
-
*
|
416 |
*
|
417 |
* @return null
|
418 |
*/
|
@@ -425,18 +462,18 @@ class Wbcr_Factory420_Base {
|
|
425 |
}
|
426 |
|
427 |
/**
|
428 |
-
* Предоставляет доступ к экземпляру класса \WBCR\
|
429 |
*
|
430 |
-
* @return \WBCR\
|
431 |
*/
|
432 |
public function get_support() {
|
433 |
return $this->support;
|
434 |
}
|
435 |
|
436 |
/**
|
437 |
-
* Предоставляет доступ к экземпляру класса \WBCR\
|
438 |
*
|
439 |
-
* @return \WBCR\
|
440 |
*/
|
441 |
public function get_paths() {
|
442 |
return $this->paths;
|
@@ -445,14 +482,33 @@ class Wbcr_Factory420_Base {
|
|
445 |
/**
|
446 |
* Позволяет получить сырые данные плагина в виде объекта StdClass.
|
447 |
*
|
448 |
-
* @return object Возвращает объект с сырыми данными плагина. См.
|
449 |
*/
|
450 |
public function getPluginInfo() {
|
451 |
return (object) $this->plugin_data;
|
452 |
}
|
453 |
|
454 |
/**
|
455 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
456 |
*
|
457 |
* @since 4.0.8 Добавлен
|
458 |
*
|
@@ -464,7 +520,6 @@ class Wbcr_Factory420_Base {
|
|
464 |
|
465 |
/**
|
466 |
* Проверяет активирован ли плагин для сети. Если проект работает в режиме мультисайтов..
|
467 |
-
* TODO: Вынести метод в функции
|
468 |
*
|
469 |
* @since 4.0.8 Добавлен
|
470 |
* @return bool Если true, плагин активирован для сети или в текущий момент активируется для сети.
|
@@ -486,7 +541,6 @@ class Wbcr_Factory420_Base {
|
|
486 |
|
487 |
/**
|
488 |
* Позволяет получить все активные сайты сети. Если проект работает в режиме мультисайтов.
|
489 |
-
* TODO: Вынести метод в функции
|
490 |
*
|
491 |
* @since 4.0.8
|
492 |
* @return array|int
|
5 |
}
|
6 |
|
7 |
/**
|
8 |
+
* Базовый класс для создания нового плагина. Полную реализацию класса смотрите в Wbcr_Factory429_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_Factory429_Base {
|
21 |
|
22 |
+
use WBCR\Factory_429\Options;
|
23 |
|
24 |
/**
|
25 |
* Обязательное свойство. Префикс, используется для создания пространство имен.
|
81 |
* https://robin-image-optimizer.webcraftic.com/premium-features.
|
82 |
*
|
83 |
* Это свойство заполняется для того, чтобы в процессе разработки вы могли использовать
|
84 |
+
* экземпляр класса \WBCR\Factory_429\Entities\Support, для получения информации о сайте плагина.
|
85 |
* Тем самым вы избавляете себя от жесткого прописывания ссылок на лендинг плагина и
|
86 |
* можете изменить все ссылки в одном месте.
|
87 |
*
|
127 |
* к примеру: freemius, codecanyon, templatemonster, вам нужно указать только настройки для
|
128 |
* взаимодействия с выбранным вами провайдером. Каждая реализация провайдера лицензий может иметь
|
129 |
* индивидуальный настройки, в этом примере приведены настройки для freemius провайдера
|
130 |
+
* WBCR\Factory_429\Premium\Provider > WBCR\Factory_Freemius_000\Premium\Provider
|
131 |
*
|
132 |
* На текущий момент существует только реализация для freemius провайдера.
|
133 |
*
|
162 |
protected $adverts_settings = [];
|
163 |
|
164 |
/**
|
165 |
+
* Обязательное свойство. Подключаемые модули фреймворка.
|
166 |
+
*
|
167 |
+
* Модули фреймворка позволяют расширять его функциональность.
|
168 |
*
|
169 |
* @var array {
|
170 |
* Array with information about the loadable module
|
177 |
* }
|
178 |
*/
|
179 |
protected $load_factory_modules = [
|
180 |
+
[ 'libs/factory/bootstrap', 'factory_bootstrap_430', 'admin' ],
|
181 |
+
[ 'libs/factory/forms', 'factory_forms_427', 'admin' ],
|
182 |
+
[ 'libs/factory/pages', 'factory_pages_429', 'admin' ],
|
183 |
];
|
184 |
|
185 |
+
/**
|
186 |
+
* Не обязательное свойство. Список подключаемых компонентов плагина.
|
187 |
+
*
|
188 |
+
* Компоненты плагина, это независимые плагины, которые расширяют возможности текущего плагина.
|
189 |
+
* Вы должны указать файл для автозагрузки компонента и префикс плагина, чтобы фреймворк
|
190 |
+
* мог обращаться к классам и константам компонентов.
|
191 |
+
*
|
192 |
+
*
|
193 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
194 |
+
* @since 4.2.0 Добавлен
|
195 |
+
* @var array Пример данных
|
196 |
+
* array(
|
197 |
+
* 'component_ID' => array(
|
198 |
+
* 'autoload' => 'relative_path/autoload_filename.php',
|
199 |
+
* 'plugin_prefix' => 'WPRFX_'
|
200 |
+
* ),
|
201 |
+
* // Реальный пример
|
202 |
+
* 'cyrlitera' => array(
|
203 |
+
* 'autoload' => 'components/cyrlitera/clearfy.php',
|
204 |
+
* 'plugin_prefix' => 'WCTR_'
|
205 |
+
* ),
|
206 |
+
* )
|
207 |
+
*/
|
208 |
+
protected $load_plugin_components = [];
|
209 |
+
|
210 |
|
211 |
/**
|
212 |
+
* Экземпляр класса \WBCR\Factory_429\Entities\Support используется для получения информации
|
213 |
* о сайте плагина. Чаще всего используется для получения ссылки на страницу с тарифами или
|
214 |
* ссылки на форму обратной связи. Встроен механизм отслеживания по utm меткам.
|
215 |
*
|
216 |
+
* @var \WBCR\Factory_429\Entities\Support
|
217 |
*/
|
218 |
protected $support;
|
219 |
|
220 |
/**
|
221 |
+
* Экземпляр класса \WBCR\Factory_429\Entities\Paths используется для получения информации о
|
222 |
* путях плагина. Часто используется для получения путей или ссылок на место хранения плагина
|
223 |
* или его входного файла.
|
224 |
*
|
225 |
+
* @var \WBCR\Factory_429\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_429\Entities\Support( $this->support_details );
|
274 |
+
$this->paths = new \WBCR\Factory_429\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_Factory429_Base::has_premium
|
395 |
*/
|
396 |
public function has_premium() {
|
397 |
return $this->has_premium;
|
400 |
/**
|
401 |
* Позволяет получить заголовок плагина.
|
402 |
*
|
403 |
+
* @return string Возвращает заголовок плагина. См. Wbcr_Factory429_Base::plugin_title
|
404 |
*/
|
405 |
public function getPluginTitle() {
|
406 |
return $this->plugin_title;
|
409 |
/**
|
410 |
* Позволяет получить префикс плагина.
|
411 |
*
|
412 |
+
* @return string Возвращает префикс плагина.См. Wbcr_Factory429_Base::prefix
|
413 |
*/
|
414 |
public function getPrefix() {
|
415 |
return $this->prefix;
|
418 |
/**
|
419 |
* Позволяет получить имя плагина.
|
420 |
*
|
421 |
+
* @return string Возвращает имя плагина. См. Wbcr_Factory429_Base::plugin_name
|
422 |
*/
|
423 |
public function getPluginName() {
|
424 |
return $this->plugin_name;
|
427 |
/**
|
428 |
* Позволяет получить версию плагина.
|
429 |
*
|
430 |
+
* @return string Возвращает версию плагина. См. Wbcr_Factory429_Base::plugin_version
|
431 |
*/
|
432 |
public function getPluginVersion() {
|
433 |
return $this->plugin_version;
|
434 |
}
|
435 |
|
436 |
+
/**
|
437 |
+
* Позволяет получить список подключаемых к плагином компонентов
|
438 |
+
*
|
439 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
440 |
+
* @since 4.2.0
|
441 |
+
* @return array
|
442 |
+
*/
|
443 |
+
public function get_load_plugin_components() {
|
444 |
+
return $this->load_plugin_components;
|
445 |
+
}
|
446 |
+
|
447 |
/**
|
448 |
* Предоставляет доступ к сырым данным плагина. Может быть полезен, если вы хотите получить
|
449 |
* какие-то данные не описанные в интерфейсе этого плагина.
|
450 |
*
|
451 |
* @param string $attr_name Имя атрибута, который нужно получить. Идентично ключу в массиве
|
452 |
+
* Wbcr_Factory429_Base::plugin_data
|
453 |
*
|
454 |
* @return null
|
455 |
*/
|
462 |
}
|
463 |
|
464 |
/**
|
465 |
+
* Предоставляет доступ к экземпляру класса \WBCR\Factory_429\Entities\Support.
|
466 |
*
|
467 |
+
* @return \WBCR\Factory_429\Entities\Support
|
468 |
*/
|
469 |
public function get_support() {
|
470 |
return $this->support;
|
471 |
}
|
472 |
|
473 |
/**
|
474 |
+
* Предоставляет доступ к экземпляру класса \WBCR\Factory_429\Entities\Paths.
|
475 |
*
|
476 |
+
* @return \WBCR\Factory_429\Entities\Paths
|
477 |
*/
|
478 |
public function get_paths() {
|
479 |
return $this->paths;
|
482 |
/**
|
483 |
* Позволяет получить сырые данные плагина в виде объекта StdClass.
|
484 |
*
|
485 |
+
* @return object Возвращает объект с сырыми данными плагина. См. Wbcr_Factory429_Base::plugin_data
|
486 |
*/
|
487 |
public function getPluginInfo() {
|
488 |
return (object) $this->plugin_data;
|
489 |
}
|
490 |
|
491 |
/**
|
492 |
+
* Проверяет права пользователя
|
493 |
+
*
|
494 |
+
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
|
495 |
+
* @since 4.2.0 Добавлен
|
496 |
+
* @return bool
|
497 |
+
*/
|
498 |
+
public function current_user_can( $capability = 'manage_options' ) {
|
499 |
+
// Просмотр страниц: read_pages
|
500 |
+
// Просмотр уведомлений: read_notices
|
501 |
+
// Редактирование: edit_forms
|
502 |
+
|
503 |
+
if ( 'manage_options' == $capability && is_multisite() && $this->isNetworkActive() ) {
|
504 |
+
$capability = 'manage_network';
|
505 |
+
}
|
506 |
+
|
507 |
+
return current_user_can( $capability );
|
508 |
+
}
|
509 |
+
|
510 |
+
/**
|
511 |
+
* Проверят, находится ли пользователь в панели усправления сетью сайтов
|
512 |
*
|
513 |
* @since 4.0.8 Добавлен
|
514 |
*
|
520 |
|
521 |
/**
|
522 |
* Проверяет активирован ли плагин для сети. Если проект работает в режиме мультисайтов..
|
|
|
523 |
*
|
524 |
* @since 4.0.8 Добавлен
|
525 |
* @return bool Если true, плагин активирован для сети или в текущий момент активируется для сети.
|
541 |
|
542 |
/**
|
543 |
* Позволяет получить все активные сайты сети. Если проект работает в режиме мультисайтов.
|
|
|
544 |
*
|
545 |
* @since 4.0.8
|
546 |
* @return array|int
|
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_Factory429_Request {
|
15 |
|
16 |
/**
|
17 |
* @param null $param
|
libs/factory/core/includes/class-factory-requirements.php
CHANGED
@@ -11,9 +11,9 @@
|
|
11 |
* @version 2.0.0
|
12 |
* @since 4.0.9
|
13 |
*/
|
14 |
-
|
15 |
-
if ( ! class_exists( '
|
16 |
-
class
|
17 |
|
18 |
/**
|
19 |
* Factory framework version
|
@@ -121,11 +121,11 @@ if ( ! class_exists( 'Wbcr_Factory420_Requirements' ) ) {
|
|
121 |
$this->plugin_basename = plugin_basename( $plugin_file );
|
122 |
$this->plugin_url = plugins_url( null, $plugin_file );
|
123 |
|
124 |
-
$plugin_info = get_file_data( $this->plugin_file,
|
125 |
'Version' => 'Version',
|
126 |
'FrameworkVersion' => 'Framework Version',
|
127 |
'TextDomain' => 'Text Domain'
|
128 |
-
|
129 |
|
130 |
if ( isset( $plugin_info['FrameworkVersion'] ) ) {
|
131 |
$this->factory_version = $plugin_info['FrameworkVersion'];
|
@@ -139,7 +139,7 @@ if ( ! class_exists( 'Wbcr_Factory420_Requirements' ) ) {
|
|
139 |
$this->plugin_text_domain = $plugin_info['TextDomain'];
|
140 |
}
|
141 |
|
142 |
-
add_action( 'admin_init',
|
143 |
}
|
144 |
|
145 |
public function get_plugin_version() {
|
@@ -158,13 +158,13 @@ if ( ! class_exists( 'Wbcr_Factory420_Requirements' ) ) {
|
|
158 |
if ( current_user_can( 'activate_plugins' ) && current_user_can( 'edit_plugins' ) && current_user_can( 'install_plugins' ) ) {
|
159 |
|
160 |
if ( is_multisite() ) {
|
161 |
-
add_action( 'network_admin_notices',
|
162 |
|
163 |
-
if ( ! empty( $this->plugin_basename ) && in_array( $this->plugin_basename, (array) get_option( 'active_plugins',
|
164 |
-
add_action( 'admin_notices',
|
165 |
}
|
166 |
} else {
|
167 |
-
add_action( 'admin_notices',
|
168 |
}
|
169 |
}
|
170 |
}
|
@@ -242,7 +242,7 @@ if ( ! class_exists( 'Wbcr_Factory420_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,22 @@ if ( ! class_exists( 'Wbcr_Factory420_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 |
-
}
|
|
11 |
* @version 2.0.0
|
12 |
* @since 4.0.9
|
13 |
*/
|
14 |
+
// @formatter:off
|
15 |
+
if ( ! class_exists( 'Wbcr_Factory429_Requirements' ) ) {
|
16 |
+
class Wbcr_Factory429_Requirements {
|
17 |
|
18 |
/**
|
19 |
* Factory framework version
|
121 |
$this->plugin_basename = plugin_basename( $plugin_file );
|
122 |
$this->plugin_url = plugins_url( null, $plugin_file );
|
123 |
|
124 |
+
$plugin_info = get_file_data( $this->plugin_file, array(
|
125 |
'Version' => 'Version',
|
126 |
'FrameworkVersion' => 'Framework Version',
|
127 |
'TextDomain' => 'Text Domain'
|
128 |
+
), 'plugin' );
|
129 |
|
130 |
if ( isset( $plugin_info['FrameworkVersion'] ) ) {
|
131 |
$this->factory_version = $plugin_info['FrameworkVersion'];
|
139 |
$this->plugin_text_domain = $plugin_info['TextDomain'];
|
140 |
}
|
141 |
|
142 |
+
add_action( 'admin_init', array( $this, 'register_notices' ) );
|
143 |
}
|
144 |
|
145 |
public function get_plugin_version() {
|
158 |
if ( current_user_can( 'activate_plugins' ) && current_user_can( 'edit_plugins' ) && current_user_can( 'install_plugins' ) ) {
|
159 |
|
160 |
if ( is_multisite() ) {
|
161 |
+
add_action( 'network_admin_notices', array( $this, 'show_notice' ) );
|
162 |
|
163 |
+
if ( ! empty( $this->plugin_basename ) && in_array( $this->plugin_basename, (array) get_option( 'active_plugins', array() ) ) ) {
|
164 |
+
add_action( 'admin_notices', array( $this, 'show_notice' ) );
|
165 |
}
|
166 |
} else {
|
167 |
+
add_action( 'admin_notices', array( $this, 'show_notice' ) );
|
168 |
}
|
169 |
}
|
170 |
}
|
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_221' ), $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_429' ), $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_429' ), $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_429' ), $this->plugin_title );
|
291 |
}
|
292 |
}
|
293 |
+
}
|
294 |
+
// @formatter:on
|
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_429\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_429\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_420_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_420_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_420_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_429_deprecated_hook()
|
57 |
*
|
58 |
*/
|
59 |
+
function wbcr_factory_429_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_429_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_429_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_429_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_429_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_429_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_429\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\Factory_Freemius_000\Premium\Provider
|
54 |
* @throws Exception
|
55 |
*/
|
56 |
-
public static function instance(
|
57 |
$premium_manager = new Manager( $plugin, $settings );
|
58 |
|
59 |
return $premium_manager->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_429\Premium;
|
4 |
|
5 |
use Exception;
|
6 |
+
use Wbcr_Factory429_Plugin;
|
7 |
|
8 |
// Exit if accessed directly
|
9 |
if ( ! defined( 'ABSPATH' ) ) {
|
24 |
public static $providers;
|
25 |
|
26 |
/**
|
27 |
+
* @var Wbcr_Factory429_Plugin
|
28 |
*/
|
29 |
protected $plugin;
|
30 |
|
36 |
/**
|
37 |
* Manager constructor.
|
38 |
*
|
39 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
40 |
* @param array $settings
|
41 |
*
|
42 |
* @throws Exception
|
43 |
*/
|
44 |
+
public function __construct( Wbcr_Factory429_Plugin $plugin, array $settings ) {
|
45 |
$this->plugin = $plugin;
|
46 |
$this->settings = $settings;
|
47 |
}
|
48 |
|
49 |
/**
|
50 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
51 |
* @param array $settings
|
52 |
*
|
53 |
* @return \WBCR\Factory_Freemius_000\Premium\Provider
|
54 |
* @throws Exception
|
55 |
*/
|
56 |
+
public static function instance( Wbcr_Factory429_Plugin $plugin, array $settings ) {
|
57 |
$premium_manager = new Manager( $plugin, $settings );
|
58 |
|
59 |
return $premium_manager->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_429\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,12 +1,12 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace WBCR\
|
4 |
|
5 |
use Exception;
|
6 |
-
use
|
7 |
|
8 |
// Exit if accessed directly
|
9 |
-
if
|
10 |
exit;
|
11 |
}
|
12 |
|
@@ -21,7 +21,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
21 |
abstract class Provider {
|
22 |
|
23 |
/**
|
24 |
-
* @var
|
25 |
*/
|
26 |
protected $plugin;
|
27 |
|
@@ -38,22 +38,22 @@ abstract class Provider {
|
|
38 |
/**
|
39 |
* Provider constructor.
|
40 |
*
|
41 |
-
* @param
|
42 |
-
* @param array
|
43 |
*/
|
44 |
-
public function __construct(
|
45 |
-
|
|
|
46 |
$this->settings = $settings;
|
47 |
|
48 |
-
|
49 |
-
add_action( 'wbcr/factory/license_deactivate', [ $this, 'register_cron_hooks' ], 10, 2 );
|
50 |
-
add_action( "{$this->plugin->getPluginName()}_license_autosync", [ $this, 'license_cron_sync' ] );
|
51 |
}
|
52 |
|
53 |
/**
|
54 |
* @return array
|
55 |
*/
|
56 |
-
public function get_settings()
|
|
|
57 |
return $this->settings;
|
58 |
}
|
59 |
|
@@ -63,72 +63,83 @@ abstract class Provider {
|
|
63 |
*
|
64 |
* @return bool|mixed
|
65 |
*/
|
66 |
-
public function get_setting(
|
67 |
-
|
|
|
68 |
}
|
69 |
|
70 |
/**
|
71 |
* @return bool|mixed
|
72 |
*/
|
73 |
-
public function get_price()
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
/**
|
78 |
-
* todo: Вынести с лицензионный менеджер
|
79 |
-
*
|
80 |
-
* @param array $license_info
|
81 |
-
* @param string $plugin_name
|
82 |
-
*/
|
83 |
-
public function register_cron_hooks( $license_info, $plugin_name ) {
|
84 |
-
if ( $this->plugin->getPluginName() == $plugin_name ) {
|
85 |
-
if ( ! wp_next_scheduled( "{$plugin_name}_license_autosync" ) ) {
|
86 |
-
wp_schedule_event( time(), 'twicedaily', "{$plugin_name}_license_autosync" );
|
87 |
-
}
|
88 |
-
}
|
89 |
-
}
|
90 |
-
|
91 |
-
/**
|
92 |
-
* todo: вынести в лицензионный менеджер
|
93 |
-
*
|
94 |
-
* @param array $license_info
|
95 |
-
* @param string $plugin_name
|
96 |
-
*/
|
97 |
-
public function clear_cron_hooks( $license_info, $plugin_name ) {
|
98 |
-
if ( $this->plugin->getPluginName() == $plugin_name ) {
|
99 |
-
if ( wp_next_scheduled( "{$plugin_name}_license_autosync" ) ) {
|
100 |
-
wp_clear_scheduled_hook( "{$plugin_name}_license_autosync" );
|
101 |
-
}
|
102 |
-
}
|
103 |
-
}
|
104 |
-
|
105 |
-
public function license_cron_sync() {
|
106 |
-
$this->sync();
|
107 |
}
|
108 |
|
109 |
/**
|
110 |
* @return bool
|
111 |
*/
|
112 |
-
public function is_install_package()
|
113 |
-
|
|
|
114 |
return $this->is_install_package;
|
115 |
}
|
116 |
|
|
|
117 |
$premium_package = $this->get_package_data();
|
118 |
|
119 |
-
if
|
120 |
-
$basename_part
|
121 |
-
$is_valid_basename = sizeof(
|
122 |
|
123 |
-
if
|
124 |
$this->delete_package();
|
125 |
$this->is_install_package = false;
|
126 |
|
127 |
return false;
|
128 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
}
|
130 |
|
131 |
-
$this->is_install_package = !
|
132 |
|
133 |
return $this->is_install_package;
|
134 |
}
|
@@ -136,15 +147,16 @@ abstract class Provider {
|
|
136 |
/**
|
137 |
* @return bool|mixed|null
|
138 |
*/
|
139 |
-
public function get_package_data()
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
'
|
|
|
146 |
'framework_version' => null
|
147 |
-
]
|
148 |
}
|
149 |
|
150 |
return null;
|
@@ -155,26 +167,62 @@ abstract class Provider {
|
|
155 |
*
|
156 |
* @throws Exception
|
157 |
*/
|
158 |
-
public function update_package_data(
|
159 |
-
|
160 |
-
|
161 |
-
'
|
|
|
162 |
'framework_version' => null
|
163 |
-
]
|
164 |
|
165 |
-
if
|
166 |
-
throw new Exception(
|
167 |
}
|
168 |
|
169 |
-
$this->plugin->updatePopulateOption(
|
170 |
$this->is_install_package = true;
|
171 |
}
|
172 |
|
173 |
-
public function delete_package()
|
174 |
-
|
|
|
175 |
$this->is_install_package = false;
|
176 |
}
|
177 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
/**
|
179 |
* @return bool
|
180 |
*/
|
@@ -196,7 +244,7 @@ abstract class Provider {
|
|
196 |
abstract public function get_billing_cycle();
|
197 |
|
198 |
/**
|
199 |
-
* @return \WBCR\
|
200 |
*/
|
201 |
abstract public function get_license();
|
202 |
|
@@ -210,7 +258,7 @@ abstract class Provider {
|
|
210 |
*
|
211 |
* @return mixed
|
212 |
*/
|
213 |
-
abstract public function activate(
|
214 |
|
215 |
/**
|
216 |
* @return bool
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_429\Premium;
|
4 |
|
5 |
use Exception;
|
6 |
+
use Wbcr_Factory429_Plugin;
|
7 |
|
8 |
// Exit if accessed directly
|
9 |
+
if( !defined('ABSPATH') ) {
|
10 |
exit;
|
11 |
}
|
12 |
|
21 |
abstract class Provider {
|
22 |
|
23 |
/**
|
24 |
+
* @var Wbcr_Factory429_Plugin
|
25 |
*/
|
26 |
protected $plugin;
|
27 |
|
38 |
/**
|
39 |
* Provider constructor.
|
40 |
*
|
41 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
42 |
+
* @param array $settings
|
43 |
*/
|
44 |
+
public function __construct(Wbcr_Factory429_Plugin $plugin, array $settings)
|
45 |
+
{
|
46 |
+
$this->plugin = $plugin;
|
47 |
$this->settings = $settings;
|
48 |
|
49 |
+
$this->register_hooks();
|
|
|
|
|
50 |
}
|
51 |
|
52 |
/**
|
53 |
* @return array
|
54 |
*/
|
55 |
+
public function get_settings()
|
56 |
+
{
|
57 |
return $this->settings;
|
58 |
}
|
59 |
|
63 |
*
|
64 |
* @return bool|mixed
|
65 |
*/
|
66 |
+
public function get_setting($name, $default = false)
|
67 |
+
{
|
68 |
+
return isset($this->settings[$name]) && !empty($this->settings[$name]) ? $this->settings[$name] : $default;
|
69 |
}
|
70 |
|
71 |
/**
|
72 |
* @return bool|mixed
|
73 |
*/
|
74 |
+
public function get_price()
|
75 |
+
{
|
76 |
+
return $this->get_setting('price');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
}
|
78 |
|
79 |
/**
|
80 |
* @return bool
|
81 |
*/
|
82 |
+
public function is_install_package()
|
83 |
+
{
|
84 |
+
if( !is_null($this->is_install_package) ) {
|
85 |
return $this->is_install_package;
|
86 |
}
|
87 |
|
88 |
+
$premium_plugin_slug = $this->get_setting('slug');
|
89 |
$premium_package = $this->get_package_data();
|
90 |
|
91 |
+
if( !empty($premium_package) && !empty($premium_package['basename']) ) {
|
92 |
+
$basename_part = explode('/', $premium_package['basename']);
|
93 |
+
$is_valid_basename = sizeof($basename_part) === 2;
|
94 |
|
95 |
+
if( $is_valid_basename && !file_exists(WP_PLUGIN_DIR . '/' . $premium_package['basename']) ) {
|
96 |
$this->delete_package();
|
97 |
$this->is_install_package = false;
|
98 |
|
99 |
return false;
|
100 |
}
|
101 |
+
} else if( $premium_plugin_slug && file_exists(WP_PLUGIN_DIR . '/' . $premium_plugin_slug) ) {
|
102 |
+
// If plugin is installed before we update the premium package in database.
|
103 |
+
// ------------------------------------------------------------------------
|
104 |
+
$plugins = get_plugins($plugin_folder = '');
|
105 |
+
|
106 |
+
if( !empty($plugins) ) {
|
107 |
+
foreach((array)$plugins as $plugin_base => $plugin) {
|
108 |
+
$basename_parts = explode('/', $plugin_base);
|
109 |
+
if( sizeof($basename_parts) == 2 && $basename_parts[0] == $premium_plugin_slug ) {
|
110 |
+
|
111 |
+
$plugin_basename = $plugin_base;
|
112 |
+
$plugin_main_file = WP_PLUGIN_DIR . '/' . $plugin_base;
|
113 |
+
|
114 |
+
$default_headers = [
|
115 |
+
'Version' => 'Version',
|
116 |
+
'FrameworkVersion' => 'Framework Version'
|
117 |
+
];
|
118 |
+
|
119 |
+
$plugin_data = get_file_data($plugin_main_file, $default_headers, 'plugin');
|
120 |
+
|
121 |
+
$this->update_package_data([
|
122 |
+
'basename' => $plugin_basename,
|
123 |
+
'version' => $plugin_data['Version'],
|
124 |
+
'framework_version' => isset($plugin_data['FrameworkVersion']) ? $plugin_data['FrameworkVersion'] : null,
|
125 |
+
]);
|
126 |
+
|
127 |
+
$premium_package = $this->get_package_data();
|
128 |
+
|
129 |
+
/**
|
130 |
+
* @param string $plugin_name Имя плагина
|
131 |
+
*
|
132 |
+
* @param string $package Дополнительная информация о лицензии
|
133 |
+
* @since 4.1.1
|
134 |
+
*
|
135 |
+
*/
|
136 |
+
do_action('wbcr/factory/premium/installed_package', $premium_package, $this->plugin->getPluginName());
|
137 |
+
}
|
138 |
+
}
|
139 |
+
}
|
140 |
}
|
141 |
|
142 |
+
$this->is_install_package = !empty($premium_package);
|
143 |
|
144 |
return $this->is_install_package;
|
145 |
}
|
147 |
/**
|
148 |
* @return bool|mixed|null
|
149 |
*/
|
150 |
+
public function get_package_data()
|
151 |
+
{
|
152 |
+
$premium_package = $this->plugin->getPopulateOption('premium_package');
|
153 |
+
|
154 |
+
if( !empty($premium_package) ) {
|
155 |
+
return wp_parse_args($premium_package, [
|
156 |
+
'basename' => null,
|
157 |
+
'version' => null,
|
158 |
'framework_version' => null
|
159 |
+
]);
|
160 |
}
|
161 |
|
162 |
return null;
|
167 |
*
|
168 |
* @throws Exception
|
169 |
*/
|
170 |
+
public function update_package_data(array $package)
|
171 |
+
{
|
172 |
+
$parsed_args = wp_parse_args($package, [
|
173 |
+
'basename' => null,
|
174 |
+
'version' => null,
|
175 |
'framework_version' => null
|
176 |
+
]);
|
177 |
|
178 |
+
if( empty($parsed_args['basename']) || empty($parsed_args['version']) ) {
|
179 |
+
throw new Exception('You must pass the required attributes (basename, version).');
|
180 |
}
|
181 |
|
182 |
+
$this->plugin->updatePopulateOption('premium_package', $parsed_args);
|
183 |
$this->is_install_package = true;
|
184 |
}
|
185 |
|
186 |
+
public function delete_package()
|
187 |
+
{
|
188 |
+
$this->plugin->deletePopulateOption('premium_package');
|
189 |
$this->is_install_package = false;
|
190 |
}
|
191 |
|
192 |
+
protected function register_hooks()
|
193 |
+
{
|
194 |
+
/**
|
195 |
+
* Добавляет крон задачу на синхронизацию лицензии
|
196 |
+
*
|
197 |
+
* @param array $license_info
|
198 |
+
* @param string $provider
|
199 |
+
*/
|
200 |
+
add_action("{$this->plugin->getPluginName()}/factory/premium/license_activate", function ($provider, $license_info) {
|
201 |
+
if( !wp_next_scheduled("{$this->plugin->getPluginName()}_license_autosync") ) {
|
202 |
+
wp_schedule_event(time(), 'twicedaily', "{$this->plugin->getPluginName()}_license_autosync");
|
203 |
+
}
|
204 |
+
}, 10, 2);
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Удаляет крон задачу на синхронизацию лицензии, когда лицензия деактивирована
|
208 |
+
*
|
209 |
+
* @param array $license_info
|
210 |
+
* @param string $provider
|
211 |
+
*/
|
212 |
+
add_action("{$this->plugin->getPluginName()}/factory/premium/license_deactivate", function ($provider, $license_info) {
|
213 |
+
if( wp_next_scheduled("{$this->plugin->getPluginName()}_license_autosync") ) {
|
214 |
+
wp_clear_scheduled_hook("{$this->plugin->getPluginName()}_license_autosync");
|
215 |
+
}
|
216 |
+
}, 10, 2);
|
217 |
+
|
218 |
+
/**
|
219 |
+
* Обработчик крон задачи на синхронизацию лицензии, выполняется 2 раза в день.
|
220 |
+
*/
|
221 |
+
add_action("{$this->plugin->getPluginName()}_license_autosync", function () {
|
222 |
+
$this->sync();
|
223 |
+
});
|
224 |
+
}
|
225 |
+
|
226 |
/**
|
227 |
* @return bool
|
228 |
*/
|
244 |
abstract public function get_billing_cycle();
|
245 |
|
246 |
/**
|
247 |
+
* @return \WBCR\Factory_429\Premium\Interfaces\License
|
248 |
*/
|
249 |
abstract public function get_license();
|
250 |
|
258 |
*
|
259 |
* @return mixed
|
260 |
*/
|
261 |
+
abstract public function activate($key);
|
262 |
|
263 |
/**
|
264 |
* @return bool
|
libs/factory/core/includes/updates/class-factory-premium-upgrader.php
CHANGED
@@ -1,18 +1,18 @@
|
|
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;
|
13 |
|
14 |
// Exit if accessed directly
|
15 |
-
if
|
16 |
exit;
|
17 |
}
|
18 |
|
@@ -34,97 +34,106 @@ class Premium_Upgrader extends Upgrader {
|
|
34 |
/**
|
35 |
* Manager constructor.
|
36 |
*
|
37 |
-
* @since 4.1.1
|
38 |
-
*
|
39 |
* @param $args
|
40 |
-
* @param bool
|
41 |
*
|
42 |
-
* @param
|
43 |
*
|
44 |
* @throws Exception
|
|
|
|
|
45 |
*/
|
46 |
-
public function __construct(
|
47 |
-
|
|
|
48 |
|
49 |
-
$this->plugin_basename
|
50 |
-
$this->plugin_main_file
|
51 |
$this->plugin_absolute_path = null;
|
52 |
|
53 |
-
if
|
54 |
$premium_package = $this->plugin->premium->get_package_data();
|
55 |
|
56 |
-
if
|
57 |
-
$this->plugin_basename
|
58 |
-
$this->plugin_main_file
|
59 |
-
$this->plugin_absolute_path = dirname(
|
60 |
}
|
61 |
}
|
62 |
|
63 |
-
if
|
64 |
$settings = $this->get_settings();
|
65 |
-
throw new Exception(
|
66 |
}
|
|
|
|
|
67 |
}
|
68 |
|
69 |
/**
|
70 |
* @throws Exception
|
71 |
*/
|
72 |
-
protected function set_repository()
|
73 |
-
|
74 |
-
$
|
|
|
75 |
|
76 |
-
if
|
77 |
$this->repository->init();
|
78 |
}
|
79 |
}
|
80 |
|
81 |
/**
|
82 |
-
* @since 4.1.1
|
83 |
* @throws Exception
|
|
|
84 |
*/
|
85 |
-
protected function
|
86 |
-
|
|
|
87 |
|
88 |
-
if
|
89 |
// Показываем уведомление под бесплатным плагином, если требуется установить или активировать премиум пакет
|
90 |
-
if
|
91 |
$free_plugin_base = $this->plugin->get_paths()->basename;
|
92 |
|
93 |
-
add_action(
|
94 |
}
|
95 |
|
96 |
// Если установлен премиум пакет, то показываем уведомление под премиум плагином.
|
97 |
-
if
|
98 |
-
$package
|
99 |
$premium_plugin_base = $package['basename'];
|
100 |
|
101 |
-
add_action(
|
102 |
}
|
103 |
|
104 |
-
add_action(
|
105 |
-
add_action(
|
106 |
-
add_action(
|
107 |
$this,
|
108 |
'install_notice_in_plugin_interface'
|
109 |
-
], 10, 2
|
110 |
}
|
111 |
|
112 |
-
add_action(
|
113 |
|
114 |
-
add_action(
|
115 |
-
add_action(
|
116 |
}
|
117 |
|
118 |
/**
|
|
|
119 |
* @since 4.1.1
|
120 |
*/
|
121 |
-
public function init_admin_actions()
|
122 |
-
|
123 |
-
|
124 |
|
125 |
-
|
|
|
|
|
|
|
126 |
try {
|
127 |
-
switch
|
128 |
case 'install':
|
129 |
$this->install();
|
130 |
break;
|
@@ -143,7 +152,7 @@ class Premium_Upgrader extends Upgrader {
|
|
143 |
break;
|
144 |
}
|
145 |
} catch( Exception $e ) {
|
146 |
-
wp_die(
|
147 |
}
|
148 |
}
|
149 |
}
|
@@ -151,20 +160,21 @@ class Premium_Upgrader extends Upgrader {
|
|
151 |
/**
|
152 |
* Удаляет данные о пакете, если пользовать удалил премиум плагин
|
153 |
*
|
154 |
-
* @since 4.1.1
|
155 |
-
*
|
156 |
* @param $success
|
157 |
*
|
158 |
* @param $plugin_basename
|
|
|
|
|
159 |
*/
|
160 |
-
public function delete_plugin_hook(
|
161 |
-
|
|
|
162 |
return;
|
163 |
}
|
164 |
|
165 |
$package = $this->plugin->premium->get_package_data();
|
166 |
|
167 |
-
if
|
168 |
$this->plugin->premium->delete_package();
|
169 |
}
|
170 |
}
|
@@ -172,48 +182,49 @@ class Premium_Upgrader extends Upgrader {
|
|
172 |
/**
|
173 |
* Выводит уведомление на всех страницах админ панели Wordpress
|
174 |
*
|
175 |
-
* @since 4.1.1
|
176 |
-
*
|
177 |
* @param $notices
|
178 |
*
|
179 |
* @return array
|
|
|
|
|
180 |
*/
|
181 |
-
public function admin_notices_hook(
|
|
|
182 |
|
183 |
-
if
|
184 |
return $notices;
|
185 |
}
|
186 |
|
187 |
-
if
|
188 |
-
$notice_text = $this->get_notice_text(
|
189 |
|
190 |
-
if
|
191 |
-
$notice_text = $this->get_notice_text(
|
192 |
}
|
193 |
|
194 |
$notices[] = [
|
195 |
-
'id'
|
196 |
-
'type'
|
197 |
-
'dismissible'
|
198 |
'dismiss_expires' => 0,
|
199 |
-
'text'
|
200 |
];
|
201 |
-
} else if
|
202 |
$notices[] = [
|
203 |
-
'id'
|
204 |
-
'type'
|
205 |
-
'dismissible'
|
206 |
'dismiss_expires' => 0,
|
207 |
-
'text'
|
208 |
];
|
209 |
-
} else if
|
210 |
// todo: может быть перенести уведомление в премиум менеджер?
|
211 |
$notices[] = [
|
212 |
-
'id'
|
213 |
-
'type'
|
214 |
-
'dismissible'
|
215 |
'dismiss_expires' => 0,
|
216 |
-
'text'
|
217 |
];
|
218 |
}
|
219 |
|
@@ -223,174 +234,188 @@ class Premium_Upgrader extends Upgrader {
|
|
223 |
/**
|
224 |
* Выводит уведомление внутри интерфейса плагина, на всех страницах плагина.
|
225 |
*
|
226 |
-
* @
|
227 |
-
*
|
228 |
-
* @param Wbcr_FactoryPages420_ImpressiveThemplate $obj
|
229 |
*
|
230 |
-
* @param
|
231 |
*
|
232 |
* @return void
|
|
|
|
|
233 |
*/
|
234 |
-
public function install_notice_in_plugin_interface(
|
235 |
-
|
|
|
236 |
return;
|
237 |
}
|
238 |
|
239 |
$notice_text = '';
|
240 |
|
241 |
-
if
|
242 |
-
$notice_text = $this->get_notice_text(
|
243 |
|
244 |
-
if
|
245 |
-
$notice_text = $this->get_notice_text(
|
246 |
}
|
247 |
-
} else if
|
248 |
-
$notice_text = $this->get_notice_text(
|
249 |
-
} else if
|
250 |
-
$notice_text = $this->get_notice_text(
|
251 |
}
|
252 |
|
253 |
-
$obj->printWarningNotice(
|
254 |
}
|
255 |
|
256 |
/**
|
257 |
* Выводит уведомление в строке плагина (на странице плагинов),
|
258 |
* что нужно установить премиум плагин.
|
259 |
*
|
260 |
-
* @
|
261 |
-
*
|
262 |
-
* @param array $plugin_data
|
263 |
* @param string $status
|
264 |
*
|
265 |
* @param string $plugin_file
|
266 |
*
|
267 |
* @return void
|
|
|
|
|
268 |
* @see WP_Plugins_List_Table
|
269 |
*
|
270 |
*/
|
271 |
-
public function notice_in_plugin_row(
|
|
|
272 |
|
273 |
-
if
|
274 |
return;
|
275 |
};
|
276 |
|
277 |
$notice_text = '';
|
278 |
|
279 |
-
if
|
280 |
-
$notice_text = $this->get_notice_text(
|
281 |
|
282 |
-
if
|
283 |
-
$notice_text = $this->get_notice_text(
|
284 |
}
|
285 |
-
} else if
|
286 |
-
$notice_text = $this->get_notice_text(
|
287 |
-
} else if
|
288 |
-
$notice_text = $this->get_notice_text(
|
289 |
}
|
290 |
|
291 |
?>
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
<?php echo $notice_text; ?>
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
<?php
|
302 |
}
|
303 |
|
304 |
/**
|
305 |
* Печатает стили для уведомления о загрузке премиум версии на странице плагинов.
|
306 |
*
|
307 |
-
* @since 4.1.1
|
308 |
* @return void
|
|
|
309 |
*/
|
310 |
-
public function print_styles_for_plugin_row()
|
|
|
311 |
|
312 |
-
if
|
313 |
return;
|
314 |
}
|
315 |
|
316 |
$plugin_base = $this->plugin->get_paths()->basename;
|
317 |
|
318 |
-
if
|
319 |
$message_background_color = '#f5e9f5';
|
320 |
-
$message_border_color
|
321 |
-
} else if
|
322 |
$message_background_color = '#ffe2e0';
|
323 |
-
$message_border_color
|
324 |
-
if
|
325 |
-
$package
|
326 |
$plugin_base = $package['basename'];
|
327 |
}
|
328 |
}
|
329 |
|
330 |
?>
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
<?php
|
343 |
}
|
344 |
|
|
|
345 |
/**
|
346 |
* Обновляет данные о премиум пакете в базе данных, после обновления плагина.
|
347 |
*
|
348 |
-
* @
|
349 |
-
*
|
350 |
-
* @param array $options
|
351 |
-
*
|
352 |
-
* @param WP_Upgrader $upgrader_object
|
353 |
*
|
|
|
354 |
* @throws Exception
|
355 |
*/
|
356 |
-
public function upgrader_process_complete_hook(
|
357 |
-
|
358 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
359 |
$this->update_package_data();
|
360 |
}
|
361 |
}
|
362 |
}
|
363 |
|
364 |
/**
|
365 |
-
* @since 4.1.1
|
366 |
* @return array
|
|
|
367 |
*/
|
368 |
-
protected function get_settings()
|
369 |
-
|
|
|
370 |
|
371 |
-
$updates_settings = isset(
|
372 |
|
373 |
-
if
|
374 |
$updates_settings['repository'] = $settings['provider'];
|
375 |
-
$updates_settings['slug']
|
376 |
}
|
377 |
|
378 |
-
return wp_parse_args(
|
379 |
-
'repository'
|
380 |
-
'slug'
|
381 |
-
'maybe_rollback'
|
382 |
'rollback_settings' => [
|
383 |
'prev_stable_version' => '0.0.0'
|
384 |
]
|
385 |
-
]
|
386 |
}
|
387 |
|
388 |
/**
|
389 |
-
* @since 4.1.1
|
390 |
* @return string
|
|
|
391 |
*/
|
392 |
-
protected function get_plugin_version()
|
393 |
-
|
|
|
394 |
return '0.0.0';
|
395 |
}
|
396 |
|
@@ -400,57 +425,64 @@ class Premium_Upgrader extends Upgrader {
|
|
400 |
}
|
401 |
|
402 |
/**
|
403 |
-
* @since 4.1.1
|
404 |
-
*
|
405 |
* @param $args
|
406 |
*
|
407 |
* @return string
|
|
|
|
|
408 |
*/
|
409 |
-
protected function get_admin_url(
|
410 |
-
|
|
|
411 |
|
412 |
-
if
|
413 |
-
$url = network_admin_url(
|
414 |
}
|
415 |
|
416 |
-
return add_query_arg(
|
417 |
}
|
418 |
|
419 |
/**
|
420 |
-
* @since 4.1.1
|
421 |
-
*
|
422 |
* @param string $action
|
423 |
*
|
424 |
* @return string
|
|
|
|
|
425 |
*/
|
426 |
-
protected function get_action_url(
|
427 |
-
|
|
|
|
|
|
|
|
|
428 |
|
429 |
-
return wp_nonce_url(
|
430 |
}
|
431 |
|
432 |
/**
|
433 |
-
* @since 4.1.1
|
434 |
* @return string
|
|
|
435 |
*/
|
436 |
-
protected function get_activate_premium_url()
|
|
|
437 |
$args = [
|
438 |
'action' => 'activate',
|
439 |
'plugin' => $this->plugin_basename,
|
440 |
];
|
441 |
|
442 |
-
return wp_nonce_url(
|
443 |
}
|
444 |
|
445 |
/**
|
446 |
* Нужно установить или обновить премиум?
|
447 |
*
|
448 |
-
* @since 4.1.1
|
449 |
* @return bool
|
|
|
450 |
*/
|
451 |
-
protected function need_intall_or_activate_premium()
|
452 |
-
|
453 |
-
|
|
|
454 |
return false;
|
455 |
}
|
456 |
|
@@ -463,164 +495,167 @@ class Premium_Upgrader extends Upgrader {
|
|
463 |
/**
|
464 |
* Требуется активировать лицензию?
|
465 |
*
|
466 |
-
* @since 4.1.1
|
467 |
* @return bool
|
|
|
468 |
*/
|
469 |
-
protected function need_activate_license()
|
470 |
-
|
|
|
471 |
}
|
472 |
|
473 |
/**
|
474 |
* Нужно продлить лицензию?
|
475 |
*
|
476 |
-
* @since 4.1.1
|
477 |
* @return bool
|
|
|
478 |
*/
|
479 |
-
protected function need_renew_license()
|
480 |
-
|
|
|
481 |
}
|
482 |
|
483 |
/**
|
484 |
-
* @since 4.1.1
|
485 |
* @throws Exception
|
|
|
486 |
*/
|
487 |
-
protected function install()
|
|
|
488 |
global $wp_filesystem;
|
489 |
|
490 |
-
if
|
491 |
-
throw new Exception(
|
492 |
}
|
493 |
|
494 |
-
if
|
495 |
return;
|
496 |
}
|
497 |
|
498 |
-
if
|
499 |
-
if
|
500 |
-
require_once(
|
501 |
}
|
502 |
WP_Filesystem();
|
503 |
}
|
504 |
|
505 |
-
if
|
506 |
-
throw new Exception(
|
507 |
} else {
|
508 |
|
509 |
$download_url = $this->repository->get_download_url();
|
510 |
|
511 |
/**
|
512 |
-
* @
|
513 |
*
|
514 |
-
* @param string $
|
|
|
515 |
*
|
516 |
-
* @param string $package Дополнительная информация о лицензии
|
517 |
*/
|
518 |
-
do_action(
|
519 |
|
520 |
// If plugin is installed before we update the premium package in database.
|
521 |
// ------------------------------------------------------------------------
|
522 |
-
|
523 |
-
|
524 |
-
if ( ! empty( $plugins ) ) {
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
}
|
550 |
// ------------------------------------------------------------------------
|
551 |
|
552 |
-
require_once(
|
553 |
-
require_once(
|
554 |
|
555 |
-
if
|
556 |
// Include required resources for the installation.
|
557 |
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
558 |
}
|
559 |
|
560 |
$skin_args = [
|
561 |
-
'type'
|
562 |
-
'title'
|
563 |
-
'url'
|
564 |
-
'nonce'
|
565 |
'plugin' => '',
|
566 |
-
'api'
|
567 |
-
'extra'
|
568 |
'slug' => $this->plugin_slug
|
569 |
],
|
570 |
];
|
571 |
|
572 |
-
require_once(
|
573 |
|
574 |
-
if
|
575 |
-
$skin = new Plugin_Installer_Skin(
|
576 |
} else {
|
577 |
-
$skin = new WP_Upgrader_Skin(
|
578 |
}
|
579 |
|
580 |
-
$upgrader = new Plugin_Upgrader(
|
581 |
|
582 |
-
if
|
583 |
-
throw new Exception(
|
584 |
}
|
585 |
|
586 |
-
$install_result = $upgrader->install(
|
587 |
|
588 |
-
include(
|
589 |
|
590 |
-
if
|
591 |
-
throw new Exception(
|
592 |
-
} else if
|
593 |
-
throw new Exception(
|
594 |
-
} else if
|
595 |
global $wp_filesystem;
|
596 |
|
597 |
-
$error_code
|
598 |
$error_message = 'Unable to connect to the filesystem. Please confirm your credentials.';
|
599 |
|
600 |
// Pass through the error from WP_Filesystem if one was raised.
|
601 |
-
if
|
602 |
$error_message = $wp_filesystem->errors->get_error_message();
|
603 |
}
|
604 |
|
605 |
-
throw new Exception(
|
606 |
}
|
607 |
|
608 |
-
$this->plugin_basename
|
609 |
-
$this->plugin_main_file
|
610 |
-
$this->plugin_absolute_path = dirname(
|
611 |
|
612 |
$this->update_package_data();
|
613 |
|
614 |
$package = $this->plugin->premium->get_package_data();
|
615 |
|
616 |
/**
|
617 |
-
* @
|
618 |
*
|
619 |
-
* @param string $
|
|
|
620 |
*
|
621 |
-
* @param string $package Дополнительная информация о лицензии
|
622 |
*/
|
623 |
-
do_action(
|
624 |
|
625 |
die();
|
626 |
}
|
@@ -630,147 +665,151 @@ class Premium_Upgrader extends Upgrader {
|
|
630 |
* @return bool
|
631 |
* @throws Exception
|
632 |
*/
|
633 |
-
protected function delete()
|
634 |
-
|
|
|
635 |
return false;
|
636 |
}
|
637 |
|
638 |
$package = $this->plugin->premium->get_package_data();
|
639 |
|
640 |
/**
|
641 |
-
* @
|
642 |
*
|
643 |
-
* @param string $
|
|
|
644 |
*
|
645 |
-
* @param string $package Дополнительная информация о лицензии
|
646 |
*/
|
647 |
-
do_action(
|
648 |
|
649 |
-
if
|
650 |
-
if
|
651 |
-
deactivate_plugins(
|
652 |
} else {
|
653 |
-
deactivate_plugins(
|
654 |
}
|
655 |
}
|
656 |
|
657 |
-
$result = delete_plugins(
|
658 |
|
659 |
-
if
|
660 |
-
throw new Exception(
|
661 |
}
|
662 |
|
663 |
$this->plugin->premium->delete_package();
|
664 |
|
665 |
/**
|
666 |
-
* @
|
667 |
*
|
668 |
-
* @param string $
|
|
|
669 |
*
|
670 |
-
* @param string $package Дополнительная информация о лицензии
|
671 |
*/
|
672 |
-
do_action(
|
673 |
|
674 |
return true;
|
675 |
}
|
676 |
|
677 |
/**
|
678 |
-
* @since 4.1.1
|
679 |
* @return bool
|
|
|
680 |
*/
|
681 |
-
protected function deactivate()
|
682 |
-
|
|
|
683 |
return false;
|
684 |
}
|
685 |
|
686 |
$package = $this->plugin->premium->get_package_data();
|
687 |
|
688 |
/**
|
689 |
-
* @
|
690 |
*
|
691 |
-
* @param string $
|
|
|
692 |
*
|
693 |
-
* @param string $package Дополнительная информация о лицензии
|
694 |
*/
|
695 |
-
do_action(
|
696 |
|
697 |
-
if
|
698 |
-
deactivate_plugins(
|
699 |
} else {
|
700 |
-
deactivate_plugins(
|
701 |
}
|
702 |
|
703 |
/**
|
704 |
-
* @
|
705 |
*
|
706 |
-
* @param string $
|
|
|
707 |
*
|
708 |
-
* @param string $package Дополнительная информация о лицензии
|
709 |
*/
|
710 |
-
do_action(
|
711 |
|
712 |
return true;
|
713 |
}
|
714 |
|
715 |
/**
|
716 |
-
* @since 4.1.1
|
717 |
-
*
|
718 |
* @param array $plugin_data
|
719 |
*
|
720 |
* @throws Exception
|
|
|
|
|
721 |
*/
|
722 |
-
protected function update_package_data()
|
|
|
723 |
|
724 |
-
if
|
725 |
return;
|
726 |
}
|
727 |
|
728 |
$default_headers = [
|
729 |
-
'Version'
|
730 |
'FrameworkVersion' => 'Framework Version'
|
731 |
];
|
732 |
|
733 |
-
$plugin_data = get_file_data(
|
734 |
|
735 |
-
$this->plugin->premium->update_package_data(
|
736 |
-
'basename'
|
737 |
-
'version'
|
738 |
-
'framework_version' => isset(
|
739 |
-
]
|
740 |
}
|
741 |
|
742 |
/**
|
743 |
-
* @since 4.1.1
|
744 |
-
*
|
745 |
* @param string $type
|
746 |
*
|
747 |
* @return string|null
|
|
|
|
|
748 |
*/
|
749 |
-
private function get_notice_text(
|
750 |
-
|
|
|
751 |
$activate_plugin_url = $this->get_activate_premium_url();
|
752 |
-
$cancel_license_url
|
753 |
|
754 |
$texts = [
|
755 |
-
'need_activate_license'
|
756 |
-
'need_renew_license'
|
757 |
-
'please_install_premium'
|
758 |
-
<a href="%s">Install</a> premium add-on or <a href="%s">cancel</a> license.', '
|
759 |
-
'please_activate_premium' => sprintf(
|
760 |
-
<a href="%s">Activate</a> premium add-on or <a href="%s">cancel</a> license.', '
|
761 |
];
|
762 |
|
763 |
-
if
|
764 |
|
765 |
/**
|
766 |
-
* @since 4.1.1
|
767 |
-
*
|
768 |
* @param string $type
|
769 |
* @param string $plugin_name
|
770 |
*
|
771 |
-
* @param array
|
|
|
|
|
772 |
*/
|
773 |
-
return apply_filters(
|
774 |
}
|
775 |
|
776 |
return null;
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_429\Updates;
|
4 |
|
5 |
use Exception;
|
6 |
use Plugin_Installer_Skin;
|
7 |
use Plugin_Upgrader;
|
8 |
+
use Wbcr_Factory429_Plugin;
|
9 |
+
use Wbcr_FactoryPages429_ImpressiveThemplate;
|
10 |
use WP_Filesystem_Base;
|
11 |
use WP_Upgrader;
|
12 |
use WP_Upgrader_Skin;
|
13 |
|
14 |
// Exit if accessed directly
|
15 |
+
if( !defined('ABSPATH') ) {
|
16 |
exit;
|
17 |
}
|
18 |
|
34 |
/**
|
35 |
* Manager constructor.
|
36 |
*
|
|
|
|
|
37 |
* @param $args
|
38 |
+
* @param bool $is_premium
|
39 |
*
|
40 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
41 |
*
|
42 |
* @throws Exception
|
43 |
+
* @since 4.1.1
|
44 |
+
*
|
45 |
*/
|
46 |
+
public function __construct(Wbcr_Factory429_Plugin $plugin)
|
47 |
+
{
|
48 |
+
parent::__construct($plugin);
|
49 |
|
50 |
+
$this->plugin_basename = null;
|
51 |
+
$this->plugin_main_file = null;
|
52 |
$this->plugin_absolute_path = null;
|
53 |
|
54 |
+
if( $this->plugin->premium->is_activate() && $this->plugin->premium->is_install_package() ) {
|
55 |
$premium_package = $this->plugin->premium->get_package_data();
|
56 |
|
57 |
+
if( $premium_package ) {
|
58 |
+
$this->plugin_basename = $premium_package['basename'];
|
59 |
+
$this->plugin_main_file = WP_PLUGIN_DIR . '/' . $premium_package['basename'];
|
60 |
+
$this->plugin_absolute_path = dirname(WP_PLUGIN_DIR . '/' . $premium_package['basename']);
|
61 |
}
|
62 |
}
|
63 |
|
64 |
+
if( !$this->repository->is_support_premium() ) {
|
65 |
$settings = $this->get_settings();
|
66 |
+
throw new Exception("Repository {$settings['repository']} does not have support premium.");
|
67 |
}
|
68 |
+
|
69 |
+
$this->init_premium_hooks();
|
70 |
}
|
71 |
|
72 |
/**
|
73 |
* @throws Exception
|
74 |
*/
|
75 |
+
protected function set_repository()
|
76 |
+
{
|
77 |
+
$settings = $this->get_settings();
|
78 |
+
$this->repository = $this->get_repository($settings['repository']);
|
79 |
|
80 |
+
if( $this->plugin->premium->is_activate() ) {
|
81 |
$this->repository->init();
|
82 |
}
|
83 |
}
|
84 |
|
85 |
/**
|
|
|
86 |
* @throws Exception
|
87 |
+
* @since 4.1.1
|
88 |
*/
|
89 |
+
protected function init_premium_hooks()
|
90 |
+
{
|
91 |
+
//parent::init_hooks();
|
92 |
|
93 |
+
if( $this->need_intall_or_activate_premium() || $this->need_renew_license() || $this->need_activate_license() ) {
|
94 |
// Показываем уведомление под бесплатным плагином, если требуется установить или активировать премиум пакет
|
95 |
+
if( $this->need_intall_or_activate_premium() ) {
|
96 |
$free_plugin_base = $this->plugin->get_paths()->basename;
|
97 |
|
98 |
+
add_action("after_plugin_row_{$free_plugin_base}", [$this, "notice_in_plugin_row"], 100, 3);
|
99 |
}
|
100 |
|
101 |
// Если установлен премиум пакет, то показываем уведомление под премиум плагином.
|
102 |
+
if( ($this->need_renew_license() || $this->need_activate_license()) && $this->plugin->premium->is_install_package() ) {
|
103 |
+
$package = $this->plugin->premium->get_package_data();
|
104 |
$premium_plugin_base = $package['basename'];
|
105 |
|
106 |
+
add_action("after_plugin_row_{$premium_plugin_base}", [$this, "notice_in_plugin_row"], 100, 3);
|
107 |
}
|
108 |
|
109 |
+
add_action("admin_print_styles-plugins.php", [$this, "print_styles_for_plugin_row"]);
|
110 |
+
add_action("wbcr/factory/admin_notices", [$this, "admin_notices_hook"], 10, 2);
|
111 |
+
add_action('wbcr/factory/pages/impressive/print_all_notices', [
|
112 |
$this,
|
113 |
'install_notice_in_plugin_interface'
|
114 |
+
], 10, 2);
|
115 |
}
|
116 |
|
117 |
+
add_action('admin_init', [$this, 'init_admin_actions']);
|
118 |
|
119 |
+
add_action('deleted_plugin', [$this, 'delete_plugin_hook'], 10, 2);
|
120 |
+
add_action('upgrader_process_complete', [$this, 'upgrader_process_complete_hook'], 10, 2);
|
121 |
}
|
122 |
|
123 |
/**
|
124 |
+
* @since 4.2.2 Fixed bug with plugins namespace (ISW-4)
|
125 |
* @since 4.1.1
|
126 |
*/
|
127 |
+
public function init_admin_actions()
|
128 |
+
{
|
129 |
+
$plugin_slug = $this->plugin->request->get('wfactory_premium_updates_plugin', null);
|
130 |
|
131 |
+
if( isset($_GET['wfactory_premium_updates_action']) && $this->plugin_slug === $plugin_slug ) {
|
132 |
+
$action = $this->plugin->request->get('wfactory_premium_updates_action');
|
133 |
+
|
134 |
+
check_admin_referer("factory_premium_{$action}");
|
135 |
try {
|
136 |
+
switch( $action ) {
|
137 |
case 'install':
|
138 |
$this->install();
|
139 |
break;
|
152 |
break;
|
153 |
}
|
154 |
} catch( Exception $e ) {
|
155 |
+
wp_die($e->getMessage());
|
156 |
}
|
157 |
}
|
158 |
}
|
160 |
/**
|
161 |
* Удаляет данные о пакете, если пользовать удалил премиум плагин
|
162 |
*
|
|
|
|
|
163 |
* @param $success
|
164 |
*
|
165 |
* @param $plugin_basename
|
166 |
+
* @since 4.1.1
|
167 |
+
*
|
168 |
*/
|
169 |
+
public function delete_plugin_hook($plugin_basename, $success)
|
170 |
+
{
|
171 |
+
if( !$this->plugin->premium->is_install_package() ) {
|
172 |
return;
|
173 |
}
|
174 |
|
175 |
$package = $this->plugin->premium->get_package_data();
|
176 |
|
177 |
+
if( $package['basename'] == $plugin_basename && $success ) {
|
178 |
$this->plugin->premium->delete_package();
|
179 |
}
|
180 |
}
|
182 |
/**
|
183 |
* Выводит уведомление на всех страницах админ панели Wordpress
|
184 |
*
|
|
|
|
|
185 |
* @param $notices
|
186 |
*
|
187 |
* @return array
|
188 |
+
* @since 4.1.1
|
189 |
+
*
|
190 |
*/
|
191 |
+
public function admin_notices_hook($notices, $plugin_name)
|
192 |
+
{
|
193 |
|
194 |
+
if( $plugin_name !== $this->plugin->getPluginName() || !current_user_can('update_plugins') ) {
|
195 |
return $notices;
|
196 |
}
|
197 |
|
198 |
+
if( $this->need_intall_or_activate_premium() ) {
|
199 |
+
$notice_text = $this->get_notice_text('please_activate_premium');
|
200 |
|
201 |
+
if( !$this->plugin->premium->is_install_package() ) {
|
202 |
+
$notice_text = $this->get_notice_text('please_install_premium');
|
203 |
}
|
204 |
|
205 |
$notices[] = [
|
206 |
+
'id' => 'please_install_premium_for_' . $this->plugin->getPluginName(),
|
207 |
+
'type' => 'warning',
|
208 |
+
'dismissible' => false,
|
209 |
'dismiss_expires' => 0,
|
210 |
+
'text' => "<p><b>{$this->plugin->getPluginTitle()}:</b> " . $notice_text . '</p>'
|
211 |
];
|
212 |
+
} else if( $this->need_activate_license() ) {
|
213 |
$notices[] = [
|
214 |
+
'id' => 'need_activate_premium_for_' . $this->plugin->getPluginName(),
|
215 |
+
'type' => 'warning',
|
216 |
+
'dismissible' => false,
|
217 |
'dismiss_expires' => 0,
|
218 |
+
'text' => "<p><b>{$this->plugin->getPluginTitle()}:</b> " . $this->get_notice_text('need_activate_license') . '</p>'
|
219 |
];
|
220 |
+
} else if( $this->need_renew_license() ) {
|
221 |
// todo: может быть перенести уведомление в премиум менеджер?
|
222 |
$notices[] = [
|
223 |
+
'id' => 'license_exired_for_' . $this->plugin->getPluginName(),
|
224 |
+
'type' => 'warning',
|
225 |
+
'dismissible' => false,
|
226 |
'dismiss_expires' => 0,
|
227 |
+
'text' => "<p><b>{$this->plugin->getPluginTitle()}:</b> " . $this->get_notice_text('need_renew_license') . '</p>'
|
228 |
];
|
229 |
}
|
230 |
|
234 |
/**
|
235 |
* Выводит уведомление внутри интерфейса плагина, на всех страницах плагина.
|
236 |
*
|
237 |
+
* @param Wbcr_FactoryPages429_ImpressiveThemplate $obj
|
|
|
|
|
238 |
*
|
239 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
240 |
*
|
241 |
* @return void
|
242 |
+
* @since 4.1.1
|
243 |
+
*
|
244 |
*/
|
245 |
+
public function install_notice_in_plugin_interface($plugin, $obj)
|
246 |
+
{
|
247 |
+
if( $plugin->getPluginName() != $this->plugin->getPluginName() ) {
|
248 |
return;
|
249 |
}
|
250 |
|
251 |
$notice_text = '';
|
252 |
|
253 |
+
if( $this->need_intall_or_activate_premium() ) {
|
254 |
+
$notice_text = $this->get_notice_text('please_activate_premium');
|
255 |
|
256 |
+
if( !$this->plugin->premium->is_install_package() ) {
|
257 |
+
$notice_text = $this->get_notice_text('please_install_premium');
|
258 |
}
|
259 |
+
} else if( $this->need_activate_license() ) {
|
260 |
+
$notice_text = $this->get_notice_text('need_activate_license');
|
261 |
+
} else if( $this->need_renew_license() ) {
|
262 |
+
$notice_text = $this->get_notice_text('need_renew_license');
|
263 |
}
|
264 |
|
265 |
+
$obj->printWarningNotice($notice_text);
|
266 |
}
|
267 |
|
268 |
/**
|
269 |
* Выводит уведомление в строке плагина (на странице плагинов),
|
270 |
* что нужно установить премиум плагин.
|
271 |
*
|
272 |
+
* @param array $plugin_data
|
|
|
|
|
273 |
* @param string $status
|
274 |
*
|
275 |
* @param string $plugin_file
|
276 |
*
|
277 |
* @return void
|
278 |
+
* @since 4.1.1
|
279 |
+
*
|
280 |
* @see WP_Plugins_List_Table
|
281 |
*
|
282 |
*/
|
283 |
+
public function notice_in_plugin_row($plugin_file, $plugin_data, $status)
|
284 |
+
{
|
285 |
|
286 |
+
if( !current_user_can('update_plugins') ) {
|
287 |
return;
|
288 |
};
|
289 |
|
290 |
$notice_text = '';
|
291 |
|
292 |
+
if( $this->need_intall_or_activate_premium() ) {
|
293 |
+
$notice_text = $this->get_notice_text('please_activate_premium');
|
294 |
|
295 |
+
if( !$this->plugin->premium->is_install_package() ) {
|
296 |
+
$notice_text = $this->get_notice_text('please_install_premium');
|
297 |
}
|
298 |
+
} else if( $this->need_activate_license() ) {
|
299 |
+
$notice_text = $this->get_notice_text('need_activate_license');
|
300 |
+
} else if( $this->need_renew_license() ) {
|
301 |
+
$notice_text = $this->get_notice_text('need_renew_license');
|
302 |
}
|
303 |
|
304 |
?>
|
305 |
+
<tr class="plugin-update-tr active update wbcr-factory-updates">
|
306 |
+
<td colspan="3" class="plugin-update colspanchange">
|
307 |
+
<div class="update-message notice inline notice-warning notice-alt">
|
308 |
+
<p>
|
309 |
<?php echo $notice_text; ?>
|
310 |
+
</p>
|
311 |
+
</div>
|
312 |
+
</td>
|
313 |
+
</tr>
|
314 |
<?php
|
315 |
}
|
316 |
|
317 |
/**
|
318 |
* Печатает стили для уведомления о загрузке премиум версии на странице плагинов.
|
319 |
*
|
|
|
320 |
* @return void
|
321 |
+
* @since 4.1.1
|
322 |
*/
|
323 |
+
public function print_styles_for_plugin_row()
|
324 |
+
{
|
325 |
|
326 |
+
if( !current_user_can('update_plugins') ) {
|
327 |
return;
|
328 |
}
|
329 |
|
330 |
$plugin_base = $this->plugin->get_paths()->basename;
|
331 |
|
332 |
+
if( $this->need_intall_or_activate_premium() ) {
|
333 |
$message_background_color = '#f5e9f5';
|
334 |
+
$message_border_color = '#dab9da';
|
335 |
+
} else if( $this->need_renew_license() || $this->need_activate_license() ) {
|
336 |
$message_background_color = '#ffe2e0';
|
337 |
+
$message_border_color = '#F44336';
|
338 |
+
if( $this->plugin->premium->is_install_package() ) {
|
339 |
+
$package = $this->plugin->premium->get_package_data();
|
340 |
$plugin_base = $package['basename'];
|
341 |
}
|
342 |
}
|
343 |
|
344 |
?>
|
345 |
+
<style>
|
346 |
+
tr[data-plugin="<?php echo $plugin_base; ?>"] th,
|
347 |
+
tr[data-plugin="<?php echo $plugin_base; ?>"] td {
|
348 |
+
box-shadow: none !important;
|
349 |
+
}
|
350 |
+
|
351 |
+
.wbcr-factory-updates .update-message {
|
352 |
+
background-color: <?php echo esc_attr($message_background_color); ?> !important;
|
353 |
+
border-color: <?php echo esc_attr($message_border_color); ?> !important;
|
354 |
+
}
|
355 |
+
</style>
|
356 |
<?php
|
357 |
}
|
358 |
|
359 |
+
|
360 |
/**
|
361 |
* Обновляет данные о премиум пакете в базе данных, после обновления плагина.
|
362 |
*
|
363 |
+
* @param WP_Upgrader $wp_upgrader WP_Upgrader instance.
|
364 |
+
* @param array $hook_extra Array of bulk item update data.
|
|
|
|
|
|
|
365 |
*
|
366 |
+
* @return void
|
367 |
* @throws Exception
|
368 |
*/
|
369 |
+
public function upgrader_process_complete_hook($upgrader_object, $hook_extra)
|
370 |
+
{
|
371 |
+
if( !empty($hook_extra) && $hook_extra['action'] == 'update' && $hook_extra['type'] == 'plugin' ) {
|
372 |
+
|
373 |
+
# if it isn't bulk upgrade
|
374 |
+
if( isset($hook_extra['plugin']) && $this->plugin_basename === $hook_extra['plugin'] ) {
|
375 |
+
$this->update_package_data();
|
376 |
+
|
377 |
+
return;
|
378 |
+
}
|
379 |
+
|
380 |
+
# if it is bulk upgrade
|
381 |
+
if( is_array($hook_extra['plugins']) && in_array($this->plugin_basename, $hook_extra['plugins']) ) {
|
382 |
$this->update_package_data();
|
383 |
}
|
384 |
}
|
385 |
}
|
386 |
|
387 |
/**
|
|
|
388 |
* @return array
|
389 |
+
* @since 4.1.1
|
390 |
*/
|
391 |
+
protected function get_settings()
|
392 |
+
{
|
393 |
+
$settings = $this->plugin->getPluginInfoAttr('license_settings');
|
394 |
|
395 |
+
$updates_settings = isset($settings['updates_settings']) ? $settings['updates_settings'] : [];
|
396 |
|
397 |
+
if( is_array($settings) ) {
|
398 |
$updates_settings['repository'] = $settings['provider'];
|
399 |
+
$updates_settings['slug'] = $settings['slug'];
|
400 |
}
|
401 |
|
402 |
+
return wp_parse_args($updates_settings, [
|
403 |
+
'repository' => 'wordpress',
|
404 |
+
'slug' => '',
|
405 |
+
'maybe_rollback' => false,
|
406 |
'rollback_settings' => [
|
407 |
'prev_stable_version' => '0.0.0'
|
408 |
]
|
409 |
+
]);
|
410 |
}
|
411 |
|
412 |
/**
|
|
|
413 |
* @return string
|
414 |
+
* @since 4.1.1
|
415 |
*/
|
416 |
+
protected function get_plugin_version()
|
417 |
+
{
|
418 |
+
if( !$this->plugin->premium->is_install_package() ) {
|
419 |
return '0.0.0';
|
420 |
}
|
421 |
|
425 |
}
|
426 |
|
427 |
/**
|
|
|
|
|
428 |
* @param $args
|
429 |
*
|
430 |
* @return string
|
431 |
+
* @since 4.1.1
|
432 |
+
*
|
433 |
*/
|
434 |
+
protected function get_admin_url($args)
|
435 |
+
{
|
436 |
+
$url = admin_url('plugins.php', $args);
|
437 |
|
438 |
+
if( $this->plugin->isNetworkActive() ) {
|
439 |
+
$url = network_admin_url('plugins.php', $args);
|
440 |
}
|
441 |
|
442 |
+
return add_query_arg($args, $url);
|
443 |
}
|
444 |
|
445 |
/**
|
|
|
|
|
446 |
* @param string $action
|
447 |
*
|
448 |
* @return string
|
449 |
+
* @since 4.1.1
|
450 |
+
*
|
451 |
*/
|
452 |
+
protected function get_action_url($action)
|
453 |
+
{
|
454 |
+
$args = [
|
455 |
+
'wfactory_premium_updates_action' => $action,
|
456 |
+
'wfactory_premium_updates_plugin' => $this->plugin_slug
|
457 |
+
];
|
458 |
|
459 |
+
return wp_nonce_url($this->get_admin_url($args), "factory_premium_{$action}");
|
460 |
}
|
461 |
|
462 |
/**
|
|
|
463 |
* @return string
|
464 |
+
* @since 4.1.1
|
465 |
*/
|
466 |
+
protected function get_activate_premium_url()
|
467 |
+
{
|
468 |
$args = [
|
469 |
'action' => 'activate',
|
470 |
'plugin' => $this->plugin_basename,
|
471 |
];
|
472 |
|
473 |
+
return wp_nonce_url($this->get_admin_url($args), "activate-plugin_{$this->plugin_basename}");
|
474 |
}
|
475 |
|
476 |
/**
|
477 |
* Нужно установить или обновить премиум?
|
478 |
*
|
|
|
479 |
* @return bool
|
480 |
+
* @since 4.1.1
|
481 |
*/
|
482 |
+
protected function need_intall_or_activate_premium()
|
483 |
+
{
|
484 |
+
if( $this->plugin->premium->is_activate() && $this->plugin->premium->is_active() ) {
|
485 |
+
if( $this->plugin->premium->is_install_package() && is_plugin_active($this->plugin_basename) ) {
|
486 |
return false;
|
487 |
}
|
488 |
|
495 |
/**
|
496 |
* Требуется активировать лицензию?
|
497 |
*
|
|
|
498 |
* @return bool
|
499 |
+
* @since 4.1.1
|
500 |
*/
|
501 |
+
protected function need_activate_license()
|
502 |
+
{
|
503 |
+
return !$this->plugin->premium->is_activate() && $this->plugin->premium->is_install_package();
|
504 |
}
|
505 |
|
506 |
/**
|
507 |
* Нужно продлить лицензию?
|
508 |
*
|
|
|
509 |
* @return bool
|
510 |
+
* @since 4.1.1
|
511 |
*/
|
512 |
+
protected function need_renew_license()
|
513 |
+
{
|
514 |
+
return $this->plugin->premium->is_activate() && !$this->plugin->premium->is_active();
|
515 |
}
|
516 |
|
517 |
/**
|
|
|
518 |
* @throws Exception
|
519 |
+
* @since 4.1.1
|
520 |
*/
|
521 |
+
protected function install()
|
522 |
+
{
|
523 |
global $wp_filesystem;
|
524 |
|
525 |
+
if( !current_user_can('install_plugins') ) {
|
526 |
+
throw new Exception('Sorry, you are not allowed to install plugins on this site.', 'not_allowed_install_plugin');
|
527 |
}
|
528 |
|
529 |
+
if( $this->plugin->premium->is_install_package() ) {
|
530 |
return;
|
531 |
}
|
532 |
|
533 |
+
if( !$wp_filesystem ) {
|
534 |
+
if( !function_exists('WP_Filesystem') ) {
|
535 |
+
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
536 |
}
|
537 |
WP_Filesystem();
|
538 |
}
|
539 |
|
540 |
+
if( !WP_Filesystem(false, WP_PLUGIN_DIR) ) {
|
541 |
+
throw new Exception('You are not allowed to edt folders/files on this site', 'not_allowed_edit_filesystem');
|
542 |
} else {
|
543 |
|
544 |
$download_url = $this->repository->get_download_url();
|
545 |
|
546 |
/**
|
547 |
+
* @param string $plugin_name Имя плагина
|
548 |
*
|
549 |
+
* @param string $package Дополнительная информация о лицензии
|
550 |
+
* @since 4.1.1
|
551 |
*
|
|
|
552 |
*/
|
553 |
+
do_action('wbcr/factory/premium/install_package', $download_url, $this->plugin->getPluginName());
|
554 |
|
555 |
// If plugin is installed before we update the premium package in database.
|
556 |
// ------------------------------------------------------------------------
|
557 |
+
//$plugins = get_plugins( $plugin_folder = '' );
|
558 |
+
//
|
559 |
+
//if ( ! empty( $plugins ) ) {
|
560 |
+
// foreach ( (array) $plugins as $plugin_base => $plugin ) {
|
561 |
+
// $basename_parts = explode( '/', $plugin_base );
|
562 |
+
// if ( sizeof( $basename_parts ) == 2 && $basename_parts[0] == $this->plugin_slug ) {
|
563 |
+
//
|
564 |
+
// $this->plugin_basename = $plugin_base;
|
565 |
+
// $this->plugin_main_file = WP_PLUGIN_DIR . '/' . $plugin_base;
|
566 |
+
// $this->plugin_absolute_path = dirname( WP_PLUGIN_DIR . '/' . $plugin_base );
|
567 |
+
//
|
568 |
+
// $this->update_package_data();
|
569 |
+
//
|
570 |
+
// $package = $this->plugin->premium->get_package_data();
|
571 |
+
//
|
572 |
+
// /**
|
573 |
+
// * @since 4.1.1
|
574 |
+
// *
|
575 |
+
// * @param string $plugin_name Имя плагина
|
576 |
+
// *
|
577 |
+
// * @param string $package Дополнительная информация о лицензии
|
578 |
+
// */
|
579 |
+
// do_action( 'wbcr/factory/premium/installed_package', $package, $this->plugin->getPluginName() );
|
580 |
+
//
|
581 |
+
// return;
|
582 |
+
// }
|
583 |
+
// }
|
584 |
+
//}
|
585 |
// ------------------------------------------------------------------------
|
586 |
|
587 |
+
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
588 |
+
require_once(ABSPATH . 'wp-admin/includes/misc.php');
|
589 |
|
590 |
+
if( !class_exists('Plugin_Upgrader', false) ) {
|
591 |
// Include required resources for the installation.
|
592 |
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
593 |
}
|
594 |
|
595 |
$skin_args = [
|
596 |
+
'type' => 'web',
|
597 |
+
'title' => sprintf('Installing plugin: %s', $this->plugin->getPluginTitle() . ' Premium'),
|
598 |
+
'url' => esc_url_raw($download_url),
|
599 |
+
'nonce' => 'install-plugin_' . $this->plugin_slug,
|
600 |
'plugin' => '',
|
601 |
+
'api' => null,
|
602 |
+
'extra' => [
|
603 |
'slug' => $this->plugin_slug
|
604 |
],
|
605 |
];
|
606 |
|
607 |
+
require_once(ABSPATH . 'wp-admin/admin-header.php');
|
608 |
|
609 |
+
if( !$this->plugin->premium->is_install_package() ) {
|
610 |
+
$skin = new Plugin_Installer_Skin($skin_args);
|
611 |
} else {
|
612 |
+
$skin = new WP_Upgrader_Skin($skin_args);
|
613 |
}
|
614 |
|
615 |
+
$upgrader = new Plugin_Upgrader($skin);
|
616 |
|
617 |
+
if( empty($download_url) ) {
|
618 |
+
throw new Exception('You must pass the download url to upgrade up premium package.', "not_passed_download_url");
|
619 |
}
|
620 |
|
621 |
+
$install_result = $upgrader->install($download_url);
|
622 |
|
623 |
+
include(ABSPATH . 'wp-admin/admin-footer.php');
|
624 |
|
625 |
+
if( is_wp_error($install_result) ) {
|
626 |
+
throw new Exception($install_result->get_error_message(), $install_result->get_error_code());
|
627 |
+
} else if( is_wp_error($skin->result) ) {
|
628 |
+
throw new Exception($skin->result->get_error_message(), $skin->result->get_error_code());
|
629 |
+
} else if( is_null($install_result) ) {
|
630 |
global $wp_filesystem;
|
631 |
|
632 |
+
$error_code = 'unable_to_connect_to_filesystem';
|
633 |
$error_message = 'Unable to connect to the filesystem. Please confirm your credentials.';
|
634 |
|
635 |
// Pass through the error from WP_Filesystem if one was raised.
|
636 |
+
if( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() ) {
|
637 |
$error_message = $wp_filesystem->errors->get_error_message();
|
638 |
}
|
639 |
|
640 |
+
throw new Exception($error_message, $error_code);
|
641 |
}
|
642 |
|
643 |
+
$this->plugin_basename = $upgrader->plugin_info();
|
644 |
+
$this->plugin_main_file = WP_PLUGIN_DIR . '/' . $this->plugin_basename;
|
645 |
+
$this->plugin_absolute_path = dirname(WP_PLUGIN_DIR . '/' . $this->plugin_basename);
|
646 |
|
647 |
$this->update_package_data();
|
648 |
|
649 |
$package = $this->plugin->premium->get_package_data();
|
650 |
|
651 |
/**
|
652 |
+
* @param string $plugin_name Имя плагина
|
653 |
*
|
654 |
+
* @param string $package Дополнительная информация о лицензии
|
655 |
+
* @since 4.1.1
|
656 |
*
|
|
|
657 |
*/
|
658 |
+
do_action('wbcr/factory/premium/installed_package', $package, $this->plugin->getPluginName());
|
659 |
|
660 |
die();
|
661 |
}
|
665 |
* @return bool
|
666 |
* @throws Exception
|
667 |
*/
|
668 |
+
protected function delete()
|
669 |
+
{
|
670 |
+
if( !$this->plugin->premium->is_install_package() ) {
|
671 |
return false;
|
672 |
}
|
673 |
|
674 |
$package = $this->plugin->premium->get_package_data();
|
675 |
|
676 |
/**
|
677 |
+
* @param string $plugin_name Имя плагина
|
678 |
*
|
679 |
+
* @param string $package Дополнительная информация о лицензии
|
680 |
+
* @since 4.1.1
|
681 |
*
|
|
|
682 |
*/
|
683 |
+
do_action('wbcr/factory/premium/delete_package', $package, $this->plugin->getPluginName());
|
684 |
|
685 |
+
if( is_plugin_active($package['basename']) ) {
|
686 |
+
if( is_multisite() && is_plugin_active_for_network($package['basename']) ) {
|
687 |
+
deactivate_plugins($package['basename'], false, true);
|
688 |
} else {
|
689 |
+
deactivate_plugins($package['basename']);
|
690 |
}
|
691 |
}
|
692 |
|
693 |
+
$result = delete_plugins([$package['basename']]);
|
694 |
|
695 |
+
if( is_wp_error($result) ) {
|
696 |
+
throw new Exception($result->get_error_message(), $result->get_error_code());
|
697 |
}
|
698 |
|
699 |
$this->plugin->premium->delete_package();
|
700 |
|
701 |
/**
|
702 |
+
* @param string $plugin_name Имя плагина
|
703 |
*
|
704 |
+
* @param string $package Дополнительная информация о лицензии
|
705 |
+
* @since 4.1.1
|
706 |
*
|
|
|
707 |
*/
|
708 |
+
do_action('wbcr/factory/premium/deleted_package', $package, $this->plugin->getPluginName());
|
709 |
|
710 |
return true;
|
711 |
}
|
712 |
|
713 |
/**
|
|
|
714 |
* @return bool
|
715 |
+
* @since 4.1.1
|
716 |
*/
|
717 |
+
protected function deactivate()
|
718 |
+
{
|
719 |
+
if( !$this->plugin->premium->is_install_package() || !is_plugin_active($this->plugin_basename) ) {
|
720 |
return false;
|
721 |
}
|
722 |
|
723 |
$package = $this->plugin->premium->get_package_data();
|
724 |
|
725 |
/**
|
726 |
+
* @param string $plugin_name Имя плагина
|
727 |
*
|
728 |
+
* @param string $package Дополнительная информация о лицензии
|
729 |
+
* @since 4.1.1
|
730 |
*
|
|
|
731 |
*/
|
732 |
+
do_action('wbcr/factory/premium/deactivate_package', $package, $this->plugin->getPluginName());
|
733 |
|
734 |
+
if( is_multisite() && is_plugin_active_for_network($this->plugin_basename) ) {
|
735 |
+
deactivate_plugins($this->plugin_basename, false, true);
|
736 |
} else {
|
737 |
+
deactivate_plugins($this->plugin_basename);
|
738 |
}
|
739 |
|
740 |
/**
|
741 |
+
* @param string $plugin_name Имя плагина
|
742 |
*
|
743 |
+
* @param string $package Дополнительная информация о лицензии
|
744 |
+
* @since 4.1.1
|
745 |
*
|
|
|
746 |
*/
|
747 |
+
do_action('wbcr/factory/premium/deactivated_package', $package, $this->plugin->getPluginName());
|
748 |
|
749 |
return true;
|
750 |
}
|
751 |
|
752 |
/**
|
|
|
|
|
753 |
* @param array $plugin_data
|
754 |
*
|
755 |
* @throws Exception
|
756 |
+
* @since 4.1.1
|
757 |
+
*
|
758 |
*/
|
759 |
+
protected function update_package_data()
|
760 |
+
{
|
761 |
|
762 |
+
if( !$this->plugin_main_file ) {
|
763 |
return;
|
764 |
}
|
765 |
|
766 |
$default_headers = [
|
767 |
+
'Version' => 'Version',
|
768 |
'FrameworkVersion' => 'Framework Version'
|
769 |
];
|
770 |
|
771 |
+
$plugin_data = get_file_data($this->plugin_main_file, $default_headers, 'plugin');
|
772 |
|
773 |
+
$this->plugin->premium->update_package_data([
|
774 |
+
'basename' => $this->plugin_basename,
|
775 |
+
'version' => $plugin_data['Version'],
|
776 |
+
'framework_version' => isset($plugin_data['FrameworkVersion']) ? $plugin_data['FrameworkVersion'] : null,
|
777 |
+
]);
|
778 |
}
|
779 |
|
780 |
/**
|
|
|
|
|
781 |
* @param string $type
|
782 |
*
|
783 |
* @return string|null
|
784 |
+
* @since 4.1.1
|
785 |
+
*
|
786 |
*/
|
787 |
+
private function get_notice_text($type)
|
788 |
+
{
|
789 |
+
$upgrade_url = $this->get_action_url('install');
|
790 |
$activate_plugin_url = $this->get_activate_premium_url();
|
791 |
+
$cancel_license_url = $this->get_action_url('cancel_license');
|
792 |
|
793 |
$texts = [
|
794 |
+
'need_activate_license' => __('License activation required. A license is required to get premium plugin updates, as well as to get additional services.', 'wbcr_factory_429'),
|
795 |
+
'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_429'),
|
796 |
+
'please_install_premium' => sprintf(__('Congratulations, you have activated a premium license! Please install premium add-on to use pro features now.
|
797 |
+
<a href="%s">Install</a> premium add-on or <a href="%s">cancel</a> license.', 'wbcr_factory_429'), $upgrade_url, $cancel_license_url),
|
798 |
+
'please_activate_premium' => sprintf(__('Congratulations, you have activated a premium license! Please activate premium add-on to use pro features now.
|
799 |
+
<a href="%s">Activate</a> premium add-on or <a href="%s">cancel</a> license.', 'wbcr_factory_429'), $activate_plugin_url, $cancel_license_url)
|
800 |
];
|
801 |
|
802 |
+
if( isset($texts[$type]) ) {
|
803 |
|
804 |
/**
|
|
|
|
|
805 |
* @param string $type
|
806 |
* @param string $plugin_name
|
807 |
*
|
808 |
+
* @param array $messages
|
809 |
+
* @since 4.1.1
|
810 |
+
*
|
811 |
*/
|
812 |
+
return apply_filters('wbcr/factory/premium/notice_text', $texts[$type], $type, $this->plugin->getPluginName());
|
813 |
}
|
814 |
|
815 |
return null;
|
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' ) ) {
|
@@ -29,7 +29,7 @@ class Upgrader {
|
|
29 |
* @var array хранит имя репозитория и его имя класса
|
30 |
* [
|
31 |
* 'wordpress' => 'WBCR\Factory_Freemius_000\Updates\Freemius_Repository',
|
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 |
|
@@ -90,13 +90,13 @@ class Upgrader {
|
|
90 |
*
|
91 |
* @since 4.1.1
|
92 |
*
|
93 |
-
* @param
|
94 |
* @param $args
|
95 |
* @param bool $is_premium
|
96 |
*
|
97 |
* @throws Exception
|
98 |
*/
|
99 |
-
public function __construct(
|
100 |
|
101 |
$this->plugin = $plugin;
|
102 |
|
@@ -106,7 +106,7 @@ class Upgrader {
|
|
106 |
$this->is_debug = defined( 'FACTORY_UPDATES_DEBUG' ) && FACTORY_UPDATES_DEBUG;
|
107 |
|
108 |
# Добавляем Wordpress репозиторий в список доступных репозиториев по умолчанию
|
109 |
-
self::$repositories['wordpress'] = '\WBCR\
|
110 |
|
111 |
$settings = $this->get_settings();
|
112 |
|
@@ -287,7 +287,7 @@ class Upgrader {
|
|
287 |
|
288 |
if ( isset( self::$repositories[ $repository_name ] ) && class_exists( self::$repositories[ $repository_name ] ) ) {
|
289 |
if ( self::$repositories[ $repository_name ] instanceof Repository ) {
|
290 |
-
throw new Exception( "Repository {$repository_name} must extend the class WBCR\
|
291 |
}
|
292 |
|
293 |
return new self::$repositories[ $repository_name ]( $this->plugin );
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_429\Updates;
|
4 |
|
5 |
use Exception;
|
6 |
use stdClass;
|
7 |
+
use Wbcr_Factory429_Plugin;
|
8 |
|
9 |
// Exit if accessed directly
|
10 |
if ( ! defined( 'ABSPATH' ) ) {
|
29 |
* @var array хранит имя репозитория и его имя класса
|
30 |
* [
|
31 |
* 'wordpress' => 'WBCR\Factory_Freemius_000\Updates\Freemius_Repository',
|
32 |
+
* 'freemius' => '\WBCR\Factory_429\Updates\Wordpress_Repository'
|
33 |
* ]
|
34 |
*/
|
35 |
public static $repositories = [];
|
42 |
protected $type = 'default';
|
43 |
|
44 |
/**
|
45 |
+
* @var Wbcr_Factory429_Plugin
|
46 |
*/
|
47 |
protected $plugin;
|
48 |
|
90 |
*
|
91 |
* @since 4.1.1
|
92 |
*
|
93 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
94 |
* @param $args
|
95 |
* @param bool $is_premium
|
96 |
*
|
97 |
* @throws Exception
|
98 |
*/
|
99 |
+
public function __construct( Wbcr_Factory429_Plugin $plugin ) {
|
100 |
|
101 |
$this->plugin = $plugin;
|
102 |
|
106 |
$this->is_debug = defined( 'FACTORY_UPDATES_DEBUG' ) && FACTORY_UPDATES_DEBUG;
|
107 |
|
108 |
# Добавляем Wordpress репозиторий в список доступных репозиториев по умолчанию
|
109 |
+
self::$repositories['wordpress'] = '\WBCR\Factory_429\Updates\Wordpress_Repository';
|
110 |
|
111 |
$settings = $this->get_settings();
|
112 |
|
287 |
|
288 |
if ( isset( self::$repositories[ $repository_name ] ) && class_exists( self::$repositories[ $repository_name ] ) ) {
|
289 |
if ( self::$repositories[ $repository_name ] instanceof Repository ) {
|
290 |
+
throw new Exception( "Repository {$repository_name} must extend the class WBCR\Factory_429\Updates\Repository interface!" );
|
291 |
}
|
292 |
|
293 |
return new self::$repositories[ $repository_name ]( $this->plugin );
|
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 bool $is_premium
|
35 |
*/
|
36 |
-
abstract public function __construct(
|
37 |
|
38 |
/**
|
39 |
* @return void
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_429\Updates;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
+
use Wbcr_Factory429_Plugin;
|
7 |
|
8 |
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
exit;
|
23 |
protected $initialized = false;
|
24 |
|
25 |
/**
|
26 |
+
* @var Wbcr_Factory429_Plugin
|
27 |
*/
|
28 |
protected $plugin;
|
29 |
|
30 |
/**
|
31 |
* Repository constructor.
|
32 |
*
|
33 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
34 |
* @param bool $is_premium
|
35 |
*/
|
36 |
+
abstract public function __construct( Wbcr_Factory429_Plugin $plugin );
|
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 bool $is_premium
|
25 |
*/
|
26 |
-
public function __construct(
|
27 |
$this->plugin = $plugin;
|
28 |
}
|
29 |
|
1 |
<?php
|
2 |
|
3 |
+
namespace WBCR\Factory_429\Updates;
|
4 |
|
5 |
// Exit if accessed directly
|
6 |
+
use Wbcr_Factory429_Plugin;
|
7 |
|
8 |
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
exit;
|
20 |
/**
|
21 |
* Wordpress constructor.
|
22 |
*
|
23 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
24 |
* @param bool $is_premium
|
25 |
*/
|
26 |
+
public function __construct( Wbcr_Factory429_Plugin $plugin ) {
|
27 |
$this->plugin = $plugin;
|
28 |
}
|
29 |
|
libs/factory/core/langs/{wbcr_factory_420-ru_RU.mo → wbcr_factory_429-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/core/langs/{wbcr_factory_420-ru_RU.po → wbcr_factory_429-ru_RU.po}
RENAMED
File without changes
|
libs/factory/forms/boot.php
CHANGED
@@ -10,264 +10,265 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
// the module provides function for the admin area only
|
18 |
|
19 |
-
if
|
20 |
return;
|
21 |
}
|
22 |
|
23 |
// checks if the module is already loaded in order to
|
24 |
// prevent loading the same version of the module twice.
|
25 |
-
if
|
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
|
56 |
|
57 |
/**
|
58 |
-
* @param
|
59 |
*
|
60 |
* @throws Exception
|
61 |
*/
|
62 |
-
function
|
|
|
63 |
|
64 |
-
if
|
65 |
-
throw new Exception(
|
66 |
}
|
67 |
|
68 |
-
require_once(
|
69 |
-
require_once(
|
70 |
-
require_once(
|
71 |
-
require_once(
|
72 |
-
require_once(
|
73 |
-
require_once(
|
74 |
-
require_once(
|
75 |
-
require_once(
|
76 |
|
77 |
// registration of controls
|
78 |
-
$plugin->forms->registerControls(
|
79 |
[
|
80 |
-
'type'
|
81 |
-
'class'
|
82 |
-
'include' =>
|
83 |
],
|
84 |
[
|
85 |
-
'type'
|
86 |
-
'class'
|
87 |
-
'include' =>
|
88 |
],
|
89 |
[
|
90 |
-
'type'
|
91 |
-
'class'
|
92 |
-
'include' =>
|
93 |
],
|
94 |
[
|
95 |
-
'type'
|
96 |
-
'class'
|
97 |
-
'include' =>
|
98 |
],
|
99 |
[
|
100 |
-
'type'
|
101 |
-
'class'
|
102 |
-
'include' =>
|
103 |
],
|
104 |
[
|
105 |
-
'type'
|
106 |
-
'class'
|
107 |
-
'include' =>
|
108 |
],
|
109 |
[
|
110 |
-
'type'
|
111 |
-
'class'
|
112 |
-
'include' =>
|
113 |
],
|
114 |
[
|
115 |
-
'type'
|
116 |
-
'class'
|
117 |
-
'include' =>
|
118 |
],
|
119 |
[
|
120 |
-
'type'
|
121 |
-
'class'
|
122 |
-
'include' =>
|
123 |
],
|
124 |
[
|
125 |
-
'type'
|
126 |
-
'class'
|
127 |
-
'include' =>
|
128 |
],
|
129 |
[
|
130 |
-
'type'
|
131 |
-
'class'
|
132 |
-
'include' =>
|
133 |
],
|
134 |
[
|
135 |
-
'type'
|
136 |
-
'class'
|
137 |
-
'include' =>
|
138 |
],
|
139 |
[
|
140 |
-
'type'
|
141 |
-
'class'
|
142 |
-
'include' =>
|
143 |
],
|
144 |
[
|
145 |
-
'type'
|
146 |
-
'class'
|
147 |
-
'include' =>
|
148 |
],
|
149 |
[
|
150 |
-
'type'
|
151 |
-
'class'
|
152 |
-
'include' =>
|
153 |
],
|
154 |
[
|
155 |
-
'type'
|
156 |
-
'class'
|
157 |
-
'include' =>
|
158 |
],
|
159 |
[
|
160 |
-
'type'
|
161 |
-
'class'
|
162 |
-
'include' =>
|
163 |
],
|
164 |
[
|
165 |
-
'type'
|
166 |
-
'class'
|
167 |
-
'include' =>
|
168 |
],
|
169 |
[
|
170 |
-
'type'
|
171 |
-
'class'
|
172 |
-
'include' =>
|
173 |
],
|
174 |
[
|
175 |
-
'type'
|
176 |
-
'class'
|
177 |
-
'include' =>
|
178 |
],
|
179 |
[
|
180 |
-
'type'
|
181 |
-
'class'
|
182 |
-
'include' =>
|
183 |
],
|
184 |
[
|
185 |
-
'type'
|
186 |
-
'class'
|
187 |
-
'include' =>
|
188 |
],
|
189 |
[
|
190 |
-
'type'
|
191 |
-
'class'
|
192 |
-
'include' =>
|
193 |
],
|
194 |
-
]
|
195 |
|
196 |
// registration of control holders
|
197 |
-
$plugin->forms->registerHolders(
|
198 |
[
|
199 |
-
'type'
|
200 |
-
'class'
|
201 |
-
'include' =>
|
202 |
],
|
203 |
[
|
204 |
-
'type'
|
205 |
-
'class'
|
206 |
-
'include' =>
|
207 |
],
|
208 |
[
|
209 |
-
'type'
|
210 |
-
'class'
|
211 |
-
'include' =>
|
212 |
],
|
213 |
[
|
214 |
-
'type'
|
215 |
-
'class'
|
216 |
-
'include' =>
|
217 |
],
|
218 |
[
|
219 |
-
'type'
|
220 |
-
'class'
|
221 |
-
'include' =>
|
222 |
],
|
223 |
[
|
224 |
-
'type'
|
225 |
-
'class'
|
226 |
-
'include' =>
|
227 |
],
|
228 |
[
|
229 |
-
'type'
|
230 |
-
'class'
|
231 |
-
'include' =>
|
232 |
],
|
233 |
[
|
234 |
-
'type'
|
235 |
-
'class'
|
236 |
-
'include' =>
|
237 |
],
|
238 |
[
|
239 |
-
'type'
|
240 |
-
'class'
|
241 |
-
'include' =>
|
242 |
],
|
243 |
[
|
244 |
-
'type'
|
245 |
-
'class'
|
246 |
-
'include' =>
|
247 |
]
|
248 |
-
]
|
249 |
|
250 |
// registration custom form elements
|
251 |
-
$plugin->forms->registerCustomElements(
|
252 |
[
|
253 |
-
'type'
|
254 |
-
'class'
|
255 |
-
'include' =>
|
256 |
],
|
257 |
[
|
258 |
-
'type'
|
259 |
-
'class'
|
260 |
-
'include' =>
|
261 |
],
|
262 |
-
]
|
263 |
|
264 |
// registration of form layouts
|
265 |
-
$plugin->forms->registerFormLayout(
|
266 |
-
'name'
|
267 |
-
'class'
|
268 |
-
'include' =>
|
269 |
-
]
|
270 |
}
|
271 |
|
272 |
-
add_action(
|
273 |
}
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
// the module provides function for the admin area only
|
18 |
|
19 |
+
if( !is_admin() ) {
|
20 |
return;
|
21 |
}
|
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_427_LOADED') ) {
|
26 |
return;
|
27 |
}
|
28 |
|
29 |
+
define('FACTORY_FORMS_427_LOADED', true);
|
30 |
|
31 |
+
define('FACTORY_FORMS_427_VERSION', '4.2.7');
|
32 |
|
33 |
// absolute path and URL to the files and resources of the module.
|
34 |
+
define('FACTORY_FORMS_427_DIR', dirname(__FILE__));
|
35 |
+
define('FACTORY_FORMS_427_URL', plugins_url(null, __FILE__));
|
36 |
|
37 |
#comp merge
|
38 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/providers/value-provider.interface.php');
|
39 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/providers/meta-value-provider.class.php');
|
40 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/providers/options-value-provider.class.php');
|
41 |
|
42 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/form.class.php');
|
43 |
#endcomp
|
44 |
|
45 |
+
load_plugin_textdomain('wbcr_factory_forms_427', 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_427_register_controls' hook
|
53 |
*
|
54 |
*/
|
55 |
+
if( !function_exists('wbcr_factory_forms_427_register_default_controls') ) {
|
56 |
|
57 |
/**
|
58 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
59 |
*
|
60 |
* @throws Exception
|
61 |
*/
|
62 |
+
function wbcr_factory_forms_427_register_default_controls(Wbcr_Factory429_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_427_DIR . '/includes/html-builder.class.php');
|
70 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/form-element.class.php');
|
71 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/control.class.php');
|
72 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/complex-control.class.php');
|
73 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/holder.class.php');
|
74 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/control-holder.class.php');
|
75 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/custom-element.class.php');
|
76 |
+
require_once(FACTORY_FORMS_427_DIR . '/includes/form-layout.class.php');
|
77 |
|
78 |
// registration of controls
|
79 |
+
$plugin->forms->registerControls([
|
80 |
[
|
81 |
+
'type' => 'checkbox',
|
82 |
+
'class' => 'Wbcr_FactoryForms427_CheckboxControl',
|
83 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/checkbox.php'
|
84 |
],
|
85 |
[
|
86 |
+
'type' => 'list',
|
87 |
+
'class' => 'Wbcr_FactoryForms427_ListControl',
|
88 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/list.php'
|
89 |
],
|
90 |
[
|
91 |
+
'type' => 'dropdown',
|
92 |
+
'class' => 'Wbcr_FactoryForms427_DropdownControl',
|
93 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/dropdown.php'
|
94 |
],
|
95 |
[
|
96 |
+
'type' => 'dropdown-and-colors',
|
97 |
+
'class' => 'Wbcr_FactoryForms427_DropdownAndColorsControl',
|
98 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/dropdown-and-colors.php'
|
99 |
],
|
100 |
[
|
101 |
+
'type' => 'hidden',
|
102 |
+
'class' => 'Wbcr_FactoryForms427_HiddenControl',
|
103 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/hidden.php'
|
104 |
],
|
105 |
[
|
106 |
+
'type' => 'hidden',
|
107 |
+
'class' => 'Wbcr_FactoryForms427_HiddenControl',
|
108 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/hidden.php'
|
109 |
],
|
110 |
[
|
111 |
+
'type' => 'radio',
|
112 |
+
'class' => 'Wbcr_FactoryForms427_RadioControl',
|
113 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/radio.php'
|
114 |
],
|
115 |
[
|
116 |
+
'type' => 'radio-colors',
|
117 |
+
'class' => 'Wbcr_FactoryForms427_RadioColorsControl',
|
118 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/radio-colors.php'
|
119 |
],
|
120 |
[
|
121 |
+
'type' => 'textarea',
|
122 |
+
'class' => 'Wbcr_FactoryForms427_TextareaControl',
|
123 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/textarea.php'
|
124 |
],
|
125 |
[
|
126 |
+
'type' => 'textbox',
|
127 |
+
'class' => 'Wbcr_FactoryForms427_TextboxControl',
|
128 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/textbox.php'
|
129 |
],
|
130 |
[
|
131 |
+
'type' => 'multiple-textbox',
|
132 |
+
'class' => 'Wbcr_FactoryForms427_MultipleTextboxControl',
|
133 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/multiple-textbox.php'
|
134 |
],
|
135 |
[
|
136 |
+
'type' => 'datetimepicker-range',
|
137 |
+
'class' => 'Wbcr_FactoryForms427_DatepickerRangeControl',
|
138 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/datepicker-range.php'
|
139 |
],
|
140 |
[
|
141 |
+
'type' => 'url',
|
142 |
+
'class' => 'Wbcr_FactoryForms427_UrlControl',
|
143 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/url.php'
|
144 |
],
|
145 |
[
|
146 |
+
'type' => 'wp-editor',
|
147 |
+
'class' => 'Wbcr_FactoryForms427_WpEditorControl',
|
148 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/wp-editor.php'
|
149 |
],
|
150 |
[
|
151 |
+
'type' => 'color',
|
152 |
+
'class' => 'Wbcr_FactoryForms427_ColorControl',
|
153 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/color.php'
|
154 |
],
|
155 |
[
|
156 |
+
'type' => 'color-and-opacity',
|
157 |
+
'class' => 'Wbcr_FactoryForms427_ColorAndOpacityControl',
|
158 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/color-and-opacity.php'
|
159 |
],
|
160 |
[
|
161 |
+
'type' => 'gradient',
|
162 |
+
'class' => 'Wbcr_FactoryForms427_GradientControl',
|
163 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/gradient.php'
|
164 |
],
|
165 |
[
|
166 |
+
'type' => 'font',
|
167 |
+
'class' => 'Wbcr_FactoryForms427_FontControl',
|
168 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/font.php'
|
169 |
],
|
170 |
[
|
171 |
+
'type' => 'google-font',
|
172 |
+
'class' => 'Wbcr_FactoryForms427_GoogleFontControl',
|
173 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/google-font.php'
|
174 |
],
|
175 |
[
|
176 |
+
'type' => 'pattern',
|
177 |
+
'class' => 'Wbcr_FactoryForms427_PatternControl',
|
178 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/pattern.php'
|
179 |
],
|
180 |
[
|
181 |
+
'type' => 'integer',
|
182 |
+
'class' => 'Wbcr_FactoryForms427_IntegerControl',
|
183 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/integer.php'
|
184 |
],
|
185 |
[
|
186 |
+
'type' => 'control-group',
|
187 |
+
'class' => 'Wbcr_FactoryForms427_ControlGroupHolder',
|
188 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/control-group.php'
|
189 |
],
|
190 |
[
|
191 |
+
'type' => 'paddings-editor',
|
192 |
+
'class' => 'Wbcr_FactoryForms427_PaddingsEditorControl',
|
193 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/paddings-editor.php'
|
194 |
],
|
195 |
+
]);
|
196 |
|
197 |
// registration of control holders
|
198 |
+
$plugin->forms->registerHolders([
|
199 |
[
|
200 |
+
'type' => 'tab',
|
201 |
+
'class' => 'Wbcr_FactoryForms427_TabHolder',
|
202 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/tab.php'
|
203 |
],
|
204 |
[
|
205 |
+
'type' => 'tab-item',
|
206 |
+
'class' => 'Wbcr_FactoryForms427_TabItemHolder',
|
207 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/tab-item.php'
|
208 |
],
|
209 |
[
|
210 |
+
'type' => 'accordion',
|
211 |
+
'class' => 'Wbcr_FactoryForms427_AccordionHolder',
|
212 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/accordion.php'
|
213 |
],
|
214 |
[
|
215 |
+
'type' => 'accordion-item',
|
216 |
+
'class' => 'Wbcr_FactoryForms427_AccordionItemHolder',
|
217 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/accordion-item.php'
|
218 |
],
|
219 |
[
|
220 |
+
'type' => 'control-group',
|
221 |
+
'class' => 'Wbcr_FactoryForms427_ControlGroupHolder',
|
222 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/control-group.php'
|
223 |
],
|
224 |
[
|
225 |
+
'type' => 'control-group-item',
|
226 |
+
'class' => 'Wbcr_FactoryForms427_ControlGroupItem',
|
227 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/control-group-item.php'
|
228 |
],
|
229 |
[
|
230 |
+
'type' => 'form-group',
|
231 |
+
'class' => 'Wbcr_FactoryForms427_FormGroupHolder',
|
232 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/form-group.php'
|
233 |
],
|
234 |
[
|
235 |
+
'type' => 'more-link',
|
236 |
+
'class' => 'Wbcr_FactoryForms427_MoreLinkHolder',
|
237 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/more-link.php'
|
238 |
],
|
239 |
[
|
240 |
+
'type' => 'div',
|
241 |
+
'class' => 'Wbcr_FactoryForms427_DivHolder',
|
242 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/div.php'
|
243 |
],
|
244 |
[
|
245 |
+
'type' => 'columns',
|
246 |
+
'class' => 'Wbcr_FactoryForms427_ColumnsHolder',
|
247 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/holders/columns.php'
|
248 |
]
|
249 |
+
]);
|
250 |
|
251 |
// registration custom form elements
|
252 |
+
$plugin->forms->registerCustomElements([
|
253 |
[
|
254 |
+
'type' => 'html',
|
255 |
+
'class' => 'Wbcr_FactoryForms427_Html',
|
256 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/customs/html.php',
|
257 |
],
|
258 |
[
|
259 |
+
'type' => 'separator',
|
260 |
+
'class' => 'Wbcr_FactoryForms427_Separator',
|
261 |
+
'include' => FACTORY_FORMS_427_DIR . '/controls/customs/separator.php',
|
262 |
],
|
263 |
+
]);
|
264 |
|
265 |
// registration of form layouts
|
266 |
+
$plugin->forms->registerFormLayout([
|
267 |
+
'name' => 'bootstrap-3',
|
268 |
+
'class' => 'Wbcr_FactoryForms427_Bootstrap3FormLayout',
|
269 |
+
'include' => FACTORY_FORMS_427_DIR . '/layouts/bootstrap-3/bootstrap-3.php'
|
270 |
+
]);
|
271 |
}
|
272 |
|
273 |
+
add_action('wbcr_factory_forms_427_register_controls', 'wbcr_factory_forms_427_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_FactoryForms427_CheckboxControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms427_CheckboxControl extends Wbcr_FactoryForms427_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_427') ?></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_427') ?></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_FactoryForms427_ColorAndOpacityControl') ) {
|
24 |
}
|
25 |
|
26 |
+
class Wbcr_FactoryForms427_ColorAndOpacityControl extends Wbcr_FactoryForms427_ComplexControl {
|
27 |
|
28 |
public $type = 'color-and-opacity';
|
29 |
|
57 |
'way' => 'slider'
|
58 |
));
|
59 |
|
60 |
+
$this->color = new Wbcr_FactoryForms427_ColorControl($options['color'], $form, $provider);
|
61 |
+
$this->opacity = new Wbcr_FactoryForms427_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_FactoryForms427_ColorControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms427_ColorControl extends Wbcr_FactoryForms427_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_FactoryForms427_Html') ) {
|
18 |
|
19 |
+
class Wbcr_FactoryForms427_Html extends Wbcr_FactoryForms427_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_FactoryForms427_Separator') ) {
|
18 |
+
class Wbcr_FactoryForms427_Separator extends Wbcr_FactoryForms427_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_FactoryForms427_DatepickerRangeControl') ) {
|
33 |
|
34 |
+
class Wbcr_FactoryForms427_DatepickerRangeControl extends Wbcr_FactoryForms427_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_FactoryForms427_TextboxControl($options['range_1'], $form, $provider);
|
69 |
+
$this->range_2 = new Wbcr_FactoryForms427_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 FactoryForms427_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 FactoryForms427_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_FactoryForms427_DropdownAndColorsControl') ) {
|
41 |
|
42 |
+
class Wbcr_FactoryForms427_DropdownAndColorsControl extends Wbcr_FactoryForms427_ComplexControl {
|
43 |
|
44 |
public $type = 'dropdown-and-colors';
|
45 |
|
69 |
'name' => $this->options['name'] . '__colors',
|
70 |
));
|
71 |
|
72 |
+
$this->dropdown = new Wbcr_FactoryForms427_DropdownControl($options['dropdown'], $form, $provider);
|
73 |
+
$this->colors = new Wbcr_FactoryForms427_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_FactoryForms427_DropdownControl' ) ) {
|
25 |
|
26 |
+
class Wbcr_FactoryForms427_DropdownControl extends Wbcr_FactoryForms427_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_427' ) ) ?>'
|
127 |
};
|
128 |
</script>
|
129 |
<?php
|
268 |
}
|
269 |
|
270 |
$is_empty = $this->isAjax() || empty( $items );
|
271 |
+
$empty_list = $this->getOption( 'empty', __( '- empty -', 'wbcr_factory_forms_427' ) );
|
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_427' );
|
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_FactoryForms427_FontControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms427_FontControl extends Wbcr_FactoryForms427_ComplexControl {
|
26 |
|
27 |
public $type = 'font';
|
28 |
|
54 |
'pickerTarget' => '.factory-control-' . $this->options['name'] . ' .factory-picker-target'
|
55 |
);
|
56 |
|
57 |
+
$this->size = new Wbcr_FactoryForms427_IntegerControl($option_font_size, $form, $provider);
|
58 |
+
$this->family = new Wbcr_FactoryForms427_DropdownControl($option_font_family, $form, $provider);
|
59 |
+
$this->color = new Wbcr_FactoryForms427_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_427_fonts', $fonts);
|
70 |
+
$fonts = apply_filters('wbcr_factory_forms_427_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_427')),
|
81 |
array(
|
82 |
'group',
|
83 |
+
__('Sans Serif:', 'wbcr_factory_forms_427'),
|
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_427'),
|
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_427'),
|
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_FactoryForms427_GoogleFontControl extends Wbcr_FactoryForms427_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_FactoryForms427_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_427'))
|
53 |
);
|
54 |
|
55 |
$fontsCommon = array(
|
56 |
'group',
|
57 |
+
__('Standard:', 'wbcr_factory_forms_427'),
|
58 |
array(
|
59 |
|
60 |
array('Arial, "Helvetica Neue", Helvetica, sans-serif', 'Arial'),
|
65 |
)
|
66 |
);
|
67 |
|
68 |
+
$fontsGoogleFonts = array('group', __('Google Fonts:', 'wbcr_factory_forms_427'), 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_427');
|
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_427');
|
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_427');
|
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_FactoryForms427_GradientControl') ) {
|
29 |
+
class Wbcr_FactoryForms427_GradientControl extends Wbcr_FactoryForms427_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_427' ) ?>';
|
70 |
+
factory.res.resHorizontal = '<?php _e( 'horizontal', 'wbcr_factory_forms_427' ) ?>';
|
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_FactoryForms427_HiddenControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms427_HiddenControl extends Wbcr_FactoryForms427_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_FactoryForms427_AccordionItemHolder') ) {
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms427_AccordionItemHolder extends Wbcr_FactoryForms427_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_FactoryForms427_AccordionHolder') ) {
|
17 |
/**
|
18 |
* Tab Control Holder
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
+
class Wbcr_FactoryForms427_AccordionHolder extends Wbcr_FactoryForms427_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_FactoryForms427_ColumnsHolder') ) {
|
18 |
/**
|
19 |
* Columns Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryForms427_ColumnsHolder extends Wbcr_FactoryForms427_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_FactoryForms427_ControlGroupItem') ) {
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms427_ControlGroupItem extends Wbcr_FactoryForms427_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_FactoryForms427_ControlGroupHolder') ) {
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms427_ControlGroupHolder extends Wbcr_FactoryForms427_ControlHolder {
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
61 |
continue;
|
62 |
}
|
63 |
|
64 |
+
$builder = new Wbcr_FactoryForms427_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_FactoryForms427_DivHolder') ) {
|
18 |
/**
|
19 |
* Div Control Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryForms427_DivHolder extends Wbcr_FactoryForms427_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_FactoryForms427_FormGroupHolder') ) {
|
18 |
/**
|
19 |
* Group Holder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryForms427_FormGroupHolder extends Wbcr_FactoryForms427_Holder {
|
24 |
|
25 |
/**
|
26 |
* A holder type.
|
libs/factory/forms/controls/holders/more-link.php
CHANGED
@@ -14,14 +14,14 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* Collapsed Group 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_FactoryForms427_MoreLinkHolder') ) {
|
18 |
|
19 |
/**
|
20 |
* Collapsed Group Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms427_MoreLinkHolder extends Wbcr_FactoryForms427_Holder {
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
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_FactoryForms427_TabItemHolder') ) {
|
17 |
/**
|
18 |
* Tab Item Control Holder
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
+
class Wbcr_FactoryForms427_TabItemHolder extends Wbcr_FactoryForms427_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_FactoryForms427_TabHolder') ) {
|
18 |
|
19 |
/**
|
20 |
* Tab Control Holder
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
class Wbcr_FactoryForms427_TabHolder extends Wbcr_FactoryForms427_Holder {
|
25 |
|
26 |
/**
|
27 |
* A holder type.
|
44 |
*
|
45 |
* @since 1.0.0
|
46 |
* @param mixed[] $options A holder options.
|
47 |
+
* @param FactoryForms427_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_FactoryForms427_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_FactoryForms427_IntegerControl') ) {
|
36 |
|
37 |
+
class Wbcr_FactoryForms427_IntegerControl extends Wbcr_FactoryForms427_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_FactoryForms427_ListControl') ) {
|
25 |
|
26 |
+
class Wbcr_FactoryForms427_ListControl extends Wbcr_FactoryForms427_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_427') ) ?>'
|
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_427'));
|
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_FactoryForms427_MultipleTextboxControl') ) {
|
19 |
|
20 |
+
class Wbcr_FactoryForms427_MultipleTextboxControl extends Wbcr_FactoryForms427_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_427') ?>
|
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_FactoryForms427_PaddingsEditorControl') ) {
|
18 |
|
19 |
+
class Wbcr_FactoryForms427_PaddingsEditorControl extends Wbcr_FactoryForms427_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_427') ?>
|
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_FactoryForms427_PatternControl') ) {
|
19 |
|
20 |
+
class Wbcr_FactoryForms427_PatternControl extends Wbcr_FactoryForms427_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_427_patterns', array());
|
56 |
+
$this->patterns = apply_filters('wbcr_factory_forms_427_patterns-' . $name, $this->patterns);
|
57 |
|
58 |
$this->custom_patterns = $this->getOption('patterns', array());
|
59 |
|
60 |
+
$this->color = new Wbcr_FactoryForms427_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_427') ?>">
|
106 |
<i class="fa fa-flask"></i>
|
107 |
+
<span><?php _e('re-color', 'wbcr_factory_forms_427') ?></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_427') ?></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_427') ?></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_FactoryForms427_RadioColorsControl') ) {
|
31 |
|
32 |
+
class Wbcr_FactoryForms427_RadioColorsControl extends Wbcr_FactoryForms427_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_FactoryForms427_RadioControl') ) {
|
25 |
|
26 |
+
class Wbcr_FactoryForms427_RadioControl extends Wbcr_FactoryForms427_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_FactoryForms427_TextareaControl') ) {
|
24 |
|
25 |
+
class Wbcr_FactoryForms427_TextareaControl extends Wbcr_FactoryForms427_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_FactoryForms427_TextboxControl') ) {
|
33 |
|
34 |
+
class Wbcr_FactoryForms427_TextboxControl extends Wbcr_FactoryForms427_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 FactoryForms427_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_FactoryForms427_UrlControl') ) {
|
22 |
|
23 |
+
class Wbcr_FactoryForms427_UrlControl extends Wbcr_FactoryForms427_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_FactoryForms427_WpEditorControl') ) {
|
26 |
|
27 |
+
class Wbcr_FactoryForms427_WpEditorControl extends Wbcr_FactoryForms427_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_427_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_FactoryForms427_ComplexControl') ) {
|
17 |
/**
|
18 |
* The base class for all controls.
|
19 |
*
|
20 |
* @since 1.0.0
|
21 |
*/
|
22 |
+
abstract class Wbcr_FactoryForms427_ComplexControl extends Wbcr_FactoryForms427_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_FactoryForms427_Control[]
|
37 |
*/
|
38 |
public $inner_controls = array();
|
39 |
|
41 |
* Sets a provider for the control.
|
42 |
*
|
43 |
* @since 1.0.0
|
44 |
+
* @param Wbcr_IFactoryForms427_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_FactoryForms427_ControlHolder') ) {
|
18 |
/**
|
19 |
* The base class for control holders.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
abstract class Wbcr_FactoryForms427_ControlHolder extends Wbcr_FactoryForms427_Control {
|
24 |
|
25 |
/**
|
26 |
* Holder Elements.
|
27 |
*
|
28 |
* @since 1.0.0
|
29 |
+
* @var Wbcr_FactoryForms427_Control[]
|
30 |
*/
|
31 |
protected $elements = array();
|
32 |
|
43 |
*
|
44 |
* @since 1.0.0
|
45 |
* @param mixed[] $options A holder options.
|
46 |
+
* @param Wbcr_FactoryForms427_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_FactoryForms427_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 provider that is used to get values.
|
44 |
*
|
45 |
* @since 1.0.0
|
46 |
-
* @var
|
47 |
*/
|
48 |
protected $provider = null;
|
49 |
|
@@ -51,7 +51,7 @@
|
|
51 |
* Create a new instance of the control.
|
52 |
*
|
53 |
* @param mixed[] $options
|
54 |
-
* @param
|
55 |
* @param null $provider
|
56 |
* @since 1.0.0
|
57 |
* @return void
|
@@ -66,7 +66,7 @@
|
|
66 |
* Sets a provider for the control.
|
67 |
*
|
68 |
* @since 1.0.0
|
69 |
-
* @param
|
70 |
* @return void
|
71 |
*/
|
72 |
public function setProvider($provider)
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms427_Control') ) {
|
18 |
|
19 |
/**
|
20 |
* The base class for all controls.
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
abstract class Wbcr_FactoryForms427_Control extends Wbcr_FactoryForms427_FormElement {
|
25 |
|
26 |
/**
|
27 |
* Is this element a control?
|
43 |
* A provider that is used to get values.
|
44 |
*
|
45 |
* @since 1.0.0
|
46 |
+
* @var Wbcr_IFactoryForms427_ValueProvider
|
47 |
*/
|
48 |
protected $provider = null;
|
49 |
|
51 |
* Create a new instance of the control.
|
52 |
*
|
53 |
* @param mixed[] $options
|
54 |
+
* @param FactoryForms427_Form $form
|
55 |
* @param null $provider
|
56 |
* @since 1.0.0
|
57 |
* @return void
|
66 |
* Sets a provider for the control.
|
67 |
*
|
68 |
* @since 1.0.0
|
69 |
+
* @param IFactoryForms427_ValueProvider $provider
|
70 |
* @return void
|
71 |
*/
|
72 |
public function setProvider($provider)
|
libs/factory/forms/includes/custom-element.class.php
CHANGED
@@ -14,13 +14,13 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
/**
|
19 |
* The base class for all controls.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
abstract class
|
24 |
|
25 |
/**
|
26 |
* Is this element a custom form element?
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms427_CustomElement') ) {
|
18 |
/**
|
19 |
* The base class for all controls.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
abstract class Wbcr_FactoryForms427_CustomElement extends Wbcr_FactoryForms427_FormElement {
|
24 |
|
25 |
/**
|
26 |
* Is this element a custom form element?
|
libs/factory/forms/includes/form-element.class.php
CHANGED
@@ -14,7 +14,7 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* The base class for all form element (controls, holders).
|
@@ -23,7 +23,7 @@
|
|
23 |
*
|
24 |
* @since 1.0.0
|
25 |
*/
|
26 |
-
abstract class
|
27 |
|
28 |
/**
|
29 |
* A type of an elemnt.
|
@@ -37,7 +37,7 @@
|
|
37 |
* An html attribute builder.
|
38 |
*
|
39 |
* @since 1.0.0
|
40 |
-
* @var
|
41 |
*/
|
42 |
private $html_builder;
|
43 |
|
@@ -53,7 +53,7 @@
|
|
53 |
* A parent form.
|
54 |
*
|
55 |
* @since 1.0.0
|
56 |
-
* @var
|
57 |
*/
|
58 |
protected $form;
|
59 |
|
@@ -61,7 +61,7 @@
|
|
61 |
* A form layout.
|
62 |
*
|
63 |
* @since 1.0.0
|
64 |
-
* @var
|
65 |
*/
|
66 |
protected $layout;
|
67 |
|
@@ -94,7 +94,7 @@
|
|
94 |
*
|
95 |
* @since 1.0.0
|
96 |
* @param mixed[] $options A holder options.
|
97 |
-
* @param
|
98 |
*/
|
99 |
public function __construct($options, $form)
|
100 |
{
|
@@ -102,7 +102,7 @@
|
|
102 |
$this->form = $form;
|
103 |
$this->layout = $form->layout;
|
104 |
|
105 |
-
$this->html_builder = new
|
106 |
|
107 |
if( isset($this->options['cssClass']) ) {
|
108 |
$this->html_builder->addCssClass($this->options['cssClass']);
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms427_FormElement') ) {
|
18 |
|
19 |
/**
|
20 |
* The base class for all form element (controls, holders).
|
23 |
*
|
24 |
* @since 1.0.0
|
25 |
*/
|
26 |
+
abstract class Wbcr_FactoryForms427_FormElement {
|
27 |
|
28 |
/**
|
29 |
* A type of an elemnt.
|
37 |
* An html attribute builder.
|
38 |
*
|
39 |
* @since 1.0.0
|
40 |
+
* @var Wbcr_FactoryForms427_HtmlAttributeBuilder
|
41 |
*/
|
42 |
private $html_builder;
|
43 |
|
53 |
* A parent form.
|
54 |
*
|
55 |
* @since 1.0.0
|
56 |
+
* @var Wbcr_FactoryForms427_Form
|
57 |
*/
|
58 |
protected $form;
|
59 |
|
61 |
* A form layout.
|
62 |
*
|
63 |
* @since 1.0.0
|
64 |
+
* @var Wbcr_FactoryForms427_FormLayout
|
65 |
*/
|
66 |
protected $layout;
|
67 |
|
94 |
*
|
95 |
* @since 1.0.0
|
96 |
* @param mixed[] $options A holder options.
|
97 |
+
* @param Wbcr_FactoryForms427_Form $form A parent form.
|
98 |
*/
|
99 |
public function __construct($options, $form)
|
100 |
{
|
102 |
$this->form = $form;
|
103 |
$this->layout = $form->layout;
|
104 |
|
105 |
+
$this->html_builder = new Wbcr_FactoryForms427_HtmlAttributeBuilder();
|
106 |
|
107 |
if( isset($this->options['cssClass']) ) {
|
108 |
$this->html_builder->addCssClass($this->options['cssClass']);
|
libs/factory/forms/includes/form-layout.class.php
CHANGED
@@ -14,12 +14,12 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* The base class for all form layouts.
|
21 |
*/
|
22 |
-
abstract class
|
23 |
|
24 |
/**
|
25 |
* A form layout name.
|
@@ -42,7 +42,7 @@
|
|
42 |
*
|
43 |
* @since 1.0.0
|
44 |
* @param mixed[] $options A holder options.
|
45 |
-
* @param
|
46 |
*/
|
47 |
public function __construct($options, $form)
|
48 |
{
|
@@ -52,8 +52,8 @@
|
|
52 |
|
53 |
parent::__construct($options, $form);
|
54 |
|
55 |
-
$this->addCssClass('factory-forms-
|
56 |
-
$this->addCssClass('factory-forms-
|
57 |
}
|
58 |
|
59 |
/**
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms427_FormLayout') ) {
|
18 |
|
19 |
/**
|
20 |
* The base class for all form layouts.
|
21 |
*/
|
22 |
+
abstract class Wbcr_FactoryForms427_FormLayout extends Wbcr_FactoryForms427_Holder {
|
23 |
|
24 |
/**
|
25 |
* A form layout name.
|
42 |
*
|
43 |
* @since 1.0.0
|
44 |
* @param mixed[] $options A holder options.
|
45 |
+
* @param Wbcr_FactoryForms427_Form $form A parent form.
|
46 |
*/
|
47 |
public function __construct($options, $form)
|
48 |
{
|
52 |
|
53 |
parent::__construct($options, $form);
|
54 |
|
55 |
+
$this->addCssClass('factory-forms-427-' . $this->type);
|
56 |
+
$this->addCssClass('factory-forms-427-' . $this->name);
|
57 |
}
|
58 |
|
59 |
/**
|
libs/factory/forms/includes/form.class.php
CHANGED
@@ -15,16 +15,16 @@
|
|
15 |
}
|
16 |
|
17 |
// creating a license manager for each plugin created via the factory
|
18 |
-
add_action('
|
19 |
|
20 |
-
function
|
21 |
{
|
22 |
-
$plugin->forms = new
|
23 |
}
|
24 |
|
25 |
-
if( !class_exists('
|
26 |
|
27 |
-
class
|
28 |
|
29 |
// ----------------------------------------------------
|
30 |
// Static fields and methods
|
@@ -57,7 +57,7 @@
|
|
57 |
/**
|
58 |
* Registers a set of new controls.
|
59 |
*
|
60 |
-
* @see
|
61 |
*
|
62 |
* @since 1.0.0
|
63 |
* @return void
|
@@ -95,7 +95,7 @@
|
|
95 |
/**
|
96 |
* Registers a set of new holder controls.
|
97 |
*
|
98 |
-
* @see
|
99 |
*
|
100 |
* @since 1.0.0
|
101 |
* @return void
|
@@ -129,7 +129,7 @@
|
|
129 |
/**
|
130 |
* Registers a set of new custom form elements.
|
131 |
*
|
132 |
-
* @see
|
133 |
*
|
134 |
* @since 1.0.0
|
135 |
* @return void
|
@@ -180,11 +180,11 @@
|
|
180 |
public static $controls_registered = false;
|
181 |
}
|
182 |
}
|
183 |
-
if( !class_exists('
|
184 |
/**
|
185 |
* An abstraction for forms.
|
186 |
*/
|
187 |
-
class
|
188 |
|
189 |
// ----------------------------------------------------
|
190 |
// Object fields and methods
|
@@ -194,7 +194,7 @@
|
|
194 |
* A value provider of the form that is used to save and load values.
|
195 |
*
|
196 |
* @since 1.0.0
|
197 |
-
* @var
|
198 |
*/
|
199 |
private $provider;
|
200 |
|
@@ -245,7 +245,7 @@
|
|
245 |
* A current form layout used to render a form.
|
246 |
*
|
247 |
* @since 1.0.0
|
248 |
-
* @var
|
249 |
*/
|
250 |
public $layout;
|
251 |
|
@@ -261,20 +261,20 @@
|
|
261 |
*
|
262 |
* @since 1.0.0
|
263 |
* @param array $options
|
264 |
-
* @param
|
265 |
*/
|
266 |
-
public function __construct(array $options = array(),
|
267 |
{
|
268 |
// register controls once, when the first form is created
|
269 |
-
if( !
|
270 |
|
271 |
-
do_action('
|
272 |
|
273 |
//if( !empty($plugin) ) {
|
274 |
-
do_action('
|
275 |
//}
|
276 |
|
277 |
-
|
278 |
}
|
279 |
|
280 |
$this->scope = isset($options['scope']) ? $options['scope'] : null;
|
@@ -289,14 +289,14 @@
|
|
289 |
$this->form_layout = 'bootstrap-3';
|
290 |
}
|
291 |
|
292 |
-
|
293 |
}
|
294 |
|
295 |
/**
|
296 |
* Sets a provider for the control.
|
297 |
*
|
298 |
* @since 1.0.0
|
299 |
-
* @param
|
300 |
* @return void
|
301 |
*/
|
302 |
public function setProvider($provider)
|
@@ -332,14 +332,14 @@
|
|
332 |
*/
|
333 |
public function getItems()
|
334 |
{
|
335 |
-
return apply_filters('
|
336 |
}
|
337 |
|
338 |
/**
|
339 |
* Returns form controls (control objects).
|
340 |
*
|
341 |
* @since 1.0.0
|
342 |
-
* @return
|
343 |
*/
|
344 |
public function getControls()
|
345 |
{
|
@@ -355,7 +355,7 @@
|
|
355 |
* Builds a form items to the control objects ready to use.
|
356 |
*
|
357 |
* @param null $holder
|
358 |
-
* @return
|
359 |
*/
|
360 |
|
361 |
public function createControls($holder = null)
|
@@ -395,7 +395,7 @@
|
|
395 |
*
|
396 |
* @since 1.0.0
|
397 |
* @param array $item Item data.
|
398 |
-
* @return
|
399 |
*/
|
400 |
public function createElement($item)
|
401 |
{
|
@@ -417,7 +417,7 @@
|
|
417 |
*
|
418 |
* @since 1.0.0
|
419 |
* @param mixed[] $item Data of items.
|
420 |
-
* @return
|
421 |
*/
|
422 |
public function createElements($items = array())
|
423 |
{
|
@@ -433,7 +433,7 @@
|
|
433 |
*
|
434 |
* @since 1.0.0
|
435 |
* @param array $item Item data.
|
436 |
-
* @return
|
437 |
*/
|
438 |
public function createControl($item)
|
439 |
{
|
@@ -441,7 +441,7 @@
|
|
441 |
|
442 |
if( is_array($item) ) {
|
443 |
|
444 |
-
$control_data =
|
445 |
|
446 |
require_once($control_data['include']);
|
447 |
|
@@ -465,7 +465,7 @@
|
|
465 |
*
|
466 |
* @since 1.0.0
|
467 |
* @param array $item Item data.
|
468 |
-
* @return
|
469 |
*/
|
470 |
public function createHolder($item)
|
471 |
{
|
@@ -473,7 +473,7 @@
|
|
473 |
|
474 |
if( is_array($item) ) {
|
475 |
|
476 |
-
$holderData =
|
477 |
require_once($holderData['include']);
|
478 |
|
479 |
$object = new $holderData['class']($item, $this);
|
@@ -491,7 +491,7 @@
|
|
491 |
*
|
492 |
* @since 1.0.0
|
493 |
* @param mixed $item Item data.
|
494 |
-
* @return
|
495 |
*/
|
496 |
public function createCustomElement($item)
|
497 |
{
|
@@ -499,7 +499,7 @@
|
|
499 |
|
500 |
if( is_array($item) ) {
|
501 |
|
502 |
-
$data =
|
503 |
require_once($data['include']);
|
504 |
|
505 |
$options = $item;
|
@@ -523,12 +523,12 @@
|
|
523 |
public function html($options = array())
|
524 |
{
|
525 |
|
526 |
-
if( !isset(
|
527 |
die(sprintf('[ERROR] The form layout %s was not found.', $this->form_layout));
|
528 |
}
|
529 |
|
530 |
// include a render code
|
531 |
-
$layout_data =
|
532 |
require_once($layout_data['include']);
|
533 |
|
534 |
$this->connectAssets();
|
@@ -552,7 +552,7 @@
|
|
552 |
{
|
553 |
|
554 |
$this->connectAssetsForItems();
|
555 |
-
$layout_data =
|
556 |
|
557 |
if( $layout_data['name'] == 'default' ) {
|
558 |
if( isset($layout_data['style']) ) {
|
@@ -602,9 +602,9 @@
|
|
602 |
|
603 |
$haystack = array();
|
604 |
if( self::isControl($type) ) {
|
605 |
-
$haystack =
|
606 |
} elseif( self::isControlHolder($type) ) {
|
607 |
-
$haystack =
|
608 |
}
|
609 |
|
610 |
if( isset($haystack[$type]) ) {
|
@@ -660,7 +660,7 @@
|
|
660 |
*/
|
661 |
public static function isControl($item)
|
662 |
{
|
663 |
-
return isset(
|
664 |
}
|
665 |
|
666 |
/**
|
@@ -672,7 +672,7 @@
|
|
672 |
*/
|
673 |
public static function isControlHolder($item)
|
674 |
{
|
675 |
-
return isset(
|
676 |
}
|
677 |
|
678 |
/**
|
@@ -684,7 +684,7 @@
|
|
684 |
*/
|
685 |
public static function isCustomElement($item)
|
686 |
{
|
687 |
-
return isset(
|
688 |
}
|
689 |
}
|
690 |
}
|
15 |
}
|
16 |
|
17 |
// creating a license manager for each plugin created via the factory
|
18 |
+
add_action('wbcr_factory_forms_427_plugin_created', 'wbcr_factory_forms_427_plugin_created');
|
19 |
|
20 |
+
function wbcr_factory_forms_427_plugin_created($plugin)
|
21 |
{
|
22 |
+
$plugin->forms = new Wbcr_FactoryForms427_Manager($plugin);
|
23 |
}
|
24 |
|
25 |
+
if( !class_exists('Wbcr_FactoryForms427_Manager') ) {
|
26 |
|
27 |
+
class Wbcr_FactoryForms427_Manager {
|
28 |
|
29 |
// ----------------------------------------------------
|
30 |
// Static fields and methods
|
57 |
/**
|
58 |
* Registers a set of new controls.
|
59 |
*
|
60 |
+
* @see FactoryForms427_Form::registerControl()
|
61 |
*
|
62 |
* @since 1.0.0
|
63 |
* @return void
|
95 |
/**
|
96 |
* Registers a set of new holder controls.
|
97 |
*
|
98 |
+
* @see FactoryForms427_Form::registerHolder()
|
99 |
*
|
100 |
* @since 1.0.0
|
101 |
* @return void
|
129 |
/**
|
130 |
* Registers a set of new custom form elements.
|
131 |
*
|
132 |
+
* @see FactoryForms427_Form::registerCustomElement()
|
133 |
*
|
134 |
* @since 1.0.0
|
135 |
* @return void
|
180 |
public static $controls_registered = false;
|
181 |
}
|
182 |
}
|
183 |
+
if( !class_exists('Wbcr_FactoryForms427_Form') ) {
|
184 |
/**
|
185 |
* An abstraction for forms.
|
186 |
*/
|
187 |
+
class Wbcr_FactoryForms427_Form {
|
188 |
|
189 |
// ----------------------------------------------------
|
190 |
// Object fields and methods
|
194 |
* A value provider of the form that is used to save and load values.
|
195 |
*
|
196 |
* @since 1.0.0
|
197 |
+
* @var Wbcr_IFactoryForms427_ValueProvider
|
198 |
*/
|
199 |
private $provider;
|
200 |
|
245 |
* A current form layout used to render a form.
|
246 |
*
|
247 |
* @since 1.0.0
|
248 |
+
* @var Wbcr_FactoryForms427_FormLayout
|
249 |
*/
|
250 |
public $layout;
|
251 |
|
261 |
*
|
262 |
* @since 1.0.0
|
263 |
* @param array $options
|
264 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
265 |
*/
|
266 |
+
public function __construct(array $options = array(), Wbcr_Factory429_Plugin $plugin)
|
267 |
{
|
268 |
// register controls once, when the first form is created
|
269 |
+
if( !Wbcr_FactoryForms427_Manager::$controls_registered ) {
|
270 |
|
271 |
+
do_action('wbcr_factory_forms_427_register_controls', $plugin);
|
272 |
|
273 |
//if( !empty($plugin) ) {
|
274 |
+
do_action('wbcr_factory_forms_427_register_controls_' . $plugin->getPluginName(), $plugin);
|
275 |
//}
|
276 |
|
277 |
+
Wbcr_FactoryForms427_Manager::$controls_registered = true;
|
278 |
}
|
279 |
|
280 |
$this->scope = isset($options['scope']) ? $options['scope'] : null;
|
289 |
$this->form_layout = 'bootstrap-3';
|
290 |
}
|
291 |
|
292 |
+
Wbcr_FactoryForms427_Manager::$temper = 'flat';
|
293 |
}
|
294 |
|
295 |
/**
|
296 |
* Sets a provider for the control.
|
297 |
*
|
298 |
* @since 1.0.0
|
299 |
+
* @param Wbcr_IFactoryForms427_ValueProvider $provider
|
300 |
* @return void
|
301 |
*/
|
302 |
public function setProvider($provider)
|
332 |
*/
|
333 |
public function getItems()
|
334 |
{
|
335 |
+
return apply_filters('wbcr_factory_429_form_items', $this->items, $this->name);
|
336 |
}
|
337 |
|
338 |
/**
|
339 |
* Returns form controls (control objects).
|
340 |
*
|
341 |
* @since 1.0.0
|
342 |
+
* @return Wbcr_FactoryForms427_Control[]
|
343 |
*/
|
344 |
public function getControls()
|
345 |
{
|
355 |
* Builds a form items to the control objects ready to use.
|
356 |
*
|
357 |
* @param null $holder
|
358 |
+
* @return Wbcr_FactoryForms427_Control[]
|
359 |
*/
|
360 |
|
361 |
public function createControls($holder = null)
|
395 |
*
|
396 |
* @since 1.0.0
|
397 |
* @param array $item Item data.
|
398 |
+
* @return Wbcr_FactoryForms427_FormElement|null A form element.
|
399 |
*/
|
400 |
public function createElement($item)
|
401 |
{
|
417 |
*
|
418 |
* @since 1.0.0
|
419 |
* @param mixed[] $item Data of items.
|
420 |
+
* @return Wbcr_FactoryForms427_FormElement[] Created elements.
|
421 |
*/
|
422 |
public function createElements($items = array())
|
423 |
{
|
433 |
*
|
434 |
* @since 1.0.0
|
435 |
* @param array $item Item data.
|
436 |
+
* @return Wbcr_FactoryForms427_Control A control object.
|
437 |
*/
|
438 |
public function createControl($item)
|
439 |
{
|
441 |
|
442 |
if( is_array($item) ) {
|
443 |
|
444 |
+
$control_data = Wbcr_FactoryForms427_Manager::$registered_controls[$item['type']];
|
445 |
|
446 |
require_once($control_data['include']);
|
447 |
|
465 |
*
|
466 |
* @since 1.0.0
|
467 |
* @param array $item Item data.
|
468 |
+
* @return Wbcr_FactoryForms427_Holder A control holder object.
|
469 |
*/
|
470 |
public function createHolder($item)
|
471 |
{
|
473 |
|
474 |
if( is_array($item) ) {
|
475 |
|
476 |
+
$holderData = Wbcr_FactoryForms427_Manager::$registered_holders[$item['type']];
|
477 |
require_once($holderData['include']);
|
478 |
|
479 |
$object = new $holderData['class']($item, $this);
|
491 |
*
|
492 |
* @since 1.0.0
|
493 |
* @param mixed $item Item data.
|
494 |
+
* @return Wbcr_FactoryForms427_FormElement A custom form element object.
|
495 |
*/
|
496 |
public function createCustomElement($item)
|
497 |
{
|
499 |
|
500 |
if( is_array($item) ) {
|
501 |
|
502 |
+
$data = Wbcr_FactoryForms427_Manager::$registered_custom_elements[$item['type']];
|
503 |
require_once($data['include']);
|
504 |
|
505 |
$options = $item;
|
523 |
public function html($options = array())
|
524 |
{
|
525 |
|
526 |
+
if( !isset(Wbcr_FactoryForms427_Manager::$form_layouts[$this->form_layout]) ) {
|
527 |
die(sprintf('[ERROR] The form layout %s was not found.', $this->form_layout));
|
528 |
}
|
529 |
|
530 |
// include a render code
|
531 |
+
$layout_data = Wbcr_FactoryForms427_Manager::$form_layouts[$this->form_layout];
|
532 |
require_once($layout_data['include']);
|
533 |
|
534 |
$this->connectAssets();
|
552 |
{
|
553 |
|
554 |
$this->connectAssetsForItems();
|
555 |
+
$layout_data = Wbcr_FactoryForms427_Manager::$form_layouts[$this->form_layout];
|
556 |
|
557 |
if( $layout_data['name'] == 'default' ) {
|
558 |
if( isset($layout_data['style']) ) {
|
602 |
|
603 |
$haystack = array();
|
604 |
if( self::isControl($type) ) {
|
605 |
+
$haystack = Wbcr_FactoryForms427_Manager::$registered_controls;
|
606 |
} elseif( self::isControlHolder($type) ) {
|
607 |
+
$haystack = Wbcr_FactoryForms427_Manager::$registered_holders;
|
608 |
}
|
609 |
|
610 |
if( isset($haystack[$type]) ) {
|
660 |
*/
|
661 |
public static function isControl($item)
|
662 |
{
|
663 |
+
return isset(Wbcr_FactoryForms427_Manager::$registered_controls[$item['type']]);
|
664 |
}
|
665 |
|
666 |
/**
|
672 |
*/
|
673 |
public static function isControlHolder($item)
|
674 |
{
|
675 |
+
return isset(Wbcr_FactoryForms427_Manager::$registered_holders[$item['type']]);
|
676 |
}
|
677 |
|
678 |
/**
|
684 |
*/
|
685 |
public static function isCustomElement($item)
|
686 |
{
|
687 |
+
return isset(Wbcr_FactoryForms427_Manager::$registered_custom_elements[$item['type']]);
|
688 |
}
|
689 |
}
|
690 |
}
|
libs/factory/forms/includes/holder.class.php
CHANGED
@@ -14,20 +14,20 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* The base class for control holders.
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
-
abstract class
|
25 |
|
26 |
/**
|
27 |
* Holder Elements.
|
28 |
*
|
29 |
* @since 1.0.0
|
30 |
-
* @var
|
31 |
*/
|
32 |
protected $elements = array();
|
33 |
|
@@ -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 |
{
|
@@ -56,7 +56,7 @@
|
|
56 |
* Returns holder elements.
|
57 |
*
|
58 |
* @since 1.0.0
|
59 |
-
* @return
|
60 |
*/
|
61 |
public function getElements()
|
62 |
{
|
@@ -84,7 +84,7 @@
|
|
84 |
$is_first_item = false;
|
85 |
}
|
86 |
|
87 |
-
do_action('
|
88 |
|
89 |
// if a current item is a control holder
|
90 |
if( $element->is_holder ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms427_Holder') ) {
|
18 |
|
19 |
/**
|
20 |
* The base class for control holders.
|
21 |
*
|
22 |
* @since 1.0.0
|
23 |
*/
|
24 |
+
abstract class Wbcr_FactoryForms427_Holder extends Wbcr_FactoryForms427_FormElement {
|
25 |
|
26 |
/**
|
27 |
* Holder Elements.
|
28 |
*
|
29 |
* @since 1.0.0
|
30 |
+
* @var Wbcr_FactoryForms427_Control[]
|
31 |
*/
|
32 |
protected $elements = array();
|
33 |
|
44 |
*
|
45 |
* @since 1.0.0
|
46 |
* @param mixed[] $options A holder options.
|
47 |
+
* @param Wbcr_FactoryForms427_Form $form A parent form.
|
48 |
*/
|
49 |
public function __construct($options, $form)
|
50 |
{
|
56 |
* Returns holder elements.
|
57 |
*
|
58 |
* @since 1.0.0
|
59 |
+
* @return Wbcr_FactoryForms427_Control[].
|
60 |
*/
|
61 |
public function getElements()
|
62 |
{
|
84 |
$is_first_item = false;
|
85 |
}
|
86 |
|
87 |
+
do_action('wbcr_factory_429_form_before_element_' . $element->getOption('name'));
|
88 |
|
89 |
// if a current item is a control holder
|
90 |
if( $element->is_holder ) {
|
libs/factory/forms/includes/html-builder.class.php
CHANGED
@@ -14,13 +14,13 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
/**
|
19 |
* Html Attribute Builder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
class
|
24 |
|
25 |
/**
|
26 |
* An array to store css classes.
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms427_HtmlAttributeBuilder') ) {
|
18 |
/**
|
19 |
* Html Attribute Builder
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
class Wbcr_FactoryForms427_HtmlAttributeBuilder {
|
24 |
|
25 |
/**
|
26 |
* An array to store css classes.
|
libs/factory/forms/includes/providers/meta-value-provider.class.php
CHANGED
@@ -14,7 +14,7 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
|
19 |
/**
|
20 |
* Factory Meta Value Provider
|
@@ -24,7 +24,7 @@
|
|
24 |
*
|
25 |
* @since 1.0.0
|
26 |
*/
|
27 |
-
class
|
28 |
|
29 |
|
30 |
public $scope;
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms427_OptionsValueProvider') ) {
|
18 |
|
19 |
/**
|
20 |
* Factory Meta Value Provider
|
24 |
*
|
25 |
* @since 1.0.0
|
26 |
*/
|
27 |
+
class Wbcr_FactoryForms427_MetaValueProvider implements Wbcr_IFactoryForms427_ValueProvider {
|
28 |
|
29 |
|
30 |
public $scope;
|
libs/factory/forms/includes/providers/options-value-provider.class.php
CHANGED
@@ -13,7 +13,7 @@
|
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
-
if( !class_exists('
|
17 |
|
18 |
/**
|
19 |
* Factory Options Value Provider
|
@@ -22,7 +22,7 @@
|
|
22 |
*
|
23 |
* @since 1.0.0
|
24 |
*/
|
25 |
-
class
|
26 |
|
27 |
/**
|
28 |
* A prefix that will be added to all option names.
|
@@ -43,7 +43,7 @@
|
|
43 |
/**
|
44 |
* Creates a new instance of an options value provider.
|
45 |
*/
|
46 |
-
public function __construct(
|
47 |
{
|
48 |
$this->plugin = $plugin;
|
49 |
}
|
13 |
exit;
|
14 |
}
|
15 |
|
16 |
+
if( !class_exists('Wbcr_FactoryForms427_OptionsValueProvider') ) {
|
17 |
|
18 |
/**
|
19 |
* Factory Options Value Provider
|
22 |
*
|
23 |
* @since 1.0.0
|
24 |
*/
|
25 |
+
class Wbcr_FactoryForms427_OptionsValueProvider implements Wbcr_IFactoryForms427_ValueProvider {
|
26 |
|
27 |
/**
|
28 |
* A prefix that will be added to all option names.
|
43 |
/**
|
44 |
* Creates a new instance of an options value provider.
|
45 |
*/
|
46 |
+
public function __construct(Wbcr_Factory429_Plugin $plugin)
|
47 |
{
|
48 |
$this->plugin = $plugin;
|
49 |
}
|
libs/factory/forms/includes/providers/value-provider.interface.php
CHANGED
@@ -14,13 +14,13 @@
|
|
14 |
if( !defined('ABSPATH') ) {
|
15 |
exit;
|
16 |
}
|
17 |
-
if( !class_exists('
|
18 |
/**
|
19 |
* The interface for all value provides.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
-
interface
|
24 |
|
25 |
/**
|
26 |
* Inits a form a provider to get data from a storage.
|
14 |
if( !defined('ABSPATH') ) {
|
15 |
exit;
|
16 |
}
|
17 |
+
if( !class_exists('Wbcr_IFactoryForms427_ValueProvider') ) {
|
18 |
/**
|
19 |
* The interface for all value provides.
|
20 |
*
|
21 |
* @since 1.0.0
|
22 |
*/
|
23 |
+
interface Wbcr_IFactoryForms427_ValueProvider {
|
24 |
|
25 |
/**
|
26 |
* Inits a form a provider to get data from a storage.
|
libs/factory/forms/langs/{wbcr_factory_forms_418-ru_RU.mo → wbcr_factory_forms_427-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/forms/langs/{wbcr_factory_forms_418-ru_RU.po → wbcr_factory_forms_427-ru_RU.po}
RENAMED
File without changes
|
libs/factory/forms/layouts/bootstrap-3/bootstrap-3.php
CHANGED
@@ -14,11 +14,11 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if( !class_exists('
|
18 |
/**
|
19 |
* A form layout based on Twitter Bootstrap 3
|
20 |
*/
|
21 |
-
class
|
22 |
|
23 |
public $name = 'default';
|
24 |
|
@@ -27,7 +27,7 @@
|
|
27 |
*
|
28 |
* @since 1.0.0
|
29 |
* @param array $options A holder options.
|
30 |
-
* @param
|
31 |
*/
|
32 |
public function __construct($options, $form)
|
33 |
{
|
@@ -68,7 +68,7 @@
|
|
68 |
}
|
69 |
|
70 |
/**
|
71 |
-
* @param
|
72 |
*/
|
73 |
public function beforeControl($control)
|
74 |
{
|
@@ -116,7 +116,7 @@
|
|
116 |
}
|
117 |
|
118 |
/**
|
119 |
-
* @param
|
120 |
*/
|
121 |
public function afterControl($control)
|
122 |
{
|
@@ -168,7 +168,7 @@
|
|
168 |
}
|
169 |
|
170 |
/**
|
171 |
-
* @param
|
172 |
* @param int $index
|
173 |
* @param int $total
|
174 |
*/
|
@@ -193,7 +193,7 @@
|
|
193 |
}
|
194 |
|
195 |
/**
|
196 |
-
* @param
|
197 |
* @param int $index
|
198 |
* @param int $total
|
199 |
*/
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryForms427_Bootstrap3FormLayout') ) {
|
18 |
/**
|
19 |
* A form layout based on Twitter Bootstrap 3
|
20 |
*/
|
21 |
+
class Wbcr_FactoryForms427_Bootstrap3FormLayout extends Wbcr_FactoryForms427_FormLayout {
|
22 |
|
23 |
public $name = 'default';
|
24 |
|
27 |
*
|
28 |
* @since 1.0.0
|
29 |
* @param array $options A holder options.
|
30 |
+
* @param Wbcr_FactoryForms427_Form $form A parent form.
|
31 |
*/
|
32 |
public function __construct($options, $form)
|
33 |
{
|
68 |
}
|
69 |
|
70 |
/**
|
71 |
+
* @param Wbcr_FactoryForms427_Control $control
|
72 |
*/
|
73 |
public function beforeControl($control)
|
74 |
{
|
116 |
}
|
117 |
|
118 |
/**
|
119 |
+
* @param Wbcr_FactoryForms427_Control $control
|
120 |
*/
|
121 |
public function afterControl($control)
|
122 |
{
|
168 |
}
|
169 |
|
170 |
/**
|
171 |
+
* @param Wbcr_FactoryForms427_Control $control
|
172 |
* @param int $index
|
173 |
* @param int $total
|
174 |
*/
|
193 |
}
|
194 |
|
195 |
/**
|
196 |
+
* @param Wbcr_FactoryForms427_Control $control
|
197 |
* @param int $index
|
198 |
* @param int $total
|
199 |
*/
|
libs/factory/pages/boot.php
CHANGED
@@ -10,34 +10,34 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
// module provides function only for the admin area
|
18 |
-
if
|
19 |
return;
|
20 |
}
|
21 |
|
22 |
-
if
|
23 |
return;
|
24 |
}
|
25 |
|
26 |
-
define(
|
27 |
|
28 |
-
define(
|
29 |
|
30 |
-
define(
|
31 |
-
define(
|
32 |
|
33 |
-
if
|
34 |
-
define(
|
35 |
}
|
36 |
|
37 |
-
load_plugin_textdomain(
|
38 |
|
39 |
-
require(
|
40 |
-
require(
|
41 |
-
require(
|
42 |
-
require(
|
43 |
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
// module provides function only for the admin area
|
18 |
+
if( !is_admin() ) {
|
19 |
return;
|
20 |
}
|
21 |
|
22 |
+
if( defined('FACTORY_PAGES_429_LOADED') ) {
|
23 |
return;
|
24 |
}
|
25 |
|
26 |
+
define('FACTORY_PAGES_429_LOADED', true);
|
27 |
|
28 |
+
define('FACTORY_PAGES_429_VERSION', '4.2.9');
|
29 |
|
30 |
+
define('FACTORY_PAGES_429_DIR', dirname(__FILE__));
|
31 |
+
define('FACTORY_PAGES_429_URL', plugins_url(null, __FILE__));
|
32 |
|
33 |
+
if( !defined('FACTORY_FLAT_ADMIN') ) {
|
34 |
+
define('FACTORY_FLAT_ADMIN', true);
|
35 |
}
|
36 |
|
37 |
+
load_plugin_textdomain('wbcr_factory_pages_429', false, dirname(plugin_basename(__FILE__)) . '/langs');
|
38 |
|
39 |
+
require(FACTORY_PAGES_429_DIR . '/pages.php');
|
40 |
+
require(FACTORY_PAGES_429_DIR . '/includes/page.class.php');
|
41 |
+
require(FACTORY_PAGES_429_DIR . '/includes/admin-page.class.php');
|
42 |
+
require(FACTORY_PAGES_429_DIR . '/templates/impressive-page.class.php');
|
43 |
|
libs/factory/pages/includes/admin-page.class.php
CHANGED
@@ -10,13 +10,13 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if
|
18 |
|
19 |
-
class
|
20 |
|
21 |
/**
|
22 |
* Visible page title.
|
@@ -209,25 +209,26 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
209 |
*/
|
210 |
public $add_link_to_plugin_actions = false;
|
211 |
|
212 |
-
public function __construct(
|
213 |
-
|
|
|
214 |
$this->configure();
|
215 |
|
216 |
-
$this->id = empty(
|
217 |
|
218 |
-
if
|
219 |
-
if
|
220 |
// plugin settings link
|
221 |
-
add_filter(
|
222 |
$this,
|
223 |
'addLinkToPluginActions'
|
224 |
-
]
|
225 |
} else {
|
226 |
// plugin settings link
|
227 |
-
add_filter(
|
228 |
$this,
|
229 |
'addLinkToPluginActions'
|
230 |
-
]
|
231 |
}
|
232 |
}
|
233 |
}
|
@@ -235,7 +236,8 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
235 |
/**
|
236 |
* May be used to configure the page before uts usage.
|
237 |
*/
|
238 |
-
public function configure()
|
|
|
239 |
}
|
240 |
|
241 |
/**
|
@@ -245,9 +247,10 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
245 |
*
|
246 |
* @return void
|
247 |
*/
|
248 |
-
public function actionAdminBootstrapScripts(
|
249 |
-
|
250 |
-
$this->
|
|
|
251 |
}
|
252 |
|
253 |
/**
|
@@ -257,7 +260,8 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
257 |
*
|
258 |
* @return void
|
259 |
*/
|
260 |
-
public function actionAdminScripts(
|
|
|
261 |
$this->scripts->connect();
|
262 |
$this->styles->connect();
|
263 |
}
|
@@ -265,7 +269,8 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
265 |
/**
|
266 |
* @return string
|
267 |
*/
|
268 |
-
public function getMenuScope()
|
|
|
269 |
return $this->plugin->getPluginName();
|
270 |
}
|
271 |
|
@@ -273,26 +278,28 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
273 |
/**
|
274 |
* @return string
|
275 |
*/
|
276 |
-
public function getMenuTitle()
|
277 |
-
|
|
|
278 |
|
279 |
/**
|
280 |
* @since 4.0.9 - добавлен
|
281 |
*/
|
282 |
-
return apply_filters(
|
283 |
}
|
284 |
|
285 |
/**
|
286 |
* @return string
|
287 |
*/
|
288 |
-
public function getPageTitle()
|
|
|
289 |
|
290 |
-
$page_title =
|
291 |
|
292 |
/**
|
293 |
* @since 4.0.9 - добавлен
|
294 |
*/
|
295 |
-
return apply_filters(
|
296 |
}
|
297 |
|
298 |
/**
|
@@ -300,10 +307,11 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
300 |
*
|
301 |
* @return mixed|string
|
302 |
*/
|
303 |
-
public function getResultId(
|
304 |
-
|
|
|
305 |
|
306 |
-
if
|
307 |
return $id . '-' . $this->getMenuScope();
|
308 |
}
|
309 |
|
@@ -313,118 +321,120 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
313 |
/**
|
314 |
* Registers admin page for the admin menu.
|
315 |
*/
|
316 |
-
public function connect()
|
|
|
317 |
$result_id = $this->getResultId();
|
318 |
|
319 |
-
$this->hidden = apply_filters(
|
320 |
|
321 |
-
if
|
322 |
return;
|
323 |
}
|
324 |
|
325 |
-
$this->internal = apply_filters(
|
326 |
|
327 |
-
if
|
328 |
-
$this->menu_target
|
329 |
$this->menu_post_type = null;
|
330 |
}
|
331 |
|
332 |
// makes redirect to the page
|
333 |
-
$controller = $this->request->get(
|
334 |
|
335 |
-
if
|
336 |
-
$plugin = $this->request->get(
|
337 |
|
338 |
-
if
|
339 |
|
340 |
-
$action
|
341 |
-
$is_ajax = $this->request->get(
|
342 |
|
343 |
-
if
|
344 |
-
$this->executeByName(
|
345 |
exit;
|
346 |
} else {
|
347 |
|
348 |
-
$params = (array)
|
349 |
|
350 |
-
unset(
|
351 |
-
unset(
|
352 |
-
unset(
|
353 |
|
354 |
-
$this->redirectToAction(
|
355 |
}
|
356 |
}
|
357 |
}
|
358 |
|
359 |
// calls scripts and styles, adds pages to menu
|
360 |
-
if
|
361 |
-
$this->assets(
|
362 |
|
363 |
-
if
|
364 |
-
add_action(
|
365 |
$this,
|
366 |
'actionAdminBootstrapScripts'
|
367 |
-
]
|
368 |
}
|
369 |
|
370 |
// includes styles and scripts
|
371 |
-
if
|
372 |
-
add_action(
|
373 |
}
|
374 |
}
|
375 |
|
376 |
// if this page for a custom menu page
|
377 |
-
if
|
378 |
$this->menu_target = 'edit.php?post_type=' . $this->menu_post_type;
|
379 |
|
380 |
-
if
|
381 |
$this->capabilitiy = 'edit_' . $this->menu_post_type;
|
382 |
}
|
383 |
}
|
384 |
|
385 |
// sets default capabilities
|
386 |
-
if
|
387 |
$this->capabilitiy = 'manage_options';
|
388 |
}
|
389 |
|
390 |
// submenu
|
391 |
-
if
|
392 |
-
add_submenu_page(
|
393 |
$this,
|
394 |
'show'
|
395 |
-
]
|
396 |
// global menu
|
397 |
} else {
|
398 |
-
add_menu_page(
|
399 |
$this,
|
400 |
'show'
|
401 |
-
], null, $this->menu_position
|
402 |
|
403 |
-
if
|
404 |
|
405 |
-
add_submenu_page(
|
406 |
$this,
|
407 |
'show'
|
408 |
-
]
|
409 |
}
|
410 |
|
411 |
-
add_action(
|
412 |
}
|
413 |
|
414 |
// executes an action
|
415 |
-
if
|
416 |
ob_start();
|
417 |
-
$action = $this->request->get(
|
418 |
-
$this->executeByName(
|
419 |
$this->result = ob_get_contents();
|
420 |
ob_end_clean();
|
421 |
}
|
422 |
}
|
423 |
|
424 |
-
protected function current()
|
|
|
425 |
$result_id = $this->getResultId();
|
426 |
|
427 |
-
if
|
428 |
return true;
|
429 |
}
|
430 |
|
@@ -433,33 +443,36 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
433 |
|
434 |
/**
|
435 |
* @param string $action
|
436 |
-
* @param array
|
437 |
*/
|
438 |
-
public function redirectToAction(
|
|
|
439 |
|
440 |
-
wp_safe_redirect(
|
441 |
exit;
|
442 |
}
|
443 |
|
444 |
/**
|
445 |
* @param string $action
|
446 |
-
* @param array
|
447 |
*/
|
448 |
-
public function actionUrl(
|
449 |
-
|
|
|
450 |
}
|
451 |
|
452 |
/**
|
453 |
-
* @param null
|
454 |
* @param array $query_args
|
455 |
*
|
456 |
* @return string
|
457 |
*/
|
458 |
-
public function getActionUrl(
|
459 |
-
|
|
|
460 |
|
461 |
-
if
|
462 |
-
$url = add_query_arg(
|
463 |
}
|
464 |
|
465 |
return $url;
|
@@ -468,77 +481,78 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
468 |
/**
|
469 |
* @return string
|
470 |
*/
|
471 |
-
public function getBaseUrl(
|
472 |
-
|
|
|
473 |
|
474 |
-
if
|
475 |
-
$url = $this->network ? network_admin_url(
|
476 |
-
|
477 |
-
return add_query_arg( array_merge( [ 'page' => $result_id ], $query_args ), $url );
|
478 |
-
} else {
|
479 |
-
$url = $this->network ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' );
|
480 |
|
481 |
-
return add_query_arg(
|
482 |
}
|
|
|
|
|
|
|
|
|
483 |
}
|
484 |
|
485 |
-
public function actionAdminHead()
|
|
|
486 |
$result_id = $this->getResultId();
|
487 |
|
488 |
-
if
|
489 |
|
490 |
-
if
|
491 |
$icon_code = $this->menu_icon;
|
492 |
} else {
|
493 |
-
$
|
494 |
-
$icon_url = str_replace( '~/', $plugin_path_info->plugin_url . '/', $this->menu_icon );
|
495 |
}
|
496 |
}
|
497 |
|
498 |
global $wp_version;
|
499 |
|
500 |
-
if
|
501 |
?>
|
502 |
-
|
503 |
-
|
504 |
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
|
509 |
-
|
510 |
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
<?php } else { ?>
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
<?php
|
533 |
}
|
534 |
|
535 |
-
if
|
536 |
?>
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
<?php
|
543 |
}
|
544 |
}
|
@@ -551,11 +565,12 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_AdminPage' ) ) {
|
|
551 |
*
|
552 |
* @return mixed
|
553 |
*/
|
554 |
-
function addLinkToPluginActions(
|
555 |
-
|
|
|
556 |
|
557 |
$settings_link = '<a href="' . $this->getBaseUrl() . '">' . $link_title . '</a>';
|
558 |
-
array_unshift(
|
559 |
|
560 |
return $links;
|
561 |
}
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryPages429_AdminPage') ) {
|
18 |
|
19 |
+
class Wbcr_FactoryPages429_AdminPage extends Wbcr_FactoryPages429_Page {
|
20 |
|
21 |
/**
|
22 |
* Visible page title.
|
209 |
*/
|
210 |
public $add_link_to_plugin_actions = false;
|
211 |
|
212 |
+
public function __construct(Wbcr_Factory429_Plugin $plugin)
|
213 |
+
{
|
214 |
+
parent::__construct($plugin);
|
215 |
$this->configure();
|
216 |
|
217 |
+
$this->id = empty($this->id) ? str_replace('adminpage', '', strtolower(get_class($this))) : $this->id;
|
218 |
|
219 |
+
if( $this->add_link_to_plugin_actions ) {
|
220 |
+
if( $plugin->isNetworkActive() ) {
|
221 |
// plugin settings link
|
222 |
+
add_filter("network_admin_plugin_action_links_" . $this->plugin->get_paths()->basename, [
|
223 |
$this,
|
224 |
'addLinkToPluginActions'
|
225 |
+
]);
|
226 |
} else {
|
227 |
// plugin settings link
|
228 |
+
add_filter("plugin_action_links_" . $this->plugin->get_paths()->basename, [
|
229 |
$this,
|
230 |
'addLinkToPluginActions'
|
231 |
+
]);
|
232 |
}
|
233 |
}
|
234 |
}
|
236 |
/**
|
237 |
* May be used to configure the page before uts usage.
|
238 |
*/
|
239 |
+
public function configure()
|
240 |
+
{
|
241 |
}
|
242 |
|
243 |
/**
|
247 |
*
|
248 |
* @return void
|
249 |
*/
|
250 |
+
public function actionAdminBootstrapScripts($hook)
|
251 |
+
{
|
252 |
+
$this->scripts->connect('bootstrap');
|
253 |
+
$this->styles->connect('bootstrap');
|
254 |
}
|
255 |
|
256 |
/**
|
260 |
*
|
261 |
* @return void
|
262 |
*/
|
263 |
+
public function actionAdminScripts($hook)
|
264 |
+
{
|
265 |
$this->scripts->connect();
|
266 |
$this->styles->connect();
|
267 |
}
|
269 |
/**
|
270 |
* @return string
|
271 |
*/
|
272 |
+
public function getMenuScope()
|
273 |
+
{
|
274 |
return $this->plugin->getPluginName();
|
275 |
}
|
276 |
|
278 |
/**
|
279 |
* @return string
|
280 |
*/
|
281 |
+
public function getMenuTitle()
|
282 |
+
{
|
283 |
+
$menu_title = !$this->menu_title ? $this->page_title : $this->menu_title;
|
284 |
|
285 |
/**
|
286 |
* @since 4.0.9 - добавлен
|
287 |
*/
|
288 |
+
return apply_filters('wbcr/factory/pages/impressive/menu_title', $menu_title, $this->plugin->getPluginName(), $this->id);
|
289 |
}
|
290 |
|
291 |
/**
|
292 |
* @return string
|
293 |
*/
|
294 |
+
public function getPageTitle()
|
295 |
+
{
|
296 |
|
297 |
+
$page_title = !$this->page_title ? $this->getMenuTitle() : $this->page_title;
|
298 |
|
299 |
/**
|
300 |
* @since 4.0.9 - добавлен
|
301 |
*/
|
302 |
+
return apply_filters('wbcr/factory/pages/impressive/page_title', $page_title, $this->plugin->getPluginName(), $this->id);
|
303 |
}
|
304 |
|
305 |
/**
|
307 |
*
|
308 |
* @return mixed|string
|
309 |
*/
|
310 |
+
public function getResultId($id = null)
|
311 |
+
{
|
312 |
+
$id = !empty($id) ? $id : $this->id;
|
313 |
|
314 |
+
if( $this->plugin ) {
|
315 |
return $id . '-' . $this->getMenuScope();
|
316 |
}
|
317 |
|
321 |
/**
|
322 |
* Registers admin page for the admin menu.
|
323 |
*/
|
324 |
+
public function connect()
|
325 |
+
{
|
326 |
$result_id = $this->getResultId();
|
327 |
|
328 |
+
$this->hidden = apply_filters('wbcr_factory_429_page_is_hidden_' . $result_id, $this->hidden);
|
329 |
|
330 |
+
if( $this->hidden ) {
|
331 |
return;
|
332 |
}
|
333 |
|
334 |
+
$this->internal = apply_filters('wbcr_factory_429_page_is_internal_' . $result_id, $this->internal);
|
335 |
|
336 |
+
if( $this->internal ) {
|
337 |
+
$this->menu_target = null;
|
338 |
$this->menu_post_type = null;
|
339 |
}
|
340 |
|
341 |
// makes redirect to the page
|
342 |
+
$controller = $this->request->get('fy_page', null, true);
|
343 |
|
344 |
+
if( $controller && $controller == $this->id ) {
|
345 |
+
$plugin = $this->request->get('fy_plugin', null, true);
|
346 |
|
347 |
+
if( $this->plugin->getPluginName() == $plugin ) {
|
348 |
|
349 |
+
$action = $this->request->get('fy_action', 'index', true);
|
350 |
+
$is_ajax = $this->request->get('fy_ajax', false);
|
351 |
|
352 |
+
if( $is_ajax ) {
|
353 |
+
$this->executeByName($action);
|
354 |
exit;
|
355 |
} else {
|
356 |
|
357 |
+
$params = (array)$this->request->getAll(true);
|
358 |
|
359 |
+
unset($params['fy_page']);
|
360 |
+
unset($params['fy_plugin']);
|
361 |
+
unset($params['fy_action']);
|
362 |
|
363 |
+
$this->redirectToAction($action, $params);
|
364 |
}
|
365 |
}
|
366 |
}
|
367 |
|
368 |
// calls scripts and styles, adds pages to menu
|
369 |
+
if( $this->request->get('page', 'none') == $result_id ) {
|
370 |
+
$this->assets($this->scripts, $this->styles);
|
371 |
|
372 |
+
if( !$this->scripts->isEmpty('bootstrap') || !$this->styles->isEmpty('bootstrap') ) {
|
373 |
+
add_action('wbcr_factory_429_bootstrap_enqueue_scripts_' . $this->plugin->getPluginName(), [
|
374 |
$this,
|
375 |
'actionAdminBootstrapScripts'
|
376 |
+
]);
|
377 |
}
|
378 |
|
379 |
// includes styles and scripts
|
380 |
+
if( !$this->scripts->isEmpty() || !$this->styles->isEmpty() ) {
|
381 |
+
add_action('admin_enqueue_scripts', [$this, 'actionAdminScripts']);
|
382 |
}
|
383 |
}
|
384 |
|
385 |
// if this page for a custom menu page
|
386 |
+
if( $this->menu_post_type ) {
|
387 |
$this->menu_target = 'edit.php?post_type=' . $this->menu_post_type;
|
388 |
|
389 |
+
if( empty($this->capabilitiy) ) {
|
390 |
$this->capabilitiy = 'edit_' . $this->menu_post_type;
|
391 |
}
|
392 |
}
|
393 |
|
394 |
// sets default capabilities
|
395 |
+
if( empty($this->capabilitiy) ) {
|
396 |
$this->capabilitiy = 'manage_options';
|
397 |
}
|
398 |
|
399 |
// submenu
|
400 |
+
if( $this->menu_target ) {
|
401 |
+
add_submenu_page($this->menu_target, $this->getPageTitle(), $this->getMenuTitle(), $this->capabilitiy, $result_id, [
|
402 |
$this,
|
403 |
'show'
|
404 |
+
]);
|
405 |
// global menu
|
406 |
} else {
|
407 |
+
add_menu_page($this->getPageTitle(), $this->getMenuTitle(), $this->capabilitiy, $result_id, [
|
408 |
$this,
|
409 |
'show'
|
410 |
+
], null, $this->menu_position);
|
411 |
|
412 |
+
if( !empty($this->menu_sub_title) ) {
|
413 |
|
414 |
+
add_submenu_page($result_id, $this->menu_sub_title, $this->menu_sub_title, $this->capabilitiy, $result_id, [
|
415 |
$this,
|
416 |
'show'
|
417 |
+
]);
|
418 |
}
|
419 |
|
420 |
+
add_action('admin_head', [$this, 'actionAdminHead']);
|
421 |
}
|
422 |
|
423 |
// executes an action
|
424 |
+
if( $this->current() ) {
|
425 |
ob_start();
|
426 |
+
$action = $this->request->get('action', 'index', true);
|
427 |
+
$this->executeByName($action);
|
428 |
$this->result = ob_get_contents();
|
429 |
ob_end_clean();
|
430 |
}
|
431 |
}
|
432 |
|
433 |
+
protected function current()
|
434 |
+
{
|
435 |
$result_id = $this->getResultId();
|
436 |
|
437 |
+
if( $result_id == $this->request->get('page', 'none') ) {
|
438 |
return true;
|
439 |
}
|
440 |
|
443 |
|
444 |
/**
|
445 |
* @param string $action
|
446 |
+
* @param array $query_args
|
447 |
*/
|
448 |
+
public function redirectToAction($action, $query_args = [])
|
449 |
+
{
|
450 |
|
451 |
+
wp_safe_redirect($this->getActionUrl($action, $query_args));
|
452 |
exit;
|
453 |
}
|
454 |
|
455 |
/**
|
456 |
* @param string $action
|
457 |
+
* @param array $query_args
|
458 |
*/
|
459 |
+
public function actionUrl($action = null, $query_args = [])
|
460 |
+
{
|
461 |
+
echo $this->getActionUrl($action, $query_args);
|
462 |
}
|
463 |
|
464 |
/**
|
465 |
+
* @param null $action
|
466 |
* @param array $query_args
|
467 |
*
|
468 |
* @return string
|
469 |
*/
|
470 |
+
public function getActionUrl($action = null, $query_args = [])
|
471 |
+
{
|
472 |
+
$url = $this->getBaseUrl(null, $query_args);
|
473 |
|
474 |
+
if( !empty($action) ) {
|
475 |
+
$url = add_query_arg('action', $action, $url);
|
476 |
}
|
477 |
|
478 |
return $url;
|
481 |
/**
|
482 |
* @return string
|
483 |
*/
|
484 |
+
public function getBaseUrl($id = null, $query_args = [])
|
485 |
+
{
|
486 |
+
$result_id = $this->getResultId($id);
|
487 |
|
488 |
+
if( $this->menu_target && !$this->custom_target ) {
|
489 |
+
$url = $this->network ? network_admin_url($this->menu_target) : admin_url($this->menu_target);
|
|
|
|
|
|
|
|
|
490 |
|
491 |
+
return add_query_arg(array_merge(['page' => $result_id], $query_args), $url);
|
492 |
}
|
493 |
+
|
494 |
+
$url = $this->network ? network_admin_url('admin.php') : admin_url('admin.php');
|
495 |
+
|
496 |
+
return add_query_arg(array_merge(['page' => $result_id, $query_args]), $url);
|
497 |
}
|
498 |
|
499 |
+
public function actionAdminHead()
|
500 |
+
{
|
501 |
$result_id = $this->getResultId();
|
502 |
|
503 |
+
if( !empty($this->menu_icon) ) {
|
504 |
|
505 |
+
if( preg_match('/\\\f\d{3}/', $this->menu_icon) ) {
|
506 |
$icon_code = $this->menu_icon;
|
507 |
} else {
|
508 |
+
$icon_url = str_replace('~/', $this->plugin->get_paths()->url . '/', $this->menu_icon);
|
|
|
509 |
}
|
510 |
}
|
511 |
|
512 |
global $wp_version;
|
513 |
|
514 |
+
if( version_compare($wp_version, '3.7.3', '>') ) {
|
515 |
?>
|
516 |
+
<style type="text/css" media="screen">
|
517 |
+
<?php if ( !empty($icon_url) ) { ?>
|
518 |
|
519 |
+
a.toplevel_page_<?php echo $result_id ?> .wp-menu-image {
|
520 |
+
background: url('<?php echo $icon_url ?>') no-repeat 10px -30px !important;
|
521 |
+
}
|
522 |
|
523 |
+
<?php } ?>
|
524 |
|
525 |
+
a.toplevel_page_<?php echo $result_id ?> .wp-menu-image:before {
|
526 |
+
content: "<?php echo !empty($icon_code) ? $icon_code : ''; ?>" !important;
|
527 |
+
}
|
528 |
|
529 |
+
a.toplevel_page_<?php echo $result_id ?>:hover .wp-menu-image,
|
530 |
+
a.toplevel_page_<?php echo $result_id ?>.wp-has-current-submenu .wp-menu-image,
|
531 |
+
a.toplevel_page_<?php echo $result_id ?>.current .wp-menu-image {
|
532 |
+
background-position: 10px 2px !important;
|
533 |
+
}
|
534 |
+
</style>
|
535 |
<?php } else { ?>
|
536 |
+
<style type="text/css" media="screen">
|
537 |
+
a.toplevel_page_<?php echo $result_id ?> .wp-menu-image {
|
538 |
+
background: url('<?php echo $icon_url ?>') no-repeat 6px -33px !important;
|
539 |
+
}
|
540 |
+
|
541 |
+
a.toplevel_page_<?php echo $result_id ?>:hover .wp-menu-image,
|
542 |
+
a.toplevel_page_<?php echo $result_id ?>.current .wp-menu-image {
|
543 |
+
background-position: 6px -1px !important;
|
544 |
+
}
|
545 |
+
</style>
|
546 |
<?php
|
547 |
}
|
548 |
|
549 |
+
if( $this->internal ) {
|
550 |
?>
|
551 |
+
<style type="text/css" media="screen">
|
552 |
+
li.toplevel_page_<?php echo $result_id ?> {
|
553 |
+
display: none;
|
554 |
+
}
|
555 |
+
</style>
|
556 |
<?php
|
557 |
}
|
558 |
}
|
565 |
*
|
566 |
* @return mixed
|
567 |
*/
|
568 |
+
function addLinkToPluginActions($links)
|
569 |
+
{
|
570 |
+
$link_title = !empty($this->title_plugin_action_link) ? $this->title_plugin_action_link : $this->getMenuTitle();
|
571 |
|
572 |
$settings_link = '<a href="' . $this->getBaseUrl() . '">' . $link_title . '</a>';
|
573 |
+
array_unshift($links, $settings_link);
|
574 |
|
575 |
return $links;
|
576 |
}
|
libs/factory/pages/includes/page.class.php
CHANGED
@@ -14,9 +14,9 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if ( ! class_exists( '
|
18 |
|
19 |
-
class
|
20 |
|
21 |
|
22 |
/**
|
@@ -30,7 +30,7 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_Page' ) ) {
|
|
30 |
* Чтобы не было конфликтов с другими плагинами, используйте префиксы.
|
31 |
*
|
32 |
* @since 1.0.0
|
33 |
-
* @see
|
34 |
*
|
35 |
* @var string
|
36 |
*/
|
@@ -39,7 +39,7 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_Page' ) ) {
|
|
39 |
/**
|
40 |
* Current Factory Plugin.
|
41 |
*
|
42 |
-
* @var
|
43 |
*/
|
44 |
public $plugin;
|
45 |
|
@@ -51,11 +51,11 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_Page' ) ) {
|
|
51 |
//private $default_actions = array();
|
52 |
|
53 |
/**
|
54 |
-
* @param
|
55 |
*
|
56 |
* @throws Exception
|
57 |
*/
|
58 |
-
public function __construct(
|
59 |
$this->plugin = $plugin;
|
60 |
|
61 |
if ( $plugin ) {
|
@@ -111,7 +111,7 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_Page' ) ) {
|
|
111 |
|
112 |
if ( ! method_exists( $this, $actionFunction ) ) {
|
113 |
// todo: продумать и доработать выполнение произвольных и глобальных дейтсвия для всех страниц
|
114 |
-
/*$custom_actions = apply_filters('wbcr/
|
115 |
|
116 |
if(isset($custom_actions[$raw_action_name])) {
|
117 |
$custom_actions[$raw_action_name]();
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if ( ! class_exists( 'Wbcr_FactoryPages429_Page' ) ) {
|
18 |
|
19 |
+
class Wbcr_FactoryPages429_Page {
|
20 |
|
21 |
|
22 |
/**
|
30 |
* Чтобы не было конфликтов с другими плагинами, используйте префиксы.
|
31 |
*
|
32 |
* @since 1.0.0
|
33 |
+
* @see FactoryPages429_AdminPage
|
34 |
*
|
35 |
* @var string
|
36 |
*/
|
39 |
/**
|
40 |
* Current Factory Plugin.
|
41 |
*
|
42 |
+
* @var Wbcr_Factory429_Plugin
|
43 |
*/
|
44 |
public $plugin;
|
45 |
|
51 |
//private $default_actions = array();
|
52 |
|
53 |
/**
|
54 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
55 |
*
|
56 |
* @throws Exception
|
57 |
*/
|
58 |
+
public function __construct( Wbcr_Factory429_Plugin $plugin ) {
|
59 |
$this->plugin = $plugin;
|
60 |
|
61 |
if ( $plugin ) {
|
111 |
|
112 |
if ( ! method_exists( $this, $actionFunction ) ) {
|
113 |
// todo: продумать и доработать выполнение произвольных и глобальных дейтсвия для всех страниц
|
114 |
+
/*$custom_actions = apply_filters('wbcr/factory_pages_429/custom_actions', array(), $raw_action_name);
|
115 |
|
116 |
if(isset($custom_actions[$raw_action_name])) {
|
117 |
$custom_actions[$raw_action_name]();
|
libs/factory/pages/langs/{wbcr_factory_pages_420-fr_FR.mo → wbcr_factory_pages_429-fr_FR.mo}
RENAMED
File without changes
|
libs/factory/pages/langs/{wbcr_factory_pages_420-fr_FR.po → wbcr_factory_pages_429-fr_FR.po}
RENAMED
File without changes
|
libs/factory/pages/langs/{wbcr_factory_pages_420-ru_RU.mo → wbcr_factory_pages_429-ru_RU.mo}
RENAMED
File without changes
|
libs/factory/pages/langs/{wbcr_factory_pages_420-ru_RU.po → wbcr_factory_pages_429-ru_RU.po}
RENAMED
File without changes
|
libs/factory/pages/pages.php
CHANGED
@@ -14,24 +14,24 @@
|
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
add_action('admin_menu', '
|
18 |
-
add_action('network_admin_menu', '
|
19 |
|
20 |
-
if( !class_exists('
|
21 |
/**
|
22 |
* A base class to manage pages.
|
23 |
*
|
24 |
* @since 1.0.0
|
25 |
*/
|
26 |
-
class
|
27 |
|
28 |
/**
|
29 |
-
* @var
|
30 |
*/
|
31 |
private static $pages = array();
|
32 |
|
33 |
/**
|
34 |
-
* @param
|
35 |
* @param $class_name
|
36 |
*/
|
37 |
public static function register($plugin, $class_name)
|
@@ -59,7 +59,7 @@
|
|
59 |
}
|
60 |
}
|
61 |
|
62 |
-
public static function getPageUrl(
|
63 |
{
|
64 |
if( isset(self::$pages[$plugin->getPluginName()]) ) {
|
65 |
$pages = self::$pages[$plugin->getPluginName()];
|
@@ -75,7 +75,7 @@
|
|
75 |
}
|
76 |
|
77 |
/**
|
78 |
-
* @param
|
79 |
* @return array
|
80 |
*/
|
81 |
public static function getIds($plugin)
|
@@ -93,14 +93,14 @@
|
|
93 |
}
|
94 |
}
|
95 |
|
96 |
-
if( !function_exists('
|
97 |
/**
|
98 |
*
|
99 |
-
* @param
|
100 |
* @param string $page_id
|
101 |
* @return string
|
102 |
*/
|
103 |
-
function
|
104 |
{
|
105 |
return $page_id . '-' . $plugin->getPluginName();
|
106 |
}
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
add_action('admin_menu', 'Wbcr_FactoryPages429::actionAdminMenu');
|
18 |
+
add_action('network_admin_menu', 'Wbcr_FactoryPages429::actionAdminMenu');
|
19 |
|
20 |
+
if( !class_exists('Wbcr_FactoryPages429') ) {
|
21 |
/**
|
22 |
* A base class to manage pages.
|
23 |
*
|
24 |
* @since 1.0.0
|
25 |
*/
|
26 |
+
class Wbcr_FactoryPages429 {
|
27 |
|
28 |
/**
|
29 |
+
* @var Wbcr_FactoryPages429_Page[]
|
30 |
*/
|
31 |
private static $pages = array();
|
32 |
|
33 |
/**
|
34 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
35 |
* @param $class_name
|
36 |
*/
|
37 |
public static function register($plugin, $class_name)
|
59 |
}
|
60 |
}
|
61 |
|
62 |
+
public static function getPageUrl(Wbcr_Factory429_Plugin $plugin, $page_id, $args = array())
|
63 |
{
|
64 |
if( isset(self::$pages[$plugin->getPluginName()]) ) {
|
65 |
$pages = self::$pages[$plugin->getPluginName()];
|
75 |
}
|
76 |
|
77 |
/**
|
78 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
79 |
* @return array
|
80 |
*/
|
81 |
public static function getIds($plugin)
|
93 |
}
|
94 |
}
|
95 |
|
96 |
+
if( !function_exists('wbcr_factory_pages_429_get_page_id') ) {
|
97 |
/**
|
98 |
*
|
99 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
100 |
* @param string $page_id
|
101 |
* @return string
|
102 |
*/
|
103 |
+
function wbcr_factory_pages_429_get_page_id($plugin, $page_id)
|
104 |
{
|
105 |
return $page_id . '-' . $plugin->getPluginName();
|
106 |
}
|
libs/factory/pages/templates/assets/css/impressive.page.template.css
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
#WBCR .error {
|
9 |
display: none !important;
|
10 |
}
|
11 |
-
#WBCR .wbcr-factory-pages-
|
12 |
position: relative;
|
13 |
/**
|
14 |
Content sections
|
@@ -17,134 +17,134 @@
|
|
17 |
Widget in the sidebar of the plugin
|
18 |
*/
|
19 |
}
|
20 |
-
#WBCR .wbcr-factory-pages-
|
21 |
color: #9a9a9a;
|
22 |
}
|
23 |
-
#WBCR .wbcr-factory-pages-
|
24 |
color: #ffc107;
|
25 |
}
|
26 |
-
#WBCR .wbcr-factory-pages-
|
27 |
color: #ffeb3b;
|
28 |
}
|
29 |
-
#WBCR .wbcr-factory-pages-
|
30 |
padding: 0 20px;
|
31 |
}
|
32 |
-
#WBCR .wbcr-factory-pages-
|
33 |
font-weight: normal;
|
34 |
}
|
35 |
-
#WBCR .wbcr-factory-pages-
|
36 |
max-width: 300px;
|
37 |
}
|
38 |
-
#WBCR .wbcr-factory-pages-
|
39 |
text-align: right;
|
40 |
padding-right: 20px;
|
41 |
}
|
42 |
-
#WBCR .wbcr-factory-pages-
|
43 |
display: inline-block;
|
44 |
vertical-align: bottom;
|
45 |
}
|
46 |
-
#WBCR .wbcr-factory-pages-
|
47 |
-
#WBCR .wbcr-factory-pages-
|
48 |
outline: none;
|
49 |
}
|
50 |
-
#WBCR .wbcr-factory-pages-
|
51 |
font-weight: bold;
|
52 |
margin: 0 !important;
|
53 |
border: 0;
|
54 |
border-radius: 0;
|
55 |
padding: 15px;
|
56 |
}
|
57 |
-
#WBCR .wbcr-factory-pages-
|
58 |
margin-top: 0 !important;
|
59 |
}
|
60 |
-
#WBCR .wbcr-factory-pages-
|
61 |
background: #fff3d0;
|
62 |
}
|
63 |
-
#WBCR .wbcr-factory-pages-
|
64 |
background: #fffde9;
|
65 |
}
|
66 |
-
#WBCR .wbcr-factory-pages-
|
67 |
background: #de716d;
|
68 |
}
|
69 |
-
#WBCR .wbcr-factory-pages-
|
70 |
background: #ec8c89;
|
71 |
}
|
72 |
-
#WBCR .wbcr-factory-pages-
|
73 |
background: #d0ecc4;
|
74 |
}
|
75 |
-
#WBCR .wbcr-factory-pages-
|
76 |
background: #e0eadb;
|
77 |
}
|
78 |
-
#WBCR .wbcr-factory-pages-
|
79 |
padding: 20px 20px 40px;
|
80 |
}
|
81 |
-
#WBCR .wbcr-factory-pages-
|
82 |
display: block;
|
83 |
font-size: 11px;
|
84 |
font-weight: lighter;
|
85 |
color: #179347;
|
86 |
}
|
87 |
-
#WBCR .wbcr-factory-pages-
|
88 |
-
#WBCR .wbcr-factory-pages-
|
89 |
position: relative;
|
90 |
background: #e6e6e6;
|
91 |
overflow: hidden;
|
92 |
}
|
93 |
-
#WBCR .wbcr-factory-pages-
|
94 |
-
#WBCR .wbcr-factory-pages-
|
95 |
display: block;
|
96 |
content: '';
|
97 |
clear: both;
|
98 |
}
|
99 |
-
#WBCR .wbcr-factory-pages-
|
100 |
background: #efefef;
|
101 |
padding: 20px 0 10px 20px;
|
102 |
margin: 30px 0;
|
103 |
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
|
104 |
}
|
105 |
-
#WBCR .wbcr-factory-pages-
|
106 |
margin-top: 0;
|
107 |
}
|
108 |
-
#WBCR .wbcr-factory-pages-
|
109 |
font-size: 15px;
|
110 |
}
|
111 |
-
#WBCR .wbcr-factory-pages-
|
112 |
color: #8c8888;
|
113 |
font-size: 12px;
|
114 |
}
|
115 |
-
#WBCR .wbcr-factory-pages-
|
116 |
margin-left: 230px;
|
117 |
padding: 80px 0 0 0;
|
118 |
vertical-align: top;
|
119 |
background: #fff;
|
120 |
}
|
121 |
-
#WBCR .wbcr-factory-pages-
|
122 |
-
#WBCR .wbcr-factory-pages-
|
123 |
-
#WBCR .wbcr-factory-pages-
|
124 |
border: 0;
|
125 |
}
|
126 |
-
#WBCR .wbcr-factory-pages-
|
127 |
background: #efefef !important;
|
128 |
margin-bottom: -2px !important;
|
129 |
border-bottom: 1px solid #efefef !important;
|
130 |
}
|
131 |
-
#WBCR .wbcr-factory-pages-
|
132 |
margin: 0;
|
133 |
}
|
134 |
-
#WBCR .wbcr-factory-pages-
|
135 |
background: #f7f7f7;
|
136 |
}
|
137 |
-
#WBCR .wbcr-factory-pages-
|
138 |
border: 2px solid #dedede;
|
139 |
border-bottom: 0;
|
140 |
box-shadow: -1px 0 0 rgba(0, 0, 0, 0.1);
|
141 |
}
|
142 |
-
#WBCR .wbcr-factory-pages-
|
143 |
-
#WBCR .wbcr-factory-pages-
|
144 |
box-shadow: none;
|
145 |
outline: none;
|
146 |
}
|
147 |
-
#WBCR .wbcr-factory-pages-
|
148 |
position: absolute;
|
149 |
z-index: 13;
|
150 |
top: 0;
|
@@ -155,7 +155,7 @@
|
|
155 |
color: #fff;
|
156 |
border-radius: 5px 5px 0 0;
|
157 |
}
|
158 |
-
#WBCR .wbcr-factory-pages-
|
159 |
float: left;
|
160 |
padding: 25px 0;
|
161 |
font-size: 20px;
|
@@ -168,11 +168,11 @@
|
|
168 |
margin-right: 10px;
|
169 |
background: none;
|
170 |
}
|
171 |
-
#WBCR .wbcr-factory-pages-
|
172 |
display: inline-block;
|
173 |
vertical-align: middle;
|
174 |
}
|
175 |
-
#WBCR .wbcr-factory-pages-
|
176 |
font-size: 18px;
|
177 |
line-height: 30px;
|
178 |
font-weight: 300;
|
@@ -183,12 +183,12 @@
|
|
183 |
text-overflow: ellipsis;
|
184 |
color: #fff;
|
185 |
}
|
186 |
-
#WBCR .wbcr-factory-pages-
|
187 |
position: relative;
|
188 |
float: right;
|
189 |
margin: 12px;
|
190 |
}
|
191 |
-
#WBCR .wbcr-factory-pages-
|
192 |
display: inline-block;
|
193 |
vertical-align: top;
|
194 |
font-size: 13px;
|
@@ -211,49 +211,49 @@
|
|
211 |
text-decoration: none;
|
212 |
z-index: 3;
|
213 |
}
|
214 |
-
#WBCR .wbcr-factory-pages-
|
215 |
box-shadow: none;
|
216 |
min-width: 100px;
|
217 |
background-color: #8bc34a;
|
218 |
color: #fff;
|
219 |
}
|
220 |
-
#WBCR .wbcr-factory-pages-
|
221 |
background: #9dbb7b;
|
222 |
color: #fff;
|
223 |
}
|
224 |
-
#WBCR .wbcr-factory-pages-
|
225 |
box-shadow: inset -1px 1px 1px rgba(0, 0, 0, 0.3);
|
226 |
}
|
227 |
-
#WBCR .wbcr-factory-pages-
|
228 |
box-shadow: none;
|
229 |
min-width: 200px;
|
230 |
background-color: #9e9e9e;
|
231 |
color: #fff;
|
232 |
}
|
233 |
-
#WBCR .wbcr-factory-pages-
|
234 |
background: #797979;
|
235 |
color: #fff;
|
236 |
}
|
237 |
-
#WBCR .wbcr-factory-pages-
|
238 |
box-shadow: inset -1px 1px 1px rgba(0, 0, 0, 0.3);
|
239 |
}
|
240 |
-
#WBCR .wbcr-factory-pages-
|
241 |
float: left;
|
242 |
vertical-align: top;
|
243 |
width: 230px;
|
244 |
background: #e6e6e6;
|
245 |
}
|
246 |
-
#WBCR .wbcr-factory-pages-
|
247 |
padding: 0;
|
248 |
margin-bottom: 0;
|
249 |
margin-top: 80px;
|
250 |
}
|
251 |
-
#WBCR .wbcr-factory-pages-
|
252 |
display: block;
|
253 |
background: #efefef;
|
254 |
margin: 1px 0;
|
255 |
}
|
256 |
-
#WBCR .wbcr-factory-pages-
|
257 |
display: block;
|
258 |
width: 100%;
|
259 |
padding: 20px 20px;
|
@@ -264,83 +264,126 @@
|
|
264 |
text-align: left;
|
265 |
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
266 |
}
|
267 |
-
#WBCR .wbcr-factory-pages-
|
268 |
display: block;
|
269 |
font-weight: bold;
|
270 |
}
|
271 |
-
#WBCR .wbcr-factory-pages-
|
272 |
display: block;
|
273 |
font-size: 13px;
|
274 |
font-weight: normal;
|
275 |
text-transform: none;
|
276 |
color: #9a9a9a;
|
277 |
}
|
278 |
-
#WBCR .wbcr-factory-pages-
|
279 |
float: right;
|
280 |
color: #ccc;
|
281 |
}
|
282 |
-
#WBCR .wbcr-factory-pages-
|
283 |
clear: both;
|
284 |
}
|
285 |
-
#WBCR .wbcr-factory-pages-
|
286 |
background: #f7f6f6;
|
287 |
}
|
288 |
-
#WBCR .wbcr-factory-pages-
|
289 |
color: #9a9a9a;
|
290 |
}
|
291 |
-
#WBCR .wbcr-factory-pages-
|
292 |
-
#WBCR .wbcr-factory-pages-
|
293 |
-
#WBCR .wbcr-factory-pages-
|
294 |
-
#WBCR .wbcr-factory-pages-
|
295 |
-
#WBCR .wbcr-factory-pages-
|
296 |
outline: 0 !important;
|
297 |
box-shadow: none !important;
|
298 |
}
|
299 |
-
#WBCR .wbcr-factory-pages-
|
300 |
background: #fff;
|
|
|
301 |
}
|
302 |
-
#WBCR .wbcr-factory-pages-
|
303 |
color: #ff5722;
|
304 |
font-weight: bold;
|
305 |
-
border-left: 5px solid #ff5722;
|
306 |
}
|
307 |
-
#WBCR .wbcr-factory-pages-
|
308 |
color: #9a9a9a;
|
309 |
}
|
310 |
-
#WBCR .wbcr-factory-pages-
|
311 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
312 |
display: inline-block;
|
313 |
vertical-align: top;
|
314 |
}
|
315 |
-
#WBCR .wbcr-factory-pages-
|
316 |
width: 74.6%;
|
317 |
}
|
318 |
-
#WBCR .wbcr-factory-pages-
|
319 |
width: 100%;
|
320 |
}
|
321 |
-
#WBCR .wbcr-factory-pages-
|
322 |
margin-top: 15px;
|
323 |
}
|
324 |
-
#WBCR .wbcr-factory-pages-
|
325 |
background: #f7f7f7;
|
326 |
padding: 0 0 20px 0;
|
327 |
border: 1px solid #dad8d8;
|
328 |
box-shadow: -1px 0px 1px rgba(0, 0, 0, 0.1);
|
329 |
}
|
330 |
-
#WBCR .wbcr-factory-pages-
|
331 |
padding-top: 0 !important;
|
332 |
}
|
333 |
-
#WBCR .wbcr-factory-pages-
|
334 |
width: 25%;
|
335 |
padding: 10px;
|
336 |
margin: 0 0 -20px;
|
337 |
background-color: #f9f9f9;
|
338 |
box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.1);
|
339 |
}
|
340 |
-
#WBCR .wbcr-factory-pages-
|
341 |
margin: 0 0 20px;
|
342 |
}
|
343 |
-
#WBCR .wbcr-factory-pages-
|
344 |
display: inline-block;
|
345 |
min-height: 230px;
|
346 |
width: 100%;
|
@@ -349,19 +392,19 @@
|
|
349 |
padding: 20px 15px;
|
350 |
vertical-align: top;
|
351 |
}
|
352 |
-
#WBCR .wbcr-factory-pages-
|
353 |
display: none;
|
354 |
}
|
355 |
-
#WBCR .wbcr-factory-pages-
|
356 |
background: #fff4d0;
|
357 |
}
|
358 |
-
#WBCR .wbcr-factory-pages-
|
359 |
background: #e2ffc0;
|
360 |
}
|
361 |
-
#WBCR .wbcr-factory-pages-
|
362 |
background: #ffebe9;
|
363 |
}
|
364 |
-
#WBCR .wbcr-factory-pages-
|
365 |
display: inline-block;
|
366 |
width: 16px;
|
367 |
height: 16px;
|
@@ -373,16 +416,16 @@
|
|
373 |
background: #E91E63;
|
374 |
border-radius: 3px;
|
375 |
}
|
376 |
-
#WBCR .wbcr-factory-pages-
|
377 |
background: #E91E63;
|
378 |
}
|
379 |
-
#WBCR .wbcr-factory-pages-
|
380 |
background: #9e9e9e;
|
381 |
}
|
382 |
-
#WBCR .wbcr-factory-pages-
|
383 |
background: #8bc34a;
|
384 |
}
|
385 |
-
#WBCR .wbcr-factory-pages-
|
386 |
display: block;
|
387 |
width: 80px;
|
388 |
height: 17px;
|
@@ -390,23 +433,23 @@
|
|
390 |
vertical-align: middle;
|
391 |
margin-bottom: 5px;
|
392 |
}
|
393 |
-
#WBCR .wbcr-factory-pages-
|
394 |
display: block;
|
395 |
margin: 30px auto 0;
|
396 |
outline: none;
|
397 |
}
|
398 |
-
#WBCR .wbcr-factory-pages-
|
399 |
-
#WBCR .wbcr-factory-pages-
|
400 |
box-shadow: none;
|
401 |
}
|
402 |
-
#WBCR .wbcr-factory-pages-
|
403 |
font-size: 50px;
|
404 |
margin-top: 30px;
|
405 |
text-align: center;
|
406 |
font-weight: 600;
|
407 |
color: #8BC34A;
|
408 |
}
|
409 |
-
#WBCR .wbcr-factory-pages-
|
410 |
min-height: 240px;
|
411 |
margin-bottom: 20px;
|
412 |
text-align: center;
|
@@ -414,24 +457,24 @@
|
|
414 |
padding: 30px;
|
415 |
border: 1px solid #f3f1e7;
|
416 |
}
|
417 |
-
#WBCR .wbcr-factory-pages-
|
418 |
width: 50px;
|
419 |
height: 50px;
|
420 |
font-size: 50px;
|
421 |
color: #FFC107;
|
422 |
line-height: normal;
|
423 |
}
|
424 |
-
#WBCR .wbcr-factory-pages-
|
425 |
color: #7b6111;
|
426 |
}
|
427 |
-
#WBCR .wbcr-factory-pages-
|
428 |
color: #9e9e9e;
|
429 |
}
|
430 |
-
#WBCR .wbcr-factory-pages-
|
431 |
margin-top: 20px;
|
432 |
text-align: center;
|
433 |
}
|
434 |
-
#WBCR .wbcr-factory-pages-
|
435 |
display: inline-block;
|
436 |
padding: 20px 60px;
|
437 |
background-color: #FFC107;
|
@@ -441,67 +484,67 @@
|
|
441 |
font-weight: bold;
|
442 |
transition: background-color 0.3s, border-color 0.3s, color 0.3s, opacity 0.3s;
|
443 |
}
|
444 |
-
#WBCR .wbcr-factory-pages-
|
445 |
background-color: #ffce3a;
|
446 |
}
|
447 |
-
#WBCR .wbcr-factory-pages-
|
448 |
padding: 20px;
|
449 |
background: #ffffff;
|
450 |
}
|
451 |
-
#WBCR .wbcr-factory-pages-
|
452 |
-
#WBCR .wbcr-factory-pages-
|
453 |
display: none;
|
454 |
}
|
455 |
-
#WBCR .wbcr-factory-pages-
|
456 |
font-size: 18px;
|
457 |
margin-top: 10px;
|
458 |
}
|
459 |
-
#WBCR .wbcr-factory-pages-
|
460 |
padding: 10px;
|
461 |
background: #ffedeb;
|
462 |
border: 1px solid #ffdfdc;
|
463 |
margin: 15px 0;
|
464 |
}
|
465 |
-
#WBCR .wbcr-factory-pages-
|
466 |
margin-bottom: 15px;
|
467 |
color: #7b7b7b;
|
468 |
}
|
469 |
@media screen and (max-width: 1367px) {
|
470 |
-
#WBCR .wbcr-factory-pages-
|
471 |
width: 69.6%;
|
472 |
}
|
473 |
-
#WBCR .wbcr-factory-pages-
|
474 |
width: 30%;
|
475 |
}
|
476 |
}
|
477 |
@media screen and (max-width: 1320px) {
|
478 |
-
#WBCR .wbcr-factory-pages-
|
479 |
width: 100%;
|
480 |
}
|
481 |
-
#WBCR .wbcr-factory-pages-
|
482 |
display: none !important;
|
483 |
}
|
484 |
-
#WBCR .wbcr-factory-pages-
|
485 |
display: none !important;
|
486 |
}
|
487 |
-
#WBCR .wbcr-factory-pages-
|
488 |
display: none !important;
|
489 |
}
|
490 |
}
|
491 |
@media screen and (max-width: 950px) {
|
492 |
-
#WBCR .wbcr-factory-pages-
|
493 |
width: 70px;
|
494 |
}
|
495 |
-
#WBCR .wbcr-factory-pages-
|
496 |
font-size: 0;
|
497 |
}
|
498 |
-
#WBCR .wbcr-factory-pages-
|
499 |
font-size: 0;
|
500 |
}
|
501 |
-
#WBCR .wbcr-factory-pages-
|
502 |
display: none !important;
|
503 |
}
|
504 |
-
#WBCR .wbcr-factory-pages-
|
505 |
margin-left: 70px;
|
506 |
}
|
507 |
}
|
8 |
#WBCR .error {
|
9 |
display: none !important;
|
10 |
}
|
11 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template {
|
12 |
position: relative;
|
13 |
/**
|
14 |
Content sections
|
17 |
Widget in the sidebar of the plugin
|
18 |
*/
|
19 |
}
|
20 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-color-grey {
|
21 |
color: #9a9a9a;
|
22 |
}
|
23 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-orange-color {
|
24 |
color: #ffc107;
|
25 |
}
|
26 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-light-orange-color {
|
27 |
color: #ffeb3b;
|
28 |
}
|
29 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .form-group {
|
30 |
padding: 0 20px;
|
31 |
}
|
32 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .form-group label {
|
33 |
font-weight: normal;
|
34 |
}
|
35 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .form-horizontal .control-label {
|
36 |
max-width: 300px;
|
37 |
}
|
38 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .factory-control-buttons {
|
39 |
text-align: right;
|
40 |
padding-right: 20px;
|
41 |
}
|
42 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .factory-from-control-list label span {
|
43 |
display: inline-block;
|
44 |
vertical-align: bottom;
|
45 |
}
|
46 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .factory-from-control-list label span input[type="checkbox"],
|
47 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .factory-from-control-list label span input[type="checkbox"]:focus {
|
48 |
outline: none;
|
49 |
}
|
50 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .alert {
|
51 |
font-weight: bold;
|
52 |
margin: 0 !important;
|
53 |
border: 0;
|
54 |
border-radius: 0;
|
55 |
padding: 15px;
|
56 |
}
|
57 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .alert + .wbcr-factory-page-group-header {
|
58 |
margin-top: 0 !important;
|
59 |
}
|
60 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .alert.alert-warning {
|
61 |
background: #fff3d0;
|
62 |
}
|
63 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .alert.alert-warning:nth-child(2n+1) {
|
64 |
background: #fffde9;
|
65 |
}
|
66 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .alert.alert-danger {
|
67 |
background: #de716d;
|
68 |
}
|
69 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .alert.alert-danger:nth-child(2n+1) {
|
70 |
background: #ec8c89;
|
71 |
}
|
72 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .alert.alert-success {
|
73 |
background: #d0ecc4;
|
74 |
}
|
75 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .alert.alert-success:nth-child(2n+1) {
|
76 |
background: #e0eadb;
|
77 |
}
|
78 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-header {
|
79 |
padding: 20px 20px 40px;
|
80 |
}
|
81 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-recomended-text {
|
82 |
display: block;
|
83 |
font-size: 11px;
|
84 |
font-weight: lighter;
|
85 |
color: #179347;
|
86 |
}
|
87 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-options,
|
88 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page {
|
89 |
position: relative;
|
90 |
background: #e6e6e6;
|
91 |
overflow: hidden;
|
92 |
}
|
93 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-options:after,
|
94 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page:after {
|
95 |
display: block;
|
96 |
content: '';
|
97 |
clear: both;
|
98 |
}
|
99 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-group-header {
|
100 |
background: #efefef;
|
101 |
padding: 20px 0 10px 20px;
|
102 |
margin: 30px 0;
|
103 |
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
|
104 |
}
|
105 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-group-header:first-child {
|
106 |
margin-top: 0;
|
107 |
}
|
108 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-group-header strong {
|
109 |
font-size: 15px;
|
110 |
}
|
111 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-group-header p {
|
112 |
color: #8c8888;
|
113 |
font-size: 12px;
|
114 |
}
|
115 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap {
|
116 |
margin-left: 230px;
|
117 |
padding: 80px 0 0 0;
|
118 |
vertical-align: top;
|
119 |
background: #fff;
|
120 |
}
|
121 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap .nav-tab-wrapper,
|
122 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap h2.nav-tab-wrapper,
|
123 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap h1.nav-tab-wrapper {
|
124 |
border: 0;
|
125 |
}
|
126 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap .nav-tab-active {
|
127 |
background: #efefef !important;
|
128 |
margin-bottom: -2px !important;
|
129 |
border-bottom: 1px solid #efefef !important;
|
130 |
}
|
131 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap .nav-tab:first-child {
|
132 |
margin: 0;
|
133 |
}
|
134 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap .nav-tab:hover {
|
135 |
background: #f7f7f7;
|
136 |
}
|
137 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap .nav-tab {
|
138 |
border: 2px solid #dedede;
|
139 |
border-bottom: 0;
|
140 |
box-shadow: -1px 0 0 rgba(0, 0, 0, 0.1);
|
141 |
}
|
142 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap .nav-tab:active,
|
143 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap .nav-tab:focus {
|
144 |
box-shadow: none;
|
145 |
outline: none;
|
146 |
}
|
147 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header {
|
148 |
position: absolute;
|
149 |
z-index: 13;
|
150 |
top: 0;
|
155 |
color: #fff;
|
156 |
border-radius: 5px 5px 0 0;
|
157 |
}
|
158 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-header-logo {
|
159 |
float: left;
|
160 |
padding: 25px 0;
|
161 |
font-size: 20px;
|
168 |
margin-right: 10px;
|
169 |
background: none;
|
170 |
}
|
171 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-header-title {
|
172 |
display: inline-block;
|
173 |
vertical-align: middle;
|
174 |
}
|
175 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-header-title h2 {
|
176 |
font-size: 18px;
|
177 |
line-height: 30px;
|
178 |
font-weight: 300;
|
183 |
text-overflow: ellipsis;
|
184 |
color: #fff;
|
185 |
}
|
186 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-control {
|
187 |
position: relative;
|
188 |
float: right;
|
189 |
margin: 12px;
|
190 |
}
|
191 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-button {
|
192 |
display: inline-block;
|
193 |
vertical-align: top;
|
194 |
font-size: 13px;
|
211 |
text-decoration: none;
|
212 |
z-index: 3;
|
213 |
}
|
214 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-button.wbcr-factory-type-save {
|
215 |
box-shadow: none;
|
216 |
min-width: 100px;
|
217 |
background-color: #8bc34a;
|
218 |
color: #fff;
|
219 |
}
|
220 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-button.wbcr-factory-type-save:hover {
|
221 |
background: #9dbb7b;
|
222 |
color: #fff;
|
223 |
}
|
224 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-button.wbcr-factory-type-save:active {
|
225 |
box-shadow: inset -1px 1px 1px rgba(0, 0, 0, 0.3);
|
226 |
}
|
227 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-button.wbcr-factory-type-settings {
|
228 |
box-shadow: none;
|
229 |
min-width: 200px;
|
230 |
background-color: #9e9e9e;
|
231 |
color: #fff;
|
232 |
}
|
233 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-button.wbcr-factory-type-settings:hover {
|
234 |
background: #797979;
|
235 |
color: #fff;
|
236 |
}
|
237 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-header .wbcr-factory-button.wbcr-factory-type-settings:active {
|
238 |
box-shadow: inset -1px 1px 1px rgba(0, 0, 0, 0.3);
|
239 |
}
|
240 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar {
|
241 |
float: left;
|
242 |
vertical-align: top;
|
243 |
width: 230px;
|
244 |
background: #e6e6e6;
|
245 |
}
|
246 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul {
|
247 |
padding: 0;
|
248 |
margin-bottom: 0;
|
249 |
margin-top: 80px;
|
250 |
}
|
251 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab {
|
252 |
display: block;
|
253 |
background: #efefef;
|
254 |
margin: 1px 0;
|
255 |
}
|
256 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link {
|
257 |
display: block;
|
258 |
width: 100%;
|
259 |
padding: 20px 20px;
|
264 |
text-align: left;
|
265 |
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
266 |
}
|
267 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link .wbcr-factory-tab__title {
|
268 |
display: block;
|
269 |
font-weight: bold;
|
270 |
}
|
271 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link .wbcr-factory-tab__short-description {
|
272 |
display: block;
|
273 |
font-size: 13px;
|
274 |
font-weight: normal;
|
275 |
text-transform: none;
|
276 |
color: #9a9a9a;
|
277 |
}
|
278 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link .dashicons {
|
279 |
float: right;
|
280 |
color: #ccc;
|
281 |
}
|
282 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link::after {
|
283 |
clear: both;
|
284 |
}
|
285 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link:hover {
|
286 |
background: #f7f6f6;
|
287 |
}
|
288 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link:hover .dashicons {
|
289 |
color: #9a9a9a;
|
290 |
}
|
291 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link,
|
292 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link:active,
|
293 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link:hover,
|
294 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link:active,
|
295 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__link:focus {
|
296 |
outline: 0 !important;
|
297 |
box-shadow: none !important;
|
298 |
}
|
299 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab.wbcr-factory-active-tab {
|
300 |
background: #fff;
|
301 |
+
border-left: 5px solid #ff5722;
|
302 |
}
|
303 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab.wbcr-factory-active-tab a {
|
304 |
color: #ff5722;
|
305 |
font-weight: bold;
|
|
|
306 |
}
|
307 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab.wbcr-factory-active-tab a .dashicons {
|
308 |
color: #9a9a9a;
|
309 |
}
|
310 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-submenu {
|
311 |
+
padding: 0;
|
312 |
+
margin: 0;
|
313 |
+
}
|
314 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-submenu li {
|
315 |
+
margin: 1px 0 0;
|
316 |
+
padding: 0;
|
317 |
+
}
|
318 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-submenu li a {
|
319 |
+
display: block;
|
320 |
+
font-weight: normal;
|
321 |
+
color: #222;
|
322 |
+
border: 0;
|
323 |
+
margin: 0;
|
324 |
+
padding: 5px 5px 5px 30px;
|
325 |
+
background: #f5f5f5;
|
326 |
+
text-decoration: none;
|
327 |
+
outline: none;
|
328 |
+
}
|
329 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-submenu li a:focus,
|
330 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-submenu li a:link {
|
331 |
+
outline: 0 !important;
|
332 |
+
text-shadow: none !important;
|
333 |
+
}
|
334 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-submenu li a .dashicons {
|
335 |
+
color: #9a9a9a;
|
336 |
+
font-size: 13px;
|
337 |
+
border: 0;
|
338 |
+
-moz-transform: scaleX(-1);
|
339 |
+
-webkit-transform: scaleX(-1);
|
340 |
+
-o-transform: scaleX(-1);
|
341 |
+
transform: scaleX(-1);
|
342 |
+
-ms-filter: fliph;
|
343 |
+
filter: fliph;
|
344 |
+
}
|
345 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-submenu li a.wbcr-factory-tab-active {
|
346 |
+
background: #fff;
|
347 |
+
color: #ff5722;
|
348 |
+
font-weight: 600;
|
349 |
+
}
|
350 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-submenu li a.wbcr-factory-tab-active .dashicons {
|
351 |
+
color: #ff5722;
|
352 |
+
}
|
353 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-content-section,
|
354 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section {
|
355 |
display: inline-block;
|
356 |
vertical-align: top;
|
357 |
}
|
358 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-content-section {
|
359 |
width: 74.6%;
|
360 |
}
|
361 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-content-section.wbcr-fullwidth {
|
362 |
width: 100%;
|
363 |
}
|
364 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-content-section .nav-tab-wrapper {
|
365 |
margin-top: 15px;
|
366 |
}
|
367 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-content-section .wbcr-factory-content {
|
368 |
background: #f7f7f7;
|
369 |
padding: 0 0 20px 0;
|
370 |
border: 1px solid #dad8d8;
|
371 |
box-shadow: -1px 0px 1px rgba(0, 0, 0, 0.1);
|
372 |
}
|
373 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-content-section .wbcr-factory-content > form {
|
374 |
padding-top: 0 !important;
|
375 |
}
|
376 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section {
|
377 |
width: 25%;
|
378 |
padding: 10px;
|
379 |
margin: 0 0 -20px;
|
380 |
background-color: #f9f9f9;
|
381 |
box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.1);
|
382 |
}
|
383 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section .wbcr-factory-sidebar-widget {
|
384 |
margin: 0 0 20px;
|
385 |
}
|
386 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget {
|
387 |
display: inline-block;
|
388 |
min-height: 230px;
|
389 |
width: 100%;
|
392 |
padding: 20px 15px;
|
393 |
vertical-align: top;
|
394 |
}
|
395 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget.wbcr-factory-hide {
|
396 |
display: none;
|
397 |
}
|
398 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget.wbcr-factory-warning {
|
399 |
background: #fff4d0;
|
400 |
}
|
401 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget.wbcr-factory-danger {
|
402 |
background: #e2ffc0;
|
403 |
}
|
404 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget.wbcr-factory-success {
|
405 |
background: #ffebe9;
|
406 |
}
|
407 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget .wbcr-factory-hint-icon-simple {
|
408 |
display: inline-block;
|
409 |
width: 16px;
|
410 |
height: 16px;
|
416 |
background: #E91E63;
|
417 |
border-radius: 3px;
|
418 |
}
|
419 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget .wbcr-factory-simple-grey {
|
420 |
background: #E91E63;
|
421 |
}
|
422 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget .wbcr-factory-simple-red {
|
423 |
background: #9e9e9e;
|
424 |
}
|
425 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget .wbcr-factory-simple-green {
|
426 |
background: #8bc34a;
|
427 |
}
|
428 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget .wbcr-factory-icon-5stars {
|
429 |
display: block;
|
430 |
width: 80px;
|
431 |
height: 17px;
|
433 |
vertical-align: middle;
|
434 |
margin-bottom: 5px;
|
435 |
}
|
436 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget #wbcr-factory-paypal-donation-form input[type="image"] {
|
437 |
display: block;
|
438 |
margin: 30px auto 0;
|
439 |
outline: none;
|
440 |
}
|
441 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget #wbcr-factory-paypal-donation-form input[type="image"] :focus,
|
442 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget #wbcr-factory-paypal-donation-form input[type="image"] :active {
|
443 |
box-shadow: none;
|
444 |
}
|
445 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-sidebar-widget #wbcr-factory-paypal-donation-form .wbcr-factory-donation-price {
|
446 |
font-size: 50px;
|
447 |
margin-top: 30px;
|
448 |
text-align: center;
|
449 |
font-weight: 600;
|
450 |
color: #8BC34A;
|
451 |
}
|
452 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-more_features .wbcr-factory-feature-box {
|
453 |
min-height: 240px;
|
454 |
margin-bottom: 20px;
|
455 |
text-align: center;
|
457 |
padding: 30px;
|
458 |
border: 1px solid #f3f1e7;
|
459 |
}
|
460 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-more_features .wbcr-factory-feature-box .dashicons {
|
461 |
width: 50px;
|
462 |
height: 50px;
|
463 |
font-size: 50px;
|
464 |
color: #FFC107;
|
465 |
line-height: normal;
|
466 |
}
|
467 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-more_features .wbcr-factory-feature-box h3 {
|
468 |
color: #7b6111;
|
469 |
}
|
470 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-more_features .wbcr-factory-feature-box p {
|
471 |
color: #9e9e9e;
|
472 |
}
|
473 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-more_features .wbcr-factory-buttons-wrap {
|
474 |
margin-top: 20px;
|
475 |
text-align: center;
|
476 |
}
|
477 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-more_features .wbcr-factory-premium-button {
|
478 |
display: inline-block;
|
479 |
padding: 20px 60px;
|
480 |
background-color: #FFC107;
|
484 |
font-weight: bold;
|
485 |
transition: background-color 0.3s, border-color 0.3s, color 0.3s, opacity 0.3s;
|
486 |
}
|
487 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-more_features .wbcr-factory-premium-button:hover {
|
488 |
background-color: #ffce3a;
|
489 |
}
|
490 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template #wbcr-factory-confirm-dialog {
|
491 |
padding: 20px;
|
492 |
background: #ffffff;
|
493 |
}
|
494 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template #wbcr-factory-confirm-dialog .updated,
|
495 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template #wbcr-factory-confirm-dialog .alert {
|
496 |
display: none;
|
497 |
}
|
498 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template #wbcr-factory-confirm-dialog h2 {
|
499 |
font-size: 18px;
|
500 |
margin-top: 10px;
|
501 |
}
|
502 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template #wbcr-factory-confirm-dialog .wbcr-factory-confirm-description {
|
503 |
padding: 10px;
|
504 |
background: #ffedeb;
|
505 |
border: 1px solid #ffdfdc;
|
506 |
margin: 15px 0;
|
507 |
}
|
508 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template #wbcr-factory-confirm-dialog .wbcr-factory-confirm-hint {
|
509 |
margin-bottom: 15px;
|
510 |
color: #7b7b7b;
|
511 |
}
|
512 |
@media screen and (max-width: 1367px) {
|
513 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-content-section {
|
514 |
width: 69.6%;
|
515 |
}
|
516 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section {
|
517 |
width: 30%;
|
518 |
}
|
519 |
}
|
520 |
@media screen and (max-width: 1320px) {
|
521 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-content-section {
|
522 |
width: 100%;
|
523 |
}
|
524 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-right-sidebar-section {
|
525 |
display: none !important;
|
526 |
}
|
527 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-header-logo .dash {
|
528 |
display: none !important;
|
529 |
}
|
530 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-header-title {
|
531 |
display: none !important;
|
532 |
}
|
533 |
}
|
534 |
@media screen and (max-width: 950px) {
|
535 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar {
|
536 |
width: 70px;
|
537 |
}
|
538 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab a {
|
539 |
font-size: 0;
|
540 |
}
|
541 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__title {
|
542 |
font-size: 0;
|
543 |
}
|
544 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-left-navigation-bar ul .wbcr-factory-nav-tab .wbcr-factory-tab__short-description {
|
545 |
display: none !important;
|
546 |
}
|
547 |
+
#WBCR .wbcr-factory-pages-429-impressive-page-template .wbcr-factory-page-inner-wrap {
|
548 |
margin-left: 70px;
|
549 |
}
|
550 |
}
|
libs/factory/pages/templates/assets/css/impressive.page.template.less
CHANGED
@@ -26,6 +26,7 @@
|
|
26 |
|
27 |
.form-group {
|
28 |
padding: 0 20px;
|
|
|
29 |
label {
|
30 |
font-weight: normal;
|
31 |
}
|
@@ -45,6 +46,7 @@
|
|
45 |
span {
|
46 |
display: inline-block;
|
47 |
vertical-align: bottom;
|
|
|
48 |
input[type="checkbox"], input[type="checkbox"]:focus {
|
49 |
outline: none;
|
50 |
}
|
@@ -123,12 +125,15 @@
|
|
123 |
padding: 20px 0 10px 20px;
|
124 |
margin: 30px 0;
|
125 |
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
|
|
|
126 |
&:first-child {
|
127 |
margin-top: 0;
|
128 |
}
|
|
|
129 |
strong {
|
130 |
font-size: 15px;
|
131 |
}
|
|
|
132 |
p {
|
133 |
color: #8c8888;
|
134 |
font-size: 12px;
|
@@ -153,21 +158,26 @@
|
|
153 |
.nav-tab-wrapper, h2.nav-tab-wrapper, h1.nav-tab-wrapper {
|
154 |
border: 0;
|
155 |
}
|
|
|
156 |
.nav-tab-active {
|
157 |
background: #efefef !important;
|
158 |
margin-bottom: -2px !important;
|
159 |
border-bottom: 1px solid #efefef !important;
|
160 |
}
|
|
|
161 |
.nav-tab:first-child {
|
162 |
margin: 0;
|
163 |
}
|
|
|
164 |
.nav-tab:hover {
|
165 |
background: #f7f7f7;
|
166 |
}
|
|
|
167 |
.nav-tab {
|
168 |
border: 2px solid #dedede;
|
169 |
border-bottom: 0;
|
170 |
box-shadow: -1px 0 0 rgba(0, 0, 0, 0.1);
|
|
|
171 |
&:active, &:focus {
|
172 |
box-shadow: none;
|
173 |
outline: none;
|
@@ -204,6 +214,7 @@
|
|
204 |
.wbcr-factory-header-title {
|
205 |
display: inline-block;
|
206 |
vertical-align: middle;
|
|
|
207 |
h2 {
|
208 |
font-size: 18px;
|
209 |
line-height: 30px;
|
@@ -252,10 +263,12 @@
|
|
252 |
min-width: 100px;
|
253 |
background-color: #8bc34a;
|
254 |
color: #fff;
|
|
|
255 |
&:hover {
|
256 |
background: #9dbb7b;
|
257 |
color: #fff;
|
258 |
}
|
|
|
259 |
&:active {
|
260 |
box-shadow: inset -1px 1px 1px rgba(0, 0, 0, 0.3);
|
261 |
}
|
@@ -266,10 +279,12 @@
|
|
266 |
min-width: 200px;
|
267 |
background-color: #9e9e9e;
|
268 |
color: #fff;
|
|
|
269 |
&:hover {
|
270 |
background: #797979;
|
271 |
color: #fff;
|
272 |
}
|
|
|
273 |
&:active {
|
274 |
box-shadow: inset -1px 1px 1px rgba(0, 0, 0, 0.3);
|
275 |
}
|
@@ -288,11 +303,13 @@
|
|
288 |
padding: 0;
|
289 |
margin-bottom: 0;
|
290 |
margin-top: 80px;
|
|
|
291 |
.wbcr-factory-nav-tab {
|
292 |
display: block;
|
293 |
background: #efefef;
|
294 |
//padding: 15px 20px;
|
295 |
margin: 1px 0;
|
|
|
296 |
.wbcr-factory-tab__link {
|
297 |
display: block;
|
298 |
width: 100%;
|
@@ -329,27 +346,83 @@
|
|
329 |
|
330 |
&:hover {
|
331 |
background: #f7f6f6;
|
|
|
332 |
.dashicons {
|
333 |
color: #9a9a9a;
|
334 |
}
|
335 |
}
|
|
|
336 |
&, &:active, &:hover, &:active, &:focus {
|
337 |
outline: 0 !important;
|
338 |
box-shadow: none !important;
|
339 |
}
|
340 |
|
341 |
}
|
|
|
342 |
&.wbcr-factory-active-tab {
|
343 |
background: #fff;
|
|
|
|
|
344 |
a {
|
345 |
color: #ff5722;
|
346 |
font-weight: bold;
|
347 |
-
|
|
|
348 |
.dashicons {
|
349 |
color: #9a9a9a;
|
350 |
}
|
351 |
}
|
352 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
353 |
}
|
354 |
}
|
355 |
}
|
@@ -357,6 +430,7 @@
|
|
357 |
/**
|
358 |
Content sections
|
359 |
*/
|
|
|
360 |
.wbcr-factory-content-section, .wbcr-factory-right-sidebar-section {
|
361 |
display: inline-block;
|
362 |
vertical-align: top;
|
@@ -364,17 +438,21 @@
|
|
364 |
|
365 |
.wbcr-factory-content-section {
|
366 |
width: 74.6%;
|
|
|
367 |
&.wbcr-fullwidth {
|
368 |
width: 100%;
|
369 |
}
|
|
|
370 |
.nav-tab-wrapper {
|
371 |
margin-top: 15px;
|
372 |
}
|
|
|
373 |
.wbcr-factory-content {
|
374 |
background: #f7f7f7;
|
375 |
padding: 0 0 20px 0;
|
376 |
border: 1px solid #dad8d8;
|
377 |
box-shadow: -1px 0px 1px rgba(0, 0, 0, 0.1);
|
|
|
378 |
& > form {
|
379 |
padding-top: 0 !important;
|
380 |
}
|
@@ -396,6 +474,7 @@
|
|
396 |
/**
|
397 |
Widget in the sidebar of the plugin
|
398 |
*/
|
|
|
399 |
.wbcr-factory-sidebar-widget {
|
400 |
display: inline-block;
|
401 |
min-height: 230px;
|
@@ -433,12 +512,15 @@
|
|
433 |
background: #E91E63;
|
434 |
border-radius: 3px;
|
435 |
}
|
|
|
436 |
.wbcr-factory-simple-grey {
|
437 |
background: #E91E63;
|
438 |
}
|
|
|
439 |
.wbcr-factory-simple-red {
|
440 |
background: #9e9e9e;
|
441 |
}
|
|
|
442 |
.wbcr-factory-simple-green {
|
443 |
background: #8bc34a;
|
444 |
}
|
@@ -457,10 +539,12 @@
|
|
457 |
display: block;
|
458 |
margin: 30px auto 0;
|
459 |
outline: none;
|
|
|
460 |
:focus, :active {
|
461 |
box-shadow: none;
|
462 |
}
|
463 |
}
|
|
|
464 |
.wbcr-factory-donation-price {
|
465 |
font-size: 50px;
|
466 |
margin-top: 30px;
|
@@ -480,6 +564,7 @@
|
|
480 |
background: #fdfcf7;
|
481 |
padding: 30px;
|
482 |
border: 1px solid #f3f1e7;
|
|
|
483 |
.dashicons {
|
484 |
width: 50px;
|
485 |
height: 50px;
|
@@ -487,9 +572,11 @@
|
|
487 |
color: #FFC107;
|
488 |
line-height: normal;
|
489 |
}
|
|
|
490 |
h3 {
|
491 |
color: #7b6111;
|
492 |
}
|
|
|
493 |
p {
|
494 |
color: #9e9e9e;
|
495 |
}
|
@@ -509,6 +596,7 @@
|
|
509 |
text-transform: uppercase;
|
510 |
font-weight: bold;
|
511 |
transition: background-color 0.3s, border-color 0.3s, color 0.3s, opacity 0.3s;
|
|
|
512 |
&:hover {
|
513 |
background-color: #ffce3a
|
514 |
}
|
@@ -522,16 +610,19 @@
|
|
522 |
.updated, .alert {
|
523 |
display: none;
|
524 |
}
|
|
|
525 |
h2 {
|
526 |
font-size: 18px;
|
527 |
margin-top: 10px;
|
528 |
}
|
|
|
529 |
.wbcr-factory-confirm-description {
|
530 |
padding: 10px;
|
531 |
background: #ffedeb;
|
532 |
border: 1px solid #ffdfdc;
|
533 |
margin: 15px 0;
|
534 |
}
|
|
|
535 |
.wbcr-factory-confirm-hint {
|
536 |
margin-bottom: 15px;
|
537 |
color: #7b7b7b;
|
@@ -560,14 +651,17 @@
|
|
560 |
.wbcr-factory-content-section {
|
561 |
width: 100%;
|
562 |
}
|
|
|
563 |
.wbcr-factory-right-sidebar-section {
|
564 |
display: none !important;
|
565 |
}
|
|
|
566 |
.wbcr-factory-header-logo {
|
567 |
.dash {
|
568 |
display: none !important;
|
569 |
}
|
570 |
}
|
|
|
571 |
.wbcr-factory-header-title {
|
572 |
display: none !important;
|
573 |
}
|
@@ -586,15 +680,18 @@
|
|
586 |
a {
|
587 |
font-size: 0;
|
588 |
}
|
|
|
589 |
.wbcr-factory-tab__title {
|
590 |
font-size: 0;
|
591 |
}
|
|
|
592 |
.wbcr-factory-tab__short-description {
|
593 |
display: none !important;
|
594 |
}
|
595 |
}
|
596 |
}
|
597 |
}
|
|
|
598 |
.wbcr-factory-page-inner-wrap {
|
599 |
margin-left: 70px;
|
600 |
}
|
26 |
|
27 |
.form-group {
|
28 |
padding: 0 20px;
|
29 |
+
|
30 |
label {
|
31 |
font-weight: normal;
|
32 |
}
|
46 |
span {
|
47 |
display: inline-block;
|
48 |
vertical-align: bottom;
|
49 |
+
|
50 |
input[type="checkbox"], input[type="checkbox"]:focus {
|
51 |
outline: none;
|
52 |
}
|
125 |
padding: 20px 0 10px 20px;
|
126 |
margin: 30px 0;
|
127 |
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
|
128 |
+
|
129 |
&:first-child {
|
130 |
margin-top: 0;
|
131 |
}
|
132 |
+
|
133 |
strong {
|
134 |
font-size: 15px;
|
135 |
}
|
136 |
+
|
137 |
p {
|
138 |
color: #8c8888;
|
139 |
font-size: 12px;
|
158 |
.nav-tab-wrapper, h2.nav-tab-wrapper, h1.nav-tab-wrapper {
|
159 |
border: 0;
|
160 |
}
|
161 |
+
|
162 |
.nav-tab-active {
|
163 |
background: #efefef !important;
|
164 |
margin-bottom: -2px !important;
|
165 |
border-bottom: 1px solid #efefef !important;
|
166 |
}
|
167 |
+
|
168 |
.nav-tab:first-child {
|
169 |
margin: 0;
|
170 |
}
|
171 |
+
|
172 |
.nav-tab:hover {
|
173 |
background: #f7f7f7;
|
174 |
}
|
175 |
+
|
176 |
.nav-tab {
|
177 |
border: 2px solid #dedede;
|
178 |
border-bottom: 0;
|
179 |
box-shadow: -1px 0 0 rgba(0, 0, 0, 0.1);
|
180 |
+
|
181 |
&:active, &:focus {
|
182 |
box-shadow: none;
|
183 |
outline: none;
|
214 |
.wbcr-factory-header-title {
|
215 |
display: inline-block;
|
216 |
vertical-align: middle;
|
217 |
+
|
218 |
h2 {
|
219 |
font-size: 18px;
|
220 |
line-height: 30px;
|
263 |
min-width: 100px;
|
264 |
background-color: #8bc34a;
|
265 |
color: #fff;
|
266 |
+
|
267 |
&:hover {
|
268 |
background: #9dbb7b;
|
269 |
color: #fff;
|
270 |
}
|
271 |
+
|
272 |
&:active {
|
273 |
box-shadow: inset -1px 1px 1px rgba(0, 0, 0, 0.3);
|
274 |
}
|
279 |
min-width: 200px;
|
280 |
background-color: #9e9e9e;
|
281 |
color: #fff;
|
282 |
+
|
283 |
&:hover {
|
284 |
background: #797979;
|
285 |
color: #fff;
|
286 |
}
|
287 |
+
|
288 |
&:active {
|
289 |
box-shadow: inset -1px 1px 1px rgba(0, 0, 0, 0.3);
|
290 |
}
|
303 |
padding: 0;
|
304 |
margin-bottom: 0;
|
305 |
margin-top: 80px;
|
306 |
+
|
307 |
.wbcr-factory-nav-tab {
|
308 |
display: block;
|
309 |
background: #efefef;
|
310 |
//padding: 15px 20px;
|
311 |
margin: 1px 0;
|
312 |
+
|
313 |
.wbcr-factory-tab__link {
|
314 |
display: block;
|
315 |
width: 100%;
|
346 |
|
347 |
&:hover {
|
348 |
background: #f7f6f6;
|
349 |
+
|
350 |
.dashicons {
|
351 |
color: #9a9a9a;
|
352 |
}
|
353 |
}
|
354 |
+
|
355 |
&, &:active, &:hover, &:active, &:focus {
|
356 |
outline: 0 !important;
|
357 |
box-shadow: none !important;
|
358 |
}
|
359 |
|
360 |
}
|
361 |
+
|
362 |
&.wbcr-factory-active-tab {
|
363 |
background: #fff;
|
364 |
+
border-left: 5px solid #ff5722;
|
365 |
+
|
366 |
a {
|
367 |
color: #ff5722;
|
368 |
font-weight: bold;
|
369 |
+
|
370 |
+
|
371 |
.dashicons {
|
372 |
color: #9a9a9a;
|
373 |
}
|
374 |
}
|
375 |
}
|
376 |
+
|
377 |
+
.wbcr-factory-submenu {
|
378 |
+
padding: 0;
|
379 |
+
margin: 0;
|
380 |
+
|
381 |
+
li {
|
382 |
+
margin: 1px 0 0;
|
383 |
+
padding: 0;
|
384 |
+
|
385 |
+
a {
|
386 |
+
display: block;
|
387 |
+
font-weight: normal;
|
388 |
+
color: #222;
|
389 |
+
border: 0;
|
390 |
+
margin: 0;
|
391 |
+
padding: 5px 5px 5px 30px;
|
392 |
+
background: #f5f5f5;
|
393 |
+
text-decoration: none;
|
394 |
+
outline: none;
|
395 |
+
|
396 |
+
&:focus, &:link {
|
397 |
+
outline: 0 !important;
|
398 |
+
text-shadow: none !important;
|
399 |
+
}
|
400 |
+
|
401 |
+
.dashicons {
|
402 |
+
color: #9a9a9a;
|
403 |
+
font-size: 13px;
|
404 |
+
border: 0;
|
405 |
+
-moz-transform: scaleX(-1);
|
406 |
+
-webkit-transform: scaleX(-1);
|
407 |
+
-o-transform: scaleX(-1);
|
408 |
+
transform: scaleX(-1);
|
409 |
+
-ms-filter: fliph;
|
410 |
+
filter: fliph;
|
411 |
+
}
|
412 |
+
|
413 |
+
&.wbcr-factory-tab-active {
|
414 |
+
background: #fff;
|
415 |
+
color: #ff5722;
|
416 |
+
font-weight: 600;
|
417 |
+
|
418 |
+
|
419 |
+
.dashicons {
|
420 |
+
color: #ff5722;
|
421 |
+
}
|
422 |
+
}
|
423 |
+
}
|
424 |
+
}
|
425 |
+
}
|
426 |
}
|
427 |
}
|
428 |
}
|
430 |
/**
|
431 |
Content sections
|
432 |
*/
|
433 |
+
|
434 |
.wbcr-factory-content-section, .wbcr-factory-right-sidebar-section {
|
435 |
display: inline-block;
|
436 |
vertical-align: top;
|
438 |
|
439 |
.wbcr-factory-content-section {
|
440 |
width: 74.6%;
|
441 |
+
|
442 |
&.wbcr-fullwidth {
|
443 |
width: 100%;
|
444 |
}
|
445 |
+
|
446 |
.nav-tab-wrapper {
|
447 |
margin-top: 15px;
|
448 |
}
|
449 |
+
|
450 |
.wbcr-factory-content {
|
451 |
background: #f7f7f7;
|
452 |
padding: 0 0 20px 0;
|
453 |
border: 1px solid #dad8d8;
|
454 |
box-shadow: -1px 0px 1px rgba(0, 0, 0, 0.1);
|
455 |
+
|
456 |
& > form {
|
457 |
padding-top: 0 !important;
|
458 |
}
|
474 |
/**
|
475 |
Widget in the sidebar of the plugin
|
476 |
*/
|
477 |
+
|
478 |
.wbcr-factory-sidebar-widget {
|
479 |
display: inline-block;
|
480 |
min-height: 230px;
|
512 |
background: #E91E63;
|
513 |
border-radius: 3px;
|
514 |
}
|
515 |
+
|
516 |
.wbcr-factory-simple-grey {
|
517 |
background: #E91E63;
|
518 |
}
|
519 |
+
|
520 |
.wbcr-factory-simple-red {
|
521 |
background: #9e9e9e;
|
522 |
}
|
523 |
+
|
524 |
.wbcr-factory-simple-green {
|
525 |
background: #8bc34a;
|
526 |
}
|
539 |
display: block;
|
540 |
margin: 30px auto 0;
|
541 |
outline: none;
|
542 |
+
|
543 |
:focus, :active {
|
544 |
box-shadow: none;
|
545 |
}
|
546 |
}
|
547 |
+
|
548 |
.wbcr-factory-donation-price {
|
549 |
font-size: 50px;
|
550 |
margin-top: 30px;
|
564 |
background: #fdfcf7;
|
565 |
padding: 30px;
|
566 |
border: 1px solid #f3f1e7;
|
567 |
+
|
568 |
.dashicons {
|
569 |
width: 50px;
|
570 |
height: 50px;
|
572 |
color: #FFC107;
|
573 |
line-height: normal;
|
574 |
}
|
575 |
+
|
576 |
h3 {
|
577 |
color: #7b6111;
|
578 |
}
|
579 |
+
|
580 |
p {
|
581 |
color: #9e9e9e;
|
582 |
}
|
596 |
text-transform: uppercase;
|
597 |
font-weight: bold;
|
598 |
transition: background-color 0.3s, border-color 0.3s, color 0.3s, opacity 0.3s;
|
599 |
+
|
600 |
&:hover {
|
601 |
background-color: #ffce3a
|
602 |
}
|
610 |
.updated, .alert {
|
611 |
display: none;
|
612 |
}
|
613 |
+
|
614 |
h2 {
|
615 |
font-size: 18px;
|
616 |
margin-top: 10px;
|
617 |
}
|
618 |
+
|
619 |
.wbcr-factory-confirm-description {
|
620 |
padding: 10px;
|
621 |
background: #ffedeb;
|
622 |
border: 1px solid #ffdfdc;
|
623 |
margin: 15px 0;
|
624 |
}
|
625 |
+
|
626 |
.wbcr-factory-confirm-hint {
|
627 |
margin-bottom: 15px;
|
628 |
color: #7b7b7b;
|
651 |
.wbcr-factory-content-section {
|
652 |
width: 100%;
|
653 |
}
|
654 |
+
|
655 |
.wbcr-factory-right-sidebar-section {
|
656 |
display: none !important;
|
657 |
}
|
658 |
+
|
659 |
.wbcr-factory-header-logo {
|
660 |
.dash {
|
661 |
display: none !important;
|
662 |
}
|
663 |
}
|
664 |
+
|
665 |
.wbcr-factory-header-title {
|
666 |
display: none !important;
|
667 |
}
|
680 |
a {
|
681 |
font-size: 0;
|
682 |
}
|
683 |
+
|
684 |
.wbcr-factory-tab__title {
|
685 |
font-size: 0;
|
686 |
}
|
687 |
+
|
688 |
.wbcr-factory-tab__short-description {
|
689 |
display: none !important;
|
690 |
}
|
691 |
}
|
692 |
}
|
693 |
}
|
694 |
+
|
695 |
.wbcr-factory-page-inner-wrap {
|
696 |
margin-left: 70px;
|
697 |
}
|
libs/factory/pages/templates/impressive-page.class.php
CHANGED
@@ -10,15 +10,15 @@
|
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
-
if
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
-
if
|
18 |
/**
|
19 |
-
* Class
|
20 |
*/
|
21 |
-
abstract class
|
22 |
|
23 |
/**
|
24 |
* Тип страницы:
|
@@ -112,86 +112,54 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
112 |
public $page_menu = [];
|
113 |
|
114 |
/**
|
115 |
-
* @param
|
116 |
*/
|
117 |
-
public function __construct(
|
118 |
-
|
119 |
-
|
|
|
120 |
|
121 |
-
if
|
122 |
-
$this->network
|
123 |
$this->menu_target = 'settings.php';
|
124 |
$this->capabilitiy = 'manage_network';
|
125 |
}
|
126 |
|
127 |
-
parent::__construct(
|
128 |
|
129 |
-
$this->title_plugin_action_link = __(
|
130 |
|
131 |
$this->setPageMenu();
|
132 |
}
|
133 |
|
134 |
-
/**
|
135 |
-
* Set page menu item
|
136 |
-
*/
|
137 |
-
public function setPageMenu() {
|
138 |
-
global $factory_impressive_page_menu;
|
139 |
-
|
140 |
-
$dashicon = ( ! empty( $this->page_menu_dashicon ) ) ? ' ' . $this->page_menu_dashicon : '';
|
141 |
-
$short_description = ( ! empty( $this->page_menu_short_description ) ) ? ' ' . $this->page_menu_short_description : '';
|
142 |
-
|
143 |
-
if ( is_multisite() && is_network_admin() && ! $this->network ) {
|
144 |
-
return;
|
145 |
-
}
|
146 |
-
|
147 |
-
$factory_impressive_page_menu[ $this->getMenuScope() ][ $this->getResultId() ] = [
|
148 |
-
'type' => $this->type, // page, options
|
149 |
-
'url' => $this->getBaseUrl(),
|
150 |
-
'title' => $this->getPageTitle() . ' <span class="dashicons' . $dashicon . '"></span>',
|
151 |
-
'short_description' => $short_description,
|
152 |
-
'position' => $this->page_menu_position,
|
153 |
-
'parent' => $this->page_parent_page
|
154 |
-
];
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Get page menu items
|
159 |
-
*
|
160 |
-
* @return mixed
|
161 |
-
*/
|
162 |
-
public function getPageMenu() {
|
163 |
-
global $factory_impressive_page_menu;
|
164 |
-
|
165 |
-
return $factory_impressive_page_menu[ $this->getMenuScope() ];
|
166 |
-
}
|
167 |
-
|
168 |
/**
|
169 |
* Requests assets (js and css) for the page.
|
170 |
*
|
171 |
-
* @since 1.0.0
|
172 |
* @return void
|
173 |
-
* @
|
|
|
174 |
*
|
175 |
*/
|
176 |
-
public function assets(
|
|
|
177 |
|
178 |
-
$this->scripts->request(
|
179 |
|
180 |
-
$this->scripts->request(
|
181 |
'control.checkbox',
|
182 |
'control.dropdown',
|
183 |
'bootstrap.tooltip'
|
184 |
-
], 'bootstrap'
|
185 |
|
186 |
-
$this->styles->request(
|
187 |
'bootstrap.core',
|
188 |
'bootstrap.form-group',
|
189 |
'bootstrap.separator',
|
190 |
'control.dropdown',
|
191 |
'control.checkbox'
|
192 |
-
], 'bootstrap'
|
193 |
|
194 |
-
$this->styles->add(
|
195 |
}
|
196 |
|
197 |
/**
|
@@ -199,20 +167,21 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
199 |
*
|
200 |
* @return string
|
201 |
*/
|
202 |
-
public function getPluginTitle()
|
|
|
203 |
/**
|
204 |
* @since 4.0.8 - добавлен
|
205 |
* @since 4.0.9 - является устаревшим
|
206 |
*/
|
207 |
-
$plugin_title =
|
208 |
$this->plugin->getPluginTitle(),
|
209 |
$this->plugin->getPluginName()
|
210 |
-
], '4.0.9', 'wbcr/factory/pages/impressive/plugin_title'
|
211 |
|
212 |
/**
|
213 |
* @since 4.0.9 - является устаревшим
|
214 |
*/
|
215 |
-
$plugin_title = apply_filters(
|
216 |
|
217 |
return $plugin_title;
|
218 |
}
|
@@ -222,24 +191,12 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
222 |
*
|
223 |
* @return string
|
224 |
*/
|
225 |
-
public function getPageUrl()
|
226 |
-
|
227 |
-
* @since 4.0.9 - добавлен
|
228 |
-
*/
|
229 |
-
return apply_filters( 'wbcr/factory/pages/impressive/base_url', $this->getBaseUrl(), $this->plugin->getPluginName(), $this->id );
|
230 |
-
}
|
231 |
-
|
232 |
-
/**
|
233 |
-
* Пространство имен для меню плагина
|
234 |
-
* Можно приклеить меню к другому плагину, просто перезаписав этот метод в дочернем классе
|
235 |
-
*
|
236 |
-
* @return string
|
237 |
-
*/
|
238 |
-
public function getMenuScope() {
|
239 |
/**
|
240 |
* @since 4.0.9 - добавлен
|
241 |
*/
|
242 |
-
return apply_filters(
|
243 |
}
|
244 |
|
245 |
/**
|
@@ -250,10 +207,11 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
250 |
*
|
251 |
* @return mixed|void
|
252 |
*/
|
253 |
-
public function getOption(
|
254 |
-
|
|
|
255 |
|
256 |
-
return $this->plugin->getOption(
|
257 |
}
|
258 |
|
259 |
/**
|
@@ -262,9 +220,10 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
262 |
* @sinve 1.0.0
|
263 |
* @return void
|
264 |
*/
|
265 |
-
public function indexAction()
|
|
|
266 |
$page_menu = $this->getPageMenu();
|
267 |
-
if
|
268 |
$this->showOptions();
|
269 |
} else {
|
270 |
$this->showPage();
|
@@ -277,34 +236,35 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
277 |
* @sinve 4.0.0
|
278 |
* @return void
|
279 |
*/
|
280 |
-
public function flushCacheAndRulesAction()
|
281 |
-
|
|
|
282 |
|
283 |
-
if
|
284 |
-
|
285 |
}
|
286 |
|
287 |
/**
|
288 |
* @since 4.0.1 - является устаревшим
|
289 |
*/
|
290 |
-
|
291 |
$this->plugin->getPluginName(),
|
292 |
$this->getResultId()
|
293 |
-
], '4.0.1', '
|
294 |
|
295 |
/**
|
296 |
* @since 4.0.9 - является устаревшим
|
297 |
*/
|
298 |
-
|
299 |
$this->plugin,
|
300 |
$this
|
301 |
-
], '4.0.9', 'wbcr/factory/pages/impressive/after_form_save'
|
302 |
|
303 |
/**
|
304 |
* @since 4.0.1 - добавлен
|
305 |
* @since 4.0.9 - изменено название экшена, без привязки к версии фреймворка
|
306 |
*/
|
307 |
-
do_action(
|
308 |
|
309 |
$this->afterFormSave();
|
310 |
|
@@ -314,24 +274,25 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
314 |
/**
|
315 |
* @since 4.0.9 - является устаревшим
|
316 |
*/
|
317 |
-
$redirect_args =
|
318 |
|
319 |
/**
|
320 |
* @since 4.0.1 - добавлен
|
321 |
* @since 4.0.9 - изменено название экшена, без привязки к версии фреймворка
|
322 |
*/
|
323 |
-
$redirect_args = apply_filters(
|
324 |
|
325 |
-
$this->redirectToAction(
|
326 |
}
|
327 |
|
328 |
|
329 |
/**
|
330 |
* Вызывается всегда при загрузке страницы, перед опциями формы с типом страницы options
|
331 |
*/
|
332 |
-
protected function warningNotice()
|
|
|
333 |
/*if( WP_CACHE ) {
|
334 |
-
$this->printWarningNotice(__("It seems that a caching/performance plugin is active on this site. Please manually invalidate that plugin's cache after making any changes to the settings below.", '
|
335 |
}*/
|
336 |
// Метод предназначен для вызова в дочернем классе
|
337 |
}
|
@@ -339,13 +300,14 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
339 |
/**
|
340 |
* Вызывается всегда при загрузке страницы, перед опциями формы с типом страницы options
|
341 |
*
|
342 |
-
* @since 4.0.0
|
343 |
-
*
|
344 |
* @param array $notices
|
345 |
*
|
346 |
* @return array
|
|
|
|
|
347 |
*/
|
348 |
-
protected function getActionNotices(
|
|
|
349 |
// Метод предназначен для вызова в дочернем классе
|
350 |
return $notices;
|
351 |
}
|
@@ -353,42 +315,48 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
353 |
/**
|
354 |
* Вызывается перед сохранением опций формы
|
355 |
*
|
356 |
-
* @since 4.0.0
|
357 |
* @return void
|
|
|
358 |
*/
|
359 |
-
protected function beforeFormSave()
|
|
|
360 |
// Метод предназначен для вызова в дочернем классе
|
361 |
}
|
362 |
|
363 |
/**
|
364 |
* Вызывается после сохранением опций формы, когда выполнен сброс кеша и совершен редирект
|
365 |
*
|
366 |
-
* @since 4.0.0
|
367 |
* @return void
|
|
|
368 |
*/
|
369 |
-
protected function afterFormSave()
|
|
|
370 |
// Метод предназначен для вызова в дочернем классе
|
371 |
}
|
372 |
|
373 |
/**
|
374 |
* Вызывается в процессе выполнения сохранения, но после сохранения всех опций
|
375 |
*
|
376 |
-
* @since 4.0.0
|
377 |
* @return void
|
|
|
378 |
*/
|
379 |
-
protected function formSaved()
|
|
|
380 |
// Метод предназначен для вызова в дочернем классе
|
381 |
}
|
382 |
|
383 |
-
public function printWarningNotice(
|
|
|
384 |
echo '<div class="alert alert-warning wbcr-factory-warning-notice"><p><span class="dashicons dashicons-warning"></span> ' . $message . '</p></div>';
|
385 |
}
|
386 |
|
387 |
-
public function printErrorNotice(
|
|
|
388 |
echo '<div class="alert alert-danger wbcr-factory-warning-notice"><p><span class="dashicons dashicons-dismiss"></span> ' . $message . '</p></div>';
|
389 |
}
|
390 |
|
391 |
-
public function printSuccessNotice(
|
|
|
392 |
echo '<div class="alert alert-success wbcr-factory-warning-notice"><p><span class="dashicons dashicons-plus"></span> ' . $message . '</p></div>';
|
393 |
}
|
394 |
|
@@ -396,252 +364,360 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
396 |
* Печатает все зарегистрированные системные уведомления внутри интерфейса плагина
|
397 |
* Типы уведомлений: предупреждения, ошибки, успешные выполнения задач
|
398 |
*/
|
399 |
-
protected function printAllNotices()
|
|
|
400 |
$this->warningNotice();
|
401 |
$this->showActionsNotice();
|
402 |
|
403 |
/**
|
404 |
* @since 4.0.9 - является устаревшим
|
405 |
*/
|
406 |
-
|
407 |
$this->plugin,
|
408 |
$this
|
409 |
-
], '4.0.9', 'wbcr/factory/pages/impressive/print_all_notices'
|
410 |
|
411 |
/**
|
412 |
* @since 4.0.1 - добавлен
|
413 |
* @since 4.0.9 - изменено имя
|
414 |
*/
|
415 |
-
do_action(
|
416 |
}
|
417 |
|
418 |
-
private function showActionsNotice()
|
|
|
419 |
$notices = [
|
420 |
[
|
421 |
'conditions' => [
|
422 |
$this->plugin->getPluginName() . '_saved' => '1'
|
423 |
],
|
424 |
-
'type'
|
425 |
-
'message'
|
426 |
]
|
427 |
];
|
428 |
|
429 |
/**
|
430 |
* @since 4.0.9 - является устаревшим
|
431 |
*/
|
432 |
-
$notices =
|
433 |
$notices,
|
434 |
$this->plugin,
|
435 |
$this->id
|
436 |
-
], '4.0.9', 'wbcr/factory/pages/impressive/actions_notice'
|
437 |
|
438 |
/**
|
439 |
* @since 4.0.1 - добавлен
|
440 |
* @since 4.0.9 - изменено имя
|
441 |
*/
|
442 |
-
$notices = apply_filters(
|
443 |
|
444 |
-
$notices = $this->getActionNotices(
|
445 |
|
446 |
-
foreach
|
447 |
$show_message = true;
|
448 |
|
449 |
-
if
|
450 |
-
foreach
|
451 |
-
if
|
452 |
$show_message = false;
|
453 |
}
|
454 |
}
|
455 |
}
|
456 |
-
if
|
457 |
continue;
|
458 |
}
|
459 |
|
460 |
-
$notice_type = isset(
|
461 |
|
462 |
-
switch
|
463 |
case 'success':
|
464 |
-
$this->printSuccessNotice(
|
465 |
break;
|
466 |
case 'danger':
|
467 |
-
$this->printErrorNotice(
|
468 |
break;
|
469 |
default:
|
470 |
-
$this->printWarningNotice(
|
471 |
break;
|
472 |
}
|
473 |
}
|
474 |
}
|
475 |
|
476 |
-
|
477 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
478 |
$self_page_id = $this->getResultId();
|
479 |
-
$current_page = isset(
|
480 |
|
481 |
-
$parent_page_id = !
|
|
|
|
|
482 |
|
483 |
-
uasort( $page_menu, [ $this, 'pageMenuSort' ] );
|
484 |
?>
|
485 |
-
|
486 |
-
<?php foreach
|
487 |
<?php
|
488 |
-
if
|
489 |
continue;
|
490 |
}
|
491 |
$active_tab = '';
|
492 |
-
if
|
493 |
$active_tab = ' wbcr-factory-active-tab';
|
494 |
}
|
495 |
?>
|
496 |
-
|
497 |
-
|
498 |
-
|
|
|
499 |
<?php echo $page['title'] ?>
|
500 |
-
|
501 |
-
<?php if
|
502 |
-
|
503 |
<?php echo $page['short_description'] ?>
|
504 |
-
|
505 |
<?php endif; ?>
|
506 |
-
|
507 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
508 |
<?php endforeach; ?>
|
509 |
-
|
510 |
<?php
|
511 |
}
|
512 |
|
513 |
-
/**
|
514 |
-
* @param int $a
|
515 |
-
* @param int $b
|
516 |
-
*
|
517 |
-
* @return bool
|
518 |
-
*/
|
519 |
-
protected function pageMenuSort( $a, $b ) {
|
520 |
-
return $a['position'] < $b['position'];
|
521 |
-
}
|
522 |
|
523 |
-
protected function showPageSubMenu()
|
|
|
524 |
$self_page_id = $this->getResultId();
|
525 |
-
$page_menu
|
526 |
-
$current_page = isset(
|
527 |
|
528 |
$page_submenu = [];
|
529 |
-
foreach
|
530 |
-
if
|
531 |
-
$page_parent_id = $this->getResultId(
|
532 |
|
533 |
-
if
|
534 |
-
$page['title']
|
535 |
-
$page_submenu[
|
536 |
}
|
537 |
}
|
538 |
}
|
539 |
|
540 |
-
if
|
541 |
return;
|
542 |
}
|
543 |
|
544 |
-
$get_menu_id
|
545 |
-
$has_parent
|
546 |
-
$parent_page_id = $has_parent ? $this->getResultId(
|
547 |
|
548 |
-
if
|
549 |
$get_menu_id = $parent_page_id;
|
550 |
-
} else if
|
551 |
$get_menu_id = $self_page_id;
|
552 |
}
|
553 |
|
554 |
-
if
|
555 |
return;
|
556 |
}
|
557 |
|
558 |
$unshift = [];
|
559 |
-
if
|
560 |
-
$page_menu[
|
561 |
|
562 |
-
$unshift[
|
563 |
-
$page_submenu[
|
564 |
}
|
565 |
|
566 |
?>
|
567 |
-
|
568 |
-
<?php foreach
|
569 |
<?php
|
570 |
$active_tab = '';
|
571 |
-
if
|
572 |
$active_tab = ' nav-tab-active';
|
573 |
}
|
574 |
?>
|
575 |
-
|
|
|
576 |
<?php echo $page['title'] ?>
|
577 |
-
|
578 |
<?php endforeach; ?>
|
579 |
-
|
580 |
<?php
|
581 |
}
|
582 |
|
583 |
-
protected function showHeader()
|
|
|
584 |
?>
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
<?php if
|
594 |
-
|
595 |
-
<?php if
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
<?php endif; ?>
|
600 |
-
|
601 |
-
<?php do_action(
|
602 |
-
|
603 |
-
<?php if
|
604 |
-
|
605 |
-
|
|
|
|
|
606 |
<?php endif; ?>
|
607 |
-
|
608 |
-
|
609 |
<?php
|
610 |
}
|
611 |
|
612 |
-
protected function isShowRightSidebar()
|
613 |
-
|
|
|
614 |
|
615 |
-
return !
|
616 |
}
|
617 |
|
618 |
-
protected function showRightSidebar()
|
619 |
-
|
|
|
620 |
|
621 |
-
if
|
622 |
return;
|
623 |
}
|
624 |
|
625 |
-
foreach
|
626 |
echo $widget_content;
|
627 |
endforeach;
|
628 |
}
|
629 |
|
630 |
-
protected function showBottomSidebar()
|
631 |
-
|
|
|
632 |
|
633 |
-
if
|
634 |
return;
|
635 |
}
|
636 |
?>
|
637 |
-
|
638 |
-
|
639 |
-
<?php foreach
|
640 |
-
|
641 |
<?= $widget_content ?>
|
642 |
-
|
643 |
<?php endforeach; ?>
|
644 |
-
|
645 |
<?php
|
646 |
}
|
647 |
|
@@ -650,53 +726,55 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
650 |
*
|
651 |
* @return mixed|void
|
652 |
*/
|
653 |
-
protected function getPageWidgets(
|
|
|
654 |
$widgets = [];
|
655 |
|
656 |
/**
|
657 |
* @since 4.0.9 - является устаревшим
|
658 |
*/
|
659 |
-
$widgets =
|
660 |
$widgets,
|
661 |
$position,
|
662 |
$this->plugin,
|
663 |
$this
|
664 |
-
], '4.0.9', 'wbcr/factory/pages/impressive/widgets'
|
665 |
|
666 |
/**
|
667 |
* @since 4.0.1 - добавлен
|
668 |
* @since 4.0.9 - изменено имя
|
669 |
*/
|
670 |
-
$widgets = apply_filters(
|
671 |
|
672 |
return $widgets;
|
673 |
}
|
674 |
|
675 |
-
protected function showOptions()
|
676 |
-
|
677 |
-
|
678 |
-
'
|
679 |
-
|
|
|
680 |
|
681 |
-
$form->setProvider(
|
682 |
|
683 |
$options = $this->getPageOptions();
|
684 |
|
685 |
-
if
|
686 |
-
foreach
|
687 |
|
688 |
-
if
|
689 |
-
if
|
690 |
-
foreach
|
691 |
-
$options[0]['items'][
|
692 |
-
$options[0]['items'][
|
693 |
}
|
694 |
|
695 |
continue;
|
696 |
}
|
697 |
}
|
698 |
|
699 |
-
if
|
700 |
'checkbox',
|
701 |
'textarea',
|
702 |
'integer',
|
@@ -704,38 +782,38 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
704 |
'dropdown',
|
705 |
'list',
|
706 |
'wp-editor'
|
707 |
-
]
|
708 |
-
$options[0]['items'][
|
709 |
-
$options[0]['items'][
|
710 |
}
|
711 |
}
|
712 |
}
|
713 |
|
714 |
-
$form->add(
|
715 |
|
716 |
-
if
|
717 |
|
718 |
-
check_admin_referer(
|
719 |
|
720 |
-
if
|
721 |
-
wp_die(
|
722 |
exit;
|
723 |
}
|
724 |
|
725 |
/**
|
726 |
* @since 4.0.9 - является устаревшим
|
727 |
*/
|
728 |
-
|
729 |
$form,
|
730 |
$this->plugin,
|
731 |
$this
|
732 |
-
], '4.0.9', 'wbcr/factory/pages/impressive/before_form_save'
|
733 |
|
734 |
/**
|
735 |
* @since 4.0.1 - добавлен
|
736 |
* @since 4.0.9 - изменено имя
|
737 |
*/
|
738 |
-
do_action(
|
739 |
|
740 |
$this->beforeFormSave();
|
741 |
|
@@ -744,123 +822,128 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
744 |
/**
|
745 |
* @since 4.0.9 - является устаревшим
|
746 |
*/
|
747 |
-
|
748 |
$form,
|
749 |
$this->plugin,
|
750 |
$this
|
751 |
-
], '4.0.9', 'wbcr/factory/pages/impressive/form_saved'
|
752 |
|
753 |
/**
|
754 |
* @since 4.0.1 - добавлен
|
755 |
* @since 4.0.9 - изменено имя
|
756 |
*/
|
757 |
-
do_action(
|
758 |
|
759 |
$this->formSaved();
|
760 |
|
761 |
-
$this->redirectToAction(
|
762 |
-
'_wpnonce' => wp_create_nonce(
|
763 |
-
]
|
764 |
}
|
765 |
|
766 |
?>
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
<?php $this->showPageMenu() ?>
|
772 |
-
|
773 |
<?php
|
774 |
$min_height = 0;
|
775 |
-
foreach
|
776 |
-
if
|
777 |
$min_height += 77;
|
778 |
}
|
779 |
}
|
780 |
?>
|
781 |
-
|
782 |
-
|
783 |
-
<?php
|
784 |
-
|
785 |
-
|
|
|
786 |
<?php $this->showHeader(); ?>
|
787 |
<?php $this->printAllNotices(); ?>
|
788 |
<?php $form->html(); ?>
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
<?php if
|
793 |
-
|
794 |
<?php $this->showRightSidebar(); ?>
|
795 |
-
|
796 |
<?php endif; ?>
|
797 |
-
|
798 |
-
|
799 |
<?php
|
800 |
-
if
|
801 |
$this->showBottomSidebar();
|
802 |
}
|
803 |
?>
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
<?php
|
809 |
}
|
810 |
|
811 |
-
protected function showPage(
|
812 |
-
|
813 |
-
|
814 |
-
|
|
|
815 |
<?php $this->showHeader(); ?>
|
816 |
-
|
817 |
<?php $this->showPageMenu() ?>
|
818 |
-
|
819 |
<?php
|
820 |
$min_height = 0;
|
821 |
-
foreach
|
822 |
-
if
|
823 |
$min_height += 77;
|
824 |
}
|
825 |
}
|
826 |
?>
|
827 |
-
|
828 |
-
|
829 |
-
<?php
|
830 |
-
|
|
|
831 |
<?php $this->printAllNotices(); ?>
|
832 |
-
<?php if
|
833 |
<?php $this->showPageContent() ?>
|
834 |
<?php else: ?>
|
835 |
<?php echo $content; ?>
|
836 |
<?php endif; ?>
|
837 |
-
|
838 |
-
|
839 |
-
<?php if
|
840 |
-
|
841 |
<?php $this->showRightSidebar(); ?>
|
842 |
-
|
843 |
<?php endif; ?>
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
<?php $this->showBottomSidebar(); ?>
|
848 |
-
|
849 |
-
|
850 |
<?php
|
851 |
}
|
852 |
|
853 |
/**
|
854 |
* @return array
|
855 |
*/
|
856 |
-
public function getPageOptions()
|
|
|
857 |
// используется в классе потомке
|
858 |
}
|
859 |
|
860 |
/**
|
861 |
* @return void
|
862 |
*/
|
863 |
-
public function showPageContent()
|
|
|
864 |
// используется в классе потомке
|
865 |
}
|
866 |
|
@@ -870,26 +953,27 @@ if ( ! class_exists( 'Wbcr_FactoryPages420_ImpressiveThemplate' ) ) {
|
|
870 |
* @sinve 1.0.0
|
871 |
* @return void
|
872 |
*/
|
873 |
-
public function confirmPageTemplate(
|
|
|
874 |
?>
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
<?php if
|
881 |
-
|
882 |
<?php endif; ?>
|
883 |
-
|
884 |
-
<?php foreach
|
885 |
-
|
886 |
<?php echo $action['title'] ?>
|
887 |
-
|
888 |
<?php } ?>
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
<?php
|
894 |
}
|
895 |
}
|
10 |
*/
|
11 |
|
12 |
// Exit if accessed directly
|
13 |
+
if( !defined('ABSPATH') ) {
|
14 |
exit;
|
15 |
}
|
16 |
|
17 |
+
if( !class_exists('Wbcr_FactoryPages429_ImpressiveThemplate') ) {
|
18 |
/**
|
19 |
+
* Class Wbcr_FactoryPages429_ImpressiveThemplate
|
20 |
*/
|
21 |
+
abstract class Wbcr_FactoryPages429_ImpressiveThemplate extends Wbcr_FactoryPages429_AdminPage {
|
22 |
|
23 |
/**
|
24 |
* Тип страницы:
|
112 |
public $page_menu = [];
|
113 |
|
114 |
/**
|
115 |
+
* @param Wbcr_Factory429_Plugin $plugin
|
116 |
*/
|
117 |
+
public function __construct(Wbcr_Factory429_Plugin $plugin)
|
118 |
+
{
|
119 |
+
$this->menuIcon = FACTORY_PAGES_429_URL . '/templates/assets/img/webcraftic-plugin-icon.png';
|
120 |
+
//$allow_multisite = apply_filters('wbcr_factory_429_core_admin_allow_multisite', false);
|
121 |
|
122 |
+
if( is_multisite() && $this->available_for_multisite && $plugin->isNetworkActive() ) {
|
123 |
+
$this->network = true;
|
124 |
$this->menu_target = 'settings.php';
|
125 |
$this->capabilitiy = 'manage_network';
|
126 |
}
|
127 |
|
128 |
+
parent::__construct($plugin);
|
129 |
|
130 |
+
$this->title_plugin_action_link = __('Settings', 'wbcr_factory_pages_429');
|
131 |
|
132 |
$this->setPageMenu();
|
133 |
}
|
134 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
135 |
/**
|
136 |
* Requests assets (js and css) for the page.
|
137 |
*
|
|
|
138 |
* @return void
|
139 |
+
* @since 1.0.0
|
140 |
+
* @see FactoryPages429_AdminPage
|
141 |
*
|
142 |
*/
|
143 |
+
public function assets($scripts, $styles)
|
144 |
+
{
|
145 |
|
146 |
+
$this->scripts->request('jquery');
|
147 |
|
148 |
+
$this->scripts->request([
|
149 |
'control.checkbox',
|
150 |
'control.dropdown',
|
151 |
'bootstrap.tooltip'
|
152 |
+
], 'bootstrap');
|
153 |
|
154 |
+
$this->styles->request([
|
155 |
'bootstrap.core',
|
156 |
'bootstrap.form-group',
|
157 |
'bootstrap.separator',
|
158 |
'control.dropdown',
|
159 |
'control.checkbox'
|
160 |
+
], 'bootstrap');
|
161 |
|
162 |
+
$this->styles->add(FACTORY_PAGES_429_URL . '/templates/assets/css/impressive.page.template.css');
|
163 |
}
|
164 |
|
165 |
/**
|
167 |
*
|
168 |
* @return string
|
169 |
*/
|
170 |
+
public function getPluginTitle()
|
171 |
+
{
|
172 |
/**
|
173 |
* @since 4.0.8 - добавлен
|
174 |
* @since 4.0.9 - является устаревшим
|
175 |
*/
|
176 |
+
$plugin_title = wbcr_factory_429_apply_filters_deprecated('wbcr/factory/imppage/plugin_title', [
|
177 |
$this->plugin->getPluginTitle(),
|
178 |
$this->plugin->getPluginName()
|
179 |
+
], '4.0.9', 'wbcr/factory/pages/impressive/plugin_title');
|
180 |
|
181 |
/**
|
182 |
* @since 4.0.9 - является устаревшим
|
183 |
*/
|
184 |
+
$plugin_title = apply_filters('wbcr/factory/pages/impressive/plugin_title', $plugin_title, $this->plugin->getPluginName());
|
185 |
|
186 |
return $plugin_title;
|
187 |
}
|
191 |
*
|
192 |
* @return string
|
193 |
*/
|
194 |
+
public function getPageUrl()
|
195 |
+
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
196 |
/**
|
197 |
* @since 4.0.9 - добавлен
|
198 |
*/
|
199 |
+
return apply_filters('wbcr/factory/pages/impressive/base_url', $this->getBaseUrl(), $this->plugin->getPluginName(), $this->id);
|
200 |
}
|
201 |
|
202 |
/**
|
207 |
*
|
208 |
* @return mixed|void
|
209 |
*/
|
210 |
+
public function getOption($option_name, $default = false)
|
211 |
+
{
|
212 |
+
_deprecated_function(__METHOD__, '4.0.9', '$this->plugin->getOption()');
|
213 |
|
214 |
+
return $this->plugin->getOption($option_name, $default);
|
215 |
}
|
216 |
|
217 |
/**
|
220 |
* @sinve 1.0.0
|
221 |
* @return void
|
222 |
*/
|
223 |
+
public function indexAction()
|
224 |
+
{
|
225 |
$page_menu = $this->getPageMenu();
|
226 |
+
if( 'options' === $page_menu[$this->getResultId()]['type'] ) {
|
227 |
$this->showOptions();
|
228 |
} else {
|
229 |
$this->showPage();
|
236 |
* @sinve 4.0.0
|
237 |
* @return void
|
238 |
*/
|
239 |
+
public function flushCacheAndRulesAction()
|
240 |
+
{
|
241 |
+
check_admin_referer('wbcr_factory_' . $this->getResultId() . '_flush_action');
|
242 |
|
243 |
+
if( class_exists('WbcrFactoryClearfy221_Helpers') ) {
|
244 |
+
WbcrFactoryClearfy221_Helpers::flushPageCache();
|
245 |
}
|
246 |
|
247 |
/**
|
248 |
* @since 4.0.1 - является устаревшим
|
249 |
*/
|
250 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_imppage_flush_cache', [
|
251 |
$this->plugin->getPluginName(),
|
252 |
$this->getResultId()
|
253 |
+
], '4.0.1', 'wbcr_factory_429_imppage_after_form_save');
|
254 |
|
255 |
/**
|
256 |
* @since 4.0.9 - является устаревшим
|
257 |
*/
|
258 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_imppage_after_form_save', [
|
259 |
$this->plugin,
|
260 |
$this
|
261 |
+
], '4.0.9', 'wbcr/factory/pages/impressive/after_form_save');
|
262 |
|
263 |
/**
|
264 |
* @since 4.0.1 - добавлен
|
265 |
* @since 4.0.9 - изменено название экшена, без привязки к версии фреймворка
|
266 |
*/
|
267 |
+
do_action('wbcr/factory/pages/impressive/after_form_save', $this->plugin, $this);
|
268 |
|
269 |
$this->afterFormSave();
|
270 |
|
274 |
/**
|
275 |
* @since 4.0.9 - является устаревшим
|
276 |
*/
|
277 |
+
$redirect_args = wbcr_factory_429_apply_filters_deprecated('wbcr_factory_429_imppage_after_form_save_redirect_args', [$redirect_args], '4.0.9', 'wbcr/factory/pages/impressive/save_redirect_args');
|
278 |
|
279 |
/**
|
280 |
* @since 4.0.1 - добавлен
|
281 |
* @since 4.0.9 - изменено название экшена, без привязки к версии фреймворка
|
282 |
*/
|
283 |
+
$redirect_args = apply_filters('wbcr/factory/pages/impressive/save_redirect_args', $redirect_args);
|
284 |
|
285 |
+
$this->redirectToAction('index', $redirect_args);
|
286 |
}
|
287 |
|
288 |
|
289 |
/**
|
290 |
* Вызывается всегда при загрузке страницы, перед опциями формы с типом страницы options
|
291 |
*/
|
292 |
+
protected function warningNotice()
|
293 |
+
{
|
294 |
/*if( WP_CACHE ) {
|
295 |
+
$this->printWarningNotice(__("It seems that a caching/performance plugin is active on this site. Please manually invalidate that plugin's cache after making any changes to the settings below.", 'wbcr_factory_pages_429'));
|
296 |
}*/
|
297 |
// Метод предназначен для вызова в дочернем классе
|
298 |
}
|
300 |
/**
|
301 |
* Вызывается всегда при загрузке страницы, перед опциями формы с типом страницы options
|
302 |
*
|
|
|
|
|
303 |
* @param array $notices
|
304 |
*
|
305 |
* @return array
|
306 |
+
* @since 4.0.0
|
307 |
+
*
|
308 |
*/
|
309 |
+
protected function getActionNotices($notices)
|
310 |
+
{
|
311 |
// Метод предназначен для вызова в дочернем классе
|
312 |
return $notices;
|
313 |
}
|
315 |
/**
|
316 |
* Вызывается перед сохранением опций формы
|
317 |
*
|
|
|
318 |
* @return void
|
319 |
+
* @since 4.0.0
|
320 |
*/
|
321 |
+
protected function beforeFormSave()
|
322 |
+
{
|
323 |
// Метод предназначен для вызова в дочернем классе
|
324 |
}
|
325 |
|
326 |
/**
|
327 |
* Вызывается после сохранением опций формы, когда выполнен сброс кеша и совершен редирект
|
328 |
*
|
|
|
329 |
* @return void
|
330 |
+
* @since 4.0.0
|
331 |
*/
|
332 |
+
protected function afterFormSave()
|
333 |
+
{
|
334 |
// Метод предназначен для вызова в дочернем классе
|
335 |
}
|
336 |
|
337 |
/**
|
338 |
* Вызывается в процессе выполнения сохранения, но после сохранения всех опций
|
339 |
*
|
|
|
340 |
* @return void
|
341 |
+
* @since 4.0.0
|
342 |
*/
|
343 |
+
protected function formSaved()
|
344 |
+
{
|
345 |
// Метод предназначен для вызова в дочернем классе
|
346 |
}
|
347 |
|
348 |
+
public function printWarningNotice($message)
|
349 |
+
{
|
350 |
echo '<div class="alert alert-warning wbcr-factory-warning-notice"><p><span class="dashicons dashicons-warning"></span> ' . $message . '</p></div>';
|
351 |
}
|
352 |
|
353 |
+
public function printErrorNotice($message)
|
354 |
+
{
|
355 |
echo '<div class="alert alert-danger wbcr-factory-warning-notice"><p><span class="dashicons dashicons-dismiss"></span> ' . $message . '</p></div>';
|
356 |
}
|
357 |
|
358 |
+
public function printSuccessNotice($message)
|
359 |
+
{
|
360 |
echo '<div class="alert alert-success wbcr-factory-warning-notice"><p><span class="dashicons dashicons-plus"></span> ' . $message . '</p></div>';
|
361 |
}
|
362 |
|
364 |
* Печатает все зарегистрированные системные уведомления внутри интерфейса плагина
|
365 |
* Типы уведомлений: предупреждения, ошибки, успешные выполнения задач
|
366 |
*/
|
367 |
+
protected function printAllNotices()
|
368 |
+
{
|
369 |
$this->warningNotice();
|
370 |
$this->showActionsNotice();
|
371 |
|
372 |
/**
|
373 |
* @since 4.0.9 - является устаревшим
|
374 |
*/
|
375 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_pages_429_imppage_print_all_notices', [
|
376 |
$this->plugin,
|
377 |
$this
|
378 |
+
], '4.0.9', 'wbcr/factory/pages/impressive/print_all_notices');
|
379 |
|
380 |
/**
|
381 |
* @since 4.0.1 - добавлен
|
382 |
* @since 4.0.9 - изменено имя
|
383 |
*/
|
384 |
+
do_action('wbcr/factory/pages/impressive/print_all_notices', $this->plugin, $this);
|
385 |
}
|
386 |
|
387 |
+
private function showActionsNotice()
|
388 |
+
{
|
389 |
$notices = [
|
390 |
[
|
391 |
'conditions' => [
|
392 |
$this->plugin->getPluginName() . '_saved' => '1'
|
393 |
],
|
394 |
+
'type' => 'success',
|
395 |
+
'message' => __('The settings have been updated successfully!', 'wbcr_factory_pages_429') . (WP_CACHE ? '<br>' . __("It seems that a caching/performance plugin is active on this site. Please manually invalidate that plugin's cache after making any changes to the settings below.", 'wbcr_factory_pages_429') : '')
|
396 |
]
|
397 |
];
|
398 |
|
399 |
/**
|
400 |
* @since 4.0.9 - является устаревшим
|
401 |
*/
|
402 |
+
$notices = wbcr_factory_429_apply_filters_deprecated('wbcr_factory_pages_429_imppage_actions_notice', [
|
403 |
$notices,
|
404 |
$this->plugin,
|
405 |
$this->id
|
406 |
+
], '4.0.9', 'wbcr/factory/pages/impressive/actions_notice');
|
407 |
|
408 |
/**
|
409 |
* @since 4.0.1 - добавлен
|
410 |
* @since 4.0.9 - изменено имя
|
411 |
*/
|
412 |
+
$notices = apply_filters('wbcr/factory/pages/impressive/actions_notice', $notices, $this->plugin, $this->id);
|
413 |
|
414 |
+
$notices = $this->getActionNotices($notices);
|
415 |
|
416 |
+
foreach($notices as $key => $notice) {
|
417 |
$show_message = true;
|
418 |
|
419 |
+
if( isset($notice['conditions']) && !empty($notice['conditions']) ) {
|
420 |
+
foreach($notice['conditions'] as $condition_name => $value) {
|
421 |
+
if( !isset($_REQUEST[$condition_name]) || $_REQUEST[$condition_name] != $value ) {
|
422 |
$show_message = false;
|
423 |
}
|
424 |
}
|
425 |
}
|
426 |
+
if( !$show_message ) {
|
427 |
continue;
|
428 |
}
|
429 |
|
430 |
+
$notice_type = isset($notice['type']) ? $notice['type'] : 'success';
|
431 |
|
432 |
+
switch( $notice_type ) {
|
433 |
case 'success':
|
434 |
+
$this->printSuccessNotice($notice['message']);
|
435 |
break;
|
436 |
case 'danger':
|
437 |
+
$this->printErrorNotice($notice['message']);
|
438 |
break;
|
439 |
default:
|
440 |
+
$this->printWarningNotice($notice['message']);
|
441 |
break;
|
442 |
}
|
443 |
}
|
444 |
}
|
445 |
|
446 |
+
/**
|
447 |
+
* Set page menu item
|
448 |
+
*/
|
449 |
+
public function setPageMenu()
|
450 |
+
{
|
451 |
+
global $factory_impressive_page_menu;
|
452 |
+
|
453 |
+
$dashicon = (!empty($this->page_menu_dashicon)) ? ' ' . $this->page_menu_dashicon : '';
|
454 |
+
$short_description = (!empty($this->page_menu_short_description)) ? ' ' . $this->page_menu_short_description : '';
|
455 |
+
|
456 |
+
if( is_multisite() && is_network_admin() && !$this->network ) {
|
457 |
+
return;
|
458 |
+
}
|
459 |
+
|
460 |
+
$factory_impressive_page_menu[$this->getMenuScope()][$this->getResultId()] = [
|
461 |
+
'type' => $this->type, // page, options
|
462 |
+
'url' => $this->getBaseUrl(),
|
463 |
+
'title' => $this->getPageTitle() . ' <span class="dashicons' . $dashicon . '"></span>',
|
464 |
+
'short_description' => $short_description,
|
465 |
+
'position' => $this->page_menu_position,
|
466 |
+
'parent' => $this->page_parent_page
|
467 |
+
];
|
468 |
+
}
|
469 |
+
|
470 |
+
/**
|
471 |
+
* Пространство имен для меню плагина
|
472 |
+
* Можно приклеить меню к другому плагину, просто перезаписав этот метод в дочернем классе
|
473 |
+
*
|
474 |
+
* @return string
|
475 |
+
*/
|
476 |
+
public function getMenuScope()
|
477 |
+
{
|
478 |
+
/**
|
479 |
+
* @since 4.0.9 - добавлен
|
480 |
+
*/
|
481 |
+
return apply_filters('wbcr/factory/pages/impressive/menu_scope', $this->plugin->getPluginName(), $this->plugin->getPluginName(), $this->id);
|
482 |
+
}
|
483 |
+
|
484 |
+
/**
|
485 |
+
* Get page menu items
|
486 |
+
*
|
487 |
+
* @return mixed
|
488 |
+
*/
|
489 |
+
protected function getPageMenu()
|
490 |
+
{
|
491 |
+
global $factory_impressive_page_menu;
|
492 |
+
|
493 |
+
return $factory_impressive_page_menu[$this->getMenuScope()];
|
494 |
+
}
|
495 |
+
|
496 |
+
protected function getPageSubMenu($current_page = null)
|
497 |
+
{
|
498 |
+
$page_menu = $this->getPageMenu();
|
499 |
+
|
500 |
+
$page_submenu = [];
|
501 |
+
foreach($page_menu as $page_screen => $page) {
|
502 |
+
if( !empty($page['parent']) ) {
|
503 |
+
$page_parent_id = $this->getResultId($page['parent']);
|
504 |
+
|
505 |
+
if( isset($page_menu[$page_parent_id]) ) {
|
506 |
+
$page['title'] = strip_tags($page['title']);
|
507 |
+
$page_submenu[$page_parent_id][$page_screen] = $page;
|
508 |
+
}
|
509 |
+
}
|
510 |
+
}
|
511 |
+
|
512 |
+
return isset($page_submenu[$current_page]) ? $page_submenu[$current_page] : null;
|
513 |
+
}
|
514 |
+
|
515 |
+
/**
|
516 |
+
* @param int $a
|
517 |
+
* @param int $b
|
518 |
+
*
|
519 |
+
* @return bool
|
520 |
+
*/
|
521 |
+
protected function pageMenuSort($a, $b)
|
522 |
+
{
|
523 |
+
return $a['position'] < $b['position'];
|
524 |
+
}
|
525 |
+
|
526 |
+
protected function showPageMenu()
|
527 |
+
{
|
528 |
+
$page_menu = $this->getPageMenu();
|
529 |
$self_page_id = $this->getResultId();
|
530 |
+
$current_page = isset($page_menu[$self_page_id]) ? $page_menu[$self_page_id] : null;
|
531 |
|
532 |
+
$parent_page_id = !empty($current_page['parent']) ? $this->getResultId($current_page['parent']) : null;
|
533 |
+
|
534 |
+
uasort($page_menu, [$this, 'pageMenuSort']);
|
535 |
|
|
|
536 |
?>
|
537 |
+
<ul>
|
538 |
+
<?php foreach($page_menu as $page_screen => $page): ?>
|
539 |
<?php
|
540 |
+
if( !empty($page['parent']) ) {
|
541 |
continue;
|
542 |
}
|
543 |
$active_tab = '';
|
544 |
+
if( $page_screen == $self_page_id || $page_screen == $parent_page_id ) {
|
545 |
$active_tab = ' wbcr-factory-active-tab';
|
546 |
}
|
547 |
?>
|
548 |
+
<li class="wbcr-factory-nav-tab<?php echo esc_attr($active_tab) ?>">
|
549 |
+
<a href="<?php echo $page['url'] ?>" id="<?php echo esc_attr($page_screen) ?>-tab"
|
550 |
+
class="wbcr-factory-tab__link">
|
551 |
+
<div class="wbcr-factory-tab__title">
|
552 |
<?php echo $page['title'] ?>
|
553 |
+
</div>
|
554 |
+
<?php if( !empty($page['short_description']) ): ?>
|
555 |
+
<div class="wbcr-factory-tab__short-description">
|
556 |
<?php echo $page['short_description'] ?>
|
557 |
+
</div>
|
558 |
<?php endif; ?>
|
559 |
+
</a>
|
560 |
+
|
561 |
+
<?php
|
562 |
+
$sub_menu = $this->getPageSubMenu($page_screen);
|
563 |
+
if( !empty($sub_menu) && $page_screen == $self_page_id || $page_screen == $parent_page_id ):
|
564 |
+
?>
|
565 |
+
<ul class="wbcr-factory-submenu">
|
566 |
+
<?php foreach($sub_menu as $s_menu_page_screen => $s_menu_page): ?>
|
567 |
+
<?php
|
568 |
+
$active_tab = '';
|
569 |
+
if( $s_menu_page_screen == $this->getResultId() ) {
|
570 |
+
$active_tab = 'wbcr-factory-tab-active';
|
571 |
+
}
|
572 |
+
?>
|
573 |
+
<li>
|
574 |
+
<a href="<?php echo $s_menu_page['url'] ?>" id="<?= esc_attr($s_menu_page_screen) ?>-tab"
|
575 |
+
class="<?= esc_attr($active_tab) ?>">
|
576 |
+
<span class="dashicons dashicons-editor-break"></span><?php echo $s_menu_page['title'] ?>
|
577 |
+
</a>
|
578 |
+
</li>
|
579 |
+
<?php endforeach; ?>
|
580 |
+
</ul>
|
581 |
+
<?php endif; ?>
|
582 |
+
</li>
|
583 |
+
|
584 |
+
|
585 |
<?php endforeach; ?>
|
586 |
+
</ul>
|
587 |
<?php
|
588 |
}
|
589 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
590 |
|
591 |
+
protected function showPageSubMenu()
|
592 |
+
{
|
593 |
$self_page_id = $this->getResultId();
|
594 |
+
$page_menu = $this->getPageMenu();
|
595 |
+
$current_page = isset($page_menu[$self_page_id]) ? $page_menu[$self_page_id] : null;
|
596 |
|
597 |
$page_submenu = [];
|
598 |
+
foreach($page_menu as $page_screen => $page) {
|
599 |
+
if( !empty($page['parent']) ) {
|
600 |
+
$page_parent_id = $this->getResultId($page['parent']);
|
601 |
|
602 |
+
if( isset($page_menu[$page_parent_id]) ) {
|
603 |
+
$page['title'] = strip_tags($page['title']);
|
604 |
+
$page_submenu[$page_parent_id][$page_screen] = $page;
|
605 |
}
|
606 |
}
|
607 |
}
|
608 |
|
609 |
+
if( empty($page_submenu) ) {
|
610 |
return;
|
611 |
}
|
612 |
|
613 |
+
$get_menu_id = null;
|
614 |
+
$has_parent = !empty($current_page) && !empty($current_page['parent']);
|
615 |
+
$parent_page_id = $has_parent ? $this->getResultId($current_page['parent']) : null;
|
616 |
|
617 |
+
if( ($has_parent && isset($page_submenu[$parent_page_id])) ) {
|
618 |
$get_menu_id = $parent_page_id;
|
619 |
+
} else if( !$has_parent && isset($page_submenu[$self_page_id]) ) {
|
620 |
$get_menu_id = $self_page_id;
|
621 |
}
|
622 |
|
623 |
+
if( !isset($page_submenu[$get_menu_id]) ) {
|
624 |
return;
|
625 |
}
|
626 |
|
627 |
$unshift = [];
|
628 |
+
if( isset($page_menu[$get_menu_id]) ) {
|
629 |
+
$page_menu[$get_menu_id]['title'] = strip_tags($page_menu[$get_menu_id]['title']);
|
630 |
|
631 |
+
$unshift[$get_menu_id][$get_menu_id] = $page_menu[$get_menu_id];
|
632 |
+
$page_submenu[$get_menu_id] = $unshift[$get_menu_id] + $page_submenu[$get_menu_id];
|
633 |
}
|
634 |
|
635 |
?>
|
636 |
+
<h2 class="nav-tab-wrapper wp-clearfix">
|
637 |
+
<?php foreach((array)$page_submenu[$get_menu_id] as $page_screen => $page): ?>
|
638 |
<?php
|
639 |
$active_tab = '';
|
640 |
+
if( $page_screen == $this->getResultId() ) {
|
641 |
$active_tab = ' nav-tab-active';
|
642 |
}
|
643 |
?>
|
644 |
+
<a href="<?php echo $page['url'] ?>" id="<?= esc_attr($page_screen) ?>-tab"
|
645 |
+
class="nav-tab<?= esc_attr($active_tab) ?>">
|
646 |
<?php echo $page['title'] ?>
|
647 |
+
</a>
|
648 |
<?php endforeach; ?>
|
649 |
+
</h2>
|
650 |
<?php
|
651 |
}
|
652 |
|
653 |
+
protected function showHeader()
|
654 |
+
{
|
655 |
?>
|
656 |
+
<style>
|
657 |
+
.updated, .notice, .error {
|
658 |
+
display: none !important;
|
659 |
+
}
|
660 |
+
</style>
|
661 |
+
<div class="wbcr-factory-page-header">
|
662 |
+
<div class="wbcr-factory-header-logo"><?= $this->getPluginTitle(); ?>
|
663 |
+
<span class="version"><?= $this->plugin->getPluginVersion() ?> </span>
|
664 |
+
<?php if( $this->show_page_title ): ?><span class="dash">—</span><?php endif; ?>
|
665 |
+
</div>
|
666 |
+
<?php if( $this->show_page_title ): ?>
|
667 |
+
<div class="wbcr-factory-header-title">
|
668 |
+
<h2><?php _e('Page') ?>: <?= $this->getPageTitle() ?></h2>
|
669 |
+
</div>
|
670 |
<?php endif; ?>
|
671 |
+
<div class="wbcr-factory-control">
|
672 |
+
<?php do_action('wbcr/factory/pages/impressive/header', $this->plugin->getPluginName()) ?>
|
673 |
+
|
674 |
+
<?php if( $this->type == 'options' ): ?>
|
675 |
+
<input name="<?= $this->plugin->getPluginName() ?>_save_action"
|
676 |
+
class="wbcr-factory-button wbcr-factory-type-save" type="submit"
|
677 |
+
value="<?php _e('Save', 'wbcr_factory_pages_429'); ?>">
|
678 |
+
<?php wp_nonce_field('wbcr_factory_' . $this->getResultId() . '_save_action'); ?>
|
679 |
<?php endif; ?>
|
680 |
+
</div>
|
681 |
+
</div>
|
682 |
<?php
|
683 |
}
|
684 |
|
685 |
+
protected function isShowRightSidebar()
|
686 |
+
{
|
687 |
+
$widgets = $this->getPageWidgets('right');
|
688 |
|
689 |
+
return !empty($widgets) && $this->show_right_sidebar_in_options;
|
690 |
}
|
691 |
|
692 |
+
protected function showRightSidebar()
|
693 |
+
{
|
694 |
+
$widgets = $this->getPageWidgets('right');
|
695 |
|
696 |
+
if( empty($widgets) ) {
|
697 |
return;
|
698 |
}
|
699 |
|
700 |
+
foreach($widgets as $widget_content):
|
701 |
echo $widget_content;
|
702 |
endforeach;
|
703 |
}
|
704 |
|
705 |
+
protected function showBottomSidebar()
|
706 |
+
{
|
707 |
+
$widgets = $this->getPageWidgets('bottom');
|
708 |
|
709 |
+
if( empty($widgets) ) {
|
710 |
return;
|
711 |
}
|
712 |
?>
|
713 |
+
<div class="row">
|
714 |
+
<div class="wbcr-factory-top-sidebar">
|
715 |
+
<?php foreach($widgets as $widget_content): ?>
|
716 |
+
<div class="col-sm-4">
|
717 |
<?= $widget_content ?>
|
718 |
+
</div>
|
719 |
<?php endforeach; ?>
|
720 |
+
</div>
|
721 |
<?php
|
722 |
}
|
723 |
|
726 |
*
|
727 |
* @return mixed|void
|
728 |
*/
|
729 |
+
protected function getPageWidgets($position = 'bottom')
|
730 |
+
{
|
731 |
$widgets = [];
|
732 |
|
733 |
/**
|
734 |
* @since 4.0.9 - является устаревшим
|
735 |
*/
|
736 |
+
$widgets = wbcr_factory_429_apply_filters_deprecated('wbcr_factory_pages_429_imppage_get_widgets', [
|
737 |
$widgets,
|
738 |
$position,
|
739 |
$this->plugin,
|
740 |
$this
|
741 |
+
], '4.0.9', 'wbcr/factory/pages/impressive/widgets');
|
742 |
|
743 |
/**
|
744 |
* @since 4.0.1 - добавлен
|
745 |
* @since 4.0.9 - изменено имя
|
746 |
*/
|
747 |
+
$widgets = apply_filters('wbcr/factory/pages/impressive/widgets', $widgets, $position, $this->plugin, $this);
|
748 |
|
749 |
return $widgets;
|
750 |
}
|
751 |
|
752 |
+
protected function showOptions()
|
753 |
+
{
|
754 |
+
$form = new Wbcr_FactoryForms427_Form([
|
755 |
+
'scope' => rtrim($this->plugin->getPrefix(), '_'),
|
756 |
+
'name' => $this->getResultId() . "-options"
|
757 |
+
], $this->plugin);
|
758 |
|
759 |
+
$form->setProvider(new Wbcr_FactoryForms427_OptionsValueProvider($this->plugin));
|
760 |
|
761 |
$options = $this->getPageOptions();
|
762 |
|
763 |
+
if( isset($options[0]) && isset($options[0]['items']) && is_array($options[0]['items']) ) {
|
764 |
+
foreach($options[0]['items'] as $key => $value) {
|
765 |
|
766 |
+
if( $value['type'] == 'div' || $value['type'] == 'more-link' ) {
|
767 |
+
if( isset($options[0]['items'][$key]['items']) && !empty($options[0]['items'][$key]['items']) ) {
|
768 |
+
foreach($options[0]['items'][$key]['items'] as $group_key => $group_value) {
|
769 |
+
$options[0]['items'][$key]['items'][$group_key]['layout']['column-left'] = '4';
|
770 |
+
$options[0]['items'][$key]['items'][$group_key]['layout']['column-right'] = '8';
|
771 |
}
|
772 |
|
773 |
continue;
|
774 |
}
|
775 |
}
|
776 |
|
777 |
+
if( in_array($value['type'], [
|
778 |
'checkbox',
|
779 |
'textarea',
|
780 |
'integer',
|
782 |
'dropdown',
|
783 |
'list',
|
784 |
'wp-editor'
|
785 |
+
]) ) {
|
786 |
+
$options[0]['items'][$key]['layout']['column-left'] = '4';
|
787 |
+
$options[0]['items'][$key]['layout']['column-right'] = '8';
|
788 |
}
|
789 |
}
|
790 |
}
|
791 |
|
792 |
+
$form->add($options);
|
793 |
|
794 |
+
if( isset($_POST[$this->plugin->getPluginName() . '_save_action']) ) {
|
795 |
|
796 |
+
check_admin_referer('wbcr_factory_' . $this->getResultId() . '_save_action');
|
797 |
|
798 |
+
if( !current_user_can('administrator') && !current_user_can($this->capabilitiy) ) {
|
799 |
+
wp_die(__('You do not have permission to edit page.', 'wbcr_factory_pages_429'));
|
800 |
exit;
|
801 |
}
|
802 |
|
803 |
/**
|
804 |
* @since 4.0.9 - является устаревшим
|
805 |
*/
|
806 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_imppage_before_form_save', [
|
807 |
$form,
|
808 |
$this->plugin,
|
809 |
$this
|
810 |
+
], '4.0.9', 'wbcr/factory/pages/impressive/before_form_save');
|
811 |
|
812 |
/**
|
813 |
* @since 4.0.1 - добавлен
|
814 |
* @since 4.0.9 - изменено имя
|
815 |
*/
|
816 |
+
do_action('wbcr/factory/pages/impressive/before_form_save', $form, $this->plugin, $this);
|
817 |
|
818 |
$this->beforeFormSave();
|
819 |
|
822 |
/**
|
823 |
* @since 4.0.9 - является устаревшим
|
824 |
*/
|
825 |
+
wbcr_factory_429_do_action_deprecated('wbcr_factory_429_imppage_form_saved', [
|
826 |
$form,
|
827 |
$this->plugin,
|
828 |
$this
|
829 |
+
], '4.0.9', 'wbcr/factory/pages/impressive/form_saved');
|
830 |
|
831 |
/**
|
832 |
* @since 4.0.1 - добавлен
|
833 |
* @since 4.0.9 - изменено имя
|
834 |
*/
|
835 |
+
do_action('wbcr/factory/pages/impressive/form_saved', $form, $this->plugin, $this);
|
836 |
|
837 |
$this->formSaved();
|
838 |
|
839 |
+
$this->redirectToAction('flush-cache-and-rules', [
|
840 |
+
'_wpnonce' => wp_create_nonce('wbcr_factory_' . $this->getResultId() . '_flush_action')
|
841 |
+
]);
|
842 |
}
|
843 |
|
844 |
?>
|
845 |
+
<div id="WBCR" class="wrap">
|
846 |
+
<div class="wbcr-factory-pages-429-impressive-page-template factory-bootstrap-430 factory-fontawesome-000">
|
847 |
+
<div class="wbcr-factory-options wbcr-factory-options-<?= esc_attr($this->id) ?>">
|
848 |
+
<div class="wbcr-factory-left-navigation-bar">
|
849 |
<?php $this->showPageMenu() ?>
|
850 |
+
</div>
|
851 |
<?php
|
852 |
$min_height = 0;
|
853 |
+
foreach($this->getPageMenu() as $page) {
|
854 |
+
if( !isset($page['parent']) || empty($page['parent']) ) {
|
855 |
$min_height += 77;
|
856 |
}
|
857 |
}
|
858 |
?>
|
859 |
+
<div class="wbcr-factory-page-inner-wrap">
|
860 |
+
<div class="wbcr-factory-content-section<?php if( !$this->isShowRightSidebar() ): echo ' wbcr-fullwidth'; endif ?>">
|
861 |
+
<?php //$this->showPageSubMenu()
|
862 |
+
?>
|
863 |
+
<div class="wbcr-factory-content" style="min-height:<?= $min_height ?>px">
|
864 |
+
<form method="post" class="form-horizontal">
|
865 |
<?php $this->showHeader(); ?>
|
866 |
<?php $this->printAllNotices(); ?>
|
867 |
<?php $form->html(); ?>
|
868 |
+
</form>
|
869 |
+
</div>
|
870 |
+
</div>
|
871 |
+
<?php if( $this->isShowRightSidebar() ): ?>
|
872 |
+
<div class="wbcr-factory-right-sidebar-section">
|
873 |
<?php $this->showRightSidebar(); ?>
|
874 |
+
</div>
|
875 |
<?php endif; ?>
|
876 |
+
</div>
|
877 |
+
</div>
|
878 |
<?php
|
879 |
+
if( $this->show_bottom_sidebar ) {
|
880 |
$this->showBottomSidebar();
|
881 |
}
|
882 |
?>
|
883 |
+
<div class="clearfix"></div>
|
884 |
+
</div>
|
885 |
+
</div>
|
886 |
+
</div>
|
887 |
<?php
|
888 |
}
|
889 |
|
890 |
+
protected function showPage($content = null)
|
891 |
+
{ ?>
|
892 |
+
<div id="WBCR" class="wrap">
|
893 |
+
<div class="wbcr-factory-pages-429-impressive-page-template factory-bootstrap-430 factory-fontawesome-000">
|
894 |
+
<div class="wbcr-factory-page wbcr-factory-page-<?= $this->id ?>">
|
895 |
<?php $this->showHeader(); ?>
|
896 |
+
<div class="wbcr-factory-left-navigation-bar">
|
897 |
<?php $this->showPageMenu() ?>
|
898 |
+
</div>
|
899 |
<?php
|
900 |
$min_height = 0;
|
901 |
+
foreach($this->getPageMenu() as $page) {
|
902 |
+
if( !isset($page['parent']) || empty($page['parent']) ) {
|
903 |
$min_height += 77;
|
904 |
}
|
905 |
}
|
906 |
?>
|
907 |
+
<div class="wbcr-factory-page-inner-wrap">
|
908 |
+
<div class="wbcr-factory-content-section<?php if( !$this->isShowRightSidebar() ): echo ' wbcr-fullwidth'; endif ?>">
|
909 |
+
<?php //$this->showPageSubMenu()
|
910 |
+
?>
|
911 |
+
<div class="wbcr-factory-content" style="min-height:<?= $min_height ?>px">
|
912 |
<?php $this->printAllNotices(); ?>
|
913 |
+
<?php if( empty($content) ): ?>
|
914 |
<?php $this->showPageContent() ?>
|
915 |
<?php else: ?>
|
916 |
<?php echo $content; ?>
|
917 |
<?php endif; ?>
|
918 |
+
</div>
|
919 |
+
</div>
|
920 |
+
<?php if( $this->isShowRightSidebar() ): ?>
|
921 |
+
<div class="wbcr-factory-right-sidebar-section" style="min-height:<?= $min_height ?>px">
|
922 |
<?php $this->showRightSidebar(); ?>
|
923 |
+
</div>
|
924 |
<?php endif; ?>
|
925 |
+
</div>
|
926 |
+
</div>
|
927 |
+
<div class="clearfix"></div>
|
928 |
<?php $this->showBottomSidebar(); ?>
|
929 |
+
</div>
|
930 |
+
</div>
|
931 |
<?php
|
932 |
}
|
933 |
|
934 |
/**
|
935 |
* @return array
|
936 |
*/
|
937 |
+
public function getPageOptions()
|
938 |
+
{
|
939 |
// используется в классе потомке
|
940 |
}
|
941 |
|
942 |
/**
|
943 |
* @return void
|
944 |
*/
|
945 |
+
public function showPageContent()
|
946 |
+
{
|
947 |
// используется в классе потомке
|
948 |
}
|
949 |
|
953 |
* @sinve 1.0.0
|
954 |
* @return void
|
955 |
*/
|
956 |
+
public function confirmPageTemplate($data)
|
957 |
+
{
|
958 |
?>
|
959 |
+
<div id="WBCR" class="wrap">
|
960 |
+
<div class="wbcr-factory-pages-429-impressive-page-template factory-bootstrap-430 factory-fontawesome-000">
|
961 |
+
<div id="wbcr-factory-confirm-dialog">
|
962 |
+
<h2><?php echo $data['title'] ?></h2>
|
963 |
+
<p class="wbcr-factory-confirm-description"><?php echo $data['description'] ?></p>
|
964 |
+
<?php if( isset($data['hint']) ): ?>
|
965 |
+
<p class="wbcr-factory-confirm-hint"><?php echo $data['hint'] ?></p>
|
966 |
<?php endif; ?>
|
967 |
+
<div class='wbcr-factory-confirm-actions'>
|
968 |
+
<?php foreach($data['actions'] as $action) { ?>
|
969 |
+
<a href='<?php echo $action['url'] ?>' class='<?php echo $action['class'] ?>'>
|
970 |
<?php echo $action['title'] ?>
|
971 |
+
</a>
|
972 |
<?php } ?>
|
973 |
+
</div>
|
974 |
+
</div>
|
975 |
+
</div>
|
976 |
+
</div>
|
977 |
<?php
|
978 |
}
|
979 |
}
|
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_Factory429_Update {
|
8 |
|
9 |
public function install()
|
10 |
{
|
readme.txt
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
Tags: hide admin notices, hide updates nags, hide nags, disable notices, disable update nags, disable nags, disable admin notices
|
3 |
Contributors: webcraftic, alexkovalevv, creativemotion
|
4 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VDX7JNTQPNPFW
|
5 |
-
Requires at least: 4.
|
6 |
-
Tested up to: 5.
|
7 |
-
Requires PHP: 5.
|
8 |
Stable tag: trunk
|
9 |
License: GPLv2
|
10 |
|
@@ -54,6 +54,14 @@ If you want to help with the translation, please contact me through this site or
|
|
54 |
3. Notifications panel (optional)
|
55 |
|
56 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
= 1.1.1 =
|
58 |
* Added: Compatibility with Learndash
|
59 |
* Added: Compatibility with Wordpress 4.2 - 5.x
|
2 |
Tags: hide admin notices, hide updates nags, hide nags, disable notices, disable update nags, disable nags, disable admin notices
|
3 |
Contributors: webcraftic, alexkovalevv, creativemotion
|
4 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VDX7JNTQPNPFW
|
5 |
+
Requires at least: 4.8
|
6 |
+
Tested up to: 5.4
|
7 |
+
Requires PHP: 5.6
|
8 |
Stable tag: trunk
|
9 |
License: GPLv2
|
10 |
|
54 |
3. Notifications panel (optional)
|
55 |
|
56 |
== Changelog ==
|
57 |
+
= 1.1.3 (01.07.2020) =
|
58 |
+
* Removed: Ads notices and dashboard widget
|
59 |
+
* Fixed: Minor bugs
|
60 |
+
|
61 |
+
= 1.1.2 (23.06.2020) =
|
62 |
+
* Added: Compatibility with Wordpress 5.4
|
63 |
+
* Fixed: Minor bugs
|
64 |
+
|
65 |
= 1.1.1 =
|
66 |
* Added: Compatibility with Learndash
|
67 |
* Added: Compatibility with Wordpress 4.2 - 5.x
|